{"version":3,"file":"7241_03bf889feec81682b2c8.bundle.js","mappings":"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,GAC5B,OAAOrK,EAASoD,KAAKiH,GAAS,SAAUM,GACtC,OAAOJ,EAAQI,IAAyB,IAAhBA,EAAK5H,MAC/B,GACF,CAGqB6H,CAAcH,IAEL,mBAAjBA,EACFA,IAEF,EACT,EAeII,EAHe,SAAU3K,GAC3B,OAZkB,SAAUA,EAAQmK,GACpC,IAAIS,EAAcnK,EAAoBT,GAClC4K,IACFT,EAAUG,EAAoBM,IAEhC,IAAIC,EAAoBpK,EAA0BT,GAClD,OAAI6K,EACK,GAAGL,OAAOL,GAASK,OAAOF,EAAoBO,IAEhDV,CACT,CAESW,CAAc9K,EArjCd,CACL,CACE,MACA,kBAEF,CACE,MACA,eAEF,CACE,KACA,kBAEF,CACE,MACA,aAEF,CACE,OACA,aAEF,CACE,MACA,cAEF,CACE,MACA,YAEF,CACE,MACA,kBAEF,CACE,MACA,mBAEF,CACE,OACA,mBAEF,CACE,OACA,kBAEF,CACE,MACA,cAEF,CACE,MACA,cAEF,CACE,OACA,UAEF,CACE,OACA,oBAEF,CACE,OACA,kBAEF,CACE,OACA,oBAEF,CACE,MACA,gBAEF,CACE,MACA,kBAEF,CACE,MACA,qBAEF,CACE,OACA,6CAEF,CACE,OACA,8CAEF,CACE,MACA,2BAEF,CACE,MACA,4BAEF,CACE,OACA,8BAEF,CACE,OACA,+BAEF,CACE,OACA,8BAEF,CACE,OACA,+BAEF,CACE,OACA,+BAEF,CACE,OACA,+BAEF,CACE,KACA,kBAEF,CACE,KACA,qBAEF,CACE,OACA,yBAEF,CACE,OACA,4BAEF,CACE,OACA,WAEF,CACE,OACA,WAEF,CACE,MACA,UAEF,CACE,OACA,YAEF,CACE,MACA,iBAEF,CACE,MACA,cAEF,CACE,MACA,aAEF,CACE,MACA,6BAEF,CACE,MACA,wBAEF,CACE,MACA,qBAEF,CACE,MACA,eAEF,CACE,MACA,eAEF,CACE,OACA,cAEF,CACE,MACA,mBAEF,CACE,MACA,iBAEF,CACE,OACA,kBAEF,CACE,MACA,uBAEF,CACE,MACA,mBAEF,CACE,MACA,mBAEF,CACE,MACA,qBAEF,CACE,MACA,wBAEF,CACE,MACA,qBAEF,CACE,MACA,2BAEF,CACE,MACA,qBAEF,CACE,OACA,YAEF,CACE,OACA,kBAEF,CACE,OACA,YAEF,CACE,OACA,eAEF,CACE,OACA,cAEF,CACE,OACA,0BAEF,CACE,OACA,mBAEF,CACE,OACA,gBAEF,CACE,OACA,gBAEF,CACE,OACA,cAEF,CACE,OACA,qBAEF,CACE,OACA,sBAEF,CACE,OACA,iBAEF,CACE,OACA,eAEF,CACE,OACA,cAEF,CACE,MACA,YAEF,CACE,OACA,gBAEF,CACE,OACA,SAEF,CACE,OACA,wBAEF,CACE,OACA,WAEF,CACE,OACA,gBAEF,CACE,OACA,YAEF,CACE,OACA,uBAEF,CACE,OACA,qBAEF,CACE,OACA,mBAEF,CACE,OACA,SAEF,CACE,MACA,gBAEF,CACE,MACA,WAEF,CACE,MACA,8BAEF,CACE,MACA,+BAEF,CACE,OACA,UAEF,CACE,OACA,iBAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,kBAEF,CACE,MACA,aAEF,CACE,MACA,iBAEF,CACE,MACA,kBAEF,CACE,MACA,cAEF,CACE,MACA,eAEF,CACE,MACA,eAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,kBAEF,CACE,MACA,iBAEF,CACE,MACA,cAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,kBAEF,CACE,MACA,iBAEF,CACE,MACA,cAEF,CACE,MACA,OAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,kBAEF,CACE,MACA,aAEF,CACE,MACA,iBAEF,CACE,MACA,aAEF,CACE,MACA,cAEF,CACE,MACA,eAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,kBAEF,CACE,MACA,iBAEF,CACE,MACA,cAEF,CACE,MACA,aAEF,CACE,MACA,iBAEF,CACE,MACA,cAEF,CACE,MACA,SAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,kBAEF,CACE,MACA,aAEF,CACE,MACA,iBAEF,CACE,MACA,kBAEF,CACE,MACA,cAEF,CACE,MACA,eAEF,CACE,MACA,eAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,kBAEF,CACE,MACA,iBAEF,CACE,MACA,cAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,kBAEF,CACE,MACA,iBAEF,CACE,MACA,cAEF,CACE,MACA,OAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,kBAEF,CACE,MACA,aAEF,CACE,MACA,iBAEF,CACE,MACA,WAEF,CACE,MACA,YAEF,CACE,MACA,eAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,kBAEF,CACE,MACA,iBAEF,CACE,MACA,cAEF,CACE,MACA,aAEF,CACE,MACA,SAEF,CACE,MACA,iBAEF,CACE,MACA,cAEF,CACE,MACA,SAEF,CACE,MACA,QAEF,CACE,MACA,SAEF,CACE,MACA,SAEF,CACE,MACA,WAEF,CACE,MACA,QAEF,CACE,MACA,OAEF,CACE,MACA,SAEF,CACE,MACA,QAEF,CACE,MACA,SAEF,CACE,MACA,UAEF,CACE,MACA,MAEF,CACE,MACA,MAEF,CACE,MACA,MAEF,CACE,MACA,WAEF,CACE,MACA,MAEF,CACE,MACA,OAEF,CACE,MACA,SAEF,CACE,MACA,OAEF,CACE,MACA,WAEF,CACE,MACA,OAEF,CACE,MACA,OAEF,CACE,MACA,OAEF,CACE,MACA,SAEF,CACE,MACA,SAEF,CACE,MACA,QAEF,CACE,MACA,SAEF,CACE,MACA,SAEF,CACE,MACA,WAEF,CACE,MACA,QAEF,CACE,MACA,OAEF,CACE,MACA,SAEF,CACE,MACA,QAEF,CACE,MACA,SAEF,CACE,MACA,UAEF,CACE,MACA,MAEF,CACE,MACA,MAEF,CACE,MACA,MAEF,CACE,MACA,WAEF,CACE,MACA,MAEF,CACE,MACA,OAEF,CACE,MACA,eAEF,CACE,MACA,SAEF,CACE,MACA,OAEF,CACE,MACA,WAEF,CACE,MACA,OAEF,CACE,MACA,OAEF,CACE,MACA,OAEF,CACE,MACA,SAEF,CACE,OACA,eAEF,CACE,MACA,aAEF,CACE,OACA,oBAEF,CACE,MACA,yBAEF,CACE,OACA,iBAEF,CACE,OACA,kBAEF,CACE,OACA,mBAEF,CACE,OACA,iBAEF,CACE,OACA,oBAEF,CACE,OACA,mBAEF,CACE,OACA,oBAEF,CACE,OACA,mBAEF,CACE,OACA,0BAEF,CACE,OACA,wBAEF,CACE,OACA,2BAEF,CACE,OACA,0BAEF,CACE,OACA,2BAEF,CACE,OACA,aAEF,CACE,OACA,aAEF,CACE,OACA,eAEF,CACE,OACA,mBAEF,CACE,OACA,yBAEF,CACE,OACA,2BAEF,CACE,OACA,gBAEF,CACE,OACA,iBAEF,CACE,OACA,iBAEF,CACE,OACA,gBAEF,CACE,OACA,gBAEF,CACE,OACA,iBAEF,CACE,OACA,cAEF,CACE,OACA,eAEF,CACE,OACA,+BAEF,CACE,OACA,gCAEF,CACE,OACA,WAEF,CACE,OACA,oBAEF,CACE,OACA,mBAEF,CACE,OACA,oBAEF,CACE,OACA,sBAEF,CACE,OACA,YAEF,CACE,OACA,YAEF,CACE,OACA,cAEF,CACE,OACA,yBAEF,CACE,OACA,qBAEF,CACE,OACA,sBAEF,CACE,OACA,uBA+BN,EAeI+K,EAZM,SAAU/K,GAOlB,MAAO,CACLgL,WAPe,WACf,OAAOL,EAAmB3K,EAC5B,EAMEiL,WALe,SAAUjJ,GACzBjC,EAAmBC,EAAQgC,EAC7B,EAKF,EA0BIkJ,EAvBU,SAAUf,GACtB,IAAIgB,EAAUC,EAAGC,EACbC,EAAQC,KAAKC,IAAIrB,EAAQtH,OAAQ,IACjC4I,EAASF,KAAKG,KAAKvB,EAAQtH,OAASyI,GAExC,IADAH,EAAW,yEACNE,EAAI,EAAGA,EAAII,EAAQJ,IAAK,CAE3B,IADAF,GAAY,OACPC,EAAI,EAAGA,EAAIE,EAAOF,IAAK,CAC1B,IAAIxI,EAAQyI,EAAIC,EAAQF,EACxB,GAAIxI,EAAQuH,EAAQtH,OAAQ,CAC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","sources":["webpack://tumarket/./node_modules/tinymce-i18n/langs/ru.js","webpack://tumarket/./node_modules/tinymce/plugins/advlist/index.js","webpack://tumarket/./node_modules/tinymce/plugins/advlist/plugin.js","webpack://tumarket/./node_modules/tinymce/plugins/anchor/index.js","webpack://tumarket/./node_modules/tinymce/plugins/anchor/plugin.js","webpack://tumarket/./node_modules/tinymce/plugins/autolink/index.js","webpack://tumarket/./node_modules/tinymce/plugins/autolink/plugin.js","webpack://tumarket/./node_modules/tinymce/plugins/charmap/index.js","webpack://tumarket/./node_modules/tinymce/plugins/charmap/plugin.js","webpack://tumarket/./node_modules/tinymce/plugins/code/index.js","webpack://tumarket/./node_modules/tinymce/plugins/code/plugin.js","webpack://tumarket/./node_modules/tinymce/plugins/colorpicker/index.js","webpack://tumarket/./node_modules/tinymce/plugins/colorpicker/plugin.js","webpack://tumarket/./node_modules/tinymce/plugins/emoticons/index.js","webpack://tumarket/./node_modules/tinymce/plugins/emoticons/plugin.js","webpack://tumarket/./node_modules/tinymce/plugins/fullscreen/index.js","webpack://tumarket/./node_modules/tinymce/plugins/fullscreen/plugin.js","webpack://tumarket/./node_modules/tinymce/plugins/hr/index.js","webpack://tumarket/./node_modules/tinymce/plugins/hr/plugin.js","webpack://tumarket/./node_modules/tinymce/plugins/image/index.js","webpack://tumarket/./node_modules/tinymce/plugins/image/plugin.js","webpack://tumarket/./node_modules/tinymce/plugins/insertdatetime/index.js","webpack://tumarket/./node_modules/tinymce/plugins/insertdatetime/plugin.js","webpack://tumarket/./node_modules/tinymce/plugins/link/index.js","webpack://tumarket/./node_modules/tinymce/plugins/link/plugin.js","webpack://tumarket/./node_modules/tinymce/plugins/lists/index.js","webpack://tumarket/./node_modules/tinymce/plugins/lists/plugin.js","webpack://tumarket/./node_modules/tinymce/plugins/media/index.js","webpack://tumarket/./node_modules/tinymce/plugins/media/plugin.js","webpack://tumarket/./node_modules/tinymce/plugins/pagebreak/index.js","webpack://tumarket/./node_modules/tinymce/plugins/pagebreak/plugin.js","webpack://tumarket/./node_modules/tinymce/plugins/paste/index.js","webpack://tumarket/./node_modules/tinymce/plugins/paste/plugin.js","webpack://tumarket/./node_modules/tinymce/plugins/preview/index.js","webpack://tumarket/./node_modules/tinymce/plugins/preview/plugin.js","webpack://tumarket/./node_modules/tinymce/plugins/print/index.js","webpack://tumarket/./node_modules/tinymce/plugins/print/plugin.js","webpack://tumarket/./node_modules/tinymce/plugins/searchreplace/index.js","webpack://tumarket/./node_modules/tinymce/plugins/searchreplace/plugin.js","webpack://tumarket/./node_modules/tinymce/plugins/table/index.js","webpack://tumarket/./node_modules/tinymce/plugins/table/plugin.js","webpack://tumarket/./node_modules/tinymce/plugins/textcolor/index.js","webpack://tumarket/./node_modules/tinymce/plugins/textcolor/plugin.js","webpack://tumarket/./node_modules/tinymce/plugins/visualblocks/index.js","webpack://tumarket/./node_modules/tinymce/plugins/visualblocks/plugin.js","webpack://tumarket/./node_modules/tinymce/themes/modern/index.js","webpack://tumarket/./node_modules/tinymce/themes/modern/theme.js","webpack://tumarket/./node_modules/tinymce/tinymce.js"],"sourcesContent":["tinymce.addI18n('ru',{\n\"Redo\": \"\\u041e\\u0442\\u043c\\u0435\\u043d\\u0438\\u0442\\u044c\",\n\"Undo\": \"\\u0412\\u0435\\u0440\\u043d\\u0443\\u0442\\u044c\",\n\"Cut\": \"\\u0412\\u044b\\u0440\\u0435\\u0437\\u0430\\u0442\\u044c\",\n\"Copy\": \"\\u041a\\u043e\\u043f\\u0438\\u0440\\u043e\\u0432\\u0430\\u0442\\u044c\",\n\"Paste\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c\",\n\"Select all\": \"\\u0412\\u044b\\u0434\\u0435\\u043b\\u0438\\u0442\\u044c \\u0432\\u0441\\u0435\",\n\"New document\": \"\\u041d\\u043e\\u0432\\u044b\\u0439 \\u0434\\u043e\\u043a\\u0443\\u043c\\u0435\\u043d\\u0442\",\n\"Ok\": \"\\u041e\\u043a\",\n\"Cancel\": \"\\u041e\\u0442\\u043c\\u0435\\u043d\\u0438\\u0442\\u044c\",\n\"Visual aids\": \"\\u041f\\u043e\\u043a\\u0430\\u0437\\u044b\\u0432\\u0430\\u0442\\u044c \\u043a\\u043e\\u043d\\u0442\\u0443\\u0440\\u044b\",\n\"Bold\": \"\\u041f\\u043e\\u043b\\u0443\\u0436\\u0438\\u0440\\u043d\\u044b\\u0439\",\n\"Italic\": \"\\u041a\\u0443\\u0440\\u0441\\u0438\\u0432\",\n\"Underline\": \"\\u041f\\u043e\\u0434\\u0447\\u0435\\u0440\\u043a\\u043d\\u0443\\u0442\\u044b\\u0439\",\n\"Strikethrough\": \"\\u0417\\u0430\\u0447\\u0435\\u0440\\u043a\\u043d\\u0443\\u0442\\u044b\\u0439\",\n\"Superscript\": \"\\u0412\\u0435\\u0440\\u0445\\u043d\\u0438\\u0439 \\u0438\\u043d\\u0434\\u0435\\u043a\\u0441\",\n\"Subscript\": \"\\u041d\\u0438\\u0436\\u043d\\u0438\\u0439 \\u0438\\u043d\\u0434\\u0435\\u043a\\u0441\",\n\"Clear formatting\": \"\\u041e\\u0447\\u0438\\u0441\\u0442\\u0438\\u0442\\u044c \\u0444\\u043e\\u0440\\u043c\\u0430\\u0442\",\n\"Align left\": \"\\u041f\\u043e \\u043b\\u0435\\u0432\\u043e\\u043c\\u0443 \\u043a\\u0440\\u0430\\u044e\",\n\"Align center\": \"\\u041f\\u043e \\u0446\\u0435\\u043d\\u0442\\u0440\\u0443\",\n\"Align right\": \"\\u041f\\u043e \\u043f\\u0440\\u0430\\u0432\\u043e\\u043c\\u0443 \\u043a\\u0440\\u0430\\u044e\",\n\"Justify\": \"\\u041f\\u043e \\u0448\\u0438\\u0440\\u0438\\u043d\\u0435\",\n\"Bullet list\": \"\\u041c\\u0430\\u0440\\u043a\\u0438\\u0440\\u043e\\u0432\\u0430\\u043d\\u043d\\u044b\\u0439 \\u0441\\u043f\\u0438\\u0441\\u043e\\u043a\",\n\"Numbered list\": \"\\u041d\\u0443\\u043c\\u0435\\u0440\\u043e\\u0432\\u0430\\u043d\\u043d\\u044b\\u0439 \\u0441\\u043f\\u0438\\u0441\\u043e\\u043a\",\n\"Decrease indent\": \"\\u0423\\u043c\\u0435\\u043d\\u044c\\u0448\\u0438\\u0442\\u044c \\u043e\\u0442\\u0441\\u0442\\u0443\\u043f\",\n\"Increase indent\": \"\\u0423\\u0432\\u0435\\u043b\\u0438\\u0447\\u0438\\u0442\\u044c \\u043e\\u0442\\u0441\\u0442\\u0443\\u043f\",\n\"Close\": \"\\u0417\\u0430\\u043a\\u0440\\u044b\\u0442\\u044c\",\n\"Formats\": \"\\u0424\\u043e\\u0440\\u043c\\u0430\\u0442\",\n\"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\\/C\\/V keyboard shortcuts instead.\": \"\\u0412\\u0430\\u0448 \\u0431\\u0440\\u0430\\u0443\\u0437\\u0435\\u0440 \\u043d\\u0435 \\u043f\\u043e\\u0434\\u0434\\u0435\\u0440\\u0436\\u0438\\u0432\\u0430\\u0435\\u0442 \\u043f\\u0440\\u044f\\u043c\\u043e\\u0439 \\u0434\\u043e\\u0441\\u0442\\u0443\\u043f \\u043a \\u0431\\u0443\\u0444\\u0435\\u0440\\u0443 \\u043e\\u0431\\u043c\\u0435\\u043d\\u0430. \\u041f\\u043e\\u0436\\u0430\\u043b\\u0443\\u0439\\u0441\\u0442\\u0430, \\u0438\\u0441\\u043f\\u043e\\u043b\\u044c\\u0437\\u0443\\u0439\\u0442\\u0435 \\u0441\\u043b\\u0435\\u0434\\u0443\\u044e\\u0449\\u0438\\u0435 \\u0441\\u043e\\u0447\\u0435\\u0442\\u0430\\u043d\\u0438\\u044f \\u043a\\u043b\\u0430\\u0432\\u0438\\u0448: Ctrl+X\\/C\\/V.\",\n\"Headers\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043a\\u0438\",\n\"Header 1\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 1\",\n\"Header 2\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 2\",\n\"Header 3\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 3\",\n\"Header 4\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 4\",\n\"Header 5\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 5\",\n\"Header 6\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 6\",\n\"Headings\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043a\\u0438\",\n\"Heading 1\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 1\",\n\"Heading 2\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 2\",\n\"Heading 3\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 3\",\n\"Heading 4\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 4\",\n\"Heading 5\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 5\",\n\"Heading 6\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a 6\",\n\"Preformatted\": \"\\u041f\\u0440\\u0435\\u0434\\u0432\\u0430\\u0440\\u0438\\u0442\\u0435\\u043b\\u044c\\u043d\\u043e\\u0435 \\u0444\\u043e\\u0440\\u043c\\u0430\\u0442\\u0438\\u0440\\u043e\\u0432\\u0430\\u043d\\u0438\\u0435\",\n\"Div\": \"\\u0411\\u043b\\u043e\\u043a\",\n\"Pre\": \"\\u041f\\u0440\\u0435\\u0434\\u0432\\u0430\\u0440\\u0438\\u0442\\u0435\\u043b\\u044c\\u043d\\u043e\\u0435 \\u0444\\u043e\\u0440\\u043c\\u0430\\u0442\\u0438\\u0440\\u043e\\u0432\\u0430\\u043d\\u0438\\u0435\",\n\"Code\": \"\\u041a\\u043e\\u0434\",\n\"Paragraph\": \"\\u041f\\u0430\\u0440\\u0430\\u0433\\u0440\\u0430\\u0444\",\n\"Blockquote\": \"\\u0426\\u0438\\u0442\\u0430\\u0442\\u0430\",\n\"Inline\": \"\\u0421\\u0442\\u0440\\u043e\\u0447\\u043d\\u044b\\u0435\",\n\"Blocks\": \"\\u0411\\u043b\\u043e\\u043a\\u0438\",\n\"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u043a\\u0430 \\u043e\\u0441\\u0443\\u0449\\u0435\\u0441\\u0442\\u0432\\u043b\\u044f\\u0435\\u0442\\u0441\\u044f \\u0432 \\u0432\\u0438\\u0434\\u0435 \\u043f\\u0440\\u043e\\u0441\\u0442\\u043e\\u0433\\u043e \\u0442\\u0435\\u043a\\u0441\\u0442\\u0430, \\u043f\\u043e\\u043a\\u0430 \\u043d\\u0435 \\u043e\\u0442\\u043a\\u043b\\u044e\\u0447\\u0438\\u0442\\u044c \\u0434\\u0430\\u043d\\u043d\\u0443\\u044e \\u043e\\u043f\\u0446\\u0438\\u044e.\",\n\"Font Family\": \"\\u0428\\u0440\\u0438\\u0444\\u0442\",\n\"Font Sizes\": \"\\u0420\\u0430\\u0437\\u043c\\u0435\\u0440 \\u0448\\u0440\\u0438\\u0444\\u0442\\u0430\",\n\"Class\": \"\\u041a\\u043b\\u0430\\u0441\\u0441\",\n\"Browse for an image\": \"\\u0412\\u044b\\u0431\\u043e\\u0440 \\u0438\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u044f\",\n\"OR\": \"\\u0418\\u041b\\u0418\",\n\"Drop an image here\": \"\\u041f\\u0435\\u0440\\u0435\\u0442\\u0430\\u0449\\u0438\\u0442\\u0435 \\u0438\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435 \\u0441\\u044e\\u0434\\u0430\",\n\"Upload\": \"\\u0417\\u0430\\u0433\\u0440\\u0443\\u0437\\u0438\\u0442\\u044c\",\n\"Block\": \"\\u0411\\u043b\\u043e\\u043a\",\n\"Align\": \"\\u0412\\u044b\\u0440\\u0430\\u0432\\u043d\\u0438\\u0432\\u0430\\u043d\\u0438\\u0435\",\n\"Default\": \"\\u0421\\u0442\\u0430\\u043d\\u0434\\u0430\\u0440\\u0442\\u043d\\u044b\\u0439\",\n\"Circle\": \"\\u041e\\u043a\\u0440\\u0443\\u0436\\u043d\\u043e\\u0441\\u0442\\u0438\",\n\"Disc\": \"\\u041a\\u0440\\u0443\\u0433\\u0438\",\n\"Square\": \"\\u041a\\u0432\\u0430\\u0434\\u0440\\u0430\\u0442\\u044b\",\n\"Lower Alpha\": \"\\u0421\\u0442\\u0440\\u043e\\u0447\\u043d\\u044b\\u0435 \\u043b\\u0430\\u0442\\u0438\\u043d\\u0441\\u043a\\u0438\\u0435 \\u0431\\u0443\\u043a\\u0432\\u044b\",\n\"Lower Greek\": \"\\u0421\\u0442\\u0440\\u043e\\u0447\\u043d\\u044b\\u0435 \\u0433\\u0440\\u0435\\u0447\\u0435\\u0441\\u043a\\u0438\\u0435 \\u0431\\u0443\\u043a\\u0432\\u044b\",\n\"Lower Roman\": \"\\u0421\\u0442\\u0440\\u043e\\u0447\\u043d\\u044b\\u0435 \\u0440\\u0438\\u043c\\u0441\\u043a\\u0438\\u0435 \\u0446\\u0438\\u0444\\u0440\\u044b\",\n\"Upper Alpha\": \"\\u0417\\u0430\\u0433\\u043b\\u0430\\u0432\\u043d\\u044b\\u0435 \\u043b\\u0430\\u0442\\u0438\\u043d\\u0441\\u043a\\u0438\\u0435 \\u0431\\u0443\\u043a\\u0432\\u044b\",\n\"Upper Roman\": \"\\u0417\\u0430\\u0433\\u043b\\u0430\\u0432\\u043d\\u044b\\u0435 \\u0440\\u0438\\u043c\\u0441\\u043a\\u0438\\u0435 \\u0446\\u0438\\u0444\\u0440\\u044b\",\n\"Anchor\": \"\\u042f\\u043a\\u043e\\u0440\\u044c\",\n\"Name\": \"\\u0418\\u043c\\u044f\",\n\"Id\": \"Id\",\n\"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.\": \"Id \\u0434\\u043e\\u043b\\u0436\\u0435\\u043d \\u043d\\u0430\\u0447\\u0438\\u043d\\u0430\\u0442\\u044c\\u0441\\u044f \\u0441 \\u0431\\u0443\\u043a\\u0432\\u044b, \\u043f\\u0440\\u043e\\u0434\\u043e\\u043b\\u0436\\u0430\\u0442\\u044c\\u0441\\u044f \\u0442\\u043e\\u043b\\u044c\\u043a\\u043e \\u0441 \\u0431\\u0443\\u043a\\u0432\\u044b, \\u0446\\u0438\\u0444\\u0440\\u044b, \\u0442\\u0438\\u0440\\u0435, \\u0442\\u043e\\u0447\\u043a\\u0438, \\u0434\\u0432\\u043e\\u0435\\u0442\\u043e\\u0447\\u0438\\u044f \\u0438\\u043b\\u0438 \\u043f\\u043e\\u0434\\u0447\\u0435\\u0440\\u043a\\u0438\\u0432\\u0430\\u043d\\u0438\\u044f.\",\n\"You have unsaved changes are you sure you want to navigate away?\": \"\\u0423 \\u0432\\u0430\\u0441 \\u0435\\u0441\\u0442\\u044c \\u043d\\u0435 \\u0441\\u043e\\u0445\\u0440\\u0430\\u043d\\u0435\\u043d\\u043d\\u044b\\u0435 \\u0438\\u0437\\u043c\\u0435\\u043d\\u0435\\u043d\\u0438\\u044f. \\u0412\\u044b \\u0443\\u0432\\u0435\\u0440\\u0435\\u043d\\u044b, \\u0447\\u0442\\u043e \\u0445\\u043e\\u0442\\u0438\\u0442\\u0435 \\u0443\\u0439\\u0442\\u0438?\",\n\"Restore last draft\": \"\\u0412\\u043e\\u0441\\u0441\\u0442\\u0430\\u043d\\u043e\\u0432\\u043b\\u0435\\u043d\\u0438\\u0435 \\u043f\\u043e\\u0441\\u043b\\u0435\\u0434\\u043d\\u0435\\u0433\\u043e \\u043f\\u0440\\u043e\\u0435\\u043a\\u0442\\u0430\",\n\"Special character\": \"\\u0421\\u043f\\u0435\\u0446\\u0438\\u0430\\u043b\\u044c\\u043d\\u044b\\u0435 \\u0441\\u0438\\u043c\\u0432\\u043e\\u043b\\u044b\",\n\"Source code\": \"\\u0418\\u0441\\u0445\\u043e\\u0434\\u043d\\u044b\\u0439 \\u043a\\u043e\\u0434\",\n\"Insert\\/Edit code sample\": \"\\u0414\\u043e\\u0431\\u0430\\u0432\\u0438\\u0442\\u044c\\/\\u0418\\u0437\\u043c\\u0435\\u043d\\u0438\\u0442\\u044c \\u043f\\u0440\\u0438\\u043c\\u0435\\u0440 \\u043a\\u043e\\u0434\\u0430\",\n\"Language\": \"\\u042f\\u0437\\u044b\\u043a\",\n\"Code sample\": \"\\u041f\\u0440\\u0438\\u043c\\u0435\\u0440 \\u043a\\u043e\\u0434\\u0430\",\n\"Color\": \"\\u0426\\u0432\\u0435\\u0442\",\n\"R\": \"R\",\n\"G\": \"G\",\n\"B\": \"B\",\n\"Left to right\": \"\\u041d\\u0430\\u043f\\u0440\\u0430\\u0432\\u043b\\u0435\\u043d\\u0438\\u0435 \\u0441\\u043b\\u0435\\u0432\\u0430 \\u043d\\u0430\\u043f\\u0440\\u0430\\u0432\\u043e\",\n\"Right to left\": \"\\u041d\\u0430\\u043f\\u0440\\u0430\\u0432\\u043b\\u0435\\u043d\\u0438\\u0435 \\u0441\\u043f\\u0440\\u0430\\u0432\\u0430 \\u043d\\u0430\\u043b\\u0435\\u0432\\u043e\",\n\"Emoticons\": \"\\u0414\\u043e\\u0431\\u0430\\u0432\\u0438\\u0442\\u044c \\u0441\\u043c\\u0430\\u0439\\u043b\",\n\"Document properties\": \"\\u0421\\u0432\\u043e\\u0439\\u0441\\u0442\\u0432\\u0430 \\u0434\\u043e\\u043a\\u0443\\u043c\\u0435\\u043d\\u0442\\u0430\",\n\"Title\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a\",\n\"Keywords\": \"\\u041a\\u043b\\u044e\\u0447\\u0438\\u0432\\u044b\\u0435 \\u0441\\u043b\\u043e\\u0432\\u0430\",\n\"Description\": \"\\u041e\\u043f\\u0438\\u0441\\u0430\\u043d\\u0438\\u0435\",\n\"Robots\": \"\\u0420\\u043e\\u0431\\u043e\\u0442\\u044b\",\n\"Author\": \"\\u0410\\u0432\\u0442\\u043e\\u0440\",\n\"Encoding\": \"\\u041a\\u043e\\u0434\\u0438\\u0440\\u043e\\u0432\\u043a\\u0430\",\n\"Fullscreen\": \"\\u041f\\u043e\\u043b\\u043d\\u043e\\u044d\\u043a\\u0440\\u0430\\u043d\\u043d\\u044b\\u0439 \\u0440\\u0435\\u0436\\u0438\\u043c\",\n\"Action\": \"\\u0414\\u0435\\u0439\\u0441\\u0442\\u0432\\u0438\\u0435\",\n\"Shortcut\": \"\\u042f\\u0440\\u043b\\u044b\\u043a\",\n\"Help\": \"\\u041f\\u043e\\u043c\\u043e\\u0449\\u044c\",\n\"Address\": \"\\u0410\\u0434\\u0440\\u0435\\u0441\",\n\"Focus to menubar\": \"\\u0424\\u043e\\u043a\\u0443\\u0441 \\u043d\\u0430 \\u043f\\u0430\\u043d\\u0435\\u043b\\u0438 \\u043c\\u0435\\u043d\\u044e\",\n\"Focus to toolbar\": \"\\u0424\\u043e\\u043a\\u0443\\u0441 \\u043d\\u0430 \\u043f\\u0430\\u043d\\u0435\\u043b\\u0438 \\u0438\\u043d\\u0441\\u0442\\u0440\\u0443\\u043c\\u0435\\u043d\\u0442\\u043e\\u0432\",\n\"Focus to element path\": \"\\u0424\\u043e\\u043a\\u0443\\u0441 \\u043d\\u0430 \\u044d\\u043b\\u0435\\u043c\\u0435\\u043d\\u0442\\u0435 \\u043f\\u0443\\u0442\\u0438\",\n\"Focus to contextual toolbar\": \"\\u0424\\u043e\\u043a\\u0443\\u0441 \\u043d\\u0430 \\u043a\\u043e\\u043d\\u0442\\u0435\\u043a\\u0441\\u0442\\u043d\\u043e\\u0439 \\u043f\\u0430\\u043d\\u0435\\u043b\\u0438 \\u0438\\u043d\\u0441\\u0442\\u0440\\u0443\\u043c\\u0435\\u043d\\u0442\\u043e\\u0432\",\n\"Insert link (if link plugin activated)\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u0441\\u0441\\u044b\\u043b\\u043a\\u0443 (\\u0435\\u0441\\u043b\\u0438 \\u043f\\u043b\\u0430\\u0433\\u0438\\u043d link \\u0430\\u043a\\u0442\\u0438\\u0432\\u0438\\u0440\\u043e\\u0432\\u0430\\u043d)\",\n\"Save (if save plugin activated)\": \"\\u0421\\u043e\\u0445\\u0440\\u0430\\u043d\\u0438\\u0442\\u044c (\\u0435\\u0441\\u043b\\u0438 \\u043f\\u043b\\u0430\\u0433\\u0438\\u043d save \\u0430\\u043a\\u0442\\u0438\\u0432\\u0438\\u0440\\u043e\\u0432\\u0430\\u043d)\",\n\"Find (if searchreplace plugin activated)\": \"\\u041d\\u0430\\u0439\\u0442\\u0438 (\\u0435\\u0441\\u043b\\u0438 \\u043f\\u043b\\u0430\\u0433\\u0438\\u043d searchreplace \\u0430\\u043a\\u0442\\u0438\\u0432\\u0438\\u0440\\u043e\\u0432\\u0430\\u043d)\",\n\"Plugins installed ({0}):\": \"\\u0423\\u0441\\u0442\\u0430\\u043d\\u043e\\u0432\\u043b\\u0435\\u043d\\u043d\\u044b\\u0435 \\u043f\\u043b\\u0430\\u0433\\u0438\\u043d\\u044b ({0}):\",\n\"Premium plugins:\": \"\\u041f\\u0440\\u0435\\u043c\\u0438\\u0443\\u043c \\u043f\\u043b\\u0430\\u0433\\u0438\\u043d\\u044b:\",\n\"Learn more...\": \"\\u0423\\u0437\\u043d\\u0430\\u0442\\u044c \\u0431\\u043e\\u043b\\u044c\\u0448\\u0435...\",\n\"You are using {0}\": \"\\u0412\\u044b \\u0438\\u0441\\u043f\\u043e\\u043b\\u044c\\u0437\\u0443\\u0435\\u0442\\u0435 {0}\",\n\"Plugins\": \"\\u041f\\u043b\\u0430\\u0433\\u0438\\u043d\\u044b\",\n\"Handy Shortcuts\": \"\\u0413\\u043e\\u0440\\u044f\\u0447\\u0438\\u0435 \\u043a\\u043b\\u0430\\u0432\\u0438\\u0448\\u0438\",\n\"Horizontal line\": \"\\u0413\\u043e\\u0440\\u0438\\u0437\\u043e\\u043d\\u0442\\u0430\\u043b\\u044c\\u043d\\u0430\\u044f \\u043b\\u0438\\u043d\\u0438\\u044f\",\n\"Insert\\/edit image\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c\\/\\u0440\\u0435\\u0434\\u0430\\u043a\\u0442\\u0438\\u0440\\u043e\\u0432\\u0430\\u0442\\u044c \\u0438\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435\",\n\"Image description\": \"\\u041e\\u043f\\u0438\\u0441\\u0430\\u043d\\u0438\\u0435 \\u0438\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u044f\",\n\"Source\": \"\\u0418\\u0441\\u0442\\u043e\\u0447\\u043d\\u0438\\u043a\",\n\"Dimensions\": \"\\u0420\\u0430\\u0437\\u043c\\u0435\\u0440\",\n\"Constrain proportions\": \"\\u0421\\u043e\\u0445\\u0440\\u0430\\u043d\\u044f\\u0442\\u044c \\u043f\\u0440\\u043e\\u043f\\u043e\\u0440\\u0446\\u0438\\u0438\",\n\"General\": \"\\u041e\\u0431\\u0449\\u0435\\u0435\",\n\"Advanced\": \"\\u0420\\u0430\\u0441\\u0448\\u0438\\u0440\\u0435\\u043d\\u043d\\u044b\\u0435\",\n\"Style\": \"\\u0421\\u0442\\u0438\\u043b\\u044c\",\n\"Vertical space\": \"\\u0412\\u0435\\u0440\\u0442\\u0438\\u043a\\u0430\\u043b\\u044c\\u043d\\u044b\\u0439 \\u0438\\u043d\\u0442\\u0435\\u0440\\u0432\\u0430\\u043b\",\n\"Horizontal space\": \"\\u0413\\u043e\\u0440\\u0438\\u0437\\u043e\\u043d\\u0442\\u0430\\u043b\\u044c\\u043d\\u044b\\u0439 \\u0438\\u043d\\u0442\\u0435\\u0440\\u0432\\u0430\\u043b\",\n\"Border\": \"\\u0420\\u0430\\u043c\\u043a\\u0430\",\n\"Insert image\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u0438\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435\",\n\"Image\": \"\\u0418\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u044f\",\n\"Image list\": \"\\u0421\\u043f\\u0438\\u0441\\u043e\\u043a \\u0438\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0439\",\n\"Rotate counterclockwise\": \"\\u041f\\u043e\\u0432\\u0435\\u0440\\u043d\\u0443\\u0442\\u044c \\u043f\\u0440\\u043e\\u0442\\u0438\\u0432 \\u0447\\u0430\\u0441\\u043e\\u0432\\u043e\\u0439 \\u0441\\u0442\\u0440\\u0435\\u043b\\u043a\\u0438\",\n\"Rotate clockwise\": \"\\u041f\\u043e\\u0432\\u0435\\u0440\\u043d\\u0443\\u0442\\u044c \\u043f\\u043e \\u0447\\u0430\\u0441\\u043e\\u0432\\u043e\\u0439 \\u0441\\u0442\\u0440\\u0435\\u043b\\u043a\\u0435\",\n\"Flip vertically\": \"\\u041e\\u0442\\u0440\\u0430\\u0437\\u0438\\u0442\\u044c \\u043f\\u043e \\u0432\\u0435\\u0440\\u0442\\u0438\\u043a\\u0430\\u043b\\u0438\",\n\"Flip horizontally\": \"\\u041e\\u0442\\u0440\\u0430\\u0437\\u0438\\u0442\\u044c \\u043f\\u043e \\u0433\\u043e\\u0440\\u0438\\u0437\\u043e\\u043d\\u0442\\u0430\\u043b\\u0438\",\n\"Edit image\": \"\\u0420\\u0435\\u0434\\u0430\\u043a\\u0442\\u0438\\u0440\\u043e\\u0432\\u0430\\u0442\\u044c \\u0438\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435\",\n\"Image options\": \"\\u041d\\u0430\\u0441\\u0442\\u0440\\u043e\\u0439\\u043a\\u0438 \\u0438\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u044f\",\n\"Zoom in\": \"\\u041f\\u0440\\u0438\\u0431\\u043b\\u0438\\u0437\\u0438\\u0442\\u044c\",\n\"Zoom out\": \"\\u041e\\u0442\\u0434\\u0430\\u043b\\u0438\\u0442\\u044c\",\n\"Crop\": \"\\u041e\\u0431\\u0440\\u0435\\u0437\\u0430\\u0442\\u044c\",\n\"Resize\": \"\\u0418\\u0437\\u043c\\u0435\\u043d\\u0438\\u0442\\u044c \\u0440\\u0430\\u0437\\u043c\\u0435\\u0440\",\n\"Orientation\": \"\\u041e\\u0440\\u0438\\u0435\\u043d\\u0442\\u0430\\u0446\\u0438\\u044f\",\n\"Brightness\": \"\\u042f\\u0440\\u043a\\u043e\\u0441\\u0442\\u044c\",\n\"Sharpen\": \"\\u0427\\u0435\\u0442\\u043a\\u043e\\u0441\\u0442\\u044c\",\n\"Contrast\": \"\\u041a\\u043e\\u043d\\u0442\\u0440\\u0430\\u0441\\u0442\",\n\"Color levels\": \"\\u0426\\u0432\\u0435\\u0442\\u043e\\u0432\\u044b\\u0435 \\u0443\\u0440\\u043e\\u0432\\u043d\\u0438\",\n\"Gamma\": \"\\u0413\\u0430\\u043c\\u043c\\u0430\",\n\"Invert\": \"\\u0418\\u043d\\u0432\\u0435\\u0440\\u0441\\u0438\\u044f\",\n\"Apply\": \"\\u041f\\u0440\\u0438\\u043c\\u0435\\u043d\\u0438\\u0442\\u044c\",\n\"Back\": \"\\u041d\\u0430\\u0437\\u0430\\u0434\",\n\"Insert date\\/time\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u0434\\u0430\\u0442\\u0443\\/\\u0432\\u0440\\u0435\\u043c\\u044f\",\n\"Date\\/time\": \"\\u0414\\u0430\\u0442\\u0430\\/\\u0432\\u0440\\u0435\\u043c\\u044f\",\n\"Insert link\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u0441\\u0441\\u044b\\u043b\\u043a\\u0443\",\n\"Insert\\/edit link\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c\\/\\u0440\\u0435\\u0434\\u0430\\u043a\\u0442\\u0438\\u0440\\u043e\\u0432\\u0430\\u0442\\u044c \\u0441\\u0441\\u044b\\u043b\\u043a\\u0443\",\n\"Text to display\": \"\\u041e\\u0442\\u043e\\u0431\\u0440\\u0430\\u0436\\u0430\\u0435\\u043c\\u044b\\u0439 \\u0442\\u0435\\u043a\\u0441\\u0442\",\n\"Url\": \"\\u0410\\u0434\\u0440\\u0435\\u0441 \\u0441\\u0441\\u044b\\u043b\\u043a\\u0438\",\n\"Target\": \"\\u041e\\u0442\\u043a\\u0440\\u044b\\u0432\\u0430\\u0442\\u044c \\u0441\\u0441\\u044b\\u043b\\u043a\\u0443\",\n\"None\": \"\\u041d\\u0435\\u0442\",\n\"New window\": \"\\u0412 \\u043d\\u043e\\u0432\\u043e\\u043c \\u043e\\u043a\\u043d\\u0435\",\n\"Remove link\": \"\\u0423\\u0434\\u0430\\u043b\\u0438\\u0442\\u044c \\u0441\\u0441\\u044b\\u043b\\u043a\\u0443\",\n\"Anchors\": \"\\u042f\\u043a\\u043e\\u0440\\u044f\",\n\"Link\": \"\\u0421\\u0441\\u044b\\u043b\\u043a\\u0430\",\n\"Paste or type a link\": \"\\u0412\\u0432\\u0435\\u0434\\u0438\\u0442\\u0435 \\u0438\\u043b\\u0438 \\u0432\\u0441\\u0442\\u0430\\u0432\\u044c\\u0442\\u0435 \\u0441\\u0441\\u044b\\u043b\\u043a\\u0443\",\n\"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?\": \"\\u0412\\u0432\\u0435\\u0434\\u0451\\u043d\\u043d\\u044b\\u0439 URL \\u044f\\u0432\\u043b\\u044f\\u0435\\u0442\\u0441\\u044f \\u043a\\u043e\\u0440\\u0440\\u0435\\u043a\\u0442\\u043d\\u044b\\u043c \\u0430\\u0434\\u0440\\u0435\\u0441\\u043e\\u043c \\u044d\\u043b\\u0435\\u043a\\u0442\\u0440\\u043e\\u043d\\u043d\\u043e\\u0439 \\u043f\\u043e\\u0447\\u0442\\u044b. \\u0412\\u044b \\u0436\\u0435\\u043b\\u0430\\u0435\\u0442\\u0435 \\u0434\\u043e\\u0431\\u0430\\u0432\\u0438\\u0442\\u044c \\u043f\\u0440\\u0435\\u0444\\u0438\\u043a\\u0441 \\u00abmailto:\\u00bb?\",\n\"The URL you entered seems to be an external link. Do you want to add the required http:\\/\\/ prefix?\": \"\\u0412\\u0432\\u0435\\u0434\\u0451\\u043d\\u043d\\u044b\\u0439 URL \\u044f\\u0432\\u043b\\u044f\\u0435\\u0442\\u0441\\u044f \\u0432\\u043d\\u0435\\u0448\\u043d\\u0435\\u0439 \\u0441\\u0441\\u044b\\u043b\\u043a\\u043e\\u0439. \\u0412\\u044b \\u0436\\u0435\\u043b\\u0430\\u0435\\u0442\\u0435 \\u0434\\u043e\\u0431\\u0430\\u0432\\u0438\\u0442\\u044c \\u043f\\u0440\\u0435\\u0444\\u0438\\u043a\\u0441 \\u00abhttp:\\/\\/\\u00bb?\",\n\"Link list\": \"\\u0421\\u043f\\u0438\\u0441\\u043e\\u043a \\u0441\\u0441\\u044b\\u043b\\u043e\\u043a\",\n\"Insert video\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u0432\\u0438\\u0434\\u0435\\u043e\",\n\"Insert\\/edit video\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c\\/\\u0440\\u0435\\u0434\\u0430\\u043a\\u0442\\u0438\\u0440\\u043e\\u0432\\u0430\\u0442\\u044c \\u0432\\u0438\\u0434\\u0435\\u043e\",\n\"Insert\\/edit media\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c\\/\\u0440\\u0435\\u0434\\u0430\\u043a\\u0442\\u0438\\u0440\\u043e\\u0432\\u0430\\u0442\\u044c \\u0432\\u0438\\u0434\\u0435\\u043e\",\n\"Alternative source\": \"\\u0410\\u043b\\u044c\\u0442\\u0435\\u0440\\u043d\\u0430\\u0442\\u0438\\u0432\\u043d\\u044b\\u0439 \\u0438\\u0441\\u0442\\u043e\\u0447\\u043d\\u0438\\u043a\",\n\"Poster\": \"\\u0418\\u0437\\u043e\\u0431\\u0440\\u0430\\u0436\\u0435\\u043d\\u0438\\u0435\",\n\"Paste your embed code below:\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u044c\\u0442\\u0435 \\u0432\\u0430\\u0448 \\u043a\\u043e\\u0434 \\u043d\\u0438\\u0436\\u0435:\",\n\"Embed\": \"\\u041a\\u043e\\u0434 \\u0434\\u043b\\u044f \\u0432\\u0441\\u0442\\u0430\\u0432\\u043a\\u0438\",\n\"Media\": \"\\u0412\\u0438\\u0434\\u0435\\u043e\",\n\"Nonbreaking space\": \"\\u041d\\u0435\\u0440\\u0430\\u0437\\u0440\\u044b\\u0432\\u043d\\u044b\\u0439 \\u043f\\u0440\\u043e\\u0431\\u0435\\u043b\",\n\"Page break\": \"\\u0420\\u0430\\u0437\\u0440\\u044b\\u0432 \\u0441\\u0442\\u0440\\u0430\\u043d\\u0438\\u0446\\u044b\",\n\"Paste as text\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u043a\\u0430\\u043a \\u0442\\u0435\\u043a\\u0441\\u0442\",\n\"Preview\": \"\\u041f\\u0440\\u0435\\u0434\\u043f\\u0440\\u043e\\u0441\\u043c\\u043e\\u0442\\u0440\",\n\"Print\": \"\\u041f\\u0435\\u0447\\u0430\\u0442\\u044c\",\n\"Save\": \"\\u0421\\u043e\\u0445\\u0440\\u0430\\u043d\\u0438\\u0442\\u044c\",\n\"Find\": \"\\u041d\\u0430\\u0439\\u0442\\u0438\",\n\"Replace with\": \"\\u0417\\u0430\\u043c\\u0435\\u043d\\u0438\\u0442\\u044c \\u043d\\u0430\",\n\"Replace\": \"\\u0417\\u0430\\u043c\\u0435\\u043d\\u0438\\u0442\\u044c\",\n\"Replace all\": \"\\u0417\\u0430\\u043c\\u0435\\u043d\\u0438\\u0442\\u044c \\u0432\\u0441\\u0435\",\n\"Prev\": \"\\u0412\\u0432\\u0435\\u0440\\u0445\",\n\"Next\": \"\\u0412\\u043d\\u0438\\u0437\",\n\"Find and replace\": \"\\u041f\\u043e\\u0438\\u0441\\u043a \\u0438 \\u0437\\u0430\\u043c\\u0435\\u043d\\u0430\",\n\"Could not find the specified string.\": \"\\u0417\\u0430\\u0434\\u0430\\u043d\\u043d\\u0430\\u044f \\u0441\\u0442\\u0440\\u043e\\u043a\\u0430 \\u043d\\u0435 \\u043d\\u0430\\u0439\\u0434\\u0435\\u043d\\u0430\",\n\"Match case\": \"\\u0423\\u0447\\u0438\\u0442\\u044b\\u0432\\u0430\\u0442\\u044c \\u0440\\u0435\\u0433\\u0438\\u0441\\u0442\\u0440\",\n\"Whole words\": \"\\u0421\\u043b\\u043e\\u0432\\u043e \\u0446\\u0435\\u043b\\u0438\\u043a\\u043e\\u043c\",\n\"Spellcheck\": \"\\u041f\\u0440\\u043e\\u0432\\u0435\\u0440\\u0438\\u0442\\u044c \\u043f\\u0440\\u0430\\u0432\\u043e\\u043f\\u0438\\u0441\\u0430\\u043d\\u0438\\u0435\",\n\"Ignore\": \"\\u0418\\u0433\\u043d\\u043e\\u0440\\u0438\\u0440\\u043e\\u0432\\u0430\\u0442\\u044c\",\n\"Ignore all\": \"\\u0418\\u0433\\u043d\\u043e\\u0440\\u0438\\u0440\\u043e\\u0432\\u0430\\u0442\\u044c \\u0432\\u0441\\u0435\",\n\"Finish\": \"\\u0417\\u0430\\u043a\\u043e\\u043d\\u0447\\u0438\\u0442\\u044c\",\n\"Add to Dictionary\": \"\\u0414\\u043e\\u0431\\u0430\\u0432\\u0438\\u0442\\u044c \\u0432 \\u0441\\u043b\\u043e\\u0432\\u0430\\u0440\\u044c\",\n\"Insert table\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u0442\\u0430\\u0431\\u043b\\u0438\\u0446\\u0443\",\n\"Table properties\": \"\\u0421\\u0432\\u043e\\u0439\\u0441\\u0442\\u0432\\u0430 \\u0442\\u0430\\u0431\\u043b\\u0438\\u0446\\u044b\",\n\"Delete table\": \"\\u0423\\u0434\\u0430\\u043b\\u0438\\u0442\\u044c \\u0442\\u0430\\u0431\\u043b\\u0438\\u0446\\u0443\",\n\"Cell\": \"\\u042f\\u0447\\u0435\\u0439\\u043a\\u0430\",\n\"Row\": \"\\u0421\\u0442\\u0440\\u043e\\u043a\\u0430\",\n\"Column\": \"\\u0421\\u0442\\u043e\\u043b\\u0431\\u0435\\u0446\",\n\"Cell properties\": \"\\u041f\\u0430\\u0440\\u0430\\u043c\\u0435\\u0442\\u0440\\u044b \\u044f\\u0447\\u0435\\u0439\\u043a\\u0438\",\n\"Merge cells\": \"\\u041e\\u0431\\u044a\\u0435\\u0434\\u0438\\u043d\\u0438\\u0442\\u044c \\u044f\\u0447\\u0435\\u0439\\u043a\\u0438\",\n\"Split cell\": \"\\u0420\\u0430\\u0437\\u0431\\u0438\\u0442\\u044c \\u044f\\u0447\\u0435\\u0439\\u043a\\u0443\",\n\"Insert row before\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u043f\\u0443\\u0441\\u0442\\u0443\\u044e \\u0441\\u0442\\u0440\\u043e\\u043a\\u0443 \\u0441\\u0432\\u0435\\u0440\\u0445\\u0443\",\n\"Insert row after\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u043f\\u0443\\u0441\\u0442\\u0443\\u044e \\u0441\\u0442\\u0440\\u043e\\u043a\\u0443 \\u0441\\u043d\\u0438\\u0437\\u0443\",\n\"Delete row\": \"\\u0423\\u0434\\u0430\\u043b\\u0438\\u0442\\u044c \\u0441\\u0442\\u0440\\u043e\\u043a\\u0443\",\n\"Row properties\": \"\\u041f\\u0430\\u0440\\u0430\\u043c\\u0435\\u0442\\u0440\\u044b \\u0441\\u0442\\u0440\\u043e\\u043a\\u0438\",\n\"Cut row\": \"\\u0412\\u044b\\u0440\\u0435\\u0437\\u0430\\u0442\\u044c \\u0441\\u0442\\u0440\\u043e\\u043a\\u0443\",\n\"Copy row\": \"\\u041a\\u043e\\u043f\\u0438\\u0440\\u043e\\u0432\\u0430\\u0442\\u044c \\u0441\\u0442\\u0440\\u043e\\u043a\\u0443\",\n\"Paste row before\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u0441\\u0442\\u0440\\u043e\\u043a\\u0443 \\u0441\\u0432\\u0435\\u0440\\u0445\\u0443\",\n\"Paste row after\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u0441\\u0442\\u0440\\u043e\\u043a\\u0443 \\u0441\\u043d\\u0438\\u0437\\u0443\",\n\"Insert column before\": \"\\u0414\\u043e\\u0431\\u0430\\u0432\\u0438\\u0442\\u044c \\u0441\\u0442\\u043e\\u043b\\u0431\\u0435\\u0446 \\u0441\\u043b\\u0435\\u0432\\u0430\",\n\"Insert column after\": \"\\u0414\\u043e\\u0431\\u0430\\u0432\\u0438\\u0442\\u044c \\u0441\\u0442\\u043e\\u043b\\u0431\\u0435\\u0446 \\u0441\\u043f\\u0440\\u0430\\u0432\\u0430\",\n\"Delete column\": \"\\u0423\\u0434\\u0430\\u043b\\u0438\\u0442\\u044c \\u0441\\u0442\\u043e\\u043b\\u0431\\u0435\\u0446\",\n\"Cols\": \"\\u0421\\u0442\\u043e\\u043b\\u0431\\u0446\\u044b\",\n\"Rows\": \"\\u0421\\u0442\\u0440\\u043e\\u043a\\u0438\",\n\"Width\": \"\\u0428\\u0438\\u0440\\u0438\\u043d\\u0430\",\n\"Height\": \"\\u0412\\u044b\\u0441\\u043e\\u0442\\u0430\",\n\"Cell spacing\": \"\\u0412\\u043d\\u0435\\u0448\\u043d\\u0438\\u0439 \\u043e\\u0442\\u0441\\u0442\\u0443\\u043f\",\n\"Cell padding\": \"\\u0412\\u043d\\u0443\\u0442\\u0440\\u0435\\u043d\\u043d\\u0438\\u0439 \\u043e\\u0442\\u0441\\u0442\\u0443\\u043f\",\n\"Caption\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a\",\n\"Left\": \"\\u041f\\u043e \\u043b\\u0435\\u0432\\u043e\\u043c\\u0443 \\u043a\\u0440\\u0430\\u044e\",\n\"Center\": \"\\u041f\\u043e \\u0446\\u0435\\u043d\\u0442\\u0440\\u0443\",\n\"Right\": \"\\u041f\\u043e \\u043f\\u0440\\u0430\\u0432\\u043e\\u043c\\u0443 \\u043a\\u0440\\u0430\\u044e\",\n\"Cell type\": \"\\u0422\\u0438\\u043f \\u044f\\u0447\\u0435\\u0439\\u043a\\u0438\",\n\"Scope\": \"Scope\",\n\"Alignment\": \"\\u0412\\u044b\\u0440\\u0430\\u0432\\u043d\\u0438\\u0432\\u0430\\u043d\\u0438\\u0435\",\n\"H Align\": \"\\u0413\\u043e\\u0440\\u0438\\u0437\\u043e\\u043d\\u0442\\u0430\\u043b\\u044c\\u043d\\u043e\\u0435 \\u0432\\u044b\\u0440\\u0430\\u0432\\u043d\\u0438\\u0432\\u0430\\u043d\\u0438\\u0435\",\n\"V Align\": \"\\u0412\\u0435\\u0440\\u0442\\u0438\\u043a\\u0430\\u043b\\u044c\\u043d\\u043e\\u0435 \\u0432\\u044b\\u0440\\u0430\\u0432\\u043d\\u0438\\u0432\\u0430\\u043d\\u0438\\u0435\",\n\"Top\": \"\\u041f\\u043e \\u0432\\u0435\\u0440\\u0445\\u0443\",\n\"Middle\": \"\\u041f\\u043e \\u0441\\u0435\\u0440\\u0435\\u0434\\u0438\\u043d\\u0435\",\n\"Bottom\": \"\\u041f\\u043e \\u043d\\u0438\\u0437\\u0443\",\n\"Header cell\": \"\\u0417\\u0430\\u0433\\u043e\\u043b\\u043e\\u0432\\u043e\\u043a\",\n\"Row group\": \"\\u0413\\u0440\\u0443\\u043f\\u043f\\u0430 \\u0441\\u0442\\u0440\\u043e\\u043a\",\n\"Column group\": \"\\u0413\\u0440\\u0443\\u043f\\u043f\\u0430 \\u043a\\u043e\\u043b\\u043e\\u043d\\u043e\\u043a\",\n\"Row type\": \"\\u0422\\u0438\\u043f \\u0441\\u0442\\u0440\\u043e\\u043a\\u0438\",\n\"Header\": \"\\u0428\\u0430\\u043f\\u043a\\u0430\",\n\"Body\": \"\\u0422\\u0435\\u043b\\u043e\",\n\"Footer\": \"\\u041d\\u0438\\u0437\",\n\"Border color\": \"\\u0426\\u0432\\u0435\\u0442 \\u0440\\u0430\\u043c\\u043a\\u0438\",\n\"Insert template\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c \\u0448\\u0430\\u0431\\u043b\\u043e\\u043d\",\n\"Templates\": \"\\u0428\\u0430\\u0431\\u043b\\u043e\\u043d\\u044b\",\n\"Template\": \"\\u0428\\u0430\\u0431\\u043b\\u043e\\u043d\",\n\"Text color\": \"\\u0426\\u0432\\u0435\\u0442 \\u0442\\u0435\\u043a\\u0441\\u0442\\u0430\",\n\"Background color\": \"\\u0426\\u0432\\u0435\\u0442 \\u0444\\u043e\\u043d\\u0430\",\n\"Custom...\": \"\\u0412\\u044b\\u0431\\u0440\\u0430\\u0442\\u044c\\u2026\",\n\"Custom color\": \"\\u041f\\u043e\\u043b\\u044c\\u0437\\u043e\\u0432\\u0430\\u0442\\u0435\\u043b\\u044c\\u0441\\u043a\\u0438\\u0439 \\u0446\\u0432\\u0435\\u0442\",\n\"No color\": \"\\u0411\\u0435\\u0437 \\u0446\\u0432\\u0435\\u0442\\u0430\",\n\"Table of Contents\": \"\\u0421\\u043e\\u0434\\u0435\\u0440\\u0436\\u0430\\u043d\\u0438\\u0435\",\n\"Show blocks\": \"\\u041f\\u043e\\u043a\\u0430\\u0437\\u044b\\u0432\\u0430\\u0442\\u044c \\u0431\\u043b\\u043e\\u043a\\u0438\",\n\"Show invisible characters\": \"\\u041f\\u043e\\u043a\\u0430\\u0437\\u044b\\u0432\\u0430\\u0442\\u044c \\u043d\\u0435\\u0432\\u0438\\u0434\\u0438\\u043c\\u044b\\u0435 \\u0441\\u0438\\u043c\\u0432\\u043e\\u043b\\u044b\",\n\"Words: {0}\": \"\\u041a\\u043e\\u043b\\u0438\\u0447\\u0435\\u0441\\u0442\\u0432\\u043e \\u0441\\u043b\\u043e\\u0432: {0}\",\n\"{0} words\": \"\\u0441\\u043b\\u043e\\u0432: {0}\",\n\"File\": \"\\u0424\\u0430\\u0439\\u043b\",\n\"Edit\": \"\\u0418\\u0437\\u043c\\u0435\\u043d\\u0438\\u0442\\u044c\",\n\"Insert\": \"\\u0412\\u0441\\u0442\\u0430\\u0432\\u0438\\u0442\\u044c\",\n\"View\": \"\\u0412\\u0438\\u0434\",\n\"Format\": \"\\u0424\\u043e\\u0440\\u043c\\u0430\\u0442\",\n\"Table\": \"\\u0422\\u0430\\u0431\\u043b\\u0438\\u0446\\u0430\",\n\"Tools\": \"\\u0418\\u043d\\u0441\\u0442\\u0440\\u0443\\u043c\\u0435\\u043d\\u0442\\u044b\",\n\"Powered by {0}\": \"\\u041f\\u0440\\u0438 \\u043f\\u043e\\u0434\\u0434\\u0435\\u0440\\u0436\\u043a\\u0435 {0}\",\n\"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help\": \"\\u0422\\u0435\\u043a\\u0441\\u0442\\u043e\\u0432\\u043e\\u0435 \\u043f\\u043e\\u043b\\u0435. \\u041d\\u0430\\u0436\\u043c\\u0438\\u0442\\u0435 ALT-F9 \\u0447\\u0442\\u043e\\u0431\\u044b \\u0432\\u044b\\u0437\\u0432\\u0430\\u0442\\u044c \\u043c\\u0435\\u043d\\u044e, ALT-F10 \\u043f\\u0430\\u043d\\u0435\\u043b\\u044c \\u0438\\u043d\\u0441\\u0442\\u0440\\u0443\\u043c\\u0435\\u043d\\u0442\\u043e\\u0432, ALT-0 \\u0434\\u043b\\u044f \\u0432\\u044b\\u0437\\u043e\\u0432\\u0430 \\u043f\\u043e\\u043c\\u043e\\u0449\\u0438.\"\n});","// Exports the \"advlist\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/advlist')\n// ES2015:\n// import 'tinymce/plugins/advlist'\nrequire('./plugin.js');","(function () {\nvar advlist = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var applyListFormat = function (editor, listName, styleValue) {\n var cmd = listName === 'UL' ? 'InsertUnorderedList' : 'InsertOrderedList';\n editor.execCommand(cmd, false, styleValue === false ? null : { 'list-style-type': styleValue });\n };\n var Actions = { applyListFormat: applyListFormat };\n\n var register = function (editor) {\n editor.addCommand('ApplyUnorderedListStyle', function (ui, value) {\n Actions.applyListFormat(editor, 'UL', value['list-style-type']);\n });\n editor.addCommand('ApplyOrderedListStyle', function (ui, value) {\n Actions.applyListFormat(editor, 'OL', value['list-style-type']);\n });\n };\n var Commands = { register: register };\n\n var getNumberStyles = function (editor) {\n var styles = editor.getParam('advlist_number_styles', 'default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman');\n return styles ? styles.split(/[ ,]/) : [];\n };\n var getBulletStyles = function (editor) {\n var styles = editor.getParam('advlist_bullet_styles', 'default,circle,disc,square');\n return styles ? styles.split(/[ ,]/) : [];\n };\n var Settings = {\n getNumberStyles: getNumberStyles,\n getBulletStyles: getBulletStyles\n };\n\n var isChildOfBody = function (editor, elm) {\n return editor.$.contains(editor.getBody(), elm);\n };\n var isTableCellNode = function (node) {\n return node && /^(TH|TD)$/.test(node.nodeName);\n };\n var isListNode = function (editor) {\n return function (node) {\n return node && /^(OL|UL|DL)$/.test(node.nodeName) && isChildOfBody(editor, node);\n };\n };\n var getSelectedStyleType = function (editor) {\n var listElm = editor.dom.getParent(editor.selection.getNode(), 'ol,ul');\n return editor.dom.getStyle(listElm, 'listStyleType') || '';\n };\n var ListUtils = {\n isTableCellNode: isTableCellNode,\n isListNode: isListNode,\n getSelectedStyleType: getSelectedStyleType\n };\n\n var styleValueToText = function (styleValue) {\n return styleValue.replace(/\\-/g, ' ').replace(/\\b\\w/g, function (chr) {\n return chr.toUpperCase();\n });\n };\n var toMenuItems = function (styles) {\n return global$1.map(styles, function (styleValue) {\n var text = styleValueToText(styleValue);\n var data = styleValue === 'default' ? '' : styleValue;\n return {\n text: text,\n data: data\n };\n });\n };\n var ListStyles = { toMenuItems: toMenuItems };\n\n var findIndex = function (list, predicate) {\n for (var index = 0; index < list.length; index++) {\n var element = list[index];\n if (predicate(element)) {\n return index;\n }\n }\n return -1;\n };\n var listState = function (editor, listName) {\n return function (e) {\n var ctrl = e.control;\n editor.on('NodeChange', function (e) {\n var tableCellIndex = findIndex(e.parents, ListUtils.isTableCellNode);\n var parents = tableCellIndex !== -1 ? e.parents.slice(0, tableCellIndex) : e.parents;\n var lists = global$1.grep(parents, ListUtils.isListNode(editor));\n ctrl.active(lists.length > 0 && lists[0].nodeName === listName);\n });\n };\n };\n var updateSelection = function (editor) {\n return function (e) {\n var listStyleType = ListUtils.getSelectedStyleType(editor);\n e.control.items().each(function (ctrl) {\n ctrl.active(ctrl.settings.data === listStyleType);\n });\n };\n };\n var addSplitButton = function (editor, id, tooltip, cmd, nodeName, styles) {\n editor.addButton(id, {\n active: false,\n type: 'splitbutton',\n tooltip: tooltip,\n menu: ListStyles.toMenuItems(styles),\n onPostRender: listState(editor, nodeName),\n onshow: updateSelection(editor),\n onselect: function (e) {\n Actions.applyListFormat(editor, nodeName, e.control.settings.data);\n },\n onclick: function () {\n editor.execCommand(cmd);\n }\n });\n };\n var addButton = function (editor, id, tooltip, cmd, nodeName, styles) {\n editor.addButton(id, {\n active: false,\n type: 'button',\n tooltip: tooltip,\n onPostRender: listState(editor, nodeName),\n onclick: function () {\n editor.execCommand(cmd);\n }\n });\n };\n var addControl = function (editor, id, tooltip, cmd, nodeName, styles) {\n if (styles.length > 0) {\n addSplitButton(editor, id, tooltip, cmd, nodeName, styles);\n } else {\n addButton(editor, id, tooltip, cmd, nodeName);\n }\n };\n var register$1 = function (editor) {\n addControl(editor, 'numlist', 'Numbered list', 'InsertOrderedList', 'OL', Settings.getNumberStyles(editor));\n addControl(editor, 'bullist', 'Bullet list', 'InsertUnorderedList', 'UL', Settings.getBulletStyles(editor));\n };\n var Buttons = { register: register$1 };\n\n global.add('advlist', function (editor) {\n var hasPlugin = function (editor, plugin) {\n var plugins = editor.settings.plugins ? editor.settings.plugins : '';\n return global$1.inArray(plugins.split(/[ ,]/), plugin) !== -1;\n };\n if (hasPlugin(editor, 'lists')) {\n Buttons.register(editor);\n Commands.register(editor);\n }\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","// Exports the \"anchor\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/anchor')\n// ES2015:\n// import 'tinymce/plugins/anchor'\nrequire('./plugin.js');","(function () {\nvar anchor = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var isValidId = function (id) {\n return /^[A-Za-z][A-Za-z0-9\\-:._]*$/.test(id);\n };\n var getId = function (editor) {\n var selectedNode = editor.selection.getNode();\n var isAnchor = selectedNode.tagName === 'A' && editor.dom.getAttrib(selectedNode, 'href') === '';\n return isAnchor ? selectedNode.id || selectedNode.name : '';\n };\n var insert = function (editor, id) {\n var selectedNode = editor.selection.getNode();\n var isAnchor = selectedNode.tagName === 'A' && editor.dom.getAttrib(selectedNode, 'href') === '';\n if (isAnchor) {\n selectedNode.removeAttribute('name');\n selectedNode.id = id;\n editor.undoManager.add();\n } else {\n editor.focus();\n editor.selection.collapse(true);\n editor.execCommand('mceInsertContent', false, editor.dom.createHTML('a', { id: id }));\n }\n };\n var Anchor = {\n isValidId: isValidId,\n getId: getId,\n insert: insert\n };\n\n var insertAnchor = function (editor, newId) {\n if (!Anchor.isValidId(newId)) {\n editor.windowManager.alert('Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.');\n return true;\n } else {\n Anchor.insert(editor, newId);\n return false;\n }\n };\n var open = function (editor) {\n var currentId = Anchor.getId(editor);\n editor.windowManager.open({\n title: 'Anchor',\n body: {\n type: 'textbox',\n name: 'id',\n size: 40,\n label: 'Id',\n value: currentId\n },\n onsubmit: function (e) {\n var newId = e.data.id;\n if (insertAnchor(editor, newId)) {\n e.preventDefault();\n }\n }\n });\n };\n var Dialog = { open: open };\n\n var register = function (editor) {\n editor.addCommand('mceAnchor', function () {\n Dialog.open(editor);\n });\n };\n var Commands = { register: register };\n\n var isAnchorNode = function (node) {\n return !node.attr('href') && (node.attr('id') || node.attr('name')) && !node.firstChild;\n };\n var setContentEditable = function (state) {\n return function (nodes) {\n for (var i = 0; i < nodes.length; i++) {\n if (isAnchorNode(nodes[i])) {\n nodes[i].attr('contenteditable', state);\n }\n }\n };\n };\n var setup = function (editor) {\n editor.on('PreInit', function () {\n editor.parser.addNodeFilter('a', setContentEditable('false'));\n editor.serializer.addNodeFilter('a', setContentEditable(null));\n });\n };\n var FilterContent = { setup: setup };\n\n var register$1 = function (editor) {\n editor.addButton('anchor', {\n icon: 'anchor',\n tooltip: 'Anchor',\n cmd: 'mceAnchor',\n stateSelector: 'a:not([href])'\n });\n editor.addMenuItem('anchor', {\n icon: 'anchor',\n text: 'Anchor',\n context: 'insert',\n cmd: 'mceAnchor'\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('anchor', function (editor) {\n FilterContent.setup(editor);\n Commands.register(editor);\n Buttons.register(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","// Exports the \"autolink\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/autolink')\n// ES2015:\n// import 'tinymce/plugins/autolink'\nrequire('./plugin.js');","(function () {\nvar autolink = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var getAutoLinkPattern = function (editor) {\n return editor.getParam('autolink_pattern', /^(https?:\\/\\/|ssh:\\/\\/|ftp:\\/\\/|file:\\/|www\\.|(?:mailto:)?[A-Z0-9._%+\\-]+@)(.+)$/i);\n };\n var getDefaultLinkTarget = function (editor) {\n return editor.getParam('default_link_target', '');\n };\n var Settings = {\n getAutoLinkPattern: getAutoLinkPattern,\n getDefaultLinkTarget: getDefaultLinkTarget\n };\n\n var rangeEqualsDelimiterOrSpace = function (rangeString, delimiter) {\n return rangeString === delimiter || rangeString === ' ' || rangeString.charCodeAt(0) === 160;\n };\n var handleEclipse = function (editor) {\n parseCurrentLine(editor, -1, '(');\n };\n var handleSpacebar = function (editor) {\n parseCurrentLine(editor, 0, '');\n };\n var handleEnter = function (editor) {\n parseCurrentLine(editor, -1, '');\n };\n var scopeIndex = function (container, index) {\n if (index < 0) {\n index = 0;\n }\n if (container.nodeType === 3) {\n var len = container.data.length;\n if (index > len) {\n index = len;\n }\n }\n return index;\n };\n var setStart = function (rng, container, offset) {\n if (container.nodeType !== 1 || container.hasChildNodes()) {\n rng.setStart(container, scopeIndex(container, offset));\n } else {\n rng.setStartBefore(container);\n }\n };\n var setEnd = function (rng, container, offset) {\n if (container.nodeType !== 1 || container.hasChildNodes()) {\n rng.setEnd(container, scopeIndex(container, offset));\n } else {\n rng.setEndAfter(container);\n }\n };\n var parseCurrentLine = function (editor, endOffset, delimiter) {\n var rng, end, start, endContainer, bookmark, text, matches, prev, len, rngText;\n var autoLinkPattern = Settings.getAutoLinkPattern(editor);\n var defaultLinkTarget = Settings.getDefaultLinkTarget(editor);\n if (editor.selection.getNode().tagName === 'A') {\n return;\n }\n rng = editor.selection.getRng(true).cloneRange();\n if (rng.startOffset < 5) {\n prev = rng.endContainer.previousSibling;\n if (!prev) {\n if (!rng.endContainer.firstChild || !rng.endContainer.firstChild.nextSibling) {\n return;\n }\n prev = rng.endContainer.firstChild.nextSibling;\n }\n len = prev.length;\n setStart(rng, prev, len);\n setEnd(rng, prev, len);\n if (rng.endOffset < 5) {\n return;\n }\n end = rng.endOffset;\n endContainer = prev;\n } else {\n endContainer = rng.endContainer;\n if (endContainer.nodeType !== 3 && endContainer.firstChild) {\n while (endContainer.nodeType !== 3 && endContainer.firstChild) {\n endContainer = endContainer.firstChild;\n }\n if (endContainer.nodeType === 3) {\n setStart(rng, endContainer, 0);\n setEnd(rng, endContainer, endContainer.nodeValue.length);\n }\n }\n if (rng.endOffset === 1) {\n end = 2;\n } else {\n end = rng.endOffset - 1 - endOffset;\n }\n }\n start = end;\n do {\n setStart(rng, endContainer, end >= 2 ? end - 2 : 0);\n setEnd(rng, endContainer, end >= 1 ? end - 1 : 0);\n end -= 1;\n rngText = rng.toString();\n } while (rngText !== ' ' && rngText !== '' && rngText.charCodeAt(0) !== 160 && end - 2 >= 0 && rngText !== delimiter);\n if (rangeEqualsDelimiterOrSpace(rng.toString(), delimiter)) {\n setStart(rng, endContainer, end);\n setEnd(rng, endContainer, start);\n end += 1;\n } else if (rng.startOffset === 0) {\n setStart(rng, endContainer, 0);\n setEnd(rng, endContainer, start);\n } else {\n setStart(rng, endContainer, end);\n setEnd(rng, endContainer, start);\n }\n text = rng.toString();\n if (text.charAt(text.length - 1) === '.') {\n setEnd(rng, endContainer, start - 1);\n }\n text = rng.toString().trim();\n matches = text.match(autoLinkPattern);\n if (matches) {\n if (matches[1] === 'www.') {\n matches[1] = 'http://www.';\n } else if (/@$/.test(matches[1]) && !/^mailto:/.test(matches[1])) {\n matches[1] = 'mailto:' + matches[1];\n }\n bookmark = editor.selection.getBookmark();\n editor.selection.setRng(rng);\n editor.execCommand('createlink', false, matches[1] + matches[2]);\n if (defaultLinkTarget) {\n editor.dom.setAttrib(editor.selection.getNode(), 'target', defaultLinkTarget);\n }\n editor.selection.moveToBookmark(bookmark);\n editor.nodeChanged();\n }\n };\n var setup = function (editor) {\n var autoUrlDetectState;\n editor.on('keydown', function (e) {\n if (e.keyCode === 13) {\n return handleEnter(editor);\n }\n });\n if (global$1.ie) {\n editor.on('focus', function () {\n if (!autoUrlDetectState) {\n autoUrlDetectState = true;\n try {\n editor.execCommand('AutoUrlDetect', false, true);\n } catch (ex) {\n }\n }\n });\n return;\n }\n editor.on('keypress', function (e) {\n if (e.keyCode === 41) {\n return handleEclipse(editor);\n }\n });\n editor.on('keyup', function (e) {\n if (e.keyCode === 32) {\n return handleSpacebar(editor);\n }\n });\n };\n var Keys = { setup: setup };\n\n global.add('autolink', function (editor) {\n Keys.setup(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","// Exports the \"charmap\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/charmap')\n// ES2015:\n// import 'tinymce/plugins/charmap'\nrequire('./plugin.js');","(function () {\nvar charmap = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var fireInsertCustomChar = function (editor, chr) {\n return editor.fire('insertCustomChar', { chr: chr });\n };\n var Events = { fireInsertCustomChar: fireInsertCustomChar };\n\n var insertChar = function (editor, chr) {\n var evtChr = Events.fireInsertCustomChar(editor, chr).chr;\n editor.execCommand('mceInsertContent', false, evtChr);\n };\n var Actions = { insertChar: insertChar };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var getCharMap = function (editor) {\n return editor.settings.charmap;\n };\n var getCharMapAppend = function (editor) {\n return editor.settings.charmap_append;\n };\n var Settings = {\n getCharMap: getCharMap,\n getCharMapAppend: getCharMapAppend\n };\n\n var isArray = global$1.isArray;\n var getDefaultCharMap = function () {\n return [\n [\n '160',\n 'no-break space'\n ],\n [\n '173',\n 'soft hyphen'\n ],\n [\n '34',\n 'quotation mark'\n ],\n [\n '162',\n 'cent sign'\n ],\n [\n '8364',\n 'euro sign'\n ],\n [\n '163',\n 'pound sign'\n ],\n [\n '165',\n 'yen sign'\n ],\n [\n '169',\n 'copyright sign'\n ],\n [\n '174',\n 'registered sign'\n ],\n [\n '8482',\n 'trade mark sign'\n ],\n [\n '8240',\n 'per mille sign'\n ],\n [\n '181',\n 'micro sign'\n ],\n [\n '183',\n 'middle dot'\n ],\n [\n '8226',\n 'bullet'\n ],\n [\n '8230',\n 'three dot leader'\n ],\n [\n '8242',\n 'minutes / feet'\n ],\n [\n '8243',\n 'seconds / inches'\n ],\n [\n '167',\n 'section sign'\n ],\n [\n '182',\n 'paragraph sign'\n ],\n [\n '223',\n 'sharp s / ess-zed'\n ],\n [\n '8249',\n 'single left-pointing angle quotation mark'\n ],\n [\n '8250',\n 'single right-pointing angle quotation mark'\n ],\n [\n '171',\n 'left pointing guillemet'\n ],\n [\n '187',\n 'right pointing guillemet'\n ],\n [\n '8216',\n 'left single quotation mark'\n ],\n [\n '8217',\n 'right single quotation mark'\n ],\n [\n '8220',\n 'left double quotation mark'\n ],\n [\n '8221',\n 'right double quotation mark'\n ],\n [\n '8218',\n 'single low-9 quotation mark'\n ],\n [\n '8222',\n 'double low-9 quotation mark'\n ],\n [\n '60',\n 'less-than sign'\n ],\n [\n '62',\n 'greater-than sign'\n ],\n [\n '8804',\n 'less-than or equal to'\n ],\n [\n '8805',\n 'greater-than or equal to'\n ],\n [\n '8211',\n 'en dash'\n ],\n [\n '8212',\n 'em dash'\n ],\n [\n '175',\n 'macron'\n ],\n [\n '8254',\n 'overline'\n ],\n [\n '164',\n 'currency sign'\n ],\n [\n '166',\n 'broken bar'\n ],\n [\n '168',\n 'diaeresis'\n ],\n [\n '161',\n 'inverted exclamation mark'\n ],\n [\n '191',\n 'turned question mark'\n ],\n [\n '710',\n 'circumflex accent'\n ],\n [\n '732',\n 'small tilde'\n ],\n [\n '176',\n 'degree sign'\n ],\n [\n '8722',\n 'minus sign'\n ],\n [\n '177',\n 'plus-minus sign'\n ],\n [\n '247',\n 'division sign'\n ],\n [\n '8260',\n 'fraction slash'\n ],\n [\n '215',\n 'multiplication sign'\n ],\n [\n '185',\n 'superscript one'\n ],\n [\n '178',\n 'superscript two'\n ],\n [\n '179',\n 'superscript three'\n ],\n [\n '188',\n 'fraction one quarter'\n ],\n [\n '189',\n 'fraction one half'\n ],\n [\n '190',\n 'fraction three quarters'\n ],\n [\n '402',\n 'function / florin'\n ],\n [\n '8747',\n 'integral'\n ],\n [\n '8721',\n 'n-ary sumation'\n ],\n [\n '8734',\n 'infinity'\n ],\n [\n '8730',\n 'square root'\n ],\n [\n '8764',\n 'similar to'\n ],\n [\n '8773',\n 'approximately equal to'\n ],\n [\n '8776',\n 'almost equal to'\n ],\n [\n '8800',\n 'not equal to'\n ],\n [\n '8801',\n 'identical to'\n ],\n [\n '8712',\n 'element of'\n ],\n [\n '8713',\n 'not an element of'\n ],\n [\n '8715',\n 'contains as member'\n ],\n [\n '8719',\n 'n-ary product'\n ],\n [\n '8743',\n 'logical and'\n ],\n [\n '8744',\n 'logical or'\n ],\n [\n '172',\n 'not sign'\n ],\n [\n '8745',\n 'intersection'\n ],\n [\n '8746',\n 'union'\n ],\n [\n '8706',\n 'partial differential'\n ],\n [\n '8704',\n 'for all'\n ],\n [\n '8707',\n 'there exists'\n ],\n [\n '8709',\n 'diameter'\n ],\n [\n '8711',\n 'backward difference'\n ],\n [\n '8727',\n 'asterisk operator'\n ],\n [\n '8733',\n 'proportional to'\n ],\n [\n '8736',\n 'angle'\n ],\n [\n '180',\n 'acute accent'\n ],\n [\n '184',\n 'cedilla'\n ],\n [\n '170',\n 'feminine ordinal indicator'\n ],\n [\n '186',\n 'masculine ordinal indicator'\n ],\n [\n '8224',\n 'dagger'\n ],\n [\n '8225',\n 'double dagger'\n ],\n [\n '192',\n 'A - grave'\n ],\n [\n '193',\n 'A - acute'\n ],\n [\n '194',\n 'A - circumflex'\n ],\n [\n '195',\n 'A - tilde'\n ],\n [\n '196',\n 'A - diaeresis'\n ],\n [\n '197',\n 'A - ring above'\n ],\n [\n '256',\n 'A - macron'\n ],\n [\n '198',\n 'ligature AE'\n ],\n [\n '199',\n 'C - cedilla'\n ],\n [\n '200',\n 'E - grave'\n ],\n [\n '201',\n 'E - acute'\n ],\n [\n '202',\n 'E - circumflex'\n ],\n [\n '203',\n 'E - diaeresis'\n ],\n [\n '274',\n 'E - macron'\n ],\n [\n '204',\n 'I - grave'\n ],\n [\n '205',\n 'I - acute'\n ],\n [\n '206',\n 'I - circumflex'\n ],\n [\n '207',\n 'I - diaeresis'\n ],\n [\n '298',\n 'I - macron'\n ],\n [\n '208',\n 'ETH'\n ],\n [\n '209',\n 'N - tilde'\n ],\n [\n '210',\n 'O - grave'\n ],\n [\n '211',\n 'O - acute'\n ],\n [\n '212',\n 'O - circumflex'\n ],\n [\n '213',\n 'O - tilde'\n ],\n [\n '214',\n 'O - diaeresis'\n ],\n [\n '216',\n 'O - slash'\n ],\n [\n '332',\n 'O - macron'\n ],\n [\n '338',\n 'ligature OE'\n ],\n [\n '352',\n 'S - caron'\n ],\n [\n '217',\n 'U - grave'\n ],\n [\n '218',\n 'U - acute'\n ],\n [\n '219',\n 'U - circumflex'\n ],\n [\n '220',\n 'U - diaeresis'\n ],\n [\n '362',\n 'U - macron'\n ],\n [\n '221',\n 'Y - acute'\n ],\n [\n '376',\n 'Y - diaeresis'\n ],\n [\n '562',\n 'Y - macron'\n ],\n [\n '222',\n 'THORN'\n ],\n [\n '224',\n 'a - grave'\n ],\n [\n '225',\n 'a - acute'\n ],\n [\n '226',\n 'a - circumflex'\n ],\n [\n '227',\n 'a - tilde'\n ],\n [\n '228',\n 'a - diaeresis'\n ],\n [\n '229',\n 'a - ring above'\n ],\n [\n '257',\n 'a - macron'\n ],\n [\n '230',\n 'ligature ae'\n ],\n [\n '231',\n 'c - cedilla'\n ],\n [\n '232',\n 'e - grave'\n ],\n [\n '233',\n 'e - acute'\n ],\n [\n '234',\n 'e - circumflex'\n ],\n [\n '235',\n 'e - diaeresis'\n ],\n [\n '275',\n 'e - macron'\n ],\n [\n '236',\n 'i - grave'\n ],\n [\n '237',\n 'i - acute'\n ],\n [\n '238',\n 'i - circumflex'\n ],\n [\n '239',\n 'i - diaeresis'\n ],\n [\n '299',\n 'i - macron'\n ],\n [\n '240',\n 'eth'\n ],\n [\n '241',\n 'n - tilde'\n ],\n [\n '242',\n 'o - grave'\n ],\n [\n '243',\n 'o - acute'\n ],\n [\n '244',\n 'o - circumflex'\n ],\n [\n '245',\n 'o - tilde'\n ],\n [\n '246',\n 'o - diaeresis'\n ],\n [\n '248',\n 'o slash'\n ],\n [\n '333',\n 'o macron'\n ],\n [\n '339',\n 'ligature oe'\n ],\n [\n '353',\n 's - caron'\n ],\n [\n '249',\n 'u - grave'\n ],\n [\n '250',\n 'u - acute'\n ],\n [\n '251',\n 'u - circumflex'\n ],\n [\n '252',\n 'u - diaeresis'\n ],\n [\n '363',\n 'u - macron'\n ],\n [\n '253',\n 'y - acute'\n ],\n [\n '254',\n 'thorn'\n ],\n [\n '255',\n 'y - diaeresis'\n ],\n [\n '563',\n 'y - macron'\n ],\n [\n '913',\n 'Alpha'\n ],\n [\n '914',\n 'Beta'\n ],\n [\n '915',\n 'Gamma'\n ],\n [\n '916',\n 'Delta'\n ],\n [\n '917',\n 'Epsilon'\n ],\n [\n '918',\n 'Zeta'\n ],\n [\n '919',\n 'Eta'\n ],\n [\n '920',\n 'Theta'\n ],\n [\n '921',\n 'Iota'\n ],\n [\n '922',\n 'Kappa'\n ],\n [\n '923',\n 'Lambda'\n ],\n [\n '924',\n 'Mu'\n ],\n [\n '925',\n 'Nu'\n ],\n [\n '926',\n 'Xi'\n ],\n [\n '927',\n 'Omicron'\n ],\n [\n '928',\n 'Pi'\n ],\n [\n '929',\n 'Rho'\n ],\n [\n '931',\n 'Sigma'\n ],\n [\n '932',\n 'Tau'\n ],\n [\n '933',\n 'Upsilon'\n ],\n [\n '934',\n 'Phi'\n ],\n [\n '935',\n 'Chi'\n ],\n [\n '936',\n 'Psi'\n ],\n [\n '937',\n 'Omega'\n ],\n [\n '945',\n 'alpha'\n ],\n [\n '946',\n 'beta'\n ],\n [\n '947',\n 'gamma'\n ],\n [\n '948',\n 'delta'\n ],\n [\n '949',\n 'epsilon'\n ],\n [\n '950',\n 'zeta'\n ],\n [\n '951',\n 'eta'\n ],\n [\n '952',\n 'theta'\n ],\n [\n '953',\n 'iota'\n ],\n [\n '954',\n 'kappa'\n ],\n [\n '955',\n 'lambda'\n ],\n [\n '956',\n 'mu'\n ],\n [\n '957',\n 'nu'\n ],\n [\n '958',\n 'xi'\n ],\n [\n '959',\n 'omicron'\n ],\n [\n '960',\n 'pi'\n ],\n [\n '961',\n 'rho'\n ],\n [\n '962',\n 'final sigma'\n ],\n [\n '963',\n 'sigma'\n ],\n [\n '964',\n 'tau'\n ],\n [\n '965',\n 'upsilon'\n ],\n [\n '966',\n 'phi'\n ],\n [\n '967',\n 'chi'\n ],\n [\n '968',\n 'psi'\n ],\n [\n '969',\n 'omega'\n ],\n [\n '8501',\n 'alef symbol'\n ],\n [\n '982',\n 'pi symbol'\n ],\n [\n '8476',\n 'real part symbol'\n ],\n [\n '978',\n 'upsilon - hook symbol'\n ],\n [\n '8472',\n 'Weierstrass p'\n ],\n [\n '8465',\n 'imaginary part'\n ],\n [\n '8592',\n 'leftwards arrow'\n ],\n [\n '8593',\n 'upwards arrow'\n ],\n [\n '8594',\n 'rightwards arrow'\n ],\n [\n '8595',\n 'downwards arrow'\n ],\n [\n '8596',\n 'left right arrow'\n ],\n [\n '8629',\n 'carriage return'\n ],\n [\n '8656',\n 'leftwards double arrow'\n ],\n [\n '8657',\n 'upwards double arrow'\n ],\n [\n '8658',\n 'rightwards double arrow'\n ],\n [\n '8659',\n 'downwards double arrow'\n ],\n [\n '8660',\n 'left right double arrow'\n ],\n [\n '8756',\n 'therefore'\n ],\n [\n '8834',\n 'subset of'\n ],\n [\n '8835',\n 'superset of'\n ],\n [\n '8836',\n 'not a subset of'\n ],\n [\n '8838',\n 'subset of or equal to'\n ],\n [\n '8839',\n 'superset of or equal to'\n ],\n [\n '8853',\n 'circled plus'\n ],\n [\n '8855',\n 'circled times'\n ],\n [\n '8869',\n 'perpendicular'\n ],\n [\n '8901',\n 'dot operator'\n ],\n [\n '8968',\n 'left ceiling'\n ],\n [\n '8969',\n 'right ceiling'\n ],\n [\n '8970',\n 'left floor'\n ],\n [\n '8971',\n 'right floor'\n ],\n [\n '9001',\n 'left-pointing angle bracket'\n ],\n [\n '9002',\n 'right-pointing angle bracket'\n ],\n [\n '9674',\n 'lozenge'\n ],\n [\n '9824',\n 'black spade suit'\n ],\n [\n '9827',\n 'black club suit'\n ],\n [\n '9829',\n 'black heart suit'\n ],\n [\n '9830',\n 'black diamond suit'\n ],\n [\n '8194',\n 'en space'\n ],\n [\n '8195',\n 'em space'\n ],\n [\n '8201',\n 'thin space'\n ],\n [\n '8204',\n 'zero width non-joiner'\n ],\n [\n '8205',\n 'zero width joiner'\n ],\n [\n '8206',\n 'left-to-right mark'\n ],\n [\n '8207',\n 'right-to-left mark'\n ]\n ];\n };\n var charmapFilter = function (charmap) {\n return global$1.grep(charmap, function (item) {\n return isArray(item) && item.length === 2;\n });\n };\n var getCharsFromSetting = function (settingValue) {\n if (isArray(settingValue)) {\n return [].concat(charmapFilter(settingValue));\n }\n if (typeof settingValue === 'function') {\n return settingValue();\n }\n return [];\n };\n var extendCharMap = function (editor, charmap) {\n var userCharMap = Settings.getCharMap(editor);\n if (userCharMap) {\n charmap = getCharsFromSetting(userCharMap);\n }\n var userCharMapAppend = Settings.getCharMapAppend(editor);\n if (userCharMapAppend) {\n return [].concat(charmap).concat(getCharsFromSetting(userCharMapAppend));\n }\n return charmap;\n };\n var getCharMap$1 = function (editor) {\n return extendCharMap(editor, getDefaultCharMap());\n };\n var CharMap = { getCharMap: getCharMap$1 };\n\n var get = function (editor) {\n var getCharMap = function () {\n return CharMap.getCharMap(editor);\n };\n var insertChar = function (chr) {\n Actions.insertChar(editor, chr);\n };\n return {\n getCharMap: getCharMap,\n insertChar: insertChar\n };\n };\n var Api = { get: get };\n\n var getHtml = function (charmap) {\n var gridHtml, x, y;\n var width = Math.min(charmap.length, 25);\n var height = Math.ceil(charmap.length / width);\n gridHtml = '';\n for (y = 0; y < height; y++) {\n gridHtml += '';\n for (x = 0; x < width; x++) {\n var index = y * width + x;\n if (index < charmap.length) {\n var chr = charmap[index];\n var charCode = parseInt(chr[0], 10);\n var chrText = chr ? String.fromCharCode(charCode) : ' ';\n gridHtml += '';\n } else {\n gridHtml += '';\n }\n gridHtml += '
' + '
' + chrText + '
' + '
';\n }\n }\n gridHtml += '
';\n return gridHtml;\n };\n var GridHtml = { getHtml: getHtml };\n\n var getParentTd = function (elm) {\n while (elm) {\n if (elm.nodeName === 'TD') {\n return elm;\n }\n elm = elm.parentNode;\n }\n };\n var open = function (editor) {\n var win;\n var charMapPanel = {\n type: 'container',\n html: GridHtml.getHtml(CharMap.getCharMap(editor)),\n onclick: function (e) {\n var target = e.target;\n if (/^(TD|DIV)$/.test(target.nodeName)) {\n var charDiv = getParentTd(target).firstChild;\n if (charDiv && charDiv.hasAttribute('data-chr')) {\n var charCodeString = charDiv.getAttribute('data-chr');\n var charCode = parseInt(charCodeString, 10);\n if (!isNaN(charCode)) {\n Actions.insertChar(editor, String.fromCharCode(charCode));\n }\n if (!e.ctrlKey) {\n win.close();\n }\n }\n }\n },\n onmouseover: function (e) {\n var td = getParentTd(e.target);\n if (td && td.firstChild) {\n win.find('#preview').text(td.firstChild.firstChild.data);\n win.find('#previewTitle').text(td.title);\n } else {\n win.find('#preview').text(' ');\n win.find('#previewTitle').text(' ');\n }\n }\n };\n win = editor.windowManager.open({\n title: 'Special character',\n spacing: 10,\n padding: 10,\n items: [\n charMapPanel,\n {\n type: 'container',\n layout: 'flex',\n direction: 'column',\n align: 'center',\n spacing: 5,\n minWidth: 160,\n minHeight: 160,\n items: [\n {\n type: 'label',\n name: 'preview',\n text: ' ',\n style: 'font-size: 40px; text-align: center',\n border: 1,\n minWidth: 140,\n minHeight: 80\n },\n {\n type: 'spacer',\n minHeight: 20\n },\n {\n type: 'label',\n name: 'previewTitle',\n text: ' ',\n style: 'white-space: pre-wrap;',\n border: 1,\n minWidth: 140\n }\n ]\n }\n ],\n buttons: [{\n text: 'Close',\n onclick: function () {\n win.close();\n }\n }]\n });\n };\n var Dialog = { open: open };\n\n var register = function (editor) {\n editor.addCommand('mceShowCharmap', function () {\n Dialog.open(editor);\n });\n };\n var Commands = { register: register };\n\n var register$1 = function (editor) {\n editor.addButton('charmap', {\n icon: 'charmap',\n tooltip: 'Special character',\n cmd: 'mceShowCharmap'\n });\n editor.addMenuItem('charmap', {\n icon: 'charmap',\n text: 'Special character',\n cmd: 'mceShowCharmap',\n context: 'insert'\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('charmap', function (editor) {\n Commands.register(editor);\n Buttons.register(editor);\n return Api.get(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","// Exports the \"code\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/code')\n// ES2015:\n// import 'tinymce/plugins/code'\nrequire('./plugin.js');","(function () {\nvar code = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var getMinWidth = function (editor) {\n return editor.getParam('code_dialog_width', 600);\n };\n var getMinHeight = function (editor) {\n return editor.getParam('code_dialog_height', Math.min(global$1.DOM.getViewPort().h - 200, 500));\n };\n var Settings = {\n getMinWidth: getMinWidth,\n getMinHeight: getMinHeight\n };\n\n var setContent = function (editor, html) {\n editor.focus();\n editor.undoManager.transact(function () {\n editor.setContent(html);\n });\n editor.selection.setCursorLocation();\n editor.nodeChanged();\n };\n var getContent = function (editor) {\n return editor.getContent({ source_view: true });\n };\n var Content = {\n setContent: setContent,\n getContent: getContent\n };\n\n var open = function (editor) {\n var minWidth = Settings.getMinWidth(editor);\n var minHeight = Settings.getMinHeight(editor);\n var win = editor.windowManager.open({\n title: 'Source code',\n body: {\n type: 'textbox',\n name: 'code',\n multiline: true,\n minWidth: minWidth,\n minHeight: minHeight,\n spellcheck: false,\n style: 'direction: ltr; text-align: left'\n },\n onSubmit: function (e) {\n Content.setContent(editor, e.data.code);\n }\n });\n win.find('#code').value(Content.getContent(editor));\n };\n var Dialog = { open: open };\n\n var register = function (editor) {\n editor.addCommand('mceCodeEditor', function () {\n Dialog.open(editor);\n });\n };\n var Commands = { register: register };\n\n var register$1 = function (editor) {\n editor.addButton('code', {\n icon: 'code',\n tooltip: 'Source code',\n onclick: function () {\n Dialog.open(editor);\n }\n });\n editor.addMenuItem('code', {\n icon: 'code',\n text: 'Source code',\n onclick: function () {\n Dialog.open(editor);\n }\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('code', function (editor) {\n Commands.register(editor);\n Buttons.register(editor);\n return {};\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","// Exports the \"colorpicker\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/colorpicker')\n// ES2015:\n// import 'tinymce/plugins/colorpicker'\nrequire('./plugin.js');","(function () {\nvar colorpicker = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Color');\n\n var showPreview = function (win, hexColor) {\n win.find('#preview')[0].getEl().style.background = hexColor;\n };\n var setColor = function (win, value) {\n var color = global$1(value), rgb = color.toRgb();\n win.fromJSON({\n r: rgb.r,\n g: rgb.g,\n b: rgb.b,\n hex: color.toHex().substr(1)\n });\n showPreview(win, color.toHex());\n };\n var open = function (editor, callback, value) {\n var win = editor.windowManager.open({\n title: 'Color',\n items: {\n type: 'container',\n layout: 'flex',\n direction: 'row',\n align: 'stretch',\n padding: 5,\n spacing: 10,\n items: [\n {\n type: 'colorpicker',\n value: value,\n onchange: function () {\n var rgb = this.rgb();\n if (win) {\n win.find('#r').value(rgb.r);\n win.find('#g').value(rgb.g);\n win.find('#b').value(rgb.b);\n win.find('#hex').value(this.value().substr(1));\n showPreview(win, this.value());\n }\n }\n },\n {\n type: 'form',\n padding: 0,\n labelGap: 5,\n defaults: {\n type: 'textbox',\n size: 7,\n value: '0',\n flex: 1,\n spellcheck: false,\n onchange: function () {\n var colorPickerCtrl = win.find('colorpicker')[0];\n var name, value;\n name = this.name();\n value = this.value();\n if (name === 'hex') {\n value = '#' + value;\n setColor(win, value);\n colorPickerCtrl.value(value);\n return;\n }\n value = {\n r: win.find('#r').value(),\n g: win.find('#g').value(),\n b: win.find('#b').value()\n };\n colorPickerCtrl.value(value);\n setColor(win, value);\n }\n },\n items: [\n {\n name: 'r',\n label: 'R',\n autofocus: 1\n },\n {\n name: 'g',\n label: 'G'\n },\n {\n name: 'b',\n label: 'B'\n },\n {\n name: 'hex',\n label: '#',\n value: '000000'\n },\n {\n name: 'preview',\n type: 'container',\n border: 1\n }\n ]\n }\n ]\n },\n onSubmit: function () {\n callback('#' + win.toJSON().hex);\n }\n });\n setColor(win, value);\n };\n var Dialog = { open: open };\n\n global.add('colorpicker', function (editor) {\n if (!editor.settings.color_picker_callback) {\n editor.settings.color_picker_callback = function (callback, value) {\n Dialog.open(editor, callback, value);\n };\n }\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","// Exports the \"emoticons\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/emoticons')\n// ES2015:\n// import 'tinymce/plugins/emoticons'\nrequire('./plugin.js');","(function () {\nvar emoticons = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var emoticons = [\n [\n 'cool',\n 'cry',\n 'embarassed',\n 'foot-in-mouth'\n ],\n [\n 'frown',\n 'innocent',\n 'kiss',\n 'laughing'\n ],\n [\n 'money-mouth',\n 'sealed',\n 'smile',\n 'surprised'\n ],\n [\n 'tongue-out',\n 'undecided',\n 'wink',\n 'yell'\n ]\n ];\n var getHtml = function (pluginUrl) {\n var emoticonsHtml;\n emoticonsHtml = '';\n global$1.each(emoticons, function (row) {\n emoticonsHtml += '';\n global$1.each(row, function (icon) {\n var emoticonUrl = pluginUrl + '/img/smiley-' + icon + '.gif';\n emoticonsHtml += '';\n });\n emoticonsHtml += '';\n });\n emoticonsHtml += '
';\n return emoticonsHtml;\n };\n var PanelHtml = { getHtml: getHtml };\n\n var insertEmoticon = function (editor, src, alt) {\n editor.insertContent(editor.dom.createHTML('img', {\n src: src,\n alt: alt\n }));\n };\n var register = function (editor, pluginUrl) {\n var panelHtml = PanelHtml.getHtml(pluginUrl);\n editor.addButton('emoticons', {\n type: 'panelbutton',\n panel: {\n role: 'application',\n autohide: true,\n html: panelHtml,\n onclick: function (e) {\n var linkElm = editor.dom.getParent(e.target, 'a');\n if (linkElm) {\n insertEmoticon(editor, linkElm.getAttribute('data-mce-url'), linkElm.getAttribute('data-mce-alt'));\n this.hide();\n }\n }\n },\n tooltip: 'Emoticons'\n });\n };\n var Buttons = { register: register };\n\n global.add('emoticons', function (editor, pluginUrl) {\n Buttons.register(editor, pluginUrl);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","// Exports the \"fullscreen\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/fullscreen')\n// ES2015:\n// import 'tinymce/plugins/fullscreen'\nrequire('./plugin.js');","(function () {\nvar fullscreen = (function (domGlobals) {\n 'use strict';\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n var clone = function () {\n return Cell(get());\n };\n return {\n get: get,\n set: set,\n clone: clone\n };\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var get = function (fullscreenState) {\n return {\n isFullscreen: function () {\n return fullscreenState.get() !== null;\n }\n };\n };\n var Api = { get: get };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var fireFullscreenStateChanged = function (editor, state) {\n editor.fire('FullscreenStateChanged', { state: state });\n };\n var Events = { fireFullscreenStateChanged: fireFullscreenStateChanged };\n\n var DOM = global$1.DOM;\n var getWindowSize = function () {\n var w;\n var h;\n var win = domGlobals.window;\n var doc = domGlobals.document;\n var body = doc.body;\n if (body.offsetWidth) {\n w = body.offsetWidth;\n h = body.offsetHeight;\n }\n if (win.innerWidth && win.innerHeight) {\n w = win.innerWidth;\n h = win.innerHeight;\n }\n return {\n w: w,\n h: h\n };\n };\n var getScrollPos = function () {\n var vp = DOM.getViewPort();\n return {\n x: vp.x,\n y: vp.y\n };\n };\n var setScrollPos = function (pos) {\n domGlobals.window.scrollTo(pos.x, pos.y);\n };\n var toggleFullscreen = function (editor, fullscreenState) {\n var body = domGlobals.document.body;\n var documentElement = domGlobals.document.documentElement;\n var editorContainerStyle;\n var editorContainer, iframe, iframeStyle;\n var fullscreenInfo = fullscreenState.get();\n var resize = function () {\n DOM.setStyle(iframe, 'height', getWindowSize().h - (editorContainer.clientHeight - iframe.clientHeight));\n };\n var removeResize = function () {\n DOM.unbind(domGlobals.window, 'resize', resize);\n };\n editorContainer = editor.getContainer();\n editorContainerStyle = editorContainer.style;\n iframe = editor.getContentAreaContainer().firstChild;\n iframeStyle = iframe.style;\n if (!fullscreenInfo) {\n var newFullScreenInfo = {\n scrollPos: getScrollPos(),\n containerWidth: editorContainerStyle.width,\n containerHeight: editorContainerStyle.height,\n iframeWidth: iframeStyle.width,\n iframeHeight: iframeStyle.height,\n resizeHandler: resize,\n removeHandler: removeResize\n };\n iframeStyle.width = iframeStyle.height = '100%';\n editorContainerStyle.width = editorContainerStyle.height = '';\n DOM.addClass(body, 'mce-fullscreen');\n DOM.addClass(documentElement, 'mce-fullscreen');\n DOM.addClass(editorContainer, 'mce-fullscreen');\n DOM.bind(domGlobals.window, 'resize', resize);\n editor.on('remove', removeResize);\n resize();\n fullscreenState.set(newFullScreenInfo);\n Events.fireFullscreenStateChanged(editor, true);\n } else {\n iframeStyle.width = fullscreenInfo.iframeWidth;\n iframeStyle.height = fullscreenInfo.iframeHeight;\n if (fullscreenInfo.containerWidth) {\n editorContainerStyle.width = fullscreenInfo.containerWidth;\n }\n if (fullscreenInfo.containerHeight) {\n editorContainerStyle.height = fullscreenInfo.containerHeight;\n }\n DOM.removeClass(body, 'mce-fullscreen');\n DOM.removeClass(documentElement, 'mce-fullscreen');\n DOM.removeClass(editorContainer, 'mce-fullscreen');\n setScrollPos(fullscreenInfo.scrollPos);\n DOM.unbind(domGlobals.window, 'resize', fullscreenInfo.resizeHandler);\n editor.off('remove', fullscreenInfo.removeHandler);\n fullscreenState.set(null);\n Events.fireFullscreenStateChanged(editor, false);\n }\n };\n var Actions = { toggleFullscreen: toggleFullscreen };\n\n var register = function (editor, fullscreenState) {\n editor.addCommand('mceFullScreen', function () {\n Actions.toggleFullscreen(editor, fullscreenState);\n });\n };\n var Commands = { register: register };\n\n var postRender = function (editor) {\n return function (e) {\n var ctrl = e.control;\n editor.on('FullscreenStateChanged', function (e) {\n ctrl.active(e.state);\n });\n };\n };\n var register$1 = function (editor) {\n editor.addMenuItem('fullscreen', {\n text: 'Fullscreen',\n shortcut: 'Ctrl+Shift+F',\n selectable: true,\n cmd: 'mceFullScreen',\n onPostRender: postRender(editor),\n context: 'view'\n });\n editor.addButton('fullscreen', {\n active: false,\n tooltip: 'Fullscreen',\n cmd: 'mceFullScreen',\n onPostRender: postRender(editor)\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('fullscreen', function (editor) {\n var fullscreenState = Cell(null);\n if (editor.settings.inline) {\n return Api.get(fullscreenState);\n }\n Commands.register(editor, fullscreenState);\n Buttons.register(editor);\n editor.addShortcut('Ctrl+Shift+F', '', 'mceFullScreen');\n return Api.get(fullscreenState);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}(window));\n})();\n","// Exports the \"hr\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/hr')\n// ES2015:\n// import 'tinymce/plugins/hr'\nrequire('./plugin.js');","(function () {\nvar hr = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var register = function (editor) {\n editor.addCommand('InsertHorizontalRule', function () {\n editor.execCommand('mceInsertContent', false, '
');\n });\n };\n var Commands = { register: register };\n\n var register$1 = function (editor) {\n editor.addButton('hr', {\n icon: 'hr',\n tooltip: 'Horizontal line',\n cmd: 'InsertHorizontalRule'\n });\n editor.addMenuItem('hr', {\n icon: 'hr',\n text: 'Horizontal line',\n cmd: 'InsertHorizontalRule',\n context: 'insert'\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('hr', function (editor) {\n Commands.register(editor);\n Buttons.register(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","// Exports the \"image\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/image')\n// ES2015:\n// import 'tinymce/plugins/image'\nrequire('./plugin.js');","(function () {\nvar image = (function (domGlobals) {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var hasDimensions = function (editor) {\n return editor.settings.image_dimensions === false ? false : true;\n };\n var hasAdvTab = function (editor) {\n return editor.settings.image_advtab === true ? true : false;\n };\n var getPrependUrl = function (editor) {\n return editor.getParam('image_prepend_url', '');\n };\n var getClassList = function (editor) {\n return editor.getParam('image_class_list');\n };\n var hasDescription = function (editor) {\n return editor.settings.image_description === false ? false : true;\n };\n var hasImageTitle = function (editor) {\n return editor.settings.image_title === true ? true : false;\n };\n var hasImageCaption = function (editor) {\n return editor.settings.image_caption === true ? true : false;\n };\n var getImageList = function (editor) {\n return editor.getParam('image_list', false);\n };\n var hasUploadUrl = function (editor) {\n return editor.getParam('images_upload_url', false);\n };\n var hasUploadHandler = function (editor) {\n return editor.getParam('images_upload_handler', false);\n };\n var getUploadUrl = function (editor) {\n return editor.getParam('images_upload_url');\n };\n var getUploadHandler = function (editor) {\n return editor.getParam('images_upload_handler');\n };\n var getUploadBasePath = function (editor) {\n return editor.getParam('images_upload_base_path');\n };\n var getUploadCredentials = function (editor) {\n return editor.getParam('images_upload_credentials');\n };\n var Settings = {\n hasDimensions: hasDimensions,\n hasAdvTab: hasAdvTab,\n getPrependUrl: getPrependUrl,\n getClassList: getClassList,\n hasDescription: hasDescription,\n hasImageTitle: hasImageTitle,\n hasImageCaption: hasImageCaption,\n getImageList: getImageList,\n hasUploadUrl: hasUploadUrl,\n hasUploadHandler: hasUploadHandler,\n getUploadUrl: getUploadUrl,\n getUploadHandler: getUploadHandler,\n getUploadBasePath: getUploadBasePath,\n getUploadCredentials: getUploadCredentials\n };\n\n var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')();\n\n var path = function (parts, scope) {\n var o = scope !== undefined && scope !== null ? scope : Global;\n for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n o = o[parts[i]];\n }\n return o;\n };\n var resolve = function (p, scope) {\n var parts = p.split('.');\n return path(parts, scope);\n };\n\n var unsafe = function (name, scope) {\n return resolve(name, scope);\n };\n var getOrDie = function (name, scope) {\n var actual = unsafe(name, scope);\n if (actual === undefined || actual === null) {\n throw new Error(name + ' not available on this browser');\n }\n return actual;\n };\n var Global$1 = { getOrDie: getOrDie };\n\n function FileReader () {\n var f = Global$1.getOrDie('FileReader');\n return new f();\n }\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Promise');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.XHR');\n\n var parseIntAndGetMax = function (val1, val2) {\n return Math.max(parseInt(val1, 10), parseInt(val2, 10));\n };\n var getImageSize = function (url, callback) {\n var img = domGlobals.document.createElement('img');\n function done(width, height) {\n if (img.parentNode) {\n img.parentNode.removeChild(img);\n }\n callback({\n width: width,\n height: height\n });\n }\n img.onload = function () {\n var width = parseIntAndGetMax(img.width, img.clientWidth);\n var height = parseIntAndGetMax(img.height, img.clientHeight);\n done(width, height);\n };\n img.onerror = function () {\n done(0, 0);\n };\n var style = img.style;\n style.visibility = 'hidden';\n style.position = 'fixed';\n style.bottom = style.left = '0px';\n style.width = style.height = 'auto';\n domGlobals.document.body.appendChild(img);\n img.src = url;\n };\n var buildListItems = function (inputList, itemCallback, startItems) {\n function appendItems(values, output) {\n output = output || [];\n global$2.each(values, function (item) {\n var menuItem = { text: item.text || item.title };\n if (item.menu) {\n menuItem.menu = appendItems(item.menu);\n } else {\n menuItem.value = item.value;\n itemCallback(menuItem);\n }\n output.push(menuItem);\n });\n return output;\n }\n return appendItems(inputList, startItems || []);\n };\n var removePixelSuffix = function (value) {\n if (value) {\n value = value.replace(/px$/, '');\n }\n return value;\n };\n var addPixelSuffix = function (value) {\n if (value.length > 0 && /^[0-9]+$/.test(value)) {\n value += 'px';\n }\n return value;\n };\n var mergeMargins = function (css) {\n if (css.margin) {\n var splitMargin = css.margin.split(' ');\n switch (splitMargin.length) {\n case 1:\n css['margin-top'] = css['margin-top'] || splitMargin[0];\n css['margin-right'] = css['margin-right'] || splitMargin[0];\n css['margin-bottom'] = css['margin-bottom'] || splitMargin[0];\n css['margin-left'] = css['margin-left'] || splitMargin[0];\n break;\n case 2:\n css['margin-top'] = css['margin-top'] || splitMargin[0];\n css['margin-right'] = css['margin-right'] || splitMargin[1];\n css['margin-bottom'] = css['margin-bottom'] || splitMargin[0];\n css['margin-left'] = css['margin-left'] || splitMargin[1];\n break;\n case 3:\n css['margin-top'] = css['margin-top'] || splitMargin[0];\n css['margin-right'] = css['margin-right'] || splitMargin[1];\n css['margin-bottom'] = css['margin-bottom'] || splitMargin[2];\n css['margin-left'] = css['margin-left'] || splitMargin[1];\n break;\n case 4:\n css['margin-top'] = css['margin-top'] || splitMargin[0];\n css['margin-right'] = css['margin-right'] || splitMargin[1];\n css['margin-bottom'] = css['margin-bottom'] || splitMargin[2];\n css['margin-left'] = css['margin-left'] || splitMargin[3];\n }\n delete css.margin;\n }\n return css;\n };\n var createImageList = function (editor, callback) {\n var imageList = Settings.getImageList(editor);\n if (typeof imageList === 'string') {\n global$3.send({\n url: imageList,\n success: function (text) {\n callback(JSON.parse(text));\n }\n });\n } else if (typeof imageList === 'function') {\n imageList(callback);\n } else {\n callback(imageList);\n }\n };\n var waitLoadImage = function (editor, data, imgElm) {\n function selectImage() {\n imgElm.onload = imgElm.onerror = null;\n if (editor.selection) {\n editor.selection.select(imgElm);\n editor.nodeChanged();\n }\n }\n imgElm.onload = function () {\n if (!data.width && !data.height && Settings.hasDimensions(editor)) {\n editor.dom.setAttribs(imgElm, {\n width: imgElm.clientWidth,\n height: imgElm.clientHeight\n });\n }\n selectImage();\n };\n imgElm.onerror = selectImage;\n };\n var blobToDataUri = function (blob) {\n return new global$1(function (resolve, reject) {\n var reader = FileReader();\n reader.onload = function () {\n resolve(reader.result);\n };\n reader.onerror = function () {\n reject(reader.error.message);\n };\n reader.readAsDataURL(blob);\n });\n };\n var Utils = {\n getImageSize: getImageSize,\n buildListItems: buildListItems,\n removePixelSuffix: removePixelSuffix,\n addPixelSuffix: addPixelSuffix,\n mergeMargins: mergeMargins,\n createImageList: createImageList,\n waitLoadImage: waitLoadImage,\n blobToDataUri: blobToDataUri\n };\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n var shallow = function (old, nu) {\n return nu;\n };\n var baseMerge = function (merger) {\n return function () {\n var objects = new Array(arguments.length);\n for (var i = 0; i < objects.length; i++) {\n objects[i] = arguments[i];\n }\n if (objects.length === 0) {\n throw new Error('Can\\'t merge zero objects');\n }\n var ret = {};\n for (var j = 0; j < objects.length; j++) {\n var curObject = objects[j];\n for (var key in curObject) {\n if (hasOwnProperty.call(curObject, key)) {\n ret[key] = merger(ret[key], curObject[key]);\n }\n }\n }\n return ret;\n };\n };\n var merge = baseMerge(shallow);\n\n var DOM = global$4.DOM;\n var getHspace = function (image) {\n if (image.style.marginLeft && image.style.marginRight && image.style.marginLeft === image.style.marginRight) {\n return Utils.removePixelSuffix(image.style.marginLeft);\n } else {\n return '';\n }\n };\n var getVspace = function (image) {\n if (image.style.marginTop && image.style.marginBottom && image.style.marginTop === image.style.marginBottom) {\n return Utils.removePixelSuffix(image.style.marginTop);\n } else {\n return '';\n }\n };\n var getBorder = function (image) {\n if (image.style.borderWidth) {\n return Utils.removePixelSuffix(image.style.borderWidth);\n } else {\n return '';\n }\n };\n var getAttrib = function (image, name) {\n if (image.hasAttribute(name)) {\n return image.getAttribute(name);\n } else {\n return '';\n }\n };\n var getStyle = function (image, name) {\n return image.style[name] ? image.style[name] : '';\n };\n var hasCaption = function (image) {\n return image.parentNode !== null && image.parentNode.nodeName === 'FIGURE';\n };\n var setAttrib = function (image, name, value) {\n image.setAttribute(name, value);\n };\n var wrapInFigure = function (image) {\n var figureElm = DOM.create('figure', { class: 'image' });\n DOM.insertAfter(figureElm, image);\n figureElm.appendChild(image);\n figureElm.appendChild(DOM.create('figcaption', { contentEditable: true }, 'Caption'));\n figureElm.contentEditable = 'false';\n };\n var removeFigure = function (image) {\n var figureElm = image.parentNode;\n DOM.insertAfter(image, figureElm);\n DOM.remove(figureElm);\n };\n var toggleCaption = function (image) {\n if (hasCaption(image)) {\n removeFigure(image);\n } else {\n wrapInFigure(image);\n }\n };\n var normalizeStyle = function (image, normalizeCss) {\n var attrValue = image.getAttribute('style');\n var value = normalizeCss(attrValue !== null ? attrValue : '');\n if (value.length > 0) {\n image.setAttribute('style', value);\n image.setAttribute('data-mce-style', value);\n } else {\n image.removeAttribute('style');\n }\n };\n var setSize = function (name, normalizeCss) {\n return function (image, name, value) {\n if (image.style[name]) {\n image.style[name] = Utils.addPixelSuffix(value);\n normalizeStyle(image, normalizeCss);\n } else {\n setAttrib(image, name, value);\n }\n };\n };\n var getSize = function (image, name) {\n if (image.style[name]) {\n return Utils.removePixelSuffix(image.style[name]);\n } else {\n return getAttrib(image, name);\n }\n };\n var setHspace = function (image, value) {\n var pxValue = Utils.addPixelSuffix(value);\n image.style.marginLeft = pxValue;\n image.style.marginRight = pxValue;\n };\n var setVspace = function (image, value) {\n var pxValue = Utils.addPixelSuffix(value);\n image.style.marginTop = pxValue;\n image.style.marginBottom = pxValue;\n };\n var setBorder = function (image, value) {\n var pxValue = Utils.addPixelSuffix(value);\n image.style.borderWidth = pxValue;\n };\n var setBorderStyle = function (image, value) {\n image.style.borderStyle = value;\n };\n var getBorderStyle = function (image) {\n return getStyle(image, 'borderStyle');\n };\n var isFigure = function (elm) {\n return elm.nodeName === 'FIGURE';\n };\n var defaultData = function () {\n return {\n src: '',\n alt: '',\n title: '',\n width: '',\n height: '',\n class: '',\n style: '',\n caption: false,\n hspace: '',\n vspace: '',\n border: '',\n borderStyle: ''\n };\n };\n var getStyleValue = function (normalizeCss, data) {\n var image = domGlobals.document.createElement('img');\n setAttrib(image, 'style', data.style);\n if (getHspace(image) || data.hspace !== '') {\n setHspace(image, data.hspace);\n }\n if (getVspace(image) || data.vspace !== '') {\n setVspace(image, data.vspace);\n }\n if (getBorder(image) || data.border !== '') {\n setBorder(image, data.border);\n }\n if (getBorderStyle(image) || data.borderStyle !== '') {\n setBorderStyle(image, data.borderStyle);\n }\n return normalizeCss(image.getAttribute('style'));\n };\n var create = function (normalizeCss, data) {\n var image = domGlobals.document.createElement('img');\n write(normalizeCss, merge(data, { caption: false }), image);\n setAttrib(image, 'alt', data.alt);\n if (data.caption) {\n var figure = DOM.create('figure', { class: 'image' });\n figure.appendChild(image);\n figure.appendChild(DOM.create('figcaption', { contentEditable: true }, 'Caption'));\n figure.contentEditable = 'false';\n return figure;\n } else {\n return image;\n }\n };\n var read = function (normalizeCss, image) {\n return {\n src: getAttrib(image, 'src'),\n alt: getAttrib(image, 'alt'),\n title: getAttrib(image, 'title'),\n width: getSize(image, 'width'),\n height: getSize(image, 'height'),\n class: getAttrib(image, 'class'),\n style: normalizeCss(getAttrib(image, 'style')),\n caption: hasCaption(image),\n hspace: getHspace(image),\n vspace: getVspace(image),\n border: getBorder(image),\n borderStyle: getStyle(image, 'borderStyle')\n };\n };\n var updateProp = function (image, oldData, newData, name, set) {\n if (newData[name] !== oldData[name]) {\n set(image, name, newData[name]);\n }\n };\n var normalized = function (set, normalizeCss) {\n return function (image, name, value) {\n set(image, value);\n normalizeStyle(image, normalizeCss);\n };\n };\n var write = function (normalizeCss, newData, image) {\n var oldData = read(normalizeCss, image);\n updateProp(image, oldData, newData, 'caption', function (image, _name, _value) {\n return toggleCaption(image);\n });\n updateProp(image, oldData, newData, 'src', setAttrib);\n updateProp(image, oldData, newData, 'alt', setAttrib);\n updateProp(image, oldData, newData, 'title', setAttrib);\n updateProp(image, oldData, newData, 'width', setSize('width', normalizeCss));\n updateProp(image, oldData, newData, 'height', setSize('height', normalizeCss));\n updateProp(image, oldData, newData, 'class', setAttrib);\n updateProp(image, oldData, newData, 'style', normalized(function (image, value) {\n return setAttrib(image, 'style', value);\n }, normalizeCss));\n updateProp(image, oldData, newData, 'hspace', normalized(setHspace, normalizeCss));\n updateProp(image, oldData, newData, 'vspace', normalized(setVspace, normalizeCss));\n updateProp(image, oldData, newData, 'border', normalized(setBorder, normalizeCss));\n updateProp(image, oldData, newData, 'borderStyle', normalized(setBorderStyle, normalizeCss));\n };\n\n var normalizeCss = function (editor, cssText) {\n var css = editor.dom.styles.parse(cssText);\n var mergedCss = Utils.mergeMargins(css);\n var compressed = editor.dom.styles.parse(editor.dom.styles.serialize(mergedCss));\n return editor.dom.styles.serialize(compressed);\n };\n var getSelectedImage = function (editor) {\n var imgElm = editor.selection.getNode();\n var figureElm = editor.dom.getParent(imgElm, 'figure.image');\n if (figureElm) {\n return editor.dom.select('img', figureElm)[0];\n }\n if (imgElm && (imgElm.nodeName !== 'IMG' || imgElm.getAttribute('data-mce-object') || imgElm.getAttribute('data-mce-placeholder'))) {\n return null;\n }\n return imgElm;\n };\n var splitTextBlock = function (editor, figure) {\n var dom = editor.dom;\n var textBlock = dom.getParent(figure.parentNode, function (node) {\n return editor.schema.getTextBlockElements()[node.nodeName];\n }, editor.getBody());\n if (textBlock) {\n return dom.split(textBlock, figure);\n } else {\n return figure;\n }\n };\n var readImageDataFromSelection = function (editor) {\n var image = getSelectedImage(editor);\n return image ? read(function (css) {\n return normalizeCss(editor, css);\n }, image) : defaultData();\n };\n var insertImageAtCaret = function (editor, data) {\n var elm = create(function (css) {\n return normalizeCss(editor, css);\n }, data);\n editor.dom.setAttrib(elm, 'data-mce-id', '__mcenew');\n editor.focus();\n editor.selection.setContent(elm.outerHTML);\n var insertedElm = editor.dom.select('*[data-mce-id=\"__mcenew\"]')[0];\n editor.dom.setAttrib(insertedElm, 'data-mce-id', null);\n if (isFigure(insertedElm)) {\n var figure = splitTextBlock(editor, insertedElm);\n editor.selection.select(figure);\n } else {\n editor.selection.select(insertedElm);\n }\n };\n var syncSrcAttr = function (editor, image) {\n editor.dom.setAttrib(image, 'src', image.getAttribute('src'));\n };\n var deleteImage = function (editor, image) {\n if (image) {\n var elm = editor.dom.is(image.parentNode, 'figure.image') ? image.parentNode : image;\n editor.dom.remove(elm);\n editor.focus();\n editor.nodeChanged();\n if (editor.dom.isEmpty(editor.getBody())) {\n editor.setContent('');\n editor.selection.setCursorLocation();\n }\n }\n };\n var writeImageDataToSelection = function (editor, data) {\n var image = getSelectedImage(editor);\n write(function (css) {\n return normalizeCss(editor, css);\n }, data, image);\n syncSrcAttr(editor, image);\n if (isFigure(image.parentNode)) {\n var figure = image.parentNode;\n splitTextBlock(editor, figure);\n editor.selection.select(image.parentNode);\n } else {\n editor.selection.select(image);\n Utils.waitLoadImage(editor, data, image);\n }\n };\n var insertOrUpdateImage = function (editor, data) {\n var image = getSelectedImage(editor);\n if (image) {\n if (data.src) {\n writeImageDataToSelection(editor, data);\n } else {\n deleteImage(editor, image);\n }\n } else if (data.src) {\n insertImageAtCaret(editor, data);\n }\n };\n\n var updateVSpaceHSpaceBorder = function (editor) {\n return function (evt) {\n var dom = editor.dom;\n var rootControl = evt.control.rootControl;\n if (!Settings.hasAdvTab(editor)) {\n return;\n }\n var data = rootControl.toJSON();\n var css = dom.parseStyle(data.style);\n rootControl.find('#vspace').value('');\n rootControl.find('#hspace').value('');\n css = Utils.mergeMargins(css);\n if (css['margin-top'] && css['margin-bottom'] || css['margin-right'] && css['margin-left']) {\n if (css['margin-top'] === css['margin-bottom']) {\n rootControl.find('#vspace').value(Utils.removePixelSuffix(css['margin-top']));\n } else {\n rootControl.find('#vspace').value('');\n }\n if (css['margin-right'] === css['margin-left']) {\n rootControl.find('#hspace').value(Utils.removePixelSuffix(css['margin-right']));\n } else {\n rootControl.find('#hspace').value('');\n }\n }\n if (css['border-width']) {\n rootControl.find('#border').value(Utils.removePixelSuffix(css['border-width']));\n } else {\n rootControl.find('#border').value('');\n }\n if (css['border-style']) {\n rootControl.find('#borderStyle').value(css['border-style']);\n } else {\n rootControl.find('#borderStyle').value('');\n }\n rootControl.find('#style').value(dom.serializeStyle(dom.parseStyle(dom.serializeStyle(css))));\n };\n };\n var updateStyle = function (editor, win) {\n win.find('#style').each(function (ctrl) {\n var value = getStyleValue(function (css) {\n return normalizeCss(editor, css);\n }, merge(defaultData(), win.toJSON()));\n ctrl.value(value);\n });\n };\n var makeTab = function (editor) {\n return {\n title: 'Advanced',\n type: 'form',\n pack: 'start',\n items: [\n {\n label: 'Style',\n name: 'style',\n type: 'textbox',\n onchange: updateVSpaceHSpaceBorder(editor)\n },\n {\n type: 'form',\n layout: 'grid',\n packV: 'start',\n columns: 2,\n padding: 0,\n defaults: {\n type: 'textbox',\n maxWidth: 50,\n onchange: function (evt) {\n updateStyle(editor, evt.control.rootControl);\n }\n },\n items: [\n {\n label: 'Vertical space',\n name: 'vspace'\n },\n {\n label: 'Border width',\n name: 'border'\n },\n {\n label: 'Horizontal space',\n name: 'hspace'\n },\n {\n label: 'Border style',\n type: 'listbox',\n name: 'borderStyle',\n width: 90,\n maxWidth: 90,\n onselect: function (evt) {\n updateStyle(editor, evt.control.rootControl);\n },\n values: [\n {\n text: 'Select...',\n value: ''\n },\n {\n text: 'Solid',\n value: 'solid'\n },\n {\n text: 'Dotted',\n value: 'dotted'\n },\n {\n text: 'Dashed',\n value: 'dashed'\n },\n {\n text: 'Double',\n value: 'double'\n },\n {\n text: 'Groove',\n value: 'groove'\n },\n {\n text: 'Ridge',\n value: 'ridge'\n },\n {\n text: 'Inset',\n value: 'inset'\n },\n {\n text: 'Outset',\n value: 'outset'\n },\n {\n text: 'None',\n value: 'none'\n },\n {\n text: 'Hidden',\n value: 'hidden'\n }\n ]\n }\n ]\n }\n ]\n };\n };\n var AdvTab = { makeTab: makeTab };\n\n var doSyncSize = function (widthCtrl, heightCtrl) {\n widthCtrl.state.set('oldVal', widthCtrl.value());\n heightCtrl.state.set('oldVal', heightCtrl.value());\n };\n var doSizeControls = function (win, f) {\n var widthCtrl = win.find('#width')[0];\n var heightCtrl = win.find('#height')[0];\n var constrained = win.find('#constrain')[0];\n if (widthCtrl && heightCtrl && constrained) {\n f(widthCtrl, heightCtrl, constrained.checked());\n }\n };\n var doUpdateSize = function (widthCtrl, heightCtrl, isContrained) {\n var oldWidth = widthCtrl.state.get('oldVal');\n var oldHeight = heightCtrl.state.get('oldVal');\n var newWidth = widthCtrl.value();\n var newHeight = heightCtrl.value();\n if (isContrained && oldWidth && oldHeight && newWidth && newHeight) {\n if (newWidth !== oldWidth) {\n newHeight = Math.round(newWidth / oldWidth * newHeight);\n if (!isNaN(newHeight)) {\n heightCtrl.value(newHeight);\n }\n } else {\n newWidth = Math.round(newHeight / oldHeight * newWidth);\n if (!isNaN(newWidth)) {\n widthCtrl.value(newWidth);\n }\n }\n }\n doSyncSize(widthCtrl, heightCtrl);\n };\n var syncSize = function (win) {\n doSizeControls(win, doSyncSize);\n };\n var updateSize = function (win) {\n doSizeControls(win, doUpdateSize);\n };\n var createUi = function () {\n var recalcSize = function (evt) {\n updateSize(evt.control.rootControl);\n };\n return {\n type: 'container',\n label: 'Dimensions',\n layout: 'flex',\n align: 'center',\n spacing: 5,\n items: [\n {\n name: 'width',\n type: 'textbox',\n maxLength: 5,\n size: 5,\n onchange: recalcSize,\n ariaLabel: 'Width'\n },\n {\n type: 'label',\n text: 'x'\n },\n {\n name: 'height',\n type: 'textbox',\n maxLength: 5,\n size: 5,\n onchange: recalcSize,\n ariaLabel: 'Height'\n },\n {\n name: 'constrain',\n type: 'checkbox',\n checked: true,\n text: 'Constrain proportions'\n }\n ]\n };\n };\n var SizeManager = {\n createUi: createUi,\n syncSize: syncSize,\n updateSize: updateSize\n };\n\n var onSrcChange = function (evt, editor) {\n var srcURL, prependURL, absoluteURLPattern;\n var meta = evt.meta || {};\n var control = evt.control;\n var rootControl = control.rootControl;\n var imageListCtrl = rootControl.find('#image-list')[0];\n if (imageListCtrl) {\n imageListCtrl.value(editor.convertURL(control.value(), 'src'));\n }\n global$2.each(meta, function (value, key) {\n rootControl.find('#' + key).value(value);\n });\n if (!meta.width && !meta.height) {\n srcURL = editor.convertURL(control.value(), 'src');\n prependURL = Settings.getPrependUrl(editor);\n absoluteURLPattern = new RegExp('^(?:[a-z]+:)?//', 'i');\n if (prependURL && !absoluteURLPattern.test(srcURL) && srcURL.substring(0, prependURL.length) !== prependURL) {\n srcURL = prependURL + srcURL;\n }\n control.value(srcURL);\n Utils.getImageSize(editor.documentBaseURI.toAbsolute(control.value()), function (data) {\n if (data.width && data.height && Settings.hasDimensions(editor)) {\n rootControl.find('#width').value(data.width);\n rootControl.find('#height').value(data.height);\n SizeManager.syncSize(rootControl);\n }\n });\n }\n };\n var onBeforeCall = function (evt) {\n evt.meta = evt.control.rootControl.toJSON();\n };\n var getGeneralItems = function (editor, imageListCtrl) {\n var generalFormItems = [\n {\n name: 'src',\n type: 'filepicker',\n filetype: 'image',\n label: 'Source',\n autofocus: true,\n onchange: function (evt) {\n onSrcChange(evt, editor);\n },\n onbeforecall: onBeforeCall\n },\n imageListCtrl\n ];\n if (Settings.hasDescription(editor)) {\n generalFormItems.push({\n name: 'alt',\n type: 'textbox',\n label: 'Image description'\n });\n }\n if (Settings.hasImageTitle(editor)) {\n generalFormItems.push({\n name: 'title',\n type: 'textbox',\n label: 'Image Title'\n });\n }\n if (Settings.hasDimensions(editor)) {\n generalFormItems.push(SizeManager.createUi());\n }\n if (Settings.getClassList(editor)) {\n generalFormItems.push({\n name: 'class',\n type: 'listbox',\n label: 'Class',\n values: Utils.buildListItems(Settings.getClassList(editor), function (item) {\n if (item.value) {\n item.textStyle = function () {\n return editor.formatter.getCssText({\n inline: 'img',\n classes: [item.value]\n });\n };\n }\n })\n });\n }\n if (Settings.hasImageCaption(editor)) {\n generalFormItems.push({\n name: 'caption',\n type: 'checkbox',\n label: 'Caption'\n });\n }\n return generalFormItems;\n };\n var makeTab$1 = function (editor, imageListCtrl) {\n return {\n title: 'General',\n type: 'form',\n items: getGeneralItems(editor, imageListCtrl)\n };\n };\n var MainTab = {\n makeTab: makeTab$1,\n getGeneralItems: getGeneralItems\n };\n\n var url = function () {\n return Global$1.getOrDie('URL');\n };\n var createObjectURL = function (blob) {\n return url().createObjectURL(blob);\n };\n var revokeObjectURL = function (u) {\n url().revokeObjectURL(u);\n };\n var URL = {\n createObjectURL: createObjectURL,\n revokeObjectURL: revokeObjectURL\n };\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.ui.Factory');\n\n function XMLHttpRequest () {\n var f = Global$1.getOrDie('XMLHttpRequest');\n return new f();\n }\n\n var noop = function () {\n };\n var pathJoin = function (path1, path2) {\n if (path1) {\n return path1.replace(/\\/$/, '') + '/' + path2.replace(/^\\//, '');\n }\n return path2;\n };\n function Uploader (settings) {\n var defaultHandler = function (blobInfo, success, failure, progress) {\n var xhr, formData;\n xhr = XMLHttpRequest();\n xhr.open('POST', settings.url);\n xhr.withCredentials = settings.credentials;\n xhr.upload.onprogress = function (e) {\n progress(e.loaded / e.total * 100);\n };\n xhr.onerror = function () {\n failure('Image upload failed due to a XHR Transport error. Code: ' + xhr.status);\n };\n xhr.onload = function () {\n var json;\n if (xhr.status < 200 || xhr.status >= 300) {\n failure('HTTP Error: ' + xhr.status);\n return;\n }\n json = JSON.parse(xhr.responseText);\n if (!json || typeof json.location !== 'string') {\n failure('Invalid JSON: ' + xhr.responseText);\n return;\n }\n success(pathJoin(settings.basePath, json.location));\n };\n formData = new domGlobals.FormData();\n formData.append('file', blobInfo.blob(), blobInfo.filename());\n xhr.send(formData);\n };\n var uploadBlob = function (blobInfo, handler) {\n return new global$1(function (resolve, reject) {\n try {\n handler(blobInfo, resolve, reject, noop);\n } catch (ex) {\n reject(ex.message);\n }\n });\n };\n var isDefaultHandler = function (handler) {\n return handler === defaultHandler;\n };\n var upload = function (blobInfo) {\n return !settings.url && isDefaultHandler(settings.handler) ? global$1.reject('Upload url missing from the settings.') : uploadBlob(blobInfo, settings.handler);\n };\n settings = global$2.extend({\n credentials: false,\n handler: defaultHandler\n }, settings);\n return { upload: upload };\n }\n\n var onFileInput = function (editor) {\n return function (evt) {\n var Throbber = global$5.get('Throbber');\n var rootControl = evt.control.rootControl;\n var throbber = new Throbber(rootControl.getEl());\n var file = evt.control.value();\n var blobUri = URL.createObjectURL(file);\n var uploader = Uploader({\n url: Settings.getUploadUrl(editor),\n basePath: Settings.getUploadBasePath(editor),\n credentials: Settings.getUploadCredentials(editor),\n handler: Settings.getUploadHandler(editor)\n });\n var finalize = function () {\n throbber.hide();\n URL.revokeObjectURL(blobUri);\n };\n throbber.show();\n return Utils.blobToDataUri(file).then(function (dataUrl) {\n var blobInfo = editor.editorUpload.blobCache.create({\n blob: file,\n blobUri: blobUri,\n name: file.name ? file.name.replace(/\\.[^\\.]+$/, '') : null,\n base64: dataUrl.split(',')[1]\n });\n return uploader.upload(blobInfo).then(function (url) {\n var src = rootControl.find('#src');\n src.value(url);\n rootControl.find('tabpanel')[0].activateTab(0);\n src.fire('change');\n finalize();\n return url;\n });\n }).catch(function (err) {\n editor.windowManager.alert(err);\n finalize();\n });\n };\n };\n var acceptExts = '.jpg,.jpeg,.png,.gif';\n var makeTab$2 = function (editor) {\n return {\n title: 'Upload',\n type: 'form',\n layout: 'flex',\n direction: 'column',\n align: 'stretch',\n padding: '20 20 20 20',\n items: [\n {\n type: 'container',\n layout: 'flex',\n direction: 'column',\n align: 'center',\n spacing: 10,\n items: [\n {\n text: 'Browse for an image',\n type: 'browsebutton',\n accept: acceptExts,\n onchange: onFileInput(editor)\n },\n {\n text: 'OR',\n type: 'label'\n }\n ]\n },\n {\n text: 'Drop an image here',\n type: 'dropzone',\n accept: acceptExts,\n height: 100,\n onchange: onFileInput(editor)\n }\n ]\n };\n };\n var UploadTab = { makeTab: makeTab$2 };\n\n function curry(fn) {\n var initialArgs = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n initialArgs[_i - 1] = arguments[_i];\n }\n return function () {\n var restArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n restArgs[_i] = arguments[_i];\n }\n var all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n\n var submitForm = function (editor, evt) {\n var win = evt.control.getRoot();\n SizeManager.updateSize(win);\n editor.undoManager.transact(function () {\n var data = merge(readImageDataFromSelection(editor), win.toJSON());\n insertOrUpdateImage(editor, data);\n });\n editor.editorUpload.uploadImagesAuto();\n };\n function Dialog (editor) {\n function showDialog(imageList) {\n var data = readImageDataFromSelection(editor);\n var win, imageListCtrl;\n if (imageList) {\n imageListCtrl = {\n type: 'listbox',\n label: 'Image list',\n name: 'image-list',\n values: Utils.buildListItems(imageList, function (item) {\n item.value = editor.convertURL(item.value || item.url, 'src');\n }, [{\n text: 'None',\n value: ''\n }]),\n value: data.src && editor.convertURL(data.src, 'src'),\n onselect: function (e) {\n var altCtrl = win.find('#alt');\n if (!altCtrl.value() || e.lastControl && altCtrl.value() === e.lastControl.text()) {\n altCtrl.value(e.control.text());\n }\n win.find('#src').value(e.control.value()).fire('change');\n },\n onPostRender: function () {\n imageListCtrl = this;\n }\n };\n }\n if (Settings.hasAdvTab(editor) || Settings.hasUploadUrl(editor) || Settings.hasUploadHandler(editor)) {\n var body = [MainTab.makeTab(editor, imageListCtrl)];\n if (Settings.hasAdvTab(editor)) {\n body.push(AdvTab.makeTab(editor));\n }\n if (Settings.hasUploadUrl(editor) || Settings.hasUploadHandler(editor)) {\n body.push(UploadTab.makeTab(editor));\n }\n win = editor.windowManager.open({\n title: 'Insert/edit image',\n data: data,\n bodyType: 'tabpanel',\n body: body,\n onSubmit: curry(submitForm, editor)\n });\n } else {\n win = editor.windowManager.open({\n title: 'Insert/edit image',\n data: data,\n body: MainTab.getGeneralItems(editor, imageListCtrl),\n onSubmit: curry(submitForm, editor)\n });\n }\n SizeManager.syncSize(win);\n }\n function open() {\n Utils.createImageList(editor, showDialog);\n }\n return { open: open };\n }\n\n var register = function (editor) {\n editor.addCommand('mceImage', Dialog(editor).open);\n };\n var Commands = { register: register };\n\n var hasImageClass = function (node) {\n var className = node.attr('class');\n return className && /\\bimage\\b/.test(className);\n };\n var toggleContentEditableState = function (state) {\n return function (nodes) {\n var i = nodes.length, node;\n var toggleContentEditable = function (node) {\n node.attr('contenteditable', state ? 'true' : null);\n };\n while (i--) {\n node = nodes[i];\n if (hasImageClass(node)) {\n node.attr('contenteditable', state ? 'false' : null);\n global$2.each(node.getAll('figcaption'), toggleContentEditable);\n }\n }\n };\n };\n var setup = function (editor) {\n editor.on('preInit', function () {\n editor.parser.addNodeFilter('figure', toggleContentEditableState(true));\n editor.serializer.addNodeFilter('figure', toggleContentEditableState(false));\n });\n };\n var FilterContent = { setup: setup };\n\n var register$1 = function (editor) {\n editor.addButton('image', {\n icon: 'image',\n tooltip: 'Insert/edit image',\n onclick: Dialog(editor).open,\n stateSelector: 'img:not([data-mce-object],[data-mce-placeholder]),figure.image'\n });\n editor.addMenuItem('image', {\n icon: 'image',\n text: 'Image',\n onclick: Dialog(editor).open,\n context: 'insert',\n prependToContext: true\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('image', function (editor) {\n FilterContent.setup(editor);\n Buttons.register(editor);\n Commands.register(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}(window));\n})();\n","// Exports the \"insertdatetime\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/insertdatetime')\n// ES2015:\n// import 'tinymce/plugins/insertdatetime'\nrequire('./plugin.js');","(function () {\nvar insertdatetime = (function () {\n 'use strict';\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n var clone = function () {\n return Cell(get());\n };\n return {\n get: get,\n set: set,\n clone: clone\n };\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var getDateFormat = function (editor) {\n return editor.getParam('insertdatetime_dateformat', editor.translate('%Y-%m-%d'));\n };\n var getTimeFormat = function (editor) {\n return editor.getParam('insertdatetime_timeformat', editor.translate('%H:%M:%S'));\n };\n var getFormats = function (editor) {\n return editor.getParam('insertdatetime_formats', [\n '%H:%M:%S',\n '%Y-%m-%d',\n '%I:%M:%S %p',\n '%D'\n ]);\n };\n var getDefaultDateTime = function (editor) {\n var formats = getFormats(editor);\n return formats.length > 0 ? formats[0] : getTimeFormat(editor);\n };\n var shouldInsertTimeElement = function (editor) {\n return editor.getParam('insertdatetime_element', false);\n };\n var Settings = {\n getDateFormat: getDateFormat,\n getTimeFormat: getTimeFormat,\n getFormats: getFormats,\n getDefaultDateTime: getDefaultDateTime,\n shouldInsertTimeElement: shouldInsertTimeElement\n };\n\n var daysShort = 'Sun Mon Tue Wed Thu Fri Sat Sun'.split(' ');\n var daysLong = 'Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday'.split(' ');\n var monthsShort = 'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'.split(' ');\n var monthsLong = 'January February March April May June July August September October November December'.split(' ');\n var addZeros = function (value, len) {\n value = '' + value;\n if (value.length < len) {\n for (var i = 0; i < len - value.length; i++) {\n value = '0' + value;\n }\n }\n return value;\n };\n var getDateTime = function (editor, fmt, date) {\n date = date || new Date();\n fmt = fmt.replace('%D', '%m/%d/%Y');\n fmt = fmt.replace('%r', '%I:%M:%S %p');\n fmt = fmt.replace('%Y', '' + date.getFullYear());\n fmt = fmt.replace('%y', '' + date.getYear());\n fmt = fmt.replace('%m', addZeros(date.getMonth() + 1, 2));\n fmt = fmt.replace('%d', addZeros(date.getDate(), 2));\n fmt = fmt.replace('%H', '' + addZeros(date.getHours(), 2));\n fmt = fmt.replace('%M', '' + addZeros(date.getMinutes(), 2));\n fmt = fmt.replace('%S', '' + addZeros(date.getSeconds(), 2));\n fmt = fmt.replace('%I', '' + ((date.getHours() + 11) % 12 + 1));\n fmt = fmt.replace('%p', '' + (date.getHours() < 12 ? 'AM' : 'PM'));\n fmt = fmt.replace('%B', '' + editor.translate(monthsLong[date.getMonth()]));\n fmt = fmt.replace('%b', '' + editor.translate(monthsShort[date.getMonth()]));\n fmt = fmt.replace('%A', '' + editor.translate(daysLong[date.getDay()]));\n fmt = fmt.replace('%a', '' + editor.translate(daysShort[date.getDay()]));\n fmt = fmt.replace('%%', '%');\n return fmt;\n };\n var updateElement = function (editor, timeElm, computerTime, userTime) {\n var newTimeElm = editor.dom.create('time', { datetime: computerTime }, userTime);\n timeElm.parentNode.insertBefore(newTimeElm, timeElm);\n editor.dom.remove(timeElm);\n editor.selection.select(newTimeElm, true);\n editor.selection.collapse(false);\n };\n var insertDateTime = function (editor, format) {\n if (Settings.shouldInsertTimeElement(editor)) {\n var userTime = getDateTime(editor, format);\n var computerTime = void 0;\n if (/%[HMSIp]/.test(format)) {\n computerTime = getDateTime(editor, '%Y-%m-%dT%H:%M');\n } else {\n computerTime = getDateTime(editor, '%Y-%m-%d');\n }\n var timeElm = editor.dom.getParent(editor.selection.getStart(), 'time');\n if (timeElm) {\n updateElement(editor, timeElm, computerTime, userTime);\n } else {\n editor.insertContent('');\n }\n } else {\n editor.insertContent(getDateTime(editor, format));\n }\n };\n var Actions = {\n insertDateTime: insertDateTime,\n getDateTime: getDateTime\n };\n\n var register = function (editor) {\n editor.addCommand('mceInsertDate', function () {\n Actions.insertDateTime(editor, Settings.getDateFormat(editor));\n });\n editor.addCommand('mceInsertTime', function () {\n Actions.insertDateTime(editor, Settings.getTimeFormat(editor));\n });\n };\n var Commands = { register: register };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var createMenuItems = function (editor, lastFormatState) {\n var formats = Settings.getFormats(editor);\n return global$1.map(formats, function (fmt) {\n return {\n text: Actions.getDateTime(editor, fmt),\n onclick: function () {\n lastFormatState.set(fmt);\n Actions.insertDateTime(editor, fmt);\n }\n };\n });\n };\n var register$1 = function (editor, lastFormatState) {\n var menuItems = createMenuItems(editor, lastFormatState);\n editor.addButton('insertdatetime', {\n type: 'splitbutton',\n title: 'Insert date/time',\n menu: menuItems,\n onclick: function () {\n var lastFormat = lastFormatState.get();\n Actions.insertDateTime(editor, lastFormat ? lastFormat : Settings.getDefaultDateTime(editor));\n }\n });\n editor.addMenuItem('insertdatetime', {\n icon: 'date',\n text: 'Date/time',\n menu: menuItems,\n context: 'insert'\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('insertdatetime', function (editor) {\n var lastFormatState = Cell(null);\n Commands.register(editor);\n Buttons.register(editor, lastFormatState);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","// Exports the \"link\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/link')\n// ES2015:\n// import 'tinymce/plugins/link'\nrequire('./plugin.js');","(function () {\nvar link = (function (domGlobals) {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n var assumeExternalTargets = function (editorSettings) {\n return typeof editorSettings.link_assume_external_targets === 'boolean' ? editorSettings.link_assume_external_targets : false;\n };\n var hasContextToolbar = function (editorSettings) {\n return typeof editorSettings.link_context_toolbar === 'boolean' ? editorSettings.link_context_toolbar : false;\n };\n var getLinkList = function (editorSettings) {\n return editorSettings.link_list;\n };\n var hasDefaultLinkTarget = function (editorSettings) {\n return typeof editorSettings.default_link_target === 'string';\n };\n var getDefaultLinkTarget = function (editorSettings) {\n return editorSettings.default_link_target;\n };\n var getTargetList = function (editorSettings) {\n return editorSettings.target_list;\n };\n var setTargetList = function (editor, list) {\n editor.settings.target_list = list;\n };\n var shouldShowTargetList = function (editorSettings) {\n return getTargetList(editorSettings) !== false;\n };\n var getRelList = function (editorSettings) {\n return editorSettings.rel_list;\n };\n var hasRelList = function (editorSettings) {\n return getRelList(editorSettings) !== undefined;\n };\n var getLinkClassList = function (editorSettings) {\n return editorSettings.link_class_list;\n };\n var hasLinkClassList = function (editorSettings) {\n return getLinkClassList(editorSettings) !== undefined;\n };\n var shouldShowLinkTitle = function (editorSettings) {\n return editorSettings.link_title !== false;\n };\n var allowUnsafeLinkTarget = function (editorSettings) {\n return typeof editorSettings.allow_unsafe_link_target === 'boolean' ? editorSettings.allow_unsafe_link_target : false;\n };\n var Settings = {\n assumeExternalTargets: assumeExternalTargets,\n hasContextToolbar: hasContextToolbar,\n getLinkList: getLinkList,\n hasDefaultLinkTarget: hasDefaultLinkTarget,\n getDefaultLinkTarget: getDefaultLinkTarget,\n getTargetList: getTargetList,\n setTargetList: setTargetList,\n shouldShowTargetList: shouldShowTargetList,\n getRelList: getRelList,\n hasRelList: hasRelList,\n getLinkClassList: getLinkClassList,\n hasLinkClassList: hasLinkClassList,\n shouldShowLinkTitle: shouldShowLinkTitle,\n allowUnsafeLinkTarget: allowUnsafeLinkTarget\n };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var appendClickRemove = function (link, evt) {\n domGlobals.document.body.appendChild(link);\n link.dispatchEvent(evt);\n domGlobals.document.body.removeChild(link);\n };\n var open = function (url) {\n if (!global$3.ie || global$3.ie > 10) {\n var link = domGlobals.document.createElement('a');\n link.target = '_blank';\n link.href = url;\n link.rel = 'noreferrer noopener';\n var evt = domGlobals.document.createEvent('MouseEvents');\n evt.initMouseEvent('click', true, true, domGlobals.window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n appendClickRemove(link, evt);\n } else {\n var win = domGlobals.window.open('', '_blank');\n if (win) {\n win.opener = null;\n var doc = win.document;\n doc.open();\n doc.write('');\n doc.close();\n }\n }\n };\n var OpenUrl = { open: open };\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var toggleTargetRules = function (rel, isUnsafe) {\n var rules = ['noopener'];\n var newRel = rel ? rel.split(/\\s+/) : [];\n var toString = function (rel) {\n return global$4.trim(rel.sort().join(' '));\n };\n var addTargetRules = function (rel) {\n rel = removeTargetRules(rel);\n return rel.length ? rel.concat(rules) : rules;\n };\n var removeTargetRules = function (rel) {\n return rel.filter(function (val) {\n return global$4.inArray(rules, val) === -1;\n });\n };\n newRel = isUnsafe ? addTargetRules(newRel) : removeTargetRules(newRel);\n return newRel.length ? toString(newRel) : null;\n };\n var trimCaretContainers = function (text) {\n return text.replace(/\\uFEFF/g, '');\n };\n var getAnchorElement = function (editor, selectedElm) {\n selectedElm = selectedElm || editor.selection.getNode();\n if (isImageFigure(selectedElm)) {\n return editor.dom.select('a[href]', selectedElm)[0];\n } else {\n return editor.dom.getParent(selectedElm, 'a[href]');\n }\n };\n var getAnchorText = function (selection, anchorElm) {\n var text = anchorElm ? anchorElm.innerText || anchorElm.textContent : selection.getContent({ format: 'text' });\n return trimCaretContainers(text);\n };\n var isLink = function (elm) {\n return elm && elm.nodeName === 'A' && elm.href;\n };\n var hasLinks = function (elements) {\n return global$4.grep(elements, isLink).length > 0;\n };\n var isOnlyTextSelected = function (html) {\n if (/]+>[^<]+<\\/a>$/.test(html) || html.indexOf('href=') === -1)) {\n return false;\n }\n return true;\n };\n var isImageFigure = function (node) {\n return node && node.nodeName === 'FIGURE' && /\\bimage\\b/i.test(node.className);\n };\n var link = function (editor, attachState) {\n return function (data) {\n editor.undoManager.transact(function () {\n var selectedElm = editor.selection.getNode();\n var anchorElm = getAnchorElement(editor, selectedElm);\n var linkAttrs = {\n href: data.href,\n target: data.target ? data.target : null,\n rel: data.rel ? data.rel : null,\n class: data.class ? data.class : null,\n title: data.title ? data.title : null\n };\n if (!Settings.hasRelList(editor.settings) && Settings.allowUnsafeLinkTarget(editor.settings) === false) {\n linkAttrs.rel = toggleTargetRules(linkAttrs.rel, linkAttrs.target === '_blank');\n }\n if (data.href === attachState.href) {\n attachState.attach();\n attachState = {};\n }\n if (anchorElm) {\n editor.focus();\n if (data.hasOwnProperty('text')) {\n if ('innerText' in anchorElm) {\n anchorElm.innerText = data.text;\n } else {\n anchorElm.textContent = data.text;\n }\n }\n editor.dom.setAttribs(anchorElm, linkAttrs);\n editor.selection.select(anchorElm);\n editor.undoManager.add();\n } else {\n if (isImageFigure(selectedElm)) {\n linkImageFigure(editor, selectedElm, linkAttrs);\n } else if (data.hasOwnProperty('text')) {\n editor.insertContent(editor.dom.createHTML('a', linkAttrs, editor.dom.encode(data.text)));\n } else {\n editor.execCommand('mceInsertLink', false, linkAttrs);\n }\n }\n });\n };\n };\n var unlink = function (editor) {\n return function () {\n editor.undoManager.transact(function () {\n var node = editor.selection.getNode();\n if (isImageFigure(node)) {\n unlinkImageFigure(editor, node);\n } else {\n editor.execCommand('unlink');\n }\n });\n };\n };\n var unlinkImageFigure = function (editor, fig) {\n var a, img;\n img = editor.dom.select('img', fig)[0];\n if (img) {\n a = editor.dom.getParents(img, 'a[href]', fig)[0];\n if (a) {\n a.parentNode.insertBefore(img, a);\n editor.dom.remove(a);\n }\n }\n };\n var linkImageFigure = function (editor, fig, attrs) {\n var a, img;\n img = editor.dom.select('img', fig)[0];\n if (img) {\n a = editor.dom.create('a', attrs);\n img.parentNode.insertBefore(a, img);\n a.appendChild(img);\n }\n };\n var Utils = {\n link: link,\n unlink: unlink,\n isLink: isLink,\n hasLinks: hasLinks,\n isOnlyTextSelected: isOnlyTextSelected,\n getAnchorElement: getAnchorElement,\n getAnchorText: getAnchorText,\n toggleTargetRules: toggleTargetRules\n };\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.util.XHR');\n\n var attachState = {};\n var createLinkList = function (editor, callback) {\n var linkList = Settings.getLinkList(editor.settings);\n if (typeof linkList === 'string') {\n global$6.send({\n url: linkList,\n success: function (text) {\n callback(editor, JSON.parse(text));\n }\n });\n } else if (typeof linkList === 'function') {\n linkList(function (list) {\n callback(editor, list);\n });\n } else {\n callback(editor, linkList);\n }\n };\n var buildListItems = function (inputList, itemCallback, startItems) {\n var appendItems = function (values, output) {\n output = output || [];\n global$4.each(values, function (item) {\n var menuItem = { text: item.text || item.title };\n if (item.menu) {\n menuItem.menu = appendItems(item.menu);\n } else {\n menuItem.value = item.value;\n if (itemCallback) {\n itemCallback(menuItem);\n }\n }\n output.push(menuItem);\n });\n return output;\n };\n return appendItems(inputList, startItems || []);\n };\n var delayedConfirm = function (editor, message, callback) {\n var rng = editor.selection.getRng();\n global$5.setEditorTimeout(editor, function () {\n editor.windowManager.confirm(message, function (state) {\n editor.selection.setRng(rng);\n callback(state);\n });\n });\n };\n var showDialog = function (editor, linkList) {\n var data = {};\n var selection = editor.selection;\n var dom = editor.dom;\n var anchorElm, initialText;\n var win, onlyText, textListCtrl, linkListCtrl, relListCtrl, targetListCtrl, classListCtrl, linkTitleCtrl, value;\n var linkListChangeHandler = function (e) {\n var textCtrl = win.find('#text');\n if (!textCtrl.value() || e.lastControl && textCtrl.value() === e.lastControl.text()) {\n textCtrl.value(e.control.text());\n }\n win.find('#href').value(e.control.value());\n };\n var buildAnchorListControl = function (url) {\n var anchorList = [];\n global$4.each(editor.dom.select('a:not([href])'), function (anchor) {\n var id = anchor.name || anchor.id;\n if (id) {\n anchorList.push({\n text: id,\n value: '#' + id,\n selected: url.indexOf('#' + id) !== -1\n });\n }\n });\n if (anchorList.length) {\n anchorList.unshift({\n text: 'None',\n value: ''\n });\n return {\n name: 'anchor',\n type: 'listbox',\n label: 'Anchors',\n values: anchorList,\n onselect: linkListChangeHandler\n };\n }\n };\n var updateText = function () {\n if (!initialText && onlyText && !data.text) {\n this.parent().parent().find('#text')[0].value(this.value());\n }\n };\n var urlChange = function (e) {\n var meta = e.meta || {};\n if (linkListCtrl) {\n linkListCtrl.value(editor.convertURL(this.value(), 'href'));\n }\n global$4.each(e.meta, function (value, key) {\n var inp = win.find('#' + key);\n if (key === 'text') {\n if (initialText.length === 0) {\n inp.value(value);\n data.text = value;\n }\n } else {\n inp.value(value);\n }\n });\n if (meta.attach) {\n attachState = {\n href: this.value(),\n attach: meta.attach\n };\n }\n if (!meta.text) {\n updateText.call(this);\n }\n };\n var onBeforeCall = function (e) {\n e.meta = win.toJSON();\n };\n onlyText = Utils.isOnlyTextSelected(selection.getContent());\n anchorElm = Utils.getAnchorElement(editor);\n data.text = initialText = Utils.getAnchorText(editor.selection, anchorElm);\n data.href = anchorElm ? dom.getAttrib(anchorElm, 'href') : '';\n if (anchorElm) {\n data.target = dom.getAttrib(anchorElm, 'target');\n } else if (Settings.hasDefaultLinkTarget(editor.settings)) {\n data.target = Settings.getDefaultLinkTarget(editor.settings);\n }\n if (value = dom.getAttrib(anchorElm, 'rel')) {\n data.rel = value;\n }\n if (value = dom.getAttrib(anchorElm, 'class')) {\n data.class = value;\n }\n if (value = dom.getAttrib(anchorElm, 'title')) {\n data.title = value;\n }\n if (onlyText) {\n textListCtrl = {\n name: 'text',\n type: 'textbox',\n size: 40,\n label: 'Text to display',\n onchange: function () {\n data.text = this.value();\n }\n };\n }\n if (linkList) {\n linkListCtrl = {\n type: 'listbox',\n label: 'Link list',\n values: buildListItems(linkList, function (item) {\n item.value = editor.convertURL(item.value || item.url, 'href');\n }, [{\n text: 'None',\n value: ''\n }]),\n onselect: linkListChangeHandler,\n value: editor.convertURL(data.href, 'href'),\n onPostRender: function () {\n linkListCtrl = this;\n }\n };\n }\n if (Settings.shouldShowTargetList(editor.settings)) {\n if (Settings.getTargetList(editor.settings) === undefined) {\n Settings.setTargetList(editor, [\n {\n text: 'None',\n value: ''\n },\n {\n text: 'New window',\n value: '_blank'\n }\n ]);\n }\n targetListCtrl = {\n name: 'target',\n type: 'listbox',\n label: 'Target',\n values: buildListItems(Settings.getTargetList(editor.settings))\n };\n }\n if (Settings.hasRelList(editor.settings)) {\n relListCtrl = {\n name: 'rel',\n type: 'listbox',\n label: 'Rel',\n values: buildListItems(Settings.getRelList(editor.settings), function (item) {\n if (Settings.allowUnsafeLinkTarget(editor.settings) === false) {\n item.value = Utils.toggleTargetRules(item.value, data.target === '_blank');\n }\n })\n };\n }\n if (Settings.hasLinkClassList(editor.settings)) {\n classListCtrl = {\n name: 'class',\n type: 'listbox',\n label: 'Class',\n values: buildListItems(Settings.getLinkClassList(editor.settings), function (item) {\n if (item.value) {\n item.textStyle = function () {\n return editor.formatter.getCssText({\n inline: 'a',\n classes: [item.value]\n });\n };\n }\n })\n };\n }\n if (Settings.shouldShowLinkTitle(editor.settings)) {\n linkTitleCtrl = {\n name: 'title',\n type: 'textbox',\n label: 'Title',\n value: data.title\n };\n }\n win = editor.windowManager.open({\n title: 'Insert link',\n data: data,\n body: [\n {\n name: 'href',\n type: 'filepicker',\n filetype: 'file',\n size: 40,\n autofocus: true,\n label: 'Url',\n onchange: urlChange,\n onkeyup: updateText,\n onpaste: updateText,\n onbeforecall: onBeforeCall\n },\n textListCtrl,\n linkTitleCtrl,\n buildAnchorListControl(data.href),\n linkListCtrl,\n relListCtrl,\n targetListCtrl,\n classListCtrl\n ],\n onSubmit: function (e) {\n var assumeExternalTargets = Settings.assumeExternalTargets(editor.settings);\n var insertLink = Utils.link(editor, attachState);\n var removeLink = Utils.unlink(editor);\n var resultData = global$4.extend({}, data, e.data);\n var href = resultData.href;\n if (!href) {\n removeLink();\n return;\n }\n if (!onlyText || resultData.text === initialText) {\n delete resultData.text;\n }\n if (href.indexOf('@') > 0 && href.indexOf('//') === -1 && href.indexOf('mailto:') === -1) {\n delayedConfirm(editor, 'The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?', function (state) {\n if (state) {\n resultData.href = 'mailto:' + href;\n }\n insertLink(resultData);\n });\n return;\n }\n if (assumeExternalTargets === true && !/^\\w+:/i.test(href) || assumeExternalTargets === false && /^\\s*www[\\.|\\d\\.]/i.test(href)) {\n delayedConfirm(editor, 'The URL you entered seems to be an external link. Do you want to add the required http:// prefix?', function (state) {\n if (state) {\n resultData.href = 'http://' + href;\n }\n insertLink(resultData);\n });\n return;\n }\n insertLink(resultData);\n }\n });\n };\n var open$1 = function (editor) {\n createLinkList(editor, showDialog);\n };\n var Dialog = { open: open$1 };\n\n var getLink = function (editor, elm) {\n return editor.dom.getParent(elm, 'a[href]');\n };\n var getSelectedLink = function (editor) {\n return getLink(editor, editor.selection.getStart());\n };\n var getHref = function (elm) {\n var href = elm.getAttribute('data-mce-href');\n return href ? href : elm.getAttribute('href');\n };\n var isContextMenuVisible = function (editor) {\n var contextmenu = editor.plugins.contextmenu;\n return contextmenu ? contextmenu.isContextMenuVisible() : false;\n };\n var hasOnlyAltModifier = function (e) {\n return e.altKey === true && e.shiftKey === false && e.ctrlKey === false && e.metaKey === false;\n };\n var gotoLink = function (editor, a) {\n if (a) {\n var href = getHref(a);\n if (/^#/.test(href)) {\n var targetEl = editor.$(href);\n if (targetEl.length) {\n editor.selection.scrollIntoView(targetEl[0], true);\n }\n } else {\n OpenUrl.open(a.href);\n }\n }\n };\n var openDialog = function (editor) {\n return function () {\n Dialog.open(editor);\n };\n };\n var gotoSelectedLink = function (editor) {\n return function () {\n gotoLink(editor, getSelectedLink(editor));\n };\n };\n var leftClickedOnAHref = function (editor) {\n return function (elm) {\n var sel, rng, node;\n if (Settings.hasContextToolbar(editor.settings) && !isContextMenuVisible(editor) && Utils.isLink(elm)) {\n sel = editor.selection;\n rng = sel.getRng();\n node = rng.startContainer;\n if (node.nodeType === 3 && sel.isCollapsed() && rng.startOffset > 0 && rng.startOffset < node.data.length) {\n return true;\n }\n }\n return false;\n };\n };\n var setupGotoLinks = function (editor) {\n editor.on('click', function (e) {\n var link = getLink(editor, e.target);\n if (link && global$1.metaKeyPressed(e)) {\n e.preventDefault();\n gotoLink(editor, link);\n }\n });\n editor.on('keydown', function (e) {\n var link = getSelectedLink(editor);\n if (link && e.keyCode === 13 && hasOnlyAltModifier(e)) {\n e.preventDefault();\n gotoLink(editor, link);\n }\n });\n };\n var toggleActiveState = function (editor) {\n return function () {\n var self = this;\n editor.on('nodechange', function (e) {\n self.active(!editor.readonly && !!Utils.getAnchorElement(editor, e.element));\n });\n };\n };\n var toggleViewLinkState = function (editor) {\n return function () {\n var self = this;\n var toggleVisibility = function (e) {\n if (Utils.hasLinks(e.parents)) {\n self.show();\n } else {\n self.hide();\n }\n };\n if (!Utils.hasLinks(editor.dom.getParents(editor.selection.getStart()))) {\n self.hide();\n }\n editor.on('nodechange', toggleVisibility);\n self.on('remove', function () {\n editor.off('nodechange', toggleVisibility);\n });\n };\n };\n var Actions = {\n openDialog: openDialog,\n gotoSelectedLink: gotoSelectedLink,\n leftClickedOnAHref: leftClickedOnAHref,\n setupGotoLinks: setupGotoLinks,\n toggleActiveState: toggleActiveState,\n toggleViewLinkState: toggleViewLinkState\n };\n\n var register = function (editor) {\n editor.addCommand('mceLink', Actions.openDialog(editor));\n };\n var Commands = { register: register };\n\n var setup = function (editor) {\n editor.addShortcut('Meta+K', '', Actions.openDialog(editor));\n };\n var Keyboard = { setup: setup };\n\n var setupButtons = function (editor) {\n editor.addButton('link', {\n active: false,\n icon: 'link',\n tooltip: 'Insert/edit link',\n onclick: Actions.openDialog(editor),\n onpostrender: Actions.toggleActiveState(editor)\n });\n editor.addButton('unlink', {\n active: false,\n icon: 'unlink',\n tooltip: 'Remove link',\n onclick: Utils.unlink(editor),\n onpostrender: Actions.toggleActiveState(editor)\n });\n if (editor.addContextToolbar) {\n editor.addButton('openlink', {\n icon: 'newtab',\n tooltip: 'Open link',\n onclick: Actions.gotoSelectedLink(editor)\n });\n }\n };\n var setupMenuItems = function (editor) {\n editor.addMenuItem('openlink', {\n text: 'Open link',\n icon: 'newtab',\n onclick: Actions.gotoSelectedLink(editor),\n onPostRender: Actions.toggleViewLinkState(editor),\n prependToContext: true\n });\n editor.addMenuItem('link', {\n icon: 'link',\n text: 'Link',\n shortcut: 'Meta+K',\n onclick: Actions.openDialog(editor),\n stateSelector: 'a[href]',\n context: 'insert',\n prependToContext: true\n });\n editor.addMenuItem('unlink', {\n icon: 'unlink',\n text: 'Remove link',\n onclick: Utils.unlink(editor),\n stateSelector: 'a[href]'\n });\n };\n var setupContextToolbars = function (editor) {\n if (editor.addContextToolbar) {\n editor.addContextToolbar(Actions.leftClickedOnAHref(editor), 'openlink | link unlink');\n }\n };\n var Controls = {\n setupButtons: setupButtons,\n setupMenuItems: setupMenuItems,\n setupContextToolbars: setupContextToolbars\n };\n\n global.add('link', function (editor) {\n Controls.setupButtons(editor);\n Controls.setupMenuItems(editor);\n Controls.setupContextToolbars(editor);\n Actions.setupGotoLinks(editor);\n Commands.register(editor);\n Keyboard.setup(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}(window));\n})();\n","// Exports the \"lists\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/lists')\n// ES2015:\n// import 'tinymce/plugins/lists'\nrequire('./plugin.js');","(function () {\nvar lists = (function (domGlobals) {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.dom.RangeUtils');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.dom.BookmarkManager');\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var isTextNode = function (node) {\n return node && node.nodeType === 3;\n };\n var isListNode = function (node) {\n return node && /^(OL|UL|DL)$/.test(node.nodeName);\n };\n var isOlUlNode = function (node) {\n return node && /^(OL|UL)$/.test(node.nodeName);\n };\n var isListItemNode = function (node) {\n return node && /^(LI|DT|DD)$/.test(node.nodeName);\n };\n var isDlItemNode = function (node) {\n return node && /^(DT|DD)$/.test(node.nodeName);\n };\n var isTableCellNode = function (node) {\n return node && /^(TH|TD)$/.test(node.nodeName);\n };\n var isBr = function (node) {\n return node && node.nodeName === 'BR';\n };\n var isFirstChild = function (node) {\n return node.parentNode.firstChild === node;\n };\n var isLastChild = function (node) {\n return node.parentNode.lastChild === node;\n };\n var isTextBlock = function (editor, node) {\n return node && !!editor.schema.getTextBlockElements()[node.nodeName];\n };\n var isBlock = function (node, blockElements) {\n return node && node.nodeName in blockElements;\n };\n var isBogusBr = function (dom, node) {\n if (!isBr(node)) {\n return false;\n }\n if (dom.isBlock(node.nextSibling) && !isBr(node.previousSibling)) {\n return true;\n }\n return false;\n };\n var isEmpty = function (dom, elm, keepBookmarks) {\n var empty = dom.isEmpty(elm);\n if (keepBookmarks && dom.select('span[data-mce-type=bookmark]', elm).length > 0) {\n return false;\n }\n return empty;\n };\n var isChildOfBody = function (dom, elm) {\n return dom.isChildOf(elm, dom.getRoot());\n };\n var NodeType = {\n isTextNode: isTextNode,\n isListNode: isListNode,\n isOlUlNode: isOlUlNode,\n isDlItemNode: isDlItemNode,\n isListItemNode: isListItemNode,\n isTableCellNode: isTableCellNode,\n isBr: isBr,\n isFirstChild: isFirstChild,\n isLastChild: isLastChild,\n isTextBlock: isTextBlock,\n isBlock: isBlock,\n isBogusBr: isBogusBr,\n isEmpty: isEmpty,\n isChildOfBody: isChildOfBody\n };\n\n var getNormalizedPoint = function (container, offset) {\n if (NodeType.isTextNode(container)) {\n return {\n container: container,\n offset: offset\n };\n }\n var node = global$1.getNode(container, offset);\n if (NodeType.isTextNode(node)) {\n return {\n container: node,\n offset: offset >= container.childNodes.length ? node.data.length : 0\n };\n } else if (node.previousSibling && NodeType.isTextNode(node.previousSibling)) {\n return {\n container: node.previousSibling,\n offset: node.previousSibling.data.length\n };\n } else if (node.nextSibling && NodeType.isTextNode(node.nextSibling)) {\n return {\n container: node.nextSibling,\n offset: 0\n };\n }\n return {\n container: container,\n offset: offset\n };\n };\n var normalizeRange = function (rng) {\n var outRng = rng.cloneRange();\n var rangeStart = getNormalizedPoint(rng.startContainer, rng.startOffset);\n outRng.setStart(rangeStart.container, rangeStart.offset);\n var rangeEnd = getNormalizedPoint(rng.endContainer, rng.endOffset);\n outRng.setEnd(rangeEnd.container, rangeEnd.offset);\n return outRng;\n };\n var Range = {\n getNormalizedPoint: getNormalizedPoint,\n normalizeRange: normalizeRange\n };\n\n var DOM = global$6.DOM;\n var createBookmark = function (rng) {\n var bookmark = {};\n var setupEndPoint = function (start) {\n var offsetNode, container, offset;\n container = rng[start ? 'startContainer' : 'endContainer'];\n offset = rng[start ? 'startOffset' : 'endOffset'];\n if (container.nodeType === 1) {\n offsetNode = DOM.create('span', { 'data-mce-type': 'bookmark' });\n if (container.hasChildNodes()) {\n offset = Math.min(offset, container.childNodes.length - 1);\n if (start) {\n container.insertBefore(offsetNode, container.childNodes[offset]);\n } else {\n DOM.insertAfter(offsetNode, container.childNodes[offset]);\n }\n } else {\n container.appendChild(offsetNode);\n }\n container = offsetNode;\n offset = 0;\n }\n bookmark[start ? 'startContainer' : 'endContainer'] = container;\n bookmark[start ? 'startOffset' : 'endOffset'] = offset;\n };\n setupEndPoint(true);\n if (!rng.collapsed) {\n setupEndPoint();\n }\n return bookmark;\n };\n var resolveBookmark = function (bookmark) {\n function restoreEndPoint(start) {\n var container, offset, node;\n var nodeIndex = function (container) {\n var node = container.parentNode.firstChild, idx = 0;\n while (node) {\n if (node === container) {\n return idx;\n }\n if (node.nodeType !== 1 || node.getAttribute('data-mce-type') !== 'bookmark') {\n idx++;\n }\n node = node.nextSibling;\n }\n return -1;\n };\n container = node = bookmark[start ? 'startContainer' : 'endContainer'];\n offset = bookmark[start ? 'startOffset' : 'endOffset'];\n if (!container) {\n return;\n }\n if (container.nodeType === 1) {\n offset = nodeIndex(container);\n container = container.parentNode;\n DOM.remove(node);\n if (!container.hasChildNodes() && DOM.isBlock(container)) {\n container.appendChild(DOM.create('br'));\n }\n }\n bookmark[start ? 'startContainer' : 'endContainer'] = container;\n bookmark[start ? 'startOffset' : 'endOffset'] = offset;\n }\n restoreEndPoint(true);\n restoreEndPoint();\n var rng = DOM.createRng();\n rng.setStart(bookmark.startContainer, bookmark.startOffset);\n if (bookmark.endContainer) {\n rng.setEnd(bookmark.endContainer, bookmark.endOffset);\n }\n return Range.normalizeRange(rng);\n };\n var Bookmark = {\n createBookmark: createBookmark,\n resolveBookmark: resolveBookmark\n };\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var not = function (f) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return !f.apply(null, args);\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n if (Object.freeze) {\n Object.freeze(me);\n }\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Option = {\n some: some,\n none: none,\n from: from\n };\n\n var typeOf = function (x) {\n if (x === null) {\n return 'null';\n }\n var t = typeof x;\n if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n }\n if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n }\n return t;\n };\n var isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isString = isType('string');\n var isArray = isType('array');\n var isBoolean = isType('boolean');\n var isFunction = isType('function');\n var isNumber = isType('number');\n\n var nativeSlice = Array.prototype.slice;\n var nativePush = Array.prototype.push;\n var map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var each = function (xs, f) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n f(x, i);\n }\n };\n var filter = function (xs, pred) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n var groupBy = function (xs, f) {\n if (xs.length === 0) {\n return [];\n } else {\n var wasType = f(xs[0]);\n var r = [];\n var group = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n var type = f(x);\n if (type !== wasType) {\n r.push(group);\n group = [];\n }\n wasType = type;\n group.push(x);\n }\n if (group.length !== 0) {\n r.push(group);\n }\n return r;\n }\n };\n var foldl = function (xs, f, acc) {\n each(xs, function (x) {\n acc = f(acc, x);\n });\n return acc;\n };\n var find = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Option.some(x);\n }\n }\n return Option.none();\n };\n var flatten = function (xs) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n var bind = function (xs, f) {\n var output = map(xs, f);\n return flatten(output);\n };\n var reverse = function (xs) {\n var r = nativeSlice.call(xs, 0);\n r.reverse();\n return r;\n };\n var head = function (xs) {\n return xs.length === 0 ? Option.none() : Option.some(xs[0]);\n };\n var last = function (xs) {\n return xs.length === 0 ? Option.none() : Option.some(xs[xs.length - 1]);\n };\n var from$1 = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n\n var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')();\n\n var path = function (parts, scope) {\n var o = scope !== undefined && scope !== null ? scope : Global;\n for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n o = o[parts[i]];\n }\n return o;\n };\n var resolve = function (p, scope) {\n var parts = p.split('.');\n return path(parts, scope);\n };\n\n var unsafe = function (name, scope) {\n return resolve(name, scope);\n };\n var getOrDie = function (name, scope) {\n var actual = unsafe(name, scope);\n if (actual === undefined || actual === null) {\n throw new Error(name + ' not available on this browser');\n }\n return actual;\n };\n var Global$1 = { getOrDie: getOrDie };\n\n var htmlElement = function (scope) {\n return Global$1.getOrDie('HTMLElement', scope);\n };\n var isPrototypeOf = function (x) {\n var scope = resolve('ownerDocument.defaultView', x);\n return htmlElement(scope).prototype.isPrototypeOf(x);\n };\n var HTMLElement = { isPrototypeOf: isPrototypeOf };\n\n var global$7 = tinymce.util.Tools.resolve('tinymce.dom.DomQuery');\n\n var getParentList = function (editor) {\n var selectionStart = editor.selection.getStart(true);\n return editor.dom.getParent(selectionStart, 'OL,UL,DL', getClosestListRootElm(editor, selectionStart));\n };\n var isParentListSelected = function (parentList, selectedBlocks) {\n return parentList && selectedBlocks.length === 1 && selectedBlocks[0] === parentList;\n };\n var findSubLists = function (parentList) {\n return global$5.grep(parentList.querySelectorAll('ol,ul,dl'), function (elm) {\n return NodeType.isListNode(elm);\n });\n };\n var getSelectedSubLists = function (editor) {\n var parentList = getParentList(editor);\n var selectedBlocks = editor.selection.getSelectedBlocks();\n if (isParentListSelected(parentList, selectedBlocks)) {\n return findSubLists(parentList);\n } else {\n return global$5.grep(selectedBlocks, function (elm) {\n return NodeType.isListNode(elm) && parentList !== elm;\n });\n }\n };\n var findParentListItemsNodes = function (editor, elms) {\n var listItemsElms = global$5.map(elms, function (elm) {\n var parentLi = editor.dom.getParent(elm, 'li,dd,dt', getClosestListRootElm(editor, elm));\n return parentLi ? parentLi : elm;\n });\n return global$7.unique(listItemsElms);\n };\n var getSelectedListItems = function (editor) {\n var selectedBlocks = editor.selection.getSelectedBlocks();\n return global$5.grep(findParentListItemsNodes(editor, selectedBlocks), function (block) {\n return NodeType.isListItemNode(block);\n });\n };\n var getSelectedDlItems = function (editor) {\n return filter(getSelectedListItems(editor), NodeType.isDlItemNode);\n };\n var getClosestListRootElm = function (editor, elm) {\n var parentTableCell = editor.dom.getParents(elm, 'TD,TH');\n var root = parentTableCell.length > 0 ? parentTableCell[0] : editor.getBody();\n return root;\n };\n var findLastParentListNode = function (editor, elm) {\n var parentLists = editor.dom.getParents(elm, 'ol,ul', getClosestListRootElm(editor, elm));\n return last(parentLists);\n };\n var getSelectedLists = function (editor) {\n var firstList = findLastParentListNode(editor, editor.selection.getStart());\n var subsequentLists = filter(editor.selection.getSelectedBlocks(), NodeType.isOlUlNode);\n return firstList.toArray().concat(subsequentLists);\n };\n var getSelectedListRoots = function (editor) {\n var selectedLists = getSelectedLists(editor);\n return getUniqueListRoots(editor, selectedLists);\n };\n var getUniqueListRoots = function (editor, lists) {\n var listRoots = map(lists, function (list) {\n return findLastParentListNode(editor, list).getOr(list);\n });\n return global$7.unique(listRoots);\n };\n var isList = function (editor) {\n var list = getParentList(editor);\n return HTMLElement.isPrototypeOf(list);\n };\n var Selection = {\n isList: isList,\n getParentList: getParentList,\n getSelectedSubLists: getSelectedSubLists,\n getSelectedListItems: getSelectedListItems,\n getClosestListRootElm: getClosestListRootElm,\n getSelectedDlItems: getSelectedDlItems,\n getSelectedListRoots: getSelectedListRoots\n };\n\n var fromHtml = function (html, scope) {\n var doc = scope || domGlobals.document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n domGlobals.console.error('HTML does not have a single root node', html);\n throw new Error('HTML must have a single root node');\n }\n return fromDom(div.childNodes[0]);\n };\n var fromTag = function (tag, scope) {\n var doc = scope || domGlobals.document;\n var node = doc.createElement(tag);\n return fromDom(node);\n };\n var fromText = function (text, scope) {\n var doc = scope || domGlobals.document;\n var node = doc.createTextNode(text);\n return fromDom(node);\n };\n var fromDom = function (node) {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: constant(node) };\n };\n var fromPoint = function (docElm, x, y) {\n var doc = docElm.dom();\n return Option.from(doc.elementFromPoint(x, y)).map(fromDom);\n };\n var Element = {\n fromHtml: fromHtml,\n fromTag: fromTag,\n fromText: fromText,\n fromDom: fromDom,\n fromPoint: fromPoint\n };\n\n var lift2 = function (oa, ob, f) {\n return oa.isSome() && ob.isSome() ? Option.some(f(oa.getOrDie(), ob.getOrDie())) : Option.none();\n };\n\n var fromElements = function (elements, scope) {\n var doc = scope || domGlobals.document;\n var fragment = doc.createDocumentFragment();\n each(elements, function (element) {\n fragment.appendChild(element.dom());\n });\n return Element.fromDom(fragment);\n };\n\n var Immutable = function () {\n var fields = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n fields[_i] = arguments[_i];\n }\n return function () {\n var values = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n values[_i] = arguments[_i];\n }\n if (fields.length !== values.length) {\n throw new Error('Wrong number of arguments to struct. Expected \"[' + fields.length + ']\", got ' + values.length + ' arguments');\n }\n var struct = {};\n each(fields, function (name, i) {\n struct[name] = constant(values[i]);\n });\n return struct;\n };\n };\n\n var keys = Object.keys;\n var each$1 = function (obj, f) {\n var props = keys(obj);\n for (var k = 0, len = props.length; k < len; k++) {\n var i = props[k];\n var x = obj[i];\n f(x, i);\n }\n };\n\n var node = function () {\n var f = Global$1.getOrDie('Node');\n return f;\n };\n var compareDocumentPosition = function (a, b, match) {\n return (a.compareDocumentPosition(b) & match) !== 0;\n };\n var documentPositionPreceding = function (a, b) {\n return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING);\n };\n var documentPositionContainedBy = function (a, b) {\n return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY);\n };\n var Node = {\n documentPositionPreceding: documentPositionPreceding,\n documentPositionContainedBy: documentPositionContainedBy\n };\n\n var cached = function (f) {\n var called = false;\n var r;\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (!called) {\n called = true;\n r = f.apply(null, args);\n }\n return r;\n };\n };\n\n var firstMatch = function (regexes, s) {\n for (var i = 0; i < regexes.length; i++) {\n var x = regexes[i];\n if (x.test(s)) {\n return x;\n }\n }\n return undefined;\n };\n var find$1 = function (regexes, agent) {\n var r = firstMatch(regexes, agent);\n if (!r) {\n return {\n major: 0,\n minor: 0\n };\n }\n var group = function (i) {\n return Number(agent.replace(r, '$' + i));\n };\n return nu(group(1), group(2));\n };\n var detect = function (versionRegexes, agent) {\n var cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown();\n }\n return find$1(versionRegexes, cleanedAgent);\n };\n var unknown = function () {\n return nu(0, 0);\n };\n var nu = function (major, minor) {\n return {\n major: major,\n minor: minor\n };\n };\n var Version = {\n nu: nu,\n detect: detect,\n unknown: unknown\n };\n\n var edge = 'Edge';\n var chrome = 'Chrome';\n var ie = 'IE';\n var opera = 'Opera';\n var firefox = 'Firefox';\n var safari = 'Safari';\n var isBrowser = function (name, current) {\n return function () {\n return current === name;\n };\n };\n var unknown$1 = function () {\n return nu$1({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$1 = function (info) {\n var current = info.current;\n var version = info.version;\n return {\n current: current,\n version: version,\n isEdge: isBrowser(edge, current),\n isChrome: isBrowser(chrome, current),\n isIE: isBrowser(ie, current),\n isOpera: isBrowser(opera, current),\n isFirefox: isBrowser(firefox, current),\n isSafari: isBrowser(safari, current)\n };\n };\n var Browser = {\n unknown: unknown$1,\n nu: nu$1,\n edge: constant(edge),\n chrome: constant(chrome),\n ie: constant(ie),\n opera: constant(opera),\n firefox: constant(firefox),\n safari: constant(safari)\n };\n\n var windows = 'Windows';\n var ios = 'iOS';\n var android = 'Android';\n var linux = 'Linux';\n var osx = 'OSX';\n var solaris = 'Solaris';\n var freebsd = 'FreeBSD';\n var isOS = function (name, current) {\n return function () {\n return current === name;\n };\n };\n var unknown$2 = function () {\n return nu$2({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$2 = function (info) {\n var current = info.current;\n var version = info.version;\n return {\n current: current,\n version: version,\n isWindows: isOS(windows, current),\n isiOS: isOS(ios, current),\n isAndroid: isOS(android, current),\n isOSX: isOS(osx, current),\n isLinux: isOS(linux, current),\n isSolaris: isOS(solaris, current),\n isFreeBSD: isOS(freebsd, current)\n };\n };\n var OperatingSystem = {\n unknown: unknown$2,\n nu: nu$2,\n windows: constant(windows),\n ios: constant(ios),\n android: constant(android),\n linux: constant(linux),\n osx: constant(osx),\n solaris: constant(solaris),\n freebsd: constant(freebsd)\n };\n\n var DeviceType = function (os, browser, userAgent) {\n var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n var isiPhone = os.isiOS() && !isiPad;\n var isAndroid3 = os.isAndroid() && os.version.major === 3;\n var isAndroid4 = os.isAndroid() && os.version.major === 4;\n var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true;\n var isTouch = os.isiOS() || os.isAndroid();\n var isPhone = isTouch && !isTablet;\n var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n return {\n isiPad: constant(isiPad),\n isiPhone: constant(isiPhone),\n isTablet: constant(isTablet),\n isPhone: constant(isPhone),\n isTouch: constant(isTouch),\n isAndroid: os.isAndroid,\n isiOS: os.isiOS,\n isWebView: constant(iOSwebview)\n };\n };\n\n var detect$1 = function (candidates, userAgent) {\n var agent = String(userAgent).toLowerCase();\n return find(candidates, function (candidate) {\n return candidate.search(agent);\n });\n };\n var detectBrowser = function (browsers, userAgent) {\n return detect$1(browsers, userAgent).map(function (browser) {\n var version = Version.detect(browser.versionRegexes, userAgent);\n return {\n current: browser.name,\n version: version\n };\n });\n };\n var detectOs = function (oses, userAgent) {\n return detect$1(oses, userAgent).map(function (os) {\n var version = Version.detect(os.versionRegexes, userAgent);\n return {\n current: os.name,\n version: version\n };\n });\n };\n var UaString = {\n detectBrowser: detectBrowser,\n detectOs: detectOs\n };\n\n var contains = function (str, substr) {\n return str.indexOf(substr) !== -1;\n };\n\n var normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n var checkContains = function (target) {\n return function (uastring) {\n return contains(uastring, target);\n };\n };\n var browsers = [\n {\n name: 'Edge',\n versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n search: function (uastring) {\n return contains(uastring, 'edge/') && contains(uastring, 'chrome') && contains(uastring, 'safari') && contains(uastring, 'applewebkit');\n }\n },\n {\n name: 'Chrome',\n versionRegexes: [\n /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n normalVersionRegex\n ],\n search: function (uastring) {\n return contains(uastring, 'chrome') && !contains(uastring, 'chromeframe');\n }\n },\n {\n name: 'IE',\n versionRegexes: [\n /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*?rv:([0-9]+)\\.([0-9]+).*/\n ],\n search: function (uastring) {\n return contains(uastring, 'msie') || contains(uastring, 'trident');\n }\n },\n {\n name: 'Opera',\n versionRegexes: [\n normalVersionRegex,\n /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n ],\n search: checkContains('opera')\n },\n {\n name: 'Firefox',\n versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n search: checkContains('firefox')\n },\n {\n name: 'Safari',\n versionRegexes: [\n normalVersionRegex,\n /.*?cpu os ([0-9]+)_([0-9]+).*/\n ],\n search: function (uastring) {\n return (contains(uastring, 'safari') || contains(uastring, 'mobile/')) && contains(uastring, 'applewebkit');\n }\n }\n ];\n var oses = [\n {\n name: 'Windows',\n search: checkContains('win'),\n versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'iOS',\n search: function (uastring) {\n return contains(uastring, 'iphone') || contains(uastring, 'ipad');\n },\n versionRegexes: [\n /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*cpu os ([0-9]+)_([0-9]+).*/,\n /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n ]\n },\n {\n name: 'Android',\n search: checkContains('android'),\n versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'OSX',\n search: checkContains('os x'),\n versionRegexes: [/.*?os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n },\n {\n name: 'Linux',\n search: checkContains('linux'),\n versionRegexes: []\n },\n {\n name: 'Solaris',\n search: checkContains('sunos'),\n versionRegexes: []\n },\n {\n name: 'FreeBSD',\n search: checkContains('freebsd'),\n versionRegexes: []\n }\n ];\n var PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n var detect$2 = function (userAgent) {\n var browsers = PlatformInfo.browsers();\n var oses = PlatformInfo.oses();\n var browser = UaString.detectBrowser(browsers, userAgent).fold(Browser.unknown, Browser.nu);\n var os = UaString.detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n var deviceType = DeviceType(os, browser, userAgent);\n return {\n browser: browser,\n os: os,\n deviceType: deviceType\n };\n };\n var PlatformDetection = { detect: detect$2 };\n\n var detect$3 = cached(function () {\n var userAgent = domGlobals.navigator.userAgent;\n return PlatformDetection.detect(userAgent);\n });\n var PlatformDetection$1 = { detect: detect$3 };\n\n var ATTRIBUTE = domGlobals.Node.ATTRIBUTE_NODE;\n var CDATA_SECTION = domGlobals.Node.CDATA_SECTION_NODE;\n var COMMENT = domGlobals.Node.COMMENT_NODE;\n var DOCUMENT = domGlobals.Node.DOCUMENT_NODE;\n var DOCUMENT_TYPE = domGlobals.Node.DOCUMENT_TYPE_NODE;\n var DOCUMENT_FRAGMENT = domGlobals.Node.DOCUMENT_FRAGMENT_NODE;\n var ELEMENT = domGlobals.Node.ELEMENT_NODE;\n var TEXT = domGlobals.Node.TEXT_NODE;\n var PROCESSING_INSTRUCTION = domGlobals.Node.PROCESSING_INSTRUCTION_NODE;\n var ENTITY_REFERENCE = domGlobals.Node.ENTITY_REFERENCE_NODE;\n var ENTITY = domGlobals.Node.ENTITY_NODE;\n var NOTATION = domGlobals.Node.NOTATION_NODE;\n\n var ELEMENT$1 = ELEMENT;\n var is = function (element, selector) {\n var dom = element.dom();\n if (dom.nodeType !== ELEMENT$1) {\n return false;\n } else {\n var elem = dom;\n if (elem.matches !== undefined) {\n return elem.matches(selector);\n } else if (elem.msMatchesSelector !== undefined) {\n return elem.msMatchesSelector(selector);\n } else if (elem.webkitMatchesSelector !== undefined) {\n return elem.webkitMatchesSelector(selector);\n } else if (elem.mozMatchesSelector !== undefined) {\n return elem.mozMatchesSelector(selector);\n } else {\n throw new Error('Browser lacks native selectors');\n }\n }\n };\n\n var eq = function (e1, e2) {\n return e1.dom() === e2.dom();\n };\n var regularContains = function (e1, e2) {\n var d1 = e1.dom();\n var d2 = e2.dom();\n return d1 === d2 ? false : d1.contains(d2);\n };\n var ieContains = function (e1, e2) {\n return Node.documentPositionContainedBy(e1.dom(), e2.dom());\n };\n var browser = PlatformDetection$1.detect().browser;\n var contains$1 = browser.isIE() ? ieContains : regularContains;\n var is$1 = is;\n\n var parent = function (element) {\n return Option.from(element.dom().parentNode).map(Element.fromDom);\n };\n var children = function (element) {\n return map(element.dom().childNodes, Element.fromDom);\n };\n var child = function (element, index) {\n var cs = element.dom().childNodes;\n return Option.from(cs[index]).map(Element.fromDom);\n };\n var firstChild = function (element) {\n return child(element, 0);\n };\n var lastChild = function (element) {\n return child(element, element.dom().childNodes.length - 1);\n };\n var spot = Immutable('element', 'offset');\n\n var before = function (marker, element) {\n var parent$1 = parent(marker);\n parent$1.each(function (v) {\n v.dom().insertBefore(element.dom(), marker.dom());\n });\n };\n var append = function (parent, element) {\n parent.dom().appendChild(element.dom());\n };\n\n var before$1 = function (marker, elements) {\n each(elements, function (x) {\n before(marker, x);\n });\n };\n var append$1 = function (parent, elements) {\n each(elements, function (x) {\n append(parent, x);\n });\n };\n\n var remove = function (element) {\n var dom = element.dom();\n if (dom.parentNode !== null) {\n dom.parentNode.removeChild(dom);\n }\n };\n\n var name = function (element) {\n var r = element.dom().nodeName;\n return r.toLowerCase();\n };\n var type = function (element) {\n return element.dom().nodeType;\n };\n var isType$1 = function (t) {\n return function (element) {\n return type(element) === t;\n };\n };\n var isElement = isType$1(ELEMENT);\n\n var rawSet = function (dom, key, value) {\n if (isString(value) || isBoolean(value) || isNumber(value)) {\n dom.setAttribute(key, value + '');\n } else {\n domGlobals.console.error('Invalid call to Attr.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n throw new Error('Attribute value was not simple');\n }\n };\n var setAll = function (element, attrs) {\n var dom = element.dom();\n each$1(attrs, function (v, k) {\n rawSet(dom, k, v);\n });\n };\n var clone = function (element) {\n return foldl(element.dom().attributes, function (acc, attr) {\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n };\n\n var isSupported = function (dom) {\n return dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n };\n\n var internalSet = function (dom, property, value) {\n if (!isString(value)) {\n domGlobals.console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n throw new Error('CSS value must be a string: ' + value);\n }\n if (isSupported(dom)) {\n dom.style.setProperty(property, value);\n }\n };\n var set = function (element, property, value) {\n var dom = element.dom();\n internalSet(dom, property, value);\n };\n\n var clone$1 = function (original, isDeep) {\n return Element.fromDom(original.dom().cloneNode(isDeep));\n };\n var deep = function (original) {\n return clone$1(original, true);\n };\n var shallowAs = function (original, tag) {\n var nu = Element.fromTag(tag);\n var attributes = clone(original);\n setAll(nu, attributes);\n return nu;\n };\n var mutate = function (original, tag) {\n var nu = shallowAs(original, tag);\n before(original, nu);\n var children$1 = children(original);\n append$1(nu, children$1);\n remove(original);\n return nu;\n };\n\n var joinSegment = function (parent, child) {\n append(parent.item, child.list);\n };\n var joinSegments = function (segments) {\n for (var i = 1; i < segments.length; i++) {\n joinSegment(segments[i - 1], segments[i]);\n }\n };\n var appendSegments = function (head$1, tail) {\n lift2(last(head$1), head(tail), joinSegment);\n };\n var createSegment = function (scope, listType) {\n var segment = {\n list: Element.fromTag(listType, scope),\n item: Element.fromTag('li', scope)\n };\n append(segment.list, segment.item);\n return segment;\n };\n var createSegments = function (scope, entry, size) {\n var segments = [];\n for (var i = 0; i < size; i++) {\n segments.push(createSegment(scope, entry.listType));\n }\n return segments;\n };\n var populateSegments = function (segments, entry) {\n for (var i = 0; i < segments.length - 1; i++) {\n set(segments[i].item, 'list-style-type', 'none');\n }\n last(segments).each(function (segment) {\n setAll(segment.list, entry.listAttributes);\n setAll(segment.item, entry.itemAttributes);\n append$1(segment.item, entry.content);\n });\n };\n var normalizeSegment = function (segment, entry) {\n if (name(segment.list) !== entry.listType) {\n segment.list = mutate(segment.list, entry.listType);\n }\n setAll(segment.list, entry.listAttributes);\n };\n var createItem = function (scope, attr, content) {\n var item = Element.fromTag('li', scope);\n setAll(item, attr);\n append$1(item, content);\n return item;\n };\n var appendItem = function (segment, item) {\n append(segment.list, item);\n segment.item = item;\n };\n var writeShallow = function (scope, cast, entry) {\n var newCast = cast.slice(0, entry.depth);\n last(newCast).each(function (segment) {\n var item = createItem(scope, entry.itemAttributes, entry.content);\n appendItem(segment, item);\n normalizeSegment(segment, entry);\n });\n return newCast;\n };\n var writeDeep = function (scope, cast, entry) {\n var segments = createSegments(scope, entry, entry.depth - cast.length);\n joinSegments(segments);\n populateSegments(segments, entry);\n appendSegments(cast, segments);\n return cast.concat(segments);\n };\n var composeList = function (scope, entries) {\n var cast = foldl(entries, function (cast, entry) {\n return entry.depth > cast.length ? writeDeep(scope, cast, entry) : writeShallow(scope, cast, entry);\n }, []);\n return head(cast).map(function (segment) {\n return segment.list;\n });\n };\n\n var isList$1 = function (el) {\n return is$1(el, 'OL,UL');\n };\n var hasFirstChildList = function (el) {\n return firstChild(el).map(isList$1).getOr(false);\n };\n var hasLastChildList = function (el) {\n return lastChild(el).map(isList$1).getOr(false);\n };\n\n var isIndented = function (entry) {\n return entry.depth > 0;\n };\n var isSelected = function (entry) {\n return entry.isSelected;\n };\n var cloneItemContent = function (li) {\n var children$1 = children(li);\n var content = hasLastChildList(li) ? children$1.slice(0, -1) : children$1;\n return map(content, deep);\n };\n var createEntry = function (li, depth, isSelected) {\n return parent(li).filter(isElement).map(function (list) {\n return {\n depth: depth,\n isSelected: isSelected,\n content: cloneItemContent(li),\n itemAttributes: clone(li),\n listAttributes: clone(list),\n listType: name(list)\n };\n });\n };\n\n var indentEntry = function (indentation, entry) {\n switch (indentation) {\n case 'Indent':\n entry.depth++;\n break;\n case 'Outdent':\n entry.depth--;\n break;\n case 'Flatten':\n entry.depth = 0;\n }\n };\n\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n var shallow = function (old, nu) {\n return nu;\n };\n var baseMerge = function (merger) {\n return function () {\n var objects = new Array(arguments.length);\n for (var i = 0; i < objects.length; i++) {\n objects[i] = arguments[i];\n }\n if (objects.length === 0) {\n throw new Error('Can\\'t merge zero objects');\n }\n var ret = {};\n for (var j = 0; j < objects.length; j++) {\n var curObject = objects[j];\n for (var key in curObject) {\n if (hasOwnProperty.call(curObject, key)) {\n ret[key] = merger(ret[key], curObject[key]);\n }\n }\n }\n return ret;\n };\n };\n var merge = baseMerge(shallow);\n\n var cloneListProperties = function (target, source) {\n target.listType = source.listType;\n target.listAttributes = merge({}, source.listAttributes);\n };\n var previousSiblingEntry = function (entries, start) {\n var depth = entries[start].depth;\n for (var i = start - 1; i >= 0; i--) {\n if (entries[i].depth === depth) {\n return Option.some(entries[i]);\n }\n if (entries[i].depth < depth) {\n break;\n }\n }\n return Option.none();\n };\n var normalizeEntries = function (entries) {\n each(entries, function (entry, i) {\n previousSiblingEntry(entries, i).each(function (matchingEntry) {\n cloneListProperties(entry, matchingEntry);\n });\n });\n };\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n var clone = function () {\n return Cell(get());\n };\n return {\n get: get,\n set: set,\n clone: clone\n };\n };\n\n var parseItem = function (depth, itemSelection, selectionState, item) {\n return firstChild(item).filter(isList$1).fold(function () {\n itemSelection.each(function (selection) {\n if (eq(selection.start, item)) {\n selectionState.set(true);\n }\n });\n var currentItemEntry = createEntry(item, depth, selectionState.get());\n itemSelection.each(function (selection) {\n if (eq(selection.end, item)) {\n selectionState.set(false);\n }\n });\n var childListEntries = lastChild(item).filter(isList$1).map(function (list) {\n return parseList(depth, itemSelection, selectionState, list);\n }).getOr([]);\n return currentItemEntry.toArray().concat(childListEntries);\n }, function (list) {\n return parseList(depth, itemSelection, selectionState, list);\n });\n };\n var parseList = function (depth, itemSelection, selectionState, list) {\n return bind(children(list), function (element) {\n var parser = isList$1(element) ? parseList : parseItem;\n var newDepth = depth + 1;\n return parser(newDepth, itemSelection, selectionState, element);\n });\n };\n var parseLists = function (lists, itemSelection) {\n var selectionState = Cell(false);\n var initialDepth = 0;\n return map(lists, function (list) {\n return {\n sourceList: list,\n entries: parseList(initialDepth, itemSelection, selectionState, list)\n };\n });\n };\n\n var global$8 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var createTextBlock = function (editor, contentNode) {\n var dom = editor.dom;\n var blockElements = editor.schema.getBlockElements();\n var fragment = dom.createFragment();\n var node, textBlock, blockName, hasContentNode;\n if (editor.settings.forced_root_block) {\n blockName = editor.settings.forced_root_block;\n }\n if (blockName) {\n textBlock = dom.create(blockName);\n if (textBlock.tagName === editor.settings.forced_root_block) {\n dom.setAttribs(textBlock, editor.settings.forced_root_block_attrs);\n }\n if (!NodeType.isBlock(contentNode.firstChild, blockElements)) {\n fragment.appendChild(textBlock);\n }\n }\n if (contentNode) {\n while (node = contentNode.firstChild) {\n var nodeName = node.nodeName;\n if (!hasContentNode && (nodeName !== 'SPAN' || node.getAttribute('data-mce-type') !== 'bookmark')) {\n hasContentNode = true;\n }\n if (NodeType.isBlock(node, blockElements)) {\n fragment.appendChild(node);\n textBlock = null;\n } else {\n if (blockName) {\n if (!textBlock) {\n textBlock = dom.create(blockName);\n fragment.appendChild(textBlock);\n }\n textBlock.appendChild(node);\n } else {\n fragment.appendChild(node);\n }\n }\n }\n }\n if (!editor.settings.forced_root_block) {\n fragment.appendChild(dom.create('br'));\n } else {\n if (!hasContentNode && (!global$8.ie || global$8.ie > 10)) {\n textBlock.appendChild(dom.create('br', { 'data-mce-bogus': '1' }));\n }\n }\n return fragment;\n };\n\n var outdentedComposer = function (editor, entries) {\n return map(entries, function (entry) {\n var content = fromElements(entry.content);\n return Element.fromDom(createTextBlock(editor, content.dom()));\n });\n };\n var indentedComposer = function (editor, entries) {\n normalizeEntries(entries);\n return composeList(editor.contentDocument, entries).toArray();\n };\n var composeEntries = function (editor, entries) {\n return bind(groupBy(entries, isIndented), function (entries) {\n var groupIsIndented = head(entries).map(isIndented).getOr(false);\n return groupIsIndented ? indentedComposer(editor, entries) : outdentedComposer(editor, entries);\n });\n };\n var indentSelectedEntries = function (entries, indentation) {\n each(filter(entries, isSelected), function (entry) {\n return indentEntry(indentation, entry);\n });\n };\n var getItemSelection = function (editor) {\n var selectedListItems = map(Selection.getSelectedListItems(editor), Element.fromDom);\n return lift2(find(selectedListItems, not(hasFirstChildList)), find(reverse(selectedListItems), not(hasFirstChildList)), function (start, end) {\n return {\n start: start,\n end: end\n };\n });\n };\n var listsIndentation = function (editor, lists, indentation) {\n var entrySets = parseLists(lists, getItemSelection(editor));\n each(entrySets, function (entrySet) {\n indentSelectedEntries(entrySet.entries, indentation);\n before$1(entrySet.sourceList, composeEntries(editor, entrySet.entries));\n remove(entrySet.sourceList);\n });\n };\n\n var DOM$1 = global$6.DOM;\n var splitList = function (editor, ul, li) {\n var tmpRng, fragment, bookmarks, node, newBlock;\n var removeAndKeepBookmarks = function (targetNode) {\n global$5.each(bookmarks, function (node) {\n targetNode.parentNode.insertBefore(node, li.parentNode);\n });\n DOM$1.remove(targetNode);\n };\n bookmarks = DOM$1.select('span[data-mce-type=\"bookmark\"]', ul);\n newBlock = createTextBlock(editor, li);\n tmpRng = DOM$1.createRng();\n tmpRng.setStartAfter(li);\n tmpRng.setEndAfter(ul);\n fragment = tmpRng.extractContents();\n for (node = fragment.firstChild; node; node = node.firstChild) {\n if (node.nodeName === 'LI' && editor.dom.isEmpty(node)) {\n DOM$1.remove(node);\n break;\n }\n }\n if (!editor.dom.isEmpty(fragment)) {\n DOM$1.insertAfter(fragment, ul);\n }\n DOM$1.insertAfter(newBlock, ul);\n if (NodeType.isEmpty(editor.dom, li.parentNode)) {\n removeAndKeepBookmarks(li.parentNode);\n }\n DOM$1.remove(li);\n if (NodeType.isEmpty(editor.dom, ul)) {\n DOM$1.remove(ul);\n }\n };\n var SplitList = { splitList: splitList };\n\n var outdentDlItem = function (editor, item) {\n if (is$1(item, 'dd')) {\n mutate(item, 'dt');\n } else if (is$1(item, 'dt')) {\n parent(item).each(function (dl) {\n return SplitList.splitList(editor, dl.dom(), item.dom());\n });\n }\n };\n var indentDlItem = function (item) {\n if (is$1(item, 'dt')) {\n mutate(item, 'dd');\n }\n };\n var dlIndentation = function (editor, indentation, dlItems) {\n if (indentation === 'Indent') {\n each(dlItems, indentDlItem);\n } else {\n each(dlItems, function (item) {\n return outdentDlItem(editor, item);\n });\n }\n };\n\n var selectionIndentation = function (editor, indentation) {\n var lists = map(Selection.getSelectedListRoots(editor), Element.fromDom);\n var dlItems = map(Selection.getSelectedDlItems(editor), Element.fromDom);\n var isHandled = false;\n if (lists.length || dlItems.length) {\n var bookmark = editor.selection.getBookmark();\n listsIndentation(editor, lists, indentation);\n dlIndentation(editor, indentation, dlItems);\n editor.selection.moveToBookmark(bookmark);\n editor.selection.setRng(Range.normalizeRange(editor.selection.getRng()));\n editor.nodeChanged();\n isHandled = true;\n }\n return isHandled;\n };\n var indentListSelection = function (editor) {\n return selectionIndentation(editor, 'Indent');\n };\n var outdentListSelection = function (editor) {\n return selectionIndentation(editor, 'Outdent');\n };\n var flattenListSelection = function (editor) {\n return selectionIndentation(editor, 'Flatten');\n };\n\n var updateListStyle = function (dom, el, detail) {\n var type = detail['list-style-type'] ? detail['list-style-type'] : null;\n dom.setStyle(el, 'list-style-type', type);\n };\n var setAttribs = function (elm, attrs) {\n global$5.each(attrs, function (value, key) {\n elm.setAttribute(key, value);\n });\n };\n var updateListAttrs = function (dom, el, detail) {\n setAttribs(el, detail['list-attributes']);\n global$5.each(dom.select('li', el), function (li) {\n setAttribs(li, detail['list-item-attributes']);\n });\n };\n var updateListWithDetails = function (dom, el, detail) {\n updateListStyle(dom, el, detail);\n updateListAttrs(dom, el, detail);\n };\n var removeStyles = function (dom, element, styles) {\n global$5.each(styles, function (style) {\n var _a;\n return dom.setStyle(element, (_a = {}, _a[style] = '', _a));\n });\n };\n var getEndPointNode = function (editor, rng, start, root) {\n var container, offset;\n container = rng[start ? 'startContainer' : 'endContainer'];\n offset = rng[start ? 'startOffset' : 'endOffset'];\n if (container.nodeType === 1) {\n container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;\n }\n if (!start && NodeType.isBr(container.nextSibling)) {\n container = container.nextSibling;\n }\n while (container.parentNode !== root) {\n if (NodeType.isTextBlock(editor, container)) {\n return container;\n }\n if (/^(TD|TH)$/.test(container.parentNode.nodeName)) {\n return container;\n }\n container = container.parentNode;\n }\n return container;\n };\n var getSelectedTextBlocks = function (editor, rng, root) {\n var textBlocks = [], dom = editor.dom;\n var startNode = getEndPointNode(editor, rng, true, root);\n var endNode = getEndPointNode(editor, rng, false, root);\n var block;\n var siblings = [];\n for (var node = startNode; node; node = node.nextSibling) {\n siblings.push(node);\n if (node === endNode) {\n break;\n }\n }\n global$5.each(siblings, function (node) {\n if (NodeType.isTextBlock(editor, node)) {\n textBlocks.push(node);\n block = null;\n return;\n }\n if (dom.isBlock(node) || NodeType.isBr(node)) {\n if (NodeType.isBr(node)) {\n dom.remove(node);\n }\n block = null;\n return;\n }\n var nextSibling = node.nextSibling;\n if (global$4.isBookmarkNode(node)) {\n if (NodeType.isTextBlock(editor, nextSibling) || !nextSibling && node.parentNode === root) {\n block = null;\n return;\n }\n }\n if (!block) {\n block = dom.create('p');\n node.parentNode.insertBefore(block, node);\n textBlocks.push(block);\n }\n block.appendChild(node);\n });\n return textBlocks;\n };\n var hasCompatibleStyle = function (dom, sib, detail) {\n var sibStyle = dom.getStyle(sib, 'list-style-type');\n var detailStyle = detail ? detail['list-style-type'] : '';\n detailStyle = detailStyle === null ? '' : detailStyle;\n return sibStyle === detailStyle;\n };\n var applyList = function (editor, listName, detail) {\n if (detail === void 0) {\n detail = {};\n }\n var rng = editor.selection.getRng(true);\n var bookmark;\n var listItemName = 'LI';\n var root = Selection.getClosestListRootElm(editor, editor.selection.getStart(true));\n var dom = editor.dom;\n if (dom.getContentEditable(editor.selection.getNode()) === 'false') {\n return;\n }\n listName = listName.toUpperCase();\n if (listName === 'DL') {\n listItemName = 'DT';\n }\n bookmark = Bookmark.createBookmark(rng);\n global$5.each(getSelectedTextBlocks(editor, rng, root), function (block) {\n var listBlock, sibling;\n sibling = block.previousSibling;\n if (sibling && NodeType.isListNode(sibling) && sibling.nodeName === listName && hasCompatibleStyle(dom, sibling, detail)) {\n listBlock = sibling;\n block = dom.rename(block, listItemName);\n sibling.appendChild(block);\n } else {\n listBlock = dom.create(listName);\n block.parentNode.insertBefore(listBlock, block);\n listBlock.appendChild(block);\n block = dom.rename(block, listItemName);\n }\n removeStyles(dom, block, [\n 'margin',\n 'margin-right',\n 'margin-bottom',\n 'margin-left',\n 'margin-top',\n 'padding',\n 'padding-right',\n 'padding-bottom',\n 'padding-left',\n 'padding-top'\n ]);\n updateListWithDetails(dom, listBlock, detail);\n mergeWithAdjacentLists(editor.dom, listBlock);\n });\n editor.selection.setRng(Bookmark.resolveBookmark(bookmark));\n };\n var isValidLists = function (list1, list2) {\n return list1 && list2 && NodeType.isListNode(list1) && list1.nodeName === list2.nodeName;\n };\n var hasSameListStyle = function (dom, list1, list2) {\n var targetStyle = dom.getStyle(list1, 'list-style-type', true);\n var style = dom.getStyle(list2, 'list-style-type', true);\n return targetStyle === style;\n };\n var hasSameClasses = function (elm1, elm2) {\n return elm1.className === elm2.className;\n };\n var shouldMerge = function (dom, list1, list2) {\n return isValidLists(list1, list2) && hasSameListStyle(dom, list1, list2) && hasSameClasses(list1, list2);\n };\n var mergeWithAdjacentLists = function (dom, listBlock) {\n var sibling, node;\n sibling = listBlock.nextSibling;\n if (shouldMerge(dom, listBlock, sibling)) {\n while (node = sibling.firstChild) {\n listBlock.appendChild(node);\n }\n dom.remove(sibling);\n }\n sibling = listBlock.previousSibling;\n if (shouldMerge(dom, listBlock, sibling)) {\n while (node = sibling.lastChild) {\n listBlock.insertBefore(node, listBlock.firstChild);\n }\n dom.remove(sibling);\n }\n };\n var updateList = function (dom, list, listName, detail) {\n if (list.nodeName !== listName) {\n var newList = dom.rename(list, listName);\n updateListWithDetails(dom, newList, detail);\n } else {\n updateListWithDetails(dom, list, detail);\n }\n };\n var toggleMultipleLists = function (editor, parentList, lists, listName, detail) {\n if (parentList.nodeName === listName && !hasListStyleDetail(detail)) {\n flattenListSelection(editor);\n } else {\n var bookmark = Bookmark.createBookmark(editor.selection.getRng(true));\n global$5.each([parentList].concat(lists), function (elm) {\n updateList(editor.dom, elm, listName, detail);\n });\n editor.selection.setRng(Bookmark.resolveBookmark(bookmark));\n }\n };\n var hasListStyleDetail = function (detail) {\n return 'list-style-type' in detail;\n };\n var toggleSingleList = function (editor, parentList, listName, detail) {\n if (parentList === editor.getBody()) {\n return;\n }\n if (parentList) {\n if (parentList.nodeName === listName && !hasListStyleDetail(detail)) {\n flattenListSelection(editor);\n } else {\n var bookmark = Bookmark.createBookmark(editor.selection.getRng(true));\n updateListWithDetails(editor.dom, parentList, detail);\n mergeWithAdjacentLists(editor.dom, editor.dom.rename(parentList, listName));\n editor.selection.setRng(Bookmark.resolveBookmark(bookmark));\n }\n } else {\n applyList(editor, listName, detail);\n }\n };\n var toggleList = function (editor, listName, detail) {\n var parentList = Selection.getParentList(editor);\n var selectedSubLists = Selection.getSelectedSubLists(editor);\n detail = detail ? detail : {};\n if (parentList && selectedSubLists.length > 0) {\n toggleMultipleLists(editor, parentList, selectedSubLists, listName, detail);\n } else {\n toggleSingleList(editor, parentList, listName, detail);\n }\n };\n var ToggleList = {\n toggleList: toggleList,\n mergeWithAdjacentLists: mergeWithAdjacentLists\n };\n\n var DOM$2 = global$6.DOM;\n var normalizeList = function (dom, ul) {\n var sibling;\n var parentNode = ul.parentNode;\n if (parentNode.nodeName === 'LI' && parentNode.firstChild === ul) {\n sibling = parentNode.previousSibling;\n if (sibling && sibling.nodeName === 'LI') {\n sibling.appendChild(ul);\n if (NodeType.isEmpty(dom, parentNode)) {\n DOM$2.remove(parentNode);\n }\n } else {\n DOM$2.setStyle(parentNode, 'listStyleType', 'none');\n }\n }\n if (NodeType.isListNode(parentNode)) {\n sibling = parentNode.previousSibling;\n if (sibling && sibling.nodeName === 'LI') {\n sibling.appendChild(ul);\n }\n }\n };\n var normalizeLists = function (dom, element) {\n global$5.each(global$5.grep(dom.select('ol,ul', element)), function (ul) {\n normalizeList(dom, ul);\n });\n };\n var NormalizeLists = {\n normalizeList: normalizeList,\n normalizeLists: normalizeLists\n };\n\n var findNextCaretContainer = function (editor, rng, isForward, root) {\n var node = rng.startContainer;\n var offset = rng.startOffset;\n var nonEmptyBlocks, walker;\n if (node.nodeType === 3 && (isForward ? offset < node.data.length : offset > 0)) {\n return node;\n }\n nonEmptyBlocks = editor.schema.getNonEmptyElements();\n if (node.nodeType === 1) {\n node = global$1.getNode(node, offset);\n }\n walker = new global$2(node, root);\n if (isForward) {\n if (NodeType.isBogusBr(editor.dom, node)) {\n walker.next();\n }\n }\n while (node = walker[isForward ? 'next' : 'prev2']()) {\n if (node.nodeName === 'LI' && !node.hasChildNodes()) {\n return node;\n }\n if (nonEmptyBlocks[node.nodeName]) {\n return node;\n }\n if (node.nodeType === 3 && node.data.length > 0) {\n return node;\n }\n }\n };\n var hasOnlyOneBlockChild = function (dom, elm) {\n var childNodes = elm.childNodes;\n return childNodes.length === 1 && !NodeType.isListNode(childNodes[0]) && dom.isBlock(childNodes[0]);\n };\n var unwrapSingleBlockChild = function (dom, elm) {\n if (hasOnlyOneBlockChild(dom, elm)) {\n dom.remove(elm.firstChild, true);\n }\n };\n var moveChildren = function (dom, fromElm, toElm) {\n var node, targetElm;\n targetElm = hasOnlyOneBlockChild(dom, toElm) ? toElm.firstChild : toElm;\n unwrapSingleBlockChild(dom, fromElm);\n if (!NodeType.isEmpty(dom, fromElm, true)) {\n while (node = fromElm.firstChild) {\n targetElm.appendChild(node);\n }\n }\n };\n var mergeLiElements = function (dom, fromElm, toElm) {\n var node, listNode;\n var ul = fromElm.parentNode;\n if (!NodeType.isChildOfBody(dom, fromElm) || !NodeType.isChildOfBody(dom, toElm)) {\n return;\n }\n if (NodeType.isListNode(toElm.lastChild)) {\n listNode = toElm.lastChild;\n }\n if (ul === toElm.lastChild) {\n if (NodeType.isBr(ul.previousSibling)) {\n dom.remove(ul.previousSibling);\n }\n }\n node = toElm.lastChild;\n if (node && NodeType.isBr(node) && fromElm.hasChildNodes()) {\n dom.remove(node);\n }\n if (NodeType.isEmpty(dom, toElm, true)) {\n dom.$(toElm).empty();\n }\n moveChildren(dom, fromElm, toElm);\n if (listNode) {\n toElm.appendChild(listNode);\n }\n var contains = contains$1(Element.fromDom(toElm), Element.fromDom(fromElm));\n var nestedLists = contains ? dom.getParents(fromElm, NodeType.isListNode, toElm) : [];\n dom.remove(fromElm);\n each(nestedLists, function (list) {\n if (NodeType.isEmpty(dom, list) && list !== dom.getRoot()) {\n dom.remove(list);\n }\n });\n };\n var mergeIntoEmptyLi = function (editor, fromLi, toLi) {\n editor.dom.$(toLi).empty();\n mergeLiElements(editor.dom, fromLi, toLi);\n editor.selection.setCursorLocation(toLi);\n };\n var mergeForward = function (editor, rng, fromLi, toLi) {\n var dom = editor.dom;\n if (dom.isEmpty(toLi)) {\n mergeIntoEmptyLi(editor, fromLi, toLi);\n } else {\n var bookmark = Bookmark.createBookmark(rng);\n mergeLiElements(dom, fromLi, toLi);\n editor.selection.setRng(Bookmark.resolveBookmark(bookmark));\n }\n };\n var mergeBackward = function (editor, rng, fromLi, toLi) {\n var bookmark = Bookmark.createBookmark(rng);\n mergeLiElements(editor.dom, fromLi, toLi);\n var resolvedBookmark = Bookmark.resolveBookmark(bookmark);\n editor.selection.setRng(resolvedBookmark);\n };\n var backspaceDeleteFromListToListCaret = function (editor, isForward) {\n var dom = editor.dom, selection = editor.selection;\n var selectionStartElm = selection.getStart();\n var root = Selection.getClosestListRootElm(editor, selectionStartElm);\n var li = dom.getParent(selection.getStart(), 'LI', root);\n var ul, rng, otherLi;\n if (li) {\n ul = li.parentNode;\n if (ul === editor.getBody() && NodeType.isEmpty(dom, ul)) {\n return true;\n }\n rng = Range.normalizeRange(selection.getRng(true));\n otherLi = dom.getParent(findNextCaretContainer(editor, rng, isForward, root), 'LI', root);\n if (otherLi && otherLi !== li) {\n if (isForward) {\n mergeForward(editor, rng, otherLi, li);\n } else {\n mergeBackward(editor, rng, li, otherLi);\n }\n return true;\n } else if (!otherLi) {\n if (!isForward) {\n flattenListSelection(editor);\n return true;\n }\n }\n }\n return false;\n };\n var removeBlock = function (dom, block, root) {\n var parentBlock = dom.getParent(block.parentNode, dom.isBlock, root);\n dom.remove(block);\n if (parentBlock && dom.isEmpty(parentBlock)) {\n dom.remove(parentBlock);\n }\n };\n var backspaceDeleteIntoListCaret = function (editor, isForward) {\n var dom = editor.dom;\n var selectionStartElm = editor.selection.getStart();\n var root = Selection.getClosestListRootElm(editor, selectionStartElm);\n var block = dom.getParent(selectionStartElm, dom.isBlock, root);\n if (block && dom.isEmpty(block)) {\n var rng = Range.normalizeRange(editor.selection.getRng(true));\n var otherLi_1 = dom.getParent(findNextCaretContainer(editor, rng, isForward, root), 'LI', root);\n if (otherLi_1) {\n editor.undoManager.transact(function () {\n removeBlock(dom, block, root);\n ToggleList.mergeWithAdjacentLists(dom, otherLi_1.parentNode);\n editor.selection.select(otherLi_1, true);\n editor.selection.collapse(isForward);\n });\n return true;\n }\n }\n return false;\n };\n var backspaceDeleteCaret = function (editor, isForward) {\n return backspaceDeleteFromListToListCaret(editor, isForward) || backspaceDeleteIntoListCaret(editor, isForward);\n };\n var backspaceDeleteRange = function (editor) {\n var selectionStartElm = editor.selection.getStart();\n var root = Selection.getClosestListRootElm(editor, selectionStartElm);\n var startListParent = editor.dom.getParent(selectionStartElm, 'LI,DT,DD', root);\n if (startListParent || Selection.getSelectedListItems(editor).length > 0) {\n editor.undoManager.transact(function () {\n editor.execCommand('Delete');\n NormalizeLists.normalizeLists(editor.dom, editor.getBody());\n });\n return true;\n }\n return false;\n };\n var backspaceDelete = function (editor, isForward) {\n return editor.selection.isCollapsed() ? backspaceDeleteCaret(editor, isForward) : backspaceDeleteRange(editor);\n };\n var setup = function (editor) {\n editor.on('keydown', function (e) {\n if (e.keyCode === global$3.BACKSPACE) {\n if (backspaceDelete(editor, false)) {\n e.preventDefault();\n }\n } else if (e.keyCode === global$3.DELETE) {\n if (backspaceDelete(editor, true)) {\n e.preventDefault();\n }\n }\n });\n };\n var Delete = {\n setup: setup,\n backspaceDelete: backspaceDelete\n };\n\n var get = function (editor) {\n return {\n backspaceDelete: function (isForward) {\n Delete.backspaceDelete(editor, isForward);\n }\n };\n };\n var Api = { get: get };\n\n var queryListCommandState = function (editor, listName) {\n return function () {\n var parentList = editor.dom.getParent(editor.selection.getStart(), 'UL,OL,DL');\n return parentList && parentList.nodeName === listName;\n };\n };\n var register = function (editor) {\n editor.on('BeforeExecCommand', function (e) {\n var cmd = e.command.toLowerCase();\n if (cmd === 'indent') {\n indentListSelection(editor);\n } else if (cmd === 'outdent') {\n outdentListSelection(editor);\n }\n });\n editor.addCommand('InsertUnorderedList', function (ui, detail) {\n ToggleList.toggleList(editor, 'UL', detail);\n });\n editor.addCommand('InsertOrderedList', function (ui, detail) {\n ToggleList.toggleList(editor, 'OL', detail);\n });\n editor.addCommand('InsertDefinitionList', function (ui, detail) {\n ToggleList.toggleList(editor, 'DL', detail);\n });\n editor.addCommand('RemoveList', function () {\n flattenListSelection(editor);\n });\n editor.addQueryStateHandler('InsertUnorderedList', queryListCommandState(editor, 'UL'));\n editor.addQueryStateHandler('InsertOrderedList', queryListCommandState(editor, 'OL'));\n editor.addQueryStateHandler('InsertDefinitionList', queryListCommandState(editor, 'DL'));\n };\n var Commands = { register: register };\n\n var shouldIndentOnTab = function (editor) {\n return editor.getParam('lists_indent_on_tab', true);\n };\n var Settings = { shouldIndentOnTab: shouldIndentOnTab };\n\n var setupTabKey = function (editor) {\n editor.on('keydown', function (e) {\n if (e.keyCode !== global$3.TAB || global$3.metaKeyPressed(e)) {\n return;\n }\n editor.undoManager.transact(function () {\n if (e.shiftKey ? outdentListSelection(editor) : indentListSelection(editor)) {\n e.preventDefault();\n }\n });\n });\n };\n var setup$1 = function (editor) {\n if (Settings.shouldIndentOnTab(editor)) {\n setupTabKey(editor);\n }\n Delete.setup(editor);\n };\n var Keyboard = { setup: setup$1 };\n\n var findIndex = function (list, predicate) {\n for (var index = 0; index < list.length; index++) {\n var element = list[index];\n if (predicate(element)) {\n return index;\n }\n }\n return -1;\n };\n var listState = function (editor, listName) {\n return function (e) {\n var ctrl = e.control;\n editor.on('NodeChange', function (e) {\n var tableCellIndex = findIndex(e.parents, NodeType.isTableCellNode);\n var parents = tableCellIndex !== -1 ? e.parents.slice(0, tableCellIndex) : e.parents;\n var lists = global$5.grep(parents, NodeType.isListNode);\n ctrl.active(lists.length > 0 && lists[0].nodeName === listName);\n });\n };\n };\n var register$1 = function (editor) {\n var hasPlugin = function (editor, plugin) {\n var plugins = editor.settings.plugins ? editor.settings.plugins : '';\n return global$5.inArray(plugins.split(/[ ,]/), plugin) !== -1;\n };\n if (!hasPlugin(editor, 'advlist')) {\n editor.addButton('numlist', {\n active: false,\n title: 'Numbered list',\n cmd: 'InsertOrderedList',\n onPostRender: listState(editor, 'OL')\n });\n editor.addButton('bullist', {\n active: false,\n title: 'Bullet list',\n cmd: 'InsertUnorderedList',\n onPostRender: listState(editor, 'UL')\n });\n }\n editor.addButton('indent', {\n icon: 'indent',\n title: 'Increase indent',\n cmd: 'Indent'\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('lists', function (editor) {\n Keyboard.setup(editor);\n Buttons.register(editor);\n Commands.register(editor);\n return Api.get(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}(window));\n})();\n","// Exports the \"media\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/media')\n// ES2015:\n// import 'tinymce/plugins/media'\nrequire('./plugin.js');","(function () {\nvar media = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var getScripts = function (editor) {\n return editor.getParam('media_scripts');\n };\n var getAudioTemplateCallback = function (editor) {\n return editor.getParam('audio_template_callback');\n };\n var getVideoTemplateCallback = function (editor) {\n return editor.getParam('video_template_callback');\n };\n var hasLiveEmbeds = function (editor) {\n return editor.getParam('media_live_embeds', true);\n };\n var shouldFilterHtml = function (editor) {\n return editor.getParam('media_filter_html', true);\n };\n var getUrlResolver = function (editor) {\n return editor.getParam('media_url_resolver');\n };\n var hasAltSource = function (editor) {\n return editor.getParam('media_alt_source', true);\n };\n var hasPoster = function (editor) {\n return editor.getParam('media_poster', true);\n };\n var hasDimensions = function (editor) {\n return editor.getParam('media_dimensions', true);\n };\n var Settings = {\n getScripts: getScripts,\n getAudioTemplateCallback: getAudioTemplateCallback,\n getVideoTemplateCallback: getVideoTemplateCallback,\n hasLiveEmbeds: hasLiveEmbeds,\n shouldFilterHtml: shouldFilterHtml,\n getUrlResolver: getUrlResolver,\n hasAltSource: hasAltSource,\n hasPoster: hasPoster,\n hasDimensions: hasDimensions\n };\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n var clone = function () {\n return Cell(get());\n };\n return {\n get: get,\n set: set,\n clone: clone\n };\n };\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n if (Object.freeze) {\n Object.freeze(me);\n }\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Option = {\n some: some,\n none: none,\n from: from\n };\n\n var hasOwnProperty = Object.hasOwnProperty;\n var get = function (obj, key) {\n return has(obj, key) ? Option.from(obj[key]) : Option.none();\n };\n var has = function (obj, key) {\n return hasOwnProperty.call(obj, key);\n };\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.html.SaxParser');\n\n var getVideoScriptMatch = function (prefixes, src) {\n if (prefixes) {\n for (var i = 0; i < prefixes.length; i++) {\n if (src.indexOf(prefixes[i].filter) !== -1) {\n return prefixes[i];\n }\n }\n }\n };\n var VideoScript = { getVideoScriptMatch: getVideoScriptMatch };\n\n var DOM = global$3.DOM;\n var trimPx = function (value) {\n return value.replace(/px$/, '');\n };\n var getEphoxEmbedData = function (attrs) {\n var style = attrs.map.style;\n var styles = style ? DOM.parseStyle(style) : {};\n return {\n type: 'ephox-embed-iri',\n source1: attrs.map['data-ephox-embed-iri'],\n source2: '',\n poster: '',\n width: get(styles, 'max-width').map(trimPx).getOr(''),\n height: get(styles, 'max-height').map(trimPx).getOr('')\n };\n };\n var htmlToData = function (prefixes, html) {\n var isEphoxEmbed = Cell(false);\n var data = {};\n global$4({\n validate: false,\n allow_conditional_comments: true,\n special: 'script,noscript',\n start: function (name, attrs) {\n if (isEphoxEmbed.get()) ; else if (has(attrs.map, 'data-ephox-embed-iri')) {\n isEphoxEmbed.set(true);\n data = getEphoxEmbedData(attrs);\n } else {\n if (!data.source1 && name === 'param') {\n data.source1 = attrs.map.movie;\n }\n if (name === 'iframe' || name === 'object' || name === 'embed' || name === 'video' || name === 'audio') {\n if (!data.type) {\n data.type = name;\n }\n data = global$2.extend(attrs.map, data);\n }\n if (name === 'script') {\n var videoScript = VideoScript.getVideoScriptMatch(prefixes, attrs.map.src);\n if (!videoScript) {\n return;\n }\n data = {\n type: 'script',\n source1: attrs.map.src,\n width: videoScript.width,\n height: videoScript.height\n };\n }\n if (name === 'source') {\n if (!data.source1) {\n data.source1 = attrs.map.src;\n } else if (!data.source2) {\n data.source2 = attrs.map.src;\n }\n }\n if (name === 'img' && !data.poster) {\n data.poster = attrs.map.src;\n }\n }\n }\n }).parse(html);\n data.source1 = data.source1 || data.src || data.data;\n data.source2 = data.source2 || '';\n data.poster = data.poster || '';\n return data;\n };\n var HtmlToData = { htmlToData: htmlToData };\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.util.Promise');\n\n var guess = function (url) {\n var mimes = {\n mp3: 'audio/mpeg',\n wav: 'audio/wav',\n mp4: 'video/mp4',\n webm: 'video/webm',\n ogg: 'video/ogg',\n swf: 'application/x-shockwave-flash'\n };\n var fileEnd = url.toLowerCase().split('.').pop();\n var mime = mimes[fileEnd];\n return mime ? mime : '';\n };\n var Mime = { guess: guess };\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.html.Schema');\n\n var global$7 = tinymce.util.Tools.resolve('tinymce.html.Writer');\n\n var DOM$1 = global$3.DOM;\n var addPx = function (value) {\n return /^[0-9.]+$/.test(value) ? value + 'px' : value;\n };\n var setAttributes = function (attrs, updatedAttrs) {\n for (var name in updatedAttrs) {\n var value = '' + updatedAttrs[name];\n if (attrs.map[name]) {\n var i = attrs.length;\n while (i--) {\n var attr = attrs[i];\n if (attr.name === name) {\n if (value) {\n attrs.map[name] = value;\n attr.value = value;\n } else {\n delete attrs.map[name];\n attrs.splice(i, 1);\n }\n }\n }\n } else if (value) {\n attrs.push({\n name: name,\n value: value\n });\n attrs.map[name] = value;\n }\n }\n };\n var updateEphoxEmbed = function (data, attrs) {\n var style = attrs.map.style;\n var styleMap = style ? DOM$1.parseStyle(style) : {};\n styleMap['max-width'] = addPx(data.width);\n styleMap['max-height'] = addPx(data.height);\n setAttributes(attrs, { style: DOM$1.serializeStyle(styleMap) });\n };\n var updateHtml = function (html, data, updateAll) {\n var writer = global$7();\n var isEphoxEmbed = Cell(false);\n var sourceCount = 0;\n var hasImage;\n global$4({\n validate: false,\n allow_conditional_comments: true,\n special: 'script,noscript',\n comment: function (text) {\n writer.comment(text);\n },\n cdata: function (text) {\n writer.cdata(text);\n },\n text: function (text, raw) {\n writer.text(text, raw);\n },\n start: function (name, attrs, empty) {\n if (isEphoxEmbed.get()) ; else if (has(attrs.map, 'data-ephox-embed-iri')) {\n isEphoxEmbed.set(true);\n updateEphoxEmbed(data, attrs);\n } else {\n switch (name) {\n case 'video':\n case 'object':\n case 'embed':\n case 'img':\n case 'iframe':\n if (data.height !== undefined && data.width !== undefined) {\n setAttributes(attrs, {\n width: data.width,\n height: data.height\n });\n }\n break;\n }\n if (updateAll) {\n switch (name) {\n case 'video':\n setAttributes(attrs, {\n poster: data.poster,\n src: ''\n });\n if (data.source2) {\n setAttributes(attrs, { src: '' });\n }\n break;\n case 'iframe':\n setAttributes(attrs, { src: data.source1 });\n break;\n case 'source':\n sourceCount++;\n if (sourceCount <= 2) {\n setAttributes(attrs, {\n src: data['source' + sourceCount],\n type: data['source' + sourceCount + 'mime']\n });\n if (!data['source' + sourceCount]) {\n return;\n }\n }\n break;\n case 'img':\n if (!data.poster) {\n return;\n }\n hasImage = true;\n break;\n }\n }\n }\n writer.start(name, attrs, empty);\n },\n end: function (name) {\n if (!isEphoxEmbed.get()) {\n if (name === 'video' && updateAll) {\n for (var index = 1; index <= 2; index++) {\n if (data['source' + index]) {\n var attrs = [];\n attrs.map = {};\n if (sourceCount < index) {\n setAttributes(attrs, {\n src: data['source' + index],\n type: data['source' + index + 'mime']\n });\n writer.start('source', attrs, true);\n }\n }\n }\n }\n if (data.poster && name === 'object' && updateAll && !hasImage) {\n var imgAttrs = [];\n imgAttrs.map = {};\n setAttributes(imgAttrs, {\n src: data.poster,\n width: data.width,\n height: data.height\n });\n writer.start('img', imgAttrs, true);\n }\n }\n writer.end(name);\n }\n }, global$6({})).parse(html);\n return writer.getContent();\n };\n var UpdateHtml = { updateHtml: updateHtml };\n\n var urlPatterns = [\n {\n regex: /youtu\\.be\\/([\\w\\-_\\?&=.]+)/i,\n type: 'iframe',\n w: 560,\n h: 314,\n url: '//www.youtube.com/embed/$1',\n allowFullscreen: true\n },\n {\n regex: /youtube\\.com(.+)v=([^&]+)(&([a-z0-9&=\\-_]+))?/i,\n type: 'iframe',\n w: 560,\n h: 314,\n url: '//www.youtube.com/embed/$2?$4',\n allowFullscreen: true\n },\n {\n regex: /youtube.com\\/embed\\/([a-z0-9\\?&=\\-_]+)/i,\n type: 'iframe',\n w: 560,\n h: 314,\n url: '//www.youtube.com/embed/$1',\n allowFullscreen: true\n },\n {\n regex: /vimeo\\.com\\/([0-9]+)/,\n type: 'iframe',\n w: 425,\n h: 350,\n url: '//player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc',\n allowFullscreen: true\n },\n {\n regex: /vimeo\\.com\\/(.*)\\/([0-9]+)/,\n type: 'iframe',\n w: 425,\n h: 350,\n url: '//player.vimeo.com/video/$2?title=0&byline=0',\n allowFullscreen: true\n },\n {\n regex: /maps\\.google\\.([a-z]{2,3})\\/maps\\/(.+)msid=(.+)/,\n type: 'iframe',\n w: 425,\n h: 350,\n url: '//maps.google.com/maps/ms?msid=$2&output=embed\"',\n allowFullscreen: false\n },\n {\n regex: /dailymotion\\.com\\/video\\/([^_]+)/,\n type: 'iframe',\n w: 480,\n h: 270,\n url: '//www.dailymotion.com/embed/video/$1',\n allowFullscreen: true\n },\n {\n regex: /dai\\.ly\\/([^_]+)/,\n type: 'iframe',\n w: 480,\n h: 270,\n url: '//www.dailymotion.com/embed/video/$1',\n allowFullscreen: true\n }\n ];\n var getUrl = function (pattern, url) {\n var match = pattern.regex.exec(url);\n var newUrl = pattern.url;\n var _loop_1 = function (i) {\n newUrl = newUrl.replace('$' + i, function () {\n return match[i] ? match[i] : '';\n });\n };\n for (var i = 0; i < match.length; i++) {\n _loop_1(i);\n }\n return newUrl.replace(/\\?$/, '');\n };\n var matchPattern = function (url) {\n var pattern = urlPatterns.filter(function (pattern) {\n return pattern.regex.test(url);\n });\n if (pattern.length > 0) {\n return global$2.extend({}, pattern[0], { url: getUrl(pattern[0], url) });\n } else {\n return null;\n }\n };\n\n var getIframeHtml = function (data) {\n var allowFullscreen = data.allowFullscreen ? ' allowFullscreen=\"1\"' : '';\n return '';\n };\n var getFlashHtml = function (data) {\n var html = '';\n if (data.poster) {\n html += '';\n }\n html += '';\n return html;\n };\n var getAudioHtml = function (data, audioTemplateCallback) {\n if (audioTemplateCallback) {\n return audioTemplateCallback(data);\n } else {\n return '';\n }\n };\n var getVideoHtml = function (data, videoTemplateCallback) {\n if (videoTemplateCallback) {\n return videoTemplateCallback(data);\n } else {\n return '';\n }\n };\n var getScriptHtml = function (data) {\n return '';\n };\n var dataToHtml = function (editor, dataIn) {\n var data = global$2.extend({}, dataIn);\n if (!data.source1) {\n global$2.extend(data, HtmlToData.htmlToData(Settings.getScripts(editor), data.embed));\n if (!data.source1) {\n return '';\n }\n }\n if (!data.source2) {\n data.source2 = '';\n }\n if (!data.poster) {\n data.poster = '';\n }\n data.source1 = editor.convertURL(data.source1, 'source');\n data.source2 = editor.convertURL(data.source2, 'source');\n data.source1mime = Mime.guess(data.source1);\n data.source2mime = Mime.guess(data.source2);\n data.poster = editor.convertURL(data.poster, 'poster');\n var pattern = matchPattern(data.source1);\n if (pattern) {\n data.source1 = pattern.url;\n data.type = pattern.type;\n data.allowFullscreen = pattern.allowFullscreen;\n data.width = data.width || pattern.w;\n data.height = data.height || pattern.h;\n }\n if (data.embed) {\n return UpdateHtml.updateHtml(data.embed, data, true);\n } else {\n var videoScript = VideoScript.getVideoScriptMatch(Settings.getScripts(editor), data.source1);\n if (videoScript) {\n data.type = 'script';\n data.width = videoScript.width;\n data.height = videoScript.height;\n }\n var audioTemplateCallback = Settings.getAudioTemplateCallback(editor);\n var videoTemplateCallback = Settings.getVideoTemplateCallback(editor);\n data.width = data.width || 300;\n data.height = data.height || 150;\n global$2.each(data, function (value, key) {\n data[key] = editor.dom.encode(value);\n });\n if (data.type === 'iframe') {\n return getIframeHtml(data);\n } else if (data.source1mime === 'application/x-shockwave-flash') {\n return getFlashHtml(data);\n } else if (data.source1mime.indexOf('audio') !== -1) {\n return getAudioHtml(data, audioTemplateCallback);\n } else if (data.type === 'script') {\n return getScriptHtml(data);\n } else {\n return getVideoHtml(data, videoTemplateCallback);\n }\n }\n };\n var DataToHtml = { dataToHtml: dataToHtml };\n\n var cache = {};\n var embedPromise = function (data, dataToHtml, handler) {\n return new global$5(function (res, rej) {\n var wrappedResolve = function (response) {\n if (response.html) {\n cache[data.source1] = response;\n }\n return res({\n url: data.source1,\n html: response.html ? response.html : dataToHtml(data)\n });\n };\n if (cache[data.source1]) {\n wrappedResolve(cache[data.source1]);\n } else {\n handler({ url: data.source1 }, wrappedResolve, rej);\n }\n });\n };\n var defaultPromise = function (data, dataToHtml) {\n return new global$5(function (res) {\n res({\n html: dataToHtml(data),\n url: data.source1\n });\n });\n };\n var loadedData = function (editor) {\n return function (data) {\n return DataToHtml.dataToHtml(editor, data);\n };\n };\n var getEmbedHtml = function (editor, data) {\n var embedHandler = Settings.getUrlResolver(editor);\n return embedHandler ? embedPromise(data, loadedData(editor), embedHandler) : defaultPromise(data, loadedData(editor));\n };\n var isCached = function (url) {\n return cache.hasOwnProperty(url);\n };\n var Service = {\n getEmbedHtml: getEmbedHtml,\n isCached: isCached\n };\n\n var trimPx$1 = function (value) {\n return value.replace(/px$/, '');\n };\n var addPx$1 = function (value) {\n return /^[0-9.]+$/.test(value) ? value + 'px' : value;\n };\n var getSize = function (name) {\n return function (elm) {\n return elm ? trimPx$1(elm.style[name]) : '';\n };\n };\n var setSize = function (name) {\n return function (elm, value) {\n if (elm) {\n elm.style[name] = addPx$1(value);\n }\n };\n };\n var Size = {\n getMaxWidth: getSize('maxWidth'),\n getMaxHeight: getSize('maxHeight'),\n setMaxWidth: setSize('maxWidth'),\n setMaxHeight: setSize('maxHeight')\n };\n\n var doSyncSize = function (widthCtrl, heightCtrl) {\n widthCtrl.state.set('oldVal', widthCtrl.value());\n heightCtrl.state.set('oldVal', heightCtrl.value());\n };\n var doSizeControls = function (win, f) {\n var widthCtrl = win.find('#width')[0];\n var heightCtrl = win.find('#height')[0];\n var constrained = win.find('#constrain')[0];\n if (widthCtrl && heightCtrl && constrained) {\n f(widthCtrl, heightCtrl, constrained.checked());\n }\n };\n var doUpdateSize = function (widthCtrl, heightCtrl, isContrained) {\n var oldWidth = widthCtrl.state.get('oldVal');\n var oldHeight = heightCtrl.state.get('oldVal');\n var newWidth = widthCtrl.value();\n var newHeight = heightCtrl.value();\n if (isContrained && oldWidth && oldHeight && newWidth && newHeight) {\n if (newWidth !== oldWidth) {\n newHeight = Math.round(newWidth / oldWidth * newHeight);\n if (!isNaN(newHeight)) {\n heightCtrl.value(newHeight);\n }\n } else {\n newWidth = Math.round(newHeight / oldHeight * newWidth);\n if (!isNaN(newWidth)) {\n widthCtrl.value(newWidth);\n }\n }\n }\n doSyncSize(widthCtrl, heightCtrl);\n };\n var syncSize = function (win) {\n doSizeControls(win, doSyncSize);\n };\n var updateSize = function (win) {\n doSizeControls(win, doUpdateSize);\n };\n var createUi = function (onChange) {\n var recalcSize = function () {\n onChange(function (win) {\n updateSize(win);\n });\n };\n return {\n type: 'container',\n label: 'Dimensions',\n layout: 'flex',\n align: 'center',\n spacing: 5,\n items: [\n {\n name: 'width',\n type: 'textbox',\n maxLength: 5,\n size: 5,\n onchange: recalcSize,\n ariaLabel: 'Width'\n },\n {\n type: 'label',\n text: 'x'\n },\n {\n name: 'height',\n type: 'textbox',\n maxLength: 5,\n size: 5,\n onchange: recalcSize,\n ariaLabel: 'Height'\n },\n {\n name: 'constrain',\n type: 'checkbox',\n checked: true,\n text: 'Constrain proportions'\n }\n ]\n };\n };\n var SizeManager = {\n createUi: createUi,\n syncSize: syncSize,\n updateSize: updateSize\n };\n\n var embedChange = global$1.ie && global$1.ie <= 8 ? 'onChange' : 'onInput';\n var handleError = function (editor) {\n return function (error) {\n var errorMessage = error && error.msg ? 'Media embed handler error: ' + error.msg : 'Media embed handler threw unknown error.';\n editor.notificationManager.open({\n type: 'error',\n text: errorMessage\n });\n };\n };\n var getData = function (editor) {\n var element = editor.selection.getNode();\n var dataEmbed = element.getAttribute('data-ephox-embed-iri');\n if (dataEmbed) {\n return {\n 'source1': dataEmbed,\n 'data-ephox-embed-iri': dataEmbed,\n 'width': Size.getMaxWidth(element),\n 'height': Size.getMaxHeight(element)\n };\n }\n return element.getAttribute('data-mce-object') ? HtmlToData.htmlToData(Settings.getScripts(editor), editor.serializer.serialize(element, { selection: true })) : {};\n };\n var getSource = function (editor) {\n var elm = editor.selection.getNode();\n if (elm.getAttribute('data-mce-object') || elm.getAttribute('data-ephox-embed-iri')) {\n return editor.selection.getContent();\n }\n };\n var addEmbedHtml = function (win, editor) {\n return function (response) {\n var html = response.html;\n var embed = win.find('#embed')[0];\n var data = global$2.extend(HtmlToData.htmlToData(Settings.getScripts(editor), html), { source1: response.url });\n win.fromJSON(data);\n if (embed) {\n embed.value(html);\n SizeManager.updateSize(win);\n }\n };\n };\n var selectPlaceholder = function (editor, beforeObjects) {\n var i;\n var y;\n var afterObjects = editor.dom.select('img[data-mce-object]');\n for (i = 0; i < beforeObjects.length; i++) {\n for (y = afterObjects.length - 1; y >= 0; y--) {\n if (beforeObjects[i] === afterObjects[y]) {\n afterObjects.splice(y, 1);\n }\n }\n }\n editor.selection.select(afterObjects[0]);\n };\n var handleInsert = function (editor, html) {\n var beforeObjects = editor.dom.select('img[data-mce-object]');\n editor.insertContent(html);\n selectPlaceholder(editor, beforeObjects);\n editor.nodeChanged();\n };\n var submitForm = function (win, editor) {\n var data = win.toJSON();\n data.embed = UpdateHtml.updateHtml(data.embed, data);\n if (data.embed && Service.isCached(data.source1)) {\n handleInsert(editor, data.embed);\n } else {\n Service.getEmbedHtml(editor, data).then(function (response) {\n handleInsert(editor, response.html);\n }).catch(handleError(editor));\n }\n };\n var populateMeta = function (win, meta) {\n global$2.each(meta, function (value, key) {\n win.find('#' + key).value(value);\n });\n };\n var showDialog = function (editor) {\n var win;\n var data;\n var generalFormItems = [{\n name: 'source1',\n type: 'filepicker',\n filetype: 'media',\n size: 40,\n autofocus: true,\n label: 'Source',\n onpaste: function () {\n setTimeout(function () {\n Service.getEmbedHtml(editor, win.toJSON()).then(addEmbedHtml(win, editor)).catch(handleError(editor));\n }, 1);\n },\n onchange: function (e) {\n Service.getEmbedHtml(editor, win.toJSON()).then(addEmbedHtml(win, editor)).catch(handleError(editor));\n populateMeta(win, e.meta);\n },\n onbeforecall: function (e) {\n e.meta = win.toJSON();\n }\n }];\n var advancedFormItems = [];\n var reserialise = function (update) {\n update(win);\n data = win.toJSON();\n win.find('#embed').value(UpdateHtml.updateHtml(data.embed, data));\n };\n if (Settings.hasAltSource(editor)) {\n advancedFormItems.push({\n name: 'source2',\n type: 'filepicker',\n filetype: 'media',\n size: 40,\n label: 'Alternative source'\n });\n }\n if (Settings.hasPoster(editor)) {\n advancedFormItems.push({\n name: 'poster',\n type: 'filepicker',\n filetype: 'image',\n size: 40,\n label: 'Poster'\n });\n }\n if (Settings.hasDimensions(editor)) {\n var control = SizeManager.createUi(reserialise);\n generalFormItems.push(control);\n }\n data = getData(editor);\n var embedTextBox = {\n id: 'mcemediasource',\n type: 'textbox',\n flex: 1,\n name: 'embed',\n value: getSource(editor),\n multiline: true,\n rows: 5,\n label: 'Source'\n };\n var updateValueOnChange = function () {\n data = global$2.extend({}, HtmlToData.htmlToData(Settings.getScripts(editor), this.value()));\n this.parent().parent().fromJSON(data);\n };\n embedTextBox[embedChange] = updateValueOnChange;\n var body = [\n {\n title: 'General',\n type: 'form',\n items: generalFormItems\n },\n {\n title: 'Embed',\n type: 'container',\n layout: 'flex',\n direction: 'column',\n align: 'stretch',\n padding: 10,\n spacing: 10,\n items: [\n {\n type: 'label',\n text: 'Paste your embed code below:',\n forId: 'mcemediasource'\n },\n embedTextBox\n ]\n }\n ];\n if (advancedFormItems.length > 0) {\n body.push({\n title: 'Advanced',\n type: 'form',\n items: advancedFormItems\n });\n }\n win = editor.windowManager.open({\n title: 'Insert/edit media',\n data: data,\n bodyType: 'tabpanel',\n body: body,\n onSubmit: function () {\n SizeManager.updateSize(win);\n submitForm(win, editor);\n }\n });\n SizeManager.syncSize(win);\n };\n var Dialog = { showDialog: showDialog };\n\n var get$1 = function (editor) {\n var showDialog = function () {\n Dialog.showDialog(editor);\n };\n return { showDialog: showDialog };\n };\n var Api = { get: get$1 };\n\n var register = function (editor) {\n var showDialog = function () {\n Dialog.showDialog(editor);\n };\n editor.addCommand('mceMedia', showDialog);\n };\n var Commands = { register: register };\n\n var global$8 = tinymce.util.Tools.resolve('tinymce.html.Node');\n\n var sanitize = function (editor, html) {\n if (Settings.shouldFilterHtml(editor) === false) {\n return html;\n }\n var writer = global$7();\n var blocked;\n global$4({\n validate: false,\n allow_conditional_comments: false,\n special: 'script,noscript',\n comment: function (text) {\n writer.comment(text);\n },\n cdata: function (text) {\n writer.cdata(text);\n },\n text: function (text, raw) {\n writer.text(text, raw);\n },\n start: function (name, attrs, empty) {\n blocked = true;\n if (name === 'script' || name === 'noscript' || name === 'svg') {\n return;\n }\n for (var i = attrs.length - 1; i >= 0; i--) {\n var attrName = attrs[i].name;\n if (attrName.indexOf('on') === 0) {\n delete attrs.map[attrName];\n attrs.splice(i, 1);\n }\n if (attrName === 'style') {\n attrs[i].value = editor.dom.serializeStyle(editor.dom.parseStyle(attrs[i].value), name);\n }\n }\n writer.start(name, attrs, empty);\n blocked = false;\n },\n end: function (name) {\n if (blocked) {\n return;\n }\n writer.end(name);\n }\n }, global$6({})).parse(html);\n return writer.getContent();\n };\n var Sanitize = { sanitize: sanitize };\n\n var createPlaceholderNode = function (editor, node) {\n var placeHolder;\n var name = node.name;\n placeHolder = new global$8('img', 1);\n placeHolder.shortEnded = true;\n retainAttributesAndInnerHtml(editor, node, placeHolder);\n placeHolder.attr({\n 'width': node.attr('width') || '300',\n 'height': node.attr('height') || (name === 'audio' ? '30' : '150'),\n 'style': node.attr('style'),\n 'src': global$1.transparentSrc,\n 'data-mce-object': name,\n 'class': 'mce-object mce-object-' + name\n });\n return placeHolder;\n };\n var createPreviewIframeNode = function (editor, node) {\n var previewWrapper;\n var previewNode;\n var shimNode;\n var name = node.name;\n previewWrapper = new global$8('span', 1);\n previewWrapper.attr({\n 'contentEditable': 'false',\n 'style': node.attr('style'),\n 'data-mce-object': name,\n 'class': 'mce-preview-object mce-object-' + name\n });\n retainAttributesAndInnerHtml(editor, node, previewWrapper);\n previewNode = new global$8(name, 1);\n previewNode.attr({\n src: node.attr('src'),\n allowfullscreen: node.attr('allowfullscreen'),\n style: node.attr('style'),\n class: node.attr('class'),\n width: node.attr('width'),\n height: node.attr('height'),\n frameborder: '0'\n });\n shimNode = new global$8('span', 1);\n shimNode.attr('class', 'mce-shim');\n previewWrapper.append(previewNode);\n previewWrapper.append(shimNode);\n return previewWrapper;\n };\n var retainAttributesAndInnerHtml = function (editor, sourceNode, targetNode) {\n var attrName;\n var attrValue;\n var attribs;\n var ai;\n var innerHtml;\n attribs = sourceNode.attributes;\n ai = attribs.length;\n while (ai--) {\n attrName = attribs[ai].name;\n attrValue = attribs[ai].value;\n if (attrName !== 'width' && attrName !== 'height' && attrName !== 'style') {\n if (attrName === 'data' || attrName === 'src') {\n attrValue = editor.convertURL(attrValue, attrName);\n }\n targetNode.attr('data-mce-p-' + attrName, attrValue);\n }\n }\n innerHtml = sourceNode.firstChild && sourceNode.firstChild.value;\n if (innerHtml) {\n targetNode.attr('data-mce-html', escape(Sanitize.sanitize(editor, innerHtml)));\n targetNode.firstChild = null;\n }\n };\n var isWithinEphoxEmbed = function (node) {\n while (node = node.parent) {\n if (node.attr('data-ephox-embed-iri')) {\n return true;\n }\n }\n return false;\n };\n var placeHolderConverter = function (editor) {\n return function (nodes) {\n var i = nodes.length;\n var node;\n var videoScript;\n while (i--) {\n node = nodes[i];\n if (!node.parent) {\n continue;\n }\n if (node.parent.attr('data-mce-object')) {\n continue;\n }\n if (node.name === 'script') {\n videoScript = VideoScript.getVideoScriptMatch(Settings.getScripts(editor), node.attr('src'));\n if (!videoScript) {\n continue;\n }\n }\n if (videoScript) {\n if (videoScript.width) {\n node.attr('width', videoScript.width.toString());\n }\n if (videoScript.height) {\n node.attr('height', videoScript.height.toString());\n }\n }\n if (node.name === 'iframe' && Settings.hasLiveEmbeds(editor) && global$1.ceFalse) {\n if (!isWithinEphoxEmbed(node)) {\n node.replace(createPreviewIframeNode(editor, node));\n }\n } else {\n if (!isWithinEphoxEmbed(node)) {\n node.replace(createPlaceholderNode(editor, node));\n }\n }\n }\n };\n };\n var Nodes = {\n createPreviewIframeNode: createPreviewIframeNode,\n createPlaceholderNode: createPlaceholderNode,\n placeHolderConverter: placeHolderConverter\n };\n\n var setup = function (editor) {\n editor.on('preInit', function () {\n var specialElements = editor.schema.getSpecialElements();\n global$2.each('video audio iframe object'.split(' '), function (name) {\n specialElements[name] = new RegExp(']*>', 'gi');\n });\n var boolAttrs = editor.schema.getBoolAttrs();\n global$2.each('webkitallowfullscreen mozallowfullscreen allowfullscreen'.split(' '), function (name) {\n boolAttrs[name] = {};\n });\n editor.parser.addNodeFilter('iframe,video,audio,object,embed,script', Nodes.placeHolderConverter(editor));\n editor.serializer.addAttributeFilter('data-mce-object', function (nodes, name) {\n var i = nodes.length;\n var node;\n var realElm;\n var ai;\n var attribs;\n var innerHtml;\n var innerNode;\n var realElmName;\n var className;\n while (i--) {\n node = nodes[i];\n if (!node.parent) {\n continue;\n }\n realElmName = node.attr(name);\n realElm = new global$8(realElmName, 1);\n if (realElmName !== 'audio' && realElmName !== 'script') {\n className = node.attr('class');\n if (className && className.indexOf('mce-preview-object') !== -1) {\n realElm.attr({\n width: node.firstChild.attr('width'),\n height: node.firstChild.attr('height')\n });\n } else {\n realElm.attr({\n width: node.attr('width'),\n height: node.attr('height')\n });\n }\n }\n realElm.attr({ style: node.attr('style') });\n attribs = node.attributes;\n ai = attribs.length;\n while (ai--) {\n var attrName = attribs[ai].name;\n if (attrName.indexOf('data-mce-p-') === 0) {\n realElm.attr(attrName.substr(11), attribs[ai].value);\n }\n }\n if (realElmName === 'script') {\n realElm.attr('type', 'text/javascript');\n }\n innerHtml = node.attr('data-mce-html');\n if (innerHtml) {\n innerNode = new global$8('#text', 3);\n innerNode.raw = true;\n innerNode.value = Sanitize.sanitize(editor, unescape(innerHtml));\n realElm.append(innerNode);\n }\n node.replace(realElm);\n }\n });\n });\n editor.on('setContent', function () {\n editor.$('span.mce-preview-object').each(function (index, elm) {\n var $elm = editor.$(elm);\n if ($elm.find('span.mce-shim', elm).length === 0) {\n $elm.append('');\n }\n });\n });\n };\n var FilterContent = { setup: setup };\n\n var setup$1 = function (editor) {\n editor.on('ResolveName', function (e) {\n var name;\n if (e.target.nodeType === 1 && (name = e.target.getAttribute('data-mce-object'))) {\n e.name = name;\n }\n });\n };\n var ResolveName = { setup: setup$1 };\n\n var setup$2 = function (editor) {\n editor.on('click keyup', function () {\n var selectedNode = editor.selection.getNode();\n if (selectedNode && editor.dom.hasClass(selectedNode, 'mce-preview-object')) {\n if (editor.dom.getAttrib(selectedNode, 'data-mce-selected')) {\n selectedNode.setAttribute('data-mce-selected', '2');\n }\n }\n });\n editor.on('ObjectSelected', function (e) {\n var objectType = e.target.getAttribute('data-mce-object');\n if (objectType === 'audio' || objectType === 'script') {\n e.preventDefault();\n }\n });\n editor.on('objectResized', function (e) {\n var target = e.target;\n var html;\n if (target.getAttribute('data-mce-object')) {\n html = target.getAttribute('data-mce-html');\n if (html) {\n html = unescape(html);\n target.setAttribute('data-mce-html', escape(UpdateHtml.updateHtml(html, {\n width: e.width,\n height: e.height\n })));\n }\n }\n });\n };\n var Selection = { setup: setup$2 };\n\n var register$1 = function (editor) {\n editor.addButton('media', {\n tooltip: 'Insert/edit media',\n cmd: 'mceMedia',\n stateSelector: [\n 'img[data-mce-object]',\n 'span[data-mce-object]',\n 'div[data-ephox-embed-iri]'\n ]\n });\n editor.addMenuItem('media', {\n icon: 'media',\n text: 'Media',\n cmd: 'mceMedia',\n context: 'insert',\n prependToContext: true\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('media', function (editor) {\n Commands.register(editor);\n Buttons.register(editor);\n ResolveName.setup(editor);\n FilterContent.setup(editor);\n Selection.setup(editor);\n return Api.get(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","// Exports the \"pagebreak\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/pagebreak')\n// ES2015:\n// import 'tinymce/plugins/pagebreak'\nrequire('./plugin.js');","(function () {\nvar pagebreak = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var getSeparatorHtml = function (editor) {\n return editor.getParam('pagebreak_separator', '');\n };\n var shouldSplitBlock = function (editor) {\n return editor.getParam('pagebreak_split_block', false);\n };\n var Settings = {\n getSeparatorHtml: getSeparatorHtml,\n shouldSplitBlock: shouldSplitBlock\n };\n\n var getPageBreakClass = function () {\n return 'mce-pagebreak';\n };\n var getPlaceholderHtml = function () {\n return '';\n };\n var setup = function (editor) {\n var separatorHtml = Settings.getSeparatorHtml(editor);\n var pageBreakSeparatorRegExp = new RegExp(separatorHtml.replace(/[\\?\\.\\*\\[\\]\\(\\)\\{\\}\\+\\^\\$\\:]/g, function (a) {\n return '\\\\' + a;\n }), 'gi');\n editor.on('BeforeSetContent', function (e) {\n e.content = e.content.replace(pageBreakSeparatorRegExp, getPlaceholderHtml());\n });\n editor.on('PreInit', function () {\n editor.serializer.addNodeFilter('img', function (nodes) {\n var i = nodes.length, node, className;\n while (i--) {\n node = nodes[i];\n className = node.attr('class');\n if (className && className.indexOf('mce-pagebreak') !== -1) {\n var parentNode = node.parent;\n if (editor.schema.getBlockElements()[parentNode.name] && Settings.shouldSplitBlock(editor)) {\n parentNode.type = 3;\n parentNode.value = separatorHtml;\n parentNode.raw = true;\n node.remove();\n continue;\n }\n node.type = 3;\n node.value = separatorHtml;\n node.raw = true;\n }\n }\n });\n });\n };\n var FilterContent = {\n setup: setup,\n getPlaceholderHtml: getPlaceholderHtml,\n getPageBreakClass: getPageBreakClass\n };\n\n var register = function (editor) {\n editor.addCommand('mcePageBreak', function () {\n if (editor.settings.pagebreak_split_block) {\n editor.insertContent('

' + FilterContent.getPlaceholderHtml() + '

');\n } else {\n editor.insertContent(FilterContent.getPlaceholderHtml());\n }\n });\n };\n var Commands = { register: register };\n\n var setup$1 = function (editor) {\n editor.on('ResolveName', function (e) {\n if (e.target.nodeName === 'IMG' && editor.dom.hasClass(e.target, FilterContent.getPageBreakClass())) {\n e.name = 'pagebreak';\n }\n });\n };\n var ResolveName = { setup: setup$1 };\n\n var register$1 = function (editor) {\n editor.addButton('pagebreak', {\n title: 'Page break',\n cmd: 'mcePageBreak'\n });\n editor.addMenuItem('pagebreak', {\n text: 'Page break',\n icon: 'pagebreak',\n cmd: 'mcePageBreak',\n context: 'insert'\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('pagebreak', function (editor) {\n Commands.register(editor);\n Buttons.register(editor);\n FilterContent.setup(editor);\n ResolveName.setup(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","// Exports the \"paste\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/paste')\n// ES2015:\n// import 'tinymce/plugins/paste'\nrequire('./plugin.js');","(function () {\nvar paste = (function (domGlobals) {\n 'use strict';\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n var clone = function () {\n return Cell(get());\n };\n return {\n get: get,\n set: set,\n clone: clone\n };\n };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var hasProPlugin = function (editor) {\n if (/(^|[ ,])powerpaste([, ]|$)/.test(editor.settings.plugins) && global$1.get('powerpaste')) {\n if (typeof domGlobals.window.console !== 'undefined' && domGlobals.window.console.log) {\n domGlobals.window.console.log('PowerPaste is incompatible with Paste plugin! Remove \\'paste\\' from the \\'plugins\\' option.');\n }\n return true;\n } else {\n return false;\n }\n };\n var DetectProPlugin = { hasProPlugin: hasProPlugin };\n\n var get = function (clipboard, quirks) {\n return {\n clipboard: clipboard,\n quirks: quirks\n };\n };\n var Api = { get: get };\n\n var firePastePreProcess = function (editor, html, internal, isWordHtml) {\n return editor.fire('PastePreProcess', {\n content: html,\n internal: internal,\n wordContent: isWordHtml\n });\n };\n var firePastePostProcess = function (editor, node, internal, isWordHtml) {\n return editor.fire('PastePostProcess', {\n node: node,\n internal: internal,\n wordContent: isWordHtml\n });\n };\n var firePastePlainTextToggle = function (editor, state) {\n return editor.fire('PastePlainTextToggle', { state: state });\n };\n var firePaste = function (editor, ieFake) {\n return editor.fire('paste', { ieFake: ieFake });\n };\n var Events = {\n firePastePreProcess: firePastePreProcess,\n firePastePostProcess: firePastePostProcess,\n firePastePlainTextToggle: firePastePlainTextToggle,\n firePaste: firePaste\n };\n\n var shouldPlainTextInform = function (editor) {\n return editor.getParam('paste_plaintext_inform', true);\n };\n var shouldBlockDrop = function (editor) {\n return editor.getParam('paste_block_drop', false);\n };\n var shouldPasteDataImages = function (editor) {\n return editor.getParam('paste_data_images', false);\n };\n var shouldFilterDrop = function (editor) {\n return editor.getParam('paste_filter_drop', true);\n };\n var getPreProcess = function (editor) {\n return editor.getParam('paste_preprocess');\n };\n var getPostProcess = function (editor) {\n return editor.getParam('paste_postprocess');\n };\n var getWebkitStyles = function (editor) {\n return editor.getParam('paste_webkit_styles');\n };\n var shouldRemoveWebKitStyles = function (editor) {\n return editor.getParam('paste_remove_styles_if_webkit', true);\n };\n var shouldMergeFormats = function (editor) {\n return editor.getParam('paste_merge_formats', true);\n };\n var isSmartPasteEnabled = function (editor) {\n return editor.getParam('smart_paste', true);\n };\n var isPasteAsTextEnabled = function (editor) {\n return editor.getParam('paste_as_text', false);\n };\n var getRetainStyleProps = function (editor) {\n return editor.getParam('paste_retain_style_properties');\n };\n var getWordValidElements = function (editor) {\n var defaultValidElements = '-strong/b,-em/i,-u,-span,-p,-ol,-ul,-li,-h1,-h2,-h3,-h4,-h5,-h6,' + '-p/div,-a[href|name],sub,sup,strike,br,del,table[width],tr,' + 'td[colspan|rowspan|width],th[colspan|rowspan|width],thead,tfoot,tbody';\n return editor.getParam('paste_word_valid_elements', defaultValidElements);\n };\n var shouldConvertWordFakeLists = function (editor) {\n return editor.getParam('paste_convert_word_fake_lists', true);\n };\n var shouldUseDefaultFilters = function (editor) {\n return editor.getParam('paste_enable_default_filters', true);\n };\n var Settings = {\n shouldPlainTextInform: shouldPlainTextInform,\n shouldBlockDrop: shouldBlockDrop,\n shouldPasteDataImages: shouldPasteDataImages,\n shouldFilterDrop: shouldFilterDrop,\n getPreProcess: getPreProcess,\n getPostProcess: getPostProcess,\n getWebkitStyles: getWebkitStyles,\n shouldRemoveWebKitStyles: shouldRemoveWebKitStyles,\n shouldMergeFormats: shouldMergeFormats,\n isSmartPasteEnabled: isSmartPasteEnabled,\n isPasteAsTextEnabled: isPasteAsTextEnabled,\n getRetainStyleProps: getRetainStyleProps,\n getWordValidElements: getWordValidElements,\n shouldConvertWordFakeLists: shouldConvertWordFakeLists,\n shouldUseDefaultFilters: shouldUseDefaultFilters\n };\n\n var shouldInformUserAboutPlainText = function (editor, userIsInformedState) {\n return userIsInformedState.get() === false && Settings.shouldPlainTextInform(editor);\n };\n var displayNotification = function (editor, message) {\n editor.notificationManager.open({\n text: editor.translate(message),\n type: 'info'\n });\n };\n var togglePlainTextPaste = function (editor, clipboard, userIsInformedState) {\n if (clipboard.pasteFormat.get() === 'text') {\n clipboard.pasteFormat.set('html');\n Events.firePastePlainTextToggle(editor, false);\n } else {\n clipboard.pasteFormat.set('text');\n Events.firePastePlainTextToggle(editor, true);\n if (shouldInformUserAboutPlainText(editor, userIsInformedState)) {\n displayNotification(editor, 'Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.');\n userIsInformedState.set(true);\n }\n }\n editor.focus();\n };\n var Actions = { togglePlainTextPaste: togglePlainTextPaste };\n\n var register = function (editor, clipboard, userIsInformedState) {\n editor.addCommand('mceTogglePlainTextPaste', function () {\n Actions.togglePlainTextPaste(editor, clipboard, userIsInformedState);\n });\n editor.addCommand('mceInsertClipboardContent', function (ui, value) {\n if (value.content) {\n clipboard.pasteHtml(value.content, value.internal);\n }\n if (value.text) {\n clipboard.pasteText(value.text);\n }\n });\n };\n var Commands = { register: register };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n var internalMimeType = 'x-tinymce/html';\n var internalMark = '';\n var mark = function (html) {\n return internalMark + html;\n };\n var unmark = function (html) {\n return html.replace(internalMark, '');\n };\n var isMarked = function (html) {\n return html.indexOf(internalMark) !== -1;\n };\n var InternalHtml = {\n mark: mark,\n unmark: unmark,\n isMarked: isMarked,\n internalHtmlMime: function () {\n return internalMimeType;\n }\n };\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.html.Entities');\n\n var isPlainText = function (text) {\n return !/<(?:\\/?(?!(?:div|p|br|span)>)\\w+|(?:(?!(?:span style=\"white-space:\\s?pre;?\">)|br\\s?\\/>))\\w+\\s[^>]+)>/i.test(text);\n };\n var toBRs = function (text) {\n return text.replace(/\\r?\\n/g, '
');\n };\n var openContainer = function (rootTag, rootAttrs) {\n var key;\n var attrs = [];\n var tag = '<' + rootTag;\n if (typeof rootAttrs === 'object') {\n for (key in rootAttrs) {\n if (rootAttrs.hasOwnProperty(key)) {\n attrs.push(key + '=\"' + global$6.encodeAllRaw(rootAttrs[key]) + '\"');\n }\n }\n if (attrs.length) {\n tag += ' ' + attrs.join(' ');\n }\n }\n return tag + '>';\n };\n var toBlockElements = function (text, rootTag, rootAttrs) {\n var blocks = text.split(/\\n\\n/);\n var tagOpen = openContainer(rootTag, rootAttrs);\n var tagClose = '';\n var paragraphs = global$4.map(blocks, function (p) {\n return p.split(/\\n/).join('
');\n });\n var stitch = function (p) {\n return tagOpen + p + tagClose;\n };\n return paragraphs.length === 1 ? paragraphs[0] : global$4.map(paragraphs, stitch).join('');\n };\n var convert = function (text, rootTag, rootAttrs) {\n return rootTag ? toBlockElements(text, rootTag, rootAttrs) : toBRs(text);\n };\n var Newlines = {\n isPlainText: isPlainText,\n convert: convert,\n toBRs: toBRs,\n toBlockElements: toBlockElements\n };\n\n var global$7 = tinymce.util.Tools.resolve('tinymce.html.DomParser');\n\n var global$8 = tinymce.util.Tools.resolve('tinymce.html.Serializer');\n\n var global$9 = tinymce.util.Tools.resolve('tinymce.html.Node');\n\n var global$a = tinymce.util.Tools.resolve('tinymce.html.Schema');\n\n function filter(content, items) {\n global$4.each(items, function (v) {\n if (v.constructor === RegExp) {\n content = content.replace(v, '');\n } else {\n content = content.replace(v[0], v[1]);\n }\n });\n return content;\n }\n function innerText(html) {\n var schema = global$a();\n var domParser = global$7({}, schema);\n var text = '';\n var shortEndedElements = schema.getShortEndedElements();\n var ignoreElements = global$4.makeMap('script noscript style textarea video audio iframe object', ' ');\n var blockElements = schema.getBlockElements();\n function walk(node) {\n var name = node.name, currentNode = node;\n if (name === 'br') {\n text += '\\n';\n return;\n }\n if (name === 'wbr') {\n return;\n }\n if (shortEndedElements[name]) {\n text += ' ';\n }\n if (ignoreElements[name]) {\n text += ' ';\n return;\n }\n if (node.type === 3) {\n text += node.value;\n }\n if (!node.shortEnded) {\n if (node = node.firstChild) {\n do {\n walk(node);\n } while (node = node.next);\n }\n }\n if (blockElements[name] && currentNode.next) {\n text += '\\n';\n if (name === 'p') {\n text += '\\n';\n }\n }\n }\n html = filter(html, [//g]);\n walk(domParser.parse(html));\n return text;\n }\n function trimHtml(html) {\n function trimSpaces(all, s1, s2) {\n if (!s1 && !s2) {\n return ' ';\n }\n return '\\xA0';\n }\n html = filter(html, [\n /^[\\s\\S]*]*>\\s*|\\s*<\\/body[^>]*>[\\s\\S]*$/ig,\n /|/g,\n [\n /( ?)\\u00a0<\\/span>( ?)/g,\n trimSpaces\n ],\n /
/g,\n /
$/i\n ]);\n return html;\n }\n function createIdGenerator(prefix) {\n var count = 0;\n return function () {\n return prefix + count++;\n };\n }\n var isMsEdge = function () {\n return domGlobals.navigator.userAgent.indexOf(' Edge/') !== -1;\n };\n var Utils = {\n filter: filter,\n innerText: innerText,\n trimHtml: trimHtml,\n createIdGenerator: createIdGenerator,\n isMsEdge: isMsEdge\n };\n\n function isWordContent(content) {\n return / 1) {\n currentListNode.attr('start', '' + start);\n }\n paragraphNode.wrap(currentListNode);\n } else {\n currentListNode.append(paragraphNode);\n }\n paragraphNode.name = 'li';\n if (level > lastLevel && prevListNode) {\n prevListNode.lastChild.append(currentListNode);\n }\n lastLevel = level;\n removeIgnoredNodes(paragraphNode);\n trimListStart(paragraphNode, /^\\u00a0+/);\n trimListStart(paragraphNode, /^\\s*([\\u2022\\u00b7\\u00a7\\u25CF]|\\w+\\.)/);\n trimListStart(paragraphNode, /^\\u00a0+/);\n }\n var elements = [];\n var child = node.firstChild;\n while (typeof child !== 'undefined' && child !== null) {\n elements.push(child);\n child = child.walk();\n if (child !== null) {\n while (typeof child !== 'undefined' && child.parent !== node) {\n child = child.walk();\n }\n }\n }\n for (var i = 0; i < elements.length; i++) {\n node = elements[i];\n if (node.name === 'p' && node.firstChild) {\n var nodeText = getText(node);\n if (isBulletList(nodeText)) {\n convertParagraphToLi(node, 'ul');\n continue;\n }\n if (isNumericList(nodeText)) {\n var matches = /([0-9]+)\\./.exec(nodeText);\n var start = 1;\n if (matches) {\n start = parseInt(matches[1], 10);\n }\n convertParagraphToLi(node, 'ol', start);\n continue;\n }\n if (node._listLevel) {\n convertParagraphToLi(node, 'ul', 1);\n continue;\n }\n currentListNode = null;\n } else {\n prevListNode = currentListNode;\n currentListNode = null;\n }\n }\n }\n function filterStyles(editor, validStyles, node, styleValue) {\n var outputStyles = {}, matches;\n var styles = editor.dom.parseStyle(styleValue);\n global$4.each(styles, function (value, name) {\n switch (name) {\n case 'mso-list':\n matches = /\\w+ \\w+([0-9]+)/i.exec(styleValue);\n if (matches) {\n node._listLevel = parseInt(matches[1], 10);\n }\n if (/Ignore/i.test(value) && node.firstChild) {\n node._listIgnore = true;\n node.firstChild._listIgnore = true;\n }\n break;\n case 'horiz-align':\n name = 'text-align';\n break;\n case 'vert-align':\n name = 'vertical-align';\n break;\n case 'font-color':\n case 'mso-foreground':\n name = 'color';\n break;\n case 'mso-background':\n case 'mso-highlight':\n name = 'background';\n break;\n case 'font-weight':\n case 'font-style':\n if (value !== 'normal') {\n outputStyles[name] = value;\n }\n return;\n case 'mso-element':\n if (/^(comment|comment-list)$/i.test(value)) {\n node.remove();\n return;\n }\n break;\n }\n if (name.indexOf('mso-comment') === 0) {\n node.remove();\n return;\n }\n if (name.indexOf('mso-') === 0) {\n return;\n }\n if (Settings.getRetainStyleProps(editor) === 'all' || validStyles && validStyles[name]) {\n outputStyles[name] = value;\n }\n });\n if (/(bold)/i.test(outputStyles['font-weight'])) {\n delete outputStyles['font-weight'];\n node.wrap(new global$9('b', 1));\n }\n if (/(italic)/i.test(outputStyles['font-style'])) {\n delete outputStyles['font-style'];\n node.wrap(new global$9('i', 1));\n }\n outputStyles = editor.dom.serializeStyle(outputStyles, node.name);\n if (outputStyles) {\n return outputStyles;\n }\n return null;\n }\n var filterWordContent = function (editor, content) {\n var retainStyleProperties, validStyles;\n retainStyleProperties = Settings.getRetainStyleProps(editor);\n if (retainStyleProperties) {\n validStyles = global$4.makeMap(retainStyleProperties.split(/[, ]/));\n }\n content = Utils.filter(content, [\n /
/gi,\n /]+id=\"?docs-internal-[^>]*>/gi,\n //gi,\n /<(!|script[^>]*>.*?<\\/script(?=[>\\s])|\\/?(\\?xml(:\\w+)?|img|meta|link|style|\\w:\\w+)(?=[\\s\\/>]))[^>]*>/gi,\n [\n /<(\\/?)s>/gi,\n '<$1strike>'\n ],\n [\n / /gi,\n '\\xA0'\n ],\n [\n /([\\s\\u00a0]*)<\\/span>/gi,\n function (str, spaces) {\n return spaces.length > 0 ? spaces.replace(/./, ' ').slice(Math.floor(spaces.length / 2)).split('').join('\\xA0') : '';\n }\n ]\n ]);\n var validElements = Settings.getWordValidElements(editor);\n var schema = global$a({\n valid_elements: validElements,\n valid_children: '-li[p]'\n });\n global$4.each(schema.elements, function (rule) {\n if (!rule.attributes.class) {\n rule.attributes.class = {};\n rule.attributesOrder.push('class');\n }\n if (!rule.attributes.style) {\n rule.attributes.style = {};\n rule.attributesOrder.push('style');\n }\n });\n var domParser = global$7({}, schema);\n domParser.addAttributeFilter('style', function (nodes) {\n var i = nodes.length, node;\n while (i--) {\n node = nodes[i];\n node.attr('style', filterStyles(editor, validStyles, node, node.attr('style')));\n if (node.name === 'span' && node.parent && !node.attributes.length) {\n node.unwrap();\n }\n }\n });\n domParser.addAttributeFilter('class', function (nodes) {\n var i = nodes.length, node, className;\n while (i--) {\n node = nodes[i];\n className = node.attr('class');\n if (/^(MsoCommentReference|MsoCommentText|msoDel)$/i.test(className)) {\n node.remove();\n }\n node.attr('class', null);\n }\n });\n domParser.addNodeFilter('del', function (nodes) {\n var i = nodes.length;\n while (i--) {\n nodes[i].remove();\n }\n });\n domParser.addNodeFilter('a', function (nodes) {\n var i = nodes.length, node, href, name;\n while (i--) {\n node = nodes[i];\n href = node.attr('href');\n name = node.attr('name');\n if (href && href.indexOf('#_msocom_') !== -1) {\n node.remove();\n continue;\n }\n if (href && href.indexOf('file://') === 0) {\n href = href.split('#')[1];\n if (href) {\n href = '#' + href;\n }\n }\n if (!href && !name) {\n node.unwrap();\n } else {\n if (name && !/^_?(?:toc|edn|ftn)/i.test(name)) {\n node.unwrap();\n continue;\n }\n node.attr({\n href: href,\n name: name\n });\n }\n }\n });\n var rootNode = domParser.parse(content);\n if (Settings.shouldConvertWordFakeLists(editor)) {\n convertFakeListsToProperLists(rootNode);\n }\n content = global$8({ validate: editor.settings.validate }, schema).serialize(rootNode);\n return content;\n };\n var preProcess = function (editor, content) {\n return Settings.shouldUseDefaultFilters(editor) ? filterWordContent(editor, content) : content;\n };\n var WordFilter = {\n preProcess: preProcess,\n isWordContent: isWordContent\n };\n\n var preProcess$1 = function (editor, html) {\n var parser = global$7({}, editor.schema);\n parser.addNodeFilter('meta', function (nodes) {\n global$4.each(nodes, function (node) {\n return node.remove();\n });\n });\n var fragment = parser.parse(html, {\n forced_root_block: false,\n isRootContent: true\n });\n return global$8({ validate: editor.settings.validate }, editor.schema).serialize(fragment);\n };\n var processResult = function (content, cancelled) {\n return {\n content: content,\n cancelled: cancelled\n };\n };\n var postProcessFilter = function (editor, html, internal, isWordHtml) {\n var tempBody = editor.dom.create('div', { style: 'display:none' }, html);\n var postProcessArgs = Events.firePastePostProcess(editor, tempBody, internal, isWordHtml);\n return processResult(postProcessArgs.node.innerHTML, postProcessArgs.isDefaultPrevented());\n };\n var filterContent = function (editor, content, internal, isWordHtml) {\n var preProcessArgs = Events.firePastePreProcess(editor, content, internal, isWordHtml);\n var filteredContent = preProcess$1(editor, preProcessArgs.content);\n if (editor.hasEventListeners('PastePostProcess') && !preProcessArgs.isDefaultPrevented()) {\n return postProcessFilter(editor, filteredContent, internal, isWordHtml);\n } else {\n return processResult(filteredContent, preProcessArgs.isDefaultPrevented());\n }\n };\n var process = function (editor, html, internal) {\n var isWordHtml = WordFilter.isWordContent(html);\n var content = isWordHtml ? WordFilter.preProcess(editor, html) : html;\n return filterContent(editor, content, internal, isWordHtml);\n };\n var ProcessFilters = { process: process };\n\n var pasteHtml = function (editor, html) {\n editor.insertContent(html, {\n merge: Settings.shouldMergeFormats(editor),\n paste: true\n });\n return true;\n };\n var isAbsoluteUrl = function (url) {\n return /^https?:\\/\\/[\\w\\?\\-\\/+=.&%@~#]+$/i.test(url);\n };\n var isImageUrl = function (url) {\n return isAbsoluteUrl(url) && /.(gif|jpe?g|png)$/.test(url);\n };\n var createImage = function (editor, url, pasteHtmlFn) {\n editor.undoManager.extra(function () {\n pasteHtmlFn(editor, url);\n }, function () {\n editor.insertContent('');\n });\n return true;\n };\n var createLink = function (editor, url, pasteHtmlFn) {\n editor.undoManager.extra(function () {\n pasteHtmlFn(editor, url);\n }, function () {\n editor.execCommand('mceInsertLink', false, url);\n });\n return true;\n };\n var linkSelection = function (editor, html, pasteHtmlFn) {\n return editor.selection.isCollapsed() === false && isAbsoluteUrl(html) ? createLink(editor, html, pasteHtmlFn) : false;\n };\n var insertImage = function (editor, html, pasteHtmlFn) {\n return isImageUrl(html) ? createImage(editor, html, pasteHtmlFn) : false;\n };\n var smartInsertContent = function (editor, html) {\n global$4.each([\n linkSelection,\n insertImage,\n pasteHtml\n ], function (action) {\n return action(editor, html, pasteHtml) !== true;\n });\n };\n var insertContent = function (editor, html) {\n if (Settings.isSmartPasteEnabled(editor) === false) {\n pasteHtml(editor, html);\n } else {\n smartInsertContent(editor, html);\n }\n };\n var SmartPaste = {\n isImageUrl: isImageUrl,\n isAbsoluteUrl: isAbsoluteUrl,\n insertContent: insertContent\n };\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n function curry(fn) {\n var initialArgs = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n initialArgs[_i - 1] = arguments[_i];\n }\n return function () {\n var restArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n restArgs[_i] = arguments[_i];\n }\n var all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n if (Object.freeze) {\n Object.freeze(me);\n }\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Option = {\n some: some,\n none: none,\n from: from\n };\n\n var typeOf = function (x) {\n if (x === null) {\n return 'null';\n }\n var t = typeof x;\n if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n }\n if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n }\n return t;\n };\n var isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isFunction = isType('function');\n\n var nativeSlice = Array.prototype.slice;\n var map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var each = function (xs, f) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n f(x, i);\n }\n };\n var filter$1 = function (xs, pred) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n var from$1 = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n\n var exports$1 = {}, module = { exports: exports$1 };\n (function (define, exports, module, require) {\n (function (f) {\n if (typeof exports === 'object' && typeof module !== 'undefined') {\n module.exports = f();\n } else if (typeof define === 'function' && define.amd) {\n define([], f);\n } else {\n var g;\n if (typeof window !== 'undefined') {\n g = window;\n } else if (typeof global !== 'undefined') {\n g = global;\n } else if (typeof self !== 'undefined') {\n g = self;\n } else {\n g = this;\n }\n g.EphoxContactWrapper = f();\n }\n }(function () {\n return function () {\n function r(e, n, t) {\n function o(i, f) {\n if (!n[i]) {\n if (!e[i]) {\n var c = 'function' == typeof require && require;\n if (!f && c)\n return c(i, !0);\n if (u)\n return u(i, !0);\n var a = new Error('Cannot find module \\'' + i + '\\'');\n throw a.code = 'MODULE_NOT_FOUND', a;\n }\n var p = n[i] = { exports: {} };\n e[i][0].call(p.exports, function (r) {\n var n = e[i][1][r];\n return o(n || r);\n }, p, p.exports, r, e, n, t);\n }\n return n[i].exports;\n }\n for (var u = 'function' == typeof require && require, i = 0; i < t.length; i++)\n o(t[i]);\n return o;\n }\n return r;\n }()({\n 1: [\n function (require, module, exports) {\n var process = module.exports = {};\n var cachedSetTimeout;\n var cachedClearTimeout;\n function defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n }\n function defaultClearTimeout() {\n throw new Error('clearTimeout has not been defined');\n }\n (function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n }());\n function runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n return setTimeout(fun, 0);\n }\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n return cachedSetTimeout(fun, 0);\n } catch (e) {\n try {\n return cachedSetTimeout.call(null, fun, 0);\n } catch (e) {\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n }\n function runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n return clearTimeout(marker);\n }\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n return cachedClearTimeout(marker);\n } catch (e) {\n try {\n return cachedClearTimeout.call(null, marker);\n } catch (e) {\n return cachedClearTimeout.call(this, marker);\n }\n }\n }\n var queue = [];\n var draining = false;\n var currentQueue;\n var queueIndex = -1;\n function cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n }\n function drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n var len = queue.length;\n while (len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n }\n process.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n };\n function Item(fun, array) {\n this.fun = fun;\n this.array = array;\n }\n Item.prototype.run = function () {\n this.fun.apply(null, this.array);\n };\n process.title = 'browser';\n process.browser = true;\n process.env = {};\n process.argv = [];\n process.version = '';\n process.versions = {};\n function noop() {\n }\n process.on = noop;\n process.addListener = noop;\n process.once = noop;\n process.off = noop;\n process.removeListener = noop;\n process.removeAllListeners = noop;\n process.emit = noop;\n process.prependListener = noop;\n process.prependOnceListener = noop;\n process.listeners = function (name) {\n return [];\n };\n process.binding = function (name) {\n throw new Error('process.binding is not supported');\n };\n process.cwd = function () {\n return '/';\n };\n process.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n };\n process.umask = function () {\n return 0;\n };\n },\n {}\n ],\n 2: [\n function (require, module, exports) {\n (function (setImmediate) {\n (function (root) {\n var setTimeoutFunc = setTimeout;\n function noop() {\n }\n function bind(fn, thisArg) {\n return function () {\n fn.apply(thisArg, arguments);\n };\n }\n function Promise(fn) {\n if (typeof this !== 'object')\n throw new TypeError('Promises must be constructed via new');\n if (typeof fn !== 'function')\n throw new TypeError('not a function');\n this._state = 0;\n this._handled = false;\n this._value = undefined;\n this._deferreds = [];\n doResolve(fn, this);\n }\n function handle(self, deferred) {\n while (self._state === 3) {\n self = self._value;\n }\n if (self._state === 0) {\n self._deferreds.push(deferred);\n return;\n }\n self._handled = true;\n Promise._immediateFn(function () {\n var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n return;\n }\n var ret;\n try {\n ret = cb(self._value);\n } catch (e) {\n reject(deferred.promise, e);\n return;\n }\n resolve(deferred.promise, ret);\n });\n }\n function resolve(self, newValue) {\n try {\n if (newValue === self)\n throw new TypeError('A promise cannot be resolved with itself.');\n if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {\n var then = newValue.then;\n if (newValue instanceof Promise) {\n self._state = 3;\n self._value = newValue;\n finale(self);\n return;\n } else if (typeof then === 'function') {\n doResolve(bind(then, newValue), self);\n return;\n }\n }\n self._state = 1;\n self._value = newValue;\n finale(self);\n } catch (e) {\n reject(self, e);\n }\n }\n function reject(self, newValue) {\n self._state = 2;\n self._value = newValue;\n finale(self);\n }\n function finale(self) {\n if (self._state === 2 && self._deferreds.length === 0) {\n Promise._immediateFn(function () {\n if (!self._handled) {\n Promise._unhandledRejectionFn(self._value);\n }\n });\n }\n for (var i = 0, len = self._deferreds.length; i < len; i++) {\n handle(self, self._deferreds[i]);\n }\n self._deferreds = null;\n }\n function Handler(onFulfilled, onRejected, promise) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n }\n function doResolve(fn, self) {\n var done = false;\n try {\n fn(function (value) {\n if (done)\n return;\n done = true;\n resolve(self, value);\n }, function (reason) {\n if (done)\n return;\n done = true;\n reject(self, reason);\n });\n } catch (ex) {\n if (done)\n return;\n done = true;\n reject(self, ex);\n }\n }\n Promise.prototype['catch'] = function (onRejected) {\n return this.then(null, onRejected);\n };\n Promise.prototype.then = function (onFulfilled, onRejected) {\n var prom = new this.constructor(noop);\n handle(this, new Handler(onFulfilled, onRejected, prom));\n return prom;\n };\n Promise.all = function (arr) {\n var args = Array.prototype.slice.call(arr);\n return new Promise(function (resolve, reject) {\n if (args.length === 0)\n return resolve([]);\n var remaining = args.length;\n function res(i, val) {\n try {\n if (val && (typeof val === 'object' || typeof val === 'function')) {\n var then = val.then;\n if (typeof then === 'function') {\n then.call(val, function (val) {\n res(i, val);\n }, reject);\n return;\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n } catch (ex) {\n reject(ex);\n }\n }\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n };\n Promise.resolve = function (value) {\n if (value && typeof value === 'object' && value.constructor === Promise) {\n return value;\n }\n return new Promise(function (resolve) {\n resolve(value);\n });\n };\n Promise.reject = function (value) {\n return new Promise(function (resolve, reject) {\n reject(value);\n });\n };\n Promise.race = function (values) {\n return new Promise(function (resolve, reject) {\n for (var i = 0, len = values.length; i < len; i++) {\n values[i].then(resolve, reject);\n }\n });\n };\n Promise._immediateFn = typeof setImmediate === 'function' ? function (fn) {\n setImmediate(fn);\n } : function (fn) {\n setTimeoutFunc(fn, 0);\n };\n Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n if (typeof console !== 'undefined' && console) {\n console.warn('Possible Unhandled Promise Rejection:', err);\n }\n };\n Promise._setImmediateFn = function _setImmediateFn(fn) {\n Promise._immediateFn = fn;\n };\n Promise._setUnhandledRejectionFn = function _setUnhandledRejectionFn(fn) {\n Promise._unhandledRejectionFn = fn;\n };\n if (typeof module !== 'undefined' && module.exports) {\n module.exports = Promise;\n } else if (!root.Promise) {\n root.Promise = Promise;\n }\n }(this));\n }.call(this, require('timers').setImmediate));\n },\n { 'timers': 3 }\n ],\n 3: [\n function (require, module, exports) {\n (function (setImmediate, clearImmediate) {\n var nextTick = require('process/browser.js').nextTick;\n var apply = Function.prototype.apply;\n var slice = Array.prototype.slice;\n var immediateIds = {};\n var nextImmediateId = 0;\n exports.setTimeout = function () {\n return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\n };\n exports.setInterval = function () {\n return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\n };\n exports.clearTimeout = exports.clearInterval = function (timeout) {\n timeout.close();\n };\n function Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n }\n Timeout.prototype.unref = Timeout.prototype.ref = function () {\n };\n Timeout.prototype.close = function () {\n this._clearFn.call(window, this._id);\n };\n exports.enroll = function (item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n };\n exports.unenroll = function (item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n };\n exports._unrefActive = exports.active = function (item) {\n clearTimeout(item._idleTimeoutId);\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n };\n exports.setImmediate = typeof setImmediate === 'function' ? setImmediate : function (fn) {\n var id = nextImmediateId++;\n var args = arguments.length < 2 ? false : slice.call(arguments, 1);\n immediateIds[id] = true;\n nextTick(function onNextTick() {\n if (immediateIds[id]) {\n if (args) {\n fn.apply(null, args);\n } else {\n fn.call(null);\n }\n exports.clearImmediate(id);\n }\n });\n return id;\n };\n exports.clearImmediate = typeof clearImmediate === 'function' ? clearImmediate : function (id) {\n delete immediateIds[id];\n };\n }.call(this, require('timers').setImmediate, require('timers').clearImmediate));\n },\n {\n 'process/browser.js': 1,\n 'timers': 3\n }\n ],\n 4: [\n function (require, module, exports) {\n var promisePolyfill = require('promise-polyfill');\n var Global = function () {\n if (typeof window !== 'undefined') {\n return window;\n } else {\n return Function('return this;')();\n }\n }();\n module.exports = { boltExport: Global.Promise || promisePolyfill };\n },\n { 'promise-polyfill': 2 }\n ]\n }, {}, [4])(4);\n }));\n }(undefined, exports$1, module, undefined));\n var Promise = module.exports.boltExport;\n\n var nu = function (baseFn) {\n var data = Option.none();\n var callbacks = [];\n var map = function (f) {\n return nu(function (nCallback) {\n get(function (data) {\n nCallback(f(data));\n });\n });\n };\n var get = function (nCallback) {\n if (isReady()) {\n call(nCallback);\n } else {\n callbacks.push(nCallback);\n }\n };\n var set = function (x) {\n data = Option.some(x);\n run(callbacks);\n callbacks = [];\n };\n var isReady = function () {\n return data.isSome();\n };\n var run = function (cbs) {\n each(cbs, call);\n };\n var call = function (cb) {\n data.each(function (x) {\n domGlobals.setTimeout(function () {\n cb(x);\n }, 0);\n });\n };\n baseFn(set);\n return {\n get: get,\n map: map,\n isReady: isReady\n };\n };\n var pure = function (a) {\n return nu(function (callback) {\n callback(a);\n });\n };\n var LazyValue = {\n nu: nu,\n pure: pure\n };\n\n var errorReporter = function (err) {\n domGlobals.setTimeout(function () {\n throw err;\n }, 0);\n };\n var make = function (run) {\n var get = function (callback) {\n run().then(callback, errorReporter);\n };\n var map = function (fab) {\n return make(function () {\n return run().then(fab);\n });\n };\n var bind = function (aFutureB) {\n return make(function () {\n return run().then(function (v) {\n return aFutureB(v).toPromise();\n });\n });\n };\n var anonBind = function (futureB) {\n return make(function () {\n return run().then(function () {\n return futureB.toPromise();\n });\n });\n };\n var toLazy = function () {\n return LazyValue.nu(get);\n };\n var toCached = function () {\n var cache = null;\n return make(function () {\n if (cache === null) {\n cache = run();\n }\n return cache;\n });\n };\n var toPromise = run;\n return {\n map: map,\n bind: bind,\n anonBind: anonBind,\n toLazy: toLazy,\n toCached: toCached,\n toPromise: toPromise,\n get: get\n };\n };\n var nu$1 = function (baseFn) {\n return make(function () {\n return new Promise(baseFn);\n });\n };\n var pure$1 = function (a) {\n return make(function () {\n return Promise.resolve(a);\n });\n };\n var Future = {\n nu: nu$1,\n pure: pure$1\n };\n\n var par = function (asyncValues, nu) {\n return nu(function (callback) {\n var r = [];\n var count = 0;\n var cb = function (i) {\n return function (value) {\n r[i] = value;\n count++;\n if (count >= asyncValues.length) {\n callback(r);\n }\n };\n };\n if (asyncValues.length === 0) {\n callback([]);\n } else {\n each(asyncValues, function (asyncValue, i) {\n asyncValue.get(cb(i));\n });\n }\n });\n };\n\n var par$1 = function (futures) {\n return par(futures, Future.nu);\n };\n var traverse = function (array, fn) {\n return par$1(map(array, fn));\n };\n var mapM = traverse;\n\n var value = function () {\n var subject = Cell(Option.none());\n var clear = function () {\n subject.set(Option.none());\n };\n var set = function (s) {\n subject.set(Option.some(s));\n };\n var on = function (f) {\n subject.get().each(f);\n };\n var isSet = function () {\n return subject.get().isSome();\n };\n return {\n clear: clear,\n set: set,\n isSet: isSet,\n on: on\n };\n };\n\n var pasteHtml$1 = function (editor, html, internalFlag) {\n var internal = internalFlag ? internalFlag : InternalHtml.isMarked(html);\n var args = ProcessFilters.process(editor, InternalHtml.unmark(html), internal);\n if (args.cancelled === false) {\n SmartPaste.insertContent(editor, args.content);\n }\n };\n var pasteText = function (editor, text) {\n text = editor.dom.encode(text).replace(/\\r\\n/g, '\\n');\n text = Newlines.convert(text, editor.settings.forced_root_block, editor.settings.forced_root_block_attrs);\n pasteHtml$1(editor, text, false);\n };\n var getDataTransferItems = function (dataTransfer) {\n var items = {};\n var mceInternalUrlPrefix = 'data:text/mce-internal,';\n if (dataTransfer) {\n if (dataTransfer.getData) {\n var legacyText = dataTransfer.getData('Text');\n if (legacyText && legacyText.length > 0) {\n if (legacyText.indexOf(mceInternalUrlPrefix) === -1) {\n items['text/plain'] = legacyText;\n }\n }\n }\n if (dataTransfer.types) {\n for (var i = 0; i < dataTransfer.types.length; i++) {\n var contentType = dataTransfer.types[i];\n try {\n items[contentType] = dataTransfer.getData(contentType);\n } catch (ex) {\n items[contentType] = '';\n }\n }\n }\n }\n return items;\n };\n var getClipboardContent = function (editor, clipboardEvent) {\n var content = getDataTransferItems(clipboardEvent.clipboardData || editor.getDoc().dataTransfer);\n return Utils.isMsEdge() ? global$4.extend(content, { 'text/html': '' }) : content;\n };\n var hasContentType = function (clipboardContent, mimeType) {\n return mimeType in clipboardContent && clipboardContent[mimeType].length > 0;\n };\n var hasHtmlOrText = function (content) {\n return hasContentType(content, 'text/html') || hasContentType(content, 'text/plain');\n };\n var getBase64FromUri = function (uri) {\n var idx;\n idx = uri.indexOf(',');\n if (idx !== -1) {\n return uri.substr(idx + 1);\n }\n return null;\n };\n var isValidDataUriImage = function (settings, imgElm) {\n return settings.images_dataimg_filter ? settings.images_dataimg_filter(imgElm) : true;\n };\n var extractFilename = function (editor, str) {\n var m = str.match(/([\\s\\S]+?)\\.(?:jpeg|jpg|png|gif)$/i);\n return m ? editor.dom.encode(m[1]) : null;\n };\n var uniqueId = Utils.createIdGenerator('mceclip');\n var pasteImage = function (editor, imageItem) {\n var base64 = getBase64FromUri(imageItem.uri);\n var id = uniqueId();\n var name = editor.settings.images_reuse_filename && imageItem.blob.name ? extractFilename(editor, imageItem.blob.name) : id;\n var img = new domGlobals.Image();\n img.src = imageItem.uri;\n if (isValidDataUriImage(editor.settings, img)) {\n var blobCache = editor.editorUpload.blobCache;\n var blobInfo = void 0, existingBlobInfo = void 0;\n existingBlobInfo = blobCache.findFirst(function (cachedBlobInfo) {\n return cachedBlobInfo.base64() === base64;\n });\n if (!existingBlobInfo) {\n blobInfo = blobCache.create(id, imageItem.blob, base64, name);\n blobCache.add(blobInfo);\n } else {\n blobInfo = existingBlobInfo;\n }\n pasteHtml$1(editor, '', false);\n } else {\n pasteHtml$1(editor, '', false);\n }\n };\n var isClipboardEvent = function (event) {\n return event.type === 'paste';\n };\n var readBlobsAsDataUris = function (items) {\n return mapM(items, function (item) {\n return Future.nu(function (resolve) {\n var blob = item.getAsFile ? item.getAsFile() : item;\n var reader = new window.FileReader();\n reader.onload = function () {\n resolve({\n blob: blob,\n uri: reader.result\n });\n };\n reader.readAsDataURL(blob);\n });\n });\n };\n var getImagesFromDataTransfer = function (dataTransfer) {\n var items = dataTransfer.items ? map(from$1(dataTransfer.items), function (item) {\n return item.getAsFile();\n }) : [];\n var files = dataTransfer.files ? from$1(dataTransfer.files) : [];\n var images = filter$1(items.length > 0 ? items : files, function (file) {\n return /^image\\/(jpeg|png|gif|bmp)$/.test(file.type);\n });\n return images;\n };\n var pasteImageData = function (editor, e, rng) {\n var dataTransfer = isClipboardEvent(e) ? e.clipboardData : e.dataTransfer;\n if (editor.settings.paste_data_images && dataTransfer) {\n var images = getImagesFromDataTransfer(dataTransfer);\n if (images.length > 0) {\n e.preventDefault();\n readBlobsAsDataUris(images).get(function (blobResults) {\n if (rng) {\n editor.selection.setRng(rng);\n }\n each(blobResults, function (result) {\n pasteImage(editor, result);\n });\n });\n return true;\n }\n }\n return false;\n };\n var isBrokenAndroidClipboardEvent = function (e) {\n var clipboardData = e.clipboardData;\n return domGlobals.navigator.userAgent.indexOf('Android') !== -1 && clipboardData && clipboardData.items && clipboardData.items.length === 0;\n };\n var isKeyboardPasteEvent = function (e) {\n return global$5.metaKeyPressed(e) && e.keyCode === 86 || e.shiftKey && e.keyCode === 45;\n };\n var registerEventHandlers = function (editor, pasteBin, pasteFormat) {\n var keyboardPasteEvent = value();\n var keyboardPastePlainTextState;\n editor.on('keydown', function (e) {\n function removePasteBinOnKeyUp(e) {\n if (isKeyboardPasteEvent(e) && !e.isDefaultPrevented()) {\n pasteBin.remove();\n }\n }\n if (isKeyboardPasteEvent(e) && !e.isDefaultPrevented()) {\n keyboardPastePlainTextState = e.shiftKey && e.keyCode === 86;\n if (keyboardPastePlainTextState && global$2.webkit && domGlobals.navigator.userAgent.indexOf('Version/') !== -1) {\n return;\n }\n e.stopImmediatePropagation();\n keyboardPasteEvent.set(e);\n window.setTimeout(function () {\n keyboardPasteEvent.clear();\n }, 100);\n if (global$2.ie && keyboardPastePlainTextState) {\n e.preventDefault();\n Events.firePaste(editor, true);\n return;\n }\n pasteBin.remove();\n pasteBin.create();\n editor.once('keyup', removePasteBinOnKeyUp);\n editor.once('paste', function () {\n editor.off('keyup', removePasteBinOnKeyUp);\n });\n }\n });\n function insertClipboardContent(clipboardContent, isKeyBoardPaste, plainTextMode, internal) {\n var content, isPlainTextHtml;\n if (hasContentType(clipboardContent, 'text/html')) {\n content = clipboardContent['text/html'];\n } else {\n content = pasteBin.getHtml();\n internal = internal ? internal : InternalHtml.isMarked(content);\n if (pasteBin.isDefaultContent(content)) {\n plainTextMode = true;\n }\n }\n content = Utils.trimHtml(content);\n pasteBin.remove();\n isPlainTextHtml = internal === false && Newlines.isPlainText(content);\n if (!content.length || isPlainTextHtml) {\n plainTextMode = true;\n }\n if (plainTextMode) {\n if (hasContentType(clipboardContent, 'text/plain') && isPlainTextHtml) {\n content = clipboardContent['text/plain'];\n } else {\n content = Utils.innerText(content);\n }\n }\n if (pasteBin.isDefaultContent(content)) {\n if (!isKeyBoardPaste) {\n editor.windowManager.alert('Please use Ctrl+V/Cmd+V keyboard shortcuts to paste contents.');\n }\n return;\n }\n if (plainTextMode) {\n pasteText(editor, content);\n } else {\n pasteHtml$1(editor, content, internal);\n }\n }\n var getLastRng = function () {\n return pasteBin.getLastRng() || editor.selection.getRng();\n };\n editor.on('paste', function (e) {\n var isKeyBoardPaste = keyboardPasteEvent.isSet();\n var clipboardContent = getClipboardContent(editor, e);\n var plainTextMode = pasteFormat.get() === 'text' || keyboardPastePlainTextState;\n var internal = hasContentType(clipboardContent, InternalHtml.internalHtmlMime());\n keyboardPastePlainTextState = false;\n if (e.isDefaultPrevented() || isBrokenAndroidClipboardEvent(e)) {\n pasteBin.remove();\n return;\n }\n if (!hasHtmlOrText(clipboardContent) && pasteImageData(editor, e, getLastRng())) {\n pasteBin.remove();\n return;\n }\n if (!isKeyBoardPaste) {\n e.preventDefault();\n }\n if (global$2.ie && (!isKeyBoardPaste || e.ieFake) && !hasContentType(clipboardContent, 'text/html')) {\n pasteBin.create();\n editor.dom.bind(pasteBin.getEl(), 'paste', function (e) {\n e.stopPropagation();\n });\n editor.getDoc().execCommand('Paste', false, null);\n clipboardContent['text/html'] = pasteBin.getHtml();\n }\n if (hasContentType(clipboardContent, 'text/html')) {\n e.preventDefault();\n if (!internal) {\n internal = InternalHtml.isMarked(clipboardContent['text/html']);\n }\n insertClipboardContent(clipboardContent, isKeyBoardPaste, plainTextMode, internal);\n } else {\n global$3.setEditorTimeout(editor, function () {\n insertClipboardContent(clipboardContent, isKeyBoardPaste, plainTextMode, internal);\n }, 0);\n }\n });\n };\n var registerEventsAndFilters = function (editor, pasteBin, pasteFormat) {\n registerEventHandlers(editor, pasteBin, pasteFormat);\n var src;\n editor.parser.addNodeFilter('img', function (nodes, name, args) {\n var isPasteInsert = function (args) {\n return args.data && args.data.paste === true;\n };\n var remove = function (node) {\n if (!node.attr('data-mce-object') && src !== global$2.transparentSrc) {\n node.remove();\n }\n };\n var isWebKitFakeUrl = function (src) {\n return src.indexOf('webkit-fake-url') === 0;\n };\n var isDataUri = function (src) {\n return src.indexOf('data:') === 0;\n };\n if (!editor.settings.paste_data_images && isPasteInsert(args)) {\n var i = nodes.length;\n while (i--) {\n src = nodes[i].attributes.map.src;\n if (!src) {\n continue;\n }\n if (isWebKitFakeUrl(src)) {\n remove(nodes[i]);\n } else if (!editor.settings.allow_html_data_urls && isDataUri(src)) {\n remove(nodes[i]);\n }\n }\n }\n });\n };\n\n var getPasteBinParent = function (editor) {\n return global$2.ie && editor.inline ? domGlobals.document.body : editor.getBody();\n };\n var isExternalPasteBin = function (editor) {\n return getPasteBinParent(editor) !== editor.getBody();\n };\n var delegatePasteEvents = function (editor, pasteBinElm, pasteBinDefaultContent) {\n if (isExternalPasteBin(editor)) {\n editor.dom.bind(pasteBinElm, 'paste keyup', function (e) {\n if (!isDefault(editor, pasteBinDefaultContent)) {\n editor.fire('paste');\n }\n });\n }\n };\n var create = function (editor, lastRngCell, pasteBinDefaultContent) {\n var dom = editor.dom, body = editor.getBody();\n var pasteBinElm;\n lastRngCell.set(editor.selection.getRng());\n pasteBinElm = editor.dom.add(getPasteBinParent(editor), 'div', {\n 'id': 'mcepastebin',\n 'class': 'mce-pastebin',\n 'contentEditable': true,\n 'data-mce-bogus': 'all',\n 'style': 'position: fixed; top: 50%; width: 10px; height: 10px; overflow: hidden; opacity: 0'\n }, pasteBinDefaultContent);\n if (global$2.ie || global$2.gecko) {\n dom.setStyle(pasteBinElm, 'left', dom.getStyle(body, 'direction', true) === 'rtl' ? 65535 : -65535);\n }\n dom.bind(pasteBinElm, 'beforedeactivate focusin focusout', function (e) {\n e.stopPropagation();\n });\n delegatePasteEvents(editor, pasteBinElm, pasteBinDefaultContent);\n pasteBinElm.focus();\n editor.selection.select(pasteBinElm, true);\n };\n var remove = function (editor, lastRngCell) {\n if (getEl(editor)) {\n var pasteBinClone = void 0;\n var lastRng = lastRngCell.get();\n while (pasteBinClone = editor.dom.get('mcepastebin')) {\n editor.dom.remove(pasteBinClone);\n editor.dom.unbind(pasteBinClone);\n }\n if (lastRng) {\n editor.selection.setRng(lastRng);\n }\n }\n lastRngCell.set(null);\n };\n var getEl = function (editor) {\n return editor.dom.get('mcepastebin');\n };\n var getHtml = function (editor) {\n var pasteBinElm, pasteBinClones, i, dirtyWrappers, cleanWrapper;\n var copyAndRemove = function (toElm, fromElm) {\n toElm.appendChild(fromElm);\n editor.dom.remove(fromElm, true);\n };\n pasteBinClones = global$4.grep(getPasteBinParent(editor).childNodes, function (elm) {\n return elm.id === 'mcepastebin';\n });\n pasteBinElm = pasteBinClones.shift();\n global$4.each(pasteBinClones, function (pasteBinClone) {\n copyAndRemove(pasteBinElm, pasteBinClone);\n });\n dirtyWrappers = editor.dom.select('div[id=mcepastebin]', pasteBinElm);\n for (i = dirtyWrappers.length - 1; i >= 0; i--) {\n cleanWrapper = editor.dom.create('div');\n pasteBinElm.insertBefore(cleanWrapper, dirtyWrappers[i]);\n copyAndRemove(cleanWrapper, dirtyWrappers[i]);\n }\n return pasteBinElm ? pasteBinElm.innerHTML : '';\n };\n var getLastRng = function (lastRng) {\n return lastRng.get();\n };\n var isDefaultContent = function (pasteBinDefaultContent, content) {\n return content === pasteBinDefaultContent;\n };\n var isPasteBin = function (elm) {\n return elm && elm.id === 'mcepastebin';\n };\n var isDefault = function (editor, pasteBinDefaultContent) {\n var pasteBinElm = getEl(editor);\n return isPasteBin(pasteBinElm) && isDefaultContent(pasteBinDefaultContent, pasteBinElm.innerHTML);\n };\n var PasteBin = function (editor) {\n var lastRng = Cell(null);\n var pasteBinDefaultContent = '%MCEPASTEBIN%';\n return {\n create: function () {\n return create(editor, lastRng, pasteBinDefaultContent);\n },\n remove: function () {\n return remove(editor, lastRng);\n },\n getEl: function () {\n return getEl(editor);\n },\n getHtml: function () {\n return getHtml(editor);\n },\n getLastRng: function () {\n return getLastRng(lastRng);\n },\n isDefault: function () {\n return isDefault(editor, pasteBinDefaultContent);\n },\n isDefaultContent: function (content) {\n return isDefaultContent(pasteBinDefaultContent, content);\n }\n };\n };\n\n var Clipboard = function (editor, pasteFormat) {\n var pasteBin = PasteBin(editor);\n editor.on('preInit', function () {\n return registerEventsAndFilters(editor, pasteBin, pasteFormat);\n });\n return {\n pasteFormat: pasteFormat,\n pasteHtml: function (html, internalFlag) {\n return pasteHtml$1(editor, html, internalFlag);\n },\n pasteText: function (text) {\n return pasteText(editor, text);\n },\n pasteImageData: function (e, rng) {\n return pasteImageData(editor, e, rng);\n },\n getDataTransferItems: getDataTransferItems,\n hasHtmlOrText: hasHtmlOrText,\n hasContentType: hasContentType\n };\n };\n\n var noop$1 = function () {\n };\n var hasWorkingClipboardApi = function (clipboardData) {\n return global$2.iOS === false && clipboardData !== undefined && typeof clipboardData.setData === 'function' && Utils.isMsEdge() !== true;\n };\n var setHtml5Clipboard = function (clipboardData, html, text) {\n if (hasWorkingClipboardApi(clipboardData)) {\n try {\n clipboardData.clearData();\n clipboardData.setData('text/html', html);\n clipboardData.setData('text/plain', text);\n clipboardData.setData(InternalHtml.internalHtmlMime(), html);\n return true;\n } catch (e) {\n return false;\n }\n } else {\n return false;\n }\n };\n var setClipboardData = function (evt, data, fallback, done) {\n if (setHtml5Clipboard(evt.clipboardData, data.html, data.text)) {\n evt.preventDefault();\n done();\n } else {\n fallback(data.html, done);\n }\n };\n var fallback = function (editor) {\n return function (html, done) {\n var markedHtml = InternalHtml.mark(html);\n var outer = editor.dom.create('div', {\n 'contenteditable': 'false',\n 'data-mce-bogus': 'all'\n });\n var inner = editor.dom.create('div', { contenteditable: 'true' }, markedHtml);\n editor.dom.setStyles(outer, {\n position: 'fixed',\n top: '0',\n left: '-3000px',\n width: '1000px',\n overflow: 'hidden'\n });\n outer.appendChild(inner);\n editor.dom.add(editor.getBody(), outer);\n var range = editor.selection.getRng();\n inner.focus();\n var offscreenRange = editor.dom.createRng();\n offscreenRange.selectNodeContents(inner);\n editor.selection.setRng(offscreenRange);\n setTimeout(function () {\n editor.selection.setRng(range);\n outer.parentNode.removeChild(outer);\n done();\n }, 0);\n };\n };\n var getData = function (editor) {\n return {\n html: editor.selection.getContent({ contextual: true }),\n text: editor.selection.getContent({ format: 'text' })\n };\n };\n var isTableSelection = function (editor) {\n return !!editor.dom.getParent(editor.selection.getStart(), 'td[data-mce-selected],th[data-mce-selected]', editor.getBody());\n };\n var hasSelectedContent = function (editor) {\n return !editor.selection.isCollapsed() || isTableSelection(editor);\n };\n var cut = function (editor) {\n return function (evt) {\n if (hasSelectedContent(editor)) {\n setClipboardData(evt, getData(editor), fallback(editor), function () {\n setTimeout(function () {\n editor.execCommand('Delete');\n }, 0);\n });\n }\n };\n };\n var copy = function (editor) {\n return function (evt) {\n if (hasSelectedContent(editor)) {\n setClipboardData(evt, getData(editor), fallback(editor), noop$1);\n }\n };\n };\n var register$1 = function (editor) {\n editor.on('cut', cut(editor));\n editor.on('copy', copy(editor));\n };\n var CutCopy = { register: register$1 };\n\n var global$b = tinymce.util.Tools.resolve('tinymce.dom.RangeUtils');\n\n var getCaretRangeFromEvent = function (editor, e) {\n return global$b.getCaretRangeFromPoint(e.clientX, e.clientY, editor.getDoc());\n };\n var isPlainTextFileUrl = function (content) {\n var plainTextContent = content['text/plain'];\n return plainTextContent ? plainTextContent.indexOf('file://') === 0 : false;\n };\n var setFocusedRange = function (editor, rng) {\n editor.focus();\n editor.selection.setRng(rng);\n };\n var setup = function (editor, clipboard, draggingInternallyState) {\n if (Settings.shouldBlockDrop(editor)) {\n editor.on('dragend dragover draggesture dragdrop drop drag', function (e) {\n e.preventDefault();\n e.stopPropagation();\n });\n }\n if (!Settings.shouldPasteDataImages(editor)) {\n editor.on('drop', function (e) {\n var dataTransfer = e.dataTransfer;\n if (dataTransfer && dataTransfer.files && dataTransfer.files.length > 0) {\n e.preventDefault();\n }\n });\n }\n editor.on('drop', function (e) {\n var dropContent, rng;\n rng = getCaretRangeFromEvent(editor, e);\n if (e.isDefaultPrevented() || draggingInternallyState.get()) {\n return;\n }\n dropContent = clipboard.getDataTransferItems(e.dataTransfer);\n var internal = clipboard.hasContentType(dropContent, InternalHtml.internalHtmlMime());\n if ((!clipboard.hasHtmlOrText(dropContent) || isPlainTextFileUrl(dropContent)) && clipboard.pasteImageData(e, rng)) {\n return;\n }\n if (rng && Settings.shouldFilterDrop(editor)) {\n var content_1 = dropContent['mce-internal'] || dropContent['text/html'] || dropContent['text/plain'];\n if (content_1) {\n e.preventDefault();\n global$3.setEditorTimeout(editor, function () {\n editor.undoManager.transact(function () {\n if (dropContent['mce-internal']) {\n editor.execCommand('Delete');\n }\n setFocusedRange(editor, rng);\n content_1 = Utils.trimHtml(content_1);\n if (!dropContent['text/html']) {\n clipboard.pasteText(content_1);\n } else {\n clipboard.pasteHtml(content_1, internal);\n }\n });\n });\n }\n }\n });\n editor.on('dragstart', function (e) {\n draggingInternallyState.set(true);\n });\n editor.on('dragover dragend', function (e) {\n if (Settings.shouldPasteDataImages(editor) && draggingInternallyState.get() === false) {\n e.preventDefault();\n setFocusedRange(editor, getCaretRangeFromEvent(editor, e));\n }\n if (e.type === 'dragend') {\n draggingInternallyState.set(false);\n }\n });\n };\n var DragDrop = { setup: setup };\n\n var setup$1 = function (editor) {\n var plugin = editor.plugins.paste;\n var preProcess = Settings.getPreProcess(editor);\n if (preProcess) {\n editor.on('PastePreProcess', function (e) {\n preProcess.call(plugin, plugin, e);\n });\n }\n var postProcess = Settings.getPostProcess(editor);\n if (postProcess) {\n editor.on('PastePostProcess', function (e) {\n postProcess.call(plugin, plugin, e);\n });\n }\n };\n var PrePostProcess = { setup: setup$1 };\n\n function addPreProcessFilter(editor, filterFunc) {\n editor.on('PastePreProcess', function (e) {\n e.content = filterFunc(editor, e.content, e.internal, e.wordContent);\n });\n }\n function addPostProcessFilter(editor, filterFunc) {\n editor.on('PastePostProcess', function (e) {\n filterFunc(editor, e.node);\n });\n }\n function removeExplorerBrElementsAfterBlocks(editor, html) {\n if (!WordFilter.isWordContent(html)) {\n return html;\n }\n var blockElements = [];\n global$4.each(editor.schema.getBlockElements(), function (block, blockName) {\n blockElements.push(blockName);\n });\n var explorerBlocksRegExp = new RegExp('(?:
 [\\\\s\\\\r\\\\n]+|
)*(<\\\\/?(' + blockElements.join('|') + ')[^>]*>)(?:
 [\\\\s\\\\r\\\\n]+|
)*', 'g');\n html = Utils.filter(html, [[\n explorerBlocksRegExp,\n '$1'\n ]]);\n html = Utils.filter(html, [\n [\n /

/g,\n '

'\n ],\n [\n /
/g,\n ' '\n ],\n [\n /

/g,\n '
'\n ]\n ]);\n return html;\n }\n function removeWebKitStyles(editor, content, internal, isWordHtml) {\n if (isWordHtml || internal) {\n return content;\n }\n var webKitStylesSetting = Settings.getWebkitStyles(editor);\n var webKitStyles;\n if (Settings.shouldRemoveWebKitStyles(editor) === false || webKitStylesSetting === 'all') {\n return content;\n }\n if (webKitStylesSetting) {\n webKitStyles = webKitStylesSetting.split(/[, ]/);\n }\n if (webKitStyles) {\n var dom_1 = editor.dom, node_1 = editor.selection.getNode();\n content = content.replace(/(<[^>]+) style=\"([^\"]*)\"([^>]*>)/gi, function (all, before, value, after) {\n var inputStyles = dom_1.parseStyle(dom_1.decode(value));\n var outputStyles = {};\n if (webKitStyles === 'none') {\n return before + after;\n }\n for (var i = 0; i < webKitStyles.length; i++) {\n var inputValue = inputStyles[webKitStyles[i]], currentValue = dom_1.getStyle(node_1, webKitStyles[i], true);\n if (/color/.test(webKitStyles[i])) {\n inputValue = dom_1.toHex(inputValue);\n currentValue = dom_1.toHex(currentValue);\n }\n if (currentValue !== inputValue) {\n outputStyles[webKitStyles[i]] = inputValue;\n }\n }\n outputStyles = dom_1.serializeStyle(outputStyles, 'span');\n if (outputStyles) {\n return before + ' style=\"' + outputStyles + '\"' + after;\n }\n return before + after;\n });\n } else {\n content = content.replace(/(<[^>]+) style=\"([^\"]*)\"([^>]*>)/gi, '$1$3');\n }\n content = content.replace(/(<[^>]+) data-mce-style=\"([^\"]+)\"([^>]*>)/gi, function (all, before, value, after) {\n return before + ' style=\"' + value + '\"' + after;\n });\n return content;\n }\n function removeUnderlineAndFontInAnchor(editor, root) {\n editor.$('a', root).find('font,u').each(function (i, node) {\n editor.dom.remove(node, true);\n });\n }\n var setup$2 = function (editor) {\n if (global$2.webkit) {\n addPreProcessFilter(editor, removeWebKitStyles);\n }\n if (global$2.ie) {\n addPreProcessFilter(editor, removeExplorerBrElementsAfterBlocks);\n addPostProcessFilter(editor, removeUnderlineAndFontInAnchor);\n }\n };\n var Quirks = { setup: setup$2 };\n\n var stateChange = function (editor, clipboard, e) {\n var ctrl = e.control;\n ctrl.active(clipboard.pasteFormat.get() === 'text');\n editor.on('PastePlainTextToggle', function (e) {\n ctrl.active(e.state);\n });\n };\n var register$2 = function (editor, clipboard) {\n var postRender = curry(stateChange, editor, clipboard);\n editor.addButton('pastetext', {\n active: false,\n icon: 'pastetext',\n tooltip: 'Paste as text',\n cmd: 'mceTogglePlainTextPaste',\n onPostRender: postRender\n });\n editor.addMenuItem('pastetext', {\n text: 'Paste as text',\n selectable: true,\n active: clipboard.pasteFormat,\n cmd: 'mceTogglePlainTextPaste',\n onPostRender: postRender\n });\n };\n var Buttons = { register: register$2 };\n\n global$1.add('paste', function (editor) {\n if (DetectProPlugin.hasProPlugin(editor) === false) {\n var userIsInformedState = Cell(false);\n var draggingInternallyState = Cell(false);\n var pasteFormat = Cell(Settings.isPasteAsTextEnabled(editor) ? 'text' : 'html');\n var clipboard = Clipboard(editor, pasteFormat);\n var quirks = Quirks.setup(editor);\n Buttons.register(editor, clipboard);\n Commands.register(editor, clipboard, userIsInformedState);\n PrePostProcess.setup(editor);\n CutCopy.register(editor);\n DragDrop.setup(editor, clipboard, draggingInternallyState);\n return Api.get(clipboard, quirks);\n }\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}(window));\n})();\n","// Exports the \"preview\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/preview')\n// ES2015:\n// import 'tinymce/plugins/preview'\nrequire('./plugin.js');","(function () {\nvar preview = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var getPreviewDialogWidth = function (editor) {\n return parseInt(editor.getParam('plugin_preview_width', '650'), 10);\n };\n var getPreviewDialogHeight = function (editor) {\n return parseInt(editor.getParam('plugin_preview_height', '500'), 10);\n };\n var getContentStyle = function (editor) {\n return editor.getParam('content_style', '');\n };\n var Settings = {\n getPreviewDialogWidth: getPreviewDialogWidth,\n getPreviewDialogHeight: getPreviewDialogHeight,\n getContentStyle: getContentStyle\n };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var getPreviewHtml = function (editor) {\n var previewHtml;\n var headHtml = '';\n var encode = editor.dom.encode;\n var contentStyle = Settings.getContentStyle(editor);\n headHtml += '';\n if (contentStyle) {\n headHtml += '';\n }\n global$2.each(editor.contentCSS, function (url) {\n headHtml += '';\n });\n var bodyId = editor.settings.body_id || 'tinymce';\n if (bodyId.indexOf('=') !== -1) {\n bodyId = editor.getParam('body_id', '', 'hash');\n bodyId = bodyId[editor.id] || bodyId;\n }\n var bodyClass = editor.settings.body_class || '';\n if (bodyClass.indexOf('=') !== -1) {\n bodyClass = editor.getParam('body_class', '', 'hash');\n bodyClass = bodyClass[editor.id] || '';\n }\n var preventClicksOnLinksScript = ' ';\n var dirAttr = editor.settings.directionality ? ' dir=\"' + editor.settings.directionality + '\"' : '';\n previewHtml = '' + '' + '' + headHtml + '' + '' + editor.getContent() + preventClicksOnLinksScript + '' + '';\n return previewHtml;\n };\n var injectIframeContent = function (editor, iframe, sandbox) {\n var previewHtml = getPreviewHtml(editor);\n if (!sandbox) {\n var doc = iframe.contentWindow.document;\n doc.open();\n doc.write(previewHtml);\n doc.close();\n } else {\n iframe.src = 'data:text/html;charset=utf-8,' + encodeURIComponent(previewHtml);\n }\n };\n var IframeContent = {\n getPreviewHtml: getPreviewHtml,\n injectIframeContent: injectIframeContent\n };\n\n var open = function (editor) {\n var sandbox = !global$1.ie;\n var dialogHtml = '';\n var dialogWidth = Settings.getPreviewDialogWidth(editor);\n var dialogHeight = Settings.getPreviewDialogHeight(editor);\n editor.windowManager.open({\n title: 'Preview',\n width: dialogWidth,\n height: dialogHeight,\n html: dialogHtml,\n buttons: {\n text: 'Close',\n onclick: function (e) {\n e.control.parent().parent().close();\n }\n },\n onPostRender: function (e) {\n var iframeElm = e.control.getEl('body').firstChild;\n IframeContent.injectIframeContent(editor, iframeElm, sandbox);\n }\n });\n };\n var Dialog = { open: open };\n\n var register = function (editor) {\n editor.addCommand('mcePreview', function () {\n Dialog.open(editor);\n });\n };\n var Commands = { register: register };\n\n var register$1 = function (editor) {\n editor.addButton('preview', {\n title: 'Preview',\n cmd: 'mcePreview'\n });\n editor.addMenuItem('preview', {\n text: 'Preview',\n cmd: 'mcePreview',\n context: 'view'\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('preview', function (editor) {\n Commands.register(editor);\n Buttons.register(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","// Exports the \"print\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/print')\n// ES2015:\n// import 'tinymce/plugins/print'\nrequire('./plugin.js');","(function () {\nvar print = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var register = function (editor) {\n editor.addCommand('mcePrint', function () {\n if (global$1.ie && global$1.ie <= 11) {\n editor.getDoc().execCommand('print', false, null);\n } else {\n editor.getWin().print();\n }\n });\n };\n var Commands = { register: register };\n\n var register$1 = function (editor) {\n editor.addButton('print', {\n title: 'Print',\n cmd: 'mcePrint'\n });\n editor.addMenuItem('print', {\n text: 'Print',\n cmd: 'mcePrint',\n icon: 'print'\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('print', function (editor) {\n Commands.register(editor);\n Buttons.register(editor);\n editor.addShortcut('Meta+P', '', 'mcePrint');\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","// Exports the \"searchreplace\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/searchreplace')\n// ES2015:\n// import 'tinymce/plugins/searchreplace'\nrequire('./plugin.js');","(function () {\nvar searchreplace = (function () {\n 'use strict';\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n var clone = function () {\n return Cell(get());\n };\n return {\n get: get,\n set: set,\n clone: clone\n };\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n function isContentEditableFalse(node) {\n return node && node.nodeType === 1 && node.contentEditable === 'false';\n }\n function findAndReplaceDOMText(regex, node, replacementNode, captureGroup, schema) {\n var m;\n var matches = [];\n var text, count = 0, doc;\n var blockElementsMap, hiddenTextElementsMap, shortEndedElementsMap;\n doc = node.ownerDocument;\n blockElementsMap = schema.getBlockElements();\n hiddenTextElementsMap = schema.getWhiteSpaceElements();\n shortEndedElementsMap = schema.getShortEndedElements();\n function getMatchIndexes(m, captureGroup) {\n captureGroup = captureGroup || 0;\n if (!m[0]) {\n throw new Error('findAndReplaceDOMText cannot handle zero-length matches');\n }\n var index = m.index;\n if (captureGroup > 0) {\n var cg = m[captureGroup];\n if (!cg) {\n throw new Error('Invalid capture group');\n }\n index += m[0].indexOf(cg);\n m[0] = cg;\n }\n return [\n index,\n index + m[0].length,\n [m[0]]\n ];\n }\n function getText(node) {\n var txt;\n if (node.nodeType === 3) {\n return node.data;\n }\n if (hiddenTextElementsMap[node.nodeName] && !blockElementsMap[node.nodeName]) {\n return '';\n }\n txt = '';\n if (isContentEditableFalse(node)) {\n return '\\n';\n }\n if (blockElementsMap[node.nodeName] || shortEndedElementsMap[node.nodeName]) {\n txt += '\\n';\n }\n if (node = node.firstChild) {\n do {\n txt += getText(node);\n } while (node = node.nextSibling);\n }\n return txt;\n }\n function stepThroughMatches(node, matches, replaceFn) {\n var startNode, endNode, startNodeIndex, endNodeIndex, innerNodes = [], atIndex = 0, curNode = node, matchLocation = matches.shift(), matchIndex = 0;\n out:\n while (true) {\n if (blockElementsMap[curNode.nodeName] || shortEndedElementsMap[curNode.nodeName] || isContentEditableFalse(curNode)) {\n atIndex++;\n }\n if (curNode.nodeType === 3) {\n if (!endNode && curNode.length + atIndex >= matchLocation[1]) {\n endNode = curNode;\n endNodeIndex = matchLocation[1] - atIndex;\n } else if (startNode) {\n innerNodes.push(curNode);\n }\n if (!startNode && curNode.length + atIndex > matchLocation[0]) {\n startNode = curNode;\n startNodeIndex = matchLocation[0] - atIndex;\n }\n atIndex += curNode.length;\n }\n if (startNode && endNode) {\n curNode = replaceFn({\n startNode: startNode,\n startNodeIndex: startNodeIndex,\n endNode: endNode,\n endNodeIndex: endNodeIndex,\n innerNodes: innerNodes,\n match: matchLocation[2],\n matchIndex: matchIndex\n });\n atIndex -= endNode.length - endNodeIndex;\n startNode = null;\n endNode = null;\n innerNodes = [];\n matchLocation = matches.shift();\n matchIndex++;\n if (!matchLocation) {\n break;\n }\n } else if ((!hiddenTextElementsMap[curNode.nodeName] || blockElementsMap[curNode.nodeName]) && curNode.firstChild) {\n if (!isContentEditableFalse(curNode)) {\n curNode = curNode.firstChild;\n continue;\n }\n } else if (curNode.nextSibling) {\n curNode = curNode.nextSibling;\n continue;\n }\n while (true) {\n if (curNode.nextSibling) {\n curNode = curNode.nextSibling;\n break;\n } else if (curNode.parentNode !== node) {\n curNode = curNode.parentNode;\n } else {\n break out;\n }\n }\n }\n }\n function genReplacer(nodeName) {\n var makeReplacementNode;\n if (typeof nodeName !== 'function') {\n var stencilNode_1 = nodeName.nodeType ? nodeName : doc.createElement(nodeName);\n makeReplacementNode = function (fill, matchIndex) {\n var clone = stencilNode_1.cloneNode(false);\n clone.setAttribute('data-mce-index', matchIndex);\n if (fill) {\n clone.appendChild(doc.createTextNode(fill));\n }\n return clone;\n };\n } else {\n makeReplacementNode = nodeName;\n }\n return function (range) {\n var before;\n var after;\n var parentNode;\n var startNode = range.startNode;\n var endNode = range.endNode;\n var matchIndex = range.matchIndex;\n if (startNode === endNode) {\n var node_1 = startNode;\n parentNode = node_1.parentNode;\n if (range.startNodeIndex > 0) {\n before = doc.createTextNode(node_1.data.substring(0, range.startNodeIndex));\n parentNode.insertBefore(before, node_1);\n }\n var el = makeReplacementNode(range.match[0], matchIndex);\n parentNode.insertBefore(el, node_1);\n if (range.endNodeIndex < node_1.length) {\n after = doc.createTextNode(node_1.data.substring(range.endNodeIndex));\n parentNode.insertBefore(after, node_1);\n }\n node_1.parentNode.removeChild(node_1);\n return el;\n }\n before = doc.createTextNode(startNode.data.substring(0, range.startNodeIndex));\n after = doc.createTextNode(endNode.data.substring(range.endNodeIndex));\n var elA = makeReplacementNode(startNode.data.substring(range.startNodeIndex), matchIndex);\n for (var i = 0, l = range.innerNodes.length; i < l; ++i) {\n var innerNode = range.innerNodes[i];\n var innerEl = makeReplacementNode(innerNode.data, matchIndex);\n innerNode.parentNode.replaceChild(innerEl, innerNode);\n }\n var elB = makeReplacementNode(endNode.data.substring(0, range.endNodeIndex), matchIndex);\n parentNode = startNode.parentNode;\n parentNode.insertBefore(before, startNode);\n parentNode.insertBefore(elA, startNode);\n parentNode.removeChild(startNode);\n parentNode = endNode.parentNode;\n parentNode.insertBefore(elB, endNode);\n parentNode.insertBefore(after, endNode);\n parentNode.removeChild(endNode);\n return elB;\n };\n }\n text = getText(node);\n if (!text) {\n return;\n }\n if (regex.global) {\n while (m = regex.exec(text)) {\n matches.push(getMatchIndexes(m, captureGroup));\n }\n } else {\n m = text.match(regex);\n matches.push(getMatchIndexes(m, captureGroup));\n }\n if (matches.length) {\n count = matches.length;\n stepThroughMatches(node, matches, genReplacer(replacementNode));\n }\n return count;\n }\n var FindReplaceText = { findAndReplaceDOMText: findAndReplaceDOMText };\n\n var getElmIndex = function (elm) {\n var value = elm.getAttribute('data-mce-index');\n if (typeof value === 'number') {\n return '' + value;\n }\n return value;\n };\n var markAllMatches = function (editor, currentIndexState, regex) {\n var node, marker;\n marker = editor.dom.create('span', { 'data-mce-bogus': 1 });\n marker.className = 'mce-match-marker';\n node = editor.getBody();\n done(editor, currentIndexState, false);\n return FindReplaceText.findAndReplaceDOMText(regex, node, marker, false, editor.schema);\n };\n var unwrap = function (node) {\n var parentNode = node.parentNode;\n if (node.firstChild) {\n parentNode.insertBefore(node.firstChild, node);\n }\n node.parentNode.removeChild(node);\n };\n var findSpansByIndex = function (editor, index) {\n var nodes;\n var spans = [];\n nodes = global$1.toArray(editor.getBody().getElementsByTagName('span'));\n if (nodes.length) {\n for (var i = 0; i < nodes.length; i++) {\n var nodeIndex = getElmIndex(nodes[i]);\n if (nodeIndex === null || !nodeIndex.length) {\n continue;\n }\n if (nodeIndex === index.toString()) {\n spans.push(nodes[i]);\n }\n }\n }\n return spans;\n };\n var moveSelection = function (editor, currentIndexState, forward) {\n var testIndex = currentIndexState.get();\n var dom = editor.dom;\n forward = forward !== false;\n if (forward) {\n testIndex++;\n } else {\n testIndex--;\n }\n dom.removeClass(findSpansByIndex(editor, currentIndexState.get()), 'mce-match-marker-selected');\n var spans = findSpansByIndex(editor, testIndex);\n if (spans.length) {\n dom.addClass(findSpansByIndex(editor, testIndex), 'mce-match-marker-selected');\n editor.selection.scrollIntoView(spans[0]);\n return testIndex;\n }\n return -1;\n };\n var removeNode = function (dom, node) {\n var parent = node.parentNode;\n dom.remove(node);\n if (dom.isEmpty(parent)) {\n dom.remove(parent);\n }\n };\n var find = function (editor, currentIndexState, text, matchCase, wholeWord) {\n text = text.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n text = text.replace(/\\s/g, '[^\\\\S\\\\r\\\\n]');\n text = wholeWord ? '\\\\b' + text + '\\\\b' : text;\n var count = markAllMatches(editor, currentIndexState, new RegExp(text, matchCase ? 'g' : 'gi'));\n if (count) {\n currentIndexState.set(-1);\n currentIndexState.set(moveSelection(editor, currentIndexState, true));\n }\n return count;\n };\n var next = function (editor, currentIndexState) {\n var index = moveSelection(editor, currentIndexState, true);\n if (index !== -1) {\n currentIndexState.set(index);\n }\n };\n var prev = function (editor, currentIndexState) {\n var index = moveSelection(editor, currentIndexState, false);\n if (index !== -1) {\n currentIndexState.set(index);\n }\n };\n var isMatchSpan = function (node) {\n var matchIndex = getElmIndex(node);\n return matchIndex !== null && matchIndex.length > 0;\n };\n var replace = function (editor, currentIndexState, text, forward, all) {\n var i, nodes, node, matchIndex, currentMatchIndex, nextIndex = currentIndexState.get(), hasMore;\n forward = forward !== false;\n node = editor.getBody();\n nodes = global$1.grep(global$1.toArray(node.getElementsByTagName('span')), isMatchSpan);\n for (i = 0; i < nodes.length; i++) {\n var nodeIndex = getElmIndex(nodes[i]);\n matchIndex = currentMatchIndex = parseInt(nodeIndex, 10);\n if (all || matchIndex === currentIndexState.get()) {\n if (text.length) {\n nodes[i].firstChild.nodeValue = text;\n unwrap(nodes[i]);\n } else {\n removeNode(editor.dom, nodes[i]);\n }\n while (nodes[++i]) {\n matchIndex = parseInt(getElmIndex(nodes[i]), 10);\n if (matchIndex === currentMatchIndex) {\n removeNode(editor.dom, nodes[i]);\n } else {\n i--;\n break;\n }\n }\n if (forward) {\n nextIndex--;\n }\n } else if (currentMatchIndex > currentIndexState.get()) {\n nodes[i].setAttribute('data-mce-index', currentMatchIndex - 1);\n }\n }\n currentIndexState.set(nextIndex);\n if (forward) {\n hasMore = hasNext(editor, currentIndexState);\n next(editor, currentIndexState);\n } else {\n hasMore = hasPrev(editor, currentIndexState);\n prev(editor, currentIndexState);\n }\n return !all && hasMore;\n };\n var done = function (editor, currentIndexState, keepEditorSelection) {\n var i, nodes, startContainer, endContainer;\n nodes = global$1.toArray(editor.getBody().getElementsByTagName('span'));\n for (i = 0; i < nodes.length; i++) {\n var nodeIndex = getElmIndex(nodes[i]);\n if (nodeIndex !== null && nodeIndex.length) {\n if (nodeIndex === currentIndexState.get().toString()) {\n if (!startContainer) {\n startContainer = nodes[i].firstChild;\n }\n endContainer = nodes[i].firstChild;\n }\n unwrap(nodes[i]);\n }\n }\n if (startContainer && endContainer) {\n var rng = editor.dom.createRng();\n rng.setStart(startContainer, 0);\n rng.setEnd(endContainer, endContainer.data.length);\n if (keepEditorSelection !== false) {\n editor.selection.setRng(rng);\n }\n return rng;\n }\n };\n var hasNext = function (editor, currentIndexState) {\n return findSpansByIndex(editor, currentIndexState.get() + 1).length > 0;\n };\n var hasPrev = function (editor, currentIndexState) {\n return findSpansByIndex(editor, currentIndexState.get() - 1).length > 0;\n };\n var Actions = {\n done: done,\n find: find,\n next: next,\n prev: prev,\n replace: replace,\n hasNext: hasNext,\n hasPrev: hasPrev\n };\n\n var get = function (editor, currentIndexState) {\n var done = function (keepEditorSelection) {\n return Actions.done(editor, currentIndexState, keepEditorSelection);\n };\n var find = function (text, matchCase, wholeWord) {\n return Actions.find(editor, currentIndexState, text, matchCase, wholeWord);\n };\n var next = function () {\n return Actions.next(editor, currentIndexState);\n };\n var prev = function () {\n return Actions.prev(editor, currentIndexState);\n };\n var replace = function (text, forward, all) {\n return Actions.replace(editor, currentIndexState, text, forward, all);\n };\n return {\n done: done,\n find: find,\n next: next,\n prev: prev,\n replace: replace\n };\n };\n var Api = { get: get };\n\n var open = function (editor, currentIndexState) {\n var last = {}, selectedText;\n editor.undoManager.add();\n selectedText = global$1.trim(editor.selection.getContent({ format: 'text' }));\n function updateButtonStates() {\n win.statusbar.find('#next').disabled(Actions.hasNext(editor, currentIndexState) === false);\n win.statusbar.find('#prev').disabled(Actions.hasPrev(editor, currentIndexState) === false);\n }\n function notFoundAlert() {\n editor.windowManager.alert('Could not find the specified string.', function () {\n win.find('#find')[0].focus();\n });\n }\n var win = editor.windowManager.open({\n layout: 'flex',\n pack: 'center',\n align: 'center',\n onClose: function () {\n editor.focus();\n Actions.done(editor, currentIndexState);\n editor.undoManager.add();\n },\n onSubmit: function (e) {\n var count, caseState, text, wholeWord;\n e.preventDefault();\n caseState = win.find('#case').checked();\n wholeWord = win.find('#words').checked();\n text = win.find('#find').value();\n if (!text.length) {\n Actions.done(editor, currentIndexState, false);\n win.statusbar.items().slice(1).disabled(true);\n return;\n }\n if (last.text === text && last.caseState === caseState && last.wholeWord === wholeWord) {\n if (!Actions.hasNext(editor, currentIndexState)) {\n notFoundAlert();\n return;\n }\n Actions.next(editor, currentIndexState);\n updateButtonStates();\n return;\n }\n count = Actions.find(editor, currentIndexState, text, caseState, wholeWord);\n if (!count) {\n notFoundAlert();\n }\n win.statusbar.items().slice(1).disabled(count === 0);\n updateButtonStates();\n last = {\n text: text,\n caseState: caseState,\n wholeWord: wholeWord\n };\n },\n buttons: [\n {\n text: 'Find',\n subtype: 'primary',\n onclick: function () {\n win.submit();\n }\n },\n {\n text: 'Replace',\n disabled: true,\n onclick: function () {\n if (!Actions.replace(editor, currentIndexState, win.find('#replace').value())) {\n win.statusbar.items().slice(1).disabled(true);\n currentIndexState.set(-1);\n last = {};\n }\n }\n },\n {\n text: 'Replace all',\n disabled: true,\n onclick: function () {\n Actions.replace(editor, currentIndexState, win.find('#replace').value(), true, true);\n win.statusbar.items().slice(1).disabled(true);\n last = {};\n }\n },\n {\n type: 'spacer',\n flex: 1\n },\n {\n text: 'Prev',\n name: 'prev',\n disabled: true,\n onclick: function () {\n Actions.prev(editor, currentIndexState);\n updateButtonStates();\n }\n },\n {\n text: 'Next',\n name: 'next',\n disabled: true,\n onclick: function () {\n Actions.next(editor, currentIndexState);\n updateButtonStates();\n }\n }\n ],\n title: 'Find and replace',\n items: {\n type: 'form',\n padding: 20,\n labelGap: 30,\n spacing: 10,\n items: [\n {\n type: 'textbox',\n name: 'find',\n size: 40,\n label: 'Find',\n value: selectedText\n },\n {\n type: 'textbox',\n name: 'replace',\n size: 40,\n label: 'Replace with'\n },\n {\n type: 'checkbox',\n name: 'case',\n text: 'Match case',\n label: ' '\n },\n {\n type: 'checkbox',\n name: 'words',\n text: 'Whole words',\n label: ' '\n }\n ]\n }\n });\n };\n var Dialog = { open: open };\n\n var register = function (editor, currentIndexState) {\n editor.addCommand('SearchReplace', function () {\n Dialog.open(editor, currentIndexState);\n });\n };\n var Commands = { register: register };\n\n var showDialog = function (editor, currentIndexState) {\n return function () {\n Dialog.open(editor, currentIndexState);\n };\n };\n var register$1 = function (editor, currentIndexState) {\n editor.addMenuItem('searchreplace', {\n text: 'Find and replace',\n shortcut: 'Meta+F',\n onclick: showDialog(editor, currentIndexState),\n separator: 'before',\n context: 'edit'\n });\n editor.addButton('searchreplace', {\n tooltip: 'Find and replace',\n onclick: showDialog(editor, currentIndexState)\n });\n editor.shortcuts.add('Meta+F', '', showDialog(editor, currentIndexState));\n };\n var Buttons = { register: register$1 };\n\n global.add('searchreplace', function (editor) {\n var currentIndexState = Cell(-1);\n Commands.register(editor, currentIndexState);\n Buttons.register(editor, currentIndexState);\n return Api.get(editor, currentIndexState);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","// Exports the \"table\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/table')\n// ES2015:\n// import 'tinymce/plugins/table'\nrequire('./plugin.js');","(function () {\nvar table = (function (domGlobals) {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var noop = function () {\n };\n var compose = function (fa, fb) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return fa(fb.apply(null, args));\n };\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var identity = function (x) {\n return x;\n };\n function curry(fn) {\n var initialArgs = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n initialArgs[_i - 1] = arguments[_i];\n }\n return function () {\n var restArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n restArgs[_i] = arguments[_i];\n }\n var all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n var not = function (f) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return !f.apply(null, args);\n };\n };\n var die = function (msg) {\n return function () {\n throw new Error(msg);\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n if (Object.freeze) {\n Object.freeze(me);\n }\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Option = {\n some: some,\n none: none,\n from: from\n };\n\n var typeOf = function (x) {\n if (x === null) {\n return 'null';\n }\n var t = typeof x;\n if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n }\n if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n }\n return t;\n };\n var isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isString = isType('string');\n var isArray = isType('array');\n var isBoolean = isType('boolean');\n var isFunction = isType('function');\n var isNumber = isType('number');\n\n var nativeSlice = Array.prototype.slice;\n var nativeIndexOf = Array.prototype.indexOf;\n var nativePush = Array.prototype.push;\n var rawIndexOf = function (ts, t) {\n return nativeIndexOf.call(ts, t);\n };\n var contains = function (xs, x) {\n return rawIndexOf(xs, x) > -1;\n };\n var exists = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return true;\n }\n }\n return false;\n };\n var map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var each = function (xs, f) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n f(x, i);\n }\n };\n var eachr = function (xs, f) {\n for (var i = xs.length - 1; i >= 0; i--) {\n var x = xs[i];\n f(x, i);\n }\n };\n var filter = function (xs, pred) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n var foldr = function (xs, f, acc) {\n eachr(xs, function (x) {\n acc = f(acc, x);\n });\n return acc;\n };\n var foldl = function (xs, f, acc) {\n each(xs, function (x) {\n acc = f(acc, x);\n });\n return acc;\n };\n var find = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Option.some(x);\n }\n }\n return Option.none();\n };\n var findIndex = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Option.some(i);\n }\n }\n return Option.none();\n };\n var flatten = function (xs) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n var bind = function (xs, f) {\n var output = map(xs, f);\n return flatten(output);\n };\n var forall = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; ++i) {\n var x = xs[i];\n if (pred(x, i) !== true) {\n return false;\n }\n }\n return true;\n };\n var reverse = function (xs) {\n var r = nativeSlice.call(xs, 0);\n r.reverse();\n return r;\n };\n var last = function (xs) {\n return xs.length === 0 ? Option.none() : Option.some(xs[xs.length - 1]);\n };\n var from$1 = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n\n var keys = Object.keys;\n var each$1 = function (obj, f) {\n var props = keys(obj);\n for (var k = 0, len = props.length; k < len; k++) {\n var i = props[k];\n var x = obj[i];\n f(x, i);\n }\n };\n var map$1 = function (obj, f) {\n return tupleMap(obj, function (x, i) {\n return {\n k: i,\n v: f(x, i)\n };\n });\n };\n var tupleMap = function (obj, f) {\n var r = {};\n each$1(obj, function (x, i) {\n var tuple = f(x, i);\n r[tuple.k] = tuple.v;\n });\n return r;\n };\n\n var Immutable = function () {\n var fields = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n fields[_i] = arguments[_i];\n }\n return function () {\n var values = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n values[_i] = arguments[_i];\n }\n if (fields.length !== values.length) {\n throw new Error('Wrong number of arguments to struct. Expected \"[' + fields.length + ']\", got ' + values.length + ' arguments');\n }\n var struct = {};\n each(fields, function (name, i) {\n struct[name] = constant(values[i]);\n });\n return struct;\n };\n };\n\n var sort = function (arr) {\n return arr.slice(0).sort();\n };\n var reqMessage = function (required, keys) {\n throw new Error('All required keys (' + sort(required).join(', ') + ') were not specified. Specified keys were: ' + sort(keys).join(', ') + '.');\n };\n var unsuppMessage = function (unsupported) {\n throw new Error('Unsupported keys for object: ' + sort(unsupported).join(', '));\n };\n var validateStrArr = function (label, array) {\n if (!isArray(array)) {\n throw new Error('The ' + label + ' fields must be an array. Was: ' + array + '.');\n }\n each(array, function (a) {\n if (!isString(a)) {\n throw new Error('The value ' + a + ' in the ' + label + ' fields was not a string.');\n }\n });\n };\n var invalidTypeMessage = function (incorrect, type) {\n throw new Error('All values need to be of type: ' + type + '. Keys (' + sort(incorrect).join(', ') + ') were not.');\n };\n var checkDupes = function (everything) {\n var sorted = sort(everything);\n var dupe = find(sorted, function (s, i) {\n return i < sorted.length - 1 && s === sorted[i + 1];\n });\n dupe.each(function (d) {\n throw new Error('The field: ' + d + ' occurs more than once in the combined fields: [' + sorted.join(', ') + '].');\n });\n };\n\n var MixedBag = function (required, optional) {\n var everything = required.concat(optional);\n if (everything.length === 0) {\n throw new Error('You must specify at least one required or optional field.');\n }\n validateStrArr('required', required);\n validateStrArr('optional', optional);\n checkDupes(everything);\n return function (obj) {\n var keys$1 = keys(obj);\n var allReqd = forall(required, function (req) {\n return contains(keys$1, req);\n });\n if (!allReqd) {\n reqMessage(required, keys$1);\n }\n var unsupported = filter(keys$1, function (key) {\n return !contains(everything, key);\n });\n if (unsupported.length > 0) {\n unsuppMessage(unsupported);\n }\n var r = {};\n each(required, function (req) {\n r[req] = constant(obj[req]);\n });\n each(optional, function (opt) {\n r[opt] = constant(Object.prototype.hasOwnProperty.call(obj, opt) ? Option.some(obj[opt]) : Option.none());\n });\n return r;\n };\n };\n\n var ATTRIBUTE = domGlobals.Node.ATTRIBUTE_NODE;\n var CDATA_SECTION = domGlobals.Node.CDATA_SECTION_NODE;\n var COMMENT = domGlobals.Node.COMMENT_NODE;\n var DOCUMENT = domGlobals.Node.DOCUMENT_NODE;\n var DOCUMENT_TYPE = domGlobals.Node.DOCUMENT_TYPE_NODE;\n var DOCUMENT_FRAGMENT = domGlobals.Node.DOCUMENT_FRAGMENT_NODE;\n var ELEMENT = domGlobals.Node.ELEMENT_NODE;\n var TEXT = domGlobals.Node.TEXT_NODE;\n var PROCESSING_INSTRUCTION = domGlobals.Node.PROCESSING_INSTRUCTION_NODE;\n var ENTITY_REFERENCE = domGlobals.Node.ENTITY_REFERENCE_NODE;\n var ENTITY = domGlobals.Node.ENTITY_NODE;\n var NOTATION = domGlobals.Node.NOTATION_NODE;\n\n var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')();\n\n var path = function (parts, scope) {\n var o = scope !== undefined && scope !== null ? scope : Global;\n for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n o = o[parts[i]];\n }\n return o;\n };\n var resolve = function (p, scope) {\n var parts = p.split('.');\n return path(parts, scope);\n };\n\n var unsafe = function (name, scope) {\n return resolve(name, scope);\n };\n var getOrDie = function (name, scope) {\n var actual = unsafe(name, scope);\n if (actual === undefined || actual === null) {\n throw new Error(name + ' not available on this browser');\n }\n return actual;\n };\n var Global$1 = { getOrDie: getOrDie };\n\n var name = function (element) {\n var r = element.dom().nodeName;\n return r.toLowerCase();\n };\n var type = function (element) {\n return element.dom().nodeType;\n };\n var isType$1 = function (t) {\n return function (element) {\n return type(element) === t;\n };\n };\n var isComment = function (element) {\n return type(element) === COMMENT || name(element) === '#comment';\n };\n var isElement = isType$1(ELEMENT);\n var isText = isType$1(TEXT);\n\n var rawSet = function (dom, key, value) {\n if (isString(value) || isBoolean(value) || isNumber(value)) {\n dom.setAttribute(key, value + '');\n } else {\n domGlobals.console.error('Invalid call to Attr.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n throw new Error('Attribute value was not simple');\n }\n };\n var set = function (element, key, value) {\n rawSet(element.dom(), key, value);\n };\n var setAll = function (element, attrs) {\n var dom = element.dom();\n each$1(attrs, function (v, k) {\n rawSet(dom, k, v);\n });\n };\n var get = function (element, key) {\n var v = element.dom().getAttribute(key);\n return v === null ? undefined : v;\n };\n var has = function (element, key) {\n var dom = element.dom();\n return dom && dom.hasAttribute ? dom.hasAttribute(key) : false;\n };\n var remove = function (element, key) {\n element.dom().removeAttribute(key);\n };\n var clone = function (element) {\n return foldl(element.dom().attributes, function (acc, attr) {\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n };\n\n var checkRange = function (str, substr, start) {\n if (substr === '') {\n return true;\n }\n if (str.length < substr.length) {\n return false;\n }\n var x = str.substr(start, start + substr.length);\n return x === substr;\n };\n var contains$1 = function (str, substr) {\n return str.indexOf(substr) !== -1;\n };\n var endsWith = function (str, suffix) {\n return checkRange(str, suffix, str.length - suffix.length);\n };\n var trim = function (str) {\n return str.replace(/^\\s+|\\s+$/g, '');\n };\n\n var isSupported = function (dom) {\n return dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n };\n\n var cached = function (f) {\n var called = false;\n var r;\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (!called) {\n called = true;\n r = f.apply(null, args);\n }\n return r;\n };\n };\n\n var fromHtml = function (html, scope) {\n var doc = scope || domGlobals.document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n domGlobals.console.error('HTML does not have a single root node', html);\n throw new Error('HTML must have a single root node');\n }\n return fromDom(div.childNodes[0]);\n };\n var fromTag = function (tag, scope) {\n var doc = scope || domGlobals.document;\n var node = doc.createElement(tag);\n return fromDom(node);\n };\n var fromText = function (text, scope) {\n var doc = scope || domGlobals.document;\n var node = doc.createTextNode(text);\n return fromDom(node);\n };\n var fromDom = function (node) {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: constant(node) };\n };\n var fromPoint = function (docElm, x, y) {\n var doc = docElm.dom();\n return Option.from(doc.elementFromPoint(x, y)).map(fromDom);\n };\n var Element = {\n fromHtml: fromHtml,\n fromTag: fromTag,\n fromText: fromText,\n fromDom: fromDom,\n fromPoint: fromPoint\n };\n\n var inBody = function (element) {\n var dom = isText(element) ? element.dom().parentNode : element.dom();\n return dom !== undefined && dom !== null && dom.ownerDocument.body.contains(dom);\n };\n var body = cached(function () {\n return getBody(Element.fromDom(domGlobals.document));\n });\n var getBody = function (doc) {\n var b = doc.dom().body;\n if (b === null || b === undefined) {\n throw new Error('Body is not available yet');\n }\n return Element.fromDom(b);\n };\n\n var internalSet = function (dom, property, value) {\n if (!isString(value)) {\n domGlobals.console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n throw new Error('CSS value must be a string: ' + value);\n }\n if (isSupported(dom)) {\n dom.style.setProperty(property, value);\n }\n };\n var internalRemove = function (dom, property) {\n if (isSupported(dom)) {\n dom.style.removeProperty(property);\n }\n };\n var set$1 = function (element, property, value) {\n var dom = element.dom();\n internalSet(dom, property, value);\n };\n var setAll$1 = function (element, css) {\n var dom = element.dom();\n each$1(css, function (v, k) {\n internalSet(dom, k, v);\n });\n };\n var get$1 = function (element, property) {\n var dom = element.dom();\n var styles = domGlobals.window.getComputedStyle(dom);\n var r = styles.getPropertyValue(property);\n var v = r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n return v === null ? undefined : v;\n };\n var getUnsafeProperty = function (dom, property) {\n return isSupported(dom) ? dom.style.getPropertyValue(property) : '';\n };\n var getRaw = function (element, property) {\n var dom = element.dom();\n var raw = getUnsafeProperty(dom, property);\n return Option.from(raw).filter(function (r) {\n return r.length > 0;\n });\n };\n var remove$1 = function (element, property) {\n var dom = element.dom();\n internalRemove(dom, property);\n if (has(element, 'style') && trim(get(element, 'style')) === '') {\n remove(element, 'style');\n }\n };\n var copy = function (source, target) {\n var sourceDom = source.dom();\n var targetDom = target.dom();\n if (isSupported(sourceDom) && isSupported(targetDom)) {\n targetDom.style.cssText = sourceDom.style.cssText;\n }\n };\n\n var node = function () {\n var f = Global$1.getOrDie('Node');\n return f;\n };\n var compareDocumentPosition = function (a, b, match) {\n return (a.compareDocumentPosition(b) & match) !== 0;\n };\n var documentPositionPreceding = function (a, b) {\n return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING);\n };\n var documentPositionContainedBy = function (a, b) {\n return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY);\n };\n var Node = {\n documentPositionPreceding: documentPositionPreceding,\n documentPositionContainedBy: documentPositionContainedBy\n };\n\n var firstMatch = function (regexes, s) {\n for (var i = 0; i < regexes.length; i++) {\n var x = regexes[i];\n if (x.test(s)) {\n return x;\n }\n }\n return undefined;\n };\n var find$1 = function (regexes, agent) {\n var r = firstMatch(regexes, agent);\n if (!r) {\n return {\n major: 0,\n minor: 0\n };\n }\n var group = function (i) {\n return Number(agent.replace(r, '$' + i));\n };\n return nu(group(1), group(2));\n };\n var detect = function (versionRegexes, agent) {\n var cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown();\n }\n return find$1(versionRegexes, cleanedAgent);\n };\n var unknown = function () {\n return nu(0, 0);\n };\n var nu = function (major, minor) {\n return {\n major: major,\n minor: minor\n };\n };\n var Version = {\n nu: nu,\n detect: detect,\n unknown: unknown\n };\n\n var edge = 'Edge';\n var chrome = 'Chrome';\n var ie = 'IE';\n var opera = 'Opera';\n var firefox = 'Firefox';\n var safari = 'Safari';\n var isBrowser = function (name, current) {\n return function () {\n return current === name;\n };\n };\n var unknown$1 = function () {\n return nu$1({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$1 = function (info) {\n var current = info.current;\n var version = info.version;\n return {\n current: current,\n version: version,\n isEdge: isBrowser(edge, current),\n isChrome: isBrowser(chrome, current),\n isIE: isBrowser(ie, current),\n isOpera: isBrowser(opera, current),\n isFirefox: isBrowser(firefox, current),\n isSafari: isBrowser(safari, current)\n };\n };\n var Browser = {\n unknown: unknown$1,\n nu: nu$1,\n edge: constant(edge),\n chrome: constant(chrome),\n ie: constant(ie),\n opera: constant(opera),\n firefox: constant(firefox),\n safari: constant(safari)\n };\n\n var windows = 'Windows';\n var ios = 'iOS';\n var android = 'Android';\n var linux = 'Linux';\n var osx = 'OSX';\n var solaris = 'Solaris';\n var freebsd = 'FreeBSD';\n var isOS = function (name, current) {\n return function () {\n return current === name;\n };\n };\n var unknown$2 = function () {\n return nu$2({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$2 = function (info) {\n var current = info.current;\n var version = info.version;\n return {\n current: current,\n version: version,\n isWindows: isOS(windows, current),\n isiOS: isOS(ios, current),\n isAndroid: isOS(android, current),\n isOSX: isOS(osx, current),\n isLinux: isOS(linux, current),\n isSolaris: isOS(solaris, current),\n isFreeBSD: isOS(freebsd, current)\n };\n };\n var OperatingSystem = {\n unknown: unknown$2,\n nu: nu$2,\n windows: constant(windows),\n ios: constant(ios),\n android: constant(android),\n linux: constant(linux),\n osx: constant(osx),\n solaris: constant(solaris),\n freebsd: constant(freebsd)\n };\n\n var DeviceType = function (os, browser, userAgent) {\n var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n var isiPhone = os.isiOS() && !isiPad;\n var isAndroid3 = os.isAndroid() && os.version.major === 3;\n var isAndroid4 = os.isAndroid() && os.version.major === 4;\n var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true;\n var isTouch = os.isiOS() || os.isAndroid();\n var isPhone = isTouch && !isTablet;\n var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n return {\n isiPad: constant(isiPad),\n isiPhone: constant(isiPhone),\n isTablet: constant(isTablet),\n isPhone: constant(isPhone),\n isTouch: constant(isTouch),\n isAndroid: os.isAndroid,\n isiOS: os.isiOS,\n isWebView: constant(iOSwebview)\n };\n };\n\n var detect$1 = function (candidates, userAgent) {\n var agent = String(userAgent).toLowerCase();\n return find(candidates, function (candidate) {\n return candidate.search(agent);\n });\n };\n var detectBrowser = function (browsers, userAgent) {\n return detect$1(browsers, userAgent).map(function (browser) {\n var version = Version.detect(browser.versionRegexes, userAgent);\n return {\n current: browser.name,\n version: version\n };\n });\n };\n var detectOs = function (oses, userAgent) {\n return detect$1(oses, userAgent).map(function (os) {\n var version = Version.detect(os.versionRegexes, userAgent);\n return {\n current: os.name,\n version: version\n };\n });\n };\n var UaString = {\n detectBrowser: detectBrowser,\n detectOs: detectOs\n };\n\n var normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n var checkContains = function (target) {\n return function (uastring) {\n return contains$1(uastring, target);\n };\n };\n var browsers = [\n {\n name: 'Edge',\n versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n search: function (uastring) {\n return contains$1(uastring, 'edge/') && contains$1(uastring, 'chrome') && contains$1(uastring, 'safari') && contains$1(uastring, 'applewebkit');\n }\n },\n {\n name: 'Chrome',\n versionRegexes: [\n /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n normalVersionRegex\n ],\n search: function (uastring) {\n return contains$1(uastring, 'chrome') && !contains$1(uastring, 'chromeframe');\n }\n },\n {\n name: 'IE',\n versionRegexes: [\n /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*?rv:([0-9]+)\\.([0-9]+).*/\n ],\n search: function (uastring) {\n return contains$1(uastring, 'msie') || contains$1(uastring, 'trident');\n }\n },\n {\n name: 'Opera',\n versionRegexes: [\n normalVersionRegex,\n /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n ],\n search: checkContains('opera')\n },\n {\n name: 'Firefox',\n versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n search: checkContains('firefox')\n },\n {\n name: 'Safari',\n versionRegexes: [\n normalVersionRegex,\n /.*?cpu os ([0-9]+)_([0-9]+).*/\n ],\n search: function (uastring) {\n return (contains$1(uastring, 'safari') || contains$1(uastring, 'mobile/')) && contains$1(uastring, 'applewebkit');\n }\n }\n ];\n var oses = [\n {\n name: 'Windows',\n search: checkContains('win'),\n versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'iOS',\n search: function (uastring) {\n return contains$1(uastring, 'iphone') || contains$1(uastring, 'ipad');\n },\n versionRegexes: [\n /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*cpu os ([0-9]+)_([0-9]+).*/,\n /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n ]\n },\n {\n name: 'Android',\n search: checkContains('android'),\n versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'OSX',\n search: checkContains('os x'),\n versionRegexes: [/.*?os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n },\n {\n name: 'Linux',\n search: checkContains('linux'),\n versionRegexes: []\n },\n {\n name: 'Solaris',\n search: checkContains('sunos'),\n versionRegexes: []\n },\n {\n name: 'FreeBSD',\n search: checkContains('freebsd'),\n versionRegexes: []\n }\n ];\n var PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n var detect$2 = function (userAgent) {\n var browsers = PlatformInfo.browsers();\n var oses = PlatformInfo.oses();\n var browser = UaString.detectBrowser(browsers, userAgent).fold(Browser.unknown, Browser.nu);\n var os = UaString.detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n var deviceType = DeviceType(os, browser, userAgent);\n return {\n browser: browser,\n os: os,\n deviceType: deviceType\n };\n };\n var PlatformDetection = { detect: detect$2 };\n\n var detect$3 = cached(function () {\n var userAgent = domGlobals.navigator.userAgent;\n return PlatformDetection.detect(userAgent);\n });\n var PlatformDetection$1 = { detect: detect$3 };\n\n var ELEMENT$1 = ELEMENT;\n var DOCUMENT$1 = DOCUMENT;\n var is = function (element, selector) {\n var dom = element.dom();\n if (dom.nodeType !== ELEMENT$1) {\n return false;\n } else {\n var elem = dom;\n if (elem.matches !== undefined) {\n return elem.matches(selector);\n } else if (elem.msMatchesSelector !== undefined) {\n return elem.msMatchesSelector(selector);\n } else if (elem.webkitMatchesSelector !== undefined) {\n return elem.webkitMatchesSelector(selector);\n } else if (elem.mozMatchesSelector !== undefined) {\n return elem.mozMatchesSelector(selector);\n } else {\n throw new Error('Browser lacks native selectors');\n }\n }\n };\n var bypassSelector = function (dom) {\n return dom.nodeType !== ELEMENT$1 && dom.nodeType !== DOCUMENT$1 || dom.childElementCount === 0;\n };\n var all = function (selector, scope) {\n var base = scope === undefined ? domGlobals.document : scope.dom();\n return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), Element.fromDom);\n };\n var one = function (selector, scope) {\n var base = scope === undefined ? domGlobals.document : scope.dom();\n return bypassSelector(base) ? Option.none() : Option.from(base.querySelector(selector)).map(Element.fromDom);\n };\n\n var eq = function (e1, e2) {\n return e1.dom() === e2.dom();\n };\n var regularContains = function (e1, e2) {\n var d1 = e1.dom();\n var d2 = e2.dom();\n return d1 === d2 ? false : d1.contains(d2);\n };\n var ieContains = function (e1, e2) {\n return Node.documentPositionContainedBy(e1.dom(), e2.dom());\n };\n var browser = PlatformDetection$1.detect().browser;\n var contains$2 = browser.isIE() ? ieContains : regularContains;\n var is$1 = is;\n\n var owner = function (element) {\n return Element.fromDom(element.dom().ownerDocument);\n };\n var defaultView = function (element) {\n return Element.fromDom(element.dom().ownerDocument.defaultView);\n };\n var parent = function (element) {\n return Option.from(element.dom().parentNode).map(Element.fromDom);\n };\n var parents = function (element, isRoot) {\n var stop = isFunction(isRoot) ? isRoot : never;\n var dom = element.dom();\n var ret = [];\n while (dom.parentNode !== null && dom.parentNode !== undefined) {\n var rawParent = dom.parentNode;\n var p = Element.fromDom(rawParent);\n ret.push(p);\n if (stop(p) === true) {\n break;\n } else {\n dom = rawParent;\n }\n }\n return ret;\n };\n var prevSibling = function (element) {\n return Option.from(element.dom().previousSibling).map(Element.fromDom);\n };\n var nextSibling = function (element) {\n return Option.from(element.dom().nextSibling).map(Element.fromDom);\n };\n var children = function (element) {\n return map(element.dom().childNodes, Element.fromDom);\n };\n var child = function (element, index) {\n var cs = element.dom().childNodes;\n return Option.from(cs[index]).map(Element.fromDom);\n };\n var firstChild = function (element) {\n return child(element, 0);\n };\n var spot = Immutable('element', 'offset');\n\n var before = function (marker, element) {\n var parent$1 = parent(marker);\n parent$1.each(function (v) {\n v.dom().insertBefore(element.dom(), marker.dom());\n });\n };\n var after = function (marker, element) {\n var sibling = nextSibling(marker);\n sibling.fold(function () {\n var parent$1 = parent(marker);\n parent$1.each(function (v) {\n append(v, element);\n });\n }, function (v) {\n before(v, element);\n });\n };\n var prepend = function (parent, element) {\n var firstChild$1 = firstChild(parent);\n firstChild$1.fold(function () {\n append(parent, element);\n }, function (v) {\n parent.dom().insertBefore(element.dom(), v.dom());\n });\n };\n var append = function (parent, element) {\n parent.dom().appendChild(element.dom());\n };\n var wrap = function (element, wrapper) {\n before(element, wrapper);\n append(wrapper, element);\n };\n\n var before$1 = function (marker, elements) {\n each(elements, function (x) {\n before(marker, x);\n });\n };\n var after$1 = function (marker, elements) {\n each(elements, function (x, i) {\n var e = i === 0 ? marker : elements[i - 1];\n after(e, x);\n });\n };\n var append$1 = function (parent, elements) {\n each(elements, function (x) {\n append(parent, x);\n });\n };\n\n var empty = function (element) {\n element.dom().textContent = '';\n each(children(element), function (rogue) {\n remove$2(rogue);\n });\n };\n var remove$2 = function (element) {\n var dom = element.dom();\n if (dom.parentNode !== null) {\n dom.parentNode.removeChild(dom);\n }\n };\n var unwrap = function (wrapper) {\n var children$1 = children(wrapper);\n if (children$1.length > 0) {\n before$1(wrapper, children$1);\n }\n remove$2(wrapper);\n };\n\n var dimension = Immutable('width', 'height');\n var dimensions = Immutable('width', 'height');\n var grid = Immutable('rows', 'columns');\n var address = Immutable('row', 'column');\n var coords = Immutable('x', 'y');\n var detail = Immutable('element', 'rowspan', 'colspan');\n var detailnew = Immutable('element', 'rowspan', 'colspan', 'isNew');\n var extended = Immutable('element', 'rowspan', 'colspan', 'row', 'column');\n var rowdata = Immutable('element', 'cells', 'section');\n var elementnew = Immutable('element', 'isNew');\n var rowdatanew = Immutable('element', 'cells', 'section', 'isNew');\n var rowcells = Immutable('cells', 'section');\n var rowdetails = Immutable('details', 'section');\n var bounds = Immutable('startRow', 'startCol', 'finishRow', 'finishCol');\n\n var ancestors = function (scope, predicate, isRoot) {\n return filter(parents(scope, isRoot), predicate);\n };\n var children$1 = function (scope, predicate) {\n return filter(children(scope), predicate);\n };\n var descendants = function (scope, predicate) {\n var result = [];\n each(children(scope), function (x) {\n if (predicate(x)) {\n result = result.concat([x]);\n }\n result = result.concat(descendants(x, predicate));\n });\n return result;\n };\n\n var ancestors$1 = function (scope, selector, isRoot) {\n return ancestors(scope, function (e) {\n return is(e, selector);\n }, isRoot);\n };\n var children$2 = function (scope, selector) {\n return children$1(scope, function (e) {\n return is(e, selector);\n });\n };\n var descendants$1 = function (scope, selector) {\n return all(selector, scope);\n };\n\n function ClosestOrAncestor (is, ancestor, scope, a, isRoot) {\n return is(scope, a) ? Option.some(scope) : isFunction(isRoot) && isRoot(scope) ? Option.none() : ancestor(scope, a, isRoot);\n }\n\n var ancestor = function (scope, predicate, isRoot) {\n var element = scope.dom();\n var stop = isFunction(isRoot) ? isRoot : constant(false);\n while (element.parentNode) {\n element = element.parentNode;\n var el = Element.fromDom(element);\n if (predicate(el)) {\n return Option.some(el);\n } else if (stop(el)) {\n break;\n }\n }\n return Option.none();\n };\n var closest = function (scope, predicate, isRoot) {\n var is = function (s, test) {\n return test(s);\n };\n return ClosestOrAncestor(is, ancestor, scope, predicate, isRoot);\n };\n var child$1 = function (scope, predicate) {\n var pred = function (node) {\n return predicate(Element.fromDom(node));\n };\n var result = find(scope.dom().childNodes, pred);\n return result.map(Element.fromDom);\n };\n var descendant = function (scope, predicate) {\n var descend = function (node) {\n for (var i = 0; i < node.childNodes.length; i++) {\n var child_1 = Element.fromDom(node.childNodes[i]);\n if (predicate(child_1)) {\n return Option.some(child_1);\n }\n var res = descend(node.childNodes[i]);\n if (res.isSome()) {\n return res;\n }\n }\n return Option.none();\n };\n return descend(scope.dom());\n };\n\n var ancestor$1 = function (scope, selector, isRoot) {\n return ancestor(scope, function (e) {\n return is(e, selector);\n }, isRoot);\n };\n var child$2 = function (scope, selector) {\n return child$1(scope, function (e) {\n return is(e, selector);\n });\n };\n var descendant$1 = function (scope, selector) {\n return one(selector, scope);\n };\n var closest$1 = function (scope, selector, isRoot) {\n return ClosestOrAncestor(is, ancestor$1, scope, selector, isRoot);\n };\n\n var firstLayer = function (scope, selector) {\n return filterFirstLayer(scope, selector, constant(true));\n };\n var filterFirstLayer = function (scope, selector, predicate) {\n return bind(children(scope), function (x) {\n return is(x, selector) ? predicate(x) ? [x] : [] : filterFirstLayer(x, selector, predicate);\n });\n };\n var LayerSelector = {\n firstLayer: firstLayer,\n filterFirstLayer: filterFirstLayer\n };\n\n var lookup = function (tags, element, isRoot) {\n if (isRoot === void 0) {\n isRoot = never;\n }\n if (isRoot(element)) {\n return Option.none();\n }\n if (contains(tags, name(element))) {\n return Option.some(element);\n }\n var isRootOrUpperTable = function (elm) {\n return is(elm, 'table') || isRoot(elm);\n };\n return ancestor$1(element, tags.join(','), isRootOrUpperTable);\n };\n var cell = function (element, isRoot) {\n return lookup([\n 'td',\n 'th'\n ], element, isRoot);\n };\n var cells = function (ancestor) {\n return LayerSelector.firstLayer(ancestor, 'th,td');\n };\n var notCell = function (element, isRoot) {\n return lookup([\n 'caption',\n 'tr',\n 'tbody',\n 'tfoot',\n 'thead'\n ], element, isRoot);\n };\n var neighbours = function (selector, element) {\n return parent(element).map(function (parent) {\n return children$2(parent, selector);\n });\n };\n var neighbourCells = curry(neighbours, 'th,td');\n var neighbourRows = curry(neighbours, 'tr');\n var firstCell = function (ancestor) {\n return descendant$1(ancestor, 'th,td');\n };\n var table = function (element, isRoot) {\n return closest$1(element, 'table', isRoot);\n };\n var row = function (element, isRoot) {\n return lookup(['tr'], element, isRoot);\n };\n var rows = function (ancestor) {\n return LayerSelector.firstLayer(ancestor, 'tr');\n };\n var attr = function (element, property) {\n return parseInt(get(element, property), 10);\n };\n var grid$1 = function (element, rowProp, colProp) {\n var rowsCount = attr(element, rowProp);\n var cols = attr(element, colProp);\n return grid(rowsCount, cols);\n };\n var TableLookup = {\n cell: cell,\n firstCell: firstCell,\n cells: cells,\n neighbourCells: neighbourCells,\n table: table,\n row: row,\n rows: rows,\n notCell: notCell,\n neighbourRows: neighbourRows,\n attr: attr,\n grid: grid$1\n };\n\n var fromTable = function (table) {\n var rows = TableLookup.rows(table);\n return map(rows, function (row) {\n var element = row;\n var parent$1 = parent(element);\n var parentSection = parent$1.map(function (p) {\n var parentName = name(p);\n return parentName === 'tfoot' || parentName === 'thead' || parentName === 'tbody' ? parentName : 'tbody';\n }).getOr('tbody');\n var cells = map(TableLookup.cells(row), function (cell) {\n var rowspan = has(cell, 'rowspan') ? parseInt(get(cell, 'rowspan'), 10) : 1;\n var colspan = has(cell, 'colspan') ? parseInt(get(cell, 'colspan'), 10) : 1;\n return detail(cell, rowspan, colspan);\n });\n return rowdata(element, cells, parentSection);\n });\n };\n var fromPastedRows = function (rows, example) {\n return map(rows, function (row) {\n var cells = map(TableLookup.cells(row), function (cell) {\n var rowspan = has(cell, 'rowspan') ? parseInt(get(cell, 'rowspan'), 10) : 1;\n var colspan = has(cell, 'colspan') ? parseInt(get(cell, 'colspan'), 10) : 1;\n return detail(cell, rowspan, colspan);\n });\n return rowdata(row, cells, example.section());\n });\n };\n var DetailsList = {\n fromTable: fromTable,\n fromPastedRows: fromPastedRows\n };\n\n var key = function (row, column) {\n return row + ',' + column;\n };\n var getAt = function (warehouse, row, column) {\n var raw = warehouse.access()[key(row, column)];\n return raw !== undefined ? Option.some(raw) : Option.none();\n };\n var findItem = function (warehouse, item, comparator) {\n var filtered = filterItems(warehouse, function (detail) {\n return comparator(item, detail.element());\n });\n return filtered.length > 0 ? Option.some(filtered[0]) : Option.none();\n };\n var filterItems = function (warehouse, predicate) {\n var all = bind(warehouse.all(), function (r) {\n return r.cells();\n });\n return filter(all, predicate);\n };\n var generate = function (list) {\n var access = {};\n var cells = [];\n var maxRows = list.length;\n var maxColumns = 0;\n each(list, function (details, r) {\n var currentRow = [];\n each(details.cells(), function (detail) {\n var start = 0;\n while (access[key(r, start)] !== undefined) {\n start++;\n }\n var current = extended(detail.element(), detail.rowspan(), detail.colspan(), r, start);\n for (var i = 0; i < detail.colspan(); i++) {\n for (var j = 0; j < detail.rowspan(); j++) {\n var cr = r + j;\n var cc = start + i;\n var newpos = key(cr, cc);\n access[newpos] = current;\n maxColumns = Math.max(maxColumns, cc + 1);\n }\n }\n currentRow.push(current);\n });\n cells.push(rowdata(details.element(), currentRow, details.section()));\n });\n var grid$1 = grid(maxRows, maxColumns);\n return {\n grid: constant(grid$1),\n access: constant(access),\n all: constant(cells)\n };\n };\n var justCells = function (warehouse) {\n var rows = map(warehouse.all(), function (w) {\n return w.cells();\n });\n return flatten(rows);\n };\n var Warehouse = {\n generate: generate,\n getAt: getAt,\n findItem: findItem,\n filterItems: filterItems,\n justCells: justCells\n };\n\n var statsStruct = Immutable('minRow', 'minCol', 'maxRow', 'maxCol');\n var findSelectedStats = function (house, isSelected) {\n var totalColumns = house.grid().columns();\n var totalRows = house.grid().rows();\n var minRow = totalRows;\n var minCol = totalColumns;\n var maxRow = 0;\n var maxCol = 0;\n each$1(house.access(), function (detail) {\n if (isSelected(detail)) {\n var startRow = detail.row();\n var endRow = startRow + detail.rowspan() - 1;\n var startCol = detail.column();\n var endCol = startCol + detail.colspan() - 1;\n if (startRow < minRow) {\n minRow = startRow;\n } else if (endRow > maxRow) {\n maxRow = endRow;\n }\n if (startCol < minCol) {\n minCol = startCol;\n } else if (endCol > maxCol) {\n maxCol = endCol;\n }\n }\n });\n return statsStruct(minRow, minCol, maxRow, maxCol);\n };\n var makeCell = function (list, seenSelected, rowIndex) {\n var row = list[rowIndex].element();\n var td = Element.fromTag('td');\n append(td, Element.fromTag('br'));\n var f = seenSelected ? append : prepend;\n f(row, td);\n };\n var fillInGaps = function (list, house, stats, isSelected) {\n var totalColumns = house.grid().columns();\n var totalRows = house.grid().rows();\n for (var i = 0; i < totalRows; i++) {\n var seenSelected = false;\n for (var j = 0; j < totalColumns; j++) {\n if (!(i < stats.minRow() || i > stats.maxRow() || j < stats.minCol() || j > stats.maxCol())) {\n var needCell = Warehouse.getAt(house, i, j).filter(isSelected).isNone();\n if (needCell) {\n makeCell(list, seenSelected, i);\n } else {\n seenSelected = true;\n }\n }\n }\n }\n };\n var clean = function (table, stats) {\n var emptyRows = filter(LayerSelector.firstLayer(table, 'tr'), function (row) {\n return row.dom().childElementCount === 0;\n });\n each(emptyRows, remove$2);\n if (stats.minCol() === stats.maxCol() || stats.minRow() === stats.maxRow()) {\n each(LayerSelector.firstLayer(table, 'th,td'), function (cell) {\n remove(cell, 'rowspan');\n remove(cell, 'colspan');\n });\n }\n remove(table, 'width');\n remove(table, 'height');\n remove$1(table, 'width');\n remove$1(table, 'height');\n };\n var extract = function (table, selectedSelector) {\n var isSelected = function (detail) {\n return is(detail.element(), selectedSelector);\n };\n var list = DetailsList.fromTable(table);\n var house = Warehouse.generate(list);\n var stats = findSelectedStats(house, isSelected);\n var selector = 'th:not(' + selectedSelector + ')' + ',td:not(' + selectedSelector + ')';\n var unselectedCells = LayerSelector.filterFirstLayer(table, 'th,td', function (cell) {\n return is(cell, selector);\n });\n each(unselectedCells, remove$2);\n fillInGaps(list, house, stats, isSelected);\n clean(table, stats);\n return table;\n };\n var CopySelected = { extract: extract };\n\n function NodeValue (is, name) {\n var get = function (element) {\n if (!is(element)) {\n throw new Error('Can only get ' + name + ' value of a ' + name + ' node');\n }\n return getOption(element).getOr('');\n };\n var getOption = function (element) {\n return is(element) ? Option.from(element.dom().nodeValue) : Option.none();\n };\n var set = function (element, value) {\n if (!is(element)) {\n throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');\n }\n element.dom().nodeValue = value;\n };\n return {\n get: get,\n getOption: getOption,\n set: set\n };\n }\n\n var api = NodeValue(isText, 'text');\n var get$2 = function (element) {\n return api.get(element);\n };\n var getOption = function (element) {\n return api.getOption(element);\n };\n var set$2 = function (element, value) {\n api.set(element, value);\n };\n\n var getEnd = function (element) {\n return name(element) === 'img' ? 1 : getOption(element).fold(function () {\n return children(element).length;\n }, function (v) {\n return v.length;\n });\n };\n var NBSP = '\\xA0';\n var isTextNodeWithCursorPosition = function (el) {\n return getOption(el).filter(function (text) {\n return text.trim().length !== 0 || text.indexOf(NBSP) > -1;\n }).isSome();\n };\n var elementsWithCursorPosition = [\n 'img',\n 'br'\n ];\n var isCursorPosition = function (elem) {\n var hasCursorPosition = isTextNodeWithCursorPosition(elem);\n return hasCursorPosition || contains(elementsWithCursorPosition, name(elem));\n };\n\n var first = function (element) {\n return descendant(element, isCursorPosition);\n };\n var last$1 = function (element) {\n return descendantRtl(element, isCursorPosition);\n };\n var descendantRtl = function (scope, predicate) {\n var descend = function (element) {\n var children$1 = children(element);\n for (var i = children$1.length - 1; i >= 0; i--) {\n var child = children$1[i];\n if (predicate(child)) {\n return Option.some(child);\n }\n var res = descend(child);\n if (res.isSome()) {\n return res;\n }\n }\n return Option.none();\n };\n return descend(scope);\n };\n\n var clone$1 = function (original, isDeep) {\n return Element.fromDom(original.dom().cloneNode(isDeep));\n };\n var shallow = function (original) {\n return clone$1(original, false);\n };\n var deep = function (original) {\n return clone$1(original, true);\n };\n var shallowAs = function (original, tag) {\n var nu = Element.fromTag(tag);\n var attributes = clone(original);\n setAll(nu, attributes);\n return nu;\n };\n var copy$1 = function (original, tag) {\n var nu = shallowAs(original, tag);\n var cloneChildren = children(deep(original));\n append$1(nu, cloneChildren);\n return nu;\n };\n\n var createCell = function () {\n var td = Element.fromTag('td');\n append(td, Element.fromTag('br'));\n return td;\n };\n var replace = function (cell, tag, attrs) {\n var replica = copy$1(cell, tag);\n each$1(attrs, function (v, k) {\n if (v === null) {\n remove(replica, k);\n } else {\n set(replica, k, v);\n }\n });\n return replica;\n };\n var pasteReplace = function (cell) {\n return cell;\n };\n var newRow = function (doc) {\n return function () {\n return Element.fromTag('tr', doc.dom());\n };\n };\n var cloneFormats = function (oldCell, newCell, formats) {\n var first$1 = first(oldCell);\n return first$1.map(function (firstText) {\n var formatSelector = formats.join(',');\n var parents = ancestors$1(firstText, formatSelector, function (element) {\n return eq(element, oldCell);\n });\n return foldr(parents, function (last, parent) {\n var clonedFormat = shallow(parent);\n remove(clonedFormat, 'contenteditable');\n append(last, clonedFormat);\n return clonedFormat;\n }, newCell);\n }).getOr(newCell);\n };\n var cellOperations = function (mutate, doc, formatsToClone) {\n var newCell = function (prev) {\n var docu = owner(prev.element());\n var td = Element.fromTag(name(prev.element()), docu.dom());\n var formats = formatsToClone.getOr([\n 'strong',\n 'em',\n 'b',\n 'i',\n 'span',\n 'font',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'p',\n 'div'\n ]);\n var lastNode = formats.length > 0 ? cloneFormats(prev.element(), td, formats) : td;\n append(lastNode, Element.fromTag('br'));\n copy(prev.element(), td);\n remove$1(td, 'height');\n if (prev.colspan() !== 1) {\n remove$1(prev.element(), 'width');\n }\n mutate(prev.element(), td);\n return td;\n };\n return {\n row: newRow(doc),\n cell: newCell,\n replace: replace,\n gap: createCell\n };\n };\n var paste = function (doc) {\n return {\n row: newRow(doc),\n cell: createCell,\n replace: pasteReplace,\n gap: createCell\n };\n };\n var TableFill = {\n cellOperations: cellOperations,\n paste: paste\n };\n\n var fromHtml$1 = function (html, scope) {\n var doc = scope || domGlobals.document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n return children(Element.fromDom(div));\n };\n\n var inSelection = function (bounds, detail) {\n var leftEdge = detail.column();\n var rightEdge = detail.column() + detail.colspan() - 1;\n var topEdge = detail.row();\n var bottomEdge = detail.row() + detail.rowspan() - 1;\n return leftEdge <= bounds.finishCol() && rightEdge >= bounds.startCol() && (topEdge <= bounds.finishRow() && bottomEdge >= bounds.startRow());\n };\n var isWithin = function (bounds, detail) {\n return detail.column() >= bounds.startCol() && detail.column() + detail.colspan() - 1 <= bounds.finishCol() && detail.row() >= bounds.startRow() && detail.row() + detail.rowspan() - 1 <= bounds.finishRow();\n };\n var isRectangular = function (warehouse, bounds) {\n var isRect = true;\n var detailIsWithin = curry(isWithin, bounds);\n for (var i = bounds.startRow(); i <= bounds.finishRow(); i++) {\n for (var j = bounds.startCol(); j <= bounds.finishCol(); j++) {\n isRect = isRect && Warehouse.getAt(warehouse, i, j).exists(detailIsWithin);\n }\n }\n return isRect ? Option.some(bounds) : Option.none();\n };\n var CellBounds = {\n inSelection: inSelection,\n isWithin: isWithin,\n isRectangular: isRectangular\n };\n\n var getBounds = function (detailA, detailB) {\n return bounds(Math.min(detailA.row(), detailB.row()), Math.min(detailA.column(), detailB.column()), Math.max(detailA.row() + detailA.rowspan() - 1, detailB.row() + detailB.rowspan() - 1), Math.max(detailA.column() + detailA.colspan() - 1, detailB.column() + detailB.colspan() - 1));\n };\n var getAnyBox = function (warehouse, startCell, finishCell) {\n var startCoords = Warehouse.findItem(warehouse, startCell, eq);\n var finishCoords = Warehouse.findItem(warehouse, finishCell, eq);\n return startCoords.bind(function (sc) {\n return finishCoords.map(function (fc) {\n return getBounds(sc, fc);\n });\n });\n };\n var getBox = function (warehouse, startCell, finishCell) {\n return getAnyBox(warehouse, startCell, finishCell).bind(function (bounds) {\n return CellBounds.isRectangular(warehouse, bounds);\n });\n };\n var CellGroup = {\n getAnyBox: getAnyBox,\n getBox: getBox\n };\n\n var moveBy = function (warehouse, cell, row, column) {\n return Warehouse.findItem(warehouse, cell, eq).bind(function (detail) {\n var startRow = row > 0 ? detail.row() + detail.rowspan() - 1 : detail.row();\n var startCol = column > 0 ? detail.column() + detail.colspan() - 1 : detail.column();\n var dest = Warehouse.getAt(warehouse, startRow + row, startCol + column);\n return dest.map(function (d) {\n return d.element();\n });\n });\n };\n var intercepts = function (warehouse, start, finish) {\n return CellGroup.getAnyBox(warehouse, start, finish).map(function (bounds) {\n var inside = Warehouse.filterItems(warehouse, curry(CellBounds.inSelection, bounds));\n return map(inside, function (detail) {\n return detail.element();\n });\n });\n };\n var parentCell = function (warehouse, innerCell) {\n var isContainedBy = function (c1, c2) {\n return contains$2(c2, c1);\n };\n return Warehouse.findItem(warehouse, innerCell, isContainedBy).map(function (detail) {\n return detail.element();\n });\n };\n var CellFinder = {\n moveBy: moveBy,\n intercepts: intercepts,\n parentCell: parentCell\n };\n\n var moveBy$1 = function (cell, deltaRow, deltaColumn) {\n return TableLookup.table(cell).bind(function (table) {\n var warehouse = getWarehouse(table);\n return CellFinder.moveBy(warehouse, cell, deltaRow, deltaColumn);\n });\n };\n var intercepts$1 = function (table, first, last) {\n var warehouse = getWarehouse(table);\n return CellFinder.intercepts(warehouse, first, last);\n };\n var nestedIntercepts = function (table, first, firstTable, last, lastTable) {\n var warehouse = getWarehouse(table);\n var optStartCell = eq(table, firstTable) ? Option.some(first) : CellFinder.parentCell(warehouse, first);\n var optLastCell = eq(table, lastTable) ? Option.some(last) : CellFinder.parentCell(warehouse, last);\n return optStartCell.bind(function (startCell) {\n return optLastCell.bind(function (lastCell) {\n return CellFinder.intercepts(warehouse, startCell, lastCell);\n });\n });\n };\n var getBox$1 = function (table, first, last) {\n var warehouse = getWarehouse(table);\n return CellGroup.getBox(warehouse, first, last);\n };\n var getWarehouse = function (table) {\n var list = DetailsList.fromTable(table);\n return Warehouse.generate(list);\n };\n var TablePositions = {\n moveBy: moveBy$1,\n intercepts: intercepts$1,\n nestedIntercepts: nestedIntercepts,\n getBox: getBox$1\n };\n\n var TagBoundaries = [\n 'body',\n 'p',\n 'div',\n 'article',\n 'aside',\n 'figcaption',\n 'figure',\n 'footer',\n 'header',\n 'nav',\n 'section',\n 'ol',\n 'ul',\n 'li',\n 'table',\n 'thead',\n 'tbody',\n 'tfoot',\n 'caption',\n 'tr',\n 'td',\n 'th',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'blockquote',\n 'pre',\n 'address'\n ];\n\n function DomUniverse () {\n var clone$1 = function (element) {\n return Element.fromDom(element.dom().cloneNode(false));\n };\n var document = function (element) {\n return element.dom().ownerDocument;\n };\n var isBoundary = function (element) {\n if (!isElement(element)) {\n return false;\n }\n if (name(element) === 'body') {\n return true;\n }\n return contains(TagBoundaries, name(element));\n };\n var isEmptyTag = function (element) {\n if (!isElement(element)) {\n return false;\n }\n return contains([\n 'br',\n 'img',\n 'hr',\n 'input'\n ], name(element));\n };\n var comparePosition = function (element, other) {\n return element.dom().compareDocumentPosition(other.dom());\n };\n var copyAttributesTo = function (source, destination) {\n var as = clone(source);\n setAll(destination, as);\n };\n return {\n up: constant({\n selector: ancestor$1,\n closest: closest$1,\n predicate: ancestor,\n all: parents\n }),\n down: constant({\n selector: descendants$1,\n predicate: descendants\n }),\n styles: constant({\n get: get$1,\n getRaw: getRaw,\n set: set$1,\n remove: remove$1\n }),\n attrs: constant({\n get: get,\n set: set,\n remove: remove,\n copyTo: copyAttributesTo\n }),\n insert: constant({\n before: before,\n after: after,\n afterAll: after$1,\n append: append,\n appendAll: append$1,\n prepend: prepend,\n wrap: wrap\n }),\n remove: constant({\n unwrap: unwrap,\n remove: remove$2\n }),\n create: constant({\n nu: Element.fromTag,\n clone: clone$1,\n text: Element.fromText\n }),\n query: constant({\n comparePosition: comparePosition,\n prevSibling: prevSibling,\n nextSibling: nextSibling\n }),\n property: constant({\n children: children,\n name: name,\n parent: parent,\n document: document,\n isText: isText,\n isComment: isComment,\n isElement: isElement,\n getText: get$2,\n setText: set$2,\n isBoundary: isBoundary,\n isEmptyTag: isEmptyTag\n }),\n eq: eq,\n is: is$1\n };\n }\n\n var leftRight = Immutable('left', 'right');\n var brokenPath = Immutable('first', 'second', 'splits');\n var bisect = function (universe, parent, child) {\n var children = universe.property().children(parent);\n var index = findIndex(children, curry(universe.eq, child));\n return index.map(function (ind) {\n return {\n before: constant(children.slice(0, ind)),\n after: constant(children.slice(ind + 1))\n };\n });\n };\n var breakToRight = function (universe, parent, child) {\n return bisect(universe, parent, child).map(function (parts) {\n var second = universe.create().clone(parent);\n universe.insert().appendAll(second, parts.after());\n universe.insert().after(parent, second);\n return leftRight(parent, second);\n });\n };\n var breakToLeft = function (universe, parent, child) {\n return bisect(universe, parent, child).map(function (parts) {\n var prior = universe.create().clone(parent);\n universe.insert().appendAll(prior, parts.before().concat([child]));\n universe.insert().appendAll(parent, parts.after());\n universe.insert().before(parent, prior);\n return leftRight(prior, parent);\n });\n };\n var breakPath = function (universe, item, isTop, breaker) {\n var next = function (child, group, splits) {\n var fallback = brokenPath(child, Option.none(), splits);\n if (isTop(child)) {\n return brokenPath(child, group, splits);\n } else {\n return universe.property().parent(child).bind(function (parent) {\n return breaker(universe, parent, child).map(function (breakage) {\n var extra = [{\n first: breakage.left,\n second: breakage.right\n }];\n var nextChild = isTop(parent) ? parent : breakage.left();\n return next(nextChild, Option.some(breakage.right()), splits.concat(extra));\n });\n }).getOr(fallback);\n }\n };\n return next(item, Option.none(), []);\n };\n\n var all$1 = function (universe, look, elements, f) {\n var head = elements[0];\n var tail = elements.slice(1);\n return f(universe, look, head, tail);\n };\n var oneAll = function (universe, look, elements) {\n return elements.length > 0 ? all$1(universe, look, elements, unsafeOne) : Option.none();\n };\n var unsafeOne = function (universe, look, head, tail) {\n var start = look(universe, head);\n return foldr(tail, function (b, a) {\n var current = look(universe, a);\n return commonElement(universe, b, current);\n }, start);\n };\n var commonElement = function (universe, start, end) {\n return start.bind(function (s) {\n return end.filter(curry(universe.eq, s));\n });\n };\n\n var eq$1 = function (universe, item) {\n return curry(universe.eq, item);\n };\n var unsafeSubset = function (universe, common, ps1, ps2) {\n var children = universe.property().children(common);\n if (universe.eq(common, ps1[0])) {\n return Option.some([ps1[0]]);\n }\n if (universe.eq(common, ps2[0])) {\n return Option.some([ps2[0]]);\n }\n var finder = function (ps) {\n var topDown = reverse(ps);\n var index = findIndex(topDown, eq$1(universe, common)).getOr(-1);\n var item = index < topDown.length - 1 ? topDown[index + 1] : topDown[index];\n return findIndex(children, eq$1(universe, item));\n };\n var startIndex = finder(ps1);\n var endIndex = finder(ps2);\n return startIndex.bind(function (sIndex) {\n return endIndex.map(function (eIndex) {\n var first = Math.min(sIndex, eIndex);\n var last = Math.max(sIndex, eIndex);\n return children.slice(first, last + 1);\n });\n });\n };\n var ancestors$2 = function (universe, start, end, isRoot) {\n if (isRoot === void 0) {\n isRoot = never;\n }\n var ps1 = [start].concat(universe.up().all(start));\n var ps2 = [end].concat(universe.up().all(end));\n var prune = function (path) {\n var index = findIndex(path, isRoot);\n return index.fold(function () {\n return path;\n }, function (ind) {\n return path.slice(0, ind + 1);\n });\n };\n var pruned1 = prune(ps1);\n var pruned2 = prune(ps2);\n var shared = find(pruned1, function (x) {\n return exists(pruned2, eq$1(universe, x));\n });\n return {\n firstpath: constant(pruned1),\n secondpath: constant(pruned2),\n shared: constant(shared)\n };\n };\n var subset = function (universe, start, end) {\n var ancs = ancestors$2(universe, start, end);\n return ancs.shared().bind(function (shared) {\n return unsafeSubset(universe, shared, ancs.firstpath(), ancs.secondpath());\n });\n };\n var SubsetFn = {\n subset: subset,\n ancestors: ancestors$2\n };\n\n var sharedOne = oneAll;\n var subset$1 = SubsetFn.subset;\n var ancestors$3 = SubsetFn.ancestors;\n var breakToLeft$1 = breakToLeft;\n var breakToRight$1 = breakToRight;\n var breakPath$1 = breakPath;\n var Parent = {\n sharedOne: sharedOne,\n subset: subset$1,\n ancestors: ancestors$3,\n breakToLeft: breakToLeft$1,\n breakToRight: breakToRight$1,\n breakPath: breakPath$1\n };\n\n var universe = DomUniverse();\n var sharedOne$1 = function (look, elements) {\n return Parent.sharedOne(universe, function (_universe, element) {\n return look(element);\n }, elements);\n };\n var subset$2 = function (start, finish) {\n return Parent.subset(universe, start, finish);\n };\n var ancestors$4 = function (start, finish, isRoot) {\n return Parent.ancestors(universe, start, finish, isRoot);\n };\n var breakToLeft$2 = function (parent, child) {\n return Parent.breakToLeft(universe, parent, child);\n };\n var breakToRight$2 = function (parent, child) {\n return Parent.breakToRight(universe, parent, child);\n };\n var breakPath$2 = function (child, isTop, breaker) {\n return Parent.breakPath(universe, child, isTop, function (u, p, c) {\n return breaker(p, c);\n });\n };\n var DomParent = {\n sharedOne: sharedOne$1,\n subset: subset$2,\n ancestors: ancestors$4,\n breakToLeft: breakToLeft$2,\n breakToRight: breakToRight$2,\n breakPath: breakPath$2\n };\n\n var create = MixedBag([\n 'boxes',\n 'start',\n 'finish'\n ], []);\n var Identified = { create: create };\n\n var lookupTable = function (container) {\n return ancestor$1(container, 'table');\n };\n var identify = function (start, finish, isRoot) {\n var getIsRoot = function (rootTable) {\n return function (element) {\n return isRoot !== undefined && isRoot(element) || eq(element, rootTable);\n };\n };\n if (eq(start, finish)) {\n return Option.some(Identified.create({\n boxes: Option.some([start]),\n start: start,\n finish: finish\n }));\n } else {\n return lookupTable(start).bind(function (startTable) {\n return lookupTable(finish).bind(function (finishTable) {\n if (eq(startTable, finishTable)) {\n return Option.some(Identified.create({\n boxes: TablePositions.intercepts(startTable, start, finish),\n start: start,\n finish: finish\n }));\n } else if (contains$2(startTable, finishTable)) {\n var ancestorCells = ancestors$1(finish, 'td,th', getIsRoot(startTable));\n var finishCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : finish;\n return Option.some(Identified.create({\n boxes: TablePositions.nestedIntercepts(startTable, start, startTable, finish, finishTable),\n start: start,\n finish: finishCell\n }));\n } else if (contains$2(finishTable, startTable)) {\n var ancestorCells = ancestors$1(start, 'td,th', getIsRoot(finishTable));\n var startCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : start;\n return Option.some(Identified.create({\n boxes: TablePositions.nestedIntercepts(finishTable, start, startTable, finish, finishTable),\n start: start,\n finish: startCell\n }));\n } else {\n return DomParent.ancestors(start, finish).shared().bind(function (lca) {\n return closest$1(lca, 'table', isRoot).bind(function (lcaTable) {\n var finishAncestorCells = ancestors$1(finish, 'td,th', getIsRoot(lcaTable));\n var finishCell = finishAncestorCells.length > 0 ? finishAncestorCells[finishAncestorCells.length - 1] : finish;\n var startAncestorCells = ancestors$1(start, 'td,th', getIsRoot(lcaTable));\n var startCell = startAncestorCells.length > 0 ? startAncestorCells[startAncestorCells.length - 1] : start;\n return Option.some(Identified.create({\n boxes: TablePositions.nestedIntercepts(lcaTable, start, startTable, finish, finishTable),\n start: startCell,\n finish: finishCell\n }));\n });\n });\n }\n });\n });\n }\n };\n var retrieve = function (container, selector) {\n var sels = descendants$1(container, selector);\n return sels.length > 0 ? Option.some(sels) : Option.none();\n };\n var getLast = function (boxes, lastSelectedSelector) {\n return find(boxes, function (box) {\n return is(box, lastSelectedSelector);\n });\n };\n var getEdges = function (container, firstSelectedSelector, lastSelectedSelector) {\n return descendant$1(container, firstSelectedSelector).bind(function (first) {\n return descendant$1(container, lastSelectedSelector).bind(function (last) {\n return DomParent.sharedOne(lookupTable, [\n first,\n last\n ]).map(function (tbl) {\n return {\n first: constant(first),\n last: constant(last),\n table: constant(tbl)\n };\n });\n });\n });\n };\n var expandTo = function (finish, firstSelectedSelector) {\n return ancestor$1(finish, 'table').bind(function (table) {\n return descendant$1(table, firstSelectedSelector).bind(function (start) {\n return identify(start, finish).bind(function (identified) {\n return identified.boxes().map(function (boxes) {\n return {\n boxes: constant(boxes),\n start: constant(identified.start()),\n finish: constant(identified.finish())\n };\n });\n });\n });\n });\n };\n var shiftSelection = function (boxes, deltaRow, deltaColumn, firstSelectedSelector, lastSelectedSelector) {\n return getLast(boxes, lastSelectedSelector).bind(function (last) {\n return TablePositions.moveBy(last, deltaRow, deltaColumn).bind(function (finish) {\n return expandTo(finish, firstSelectedSelector);\n });\n });\n };\n var CellSelection = {\n identify: identify,\n retrieve: retrieve,\n shiftSelection: shiftSelection,\n getEdges: getEdges\n };\n\n var retrieve$1 = function (container, selector) {\n return CellSelection.retrieve(container, selector);\n };\n var retrieveBox = function (container, firstSelectedSelector, lastSelectedSelector) {\n return CellSelection.getEdges(container, firstSelectedSelector, lastSelectedSelector).bind(function (edges) {\n var isRoot = function (ancestor) {\n return eq(container, ancestor);\n };\n var firstAncestor = ancestor$1(edges.first(), 'thead,tfoot,tbody,table', isRoot);\n var lastAncestor = ancestor$1(edges.last(), 'thead,tfoot,tbody,table', isRoot);\n return firstAncestor.bind(function (fA) {\n return lastAncestor.bind(function (lA) {\n return eq(fA, lA) ? TablePositions.getBox(edges.table(), edges.first(), edges.last()) : Option.none();\n });\n });\n });\n };\n var TableSelection = {\n retrieve: retrieve$1,\n retrieveBox: retrieveBox\n };\n\n var selected = 'data-mce-selected';\n var selectedSelector = 'td[' + selected + '],th[' + selected + ']';\n var attributeSelector = '[' + selected + ']';\n var firstSelected = 'data-mce-first-selected';\n var firstSelectedSelector = 'td[' + firstSelected + '],th[' + firstSelected + ']';\n var lastSelected = 'data-mce-last-selected';\n var lastSelectedSelector = 'td[' + lastSelected + '],th[' + lastSelected + ']';\n var Ephemera = {\n selected: constant(selected),\n selectedSelector: constant(selectedSelector),\n attributeSelector: constant(attributeSelector),\n firstSelected: constant(firstSelected),\n firstSelectedSelector: constant(firstSelectedSelector),\n lastSelected: constant(lastSelected),\n lastSelectedSelector: constant(lastSelectedSelector)\n };\n\n var generate$1 = function (cases) {\n if (!isArray(cases)) {\n throw new Error('cases must be an array');\n }\n if (cases.length === 0) {\n throw new Error('there must be at least one case');\n }\n var constructors = [];\n var adt = {};\n each(cases, function (acase, count) {\n var keys$1 = keys(acase);\n if (keys$1.length !== 1) {\n throw new Error('one and only one name per case');\n }\n var key = keys$1[0];\n var value = acase[key];\n if (adt[key] !== undefined) {\n throw new Error('duplicate key detected:' + key);\n } else if (key === 'cata') {\n throw new Error('cannot have a case named cata (sorry)');\n } else if (!isArray(value)) {\n throw new Error('case arguments must be an array');\n }\n constructors.push(key);\n adt[key] = function () {\n var argLength = arguments.length;\n if (argLength !== value.length) {\n throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);\n }\n var args = new Array(argLength);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n var match = function (branches) {\n var branchKeys = keys(branches);\n if (constructors.length !== branchKeys.length) {\n throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\\nActual: ' + branchKeys.join(','));\n }\n var allReqd = forall(constructors, function (reqKey) {\n return contains(branchKeys, reqKey);\n });\n if (!allReqd) {\n throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\\nRequired: ' + constructors.join(', '));\n }\n return branches[key].apply(null, args);\n };\n return {\n fold: function () {\n if (arguments.length !== cases.length) {\n throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + arguments.length);\n }\n var target = arguments[count];\n return target.apply(null, args);\n },\n match: match,\n log: function (label) {\n domGlobals.console.log(label, {\n constructors: constructors,\n constructor: key,\n params: args\n });\n }\n };\n };\n });\n return adt;\n };\n var Adt = { generate: generate$1 };\n\n var type$1 = Adt.generate([\n { none: [] },\n { multiple: ['elements'] },\n { single: ['selection'] }\n ]);\n var cata = function (subject, onNone, onMultiple, onSingle) {\n return subject.fold(onNone, onMultiple, onSingle);\n };\n var SelectionTypes = {\n cata: cata,\n none: type$1.none,\n multiple: type$1.multiple,\n single: type$1.single\n };\n\n var selection = function (cell, selections) {\n return SelectionTypes.cata(selections.get(), constant([]), identity, constant([cell]));\n };\n var unmergable = function (cell, selections) {\n var hasSpan = function (elem) {\n return has(elem, 'rowspan') && parseInt(get(elem, 'rowspan'), 10) > 1 || has(elem, 'colspan') && parseInt(get(elem, 'colspan'), 10) > 1;\n };\n var candidates = selection(cell, selections);\n return candidates.length > 0 && forall(candidates, hasSpan) ? Option.some(candidates) : Option.none();\n };\n var mergable = function (table, selections) {\n return SelectionTypes.cata(selections.get(), Option.none, function (cells, _env) {\n if (cells.length === 0) {\n return Option.none();\n }\n return TableSelection.retrieveBox(table, Ephemera.firstSelectedSelector(), Ephemera.lastSelectedSelector()).bind(function (bounds) {\n return cells.length > 1 ? Option.some({\n bounds: constant(bounds),\n cells: constant(cells)\n }) : Option.none();\n });\n }, Option.none);\n };\n var CellOperations = {\n mergable: mergable,\n unmergable: unmergable,\n selection: selection\n };\n\n var noMenu = function (cell) {\n return {\n element: constant(cell),\n mergable: Option.none,\n unmergable: Option.none,\n selection: constant([cell])\n };\n };\n var forMenu = function (selections, table, cell) {\n return {\n element: constant(cell),\n mergable: constant(CellOperations.mergable(table, selections)),\n unmergable: constant(CellOperations.unmergable(cell, selections)),\n selection: constant(CellOperations.selection(cell, selections))\n };\n };\n var notCell$1 = function (element) {\n return noMenu(element);\n };\n var paste$1 = Immutable('element', 'clipboard', 'generators');\n var pasteRows = function (selections, table, cell, clipboard, generators) {\n return {\n element: constant(cell),\n mergable: Option.none,\n unmergable: Option.none,\n selection: constant(CellOperations.selection(cell, selections)),\n clipboard: constant(clipboard),\n generators: constant(generators)\n };\n };\n var TableTargets = {\n noMenu: noMenu,\n forMenu: forMenu,\n notCell: notCell$1,\n paste: paste$1,\n pasteRows: pasteRows\n };\n\n var extractSelected = function (cells) {\n return TableLookup.table(cells[0]).map(deep).map(function (replica) {\n return [CopySelected.extract(replica, Ephemera.attributeSelector())];\n });\n };\n var serializeElements = function (editor, elements) {\n return map(elements, function (elm) {\n return editor.selection.serializer.serialize(elm.dom(), {});\n }).join('');\n };\n var getTextContent = function (elements) {\n return map(elements, function (element) {\n return element.dom().innerText;\n }).join('');\n };\n var registerEvents = function (editor, selections, actions, cellSelection) {\n editor.on('BeforeGetContent', function (e) {\n var multiCellContext = function (cells) {\n e.preventDefault();\n extractSelected(cells).each(function (elements) {\n e.content = e.format === 'text' ? getTextContent(elements) : serializeElements(editor, elements);\n });\n };\n if (e.selection === true) {\n SelectionTypes.cata(selections.get(), noop, multiCellContext, noop);\n }\n });\n editor.on('BeforeSetContent', function (e) {\n if (e.selection === true && e.paste === true) {\n var cellOpt = Option.from(editor.dom.getParent(editor.selection.getStart(), 'th,td'));\n cellOpt.each(function (domCell) {\n var cell = Element.fromDom(domCell);\n TableLookup.table(cell).each(function (table) {\n var elements = filter(fromHtml$1(e.content), function (content) {\n return name(content) !== 'meta';\n });\n if (elements.length === 1 && name(elements[0]) === 'table') {\n e.preventDefault();\n var doc = Element.fromDom(editor.getDoc());\n var generators = TableFill.paste(doc);\n var targets = TableTargets.paste(cell, elements[0], generators);\n actions.pasteCells(table, targets).each(function (rng) {\n editor.selection.setRng(rng);\n editor.focus();\n cellSelection.clear(table);\n });\n }\n });\n });\n }\n });\n };\n var Clipboard = { registerEvents: registerEvents };\n\n function Dimension (name, getOffset) {\n var set = function (element, h) {\n if (!isNumber(h) && !h.match(/^[0-9]+$/)) {\n throw new Error(name + '.set accepts only positive integer values. Value was ' + h);\n }\n var dom = element.dom();\n if (isSupported(dom)) {\n dom.style[name] = h + 'px';\n }\n };\n var get = function (element) {\n var r = getOffset(element);\n if (r <= 0 || r === null) {\n var css = get$1(element, name);\n return parseFloat(css) || 0;\n }\n return r;\n };\n var getOuter = get;\n var aggregate = function (element, properties) {\n return foldl(properties, function (acc, property) {\n var val = get$1(element, property);\n var value = val === undefined ? 0 : parseInt(val, 10);\n return isNaN(value) ? acc : acc + value;\n }, 0);\n };\n var max = function (element, value, properties) {\n var cumulativeInclusions = aggregate(element, properties);\n var absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0;\n return absoluteMax;\n };\n return {\n set: set,\n get: get,\n getOuter: getOuter,\n aggregate: aggregate,\n max: max\n };\n }\n\n var api$1 = Dimension('height', function (element) {\n var dom = element.dom();\n return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight;\n });\n var get$3 = function (element) {\n return api$1.get(element);\n };\n var getOuter = function (element) {\n return api$1.getOuter(element);\n };\n\n var api$2 = Dimension('width', function (element) {\n return element.dom().offsetWidth;\n });\n var get$4 = function (element) {\n return api$2.get(element);\n };\n var getOuter$1 = function (element) {\n return api$2.getOuter(element);\n };\n\n var platform = PlatformDetection$1.detect();\n var needManualCalc = function () {\n return platform.browser.isIE() || platform.browser.isEdge();\n };\n var toNumber = function (px, fallback) {\n var num = parseFloat(px);\n return isNaN(num) ? fallback : num;\n };\n var getProp = function (elm, name, fallback) {\n return toNumber(get$1(elm, name), fallback);\n };\n var getCalculatedHeight = function (cell) {\n var paddingTop = getProp(cell, 'padding-top', 0);\n var paddingBottom = getProp(cell, 'padding-bottom', 0);\n var borderTop = getProp(cell, 'border-top-width', 0);\n var borderBottom = getProp(cell, 'border-bottom-width', 0);\n var height = cell.dom().getBoundingClientRect().height;\n var boxSizing = get$1(cell, 'box-sizing');\n var borders = borderTop + borderBottom;\n return boxSizing === 'border-box' ? height : height - paddingTop - paddingBottom - borders;\n };\n var getWidth = function (cell) {\n return getProp(cell, 'width', get$4(cell));\n };\n var getHeight = function (cell) {\n return needManualCalc() ? getCalculatedHeight(cell) : getProp(cell, 'height', get$3(cell));\n };\n var RuntimeSize = {\n getWidth: getWidth,\n getHeight: getHeight\n };\n\n var genericSizeRegex = /(\\d+(\\.\\d+)?)(\\w|%)*/;\n var percentageBasedSizeRegex = /(\\d+(\\.\\d+)?)%/;\n var pixelBasedSizeRegex = /(\\d+(\\.\\d+)?)px|em/;\n var setPixelWidth = function (cell, amount) {\n set$1(cell, 'width', amount + 'px');\n };\n var setPercentageWidth = function (cell, amount) {\n set$1(cell, 'width', amount + '%');\n };\n var setHeight = function (cell, amount) {\n set$1(cell, 'height', amount + 'px');\n };\n var getHeightValue = function (cell) {\n return getRaw(cell, 'height').getOrThunk(function () {\n return RuntimeSize.getHeight(cell) + 'px';\n });\n };\n var convert = function (cell, number, getter, setter) {\n var newSize = TableLookup.table(cell).map(function (table) {\n var total = getter(table);\n return Math.floor(number / 100 * total);\n }).getOr(number);\n setter(cell, newSize);\n return newSize;\n };\n var normalizePixelSize = function (value, cell, getter, setter) {\n var number = parseInt(value, 10);\n return endsWith(value, '%') && name(cell) !== 'table' ? convert(cell, number, getter, setter) : number;\n };\n var getTotalHeight = function (cell) {\n var value = getHeightValue(cell);\n if (!value) {\n return get$3(cell);\n }\n return normalizePixelSize(value, cell, get$3, setHeight);\n };\n var get$5 = function (cell, type, f) {\n var v = f(cell);\n var span = getSpan(cell, type);\n return v / span;\n };\n var getSpan = function (cell, type) {\n return has(cell, type) ? parseInt(get(cell, type), 10) : 1;\n };\n var getRawWidth = function (element) {\n var cssWidth = getRaw(element, 'width');\n return cssWidth.fold(function () {\n return Option.from(get(element, 'width'));\n }, function (width) {\n return Option.some(width);\n });\n };\n var normalizePercentageWidth = function (cellWidth, tableSize) {\n return cellWidth / tableSize.pixelWidth() * 100;\n };\n var choosePercentageSize = function (element, width, tableSize) {\n var percentMatch = percentageBasedSizeRegex.exec(width);\n if (percentMatch !== null) {\n return parseFloat(percentMatch[1]);\n } else {\n var intWidth = get$4(element);\n return normalizePercentageWidth(intWidth, tableSize);\n }\n };\n var getPercentageWidth = function (cell, tableSize) {\n var width = getRawWidth(cell);\n return width.fold(function () {\n var intWidth = get$4(cell);\n return normalizePercentageWidth(intWidth, tableSize);\n }, function (w) {\n return choosePercentageSize(cell, w, tableSize);\n });\n };\n var normalizePixelWidth = function (cellWidth, tableSize) {\n return cellWidth / 100 * tableSize.pixelWidth();\n };\n var choosePixelSize = function (element, width, tableSize) {\n var pixelMatch = pixelBasedSizeRegex.exec(width);\n if (pixelMatch !== null) {\n return parseInt(pixelMatch[1], 10);\n }\n var percentMatch = percentageBasedSizeRegex.exec(width);\n if (percentMatch !== null) {\n var floatWidth = parseFloat(percentMatch[1]);\n return normalizePixelWidth(floatWidth, tableSize);\n }\n return get$4(element);\n };\n var getPixelWidth = function (cell, tableSize) {\n var width = getRawWidth(cell);\n return width.fold(function () {\n return get$4(cell);\n }, function (w) {\n return choosePixelSize(cell, w, tableSize);\n });\n };\n var getHeight$1 = function (cell) {\n return get$5(cell, 'rowspan', getTotalHeight);\n };\n var getGenericWidth = function (cell) {\n var width = getRawWidth(cell);\n return width.bind(function (w) {\n var match = genericSizeRegex.exec(w);\n if (match !== null) {\n return Option.some({\n width: constant(parseFloat(match[1])),\n unit: constant(match[3])\n });\n } else {\n return Option.none();\n }\n });\n };\n var setGenericWidth = function (cell, amount, unit) {\n set$1(cell, 'width', amount + unit);\n };\n var Sizes = {\n percentageBasedSizeRegex: constant(percentageBasedSizeRegex),\n pixelBasedSizeRegex: constant(pixelBasedSizeRegex),\n setPixelWidth: setPixelWidth,\n setPercentageWidth: setPercentageWidth,\n setHeight: setHeight,\n getPixelWidth: getPixelWidth,\n getPercentageWidth: getPercentageWidth,\n getGenericWidth: getGenericWidth,\n setGenericWidth: setGenericWidth,\n getHeight: getHeight$1,\n getRawWidth: getRawWidth\n };\n\n var halve = function (main, other) {\n var width = Sizes.getGenericWidth(main);\n width.each(function (w) {\n var newWidth = w.width() / 2;\n Sizes.setGenericWidth(main, newWidth, w.unit());\n Sizes.setGenericWidth(other, newWidth, w.unit());\n });\n };\n var CellMutations = { halve: halve };\n\n var r = function (left, top) {\n var translate = function (x, y) {\n return r(left + x, top + y);\n };\n return {\n left: constant(left),\n top: constant(top),\n translate: translate\n };\n };\n var Position = r;\n\n var boxPosition = function (dom) {\n var box = dom.getBoundingClientRect();\n return Position(box.left, box.top);\n };\n var firstDefinedOrZero = function (a, b) {\n return a !== undefined ? a : b !== undefined ? b : 0;\n };\n var absolute = function (element) {\n var doc = element.dom().ownerDocument;\n var body = doc.body;\n var win = doc.defaultView;\n var html = doc.documentElement;\n var scrollTop = firstDefinedOrZero(win.pageYOffset, html.scrollTop);\n var scrollLeft = firstDefinedOrZero(win.pageXOffset, html.scrollLeft);\n var clientTop = firstDefinedOrZero(html.clientTop, body.clientTop);\n var clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft);\n return viewport(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);\n };\n var viewport = function (element) {\n var dom = element.dom();\n var doc = dom.ownerDocument;\n var body = doc.body;\n if (body === dom) {\n return Position(body.offsetLeft, body.offsetTop);\n }\n if (!inBody(element)) {\n return Position(0, 0);\n }\n return boxPosition(dom);\n };\n\n var rowInfo = Immutable('row', 'y');\n var colInfo = Immutable('col', 'x');\n var rtlEdge = function (cell) {\n var pos = absolute(cell);\n return pos.left() + getOuter$1(cell);\n };\n var ltrEdge = function (cell) {\n return absolute(cell).left();\n };\n var getLeftEdge = function (index, cell) {\n return colInfo(index, ltrEdge(cell));\n };\n var getRightEdge = function (index, cell) {\n return colInfo(index, rtlEdge(cell));\n };\n var getTop = function (cell) {\n return absolute(cell).top();\n };\n var getTopEdge = function (index, cell) {\n return rowInfo(index, getTop(cell));\n };\n var getBottomEdge = function (index, cell) {\n return rowInfo(index, getTop(cell) + getOuter(cell));\n };\n var findPositions = function (getInnerEdge, getOuterEdge, array) {\n if (array.length === 0) {\n return [];\n }\n var lines = map(array.slice(1), function (cellOption, index) {\n return cellOption.map(function (cell) {\n return getInnerEdge(index, cell);\n });\n });\n var lastLine = array[array.length - 1].map(function (cell) {\n return getOuterEdge(array.length - 1, cell);\n });\n return lines.concat([lastLine]);\n };\n var negate = function (step) {\n return -step;\n };\n var height = {\n delta: identity,\n positions: function (optElements) {\n return findPositions(getTopEdge, getBottomEdge, optElements);\n },\n edge: getTop\n };\n var ltr = {\n delta: identity,\n edge: ltrEdge,\n positions: function (optElements) {\n return findPositions(getLeftEdge, getRightEdge, optElements);\n }\n };\n var rtl = {\n delta: negate,\n edge: rtlEdge,\n positions: function (optElements) {\n return findPositions(getRightEdge, getLeftEdge, optElements);\n }\n };\n var BarPositions = {\n height: height,\n rtl: rtl,\n ltr: ltr\n };\n\n var ResizeDirection = {\n ltr: BarPositions.ltr,\n rtl: BarPositions.rtl\n };\n\n function TableDirection (directionAt) {\n var auto = function (table) {\n return directionAt(table).isRtl() ? ResizeDirection.rtl : ResizeDirection.ltr;\n };\n var delta = function (amount, table) {\n return auto(table).delta(amount, table);\n };\n var positions = function (cols, table) {\n return auto(table).positions(cols, table);\n };\n var edge = function (cell) {\n return auto(cell).edge(cell);\n };\n return {\n delta: delta,\n edge: edge,\n positions: positions\n };\n }\n\n var getGridSize = function (table) {\n var input = DetailsList.fromTable(table);\n var warehouse = Warehouse.generate(input);\n return warehouse.grid();\n };\n var TableGridSize = { getGridSize: getGridSize };\n\n var __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n };\n\n var cat = function (arr) {\n var r = [];\n var push = function (x) {\n r.push(x);\n };\n for (var i = 0; i < arr.length; i++) {\n arr[i].each(push);\n }\n return r;\n };\n var findMap = function (arr, f) {\n for (var i = 0; i < arr.length; i++) {\n var r = f(arr[i], i);\n if (r.isSome()) {\n return r;\n }\n }\n return Option.none();\n };\n\n var setIfNot = function (element, property, value, ignore) {\n if (value === ignore) {\n remove(element, property);\n } else {\n set(element, property, value);\n }\n };\n var render = function (table, grid) {\n var newRows = [];\n var newCells = [];\n var renderSection = function (gridSection, sectionName) {\n var section = child$2(table, sectionName).getOrThunk(function () {\n var tb = Element.fromTag(sectionName, owner(table).dom());\n append(table, tb);\n return tb;\n });\n empty(section);\n var rows = map(gridSection, function (row) {\n if (row.isNew()) {\n newRows.push(row.element());\n }\n var tr = row.element();\n empty(tr);\n each(row.cells(), function (cell) {\n if (cell.isNew()) {\n newCells.push(cell.element());\n }\n setIfNot(cell.element(), 'colspan', cell.colspan(), 1);\n setIfNot(cell.element(), 'rowspan', cell.rowspan(), 1);\n append(tr, cell.element());\n });\n return tr;\n });\n append$1(section, rows);\n };\n var removeSection = function (sectionName) {\n child$2(table, sectionName).each(remove$2);\n };\n var renderOrRemoveSection = function (gridSection, sectionName) {\n if (gridSection.length > 0) {\n renderSection(gridSection, sectionName);\n } else {\n removeSection(sectionName);\n }\n };\n var headSection = [];\n var bodySection = [];\n var footSection = [];\n each(grid, function (row) {\n switch (row.section()) {\n case 'thead':\n headSection.push(row);\n break;\n case 'tbody':\n bodySection.push(row);\n break;\n case 'tfoot':\n footSection.push(row);\n break;\n }\n });\n renderOrRemoveSection(headSection, 'thead');\n renderOrRemoveSection(bodySection, 'tbody');\n renderOrRemoveSection(footSection, 'tfoot');\n return {\n newRows: constant(newRows),\n newCells: constant(newCells)\n };\n };\n var copy$2 = function (grid) {\n var rows = map(grid, function (row) {\n var tr = shallow(row.element());\n each(row.cells(), function (cell) {\n var clonedCell = deep(cell.element());\n setIfNot(clonedCell, 'colspan', cell.colspan(), 1);\n setIfNot(clonedCell, 'rowspan', cell.rowspan(), 1);\n append(tr, clonedCell);\n });\n return tr;\n });\n return rows;\n };\n var Redraw = {\n render: render,\n copy: copy$2\n };\n\n var read = function (element, attr) {\n var value = get(element, attr);\n return value === undefined || value === '' ? [] : value.split(' ');\n };\n var add = function (element, attr, id) {\n var old = read(element, attr);\n var nu = old.concat([id]);\n set(element, attr, nu.join(' '));\n return true;\n };\n var remove$3 = function (element, attr, id) {\n var nu = filter(read(element, attr), function (v) {\n return v !== id;\n });\n if (nu.length > 0) {\n set(element, attr, nu.join(' '));\n } else {\n remove(element, attr);\n }\n return false;\n };\n\n var supports = function (element) {\n return element.dom().classList !== undefined;\n };\n var get$6 = function (element) {\n return read(element, 'class');\n };\n var add$1 = function (element, clazz) {\n return add(element, 'class', clazz);\n };\n var remove$4 = function (element, clazz) {\n return remove$3(element, 'class', clazz);\n };\n\n var add$2 = function (element, clazz) {\n if (supports(element)) {\n element.dom().classList.add(clazz);\n } else {\n add$1(element, clazz);\n }\n };\n var cleanClass = function (element) {\n var classList = supports(element) ? element.dom().classList : get$6(element);\n if (classList.length === 0) {\n remove(element, 'class');\n }\n };\n var remove$5 = function (element, clazz) {\n if (supports(element)) {\n var classList = element.dom().classList;\n classList.remove(clazz);\n } else {\n remove$4(element, clazz);\n }\n cleanClass(element);\n };\n var has$1 = function (element, clazz) {\n return supports(element) && element.dom().classList.contains(clazz);\n };\n\n var repeat = function (repititions, f) {\n var r = [];\n for (var i = 0; i < repititions; i++) {\n r.push(f(i));\n }\n return r;\n };\n var range = function (start, end) {\n var r = [];\n for (var i = start; i < end; i++) {\n r.push(i);\n }\n return r;\n };\n var deduce = function (xs, index) {\n if (index < 0 || index >= xs.length - 1) {\n return Option.none();\n }\n var current = xs[index].fold(function () {\n var rest = reverse(xs.slice(0, index));\n return findMap(rest, function (a, i) {\n return a.map(function (aa) {\n return {\n value: aa,\n delta: i + 1\n };\n });\n });\n }, function (c) {\n return Option.some({\n value: c,\n delta: 0\n });\n });\n var next = xs[index + 1].fold(function () {\n var rest = xs.slice(index + 1);\n return findMap(rest, function (a, i) {\n return a.map(function (aa) {\n return {\n value: aa,\n delta: i + 1\n };\n });\n });\n }, function (n) {\n return Option.some({\n value: n,\n delta: 1\n });\n });\n return current.bind(function (c) {\n return next.map(function (n) {\n var extras = n.delta + c.delta;\n return Math.abs(n.value - c.value) / extras;\n });\n });\n };\n\n var columns = function (warehouse) {\n var grid = warehouse.grid();\n var cols = range(0, grid.columns());\n var rowsArr = range(0, grid.rows());\n return map(cols, function (col) {\n var getBlock = function () {\n return bind(rowsArr, function (r) {\n return Warehouse.getAt(warehouse, r, col).filter(function (detail) {\n return detail.column() === col;\n }).fold(constant([]), function (detail) {\n return [detail];\n });\n });\n };\n var isSingle = function (detail) {\n return detail.colspan() === 1;\n };\n var getFallback = function () {\n return Warehouse.getAt(warehouse, 0, col);\n };\n return decide(getBlock, isSingle, getFallback);\n });\n };\n var decide = function (getBlock, isSingle, getFallback) {\n var inBlock = getBlock();\n var singleInBlock = find(inBlock, isSingle);\n var detailOption = singleInBlock.orThunk(function () {\n return Option.from(inBlock[0]).orThunk(getFallback);\n });\n return detailOption.map(function (detail) {\n return detail.element();\n });\n };\n var rows$1 = function (warehouse) {\n var grid = warehouse.grid();\n var rowsArr = range(0, grid.rows());\n var cols = range(0, grid.columns());\n return map(rowsArr, function (row) {\n var getBlock = function () {\n return bind(cols, function (c) {\n return Warehouse.getAt(warehouse, row, c).filter(function (detail) {\n return detail.row() === row;\n }).fold(constant([]), function (detail) {\n return [detail];\n });\n });\n };\n var isSingle = function (detail) {\n return detail.rowspan() === 1;\n };\n var getFallback = function () {\n return Warehouse.getAt(warehouse, row, 0);\n };\n return decide(getBlock, isSingle, getFallback);\n });\n };\n var Blocks = {\n columns: columns,\n rows: rows$1\n };\n\n var css = function (namespace) {\n var dashNamespace = namespace.replace(/\\./g, '-');\n var resolve = function (str) {\n return dashNamespace + '-' + str;\n };\n return { resolve: resolve };\n };\n\n var styles = css('ephox-snooker');\n var Styles = { resolve: styles.resolve };\n\n var col = function (column, x, y, w, h) {\n var blocker = Element.fromTag('div');\n setAll$1(blocker, {\n position: 'absolute',\n left: x - w / 2 + 'px',\n top: y + 'px',\n height: h + 'px',\n width: w + 'px'\n });\n setAll(blocker, {\n 'data-column': column,\n 'role': 'presentation'\n });\n return blocker;\n };\n var row$1 = function (r, x, y, w, h) {\n var blocker = Element.fromTag('div');\n setAll$1(blocker, {\n position: 'absolute',\n left: x + 'px',\n top: y - h / 2 + 'px',\n height: h + 'px',\n width: w + 'px'\n });\n setAll(blocker, {\n 'data-row': r,\n 'role': 'presentation'\n });\n return blocker;\n };\n var Bar = {\n col: col,\n row: row$1\n };\n\n var resizeBar = Styles.resolve('resizer-bar');\n var resizeRowBar = Styles.resolve('resizer-rows');\n var resizeColBar = Styles.resolve('resizer-cols');\n var BAR_THICKNESS = 7;\n var destroy = function (wire) {\n var previous = descendants$1(wire.parent(), '.' + resizeBar);\n each(previous, remove$2);\n };\n var drawBar = function (wire, positions, create) {\n var origin = wire.origin();\n each(positions, function (cpOption, i) {\n cpOption.each(function (cp) {\n var bar = create(origin, cp);\n add$2(bar, resizeBar);\n append(wire.parent(), bar);\n });\n });\n };\n var refreshCol = function (wire, colPositions, position, tableHeight) {\n drawBar(wire, colPositions, function (origin, cp) {\n var colBar = Bar.col(cp.col(), cp.x() - origin.left(), position.top() - origin.top(), BAR_THICKNESS, tableHeight);\n add$2(colBar, resizeColBar);\n return colBar;\n });\n };\n var refreshRow = function (wire, rowPositions, position, tableWidth) {\n drawBar(wire, rowPositions, function (origin, cp) {\n var rowBar = Bar.row(cp.row(), position.left() - origin.left(), cp.y() - origin.top(), tableWidth, BAR_THICKNESS);\n add$2(rowBar, resizeRowBar);\n return rowBar;\n });\n };\n var refreshGrid = function (wire, table, rows, cols, hdirection, vdirection) {\n var position = absolute(table);\n var rowPositions = rows.length > 0 ? hdirection.positions(rows, table) : [];\n refreshRow(wire, rowPositions, position, getOuter$1(table));\n var colPositions = cols.length > 0 ? vdirection.positions(cols, table) : [];\n refreshCol(wire, colPositions, position, getOuter(table));\n };\n var refresh = function (wire, table, hdirection, vdirection) {\n destroy(wire);\n var list = DetailsList.fromTable(table);\n var warehouse = Warehouse.generate(list);\n var rows = Blocks.rows(warehouse);\n var cols = Blocks.columns(warehouse);\n refreshGrid(wire, table, rows, cols, hdirection, vdirection);\n };\n var each$2 = function (wire, f) {\n var bars = descendants$1(wire.parent(), '.' + resizeBar);\n each(bars, f);\n };\n var hide = function (wire) {\n each$2(wire, function (bar) {\n set$1(bar, 'display', 'none');\n });\n };\n var show = function (wire) {\n each$2(wire, function (bar) {\n set$1(bar, 'display', 'block');\n });\n };\n var isRowBar = function (element) {\n return has$1(element, resizeRowBar);\n };\n var isColBar = function (element) {\n return has$1(element, resizeColBar);\n };\n var Bars = {\n refresh: refresh,\n hide: hide,\n show: show,\n destroy: destroy,\n isRowBar: isRowBar,\n isColBar: isColBar\n };\n\n var addCell = function (gridRow, index, cell) {\n var cells = gridRow.cells();\n var before = cells.slice(0, index);\n var after = cells.slice(index);\n var newCells = before.concat([cell]).concat(after);\n return setCells(gridRow, newCells);\n };\n var mutateCell = function (gridRow, index, cell) {\n var cells = gridRow.cells();\n cells[index] = cell;\n };\n var setCells = function (gridRow, cells) {\n return rowcells(cells, gridRow.section());\n };\n var mapCells = function (gridRow, f) {\n var cells = gridRow.cells();\n var r = map(cells, f);\n return rowcells(r, gridRow.section());\n };\n var getCell = function (gridRow, index) {\n return gridRow.cells()[index];\n };\n var getCellElement = function (gridRow, index) {\n return getCell(gridRow, index).element();\n };\n var cellLength = function (gridRow) {\n return gridRow.cells().length;\n };\n var GridRow = {\n addCell: addCell,\n setCells: setCells,\n mutateCell: mutateCell,\n getCell: getCell,\n getCellElement: getCellElement,\n mapCells: mapCells,\n cellLength: cellLength\n };\n\n var getColumn = function (grid, index) {\n return map(grid, function (row) {\n return GridRow.getCell(row, index);\n });\n };\n var getRow = function (grid, index) {\n return grid[index];\n };\n var findDiff = function (xs, comp) {\n if (xs.length === 0) {\n return 0;\n }\n var first = xs[0];\n var index = findIndex(xs, function (x) {\n return !comp(first.element(), x.element());\n });\n return index.fold(function () {\n return xs.length;\n }, function (ind) {\n return ind;\n });\n };\n var subgrid = function (grid, row, column, comparator) {\n var restOfRow = getRow(grid, row).cells().slice(column);\n var endColIndex = findDiff(restOfRow, comparator);\n var restOfColumn = getColumn(grid, column).slice(row);\n var endRowIndex = findDiff(restOfColumn, comparator);\n return {\n colspan: constant(endColIndex),\n rowspan: constant(endRowIndex)\n };\n };\n var TableGrid = { subgrid: subgrid };\n\n var toDetails = function (grid, comparator) {\n var seen = map(grid, function (row, ri) {\n return map(row.cells(), function (col, ci) {\n return false;\n });\n });\n var updateSeen = function (ri, ci, rowspan, colspan) {\n for (var r = ri; r < ri + rowspan; r++) {\n for (var c = ci; c < ci + colspan; c++) {\n seen[r][c] = true;\n }\n }\n };\n return map(grid, function (row, ri) {\n var details = bind(row.cells(), function (cell, ci) {\n if (seen[ri][ci] === false) {\n var result = TableGrid.subgrid(grid, ri, ci, comparator);\n updateSeen(ri, ci, result.rowspan(), result.colspan());\n return [detailnew(cell.element(), result.rowspan(), result.colspan(), cell.isNew())];\n } else {\n return [];\n }\n });\n return rowdetails(details, row.section());\n });\n };\n var toGrid = function (warehouse, generators, isNew) {\n var grid = [];\n for (var i = 0; i < warehouse.grid().rows(); i++) {\n var rowCells = [];\n for (var j = 0; j < warehouse.grid().columns(); j++) {\n var element = Warehouse.getAt(warehouse, i, j).map(function (item) {\n return elementnew(item.element(), isNew);\n }).getOrThunk(function () {\n return elementnew(generators.gap(), true);\n });\n rowCells.push(element);\n }\n var row = rowcells(rowCells, warehouse.all()[i].section());\n grid.push(row);\n }\n return grid;\n };\n var Transitions = {\n toDetails: toDetails,\n toGrid: toGrid\n };\n\n var fromWarehouse = function (warehouse, generators) {\n return Transitions.toGrid(warehouse, generators, false);\n };\n var deriveRows = function (rendered, generators) {\n var findRow = function (details) {\n var rowOfCells = findMap(details, function (detail) {\n return parent(detail.element()).map(function (row) {\n var isNew = parent(row).isNone();\n return elementnew(row, isNew);\n });\n });\n return rowOfCells.getOrThunk(function () {\n return elementnew(generators.row(), true);\n });\n };\n return map(rendered, function (details) {\n var row = findRow(details.details());\n return rowdatanew(row.element(), details.details(), details.section(), row.isNew());\n });\n };\n var toDetailList = function (grid, generators) {\n var rendered = Transitions.toDetails(grid, eq);\n return deriveRows(rendered, generators);\n };\n var findInWarehouse = function (warehouse, element) {\n var all = flatten(map(warehouse.all(), function (r) {\n return r.cells();\n }));\n return find(all, function (e) {\n return eq(element, e.element());\n });\n };\n var run = function (operation, extract, adjustment, postAction, genWrappers) {\n return function (wire, table, target, generators, direction) {\n var input = DetailsList.fromTable(table);\n var warehouse = Warehouse.generate(input);\n var output = extract(warehouse, target).map(function (info) {\n var model = fromWarehouse(warehouse, generators);\n var result = operation(model, info, eq, genWrappers(generators));\n var grid = toDetailList(result.grid(), generators);\n return {\n grid: constant(grid),\n cursor: result.cursor\n };\n });\n return output.fold(function () {\n return Option.none();\n }, function (out) {\n var newElements = Redraw.render(table, out.grid());\n adjustment(table, out.grid(), direction);\n postAction(table);\n Bars.refresh(wire, table, BarPositions.height, direction);\n return Option.some({\n cursor: out.cursor,\n newRows: newElements.newRows,\n newCells: newElements.newCells\n });\n });\n };\n };\n var onCell = function (warehouse, target) {\n return TableLookup.cell(target.element()).bind(function (cell) {\n return findInWarehouse(warehouse, cell);\n });\n };\n var onPaste = function (warehouse, target) {\n return TableLookup.cell(target.element()).bind(function (cell) {\n return findInWarehouse(warehouse, cell).map(function (details) {\n var value = __assign(__assign({}, details), {\n generators: target.generators,\n clipboard: target.clipboard\n });\n return value;\n });\n });\n };\n var onPasteRows = function (warehouse, target) {\n var details = map(target.selection(), function (cell) {\n return TableLookup.cell(cell).bind(function (lc) {\n return findInWarehouse(warehouse, lc);\n });\n });\n var cells = cat(details);\n return cells.length > 0 ? Option.some({\n cells: cells,\n generators: target.generators,\n clipboard: target.clipboard\n }) : Option.none();\n };\n var onMergable = function (_warehouse, target) {\n return target.mergable();\n };\n var onUnmergable = function (_warehouse, target) {\n return target.unmergable();\n };\n var onCells = function (warehouse, target) {\n var details = map(target.selection(), function (cell) {\n return TableLookup.cell(cell).bind(function (lc) {\n return findInWarehouse(warehouse, lc);\n });\n });\n var cells = cat(details);\n return cells.length > 0 ? Option.some(cells) : Option.none();\n };\n\n var value = function (o) {\n var is = function (v) {\n return o === v;\n };\n var or = function (opt) {\n return value(o);\n };\n var orThunk = function (f) {\n return value(o);\n };\n var map = function (f) {\n return value(f(o));\n };\n var mapError = function (f) {\n return value(o);\n };\n var each = function (f) {\n f(o);\n };\n var bind = function (f) {\n return f(o);\n };\n var fold = function (_, onValue) {\n return onValue(o);\n };\n var exists = function (f) {\n return f(o);\n };\n var forall = function (f) {\n return f(o);\n };\n var toOption = function () {\n return Option.some(o);\n };\n return {\n is: is,\n isValue: always,\n isError: never,\n getOr: constant(o),\n getOrThunk: constant(o),\n getOrDie: constant(o),\n or: or,\n orThunk: orThunk,\n fold: fold,\n map: map,\n mapError: mapError,\n each: each,\n bind: bind,\n exists: exists,\n forall: forall,\n toOption: toOption\n };\n };\n var error = function (message) {\n var getOrThunk = function (f) {\n return f();\n };\n var getOrDie = function () {\n return die(String(message))();\n };\n var or = function (opt) {\n return opt;\n };\n var orThunk = function (f) {\n return f();\n };\n var map = function (f) {\n return error(message);\n };\n var mapError = function (f) {\n return error(f(message));\n };\n var bind = function (f) {\n return error(message);\n };\n var fold = function (onError, _) {\n return onError(message);\n };\n return {\n is: never,\n isValue: never,\n isError: always,\n getOr: identity,\n getOrThunk: getOrThunk,\n getOrDie: getOrDie,\n or: or,\n orThunk: orThunk,\n fold: fold,\n map: map,\n mapError: mapError,\n each: noop,\n bind: bind,\n exists: never,\n forall: always,\n toOption: Option.none\n };\n };\n var fromOption = function (opt, err) {\n return opt.fold(function () {\n return error(err);\n }, value);\n };\n var Result = {\n value: value,\n error: error,\n fromOption: fromOption\n };\n\n var measure = function (startAddress, gridA, gridB) {\n if (startAddress.row() >= gridA.length || startAddress.column() > GridRow.cellLength(gridA[0])) {\n return Result.error('invalid start address out of table bounds, row: ' + startAddress.row() + ', column: ' + startAddress.column());\n }\n var rowRemainder = gridA.slice(startAddress.row());\n var colRemainder = rowRemainder[0].cells().slice(startAddress.column());\n var colRequired = GridRow.cellLength(gridB[0]);\n var rowRequired = gridB.length;\n return Result.value({\n rowDelta: constant(rowRemainder.length - rowRequired),\n colDelta: constant(colRemainder.length - colRequired)\n });\n };\n var measureWidth = function (gridA, gridB) {\n var colLengthA = GridRow.cellLength(gridA[0]);\n var colLengthB = GridRow.cellLength(gridB[0]);\n return {\n rowDelta: constant(0),\n colDelta: constant(colLengthA - colLengthB)\n };\n };\n var fill = function (cells, generator) {\n return map(cells, function () {\n return elementnew(generator.cell(), true);\n });\n };\n var rowFill = function (grid, amount, generator) {\n return grid.concat(repeat(amount, function (_row) {\n return GridRow.setCells(grid[grid.length - 1], fill(grid[grid.length - 1].cells(), generator));\n }));\n };\n var colFill = function (grid, amount, generator) {\n return map(grid, function (row) {\n return GridRow.setCells(row, row.cells().concat(fill(range(0, amount), generator)));\n });\n };\n var tailor = function (gridA, delta, generator) {\n var fillCols = delta.colDelta() < 0 ? colFill : identity;\n var fillRows = delta.rowDelta() < 0 ? rowFill : identity;\n var modifiedCols = fillCols(gridA, Math.abs(delta.colDelta()), generator);\n var tailoredGrid = fillRows(modifiedCols, Math.abs(delta.rowDelta()), generator);\n return tailoredGrid;\n };\n var Fitment = {\n measure: measure,\n measureWidth: measureWidth,\n tailor: tailor\n };\n\n var merge = function (grid, bounds, comparator, substitution) {\n if (grid.length === 0) {\n return grid;\n }\n for (var i = bounds.startRow(); i <= bounds.finishRow(); i++) {\n for (var j = bounds.startCol(); j <= bounds.finishCol(); j++) {\n GridRow.mutateCell(grid[i], j, elementnew(substitution(), false));\n }\n }\n return grid;\n };\n var unmerge = function (grid, target, comparator, substitution) {\n var first = true;\n for (var i = 0; i < grid.length; i++) {\n for (var j = 0; j < GridRow.cellLength(grid[0]); j++) {\n var current = GridRow.getCellElement(grid[i], j);\n var isToReplace = comparator(current, target);\n if (isToReplace === true && first === false) {\n GridRow.mutateCell(grid[i], j, elementnew(substitution(), true));\n } else if (isToReplace === true) {\n first = false;\n }\n }\n }\n return grid;\n };\n var uniqueCells = function (row, comparator) {\n return foldl(row, function (rest, cell) {\n return exists(rest, function (currentCell) {\n return comparator(currentCell.element(), cell.element());\n }) ? rest : rest.concat([cell]);\n }, []);\n };\n var splitRows = function (grid, index, comparator, substitution) {\n if (index > 0 && index < grid.length) {\n var rowPrevCells = grid[index - 1].cells();\n var cells = uniqueCells(rowPrevCells, comparator);\n each(cells, function (cell) {\n var replacement = Option.none();\n var _loop_1 = function (i) {\n var _loop_2 = function (j) {\n var current = grid[i].cells()[j];\n var isToReplace = comparator(current.element(), cell.element());\n if (isToReplace) {\n if (replacement.isNone()) {\n replacement = Option.some(substitution());\n }\n replacement.each(function (sub) {\n GridRow.mutateCell(grid[i], j, elementnew(sub, true));\n });\n }\n };\n for (var j = 0; j < GridRow.cellLength(grid[0]); j++) {\n _loop_2(j);\n }\n };\n for (var i = index; i < grid.length; i++) {\n _loop_1(i);\n }\n });\n }\n return grid;\n };\n var MergingOperations = {\n merge: merge,\n unmerge: unmerge,\n splitRows: splitRows\n };\n\n var isSpanning = function (grid, row, col, comparator) {\n var candidate = GridRow.getCell(grid[row], col);\n var matching = curry(comparator, candidate.element());\n var currentRow = grid[row];\n return grid.length > 1 && GridRow.cellLength(currentRow) > 1 && (col > 0 && matching(GridRow.getCellElement(currentRow, col - 1)) || col < currentRow.cells().length - 1 && matching(GridRow.getCellElement(currentRow, col + 1)) || row > 0 && matching(GridRow.getCellElement(grid[row - 1], col)) || row < grid.length - 1 && matching(GridRow.getCellElement(grid[row + 1], col)));\n };\n var mergeTables = function (startAddress, gridA, gridB, generator, comparator) {\n var startRow = startAddress.row();\n var startCol = startAddress.column();\n var mergeHeight = gridB.length;\n var mergeWidth = GridRow.cellLength(gridB[0]);\n var endRow = startRow + mergeHeight;\n var endCol = startCol + mergeWidth;\n for (var r = startRow; r < endRow; r++) {\n for (var c = startCol; c < endCol; c++) {\n if (isSpanning(gridA, r, c, comparator)) {\n MergingOperations.unmerge(gridA, GridRow.getCellElement(gridA[r], c), comparator, generator.cell);\n }\n var newCell = GridRow.getCellElement(gridB[r - startRow], c - startCol);\n var replacement = generator.replace(newCell);\n GridRow.mutateCell(gridA[r], c, elementnew(replacement, true));\n }\n }\n return gridA;\n };\n var merge$1 = function (startAddress, gridA, gridB, generator, comparator) {\n var result = Fitment.measure(startAddress, gridA, gridB);\n return result.map(function (delta) {\n var fittedGrid = Fitment.tailor(gridA, delta, generator);\n return mergeTables(startAddress, fittedGrid, gridB, generator, comparator);\n });\n };\n var insert = function (index, gridA, gridB, generator, comparator) {\n MergingOperations.splitRows(gridA, index, comparator, generator.cell);\n var delta = Fitment.measureWidth(gridB, gridA);\n var fittedNewGrid = Fitment.tailor(gridB, delta, generator);\n var secondDelta = Fitment.measureWidth(gridA, fittedNewGrid);\n var fittedOldGrid = Fitment.tailor(gridA, secondDelta, generator);\n return fittedOldGrid.slice(0, index).concat(fittedNewGrid).concat(fittedOldGrid.slice(index, fittedOldGrid.length));\n };\n var TableMerge = {\n merge: merge$1,\n insert: insert\n };\n\n var insertRowAt = function (grid, index, example, comparator, substitution) {\n var before = grid.slice(0, index);\n var after = grid.slice(index);\n var between = GridRow.mapCells(grid[example], function (ex, c) {\n var withinSpan = index > 0 && index < grid.length && comparator(GridRow.getCellElement(grid[index - 1], c), GridRow.getCellElement(grid[index], c));\n var ret = withinSpan ? GridRow.getCell(grid[index], c) : elementnew(substitution(ex.element(), comparator), true);\n return ret;\n });\n return before.concat([between]).concat(after);\n };\n var insertColumnAt = function (grid, index, example, comparator, substitution) {\n return map(grid, function (row) {\n var withinSpan = index > 0 && index < GridRow.cellLength(row) && comparator(GridRow.getCellElement(row, index - 1), GridRow.getCellElement(row, index));\n var sub = withinSpan ? GridRow.getCell(row, index) : elementnew(substitution(GridRow.getCellElement(row, example), comparator), true);\n return GridRow.addCell(row, index, sub);\n });\n };\n var splitCellIntoColumns = function (grid, exampleRow, exampleCol, comparator, substitution) {\n var index = exampleCol + 1;\n return map(grid, function (row, i) {\n var isTargetCell = i === exampleRow;\n var sub = isTargetCell ? elementnew(substitution(GridRow.getCellElement(row, exampleCol), comparator), true) : GridRow.getCell(row, exampleCol);\n return GridRow.addCell(row, index, sub);\n });\n };\n var splitCellIntoRows = function (grid, exampleRow, exampleCol, comparator, substitution) {\n var index = exampleRow + 1;\n var before = grid.slice(0, index);\n var after = grid.slice(index);\n var between = GridRow.mapCells(grid[exampleRow], function (ex, i) {\n var isTargetCell = i === exampleCol;\n return isTargetCell ? elementnew(substitution(ex.element(), comparator), true) : ex;\n });\n return before.concat([between]).concat(after);\n };\n var deleteColumnsAt = function (grid, start, finish) {\n var rows = map(grid, function (row) {\n var cells = row.cells().slice(0, start).concat(row.cells().slice(finish + 1));\n return rowcells(cells, row.section());\n });\n return filter(rows, function (row) {\n return row.cells().length > 0;\n });\n };\n var deleteRowsAt = function (grid, start, finish) {\n return grid.slice(0, start).concat(grid.slice(finish + 1));\n };\n var ModificationOperations = {\n insertRowAt: insertRowAt,\n insertColumnAt: insertColumnAt,\n splitCellIntoColumns: splitCellIntoColumns,\n splitCellIntoRows: splitCellIntoRows,\n deleteRowsAt: deleteRowsAt,\n deleteColumnsAt: deleteColumnsAt\n };\n\n var replaceIn = function (grid, targets, comparator, substitution) {\n var isTarget = function (cell) {\n return exists(targets, function (target) {\n return comparator(cell.element(), target.element());\n });\n };\n return map(grid, function (row) {\n return GridRow.mapCells(row, function (cell) {\n return isTarget(cell) ? elementnew(substitution(cell.element(), comparator), true) : cell;\n });\n });\n };\n var notStartRow = function (grid, rowIndex, colIndex, comparator) {\n return GridRow.getCellElement(grid[rowIndex], colIndex) !== undefined && (rowIndex > 0 && comparator(GridRow.getCellElement(grid[rowIndex - 1], colIndex), GridRow.getCellElement(grid[rowIndex], colIndex)));\n };\n var notStartColumn = function (row, index, comparator) {\n return index > 0 && comparator(GridRow.getCellElement(row, index - 1), GridRow.getCellElement(row, index));\n };\n var replaceColumn = function (grid, index, comparator, substitution) {\n var targets = bind(grid, function (row, i) {\n var alreadyAdded = notStartRow(grid, i, index, comparator) || notStartColumn(row, index, comparator);\n return alreadyAdded ? [] : [GridRow.getCell(row, index)];\n });\n return replaceIn(grid, targets, comparator, substitution);\n };\n var replaceRow = function (grid, index, comparator, substitution) {\n var targetRow = grid[index];\n var targets = bind(targetRow.cells(), function (item, i) {\n var alreadyAdded = notStartRow(grid, index, i, comparator) || notStartColumn(targetRow, i, comparator);\n return alreadyAdded ? [] : [item];\n });\n return replaceIn(grid, targets, comparator, substitution);\n };\n var TransformOperations = {\n replaceColumn: replaceColumn,\n replaceRow: replaceRow\n };\n\n var adt = Adt.generate([\n { none: [] },\n { only: ['index'] },\n {\n left: [\n 'index',\n 'next'\n ]\n },\n {\n middle: [\n 'prev',\n 'index',\n 'next'\n ]\n },\n {\n right: [\n 'prev',\n 'index'\n ]\n }\n ]);\n var ColumnContext = __assign({}, adt);\n\n var neighbours$1 = function (input, index) {\n if (input.length === 0) {\n return ColumnContext.none();\n }\n if (input.length === 1) {\n return ColumnContext.only(0);\n }\n if (index === 0) {\n return ColumnContext.left(0, 1);\n }\n if (index === input.length - 1) {\n return ColumnContext.right(index - 1, index);\n }\n if (index > 0 && index < input.length - 1) {\n return ColumnContext.middle(index - 1, index, index + 1);\n }\n return ColumnContext.none();\n };\n var determine = function (input, column, step, tableSize) {\n var result = input.slice(0);\n var context = neighbours$1(input, column);\n var zero = function (array) {\n return map(array, constant(0));\n };\n var onNone = constant(zero(result));\n var onOnly = function (index) {\n return tableSize.singleColumnWidth(result[index], step);\n };\n var onChange = function (index, next) {\n if (step >= 0) {\n var newNext = Math.max(tableSize.minCellWidth(), result[next] - step);\n return zero(result.slice(0, index)).concat([\n step,\n newNext - result[next]\n ]).concat(zero(result.slice(next + 1)));\n } else {\n var newThis = Math.max(tableSize.minCellWidth(), result[index] + step);\n var diffx = result[index] - newThis;\n return zero(result.slice(0, index)).concat([\n newThis - result[index],\n diffx\n ]).concat(zero(result.slice(next + 1)));\n }\n };\n var onLeft = onChange;\n var onMiddle = function (_prev, index, next) {\n return onChange(index, next);\n };\n var onRight = function (_prev, index) {\n if (step >= 0) {\n return zero(result.slice(0, index)).concat([step]);\n } else {\n var size = Math.max(tableSize.minCellWidth(), result[index] + step);\n return zero(result.slice(0, index)).concat([size - result[index]]);\n }\n };\n return context.fold(onNone, onOnly, onLeft, onMiddle, onRight);\n };\n var Deltas = { determine: determine };\n\n var getSpan$1 = function (cell, type) {\n return has(cell, type) && parseInt(get(cell, type), 10) > 1;\n };\n var hasColspan = function (cell) {\n return getSpan$1(cell, 'colspan');\n };\n var hasRowspan = function (cell) {\n return getSpan$1(cell, 'rowspan');\n };\n var getInt = function (element, property) {\n return parseInt(get$1(element, property), 10);\n };\n var CellUtils = {\n hasColspan: hasColspan,\n hasRowspan: hasRowspan,\n minWidth: constant(10),\n minHeight: constant(10),\n getInt: getInt\n };\n\n var getRaw$1 = function (cell, property, getter) {\n return getRaw(cell, property).fold(function () {\n return getter(cell) + 'px';\n }, function (raw) {\n return raw;\n });\n };\n var getRawW = function (cell, tableSize) {\n return getRaw$1(cell, 'width', function (e) {\n return Sizes.getPixelWidth(e, tableSize);\n });\n };\n var getRawH = function (cell) {\n return getRaw$1(cell, 'height', Sizes.getHeight);\n };\n var getWidthFrom = function (warehouse, direction, getWidth, fallback, tableSize) {\n var columns = Blocks.columns(warehouse);\n var backups = map(columns, function (cellOption) {\n return cellOption.map(direction.edge);\n });\n return map(columns, function (cellOption, c) {\n var columnCell = cellOption.filter(not(CellUtils.hasColspan));\n return columnCell.fold(function () {\n var deduced = deduce(backups, c);\n return fallback(deduced);\n }, function (cell) {\n return getWidth(cell, tableSize);\n });\n });\n };\n var getDeduced = function (deduced) {\n return deduced.map(function (d) {\n return d + 'px';\n }).getOr('');\n };\n var getRawWidths = function (warehouse, direction, tableSize) {\n return getWidthFrom(warehouse, direction, getRawW, getDeduced, tableSize);\n };\n var getPercentageWidths = function (warehouse, direction, tableSize) {\n return getWidthFrom(warehouse, direction, Sizes.getPercentageWidth, function (deduced) {\n return deduced.fold(function () {\n return tableSize.minCellWidth();\n }, function (cellWidth) {\n return cellWidth / tableSize.pixelWidth() * 100;\n });\n }, tableSize);\n };\n var getPixelWidths = function (warehouse, direction, tableSize) {\n return getWidthFrom(warehouse, direction, Sizes.getPixelWidth, function (deduced) {\n return deduced.getOrThunk(tableSize.minCellWidth);\n }, tableSize);\n };\n var getHeightFrom = function (warehouse, direction, getHeight, fallback) {\n var rows = Blocks.rows(warehouse);\n var backups = map(rows, function (cellOption) {\n return cellOption.map(direction.edge);\n });\n return map(rows, function (cellOption, c) {\n var rowCell = cellOption.filter(not(CellUtils.hasRowspan));\n return rowCell.fold(function () {\n var deduced = deduce(backups, c);\n return fallback(deduced);\n }, function (cell) {\n return getHeight(cell);\n });\n });\n };\n var getPixelHeights = function (warehouse, direction) {\n return getHeightFrom(warehouse, direction, Sizes.getHeight, function (deduced) {\n return deduced.getOrThunk(CellUtils.minHeight);\n });\n };\n var getRawHeights = function (warehouse, direction) {\n return getHeightFrom(warehouse, direction, getRawH, getDeduced);\n };\n var ColumnSizes = {\n getRawWidths: getRawWidths,\n getPixelWidths: getPixelWidths,\n getPercentageWidths: getPercentageWidths,\n getPixelHeights: getPixelHeights,\n getRawHeights: getRawHeights\n };\n\n var total = function (start, end, measures) {\n var r = 0;\n for (var i = start; i < end; i++) {\n r += measures[i] !== undefined ? measures[i] : 0;\n }\n return r;\n };\n var recalculateWidth = function (warehouse, widths) {\n var all = Warehouse.justCells(warehouse);\n return map(all, function (cell) {\n var width = total(cell.column(), cell.column() + cell.colspan(), widths);\n return {\n element: cell.element,\n width: constant(width),\n colspan: cell.colspan\n };\n });\n };\n var recalculateHeight = function (warehouse, heights) {\n var all = Warehouse.justCells(warehouse);\n return map(all, function (cell) {\n var height = total(cell.row(), cell.row() + cell.rowspan(), heights);\n return {\n element: cell.element,\n height: constant(height),\n rowspan: cell.rowspan\n };\n });\n };\n var matchRowHeight = function (warehouse, heights) {\n return map(warehouse.all(), function (row, i) {\n return {\n element: row.element,\n height: constant(heights[i])\n };\n });\n };\n var Recalculations = {\n recalculateWidth: recalculateWidth,\n recalculateHeight: recalculateHeight,\n matchRowHeight: matchRowHeight\n };\n\n var percentageSize = function (width, element) {\n var floatWidth = parseFloat(width);\n var pixelWidth = get$4(element);\n var getCellDelta = function (delta) {\n return delta / pixelWidth * 100;\n };\n var singleColumnWidth = function (w, _delta) {\n return [100 - w];\n };\n var minCellWidth = function () {\n return CellUtils.minWidth() / pixelWidth * 100;\n };\n var setTableWidth = function (table, _newWidths, delta) {\n var ratio = delta / 100;\n var change = ratio * floatWidth;\n Sizes.setPercentageWidth(table, floatWidth + change);\n };\n return {\n width: constant(floatWidth),\n pixelWidth: constant(pixelWidth),\n getWidths: ColumnSizes.getPercentageWidths,\n getCellDelta: getCellDelta,\n singleColumnWidth: singleColumnWidth,\n minCellWidth: minCellWidth,\n setElementWidth: Sizes.setPercentageWidth,\n setTableWidth: setTableWidth\n };\n };\n var pixelSize = function (width) {\n var getCellDelta = identity;\n var singleColumnWidth = function (w, delta) {\n var newNext = Math.max(CellUtils.minWidth(), w + delta);\n return [newNext - w];\n };\n var setTableWidth = function (table, newWidths, _delta) {\n var total = foldr(newWidths, function (b, a) {\n return b + a;\n }, 0);\n Sizes.setPixelWidth(table, total);\n };\n return {\n width: constant(width),\n pixelWidth: constant(width),\n getWidths: ColumnSizes.getPixelWidths,\n getCellDelta: getCellDelta,\n singleColumnWidth: singleColumnWidth,\n minCellWidth: CellUtils.minWidth,\n setElementWidth: Sizes.setPixelWidth,\n setTableWidth: setTableWidth\n };\n };\n var chooseSize = function (element, width) {\n var percentMatch = Sizes.percentageBasedSizeRegex().exec(width);\n if (percentMatch !== null) {\n return percentageSize(percentMatch[1], element);\n }\n var pixelMatch = Sizes.pixelBasedSizeRegex().exec(width);\n if (pixelMatch !== null) {\n var intWidth = parseInt(pixelMatch[1], 10);\n return pixelSize(intWidth);\n }\n var fallbackWidth = get$4(element);\n return pixelSize(fallbackWidth);\n };\n var getTableSize = function (element) {\n var width = Sizes.getRawWidth(element);\n return width.fold(function () {\n var fallbackWidth = get$4(element);\n return pixelSize(fallbackWidth);\n }, function (w) {\n return chooseSize(element, w);\n });\n };\n var TableSize = { getTableSize: getTableSize };\n\n var getWarehouse$1 = function (list) {\n return Warehouse.generate(list);\n };\n var sumUp = function (newSize) {\n return foldr(newSize, function (b, a) {\n return b + a;\n }, 0);\n };\n var getTableWarehouse = function (table) {\n var list = DetailsList.fromTable(table);\n return getWarehouse$1(list);\n };\n var adjustWidth = function (table, delta, index, direction) {\n var tableSize = TableSize.getTableSize(table);\n var step = tableSize.getCellDelta(delta);\n var warehouse = getTableWarehouse(table);\n var widths = tableSize.getWidths(warehouse, direction, tableSize);\n var deltas = Deltas.determine(widths, index, step, tableSize);\n var newWidths = map(deltas, function (dx, i) {\n return dx + widths[i];\n });\n var newSizes = Recalculations.recalculateWidth(warehouse, newWidths);\n each(newSizes, function (cell) {\n tableSize.setElementWidth(cell.element(), cell.width());\n });\n if (index === warehouse.grid().columns() - 1) {\n tableSize.setTableWidth(table, newWidths, step);\n }\n };\n var adjustHeight = function (table, delta, index, direction) {\n var warehouse = getTableWarehouse(table);\n var heights = ColumnSizes.getPixelHeights(warehouse, direction);\n var newHeights = map(heights, function (dy, i) {\n return index === i ? Math.max(delta + dy, CellUtils.minHeight()) : dy;\n });\n var newCellSizes = Recalculations.recalculateHeight(warehouse, newHeights);\n var newRowSizes = Recalculations.matchRowHeight(warehouse, newHeights);\n each(newRowSizes, function (row) {\n Sizes.setHeight(row.element(), row.height());\n });\n each(newCellSizes, function (cell) {\n Sizes.setHeight(cell.element(), cell.height());\n });\n var total = sumUp(newHeights);\n Sizes.setHeight(table, total);\n };\n var adjustWidthTo = function (table, list, direction) {\n var tableSize = TableSize.getTableSize(table);\n var warehouse = getWarehouse$1(list);\n var widths = tableSize.getWidths(warehouse, direction, tableSize);\n var newSizes = Recalculations.recalculateWidth(warehouse, widths);\n each(newSizes, function (cell) {\n tableSize.setElementWidth(cell.element(), cell.width());\n });\n if (newSizes.length > 0) {\n tableSize.setTableWidth(table, widths, tableSize.getCellDelta(0));\n }\n };\n var Adjustments = {\n adjustWidth: adjustWidth,\n adjustHeight: adjustHeight,\n adjustWidthTo: adjustWidthTo\n };\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n var clone = function () {\n return Cell(get());\n };\n return {\n get: get,\n set: set,\n clone: clone\n };\n };\n\n var base = function (handleUnsupported, required) {\n return baseWith(handleUnsupported, required, {\n validate: isFunction,\n label: 'function'\n });\n };\n var baseWith = function (handleUnsupported, required, pred) {\n if (required.length === 0) {\n throw new Error('You must specify at least one required field.');\n }\n validateStrArr('required', required);\n checkDupes(required);\n return function (obj) {\n var keys$1 = keys(obj);\n var allReqd = forall(required, function (req) {\n return contains(keys$1, req);\n });\n if (!allReqd) {\n reqMessage(required, keys$1);\n }\n handleUnsupported(required, keys$1);\n var invalidKeys = filter(required, function (key) {\n return !pred.validate(obj[key], key);\n });\n if (invalidKeys.length > 0) {\n invalidTypeMessage(invalidKeys, pred.label);\n }\n return obj;\n };\n };\n var handleExact = function (required, keys) {\n var unsupported = filter(keys, function (key) {\n return !contains(required, key);\n });\n if (unsupported.length > 0) {\n unsuppMessage(unsupported);\n }\n };\n var exactly = function (required) {\n return base(handleExact, required);\n };\n\n var verifyGenerators = exactly([\n 'cell',\n 'row',\n 'replace',\n 'gap'\n ]);\n var elementToData = function (element) {\n var colspan = has(element, 'colspan') ? parseInt(get(element, 'colspan'), 10) : 1;\n var rowspan = has(element, 'rowspan') ? parseInt(get(element, 'rowspan'), 10) : 1;\n return {\n element: constant(element),\n colspan: constant(colspan),\n rowspan: constant(rowspan)\n };\n };\n var modification = function (generators, toData) {\n if (toData === void 0) {\n toData = elementToData;\n }\n verifyGenerators(generators);\n var position = Cell(Option.none());\n var nu = function (data) {\n return generators.cell(data);\n };\n var nuFrom = function (element) {\n var data = toData(element);\n return nu(data);\n };\n var add = function (element) {\n var replacement = nuFrom(element);\n if (position.get().isNone()) {\n position.set(Option.some(replacement));\n }\n recent = Option.some({\n item: element,\n replacement: replacement\n });\n return replacement;\n };\n var recent = Option.none();\n var getOrInit = function (element, comparator) {\n return recent.fold(function () {\n return add(element);\n }, function (p) {\n return comparator(element, p.item) ? p.replacement : add(element);\n });\n };\n return {\n getOrInit: getOrInit,\n cursor: position.get\n };\n };\n var transform = function (scope, tag) {\n return function (generators) {\n var position = Cell(Option.none());\n verifyGenerators(generators);\n var list = [];\n var find$1 = function (element, comparator) {\n return find(list, function (x) {\n return comparator(x.item, element);\n });\n };\n var makeNew = function (element) {\n var attrs = { scope: scope };\n var cell = generators.replace(element, tag, attrs);\n list.push({\n item: element,\n sub: cell\n });\n if (position.get().isNone()) {\n position.set(Option.some(cell));\n }\n return cell;\n };\n var replaceOrInit = function (element, comparator) {\n return find$1(element, comparator).fold(function () {\n return makeNew(element);\n }, function (p) {\n return comparator(element, p.item) ? p.sub : makeNew(element);\n });\n };\n return {\n replaceOrInit: replaceOrInit,\n cursor: position.get\n };\n };\n };\n var merging = function (generators) {\n verifyGenerators(generators);\n var position = Cell(Option.none());\n var combine = function (cell) {\n if (position.get().isNone()) {\n position.set(Option.some(cell));\n }\n return function () {\n var raw = generators.cell({\n element: constant(cell),\n colspan: constant(1),\n rowspan: constant(1)\n });\n remove$1(raw, 'width');\n remove$1(cell, 'width');\n return raw;\n };\n };\n return {\n combine: combine,\n cursor: position.get\n };\n };\n var Generators = {\n modification: modification,\n transform: transform,\n merging: merging\n };\n\n var blockList = [\n 'body',\n 'p',\n 'div',\n 'article',\n 'aside',\n 'figcaption',\n 'figure',\n 'footer',\n 'header',\n 'nav',\n 'section',\n 'ol',\n 'ul',\n 'table',\n 'thead',\n 'tfoot',\n 'tbody',\n 'caption',\n 'tr',\n 'td',\n 'th',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'blockquote',\n 'pre',\n 'address'\n ];\n var isList = function (universe, item) {\n var tagName = universe.property().name(item);\n return contains([\n 'ol',\n 'ul'\n ], tagName);\n };\n var isBlock = function (universe, item) {\n var tagName = universe.property().name(item);\n return contains(blockList, tagName);\n };\n var isFormatting = function (universe, item) {\n var tagName = universe.property().name(item);\n return contains([\n 'address',\n 'pre',\n 'p',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6'\n ], tagName);\n };\n var isHeading = function (universe, item) {\n var tagName = universe.property().name(item);\n return contains([\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6'\n ], tagName);\n };\n var isContainer = function (universe, item) {\n return contains([\n 'div',\n 'li',\n 'td',\n 'th',\n 'blockquote',\n 'body',\n 'caption'\n ], universe.property().name(item));\n };\n var isEmptyTag = function (universe, item) {\n return contains([\n 'br',\n 'img',\n 'hr',\n 'input'\n ], universe.property().name(item));\n };\n var isFrame = function (universe, item) {\n return universe.property().name(item) === 'iframe';\n };\n var isInline = function (universe, item) {\n return !(isBlock(universe, item) || isEmptyTag(universe, item)) && universe.property().name(item) !== 'li';\n };\n var Structure = {\n isBlock: isBlock,\n isList: isList,\n isFormatting: isFormatting,\n isHeading: isHeading,\n isContainer: isContainer,\n isEmptyTag: isEmptyTag,\n isFrame: isFrame,\n isInline: isInline\n };\n\n var universe$1 = DomUniverse();\n var isBlock$1 = function (element) {\n return Structure.isBlock(universe$1, element);\n };\n var isList$1 = function (element) {\n return Structure.isList(universe$1, element);\n };\n var isFormatting$1 = function (element) {\n return Structure.isFormatting(universe$1, element);\n };\n var isHeading$1 = function (element) {\n return Structure.isHeading(universe$1, element);\n };\n var isContainer$1 = function (element) {\n return Structure.isContainer(universe$1, element);\n };\n var isEmptyTag$1 = function (element) {\n return Structure.isEmptyTag(universe$1, element);\n };\n var isFrame$1 = function (element) {\n return Structure.isFrame(universe$1, element);\n };\n var isInline$1 = function (element) {\n return Structure.isInline(universe$1, element);\n };\n var DomStructure = {\n isBlock: isBlock$1,\n isList: isList$1,\n isFormatting: isFormatting$1,\n isHeading: isHeading$1,\n isContainer: isContainer$1,\n isEmptyTag: isEmptyTag$1,\n isFrame: isFrame$1,\n isInline: isInline$1\n };\n\n var merge$2 = function (cells) {\n var isBr = function (el) {\n return name(el) === 'br';\n };\n var advancedBr = function (children) {\n return forall(children, function (c) {\n return isBr(c) || isText(c) && get$2(c).trim().length === 0;\n });\n };\n var isListItem = function (el) {\n return name(el) === 'li' || ancestor(el, DomStructure.isList).isSome();\n };\n var siblingIsBlock = function (el) {\n return nextSibling(el).map(function (rightSibling) {\n if (DomStructure.isBlock(rightSibling)) {\n return true;\n }\n if (DomStructure.isEmptyTag(rightSibling)) {\n return name(rightSibling) === 'img' ? false : true;\n }\n return false;\n }).getOr(false);\n };\n var markCell = function (cell) {\n return last$1(cell).bind(function (rightEdge) {\n var rightSiblingIsBlock = siblingIsBlock(rightEdge);\n return parent(rightEdge).map(function (parent) {\n return rightSiblingIsBlock === true || isListItem(parent) || isBr(rightEdge) || DomStructure.isBlock(parent) && !eq(cell, parent) ? [] : [Element.fromTag('br')];\n });\n }).getOr([]);\n };\n var markContent = function () {\n var content = bind(cells, function (cell) {\n var children$1 = children(cell);\n return advancedBr(children$1) ? [] : children$1.concat(markCell(cell));\n });\n return content.length === 0 ? [Element.fromTag('br')] : content;\n };\n var contents = markContent();\n empty(cells[0]);\n append$1(cells[0], contents);\n };\n var TableContent = { merge: merge$2 };\n\n var prune = function (table) {\n var cells = TableLookup.cells(table);\n if (cells.length === 0) {\n remove$2(table);\n }\n };\n var outcome = Immutable('grid', 'cursor');\n var elementFromGrid = function (grid, row, column) {\n return findIn(grid, row, column).orThunk(function () {\n return findIn(grid, 0, 0);\n });\n };\n var findIn = function (grid, row, column) {\n return Option.from(grid[row]).bind(function (r) {\n return Option.from(r.cells()[column]).bind(function (c) {\n return Option.from(c.element());\n });\n });\n };\n var bundle = function (grid, row, column) {\n return outcome(grid, findIn(grid, row, column));\n };\n var uniqueRows = function (details) {\n return foldl(details, function (rest, detail) {\n return exists(rest, function (currentDetail) {\n return currentDetail.row() === detail.row();\n }) ? rest : rest.concat([detail]);\n }, []).sort(function (detailA, detailB) {\n return detailA.row() - detailB.row();\n });\n };\n var uniqueColumns = function (details) {\n return foldl(details, function (rest, detail) {\n return exists(rest, function (currentDetail) {\n return currentDetail.column() === detail.column();\n }) ? rest : rest.concat([detail]);\n }, []).sort(function (detailA, detailB) {\n return detailA.column() - detailB.column();\n });\n };\n var insertRowBefore = function (grid, detail, comparator, genWrappers) {\n var example = detail.row();\n var targetIndex = detail.row();\n var newGrid = ModificationOperations.insertRowAt(grid, targetIndex, example, comparator, genWrappers.getOrInit);\n return bundle(newGrid, targetIndex, detail.column());\n };\n var insertRowsBefore = function (grid, details, comparator, genWrappers) {\n var example = details[0].row();\n var targetIndex = details[0].row();\n var rows = uniqueRows(details);\n var newGrid = foldl(rows, function (newG, _row) {\n return ModificationOperations.insertRowAt(newG, targetIndex, example, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, targetIndex, details[0].column());\n };\n var insertRowAfter = function (grid, detail, comparator, genWrappers) {\n var example = detail.row();\n var targetIndex = detail.row() + detail.rowspan();\n var newGrid = ModificationOperations.insertRowAt(grid, targetIndex, example, comparator, genWrappers.getOrInit);\n return bundle(newGrid, targetIndex, detail.column());\n };\n var insertRowsAfter = function (grid, details, comparator, genWrappers) {\n var rows = uniqueRows(details);\n var example = rows[rows.length - 1].row();\n var targetIndex = rows[rows.length - 1].row() + rows[rows.length - 1].rowspan();\n var newGrid = foldl(rows, function (newG, _row) {\n return ModificationOperations.insertRowAt(newG, targetIndex, example, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, targetIndex, details[0].column());\n };\n var insertColumnBefore = function (grid, detail, comparator, genWrappers) {\n var example = detail.column();\n var targetIndex = detail.column();\n var newGrid = ModificationOperations.insertColumnAt(grid, targetIndex, example, comparator, genWrappers.getOrInit);\n return bundle(newGrid, detail.row(), targetIndex);\n };\n var insertColumnsBefore = function (grid, details, comparator, genWrappers) {\n var columns = uniqueColumns(details);\n var example = columns[0].column();\n var targetIndex = columns[0].column();\n var newGrid = foldl(columns, function (newG, _row) {\n return ModificationOperations.insertColumnAt(newG, targetIndex, example, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, details[0].row(), targetIndex);\n };\n var insertColumnAfter = function (grid, detail, comparator, genWrappers) {\n var example = detail.column();\n var targetIndex = detail.column() + detail.colspan();\n var newGrid = ModificationOperations.insertColumnAt(grid, targetIndex, example, comparator, genWrappers.getOrInit);\n return bundle(newGrid, detail.row(), targetIndex);\n };\n var insertColumnsAfter = function (grid, details, comparator, genWrappers) {\n var example = details[details.length - 1].column();\n var targetIndex = details[details.length - 1].column() + details[details.length - 1].colspan();\n var columns = uniqueColumns(details);\n var newGrid = foldl(columns, function (newG, _row) {\n return ModificationOperations.insertColumnAt(newG, targetIndex, example, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, details[0].row(), targetIndex);\n };\n var makeRowHeader = function (grid, detail, comparator, genWrappers) {\n var newGrid = TransformOperations.replaceRow(grid, detail.row(), comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, detail.row(), detail.column());\n };\n var makeColumnHeader = function (grid, detail, comparator, genWrappers) {\n var newGrid = TransformOperations.replaceColumn(grid, detail.column(), comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, detail.row(), detail.column());\n };\n var unmakeRowHeader = function (grid, detail, comparator, genWrappers) {\n var newGrid = TransformOperations.replaceRow(grid, detail.row(), comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, detail.row(), detail.column());\n };\n var unmakeColumnHeader = function (grid, detail, comparator, genWrappers) {\n var newGrid = TransformOperations.replaceColumn(grid, detail.column(), comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, detail.row(), detail.column());\n };\n var splitCellIntoColumns$1 = function (grid, detail, comparator, genWrappers) {\n var newGrid = ModificationOperations.splitCellIntoColumns(grid, detail.row(), detail.column(), comparator, genWrappers.getOrInit);\n return bundle(newGrid, detail.row(), detail.column());\n };\n var splitCellIntoRows$1 = function (grid, detail, comparator, genWrappers) {\n var newGrid = ModificationOperations.splitCellIntoRows(grid, detail.row(), detail.column(), comparator, genWrappers.getOrInit);\n return bundle(newGrid, detail.row(), detail.column());\n };\n var eraseColumns = function (grid, details, _comparator, _genWrappers) {\n var columns = uniqueColumns(details);\n var newGrid = ModificationOperations.deleteColumnsAt(grid, columns[0].column(), columns[columns.length - 1].column());\n var cursor = elementFromGrid(newGrid, details[0].row(), details[0].column());\n return outcome(newGrid, cursor);\n };\n var eraseRows = function (grid, details, _comparator, _genWrappers) {\n var rows = uniqueRows(details);\n var newGrid = ModificationOperations.deleteRowsAt(grid, rows[0].row(), rows[rows.length - 1].row());\n var cursor = elementFromGrid(newGrid, details[0].row(), details[0].column());\n return outcome(newGrid, cursor);\n };\n var mergeCells = function (grid, mergable, comparator, _genWrappers) {\n var cells = mergable.cells();\n TableContent.merge(cells);\n var newGrid = MergingOperations.merge(grid, mergable.bounds(), comparator, constant(cells[0]));\n return outcome(newGrid, Option.from(cells[0]));\n };\n var unmergeCells = function (grid, unmergable, comparator, genWrappers) {\n var newGrid = foldr(unmergable, function (b, cell) {\n return MergingOperations.unmerge(b, cell, comparator, genWrappers.combine(cell));\n }, grid);\n return outcome(newGrid, Option.from(unmergable[0]));\n };\n var pasteCells = function (grid, pasteDetails, comparator, _genWrappers) {\n var gridify = function (table, generators) {\n var list = DetailsList.fromTable(table);\n var wh = Warehouse.generate(list);\n return Transitions.toGrid(wh, generators, true);\n };\n var gridB = gridify(pasteDetails.clipboard(), pasteDetails.generators());\n var startAddress = address(pasteDetails.row(), pasteDetails.column());\n var mergedGrid = TableMerge.merge(startAddress, grid, gridB, pasteDetails.generators(), comparator);\n return mergedGrid.fold(function () {\n return outcome(grid, Option.some(pasteDetails.element()));\n }, function (nuGrid) {\n var cursor = elementFromGrid(nuGrid, pasteDetails.row(), pasteDetails.column());\n return outcome(nuGrid, cursor);\n });\n };\n var gridifyRows = function (rows, generators, example) {\n var pasteDetails = DetailsList.fromPastedRows(rows, example);\n var wh = Warehouse.generate(pasteDetails);\n return Transitions.toGrid(wh, generators, true);\n };\n var pasteRowsBefore = function (grid, pasteDetails, comparator, _genWrappers) {\n var example = grid[pasteDetails.cells[0].row()];\n var index = pasteDetails.cells[0].row();\n var gridB = gridifyRows(pasteDetails.clipboard(), pasteDetails.generators(), example);\n var mergedGrid = TableMerge.insert(index, grid, gridB, pasteDetails.generators(), comparator);\n var cursor = elementFromGrid(mergedGrid, pasteDetails.cells[0].row(), pasteDetails.cells[0].column());\n return outcome(mergedGrid, cursor);\n };\n var pasteRowsAfter = function (grid, pasteDetails, comparator, _genWrappers) {\n var example = grid[pasteDetails.cells[0].row()];\n var index = pasteDetails.cells[pasteDetails.cells.length - 1].row() + pasteDetails.cells[pasteDetails.cells.length - 1].rowspan();\n var gridB = gridifyRows(pasteDetails.clipboard(), pasteDetails.generators(), example);\n var mergedGrid = TableMerge.insert(index, grid, gridB, pasteDetails.generators(), comparator);\n var cursor = elementFromGrid(mergedGrid, pasteDetails.cells[0].row(), pasteDetails.cells[0].column());\n return outcome(mergedGrid, cursor);\n };\n var resize = Adjustments.adjustWidthTo;\n var TableOperations = {\n insertRowBefore: run(insertRowBefore, onCell, noop, noop, Generators.modification),\n insertRowsBefore: run(insertRowsBefore, onCells, noop, noop, Generators.modification),\n insertRowAfter: run(insertRowAfter, onCell, noop, noop, Generators.modification),\n insertRowsAfter: run(insertRowsAfter, onCells, noop, noop, Generators.modification),\n insertColumnBefore: run(insertColumnBefore, onCell, resize, noop, Generators.modification),\n insertColumnsBefore: run(insertColumnsBefore, onCells, resize, noop, Generators.modification),\n insertColumnAfter: run(insertColumnAfter, onCell, resize, noop, Generators.modification),\n insertColumnsAfter: run(insertColumnsAfter, onCells, resize, noop, Generators.modification),\n splitCellIntoColumns: run(splitCellIntoColumns$1, onCell, resize, noop, Generators.modification),\n splitCellIntoRows: run(splitCellIntoRows$1, onCell, noop, noop, Generators.modification),\n eraseColumns: run(eraseColumns, onCells, resize, prune, Generators.modification),\n eraseRows: run(eraseRows, onCells, noop, prune, Generators.modification),\n makeColumnHeader: run(makeColumnHeader, onCell, noop, noop, Generators.transform('row', 'th')),\n unmakeColumnHeader: run(unmakeColumnHeader, onCell, noop, noop, Generators.transform(null, 'td')),\n makeRowHeader: run(makeRowHeader, onCell, noop, noop, Generators.transform('col', 'th')),\n unmakeRowHeader: run(unmakeRowHeader, onCell, noop, noop, Generators.transform(null, 'td')),\n mergeCells: run(mergeCells, onMergable, noop, noop, Generators.merging),\n unmergeCells: run(unmergeCells, onUnmergable, resize, noop, Generators.merging),\n pasteCells: run(pasteCells, onPaste, resize, noop, Generators.modification),\n pasteRowsBefore: run(pasteRowsBefore, onPasteRows, noop, noop, Generators.modification),\n pasteRowsAfter: run(pasteRowsAfter, onPasteRows, noop, noop, Generators.modification)\n };\n\n var getBody$1 = function (editor) {\n return Element.fromDom(editor.getBody());\n };\n var getPixelWidth$1 = function (elm) {\n return elm.getBoundingClientRect().width;\n };\n var getPixelHeight = function (elm) {\n return elm.getBoundingClientRect().height;\n };\n var getIsRoot = function (editor) {\n return function (element) {\n return eq(element, getBody$1(editor));\n };\n };\n var removePxSuffix = function (size) {\n return size ? size.replace(/px$/, '') : '';\n };\n var addSizeSuffix = function (size) {\n if (/^[0-9]+$/.test(size)) {\n size += 'px';\n }\n return size;\n };\n var removeDataStyle = function (table) {\n var dataStyleCells = descendants$1(table, 'td[data-mce-style],th[data-mce-style]');\n remove(table, 'data-mce-style');\n each(dataStyleCells, function (cell) {\n remove(cell, 'data-mce-style');\n });\n };\n\n var getDirection = function (element) {\n return get$1(element, 'direction') === 'rtl' ? 'rtl' : 'ltr';\n };\n\n var ltr$1 = { isRtl: constant(false) };\n var rtl$1 = { isRtl: constant(true) };\n var directionAt = function (element) {\n var dir = getDirection(element);\n return dir === 'rtl' ? rtl$1 : ltr$1;\n };\n var Direction = { directionAt: directionAt };\n\n var defaultTableToolbar = [\n 'tableprops',\n 'tabledelete',\n '|',\n 'tableinsertrowbefore',\n 'tableinsertrowafter',\n 'tabledeleterow',\n '|',\n 'tableinsertcolbefore',\n 'tableinsertcolafter',\n 'tabledeletecol'\n ];\n var defaultStyles = {\n 'border-collapse': 'collapse',\n 'width': '100%'\n };\n var defaultAttributes = { border: '1' };\n var getDefaultAttributes = function (editor) {\n return editor.getParam('table_default_attributes', defaultAttributes, 'object');\n };\n var getDefaultStyles = function (editor) {\n return editor.getParam('table_default_styles', defaultStyles, 'object');\n };\n var hasTableResizeBars = function (editor) {\n return editor.getParam('table_resize_bars', true, 'boolean');\n };\n var hasTabNavigation = function (editor) {\n return editor.getParam('table_tab_navigation', true, 'boolean');\n };\n var hasAdvancedCellTab = function (editor) {\n return editor.getParam('table_cell_advtab', true, 'boolean');\n };\n var hasAdvancedRowTab = function (editor) {\n return editor.getParam('table_row_advtab', true, 'boolean');\n };\n var hasAdvancedTableTab = function (editor) {\n return editor.getParam('table_advtab', true, 'boolean');\n };\n var hasAppearanceOptions = function (editor) {\n return editor.getParam('table_appearance_options', true, 'boolean');\n };\n var hasTableGrid = function (editor) {\n return editor.getParam('table_grid', true, 'boolean');\n };\n var shouldStyleWithCss = function (editor) {\n return editor.getParam('table_style_by_css', false, 'boolean');\n };\n var getCellClassList = function (editor) {\n return editor.getParam('table_cell_class_list', [], 'array');\n };\n var getRowClassList = function (editor) {\n return editor.getParam('table_row_class_list', [], 'array');\n };\n var getTableClassList = function (editor) {\n return editor.getParam('table_class_list', [], 'array');\n };\n var getColorPickerCallback = function (editor) {\n return editor.getParam('color_picker_callback');\n };\n var isPixelsForced = function (editor) {\n return editor.getParam('table_responsive_width') === false;\n };\n var getCloneElements = function (editor) {\n var cloneElements = editor.getParam('table_clone_elements');\n if (isString(cloneElements)) {\n return Option.some(cloneElements.split(/[ ,]/));\n } else if (Array.isArray(cloneElements)) {\n return Option.some(cloneElements);\n } else {\n return Option.none();\n }\n };\n var hasObjectResizing = function (editor) {\n var objectResizing = editor.getParam('object_resizing', true);\n return objectResizing === 'table' || objectResizing;\n };\n var getToolbar = function (editor) {\n var toolbar = editor.getParam('table_toolbar', defaultTableToolbar);\n if (toolbar === '' || toolbar === false) {\n return [];\n } else if (isString(toolbar)) {\n return toolbar.split(/[ ,]/);\n } else if (isArray(toolbar)) {\n return toolbar;\n } else {\n return [];\n }\n };\n\n var fireNewRow = function (editor, row) {\n return editor.fire('newrow', { node: row });\n };\n var fireNewCell = function (editor, cell) {\n return editor.fire('newcell', { node: cell });\n };\n var fireObjectResizeStart = function (editor, target, width, height) {\n editor.fire('ObjectResizeStart', {\n target: target,\n width: width,\n height: height\n });\n };\n var fireObjectResized = function (editor, target, width, height) {\n editor.fire('ObjectResized', {\n target: target,\n width: width,\n height: height\n });\n };\n\n var TableActions = function (editor, lazyWire) {\n var isTableBody = function (editor) {\n return name(getBody$1(editor)) === 'table';\n };\n var lastRowGuard = function (table) {\n var size = TableGridSize.getGridSize(table);\n return isTableBody(editor) === false || size.rows() > 1;\n };\n var lastColumnGuard = function (table) {\n var size = TableGridSize.getGridSize(table);\n return isTableBody(editor) === false || size.columns() > 1;\n };\n var cloneFormats = getCloneElements(editor);\n var execute = function (operation, guard, mutate, lazyWire) {\n return function (table, target) {\n removeDataStyle(table);\n var wire = lazyWire();\n var doc = Element.fromDom(editor.getDoc());\n var direction = TableDirection(Direction.directionAt);\n var generators = TableFill.cellOperations(mutate, doc, cloneFormats);\n return guard(table) ? operation(wire, table, target, generators, direction).bind(function (result) {\n each(result.newRows(), function (row) {\n fireNewRow(editor, row.dom());\n });\n each(result.newCells(), function (cell) {\n fireNewCell(editor, cell.dom());\n });\n return result.cursor().map(function (cell) {\n var rng = editor.dom.createRng();\n rng.setStart(cell.dom(), 0);\n rng.setEnd(cell.dom(), 0);\n return rng;\n });\n }) : Option.none();\n };\n };\n var deleteRow = execute(TableOperations.eraseRows, lastRowGuard, noop, lazyWire);\n var deleteColumn = execute(TableOperations.eraseColumns, lastColumnGuard, noop, lazyWire);\n var insertRowsBefore = execute(TableOperations.insertRowsBefore, always, noop, lazyWire);\n var insertRowsAfter = execute(TableOperations.insertRowsAfter, always, noop, lazyWire);\n var insertColumnsBefore = execute(TableOperations.insertColumnsBefore, always, CellMutations.halve, lazyWire);\n var insertColumnsAfter = execute(TableOperations.insertColumnsAfter, always, CellMutations.halve, lazyWire);\n var mergeCells = execute(TableOperations.mergeCells, always, noop, lazyWire);\n var unmergeCells = execute(TableOperations.unmergeCells, always, noop, lazyWire);\n var pasteRowsBefore = execute(TableOperations.pasteRowsBefore, always, noop, lazyWire);\n var pasteRowsAfter = execute(TableOperations.pasteRowsAfter, always, noop, lazyWire);\n var pasteCells = execute(TableOperations.pasteCells, always, noop, lazyWire);\n return {\n deleteRow: deleteRow,\n deleteColumn: deleteColumn,\n insertRowsBefore: insertRowsBefore,\n insertRowsAfter: insertRowsAfter,\n insertColumnsBefore: insertColumnsBefore,\n insertColumnsAfter: insertColumnsAfter,\n mergeCells: mergeCells,\n unmergeCells: unmergeCells,\n pasteRowsBefore: pasteRowsBefore,\n pasteRowsAfter: pasteRowsAfter,\n pasteCells: pasteCells\n };\n };\n\n var copyRows = function (table, target, generators) {\n var list = DetailsList.fromTable(table);\n var house = Warehouse.generate(list);\n var details = onCells(house, target);\n return details.map(function (selectedCells) {\n var grid = Transitions.toGrid(house, generators, false);\n var slicedGrid = grid.slice(selectedCells[0].row(), selectedCells[selectedCells.length - 1].row() + selectedCells[selectedCells.length - 1].rowspan());\n var slicedDetails = toDetailList(slicedGrid, generators);\n return Redraw.copy(slicedDetails);\n });\n };\n var CopyRows = { copyRows: copyRows };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var getTDTHOverallStyle = function (dom, elm, name) {\n var cells = dom.select('td,th', elm);\n var firstChildStyle;\n var checkChildren = function (firstChildStyle, elms) {\n for (var i = 0; i < elms.length; i++) {\n var currentStyle = dom.getStyle(elms[i], name);\n if (typeof firstChildStyle === 'undefined') {\n firstChildStyle = currentStyle;\n }\n if (firstChildStyle !== currentStyle) {\n return '';\n }\n }\n return firstChildStyle;\n };\n firstChildStyle = checkChildren(firstChildStyle, cells);\n return firstChildStyle;\n };\n var applyAlign = function (editor, elm, name) {\n if (name) {\n editor.formatter.apply('align' + name, {}, elm);\n }\n };\n var applyVAlign = function (editor, elm, name) {\n if (name) {\n editor.formatter.apply('valign' + name, {}, elm);\n }\n };\n var unApplyAlign = function (editor, elm) {\n global$1.each('left center right'.split(' '), function (name) {\n editor.formatter.remove('align' + name, {}, elm);\n });\n };\n var unApplyVAlign = function (editor, elm) {\n global$1.each('top middle bottom'.split(' '), function (name) {\n editor.formatter.remove('valign' + name, {}, elm);\n });\n };\n var Styles$1 = {\n applyAlign: applyAlign,\n applyVAlign: applyVAlign,\n unApplyAlign: unApplyAlign,\n unApplyVAlign: unApplyVAlign,\n getTDTHOverallStyle: getTDTHOverallStyle\n };\n\n var buildListItems = function (inputList, itemCallback, startItems) {\n var appendItems = function (values, output) {\n output = output || [];\n global$1.each(values, function (item) {\n var menuItem = { text: item.text || item.title };\n if (item.menu) {\n menuItem.menu = appendItems(item.menu);\n } else {\n menuItem.value = item.value;\n if (itemCallback) {\n itemCallback(menuItem);\n }\n }\n output.push(menuItem);\n });\n return output;\n };\n return appendItems(inputList, startItems || []);\n };\n function styleFieldHasFocus(e) {\n return e.control.rootControl.find('#style')[0].getEl().isEqualNode(domGlobals.document.activeElement);\n }\n var syncAdvancedStyleFields = function (editor, evt) {\n if (styleFieldHasFocus(evt)) {\n updateAdvancedFields(editor, evt);\n } else {\n updateStyleField(editor, evt);\n }\n };\n var updateStyleField = function (editor, evt) {\n var dom = editor.dom;\n var rootControl = evt.control.rootControl;\n var data = rootControl.toJSON();\n var css = dom.parseStyle(data.style);\n css['border-style'] = data.borderStyle;\n css['border-color'] = data.borderColor;\n css['background-color'] = data.backgroundColor;\n css.width = data.width ? addSizeSuffix(data.width) : '';\n css.height = data.height ? addSizeSuffix(data.height) : '';\n rootControl.find('#style').value(dom.serializeStyle(dom.parseStyle(dom.serializeStyle(css))));\n };\n var updateAdvancedFields = function (editor, evt) {\n var dom = editor.dom;\n var rootControl = evt.control.rootControl;\n var data = rootControl.toJSON();\n var css = dom.parseStyle(data.style);\n rootControl.find('#borderStyle').value(css['border-style'] || '');\n rootControl.find('#borderColor').value(css['border-color'] || '');\n rootControl.find('#backgroundColor').value(css['background-color'] || '');\n rootControl.find('#width').value(css.width || '');\n rootControl.find('#height').value(css.height || '');\n };\n var extractAdvancedStyles = function (dom, elm) {\n var css = dom.parseStyle(dom.getAttrib(elm, 'style'));\n var data = {};\n if (css['border-style']) {\n data.borderStyle = css['border-style'];\n }\n if (css['border-color']) {\n data.borderColor = css['border-color'];\n }\n if (css['background-color']) {\n data.backgroundColor = css['background-color'];\n }\n data.style = dom.serializeStyle(css);\n return data;\n };\n var createStyleForm = function (editor) {\n var createColorPickAction = function () {\n var colorPickerCallback = getColorPickerCallback(editor);\n if (colorPickerCallback) {\n return function (evt) {\n return colorPickerCallback.call(editor, function (value) {\n evt.control.value(value).fire('change');\n }, evt.control.value());\n };\n }\n };\n return {\n title: 'Advanced',\n type: 'form',\n defaults: { onchange: curry(updateStyleField, editor) },\n items: [\n {\n label: 'Style',\n name: 'style',\n type: 'textbox',\n onchange: curry(updateAdvancedFields, editor)\n },\n {\n type: 'form',\n padding: 0,\n formItemDefaults: {\n layout: 'grid',\n alignH: [\n 'start',\n 'right'\n ]\n },\n defaults: { size: 7 },\n items: [\n {\n label: 'Border style',\n type: 'listbox',\n name: 'borderStyle',\n width: 90,\n onselect: curry(updateStyleField, editor),\n values: [\n {\n text: 'Select...',\n value: ''\n },\n {\n text: 'Solid',\n value: 'solid'\n },\n {\n text: 'Dotted',\n value: 'dotted'\n },\n {\n text: 'Dashed',\n value: 'dashed'\n },\n {\n text: 'Double',\n value: 'double'\n },\n {\n text: 'Groove',\n value: 'groove'\n },\n {\n text: 'Ridge',\n value: 'ridge'\n },\n {\n text: 'Inset',\n value: 'inset'\n },\n {\n text: 'Outset',\n value: 'outset'\n },\n {\n text: 'None',\n value: 'none'\n },\n {\n text: 'Hidden',\n value: 'hidden'\n }\n ]\n },\n {\n label: 'Border color',\n type: 'colorbox',\n name: 'borderColor',\n onaction: createColorPickAction()\n },\n {\n label: 'Background color',\n type: 'colorbox',\n name: 'backgroundColor',\n onaction: createColorPickAction()\n }\n ]\n }\n ]\n };\n };\n var Helpers = {\n createStyleForm: createStyleForm,\n buildListItems: buildListItems,\n updateStyleField: updateStyleField,\n extractAdvancedStyles: extractAdvancedStyles,\n updateAdvancedFields: updateAdvancedFields,\n syncAdvancedStyleFields: syncAdvancedStyleFields\n };\n\n var updateStyles = function (elm, cssText) {\n delete elm.dataset.mceStyle;\n elm.style.cssText += ';' + cssText;\n };\n var extractDataFromElement = function (editor, elm) {\n var dom = editor.dom;\n var data = {\n width: dom.getStyle(elm, 'width') || dom.getAttrib(elm, 'width'),\n height: dom.getStyle(elm, 'height') || dom.getAttrib(elm, 'height'),\n scope: dom.getAttrib(elm, 'scope'),\n class: dom.getAttrib(elm, 'class'),\n type: elm.nodeName.toLowerCase(),\n style: '',\n align: '',\n valign: ''\n };\n global$1.each('left center right'.split(' '), function (name) {\n if (editor.formatter.matchNode(elm, 'align' + name)) {\n data.align = name;\n }\n });\n global$1.each('top middle bottom'.split(' '), function (name) {\n if (editor.formatter.matchNode(elm, 'valign' + name)) {\n data.valign = name;\n }\n });\n if (hasAdvancedCellTab(editor)) {\n global$1.extend(data, Helpers.extractAdvancedStyles(dom, elm));\n }\n return data;\n };\n var onSubmitCellForm = function (editor, cells, evt) {\n var dom = editor.dom;\n var data;\n function setAttrib(elm, name, value) {\n if (cells.length === 1 || value) {\n dom.setAttrib(elm, name, value);\n }\n }\n function setStyle(elm, name, value) {\n if (cells.length === 1 || value) {\n dom.setStyle(elm, name, value);\n }\n }\n if (hasAdvancedCellTab(editor)) {\n Helpers.syncAdvancedStyleFields(editor, evt);\n }\n data = evt.control.rootControl.toJSON();\n editor.undoManager.transact(function () {\n global$1.each(cells, function (cellElm) {\n setAttrib(cellElm, 'scope', data.scope);\n if (cells.length === 1) {\n setAttrib(cellElm, 'style', data.style);\n } else {\n updateStyles(cellElm, data.style);\n }\n setAttrib(cellElm, 'class', data.class);\n setStyle(cellElm, 'width', addSizeSuffix(data.width));\n setStyle(cellElm, 'height', addSizeSuffix(data.height));\n if (data.type && cellElm.nodeName.toLowerCase() !== data.type) {\n cellElm = dom.rename(cellElm, data.type);\n }\n if (cells.length === 1) {\n Styles$1.unApplyAlign(editor, cellElm);\n Styles$1.unApplyVAlign(editor, cellElm);\n }\n if (data.align) {\n Styles$1.applyAlign(editor, cellElm, data.align);\n }\n if (data.valign) {\n Styles$1.applyVAlign(editor, cellElm, data.valign);\n }\n });\n editor.focus();\n });\n };\n var open = function (editor) {\n var cellElm, data, classListCtrl, cells = [];\n cells = editor.dom.select('td[data-mce-selected],th[data-mce-selected]');\n cellElm = editor.dom.getParent(editor.selection.getStart(), 'td,th');\n if (!cells.length && cellElm) {\n cells.push(cellElm);\n }\n cellElm = cellElm || cells[0];\n if (!cellElm) {\n return;\n }\n if (cells.length > 1) {\n data = {\n width: '',\n height: '',\n scope: '',\n class: '',\n align: '',\n valign: '',\n style: '',\n type: cellElm.nodeName.toLowerCase()\n };\n } else {\n data = extractDataFromElement(editor, cellElm);\n }\n if (getCellClassList(editor).length > 0) {\n classListCtrl = {\n name: 'class',\n type: 'listbox',\n label: 'Class',\n values: Helpers.buildListItems(getCellClassList(editor), function (item) {\n if (item.value) {\n item.textStyle = function () {\n return editor.formatter.getCssText({\n block: 'td',\n classes: [item.value]\n });\n };\n }\n })\n };\n }\n var generalCellForm = {\n type: 'form',\n layout: 'flex',\n direction: 'column',\n labelGapCalc: 'children',\n padding: 0,\n items: [\n {\n type: 'form',\n layout: 'grid',\n columns: 2,\n labelGapCalc: false,\n padding: 0,\n defaults: {\n type: 'textbox',\n maxWidth: 50\n },\n items: [\n {\n label: 'Width',\n name: 'width',\n onchange: curry(Helpers.updateStyleField, editor)\n },\n {\n label: 'Height',\n name: 'height',\n onchange: curry(Helpers.updateStyleField, editor)\n },\n {\n label: 'Cell type',\n name: 'type',\n type: 'listbox',\n text: 'None',\n minWidth: 90,\n maxWidth: null,\n values: [\n {\n text: 'Cell',\n value: 'td'\n },\n {\n text: 'Header cell',\n value: 'th'\n }\n ]\n },\n {\n label: 'Scope',\n name: 'scope',\n type: 'listbox',\n text: 'None',\n minWidth: 90,\n maxWidth: null,\n values: [\n {\n text: 'None',\n value: ''\n },\n {\n text: 'Row',\n value: 'row'\n },\n {\n text: 'Column',\n value: 'col'\n },\n {\n text: 'Row group',\n value: 'rowgroup'\n },\n {\n text: 'Column group',\n value: 'colgroup'\n }\n ]\n },\n {\n label: 'H Align',\n name: 'align',\n type: 'listbox',\n text: 'None',\n minWidth: 90,\n maxWidth: null,\n values: [\n {\n text: 'None',\n value: ''\n },\n {\n text: 'Left',\n value: 'left'\n },\n {\n text: 'Center',\n value: 'center'\n },\n {\n text: 'Right',\n value: 'right'\n }\n ]\n },\n {\n label: 'V Align',\n name: 'valign',\n type: 'listbox',\n text: 'None',\n minWidth: 90,\n maxWidth: null,\n values: [\n {\n text: 'None',\n value: ''\n },\n {\n text: 'Top',\n value: 'top'\n },\n {\n text: 'Middle',\n value: 'middle'\n },\n {\n text: 'Bottom',\n value: 'bottom'\n }\n ]\n }\n ]\n },\n classListCtrl\n ]\n };\n if (hasAdvancedCellTab(editor)) {\n editor.windowManager.open({\n title: 'Cell properties',\n bodyType: 'tabpanel',\n data: data,\n body: [\n {\n title: 'General',\n type: 'form',\n items: generalCellForm\n },\n Helpers.createStyleForm(editor)\n ],\n onsubmit: curry(onSubmitCellForm, editor, cells)\n });\n } else {\n editor.windowManager.open({\n title: 'Cell properties',\n data: data,\n body: generalCellForm,\n onsubmit: curry(onSubmitCellForm, editor, cells)\n });\n }\n };\n var CellDialog = { open: open };\n\n var extractDataFromElement$1 = function (editor, elm) {\n var dom = editor.dom;\n var data = {\n height: dom.getStyle(elm, 'height') || dom.getAttrib(elm, 'height'),\n scope: dom.getAttrib(elm, 'scope'),\n class: dom.getAttrib(elm, 'class'),\n align: '',\n style: '',\n type: elm.parentNode.nodeName.toLowerCase()\n };\n global$1.each('left center right'.split(' '), function (name) {\n if (editor.formatter.matchNode(elm, 'align' + name)) {\n data.align = name;\n }\n });\n if (hasAdvancedRowTab(editor)) {\n global$1.extend(data, Helpers.extractAdvancedStyles(dom, elm));\n }\n return data;\n };\n var switchRowType = function (dom, rowElm, toType) {\n var tableElm = dom.getParent(rowElm, 'table');\n var oldParentElm = rowElm.parentNode;\n var parentElm = dom.select(toType, tableElm)[0];\n if (!parentElm) {\n parentElm = dom.create(toType);\n if (tableElm.firstChild) {\n if (tableElm.firstChild.nodeName === 'CAPTION') {\n dom.insertAfter(parentElm, tableElm.firstChild);\n } else {\n tableElm.insertBefore(parentElm, tableElm.firstChild);\n }\n } else {\n tableElm.appendChild(parentElm);\n }\n }\n parentElm.appendChild(rowElm);\n if (!oldParentElm.hasChildNodes()) {\n dom.remove(oldParentElm);\n }\n };\n function onSubmitRowForm(editor, rows, oldData, evt) {\n var dom = editor.dom;\n function setAttrib(elm, name, value) {\n if (rows.length === 1 || value) {\n dom.setAttrib(elm, name, value);\n }\n }\n function setStyle(elm, name, value) {\n if (rows.length === 1 || value) {\n dom.setStyle(elm, name, value);\n }\n }\n if (hasAdvancedRowTab(editor)) {\n Helpers.syncAdvancedStyleFields(editor, evt);\n }\n var data = evt.control.rootControl.toJSON();\n editor.undoManager.transact(function () {\n global$1.each(rows, function (rowElm) {\n setAttrib(rowElm, 'scope', data.scope);\n setAttrib(rowElm, 'style', data.style);\n setAttrib(rowElm, 'class', data.class);\n setStyle(rowElm, 'height', addSizeSuffix(data.height));\n if (data.type !== rowElm.parentNode.nodeName.toLowerCase()) {\n switchRowType(editor.dom, rowElm, data.type);\n }\n if (data.align !== oldData.align) {\n Styles$1.unApplyAlign(editor, rowElm);\n Styles$1.applyAlign(editor, rowElm, data.align);\n }\n });\n editor.focus();\n });\n }\n var open$1 = function (editor) {\n var dom = editor.dom;\n var tableElm, cellElm, rowElm, classListCtrl, data;\n var rows = [];\n var generalRowForm;\n tableElm = dom.getParent(editor.selection.getStart(), 'table');\n cellElm = dom.getParent(editor.selection.getStart(), 'td,th');\n global$1.each(tableElm.rows, function (row) {\n global$1.each(row.cells, function (cell) {\n if (dom.getAttrib(cell, 'data-mce-selected') || cell === cellElm) {\n rows.push(row);\n return false;\n }\n });\n });\n rowElm = rows[0];\n if (!rowElm) {\n return;\n }\n if (rows.length > 1) {\n data = {\n height: '',\n scope: '',\n style: '',\n class: '',\n align: '',\n type: rowElm.parentNode.nodeName.toLowerCase()\n };\n } else {\n data = extractDataFromElement$1(editor, rowElm);\n }\n if (getRowClassList(editor).length > 0) {\n classListCtrl = {\n name: 'class',\n type: 'listbox',\n label: 'Class',\n values: Helpers.buildListItems(getRowClassList(editor), function (item) {\n if (item.value) {\n item.textStyle = function () {\n return editor.formatter.getCssText({\n block: 'tr',\n classes: [item.value]\n });\n };\n }\n })\n };\n }\n generalRowForm = {\n type: 'form',\n columns: 2,\n padding: 0,\n defaults: { type: 'textbox' },\n items: [\n {\n type: 'listbox',\n name: 'type',\n label: 'Row type',\n text: 'Header',\n maxWidth: null,\n values: [\n {\n text: 'Header',\n value: 'thead'\n },\n {\n text: 'Body',\n value: 'tbody'\n },\n {\n text: 'Footer',\n value: 'tfoot'\n }\n ]\n },\n {\n type: 'listbox',\n name: 'align',\n label: 'Alignment',\n text: 'None',\n maxWidth: null,\n values: [\n {\n text: 'None',\n value: ''\n },\n {\n text: 'Left',\n value: 'left'\n },\n {\n text: 'Center',\n value: 'center'\n },\n {\n text: 'Right',\n value: 'right'\n }\n ]\n },\n {\n label: 'Height',\n name: 'height'\n },\n classListCtrl\n ]\n };\n if (hasAdvancedRowTab(editor)) {\n editor.windowManager.open({\n title: 'Row properties',\n data: data,\n bodyType: 'tabpanel',\n body: [\n {\n title: 'General',\n type: 'form',\n items: generalRowForm\n },\n Helpers.createStyleForm(editor)\n ],\n onsubmit: curry(onSubmitRowForm, editor, rows, data)\n });\n } else {\n editor.windowManager.open({\n title: 'Row properties',\n data: data,\n body: generalRowForm,\n onsubmit: curry(onSubmitRowForm, editor, rows, data)\n });\n }\n };\n var RowDialog = { open: open$1 };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var DefaultRenderOptions = {\n styles: {\n 'border-collapse': 'collapse',\n 'width': '100%'\n },\n attributes: { border: '1' },\n percentages: true\n };\n var makeTable = function () {\n return Element.fromTag('table');\n };\n var tableBody = function () {\n return Element.fromTag('tbody');\n };\n var tableRow = function () {\n return Element.fromTag('tr');\n };\n var tableHeaderCell = function () {\n return Element.fromTag('th');\n };\n var tableCell = function () {\n return Element.fromTag('td');\n };\n var render$1 = function (rows, columns, rowHeaders, columnHeaders, renderOpts) {\n if (renderOpts === void 0) {\n renderOpts = DefaultRenderOptions;\n }\n var table = makeTable();\n setAll$1(table, renderOpts.styles);\n setAll(table, renderOpts.attributes);\n var tbody = tableBody();\n append(table, tbody);\n var trs = [];\n for (var i = 0; i < rows; i++) {\n var tr = tableRow();\n for (var j = 0; j < columns; j++) {\n var td = i < rowHeaders || j < columnHeaders ? tableHeaderCell() : tableCell();\n if (j < columnHeaders) {\n set(td, 'scope', 'row');\n }\n if (i < rowHeaders) {\n set(td, 'scope', 'col');\n }\n append(td, Element.fromTag('br'));\n if (renderOpts.percentages) {\n set$1(td, 'width', 100 / columns + '%');\n }\n append(tr, td);\n }\n trs.push(tr);\n }\n append$1(tbody, trs);\n return table;\n };\n\n var get$7 = function (element) {\n return element.dom().innerHTML;\n };\n var getOuter$2 = function (element) {\n var container = Element.fromTag('div');\n var clone = Element.fromDom(element.dom().cloneNode(true));\n append(container, clone);\n return get$7(container);\n };\n\n var placeCaretInCell = function (editor, cell) {\n editor.selection.select(cell.dom(), true);\n editor.selection.collapse(true);\n };\n var selectFirstCellInTable = function (editor, tableElm) {\n descendant$1(tableElm, 'td,th').each(curry(placeCaretInCell, editor));\n };\n var fireEvents = function (editor, table) {\n each(descendants$1(table, 'tr'), function (row) {\n fireNewRow(editor, row.dom());\n each(descendants$1(row, 'th,td'), function (cell) {\n fireNewCell(editor, cell.dom());\n });\n });\n };\n var isPercentage = function (width) {\n return isString(width) && width.indexOf('%') !== -1;\n };\n var insert$1 = function (editor, columns, rows) {\n var defaultStyles = getDefaultStyles(editor);\n var options = {\n styles: defaultStyles,\n attributes: getDefaultAttributes(editor),\n percentages: isPercentage(defaultStyles.width) && !isPixelsForced(editor)\n };\n var table = render$1(rows, columns, 0, 0, options);\n set(table, 'data-mce-id', '__mce');\n var html = getOuter$2(table);\n editor.insertContent(html);\n return descendant$1(getBody$1(editor), 'table[data-mce-id=\"__mce\"]').map(function (table) {\n if (isPixelsForced(editor)) {\n set$1(table, 'width', get$1(table, 'width'));\n }\n remove(table, 'data-mce-id');\n fireEvents(editor, table);\n selectFirstCellInTable(editor, table);\n return table.dom();\n }).getOr(null);\n };\n var InsertTable = { insert: insert$1 };\n\n function styleTDTH(dom, elm, name, value) {\n if (elm.tagName === 'TD' || elm.tagName === 'TH') {\n dom.setStyle(elm, name, value);\n } else {\n if (elm.children) {\n for (var i = 0; i < elm.children.length; i++) {\n styleTDTH(dom, elm.children[i], name, value);\n }\n }\n }\n }\n var extractDataFromElement$2 = function (editor, tableElm) {\n var dom = editor.dom;\n var data = {\n width: dom.getStyle(tableElm, 'width') || dom.getAttrib(tableElm, 'width'),\n height: dom.getStyle(tableElm, 'height') || dom.getAttrib(tableElm, 'height'),\n cellspacing: dom.getStyle(tableElm, 'border-spacing') || dom.getAttrib(tableElm, 'cellspacing'),\n cellpadding: dom.getAttrib(tableElm, 'data-mce-cell-padding') || dom.getAttrib(tableElm, 'cellpadding') || Styles$1.getTDTHOverallStyle(editor.dom, tableElm, 'padding'),\n border: dom.getAttrib(tableElm, 'data-mce-border') || dom.getAttrib(tableElm, 'border') || Styles$1.getTDTHOverallStyle(editor.dom, tableElm, 'border'),\n borderColor: dom.getAttrib(tableElm, 'data-mce-border-color'),\n caption: !!dom.select('caption', tableElm)[0],\n class: dom.getAttrib(tableElm, 'class')\n };\n global$1.each('left center right'.split(' '), function (name) {\n if (editor.formatter.matchNode(tableElm, 'align' + name)) {\n data.align = name;\n }\n });\n if (hasAdvancedTableTab(editor)) {\n global$1.extend(data, Helpers.extractAdvancedStyles(dom, tableElm));\n }\n return data;\n };\n var applyDataToElement = function (editor, tableElm, data) {\n var dom = editor.dom;\n var attrs = {};\n var styles = {};\n attrs.class = data.class;\n styles.height = addSizeSuffix(data.height);\n if (dom.getAttrib(tableElm, 'width') && !shouldStyleWithCss(editor)) {\n attrs.width = removePxSuffix(data.width);\n } else {\n styles.width = addSizeSuffix(data.width);\n }\n if (shouldStyleWithCss(editor)) {\n styles['border-width'] = addSizeSuffix(data.border);\n styles['border-spacing'] = addSizeSuffix(data.cellspacing);\n global$1.extend(attrs, {\n 'data-mce-border-color': data.borderColor,\n 'data-mce-cell-padding': data.cellpadding,\n 'data-mce-border': data.border\n });\n } else {\n global$1.extend(attrs, {\n border: data.border,\n cellpadding: data.cellpadding,\n cellspacing: data.cellspacing\n });\n }\n if (shouldStyleWithCss(editor)) {\n if (tableElm.children) {\n for (var i = 0; i < tableElm.children.length; i++) {\n styleTDTH(dom, tableElm.children[i], {\n 'border-width': addSizeSuffix(data.border),\n 'border-color': data.borderColor,\n 'padding': addSizeSuffix(data.cellpadding)\n });\n }\n }\n }\n if (data.style) {\n global$1.extend(styles, dom.parseStyle(data.style));\n } else {\n styles = global$1.extend({}, dom.parseStyle(dom.getAttrib(tableElm, 'style')), styles);\n }\n attrs.style = dom.serializeStyle(styles);\n dom.setAttribs(tableElm, attrs);\n };\n var onSubmitTableForm = function (editor, tableElm, evt) {\n var dom = editor.dom;\n var captionElm;\n var data;\n if (hasAdvancedTableTab(editor)) {\n Helpers.syncAdvancedStyleFields(editor, evt);\n }\n data = evt.control.rootControl.toJSON();\n if (data.class === false) {\n delete data.class;\n }\n editor.undoManager.transact(function () {\n if (!tableElm) {\n tableElm = InsertTable.insert(editor, data.cols || 1, data.rows || 1);\n }\n applyDataToElement(editor, tableElm, data);\n captionElm = dom.select('caption', tableElm)[0];\n if (captionElm && !data.caption) {\n dom.remove(captionElm);\n }\n if (!captionElm && data.caption) {\n captionElm = dom.create('caption');\n captionElm.innerHTML = !global$2.ie ? '
' : '\\xA0';\n tableElm.insertBefore(captionElm, tableElm.firstChild);\n }\n Styles$1.unApplyAlign(editor, tableElm);\n if (data.align) {\n Styles$1.applyAlign(editor, tableElm, data.align);\n }\n editor.focus();\n editor.addVisual();\n });\n };\n var open$2 = function (editor, isProps) {\n var dom = editor.dom;\n var tableElm, colsCtrl, rowsCtrl, classListCtrl, data = {}, generalTableForm;\n if (isProps === true) {\n tableElm = dom.getParent(editor.selection.getStart(), 'table');\n if (tableElm) {\n data = extractDataFromElement$2(editor, tableElm);\n }\n } else {\n colsCtrl = {\n label: 'Cols',\n name: 'cols'\n };\n rowsCtrl = {\n label: 'Rows',\n name: 'rows'\n };\n }\n if (getTableClassList(editor).length > 0) {\n if (data.class) {\n data.class = data.class.replace(/\\s*mce\\-item\\-table\\s*/g, '');\n }\n classListCtrl = {\n name: 'class',\n type: 'listbox',\n label: 'Class',\n values: Helpers.buildListItems(getTableClassList(editor), function (item) {\n if (item.value) {\n item.textStyle = function () {\n return editor.formatter.getCssText({\n block: 'table',\n classes: [item.value]\n });\n };\n }\n })\n };\n }\n generalTableForm = {\n type: 'form',\n layout: 'flex',\n direction: 'column',\n labelGapCalc: 'children',\n padding: 0,\n items: [\n {\n type: 'form',\n labelGapCalc: false,\n padding: 0,\n layout: 'grid',\n columns: 2,\n defaults: {\n type: 'textbox',\n maxWidth: 50\n },\n items: hasAppearanceOptions(editor) ? [\n colsCtrl,\n rowsCtrl,\n {\n label: 'Width',\n name: 'width',\n onchange: curry(Helpers.updateStyleField, editor)\n },\n {\n label: 'Height',\n name: 'height',\n onchange: curry(Helpers.updateStyleField, editor)\n },\n {\n label: 'Cell spacing',\n name: 'cellspacing'\n },\n {\n label: 'Cell padding',\n name: 'cellpadding'\n },\n {\n label: 'Border',\n name: 'border'\n },\n {\n label: 'Caption',\n name: 'caption',\n type: 'checkbox'\n }\n ] : [\n colsCtrl,\n rowsCtrl,\n {\n label: 'Width',\n name: 'width',\n onchange: curry(Helpers.updateStyleField, editor)\n },\n {\n label: 'Height',\n name: 'height',\n onchange: curry(Helpers.updateStyleField, editor)\n }\n ]\n },\n {\n label: 'Alignment',\n name: 'align',\n type: 'listbox',\n text: 'None',\n values: [\n {\n text: 'None',\n value: ''\n },\n {\n text: 'Left',\n value: 'left'\n },\n {\n text: 'Center',\n value: 'center'\n },\n {\n text: 'Right',\n value: 'right'\n }\n ]\n },\n classListCtrl\n ]\n };\n if (hasAdvancedTableTab(editor)) {\n editor.windowManager.open({\n title: 'Table properties',\n data: data,\n bodyType: 'tabpanel',\n body: [\n {\n title: 'General',\n type: 'form',\n items: generalTableForm\n },\n Helpers.createStyleForm(editor)\n ],\n onsubmit: curry(onSubmitTableForm, editor, tableElm)\n });\n } else {\n editor.windowManager.open({\n title: 'Table properties',\n data: data,\n body: generalTableForm,\n onsubmit: curry(onSubmitTableForm, editor, tableElm)\n });\n }\n };\n var TableDialog = { open: open$2 };\n\n var each$3 = global$1.each;\n var registerCommands = function (editor, actions, cellSelection, selections, clipboardRows) {\n var isRoot = getIsRoot(editor);\n var eraseTable = function () {\n getSelectionStartCell().orThunk(getSelectionStartCaption).each(function (cellOrCaption) {\n var table = TableLookup.table(cellOrCaption, isRoot);\n table.filter(not(isRoot)).each(function (table) {\n var cursor = Element.fromText('');\n after(table, cursor);\n remove$2(table);\n var rng = editor.dom.createRng();\n rng.setStart(cursor.dom(), 0);\n rng.setEnd(cursor.dom(), 0);\n editor.selection.setRng(rng);\n });\n });\n };\n var getSelectionStartFromSelector = function (selector) {\n return function () {\n return Option.from(editor.dom.getParent(editor.selection.getStart(), selector)).map(Element.fromDom);\n };\n };\n var getSelectionStartCaption = getSelectionStartFromSelector('caption');\n var getSelectionStartCell = getSelectionStartFromSelector('th,td');\n var getTableFromCell = function (cell) {\n return TableLookup.table(cell, isRoot);\n };\n var getSize = function (table) {\n return {\n width: getPixelWidth$1(table.dom()),\n height: getPixelWidth$1(table.dom())\n };\n };\n var resizeChange = function (editor, oldSize, table) {\n var newSize = getSize(table);\n if (oldSize.width !== newSize.width || oldSize.height !== newSize.height) {\n fireObjectResizeStart(editor, table.dom(), oldSize.width, oldSize.height);\n fireObjectResized(editor, table.dom(), newSize.width, newSize.height);\n }\n };\n var actOnSelection = function (execute) {\n getSelectionStartCell().each(function (cell) {\n getTableFromCell(cell).each(function (table) {\n var targets = TableTargets.forMenu(selections, table, cell);\n var beforeSize = getSize(table);\n execute(table, targets).each(function (rng) {\n resizeChange(editor, beforeSize, table);\n editor.selection.setRng(rng);\n editor.focus();\n cellSelection.clear(table);\n removeDataStyle(table);\n });\n });\n });\n };\n var copyRowSelection = function (execute) {\n return getSelectionStartCell().bind(function (cell) {\n return getTableFromCell(cell).bind(function (table) {\n var doc = Element.fromDom(editor.getDoc());\n var targets = TableTargets.forMenu(selections, table, cell);\n var generators = TableFill.cellOperations(noop, doc, Option.none());\n return CopyRows.copyRows(table, targets, generators);\n });\n });\n };\n var pasteOnSelection = function (execute) {\n clipboardRows.get().each(function (rows) {\n var clonedRows = map(rows, function (row) {\n return deep(row);\n });\n getSelectionStartCell().each(function (cell) {\n getTableFromCell(cell).each(function (table) {\n var doc = Element.fromDom(editor.getDoc());\n var generators = TableFill.paste(doc);\n var targets = TableTargets.pasteRows(selections, table, cell, clonedRows, generators);\n execute(table, targets).each(function (rng) {\n editor.selection.setRng(rng);\n editor.focus();\n cellSelection.clear(table);\n });\n });\n });\n });\n };\n each$3({\n mceTableSplitCells: function () {\n actOnSelection(actions.unmergeCells);\n },\n mceTableMergeCells: function () {\n actOnSelection(actions.mergeCells);\n },\n mceTableInsertRowBefore: function () {\n actOnSelection(actions.insertRowsBefore);\n },\n mceTableInsertRowAfter: function () {\n actOnSelection(actions.insertRowsAfter);\n },\n mceTableInsertColBefore: function () {\n actOnSelection(actions.insertColumnsBefore);\n },\n mceTableInsertColAfter: function () {\n actOnSelection(actions.insertColumnsAfter);\n },\n mceTableDeleteCol: function () {\n actOnSelection(actions.deleteColumn);\n },\n mceTableDeleteRow: function () {\n actOnSelection(actions.deleteRow);\n },\n mceTableCutRow: function (grid) {\n clipboardRows.set(copyRowSelection());\n actOnSelection(actions.deleteRow);\n },\n mceTableCopyRow: function (grid) {\n clipboardRows.set(copyRowSelection());\n },\n mceTablePasteRowBefore: function (grid) {\n pasteOnSelection(actions.pasteRowsBefore);\n },\n mceTablePasteRowAfter: function (grid) {\n pasteOnSelection(actions.pasteRowsAfter);\n },\n mceTableDelete: eraseTable\n }, function (func, name) {\n editor.addCommand(name, func);\n });\n each$3({\n mceInsertTable: curry(TableDialog.open, editor),\n mceTableProps: curry(TableDialog.open, editor, true),\n mceTableRowProps: curry(RowDialog.open, editor),\n mceTableCellProps: curry(CellDialog.open, editor)\n }, function (func, name) {\n editor.addCommand(name, function (ui, val) {\n func(val);\n });\n });\n };\n var Commands = { registerCommands: registerCommands };\n\n var only = function (element) {\n var parent = Option.from(element.dom().documentElement).map(Element.fromDom).getOr(element);\n return {\n parent: constant(parent),\n view: constant(element),\n origin: constant(Position(0, 0))\n };\n };\n var detached = function (editable, chrome) {\n var origin = function () {\n return absolute(chrome);\n };\n return {\n parent: constant(chrome),\n view: constant(editable),\n origin: origin\n };\n };\n var body$1 = function (editable, chrome) {\n return {\n parent: constant(chrome),\n view: constant(editable),\n origin: constant(Position(0, 0))\n };\n };\n var ResizeWire = {\n only: only,\n detached: detached,\n body: body$1\n };\n\n var Event = function (fields) {\n var struct = Immutable.apply(null, fields);\n var handlers = [];\n var bind = function (handler) {\n if (handler === undefined) {\n throw new Error('Event bind error: undefined handler');\n }\n handlers.push(handler);\n };\n var unbind = function (handler) {\n handlers = filter(handlers, function (h) {\n return h !== handler;\n });\n };\n var trigger = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var event = struct.apply(null, args);\n each(handlers, function (handler) {\n handler(event);\n });\n };\n return {\n bind: bind,\n unbind: unbind,\n trigger: trigger\n };\n };\n\n var create$1 = function (typeDefs) {\n var registry = map$1(typeDefs, function (event) {\n return {\n bind: event.bind,\n unbind: event.unbind\n };\n });\n var trigger = map$1(typeDefs, function (event) {\n return event.trigger;\n });\n return {\n registry: registry,\n trigger: trigger\n };\n };\n var Events = { create: create$1 };\n\n var mkEvent = function (target, x, y, stop, prevent, kill, raw) {\n return {\n target: constant(target),\n x: constant(x),\n y: constant(y),\n stop: stop,\n prevent: prevent,\n kill: kill,\n raw: constant(raw)\n };\n };\n var handle = function (filter, handler) {\n return function (rawEvent) {\n if (!filter(rawEvent)) {\n return;\n }\n var target = Element.fromDom(rawEvent.target);\n var stop = function () {\n rawEvent.stopPropagation();\n };\n var prevent = function () {\n rawEvent.preventDefault();\n };\n var kill = compose(prevent, stop);\n var evt = mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent);\n handler(evt);\n };\n };\n var binder = function (element, event, filter, handler, useCapture) {\n var wrapped = handle(filter, handler);\n element.dom().addEventListener(event, wrapped, useCapture);\n return { unbind: curry(unbind, element, event, wrapped, useCapture) };\n };\n var bind$1 = function (element, event, filter, handler) {\n return binder(element, event, filter, handler, false);\n };\n var unbind = function (element, event, handler, useCapture) {\n element.dom().removeEventListener(event, handler, useCapture);\n };\n\n var filter$1 = constant(true);\n var bind$2 = function (element, event, handler) {\n return bind$1(element, event, filter$1, handler);\n };\n\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n var shallow$1 = function (old, nu) {\n return nu;\n };\n var baseMerge = function (merger) {\n return function () {\n var objects = new Array(arguments.length);\n for (var i = 0; i < objects.length; i++) {\n objects[i] = arguments[i];\n }\n if (objects.length === 0) {\n throw new Error('Can\\'t merge zero objects');\n }\n var ret = {};\n for (var j = 0; j < objects.length; j++) {\n var curObject = objects[j];\n for (var key in curObject) {\n if (hasOwnProperty.call(curObject, key)) {\n ret[key] = merger(ret[key], curObject[key]);\n }\n }\n }\n return ret;\n };\n };\n var merge$3 = baseMerge(shallow$1);\n\n var styles$1 = css('ephox-dragster');\n var Styles$2 = { resolve: styles$1.resolve };\n\n var Blocker = function (options) {\n var settings = merge$3({ layerClass: Styles$2.resolve('blocker') }, options);\n var div = Element.fromTag('div');\n set(div, 'role', 'presentation');\n setAll$1(div, {\n position: 'fixed',\n left: '0px',\n top: '0px',\n width: '100%',\n height: '100%'\n });\n add$2(div, Styles$2.resolve('blocker'));\n add$2(div, settings.layerClass);\n var element = function () {\n return div;\n };\n var destroy = function () {\n remove$2(div);\n };\n return {\n element: element,\n destroy: destroy\n };\n };\n\n var DragMode = exactly([\n 'compare',\n 'extract',\n 'mutate',\n 'sink'\n ]);\n var DragSink = exactly([\n 'element',\n 'start',\n 'stop',\n 'destroy'\n ]);\n var DragApi = exactly([\n 'forceDrop',\n 'drop',\n 'move',\n 'delayDrop'\n ]);\n\n var compare = function (old, nu) {\n return Position(nu.left() - old.left(), nu.top() - old.top());\n };\n var extract$1 = function (event) {\n return Option.some(Position(event.x(), event.y()));\n };\n var mutate = function (mutation, info) {\n mutation.mutate(info.left(), info.top());\n };\n var sink = function (dragApi, settings) {\n var blocker = Blocker(settings);\n var mdown = bind$2(blocker.element(), 'mousedown', dragApi.forceDrop);\n var mup = bind$2(blocker.element(), 'mouseup', dragApi.drop);\n var mmove = bind$2(blocker.element(), 'mousemove', dragApi.move);\n var mout = bind$2(blocker.element(), 'mouseout', dragApi.delayDrop);\n var destroy = function () {\n blocker.destroy();\n mup.unbind();\n mmove.unbind();\n mout.unbind();\n mdown.unbind();\n };\n var start = function (parent) {\n append(parent, blocker.element());\n };\n var stop = function () {\n remove$2(blocker.element());\n };\n return DragSink({\n element: blocker.element,\n start: start,\n stop: stop,\n destroy: destroy\n });\n };\n var MouseDrag = DragMode({\n compare: compare,\n extract: extract$1,\n sink: sink,\n mutate: mutate\n });\n\n var last$2 = function (fn, rate) {\n var timer = null;\n var cancel = function () {\n if (timer !== null) {\n domGlobals.clearTimeout(timer);\n timer = null;\n }\n };\n var throttle = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (timer !== null) {\n domGlobals.clearTimeout(timer);\n }\n timer = domGlobals.setTimeout(function () {\n fn.apply(null, args);\n timer = null;\n }, rate);\n };\n return {\n cancel: cancel,\n throttle: throttle\n };\n };\n\n function InDrag () {\n var previous = Option.none();\n var reset = function () {\n previous = Option.none();\n };\n var update = function (mode, nu) {\n var result = previous.map(function (old) {\n return mode.compare(old, nu);\n });\n previous = Option.some(nu);\n return result;\n };\n var onEvent = function (event, mode) {\n var dataOption = mode.extract(event);\n dataOption.each(function (data) {\n var offset = update(mode, data);\n offset.each(function (d) {\n events.trigger.move(d);\n });\n });\n };\n var events = Events.create({ move: Event(['info']) });\n return {\n onEvent: onEvent,\n reset: reset,\n events: events.registry\n };\n }\n\n function NoDrag () {\n return {\n onEvent: noop,\n reset: noop\n };\n }\n\n function Movement () {\n var noDragState = NoDrag();\n var inDragState = InDrag();\n var dragState = noDragState;\n var on = function () {\n dragState.reset();\n dragState = inDragState;\n };\n var off = function () {\n dragState.reset();\n dragState = noDragState;\n };\n var onEvent = function (event, mode) {\n dragState.onEvent(event, mode);\n };\n var isOn = function () {\n return dragState === inDragState;\n };\n return {\n on: on,\n off: off,\n isOn: isOn,\n onEvent: onEvent,\n events: inDragState.events\n };\n }\n\n var setup = function (mutation, mode, settings) {\n var active = false;\n var events = Events.create({\n start: Event([]),\n stop: Event([])\n });\n var movement = Movement();\n var drop = function () {\n sink.stop();\n if (movement.isOn()) {\n movement.off();\n events.trigger.stop();\n }\n };\n var throttledDrop = last$2(drop, 200);\n var go = function (parent) {\n sink.start(parent);\n movement.on();\n events.trigger.start();\n };\n var mousemove = function (event) {\n throttledDrop.cancel();\n movement.onEvent(event, mode);\n };\n movement.events.move.bind(function (event) {\n mode.mutate(mutation, event.info());\n });\n var on = function () {\n active = true;\n };\n var off = function () {\n active = false;\n };\n var runIfActive = function (f) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (active) {\n f.apply(null, args);\n }\n };\n };\n var sink = mode.sink(DragApi({\n forceDrop: drop,\n drop: runIfActive(drop),\n move: runIfActive(mousemove),\n delayDrop: runIfActive(throttledDrop.throttle)\n }), settings);\n var destroy = function () {\n sink.destroy();\n };\n return {\n element: sink.element,\n go: go,\n on: on,\n off: off,\n destroy: destroy,\n events: events.registry\n };\n };\n var Dragging = { setup: setup };\n\n var transform$1 = function (mutation, settings) {\n if (settings === void 0) {\n settings = {};\n }\n var mode = settings.mode !== undefined ? settings.mode : MouseDrag;\n return Dragging.setup(mutation, mode, settings);\n };\n var Dragger = { transform: transform$1 };\n\n var Mutation = function () {\n var events = Events.create({\n drag: Event([\n 'xDelta',\n 'yDelta'\n ])\n });\n var mutate = function (x, y) {\n events.trigger.drag(x, y);\n };\n return {\n mutate: mutate,\n events: events.registry\n };\n };\n\n var BarMutation = function () {\n var events = Events.create({\n drag: Event([\n 'xDelta',\n 'yDelta',\n 'target'\n ])\n });\n var target = Option.none();\n var delegate = Mutation();\n delegate.events.drag.bind(function (event) {\n target.each(function (t) {\n events.trigger.drag(event.xDelta(), event.yDelta(), t);\n });\n });\n var assign = function (t) {\n target = Option.some(t);\n };\n var get = function () {\n return target;\n };\n return {\n assign: assign,\n get: get,\n mutate: delegate.mutate,\n events: events.registry\n };\n };\n\n var isContentEditableTrue = function (elm) {\n return get(elm, 'contenteditable') === 'true';\n };\n var findClosestContentEditable = function (target, isRoot) {\n return closest$1(target, '[contenteditable]', isRoot);\n };\n\n var resizeBarDragging = Styles.resolve('resizer-bar-dragging');\n var BarManager = function (wire, direction, hdirection) {\n var mutation = BarMutation();\n var resizing = Dragger.transform(mutation, {});\n var hoverTable = Option.none();\n var getResizer = function (element, type) {\n return Option.from(get(element, type));\n };\n mutation.events.drag.bind(function (event) {\n getResizer(event.target(), 'data-row').each(function (_dataRow) {\n var currentRow = CellUtils.getInt(event.target(), 'top');\n set$1(event.target(), 'top', currentRow + event.yDelta() + 'px');\n });\n getResizer(event.target(), 'data-column').each(function (_dataCol) {\n var currentCol = CellUtils.getInt(event.target(), 'left');\n set$1(event.target(), 'left', currentCol + event.xDelta() + 'px');\n });\n });\n var getDelta = function (target, dir) {\n var newX = CellUtils.getInt(target, dir);\n var oldX = parseInt(get(target, 'data-initial-' + dir), 10);\n return newX - oldX;\n };\n resizing.events.stop.bind(function () {\n mutation.get().each(function (target) {\n hoverTable.each(function (table) {\n getResizer(target, 'data-row').each(function (row) {\n var delta = getDelta(target, 'top');\n remove(target, 'data-initial-top');\n events.trigger.adjustHeight(table, delta, parseInt(row, 10));\n });\n getResizer(target, 'data-column').each(function (column) {\n var delta = getDelta(target, 'left');\n remove(target, 'data-initial-left');\n events.trigger.adjustWidth(table, delta, parseInt(column, 10));\n });\n Bars.refresh(wire, table, hdirection, direction);\n });\n });\n });\n var handler = function (target, dir) {\n events.trigger.startAdjust();\n mutation.assign(target);\n set(target, 'data-initial-' + dir, parseInt(get$1(target, dir), 10));\n add$2(target, resizeBarDragging);\n set$1(target, 'opacity', '0.2');\n resizing.go(wire.parent());\n };\n var mousedown = bind$2(wire.parent(), 'mousedown', function (event) {\n if (Bars.isRowBar(event.target())) {\n handler(event.target(), 'top');\n }\n if (Bars.isColBar(event.target())) {\n handler(event.target(), 'left');\n }\n });\n var isRoot = function (e) {\n return eq(e, wire.view());\n };\n var findClosestEditableTable = function (target) {\n return closest$1(target, 'table', isRoot).filter(function (table) {\n return findClosestContentEditable(table, isRoot).exists(isContentEditableTrue);\n });\n };\n var mouseover = bind$2(wire.view(), 'mouseover', function (event) {\n findClosestEditableTable(event.target()).fold(function () {\n if (inBody(event.target())) {\n Bars.destroy(wire);\n }\n }, function (table) {\n hoverTable = Option.some(table);\n Bars.refresh(wire, table, hdirection, direction);\n });\n });\n var destroy = function () {\n mousedown.unbind();\n mouseover.unbind();\n resizing.destroy();\n Bars.destroy(wire);\n };\n var refresh = function (tbl) {\n Bars.refresh(wire, tbl, hdirection, direction);\n };\n var events = Events.create({\n adjustHeight: Event([\n 'table',\n 'delta',\n 'row'\n ]),\n adjustWidth: Event([\n 'table',\n 'delta',\n 'column'\n ]),\n startAdjust: Event([])\n });\n return {\n destroy: destroy,\n refresh: refresh,\n on: resizing.on,\n off: resizing.off,\n hideBars: curry(Bars.hide, wire),\n showBars: curry(Bars.show, wire),\n events: events.registry\n };\n };\n\n var create$2 = function (wire, vdirection) {\n var hdirection = BarPositions.height;\n var manager = BarManager(wire, vdirection, hdirection);\n var events = Events.create({\n beforeResize: Event(['table']),\n afterResize: Event(['table']),\n startDrag: Event([])\n });\n manager.events.adjustHeight.bind(function (event) {\n events.trigger.beforeResize(event.table());\n var delta = hdirection.delta(event.delta(), event.table());\n Adjustments.adjustHeight(event.table(), delta, event.row(), hdirection);\n events.trigger.afterResize(event.table());\n });\n manager.events.startAdjust.bind(function (event) {\n events.trigger.startDrag();\n });\n manager.events.adjustWidth.bind(function (event) {\n events.trigger.beforeResize(event.table());\n var delta = vdirection.delta(event.delta(), event.table());\n Adjustments.adjustWidth(event.table(), delta, event.column(), vdirection);\n events.trigger.afterResize(event.table());\n });\n return {\n on: manager.on,\n off: manager.off,\n hideBars: manager.hideBars,\n showBars: manager.showBars,\n destroy: manager.destroy,\n events: events.registry\n };\n };\n var TableResize = { create: create$2 };\n\n var createContainer = function () {\n var container = Element.fromTag('div');\n setAll$1(container, {\n position: 'static',\n height: '0',\n width: '0',\n padding: '0',\n margin: '0',\n border: '0'\n });\n append(body(), container);\n return container;\n };\n var get$8 = function (editor, container) {\n return editor.inline ? ResizeWire.body(getBody$1(editor), createContainer()) : ResizeWire.only(Element.fromDom(editor.getDoc()));\n };\n var remove$6 = function (editor, wire) {\n if (editor.inline) {\n remove$2(wire.parent());\n }\n };\n var TableWire = {\n get: get$8,\n remove: remove$6\n };\n\n var ResizeHandler = function (editor) {\n var selectionRng = Option.none();\n var resize = Option.none();\n var wire = Option.none();\n var percentageBasedSizeRegex = /(\\d+(\\.\\d+)?)%/;\n var startW, startRawW;\n var isTable = function (elm) {\n return elm.nodeName === 'TABLE';\n };\n var getRawWidth = function (elm) {\n return editor.dom.getStyle(elm, 'width') || editor.dom.getAttrib(elm, 'width');\n };\n var lazyResize = function () {\n return resize;\n };\n var lazyWire = function () {\n return wire.getOr(ResizeWire.only(Element.fromDom(editor.getBody())));\n };\n var destroy = function () {\n resize.each(function (sz) {\n sz.destroy();\n });\n wire.each(function (w) {\n TableWire.remove(editor, w);\n });\n };\n editor.on('init', function () {\n var direction = TableDirection(Direction.directionAt);\n var rawWire = TableWire.get(editor);\n wire = Option.some(rawWire);\n if (hasObjectResizing(editor) && hasTableResizeBars(editor)) {\n var sz = TableResize.create(rawWire, direction);\n sz.on();\n sz.events.startDrag.bind(function (event) {\n selectionRng = Option.some(editor.selection.getRng());\n });\n sz.events.beforeResize.bind(function (event) {\n var rawTable = event.table().dom();\n fireObjectResizeStart(editor, rawTable, getPixelWidth$1(rawTable), getPixelHeight(rawTable));\n });\n sz.events.afterResize.bind(function (event) {\n var table = event.table();\n var rawTable = table.dom();\n removeDataStyle(table);\n selectionRng.each(function (rng) {\n editor.selection.setRng(rng);\n editor.focus();\n });\n fireObjectResized(editor, rawTable, getPixelWidth$1(rawTable), getPixelHeight(rawTable));\n editor.undoManager.add();\n });\n resize = Option.some(sz);\n }\n });\n editor.on('ObjectResizeStart', function (e) {\n var targetElm = e.target;\n if (isTable(targetElm)) {\n startW = e.width;\n startRawW = getRawWidth(targetElm);\n }\n });\n editor.on('ObjectResized', function (e) {\n var targetElm = e.target;\n if (isTable(targetElm)) {\n var table = targetElm;\n if (percentageBasedSizeRegex.test(startRawW)) {\n var percentW = parseFloat(percentageBasedSizeRegex.exec(startRawW)[1]);\n var targetPercentW = e.width * percentW / startW;\n editor.dom.setStyle(table, 'width', targetPercentW + '%');\n } else {\n var newCellSizes_1 = [];\n global$1.each(table.rows, function (row) {\n global$1.each(row.cells, function (cell) {\n var width = editor.dom.getStyle(cell, 'width', true);\n newCellSizes_1.push({\n cell: cell,\n width: width\n });\n });\n });\n global$1.each(newCellSizes_1, function (newCellSize) {\n editor.dom.setStyle(newCellSize.cell, 'width', newCellSize.width);\n editor.dom.setAttrib(newCellSize.cell, 'width', null);\n });\n }\n }\n });\n return {\n lazyResize: lazyResize,\n lazyWire: lazyWire,\n destroy: destroy\n };\n };\n\n var adt$1 = Adt.generate([\n { none: ['current'] },\n { first: ['current'] },\n {\n middle: [\n 'current',\n 'target'\n ]\n },\n { last: ['current'] }\n ]);\n var none$1 = function (current) {\n if (current === void 0) {\n current = undefined;\n }\n return adt$1.none(current);\n };\n var CellLocation = __assign(__assign({}, adt$1), { none: none$1 });\n\n var detect$4 = function (current, isRoot) {\n return TableLookup.table(current, isRoot).bind(function (table) {\n var all = TableLookup.cells(table);\n var index = findIndex(all, function (x) {\n return eq(current, x);\n });\n return index.map(function (ind) {\n return {\n index: constant(ind),\n all: constant(all)\n };\n });\n });\n };\n var next = function (current, isRoot) {\n var detection = detect$4(current, isRoot);\n return detection.fold(function () {\n return CellLocation.none(current);\n }, function (info) {\n return info.index() + 1 < info.all().length ? CellLocation.middle(current, info.all()[info.index() + 1]) : CellLocation.last(current);\n });\n };\n var prev = function (current, isRoot) {\n var detection = detect$4(current, isRoot);\n return detection.fold(function () {\n return CellLocation.none();\n }, function (info) {\n return info.index() - 1 >= 0 ? CellLocation.middle(current, info.all()[info.index() - 1]) : CellLocation.first(current);\n });\n };\n var CellNavigation = {\n next: next,\n prev: prev\n };\n\n var create$3 = Immutable('start', 'soffset', 'finish', 'foffset');\n var SimRange = { create: create$3 };\n\n var adt$2 = Adt.generate([\n { before: ['element'] },\n {\n on: [\n 'element',\n 'offset'\n ]\n },\n { after: ['element'] }\n ]);\n var cata$1 = function (subject, onBefore, onOn, onAfter) {\n return subject.fold(onBefore, onOn, onAfter);\n };\n var getStart = function (situ) {\n return situ.fold(identity, identity, identity);\n };\n var before$2 = adt$2.before;\n var on = adt$2.on;\n var after$2 = adt$2.after;\n var Situ = {\n before: before$2,\n on: on,\n after: after$2,\n cata: cata$1,\n getStart: getStart\n };\n\n var adt$3 = Adt.generate([\n { domRange: ['rng'] },\n {\n relative: [\n 'startSitu',\n 'finishSitu'\n ]\n },\n {\n exact: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n var exactFromRange = function (simRange) {\n return adt$3.exact(simRange.start(), simRange.soffset(), simRange.finish(), simRange.foffset());\n };\n var getStart$1 = function (selection) {\n return selection.match({\n domRange: function (rng) {\n return Element.fromDom(rng.startContainer);\n },\n relative: function (startSitu, finishSitu) {\n return Situ.getStart(startSitu);\n },\n exact: function (start, soffset, finish, foffset) {\n return start;\n }\n });\n };\n var domRange = adt$3.domRange;\n var relative = adt$3.relative;\n var exact = adt$3.exact;\n var getWin = function (selection) {\n var start = getStart$1(selection);\n return defaultView(start);\n };\n var range$1 = SimRange.create;\n var Selection = {\n domRange: domRange,\n relative: relative,\n exact: exact,\n exactFromRange: exactFromRange,\n getWin: getWin,\n range: range$1\n };\n\n var selectNodeContents = function (win, element) {\n var rng = win.document.createRange();\n selectNodeContentsUsing(rng, element);\n return rng;\n };\n var selectNodeContentsUsing = function (rng, element) {\n rng.selectNodeContents(element.dom());\n };\n var setStart = function (rng, situ) {\n situ.fold(function (e) {\n rng.setStartBefore(e.dom());\n }, function (e, o) {\n rng.setStart(e.dom(), o);\n }, function (e) {\n rng.setStartAfter(e.dom());\n });\n };\n var setFinish = function (rng, situ) {\n situ.fold(function (e) {\n rng.setEndBefore(e.dom());\n }, function (e, o) {\n rng.setEnd(e.dom(), o);\n }, function (e) {\n rng.setEndAfter(e.dom());\n });\n };\n var relativeToNative = function (win, startSitu, finishSitu) {\n var range = win.document.createRange();\n setStart(range, startSitu);\n setFinish(range, finishSitu);\n return range;\n };\n var exactToNative = function (win, start, soffset, finish, foffset) {\n var rng = win.document.createRange();\n rng.setStart(start.dom(), soffset);\n rng.setEnd(finish.dom(), foffset);\n return rng;\n };\n var toRect = function (rect) {\n return {\n left: constant(rect.left),\n top: constant(rect.top),\n right: constant(rect.right),\n bottom: constant(rect.bottom),\n width: constant(rect.width),\n height: constant(rect.height)\n };\n };\n var getFirstRect = function (rng) {\n var rects = rng.getClientRects();\n var rect = rects.length > 0 ? rects[0] : rng.getBoundingClientRect();\n return rect.width > 0 || rect.height > 0 ? Option.some(rect).map(toRect) : Option.none();\n };\n\n var adt$4 = Adt.generate([\n {\n ltr: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n },\n {\n rtl: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n var fromRange = function (win, type, range) {\n return type(Element.fromDom(range.startContainer), range.startOffset, Element.fromDom(range.endContainer), range.endOffset);\n };\n var getRanges = function (win, selection) {\n return selection.match({\n domRange: function (rng) {\n return {\n ltr: constant(rng),\n rtl: Option.none\n };\n },\n relative: function (startSitu, finishSitu) {\n return {\n ltr: cached(function () {\n return relativeToNative(win, startSitu, finishSitu);\n }),\n rtl: cached(function () {\n return Option.some(relativeToNative(win, finishSitu, startSitu));\n })\n };\n },\n exact: function (start, soffset, finish, foffset) {\n return {\n ltr: cached(function () {\n return exactToNative(win, start, soffset, finish, foffset);\n }),\n rtl: cached(function () {\n return Option.some(exactToNative(win, finish, foffset, start, soffset));\n })\n };\n }\n });\n };\n var doDiagnose = function (win, ranges) {\n var rng = ranges.ltr();\n if (rng.collapsed) {\n var reversed = ranges.rtl().filter(function (rev) {\n return rev.collapsed === false;\n });\n return reversed.map(function (rev) {\n return adt$4.rtl(Element.fromDom(rev.endContainer), rev.endOffset, Element.fromDom(rev.startContainer), rev.startOffset);\n }).getOrThunk(function () {\n return fromRange(win, adt$4.ltr, rng);\n });\n } else {\n return fromRange(win, adt$4.ltr, rng);\n }\n };\n var diagnose = function (win, selection) {\n var ranges = getRanges(win, selection);\n return doDiagnose(win, ranges);\n };\n var asLtrRange = function (win, selection) {\n var diagnosis = diagnose(win, selection);\n return diagnosis.match({\n ltr: function (start, soffset, finish, foffset) {\n var rng = win.document.createRange();\n rng.setStart(start.dom(), soffset);\n rng.setEnd(finish.dom(), foffset);\n return rng;\n },\n rtl: function (start, soffset, finish, foffset) {\n var rng = win.document.createRange();\n rng.setStart(finish.dom(), foffset);\n rng.setEnd(start.dom(), soffset);\n return rng;\n }\n });\n };\n\n var searchForPoint = function (rectForOffset, x, y, maxX, length) {\n if (length === 0) {\n return 0;\n } else if (x === maxX) {\n return length - 1;\n }\n var xDelta = maxX;\n for (var i = 1; i < length; i++) {\n var rect = rectForOffset(i);\n var curDeltaX = Math.abs(x - rect.left);\n if (y <= rect.bottom) {\n if (y < rect.top || curDeltaX > xDelta) {\n return i - 1;\n } else {\n xDelta = curDeltaX;\n }\n }\n }\n return 0;\n };\n var inRect = function (rect, x, y) {\n return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;\n };\n\n var locateOffset = function (doc, textnode, x, y, rect) {\n var rangeForOffset = function (o) {\n var r = doc.dom().createRange();\n r.setStart(textnode.dom(), o);\n r.collapse(true);\n return r;\n };\n var rectForOffset = function (o) {\n var r = rangeForOffset(o);\n return r.getBoundingClientRect();\n };\n var length = get$2(textnode).length;\n var offset = searchForPoint(rectForOffset, x, y, rect.right, length);\n return rangeForOffset(offset);\n };\n var locate = function (doc, node, x, y) {\n var r = doc.dom().createRange();\n r.selectNode(node.dom());\n var rects = r.getClientRects();\n var foundRect = findMap(rects, function (rect) {\n return inRect(rect, x, y) ? Option.some(rect) : Option.none();\n });\n return foundRect.map(function (rect) {\n return locateOffset(doc, node, x, y, rect);\n });\n };\n\n var searchInChildren = function (doc, node, x, y) {\n var r = doc.dom().createRange();\n var nodes = children(node);\n return findMap(nodes, function (n) {\n r.selectNode(n.dom());\n return inRect(r.getBoundingClientRect(), x, y) ? locateNode(doc, n, x, y) : Option.none();\n });\n };\n var locateNode = function (doc, node, x, y) {\n return isText(node) ? locate(doc, node, x, y) : searchInChildren(doc, node, x, y);\n };\n var locate$1 = function (doc, node, x, y) {\n var r = doc.dom().createRange();\n r.selectNode(node.dom());\n var rect = r.getBoundingClientRect();\n var boundedX = Math.max(rect.left, Math.min(rect.right, x));\n var boundedY = Math.max(rect.top, Math.min(rect.bottom, y));\n return locateNode(doc, node, boundedX, boundedY);\n };\n\n var COLLAPSE_TO_LEFT = true;\n var COLLAPSE_TO_RIGHT = false;\n var getCollapseDirection = function (rect, x) {\n return x - rect.left < rect.right - x ? COLLAPSE_TO_LEFT : COLLAPSE_TO_RIGHT;\n };\n var createCollapsedNode = function (doc, target, collapseDirection) {\n var r = doc.dom().createRange();\n r.selectNode(target.dom());\n r.collapse(collapseDirection);\n return r;\n };\n var locateInElement = function (doc, node, x) {\n var cursorRange = doc.dom().createRange();\n cursorRange.selectNode(node.dom());\n var rect = cursorRange.getBoundingClientRect();\n var collapseDirection = getCollapseDirection(rect, x);\n var f = collapseDirection === COLLAPSE_TO_LEFT ? first : last$1;\n return f(node).map(function (target) {\n return createCollapsedNode(doc, target, collapseDirection);\n });\n };\n var locateInEmpty = function (doc, node, x) {\n var rect = node.dom().getBoundingClientRect();\n var collapseDirection = getCollapseDirection(rect, x);\n return Option.some(createCollapsedNode(doc, node, collapseDirection));\n };\n var search = function (doc, node, x) {\n var f = children(node).length === 0 ? locateInEmpty : locateInElement;\n return f(doc, node, x);\n };\n\n var caretPositionFromPoint = function (doc, x, y) {\n return Option.from(doc.dom().caretPositionFromPoint(x, y)).bind(function (pos) {\n if (pos.offsetNode === null) {\n return Option.none();\n }\n var r = doc.dom().createRange();\n r.setStart(pos.offsetNode, pos.offset);\n r.collapse();\n return Option.some(r);\n });\n };\n var caretRangeFromPoint = function (doc, x, y) {\n return Option.from(doc.dom().caretRangeFromPoint(x, y));\n };\n var searchTextNodes = function (doc, node, x, y) {\n var r = doc.dom().createRange();\n r.selectNode(node.dom());\n var rect = r.getBoundingClientRect();\n var boundedX = Math.max(rect.left, Math.min(rect.right, x));\n var boundedY = Math.max(rect.top, Math.min(rect.bottom, y));\n return locate$1(doc, node, boundedX, boundedY);\n };\n var searchFromPoint = function (doc, x, y) {\n return Element.fromPoint(doc, x, y).bind(function (elem) {\n var fallback = function () {\n return search(doc, elem, x);\n };\n return children(elem).length === 0 ? fallback() : searchTextNodes(doc, elem, x, y).orThunk(fallback);\n });\n };\n var availableSearch = document.caretPositionFromPoint ? caretPositionFromPoint : document.caretRangeFromPoint ? caretRangeFromPoint : searchFromPoint;\n var fromPoint$1 = function (win, x, y) {\n var doc = Element.fromDom(win.document);\n return availableSearch(doc, x, y).map(function (rng) {\n return SimRange.create(Element.fromDom(rng.startContainer), rng.startOffset, Element.fromDom(rng.endContainer), rng.endOffset);\n });\n };\n\n var beforeSpecial = function (element, offset) {\n var name$1 = name(element);\n if ('input' === name$1) {\n return Situ.after(element);\n } else if (!contains([\n 'br',\n 'img'\n ], name$1)) {\n return Situ.on(element, offset);\n } else {\n return offset === 0 ? Situ.before(element) : Situ.after(element);\n }\n };\n var preprocessRelative = function (startSitu, finishSitu) {\n var start = startSitu.fold(Situ.before, beforeSpecial, Situ.after);\n var finish = finishSitu.fold(Situ.before, beforeSpecial, Situ.after);\n return Selection.relative(start, finish);\n };\n var preprocessExact = function (start, soffset, finish, foffset) {\n var startSitu = beforeSpecial(start, soffset);\n var finishSitu = beforeSpecial(finish, foffset);\n return Selection.relative(startSitu, finishSitu);\n };\n var preprocess = function (selection) {\n return selection.match({\n domRange: function (rng) {\n var start = Element.fromDom(rng.startContainer);\n var finish = Element.fromDom(rng.endContainer);\n return preprocessExact(start, rng.startOffset, finish, rng.endOffset);\n },\n relative: preprocessRelative,\n exact: preprocessExact\n });\n };\n\n var makeRange = function (start, soffset, finish, foffset) {\n var doc = owner(start);\n var rng = doc.dom().createRange();\n rng.setStart(start.dom(), soffset);\n rng.setEnd(finish.dom(), foffset);\n return rng;\n };\n var after$3 = function (start, soffset, finish, foffset) {\n var r = makeRange(start, soffset, finish, foffset);\n var same = eq(start, finish) && soffset === foffset;\n return r.collapsed && !same;\n };\n\n var doSetNativeRange = function (win, rng) {\n Option.from(win.getSelection()).each(function (selection) {\n selection.removeAllRanges();\n selection.addRange(rng);\n });\n };\n var doSetRange = function (win, start, soffset, finish, foffset) {\n var rng = exactToNative(win, start, soffset, finish, foffset);\n doSetNativeRange(win, rng);\n };\n var setLegacyRtlRange = function (win, selection, start, soffset, finish, foffset) {\n selection.collapse(start.dom(), soffset);\n selection.extend(finish.dom(), foffset);\n };\n var setRangeFromRelative = function (win, relative) {\n return diagnose(win, relative).match({\n ltr: function (start, soffset, finish, foffset) {\n doSetRange(win, start, soffset, finish, foffset);\n },\n rtl: function (start, soffset, finish, foffset) {\n var selection = win.getSelection();\n if (selection.setBaseAndExtent) {\n selection.setBaseAndExtent(start.dom(), soffset, finish.dom(), foffset);\n } else if (selection.extend) {\n try {\n setLegacyRtlRange(win, selection, start, soffset, finish, foffset);\n } catch (e) {\n doSetRange(win, finish, foffset, start, soffset);\n }\n } else {\n doSetRange(win, finish, foffset, start, soffset);\n }\n }\n });\n };\n var setExact = function (win, start, soffset, finish, foffset) {\n var relative = preprocessExact(start, soffset, finish, foffset);\n setRangeFromRelative(win, relative);\n };\n var setRelative = function (win, startSitu, finishSitu) {\n var relative = preprocessRelative(startSitu, finishSitu);\n setRangeFromRelative(win, relative);\n };\n var toNative = function (selection) {\n var win = Selection.getWin(selection).dom();\n var getDomRange = function (start, soffset, finish, foffset) {\n return exactToNative(win, start, soffset, finish, foffset);\n };\n var filtered = preprocess(selection);\n return diagnose(win, filtered).match({\n ltr: getDomRange,\n rtl: getDomRange\n });\n };\n var readRange = function (selection) {\n if (selection.rangeCount > 0) {\n var firstRng = selection.getRangeAt(0);\n var lastRng = selection.getRangeAt(selection.rangeCount - 1);\n return Option.some(SimRange.create(Element.fromDom(firstRng.startContainer), firstRng.startOffset, Element.fromDom(lastRng.endContainer), lastRng.endOffset));\n } else {\n return Option.none();\n }\n };\n var doGetExact = function (selection) {\n var anchor = Element.fromDom(selection.anchorNode);\n var focus = Element.fromDom(selection.focusNode);\n return after$3(anchor, selection.anchorOffset, focus, selection.focusOffset) ? Option.some(SimRange.create(anchor, selection.anchorOffset, focus, selection.focusOffset)) : readRange(selection);\n };\n var setToElement = function (win, element) {\n var rng = selectNodeContents(win, element);\n doSetNativeRange(win, rng);\n };\n var getExact = function (win) {\n return Option.from(win.getSelection()).filter(function (sel) {\n return sel.rangeCount > 0;\n }).bind(doGetExact);\n };\n var get$9 = function (win) {\n return getExact(win).map(function (range) {\n return Selection.exact(range.start(), range.soffset(), range.finish(), range.foffset());\n });\n };\n var getFirstRect$1 = function (win, selection) {\n var rng = asLtrRange(win, selection);\n return getFirstRect(rng);\n };\n var getAtPoint = function (win, x, y) {\n return fromPoint$1(win, x, y);\n };\n var clear = function (win) {\n var selection = win.getSelection();\n selection.removeAllRanges();\n };\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n var forward = function (editor, isRoot, cell, lazyWire) {\n return go(editor, isRoot, CellNavigation.next(cell), lazyWire);\n };\n var backward = function (editor, isRoot, cell, lazyWire) {\n return go(editor, isRoot, CellNavigation.prev(cell), lazyWire);\n };\n var getCellFirstCursorPosition = function (editor, cell) {\n var selection = Selection.exact(cell, 0, cell, 0);\n return toNative(selection);\n };\n var getNewRowCursorPosition = function (editor, table) {\n var rows = descendants$1(table, 'tr');\n return last(rows).bind(function (last) {\n return descendant$1(last, 'td,th').map(function (first) {\n return getCellFirstCursorPosition(editor, first);\n });\n });\n };\n var go = function (editor, isRoot, cell, actions, lazyWire) {\n return cell.fold(Option.none, Option.none, function (current, next) {\n return first(next).map(function (cell) {\n return getCellFirstCursorPosition(editor, cell);\n });\n }, function (current) {\n return TableLookup.table(current, isRoot).bind(function (table) {\n var targets = TableTargets.noMenu(current);\n editor.undoManager.transact(function () {\n actions.insertRowsAfter(table, targets);\n });\n return getNewRowCursorPosition(editor, table);\n });\n });\n };\n var rootElements = [\n 'table',\n 'li',\n 'dl'\n ];\n var handle$1 = function (event, editor, actions, lazyWire) {\n if (event.keyCode === global$3.TAB) {\n var body_1 = getBody$1(editor);\n var isRoot_1 = function (element) {\n var name$1 = name(element);\n return eq(element, body_1) || contains(rootElements, name$1);\n };\n var rng = editor.selection.getRng();\n if (rng.collapsed) {\n var start = Element.fromDom(rng.startContainer);\n TableLookup.cell(start, isRoot_1).each(function (cell) {\n event.preventDefault();\n var navigation = event.shiftKey ? backward : forward;\n var rng = navigation(editor, isRoot_1, cell, actions, lazyWire);\n rng.each(function (range) {\n editor.selection.setRng(range);\n });\n });\n }\n }\n };\n var TabContext = { handle: handle$1 };\n\n var create$4 = Immutable('selection', 'kill');\n var Response = { create: create$4 };\n\n var create$5 = function (start, soffset, finish, foffset) {\n return {\n start: constant(Situ.on(start, soffset)),\n finish: constant(Situ.on(finish, foffset))\n };\n };\n var Situs = { create: create$5 };\n\n var convertToRange = function (win, selection) {\n var rng = asLtrRange(win, selection);\n return SimRange.create(Element.fromDom(rng.startContainer), rng.startOffset, Element.fromDom(rng.endContainer), rng.endOffset);\n };\n var makeSitus = Situs.create;\n var Util = {\n convertToRange: convertToRange,\n makeSitus: makeSitus\n };\n\n var sync = function (container, isRoot, start, soffset, finish, foffset, selectRange) {\n if (!(eq(start, finish) && soffset === foffset)) {\n return closest$1(start, 'td,th', isRoot).bind(function (s) {\n return closest$1(finish, 'td,th', isRoot).bind(function (f) {\n return detect$5(container, isRoot, s, f, selectRange);\n });\n });\n } else {\n return Option.none();\n }\n };\n var detect$5 = function (container, isRoot, start, finish, selectRange) {\n if (!eq(start, finish)) {\n return CellSelection.identify(start, finish, isRoot).bind(function (cellSel) {\n var boxes = cellSel.boxes().getOr([]);\n if (boxes.length > 0) {\n selectRange(container, boxes, cellSel.start(), cellSel.finish());\n return Option.some(Response.create(Option.some(Util.makeSitus(start, 0, start, getEnd(start))), true));\n } else {\n return Option.none();\n }\n });\n } else {\n return Option.none();\n }\n };\n var update = function (rows, columns, container, selected, annotations) {\n var updateSelection = function (newSels) {\n annotations.clear(container);\n annotations.selectRange(container, newSels.boxes(), newSels.start(), newSels.finish());\n return newSels.boxes();\n };\n return CellSelection.shiftSelection(selected, rows, columns, annotations.firstSelectedSelector(), annotations.lastSelectedSelector()).map(updateSelection);\n };\n var KeySelection = {\n sync: sync,\n detect: detect$5,\n update: update\n };\n\n var traverse = Immutable('item', 'mode');\n var backtrack = function (universe, item, _direction, transition) {\n if (transition === void 0) {\n transition = sidestep;\n }\n return universe.property().parent(item).map(function (p) {\n return traverse(p, transition);\n });\n };\n var sidestep = function (universe, item, direction, transition) {\n if (transition === void 0) {\n transition = advance;\n }\n return direction.sibling(universe, item).map(function (p) {\n return traverse(p, transition);\n });\n };\n var advance = function (universe, item, direction, transition) {\n if (transition === void 0) {\n transition = advance;\n }\n var children = universe.property().children(item);\n var result = direction.first(children);\n return result.map(function (r) {\n return traverse(r, transition);\n });\n };\n var successors = [\n {\n current: backtrack,\n next: sidestep,\n fallback: Option.none()\n },\n {\n current: sidestep,\n next: advance,\n fallback: Option.some(backtrack)\n },\n {\n current: advance,\n next: advance,\n fallback: Option.some(sidestep)\n }\n ];\n var go$1 = function (universe, item, mode, direction, rules) {\n if (rules === void 0) {\n rules = successors;\n }\n var ruleOpt = find(rules, function (succ) {\n return succ.current === mode;\n });\n return ruleOpt.bind(function (rule) {\n return rule.current(universe, item, direction, rule.next).orThunk(function () {\n return rule.fallback.bind(function (fb) {\n return go$1(universe, item, fb, direction);\n });\n });\n });\n };\n\n var left = function () {\n var sibling = function (universe, item) {\n return universe.query().prevSibling(item);\n };\n var first = function (children) {\n return children.length > 0 ? Option.some(children[children.length - 1]) : Option.none();\n };\n return {\n sibling: sibling,\n first: first\n };\n };\n var right = function () {\n var sibling = function (universe, item) {\n return universe.query().nextSibling(item);\n };\n var first = function (children) {\n return children.length > 0 ? Option.some(children[0]) : Option.none();\n };\n return {\n sibling: sibling,\n first: first\n };\n };\n var Walkers = {\n left: left,\n right: right\n };\n\n var hone = function (universe, item, predicate, mode, direction, isRoot) {\n var next = go$1(universe, item, mode, direction);\n return next.bind(function (n) {\n if (isRoot(n.item())) {\n return Option.none();\n } else {\n return predicate(n.item()) ? Option.some(n.item()) : hone(universe, n.item(), predicate, n.mode(), direction, isRoot);\n }\n });\n };\n var left$1 = function (universe, item, predicate, isRoot) {\n return hone(universe, item, predicate, sidestep, Walkers.left(), isRoot);\n };\n var right$1 = function (universe, item, predicate, isRoot) {\n return hone(universe, item, predicate, sidestep, Walkers.right(), isRoot);\n };\n\n var isLeaf = function (universe) {\n return function (element) {\n return universe.property().children(element).length === 0;\n };\n };\n var before$3 = function (universe, item, isRoot) {\n return seekLeft(universe, item, isLeaf(universe), isRoot);\n };\n var after$4 = function (universe, item, isRoot) {\n return seekRight(universe, item, isLeaf(universe), isRoot);\n };\n var seekLeft = left$1;\n var seekRight = right$1;\n\n var universe$2 = DomUniverse();\n var before$4 = function (element, isRoot) {\n return before$3(universe$2, element, isRoot);\n };\n var after$5 = function (element, isRoot) {\n return after$4(universe$2, element, isRoot);\n };\n var seekLeft$1 = function (element, predicate, isRoot) {\n return seekLeft(universe$2, element, predicate, isRoot);\n };\n var seekRight$1 = function (element, predicate, isRoot) {\n return seekRight(universe$2, element, predicate, isRoot);\n };\n\n var ancestor$2 = function (scope, predicate, isRoot) {\n return ancestor(scope, predicate, isRoot).isSome();\n };\n\n var point = Immutable('element', 'offset');\n var delta = Immutable('element', 'deltaOffset');\n var range$2 = Immutable('element', 'start', 'finish');\n var points = Immutable('begin', 'end');\n var text = Immutable('element', 'text');\n\n var adt$5 = Adt.generate([\n { none: ['message'] },\n { success: [] },\n { failedUp: ['cell'] },\n { failedDown: ['cell'] }\n ]);\n var isOverlapping = function (bridge, before, after) {\n var beforeBounds = bridge.getRect(before);\n var afterBounds = bridge.getRect(after);\n return afterBounds.right > beforeBounds.left && afterBounds.left < beforeBounds.right;\n };\n var isRow = function (elem) {\n return closest$1(elem, 'tr');\n };\n var verify = function (bridge, before, beforeOffset, after, afterOffset, failure, isRoot) {\n return closest$1(after, 'td,th', isRoot).bind(function (afterCell) {\n return closest$1(before, 'td,th', isRoot).map(function (beforeCell) {\n if (!eq(afterCell, beforeCell)) {\n return DomParent.sharedOne(isRow, [\n afterCell,\n beforeCell\n ]).fold(function () {\n return isOverlapping(bridge, beforeCell, afterCell) ? adt$5.success() : failure(beforeCell);\n }, function (_sharedRow) {\n return failure(beforeCell);\n });\n } else {\n return eq(after, afterCell) && getEnd(afterCell) === afterOffset ? failure(beforeCell) : adt$5.none('in same cell');\n }\n });\n }).getOr(adt$5.none('default'));\n };\n var cata$2 = function (subject, onNone, onSuccess, onFailedUp, onFailedDown) {\n return subject.fold(onNone, onSuccess, onFailedUp, onFailedDown);\n };\n var BeforeAfter = __assign(__assign({}, adt$5), {\n verify: verify,\n cata: cata$2\n });\n\n var inAncestor = Immutable('ancestor', 'descendants', 'element', 'index');\n var inParent = Immutable('parent', 'children', 'element', 'index');\n var indexInParent = function (element) {\n return parent(element).bind(function (parent) {\n var children$1 = children(parent);\n return indexOf(children$1, element).map(function (index) {\n return inParent(parent, children$1, element, index);\n });\n });\n };\n var indexOf = function (elements, element) {\n return findIndex(elements, curry(eq, element));\n };\n\n var isBr = function (elem) {\n return name(elem) === 'br';\n };\n var gatherer = function (cand, gather, isRoot) {\n return gather(cand, isRoot).bind(function (target) {\n return isText(target) && get$2(target).trim().length === 0 ? gatherer(target, gather, isRoot) : Option.some(target);\n });\n };\n var handleBr = function (isRoot, element, direction) {\n return direction.traverse(element).orThunk(function () {\n return gatherer(element, direction.gather, isRoot);\n }).map(direction.relative);\n };\n var findBr = function (element, offset) {\n return child(element, offset).filter(isBr).orThunk(function () {\n return child(element, offset - 1).filter(isBr);\n });\n };\n var handleParent = function (isRoot, element, offset, direction) {\n return findBr(element, offset).bind(function (br) {\n return direction.traverse(br).fold(function () {\n return gatherer(br, direction.gather, isRoot).map(direction.relative);\n }, function (adjacent) {\n return indexInParent(adjacent).map(function (info) {\n return Situ.on(info.parent(), info.index());\n });\n });\n });\n };\n var tryBr = function (isRoot, element, offset, direction) {\n var target = isBr(element) ? handleBr(isRoot, element, direction) : handleParent(isRoot, element, offset, direction);\n return target.map(function (tgt) {\n return {\n start: constant(tgt),\n finish: constant(tgt)\n };\n });\n };\n var process = function (analysis) {\n return BeforeAfter.cata(analysis, function (message) {\n return Option.none();\n }, function () {\n return Option.none();\n }, function (cell) {\n return Option.some(point(cell, 0));\n }, function (cell) {\n return Option.some(point(cell, getEnd(cell)));\n });\n };\n var BrTags = {\n tryBr: tryBr,\n process: process\n };\n\n var nu$3 = MixedBag([\n 'left',\n 'top',\n 'right',\n 'bottom'\n ], []);\n var moveDown = function (caret, amount) {\n return nu$3({\n left: caret.left(),\n top: caret.top() + amount,\n right: caret.right(),\n bottom: caret.bottom() + amount\n });\n };\n var moveUp = function (caret, amount) {\n return nu$3({\n left: caret.left(),\n top: caret.top() - amount,\n right: caret.right(),\n bottom: caret.bottom() - amount\n });\n };\n var moveBottomTo = function (caret, bottom) {\n var height = caret.bottom() - caret.top();\n return nu$3({\n left: caret.left(),\n top: bottom - height,\n right: caret.right(),\n bottom: bottom\n });\n };\n var moveTopTo = function (caret, top) {\n var height = caret.bottom() - caret.top();\n return nu$3({\n left: caret.left(),\n top: top,\n right: caret.right(),\n bottom: top + height\n });\n };\n var translate = function (caret, xDelta, yDelta) {\n return nu$3({\n left: caret.left() + xDelta,\n top: caret.top() + yDelta,\n right: caret.right() + xDelta,\n bottom: caret.bottom() + yDelta\n });\n };\n var getTop$1 = function (caret) {\n return caret.top();\n };\n var getBottom = function (caret) {\n return caret.bottom();\n };\n var toString = function (caret) {\n return '(' + caret.left() + ', ' + caret.top() + ') -> (' + caret.right() + ', ' + caret.bottom() + ')';\n };\n var Carets = {\n nu: nu$3,\n moveUp: moveUp,\n moveDown: moveDown,\n moveBottomTo: moveBottomTo,\n moveTopTo: moveTopTo,\n getTop: getTop$1,\n getBottom: getBottom,\n translate: translate,\n toString: toString\n };\n\n var getPartialBox = function (bridge, element, offset) {\n if (offset >= 0 && offset < getEnd(element)) {\n return bridge.getRangedRect(element, offset, element, offset + 1);\n } else if (offset > 0) {\n return bridge.getRangedRect(element, offset - 1, element, offset);\n }\n return Option.none();\n };\n var toCaret = function (rect) {\n return Carets.nu({\n left: rect.left,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom\n });\n };\n var getElemBox = function (bridge, element) {\n return Option.some(bridge.getRect(element));\n };\n var getBoxAt = function (bridge, element, offset) {\n if (isElement(element)) {\n return getElemBox(bridge, element).map(toCaret);\n } else if (isText(element)) {\n return getPartialBox(bridge, element, offset).map(toCaret);\n } else {\n return Option.none();\n }\n };\n var getEntireBox = function (bridge, element) {\n if (isElement(element)) {\n return getElemBox(bridge, element).map(toCaret);\n } else if (isText(element)) {\n return bridge.getRangedRect(element, 0, element, getEnd(element)).map(toCaret);\n } else {\n return Option.none();\n }\n };\n var Rectangles = {\n getBoxAt: getBoxAt,\n getEntireBox: getEntireBox\n };\n\n var JUMP_SIZE = 5;\n var NUM_RETRIES = 100;\n var adt$6 = Adt.generate([\n { none: [] },\n { retry: ['caret'] }\n ]);\n var isOutside = function (caret, box) {\n return caret.left() < box.left() || Math.abs(box.right() - caret.left()) < 1 || caret.left() > box.right();\n };\n var inOutsideBlock = function (bridge, element, caret) {\n return closest(element, DomStructure.isBlock).fold(constant(false), function (cell) {\n return Rectangles.getEntireBox(bridge, cell).exists(function (box) {\n return isOutside(caret, box);\n });\n });\n };\n var adjustDown = function (bridge, element, guessBox, original, caret) {\n var lowerCaret = Carets.moveDown(caret, JUMP_SIZE);\n if (Math.abs(guessBox.bottom() - original.bottom()) < 1) {\n return adt$6.retry(lowerCaret);\n } else if (guessBox.top() > caret.bottom()) {\n return adt$6.retry(lowerCaret);\n } else if (guessBox.top() === caret.bottom()) {\n return adt$6.retry(Carets.moveDown(caret, 1));\n } else {\n return inOutsideBlock(bridge, element, caret) ? adt$6.retry(Carets.translate(lowerCaret, JUMP_SIZE, 0)) : adt$6.none();\n }\n };\n var adjustUp = function (bridge, element, guessBox, original, caret) {\n var higherCaret = Carets.moveUp(caret, JUMP_SIZE);\n if (Math.abs(guessBox.top() - original.top()) < 1) {\n return adt$6.retry(higherCaret);\n } else if (guessBox.bottom() < caret.top()) {\n return adt$6.retry(higherCaret);\n } else if (guessBox.bottom() === caret.top()) {\n return adt$6.retry(Carets.moveUp(caret, 1));\n } else {\n return inOutsideBlock(bridge, element, caret) ? adt$6.retry(Carets.translate(higherCaret, JUMP_SIZE, 0)) : adt$6.none();\n }\n };\n var upMovement = {\n point: Carets.getTop,\n adjuster: adjustUp,\n move: Carets.moveUp,\n gather: before$4\n };\n var downMovement = {\n point: Carets.getBottom,\n adjuster: adjustDown,\n move: Carets.moveDown,\n gather: after$5\n };\n var isAtTable = function (bridge, x, y) {\n return bridge.elementFromPoint(x, y).filter(function (elm) {\n return name(elm) === 'table';\n }).isSome();\n };\n var adjustForTable = function (bridge, movement, original, caret, numRetries) {\n return adjustTil(bridge, movement, original, movement.move(caret, JUMP_SIZE), numRetries);\n };\n var adjustTil = function (bridge, movement, original, caret, numRetries) {\n if (numRetries === 0) {\n return Option.some(caret);\n }\n if (isAtTable(bridge, caret.left(), movement.point(caret))) {\n return adjustForTable(bridge, movement, original, caret, numRetries - 1);\n }\n return bridge.situsFromPoint(caret.left(), movement.point(caret)).bind(function (guess) {\n return guess.start().fold(Option.none, function (element) {\n return Rectangles.getEntireBox(bridge, element).bind(function (guessBox) {\n return movement.adjuster(bridge, element, guessBox, original, caret).fold(Option.none, function (newCaret) {\n return adjustTil(bridge, movement, original, newCaret, numRetries - 1);\n });\n }).orThunk(function () {\n return Option.some(caret);\n });\n }, Option.none);\n });\n };\n var ieTryDown = function (bridge, caret) {\n return bridge.situsFromPoint(caret.left(), caret.bottom() + JUMP_SIZE);\n };\n var ieTryUp = function (bridge, caret) {\n return bridge.situsFromPoint(caret.left(), caret.top() - JUMP_SIZE);\n };\n var checkScroll = function (movement, adjusted, bridge) {\n if (movement.point(adjusted) > bridge.getInnerHeight()) {\n return Option.some(movement.point(adjusted) - bridge.getInnerHeight());\n } else if (movement.point(adjusted) < 0) {\n return Option.some(-movement.point(adjusted));\n } else {\n return Option.none();\n }\n };\n var retry = function (movement, bridge, caret) {\n var moved = movement.move(caret, JUMP_SIZE);\n var adjusted = adjustTil(bridge, movement, caret, moved, NUM_RETRIES).getOr(moved);\n return checkScroll(movement, adjusted, bridge).fold(function () {\n return bridge.situsFromPoint(adjusted.left(), movement.point(adjusted));\n }, function (delta) {\n bridge.scrollBy(0, delta);\n return bridge.situsFromPoint(adjusted.left(), movement.point(adjusted) - delta);\n });\n };\n var Retries = {\n tryUp: curry(retry, upMovement),\n tryDown: curry(retry, downMovement),\n ieTryUp: ieTryUp,\n ieTryDown: ieTryDown,\n getJumpSize: constant(JUMP_SIZE)\n };\n\n var MAX_RETRIES = 20;\n var platform$1 = PlatformDetection$1.detect();\n var findSpot = function (bridge, isRoot, direction) {\n return bridge.getSelection().bind(function (sel) {\n return BrTags.tryBr(isRoot, sel.finish(), sel.foffset(), direction).fold(function () {\n return Option.some(point(sel.finish(), sel.foffset()));\n }, function (brNeighbour) {\n var range = bridge.fromSitus(brNeighbour);\n var analysis = BeforeAfter.verify(bridge, sel.finish(), sel.foffset(), range.finish(), range.foffset(), direction.failure, isRoot);\n return BrTags.process(analysis);\n });\n });\n };\n var scan = function (bridge, isRoot, element, offset, direction, numRetries) {\n if (numRetries === 0) {\n return Option.none();\n }\n return tryCursor(bridge, isRoot, element, offset, direction).bind(function (situs) {\n var range = bridge.fromSitus(situs);\n var analysis = BeforeAfter.verify(bridge, element, offset, range.finish(), range.foffset(), direction.failure, isRoot);\n return BeforeAfter.cata(analysis, function () {\n return Option.none();\n }, function () {\n return Option.some(situs);\n }, function (cell) {\n if (eq(element, cell) && offset === 0) {\n return tryAgain(bridge, element, offset, Carets.moveUp, direction);\n } else {\n return scan(bridge, isRoot, cell, 0, direction, numRetries - 1);\n }\n }, function (cell) {\n if (eq(element, cell) && offset === getEnd(cell)) {\n return tryAgain(bridge, element, offset, Carets.moveDown, direction);\n } else {\n return scan(bridge, isRoot, cell, getEnd(cell), direction, numRetries - 1);\n }\n });\n });\n };\n var tryAgain = function (bridge, element, offset, move, direction) {\n return Rectangles.getBoxAt(bridge, element, offset).bind(function (box) {\n return tryAt(bridge, direction, move(box, Retries.getJumpSize()));\n });\n };\n var tryAt = function (bridge, direction, box) {\n if (platform$1.browser.isChrome() || platform$1.browser.isSafari() || platform$1.browser.isFirefox() || platform$1.browser.isEdge()) {\n return direction.otherRetry(bridge, box);\n } else if (platform$1.browser.isIE()) {\n return direction.ieRetry(bridge, box);\n } else {\n return Option.none();\n }\n };\n var tryCursor = function (bridge, isRoot, element, offset, direction) {\n return Rectangles.getBoxAt(bridge, element, offset).bind(function (box) {\n return tryAt(bridge, direction, box);\n });\n };\n var handle$2 = function (bridge, isRoot, direction) {\n return findSpot(bridge, isRoot, direction).bind(function (spot) {\n return scan(bridge, isRoot, spot.element(), spot.offset(), direction, MAX_RETRIES).map(bridge.fromSitus);\n });\n };\n var TableKeys = { handle: handle$2 };\n\n var detection = PlatformDetection$1.detect();\n var inSameTable = function (elem, table) {\n return ancestor$2(elem, function (e) {\n return parent(e).exists(function (p) {\n return eq(p, table);\n });\n });\n };\n var simulate = function (bridge, isRoot, direction, initial, anchor) {\n return closest$1(initial, 'td,th', isRoot).bind(function (start) {\n return closest$1(start, 'table', isRoot).bind(function (table) {\n if (!inSameTable(anchor, table)) {\n return Option.none();\n }\n return TableKeys.handle(bridge, isRoot, direction).bind(function (range) {\n return closest$1(range.finish(), 'td,th', isRoot).map(function (finish) {\n return {\n start: constant(start),\n finish: constant(finish),\n range: constant(range)\n };\n });\n });\n });\n });\n };\n var navigate = function (bridge, isRoot, direction, initial, anchor, precheck) {\n if (detection.browser.isIE()) {\n return Option.none();\n } else {\n return precheck(initial, isRoot).orThunk(function () {\n return simulate(bridge, isRoot, direction, initial, anchor).map(function (info) {\n var range = info.range();\n return Response.create(Option.some(Util.makeSitus(range.start(), range.soffset(), range.finish(), range.foffset())), true);\n });\n });\n }\n };\n var firstUpCheck = function (initial, isRoot) {\n return closest$1(initial, 'tr', isRoot).bind(function (startRow) {\n return closest$1(startRow, 'table', isRoot).bind(function (table) {\n var rows = descendants$1(table, 'tr');\n if (eq(startRow, rows[0])) {\n return seekLeft$1(table, function (element) {\n return last$1(element).isSome();\n }, isRoot).map(function (last) {\n var lastOffset = getEnd(last);\n return Response.create(Option.some(Util.makeSitus(last, lastOffset, last, lastOffset)), true);\n });\n } else {\n return Option.none();\n }\n });\n });\n };\n var lastDownCheck = function (initial, isRoot) {\n return closest$1(initial, 'tr', isRoot).bind(function (startRow) {\n return closest$1(startRow, 'table', isRoot).bind(function (table) {\n var rows = descendants$1(table, 'tr');\n if (eq(startRow, rows[rows.length - 1])) {\n return seekRight$1(table, function (element) {\n return first(element).isSome();\n }, isRoot).map(function (first) {\n return Response.create(Option.some(Util.makeSitus(first, 0, first, 0)), true);\n });\n } else {\n return Option.none();\n }\n });\n });\n };\n var select = function (bridge, container, isRoot, direction, initial, anchor, selectRange) {\n return simulate(bridge, isRoot, direction, initial, anchor).bind(function (info) {\n return KeySelection.detect(container, isRoot, info.start(), info.finish(), selectRange);\n });\n };\n var VerticalMovement = {\n navigate: navigate,\n select: select,\n firstUpCheck: firstUpCheck,\n lastDownCheck: lastDownCheck\n };\n\n var findCell = function (target, isRoot) {\n return closest$1(target, 'td,th', isRoot);\n };\n function MouseSelection (bridge, container, isRoot, annotations) {\n var cursor = Option.none();\n var clearState = function () {\n cursor = Option.none();\n };\n var mousedown = function (event) {\n annotations.clear(container);\n cursor = findCell(event.target(), isRoot);\n };\n var mouseover = function (event) {\n cursor.each(function (start) {\n annotations.clear(container);\n findCell(event.target(), isRoot).each(function (finish) {\n CellSelection.identify(start, finish, isRoot).each(function (cellSel) {\n var boxes = cellSel.boxes().getOr([]);\n if (boxes.length > 1 || boxes.length === 1 && !eq(start, finish)) {\n annotations.selectRange(container, boxes, cellSel.start(), cellSel.finish());\n bridge.selectContents(finish);\n }\n });\n });\n });\n };\n var mouseup = function (_event) {\n cursor.each(clearState);\n };\n return {\n mousedown: mousedown,\n mouseover: mouseover,\n mouseup: mouseup\n };\n }\n\n var down = {\n traverse: nextSibling,\n gather: after$5,\n relative: Situ.before,\n otherRetry: Retries.tryDown,\n ieRetry: Retries.ieTryDown,\n failure: BeforeAfter.failedDown\n };\n var up = {\n traverse: prevSibling,\n gather: before$4,\n relative: Situ.before,\n otherRetry: Retries.tryUp,\n ieRetry: Retries.ieTryUp,\n failure: BeforeAfter.failedUp\n };\n var KeyDirection = {\n down: down,\n up: up\n };\n\n var isKey = function (key) {\n return function (keycode) {\n return keycode === key;\n };\n };\n var isUp = isKey(38);\n var isDown = isKey(40);\n var isNavigation = function (keycode) {\n return keycode >= 37 && keycode <= 40;\n };\n var SelectionKeys = {\n ltr: {\n isBackward: isKey(37),\n isForward: isKey(39)\n },\n rtl: {\n isBackward: isKey(39),\n isForward: isKey(37)\n },\n isUp: isUp,\n isDown: isDown,\n isNavigation: isNavigation\n };\n\n var toRaw = function (sr) {\n return {\n left: sr.left(),\n top: sr.top(),\n right: sr.right(),\n bottom: sr.bottom(),\n width: sr.width(),\n height: sr.height()\n };\n };\n var Rect = { toRaw: toRaw };\n\n var isSafari = PlatformDetection$1.detect().browser.isSafari();\n var get$a = function (_DOC) {\n var doc = _DOC !== undefined ? _DOC.dom() : domGlobals.document;\n var x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n var y = doc.body.scrollTop || doc.documentElement.scrollTop;\n return Position(x, y);\n };\n var by = function (x, y, _DOC) {\n var doc = _DOC !== undefined ? _DOC.dom() : domGlobals.document;\n var win = doc.defaultView;\n win.scrollBy(x, y);\n };\n\n var WindowBridge = function (win) {\n var elementFromPoint = function (x, y) {\n return Element.fromPoint(Element.fromDom(win.document), x, y);\n };\n var getRect = function (element) {\n return element.dom().getBoundingClientRect();\n };\n var getRangedRect = function (start, soffset, finish, foffset) {\n var sel = Selection.exact(start, soffset, finish, foffset);\n return getFirstRect$1(win, sel).map(Rect.toRaw);\n };\n var getSelection = function () {\n return get$9(win).map(function (exactAdt) {\n return Util.convertToRange(win, exactAdt);\n });\n };\n var fromSitus = function (situs) {\n var relative = Selection.relative(situs.start(), situs.finish());\n return Util.convertToRange(win, relative);\n };\n var situsFromPoint = function (x, y) {\n return getAtPoint(win, x, y).map(function (exact) {\n return Situs.create(exact.start(), exact.soffset(), exact.finish(), exact.foffset());\n });\n };\n var clearSelection = function () {\n clear(win);\n };\n var selectContents = function (element) {\n setToElement(win, element);\n };\n var setSelection = function (sel) {\n setExact(win, sel.start(), sel.soffset(), sel.finish(), sel.foffset());\n };\n var setRelativeSelection = function (start, finish) {\n setRelative(win, start, finish);\n };\n var getInnerHeight = function () {\n return win.innerHeight;\n };\n var getScrollY = function () {\n var pos = get$a(Element.fromDom(win.document));\n return pos.top();\n };\n var scrollBy = function (x, y) {\n by(x, y, Element.fromDom(win.document));\n };\n return {\n elementFromPoint: elementFromPoint,\n getRect: getRect,\n getRangedRect: getRangedRect,\n getSelection: getSelection,\n fromSitus: fromSitus,\n situsFromPoint: situsFromPoint,\n clearSelection: clearSelection,\n setSelection: setSelection,\n setRelativeSelection: setRelativeSelection,\n selectContents: selectContents,\n getInnerHeight: getInnerHeight,\n getScrollY: getScrollY,\n scrollBy: scrollBy\n };\n };\n\n var rc = Immutable('rows', 'cols');\n var mouse = function (win, container, isRoot, annotations) {\n var bridge = WindowBridge(win);\n var handlers = MouseSelection(bridge, container, isRoot, annotations);\n return {\n mousedown: handlers.mousedown,\n mouseover: handlers.mouseover,\n mouseup: handlers.mouseup\n };\n };\n var keyboard = function (win, container, isRoot, annotations) {\n var bridge = WindowBridge(win);\n var clearToNavigate = function () {\n annotations.clear(container);\n return Option.none();\n };\n var keydown = function (event, start, soffset, finish, foffset, direction) {\n var realEvent = event.raw();\n var keycode = realEvent.which;\n var shiftKey = realEvent.shiftKey === true;\n var handler = CellSelection.retrieve(container, annotations.selectedSelector()).fold(function () {\n if (SelectionKeys.isDown(keycode) && shiftKey) {\n return curry(VerticalMovement.select, bridge, container, isRoot, KeyDirection.down, finish, start, annotations.selectRange);\n } else if (SelectionKeys.isUp(keycode) && shiftKey) {\n return curry(VerticalMovement.select, bridge, container, isRoot, KeyDirection.up, finish, start, annotations.selectRange);\n } else if (SelectionKeys.isDown(keycode)) {\n return curry(VerticalMovement.navigate, bridge, isRoot, KeyDirection.down, finish, start, VerticalMovement.lastDownCheck);\n } else if (SelectionKeys.isUp(keycode)) {\n return curry(VerticalMovement.navigate, bridge, isRoot, KeyDirection.up, finish, start, VerticalMovement.firstUpCheck);\n } else {\n return Option.none;\n }\n }, function (selected) {\n var update = function (attempts) {\n return function () {\n var navigation = findMap(attempts, function (delta) {\n return KeySelection.update(delta.rows(), delta.cols(), container, selected, annotations);\n });\n return navigation.fold(function () {\n return CellSelection.getEdges(container, annotations.firstSelectedSelector(), annotations.lastSelectedSelector()).map(function (edges) {\n var relative = SelectionKeys.isDown(keycode) || direction.isForward(keycode) ? Situ.after : Situ.before;\n bridge.setRelativeSelection(Situ.on(edges.first(), 0), relative(edges.table()));\n annotations.clear(container);\n return Response.create(Option.none(), true);\n });\n }, function (_) {\n return Option.some(Response.create(Option.none(), true));\n });\n };\n };\n if (SelectionKeys.isDown(keycode) && shiftKey) {\n return update([rc(+1, 0)]);\n } else if (SelectionKeys.isUp(keycode) && shiftKey) {\n return update([rc(-1, 0)]);\n } else if (direction.isBackward(keycode) && shiftKey) {\n return update([\n rc(0, -1),\n rc(-1, 0)\n ]);\n } else if (direction.isForward(keycode) && shiftKey) {\n return update([\n rc(0, +1),\n rc(+1, 0)\n ]);\n } else if (SelectionKeys.isNavigation(keycode) && shiftKey === false) {\n return clearToNavigate;\n } else {\n return Option.none;\n }\n });\n return handler();\n };\n var keyup = function (event, start, soffset, finish, foffset) {\n return CellSelection.retrieve(container, annotations.selectedSelector()).fold(function () {\n var realEvent = event.raw();\n var keycode = realEvent.which;\n var shiftKey = realEvent.shiftKey === true;\n if (shiftKey === false) {\n return Option.none();\n }\n if (SelectionKeys.isNavigation(keycode)) {\n return KeySelection.sync(container, isRoot, start, soffset, finish, foffset, annotations.selectRange);\n } else {\n return Option.none();\n }\n }, Option.none);\n };\n return {\n keydown: keydown,\n keyup: keyup\n };\n };\n var InputHandlers = {\n mouse: mouse,\n keyboard: keyboard\n };\n\n var remove$7 = function (element, classes) {\n each(classes, function (x) {\n remove$5(element, x);\n });\n };\n\n var addClass = function (clazz) {\n return function (element) {\n add$2(element, clazz);\n };\n };\n var removeClasses = function (classes) {\n return function (element) {\n remove$7(element, classes);\n };\n };\n\n var byClass = function (ephemera) {\n var addSelectionClass = addClass(ephemera.selected());\n var removeSelectionClasses = removeClasses([\n ephemera.selected(),\n ephemera.lastSelected(),\n ephemera.firstSelected()\n ]);\n var clear = function (container) {\n var sels = descendants$1(container, ephemera.selectedSelector());\n each(sels, removeSelectionClasses);\n };\n var selectRange = function (container, cells, start, finish) {\n clear(container);\n each(cells, addSelectionClass);\n add$2(start, ephemera.firstSelected());\n add$2(finish, ephemera.lastSelected());\n };\n return {\n clear: clear,\n selectRange: selectRange,\n selectedSelector: ephemera.selectedSelector,\n firstSelectedSelector: ephemera.firstSelectedSelector,\n lastSelectedSelector: ephemera.lastSelectedSelector\n };\n };\n var byAttr = function (ephemera) {\n var removeSelectionAttributes = function (element) {\n remove(element, ephemera.selected());\n remove(element, ephemera.firstSelected());\n remove(element, ephemera.lastSelected());\n };\n var addSelectionAttribute = function (element) {\n set(element, ephemera.selected(), '1');\n };\n var clear = function (container) {\n var sels = descendants$1(container, ephemera.selectedSelector());\n each(sels, removeSelectionAttributes);\n };\n var selectRange = function (container, cells, start, finish) {\n clear(container);\n each(cells, addSelectionAttribute);\n set(start, ephemera.firstSelected(), '1');\n set(finish, ephemera.lastSelected(), '1');\n };\n return {\n clear: clear,\n selectRange: selectRange,\n selectedSelector: ephemera.selectedSelector,\n firstSelectedSelector: ephemera.firstSelectedSelector,\n lastSelectedSelector: ephemera.lastSelectedSelector\n };\n };\n var SelectionAnnotation = {\n byClass: byClass,\n byAttr: byAttr\n };\n\n var hasInternalTarget = function (e) {\n return has$1(Element.fromDom(e.target), 'ephox-snooker-resizer-bar') === false;\n };\n function CellSelection$1 (editor, lazyResize) {\n var handlerStruct = MixedBag([\n 'mousedown',\n 'mouseover',\n 'mouseup',\n 'keyup',\n 'keydown'\n ], []);\n var handlers = Option.none();\n var annotations = SelectionAnnotation.byAttr(Ephemera);\n editor.on('init', function (e) {\n var win = editor.getWin();\n var body = getBody$1(editor);\n var isRoot = getIsRoot(editor);\n var syncSelection = function () {\n var sel = editor.selection;\n var start = Element.fromDom(sel.getStart());\n var end = Element.fromDom(sel.getEnd());\n var shared = DomParent.sharedOne(TableLookup.table, [\n start,\n end\n ]);\n shared.fold(function () {\n annotations.clear(body);\n }, noop);\n };\n var mouseHandlers = InputHandlers.mouse(win, body, isRoot, annotations);\n var keyHandlers = InputHandlers.keyboard(win, body, isRoot, annotations);\n var hasShiftKey = function (event) {\n return event.raw().shiftKey === true;\n };\n var handleResponse = function (event, response) {\n if (!hasShiftKey(event)) {\n return;\n }\n if (response.kill()) {\n event.kill();\n }\n response.selection().each(function (ns) {\n var relative = Selection.relative(ns.start(), ns.finish());\n var rng = asLtrRange(win, relative);\n editor.selection.setRng(rng);\n });\n };\n var keyup = function (event) {\n var wrappedEvent = wrapEvent(event);\n if (wrappedEvent.raw().shiftKey && SelectionKeys.isNavigation(wrappedEvent.raw().which)) {\n var rng = editor.selection.getRng();\n var start = Element.fromDom(rng.startContainer);\n var end = Element.fromDom(rng.endContainer);\n keyHandlers.keyup(wrappedEvent, start, rng.startOffset, end, rng.endOffset).each(function (response) {\n handleResponse(wrappedEvent, response);\n });\n }\n };\n var keydown = function (event) {\n var wrappedEvent = wrapEvent(event);\n lazyResize().each(function (resize) {\n resize.hideBars();\n });\n var rng = editor.selection.getRng();\n var startContainer = Element.fromDom(editor.selection.getStart());\n var start = Element.fromDom(rng.startContainer);\n var end = Element.fromDom(rng.endContainer);\n var direction = Direction.directionAt(startContainer).isRtl() ? SelectionKeys.rtl : SelectionKeys.ltr;\n keyHandlers.keydown(wrappedEvent, start, rng.startOffset, end, rng.endOffset, direction).each(function (response) {\n handleResponse(wrappedEvent, response);\n });\n lazyResize().each(function (resize) {\n resize.showBars();\n });\n };\n var isMouseEvent = function (event) {\n return event.hasOwnProperty('x') && event.hasOwnProperty('y');\n };\n var wrapEvent = function (event) {\n var target = Element.fromDom(event.target);\n var stop = function () {\n event.stopPropagation();\n };\n var prevent = function () {\n event.preventDefault();\n };\n var kill = compose(prevent, stop);\n return {\n target: constant(target),\n x: constant(isMouseEvent(event) ? event.x : null),\n y: constant(isMouseEvent(event) ? event.y : null),\n stop: stop,\n prevent: prevent,\n kill: kill,\n raw: constant(event)\n };\n };\n var isLeftMouse = function (raw) {\n return raw.button === 0;\n };\n var isLeftButtonPressed = function (raw) {\n if (raw.buttons === undefined) {\n return true;\n }\n if (global$2.ie && global$2.ie >= 12 && raw.buttons === 0) {\n return true;\n }\n return (raw.buttons & 1) !== 0;\n };\n var mouseDown = function (e) {\n if (isLeftMouse(e) && hasInternalTarget(e)) {\n mouseHandlers.mousedown(wrapEvent(e));\n }\n };\n var mouseOver = function (e) {\n if (isLeftButtonPressed(e) && hasInternalTarget(e)) {\n mouseHandlers.mouseover(wrapEvent(e));\n }\n };\n var mouseUp = function (e) {\n if (isLeftMouse(e) && hasInternalTarget(e)) {\n mouseHandlers.mouseup(wrapEvent(e));\n }\n };\n editor.on('mousedown', mouseDown);\n editor.on('mouseover', mouseOver);\n editor.on('mouseup', mouseUp);\n editor.on('keyup', keyup);\n editor.on('keydown', keydown);\n editor.on('nodechange', syncSelection);\n handlers = Option.some(handlerStruct({\n mousedown: mouseDown,\n mouseover: mouseOver,\n mouseup: mouseUp,\n keyup: keyup,\n keydown: keydown\n }));\n });\n var destroy = function () {\n handlers.each(function (handlers) {\n });\n };\n return {\n clear: annotations.clear,\n destroy: destroy\n };\n }\n\n var Selections = function (editor) {\n var get = function () {\n var body = getBody$1(editor);\n return TableSelection.retrieve(body, Ephemera.selectedSelector()).fold(function () {\n if (editor.selection.getStart() === undefined) {\n return SelectionTypes.none();\n } else {\n return SelectionTypes.single(editor.selection);\n }\n }, function (cells) {\n return SelectionTypes.multiple(cells);\n });\n };\n return { get: get };\n };\n\n var each$4 = global$1.each;\n var addButtons = function (editor) {\n var menuItems = [];\n each$4('inserttable tableprops deletetable | cell row column'.split(' '), function (name) {\n if (name === '|') {\n menuItems.push({ text: '-' });\n } else {\n menuItems.push(editor.menuItems[name]);\n }\n });\n editor.addButton('table', {\n type: 'menubutton',\n title: 'Table',\n menu: menuItems\n });\n function cmd(command) {\n return function () {\n editor.execCommand(command);\n };\n }\n editor.addButton('tableprops', {\n title: 'Table properties',\n onclick: cmd('mceTableProps'),\n icon: 'table'\n });\n editor.addButton('tabledelete', {\n title: 'Delete table',\n onclick: cmd('mceTableDelete')\n });\n editor.addButton('tablecellprops', {\n title: 'Cell properties',\n onclick: cmd('mceTableCellProps')\n });\n editor.addButton('tablemergecells', {\n title: 'Merge cells',\n onclick: cmd('mceTableMergeCells')\n });\n editor.addButton('tablesplitcells', {\n title: 'Split cell',\n onclick: cmd('mceTableSplitCells')\n });\n editor.addButton('tableinsertrowbefore', {\n title: 'Insert row before',\n onclick: cmd('mceTableInsertRowBefore')\n });\n editor.addButton('tableinsertrowafter', {\n title: 'Insert row after',\n onclick: cmd('mceTableInsertRowAfter')\n });\n editor.addButton('tabledeleterow', {\n title: 'Delete row',\n onclick: cmd('mceTableDeleteRow')\n });\n editor.addButton('tablerowprops', {\n title: 'Row properties',\n onclick: cmd('mceTableRowProps')\n });\n editor.addButton('tablecutrow', {\n title: 'Cut row',\n onclick: cmd('mceTableCutRow')\n });\n editor.addButton('tablecopyrow', {\n title: 'Copy row',\n onclick: cmd('mceTableCopyRow')\n });\n editor.addButton('tablepasterowbefore', {\n title: 'Paste row before',\n onclick: cmd('mceTablePasteRowBefore')\n });\n editor.addButton('tablepasterowafter', {\n title: 'Paste row after',\n onclick: cmd('mceTablePasteRowAfter')\n });\n editor.addButton('tableinsertcolbefore', {\n title: 'Insert column before',\n onclick: cmd('mceTableInsertColBefore')\n });\n editor.addButton('tableinsertcolafter', {\n title: 'Insert column after',\n onclick: cmd('mceTableInsertColAfter')\n });\n editor.addButton('tabledeletecol', {\n title: 'Delete column',\n onclick: cmd('mceTableDeleteCol')\n });\n };\n var addToolbars = function (editor) {\n var isTable = function (table) {\n var selectorMatched = editor.dom.is(table, 'table') && editor.getBody().contains(table);\n return selectorMatched;\n };\n var toolbar = getToolbar(editor);\n if (toolbar.length > 0) {\n editor.addContextToolbar(isTable, toolbar.join(' '));\n }\n };\n var Buttons = {\n addButtons: addButtons,\n addToolbars: addToolbars\n };\n\n var addMenuItems = function (editor, selections) {\n var targets = Option.none();\n var tableCtrls = [];\n var cellCtrls = [];\n var mergeCtrls = [];\n var unmergeCtrls = [];\n var noTargetDisable = function (ctrl) {\n ctrl.disabled(true);\n };\n var ctrlEnable = function (ctrl) {\n ctrl.disabled(false);\n };\n var pushTable = function () {\n var self = this;\n tableCtrls.push(self);\n targets.fold(function () {\n noTargetDisable(self);\n }, function (targets) {\n ctrlEnable(self);\n });\n };\n var pushCell = function () {\n var self = this;\n cellCtrls.push(self);\n targets.fold(function () {\n noTargetDisable(self);\n }, function (targets) {\n ctrlEnable(self);\n });\n };\n var pushMerge = function () {\n var self = this;\n mergeCtrls.push(self);\n targets.fold(function () {\n noTargetDisable(self);\n }, function (targets) {\n self.disabled(targets.mergable().isNone());\n });\n };\n var pushUnmerge = function () {\n var self = this;\n unmergeCtrls.push(self);\n targets.fold(function () {\n noTargetDisable(self);\n }, function (targets) {\n self.disabled(targets.unmergable().isNone());\n });\n };\n var setDisabledCtrls = function () {\n targets.fold(function () {\n each(tableCtrls, noTargetDisable);\n each(cellCtrls, noTargetDisable);\n each(mergeCtrls, noTargetDisable);\n each(unmergeCtrls, noTargetDisable);\n }, function (targets) {\n each(tableCtrls, ctrlEnable);\n each(cellCtrls, ctrlEnable);\n each(mergeCtrls, function (mergeCtrl) {\n mergeCtrl.disabled(targets.mergable().isNone());\n });\n each(unmergeCtrls, function (unmergeCtrl) {\n unmergeCtrl.disabled(targets.unmergable().isNone());\n });\n });\n };\n editor.on('init', function () {\n editor.on('nodechange', function (e) {\n var cellOpt = Option.from(editor.dom.getParent(editor.selection.getStart(), 'th,td'));\n targets = cellOpt.bind(function (cellDom) {\n var cell = Element.fromDom(cellDom);\n var table = TableLookup.table(cell);\n return table.map(function (table) {\n return TableTargets.forMenu(selections, table, cell);\n });\n });\n setDisabledCtrls();\n });\n });\n var generateTableGrid = function () {\n var html = '';\n html = '';\n for (var y = 0; y < 10; y++) {\n html += '';\n for (var x = 0; x < 10; x++) {\n html += '';\n }\n html += '';\n }\n html += '
';\n html += '
1 x 1
';\n return html;\n };\n var selectGrid = function (editor, tx, ty, control) {\n var table = control.getEl().getElementsByTagName('table')[0];\n var x, y, focusCell, cell, active;\n var rtl = control.isRtl() || control.parent().rel === 'tl-tr';\n table.nextSibling.innerHTML = tx + 1 + ' x ' + (ty + 1);\n if (rtl) {\n tx = 9 - tx;\n }\n for (y = 0; y < 10; y++) {\n for (x = 0; x < 10; x++) {\n cell = table.rows[y].childNodes[x].firstChild;\n active = (rtl ? x >= tx : x <= tx) && y <= ty;\n editor.dom.toggleClass(cell, 'mce-active', active);\n if (active) {\n focusCell = cell;\n }\n }\n }\n return focusCell.parentNode;\n };\n var insertTable = hasTableGrid(editor) === false ? {\n text: 'Table',\n icon: 'table',\n context: 'table',\n onclick: cmd('mceInsertTable')\n } : {\n text: 'Table',\n icon: 'table',\n context: 'table',\n ariaHideMenu: true,\n onclick: function (e) {\n if (e.aria) {\n this.parent().hideAll();\n e.stopImmediatePropagation();\n editor.execCommand('mceInsertTable');\n }\n },\n onshow: function () {\n selectGrid(editor, 0, 0, this.menu.items()[0]);\n },\n onhide: function () {\n var elements = this.menu.items()[0].getEl().getElementsByTagName('a');\n editor.dom.removeClass(elements, 'mce-active');\n editor.dom.addClass(elements[0], 'mce-active');\n },\n menu: [{\n type: 'container',\n html: generateTableGrid(),\n onPostRender: function () {\n this.lastX = this.lastY = 0;\n },\n onmousemove: function (e) {\n var target = e.target;\n var x, y;\n if (target.tagName.toUpperCase() === 'A') {\n x = parseInt(target.getAttribute('data-mce-x'), 10);\n y = parseInt(target.getAttribute('data-mce-y'), 10);\n if (this.isRtl() || this.parent().rel === 'tl-tr') {\n x = 9 - x;\n }\n if (x !== this.lastX || y !== this.lastY) {\n selectGrid(editor, x, y, e.control);\n this.lastX = x;\n this.lastY = y;\n }\n }\n },\n onclick: function (e) {\n var self = this;\n if (e.target.tagName.toUpperCase() === 'A') {\n e.preventDefault();\n e.stopPropagation();\n self.parent().cancel();\n editor.undoManager.transact(function () {\n InsertTable.insert(editor, self.lastX + 1, self.lastY + 1);\n });\n editor.addVisual();\n }\n }\n }]\n };\n function cmd(command) {\n return function () {\n editor.execCommand(command);\n };\n }\n var tableProperties = {\n text: 'Table properties',\n context: 'table',\n onPostRender: pushTable,\n onclick: cmd('mceTableProps')\n };\n var deleteTable = {\n text: 'Delete table',\n context: 'table',\n onPostRender: pushTable,\n cmd: 'mceTableDelete'\n };\n var row = {\n text: 'Row',\n context: 'table',\n menu: [\n {\n text: 'Insert row before',\n onclick: cmd('mceTableInsertRowBefore'),\n onPostRender: pushCell\n },\n {\n text: 'Insert row after',\n onclick: cmd('mceTableInsertRowAfter'),\n onPostRender: pushCell\n },\n {\n text: 'Delete row',\n onclick: cmd('mceTableDeleteRow'),\n onPostRender: pushCell\n },\n {\n text: 'Row properties',\n onclick: cmd('mceTableRowProps'),\n onPostRender: pushCell\n },\n { text: '-' },\n {\n text: 'Cut row',\n onclick: cmd('mceTableCutRow'),\n onPostRender: pushCell\n },\n {\n text: 'Copy row',\n onclick: cmd('mceTableCopyRow'),\n onPostRender: pushCell\n },\n {\n text: 'Paste row before',\n onclick: cmd('mceTablePasteRowBefore'),\n onPostRender: pushCell\n },\n {\n text: 'Paste row after',\n onclick: cmd('mceTablePasteRowAfter'),\n onPostRender: pushCell\n }\n ]\n };\n var column = {\n text: 'Column',\n context: 'table',\n menu: [\n {\n text: 'Insert column before',\n onclick: cmd('mceTableInsertColBefore'),\n onPostRender: pushCell\n },\n {\n text: 'Insert column after',\n onclick: cmd('mceTableInsertColAfter'),\n onPostRender: pushCell\n },\n {\n text: 'Delete column',\n onclick: cmd('mceTableDeleteCol'),\n onPostRender: pushCell\n }\n ]\n };\n var cell = {\n separator: 'before',\n text: 'Cell',\n context: 'table',\n menu: [\n {\n text: 'Cell properties',\n onclick: cmd('mceTableCellProps'),\n onPostRender: pushCell\n },\n {\n text: 'Merge cells',\n onclick: cmd('mceTableMergeCells'),\n onPostRender: pushMerge\n },\n {\n text: 'Split cell',\n onclick: cmd('mceTableSplitCells'),\n onPostRender: pushUnmerge\n }\n ]\n };\n editor.addMenuItem('inserttable', insertTable);\n editor.addMenuItem('tableprops', tableProperties);\n editor.addMenuItem('deletetable', deleteTable);\n editor.addMenuItem('row', row);\n editor.addMenuItem('column', column);\n editor.addMenuItem('cell', cell);\n };\n var MenuItems = { addMenuItems: addMenuItems };\n\n var getClipboardRows = function (clipboardRows) {\n return clipboardRows.get().fold(function () {\n return;\n }, function (rows) {\n return map(rows, function (row) {\n return row.dom();\n });\n });\n };\n var setClipboardRows = function (rows, clipboardRows) {\n var sugarRows = map(rows, Element.fromDom);\n clipboardRows.set(Option.from(sugarRows));\n };\n var getApi = function (editor, clipboardRows) {\n return {\n insertTable: function (columns, rows) {\n return InsertTable.insert(editor, columns, rows);\n },\n setClipboardRows: function (rows) {\n return setClipboardRows(rows, clipboardRows);\n },\n getClipboardRows: function () {\n return getClipboardRows(clipboardRows);\n }\n };\n };\n\n function Plugin(editor) {\n var resizeHandler = ResizeHandler(editor);\n var cellSelection = CellSelection$1(editor, resizeHandler.lazyResize);\n var actions = TableActions(editor, resizeHandler.lazyWire);\n var selections = Selections(editor);\n var clipboardRows = Cell(Option.none());\n Commands.registerCommands(editor, actions, cellSelection, selections, clipboardRows);\n Clipboard.registerEvents(editor, selections, actions, cellSelection);\n MenuItems.addMenuItems(editor, selections);\n Buttons.addButtons(editor);\n Buttons.addToolbars(editor);\n editor.on('PreInit', function () {\n editor.serializer.addTempAttr(Ephemera.firstSelected());\n editor.serializer.addTempAttr(Ephemera.lastSelected());\n });\n if (hasTabNavigation(editor)) {\n editor.on('keydown', function (e) {\n TabContext.handle(e, editor, actions, resizeHandler.lazyWire);\n });\n }\n editor.on('remove', function () {\n resizeHandler.destroy();\n cellSelection.destroy();\n });\n return getApi(editor, clipboardRows);\n }\n global.add('table', Plugin);\n function Plugin$1 () {\n }\n\n return Plugin$1;\n\n}(window));\n})();\n","// Exports the \"textcolor\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/textcolor')\n// ES2015:\n// import 'tinymce/plugins/textcolor'\nrequire('./plugin.js');","(function () {\nvar textcolor = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var getCurrentColor = function (editor, format) {\n var color;\n editor.dom.getParents(editor.selection.getStart(), function (elm) {\n var value;\n if (value = elm.style[format === 'forecolor' ? 'color' : 'background-color']) {\n color = color ? color : value;\n }\n });\n return color;\n };\n var mapColors = function (colorMap) {\n var i;\n var colors = [];\n for (i = 0; i < colorMap.length; i += 2) {\n colors.push({\n text: colorMap[i + 1],\n color: '#' + colorMap[i]\n });\n }\n return colors;\n };\n var applyFormat = function (editor, format, value) {\n editor.undoManager.transact(function () {\n editor.focus();\n editor.formatter.apply(format, { value: value });\n editor.nodeChanged();\n });\n };\n var removeFormat = function (editor, format) {\n editor.undoManager.transact(function () {\n editor.focus();\n editor.formatter.remove(format, { value: null }, null, true);\n editor.nodeChanged();\n });\n };\n var TextColor = {\n getCurrentColor: getCurrentColor,\n mapColors: mapColors,\n applyFormat: applyFormat,\n removeFormat: removeFormat\n };\n\n var register = function (editor) {\n editor.addCommand('mceApplyTextcolor', function (format, value) {\n TextColor.applyFormat(editor, format, value);\n });\n editor.addCommand('mceRemoveTextcolor', function (format) {\n TextColor.removeFormat(editor, format);\n });\n };\n var Commands = { register: register };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var defaultColorMap = [\n '000000',\n 'Black',\n '993300',\n 'Burnt orange',\n '333300',\n 'Dark olive',\n '003300',\n 'Dark green',\n '003366',\n 'Dark azure',\n '000080',\n 'Navy Blue',\n '333399',\n 'Indigo',\n '333333',\n 'Very dark gray',\n '800000',\n 'Maroon',\n 'FF6600',\n 'Orange',\n '808000',\n 'Olive',\n '008000',\n 'Green',\n '008080',\n 'Teal',\n '0000FF',\n 'Blue',\n '666699',\n 'Grayish blue',\n '808080',\n 'Gray',\n 'FF0000',\n 'Red',\n 'FF9900',\n 'Amber',\n '99CC00',\n 'Yellow green',\n '339966',\n 'Sea green',\n '33CCCC',\n 'Turquoise',\n '3366FF',\n 'Royal blue',\n '800080',\n 'Purple',\n '999999',\n 'Medium gray',\n 'FF00FF',\n 'Magenta',\n 'FFCC00',\n 'Gold',\n 'FFFF00',\n 'Yellow',\n '00FF00',\n 'Lime',\n '00FFFF',\n 'Aqua',\n '00CCFF',\n 'Sky blue',\n '993366',\n 'Red violet',\n 'FFFFFF',\n 'White',\n 'FF99CC',\n 'Pink',\n 'FFCC99',\n 'Peach',\n 'FFFF99',\n 'Light yellow',\n 'CCFFCC',\n 'Pale green',\n 'CCFFFF',\n 'Pale cyan',\n '99CCFF',\n 'Light sky blue',\n 'CC99FF',\n 'Plum'\n ];\n var getTextColorMap = function (editor) {\n return editor.getParam('textcolor_map', defaultColorMap);\n };\n var getForeColorMap = function (editor) {\n return editor.getParam('forecolor_map', getTextColorMap(editor));\n };\n var getBackColorMap = function (editor) {\n return editor.getParam('backcolor_map', getTextColorMap(editor));\n };\n var getTextColorRows = function (editor) {\n return editor.getParam('textcolor_rows', 5);\n };\n var getTextColorCols = function (editor) {\n return editor.getParam('textcolor_cols', 8);\n };\n var getForeColorRows = function (editor) {\n return editor.getParam('forecolor_rows', getTextColorRows(editor));\n };\n var getBackColorRows = function (editor) {\n return editor.getParam('backcolor_rows', getTextColorRows(editor));\n };\n var getForeColorCols = function (editor) {\n return editor.getParam('forecolor_cols', getTextColorCols(editor));\n };\n var getBackColorCols = function (editor) {\n return editor.getParam('backcolor_cols', getTextColorCols(editor));\n };\n var getColorPickerCallback = function (editor) {\n return editor.getParam('color_picker_callback', null);\n };\n var hasColorPicker = function (editor) {\n return typeof getColorPickerCallback(editor) === 'function';\n };\n var Settings = {\n getForeColorMap: getForeColorMap,\n getBackColorMap: getBackColorMap,\n getForeColorRows: getForeColorRows,\n getBackColorRows: getBackColorRows,\n getForeColorCols: getForeColorCols,\n getBackColorCols: getBackColorCols,\n getColorPickerCallback: getColorPickerCallback,\n hasColorPicker: hasColorPicker\n };\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.I18n');\n\n var getHtml = function (cols, rows, colorMap, hasColorPicker) {\n var colors, color, html, last, x, y, i, count = 0;\n var id = global$1.DOM.uniqueId('mcearia');\n var getColorCellHtml = function (color, title) {\n var isNoColor = color === 'transparent';\n return '' + '
' + (isNoColor ? '×' : '') + '
' + '';\n };\n colors = TextColor.mapColors(colorMap);\n colors.push({\n text: global$3.translate('No color'),\n color: 'transparent'\n });\n html = '';\n last = colors.length - 1;\n for (y = 0; y < rows; y++) {\n html += '';\n for (x = 0; x < cols; x++) {\n i = y * cols + x;\n if (i > last) {\n html += '';\n } else {\n color = colors[i];\n html += getColorCellHtml(color.color, color.text);\n }\n }\n html += '';\n }\n if (hasColorPicker) {\n html += '' + '' + '';\n html += '';\n for (x = 0; x < cols; x++) {\n html += getColorCellHtml('', 'Custom color');\n }\n html += '';\n }\n html += '
' + '
' + '' + '
' + '
';\n return html;\n };\n var ColorPickerHtml = { getHtml: getHtml };\n\n var setDivColor = function setDivColor(div, value) {\n div.style.background = value;\n div.setAttribute('data-mce-color', value);\n };\n var onButtonClick = function (editor) {\n return function (e) {\n var ctrl = e.control;\n if (ctrl._color) {\n editor.execCommand('mceApplyTextcolor', ctrl.settings.format, ctrl._color);\n } else {\n editor.execCommand('mceRemoveTextcolor', ctrl.settings.format);\n }\n };\n };\n var onPanelClick = function (editor, cols) {\n return function (e) {\n var buttonCtrl = this.parent();\n var value;\n var currentColor = TextColor.getCurrentColor(editor, buttonCtrl.settings.format);\n var selectColor = function (value) {\n editor.execCommand('mceApplyTextcolor', buttonCtrl.settings.format, value);\n buttonCtrl.hidePanel();\n buttonCtrl.color(value);\n };\n var resetColor = function () {\n editor.execCommand('mceRemoveTextcolor', buttonCtrl.settings.format);\n buttonCtrl.hidePanel();\n buttonCtrl.resetColor();\n };\n if (global$1.DOM.getParent(e.target, '.mce-custom-color-btn')) {\n buttonCtrl.hidePanel();\n var colorPickerCallback = Settings.getColorPickerCallback(editor);\n colorPickerCallback.call(editor, function (value) {\n var tableElm = buttonCtrl.panel.getEl().getElementsByTagName('table')[0];\n var customColorCells, div, i;\n customColorCells = global$2.map(tableElm.rows[tableElm.rows.length - 1].childNodes, function (elm) {\n return elm.firstChild;\n });\n for (i = 0; i < customColorCells.length; i++) {\n div = customColorCells[i];\n if (!div.getAttribute('data-mce-color')) {\n break;\n }\n }\n if (i === cols) {\n for (i = 0; i < cols - 1; i++) {\n setDivColor(customColorCells[i], customColorCells[i + 1].getAttribute('data-mce-color'));\n }\n }\n setDivColor(div, value);\n selectColor(value);\n }, currentColor);\n }\n value = e.target.getAttribute('data-mce-color');\n if (value) {\n if (this.lastId) {\n global$1.DOM.get(this.lastId).setAttribute('aria-selected', 'false');\n }\n e.target.setAttribute('aria-selected', true);\n this.lastId = e.target.id;\n if (value === 'transparent') {\n resetColor();\n } else {\n selectColor(value);\n }\n } else if (value !== null) {\n buttonCtrl.hidePanel();\n }\n };\n };\n var renderColorPicker = function (editor, foreColor) {\n return function () {\n var cols = foreColor ? Settings.getForeColorCols(editor) : Settings.getBackColorCols(editor);\n var rows = foreColor ? Settings.getForeColorRows(editor) : Settings.getBackColorRows(editor);\n var colorMap = foreColor ? Settings.getForeColorMap(editor) : Settings.getBackColorMap(editor);\n var hasColorPicker = Settings.hasColorPicker(editor);\n return ColorPickerHtml.getHtml(cols, rows, colorMap, hasColorPicker);\n };\n };\n var register$1 = function (editor) {\n editor.addButton('forecolor', {\n type: 'colorbutton',\n tooltip: 'Text color',\n format: 'forecolor',\n panel: {\n role: 'application',\n ariaRemember: true,\n html: renderColorPicker(editor, true),\n onclick: onPanelClick(editor, Settings.getForeColorCols(editor))\n },\n onclick: onButtonClick(editor)\n });\n editor.addButton('backcolor', {\n type: 'colorbutton',\n tooltip: 'Background color',\n format: 'hilitecolor',\n panel: {\n role: 'application',\n ariaRemember: true,\n html: renderColorPicker(editor, false),\n onclick: onPanelClick(editor, Settings.getBackColorCols(editor))\n },\n onclick: onButtonClick(editor)\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('textcolor', function (editor) {\n Commands.register(editor);\n Buttons.register(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","// Exports the \"visualblocks\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/visualblocks')\n// ES2015:\n// import 'tinymce/plugins/visualblocks'\nrequire('./plugin.js');","(function () {\nvar visualblocks = (function () {\n 'use strict';\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n var clone = function () {\n return Cell(get());\n };\n return {\n get: get,\n set: set,\n clone: clone\n };\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var fireVisualBlocks = function (editor, state) {\n editor.fire('VisualBlocks', { state: state });\n };\n var Events = { fireVisualBlocks: fireVisualBlocks };\n\n var isEnabledByDefault = function (editor) {\n return editor.getParam('visualblocks_default_state', false);\n };\n var getContentCss = function (editor) {\n return editor.settings.visualblocks_content_css;\n };\n var Settings = {\n isEnabledByDefault: isEnabledByDefault,\n getContentCss: getContentCss\n };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var cssId = global$1.DOM.uniqueId();\n var load = function (doc, url) {\n var linkElements = global$2.toArray(doc.getElementsByTagName('link'));\n var matchingLinkElms = global$2.grep(linkElements, function (head) {\n return head.id === cssId;\n });\n if (matchingLinkElms.length === 0) {\n var linkElm = global$1.DOM.create('link', {\n id: cssId,\n rel: 'stylesheet',\n href: url\n });\n doc.getElementsByTagName('head')[0].appendChild(linkElm);\n }\n };\n var LoadCss = { load: load };\n\n var toggleVisualBlocks = function (editor, pluginUrl, enabledState) {\n var dom = editor.dom;\n var contentCss = Settings.getContentCss(editor);\n LoadCss.load(editor.getDoc(), contentCss ? contentCss : pluginUrl + '/css/visualblocks.css');\n dom.toggleClass(editor.getBody(), 'mce-visualblocks');\n enabledState.set(!enabledState.get());\n Events.fireVisualBlocks(editor, enabledState.get());\n };\n var VisualBlocks = { toggleVisualBlocks: toggleVisualBlocks };\n\n var register = function (editor, pluginUrl, enabledState) {\n editor.addCommand('mceVisualBlocks', function () {\n VisualBlocks.toggleVisualBlocks(editor, pluginUrl, enabledState);\n });\n };\n var Commands = { register: register };\n\n var setup = function (editor, pluginUrl, enabledState) {\n editor.on('PreviewFormats AfterPreviewFormats', function (e) {\n if (enabledState.get()) {\n editor.dom.toggleClass(editor.getBody(), 'mce-visualblocks', e.type === 'afterpreviewformats');\n }\n });\n editor.on('init', function () {\n if (Settings.isEnabledByDefault(editor)) {\n VisualBlocks.toggleVisualBlocks(editor, pluginUrl, enabledState);\n }\n });\n editor.on('remove', function () {\n editor.dom.removeClass(editor.getBody(), 'mce-visualblocks');\n });\n };\n var Bindings = { setup: setup };\n\n var toggleActiveState = function (editor, enabledState) {\n return function (e) {\n var ctrl = e.control;\n ctrl.active(enabledState.get());\n editor.on('VisualBlocks', function (e) {\n ctrl.active(e.state);\n });\n };\n };\n var register$1 = function (editor, enabledState) {\n editor.addButton('visualblocks', {\n active: false,\n title: 'Show blocks',\n cmd: 'mceVisualBlocks',\n onPostRender: toggleActiveState(editor, enabledState)\n });\n editor.addMenuItem('visualblocks', {\n text: 'Show blocks',\n cmd: 'mceVisualBlocks',\n onPostRender: toggleActiveState(editor, enabledState),\n selectable: true,\n context: 'view',\n prependToContext: true\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('visualblocks', function (editor, pluginUrl) {\n var enabledState = Cell(false);\n Commands.register(editor, pluginUrl, enabledState);\n Buttons.register(editor, enabledState);\n Bindings.setup(editor, pluginUrl, enabledState);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","// Exports the \"modern\" theme for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/themes/modern')\n// ES2015:\n// import 'tinymce/themes/modern'\nrequire('./theme.js');","(function () {\nvar modern = (function (domGlobals) {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.ThemeManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.EditorManager');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var isBrandingEnabled = function (editor) {\n return editor.getParam('branding', true, 'boolean');\n };\n var hasMenubar = function (editor) {\n return getMenubar(editor) !== false;\n };\n var getMenubar = function (editor) {\n return editor.getParam('menubar');\n };\n var hasStatusbar = function (editor) {\n return editor.getParam('statusbar', true, 'boolean');\n };\n var getToolbarSize = function (editor) {\n return editor.getParam('toolbar_items_size');\n };\n var isReadOnly = function (editor) {\n return editor.getParam('readonly', false, 'boolean');\n };\n var getFixedToolbarContainer = function (editor) {\n return editor.getParam('fixed_toolbar_container');\n };\n var getInlineToolbarPositionHandler = function (editor) {\n return editor.getParam('inline_toolbar_position_handler');\n };\n var getMenu = function (editor) {\n return editor.getParam('menu');\n };\n var getRemovedMenuItems = function (editor) {\n return editor.getParam('removed_menuitems', '');\n };\n var getMinWidth = function (editor) {\n return editor.getParam('min_width', 100, 'number');\n };\n var getMinHeight = function (editor) {\n return editor.getParam('min_height', 100, 'number');\n };\n var getMaxWidth = function (editor) {\n return editor.getParam('max_width', 65535, 'number');\n };\n var getMaxHeight = function (editor) {\n return editor.getParam('max_height', 65535, 'number');\n };\n var isSkinDisabled = function (editor) {\n return editor.settings.skin === false;\n };\n var isInline = function (editor) {\n return editor.getParam('inline', false, 'boolean');\n };\n var getResize = function (editor) {\n var resize = editor.getParam('resize', 'vertical');\n if (resize === false) {\n return 'none';\n } else if (resize === 'both') {\n return 'both';\n } else {\n return 'vertical';\n }\n };\n var getSkinUrl = function (editor) {\n var settings = editor.settings;\n var skin = settings.skin;\n var skinUrl = settings.skin_url;\n if (skin !== false) {\n var skinName = skin ? skin : 'lightgray';\n if (skinUrl) {\n skinUrl = editor.documentBaseURI.toAbsolute(skinUrl);\n } else {\n skinUrl = global$1.baseURL + '/skins/' + skinName;\n }\n }\n return skinUrl;\n };\n var getIndexedToolbars = function (settings, defaultToolbar) {\n var toolbars = [];\n for (var i = 1; i < 10; i++) {\n var toolbar = settings['toolbar' + i];\n if (!toolbar) {\n break;\n }\n toolbars.push(toolbar);\n }\n var mainToolbar = settings.toolbar ? [settings.toolbar] : [defaultToolbar];\n return toolbars.length > 0 ? toolbars : mainToolbar;\n };\n var getToolbars = function (editor) {\n var toolbar = editor.getParam('toolbar');\n var defaultToolbar = 'undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image';\n if (toolbar === false) {\n return [];\n } else if (global$2.isArray(toolbar)) {\n return global$2.grep(toolbar, function (toolbar) {\n return toolbar.length > 0;\n });\n } else {\n return getIndexedToolbars(editor.settings, defaultToolbar);\n }\n };\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.ui.Factory');\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.util.I18n');\n\n var fireSkinLoaded = function (editor) {\n return editor.fire('SkinLoaded');\n };\n var fireResizeEditor = function (editor) {\n return editor.fire('ResizeEditor');\n };\n var fireBeforeRenderUI = function (editor) {\n return editor.fire('BeforeRenderUI');\n };\n var Events = {\n fireSkinLoaded: fireSkinLoaded,\n fireResizeEditor: fireResizeEditor,\n fireBeforeRenderUI: fireBeforeRenderUI\n };\n\n var focus = function (panel, type) {\n return function () {\n var item = panel.find(type)[0];\n if (item) {\n item.focus(true);\n }\n };\n };\n var addKeys = function (editor, panel) {\n editor.shortcuts.add('Alt+F9', '', focus(panel, 'menubar'));\n editor.shortcuts.add('Alt+F10,F10', '', focus(panel, 'toolbar'));\n editor.shortcuts.add('Alt+F11', '', focus(panel, 'elementpath'));\n panel.on('cancel', function () {\n editor.focus();\n });\n };\n var A11y = { addKeys: addKeys };\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.geom.Rect');\n\n var global$7 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n if (Object.freeze) {\n Object.freeze(me);\n }\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Option = {\n some: some,\n none: none,\n from: from\n };\n\n var getUiContainerDelta = function (ctrl) {\n var uiContainer = getUiContainer(ctrl);\n if (uiContainer && global$3.DOM.getStyle(uiContainer, 'position', true) !== 'static') {\n var containerPos = global$3.DOM.getPos(uiContainer);\n var dx = uiContainer.scrollLeft - containerPos.x;\n var dy = uiContainer.scrollTop - containerPos.y;\n return Option.some({\n x: dx,\n y: dy\n });\n } else {\n return Option.none();\n }\n };\n var setUiContainer = function (editor, ctrl) {\n var uiContainer = global$3.DOM.select(editor.settings.ui_container)[0];\n ctrl.getRoot().uiContainer = uiContainer;\n };\n var getUiContainer = function (ctrl) {\n return ctrl ? ctrl.getRoot().uiContainer : null;\n };\n var inheritUiContainer = function (fromCtrl, toCtrl) {\n return toCtrl.uiContainer = getUiContainer(fromCtrl);\n };\n var UiContainer = {\n getUiContainerDelta: getUiContainerDelta,\n setUiContainer: setUiContainer,\n getUiContainer: getUiContainer,\n inheritUiContainer: inheritUiContainer\n };\n\n var createToolbar = function (editor, items, size) {\n var toolbarItems = [];\n var buttonGroup;\n if (!items) {\n return;\n }\n global$2.each(items.split(/[ ,]/), function (item) {\n var itemName;\n var bindSelectorChanged = function () {\n var selection = editor.selection;\n if (item.settings.stateSelector) {\n selection.selectorChanged(item.settings.stateSelector, function (state) {\n item.active(state);\n }, true);\n }\n if (item.settings.disabledStateSelector) {\n selection.selectorChanged(item.settings.disabledStateSelector, function (state) {\n item.disabled(state);\n });\n }\n };\n if (item === '|') {\n buttonGroup = null;\n } else {\n if (!buttonGroup) {\n buttonGroup = {\n type: 'buttongroup',\n items: []\n };\n toolbarItems.push(buttonGroup);\n }\n if (editor.buttons[item]) {\n itemName = item;\n item = editor.buttons[itemName];\n if (typeof item === 'function') {\n item = item();\n }\n item.type = item.type || 'button';\n item.size = size;\n item = global$4.create(item);\n buttonGroup.items.push(item);\n if (editor.initialized) {\n bindSelectorChanged();\n } else {\n editor.on('init', bindSelectorChanged);\n }\n }\n }\n });\n return {\n type: 'toolbar',\n layout: 'flow',\n items: toolbarItems\n };\n };\n var createToolbars = function (editor, size) {\n var toolbars = [];\n var addToolbar = function (items) {\n if (items) {\n toolbars.push(createToolbar(editor, items, size));\n }\n };\n global$2.each(getToolbars(editor), function (toolbar) {\n addToolbar(toolbar);\n });\n if (toolbars.length) {\n return {\n type: 'panel',\n layout: 'stack',\n classes: 'toolbar-grp',\n ariaRoot: true,\n ariaRemember: true,\n items: toolbars\n };\n }\n };\n var Toolbar = {\n createToolbar: createToolbar,\n createToolbars: createToolbars\n };\n\n var DOM = global$3.DOM;\n var toClientRect = function (geomRect) {\n return {\n left: geomRect.x,\n top: geomRect.y,\n width: geomRect.w,\n height: geomRect.h,\n right: geomRect.x + geomRect.w,\n bottom: geomRect.y + geomRect.h\n };\n };\n var hideAllFloatingPanels = function (editor) {\n global$2.each(editor.contextToolbars, function (toolbar) {\n if (toolbar.panel) {\n toolbar.panel.hide();\n }\n });\n };\n var movePanelTo = function (panel, pos) {\n panel.moveTo(pos.left, pos.top);\n };\n var togglePositionClass = function (panel, relPos, predicate) {\n relPos = relPos ? relPos.substr(0, 2) : '';\n global$2.each({\n t: 'down',\n b: 'up'\n }, function (cls, pos) {\n panel.classes.toggle('arrow-' + cls, predicate(pos, relPos.substr(0, 1)));\n });\n global$2.each({\n l: 'left',\n r: 'right'\n }, function (cls, pos) {\n panel.classes.toggle('arrow-' + cls, predicate(pos, relPos.substr(1, 1)));\n });\n };\n var userConstrain = function (handler, x, y, elementRect, contentAreaRect, panelRect) {\n panelRect = toClientRect({\n x: x,\n y: y,\n w: panelRect.w,\n h: panelRect.h\n });\n if (handler) {\n panelRect = handler({\n elementRect: toClientRect(elementRect),\n contentAreaRect: toClientRect(contentAreaRect),\n panelRect: panelRect\n });\n }\n return panelRect;\n };\n var addContextualToolbars = function (editor) {\n var scrollContainer;\n var getContextToolbars = function () {\n return editor.contextToolbars || [];\n };\n var getElementRect = function (elm) {\n var pos, targetRect, root;\n pos = DOM.getPos(editor.getContentAreaContainer());\n targetRect = editor.dom.getRect(elm);\n root = editor.dom.getRoot();\n if (root.nodeName === 'BODY') {\n targetRect.x -= root.ownerDocument.documentElement.scrollLeft || root.scrollLeft;\n targetRect.y -= root.ownerDocument.documentElement.scrollTop || root.scrollTop;\n }\n targetRect.x += pos.x;\n targetRect.y += pos.y;\n return targetRect;\n };\n var reposition = function (match, shouldShow) {\n var relPos, panelRect, elementRect, contentAreaRect, panel, relRect, testPositions, smallElementWidthThreshold;\n var handler = getInlineToolbarPositionHandler(editor);\n if (editor.removed) {\n return;\n }\n if (!match || !match.toolbar.panel) {\n hideAllFloatingPanels(editor);\n return;\n }\n testPositions = [\n 'bc-tc',\n 'tc-bc',\n 'tl-bl',\n 'bl-tl',\n 'tr-br',\n 'br-tr'\n ];\n panel = match.toolbar.panel;\n if (shouldShow) {\n panel.show();\n }\n elementRect = getElementRect(match.element);\n panelRect = DOM.getRect(panel.getEl());\n contentAreaRect = DOM.getRect(editor.getContentAreaContainer() || editor.getBody());\n var delta = UiContainer.getUiContainerDelta(panel).getOr({\n x: 0,\n y: 0\n });\n elementRect.x += delta.x;\n elementRect.y += delta.y;\n panelRect.x += delta.x;\n panelRect.y += delta.y;\n contentAreaRect.x += delta.x;\n contentAreaRect.y += delta.y;\n smallElementWidthThreshold = 25;\n if (DOM.getStyle(match.element, 'display', true) !== 'inline') {\n var clientRect = match.element.getBoundingClientRect();\n elementRect.w = clientRect.width;\n elementRect.h = clientRect.height;\n }\n if (!editor.inline) {\n contentAreaRect.w = editor.getDoc().documentElement.offsetWidth;\n }\n if (editor.selection.controlSelection.isResizable(match.element) && elementRect.w < smallElementWidthThreshold) {\n elementRect = global$6.inflate(elementRect, 0, 8);\n }\n relPos = global$6.findBestRelativePosition(panelRect, elementRect, contentAreaRect, testPositions);\n elementRect = global$6.clamp(elementRect, contentAreaRect);\n if (relPos) {\n relRect = global$6.relativePosition(panelRect, elementRect, relPos);\n movePanelTo(panel, userConstrain(handler, relRect.x, relRect.y, elementRect, contentAreaRect, panelRect));\n } else {\n contentAreaRect.h += panelRect.h;\n elementRect = global$6.intersect(contentAreaRect, elementRect);\n if (elementRect) {\n relPos = global$6.findBestRelativePosition(panelRect, elementRect, contentAreaRect, [\n 'bc-tc',\n 'bl-tl',\n 'br-tr'\n ]);\n if (relPos) {\n relRect = global$6.relativePosition(panelRect, elementRect, relPos);\n movePanelTo(panel, userConstrain(handler, relRect.x, relRect.y, elementRect, contentAreaRect, panelRect));\n } else {\n movePanelTo(panel, userConstrain(handler, elementRect.x, elementRect.y, elementRect, contentAreaRect, panelRect));\n }\n } else {\n panel.hide();\n }\n }\n togglePositionClass(panel, relPos, function (pos1, pos2) {\n return pos1 === pos2;\n });\n };\n var repositionHandler = function (show) {\n return function () {\n var execute = function () {\n if (editor.selection) {\n reposition(findFrontMostMatch(editor.selection.getNode()), show);\n }\n };\n global$7.requestAnimationFrame(execute);\n };\n };\n var bindScrollEvent = function (panel) {\n if (!scrollContainer) {\n var reposition_1 = repositionHandler(true);\n var uiContainer_1 = UiContainer.getUiContainer(panel);\n scrollContainer = editor.selection.getScrollContainer() || editor.getWin();\n DOM.bind(scrollContainer, 'scroll', reposition_1);\n DOM.bind(uiContainer_1, 'scroll', reposition_1);\n editor.on('remove', function () {\n DOM.unbind(scrollContainer, 'scroll', reposition_1);\n DOM.unbind(uiContainer_1, 'scroll', reposition_1);\n });\n }\n };\n var showContextToolbar = function (match) {\n var panel;\n if (match.toolbar.panel) {\n match.toolbar.panel.show();\n reposition(match);\n return;\n }\n panel = global$4.create({\n type: 'floatpanel',\n role: 'dialog',\n classes: 'tinymce tinymce-inline arrow',\n ariaLabel: 'Inline toolbar',\n layout: 'flex',\n direction: 'column',\n align: 'stretch',\n autohide: false,\n autofix: true,\n fixed: true,\n border: 1,\n items: Toolbar.createToolbar(editor, match.toolbar.items),\n oncancel: function () {\n editor.focus();\n }\n });\n UiContainer.setUiContainer(editor, panel);\n bindScrollEvent(panel);\n match.toolbar.panel = panel;\n panel.renderTo().reflow();\n reposition(match);\n };\n var hideAllContextToolbars = function () {\n global$2.each(getContextToolbars(), function (toolbar) {\n if (toolbar.panel) {\n toolbar.panel.hide();\n }\n });\n };\n var findFrontMostMatch = function (targetElm) {\n var i, y, parentsAndSelf;\n var toolbars = getContextToolbars();\n parentsAndSelf = editor.$(targetElm).parents().add(targetElm);\n for (i = parentsAndSelf.length - 1; i >= 0; i--) {\n for (y = toolbars.length - 1; y >= 0; y--) {\n if (toolbars[y].predicate(parentsAndSelf[i])) {\n return {\n toolbar: toolbars[y],\n element: parentsAndSelf[i]\n };\n }\n }\n }\n return null;\n };\n editor.on('click keyup setContent ObjectResized', function (e) {\n if (e.type === 'setcontent' && !e.selection) {\n return;\n }\n global$7.setEditorTimeout(editor, function () {\n var match;\n match = findFrontMostMatch(editor.selection.getNode());\n if (match) {\n hideAllContextToolbars();\n showContextToolbar(match);\n } else {\n hideAllContextToolbars();\n }\n });\n });\n editor.on('blur hide contextmenu', hideAllContextToolbars);\n editor.on('ObjectResizeStart', function () {\n var match = findFrontMostMatch(editor.selection.getNode());\n if (match && match.toolbar.panel) {\n match.toolbar.panel.hide();\n }\n });\n editor.on('ResizeEditor ResizeWindow', repositionHandler(true));\n editor.on('nodeChange', repositionHandler(false));\n editor.on('remove', function () {\n global$2.each(getContextToolbars(), function (toolbar) {\n if (toolbar.panel) {\n toolbar.panel.remove();\n }\n });\n editor.contextToolbars = {};\n });\n editor.shortcuts.add('ctrl+F9', '', function () {\n var match = findFrontMostMatch(editor.selection.getNode());\n if (match && match.toolbar.panel) {\n match.toolbar.panel.items()[0].focus();\n }\n });\n };\n var ContextToolbars = { addContextualToolbars: addContextualToolbars };\n\n var typeOf = function (x) {\n if (x === null) {\n return 'null';\n }\n var t = typeof x;\n if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n }\n if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n }\n return t;\n };\n var isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isArray = isType('array');\n var isFunction = isType('function');\n var isNumber = isType('number');\n\n var nativeSlice = Array.prototype.slice;\n var nativeIndexOf = Array.prototype.indexOf;\n var nativePush = Array.prototype.push;\n var rawIndexOf = function (ts, t) {\n return nativeIndexOf.call(ts, t);\n };\n var indexOf = function (xs, x) {\n var r = rawIndexOf(xs, x);\n return r === -1 ? Option.none() : Option.some(r);\n };\n var exists = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return true;\n }\n }\n return false;\n };\n var map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var each = function (xs, f) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n f(x, i);\n }\n };\n var filter = function (xs, pred) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n var foldl = function (xs, f, acc) {\n each(xs, function (x) {\n acc = f(acc, x);\n });\n return acc;\n };\n var find = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Option.some(x);\n }\n }\n return Option.none();\n };\n var findIndex = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Option.some(i);\n }\n }\n return Option.none();\n };\n var flatten = function (xs) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n var from$1 = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n\n var defaultMenus = {\n file: {\n title: 'File',\n items: 'newdocument restoredraft | preview | print'\n },\n edit: {\n title: 'Edit',\n items: 'undo redo | cut copy paste pastetext | selectall'\n },\n view: {\n title: 'View',\n items: 'code | visualaid visualchars visualblocks | spellchecker | preview fullscreen'\n },\n insert: {\n title: 'Insert',\n items: 'image link media template codesample inserttable | charmap hr | pagebreak nonbreaking anchor toc | insertdatetime'\n },\n format: {\n title: 'Format',\n items: 'bold italic underline strikethrough superscript subscript codeformat | blockformats align | removeformat'\n },\n tools: {\n title: 'Tools',\n items: 'spellchecker spellcheckerlanguage | a11ycheck code'\n },\n table: { title: 'Table' },\n help: { title: 'Help' }\n };\n var delimiterMenuNamePair = function () {\n return {\n name: '|',\n item: { text: '|' }\n };\n };\n var createMenuNameItemPair = function (name, item) {\n var menuItem = item ? {\n name: name,\n item: item\n } : null;\n return name === '|' ? delimiterMenuNamePair() : menuItem;\n };\n var hasItemName = function (namedMenuItems, name) {\n return findIndex(namedMenuItems, function (namedMenuItem) {\n return namedMenuItem.name === name;\n }).isSome();\n };\n var isSeparator = function (namedMenuItem) {\n return namedMenuItem && namedMenuItem.item.text === '|';\n };\n var cleanupMenu = function (namedMenuItems, removedMenuItems) {\n var menuItemsPass1 = filter(namedMenuItems, function (namedMenuItem) {\n return removedMenuItems.hasOwnProperty(namedMenuItem.name) === false;\n });\n var menuItemsPass2 = filter(menuItemsPass1, function (namedMenuItem, i) {\n return !isSeparator(namedMenuItem) || !isSeparator(menuItemsPass1[i - 1]);\n });\n return filter(menuItemsPass2, function (namedMenuItem, i) {\n return !isSeparator(namedMenuItem) || i > 0 && i < menuItemsPass2.length - 1;\n });\n };\n var createMenu = function (editorMenuItems, menus, removedMenuItems, context) {\n var menuButton, menu, namedMenuItems, isUserDefined;\n if (menus) {\n menu = menus[context];\n isUserDefined = true;\n } else {\n menu = defaultMenus[context];\n }\n if (menu) {\n menuButton = { text: menu.title };\n namedMenuItems = [];\n global$2.each((menu.items || '').split(/[ ,]/), function (name) {\n var namedMenuItem = createMenuNameItemPair(name, editorMenuItems[name]);\n if (namedMenuItem) {\n namedMenuItems.push(namedMenuItem);\n }\n });\n if (!isUserDefined) {\n global$2.each(editorMenuItems, function (item, name) {\n if (item.context === context && !hasItemName(namedMenuItems, name)) {\n if (item.separator === 'before') {\n namedMenuItems.push(delimiterMenuNamePair());\n }\n if (item.prependToContext) {\n namedMenuItems.unshift(createMenuNameItemPair(name, item));\n } else {\n namedMenuItems.push(createMenuNameItemPair(name, item));\n }\n if (item.separator === 'after') {\n namedMenuItems.push(delimiterMenuNamePair());\n }\n }\n });\n }\n menuButton.menu = map(cleanupMenu(namedMenuItems, removedMenuItems), function (menuItem) {\n return menuItem.item;\n });\n if (!menuButton.menu.length) {\n return null;\n }\n }\n return menuButton;\n };\n var getDefaultMenubar = function (editor) {\n var name;\n var defaultMenuBar = [];\n var menu = getMenu(editor);\n if (menu) {\n for (name in menu) {\n defaultMenuBar.push(name);\n }\n } else {\n for (name in defaultMenus) {\n defaultMenuBar.push(name);\n }\n }\n return defaultMenuBar;\n };\n var createMenuButtons = function (editor) {\n var menuButtons = [];\n var defaultMenuBar = getDefaultMenubar(editor);\n var removedMenuItems = global$2.makeMap(getRemovedMenuItems(editor).split(/[ ,]/));\n var menubar = getMenubar(editor);\n var enabledMenuNames = typeof menubar === 'string' ? menubar.split(/[ ,]/) : defaultMenuBar;\n for (var i = 0; i < enabledMenuNames.length; i++) {\n var menuItems = enabledMenuNames[i];\n var menu = createMenu(editor.menuItems, getMenu(editor), removedMenuItems, menuItems);\n if (menu) {\n menuButtons.push(menu);\n }\n }\n return menuButtons;\n };\n var Menubar = { createMenuButtons: createMenuButtons };\n\n var DOM$1 = global$3.DOM;\n var getSize = function (elm) {\n return {\n width: elm.clientWidth,\n height: elm.clientHeight\n };\n };\n var resizeTo = function (editor, width, height) {\n var containerElm, iframeElm, containerSize, iframeSize;\n containerElm = editor.getContainer();\n iframeElm = editor.getContentAreaContainer().firstChild;\n containerSize = getSize(containerElm);\n iframeSize = getSize(iframeElm);\n if (width !== null) {\n width = Math.max(getMinWidth(editor), width);\n width = Math.min(getMaxWidth(editor), width);\n DOM$1.setStyle(containerElm, 'width', width + (containerSize.width - iframeSize.width));\n DOM$1.setStyle(iframeElm, 'width', width);\n }\n height = Math.max(getMinHeight(editor), height);\n height = Math.min(getMaxHeight(editor), height);\n DOM$1.setStyle(iframeElm, 'height', height);\n Events.fireResizeEditor(editor);\n };\n var resizeBy = function (editor, dw, dh) {\n var elm = editor.getContentAreaContainer();\n resizeTo(editor, elm.clientWidth + dw, elm.clientHeight + dh);\n };\n var Resize = {\n resizeTo: resizeTo,\n resizeBy: resizeBy\n };\n\n var global$8 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var api = function (elm) {\n return {\n element: function () {\n return elm;\n }\n };\n };\n var trigger = function (sidebar, panel, callbackName) {\n var callback = sidebar.settings[callbackName];\n if (callback) {\n callback(api(panel.getEl('body')));\n }\n };\n var hidePanels = function (name, container, sidebars) {\n global$2.each(sidebars, function (sidebar) {\n var panel = container.items().filter('#' + sidebar.name)[0];\n if (panel && panel.visible() && sidebar.name !== name) {\n trigger(sidebar, panel, 'onhide');\n panel.visible(false);\n }\n });\n };\n var deactivateButtons = function (toolbar) {\n toolbar.items().each(function (ctrl) {\n ctrl.active(false);\n });\n };\n var findSidebar = function (sidebars, name) {\n return global$2.grep(sidebars, function (sidebar) {\n return sidebar.name === name;\n })[0];\n };\n var showPanel = function (editor, name, sidebars) {\n return function (e) {\n var btnCtrl = e.control;\n var container = btnCtrl.parents().filter('panel')[0];\n var panel = container.find('#' + name)[0];\n var sidebar = findSidebar(sidebars, name);\n hidePanels(name, container, sidebars);\n deactivateButtons(btnCtrl.parent());\n if (panel && panel.visible()) {\n trigger(sidebar, panel, 'onhide');\n panel.hide();\n btnCtrl.active(false);\n } else {\n if (panel) {\n panel.show();\n trigger(sidebar, panel, 'onshow');\n } else {\n panel = global$4.create({\n type: 'container',\n name: name,\n layout: 'stack',\n classes: 'sidebar-panel',\n html: ''\n });\n container.prepend(panel);\n trigger(sidebar, panel, 'onrender');\n trigger(sidebar, panel, 'onshow');\n }\n btnCtrl.active(true);\n }\n Events.fireResizeEditor(editor);\n };\n };\n var isModernBrowser = function () {\n return !global$8.ie || global$8.ie >= 11;\n };\n var hasSidebar = function (editor) {\n return isModernBrowser() && editor.sidebars ? editor.sidebars.length > 0 : false;\n };\n var createSidebar = function (editor) {\n var buttons = global$2.map(editor.sidebars, function (sidebar) {\n var settings = sidebar.settings;\n return {\n type: 'button',\n icon: settings.icon,\n image: settings.image,\n tooltip: settings.tooltip,\n onclick: showPanel(editor, sidebar.name, editor.sidebars)\n };\n });\n return {\n type: 'panel',\n name: 'sidebar',\n layout: 'stack',\n classes: 'sidebar',\n items: [{\n type: 'toolbar',\n layout: 'stack',\n classes: 'sidebar-toolbar',\n items: buttons\n }]\n };\n };\n var Sidebar = {\n hasSidebar: hasSidebar,\n createSidebar: createSidebar\n };\n\n var fireSkinLoaded$1 = function (editor) {\n var done = function () {\n editor._skinLoaded = true;\n Events.fireSkinLoaded(editor);\n };\n return function () {\n if (editor.initialized) {\n done();\n } else {\n editor.on('init', done);\n }\n };\n };\n var SkinLoaded = { fireSkinLoaded: fireSkinLoaded$1 };\n\n var DOM$2 = global$3.DOM;\n var switchMode = function (panel) {\n return function (e) {\n panel.find('*').disabled(e.mode === 'readonly');\n };\n };\n var editArea = function (border) {\n return {\n type: 'panel',\n name: 'iframe',\n layout: 'stack',\n classes: 'edit-area',\n border: border,\n html: ''\n };\n };\n var editAreaContainer = function (editor) {\n return {\n type: 'panel',\n layout: 'stack',\n classes: 'edit-aria-container',\n border: '1 0 0 0',\n items: [\n editArea('0'),\n Sidebar.createSidebar(editor)\n ]\n };\n };\n var render = function (editor, theme, args) {\n var panel, resizeHandleCtrl, startSize;\n if (isSkinDisabled(editor) === false && args.skinUiCss) {\n DOM$2.styleSheetLoader.load(args.skinUiCss, SkinLoaded.fireSkinLoaded(editor));\n } else {\n SkinLoaded.fireSkinLoaded(editor)();\n }\n panel = theme.panel = global$4.create({\n type: 'panel',\n role: 'application',\n classes: 'tinymce',\n style: 'visibility: hidden',\n layout: 'stack',\n border: 1,\n items: [\n {\n type: 'container',\n classes: 'top-part',\n items: [\n hasMenubar(editor) === false ? null : {\n type: 'menubar',\n border: '0 0 1 0',\n items: Menubar.createMenuButtons(editor)\n },\n Toolbar.createToolbars(editor, getToolbarSize(editor))\n ]\n },\n Sidebar.hasSidebar(editor) ? editAreaContainer(editor) : editArea('1 0 0 0')\n ]\n });\n UiContainer.setUiContainer(editor, panel);\n if (getResize(editor) !== 'none') {\n resizeHandleCtrl = {\n type: 'resizehandle',\n direction: getResize(editor),\n onResizeStart: function () {\n var elm = editor.getContentAreaContainer().firstChild;\n startSize = {\n width: elm.clientWidth,\n height: elm.clientHeight\n };\n },\n onResize: function (e) {\n if (getResize(editor) === 'both') {\n Resize.resizeTo(editor, startSize.width + e.deltaX, startSize.height + e.deltaY);\n } else {\n Resize.resizeTo(editor, null, startSize.height + e.deltaY);\n }\n }\n };\n }\n if (hasStatusbar(editor)) {\n var linkHtml = 'Tiny';\n var html = global$5.translate([\n 'Powered by {0}',\n linkHtml\n ]);\n var brandingLabel = isBrandingEnabled(editor) ? {\n type: 'label',\n classes: 'branding',\n html: ' ' + html\n } : null;\n panel.add({\n type: 'panel',\n name: 'statusbar',\n classes: 'statusbar',\n layout: 'flow',\n border: '1 0 0 0',\n ariaRoot: true,\n items: [\n {\n type: 'elementpath',\n editor: editor\n },\n resizeHandleCtrl,\n brandingLabel\n ]\n });\n }\n Events.fireBeforeRenderUI(editor);\n editor.on('SwitchMode', switchMode(panel));\n panel.renderBefore(args.targetNode).reflow();\n if (isReadOnly(editor)) {\n editor.setMode('readonly');\n }\n if (args.width) {\n DOM$2.setStyle(panel.getEl(), 'width', args.width);\n }\n editor.on('remove', function () {\n panel.remove();\n panel = null;\n });\n A11y.addKeys(editor, panel);\n ContextToolbars.addContextualToolbars(editor);\n return {\n iframeContainer: panel.find('#iframe')[0].getEl(),\n editorContainer: panel.getEl()\n };\n };\n var Iframe = { render: render };\n\n var global$9 = tinymce.util.Tools.resolve('tinymce.dom.DomQuery');\n\n var count = 0;\n var funcs = {\n id: function () {\n return 'mceu_' + count++;\n },\n create: function (name, attrs, children) {\n var elm = domGlobals.document.createElement(name);\n global$3.DOM.setAttribs(elm, attrs);\n if (typeof children === 'string') {\n elm.innerHTML = children;\n } else {\n global$2.each(children, function (child) {\n if (child.nodeType) {\n elm.appendChild(child);\n }\n });\n }\n return elm;\n },\n createFragment: function (html) {\n return global$3.DOM.createFragment(html);\n },\n getWindowSize: function () {\n return global$3.DOM.getViewPort();\n },\n getSize: function (elm) {\n var width, height;\n if (elm.getBoundingClientRect) {\n var rect = elm.getBoundingClientRect();\n width = Math.max(rect.width || rect.right - rect.left, elm.offsetWidth);\n height = Math.max(rect.height || rect.bottom - rect.bottom, elm.offsetHeight);\n } else {\n width = elm.offsetWidth;\n height = elm.offsetHeight;\n }\n return {\n width: width,\n height: height\n };\n },\n getPos: function (elm, root) {\n return global$3.DOM.getPos(elm, root || funcs.getContainer());\n },\n getContainer: function () {\n return global$8.container ? global$8.container : domGlobals.document.body;\n },\n getViewPort: function (win) {\n return global$3.DOM.getViewPort(win);\n },\n get: function (id) {\n return domGlobals.document.getElementById(id);\n },\n addClass: function (elm, cls) {\n return global$3.DOM.addClass(elm, cls);\n },\n removeClass: function (elm, cls) {\n return global$3.DOM.removeClass(elm, cls);\n },\n hasClass: function (elm, cls) {\n return global$3.DOM.hasClass(elm, cls);\n },\n toggleClass: function (elm, cls, state) {\n return global$3.DOM.toggleClass(elm, cls, state);\n },\n css: function (elm, name, value) {\n return global$3.DOM.setStyle(elm, name, value);\n },\n getRuntimeStyle: function (elm, name) {\n return global$3.DOM.getStyle(elm, name, true);\n },\n on: function (target, name, callback, scope) {\n return global$3.DOM.bind(target, name, callback, scope);\n },\n off: function (target, name, callback) {\n return global$3.DOM.unbind(target, name, callback);\n },\n fire: function (target, name, args) {\n return global$3.DOM.fire(target, name, args);\n },\n innerHtml: function (elm, html) {\n global$3.DOM.setHTML(elm, html);\n }\n };\n\n var isStatic = function (elm) {\n return funcs.getRuntimeStyle(elm, 'position') === 'static';\n };\n var isFixed = function (ctrl) {\n return ctrl.state.get('fixed');\n };\n function calculateRelativePosition(ctrl, targetElm, rel) {\n var ctrlElm, pos, x, y, selfW, selfH, targetW, targetH, viewport, size;\n viewport = getWindowViewPort();\n pos = funcs.getPos(targetElm, UiContainer.getUiContainer(ctrl));\n x = pos.x;\n y = pos.y;\n if (isFixed(ctrl) && isStatic(domGlobals.document.body)) {\n x -= viewport.x;\n y -= viewport.y;\n }\n ctrlElm = ctrl.getEl();\n size = funcs.getSize(ctrlElm);\n selfW = size.width;\n selfH = size.height;\n size = funcs.getSize(targetElm);\n targetW = size.width;\n targetH = size.height;\n rel = (rel || '').split('');\n if (rel[0] === 'b') {\n y += targetH;\n }\n if (rel[1] === 'r') {\n x += targetW;\n }\n if (rel[0] === 'c') {\n y += Math.round(targetH / 2);\n }\n if (rel[1] === 'c') {\n x += Math.round(targetW / 2);\n }\n if (rel[3] === 'b') {\n y -= selfH;\n }\n if (rel[4] === 'r') {\n x -= selfW;\n }\n if (rel[3] === 'c') {\n y -= Math.round(selfH / 2);\n }\n if (rel[4] === 'c') {\n x -= Math.round(selfW / 2);\n }\n return {\n x: x,\n y: y,\n w: selfW,\n h: selfH\n };\n }\n var getUiContainerViewPort = function (customUiContainer) {\n return {\n x: 0,\n y: 0,\n w: customUiContainer.scrollWidth - 1,\n h: customUiContainer.scrollHeight - 1\n };\n };\n var getWindowViewPort = function () {\n var win = domGlobals.window;\n var x = Math.max(win.pageXOffset, domGlobals.document.body.scrollLeft, domGlobals.document.documentElement.scrollLeft);\n var y = Math.max(win.pageYOffset, domGlobals.document.body.scrollTop, domGlobals.document.documentElement.scrollTop);\n var w = win.innerWidth || domGlobals.document.documentElement.clientWidth;\n var h = win.innerHeight || domGlobals.document.documentElement.clientHeight;\n return {\n x: x,\n y: y,\n w: w,\n h: h\n };\n };\n var getViewPortRect = function (ctrl) {\n var customUiContainer = UiContainer.getUiContainer(ctrl);\n return customUiContainer && !isFixed(ctrl) ? getUiContainerViewPort(customUiContainer) : getWindowViewPort();\n };\n var Movable = {\n testMoveRel: function (elm, rels) {\n var viewPortRect = getViewPortRect(this);\n for (var i = 0; i < rels.length; i++) {\n var pos = calculateRelativePosition(this, elm, rels[i]);\n if (isFixed(this)) {\n if (pos.x > 0 && pos.x + pos.w < viewPortRect.w && pos.y > 0 && pos.y + pos.h < viewPortRect.h) {\n return rels[i];\n }\n } else {\n if (pos.x > viewPortRect.x && pos.x + pos.w < viewPortRect.w + viewPortRect.x && pos.y > viewPortRect.y && pos.y + pos.h < viewPortRect.h + viewPortRect.y) {\n return rels[i];\n }\n }\n }\n return rels[0];\n },\n moveRel: function (elm, rel) {\n if (typeof rel !== 'string') {\n rel = this.testMoveRel(elm, rel);\n }\n var pos = calculateRelativePosition(this, elm, rel);\n return this.moveTo(pos.x, pos.y);\n },\n moveBy: function (dx, dy) {\n var self = this, rect = self.layoutRect();\n self.moveTo(rect.x + dx, rect.y + dy);\n return self;\n },\n moveTo: function (x, y) {\n var self = this;\n function constrain(value, max, size) {\n if (value < 0) {\n return 0;\n }\n if (value + size > max) {\n value = max - size;\n return value < 0 ? 0 : value;\n }\n return value;\n }\n if (self.settings.constrainToViewport) {\n var viewPortRect = getViewPortRect(this);\n var layoutRect = self.layoutRect();\n x = constrain(x, viewPortRect.w + viewPortRect.x, layoutRect.w);\n y = constrain(y, viewPortRect.h + viewPortRect.y, layoutRect.h);\n }\n var uiContainer = UiContainer.getUiContainer(self);\n if (uiContainer && isStatic(uiContainer) && !isFixed(self)) {\n x -= uiContainer.scrollLeft;\n y -= uiContainer.scrollTop;\n }\n if (uiContainer) {\n x += 1;\n y += 1;\n }\n if (self.state.get('rendered')) {\n self.layoutRect({\n x: x,\n y: y\n }).repaint();\n } else {\n self.settings.x = x;\n self.settings.y = y;\n }\n self.fire('move', {\n x: x,\n y: y\n });\n return self;\n }\n };\n\n var global$a = tinymce.util.Tools.resolve('tinymce.util.Class');\n\n var global$b = tinymce.util.Tools.resolve('tinymce.util.EventDispatcher');\n\n var BoxUtils = {\n parseBox: function (value) {\n var len;\n var radix = 10;\n if (!value) {\n return;\n }\n if (typeof value === 'number') {\n value = value || 0;\n return {\n top: value,\n left: value,\n bottom: value,\n right: value\n };\n }\n value = value.split(' ');\n len = value.length;\n if (len === 1) {\n value[1] = value[2] = value[3] = value[0];\n } else if (len === 2) {\n value[2] = value[0];\n value[3] = value[1];\n } else if (len === 3) {\n value[3] = value[1];\n }\n return {\n top: parseInt(value[0], radix) || 0,\n right: parseInt(value[1], radix) || 0,\n bottom: parseInt(value[2], radix) || 0,\n left: parseInt(value[3], radix) || 0\n };\n },\n measureBox: function (elm, prefix) {\n function getStyle(name) {\n var defaultView = elm.ownerDocument.defaultView;\n if (defaultView) {\n var computedStyle = defaultView.getComputedStyle(elm, null);\n if (computedStyle) {\n name = name.replace(/[A-Z]/g, function (a) {\n return '-' + a;\n });\n return computedStyle.getPropertyValue(name);\n } else {\n return null;\n }\n }\n return elm.currentStyle[name];\n }\n function getSide(name) {\n var val = parseFloat(getStyle(name));\n return isNaN(val) ? 0 : val;\n }\n return {\n top: getSide(prefix + 'TopWidth'),\n right: getSide(prefix + 'RightWidth'),\n bottom: getSide(prefix + 'BottomWidth'),\n left: getSide(prefix + 'LeftWidth')\n };\n }\n };\n\n function noop$1() {\n }\n function ClassList(onchange) {\n this.cls = [];\n this.cls._map = {};\n this.onchange = onchange || noop$1;\n this.prefix = '';\n }\n global$2.extend(ClassList.prototype, {\n add: function (cls) {\n if (cls && !this.contains(cls)) {\n this.cls._map[cls] = true;\n this.cls.push(cls);\n this._change();\n }\n return this;\n },\n remove: function (cls) {\n if (this.contains(cls)) {\n var i = void 0;\n for (i = 0; i < this.cls.length; i++) {\n if (this.cls[i] === cls) {\n break;\n }\n }\n this.cls.splice(i, 1);\n delete this.cls._map[cls];\n this._change();\n }\n return this;\n },\n toggle: function (cls, state) {\n var curState = this.contains(cls);\n if (curState !== state) {\n if (curState) {\n this.remove(cls);\n } else {\n this.add(cls);\n }\n this._change();\n }\n return this;\n },\n contains: function (cls) {\n return !!this.cls._map[cls];\n },\n _change: function () {\n delete this.clsValue;\n this.onchange.call(this);\n }\n });\n ClassList.prototype.toString = function () {\n var value;\n if (this.clsValue) {\n return this.clsValue;\n }\n value = '';\n for (var i = 0; i < this.cls.length; i++) {\n if (i > 0) {\n value += ' ';\n }\n value += this.prefix + this.cls[i];\n }\n return value;\n };\n\n function unique(array) {\n var uniqueItems = [];\n var i = array.length, item;\n while (i--) {\n item = array[i];\n if (!item.__checked) {\n uniqueItems.push(item);\n item.__checked = 1;\n }\n }\n i = uniqueItems.length;\n while (i--) {\n delete uniqueItems[i].__checked;\n }\n return uniqueItems;\n }\n var expression = /^([\\w\\\\*]+)?(?:#([\\w\\-\\\\]+))?(?:\\.([\\w\\\\\\.]+))?(?:\\[\\@?([\\w\\\\]+)([\\^\\$\\*!~]?=)([\\w\\\\]+)\\])?(?:\\:(.+))?/i;\n var chunker = /((?:\\((?:\\([^()]+\\)|[^()]+)+\\)|\\[(?:\\[[^\\[\\]]*\\]|['\"][^'\"]*['\"]|[^\\[\\]'\"]+)+\\]|\\\\.|[^ >+~,(\\[\\\\]+)+|[>+~])(\\s*,\\s*)?((?:.|\\r|\\n)*)/g;\n var whiteSpace = /^\\s*|\\s*$/g;\n var Collection;\n var Selector = global$a.extend({\n init: function (selector) {\n var match = this.match;\n function compileNameFilter(name) {\n if (name) {\n name = name.toLowerCase();\n return function (item) {\n return name === '*' || item.type === name;\n };\n }\n }\n function compileIdFilter(id) {\n if (id) {\n return function (item) {\n return item._name === id;\n };\n }\n }\n function compileClassesFilter(classes) {\n if (classes) {\n classes = classes.split('.');\n return function (item) {\n var i = classes.length;\n while (i--) {\n if (!item.classes.contains(classes[i])) {\n return false;\n }\n }\n return true;\n };\n }\n }\n function compileAttrFilter(name, cmp, check) {\n if (name) {\n return function (item) {\n var value = item[name] ? item[name]() : '';\n return !cmp ? !!check : cmp === '=' ? value === check : cmp === '*=' ? value.indexOf(check) >= 0 : cmp === '~=' ? (' ' + value + ' ').indexOf(' ' + check + ' ') >= 0 : cmp === '!=' ? value !== check : cmp === '^=' ? value.indexOf(check) === 0 : cmp === '$=' ? value.substr(value.length - check.length) === check : false;\n };\n }\n }\n function compilePsuedoFilter(name) {\n var notSelectors;\n if (name) {\n name = /(?:not\\((.+)\\))|(.+)/i.exec(name);\n if (!name[1]) {\n name = name[2];\n return function (item, index, length) {\n return name === 'first' ? index === 0 : name === 'last' ? index === length - 1 : name === 'even' ? index % 2 === 0 : name === 'odd' ? index % 2 === 1 : item[name] ? item[name]() : false;\n };\n }\n notSelectors = parseChunks(name[1], []);\n return function (item) {\n return !match(item, notSelectors);\n };\n }\n }\n function compile(selector, filters, direct) {\n var parts;\n function add(filter) {\n if (filter) {\n filters.push(filter);\n }\n }\n parts = expression.exec(selector.replace(whiteSpace, ''));\n add(compileNameFilter(parts[1]));\n add(compileIdFilter(parts[2]));\n add(compileClassesFilter(parts[3]));\n add(compileAttrFilter(parts[4], parts[5], parts[6]));\n add(compilePsuedoFilter(parts[7]));\n filters.pseudo = !!parts[7];\n filters.direct = direct;\n return filters;\n }\n function parseChunks(selector, selectors) {\n var parts = [];\n var extra, matches, i;\n do {\n chunker.exec('');\n matches = chunker.exec(selector);\n if (matches) {\n selector = matches[3];\n parts.push(matches[1]);\n if (matches[2]) {\n extra = matches[3];\n break;\n }\n }\n } while (matches);\n if (extra) {\n parseChunks(extra, selectors);\n }\n selector = [];\n for (i = 0; i < parts.length; i++) {\n if (parts[i] !== '>') {\n selector.push(compile(parts[i], [], parts[i - 1] === '>'));\n }\n }\n selectors.push(selector);\n return selectors;\n }\n this._selectors = parseChunks(selector, []);\n },\n match: function (control, selectors) {\n var i, l, si, sl, selector, fi, fl, filters, index, length, siblings, count, item;\n selectors = selectors || this._selectors;\n for (i = 0, l = selectors.length; i < l; i++) {\n selector = selectors[i];\n sl = selector.length;\n item = control;\n count = 0;\n for (si = sl - 1; si >= 0; si--) {\n filters = selector[si];\n while (item) {\n if (filters.pseudo) {\n siblings = item.parent().items();\n index = length = siblings.length;\n while (index--) {\n if (siblings[index] === item) {\n break;\n }\n }\n }\n for (fi = 0, fl = filters.length; fi < fl; fi++) {\n if (!filters[fi](item, index, length)) {\n fi = fl + 1;\n break;\n }\n }\n if (fi === fl) {\n count++;\n break;\n } else {\n if (si === sl - 1) {\n break;\n }\n }\n item = item.parent();\n }\n }\n if (count === sl) {\n return true;\n }\n }\n return false;\n },\n find: function (container) {\n var matches = [], i, l;\n var selectors = this._selectors;\n function collect(items, selector, index) {\n var i, l, fi, fl, item;\n var filters = selector[index];\n for (i = 0, l = items.length; i < l; i++) {\n item = items[i];\n for (fi = 0, fl = filters.length; fi < fl; fi++) {\n if (!filters[fi](item, i, l)) {\n fi = fl + 1;\n break;\n }\n }\n if (fi === fl) {\n if (index === selector.length - 1) {\n matches.push(item);\n } else {\n if (item.items) {\n collect(item.items(), selector, index + 1);\n }\n }\n } else if (filters.direct) {\n return;\n }\n if (item.items) {\n collect(item.items(), selector, index);\n }\n }\n }\n if (container.items) {\n for (i = 0, l = selectors.length; i < l; i++) {\n collect(container.items(), selectors[i], 0);\n }\n if (l > 1) {\n matches = unique(matches);\n }\n }\n if (!Collection) {\n Collection = Selector.Collection;\n }\n return new Collection(matches);\n }\n });\n\n var Collection$1, proto;\n var push = Array.prototype.push, slice = Array.prototype.slice;\n proto = {\n length: 0,\n init: function (items) {\n if (items) {\n this.add(items);\n }\n },\n add: function (items) {\n var self = this;\n if (!global$2.isArray(items)) {\n if (items instanceof Collection$1) {\n self.add(items.toArray());\n } else {\n push.call(self, items);\n }\n } else {\n push.apply(self, items);\n }\n return self;\n },\n set: function (items) {\n var self = this;\n var len = self.length;\n var i;\n self.length = 0;\n self.add(items);\n for (i = self.length; i < len; i++) {\n delete self[i];\n }\n return self;\n },\n filter: function (selector) {\n var self = this;\n var i, l;\n var matches = [];\n var item, match;\n if (typeof selector === 'string') {\n selector = new Selector(selector);\n match = function (item) {\n return selector.match(item);\n };\n } else {\n match = selector;\n }\n for (i = 0, l = self.length; i < l; i++) {\n item = self[i];\n if (match(item)) {\n matches.push(item);\n }\n }\n return new Collection$1(matches);\n },\n slice: function () {\n return new Collection$1(slice.apply(this, arguments));\n },\n eq: function (index) {\n return index === -1 ? this.slice(index) : this.slice(index, +index + 1);\n },\n each: function (callback) {\n global$2.each(this, callback);\n return this;\n },\n toArray: function () {\n return global$2.toArray(this);\n },\n indexOf: function (ctrl) {\n var self = this;\n var i = self.length;\n while (i--) {\n if (self[i] === ctrl) {\n break;\n }\n }\n return i;\n },\n reverse: function () {\n return new Collection$1(global$2.toArray(this).reverse());\n },\n hasClass: function (cls) {\n return this[0] ? this[0].classes.contains(cls) : false;\n },\n prop: function (name, value) {\n var self = this;\n var item;\n if (value !== undefined) {\n self.each(function (item) {\n if (item[name]) {\n item[name](value);\n }\n });\n return self;\n }\n item = self[0];\n if (item && item[name]) {\n return item[name]();\n }\n },\n exec: function (name) {\n var self = this, args = global$2.toArray(arguments).slice(1);\n self.each(function (item) {\n if (item[name]) {\n item[name].apply(item, args);\n }\n });\n return self;\n },\n remove: function () {\n var i = this.length;\n while (i--) {\n this[i].remove();\n }\n return this;\n },\n addClass: function (cls) {\n return this.each(function (item) {\n item.classes.add(cls);\n });\n },\n removeClass: function (cls) {\n return this.each(function (item) {\n item.classes.remove(cls);\n });\n }\n };\n global$2.each('fire on off show hide append prepend before after reflow'.split(' '), function (name) {\n proto[name] = function () {\n var args = global$2.toArray(arguments);\n this.each(function (ctrl) {\n if (name in ctrl) {\n ctrl[name].apply(ctrl, args);\n }\n });\n return this;\n };\n });\n global$2.each('text name disabled active selected checked visible parent value data'.split(' '), function (name) {\n proto[name] = function (value) {\n return this.prop(name, value);\n };\n });\n Collection$1 = global$a.extend(proto);\n Selector.Collection = Collection$1;\n var Collection$2 = Collection$1;\n\n var Binding = function (settings) {\n this.create = settings.create;\n };\n Binding.create = function (model, name) {\n return new Binding({\n create: function (otherModel, otherName) {\n var bindings;\n var fromSelfToOther = function (e) {\n otherModel.set(otherName, e.value);\n };\n var fromOtherToSelf = function (e) {\n model.set(name, e.value);\n };\n otherModel.on('change:' + otherName, fromOtherToSelf);\n model.on('change:' + name, fromSelfToOther);\n bindings = otherModel._bindings;\n if (!bindings) {\n bindings = otherModel._bindings = [];\n otherModel.on('destroy', function () {\n var i = bindings.length;\n while (i--) {\n bindings[i]();\n }\n });\n }\n bindings.push(function () {\n model.off('change:' + name, fromSelfToOther);\n });\n return model.get(name);\n }\n });\n };\n\n var global$c = tinymce.util.Tools.resolve('tinymce.util.Observable');\n\n function isNode(node) {\n return node.nodeType > 0;\n }\n function isEqual(a, b) {\n var k, checked;\n if (a === b) {\n return true;\n }\n if (a === null || b === null) {\n return a === b;\n }\n if (typeof a !== 'object' || typeof b !== 'object') {\n return a === b;\n }\n if (global$2.isArray(b)) {\n if (a.length !== b.length) {\n return false;\n }\n k = a.length;\n while (k--) {\n if (!isEqual(a[k], b[k])) {\n return false;\n }\n }\n }\n if (isNode(a) || isNode(b)) {\n return a === b;\n }\n checked = {};\n for (k in b) {\n if (!isEqual(a[k], b[k])) {\n return false;\n }\n checked[k] = true;\n }\n for (k in a) {\n if (!checked[k] && !isEqual(a[k], b[k])) {\n return false;\n }\n }\n return true;\n }\n var ObservableObject = global$a.extend({\n Mixins: [global$c],\n init: function (data) {\n var name, value;\n data = data || {};\n for (name in data) {\n value = data[name];\n if (value instanceof Binding) {\n data[name] = value.create(this, name);\n }\n }\n this.data = data;\n },\n set: function (name, value) {\n var key, args;\n var oldValue = this.data[name];\n if (value instanceof Binding) {\n value = value.create(this, name);\n }\n if (typeof name === 'object') {\n for (key in name) {\n this.set(key, name[key]);\n }\n return this;\n }\n if (!isEqual(oldValue, value)) {\n this.data[name] = value;\n args = {\n target: this,\n name: name,\n value: value,\n oldValue: oldValue\n };\n this.fire('change:' + name, args);\n this.fire('change', args);\n }\n return this;\n },\n get: function (name) {\n return this.data[name];\n },\n has: function (name) {\n return name in this.data;\n },\n bind: function (name) {\n return Binding.create(this, name);\n },\n destroy: function () {\n this.fire('destroy');\n }\n });\n\n var dirtyCtrls = {}, animationFrameRequested;\n var ReflowQueue = {\n add: function (ctrl) {\n var parent = ctrl.parent();\n if (parent) {\n if (!parent._layout || parent._layout.isNative()) {\n return;\n }\n if (!dirtyCtrls[parent._id]) {\n dirtyCtrls[parent._id] = parent;\n }\n if (!animationFrameRequested) {\n animationFrameRequested = true;\n global$7.requestAnimationFrame(function () {\n var id, ctrl;\n animationFrameRequested = false;\n for (id in dirtyCtrls) {\n ctrl = dirtyCtrls[id];\n if (ctrl.state.get('rendered')) {\n ctrl.reflow();\n }\n }\n dirtyCtrls = {};\n }, domGlobals.document.body);\n }\n }\n },\n remove: function (ctrl) {\n if (dirtyCtrls[ctrl._id]) {\n delete dirtyCtrls[ctrl._id];\n }\n }\n };\n\n var hasMouseWheelEventSupport = 'onmousewheel' in domGlobals.document;\n var hasWheelEventSupport = false;\n var classPrefix = 'mce-';\n var Control, idCounter = 0;\n var proto$1 = {\n Statics: { classPrefix: classPrefix },\n isRtl: function () {\n return Control.rtl;\n },\n classPrefix: classPrefix,\n init: function (settings) {\n var self = this;\n var classes, defaultClasses;\n function applyClasses(classes) {\n var i;\n classes = classes.split(' ');\n for (i = 0; i < classes.length; i++) {\n self.classes.add(classes[i]);\n }\n }\n self.settings = settings = global$2.extend({}, self.Defaults, settings);\n self._id = settings.id || 'mceu_' + idCounter++;\n self._aria = { role: settings.role };\n self._elmCache = {};\n self.$ = global$9;\n self.state = new ObservableObject({\n visible: true,\n active: false,\n disabled: false,\n value: ''\n });\n self.data = new ObservableObject(settings.data);\n self.classes = new ClassList(function () {\n if (self.state.get('rendered')) {\n self.getEl().className = this.toString();\n }\n });\n self.classes.prefix = self.classPrefix;\n classes = settings.classes;\n if (classes) {\n if (self.Defaults) {\n defaultClasses = self.Defaults.classes;\n if (defaultClasses && classes !== defaultClasses) {\n applyClasses(defaultClasses);\n }\n }\n applyClasses(classes);\n }\n global$2.each('title text name visible disabled active value'.split(' '), function (name) {\n if (name in settings) {\n self[name](settings[name]);\n }\n });\n self.on('click', function () {\n if (self.disabled()) {\n return false;\n }\n });\n self.settings = settings;\n self.borderBox = BoxUtils.parseBox(settings.border);\n self.paddingBox = BoxUtils.parseBox(settings.padding);\n self.marginBox = BoxUtils.parseBox(settings.margin);\n if (settings.hidden) {\n self.hide();\n }\n },\n Properties: 'parent,name',\n getContainerElm: function () {\n var uiContainer = UiContainer.getUiContainer(this);\n return uiContainer ? uiContainer : funcs.getContainer();\n },\n getParentCtrl: function (elm) {\n var ctrl;\n var lookup = this.getRoot().controlIdLookup;\n while (elm && lookup) {\n ctrl = lookup[elm.id];\n if (ctrl) {\n break;\n }\n elm = elm.parentNode;\n }\n return ctrl;\n },\n initLayoutRect: function () {\n var self = this;\n var settings = self.settings;\n var borderBox, layoutRect;\n var elm = self.getEl();\n var width, height, minWidth, minHeight, autoResize;\n var startMinWidth, startMinHeight, initialSize;\n borderBox = self.borderBox = self.borderBox || BoxUtils.measureBox(elm, 'border');\n self.paddingBox = self.paddingBox || BoxUtils.measureBox(elm, 'padding');\n self.marginBox = self.marginBox || BoxUtils.measureBox(elm, 'margin');\n initialSize = funcs.getSize(elm);\n startMinWidth = settings.minWidth;\n startMinHeight = settings.minHeight;\n minWidth = startMinWidth || initialSize.width;\n minHeight = startMinHeight || initialSize.height;\n width = settings.width;\n height = settings.height;\n autoResize = settings.autoResize;\n autoResize = typeof autoResize !== 'undefined' ? autoResize : !width && !height;\n width = width || minWidth;\n height = height || minHeight;\n var deltaW = borderBox.left + borderBox.right;\n var deltaH = borderBox.top + borderBox.bottom;\n var maxW = settings.maxWidth || 65535;\n var maxH = settings.maxHeight || 65535;\n self._layoutRect = layoutRect = {\n x: settings.x || 0,\n y: settings.y || 0,\n w: width,\n h: height,\n deltaW: deltaW,\n deltaH: deltaH,\n contentW: width - deltaW,\n contentH: height - deltaH,\n innerW: width - deltaW,\n innerH: height - deltaH,\n startMinWidth: startMinWidth || 0,\n startMinHeight: startMinHeight || 0,\n minW: Math.min(minWidth, maxW),\n minH: Math.min(minHeight, maxH),\n maxW: maxW,\n maxH: maxH,\n autoResize: autoResize,\n scrollW: 0\n };\n self._lastLayoutRect = {};\n return layoutRect;\n },\n layoutRect: function (newRect) {\n var self = this;\n var curRect = self._layoutRect, lastLayoutRect, size, deltaWidth, deltaHeight, repaintControls;\n if (!curRect) {\n curRect = self.initLayoutRect();\n }\n if (newRect) {\n deltaWidth = curRect.deltaW;\n deltaHeight = curRect.deltaH;\n if (newRect.x !== undefined) {\n curRect.x = newRect.x;\n }\n if (newRect.y !== undefined) {\n curRect.y = newRect.y;\n }\n if (newRect.minW !== undefined) {\n curRect.minW = newRect.minW;\n }\n if (newRect.minH !== undefined) {\n curRect.minH = newRect.minH;\n }\n size = newRect.w;\n if (size !== undefined) {\n size = size < curRect.minW ? curRect.minW : size;\n size = size > curRect.maxW ? curRect.maxW : size;\n curRect.w = size;\n curRect.innerW = size - deltaWidth;\n }\n size = newRect.h;\n if (size !== undefined) {\n size = size < curRect.minH ? curRect.minH : size;\n size = size > curRect.maxH ? curRect.maxH : size;\n curRect.h = size;\n curRect.innerH = size - deltaHeight;\n }\n size = newRect.innerW;\n if (size !== undefined) {\n size = size < curRect.minW - deltaWidth ? curRect.minW - deltaWidth : size;\n size = size > curRect.maxW - deltaWidth ? curRect.maxW - deltaWidth : size;\n curRect.innerW = size;\n curRect.w = size + deltaWidth;\n }\n size = newRect.innerH;\n if (size !== undefined) {\n size = size < curRect.minH - deltaHeight ? curRect.minH - deltaHeight : size;\n size = size > curRect.maxH - deltaHeight ? curRect.maxH - deltaHeight : size;\n curRect.innerH = size;\n curRect.h = size + deltaHeight;\n }\n if (newRect.contentW !== undefined) {\n curRect.contentW = newRect.contentW;\n }\n if (newRect.contentH !== undefined) {\n curRect.contentH = newRect.contentH;\n }\n lastLayoutRect = self._lastLayoutRect;\n if (lastLayoutRect.x !== curRect.x || lastLayoutRect.y !== curRect.y || lastLayoutRect.w !== curRect.w || lastLayoutRect.h !== curRect.h) {\n repaintControls = Control.repaintControls;\n if (repaintControls) {\n if (repaintControls.map && !repaintControls.map[self._id]) {\n repaintControls.push(self);\n repaintControls.map[self._id] = true;\n }\n }\n lastLayoutRect.x = curRect.x;\n lastLayoutRect.y = curRect.y;\n lastLayoutRect.w = curRect.w;\n lastLayoutRect.h = curRect.h;\n }\n return self;\n }\n return curRect;\n },\n repaint: function () {\n var self = this;\n var style, bodyStyle, bodyElm, rect, borderBox;\n var borderW, borderH, lastRepaintRect, round, value;\n round = !domGlobals.document.createRange ? Math.round : function (value) {\n return value;\n };\n style = self.getEl().style;\n rect = self._layoutRect;\n lastRepaintRect = self._lastRepaintRect || {};\n borderBox = self.borderBox;\n borderW = borderBox.left + borderBox.right;\n borderH = borderBox.top + borderBox.bottom;\n if (rect.x !== lastRepaintRect.x) {\n style.left = round(rect.x) + 'px';\n lastRepaintRect.x = rect.x;\n }\n if (rect.y !== lastRepaintRect.y) {\n style.top = round(rect.y) + 'px';\n lastRepaintRect.y = rect.y;\n }\n if (rect.w !== lastRepaintRect.w) {\n value = round(rect.w - borderW);\n style.width = (value >= 0 ? value : 0) + 'px';\n lastRepaintRect.w = rect.w;\n }\n if (rect.h !== lastRepaintRect.h) {\n value = round(rect.h - borderH);\n style.height = (value >= 0 ? value : 0) + 'px';\n lastRepaintRect.h = rect.h;\n }\n if (self._hasBody && rect.innerW !== lastRepaintRect.innerW) {\n value = round(rect.innerW);\n bodyElm = self.getEl('body');\n if (bodyElm) {\n bodyStyle = bodyElm.style;\n bodyStyle.width = (value >= 0 ? value : 0) + 'px';\n }\n lastRepaintRect.innerW = rect.innerW;\n }\n if (self._hasBody && rect.innerH !== lastRepaintRect.innerH) {\n value = round(rect.innerH);\n bodyElm = bodyElm || self.getEl('body');\n if (bodyElm) {\n bodyStyle = bodyStyle || bodyElm.style;\n bodyStyle.height = (value >= 0 ? value : 0) + 'px';\n }\n lastRepaintRect.innerH = rect.innerH;\n }\n self._lastRepaintRect = lastRepaintRect;\n self.fire('repaint', {}, false);\n },\n updateLayoutRect: function () {\n var self = this;\n self.parent()._lastRect = null;\n funcs.css(self.getEl(), {\n width: '',\n height: ''\n });\n self._layoutRect = self._lastRepaintRect = self._lastLayoutRect = null;\n self.initLayoutRect();\n },\n on: function (name, callback) {\n var self = this;\n function resolveCallbackName(name) {\n var callback, scope;\n if (typeof name !== 'string') {\n return name;\n }\n return function (e) {\n if (!callback) {\n self.parentsAndSelf().each(function (ctrl) {\n var callbacks = ctrl.settings.callbacks;\n if (callbacks && (callback = callbacks[name])) {\n scope = ctrl;\n return false;\n }\n });\n }\n if (!callback) {\n e.action = name;\n this.fire('execute', e);\n return;\n }\n return callback.call(scope, e);\n };\n }\n getEventDispatcher(self).on(name, resolveCallbackName(callback));\n return self;\n },\n off: function (name, callback) {\n getEventDispatcher(this).off(name, callback);\n return this;\n },\n fire: function (name, args, bubble) {\n var self = this;\n args = args || {};\n if (!args.control) {\n args.control = self;\n }\n args = getEventDispatcher(self).fire(name, args);\n if (bubble !== false && self.parent) {\n var parent = self.parent();\n while (parent && !args.isPropagationStopped()) {\n parent.fire(name, args, false);\n parent = parent.parent();\n }\n }\n return args;\n },\n hasEventListeners: function (name) {\n return getEventDispatcher(this).has(name);\n },\n parents: function (selector) {\n var self = this;\n var ctrl, parents = new Collection$2();\n for (ctrl = self.parent(); ctrl; ctrl = ctrl.parent()) {\n parents.add(ctrl);\n }\n if (selector) {\n parents = parents.filter(selector);\n }\n return parents;\n },\n parentsAndSelf: function (selector) {\n return new Collection$2(this).add(this.parents(selector));\n },\n next: function () {\n var parentControls = this.parent().items();\n return parentControls[parentControls.indexOf(this) + 1];\n },\n prev: function () {\n var parentControls = this.parent().items();\n return parentControls[parentControls.indexOf(this) - 1];\n },\n innerHtml: function (html) {\n this.$el.html(html);\n return this;\n },\n getEl: function (suffix) {\n var id = suffix ? this._id + '-' + suffix : this._id;\n if (!this._elmCache[id]) {\n this._elmCache[id] = global$9('#' + id)[0];\n }\n return this._elmCache[id];\n },\n show: function () {\n return this.visible(true);\n },\n hide: function () {\n return this.visible(false);\n },\n focus: function () {\n try {\n this.getEl().focus();\n } catch (ex) {\n }\n return this;\n },\n blur: function () {\n this.getEl().blur();\n return this;\n },\n aria: function (name, value) {\n var self = this, elm = self.getEl(self.ariaTarget);\n if (typeof value === 'undefined') {\n return self._aria[name];\n }\n self._aria[name] = value;\n if (self.state.get('rendered')) {\n elm.setAttribute(name === 'role' ? name : 'aria-' + name, value);\n }\n return self;\n },\n encode: function (text, translate) {\n if (translate !== false) {\n text = this.translate(text);\n }\n return (text || '').replace(/[&<>\"]/g, function (match) {\n return '&#' + match.charCodeAt(0) + ';';\n });\n },\n translate: function (text) {\n return Control.translate ? Control.translate(text) : text;\n },\n before: function (items) {\n var self = this, parent = self.parent();\n if (parent) {\n parent.insert(items, parent.items().indexOf(self), true);\n }\n return self;\n },\n after: function (items) {\n var self = this, parent = self.parent();\n if (parent) {\n parent.insert(items, parent.items().indexOf(self));\n }\n return self;\n },\n remove: function () {\n var self = this;\n var elm = self.getEl();\n var parent = self.parent();\n var newItems, i;\n if (self.items) {\n var controls = self.items().toArray();\n i = controls.length;\n while (i--) {\n controls[i].remove();\n }\n }\n if (parent && parent.items) {\n newItems = [];\n parent.items().each(function (item) {\n if (item !== self) {\n newItems.push(item);\n }\n });\n parent.items().set(newItems);\n parent._lastRect = null;\n }\n if (self._eventsRoot && self._eventsRoot === self) {\n global$9(elm).off();\n }\n var lookup = self.getRoot().controlIdLookup;\n if (lookup) {\n delete lookup[self._id];\n }\n if (elm && elm.parentNode) {\n elm.parentNode.removeChild(elm);\n }\n self.state.set('rendered', false);\n self.state.destroy();\n self.fire('remove');\n return self;\n },\n renderBefore: function (elm) {\n global$9(elm).before(this.renderHtml());\n this.postRender();\n return this;\n },\n renderTo: function (elm) {\n global$9(elm || this.getContainerElm()).append(this.renderHtml());\n this.postRender();\n return this;\n },\n preRender: function () {\n },\n render: function () {\n },\n renderHtml: function () {\n return '
';\n },\n postRender: function () {\n var self = this;\n var settings = self.settings;\n var elm, box, parent, name, parentEventsRoot;\n self.$el = global$9(self.getEl());\n self.state.set('rendered', true);\n for (name in settings) {\n if (name.indexOf('on') === 0) {\n self.on(name.substr(2), settings[name]);\n }\n }\n if (self._eventsRoot) {\n for (parent = self.parent(); !parentEventsRoot && parent; parent = parent.parent()) {\n parentEventsRoot = parent._eventsRoot;\n }\n if (parentEventsRoot) {\n for (name in parentEventsRoot._nativeEvents) {\n self._nativeEvents[name] = true;\n }\n }\n }\n bindPendingEvents(self);\n if (settings.style) {\n elm = self.getEl();\n if (elm) {\n elm.setAttribute('style', settings.style);\n elm.style.cssText = settings.style;\n }\n }\n if (self.settings.border) {\n box = self.borderBox;\n self.$el.css({\n 'border-top-width': box.top,\n 'border-right-width': box.right,\n 'border-bottom-width': box.bottom,\n 'border-left-width': box.left\n });\n }\n var root = self.getRoot();\n if (!root.controlIdLookup) {\n root.controlIdLookup = {};\n }\n root.controlIdLookup[self._id] = self;\n for (var key in self._aria) {\n self.aria(key, self._aria[key]);\n }\n if (self.state.get('visible') === false) {\n self.getEl().style.display = 'none';\n }\n self.bindStates();\n self.state.on('change:visible', function (e) {\n var state = e.value;\n var parentCtrl;\n if (self.state.get('rendered')) {\n self.getEl().style.display = state === false ? 'none' : '';\n self.getEl().getBoundingClientRect();\n }\n parentCtrl = self.parent();\n if (parentCtrl) {\n parentCtrl._lastRect = null;\n }\n self.fire(state ? 'show' : 'hide');\n ReflowQueue.add(self);\n });\n self.fire('postrender', {}, false);\n },\n bindStates: function () {\n },\n scrollIntoView: function (align) {\n function getOffset(elm, rootElm) {\n var x, y, parent = elm;\n x = y = 0;\n while (parent && parent !== rootElm && parent.nodeType) {\n x += parent.offsetLeft || 0;\n y += parent.offsetTop || 0;\n parent = parent.offsetParent;\n }\n return {\n x: x,\n y: y\n };\n }\n var elm = this.getEl(), parentElm = elm.parentNode;\n var x, y, width, height, parentWidth, parentHeight;\n var pos = getOffset(elm, parentElm);\n x = pos.x;\n y = pos.y;\n width = elm.offsetWidth;\n height = elm.offsetHeight;\n parentWidth = parentElm.clientWidth;\n parentHeight = parentElm.clientHeight;\n if (align === 'end') {\n x -= parentWidth - width;\n y -= parentHeight - height;\n } else if (align === 'center') {\n x -= parentWidth / 2 - width / 2;\n y -= parentHeight / 2 - height / 2;\n }\n parentElm.scrollLeft = x;\n parentElm.scrollTop = y;\n return this;\n },\n getRoot: function () {\n var ctrl = this, rootControl;\n var parents = [];\n while (ctrl) {\n if (ctrl.rootControl) {\n rootControl = ctrl.rootControl;\n break;\n }\n parents.push(ctrl);\n rootControl = ctrl;\n ctrl = ctrl.parent();\n }\n if (!rootControl) {\n rootControl = this;\n }\n var i = parents.length;\n while (i--) {\n parents[i].rootControl = rootControl;\n }\n return rootControl;\n },\n reflow: function () {\n ReflowQueue.remove(this);\n var parent = this.parent();\n if (parent && parent._layout && !parent._layout.isNative()) {\n parent.reflow();\n }\n return this;\n }\n };\n global$2.each('text title visible disabled active value'.split(' '), function (name) {\n proto$1[name] = function (value) {\n if (arguments.length === 0) {\n return this.state.get(name);\n }\n if (typeof value !== 'undefined') {\n this.state.set(name, value);\n }\n return this;\n };\n });\n Control = global$a.extend(proto$1);\n function getEventDispatcher(obj) {\n if (!obj._eventDispatcher) {\n obj._eventDispatcher = new global$b({\n scope: obj,\n toggleEvent: function (name, state) {\n if (state && global$b.isNative(name)) {\n if (!obj._nativeEvents) {\n obj._nativeEvents = {};\n }\n obj._nativeEvents[name] = true;\n if (obj.state.get('rendered')) {\n bindPendingEvents(obj);\n }\n }\n }\n });\n }\n return obj._eventDispatcher;\n }\n function bindPendingEvents(eventCtrl) {\n var i, l, parents, eventRootCtrl, nativeEvents, name;\n function delegate(e) {\n var control = eventCtrl.getParentCtrl(e.target);\n if (control) {\n control.fire(e.type, e);\n }\n }\n function mouseLeaveHandler() {\n var ctrl = eventRootCtrl._lastHoverCtrl;\n if (ctrl) {\n ctrl.fire('mouseleave', { target: ctrl.getEl() });\n ctrl.parents().each(function (ctrl) {\n ctrl.fire('mouseleave', { target: ctrl.getEl() });\n });\n eventRootCtrl._lastHoverCtrl = null;\n }\n }\n function mouseEnterHandler(e) {\n var ctrl = eventCtrl.getParentCtrl(e.target), lastCtrl = eventRootCtrl._lastHoverCtrl, idx = 0, i, parents, lastParents;\n if (ctrl !== lastCtrl) {\n eventRootCtrl._lastHoverCtrl = ctrl;\n parents = ctrl.parents().toArray().reverse();\n parents.push(ctrl);\n if (lastCtrl) {\n lastParents = lastCtrl.parents().toArray().reverse();\n lastParents.push(lastCtrl);\n for (idx = 0; idx < lastParents.length; idx++) {\n if (parents[idx] !== lastParents[idx]) {\n break;\n }\n }\n for (i = lastParents.length - 1; i >= idx; i--) {\n lastCtrl = lastParents[i];\n lastCtrl.fire('mouseleave', { target: lastCtrl.getEl() });\n }\n }\n for (i = idx; i < parents.length; i++) {\n ctrl = parents[i];\n ctrl.fire('mouseenter', { target: ctrl.getEl() });\n }\n }\n }\n function fixWheelEvent(e) {\n e.preventDefault();\n if (e.type === 'mousewheel') {\n e.deltaY = -1 / 40 * e.wheelDelta;\n if (e.wheelDeltaX) {\n e.deltaX = -1 / 40 * e.wheelDeltaX;\n }\n } else {\n e.deltaX = 0;\n e.deltaY = e.detail;\n }\n e = eventCtrl.fire('wheel', e);\n }\n nativeEvents = eventCtrl._nativeEvents;\n if (nativeEvents) {\n parents = eventCtrl.parents().toArray();\n parents.unshift(eventCtrl);\n for (i = 0, l = parents.length; !eventRootCtrl && i < l; i++) {\n eventRootCtrl = parents[i]._eventsRoot;\n }\n if (!eventRootCtrl) {\n eventRootCtrl = parents[parents.length - 1] || eventCtrl;\n }\n eventCtrl._eventsRoot = eventRootCtrl;\n for (l = i, i = 0; i < l; i++) {\n parents[i]._eventsRoot = eventRootCtrl;\n }\n var eventRootDelegates = eventRootCtrl._delegates;\n if (!eventRootDelegates) {\n eventRootDelegates = eventRootCtrl._delegates = {};\n }\n for (name in nativeEvents) {\n if (!nativeEvents) {\n return false;\n }\n if (name === 'wheel' && !hasWheelEventSupport) {\n if (hasMouseWheelEventSupport) {\n global$9(eventCtrl.getEl()).on('mousewheel', fixWheelEvent);\n } else {\n global$9(eventCtrl.getEl()).on('DOMMouseScroll', fixWheelEvent);\n }\n continue;\n }\n if (name === 'mouseenter' || name === 'mouseleave') {\n if (!eventRootCtrl._hasMouseEnter) {\n global$9(eventRootCtrl.getEl()).on('mouseleave', mouseLeaveHandler).on('mouseover', mouseEnterHandler);\n eventRootCtrl._hasMouseEnter = 1;\n }\n } else if (!eventRootDelegates[name]) {\n global$9(eventRootCtrl.getEl()).on(name, delegate);\n eventRootDelegates[name] = true;\n }\n nativeEvents[name] = false;\n }\n }\n }\n var Control$1 = Control;\n\n var hasTabstopData = function (elm) {\n return elm.getAttribute('data-mce-tabstop') ? true : false;\n };\n function KeyboardNavigation (settings) {\n var root = settings.root;\n var focusedElement, focusedControl;\n function isElement(node) {\n return node && node.nodeType === 1;\n }\n try {\n focusedElement = domGlobals.document.activeElement;\n } catch (ex) {\n focusedElement = domGlobals.document.body;\n }\n focusedControl = root.getParentCtrl(focusedElement);\n function getRole(elm) {\n elm = elm || focusedElement;\n if (isElement(elm)) {\n return elm.getAttribute('role');\n }\n return null;\n }\n function getParentRole(elm) {\n var role, parent = elm || focusedElement;\n while (parent = parent.parentNode) {\n if (role = getRole(parent)) {\n return role;\n }\n }\n }\n function getAriaProp(name) {\n var elm = focusedElement;\n if (isElement(elm)) {\n return elm.getAttribute('aria-' + name);\n }\n }\n function isTextInputElement(elm) {\n var tagName = elm.tagName.toUpperCase();\n return tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT';\n }\n function canFocus(elm) {\n if (isTextInputElement(elm) && !elm.hidden) {\n return true;\n }\n if (hasTabstopData(elm)) {\n return true;\n }\n if (/^(button|menuitem|checkbox|tab|menuitemcheckbox|option|gridcell|slider)$/.test(getRole(elm))) {\n return true;\n }\n return false;\n }\n function getFocusElements(elm) {\n var elements = [];\n function collect(elm) {\n if (elm.nodeType !== 1 || elm.style.display === 'none' || elm.disabled) {\n return;\n }\n if (canFocus(elm)) {\n elements.push(elm);\n }\n for (var i = 0; i < elm.childNodes.length; i++) {\n collect(elm.childNodes[i]);\n }\n }\n collect(elm || root.getEl());\n return elements;\n }\n function getNavigationRoot(targetControl) {\n var navigationRoot, controls;\n targetControl = targetControl || focusedControl;\n controls = targetControl.parents().toArray();\n controls.unshift(targetControl);\n for (var i = 0; i < controls.length; i++) {\n navigationRoot = controls[i];\n if (navigationRoot.settings.ariaRoot) {\n break;\n }\n }\n return navigationRoot;\n }\n function focusFirst(targetControl) {\n var navigationRoot = getNavigationRoot(targetControl);\n var focusElements = getFocusElements(navigationRoot.getEl());\n if (navigationRoot.settings.ariaRemember && 'lastAriaIndex' in navigationRoot) {\n moveFocusToIndex(navigationRoot.lastAriaIndex, focusElements);\n } else {\n moveFocusToIndex(0, focusElements);\n }\n }\n function moveFocusToIndex(idx, elements) {\n if (idx < 0) {\n idx = elements.length - 1;\n } else if (idx >= elements.length) {\n idx = 0;\n }\n if (elements[idx]) {\n elements[idx].focus();\n }\n return idx;\n }\n function moveFocus(dir, elements) {\n var idx = -1;\n var navigationRoot = getNavigationRoot();\n elements = elements || getFocusElements(navigationRoot.getEl());\n for (var i = 0; i < elements.length; i++) {\n if (elements[i] === focusedElement) {\n idx = i;\n }\n }\n idx += dir;\n navigationRoot.lastAriaIndex = moveFocusToIndex(idx, elements);\n }\n function left() {\n var parentRole = getParentRole();\n if (parentRole === 'tablist') {\n moveFocus(-1, getFocusElements(focusedElement.parentNode));\n } else if (focusedControl.parent().submenu) {\n cancel();\n } else {\n moveFocus(-1);\n }\n }\n function right() {\n var role = getRole(), parentRole = getParentRole();\n if (parentRole === 'tablist') {\n moveFocus(1, getFocusElements(focusedElement.parentNode));\n } else if (role === 'menuitem' && parentRole === 'menu' && getAriaProp('haspopup')) {\n enter();\n } else {\n moveFocus(1);\n }\n }\n function up() {\n moveFocus(-1);\n }\n function down() {\n var role = getRole(), parentRole = getParentRole();\n if (role === 'menuitem' && parentRole === 'menubar') {\n enter();\n } else if (role === 'button' && getAriaProp('haspopup')) {\n enter({ key: 'down' });\n } else {\n moveFocus(1);\n }\n }\n function tab(e) {\n var parentRole = getParentRole();\n if (parentRole === 'tablist') {\n var elm = getFocusElements(focusedControl.getEl('body'))[0];\n if (elm) {\n elm.focus();\n }\n } else {\n moveFocus(e.shiftKey ? -1 : 1);\n }\n }\n function cancel() {\n focusedControl.fire('cancel');\n }\n function enter(aria) {\n aria = aria || {};\n focusedControl.fire('click', {\n target: focusedElement,\n aria: aria\n });\n }\n root.on('keydown', function (e) {\n function handleNonTabOrEscEvent(e, handler) {\n if (isTextInputElement(focusedElement) || hasTabstopData(focusedElement)) {\n return;\n }\n if (getRole(focusedElement) === 'slider') {\n return;\n }\n if (handler(e) !== false) {\n e.preventDefault();\n }\n }\n if (e.isDefaultPrevented()) {\n return;\n }\n switch (e.keyCode) {\n case 37:\n handleNonTabOrEscEvent(e, left);\n break;\n case 39:\n handleNonTabOrEscEvent(e, right);\n break;\n case 38:\n handleNonTabOrEscEvent(e, up);\n break;\n case 40:\n handleNonTabOrEscEvent(e, down);\n break;\n case 27:\n cancel();\n break;\n case 14:\n case 13:\n case 32:\n handleNonTabOrEscEvent(e, enter);\n break;\n case 9:\n tab(e);\n e.preventDefault();\n break;\n }\n });\n root.on('focusin', function (e) {\n focusedElement = e.target;\n focusedControl = e.control;\n });\n return { focusFirst: focusFirst };\n }\n\n var selectorCache = {};\n var Container = Control$1.extend({\n init: function (settings) {\n var self = this;\n self._super(settings);\n settings = self.settings;\n if (settings.fixed) {\n self.state.set('fixed', true);\n }\n self._items = new Collection$2();\n if (self.isRtl()) {\n self.classes.add('rtl');\n }\n self.bodyClasses = new ClassList(function () {\n if (self.state.get('rendered')) {\n self.getEl('body').className = this.toString();\n }\n });\n self.bodyClasses.prefix = self.classPrefix;\n self.classes.add('container');\n self.bodyClasses.add('container-body');\n if (settings.containerCls) {\n self.classes.add(settings.containerCls);\n }\n self._layout = global$4.create((settings.layout || '') + 'layout');\n if (self.settings.items) {\n self.add(self.settings.items);\n } else {\n self.add(self.render());\n }\n self._hasBody = true;\n },\n items: function () {\n return this._items;\n },\n find: function (selector) {\n selector = selectorCache[selector] = selectorCache[selector] || new Selector(selector);\n return selector.find(this);\n },\n add: function (items) {\n var self = this;\n self.items().add(self.create(items)).parent(self);\n return self;\n },\n focus: function (keyboard) {\n var self = this;\n var focusCtrl, keyboardNav, items;\n if (keyboard) {\n keyboardNav = self.keyboardNav || self.parents().eq(-1)[0].keyboardNav;\n if (keyboardNav) {\n keyboardNav.focusFirst(self);\n return;\n }\n }\n items = self.find('*');\n if (self.statusbar) {\n items.add(self.statusbar.items());\n }\n items.each(function (ctrl) {\n if (ctrl.settings.autofocus) {\n focusCtrl = null;\n return false;\n }\n if (ctrl.canFocus) {\n focusCtrl = focusCtrl || ctrl;\n }\n });\n if (focusCtrl) {\n focusCtrl.focus();\n }\n return self;\n },\n replace: function (oldItem, newItem) {\n var ctrlElm;\n var items = this.items();\n var i = items.length;\n while (i--) {\n if (items[i] === oldItem) {\n items[i] = newItem;\n break;\n }\n }\n if (i >= 0) {\n ctrlElm = newItem.getEl();\n if (ctrlElm) {\n ctrlElm.parentNode.removeChild(ctrlElm);\n }\n ctrlElm = oldItem.getEl();\n if (ctrlElm) {\n ctrlElm.parentNode.removeChild(ctrlElm);\n }\n }\n newItem.parent(this);\n },\n create: function (items) {\n var self = this;\n var settings;\n var ctrlItems = [];\n if (!global$2.isArray(items)) {\n items = [items];\n }\n global$2.each(items, function (item) {\n if (item) {\n if (!(item instanceof Control$1)) {\n if (typeof item === 'string') {\n item = { type: item };\n }\n settings = global$2.extend({}, self.settings.defaults, item);\n item.type = settings.type = settings.type || item.type || self.settings.defaultType || (settings.defaults ? settings.defaults.type : null);\n item = global$4.create(settings);\n }\n ctrlItems.push(item);\n }\n });\n return ctrlItems;\n },\n renderNew: function () {\n var self = this;\n self.items().each(function (ctrl, index) {\n var containerElm;\n ctrl.parent(self);\n if (!ctrl.state.get('rendered')) {\n containerElm = self.getEl('body');\n if (containerElm.hasChildNodes() && index <= containerElm.childNodes.length - 1) {\n global$9(containerElm.childNodes[index]).before(ctrl.renderHtml());\n } else {\n global$9(containerElm).append(ctrl.renderHtml());\n }\n ctrl.postRender();\n ReflowQueue.add(ctrl);\n }\n });\n self._layout.applyClasses(self.items().filter(':visible'));\n self._lastRect = null;\n return self;\n },\n append: function (items) {\n return this.add(items).renderNew();\n },\n prepend: function (items) {\n var self = this;\n self.items().set(self.create(items).concat(self.items().toArray()));\n return self.renderNew();\n },\n insert: function (items, index, before) {\n var self = this;\n var curItems, beforeItems, afterItems;\n items = self.create(items);\n curItems = self.items();\n if (!before && index < curItems.length - 1) {\n index += 1;\n }\n if (index >= 0 && index < curItems.length) {\n beforeItems = curItems.slice(0, index).toArray();\n afterItems = curItems.slice(index).toArray();\n curItems.set(beforeItems.concat(items, afterItems));\n }\n return self.renderNew();\n },\n fromJSON: function (data) {\n var self = this;\n for (var name in data) {\n self.find('#' + name).value(data[name]);\n }\n return self;\n },\n toJSON: function () {\n var self = this, data = {};\n self.find('*').each(function (ctrl) {\n var name = ctrl.name(), value = ctrl.value();\n if (name && typeof value !== 'undefined') {\n data[name] = value;\n }\n });\n return data;\n },\n renderHtml: function () {\n var self = this, layout = self._layout, role = this.settings.role;\n self.preRender();\n layout.preRender(self);\n return '
' + '
' + (self.settings.html || '') + layout.renderHtml(self) + '
' + '
';\n },\n postRender: function () {\n var self = this;\n var box;\n self.items().exec('postRender');\n self._super();\n self._layout.postRender(self);\n self.state.set('rendered', true);\n if (self.settings.style) {\n self.$el.css(self.settings.style);\n }\n if (self.settings.border) {\n box = self.borderBox;\n self.$el.css({\n 'border-top-width': box.top,\n 'border-right-width': box.right,\n 'border-bottom-width': box.bottom,\n 'border-left-width': box.left\n });\n }\n if (!self.parent()) {\n self.keyboardNav = KeyboardNavigation({ root: self });\n }\n return self;\n },\n initLayoutRect: function () {\n var self = this, layoutRect = self._super();\n self._layout.recalc(self);\n return layoutRect;\n },\n recalc: function () {\n var self = this;\n var rect = self._layoutRect;\n var lastRect = self._lastRect;\n if (!lastRect || lastRect.w !== rect.w || lastRect.h !== rect.h) {\n self._layout.recalc(self);\n rect = self.layoutRect();\n self._lastRect = {\n x: rect.x,\n y: rect.y,\n w: rect.w,\n h: rect.h\n };\n return true;\n }\n },\n reflow: function () {\n var i;\n ReflowQueue.remove(this);\n if (this.visible()) {\n Control$1.repaintControls = [];\n Control$1.repaintControls.map = {};\n this.recalc();\n i = Control$1.repaintControls.length;\n while (i--) {\n Control$1.repaintControls[i].repaint();\n }\n if (this.settings.layout !== 'flow' && this.settings.layout !== 'stack') {\n this.repaint();\n }\n Control$1.repaintControls = [];\n }\n return this;\n }\n });\n\n function getDocumentSize(doc) {\n var documentElement, body, scrollWidth, clientWidth;\n var offsetWidth, scrollHeight, clientHeight, offsetHeight;\n var max = Math.max;\n documentElement = doc.documentElement;\n body = doc.body;\n scrollWidth = max(documentElement.scrollWidth, body.scrollWidth);\n clientWidth = max(documentElement.clientWidth, body.clientWidth);\n offsetWidth = max(documentElement.offsetWidth, body.offsetWidth);\n scrollHeight = max(documentElement.scrollHeight, body.scrollHeight);\n clientHeight = max(documentElement.clientHeight, body.clientHeight);\n offsetHeight = max(documentElement.offsetHeight, body.offsetHeight);\n return {\n width: scrollWidth < offsetWidth ? clientWidth : scrollWidth,\n height: scrollHeight < offsetHeight ? clientHeight : scrollHeight\n };\n }\n function updateWithTouchData(e) {\n var keys, i;\n if (e.changedTouches) {\n keys = 'screenX screenY pageX pageY clientX clientY'.split(' ');\n for (i = 0; i < keys.length; i++) {\n e[keys[i]] = e.changedTouches[0][keys[i]];\n }\n }\n }\n function DragHelper (id, settings) {\n var $eventOverlay;\n var doc = settings.document || domGlobals.document;\n var downButton;\n var start, stop, drag, startX, startY;\n settings = settings || {};\n var handleElement = doc.getElementById(settings.handle || id);\n start = function (e) {\n var docSize = getDocumentSize(doc);\n var handleElm, cursor;\n updateWithTouchData(e);\n e.preventDefault();\n downButton = e.button;\n handleElm = handleElement;\n startX = e.screenX;\n startY = e.screenY;\n if (domGlobals.window.getComputedStyle) {\n cursor = domGlobals.window.getComputedStyle(handleElm, null).getPropertyValue('cursor');\n } else {\n cursor = handleElm.runtimeStyle.cursor;\n }\n $eventOverlay = global$9('
').css({\n position: 'absolute',\n top: 0,\n left: 0,\n width: docSize.width,\n height: docSize.height,\n zIndex: 2147483647,\n opacity: 0.0001,\n cursor: cursor\n }).appendTo(doc.body);\n global$9(doc).on('mousemove touchmove', drag).on('mouseup touchend', stop);\n settings.start(e);\n };\n drag = function (e) {\n updateWithTouchData(e);\n if (e.button !== downButton) {\n return stop(e);\n }\n e.deltaX = e.screenX - startX;\n e.deltaY = e.screenY - startY;\n e.preventDefault();\n settings.drag(e);\n };\n stop = function (e) {\n updateWithTouchData(e);\n global$9(doc).off('mousemove touchmove', drag).off('mouseup touchend', stop);\n $eventOverlay.remove();\n if (settings.stop) {\n settings.stop(e);\n }\n };\n this.destroy = function () {\n global$9(handleElement).off();\n };\n global$9(handleElement).on('mousedown touchstart', start);\n }\n\n var Scrollable = {\n init: function () {\n var self = this;\n self.on('repaint', self.renderScroll);\n },\n renderScroll: function () {\n var self = this, margin = 2;\n function repaintScroll() {\n var hasScrollH, hasScrollV, bodyElm;\n function repaintAxis(axisName, posName, sizeName, contentSizeName, hasScroll, ax) {\n var containerElm, scrollBarElm, scrollThumbElm;\n var containerSize, scrollSize, ratio, rect;\n var posNameLower, sizeNameLower;\n scrollBarElm = self.getEl('scroll' + axisName);\n if (scrollBarElm) {\n posNameLower = posName.toLowerCase();\n sizeNameLower = sizeName.toLowerCase();\n global$9(self.getEl('absend')).css(posNameLower, self.layoutRect()[contentSizeName] - 1);\n if (!hasScroll) {\n global$9(scrollBarElm).css('display', 'none');\n return;\n }\n global$9(scrollBarElm).css('display', 'block');\n containerElm = self.getEl('body');\n scrollThumbElm = self.getEl('scroll' + axisName + 't');\n containerSize = containerElm['client' + sizeName] - margin * 2;\n containerSize -= hasScrollH && hasScrollV ? scrollBarElm['client' + ax] : 0;\n scrollSize = containerElm['scroll' + sizeName];\n ratio = containerSize / scrollSize;\n rect = {};\n rect[posNameLower] = containerElm['offset' + posName] + margin;\n rect[sizeNameLower] = containerSize;\n global$9(scrollBarElm).css(rect);\n rect = {};\n rect[posNameLower] = containerElm['scroll' + posName] * ratio;\n rect[sizeNameLower] = containerSize * ratio;\n global$9(scrollThumbElm).css(rect);\n }\n }\n bodyElm = self.getEl('body');\n hasScrollH = bodyElm.scrollWidth > bodyElm.clientWidth;\n hasScrollV = bodyElm.scrollHeight > bodyElm.clientHeight;\n repaintAxis('h', 'Left', 'Width', 'contentW', hasScrollH, 'Height');\n repaintAxis('v', 'Top', 'Height', 'contentH', hasScrollV, 'Width');\n }\n function addScroll() {\n function addScrollAxis(axisName, posName, sizeName, deltaPosName, ax) {\n var scrollStart;\n var axisId = self._id + '-scroll' + axisName, prefix = self.classPrefix;\n global$9(self.getEl()).append('
' + '
' + '
');\n self.draghelper = new DragHelper(axisId + 't', {\n start: function () {\n scrollStart = self.getEl('body')['scroll' + posName];\n global$9('#' + axisId).addClass(prefix + 'active');\n },\n drag: function (e) {\n var ratio, hasScrollH, hasScrollV, containerSize;\n var layoutRect = self.layoutRect();\n hasScrollH = layoutRect.contentW > layoutRect.innerW;\n hasScrollV = layoutRect.contentH > layoutRect.innerH;\n containerSize = self.getEl('body')['client' + sizeName] - margin * 2;\n containerSize -= hasScrollH && hasScrollV ? self.getEl('scroll' + axisName)['client' + ax] : 0;\n ratio = containerSize / self.getEl('body')['scroll' + sizeName];\n self.getEl('body')['scroll' + posName] = scrollStart + e['delta' + deltaPosName] / ratio;\n },\n stop: function () {\n global$9('#' + axisId).removeClass(prefix + 'active');\n }\n });\n }\n self.classes.add('scroll');\n addScrollAxis('v', 'Top', 'Height', 'Y', 'Width');\n addScrollAxis('h', 'Left', 'Width', 'X', 'Height');\n }\n if (self.settings.autoScroll) {\n if (!self._hasScroll) {\n self._hasScroll = true;\n addScroll();\n self.on('wheel', function (e) {\n var bodyEl = self.getEl('body');\n bodyEl.scrollLeft += (e.deltaX || 0) * 10;\n bodyEl.scrollTop += e.deltaY * 10;\n repaintScroll();\n });\n global$9(self.getEl('body')).on('scroll', repaintScroll);\n }\n repaintScroll();\n }\n }\n };\n\n var Panel = Container.extend({\n Defaults: {\n layout: 'fit',\n containerCls: 'panel'\n },\n Mixins: [Scrollable],\n renderHtml: function () {\n var self = this;\n var layout = self._layout;\n var innerHtml = self.settings.html;\n self.preRender();\n layout.preRender(self);\n if (typeof innerHtml === 'undefined') {\n innerHtml = '
' + layout.renderHtml(self) + '
';\n } else {\n if (typeof innerHtml === 'function') {\n innerHtml = innerHtml.call(self);\n }\n self._hasBody = false;\n }\n return '
' + (self._preBodyHtml || '') + innerHtml + '
';\n }\n });\n\n var Resizable = {\n resizeToContent: function () {\n this._layoutRect.autoResize = true;\n this._lastRect = null;\n this.reflow();\n },\n resizeTo: function (w, h) {\n if (w <= 1 || h <= 1) {\n var rect = funcs.getWindowSize();\n w = w <= 1 ? w * rect.w : w;\n h = h <= 1 ? h * rect.h : h;\n }\n this._layoutRect.autoResize = false;\n return this.layoutRect({\n minW: w,\n minH: h,\n w: w,\n h: h\n }).reflow();\n },\n resizeBy: function (dw, dh) {\n var self = this, rect = self.layoutRect();\n return self.resizeTo(rect.w + dw, rect.h + dh);\n }\n };\n\n var documentClickHandler, documentScrollHandler, windowResizeHandler;\n var visiblePanels = [];\n var zOrder = [];\n var hasModal;\n function isChildOf(ctrl, parent) {\n while (ctrl) {\n if (ctrl === parent) {\n return true;\n }\n ctrl = ctrl.parent();\n }\n }\n function skipOrHidePanels(e) {\n var i = visiblePanels.length;\n while (i--) {\n var panel = visiblePanels[i], clickCtrl = panel.getParentCtrl(e.target);\n if (panel.settings.autohide) {\n if (clickCtrl) {\n if (isChildOf(clickCtrl, panel) || panel.parent() === clickCtrl) {\n continue;\n }\n }\n e = panel.fire('autohide', { target: e.target });\n if (!e.isDefaultPrevented()) {\n panel.hide();\n }\n }\n }\n }\n function bindDocumentClickHandler() {\n if (!documentClickHandler) {\n documentClickHandler = function (e) {\n if (e.button === 2) {\n return;\n }\n skipOrHidePanels(e);\n };\n global$9(domGlobals.document).on('click touchstart', documentClickHandler);\n }\n }\n function bindDocumentScrollHandler() {\n if (!documentScrollHandler) {\n documentScrollHandler = function () {\n var i;\n i = visiblePanels.length;\n while (i--) {\n repositionPanel(visiblePanels[i]);\n }\n };\n global$9(domGlobals.window).on('scroll', documentScrollHandler);\n }\n }\n function bindWindowResizeHandler() {\n if (!windowResizeHandler) {\n var docElm_1 = domGlobals.document.documentElement;\n var clientWidth_1 = docElm_1.clientWidth, clientHeight_1 = docElm_1.clientHeight;\n windowResizeHandler = function () {\n if (!domGlobals.document.all || clientWidth_1 !== docElm_1.clientWidth || clientHeight_1 !== docElm_1.clientHeight) {\n clientWidth_1 = docElm_1.clientWidth;\n clientHeight_1 = docElm_1.clientHeight;\n FloatPanel.hideAll();\n }\n };\n global$9(domGlobals.window).on('resize', windowResizeHandler);\n }\n }\n function repositionPanel(panel) {\n var scrollY = funcs.getViewPort().y;\n function toggleFixedChildPanels(fixed, deltaY) {\n var parent;\n for (var i = 0; i < visiblePanels.length; i++) {\n if (visiblePanels[i] !== panel) {\n parent = visiblePanels[i].parent();\n while (parent && (parent = parent.parent())) {\n if (parent === panel) {\n visiblePanels[i].fixed(fixed).moveBy(0, deltaY).repaint();\n }\n }\n }\n }\n }\n if (panel.settings.autofix) {\n if (!panel.state.get('fixed')) {\n panel._autoFixY = panel.layoutRect().y;\n if (panel._autoFixY < scrollY) {\n panel.fixed(true).layoutRect({ y: 0 }).repaint();\n toggleFixedChildPanels(true, scrollY - panel._autoFixY);\n }\n } else {\n if (panel._autoFixY > scrollY) {\n panel.fixed(false).layoutRect({ y: panel._autoFixY }).repaint();\n toggleFixedChildPanels(false, panel._autoFixY - scrollY);\n }\n }\n }\n }\n function addRemove(add, ctrl) {\n var i, zIndex = FloatPanel.zIndex || 65535, topModal;\n if (add) {\n zOrder.push(ctrl);\n } else {\n i = zOrder.length;\n while (i--) {\n if (zOrder[i] === ctrl) {\n zOrder.splice(i, 1);\n }\n }\n }\n if (zOrder.length) {\n for (i = 0; i < zOrder.length; i++) {\n if (zOrder[i].modal) {\n zIndex++;\n topModal = zOrder[i];\n }\n zOrder[i].getEl().style.zIndex = zIndex;\n zOrder[i].zIndex = zIndex;\n zIndex++;\n }\n }\n var modalBlockEl = global$9('#' + ctrl.classPrefix + 'modal-block', ctrl.getContainerElm())[0];\n if (topModal) {\n global$9(modalBlockEl).css('z-index', topModal.zIndex - 1);\n } else if (modalBlockEl) {\n modalBlockEl.parentNode.removeChild(modalBlockEl);\n hasModal = false;\n }\n FloatPanel.currentZIndex = zIndex;\n }\n var FloatPanel = Panel.extend({\n Mixins: [\n Movable,\n Resizable\n ],\n init: function (settings) {\n var self = this;\n self._super(settings);\n self._eventsRoot = self;\n self.classes.add('floatpanel');\n if (settings.autohide) {\n bindDocumentClickHandler();\n bindWindowResizeHandler();\n visiblePanels.push(self);\n }\n if (settings.autofix) {\n bindDocumentScrollHandler();\n self.on('move', function () {\n repositionPanel(this);\n });\n }\n self.on('postrender show', function (e) {\n if (e.control === self) {\n var $modalBlockEl_1;\n var prefix_1 = self.classPrefix;\n if (self.modal && !hasModal) {\n $modalBlockEl_1 = global$9('#' + prefix_1 + 'modal-block', self.getContainerElm());\n if (!$modalBlockEl_1[0]) {\n $modalBlockEl_1 = global$9('
').appendTo(self.getContainerElm());\n }\n global$7.setTimeout(function () {\n $modalBlockEl_1.addClass(prefix_1 + 'in');\n global$9(self.getEl()).addClass(prefix_1 + 'in');\n });\n hasModal = true;\n }\n addRemove(true, self);\n }\n });\n self.on('show', function () {\n self.parents().each(function (ctrl) {\n if (ctrl.state.get('fixed')) {\n self.fixed(true);\n return false;\n }\n });\n });\n if (settings.popover) {\n self._preBodyHtml = '
';\n self.classes.add('popover').add('bottom').add(self.isRtl() ? 'end' : 'start');\n }\n self.aria('label', settings.ariaLabel);\n self.aria('labelledby', self._id);\n self.aria('describedby', self.describedBy || self._id + '-none');\n },\n fixed: function (state) {\n var self = this;\n if (self.state.get('fixed') !== state) {\n if (self.state.get('rendered')) {\n var viewport = funcs.getViewPort();\n if (state) {\n self.layoutRect().y -= viewport.y;\n } else {\n self.layoutRect().y += viewport.y;\n }\n }\n self.classes.toggle('fixed', state);\n self.state.set('fixed', state);\n }\n return self;\n },\n show: function () {\n var self = this;\n var i;\n var state = self._super();\n i = visiblePanels.length;\n while (i--) {\n if (visiblePanels[i] === self) {\n break;\n }\n }\n if (i === -1) {\n visiblePanels.push(self);\n }\n return state;\n },\n hide: function () {\n removeVisiblePanel(this);\n addRemove(false, this);\n return this._super();\n },\n hideAll: function () {\n FloatPanel.hideAll();\n },\n close: function () {\n var self = this;\n if (!self.fire('close').isDefaultPrevented()) {\n self.remove();\n addRemove(false, self);\n }\n return self;\n },\n remove: function () {\n removeVisiblePanel(this);\n this._super();\n },\n postRender: function () {\n var self = this;\n if (self.settings.bodyRole) {\n this.getEl('body').setAttribute('role', self.settings.bodyRole);\n }\n return self._super();\n }\n });\n FloatPanel.hideAll = function () {\n var i = visiblePanels.length;\n while (i--) {\n var panel = visiblePanels[i];\n if (panel && panel.settings.autohide) {\n panel.hide();\n visiblePanels.splice(i, 1);\n }\n }\n };\n function removeVisiblePanel(panel) {\n var i;\n i = visiblePanels.length;\n while (i--) {\n if (visiblePanels[i] === panel) {\n visiblePanels.splice(i, 1);\n }\n }\n i = zOrder.length;\n while (i--) {\n if (zOrder[i] === panel) {\n zOrder.splice(i, 1);\n }\n }\n }\n\n var isFixed$1 = function (inlineToolbarContainer, editor) {\n return !!(inlineToolbarContainer && !editor.settings.ui_container);\n };\n var render$1 = function (editor, theme, args) {\n var panel, inlineToolbarContainer;\n var DOM = global$3.DOM;\n var fixedToolbarContainer = getFixedToolbarContainer(editor);\n if (fixedToolbarContainer) {\n inlineToolbarContainer = DOM.select(fixedToolbarContainer)[0];\n }\n var reposition = function () {\n if (panel && panel.moveRel && panel.visible() && !panel._fixed) {\n var scrollContainer = editor.selection.getScrollContainer(), body = editor.getBody();\n var deltaX = 0, deltaY = 0;\n if (scrollContainer) {\n var bodyPos = DOM.getPos(body), scrollContainerPos = DOM.getPos(scrollContainer);\n deltaX = Math.max(0, scrollContainerPos.x - bodyPos.x);\n deltaY = Math.max(0, scrollContainerPos.y - bodyPos.y);\n }\n panel.fixed(false).moveRel(body, editor.rtl ? [\n 'tr-br',\n 'br-tr'\n ] : [\n 'tl-bl',\n 'bl-tl',\n 'tr-br'\n ]).moveBy(deltaX, deltaY);\n }\n };\n var show = function () {\n if (panel) {\n panel.show();\n reposition();\n DOM.addClass(editor.getBody(), 'mce-edit-focus');\n }\n };\n var hide = function () {\n if (panel) {\n panel.hide();\n FloatPanel.hideAll();\n DOM.removeClass(editor.getBody(), 'mce-edit-focus');\n }\n };\n var render = function () {\n if (panel) {\n if (!panel.visible()) {\n show();\n }\n return;\n }\n panel = theme.panel = global$4.create({\n type: inlineToolbarContainer ? 'panel' : 'floatpanel',\n role: 'application',\n classes: 'tinymce tinymce-inline',\n layout: 'flex',\n direction: 'column',\n align: 'stretch',\n autohide: false,\n autofix: true,\n fixed: isFixed$1(inlineToolbarContainer, editor),\n border: 1,\n items: [\n hasMenubar(editor) === false ? null : {\n type: 'menubar',\n border: '0 0 1 0',\n items: Menubar.createMenuButtons(editor)\n },\n Toolbar.createToolbars(editor, getToolbarSize(editor))\n ]\n });\n UiContainer.setUiContainer(editor, panel);\n Events.fireBeforeRenderUI(editor);\n if (inlineToolbarContainer) {\n panel.renderTo(inlineToolbarContainer).reflow();\n } else {\n panel.renderTo().reflow();\n }\n A11y.addKeys(editor, panel);\n show();\n ContextToolbars.addContextualToolbars(editor);\n editor.on('nodeChange', reposition);\n editor.on('ResizeWindow', reposition);\n editor.on('activate', show);\n editor.on('deactivate', hide);\n editor.nodeChanged();\n };\n editor.settings.content_editable = true;\n editor.on('focus', function () {\n if (isSkinDisabled(editor) === false && args.skinUiCss) {\n DOM.styleSheetLoader.load(args.skinUiCss, render, render);\n } else {\n render();\n }\n });\n editor.on('blur hide', hide);\n editor.on('remove', function () {\n if (panel) {\n panel.remove();\n panel = null;\n }\n });\n if (isSkinDisabled(editor) === false && args.skinUiCss) {\n DOM.styleSheetLoader.load(args.skinUiCss, SkinLoaded.fireSkinLoaded(editor));\n } else {\n SkinLoaded.fireSkinLoaded(editor)();\n }\n return {};\n };\n var Inline = { render: render$1 };\n\n function Throbber (elm, inline) {\n var self = this;\n var state;\n var classPrefix = Control$1.classPrefix;\n var timer;\n self.show = function (time, callback) {\n function render() {\n if (state) {\n global$9(elm).append('
');\n if (callback) {\n callback();\n }\n }\n }\n self.hide();\n state = true;\n if (time) {\n timer = global$7.setTimeout(render, time);\n } else {\n render();\n }\n return self;\n };\n self.hide = function () {\n var child = elm.lastChild;\n global$7.clearTimeout(timer);\n if (child && child.className.indexOf('throbber') !== -1) {\n child.parentNode.removeChild(child);\n }\n state = false;\n return self;\n };\n }\n\n var setup = function (editor, theme) {\n var throbber;\n editor.on('ProgressState', function (e) {\n throbber = throbber || new Throbber(theme.panel.getEl('body'));\n if (e.state) {\n throbber.show(e.time);\n } else {\n throbber.hide();\n }\n });\n };\n var ProgressState = { setup: setup };\n\n var renderUI = function (editor, theme, args) {\n var skinUrl = getSkinUrl(editor);\n if (skinUrl) {\n args.skinUiCss = skinUrl + '/skin.min.css';\n editor.contentCSS.push(skinUrl + '/content' + (editor.inline ? '.inline' : '') + '.min.css');\n }\n ProgressState.setup(editor, theme);\n return isInline(editor) ? Inline.render(editor, theme, args) : Iframe.render(editor, theme, args);\n };\n var Render = { renderUI: renderUI };\n\n var Tooltip = Control$1.extend({\n Mixins: [Movable],\n Defaults: { classes: 'widget tooltip tooltip-n' },\n renderHtml: function () {\n var self = this, prefix = self.classPrefix;\n return '
' + '
' + '
' + self.encode(self.state.get('text')) + '
' + '
';\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:text', function (e) {\n self.getEl().lastChild.innerHTML = self.encode(e.value);\n });\n return self._super();\n },\n repaint: function () {\n var self = this;\n var style, rect;\n style = self.getEl().style;\n rect = self._layoutRect;\n style.left = rect.x + 'px';\n style.top = rect.y + 'px';\n style.zIndex = 65535 + 65535;\n }\n });\n\n var Widget = Control$1.extend({\n init: function (settings) {\n var self = this;\n self._super(settings);\n settings = self.settings;\n self.canFocus = true;\n if (settings.tooltip && Widget.tooltips !== false) {\n self.on('mouseenter', function (e) {\n var tooltip = self.tooltip().moveTo(-65535);\n if (e.control === self) {\n var rel = tooltip.text(settings.tooltip).show().testMoveRel(self.getEl(), [\n 'bc-tc',\n 'bc-tl',\n 'bc-tr'\n ]);\n tooltip.classes.toggle('tooltip-n', rel === 'bc-tc');\n tooltip.classes.toggle('tooltip-nw', rel === 'bc-tl');\n tooltip.classes.toggle('tooltip-ne', rel === 'bc-tr');\n tooltip.moveRel(self.getEl(), rel);\n } else {\n tooltip.hide();\n }\n });\n self.on('mouseleave mousedown click', function () {\n self.tooltip().remove();\n self._tooltip = null;\n });\n }\n self.aria('label', settings.ariaLabel || settings.tooltip);\n },\n tooltip: function () {\n if (!this._tooltip) {\n this._tooltip = new Tooltip({ type: 'tooltip' });\n UiContainer.inheritUiContainer(this, this._tooltip);\n this._tooltip.renderTo();\n }\n return this._tooltip;\n },\n postRender: function () {\n var self = this, settings = self.settings;\n self._super();\n if (!self.parent() && (settings.width || settings.height)) {\n self.initLayoutRect();\n self.repaint();\n }\n if (settings.autofocus) {\n self.focus();\n }\n },\n bindStates: function () {\n var self = this;\n function disable(state) {\n self.aria('disabled', state);\n self.classes.toggle('disabled', state);\n }\n function active(state) {\n self.aria('pressed', state);\n self.classes.toggle('active', state);\n }\n self.state.on('change:disabled', function (e) {\n disable(e.value);\n });\n self.state.on('change:active', function (e) {\n active(e.value);\n });\n if (self.state.get('disabled')) {\n disable(true);\n }\n if (self.state.get('active')) {\n active(true);\n }\n return self._super();\n },\n remove: function () {\n this._super();\n if (this._tooltip) {\n this._tooltip.remove();\n this._tooltip = null;\n }\n }\n });\n\n var Progress = Widget.extend({\n Defaults: { value: 0 },\n init: function (settings) {\n var self = this;\n self._super(settings);\n self.classes.add('progress');\n if (!self.settings.filter) {\n self.settings.filter = function (value) {\n return Math.round(value);\n };\n }\n },\n renderHtml: function () {\n var self = this, id = self._id, prefix = this.classPrefix;\n return '
' + '
' + '
' + '
' + '
0%
' + '
';\n },\n postRender: function () {\n var self = this;\n self._super();\n self.value(self.settings.value);\n return self;\n },\n bindStates: function () {\n var self = this;\n function setValue(value) {\n value = self.settings.filter(value);\n self.getEl().lastChild.innerHTML = value + '%';\n self.getEl().firstChild.firstChild.style.width = value + '%';\n }\n self.state.on('change:value', function (e) {\n setValue(e.value);\n });\n setValue(self.state.get('value'));\n return self._super();\n }\n });\n\n var updateLiveRegion = function (ctx, text) {\n ctx.getEl().lastChild.textContent = text + (ctx.progressBar ? ' ' + ctx.progressBar.value() + '%' : '');\n };\n var Notification = Control$1.extend({\n Mixins: [Movable],\n Defaults: { classes: 'widget notification' },\n init: function (settings) {\n var self = this;\n self._super(settings);\n self.maxWidth = settings.maxWidth;\n if (settings.text) {\n self.text(settings.text);\n }\n if (settings.icon) {\n self.icon = settings.icon;\n }\n if (settings.color) {\n self.color = settings.color;\n }\n if (settings.type) {\n self.classes.add('notification-' + settings.type);\n }\n if (settings.timeout && (settings.timeout < 0 || settings.timeout > 0) && !settings.closeButton) {\n self.closeButton = false;\n } else {\n self.classes.add('has-close');\n self.closeButton = true;\n }\n if (settings.progressBar) {\n self.progressBar = new Progress();\n }\n self.on('click', function (e) {\n if (e.target.className.indexOf(self.classPrefix + 'close') !== -1) {\n self.close();\n }\n });\n },\n renderHtml: function () {\n var self = this;\n var prefix = self.classPrefix;\n var icon = '', closeButton = '', progressBar = '', notificationStyle = '';\n if (self.icon) {\n icon = '';\n }\n notificationStyle = ' style=\"max-width: ' + self.maxWidth + 'px;' + (self.color ? 'background-color: ' + self.color + ';\"' : '\"');\n if (self.closeButton) {\n closeButton = '';\n }\n if (self.progressBar) {\n progressBar = self.progressBar.renderHtml();\n }\n return '
' + icon + '
' + self.state.get('text') + '
' + progressBar + closeButton + '
' + '
';\n },\n postRender: function () {\n var self = this;\n global$7.setTimeout(function () {\n self.$el.addClass(self.classPrefix + 'in');\n updateLiveRegion(self, self.state.get('text'));\n }, 100);\n return self._super();\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:text', function (e) {\n self.getEl().firstChild.innerHTML = e.value;\n updateLiveRegion(self, e.value);\n });\n if (self.progressBar) {\n self.progressBar.bindStates();\n self.progressBar.state.on('change:value', function (e) {\n updateLiveRegion(self, self.state.get('text'));\n });\n }\n return self._super();\n },\n close: function () {\n var self = this;\n if (!self.fire('close').isDefaultPrevented()) {\n self.remove();\n }\n return self;\n },\n repaint: function () {\n var self = this;\n var style, rect;\n style = self.getEl().style;\n rect = self._layoutRect;\n style.left = rect.x + 'px';\n style.top = rect.y + 'px';\n style.zIndex = 65535 - 1;\n }\n });\n\n function NotificationManagerImpl (editor) {\n var getEditorContainer = function (editor) {\n return editor.inline ? editor.getElement() : editor.getContentAreaContainer();\n };\n var getContainerWidth = function () {\n var container = getEditorContainer(editor);\n return funcs.getSize(container).width;\n };\n var prePositionNotifications = function (notifications) {\n each(notifications, function (notification) {\n notification.moveTo(0, 0);\n });\n };\n var positionNotifications = function (notifications) {\n if (notifications.length > 0) {\n var firstItem = notifications.slice(0, 1)[0];\n var container = getEditorContainer(editor);\n firstItem.moveRel(container, 'tc-tc');\n each(notifications, function (notification, index) {\n if (index > 0) {\n notification.moveRel(notifications[index - 1].getEl(), 'bc-tc');\n }\n });\n }\n };\n var reposition = function (notifications) {\n prePositionNotifications(notifications);\n positionNotifications(notifications);\n };\n var open = function (args, closeCallback) {\n var extendedArgs = global$2.extend(args, { maxWidth: getContainerWidth() });\n var notif = new Notification(extendedArgs);\n notif.args = extendedArgs;\n if (extendedArgs.timeout > 0) {\n notif.timer = setTimeout(function () {\n notif.close();\n closeCallback();\n }, extendedArgs.timeout);\n }\n notif.on('close', function () {\n closeCallback();\n });\n notif.renderTo();\n return notif;\n };\n var close = function (notification) {\n notification.close();\n };\n var getArgs = function (notification) {\n return notification.args;\n };\n return {\n open: open,\n close: close,\n reposition: reposition,\n getArgs: getArgs\n };\n }\n\n var windows = [];\n var oldMetaValue = '';\n function toggleFullScreenState(state) {\n var noScaleMetaValue = 'width=device-width,initial-scale=1.0,user-scalable=0,minimum-scale=1.0,maximum-scale=1.0';\n var viewport = global$9('meta[name=viewport]')[0], contentValue;\n if (global$8.overrideViewPort === false) {\n return;\n }\n if (!viewport) {\n viewport = domGlobals.document.createElement('meta');\n viewport.setAttribute('name', 'viewport');\n domGlobals.document.getElementsByTagName('head')[0].appendChild(viewport);\n }\n contentValue = viewport.getAttribute('content');\n if (contentValue && typeof oldMetaValue !== 'undefined') {\n oldMetaValue = contentValue;\n }\n viewport.setAttribute('content', state ? noScaleMetaValue : oldMetaValue);\n }\n function toggleBodyFullScreenClasses(classPrefix, state) {\n if (checkFullscreenWindows() && state === false) {\n global$9([\n domGlobals.document.documentElement,\n domGlobals.document.body\n ]).removeClass(classPrefix + 'fullscreen');\n }\n }\n function checkFullscreenWindows() {\n for (var i = 0; i < windows.length; i++) {\n if (windows[i]._fullscreen) {\n return true;\n }\n }\n return false;\n }\n function handleWindowResize() {\n if (!global$8.desktop) {\n var lastSize_1 = {\n w: domGlobals.window.innerWidth,\n h: domGlobals.window.innerHeight\n };\n global$7.setInterval(function () {\n var w = domGlobals.window.innerWidth, h = domGlobals.window.innerHeight;\n if (lastSize_1.w !== w || lastSize_1.h !== h) {\n lastSize_1 = {\n w: w,\n h: h\n };\n global$9(domGlobals.window).trigger('resize');\n }\n }, 100);\n }\n function reposition() {\n var i;\n var rect = funcs.getWindowSize();\n var layoutRect;\n for (i = 0; i < windows.length; i++) {\n layoutRect = windows[i].layoutRect();\n windows[i].moveTo(windows[i].settings.x || Math.max(0, rect.w / 2 - layoutRect.w / 2), windows[i].settings.y || Math.max(0, rect.h / 2 - layoutRect.h / 2));\n }\n }\n global$9(domGlobals.window).on('resize', reposition);\n }\n var Window = FloatPanel.extend({\n modal: true,\n Defaults: {\n border: 1,\n layout: 'flex',\n containerCls: 'panel',\n role: 'dialog',\n callbacks: {\n submit: function () {\n this.fire('submit', { data: this.toJSON() });\n },\n close: function () {\n this.close();\n }\n }\n },\n init: function (settings) {\n var self = this;\n self._super(settings);\n if (self.isRtl()) {\n self.classes.add('rtl');\n }\n self.classes.add('window');\n self.bodyClasses.add('window-body');\n self.state.set('fixed', true);\n if (settings.buttons) {\n self.statusbar = new Panel({\n layout: 'flex',\n border: '1 0 0 0',\n spacing: 3,\n padding: 10,\n align: 'center',\n pack: self.isRtl() ? 'start' : 'end',\n defaults: { type: 'button' },\n items: settings.buttons\n });\n self.statusbar.classes.add('foot');\n self.statusbar.parent(self);\n }\n self.on('click', function (e) {\n var closeClass = self.classPrefix + 'close';\n if (funcs.hasClass(e.target, closeClass) || funcs.hasClass(e.target.parentNode, closeClass)) {\n self.close();\n }\n });\n self.on('cancel', function () {\n self.close();\n });\n self.on('move', function (e) {\n if (e.control === self) {\n FloatPanel.hideAll();\n }\n });\n self.aria('describedby', self.describedBy || self._id + '-none');\n self.aria('label', settings.title);\n self._fullscreen = false;\n },\n recalc: function () {\n var self = this;\n var statusbar = self.statusbar;\n var layoutRect, width, x, needsRecalc;\n if (self._fullscreen) {\n self.layoutRect(funcs.getWindowSize());\n self.layoutRect().contentH = self.layoutRect().innerH;\n }\n self._super();\n layoutRect = self.layoutRect();\n if (self.settings.title && !self._fullscreen) {\n width = layoutRect.headerW;\n if (width > layoutRect.w) {\n x = layoutRect.x - Math.max(0, width / 2);\n self.layoutRect({\n w: width,\n x: x\n });\n needsRecalc = true;\n }\n }\n if (statusbar) {\n statusbar.layoutRect({ w: self.layoutRect().innerW }).recalc();\n width = statusbar.layoutRect().minW + layoutRect.deltaW;\n if (width > layoutRect.w) {\n x = layoutRect.x - Math.max(0, width - layoutRect.w);\n self.layoutRect({\n w: width,\n x: x\n });\n needsRecalc = true;\n }\n }\n if (needsRecalc) {\n self.recalc();\n }\n },\n initLayoutRect: function () {\n var self = this;\n var layoutRect = self._super();\n var deltaH = 0, headEl;\n if (self.settings.title && !self._fullscreen) {\n headEl = self.getEl('head');\n var size = funcs.getSize(headEl);\n layoutRect.headerW = size.width;\n layoutRect.headerH = size.height;\n deltaH += layoutRect.headerH;\n }\n if (self.statusbar) {\n deltaH += self.statusbar.layoutRect().h;\n }\n layoutRect.deltaH += deltaH;\n layoutRect.minH += deltaH;\n layoutRect.h += deltaH;\n var rect = funcs.getWindowSize();\n layoutRect.x = self.settings.x || Math.max(0, rect.w / 2 - layoutRect.w / 2);\n layoutRect.y = self.settings.y || Math.max(0, rect.h / 2 - layoutRect.h / 2);\n return layoutRect;\n },\n renderHtml: function () {\n var self = this, layout = self._layout, id = self._id, prefix = self.classPrefix;\n var settings = self.settings;\n var headerHtml = '', footerHtml = '', html = settings.html;\n self.preRender();\n layout.preRender(self);\n if (settings.title) {\n headerHtml = '
' + '
' + self.encode(settings.title) + '
' + '
' + '' + '
';\n }\n if (settings.url) {\n html = '';\n }\n if (typeof html === 'undefined') {\n html = layout.renderHtml(self);\n }\n if (self.statusbar) {\n footerHtml = self.statusbar.renderHtml();\n }\n return '
' + '
' + headerHtml + '
' + html + '
' + footerHtml + '
' + '
';\n },\n fullscreen: function (state) {\n var self = this;\n var documentElement = domGlobals.document.documentElement;\n var slowRendering;\n var prefix = self.classPrefix;\n var layoutRect;\n if (state !== self._fullscreen) {\n global$9(domGlobals.window).on('resize', function () {\n var time;\n if (self._fullscreen) {\n if (!slowRendering) {\n time = new Date().getTime();\n var rect = funcs.getWindowSize();\n self.moveTo(0, 0).resizeTo(rect.w, rect.h);\n if (new Date().getTime() - time > 50) {\n slowRendering = true;\n }\n } else {\n if (!self._timer) {\n self._timer = global$7.setTimeout(function () {\n var rect = funcs.getWindowSize();\n self.moveTo(0, 0).resizeTo(rect.w, rect.h);\n self._timer = 0;\n }, 50);\n }\n }\n }\n });\n layoutRect = self.layoutRect();\n self._fullscreen = state;\n if (!state) {\n self.borderBox = BoxUtils.parseBox(self.settings.border);\n self.getEl('head').style.display = '';\n layoutRect.deltaH += layoutRect.headerH;\n global$9([\n documentElement,\n domGlobals.document.body\n ]).removeClass(prefix + 'fullscreen');\n self.classes.remove('fullscreen');\n self.moveTo(self._initial.x, self._initial.y).resizeTo(self._initial.w, self._initial.h);\n } else {\n self._initial = {\n x: layoutRect.x,\n y: layoutRect.y,\n w: layoutRect.w,\n h: layoutRect.h\n };\n self.borderBox = BoxUtils.parseBox('0');\n self.getEl('head').style.display = 'none';\n layoutRect.deltaH -= layoutRect.headerH + 2;\n global$9([\n documentElement,\n domGlobals.document.body\n ]).addClass(prefix + 'fullscreen');\n self.classes.add('fullscreen');\n var rect = funcs.getWindowSize();\n self.moveTo(0, 0).resizeTo(rect.w, rect.h);\n }\n }\n return self.reflow();\n },\n postRender: function () {\n var self = this;\n var startPos;\n setTimeout(function () {\n self.classes.add('in');\n self.fire('open');\n }, 0);\n self._super();\n if (self.statusbar) {\n self.statusbar.postRender();\n }\n self.focus();\n this.dragHelper = new DragHelper(self._id + '-dragh', {\n start: function () {\n startPos = {\n x: self.layoutRect().x,\n y: self.layoutRect().y\n };\n },\n drag: function (e) {\n self.moveTo(startPos.x + e.deltaX, startPos.y + e.deltaY);\n }\n });\n self.on('submit', function (e) {\n if (!e.isDefaultPrevented()) {\n self.close();\n }\n });\n windows.push(self);\n toggleFullScreenState(true);\n },\n submit: function () {\n return this.fire('submit', { data: this.toJSON() });\n },\n remove: function () {\n var self = this;\n var i;\n self.dragHelper.destroy();\n self._super();\n if (self.statusbar) {\n this.statusbar.remove();\n }\n toggleBodyFullScreenClasses(self.classPrefix, false);\n i = windows.length;\n while (i--) {\n if (windows[i] === self) {\n windows.splice(i, 1);\n }\n }\n toggleFullScreenState(windows.length > 0);\n },\n getContentWindow: function () {\n var ifr = this.getEl().getElementsByTagName('iframe')[0];\n return ifr ? ifr.contentWindow : null;\n }\n });\n handleWindowResize();\n\n var MessageBox = Window.extend({\n init: function (settings) {\n settings = {\n border: 1,\n padding: 20,\n layout: 'flex',\n pack: 'center',\n align: 'center',\n containerCls: 'panel',\n autoScroll: true,\n buttons: {\n type: 'button',\n text: 'Ok',\n action: 'ok'\n },\n items: {\n type: 'label',\n multiline: true,\n maxWidth: 500,\n maxHeight: 200\n }\n };\n this._super(settings);\n },\n Statics: {\n OK: 1,\n OK_CANCEL: 2,\n YES_NO: 3,\n YES_NO_CANCEL: 4,\n msgBox: function (settings) {\n var buttons;\n var callback = settings.callback || function () {\n };\n function createButton(text, status, primary) {\n return {\n type: 'button',\n text: text,\n subtype: primary ? 'primary' : '',\n onClick: function (e) {\n e.control.parents()[1].close();\n callback(status);\n }\n };\n }\n switch (settings.buttons) {\n case MessageBox.OK_CANCEL:\n buttons = [\n createButton('Ok', true, true),\n createButton('Cancel', false)\n ];\n break;\n case MessageBox.YES_NO:\n case MessageBox.YES_NO_CANCEL:\n buttons = [\n createButton('Yes', 1, true),\n createButton('No', 0)\n ];\n if (settings.buttons === MessageBox.YES_NO_CANCEL) {\n buttons.push(createButton('Cancel', -1));\n }\n break;\n default:\n buttons = [createButton('Ok', true, true)];\n break;\n }\n return new Window({\n padding: 20,\n x: settings.x,\n y: settings.y,\n minWidth: 300,\n minHeight: 100,\n layout: 'flex',\n pack: 'center',\n align: 'center',\n buttons: buttons,\n title: settings.title,\n role: 'alertdialog',\n items: {\n type: 'label',\n multiline: true,\n maxWidth: 500,\n maxHeight: 200,\n text: settings.text\n },\n onPostRender: function () {\n this.aria('describedby', this.items()[0]._id);\n },\n onClose: settings.onClose,\n onCancel: function () {\n callback(false);\n }\n }).renderTo(domGlobals.document.body).reflow();\n },\n alert: function (settings, callback) {\n if (typeof settings === 'string') {\n settings = { text: settings };\n }\n settings.callback = callback;\n return MessageBox.msgBox(settings);\n },\n confirm: function (settings, callback) {\n if (typeof settings === 'string') {\n settings = { text: settings };\n }\n settings.callback = callback;\n settings.buttons = MessageBox.OK_CANCEL;\n return MessageBox.msgBox(settings);\n }\n }\n });\n\n function WindowManagerImpl (editor) {\n var open = function (args, params, closeCallback) {\n var win;\n args.title = args.title || ' ';\n args.url = args.url || args.file;\n if (args.url) {\n args.width = parseInt(args.width || 320, 10);\n args.height = parseInt(args.height || 240, 10);\n }\n if (args.body) {\n args.items = {\n defaults: args.defaults,\n type: args.bodyType || 'form',\n items: args.body,\n data: args.data,\n callbacks: args.commands\n };\n }\n if (!args.url && !args.buttons) {\n args.buttons = [\n {\n text: 'Ok',\n subtype: 'primary',\n onclick: function () {\n win.find('form')[0].submit();\n }\n },\n {\n text: 'Cancel',\n onclick: function () {\n win.close();\n }\n }\n ];\n }\n win = new Window(args);\n win.on('close', function () {\n closeCallback(win);\n });\n if (args.data) {\n win.on('postRender', function () {\n this.find('*').each(function (ctrl) {\n var name = ctrl.name();\n if (name in args.data) {\n ctrl.value(args.data[name]);\n }\n });\n });\n }\n win.features = args || {};\n win.params = params || {};\n win = win.renderTo(domGlobals.document.body).reflow();\n return win;\n };\n var alert = function (message, choiceCallback, closeCallback) {\n var win;\n win = MessageBox.alert(message, function () {\n choiceCallback();\n });\n win.on('close', function () {\n closeCallback(win);\n });\n return win;\n };\n var confirm = function (message, choiceCallback, closeCallback) {\n var win;\n win = MessageBox.confirm(message, function (state) {\n choiceCallback(state);\n });\n win.on('close', function () {\n closeCallback(win);\n });\n return win;\n };\n var close = function (window) {\n window.close();\n };\n var getParams = function (window) {\n return window.params;\n };\n var setParams = function (window, params) {\n window.params = params;\n };\n return {\n open: open,\n alert: alert,\n confirm: confirm,\n close: close,\n getParams: getParams,\n setParams: setParams\n };\n }\n\n var get = function (editor) {\n var renderUI = function (args) {\n return Render.renderUI(editor, this, args);\n };\n var resizeTo = function (w, h) {\n return Resize.resizeTo(editor, w, h);\n };\n var resizeBy = function (dw, dh) {\n return Resize.resizeBy(editor, dw, dh);\n };\n var getNotificationManagerImpl = function () {\n return NotificationManagerImpl(editor);\n };\n var getWindowManagerImpl = function () {\n return WindowManagerImpl();\n };\n return {\n renderUI: renderUI,\n resizeTo: resizeTo,\n resizeBy: resizeBy,\n getNotificationManagerImpl: getNotificationManagerImpl,\n getWindowManagerImpl: getWindowManagerImpl\n };\n };\n var ThemeApi = { get: get };\n\n var Layout = global$a.extend({\n Defaults: {\n firstControlClass: 'first',\n lastControlClass: 'last'\n },\n init: function (settings) {\n this.settings = global$2.extend({}, this.Defaults, settings);\n },\n preRender: function (container) {\n container.bodyClasses.add(this.settings.containerClass);\n },\n applyClasses: function (items) {\n var self = this;\n var settings = self.settings;\n var firstClass, lastClass, firstItem, lastItem;\n firstClass = settings.firstControlClass;\n lastClass = settings.lastControlClass;\n items.each(function (item) {\n item.classes.remove(firstClass).remove(lastClass).add(settings.controlClass);\n if (item.visible()) {\n if (!firstItem) {\n firstItem = item;\n }\n lastItem = item;\n }\n });\n if (firstItem) {\n firstItem.classes.add(firstClass);\n }\n if (lastItem) {\n lastItem.classes.add(lastClass);\n }\n },\n renderHtml: function (container) {\n var self = this;\n var html = '';\n self.applyClasses(container.items());\n container.items().each(function (item) {\n html += item.renderHtml();\n });\n return html;\n },\n recalc: function () {\n },\n postRender: function () {\n },\n isNative: function () {\n return false;\n }\n });\n\n var AbsoluteLayout = Layout.extend({\n Defaults: {\n containerClass: 'abs-layout',\n controlClass: 'abs-layout-item'\n },\n recalc: function (container) {\n container.items().filter(':visible').each(function (ctrl) {\n var settings = ctrl.settings;\n ctrl.layoutRect({\n x: settings.x,\n y: settings.y,\n w: settings.w,\n h: settings.h\n });\n if (ctrl.recalc) {\n ctrl.recalc();\n }\n });\n },\n renderHtml: function (container) {\n return '
' + this._super(container);\n }\n });\n\n var Button = Widget.extend({\n Defaults: {\n classes: 'widget btn',\n role: 'button'\n },\n init: function (settings) {\n var self = this;\n var size;\n self._super(settings);\n settings = self.settings;\n size = self.settings.size;\n self.on('click mousedown', function (e) {\n e.preventDefault();\n });\n self.on('touchstart', function (e) {\n self.fire('click', e);\n e.preventDefault();\n });\n if (settings.subtype) {\n self.classes.add(settings.subtype);\n }\n if (size) {\n self.classes.add('btn-' + size);\n }\n if (settings.icon) {\n self.icon(settings.icon);\n }\n },\n icon: function (icon) {\n if (!arguments.length) {\n return this.state.get('icon');\n }\n this.state.set('icon', icon);\n return this;\n },\n repaint: function () {\n var btnElm = this.getEl().firstChild;\n var btnStyle;\n if (btnElm) {\n btnStyle = btnElm.style;\n btnStyle.width = btnStyle.height = '100%';\n }\n this._super();\n },\n renderHtml: function () {\n var self = this, id = self._id, prefix = self.classPrefix;\n var icon = self.state.get('icon'), image;\n var text = self.state.get('text');\n var textHtml = '';\n var ariaPressed;\n var settings = self.settings;\n image = settings.image;\n if (image) {\n icon = 'none';\n if (typeof image !== 'string') {\n image = domGlobals.window.getSelection ? image[0] : image[1];\n }\n image = ' style=\"background-image: url(\\'' + image + '\\')\"';\n } else {\n image = '';\n }\n if (text) {\n self.classes.add('btn-has-text');\n textHtml = '' + self.encode(text) + '';\n }\n icon = icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';\n ariaPressed = typeof settings.active === 'boolean' ? ' aria-pressed=\"' + settings.active + '\"' : '';\n return '
' + '' + '
';\n },\n bindStates: function () {\n var self = this, $ = self.$, textCls = self.classPrefix + 'txt';\n function setButtonText(text) {\n var $span = $('span.' + textCls, self.getEl());\n if (text) {\n if (!$span[0]) {\n $('button:first', self.getEl()).append('');\n $span = $('span.' + textCls, self.getEl());\n }\n $span.html(self.encode(text));\n } else {\n $span.remove();\n }\n self.classes.toggle('btn-has-text', !!text);\n }\n self.state.on('change:text', function (e) {\n setButtonText(e.value);\n });\n self.state.on('change:icon', function (e) {\n var icon = e.value;\n var prefix = self.classPrefix;\n self.settings.icon = icon;\n icon = icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : '';\n var btnElm = self.getEl().firstChild;\n var iconElm = btnElm.getElementsByTagName('i')[0];\n if (icon) {\n if (!iconElm || iconElm !== btnElm.firstChild) {\n iconElm = domGlobals.document.createElement('i');\n btnElm.insertBefore(iconElm, btnElm.firstChild);\n }\n iconElm.className = icon;\n } else if (iconElm) {\n btnElm.removeChild(iconElm);\n }\n setButtonText(self.state.get('text'));\n });\n return self._super();\n }\n });\n\n var BrowseButton = Button.extend({\n init: function (settings) {\n var self = this;\n settings = global$2.extend({\n text: 'Browse...',\n multiple: false,\n accept: null\n }, settings);\n self._super(settings);\n self.classes.add('browsebutton');\n if (settings.multiple) {\n self.classes.add('multiple');\n }\n },\n postRender: function () {\n var self = this;\n var input = funcs.create('input', {\n type: 'file',\n id: self._id + '-browse',\n accept: self.settings.accept\n });\n self._super();\n global$9(input).on('change', function (e) {\n var files = e.target.files;\n self.value = function () {\n if (!files.length) {\n return null;\n } else if (self.settings.multiple) {\n return files;\n } else {\n return files[0];\n }\n };\n e.preventDefault();\n if (files.length) {\n self.fire('change', e);\n }\n });\n global$9(input).on('click', function (e) {\n e.stopPropagation();\n });\n global$9(self.getEl('button')).on('click touchstart', function (e) {\n e.stopPropagation();\n input.click();\n e.preventDefault();\n });\n self.getEl().appendChild(input);\n },\n remove: function () {\n global$9(this.getEl('button')).off();\n global$9(this.getEl('input')).off();\n this._super();\n }\n });\n\n var ButtonGroup = Container.extend({\n Defaults: {\n defaultType: 'button',\n role: 'group'\n },\n renderHtml: function () {\n var self = this, layout = self._layout;\n self.classes.add('btn-group');\n self.preRender();\n layout.preRender(self);\n return '
' + '
' + (self.settings.html || '') + layout.renderHtml(self) + '
' + '
';\n }\n });\n\n var Checkbox = Widget.extend({\n Defaults: {\n classes: 'checkbox',\n role: 'checkbox',\n checked: false\n },\n init: function (settings) {\n var self = this;\n self._super(settings);\n self.on('click mousedown', function (e) {\n e.preventDefault();\n });\n self.on('click', function (e) {\n e.preventDefault();\n if (!self.disabled()) {\n self.checked(!self.checked());\n }\n });\n self.checked(self.settings.checked);\n },\n checked: function (state) {\n if (!arguments.length) {\n return this.state.get('checked');\n }\n this.state.set('checked', state);\n return this;\n },\n value: function (state) {\n if (!arguments.length) {\n return this.checked();\n }\n return this.checked(state);\n },\n renderHtml: function () {\n var self = this, id = self._id, prefix = self.classPrefix;\n return '
' + '' + '' + self.encode(self.state.get('text')) + '' + '
';\n },\n bindStates: function () {\n var self = this;\n function checked(state) {\n self.classes.toggle('checked', state);\n self.aria('checked', state);\n }\n self.state.on('change:text', function (e) {\n self.getEl('al').firstChild.data = self.translate(e.value);\n });\n self.state.on('change:checked change:value', function (e) {\n self.fire('change');\n checked(e.value);\n });\n self.state.on('change:icon', function (e) {\n var icon = e.value;\n var prefix = self.classPrefix;\n if (typeof icon === 'undefined') {\n return self.settings.icon;\n }\n self.settings.icon = icon;\n icon = icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : '';\n var btnElm = self.getEl().firstChild;\n var iconElm = btnElm.getElementsByTagName('i')[0];\n if (icon) {\n if (!iconElm || iconElm !== btnElm.firstChild) {\n iconElm = domGlobals.document.createElement('i');\n btnElm.insertBefore(iconElm, btnElm.firstChild);\n }\n iconElm.className = icon;\n } else if (iconElm) {\n btnElm.removeChild(iconElm);\n }\n });\n if (self.state.get('checked')) {\n checked(true);\n }\n return self._super();\n }\n });\n\n var global$d = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n var ComboBox = Widget.extend({\n init: function (settings) {\n var self = this;\n self._super(settings);\n settings = self.settings;\n self.classes.add('combobox');\n self.subinput = true;\n self.ariaTarget = 'inp';\n settings.menu = settings.menu || settings.values;\n if (settings.menu) {\n settings.icon = 'caret';\n }\n self.on('click', function (e) {\n var elm = e.target;\n var root = self.getEl();\n if (!global$9.contains(root, elm) && elm !== root) {\n return;\n }\n while (elm && elm !== root) {\n if (elm.id && elm.id.indexOf('-open') !== -1) {\n self.fire('action');\n if (settings.menu) {\n self.showMenu();\n if (e.aria) {\n self.menu.items()[0].focus();\n }\n }\n }\n elm = elm.parentNode;\n }\n });\n self.on('keydown', function (e) {\n var rootControl;\n if (e.keyCode === 13 && e.target.nodeName === 'INPUT') {\n e.preventDefault();\n self.parents().reverse().each(function (ctrl) {\n if (ctrl.toJSON) {\n rootControl = ctrl;\n return false;\n }\n });\n self.fire('submit', { data: rootControl.toJSON() });\n }\n });\n self.on('keyup', function (e) {\n if (e.target.nodeName === 'INPUT') {\n var oldValue = self.state.get('value');\n var newValue = e.target.value;\n if (newValue !== oldValue) {\n self.state.set('value', newValue);\n self.fire('autocomplete', e);\n }\n }\n });\n self.on('mouseover', function (e) {\n var tooltip = self.tooltip().moveTo(-65535);\n if (self.statusLevel() && e.target.className.indexOf(self.classPrefix + 'status') !== -1) {\n var statusMessage = self.statusMessage() || 'Ok';\n var rel = tooltip.text(statusMessage).show().testMoveRel(e.target, [\n 'bc-tc',\n 'bc-tl',\n 'bc-tr'\n ]);\n tooltip.classes.toggle('tooltip-n', rel === 'bc-tc');\n tooltip.classes.toggle('tooltip-nw', rel === 'bc-tl');\n tooltip.classes.toggle('tooltip-ne', rel === 'bc-tr');\n tooltip.moveRel(e.target, rel);\n }\n });\n },\n statusLevel: function (value) {\n if (arguments.length > 0) {\n this.state.set('statusLevel', value);\n }\n return this.state.get('statusLevel');\n },\n statusMessage: function (value) {\n if (arguments.length > 0) {\n this.state.set('statusMessage', value);\n }\n return this.state.get('statusMessage');\n },\n showMenu: function () {\n var self = this;\n var settings = self.settings;\n var menu;\n if (!self.menu) {\n menu = settings.menu || [];\n if (menu.length) {\n menu = {\n type: 'menu',\n items: menu\n };\n } else {\n menu.type = menu.type || 'menu';\n }\n self.menu = global$4.create(menu).parent(self).renderTo(self.getContainerElm());\n self.fire('createmenu');\n self.menu.reflow();\n self.menu.on('cancel', function (e) {\n if (e.control === self.menu) {\n self.focus();\n }\n });\n self.menu.on('show hide', function (e) {\n e.control.items().each(function (ctrl) {\n ctrl.active(ctrl.value() === self.value());\n });\n }).fire('show');\n self.menu.on('select', function (e) {\n self.value(e.control.value());\n });\n self.on('focusin', function (e) {\n if (e.target.tagName.toUpperCase() === 'INPUT') {\n self.menu.hide();\n }\n });\n self.aria('expanded', true);\n }\n self.menu.show();\n self.menu.layoutRect({ w: self.layoutRect().w });\n self.menu.moveRel(self.getEl(), self.isRtl() ? [\n 'br-tr',\n 'tr-br'\n ] : [\n 'bl-tl',\n 'tl-bl'\n ]);\n },\n focus: function () {\n this.getEl('inp').focus();\n },\n repaint: function () {\n var self = this, elm = self.getEl(), openElm = self.getEl('open'), rect = self.layoutRect();\n var width, lineHeight, innerPadding = 0;\n var inputElm = elm.firstChild;\n if (self.statusLevel() && self.statusLevel() !== 'none') {\n innerPadding = parseInt(funcs.getRuntimeStyle(inputElm, 'padding-right'), 10) - parseInt(funcs.getRuntimeStyle(inputElm, 'padding-left'), 10);\n }\n if (openElm) {\n width = rect.w - funcs.getSize(openElm).width - 10;\n } else {\n width = rect.w - 10;\n }\n var doc = domGlobals.document;\n if (doc.all && (!doc.documentMode || doc.documentMode <= 8)) {\n lineHeight = self.layoutRect().h - 2 + 'px';\n }\n global$9(inputElm).css({\n width: width - innerPadding,\n lineHeight: lineHeight\n });\n self._super();\n return self;\n },\n postRender: function () {\n var self = this;\n global$9(this.getEl('inp')).on('change', function (e) {\n self.state.set('value', e.target.value);\n self.fire('change', e);\n });\n return self._super();\n },\n renderHtml: function () {\n var self = this, id = self._id, settings = self.settings, prefix = self.classPrefix;\n var value = self.state.get('value') || '';\n var icon, text, openBtnHtml = '', extraAttrs = '', statusHtml = '';\n if ('spellcheck' in settings) {\n extraAttrs += ' spellcheck=\"' + settings.spellcheck + '\"';\n }\n if (settings.maxLength) {\n extraAttrs += ' maxlength=\"' + settings.maxLength + '\"';\n }\n if (settings.size) {\n extraAttrs += ' size=\"' + settings.size + '\"';\n }\n if (settings.subtype) {\n extraAttrs += ' type=\"' + settings.subtype + '\"';\n }\n statusHtml = '';\n if (self.disabled()) {\n extraAttrs += ' disabled=\"disabled\"';\n }\n icon = settings.icon;\n if (icon && icon !== 'caret') {\n icon = prefix + 'ico ' + prefix + 'i-' + settings.icon;\n }\n text = self.state.get('text');\n if (icon || text) {\n openBtnHtml = '
' + '' + '
';\n self.classes.add('has-open');\n }\n return '
' + '' + statusHtml + openBtnHtml + '
';\n },\n value: function (value) {\n if (arguments.length) {\n this.state.set('value', value);\n return this;\n }\n if (this.state.get('rendered')) {\n this.state.set('value', this.getEl('inp').value);\n }\n return this.state.get('value');\n },\n showAutoComplete: function (items, term) {\n var self = this;\n if (items.length === 0) {\n self.hideMenu();\n return;\n }\n var insert = function (value, title) {\n return function () {\n self.fire('selectitem', {\n title: title,\n value: value\n });\n };\n };\n if (self.menu) {\n self.menu.items().remove();\n } else {\n self.menu = global$4.create({\n type: 'menu',\n classes: 'combobox-menu',\n layout: 'flow'\n }).parent(self).renderTo();\n }\n global$2.each(items, function (item) {\n self.menu.add({\n text: item.title,\n url: item.previewUrl,\n match: term,\n classes: 'menu-item-ellipsis',\n onclick: insert(item.value, item.title)\n });\n });\n self.menu.renderNew();\n self.hideMenu();\n self.menu.on('cancel', function (e) {\n if (e.control.parent() === self.menu) {\n e.stopPropagation();\n self.focus();\n self.hideMenu();\n }\n });\n self.menu.on('select', function () {\n self.focus();\n });\n var maxW = self.layoutRect().w;\n self.menu.layoutRect({\n w: maxW,\n minW: 0,\n maxW: maxW\n });\n self.menu.repaint();\n self.menu.reflow();\n self.menu.show();\n self.menu.moveRel(self.getEl(), self.isRtl() ? [\n 'br-tr',\n 'tr-br'\n ] : [\n 'bl-tl',\n 'tl-bl'\n ]);\n },\n hideMenu: function () {\n if (this.menu) {\n this.menu.hide();\n }\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:value', function (e) {\n if (self.getEl('inp').value !== e.value) {\n self.getEl('inp').value = e.value;\n }\n });\n self.state.on('change:disabled', function (e) {\n self.getEl('inp').disabled = e.value;\n });\n self.state.on('change:statusLevel', function (e) {\n var statusIconElm = self.getEl('status');\n var prefix = self.classPrefix, value = e.value;\n funcs.css(statusIconElm, 'display', value === 'none' ? 'none' : '');\n funcs.toggleClass(statusIconElm, prefix + 'i-checkmark', value === 'ok');\n funcs.toggleClass(statusIconElm, prefix + 'i-warning', value === 'warn');\n funcs.toggleClass(statusIconElm, prefix + 'i-error', value === 'error');\n self.classes.toggle('has-status', value !== 'none');\n self.repaint();\n });\n funcs.on(self.getEl('status'), 'mouseleave', function () {\n self.tooltip().hide();\n });\n self.on('cancel', function (e) {\n if (self.menu && self.menu.visible()) {\n e.stopPropagation();\n self.hideMenu();\n }\n });\n var focusIdx = function (idx, menu) {\n if (menu && menu.items().length > 0) {\n menu.items().eq(idx)[0].focus();\n }\n };\n self.on('keydown', function (e) {\n var keyCode = e.keyCode;\n if (e.target.nodeName === 'INPUT') {\n if (keyCode === global$d.DOWN) {\n e.preventDefault();\n self.fire('autocomplete');\n focusIdx(0, self.menu);\n } else if (keyCode === global$d.UP) {\n e.preventDefault();\n focusIdx(-1, self.menu);\n }\n }\n });\n return self._super();\n },\n remove: function () {\n global$9(this.getEl('inp')).off();\n if (this.menu) {\n this.menu.remove();\n }\n this._super();\n }\n });\n\n var ColorBox = ComboBox.extend({\n init: function (settings) {\n var self = this;\n settings.spellcheck = false;\n if (settings.onaction) {\n settings.icon = 'none';\n }\n self._super(settings);\n self.classes.add('colorbox');\n self.on('change keyup postrender', function () {\n self.repaintColor(self.value());\n });\n },\n repaintColor: function (value) {\n var openElm = this.getEl('open');\n var elm = openElm ? openElm.getElementsByTagName('i')[0] : null;\n if (elm) {\n try {\n elm.style.background = value;\n } catch (ex) {\n }\n }\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:value', function (e) {\n if (self.state.get('rendered')) {\n self.repaintColor(e.value);\n }\n });\n return self._super();\n }\n });\n\n var PanelButton = Button.extend({\n showPanel: function () {\n var self = this, settings = self.settings;\n self.classes.add('opened');\n if (!self.panel) {\n var panelSettings = settings.panel;\n if (panelSettings.type) {\n panelSettings = {\n layout: 'grid',\n items: panelSettings\n };\n }\n panelSettings.role = panelSettings.role || 'dialog';\n panelSettings.popover = true;\n panelSettings.autohide = true;\n panelSettings.ariaRoot = true;\n self.panel = new FloatPanel(panelSettings).on('hide', function () {\n self.classes.remove('opened');\n }).on('cancel', function (e) {\n e.stopPropagation();\n self.focus();\n self.hidePanel();\n }).parent(self).renderTo(self.getContainerElm());\n self.panel.fire('show');\n self.panel.reflow();\n } else {\n self.panel.show();\n }\n var rtlRels = [\n 'bc-tc',\n 'bc-tl',\n 'bc-tr'\n ];\n var ltrRels = [\n 'bc-tc',\n 'bc-tr',\n 'bc-tl',\n 'tc-bc',\n 'tc-br',\n 'tc-bl'\n ];\n var rel = self.panel.testMoveRel(self.getEl(), settings.popoverAlign || (self.isRtl() ? rtlRels : ltrRels));\n self.panel.classes.toggle('start', rel.substr(-1) === 'l');\n self.panel.classes.toggle('end', rel.substr(-1) === 'r');\n var isTop = rel.substr(0, 1) === 't';\n self.panel.classes.toggle('bottom', !isTop);\n self.panel.classes.toggle('top', isTop);\n self.panel.moveRel(self.getEl(), rel);\n },\n hidePanel: function () {\n var self = this;\n if (self.panel) {\n self.panel.hide();\n }\n },\n postRender: function () {\n var self = this;\n self.aria('haspopup', true);\n self.on('click', function (e) {\n if (e.control === self) {\n if (self.panel && self.panel.visible()) {\n self.hidePanel();\n } else {\n self.showPanel();\n self.panel.focus(!!e.aria);\n }\n }\n });\n return self._super();\n },\n remove: function () {\n if (this.panel) {\n this.panel.remove();\n this.panel = null;\n }\n return this._super();\n }\n });\n\n var DOM$3 = global$3.DOM;\n var ColorButton = PanelButton.extend({\n init: function (settings) {\n this._super(settings);\n this.classes.add('splitbtn');\n this.classes.add('colorbutton');\n },\n color: function (color) {\n if (color) {\n this._color = color;\n this.getEl('preview').style.backgroundColor = color;\n return this;\n }\n return this._color;\n },\n resetColor: function () {\n this._color = null;\n this.getEl('preview').style.backgroundColor = null;\n return this;\n },\n renderHtml: function () {\n var self = this, id = self._id, prefix = self.classPrefix, text = self.state.get('text');\n var icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : '';\n var image = self.settings.image ? ' style=\"background-image: url(\\'' + self.settings.image + '\\')\"' : '';\n var textHtml = '';\n if (text) {\n self.classes.add('btn-has-text');\n textHtml = '' + self.encode(text) + '';\n }\n return '
' + '' + '' + '
';\n },\n postRender: function () {\n var self = this, onClickHandler = self.settings.onclick;\n self.on('click', function (e) {\n if (e.aria && e.aria.key === 'down') {\n return;\n }\n if (e.control === self && !DOM$3.getParent(e.target, '.' + self.classPrefix + 'open')) {\n e.stopImmediatePropagation();\n onClickHandler.call(self, e);\n }\n });\n delete self.settings.onclick;\n return self._super();\n }\n });\n\n var global$e = tinymce.util.Tools.resolve('tinymce.util.Color');\n\n var ColorPicker = Widget.extend({\n Defaults: { classes: 'widget colorpicker' },\n init: function (settings) {\n this._super(settings);\n },\n postRender: function () {\n var self = this;\n var color = self.color();\n var hsv, hueRootElm, huePointElm, svRootElm, svPointElm;\n hueRootElm = self.getEl('h');\n huePointElm = self.getEl('hp');\n svRootElm = self.getEl('sv');\n svPointElm = self.getEl('svp');\n function getPos(elm, event) {\n var pos = funcs.getPos(elm);\n var x, y;\n x = event.pageX - pos.x;\n y = event.pageY - pos.y;\n x = Math.max(0, Math.min(x / elm.clientWidth, 1));\n y = Math.max(0, Math.min(y / elm.clientHeight, 1));\n return {\n x: x,\n y: y\n };\n }\n function updateColor(hsv, hueUpdate) {\n var hue = (360 - hsv.h) / 360;\n funcs.css(huePointElm, { top: hue * 100 + '%' });\n if (!hueUpdate) {\n funcs.css(svPointElm, {\n left: hsv.s + '%',\n top: 100 - hsv.v + '%'\n });\n }\n svRootElm.style.background = global$e({\n s: 100,\n v: 100,\n h: hsv.h\n }).toHex();\n self.color().parse({\n s: hsv.s,\n v: hsv.v,\n h: hsv.h\n });\n }\n function updateSaturationAndValue(e) {\n var pos;\n pos = getPos(svRootElm, e);\n hsv.s = pos.x * 100;\n hsv.v = (1 - pos.y) * 100;\n updateColor(hsv);\n self.fire('change');\n }\n function updateHue(e) {\n var pos;\n pos = getPos(hueRootElm, e);\n hsv = color.toHsv();\n hsv.h = (1 - pos.y) * 360;\n updateColor(hsv, true);\n self.fire('change');\n }\n self._repaint = function () {\n hsv = color.toHsv();\n updateColor(hsv);\n };\n self._super();\n self._svdraghelper = new DragHelper(self._id + '-sv', {\n start: updateSaturationAndValue,\n drag: updateSaturationAndValue\n });\n self._hdraghelper = new DragHelper(self._id + '-h', {\n start: updateHue,\n drag: updateHue\n });\n self._repaint();\n },\n rgb: function () {\n return this.color().toRgb();\n },\n value: function (value) {\n var self = this;\n if (arguments.length) {\n self.color().parse(value);\n if (self._rendered) {\n self._repaint();\n }\n } else {\n return self.color().toHex();\n }\n },\n color: function () {\n if (!this._color) {\n this._color = global$e();\n }\n return this._color;\n },\n renderHtml: function () {\n var self = this;\n var id = self._id;\n var prefix = self.classPrefix;\n var hueHtml;\n var stops = '#ff0000,#ff0080,#ff00ff,#8000ff,#0000ff,#0080ff,#00ffff,#00ff80,#00ff00,#80ff00,#ffff00,#ff8000,#ff0000';\n function getOldIeFallbackHtml() {\n var i, l, html = '', gradientPrefix, stopsList;\n gradientPrefix = 'filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=';\n stopsList = stops.split(',');\n for (i = 0, l = stopsList.length - 1; i < l; i++) {\n html += '
';\n }\n return html;\n }\n var gradientCssText = 'background: -ms-linear-gradient(top,' + stops + ');' + 'background: linear-gradient(to bottom,' + stops + ');';\n hueHtml = '
' + getOldIeFallbackHtml() + '
' + '
';\n return '
' + '
' + '
' + '
' + '
' + '
' + '
' + '
' + '
' + '
' + hueHtml + '
';\n }\n });\n\n var DropZone = Widget.extend({\n init: function (settings) {\n var self = this;\n settings = global$2.extend({\n height: 100,\n text: 'Drop an image here',\n multiple: false,\n accept: null\n }, settings);\n self._super(settings);\n self.classes.add('dropzone');\n if (settings.multiple) {\n self.classes.add('multiple');\n }\n },\n renderHtml: function () {\n var self = this;\n var attrs, elm;\n var cfg = self.settings;\n attrs = {\n id: self._id,\n hidefocus: '1'\n };\n elm = funcs.create('div', attrs, '' + this.translate(cfg.text) + '');\n if (cfg.height) {\n funcs.css(elm, 'height', cfg.height + 'px');\n }\n if (cfg.width) {\n funcs.css(elm, 'width', cfg.width + 'px');\n }\n elm.className = self.classes;\n return elm.outerHTML;\n },\n postRender: function () {\n var self = this;\n var toggleDragClass = function (e) {\n e.preventDefault();\n self.classes.toggle('dragenter');\n self.getEl().className = self.classes;\n };\n var filter = function (files) {\n var accept = self.settings.accept;\n if (typeof accept !== 'string') {\n return files;\n }\n var re = new RegExp('(' + accept.split(/\\s*,\\s*/).join('|') + ')$', 'i');\n return global$2.grep(files, function (file) {\n return re.test(file.name);\n });\n };\n self._super();\n self.$el.on('dragover', function (e) {\n e.preventDefault();\n });\n self.$el.on('dragenter', toggleDragClass);\n self.$el.on('dragleave', toggleDragClass);\n self.$el.on('drop', function (e) {\n e.preventDefault();\n if (self.state.get('disabled')) {\n return;\n }\n var files = filter(e.dataTransfer.files);\n self.value = function () {\n if (!files.length) {\n return null;\n } else if (self.settings.multiple) {\n return files;\n } else {\n return files[0];\n }\n };\n if (files.length) {\n self.fire('change', e);\n }\n });\n },\n remove: function () {\n this.$el.off();\n this._super();\n }\n });\n\n var Path = Widget.extend({\n init: function (settings) {\n var self = this;\n if (!settings.delimiter) {\n settings.delimiter = '\\xBB';\n }\n self._super(settings);\n self.classes.add('path');\n self.canFocus = true;\n self.on('click', function (e) {\n var index;\n var target = e.target;\n if (index = target.getAttribute('data-index')) {\n self.fire('select', {\n value: self.row()[index],\n index: index\n });\n }\n });\n self.row(self.settings.row);\n },\n focus: function () {\n var self = this;\n self.getEl().firstChild.focus();\n return self;\n },\n row: function (row) {\n if (!arguments.length) {\n return this.state.get('row');\n }\n this.state.set('row', row);\n return this;\n },\n renderHtml: function () {\n var self = this;\n return '
' + self._getDataPathHtml(self.state.get('row')) + '
';\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:row', function (e) {\n self.innerHtml(self._getDataPathHtml(e.value));\n });\n return self._super();\n },\n _getDataPathHtml: function (data) {\n var self = this;\n var parts = data || [];\n var i, l, html = '';\n var prefix = self.classPrefix;\n for (i = 0, l = parts.length; i < l; i++) {\n html += (i > 0 ? '
' + self.settings.delimiter + '
' : '') + '
' + parts[i].name + '
';\n }\n if (!html) {\n html = '
\\xA0
';\n }\n return html;\n }\n });\n\n var ElementPath = Path.extend({\n postRender: function () {\n var self = this, editor = self.settings.editor;\n function isHidden(elm) {\n if (elm.nodeType === 1) {\n if (elm.nodeName === 'BR' || !!elm.getAttribute('data-mce-bogus')) {\n return true;\n }\n if (elm.getAttribute('data-mce-type') === 'bookmark') {\n return true;\n }\n }\n return false;\n }\n if (editor.settings.elementpath !== false) {\n self.on('select', function (e) {\n editor.focus();\n editor.selection.select(this.row()[e.index].element);\n editor.nodeChanged();\n });\n editor.on('nodeChange', function (e) {\n var outParents = [];\n var parents = e.parents;\n var i = parents.length;\n while (i--) {\n if (parents[i].nodeType === 1 && !isHidden(parents[i])) {\n var args = editor.fire('ResolveName', {\n name: parents[i].nodeName.toLowerCase(),\n target: parents[i]\n });\n if (!args.isDefaultPrevented()) {\n outParents.push({\n name: args.name,\n element: parents[i]\n });\n }\n if (args.isPropagationStopped()) {\n break;\n }\n }\n }\n self.row(outParents);\n });\n }\n return self._super();\n }\n });\n\n var FormItem = Container.extend({\n Defaults: {\n layout: 'flex',\n align: 'center',\n defaults: { flex: 1 }\n },\n renderHtml: function () {\n var self = this, layout = self._layout, prefix = self.classPrefix;\n self.classes.add('formitem');\n layout.preRender(self);\n return '
' + (self.settings.title ? '
' + self.settings.title + '
' : '') + '
' + (self.settings.html || '') + layout.renderHtml(self) + '
' + '
';\n }\n });\n\n var Form = Container.extend({\n Defaults: {\n containerCls: 'form',\n layout: 'flex',\n direction: 'column',\n align: 'stretch',\n flex: 1,\n padding: 15,\n labelGap: 30,\n spacing: 10,\n callbacks: {\n submit: function () {\n this.submit();\n }\n }\n },\n preRender: function () {\n var self = this, items = self.items();\n if (!self.settings.formItemDefaults) {\n self.settings.formItemDefaults = {\n layout: 'flex',\n autoResize: 'overflow',\n defaults: { flex: 1 }\n };\n }\n items.each(function (ctrl) {\n var formItem;\n var label = ctrl.settings.label;\n if (label) {\n formItem = new FormItem(global$2.extend({\n items: {\n type: 'label',\n id: ctrl._id + '-l',\n text: label,\n flex: 0,\n forId: ctrl._id,\n disabled: ctrl.disabled()\n }\n }, self.settings.formItemDefaults));\n formItem.type = 'formitem';\n ctrl.aria('labelledby', ctrl._id + '-l');\n if (typeof ctrl.settings.flex === 'undefined') {\n ctrl.settings.flex = 1;\n }\n self.replace(ctrl, formItem);\n formItem.add(ctrl);\n }\n });\n },\n submit: function () {\n return this.fire('submit', { data: this.toJSON() });\n },\n postRender: function () {\n var self = this;\n self._super();\n self.fromJSON(self.settings.data);\n },\n bindStates: function () {\n var self = this;\n self._super();\n function recalcLabels() {\n var maxLabelWidth = 0;\n var labels = [];\n var i, labelGap, items;\n if (self.settings.labelGapCalc === false) {\n return;\n }\n if (self.settings.labelGapCalc === 'children') {\n items = self.find('formitem');\n } else {\n items = self.items();\n }\n items.filter('formitem').each(function (item) {\n var labelCtrl = item.items()[0], labelWidth = labelCtrl.getEl().clientWidth;\n maxLabelWidth = labelWidth > maxLabelWidth ? labelWidth : maxLabelWidth;\n labels.push(labelCtrl);\n });\n labelGap = self.settings.labelGap || 0;\n i = labels.length;\n while (i--) {\n labels[i].settings.minWidth = maxLabelWidth + labelGap;\n }\n }\n self.on('show', recalcLabels);\n recalcLabels();\n }\n });\n\n var FieldSet = Form.extend({\n Defaults: {\n containerCls: 'fieldset',\n layout: 'flex',\n direction: 'column',\n align: 'stretch',\n flex: 1,\n padding: '25 15 5 15',\n labelGap: 30,\n spacing: 10,\n border: 1\n },\n renderHtml: function () {\n var self = this, layout = self._layout, prefix = self.classPrefix;\n self.preRender();\n layout.preRender(self);\n return '
' + (self.settings.title ? '' + self.settings.title + '' : '') + '
' + (self.settings.html || '') + layout.renderHtml(self) + '
' + '
';\n }\n });\n\n var unique$1 = 0;\n var generate = function (prefix) {\n var date = new Date();\n var time = date.getTime();\n var random = Math.floor(Math.random() * 1000000000);\n unique$1++;\n return prefix + '_' + random + unique$1 + String(time);\n };\n\n var fromHtml = function (html, scope) {\n var doc = scope || domGlobals.document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n domGlobals.console.error('HTML does not have a single root node', html);\n throw new Error('HTML must have a single root node');\n }\n return fromDom(div.childNodes[0]);\n };\n var fromTag = function (tag, scope) {\n var doc = scope || domGlobals.document;\n var node = doc.createElement(tag);\n return fromDom(node);\n };\n var fromText = function (text, scope) {\n var doc = scope || domGlobals.document;\n var node = doc.createTextNode(text);\n return fromDom(node);\n };\n var fromDom = function (node) {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: constant(node) };\n };\n var fromPoint = function (docElm, x, y) {\n var doc = docElm.dom();\n return Option.from(doc.elementFromPoint(x, y)).map(fromDom);\n };\n var Element = {\n fromHtml: fromHtml,\n fromTag: fromTag,\n fromText: fromText,\n fromDom: fromDom,\n fromPoint: fromPoint\n };\n\n var cached = function (f) {\n var called = false;\n var r;\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (!called) {\n called = true;\n r = f.apply(null, args);\n }\n return r;\n };\n };\n\n var ATTRIBUTE = domGlobals.Node.ATTRIBUTE_NODE;\n var CDATA_SECTION = domGlobals.Node.CDATA_SECTION_NODE;\n var COMMENT = domGlobals.Node.COMMENT_NODE;\n var DOCUMENT = domGlobals.Node.DOCUMENT_NODE;\n var DOCUMENT_TYPE = domGlobals.Node.DOCUMENT_TYPE_NODE;\n var DOCUMENT_FRAGMENT = domGlobals.Node.DOCUMENT_FRAGMENT_NODE;\n var ELEMENT = domGlobals.Node.ELEMENT_NODE;\n var TEXT = domGlobals.Node.TEXT_NODE;\n var PROCESSING_INSTRUCTION = domGlobals.Node.PROCESSING_INSTRUCTION_NODE;\n var ENTITY_REFERENCE = domGlobals.Node.ENTITY_REFERENCE_NODE;\n var ENTITY = domGlobals.Node.ENTITY_NODE;\n var NOTATION = domGlobals.Node.NOTATION_NODE;\n\n var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')();\n\n var path = function (parts, scope) {\n var o = scope !== undefined && scope !== null ? scope : Global;\n for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n o = o[parts[i]];\n }\n return o;\n };\n var resolve = function (p, scope) {\n var parts = p.split('.');\n return path(parts, scope);\n };\n\n var unsafe = function (name, scope) {\n return resolve(name, scope);\n };\n var getOrDie = function (name, scope) {\n var actual = unsafe(name, scope);\n if (actual === undefined || actual === null) {\n throw new Error(name + ' not available on this browser');\n }\n return actual;\n };\n var Global$1 = { getOrDie: getOrDie };\n\n var Immutable = function () {\n var fields = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n fields[_i] = arguments[_i];\n }\n return function () {\n var values = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n values[_i] = arguments[_i];\n }\n if (fields.length !== values.length) {\n throw new Error('Wrong number of arguments to struct. Expected \"[' + fields.length + ']\", got ' + values.length + ' arguments');\n }\n var struct = {};\n each(fields, function (name, i) {\n struct[name] = constant(values[i]);\n });\n return struct;\n };\n };\n\n var node = function () {\n var f = Global$1.getOrDie('Node');\n return f;\n };\n var compareDocumentPosition = function (a, b, match) {\n return (a.compareDocumentPosition(b) & match) !== 0;\n };\n var documentPositionPreceding = function (a, b) {\n return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING);\n };\n var documentPositionContainedBy = function (a, b) {\n return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY);\n };\n var Node = {\n documentPositionPreceding: documentPositionPreceding,\n documentPositionContainedBy: documentPositionContainedBy\n };\n\n var firstMatch = function (regexes, s) {\n for (var i = 0; i < regexes.length; i++) {\n var x = regexes[i];\n if (x.test(s)) {\n return x;\n }\n }\n return undefined;\n };\n var find$1 = function (regexes, agent) {\n var r = firstMatch(regexes, agent);\n if (!r) {\n return {\n major: 0,\n minor: 0\n };\n }\n var group = function (i) {\n return Number(agent.replace(r, '$' + i));\n };\n return nu(group(1), group(2));\n };\n var detect = function (versionRegexes, agent) {\n var cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown();\n }\n return find$1(versionRegexes, cleanedAgent);\n };\n var unknown = function () {\n return nu(0, 0);\n };\n var nu = function (major, minor) {\n return {\n major: major,\n minor: minor\n };\n };\n var Version = {\n nu: nu,\n detect: detect,\n unknown: unknown\n };\n\n var edge = 'Edge';\n var chrome = 'Chrome';\n var ie = 'IE';\n var opera = 'Opera';\n var firefox = 'Firefox';\n var safari = 'Safari';\n var isBrowser = function (name, current) {\n return function () {\n return current === name;\n };\n };\n var unknown$1 = function () {\n return nu$1({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$1 = function (info) {\n var current = info.current;\n var version = info.version;\n return {\n current: current,\n version: version,\n isEdge: isBrowser(edge, current),\n isChrome: isBrowser(chrome, current),\n isIE: isBrowser(ie, current),\n isOpera: isBrowser(opera, current),\n isFirefox: isBrowser(firefox, current),\n isSafari: isBrowser(safari, current)\n };\n };\n var Browser = {\n unknown: unknown$1,\n nu: nu$1,\n edge: constant(edge),\n chrome: constant(chrome),\n ie: constant(ie),\n opera: constant(opera),\n firefox: constant(firefox),\n safari: constant(safari)\n };\n\n var windows$1 = 'Windows';\n var ios = 'iOS';\n var android = 'Android';\n var linux = 'Linux';\n var osx = 'OSX';\n var solaris = 'Solaris';\n var freebsd = 'FreeBSD';\n var isOS = function (name, current) {\n return function () {\n return current === name;\n };\n };\n var unknown$2 = function () {\n return nu$2({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$2 = function (info) {\n var current = info.current;\n var version = info.version;\n return {\n current: current,\n version: version,\n isWindows: isOS(windows$1, current),\n isiOS: isOS(ios, current),\n isAndroid: isOS(android, current),\n isOSX: isOS(osx, current),\n isLinux: isOS(linux, current),\n isSolaris: isOS(solaris, current),\n isFreeBSD: isOS(freebsd, current)\n };\n };\n var OperatingSystem = {\n unknown: unknown$2,\n nu: nu$2,\n windows: constant(windows$1),\n ios: constant(ios),\n android: constant(android),\n linux: constant(linux),\n osx: constant(osx),\n solaris: constant(solaris),\n freebsd: constant(freebsd)\n };\n\n var DeviceType = function (os, browser, userAgent) {\n var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n var isiPhone = os.isiOS() && !isiPad;\n var isAndroid3 = os.isAndroid() && os.version.major === 3;\n var isAndroid4 = os.isAndroid() && os.version.major === 4;\n var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true;\n var isTouch = os.isiOS() || os.isAndroid();\n var isPhone = isTouch && !isTablet;\n var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n return {\n isiPad: constant(isiPad),\n isiPhone: constant(isiPhone),\n isTablet: constant(isTablet),\n isPhone: constant(isPhone),\n isTouch: constant(isTouch),\n isAndroid: os.isAndroid,\n isiOS: os.isiOS,\n isWebView: constant(iOSwebview)\n };\n };\n\n var detect$1 = function (candidates, userAgent) {\n var agent = String(userAgent).toLowerCase();\n return find(candidates, function (candidate) {\n return candidate.search(agent);\n });\n };\n var detectBrowser = function (browsers, userAgent) {\n return detect$1(browsers, userAgent).map(function (browser) {\n var version = Version.detect(browser.versionRegexes, userAgent);\n return {\n current: browser.name,\n version: version\n };\n });\n };\n var detectOs = function (oses, userAgent) {\n return detect$1(oses, userAgent).map(function (os) {\n var version = Version.detect(os.versionRegexes, userAgent);\n return {\n current: os.name,\n version: version\n };\n });\n };\n var UaString = {\n detectBrowser: detectBrowser,\n detectOs: detectOs\n };\n\n var contains = function (str, substr) {\n return str.indexOf(substr) !== -1;\n };\n\n var normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n var checkContains = function (target) {\n return function (uastring) {\n return contains(uastring, target);\n };\n };\n var browsers = [\n {\n name: 'Edge',\n versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n search: function (uastring) {\n return contains(uastring, 'edge/') && contains(uastring, 'chrome') && contains(uastring, 'safari') && contains(uastring, 'applewebkit');\n }\n },\n {\n name: 'Chrome',\n versionRegexes: [\n /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n normalVersionRegex\n ],\n search: function (uastring) {\n return contains(uastring, 'chrome') && !contains(uastring, 'chromeframe');\n }\n },\n {\n name: 'IE',\n versionRegexes: [\n /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*?rv:([0-9]+)\\.([0-9]+).*/\n ],\n search: function (uastring) {\n return contains(uastring, 'msie') || contains(uastring, 'trident');\n }\n },\n {\n name: 'Opera',\n versionRegexes: [\n normalVersionRegex,\n /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n ],\n search: checkContains('opera')\n },\n {\n name: 'Firefox',\n versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n search: checkContains('firefox')\n },\n {\n name: 'Safari',\n versionRegexes: [\n normalVersionRegex,\n /.*?cpu os ([0-9]+)_([0-9]+).*/\n ],\n search: function (uastring) {\n return (contains(uastring, 'safari') || contains(uastring, 'mobile/')) && contains(uastring, 'applewebkit');\n }\n }\n ];\n var oses = [\n {\n name: 'Windows',\n search: checkContains('win'),\n versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'iOS',\n search: function (uastring) {\n return contains(uastring, 'iphone') || contains(uastring, 'ipad');\n },\n versionRegexes: [\n /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*cpu os ([0-9]+)_([0-9]+).*/,\n /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n ]\n },\n {\n name: 'Android',\n search: checkContains('android'),\n versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'OSX',\n search: checkContains('os x'),\n versionRegexes: [/.*?os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n },\n {\n name: 'Linux',\n search: checkContains('linux'),\n versionRegexes: []\n },\n {\n name: 'Solaris',\n search: checkContains('sunos'),\n versionRegexes: []\n },\n {\n name: 'FreeBSD',\n search: checkContains('freebsd'),\n versionRegexes: []\n }\n ];\n var PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n var detect$2 = function (userAgent) {\n var browsers = PlatformInfo.browsers();\n var oses = PlatformInfo.oses();\n var browser = UaString.detectBrowser(browsers, userAgent).fold(Browser.unknown, Browser.nu);\n var os = UaString.detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n var deviceType = DeviceType(os, browser, userAgent);\n return {\n browser: browser,\n os: os,\n deviceType: deviceType\n };\n };\n var PlatformDetection = { detect: detect$2 };\n\n var detect$3 = cached(function () {\n var userAgent = domGlobals.navigator.userAgent;\n return PlatformDetection.detect(userAgent);\n });\n var PlatformDetection$1 = { detect: detect$3 };\n\n var ELEMENT$1 = ELEMENT;\n var DOCUMENT$1 = DOCUMENT;\n var bypassSelector = function (dom) {\n return dom.nodeType !== ELEMENT$1 && dom.nodeType !== DOCUMENT$1 || dom.childElementCount === 0;\n };\n var all = function (selector, scope) {\n var base = scope === undefined ? domGlobals.document : scope.dom();\n return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), Element.fromDom);\n };\n var one = function (selector, scope) {\n var base = scope === undefined ? domGlobals.document : scope.dom();\n return bypassSelector(base) ? Option.none() : Option.from(base.querySelector(selector)).map(Element.fromDom);\n };\n\n var regularContains = function (e1, e2) {\n var d1 = e1.dom();\n var d2 = e2.dom();\n return d1 === d2 ? false : d1.contains(d2);\n };\n var ieContains = function (e1, e2) {\n return Node.documentPositionContainedBy(e1.dom(), e2.dom());\n };\n var browser = PlatformDetection$1.detect().browser;\n var contains$1 = browser.isIE() ? ieContains : regularContains;\n\n var spot = Immutable('element', 'offset');\n\n var descendants = function (scope, selector) {\n return all(selector, scope);\n };\n\n var trim = global$2.trim;\n var hasContentEditableState = function (value) {\n return function (node) {\n if (node && node.nodeType === 1) {\n if (node.contentEditable === value) {\n return true;\n }\n if (node.getAttribute('data-mce-contenteditable') === value) {\n return true;\n }\n }\n return false;\n };\n };\n var isContentEditableTrue = hasContentEditableState('true');\n var isContentEditableFalse = hasContentEditableState('false');\n var create = function (type, title, url, level, attach) {\n return {\n type: type,\n title: title,\n url: url,\n level: level,\n attach: attach\n };\n };\n var isChildOfContentEditableTrue = function (node) {\n while (node = node.parentNode) {\n var value = node.contentEditable;\n if (value && value !== 'inherit') {\n return isContentEditableTrue(node);\n }\n }\n return false;\n };\n var select = function (selector, root) {\n return map(descendants(Element.fromDom(root), selector), function (element) {\n return element.dom();\n });\n };\n var getElementText = function (elm) {\n return elm.innerText || elm.textContent;\n };\n var getOrGenerateId = function (elm) {\n return elm.id ? elm.id : generate('h');\n };\n var isAnchor = function (elm) {\n return elm && elm.nodeName === 'A' && (elm.id || elm.name);\n };\n var isValidAnchor = function (elm) {\n return isAnchor(elm) && isEditable(elm);\n };\n var isHeader = function (elm) {\n return elm && /^(H[1-6])$/.test(elm.nodeName);\n };\n var isEditable = function (elm) {\n return isChildOfContentEditableTrue(elm) && !isContentEditableFalse(elm);\n };\n var isValidHeader = function (elm) {\n return isHeader(elm) && isEditable(elm);\n };\n var getLevel = function (elm) {\n return isHeader(elm) ? parseInt(elm.nodeName.substr(1), 10) : 0;\n };\n var headerTarget = function (elm) {\n var headerId = getOrGenerateId(elm);\n var attach = function () {\n elm.id = headerId;\n };\n return create('header', getElementText(elm), '#' + headerId, getLevel(elm), attach);\n };\n var anchorTarget = function (elm) {\n var anchorId = elm.id || elm.name;\n var anchorText = getElementText(elm);\n return create('anchor', anchorText ? anchorText : '#' + anchorId, '#' + anchorId, 0, noop);\n };\n var getHeaderTargets = function (elms) {\n return map(filter(elms, isValidHeader), headerTarget);\n };\n var getAnchorTargets = function (elms) {\n return map(filter(elms, isValidAnchor), anchorTarget);\n };\n var getTargetElements = function (elm) {\n var elms = select('h1,h2,h3,h4,h5,h6,a:not([href])', elm);\n return elms;\n };\n var hasTitle = function (target) {\n return trim(target.title).length > 0;\n };\n var find$2 = function (elm) {\n var elms = getTargetElements(elm);\n return filter(getHeaderTargets(elms).concat(getAnchorTargets(elms)), hasTitle);\n };\n var LinkTargets = { find: find$2 };\n\n var getActiveEditor = function () {\n return window.tinymce ? window.tinymce.activeEditor : global$1.activeEditor;\n };\n var history = {};\n var HISTORY_LENGTH = 5;\n var clearHistory = function () {\n history = {};\n };\n var toMenuItem = function (target) {\n return {\n title: target.title,\n value: {\n title: { raw: target.title },\n url: target.url,\n attach: target.attach\n }\n };\n };\n var toMenuItems = function (targets) {\n return global$2.map(targets, toMenuItem);\n };\n var staticMenuItem = function (title, url) {\n return {\n title: title,\n value: {\n title: title,\n url: url,\n attach: noop\n }\n };\n };\n var isUniqueUrl = function (url, targets) {\n var foundTarget = exists(targets, function (target) {\n return target.url === url;\n });\n return !foundTarget;\n };\n var getSetting = function (editorSettings, name, defaultValue) {\n var value = name in editorSettings ? editorSettings[name] : defaultValue;\n return value === false ? null : value;\n };\n var createMenuItems = function (term, targets, fileType, editorSettings) {\n var separator = { title: '-' };\n var fromHistoryMenuItems = function (history) {\n var historyItems = history.hasOwnProperty(fileType) ? history[fileType] : [];\n var uniqueHistory = filter(historyItems, function (url) {\n return isUniqueUrl(url, targets);\n });\n return global$2.map(uniqueHistory, function (url) {\n return {\n title: url,\n value: {\n title: url,\n url: url,\n attach: noop\n }\n };\n });\n };\n var fromMenuItems = function (type) {\n var filteredTargets = filter(targets, function (target) {\n return target.type === type;\n });\n return toMenuItems(filteredTargets);\n };\n var anchorMenuItems = function () {\n var anchorMenuItems = fromMenuItems('anchor');\n var topAnchor = getSetting(editorSettings, 'anchor_top', '#top');\n var bottomAchor = getSetting(editorSettings, 'anchor_bottom', '#bottom');\n if (topAnchor !== null) {\n anchorMenuItems.unshift(staticMenuItem('', topAnchor));\n }\n if (bottomAchor !== null) {\n anchorMenuItems.push(staticMenuItem('', bottomAchor));\n }\n return anchorMenuItems;\n };\n var join = function (items) {\n return foldl(items, function (a, b) {\n var bothEmpty = a.length === 0 || b.length === 0;\n return bothEmpty ? a.concat(b) : a.concat(separator, b);\n }, []);\n };\n if (editorSettings.typeahead_urls === false) {\n return [];\n }\n return fileType === 'file' ? join([\n filterByQuery(term, fromHistoryMenuItems(history)),\n filterByQuery(term, fromMenuItems('header')),\n filterByQuery(term, anchorMenuItems())\n ]) : filterByQuery(term, fromHistoryMenuItems(history));\n };\n var addToHistory = function (url, fileType) {\n var items = history[fileType];\n if (!/^https?/.test(url)) {\n return;\n }\n if (items) {\n if (indexOf(items, url).isNone()) {\n history[fileType] = items.slice(0, HISTORY_LENGTH).concat(url);\n }\n } else {\n history[fileType] = [url];\n }\n };\n var filterByQuery = function (term, menuItems) {\n var lowerCaseTerm = term.toLowerCase();\n var result = global$2.grep(menuItems, function (item) {\n return item.title.toLowerCase().indexOf(lowerCaseTerm) !== -1;\n });\n return result.length === 1 && result[0].title === term ? [] : result;\n };\n var getTitle = function (linkDetails) {\n var title = linkDetails.title;\n return title.raw ? title.raw : title;\n };\n var setupAutoCompleteHandler = function (ctrl, editorSettings, bodyElm, fileType) {\n var autocomplete = function (term) {\n var linkTargets = LinkTargets.find(bodyElm);\n var menuItems = createMenuItems(term, linkTargets, fileType, editorSettings);\n ctrl.showAutoComplete(menuItems, term);\n };\n ctrl.on('autocomplete', function () {\n autocomplete(ctrl.value());\n });\n ctrl.on('selectitem', function (e) {\n var linkDetails = e.value;\n ctrl.value(linkDetails.url);\n var title = getTitle(linkDetails);\n if (fileType === 'image') {\n ctrl.fire('change', {\n meta: {\n alt: title,\n attach: linkDetails.attach\n }\n });\n } else {\n ctrl.fire('change', {\n meta: {\n text: title,\n attach: linkDetails.attach\n }\n });\n }\n ctrl.focus();\n });\n ctrl.on('click', function (e) {\n if (ctrl.value().length === 0 && e.target.nodeName === 'INPUT') {\n autocomplete('');\n }\n });\n ctrl.on('PostRender', function () {\n ctrl.getRoot().on('submit', function (e) {\n if (!e.isDefaultPrevented()) {\n addToHistory(ctrl.value(), fileType);\n }\n });\n });\n };\n var statusToUiState = function (result) {\n var status = result.status, message = result.message;\n if (status === 'valid') {\n return {\n status: 'ok',\n message: message\n };\n } else if (status === 'unknown') {\n return {\n status: 'warn',\n message: message\n };\n } else if (status === 'invalid') {\n return {\n status: 'warn',\n message: message\n };\n } else {\n return {\n status: 'none',\n message: ''\n };\n }\n };\n var setupLinkValidatorHandler = function (ctrl, editorSettings, fileType) {\n var validatorHandler = editorSettings.filepicker_validator_handler;\n if (validatorHandler) {\n var validateUrl_1 = function (url) {\n if (url.length === 0) {\n ctrl.statusLevel('none');\n return;\n }\n validatorHandler({\n url: url,\n type: fileType\n }, function (result) {\n var uiState = statusToUiState(result);\n ctrl.statusMessage(uiState.message);\n ctrl.statusLevel(uiState.status);\n });\n };\n ctrl.state.on('change:value', function (e) {\n validateUrl_1(e.value);\n });\n }\n };\n var FilePicker = ComboBox.extend({\n Statics: { clearHistory: clearHistory },\n init: function (settings) {\n var self = this, editor = getActiveEditor(), editorSettings = editor.settings;\n var actionCallback, fileBrowserCallback, fileBrowserCallbackTypes;\n var fileType = settings.filetype;\n settings.spellcheck = false;\n fileBrowserCallbackTypes = editorSettings.file_picker_types || editorSettings.file_browser_callback_types;\n if (fileBrowserCallbackTypes) {\n fileBrowserCallbackTypes = global$2.makeMap(fileBrowserCallbackTypes, /[, ]/);\n }\n if (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType]) {\n fileBrowserCallback = editorSettings.file_picker_callback;\n if (fileBrowserCallback && (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType])) {\n actionCallback = function () {\n var meta = self.fire('beforecall').meta;\n meta = global$2.extend({ filetype: fileType }, meta);\n fileBrowserCallback.call(editor, function (value, meta) {\n self.value(value).fire('change', { meta: meta });\n }, self.value(), meta);\n };\n } else {\n fileBrowserCallback = editorSettings.file_browser_callback;\n if (fileBrowserCallback && (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType])) {\n actionCallback = function () {\n fileBrowserCallback(self.getEl('inp').id, self.value(), fileType, window);\n };\n }\n }\n }\n if (actionCallback) {\n settings.icon = 'browse';\n settings.onaction = actionCallback;\n }\n self._super(settings);\n self.classes.add('filepicker');\n setupAutoCompleteHandler(self, editorSettings, editor.getBody(), fileType);\n setupLinkValidatorHandler(self, editorSettings, fileType);\n }\n });\n\n var FitLayout = AbsoluteLayout.extend({\n recalc: function (container) {\n var contLayoutRect = container.layoutRect(), paddingBox = container.paddingBox;\n container.items().filter(':visible').each(function (ctrl) {\n ctrl.layoutRect({\n x: paddingBox.left,\n y: paddingBox.top,\n w: contLayoutRect.innerW - paddingBox.right - paddingBox.left,\n h: contLayoutRect.innerH - paddingBox.top - paddingBox.bottom\n });\n if (ctrl.recalc) {\n ctrl.recalc();\n }\n });\n }\n });\n\n var FlexLayout = AbsoluteLayout.extend({\n recalc: function (container) {\n var i, l, items, contLayoutRect, contPaddingBox, contSettings, align, pack, spacing, totalFlex, availableSpace, direction;\n var ctrl, ctrlLayoutRect, ctrlSettings, flex;\n var maxSizeItems = [];\n var size, maxSize, ratio, rect, pos, maxAlignEndPos;\n var sizeName, minSizeName, posName, maxSizeName, beforeName, innerSizeName, deltaSizeName, contentSizeName;\n var alignAxisName, alignInnerSizeName, alignSizeName, alignMinSizeName, alignBeforeName, alignAfterName;\n var alignDeltaSizeName, alignContentSizeName;\n var max = Math.max, min = Math.min;\n items = container.items().filter(':visible');\n contLayoutRect = container.layoutRect();\n contPaddingBox = container.paddingBox;\n contSettings = container.settings;\n direction = container.isRtl() ? contSettings.direction || 'row-reversed' : contSettings.direction;\n align = contSettings.align;\n pack = container.isRtl() ? contSettings.pack || 'end' : contSettings.pack;\n spacing = contSettings.spacing || 0;\n if (direction === 'row-reversed' || direction === 'column-reverse') {\n items = items.set(items.toArray().reverse());\n direction = direction.split('-')[0];\n }\n if (direction === 'column') {\n posName = 'y';\n sizeName = 'h';\n minSizeName = 'minH';\n maxSizeName = 'maxH';\n innerSizeName = 'innerH';\n beforeName = 'top';\n deltaSizeName = 'deltaH';\n contentSizeName = 'contentH';\n alignBeforeName = 'left';\n alignSizeName = 'w';\n alignAxisName = 'x';\n alignInnerSizeName = 'innerW';\n alignMinSizeName = 'minW';\n alignAfterName = 'right';\n alignDeltaSizeName = 'deltaW';\n alignContentSizeName = 'contentW';\n } else {\n posName = 'x';\n sizeName = 'w';\n minSizeName = 'minW';\n maxSizeName = 'maxW';\n innerSizeName = 'innerW';\n beforeName = 'left';\n deltaSizeName = 'deltaW';\n contentSizeName = 'contentW';\n alignBeforeName = 'top';\n alignSizeName = 'h';\n alignAxisName = 'y';\n alignInnerSizeName = 'innerH';\n alignMinSizeName = 'minH';\n alignAfterName = 'bottom';\n alignDeltaSizeName = 'deltaH';\n alignContentSizeName = 'contentH';\n }\n availableSpace = contLayoutRect[innerSizeName] - contPaddingBox[beforeName] - contPaddingBox[beforeName];\n maxAlignEndPos = totalFlex = 0;\n for (i = 0, l = items.length; i < l; i++) {\n ctrl = items[i];\n ctrlLayoutRect = ctrl.layoutRect();\n ctrlSettings = ctrl.settings;\n flex = ctrlSettings.flex;\n availableSpace -= i < l - 1 ? spacing : 0;\n if (flex > 0) {\n totalFlex += flex;\n if (ctrlLayoutRect[maxSizeName]) {\n maxSizeItems.push(ctrl);\n }\n ctrlLayoutRect.flex = flex;\n }\n availableSpace -= ctrlLayoutRect[minSizeName];\n size = contPaddingBox[alignBeforeName] + ctrlLayoutRect[alignMinSizeName] + contPaddingBox[alignAfterName];\n if (size > maxAlignEndPos) {\n maxAlignEndPos = size;\n }\n }\n rect = {};\n if (availableSpace < 0) {\n rect[minSizeName] = contLayoutRect[minSizeName] - availableSpace + contLayoutRect[deltaSizeName];\n } else {\n rect[minSizeName] = contLayoutRect[innerSizeName] - availableSpace + contLayoutRect[deltaSizeName];\n }\n rect[alignMinSizeName] = maxAlignEndPos + contLayoutRect[alignDeltaSizeName];\n rect[contentSizeName] = contLayoutRect[innerSizeName] - availableSpace;\n rect[alignContentSizeName] = maxAlignEndPos;\n rect.minW = min(rect.minW, contLayoutRect.maxW);\n rect.minH = min(rect.minH, contLayoutRect.maxH);\n rect.minW = max(rect.minW, contLayoutRect.startMinWidth);\n rect.minH = max(rect.minH, contLayoutRect.startMinHeight);\n if (contLayoutRect.autoResize && (rect.minW !== contLayoutRect.minW || rect.minH !== contLayoutRect.minH)) {\n rect.w = rect.minW;\n rect.h = rect.minH;\n container.layoutRect(rect);\n this.recalc(container);\n if (container._lastRect === null) {\n var parentCtrl = container.parent();\n if (parentCtrl) {\n parentCtrl._lastRect = null;\n parentCtrl.recalc();\n }\n }\n return;\n }\n ratio = availableSpace / totalFlex;\n for (i = 0, l = maxSizeItems.length; i < l; i++) {\n ctrl = maxSizeItems[i];\n ctrlLayoutRect = ctrl.layoutRect();\n maxSize = ctrlLayoutRect[maxSizeName];\n size = ctrlLayoutRect[minSizeName] + ctrlLayoutRect.flex * ratio;\n if (size > maxSize) {\n availableSpace -= ctrlLayoutRect[maxSizeName] - ctrlLayoutRect[minSizeName];\n totalFlex -= ctrlLayoutRect.flex;\n ctrlLayoutRect.flex = 0;\n ctrlLayoutRect.maxFlexSize = maxSize;\n } else {\n ctrlLayoutRect.maxFlexSize = 0;\n }\n }\n ratio = availableSpace / totalFlex;\n pos = contPaddingBox[beforeName];\n rect = {};\n if (totalFlex === 0) {\n if (pack === 'end') {\n pos = availableSpace + contPaddingBox[beforeName];\n } else if (pack === 'center') {\n pos = Math.round(contLayoutRect[innerSizeName] / 2 - (contLayoutRect[innerSizeName] - availableSpace) / 2) + contPaddingBox[beforeName];\n if (pos < 0) {\n pos = contPaddingBox[beforeName];\n }\n } else if (pack === 'justify') {\n pos = contPaddingBox[beforeName];\n spacing = Math.floor(availableSpace / (items.length - 1));\n }\n }\n rect[alignAxisName] = contPaddingBox[alignBeforeName];\n for (i = 0, l = items.length; i < l; i++) {\n ctrl = items[i];\n ctrlLayoutRect = ctrl.layoutRect();\n size = ctrlLayoutRect.maxFlexSize || ctrlLayoutRect[minSizeName];\n if (align === 'center') {\n rect[alignAxisName] = Math.round(contLayoutRect[alignInnerSizeName] / 2 - ctrlLayoutRect[alignSizeName] / 2);\n } else if (align === 'stretch') {\n rect[alignSizeName] = max(ctrlLayoutRect[alignMinSizeName] || 0, contLayoutRect[alignInnerSizeName] - contPaddingBox[alignBeforeName] - contPaddingBox[alignAfterName]);\n rect[alignAxisName] = contPaddingBox[alignBeforeName];\n } else if (align === 'end') {\n rect[alignAxisName] = contLayoutRect[alignInnerSizeName] - ctrlLayoutRect[alignSizeName] - contPaddingBox.top;\n }\n if (ctrlLayoutRect.flex > 0) {\n size += ctrlLayoutRect.flex * ratio;\n }\n rect[sizeName] = size;\n rect[posName] = pos;\n ctrl.layoutRect(rect);\n if (ctrl.recalc) {\n ctrl.recalc();\n }\n pos += size + spacing;\n }\n }\n });\n\n var FlowLayout = Layout.extend({\n Defaults: {\n containerClass: 'flow-layout',\n controlClass: 'flow-layout-item',\n endClass: 'break'\n },\n recalc: function (container) {\n container.items().filter(':visible').each(function (ctrl) {\n if (ctrl.recalc) {\n ctrl.recalc();\n }\n });\n },\n isNative: function () {\n return true;\n }\n });\n\n var descendant = function (scope, selector) {\n return one(selector, scope);\n };\n\n var toggleFormat = function (editor, fmt) {\n return function () {\n editor.execCommand('mceToggleFormat', false, fmt);\n };\n };\n var addFormatChangedListener = function (editor, name, changed) {\n var handler = function (state) {\n changed(state, name);\n };\n if (editor.formatter) {\n editor.formatter.formatChanged(name, handler);\n } else {\n editor.on('init', function () {\n editor.formatter.formatChanged(name, handler);\n });\n }\n };\n var postRenderFormatToggle = function (editor, name) {\n return function (e) {\n addFormatChangedListener(editor, name, function (state) {\n e.control.active(state);\n });\n };\n };\n\n var register = function (editor) {\n var alignFormats = [\n 'alignleft',\n 'aligncenter',\n 'alignright',\n 'alignjustify'\n ];\n var defaultAlign = 'alignleft';\n var alignMenuItems = [\n {\n text: 'Left',\n icon: 'alignleft',\n onclick: toggleFormat(editor, 'alignleft')\n },\n {\n text: 'Center',\n icon: 'aligncenter',\n onclick: toggleFormat(editor, 'aligncenter')\n },\n {\n text: 'Right',\n icon: 'alignright',\n onclick: toggleFormat(editor, 'alignright')\n },\n {\n text: 'Justify',\n icon: 'alignjustify',\n onclick: toggleFormat(editor, 'alignjustify')\n }\n ];\n editor.addMenuItem('align', {\n text: 'Align',\n menu: alignMenuItems\n });\n editor.addButton('align', {\n type: 'menubutton',\n icon: defaultAlign,\n menu: alignMenuItems,\n onShowMenu: function (e) {\n var menu = e.control.menu;\n global$2.each(alignFormats, function (formatName, idx) {\n menu.items().eq(idx).each(function (item) {\n return item.active(editor.formatter.match(formatName));\n });\n });\n },\n onPostRender: function (e) {\n var ctrl = e.control;\n global$2.each(alignFormats, function (formatName, idx) {\n addFormatChangedListener(editor, formatName, function (state) {\n ctrl.icon(defaultAlign);\n if (state) {\n ctrl.icon(formatName);\n }\n });\n });\n }\n });\n global$2.each({\n alignleft: [\n 'Align left',\n 'JustifyLeft'\n ],\n aligncenter: [\n 'Align center',\n 'JustifyCenter'\n ],\n alignright: [\n 'Align right',\n 'JustifyRight'\n ],\n alignjustify: [\n 'Justify',\n 'JustifyFull'\n ],\n alignnone: [\n 'No alignment',\n 'JustifyNone'\n ]\n }, function (item, name) {\n editor.addButton(name, {\n active: false,\n tooltip: item[0],\n cmd: item[1],\n onPostRender: postRenderFormatToggle(editor, name)\n });\n });\n };\n var Align = { register: register };\n\n var getFirstFont = function (fontFamily) {\n return fontFamily ? fontFamily.split(',')[0] : '';\n };\n var findMatchingValue = function (items, fontFamily) {\n var font = fontFamily ? fontFamily.toLowerCase() : '';\n var value;\n global$2.each(items, function (item) {\n if (item.value.toLowerCase() === font) {\n value = item.value;\n }\n });\n global$2.each(items, function (item) {\n if (!value && getFirstFont(item.value).toLowerCase() === getFirstFont(font).toLowerCase()) {\n value = item.value;\n }\n });\n return value;\n };\n var createFontNameListBoxChangeHandler = function (editor, items) {\n return function () {\n var self = this;\n self.state.set('value', null);\n editor.on('init nodeChange', function (e) {\n var fontFamily = editor.queryCommandValue('FontName');\n var match = findMatchingValue(items, fontFamily);\n self.value(match ? match : null);\n if (!match && fontFamily) {\n self.text(getFirstFont(fontFamily));\n }\n });\n };\n };\n var createFormats = function (formats) {\n formats = formats.replace(/;$/, '').split(';');\n var i = formats.length;\n while (i--) {\n formats[i] = formats[i].split('=');\n }\n return formats;\n };\n var getFontItems = function (editor) {\n var defaultFontsFormats = 'Andale Mono=andale mono,monospace;' + 'Arial=arial,helvetica,sans-serif;' + 'Arial Black=arial black,sans-serif;' + 'Book Antiqua=book antiqua,palatino,serif;' + 'Comic Sans MS=comic sans ms,sans-serif;' + 'Courier New=courier new,courier,monospace;' + 'Georgia=georgia,palatino,serif;' + 'Helvetica=helvetica,arial,sans-serif;' + 'Impact=impact,sans-serif;' + 'Symbol=symbol;' + 'Tahoma=tahoma,arial,helvetica,sans-serif;' + 'Terminal=terminal,monaco,monospace;' + 'Times New Roman=times new roman,times,serif;' + 'Trebuchet MS=trebuchet ms,geneva,sans-serif;' + 'Verdana=verdana,geneva,sans-serif;' + 'Webdings=webdings;' + 'Wingdings=wingdings,zapf dingbats';\n var fonts = createFormats(editor.settings.font_formats || defaultFontsFormats);\n return global$2.map(fonts, function (font) {\n return {\n text: { raw: font[0] },\n value: font[1],\n textStyle: font[1].indexOf('dings') === -1 ? 'font-family:' + font[1] : ''\n };\n });\n };\n var registerButtons = function (editor) {\n editor.addButton('fontselect', function () {\n var items = getFontItems(editor);\n return {\n type: 'listbox',\n text: 'Font Family',\n tooltip: 'Font Family',\n values: items,\n fixedWidth: true,\n onPostRender: createFontNameListBoxChangeHandler(editor, items),\n onselect: function (e) {\n if (e.control.settings.value) {\n editor.execCommand('FontName', false, e.control.settings.value);\n }\n }\n };\n });\n };\n var register$1 = function (editor) {\n registerButtons(editor);\n };\n var FontSelect = { register: register$1 };\n\n var round = function (number, precision) {\n var factor = Math.pow(10, precision);\n return Math.round(number * factor) / factor;\n };\n var toPt = function (fontSize, precision) {\n if (/[0-9.]+px$/.test(fontSize)) {\n return round(parseInt(fontSize, 10) * 72 / 96, precision || 0) + 'pt';\n }\n return fontSize;\n };\n var findMatchingValue$1 = function (items, pt, px) {\n var value;\n global$2.each(items, function (item) {\n if (item.value === px) {\n value = px;\n } else if (item.value === pt) {\n value = pt;\n }\n });\n return value;\n };\n var createFontSizeListBoxChangeHandler = function (editor, items) {\n return function () {\n var self = this;\n editor.on('init nodeChange', function (e) {\n var px, pt, precision, match;\n px = editor.queryCommandValue('FontSize');\n if (px) {\n for (precision = 3; !match && precision >= 0; precision--) {\n pt = toPt(px, precision);\n match = findMatchingValue$1(items, pt, px);\n }\n }\n self.value(match ? match : null);\n if (!match) {\n self.text(pt);\n }\n });\n };\n };\n var getFontSizeItems = function (editor) {\n var defaultFontsizeFormats = '8pt 10pt 12pt 14pt 18pt 24pt 36pt';\n var fontsizeFormats = editor.settings.fontsize_formats || defaultFontsizeFormats;\n return global$2.map(fontsizeFormats.split(' '), function (item) {\n var text = item, value = item;\n var values = item.split('=');\n if (values.length > 1) {\n text = values[0];\n value = values[1];\n }\n return {\n text: text,\n value: value\n };\n });\n };\n var registerButtons$1 = function (editor) {\n editor.addButton('fontsizeselect', function () {\n var items = getFontSizeItems(editor);\n return {\n type: 'listbox',\n text: 'Font Sizes',\n tooltip: 'Font Sizes',\n values: items,\n fixedWidth: true,\n onPostRender: createFontSizeListBoxChangeHandler(editor, items),\n onclick: function (e) {\n if (e.control.settings.value) {\n editor.execCommand('FontSize', false, e.control.settings.value);\n }\n }\n };\n });\n };\n var register$2 = function (editor) {\n registerButtons$1(editor);\n };\n var FontSizeSelect = { register: register$2 };\n\n var hideMenuObjects = function (editor, menu) {\n var count = menu.length;\n global$2.each(menu, function (item) {\n if (item.menu) {\n item.hidden = hideMenuObjects(editor, item.menu) === 0;\n }\n var formatName = item.format;\n if (formatName) {\n item.hidden = !editor.formatter.canApply(formatName);\n }\n if (item.hidden) {\n count--;\n }\n });\n return count;\n };\n var hideFormatMenuItems = function (editor, menu) {\n var count = menu.items().length;\n menu.items().each(function (item) {\n if (item.menu) {\n item.visible(hideFormatMenuItems(editor, item.menu) > 0);\n }\n if (!item.menu && item.settings.menu) {\n item.visible(hideMenuObjects(editor, item.settings.menu) > 0);\n }\n var formatName = item.settings.format;\n if (formatName) {\n item.visible(editor.formatter.canApply(formatName));\n }\n if (!item.visible()) {\n count--;\n }\n });\n return count;\n };\n var createFormatMenu = function (editor) {\n var count = 0;\n var newFormats = [];\n var defaultStyleFormats = [\n {\n title: 'Headings',\n items: [\n {\n title: 'Heading 1',\n format: 'h1'\n },\n {\n title: 'Heading 2',\n format: 'h2'\n },\n {\n title: 'Heading 3',\n format: 'h3'\n },\n {\n title: 'Heading 4',\n format: 'h4'\n },\n {\n title: 'Heading 5',\n format: 'h5'\n },\n {\n title: 'Heading 6',\n format: 'h6'\n }\n ]\n },\n {\n title: 'Inline',\n items: [\n {\n title: 'Bold',\n icon: 'bold',\n format: 'bold'\n },\n {\n title: 'Italic',\n icon: 'italic',\n format: 'italic'\n },\n {\n title: 'Underline',\n icon: 'underline',\n format: 'underline'\n },\n {\n title: 'Strikethrough',\n icon: 'strikethrough',\n format: 'strikethrough'\n },\n {\n title: 'Superscript',\n icon: 'superscript',\n format: 'superscript'\n },\n {\n title: 'Subscript',\n icon: 'subscript',\n format: 'subscript'\n },\n {\n title: 'Code',\n icon: 'code',\n format: 'code'\n }\n ]\n },\n {\n title: 'Blocks',\n items: [\n {\n title: 'Paragraph',\n format: 'p'\n },\n {\n title: 'Blockquote',\n format: 'blockquote'\n },\n {\n title: 'Div',\n format: 'div'\n },\n {\n title: 'Pre',\n format: 'pre'\n }\n ]\n },\n {\n title: 'Alignment',\n items: [\n {\n title: 'Left',\n icon: 'alignleft',\n format: 'alignleft'\n },\n {\n title: 'Center',\n icon: 'aligncenter',\n format: 'aligncenter'\n },\n {\n title: 'Right',\n icon: 'alignright',\n format: 'alignright'\n },\n {\n title: 'Justify',\n icon: 'alignjustify',\n format: 'alignjustify'\n }\n ]\n }\n ];\n var createMenu = function (formats) {\n var menu = [];\n if (!formats) {\n return;\n }\n global$2.each(formats, function (format) {\n var menuItem = {\n text: format.title,\n icon: format.icon\n };\n if (format.items) {\n menuItem.menu = createMenu(format.items);\n } else {\n var formatName = format.format || 'custom' + count++;\n if (!format.format) {\n format.name = formatName;\n newFormats.push(format);\n }\n menuItem.format = formatName;\n menuItem.cmd = format.cmd;\n }\n menu.push(menuItem);\n });\n return menu;\n };\n var createStylesMenu = function () {\n var menu;\n if (editor.settings.style_formats_merge) {\n if (editor.settings.style_formats) {\n menu = createMenu(defaultStyleFormats.concat(editor.settings.style_formats));\n } else {\n menu = createMenu(defaultStyleFormats);\n }\n } else {\n menu = createMenu(editor.settings.style_formats || defaultStyleFormats);\n }\n return menu;\n };\n editor.on('init', function () {\n global$2.each(newFormats, function (format) {\n editor.formatter.register(format.name, format);\n });\n });\n return {\n type: 'menu',\n items: createStylesMenu(),\n onPostRender: function (e) {\n editor.fire('renderFormatsMenu', { control: e.control });\n },\n itemDefaults: {\n preview: true,\n textStyle: function () {\n if (this.settings.format) {\n return editor.formatter.getCssText(this.settings.format);\n }\n },\n onPostRender: function () {\n var self = this;\n self.parent().on('show', function () {\n var formatName, command;\n formatName = self.settings.format;\n if (formatName) {\n self.disabled(!editor.formatter.canApply(formatName));\n self.active(editor.formatter.match(formatName));\n }\n command = self.settings.cmd;\n if (command) {\n self.active(editor.queryCommandState(command));\n }\n });\n },\n onclick: function () {\n if (this.settings.format) {\n toggleFormat(editor, this.settings.format)();\n }\n if (this.settings.cmd) {\n editor.execCommand(this.settings.cmd);\n }\n }\n }\n };\n };\n var registerMenuItems = function (editor, formatMenu) {\n editor.addMenuItem('formats', {\n text: 'Formats',\n menu: formatMenu\n });\n };\n var registerButtons$2 = function (editor, formatMenu) {\n editor.addButton('styleselect', {\n type: 'menubutton',\n text: 'Formats',\n menu: formatMenu,\n onShowMenu: function () {\n if (editor.settings.style_formats_autohide) {\n hideFormatMenuItems(editor, this.menu);\n }\n }\n });\n };\n var register$3 = function (editor) {\n var formatMenu = createFormatMenu(editor);\n registerMenuItems(editor, formatMenu);\n registerButtons$2(editor, formatMenu);\n };\n var Formats = { register: register$3 };\n\n var defaultBlocks = 'Paragraph=p;' + 'Heading 1=h1;' + 'Heading 2=h2;' + 'Heading 3=h3;' + 'Heading 4=h4;' + 'Heading 5=h5;' + 'Heading 6=h6;' + 'Preformatted=pre';\n var createFormats$1 = function (formats) {\n formats = formats.replace(/;$/, '').split(';');\n var i = formats.length;\n while (i--) {\n formats[i] = formats[i].split('=');\n }\n return formats;\n };\n var createListBoxChangeHandler = function (editor, items, formatName) {\n return function () {\n var self = this;\n editor.on('nodeChange', function (e) {\n var formatter = editor.formatter;\n var value = null;\n global$2.each(e.parents, function (node) {\n global$2.each(items, function (item) {\n if (formatName) {\n if (formatter.matchNode(node, formatName, { value: item.value })) {\n value = item.value;\n }\n } else {\n if (formatter.matchNode(node, item.value)) {\n value = item.value;\n }\n }\n if (value) {\n return false;\n }\n });\n if (value) {\n return false;\n }\n });\n self.value(value);\n });\n };\n };\n var lazyFormatSelectBoxItems = function (editor, blocks) {\n return function () {\n var items = [];\n global$2.each(blocks, function (block) {\n items.push({\n text: block[0],\n value: block[1],\n textStyle: function () {\n return editor.formatter.getCssText(block[1]);\n }\n });\n });\n return {\n type: 'listbox',\n text: blocks[0][0],\n values: items,\n fixedWidth: true,\n onselect: function (e) {\n if (e.control) {\n var fmt = e.control.value();\n toggleFormat(editor, fmt)();\n }\n },\n onPostRender: createListBoxChangeHandler(editor, items)\n };\n };\n };\n var buildMenuItems = function (editor, blocks) {\n return global$2.map(blocks, function (block) {\n return {\n text: block[0],\n onclick: toggleFormat(editor, block[1]),\n textStyle: function () {\n return editor.formatter.getCssText(block[1]);\n }\n };\n });\n };\n var register$4 = function (editor) {\n var blocks = createFormats$1(editor.settings.block_formats || defaultBlocks);\n editor.addMenuItem('blockformats', {\n text: 'Blocks',\n menu: buildMenuItems(editor, blocks)\n });\n editor.addButton('formatselect', lazyFormatSelectBoxItems(editor, blocks));\n };\n var FormatSelect = { register: register$4 };\n\n var createCustomMenuItems = function (editor, names) {\n var items, nameList;\n if (typeof names === 'string') {\n nameList = names.split(' ');\n } else if (global$2.isArray(names)) {\n return flatten(global$2.map(names, function (names) {\n return createCustomMenuItems(editor, names);\n }));\n }\n items = global$2.grep(nameList, function (name) {\n return name === '|' || name in editor.menuItems;\n });\n return global$2.map(items, function (name) {\n return name === '|' ? { text: '-' } : editor.menuItems[name];\n });\n };\n var isSeparator$1 = function (menuItem) {\n return menuItem && menuItem.text === '-';\n };\n var trimMenuItems = function (menuItems) {\n var menuItems2 = filter(menuItems, function (menuItem, i) {\n return !isSeparator$1(menuItem) || !isSeparator$1(menuItems[i - 1]);\n });\n return filter(menuItems2, function (menuItem, i) {\n return !isSeparator$1(menuItem) || i > 0 && i < menuItems2.length - 1;\n });\n };\n var createContextMenuItems = function (editor, context) {\n var outputMenuItems = [{ text: '-' }];\n var menuItems = global$2.grep(editor.menuItems, function (menuItem) {\n return menuItem.context === context;\n });\n global$2.each(menuItems, function (menuItem) {\n if (menuItem.separator === 'before') {\n outputMenuItems.push({ text: '|' });\n }\n if (menuItem.prependToContext) {\n outputMenuItems.unshift(menuItem);\n } else {\n outputMenuItems.push(menuItem);\n }\n if (menuItem.separator === 'after') {\n outputMenuItems.push({ text: '|' });\n }\n });\n return outputMenuItems;\n };\n var createInsertMenu = function (editor) {\n var insertButtonItems = editor.settings.insert_button_items;\n if (insertButtonItems) {\n return trimMenuItems(createCustomMenuItems(editor, insertButtonItems));\n } else {\n return trimMenuItems(createContextMenuItems(editor, 'insert'));\n }\n };\n var registerButtons$3 = function (editor) {\n editor.addButton('insert', {\n type: 'menubutton',\n icon: 'insert',\n menu: [],\n oncreatemenu: function () {\n this.menu.add(createInsertMenu(editor));\n this.menu.renderNew();\n }\n });\n };\n var register$5 = function (editor) {\n registerButtons$3(editor);\n };\n var InsertButton = { register: register$5 };\n\n var registerFormatButtons = function (editor) {\n global$2.each({\n bold: 'Bold',\n italic: 'Italic',\n underline: 'Underline',\n strikethrough: 'Strikethrough',\n subscript: 'Subscript',\n superscript: 'Superscript'\n }, function (text, name) {\n editor.addButton(name, {\n active: false,\n tooltip: text,\n onPostRender: postRenderFormatToggle(editor, name),\n onclick: toggleFormat(editor, name)\n });\n });\n };\n var registerCommandButtons = function (editor) {\n global$2.each({\n outdent: [\n 'Decrease indent',\n 'Outdent'\n ],\n indent: [\n 'Increase indent',\n 'Indent'\n ],\n cut: [\n 'Cut',\n 'Cut'\n ],\n copy: [\n 'Copy',\n 'Copy'\n ],\n paste: [\n 'Paste',\n 'Paste'\n ],\n help: [\n 'Help',\n 'mceHelp'\n ],\n selectall: [\n 'Select all',\n 'SelectAll'\n ],\n visualaid: [\n 'Visual aids',\n 'mceToggleVisualAid'\n ],\n newdocument: [\n 'New document',\n 'mceNewDocument'\n ],\n removeformat: [\n 'Clear formatting',\n 'RemoveFormat'\n ],\n remove: [\n 'Remove',\n 'Delete'\n ]\n }, function (item, name) {\n editor.addButton(name, {\n tooltip: item[0],\n cmd: item[1]\n });\n });\n };\n var registerCommandToggleButtons = function (editor) {\n global$2.each({\n blockquote: [\n 'Blockquote',\n 'mceBlockQuote'\n ],\n subscript: [\n 'Subscript',\n 'Subscript'\n ],\n superscript: [\n 'Superscript',\n 'Superscript'\n ]\n }, function (item, name) {\n editor.addButton(name, {\n active: false,\n tooltip: item[0],\n cmd: item[1],\n onPostRender: postRenderFormatToggle(editor, name)\n });\n });\n };\n var registerButtons$4 = function (editor) {\n registerFormatButtons(editor);\n registerCommandButtons(editor);\n registerCommandToggleButtons(editor);\n };\n var registerMenuItems$1 = function (editor) {\n global$2.each({\n bold: [\n 'Bold',\n 'Bold',\n 'Meta+B'\n ],\n italic: [\n 'Italic',\n 'Italic',\n 'Meta+I'\n ],\n underline: [\n 'Underline',\n 'Underline',\n 'Meta+U'\n ],\n strikethrough: [\n 'Strikethrough',\n 'Strikethrough'\n ],\n subscript: [\n 'Subscript',\n 'Subscript'\n ],\n superscript: [\n 'Superscript',\n 'Superscript'\n ],\n removeformat: [\n 'Clear formatting',\n 'RemoveFormat'\n ],\n newdocument: [\n 'New document',\n 'mceNewDocument'\n ],\n cut: [\n 'Cut',\n 'Cut',\n 'Meta+X'\n ],\n copy: [\n 'Copy',\n 'Copy',\n 'Meta+C'\n ],\n paste: [\n 'Paste',\n 'Paste',\n 'Meta+V'\n ],\n selectall: [\n 'Select all',\n 'SelectAll',\n 'Meta+A'\n ]\n }, function (item, name) {\n editor.addMenuItem(name, {\n text: item[0],\n icon: name,\n shortcut: item[2],\n cmd: item[1]\n });\n });\n editor.addMenuItem('codeformat', {\n text: 'Code',\n icon: 'code',\n onclick: toggleFormat(editor, 'code')\n });\n };\n var register$6 = function (editor) {\n registerButtons$4(editor);\n registerMenuItems$1(editor);\n };\n var SimpleControls = { register: register$6 };\n\n var toggleUndoRedoState = function (editor, type) {\n return function () {\n var self = this;\n var checkState = function () {\n var typeFn = type === 'redo' ? 'hasRedo' : 'hasUndo';\n return editor.undoManager ? editor.undoManager[typeFn]() : false;\n };\n self.disabled(!checkState());\n editor.on('Undo Redo AddUndo TypingUndo ClearUndos SwitchMode', function () {\n self.disabled(editor.readonly || !checkState());\n });\n };\n };\n var registerMenuItems$2 = function (editor) {\n editor.addMenuItem('undo', {\n text: 'Undo',\n icon: 'undo',\n shortcut: 'Meta+Z',\n onPostRender: toggleUndoRedoState(editor, 'undo'),\n cmd: 'undo'\n });\n editor.addMenuItem('redo', {\n text: 'Redo',\n icon: 'redo',\n shortcut: 'Meta+Y',\n onPostRender: toggleUndoRedoState(editor, 'redo'),\n cmd: 'redo'\n });\n };\n var registerButtons$5 = function (editor) {\n editor.addButton('undo', {\n tooltip: 'Undo',\n onPostRender: toggleUndoRedoState(editor, 'undo'),\n cmd: 'undo'\n });\n editor.addButton('redo', {\n tooltip: 'Redo',\n onPostRender: toggleUndoRedoState(editor, 'redo'),\n cmd: 'redo'\n });\n };\n var register$7 = function (editor) {\n registerMenuItems$2(editor);\n registerButtons$5(editor);\n };\n var UndoRedo = { register: register$7 };\n\n var toggleVisualAidState = function (editor) {\n return function () {\n var self = this;\n editor.on('VisualAid', function (e) {\n self.active(e.hasVisual);\n });\n self.active(editor.hasVisual);\n };\n };\n var registerMenuItems$3 = function (editor) {\n editor.addMenuItem('visualaid', {\n text: 'Visual aids',\n selectable: true,\n onPostRender: toggleVisualAidState(editor),\n cmd: 'mceToggleVisualAid'\n });\n };\n var register$8 = function (editor) {\n registerMenuItems$3(editor);\n };\n var VisualAid = { register: register$8 };\n\n var setupEnvironment = function () {\n Widget.tooltips = !global$8.iOS;\n Control$1.translate = function (text) {\n return global$1.translate(text);\n };\n };\n var setupUiContainer = function (editor) {\n if (editor.settings.ui_container) {\n global$8.container = descendant(Element.fromDom(domGlobals.document.body), editor.settings.ui_container).fold(constant(null), function (elm) {\n return elm.dom();\n });\n }\n };\n var setupRtlMode = function (editor) {\n if (editor.rtl) {\n Control$1.rtl = true;\n }\n };\n var setupHideFloatPanels = function (editor) {\n editor.on('mousedown progressstate', function () {\n FloatPanel.hideAll();\n });\n };\n var setup$1 = function (editor) {\n setupRtlMode(editor);\n setupHideFloatPanels(editor);\n setupUiContainer(editor);\n setupEnvironment();\n FormatSelect.register(editor);\n Align.register(editor);\n SimpleControls.register(editor);\n UndoRedo.register(editor);\n FontSizeSelect.register(editor);\n FontSelect.register(editor);\n Formats.register(editor);\n VisualAid.register(editor);\n InsertButton.register(editor);\n };\n var FormatControls = { setup: setup$1 };\n\n var GridLayout = AbsoluteLayout.extend({\n recalc: function (container) {\n var settings, rows, cols, items, contLayoutRect, width, height, rect, ctrlLayoutRect, ctrl, x, y, posX, posY, ctrlSettings, contPaddingBox, align, spacingH, spacingV, alignH, alignV, maxX, maxY;\n var colWidths = [];\n var rowHeights = [];\n var ctrlMinWidth, ctrlMinHeight, availableWidth, availableHeight, reverseRows, idx;\n settings = container.settings;\n items = container.items().filter(':visible');\n contLayoutRect = container.layoutRect();\n cols = settings.columns || Math.ceil(Math.sqrt(items.length));\n rows = Math.ceil(items.length / cols);\n spacingH = settings.spacingH || settings.spacing || 0;\n spacingV = settings.spacingV || settings.spacing || 0;\n alignH = settings.alignH || settings.align;\n alignV = settings.alignV || settings.align;\n contPaddingBox = container.paddingBox;\n reverseRows = 'reverseRows' in settings ? settings.reverseRows : container.isRtl();\n if (alignH && typeof alignH === 'string') {\n alignH = [alignH];\n }\n if (alignV && typeof alignV === 'string') {\n alignV = [alignV];\n }\n for (x = 0; x < cols; x++) {\n colWidths.push(0);\n }\n for (y = 0; y < rows; y++) {\n rowHeights.push(0);\n }\n for (y = 0; y < rows; y++) {\n for (x = 0; x < cols; x++) {\n ctrl = items[y * cols + x];\n if (!ctrl) {\n break;\n }\n ctrlLayoutRect = ctrl.layoutRect();\n ctrlMinWidth = ctrlLayoutRect.minW;\n ctrlMinHeight = ctrlLayoutRect.minH;\n colWidths[x] = ctrlMinWidth > colWidths[x] ? ctrlMinWidth : colWidths[x];\n rowHeights[y] = ctrlMinHeight > rowHeights[y] ? ctrlMinHeight : rowHeights[y];\n }\n }\n availableWidth = contLayoutRect.innerW - contPaddingBox.left - contPaddingBox.right;\n for (maxX = 0, x = 0; x < cols; x++) {\n maxX += colWidths[x] + (x > 0 ? spacingH : 0);\n availableWidth -= (x > 0 ? spacingH : 0) + colWidths[x];\n }\n availableHeight = contLayoutRect.innerH - contPaddingBox.top - contPaddingBox.bottom;\n for (maxY = 0, y = 0; y < rows; y++) {\n maxY += rowHeights[y] + (y > 0 ? spacingV : 0);\n availableHeight -= (y > 0 ? spacingV : 0) + rowHeights[y];\n }\n maxX += contPaddingBox.left + contPaddingBox.right;\n maxY += contPaddingBox.top + contPaddingBox.bottom;\n rect = {};\n rect.minW = maxX + (contLayoutRect.w - contLayoutRect.innerW);\n rect.minH = maxY + (contLayoutRect.h - contLayoutRect.innerH);\n rect.contentW = rect.minW - contLayoutRect.deltaW;\n rect.contentH = rect.minH - contLayoutRect.deltaH;\n rect.minW = Math.min(rect.minW, contLayoutRect.maxW);\n rect.minH = Math.min(rect.minH, contLayoutRect.maxH);\n rect.minW = Math.max(rect.minW, contLayoutRect.startMinWidth);\n rect.minH = Math.max(rect.minH, contLayoutRect.startMinHeight);\n if (contLayoutRect.autoResize && (rect.minW !== contLayoutRect.minW || rect.minH !== contLayoutRect.minH)) {\n rect.w = rect.minW;\n rect.h = rect.minH;\n container.layoutRect(rect);\n this.recalc(container);\n if (container._lastRect === null) {\n var parentCtrl = container.parent();\n if (parentCtrl) {\n parentCtrl._lastRect = null;\n parentCtrl.recalc();\n }\n }\n return;\n }\n if (contLayoutRect.autoResize) {\n rect = container.layoutRect(rect);\n rect.contentW = rect.minW - contLayoutRect.deltaW;\n rect.contentH = rect.minH - contLayoutRect.deltaH;\n }\n var flexV;\n if (settings.packV === 'start') {\n flexV = 0;\n } else {\n flexV = availableHeight > 0 ? Math.floor(availableHeight / rows) : 0;\n }\n var totalFlex = 0;\n var flexWidths = settings.flexWidths;\n if (flexWidths) {\n for (x = 0; x < flexWidths.length; x++) {\n totalFlex += flexWidths[x];\n }\n } else {\n totalFlex = cols;\n }\n var ratio = availableWidth / totalFlex;\n for (x = 0; x < cols; x++) {\n colWidths[x] += flexWidths ? flexWidths[x] * ratio : ratio;\n }\n posY = contPaddingBox.top;\n for (y = 0; y < rows; y++) {\n posX = contPaddingBox.left;\n height = rowHeights[y] + flexV;\n for (x = 0; x < cols; x++) {\n if (reverseRows) {\n idx = y * cols + cols - 1 - x;\n } else {\n idx = y * cols + x;\n }\n ctrl = items[idx];\n if (!ctrl) {\n break;\n }\n ctrlSettings = ctrl.settings;\n ctrlLayoutRect = ctrl.layoutRect();\n width = Math.max(colWidths[x], ctrlLayoutRect.startMinWidth);\n ctrlLayoutRect.x = posX;\n ctrlLayoutRect.y = posY;\n align = ctrlSettings.alignH || (alignH ? alignH[x] || alignH[0] : null);\n if (align === 'center') {\n ctrlLayoutRect.x = posX + width / 2 - ctrlLayoutRect.w / 2;\n } else if (align === 'right') {\n ctrlLayoutRect.x = posX + width - ctrlLayoutRect.w;\n } else if (align === 'stretch') {\n ctrlLayoutRect.w = width;\n }\n align = ctrlSettings.alignV || (alignV ? alignV[x] || alignV[0] : null);\n if (align === 'center') {\n ctrlLayoutRect.y = posY + height / 2 - ctrlLayoutRect.h / 2;\n } else if (align === 'bottom') {\n ctrlLayoutRect.y = posY + height - ctrlLayoutRect.h;\n } else if (align === 'stretch') {\n ctrlLayoutRect.h = height;\n }\n ctrl.layoutRect(ctrlLayoutRect);\n posX += width + spacingH;\n if (ctrl.recalc) {\n ctrl.recalc();\n }\n }\n posY += height + spacingV;\n }\n }\n });\n\n var Iframe$1 = Widget.extend({\n renderHtml: function () {\n var self = this;\n self.classes.add('iframe');\n self.canFocus = false;\n return '';\n },\n src: function (src) {\n this.getEl().src = src;\n },\n html: function (html, callback) {\n var self = this, body = this.getEl().contentWindow.document.body;\n if (!body) {\n global$7.setTimeout(function () {\n self.html(html);\n });\n } else {\n body.innerHTML = html;\n if (callback) {\n callback();\n }\n }\n return this;\n }\n });\n\n var InfoBox = Widget.extend({\n init: function (settings) {\n var self = this;\n self._super(settings);\n self.classes.add('widget').add('infobox');\n self.canFocus = false;\n },\n severity: function (level) {\n this.classes.remove('error');\n this.classes.remove('warning');\n this.classes.remove('success');\n this.classes.add(level);\n },\n help: function (state) {\n this.state.set('help', state);\n },\n renderHtml: function () {\n var self = this, prefix = self.classPrefix;\n return '
' + '
' + self.encode(self.state.get('text')) + '' + '
' + '
';\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:text', function (e) {\n self.getEl('body').firstChild.data = self.encode(e.value);\n if (self.state.get('rendered')) {\n self.updateLayoutRect();\n }\n });\n self.state.on('change:help', function (e) {\n self.classes.toggle('has-help', e.value);\n if (self.state.get('rendered')) {\n self.updateLayoutRect();\n }\n });\n return self._super();\n }\n });\n\n var Label = Widget.extend({\n init: function (settings) {\n var self = this;\n self._super(settings);\n self.classes.add('widget').add('label');\n self.canFocus = false;\n if (settings.multiline) {\n self.classes.add('autoscroll');\n }\n if (settings.strong) {\n self.classes.add('strong');\n }\n },\n initLayoutRect: function () {\n var self = this, layoutRect = self._super();\n if (self.settings.multiline) {\n var size = funcs.getSize(self.getEl());\n if (size.width > layoutRect.maxW) {\n layoutRect.minW = layoutRect.maxW;\n self.classes.add('multiline');\n }\n self.getEl().style.width = layoutRect.minW + 'px';\n layoutRect.startMinH = layoutRect.h = layoutRect.minH = Math.min(layoutRect.maxH, funcs.getSize(self.getEl()).height);\n }\n return layoutRect;\n },\n repaint: function () {\n var self = this;\n if (!self.settings.multiline) {\n self.getEl().style.lineHeight = self.layoutRect().h + 'px';\n }\n return self._super();\n },\n severity: function (level) {\n this.classes.remove('error');\n this.classes.remove('warning');\n this.classes.remove('success');\n this.classes.add(level);\n },\n renderHtml: function () {\n var self = this;\n var targetCtrl, forName, forId = self.settings.forId;\n var text = self.settings.html ? self.settings.html : self.encode(self.state.get('text'));\n if (!forId && (forName = self.settings.forName)) {\n targetCtrl = self.getRoot().find('#' + forName)[0];\n if (targetCtrl) {\n forId = targetCtrl._id;\n }\n }\n if (forId) {\n return '';\n }\n return '' + text + '';\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:text', function (e) {\n self.innerHtml(self.encode(e.value));\n if (self.state.get('rendered')) {\n self.updateLayoutRect();\n }\n });\n return self._super();\n }\n });\n\n var Toolbar$1 = Container.extend({\n Defaults: {\n role: 'toolbar',\n layout: 'flow'\n },\n init: function (settings) {\n var self = this;\n self._super(settings);\n self.classes.add('toolbar');\n },\n postRender: function () {\n var self = this;\n self.items().each(function (ctrl) {\n ctrl.classes.add('toolbar-item');\n });\n return self._super();\n }\n });\n\n var MenuBar = Toolbar$1.extend({\n Defaults: {\n role: 'menubar',\n containerCls: 'menubar',\n ariaRoot: true,\n defaults: { type: 'menubutton' }\n }\n });\n\n function isChildOf$1(node, parent) {\n while (node) {\n if (parent === node) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n }\n var MenuButton = Button.extend({\n init: function (settings) {\n var self = this;\n self._renderOpen = true;\n self._super(settings);\n settings = self.settings;\n self.classes.add('menubtn');\n if (settings.fixedWidth) {\n self.classes.add('fixed-width');\n }\n self.aria('haspopup', true);\n self.state.set('menu', settings.menu || self.render());\n },\n showMenu: function (toggle) {\n var self = this;\n var menu;\n if (self.menu && self.menu.visible() && toggle !== false) {\n return self.hideMenu();\n }\n if (!self.menu) {\n menu = self.state.get('menu') || [];\n self.classes.add('opened');\n if (menu.length) {\n menu = {\n type: 'menu',\n animate: true,\n items: menu\n };\n } else {\n menu.type = menu.type || 'menu';\n menu.animate = true;\n }\n if (!menu.renderTo) {\n self.menu = global$4.create(menu).parent(self).renderTo();\n } else {\n self.menu = menu.parent(self).show().renderTo();\n }\n self.fire('createmenu');\n self.menu.reflow();\n self.menu.on('cancel', function (e) {\n if (e.control.parent() === self.menu) {\n e.stopPropagation();\n self.focus();\n self.hideMenu();\n }\n });\n self.menu.on('select', function () {\n self.focus();\n });\n self.menu.on('show hide', function (e) {\n if (e.type === 'hide' && e.control.parent() === self) {\n self.classes.remove('opened-under');\n }\n if (e.control === self.menu) {\n self.activeMenu(e.type === 'show');\n self.classes.toggle('opened', e.type === 'show');\n }\n self.aria('expanded', e.type === 'show');\n }).fire('show');\n }\n self.menu.show();\n self.menu.layoutRect({ w: self.layoutRect().w });\n self.menu.repaint();\n self.menu.moveRel(self.getEl(), self.isRtl() ? [\n 'br-tr',\n 'tr-br'\n ] : [\n 'bl-tl',\n 'tl-bl'\n ]);\n var menuLayoutRect = self.menu.layoutRect();\n var selfBottom = self.$el.offset().top + self.layoutRect().h;\n if (selfBottom > menuLayoutRect.y && selfBottom < menuLayoutRect.y + menuLayoutRect.h) {\n self.classes.add('opened-under');\n }\n self.fire('showmenu');\n },\n hideMenu: function () {\n var self = this;\n if (self.menu) {\n self.menu.items().each(function (item) {\n if (item.hideMenu) {\n item.hideMenu();\n }\n });\n self.menu.hide();\n }\n },\n activeMenu: function (state) {\n this.classes.toggle('active', state);\n },\n renderHtml: function () {\n var self = this, id = self._id, prefix = self.classPrefix;\n var icon = self.settings.icon, image;\n var text = self.state.get('text');\n var textHtml = '';\n image = self.settings.image;\n if (image) {\n icon = 'none';\n if (typeof image !== 'string') {\n image = domGlobals.window.getSelection ? image[0] : image[1];\n }\n image = ' style=\"background-image: url(\\'' + image + '\\')\"';\n } else {\n image = '';\n }\n if (text) {\n self.classes.add('btn-has-text');\n textHtml = '' + self.encode(text) + '';\n }\n icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';\n self.aria('role', self.parent() instanceof MenuBar ? 'menuitem' : 'button');\n return '
' + '' + '
';\n },\n postRender: function () {\n var self = this;\n self.on('click', function (e) {\n if (e.control === self && isChildOf$1(e.target, self.getEl())) {\n self.focus();\n self.showMenu(!e.aria);\n if (e.aria) {\n self.menu.items().filter(':visible')[0].focus();\n }\n }\n });\n self.on('mouseenter', function (e) {\n var overCtrl = e.control;\n var parent = self.parent();\n var hasVisibleSiblingMenu;\n if (overCtrl && parent && overCtrl instanceof MenuButton && overCtrl.parent() === parent) {\n parent.items().filter('MenuButton').each(function (ctrl) {\n if (ctrl.hideMenu && ctrl !== overCtrl) {\n if (ctrl.menu && ctrl.menu.visible()) {\n hasVisibleSiblingMenu = true;\n }\n ctrl.hideMenu();\n }\n });\n if (hasVisibleSiblingMenu) {\n overCtrl.focus();\n overCtrl.showMenu();\n }\n }\n });\n return self._super();\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:menu', function () {\n if (self.menu) {\n self.menu.remove();\n }\n self.menu = null;\n });\n return self._super();\n },\n remove: function () {\n this._super();\n if (this.menu) {\n this.menu.remove();\n }\n }\n });\n\n var Menu = FloatPanel.extend({\n Defaults: {\n defaultType: 'menuitem',\n border: 1,\n layout: 'stack',\n role: 'application',\n bodyRole: 'menu',\n ariaRoot: true\n },\n init: function (settings) {\n var self = this;\n settings.autohide = true;\n settings.constrainToViewport = true;\n if (typeof settings.items === 'function') {\n settings.itemsFactory = settings.items;\n settings.items = [];\n }\n if (settings.itemDefaults) {\n var items = settings.items;\n var i = items.length;\n while (i--) {\n items[i] = global$2.extend({}, settings.itemDefaults, items[i]);\n }\n }\n self._super(settings);\n self.classes.add('menu');\n if (settings.animate && global$8.ie !== 11) {\n self.classes.add('animate');\n }\n },\n repaint: function () {\n this.classes.toggle('menu-align', true);\n this._super();\n this.getEl().style.height = '';\n this.getEl('body').style.height = '';\n return this;\n },\n cancel: function () {\n var self = this;\n self.hideAll();\n self.fire('select');\n },\n load: function () {\n var self = this;\n var time, factory;\n function hideThrobber() {\n if (self.throbber) {\n self.throbber.hide();\n self.throbber = null;\n }\n }\n factory = self.settings.itemsFactory;\n if (!factory) {\n return;\n }\n if (!self.throbber) {\n self.throbber = new Throbber(self.getEl('body'), true);\n if (self.items().length === 0) {\n self.throbber.show();\n self.fire('loading');\n } else {\n self.throbber.show(100, function () {\n self.items().remove();\n self.fire('loading');\n });\n }\n self.on('hide close', hideThrobber);\n }\n self.requestTime = time = new Date().getTime();\n self.settings.itemsFactory(function (items) {\n if (items.length === 0) {\n self.hide();\n return;\n }\n if (self.requestTime !== time) {\n return;\n }\n self.getEl().style.width = '';\n self.getEl('body').style.width = '';\n hideThrobber();\n self.items().remove();\n self.getEl('body').innerHTML = '';\n self.add(items);\n self.renderNew();\n self.fire('loaded');\n });\n },\n hideAll: function () {\n var self = this;\n this.find('menuitem').exec('hideMenu');\n return self._super();\n },\n preRender: function () {\n var self = this;\n self.items().each(function (ctrl) {\n var settings = ctrl.settings;\n if (settings.icon || settings.image || settings.selectable) {\n self._hasIcons = true;\n return false;\n }\n });\n if (self.settings.itemsFactory) {\n self.on('postrender', function () {\n if (self.settings.itemsFactory) {\n self.load();\n }\n });\n }\n self.on('show hide', function (e) {\n if (e.control === self) {\n if (e.type === 'show') {\n global$7.setTimeout(function () {\n self.classes.add('in');\n }, 0);\n } else {\n self.classes.remove('in');\n }\n }\n });\n return self._super();\n }\n });\n\n var ListBox = MenuButton.extend({\n init: function (settings) {\n var self = this;\n var values, selected, selectedText, lastItemCtrl;\n function setSelected(menuValues) {\n for (var i = 0; i < menuValues.length; i++) {\n selected = menuValues[i].selected || settings.value === menuValues[i].value;\n if (selected) {\n selectedText = selectedText || menuValues[i].text;\n self.state.set('value', menuValues[i].value);\n return true;\n }\n if (menuValues[i].menu) {\n if (setSelected(menuValues[i].menu)) {\n return true;\n }\n }\n }\n }\n self._super(settings);\n settings = self.settings;\n self._values = values = settings.values;\n if (values) {\n if (typeof settings.value !== 'undefined') {\n setSelected(values);\n }\n if (!selected && values.length > 0) {\n selectedText = values[0].text;\n self.state.set('value', values[0].value);\n }\n self.state.set('menu', values);\n }\n self.state.set('text', settings.text || selectedText);\n self.classes.add('listbox');\n self.on('select', function (e) {\n var ctrl = e.control;\n if (lastItemCtrl) {\n e.lastControl = lastItemCtrl;\n }\n if (settings.multiple) {\n ctrl.active(!ctrl.active());\n } else {\n self.value(e.control.value());\n }\n lastItemCtrl = ctrl;\n });\n },\n value: function (value) {\n if (arguments.length === 0) {\n return this.state.get('value');\n }\n if (typeof value === 'undefined') {\n return this;\n }\n function valueExists(values) {\n return exists(values, function (a) {\n return a.menu ? valueExists(a.menu) : a.value === value;\n });\n }\n if (this.settings.values) {\n if (valueExists(this.settings.values)) {\n this.state.set('value', value);\n } else if (value === null) {\n this.state.set('value', null);\n }\n } else {\n this.state.set('value', value);\n }\n return this;\n },\n bindStates: function () {\n var self = this;\n function activateMenuItemsByValue(menu, value) {\n if (menu instanceof Menu) {\n menu.items().each(function (ctrl) {\n if (!ctrl.hasMenus()) {\n ctrl.active(ctrl.value() === value);\n }\n });\n }\n }\n function getSelectedItem(menuValues, value) {\n var selectedItem;\n if (!menuValues) {\n return;\n }\n for (var i = 0; i < menuValues.length; i++) {\n if (menuValues[i].value === value) {\n return menuValues[i];\n }\n if (menuValues[i].menu) {\n selectedItem = getSelectedItem(menuValues[i].menu, value);\n if (selectedItem) {\n return selectedItem;\n }\n }\n }\n }\n self.on('show', function (e) {\n activateMenuItemsByValue(e.control, self.value());\n });\n self.state.on('change:value', function (e) {\n var selectedItem = getSelectedItem(self.state.get('menu'), e.value);\n if (selectedItem) {\n self.text(selectedItem.text);\n } else {\n self.text(self.settings.text);\n }\n });\n return self._super();\n }\n });\n\n var toggleTextStyle = function (ctrl, state) {\n var textStyle = ctrl._textStyle;\n if (textStyle) {\n var textElm = ctrl.getEl('text');\n textElm.setAttribute('style', textStyle);\n if (state) {\n textElm.style.color = '';\n textElm.style.backgroundColor = '';\n }\n }\n };\n var MenuItem = Widget.extend({\n Defaults: {\n border: 0,\n role: 'menuitem'\n },\n init: function (settings) {\n var self = this;\n var text;\n self._super(settings);\n settings = self.settings;\n self.classes.add('menu-item');\n if (settings.menu) {\n self.classes.add('menu-item-expand');\n }\n if (settings.preview) {\n self.classes.add('menu-item-preview');\n }\n text = self.state.get('text');\n if (text === '-' || text === '|') {\n self.classes.add('menu-item-sep');\n self.aria('role', 'separator');\n self.state.set('text', '-');\n }\n if (settings.selectable) {\n self.aria('role', 'menuitemcheckbox');\n self.classes.add('menu-item-checkbox');\n settings.icon = 'selected';\n }\n if (!settings.preview && !settings.selectable) {\n self.classes.add('menu-item-normal');\n }\n self.on('mousedown', function (e) {\n e.preventDefault();\n });\n if (settings.menu && !settings.ariaHideMenu) {\n self.aria('haspopup', true);\n }\n },\n hasMenus: function () {\n return !!this.settings.menu;\n },\n showMenu: function () {\n var self = this;\n var settings = self.settings;\n var menu;\n var parent = self.parent();\n parent.items().each(function (ctrl) {\n if (ctrl !== self) {\n ctrl.hideMenu();\n }\n });\n if (settings.menu) {\n menu = self.menu;\n if (!menu) {\n menu = settings.menu;\n if (menu.length) {\n menu = {\n type: 'menu',\n items: menu\n };\n } else {\n menu.type = menu.type || 'menu';\n }\n if (parent.settings.itemDefaults) {\n menu.itemDefaults = parent.settings.itemDefaults;\n }\n menu = self.menu = global$4.create(menu).parent(self).renderTo();\n menu.reflow();\n menu.on('cancel', function (e) {\n e.stopPropagation();\n self.focus();\n menu.hide();\n });\n menu.on('show hide', function (e) {\n if (e.control.items) {\n e.control.items().each(function (ctrl) {\n ctrl.active(ctrl.settings.selected);\n });\n }\n }).fire('show');\n menu.on('hide', function (e) {\n if (e.control === menu) {\n self.classes.remove('selected');\n }\n });\n menu.submenu = true;\n } else {\n menu.show();\n }\n menu._parentMenu = parent;\n menu.classes.add('menu-sub');\n var rel = menu.testMoveRel(self.getEl(), self.isRtl() ? [\n 'tl-tr',\n 'bl-br',\n 'tr-tl',\n 'br-bl'\n ] : [\n 'tr-tl',\n 'br-bl',\n 'tl-tr',\n 'bl-br'\n ]);\n menu.moveRel(self.getEl(), rel);\n menu.rel = rel;\n rel = 'menu-sub-' + rel;\n menu.classes.remove(menu._lastRel).add(rel);\n menu._lastRel = rel;\n self.classes.add('selected');\n self.aria('expanded', true);\n }\n },\n hideMenu: function () {\n var self = this;\n if (self.menu) {\n self.menu.items().each(function (item) {\n if (item.hideMenu) {\n item.hideMenu();\n }\n });\n self.menu.hide();\n self.aria('expanded', false);\n }\n return self;\n },\n renderHtml: function () {\n var self = this;\n var id = self._id;\n var settings = self.settings;\n var prefix = self.classPrefix;\n var text = self.state.get('text');\n var icon = self.settings.icon, image = '', shortcut = settings.shortcut;\n var url = self.encode(settings.url), iconHtml = '';\n function convertShortcut(shortcut) {\n var i, value, replace = {};\n if (global$8.mac) {\n replace = {\n alt: '⌥',\n ctrl: '⌘',\n shift: '⇧',\n meta: '⌘'\n };\n } else {\n replace = { meta: 'Ctrl' };\n }\n shortcut = shortcut.split('+');\n for (i = 0; i < shortcut.length; i++) {\n value = replace[shortcut[i].toLowerCase()];\n if (value) {\n shortcut[i] = value;\n }\n }\n return shortcut.join('+');\n }\n function escapeRegExp(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n }\n function markMatches(text) {\n var match = settings.match || '';\n return match ? text.replace(new RegExp(escapeRegExp(match), 'gi'), function (match) {\n return '!mce~match[' + match + ']mce~match!';\n }) : text;\n }\n function boldMatches(text) {\n return text.replace(new RegExp(escapeRegExp('!mce~match['), 'g'), '').replace(new RegExp(escapeRegExp(']mce~match!'), 'g'), '');\n }\n if (icon) {\n self.parent().classes.add('menu-has-icons');\n }\n if (settings.image) {\n image = ' style=\"background-image: url(\\'' + settings.image + '\\')\"';\n }\n if (shortcut) {\n shortcut = convertShortcut(shortcut);\n }\n icon = prefix + 'ico ' + prefix + 'i-' + (self.settings.icon || 'none');\n iconHtml = text !== '-' ? '\\xA0' : '';\n text = boldMatches(self.encode(markMatches(text)));\n url = boldMatches(self.encode(markMatches(url)));\n return '
' + iconHtml + (text !== '-' ? '' + text + '' : '') + (shortcut ? '
' + shortcut + '
' : '') + (settings.menu ? '
' : '') + (url ? '
' + url + '
' : '') + '
';\n },\n postRender: function () {\n var self = this, settings = self.settings;\n var textStyle = settings.textStyle;\n if (typeof textStyle === 'function') {\n textStyle = textStyle.call(this);\n }\n if (textStyle) {\n var textElm = self.getEl('text');\n if (textElm) {\n textElm.setAttribute('style', textStyle);\n self._textStyle = textStyle;\n }\n }\n self.on('mouseenter click', function (e) {\n if (e.control === self) {\n if (!settings.menu && e.type === 'click') {\n self.fire('select');\n global$7.requestAnimationFrame(function () {\n self.parent().hideAll();\n });\n } else {\n self.showMenu();\n if (e.aria) {\n self.menu.focus(true);\n }\n }\n }\n });\n self._super();\n return self;\n },\n hover: function () {\n var self = this;\n self.parent().items().each(function (ctrl) {\n ctrl.classes.remove('selected');\n });\n self.classes.toggle('selected', true);\n return self;\n },\n active: function (state) {\n toggleTextStyle(this, state);\n if (typeof state !== 'undefined') {\n this.aria('checked', state);\n }\n return this._super(state);\n },\n remove: function () {\n this._super();\n if (this.menu) {\n this.menu.remove();\n }\n }\n });\n\n var Radio = Checkbox.extend({\n Defaults: {\n classes: 'radio',\n role: 'radio'\n }\n });\n\n var ResizeHandle = Widget.extend({\n renderHtml: function () {\n var self = this, prefix = self.classPrefix;\n self.classes.add('resizehandle');\n if (self.settings.direction === 'both') {\n self.classes.add('resizehandle-both');\n }\n self.canFocus = false;\n return '
' + '' + '
';\n },\n postRender: function () {\n var self = this;\n self._super();\n self.resizeDragHelper = new DragHelper(this._id, {\n start: function () {\n self.fire('ResizeStart');\n },\n drag: function (e) {\n if (self.settings.direction !== 'both') {\n e.deltaX = 0;\n }\n self.fire('Resize', e);\n },\n stop: function () {\n self.fire('ResizeEnd');\n }\n });\n },\n remove: function () {\n if (this.resizeDragHelper) {\n this.resizeDragHelper.destroy();\n }\n return this._super();\n }\n });\n\n function createOptions(options) {\n var strOptions = '';\n if (options) {\n for (var i = 0; i < options.length; i++) {\n strOptions += '';\n }\n }\n return strOptions;\n }\n var SelectBox = Widget.extend({\n Defaults: {\n classes: 'selectbox',\n role: 'selectbox',\n options: []\n },\n init: function (settings) {\n var self = this;\n self._super(settings);\n if (self.settings.size) {\n self.size = self.settings.size;\n }\n if (self.settings.options) {\n self._options = self.settings.options;\n }\n self.on('keydown', function (e) {\n var rootControl;\n if (e.keyCode === 13) {\n e.preventDefault();\n self.parents().reverse().each(function (ctrl) {\n if (ctrl.toJSON) {\n rootControl = ctrl;\n return false;\n }\n });\n self.fire('submit', { data: rootControl.toJSON() });\n }\n });\n },\n options: function (state) {\n if (!arguments.length) {\n return this.state.get('options');\n }\n this.state.set('options', state);\n return this;\n },\n renderHtml: function () {\n var self = this;\n var options, size = '';\n options = createOptions(self._options);\n if (self.size) {\n size = ' size = \"' + self.size + '\"';\n }\n return '';\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:options', function (e) {\n self.getEl().innerHTML = createOptions(e.value);\n });\n return self._super();\n }\n });\n\n function constrain(value, minVal, maxVal) {\n if (value < minVal) {\n value = minVal;\n }\n if (value > maxVal) {\n value = maxVal;\n }\n return value;\n }\n function setAriaProp(el, name, value) {\n el.setAttribute('aria-' + name, value);\n }\n function updateSliderHandle(ctrl, value) {\n var maxHandlePos, shortSizeName, sizeName, stylePosName, styleValue, handleEl;\n if (ctrl.settings.orientation === 'v') {\n stylePosName = 'top';\n sizeName = 'height';\n shortSizeName = 'h';\n } else {\n stylePosName = 'left';\n sizeName = 'width';\n shortSizeName = 'w';\n }\n handleEl = ctrl.getEl('handle');\n maxHandlePos = (ctrl.layoutRect()[shortSizeName] || 100) - funcs.getSize(handleEl)[sizeName];\n styleValue = maxHandlePos * ((value - ctrl._minValue) / (ctrl._maxValue - ctrl._minValue)) + 'px';\n handleEl.style[stylePosName] = styleValue;\n handleEl.style.height = ctrl.layoutRect().h + 'px';\n setAriaProp(handleEl, 'valuenow', value);\n setAriaProp(handleEl, 'valuetext', '' + ctrl.settings.previewFilter(value));\n setAriaProp(handleEl, 'valuemin', ctrl._minValue);\n setAriaProp(handleEl, 'valuemax', ctrl._maxValue);\n }\n var Slider = Widget.extend({\n init: function (settings) {\n var self = this;\n if (!settings.previewFilter) {\n settings.previewFilter = function (value) {\n return Math.round(value * 100) / 100;\n };\n }\n self._super(settings);\n self.classes.add('slider');\n if (settings.orientation === 'v') {\n self.classes.add('vertical');\n }\n self._minValue = isNumber(settings.minValue) ? settings.minValue : 0;\n self._maxValue = isNumber(settings.maxValue) ? settings.maxValue : 100;\n self._initValue = self.state.get('value');\n },\n renderHtml: function () {\n var self = this, id = self._id, prefix = self.classPrefix;\n return '
' + '
' + '
';\n },\n reset: function () {\n this.value(this._initValue).repaint();\n },\n postRender: function () {\n var self = this;\n var minValue, maxValue, screenCordName, stylePosName, sizeName, shortSizeName;\n function toFraction(min, max, val) {\n return (val + min) / (max - min);\n }\n function fromFraction(min, max, val) {\n return val * (max - min) - min;\n }\n function handleKeyboard(minValue, maxValue) {\n function alter(delta) {\n var value;\n value = self.value();\n value = fromFraction(minValue, maxValue, toFraction(minValue, maxValue, value) + delta * 0.05);\n value = constrain(value, minValue, maxValue);\n self.value(value);\n self.fire('dragstart', { value: value });\n self.fire('drag', { value: value });\n self.fire('dragend', { value: value });\n }\n self.on('keydown', function (e) {\n switch (e.keyCode) {\n case 37:\n case 38:\n alter(-1);\n break;\n case 39:\n case 40:\n alter(1);\n break;\n }\n });\n }\n function handleDrag(minValue, maxValue, handleEl) {\n var startPos, startHandlePos, maxHandlePos, handlePos, value;\n self._dragHelper = new DragHelper(self._id, {\n handle: self._id + '-handle',\n start: function (e) {\n startPos = e[screenCordName];\n startHandlePos = parseInt(self.getEl('handle').style[stylePosName], 10);\n maxHandlePos = (self.layoutRect()[shortSizeName] || 100) - funcs.getSize(handleEl)[sizeName];\n self.fire('dragstart', { value: value });\n },\n drag: function (e) {\n var delta = e[screenCordName] - startPos;\n handlePos = constrain(startHandlePos + delta, 0, maxHandlePos);\n handleEl.style[stylePosName] = handlePos + 'px';\n value = minValue + handlePos / maxHandlePos * (maxValue - minValue);\n self.value(value);\n self.tooltip().text('' + self.settings.previewFilter(value)).show().moveRel(handleEl, 'bc tc');\n self.fire('drag', { value: value });\n },\n stop: function () {\n self.tooltip().hide();\n self.fire('dragend', { value: value });\n }\n });\n }\n minValue = self._minValue;\n maxValue = self._maxValue;\n if (self.settings.orientation === 'v') {\n screenCordName = 'screenY';\n stylePosName = 'top';\n sizeName = 'height';\n shortSizeName = 'h';\n } else {\n screenCordName = 'screenX';\n stylePosName = 'left';\n sizeName = 'width';\n shortSizeName = 'w';\n }\n self._super();\n handleKeyboard(minValue, maxValue);\n handleDrag(minValue, maxValue, self.getEl('handle'));\n },\n repaint: function () {\n this._super();\n updateSliderHandle(this, this.value());\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:value', function (e) {\n updateSliderHandle(self, e.value);\n });\n return self._super();\n }\n });\n\n var Spacer = Widget.extend({\n renderHtml: function () {\n var self = this;\n self.classes.add('spacer');\n self.canFocus = false;\n return '
';\n }\n });\n\n var SplitButton = MenuButton.extend({\n Defaults: {\n classes: 'widget btn splitbtn',\n role: 'button'\n },\n repaint: function () {\n var self = this;\n var elm = self.getEl();\n var rect = self.layoutRect();\n var mainButtonElm, menuButtonElm;\n self._super();\n mainButtonElm = elm.firstChild;\n menuButtonElm = elm.lastChild;\n global$9(mainButtonElm).css({\n width: rect.w - funcs.getSize(menuButtonElm).width,\n height: rect.h - 2\n });\n global$9(menuButtonElm).css({ height: rect.h - 2 });\n return self;\n },\n activeMenu: function (state) {\n var self = this;\n global$9(self.getEl().lastChild).toggleClass(self.classPrefix + 'active', state);\n },\n renderHtml: function () {\n var self = this;\n var id = self._id;\n var prefix = self.classPrefix;\n var image;\n var icon = self.state.get('icon');\n var text = self.state.get('text');\n var settings = self.settings;\n var textHtml = '', ariaPressed;\n image = settings.image;\n if (image) {\n icon = 'none';\n if (typeof image !== 'string') {\n image = domGlobals.window.getSelection ? image[0] : image[1];\n }\n image = ' style=\"background-image: url(\\'' + image + '\\')\"';\n } else {\n image = '';\n }\n icon = settings.icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';\n if (text) {\n self.classes.add('btn-has-text');\n textHtml = '' + self.encode(text) + '';\n }\n ariaPressed = typeof settings.active === 'boolean' ? ' aria-pressed=\"' + settings.active + '\"' : '';\n return '
' + '' + '' + '
';\n },\n postRender: function () {\n var self = this, onClickHandler = self.settings.onclick;\n self.on('click', function (e) {\n var node = e.target;\n if (e.control === this) {\n while (node) {\n if (e.aria && e.aria.key !== 'down' || node.nodeName === 'BUTTON' && node.className.indexOf('open') === -1) {\n e.stopImmediatePropagation();\n if (onClickHandler) {\n onClickHandler.call(this, e);\n }\n return;\n }\n node = node.parentNode;\n }\n }\n });\n delete self.settings.onclick;\n return self._super();\n }\n });\n\n var StackLayout = FlowLayout.extend({\n Defaults: {\n containerClass: 'stack-layout',\n controlClass: 'stack-layout-item',\n endClass: 'break'\n },\n isNative: function () {\n return true;\n }\n });\n\n var TabPanel = Panel.extend({\n Defaults: {\n layout: 'absolute',\n defaults: { type: 'panel' }\n },\n activateTab: function (idx) {\n var activeTabElm;\n if (this.activeTabId) {\n activeTabElm = this.getEl(this.activeTabId);\n global$9(activeTabElm).removeClass(this.classPrefix + 'active');\n activeTabElm.setAttribute('aria-selected', 'false');\n }\n this.activeTabId = 't' + idx;\n activeTabElm = this.getEl('t' + idx);\n activeTabElm.setAttribute('aria-selected', 'true');\n global$9(activeTabElm).addClass(this.classPrefix + 'active');\n this.items()[idx].show().fire('showtab');\n this.reflow();\n this.items().each(function (item, i) {\n if (idx !== i) {\n item.hide();\n }\n });\n },\n renderHtml: function () {\n var self = this;\n var layout = self._layout;\n var tabsHtml = '';\n var prefix = self.classPrefix;\n self.preRender();\n layout.preRender(self);\n self.items().each(function (ctrl, i) {\n var id = self._id + '-t' + i;\n ctrl.aria('role', 'tabpanel');\n ctrl.aria('labelledby', id);\n tabsHtml += '
' + self.encode(ctrl.settings.title) + '
';\n });\n return '
' + '
' + tabsHtml + '
' + '
' + layout.renderHtml(self) + '
' + '
';\n },\n postRender: function () {\n var self = this;\n self._super();\n self.settings.activeTab = self.settings.activeTab || 0;\n self.activateTab(self.settings.activeTab);\n this.on('click', function (e) {\n var targetParent = e.target.parentNode;\n if (targetParent && targetParent.id === self._id + '-head') {\n var i = targetParent.childNodes.length;\n while (i--) {\n if (targetParent.childNodes[i] === e.target) {\n self.activateTab(i);\n }\n }\n }\n });\n },\n initLayoutRect: function () {\n var self = this;\n var rect, minW, minH;\n minW = funcs.getSize(self.getEl('head')).width;\n minW = minW < 0 ? 0 : minW;\n minH = 0;\n self.items().each(function (item) {\n minW = Math.max(minW, item.layoutRect().minW);\n minH = Math.max(minH, item.layoutRect().minH);\n });\n self.items().each(function (ctrl) {\n ctrl.settings.x = 0;\n ctrl.settings.y = 0;\n ctrl.settings.w = minW;\n ctrl.settings.h = minH;\n ctrl.layoutRect({\n x: 0,\n y: 0,\n w: minW,\n h: minH\n });\n });\n var headH = funcs.getSize(self.getEl('head')).height;\n self.settings.minWidth = minW;\n self.settings.minHeight = minH + headH;\n rect = self._super();\n rect.deltaH += headH;\n rect.innerH = rect.h - rect.deltaH;\n return rect;\n }\n });\n\n var TextBox = Widget.extend({\n init: function (settings) {\n var self = this;\n self._super(settings);\n self.classes.add('textbox');\n if (settings.multiline) {\n self.classes.add('multiline');\n } else {\n self.on('keydown', function (e) {\n var rootControl;\n if (e.keyCode === 13) {\n e.preventDefault();\n self.parents().reverse().each(function (ctrl) {\n if (ctrl.toJSON) {\n rootControl = ctrl;\n return false;\n }\n });\n self.fire('submit', { data: rootControl.toJSON() });\n }\n });\n self.on('keyup', function (e) {\n self.state.set('value', e.target.value);\n });\n }\n },\n repaint: function () {\n var self = this;\n var style, rect, borderBox, borderW, borderH = 0, lastRepaintRect;\n style = self.getEl().style;\n rect = self._layoutRect;\n lastRepaintRect = self._lastRepaintRect || {};\n var doc = domGlobals.document;\n if (!self.settings.multiline && doc.all && (!doc.documentMode || doc.documentMode <= 8)) {\n style.lineHeight = rect.h - borderH + 'px';\n }\n borderBox = self.borderBox;\n borderW = borderBox.left + borderBox.right + 8;\n borderH = borderBox.top + borderBox.bottom + (self.settings.multiline ? 8 : 0);\n if (rect.x !== lastRepaintRect.x) {\n style.left = rect.x + 'px';\n lastRepaintRect.x = rect.x;\n }\n if (rect.y !== lastRepaintRect.y) {\n style.top = rect.y + 'px';\n lastRepaintRect.y = rect.y;\n }\n if (rect.w !== lastRepaintRect.w) {\n style.width = rect.w - borderW + 'px';\n lastRepaintRect.w = rect.w;\n }\n if (rect.h !== lastRepaintRect.h) {\n style.height = rect.h - borderH + 'px';\n lastRepaintRect.h = rect.h;\n }\n self._lastRepaintRect = lastRepaintRect;\n self.fire('repaint', {}, false);\n return self;\n },\n renderHtml: function () {\n var self = this;\n var settings = self.settings;\n var attrs, elm;\n attrs = {\n id: self._id,\n hidefocus: '1'\n };\n global$2.each([\n 'rows',\n 'spellcheck',\n 'maxLength',\n 'size',\n 'readonly',\n 'min',\n 'max',\n 'step',\n 'list',\n 'pattern',\n 'placeholder',\n 'required',\n 'multiple'\n ], function (name) {\n attrs[name] = settings[name];\n });\n if (self.disabled()) {\n attrs.disabled = 'disabled';\n }\n if (settings.subtype) {\n attrs.type = settings.subtype;\n }\n elm = funcs.create(settings.multiline ? 'textarea' : 'input', attrs);\n elm.value = self.state.get('value');\n elm.className = self.classes.toString();\n return elm.outerHTML;\n },\n value: function (value) {\n if (arguments.length) {\n this.state.set('value', value);\n return this;\n }\n if (this.state.get('rendered')) {\n this.state.set('value', this.getEl().value);\n }\n return this.state.get('value');\n },\n postRender: function () {\n var self = this;\n self.getEl().value = self.state.get('value');\n self._super();\n self.$el.on('change', function (e) {\n self.state.set('value', e.target.value);\n self.fire('change', e);\n });\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:value', function (e) {\n if (self.getEl().value !== e.value) {\n self.getEl().value = e.value;\n }\n });\n self.state.on('change:disabled', function (e) {\n self.getEl().disabled = e.value;\n });\n return self._super();\n },\n remove: function () {\n this.$el.off();\n this._super();\n }\n });\n\n var getApi = function () {\n return {\n Selector: Selector,\n Collection: Collection$2,\n ReflowQueue: ReflowQueue,\n Control: Control$1,\n Factory: global$4,\n KeyboardNavigation: KeyboardNavigation,\n Container: Container,\n DragHelper: DragHelper,\n Scrollable: Scrollable,\n Panel: Panel,\n Movable: Movable,\n Resizable: Resizable,\n FloatPanel: FloatPanel,\n Window: Window,\n MessageBox: MessageBox,\n Tooltip: Tooltip,\n Widget: Widget,\n Progress: Progress,\n Notification: Notification,\n Layout: Layout,\n AbsoluteLayout: AbsoluteLayout,\n Button: Button,\n ButtonGroup: ButtonGroup,\n Checkbox: Checkbox,\n ComboBox: ComboBox,\n ColorBox: ColorBox,\n PanelButton: PanelButton,\n ColorButton: ColorButton,\n ColorPicker: ColorPicker,\n Path: Path,\n ElementPath: ElementPath,\n FormItem: FormItem,\n Form: Form,\n FieldSet: FieldSet,\n FilePicker: FilePicker,\n FitLayout: FitLayout,\n FlexLayout: FlexLayout,\n FlowLayout: FlowLayout,\n FormatControls: FormatControls,\n GridLayout: GridLayout,\n Iframe: Iframe$1,\n InfoBox: InfoBox,\n Label: Label,\n Toolbar: Toolbar$1,\n MenuBar: MenuBar,\n MenuButton: MenuButton,\n MenuItem: MenuItem,\n Throbber: Throbber,\n Menu: Menu,\n ListBox: ListBox,\n Radio: Radio,\n ResizeHandle: ResizeHandle,\n SelectBox: SelectBox,\n Slider: Slider,\n Spacer: Spacer,\n SplitButton: SplitButton,\n StackLayout: StackLayout,\n TabPanel: TabPanel,\n TextBox: TextBox,\n DropZone: DropZone,\n BrowseButton: BrowseButton\n };\n };\n var appendTo = function (target) {\n if (target.ui) {\n global$2.each(getApi(), function (ref, key) {\n target.ui[key] = ref;\n });\n } else {\n target.ui = getApi();\n }\n };\n var registerToFactory = function () {\n global$2.each(getApi(), function (ref, key) {\n global$4.add(key, ref);\n });\n };\n var Api = {\n appendTo: appendTo,\n registerToFactory: registerToFactory\n };\n\n Api.registerToFactory();\n Api.appendTo(window.tinymce ? window.tinymce : {});\n global.add('modern', function (editor) {\n FormatControls.setup(editor);\n return ThemeApi.get(editor);\n });\n function Theme () {\n }\n\n return Theme;\n\n}(window));\n})();\n","// 4.9.11 (2020-07-13)\n(function () {\n(function (domGlobals) {\n 'use strict';\n\n var noop = function () {\n };\n var compose = function (fa, fb) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return fa(fb.apply(null, args));\n };\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var identity = function (x) {\n return x;\n };\n function curry(fn) {\n var initialArgs = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n initialArgs[_i - 1] = arguments[_i];\n }\n return function () {\n var restArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n restArgs[_i] = arguments[_i];\n }\n var all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n var not = function (f) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return !f.apply(null, args);\n };\n };\n var die = function (msg) {\n return function () {\n throw new Error(msg);\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n if (Object.freeze) {\n Object.freeze(me);\n }\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Option = {\n some: some,\n none: none,\n from: from\n };\n\n var typeOf = function (x) {\n if (x === null) {\n return 'null';\n }\n var t = typeof x;\n if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n }\n if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n }\n return t;\n };\n var isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isString = isType('string');\n var isObject = isType('object');\n var isArray = isType('array');\n var isNull = isType('null');\n var isBoolean = isType('boolean');\n var isFunction = isType('function');\n var isNumber = isType('number');\n\n var nativeSlice = Array.prototype.slice;\n var nativeIndexOf = Array.prototype.indexOf;\n var nativePush = Array.prototype.push;\n var rawIndexOf = function (ts, t) {\n return nativeIndexOf.call(ts, t);\n };\n var indexOf = function (xs, x) {\n var r = rawIndexOf(xs, x);\n return r === -1 ? Option.none() : Option.some(r);\n };\n var contains = function (xs, x) {\n return rawIndexOf(xs, x) > -1;\n };\n var exists = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return true;\n }\n }\n return false;\n };\n var map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var each = function (xs, f) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n f(x, i);\n }\n };\n var eachr = function (xs, f) {\n for (var i = xs.length - 1; i >= 0; i--) {\n var x = xs[i];\n f(x, i);\n }\n };\n var partition = function (xs, pred) {\n var pass = [];\n var fail = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n var arr = pred(x, i) ? pass : fail;\n arr.push(x);\n }\n return {\n pass: pass,\n fail: fail\n };\n };\n var filter = function (xs, pred) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n var foldr = function (xs, f, acc) {\n eachr(xs, function (x) {\n acc = f(acc, x);\n });\n return acc;\n };\n var foldl = function (xs, f, acc) {\n each(xs, function (x) {\n acc = f(acc, x);\n });\n return acc;\n };\n var find = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Option.some(x);\n }\n }\n return Option.none();\n };\n var findIndex = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Option.some(i);\n }\n }\n return Option.none();\n };\n var flatten = function (xs) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n var bind = function (xs, f) {\n var output = map(xs, f);\n return flatten(output);\n };\n var forall = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; ++i) {\n var x = xs[i];\n if (pred(x, i) !== true) {\n return false;\n }\n }\n return true;\n };\n var reverse = function (xs) {\n var r = nativeSlice.call(xs, 0);\n r.reverse();\n return r;\n };\n var difference = function (a1, a2) {\n return filter(a1, function (x) {\n return !contains(a2, x);\n });\n };\n var mapToObject = function (xs, f) {\n var r = {};\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n r[String(x)] = f(x, i);\n }\n return r;\n };\n var sort = function (xs, comparator) {\n var copy = nativeSlice.call(xs, 0);\n copy.sort(comparator);\n return copy;\n };\n var head = function (xs) {\n return xs.length === 0 ? Option.none() : Option.some(xs[0]);\n };\n var last = function (xs) {\n return xs.length === 0 ? Option.none() : Option.some(xs[xs.length - 1]);\n };\n var from$1 = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n\n var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')();\n\n var path = function (parts, scope) {\n var o = scope !== undefined && scope !== null ? scope : Global;\n for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n o = o[parts[i]];\n }\n return o;\n };\n var resolve = function (p, scope) {\n var parts = p.split('.');\n return path(parts, scope);\n };\n\n var unsafe = function (name, scope) {\n return resolve(name, scope);\n };\n var getOrDie = function (name, scope) {\n var actual = unsafe(name, scope);\n if (actual === undefined || actual === null) {\n throw new Error(name + ' not available on this browser');\n }\n return actual;\n };\n var Global$1 = { getOrDie: getOrDie };\n\n var url = function () {\n return Global$1.getOrDie('URL');\n };\n var createObjectURL = function (blob) {\n return url().createObjectURL(blob);\n };\n var revokeObjectURL = function (u) {\n url().revokeObjectURL(u);\n };\n var URL = {\n createObjectURL: createObjectURL,\n revokeObjectURL: revokeObjectURL\n };\n\n var nav = domGlobals.navigator, userAgent = nav.userAgent;\n var opera, webkit, ie, ie11, ie12, gecko, mac, iDevice, android, fileApi, phone, tablet, windowsPhone;\n var matchMediaQuery = function (query) {\n return 'matchMedia' in domGlobals.window ? domGlobals.matchMedia(query).matches : false;\n };\n opera = false;\n android = /Android/.test(userAgent);\n webkit = /WebKit/.test(userAgent);\n ie = !webkit && !opera && /MSIE/gi.test(userAgent) && /Explorer/gi.test(nav.appName);\n ie = ie && /MSIE (\\w+)\\./.exec(userAgent)[1];\n ie11 = userAgent.indexOf('Trident/') !== -1 && (userAgent.indexOf('rv:') !== -1 || nav.appName.indexOf('Netscape') !== -1) ? 11 : false;\n ie12 = userAgent.indexOf('Edge/') !== -1 && !ie && !ie11 ? 12 : false;\n ie = ie || ie11 || ie12;\n gecko = !webkit && !ie11 && /Gecko/.test(userAgent);\n mac = userAgent.indexOf('Mac') !== -1;\n iDevice = /(iPad|iPhone)/.test(userAgent);\n fileApi = 'FormData' in domGlobals.window && 'FileReader' in domGlobals.window && 'URL' in domGlobals.window && !!URL.createObjectURL;\n phone = matchMediaQuery('only screen and (max-device-width: 480px)') && (android || iDevice);\n tablet = matchMediaQuery('only screen and (min-width: 800px)') && (android || iDevice);\n windowsPhone = userAgent.indexOf('Windows Phone') !== -1;\n if (ie12) {\n webkit = false;\n }\n var contentEditable = !iDevice || fileApi || parseInt(userAgent.match(/AppleWebKit\\/(\\d*)/)[1], 10) >= 534;\n var Env = {\n opera: opera,\n webkit: webkit,\n ie: ie,\n gecko: gecko,\n mac: mac,\n iOS: iDevice,\n android: android,\n contentEditable: contentEditable,\n transparentSrc: 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7',\n caretAfter: ie !== 8,\n range: domGlobals.window.getSelection && 'Range' in domGlobals.window,\n documentMode: ie && !ie12 ? domGlobals.document.documentMode || 7 : 10,\n fileApi: fileApi,\n ceFalse: ie === false || ie > 8,\n cacheSuffix: null,\n container: null,\n overrideViewPort: null,\n experimentalShadowDom: false,\n canHaveCSP: ie === false || ie > 11,\n desktop: !phone && !tablet,\n windowsPhone: windowsPhone\n };\n\n var promise = function () {\n function bind(fn, thisArg) {\n return function () {\n fn.apply(thisArg, arguments);\n };\n }\n var isArray = Array.isArray || function (value) {\n return Object.prototype.toString.call(value) === '[object Array]';\n };\n var Promise = function (fn) {\n if (typeof this !== 'object') {\n throw new TypeError('Promises must be constructed via new');\n }\n if (typeof fn !== 'function') {\n throw new TypeError('not a function');\n }\n this._state = null;\n this._value = null;\n this._deferreds = [];\n doResolve(fn, bind(resolve, this), bind(reject, this));\n };\n var asap = Promise.immediateFn || typeof setImmediate === 'function' && setImmediate || function (fn) {\n setTimeout(fn, 1);\n };\n function handle(deferred) {\n var me = this;\n if (this._state === null) {\n this._deferreds.push(deferred);\n return;\n }\n asap(function () {\n var cb = me._state ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n (me._state ? deferred.resolve : deferred.reject)(me._value);\n return;\n }\n var ret;\n try {\n ret = cb(me._value);\n } catch (e) {\n deferred.reject(e);\n return;\n }\n deferred.resolve(ret);\n });\n }\n function resolve(newValue) {\n try {\n if (newValue === this) {\n throw new TypeError('A promise cannot be resolved with itself.');\n }\n if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {\n var then = newValue.then;\n if (typeof then === 'function') {\n doResolve(bind(then, newValue), bind(resolve, this), bind(reject, this));\n return;\n }\n }\n this._state = true;\n this._value = newValue;\n finale.call(this);\n } catch (e) {\n reject.call(this, e);\n }\n }\n function reject(newValue) {\n this._state = false;\n this._value = newValue;\n finale.call(this);\n }\n function finale() {\n for (var i = 0, len = this._deferreds.length; i < len; i++) {\n handle.call(this, this._deferreds[i]);\n }\n this._deferreds = null;\n }\n function Handler(onFulfilled, onRejected, resolve, reject) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.resolve = resolve;\n this.reject = reject;\n }\n function doResolve(fn, onFulfilled, onRejected) {\n var done = false;\n try {\n fn(function (value) {\n if (done) {\n return;\n }\n done = true;\n onFulfilled(value);\n }, function (reason) {\n if (done) {\n return;\n }\n done = true;\n onRejected(reason);\n });\n } catch (ex) {\n if (done) {\n return;\n }\n done = true;\n onRejected(ex);\n }\n }\n Promise.prototype.catch = function (onRejected) {\n return this.then(null, onRejected);\n };\n Promise.prototype.then = function (onFulfilled, onRejected) {\n var me = this;\n return new Promise(function (resolve, reject) {\n handle.call(me, new Handler(onFulfilled, onRejected, resolve, reject));\n });\n };\n Promise.all = function () {\n var args = Array.prototype.slice.call(arguments.length === 1 && isArray(arguments[0]) ? arguments[0] : arguments);\n return new Promise(function (resolve, reject) {\n if (args.length === 0) {\n return resolve([]);\n }\n var remaining = args.length;\n function res(i, val) {\n try {\n if (val && (typeof val === 'object' || typeof val === 'function')) {\n var then = val.then;\n if (typeof then === 'function') {\n then.call(val, function (val) {\n res(i, val);\n }, reject);\n return;\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n } catch (ex) {\n reject(ex);\n }\n }\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n };\n Promise.resolve = function (value) {\n if (value && typeof value === 'object' && value.constructor === Promise) {\n return value;\n }\n return new Promise(function (resolve) {\n resolve(value);\n });\n };\n Promise.reject = function (value) {\n return new Promise(function (resolve, reject) {\n reject(value);\n });\n };\n Promise.race = function (values) {\n return new Promise(function (resolve, reject) {\n for (var i = 0, len = values.length; i < len; i++) {\n values[i].then(resolve, reject);\n }\n });\n };\n return Promise;\n };\n var promiseObj = window.Promise ? window.Promise : promise();\n\n var requestAnimationFramePromise;\n var requestAnimationFrame = function (callback, element) {\n var i, requestAnimationFrameFunc = domGlobals.window.requestAnimationFrame;\n var vendors = [\n 'ms',\n 'moz',\n 'webkit'\n ];\n var featurefill = function (callback) {\n domGlobals.window.setTimeout(callback, 0);\n };\n for (i = 0; i < vendors.length && !requestAnimationFrameFunc; i++) {\n requestAnimationFrameFunc = domGlobals.window[vendors[i] + 'RequestAnimationFrame'];\n }\n if (!requestAnimationFrameFunc) {\n requestAnimationFrameFunc = featurefill;\n }\n requestAnimationFrameFunc(callback, element);\n };\n var wrappedSetTimeout = function (callback, time) {\n if (typeof time !== 'number') {\n time = 0;\n }\n return setTimeout(callback, time);\n };\n var wrappedSetInterval = function (callback, time) {\n if (typeof time !== 'number') {\n time = 1;\n }\n return setInterval(callback, time);\n };\n var wrappedClearTimeout = function (id) {\n return clearTimeout(id);\n };\n var wrappedClearInterval = function (id) {\n return clearInterval(id);\n };\n var debounce = function (callback, time) {\n var timer, func;\n func = function () {\n var args = arguments;\n clearTimeout(timer);\n timer = wrappedSetTimeout(function () {\n callback.apply(this, args);\n }, time);\n };\n func.stop = function () {\n clearTimeout(timer);\n };\n return func;\n };\n var Delay = {\n requestAnimationFrame: function (callback, element) {\n if (requestAnimationFramePromise) {\n requestAnimationFramePromise.then(callback);\n return;\n }\n requestAnimationFramePromise = new promiseObj(function (resolve) {\n if (!element) {\n element = domGlobals.document.body;\n }\n requestAnimationFrame(resolve, element);\n }).then(callback);\n },\n setTimeout: wrappedSetTimeout,\n setInterval: wrappedSetInterval,\n setEditorTimeout: function (editor, callback, time) {\n return wrappedSetTimeout(function () {\n if (!editor.removed) {\n callback();\n }\n }, time);\n },\n setEditorInterval: function (editor, callback, time) {\n var timer;\n timer = wrappedSetInterval(function () {\n if (!editor.removed) {\n callback();\n } else {\n clearInterval(timer);\n }\n }, time);\n return timer;\n },\n debounce: debounce,\n throttle: debounce,\n clearInterval: wrappedClearInterval,\n clearTimeout: wrappedClearTimeout\n };\n\n var eventExpandoPrefix = 'mce-data-';\n var mouseEventRe = /^(?:mouse|contextmenu)|click/;\n var deprecated = {\n keyLocation: 1,\n layerX: 1,\n layerY: 1,\n returnValue: 1,\n webkitMovementX: 1,\n webkitMovementY: 1,\n keyIdentifier: 1\n };\n var hasIsDefaultPrevented = function (event) {\n return event.isDefaultPrevented === returnTrue || event.isDefaultPrevented === returnFalse;\n };\n var returnFalse = function () {\n return false;\n };\n var returnTrue = function () {\n return true;\n };\n var addEvent = function (target, name, callback, capture) {\n if (target.addEventListener) {\n target.addEventListener(name, callback, capture || false);\n } else if (target.attachEvent) {\n target.attachEvent('on' + name, callback);\n }\n };\n var removeEvent = function (target, name, callback, capture) {\n if (target.removeEventListener) {\n target.removeEventListener(name, callback, capture || false);\n } else if (target.detachEvent) {\n target.detachEvent('on' + name, callback);\n }\n };\n var getTargetFromShadowDom = function (event, defaultTarget) {\n if (event.composedPath) {\n var composedPath = event.composedPath();\n if (composedPath && composedPath.length > 0) {\n return composedPath[0];\n }\n }\n return defaultTarget;\n };\n var fix = function (originalEvent, data) {\n var name;\n var event = data || {};\n for (name in originalEvent) {\n if (!deprecated[name]) {\n event[name] = originalEvent[name];\n }\n }\n if (!event.target) {\n event.target = event.srcElement || domGlobals.document;\n }\n if (Env.experimentalShadowDom) {\n event.target = getTargetFromShadowDom(originalEvent, event.target);\n }\n if (originalEvent && mouseEventRe.test(originalEvent.type) && originalEvent.pageX === undefined && originalEvent.clientX !== undefined) {\n var eventDoc = event.target.ownerDocument || domGlobals.document;\n var doc = eventDoc.documentElement;\n var body = eventDoc.body;\n event.pageX = originalEvent.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);\n event.pageY = originalEvent.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);\n }\n event.preventDefault = function () {\n event.isDefaultPrevented = returnTrue;\n if (originalEvent) {\n if (originalEvent.preventDefault) {\n originalEvent.preventDefault();\n } else {\n originalEvent.returnValue = false;\n }\n }\n };\n event.stopPropagation = function () {\n event.isPropagationStopped = returnTrue;\n if (originalEvent) {\n if (originalEvent.stopPropagation) {\n originalEvent.stopPropagation();\n } else {\n originalEvent.cancelBubble = true;\n }\n }\n };\n event.stopImmediatePropagation = function () {\n event.isImmediatePropagationStopped = returnTrue;\n event.stopPropagation();\n };\n if (hasIsDefaultPrevented(event) === false) {\n event.isDefaultPrevented = returnFalse;\n event.isPropagationStopped = returnFalse;\n event.isImmediatePropagationStopped = returnFalse;\n }\n if (typeof event.metaKey === 'undefined') {\n event.metaKey = false;\n }\n return event;\n };\n var bindOnReady = function (win, callback, eventUtils) {\n var doc = win.document, event = { type: 'ready' };\n if (eventUtils.domLoaded) {\n callback(event);\n return;\n }\n var isDocReady = function () {\n return doc.readyState === 'complete' || doc.readyState === 'interactive' && doc.body;\n };\n var readyHandler = function () {\n if (!eventUtils.domLoaded) {\n eventUtils.domLoaded = true;\n callback(event);\n }\n };\n var waitForDomLoaded = function () {\n if (isDocReady()) {\n removeEvent(doc, 'readystatechange', waitForDomLoaded);\n readyHandler();\n }\n };\n var tryScroll = function () {\n try {\n doc.documentElement.doScroll('left');\n } catch (ex) {\n Delay.setTimeout(tryScroll);\n return;\n }\n readyHandler();\n };\n if (doc.addEventListener && !(Env.ie && Env.ie < 11)) {\n if (isDocReady()) {\n readyHandler();\n } else {\n addEvent(win, 'DOMContentLoaded', readyHandler);\n }\n } else {\n addEvent(doc, 'readystatechange', waitForDomLoaded);\n if (doc.documentElement.doScroll && win.self === win.top) {\n tryScroll();\n }\n }\n addEvent(win, 'load', readyHandler);\n };\n var EventUtils = function () {\n var self = this;\n var events = {}, count, expando, hasFocusIn, hasMouseEnterLeave, mouseEnterLeave;\n expando = eventExpandoPrefix + (+new Date()).toString(32);\n hasMouseEnterLeave = 'onmouseenter' in domGlobals.document.documentElement;\n hasFocusIn = 'onfocusin' in domGlobals.document.documentElement;\n mouseEnterLeave = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n };\n count = 1;\n self.domLoaded = false;\n self.events = events;\n var executeHandlers = function (evt, id) {\n var callbackList, i, l, callback;\n var container = events[id];\n callbackList = container && container[evt.type];\n if (callbackList) {\n for (i = 0, l = callbackList.length; i < l; i++) {\n callback = callbackList[i];\n if (callback && callback.func.call(callback.scope, evt) === false) {\n evt.preventDefault();\n }\n if (evt.isImmediatePropagationStopped()) {\n return;\n }\n }\n }\n };\n self.bind = function (target, names, callback, scope) {\n var id, callbackList, i, name, fakeName, nativeHandler, capture;\n var win = domGlobals.window;\n var defaultNativeHandler = function (evt) {\n executeHandlers(fix(evt || win.event), id);\n };\n if (!target || target.nodeType === 3 || target.nodeType === 8) {\n return;\n }\n if (!target[expando]) {\n id = count++;\n target[expando] = id;\n events[id] = {};\n } else {\n id = target[expando];\n }\n scope = scope || target;\n names = names.split(' ');\n i = names.length;\n while (i--) {\n name = names[i];\n nativeHandler = defaultNativeHandler;\n fakeName = capture = false;\n if (name === 'DOMContentLoaded') {\n name = 'ready';\n }\n if (self.domLoaded && name === 'ready' && target.readyState === 'complete') {\n callback.call(scope, fix({ type: name }));\n continue;\n }\n if (!hasMouseEnterLeave) {\n fakeName = mouseEnterLeave[name];\n if (fakeName) {\n nativeHandler = function (evt) {\n var current, related;\n current = evt.currentTarget;\n related = evt.relatedTarget;\n if (related && current.contains) {\n related = current.contains(related);\n } else {\n while (related && related !== current) {\n related = related.parentNode;\n }\n }\n if (!related) {\n evt = fix(evt || win.event);\n evt.type = evt.type === 'mouseout' ? 'mouseleave' : 'mouseenter';\n evt.target = current;\n executeHandlers(evt, id);\n }\n };\n }\n }\n if (!hasFocusIn && (name === 'focusin' || name === 'focusout')) {\n capture = true;\n fakeName = name === 'focusin' ? 'focus' : 'blur';\n nativeHandler = function (evt) {\n evt = fix(evt || win.event);\n evt.type = evt.type === 'focus' ? 'focusin' : 'focusout';\n executeHandlers(evt, id);\n };\n }\n callbackList = events[id][name];\n if (!callbackList) {\n events[id][name] = callbackList = [{\n func: callback,\n scope: scope\n }];\n callbackList.fakeName = fakeName;\n callbackList.capture = capture;\n callbackList.nativeHandler = nativeHandler;\n if (name === 'ready') {\n bindOnReady(target, nativeHandler, self);\n } else {\n addEvent(target, fakeName || name, nativeHandler, capture);\n }\n } else {\n if (name === 'ready' && self.domLoaded) {\n callback({ type: name });\n } else {\n callbackList.push({\n func: callback,\n scope: scope\n });\n }\n }\n }\n target = callbackList = 0;\n return callback;\n };\n self.unbind = function (target, names, callback) {\n var id, callbackList, i, ci, name, eventMap;\n if (!target || target.nodeType === 3 || target.nodeType === 8) {\n return self;\n }\n id = target[expando];\n if (id) {\n eventMap = events[id];\n if (names) {\n names = names.split(' ');\n i = names.length;\n while (i--) {\n name = names[i];\n callbackList = eventMap[name];\n if (callbackList) {\n if (callback) {\n ci = callbackList.length;\n while (ci--) {\n if (callbackList[ci].func === callback) {\n var nativeHandler = callbackList.nativeHandler;\n var fakeName = callbackList.fakeName, capture = callbackList.capture;\n callbackList = callbackList.slice(0, ci).concat(callbackList.slice(ci + 1));\n callbackList.nativeHandler = nativeHandler;\n callbackList.fakeName = fakeName;\n callbackList.capture = capture;\n eventMap[name] = callbackList;\n }\n }\n }\n if (!callback || callbackList.length === 0) {\n delete eventMap[name];\n removeEvent(target, callbackList.fakeName || name, callbackList.nativeHandler, callbackList.capture);\n }\n }\n }\n } else {\n for (name in eventMap) {\n callbackList = eventMap[name];\n removeEvent(target, callbackList.fakeName || name, callbackList.nativeHandler, callbackList.capture);\n }\n eventMap = {};\n }\n for (name in eventMap) {\n return self;\n }\n delete events[id];\n try {\n delete target[expando];\n } catch (ex) {\n target[expando] = null;\n }\n }\n return self;\n };\n self.fire = function (target, name, args) {\n var id;\n if (!target || target.nodeType === 3 || target.nodeType === 8) {\n return self;\n }\n args = fix(null, args);\n args.type = name;\n args.target = target;\n do {\n id = target[expando];\n if (id) {\n executeHandlers(args, id);\n }\n target = target.parentNode || target.ownerDocument || target.defaultView || target.parentWindow;\n } while (target && !args.isPropagationStopped());\n return self;\n };\n self.clean = function (target) {\n var i, children;\n var unbind = self.unbind;\n if (!target || target.nodeType === 3 || target.nodeType === 8) {\n return self;\n }\n if (target[expando]) {\n unbind(target);\n }\n if (!target.getElementsByTagName) {\n target = target.document;\n }\n if (target && target.getElementsByTagName) {\n unbind(target);\n children = target.getElementsByTagName('*');\n i = children.length;\n while (i--) {\n target = children[i];\n if (target[expando]) {\n unbind(target);\n }\n }\n }\n return self;\n };\n self.destroy = function () {\n events = {};\n };\n self.cancel = function (e) {\n if (e) {\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n return false;\n };\n };\n EventUtils.Event = new EventUtils();\n EventUtils.Event.bind(domGlobals.window, 'ready', function () {\n });\n\n var i, support, Expr, getText, isXML, tokenize, compile, select, outermostContext, sortInput, hasDuplicate, setDocument, document, docElem, documentIsHTML, rbuggyQSA, rbuggyMatches, matches, contains$1, expando = 'sizzle' + -new Date(), preferredDoc = domGlobals.window.document, dirruns = 0, done = 0, classCache = createCache(), tokenCache = createCache(), compilerCache = createCache(), sortOrder = function (a, b) {\n if (a === b) {\n hasDuplicate = true;\n }\n return 0;\n }, strundefined = typeof undefined, MAX_NEGATIVE = 1 << 31, hasOwn = {}.hasOwnProperty, arr = [], pop = arr.pop, push_native = arr.push, push = arr.push, slice = arr.slice, indexOf$1 = arr.indexOf || function (elem) {\n var i = 0, len = this.length;\n for (; i < len; i++) {\n if (this[i] === elem) {\n return i;\n }\n }\n return -1;\n }, 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 = {\n ID: new RegExp('^#(' + identifier + ')'),\n CLASS: new RegExp('^\\\\.(' + identifier + ')'),\n TAG: new RegExp('^(' + identifier + '|[*])'),\n ATTR: new RegExp('^' + attributes),\n PSEUDO: new RegExp('^' + pseudos),\n CHILD: new RegExp('^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(' + whitespace + '*(even|odd|(([+-]|)(\\\\d*)n|)' + whitespace + '*(?:([+-]|)' + whitespace + '*(\\\\d+)|))' + whitespace + '*\\\\)|)', 'i'),\n bool: new RegExp('^(?:' + booleans + ')$', 'i'),\n needsContext: new RegExp('^' + whitespace + '*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(' + whitespace + '*((?:-\\\\d)?\\\\d*)' + whitespace + '*\\\\)|)(?=[^-]|$)', 'i')\n }, 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) {\n var high = '0x' + escaped - 65536;\n return high !== high || escapedWhitespace ? escaped : high < 0 ? String.fromCharCode(high + 65536) : String.fromCharCode(high >> 10 | 55296, high & 1023 | 56320);\n };\n try {\n push.apply(arr = slice.call(preferredDoc.childNodes), preferredDoc.childNodes);\n arr[preferredDoc.childNodes.length].nodeType;\n } catch (e) {\n push = {\n apply: arr.length ? function (target, els) {\n push_native.apply(target, slice.call(els));\n } : function (target, els) {\n var j = target.length, i = 0;\n while (target[j++] = els[i++]) {\n }\n target.length = j - 1;\n }\n };\n }\n var Sizzle = function (selector, context, results, seed) {\n var match, elem, m, nodeType, i, groups, old, nid, newContext, newSelector;\n if ((context ? context.ownerDocument || context : preferredDoc) !== document) {\n setDocument(context);\n }\n context = context || document;\n results = results || [];\n if (!selector || typeof selector !== 'string') {\n return results;\n }\n if ((nodeType = context.nodeType) !== 1 && nodeType !== 9) {\n return [];\n }\n if (documentIsHTML && !seed) {\n if (match = rquickExpr.exec(selector)) {\n if (m = match[1]) {\n if (nodeType === 9) {\n elem = context.getElementById(m);\n if (elem && elem.parentNode) {\n if (elem.id === m) {\n results.push(elem);\n return results;\n }\n } else {\n return results;\n }\n } else {\n if (context.ownerDocument && (elem = context.ownerDocument.getElementById(m)) && contains$1(context, elem) && elem.id === m) {\n results.push(elem);\n return results;\n }\n }\n } else if (match[2]) {\n push.apply(results, context.getElementsByTagName(selector));\n return results;\n } else if ((m = match[3]) && support.getElementsByClassName) {\n push.apply(results, context.getElementsByClassName(m));\n return results;\n }\n }\n if (support.qsa && (!rbuggyQSA || !rbuggyQSA.test(selector))) {\n nid = old = expando;\n newContext = context;\n newSelector = nodeType === 9 && selector;\n if (nodeType === 1 && context.nodeName.toLowerCase() !== 'object') {\n groups = tokenize(selector);\n if (old = context.getAttribute('id')) {\n nid = old.replace(rescape, '\\\\$&');\n } else {\n context.setAttribute('id', nid);\n }\n nid = '[id=\\'' + nid + '\\'] ';\n i = groups.length;\n while (i--) {\n groups[i] = nid + toSelector(groups[i]);\n }\n newContext = rsibling.test(selector) && testContext(context.parentNode) || context;\n newSelector = groups.join(',');\n }\n if (newSelector) {\n try {\n push.apply(results, newContext.querySelectorAll(newSelector));\n return results;\n } catch (qsaError) {\n } finally {\n if (!old) {\n context.removeAttribute('id');\n }\n }\n }\n }\n }\n return select(selector.replace(rtrim, '$1'), context, results, seed);\n };\n function createCache() {\n var keys = [];\n function cache(key, value) {\n if (keys.push(key + ' ') > Expr.cacheLength) {\n delete cache[keys.shift()];\n }\n return cache[key + ' '] = value;\n }\n return cache;\n }\n function markFunction(fn) {\n fn[expando] = true;\n return fn;\n }\n function siblingCheck(a, b) {\n var cur = b && a, diff = cur && a.nodeType === 1 && b.nodeType === 1 && (~b.sourceIndex || MAX_NEGATIVE) - (~a.sourceIndex || MAX_NEGATIVE);\n if (diff) {\n return diff;\n }\n if (cur) {\n while (cur = cur.nextSibling) {\n if (cur === b) {\n return -1;\n }\n }\n }\n return a ? 1 : -1;\n }\n function createInputPseudo(type) {\n return function (elem) {\n var name = elem.nodeName.toLowerCase();\n return name === 'input' && elem.type === type;\n };\n }\n function createButtonPseudo(type) {\n return function (elem) {\n var name = elem.nodeName.toLowerCase();\n return (name === 'input' || name === 'button') && elem.type === type;\n };\n }\n function createPositionalPseudo(fn) {\n return markFunction(function (argument) {\n argument = +argument;\n return markFunction(function (seed, matches) {\n var j, matchIndexes = fn([], seed.length, argument), i = matchIndexes.length;\n while (i--) {\n if (seed[j = matchIndexes[i]]) {\n seed[j] = !(matches[j] = seed[j]);\n }\n }\n });\n });\n }\n function testContext(context) {\n return context && typeof context.getElementsByTagName !== strundefined && context;\n }\n support = Sizzle.support = {};\n isXML = Sizzle.isXML = function (elem) {\n var documentElement = elem && (elem.ownerDocument || elem).documentElement;\n return documentElement ? documentElement.nodeName !== 'HTML' : false;\n };\n setDocument = Sizzle.setDocument = function (node) {\n var hasCompare, doc = node ? node.ownerDocument || node : preferredDoc, parent = doc.defaultView;\n function getTop(win) {\n try {\n return win.top;\n } catch (ex) {\n }\n return null;\n }\n if (doc === document || doc.nodeType !== 9 || !doc.documentElement) {\n return document;\n }\n document = doc;\n docElem = doc.documentElement;\n documentIsHTML = !isXML(doc);\n if (parent && parent !== getTop(parent)) {\n if (parent.addEventListener) {\n parent.addEventListener('unload', function () {\n setDocument();\n }, false);\n } else if (parent.attachEvent) {\n parent.attachEvent('onunload', function () {\n setDocument();\n });\n }\n }\n support.attributes = true;\n support.getElementsByTagName = true;\n support.getElementsByClassName = rnative.test(doc.getElementsByClassName);\n support.getById = true;\n Expr.find.ID = function (id, context) {\n if (typeof context.getElementById !== strundefined && documentIsHTML) {\n var m = context.getElementById(id);\n return m && m.parentNode ? [m] : [];\n }\n };\n Expr.filter.ID = function (id) {\n var attrId = id.replace(runescape, funescape);\n return function (elem) {\n return elem.getAttribute('id') === attrId;\n };\n };\n Expr.find.TAG = support.getElementsByTagName ? function (tag, context) {\n if (typeof context.getElementsByTagName !== strundefined) {\n return context.getElementsByTagName(tag);\n }\n } : function (tag, context) {\n var elem, tmp = [], i = 0, results = context.getElementsByTagName(tag);\n if (tag === '*') {\n while (elem = results[i++]) {\n if (elem.nodeType === 1) {\n tmp.push(elem);\n }\n }\n return tmp;\n }\n return results;\n };\n Expr.find.CLASS = support.getElementsByClassName && function (className, context) {\n if (documentIsHTML) {\n return context.getElementsByClassName(className);\n }\n };\n rbuggyMatches = [];\n rbuggyQSA = [];\n support.disconnectedMatch = true;\n rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join('|'));\n rbuggyMatches = rbuggyMatches.length && new RegExp(rbuggyMatches.join('|'));\n hasCompare = rnative.test(docElem.compareDocumentPosition);\n contains$1 = hasCompare || rnative.test(docElem.contains) ? function (a, b) {\n var adown = a.nodeType === 9 ? a.documentElement : a, bup = b && b.parentNode;\n return a === bup || !!(bup && bup.nodeType === 1 && (adown.contains ? adown.contains(bup) : a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16));\n } : function (a, b) {\n if (b) {\n while (b = b.parentNode) {\n if (b === a) {\n return true;\n }\n }\n }\n return false;\n };\n sortOrder = hasCompare ? function (a, b) {\n if (a === b) {\n hasDuplicate = true;\n return 0;\n }\n var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n if (compare) {\n return compare;\n }\n compare = (a.ownerDocument || a) === (b.ownerDocument || b) ? a.compareDocumentPosition(b) : 1;\n if (compare & 1 || !support.sortDetached && b.compareDocumentPosition(a) === compare) {\n if (a === doc || a.ownerDocument === preferredDoc && contains$1(preferredDoc, a)) {\n return -1;\n }\n if (b === doc || b.ownerDocument === preferredDoc && contains$1(preferredDoc, b)) {\n return 1;\n }\n return sortInput ? indexOf$1.call(sortInput, a) - indexOf$1.call(sortInput, b) : 0;\n }\n return compare & 4 ? -1 : 1;\n } : function (a, b) {\n if (a === b) {\n hasDuplicate = true;\n return 0;\n }\n var cur, i = 0, aup = a.parentNode, bup = b.parentNode, ap = [a], bp = [b];\n if (!aup || !bup) {\n return a === doc ? -1 : b === doc ? 1 : aup ? -1 : bup ? 1 : sortInput ? indexOf$1.call(sortInput, a) - indexOf$1.call(sortInput, b) : 0;\n } else if (aup === bup) {\n return siblingCheck(a, b);\n }\n cur = a;\n while (cur = cur.parentNode) {\n ap.unshift(cur);\n }\n cur = b;\n while (cur = cur.parentNode) {\n bp.unshift(cur);\n }\n while (ap[i] === bp[i]) {\n i++;\n }\n return i ? siblingCheck(ap[i], bp[i]) : ap[i] === preferredDoc ? -1 : bp[i] === preferredDoc ? 1 : 0;\n };\n return doc;\n };\n Sizzle.matches = function (expr, elements) {\n return Sizzle(expr, null, null, elements);\n };\n Sizzle.matchesSelector = function (elem, expr) {\n if ((elem.ownerDocument || elem) !== document) {\n setDocument(elem);\n }\n expr = expr.replace(rattributeQuotes, '=\\'$1\\']');\n if (support.matchesSelector && documentIsHTML && (!rbuggyMatches || !rbuggyMatches.test(expr)) && (!rbuggyQSA || !rbuggyQSA.test(expr))) {\n try {\n var ret = matches.call(elem, expr);\n if (ret || support.disconnectedMatch || elem.document && elem.document.nodeType !== 11) {\n return ret;\n }\n } catch (e) {\n }\n }\n return Sizzle(expr, document, null, [elem]).length > 0;\n };\n Sizzle.contains = function (context, elem) {\n if ((context.ownerDocument || context) !== document) {\n setDocument(context);\n }\n return contains$1(context, elem);\n };\n Sizzle.attr = function (elem, name) {\n if ((elem.ownerDocument || elem) !== document) {\n setDocument(elem);\n }\n var fn = Expr.attrHandle[name.toLowerCase()], val = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ? fn(elem, name, !documentIsHTML) : undefined;\n return val !== undefined ? val : support.attributes || !documentIsHTML ? elem.getAttribute(name) : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;\n };\n Sizzle.error = function (msg) {\n throw new Error('Syntax error, unrecognized expression: ' + msg);\n };\n Sizzle.uniqueSort = function (results) {\n var elem, duplicates = [], j = 0, i = 0;\n hasDuplicate = !support.detectDuplicates;\n sortInput = !support.sortStable && results.slice(0);\n results.sort(sortOrder);\n if (hasDuplicate) {\n while (elem = results[i++]) {\n if (elem === results[i]) {\n j = duplicates.push(i);\n }\n }\n while (j--) {\n results.splice(duplicates[j], 1);\n }\n }\n sortInput = null;\n return results;\n };\n getText = Sizzle.getText = function (elem) {\n var node, ret = '', i = 0, nodeType = elem.nodeType;\n if (!nodeType) {\n while (node = elem[i++]) {\n ret += getText(node);\n }\n } else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {\n if (typeof elem.textContent === 'string') {\n return elem.textContent;\n } else {\n for (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n ret += getText(elem);\n }\n }\n } else if (nodeType === 3 || nodeType === 4) {\n return elem.nodeValue;\n }\n return ret;\n };\n Expr = Sizzle.selectors = {\n cacheLength: 50,\n createPseudo: markFunction,\n match: matchExpr,\n attrHandle: {},\n find: {},\n relative: {\n '>': {\n dir: 'parentNode',\n first: true\n },\n ' ': { dir: 'parentNode' },\n '+': {\n dir: 'previousSibling',\n first: true\n },\n '~': { dir: 'previousSibling' }\n },\n preFilter: {\n ATTR: function (match) {\n match[1] = match[1].replace(runescape, funescape);\n match[3] = (match[3] || match[4] || match[5] || '').replace(runescape, funescape);\n if (match[2] === '~=') {\n match[3] = ' ' + match[3] + ' ';\n }\n return match.slice(0, 4);\n },\n CHILD: function (match) {\n match[1] = match[1].toLowerCase();\n if (match[1].slice(0, 3) === 'nth') {\n if (!match[3]) {\n Sizzle.error(match[0]);\n }\n match[4] = +(match[4] ? match[5] + (match[6] || 1) : 2 * (match[3] === 'even' || match[3] === 'odd'));\n match[5] = +(match[7] + match[8] || match[3] === 'odd');\n } else if (match[3]) {\n Sizzle.error(match[0]);\n }\n return match;\n },\n PSEUDO: function (match) {\n var excess, unquoted = !match[6] && match[2];\n if (matchExpr.CHILD.test(match[0])) {\n return null;\n }\n if (match[3]) {\n match[2] = match[4] || match[5] || '';\n } else if (unquoted && rpseudo.test(unquoted) && (excess = tokenize(unquoted, true)) && (excess = unquoted.indexOf(')', unquoted.length - excess) - unquoted.length)) {\n match[0] = match[0].slice(0, excess);\n match[2] = unquoted.slice(0, excess);\n }\n return match.slice(0, 3);\n }\n },\n filter: {\n TAG: function (nodeNameSelector) {\n var nodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n return nodeNameSelector === '*' ? function () {\n return true;\n } : function (elem) {\n return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n };\n },\n CLASS: function (className) {\n var pattern = classCache[className + ' '];\n return pattern || (pattern = new RegExp('(^|' + whitespace + ')' + className + '(' + whitespace + '|$)')) && classCache(className, function (elem) {\n return pattern.test(typeof elem.className === 'string' && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute('class') || '');\n });\n },\n ATTR: function (name, operator, check) {\n return function (elem) {\n var result = Sizzle.attr(elem, name);\n if (result == null) {\n return operator === '!=';\n }\n if (!operator) {\n return true;\n }\n result += '';\n 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;\n };\n },\n CHILD: function (type, what, argument, first, last) {\n var simple = type.slice(0, 3) !== 'nth', forward = type.slice(-4) !== 'last', ofType = what === 'of-type';\n return first === 1 && last === 0 ? function (elem) {\n return !!elem.parentNode;\n } : function (elem, context, xml) {\n var cache, outerCache, node, diff, nodeIndex, start, dir = simple !== forward ? 'nextSibling' : 'previousSibling', parent = elem.parentNode, name = ofType && elem.nodeName.toLowerCase(), useCache = !xml && !ofType;\n if (parent) {\n if (simple) {\n while (dir) {\n node = elem;\n while (node = node[dir]) {\n if (ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) {\n return false;\n }\n }\n start = dir = type === 'only' && !start && 'nextSibling';\n }\n return true;\n }\n start = [forward ? parent.firstChild : parent.lastChild];\n if (forward && useCache) {\n outerCache = parent[expando] || (parent[expando] = {});\n cache = outerCache[type] || [];\n nodeIndex = cache[0] === dirruns && cache[1];\n diff = cache[0] === dirruns && cache[2];\n node = nodeIndex && parent.childNodes[nodeIndex];\n while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) {\n if (node.nodeType === 1 && ++diff && node === elem) {\n outerCache[type] = [\n dirruns,\n nodeIndex,\n diff\n ];\n break;\n }\n }\n } else if (useCache && (cache = (elem[expando] || (elem[expando] = {}))[type]) && cache[0] === dirruns) {\n diff = cache[1];\n } else {\n while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) {\n if ((ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) && ++diff) {\n if (useCache) {\n (node[expando] || (node[expando] = {}))[type] = [\n dirruns,\n diff\n ];\n }\n if (node === elem) {\n break;\n }\n }\n }\n }\n diff -= last;\n return diff === first || diff % first === 0 && diff / first >= 0;\n }\n };\n },\n PSEUDO: function (pseudo, argument) {\n var args, fn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || Sizzle.error('unsupported pseudo: ' + pseudo);\n if (fn[expando]) {\n return fn(argument);\n }\n if (fn.length > 1) {\n args = [\n pseudo,\n pseudo,\n '',\n argument\n ];\n return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ? markFunction(function (seed, matches) {\n var idx, matched = fn(seed, argument), i = matched.length;\n while (i--) {\n idx = indexOf$1.call(seed, matched[i]);\n seed[idx] = !(matches[idx] = matched[i]);\n }\n }) : function (elem) {\n return fn(elem, 0, args);\n };\n }\n return fn;\n }\n },\n pseudos: {\n not: markFunction(function (selector) {\n var input = [], results = [], matcher = compile(selector.replace(rtrim, '$1'));\n return matcher[expando] ? markFunction(function (seed, matches, context, xml) {\n var elem, unmatched = matcher(seed, null, xml, []), i = seed.length;\n while (i--) {\n if (elem = unmatched[i]) {\n seed[i] = !(matches[i] = elem);\n }\n }\n }) : function (elem, context, xml) {\n input[0] = elem;\n matcher(input, null, xml, results);\n return !results.pop();\n };\n }),\n has: markFunction(function (selector) {\n return function (elem) {\n return Sizzle(selector, elem).length > 0;\n };\n }),\n contains: markFunction(function (text) {\n text = text.replace(runescape, funescape);\n return function (elem) {\n return (elem.textContent || elem.innerText || getText(elem)).indexOf(text) > -1;\n };\n }),\n lang: markFunction(function (lang) {\n if (!ridentifier.test(lang || '')) {\n Sizzle.error('unsupported lang: ' + lang);\n }\n lang = lang.replace(runescape, funescape).toLowerCase();\n return function (elem) {\n var elemLang;\n do {\n if (elemLang = documentIsHTML ? elem.lang : elem.getAttribute('xml:lang') || elem.getAttribute('lang')) {\n elemLang = elemLang.toLowerCase();\n return elemLang === lang || elemLang.indexOf(lang + '-') === 0;\n }\n } while ((elem = elem.parentNode) && elem.nodeType === 1);\n return false;\n };\n }),\n target: function (elem) {\n var hash = domGlobals.window.location && domGlobals.window.location.hash;\n return hash && hash.slice(1) === elem.id;\n },\n root: function (elem) {\n return elem === docElem;\n },\n focus: function (elem) {\n return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n },\n enabled: function (elem) {\n return elem.disabled === false;\n },\n disabled: function (elem) {\n return elem.disabled === true;\n },\n checked: function (elem) {\n var nodeName = elem.nodeName.toLowerCase();\n return nodeName === 'input' && !!elem.checked || nodeName === 'option' && !!elem.selected;\n },\n selected: function (elem) {\n if (elem.parentNode) {\n elem.parentNode.selectedIndex;\n }\n return elem.selected === true;\n },\n empty: function (elem) {\n for (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n if (elem.nodeType < 6) {\n return false;\n }\n }\n return true;\n },\n parent: function (elem) {\n return !Expr.pseudos.empty(elem);\n },\n header: function (elem) {\n return rheader.test(elem.nodeName);\n },\n input: function (elem) {\n return rinputs.test(elem.nodeName);\n },\n button: function (elem) {\n var name = elem.nodeName.toLowerCase();\n return name === 'input' && elem.type === 'button' || name === 'button';\n },\n text: function (elem) {\n var attr;\n return elem.nodeName.toLowerCase() === 'input' && elem.type === 'text' && ((attr = elem.getAttribute('type')) == null || attr.toLowerCase() === 'text');\n },\n first: createPositionalPseudo(function () {\n return [0];\n }),\n last: createPositionalPseudo(function (matchIndexes, length) {\n return [length - 1];\n }),\n eq: createPositionalPseudo(function (matchIndexes, length, argument) {\n return [argument < 0 ? argument + length : argument];\n }),\n even: createPositionalPseudo(function (matchIndexes, length) {\n var i = 0;\n for (; i < length; i += 2) {\n matchIndexes.push(i);\n }\n return matchIndexes;\n }),\n odd: createPositionalPseudo(function (matchIndexes, length) {\n var i = 1;\n for (; i < length; i += 2) {\n matchIndexes.push(i);\n }\n return matchIndexes;\n }),\n lt: createPositionalPseudo(function (matchIndexes, length, argument) {\n var i = argument < 0 ? argument + length : argument;\n for (; --i >= 0;) {\n matchIndexes.push(i);\n }\n return matchIndexes;\n }),\n gt: createPositionalPseudo(function (matchIndexes, length, argument) {\n var i = argument < 0 ? argument + length : argument;\n for (; ++i < length;) {\n matchIndexes.push(i);\n }\n return matchIndexes;\n })\n }\n };\n Expr.pseudos.nth = Expr.pseudos.eq;\n for (i in {\n radio: true,\n checkbox: true,\n file: true,\n password: true,\n image: true\n }) {\n Expr.pseudos[i] = createInputPseudo(i);\n }\n for (i in {\n submit: true,\n reset: true\n }) {\n Expr.pseudos[i] = createButtonPseudo(i);\n }\n function setFilters() {\n }\n setFilters.prototype = Expr.filters = Expr.pseudos;\n Expr.setFilters = new setFilters();\n tokenize = Sizzle.tokenize = function (selector, parseOnly) {\n var matched, match, tokens, type, soFar, groups, preFilters, cached = tokenCache[selector + ' '];\n if (cached) {\n return parseOnly ? 0 : cached.slice(0);\n }\n soFar = selector;\n groups = [];\n preFilters = Expr.preFilter;\n while (soFar) {\n if (!matched || (match = rcomma.exec(soFar))) {\n if (match) {\n soFar = soFar.slice(match[0].length) || soFar;\n }\n groups.push(tokens = []);\n }\n matched = false;\n if (match = rcombinators.exec(soFar)) {\n matched = match.shift();\n tokens.push({\n value: matched,\n type: match[0].replace(rtrim, ' ')\n });\n soFar = soFar.slice(matched.length);\n }\n for (type in Expr.filter) {\n if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))) {\n matched = match.shift();\n tokens.push({\n value: matched,\n type: type,\n matches: match\n });\n soFar = soFar.slice(matched.length);\n }\n }\n if (!matched) {\n break;\n }\n }\n return parseOnly ? soFar.length : soFar ? Sizzle.error(selector) : tokenCache(selector, groups).slice(0);\n };\n function toSelector(tokens) {\n var i = 0, len = tokens.length, selector = '';\n for (; i < len; i++) {\n selector += tokens[i].value;\n }\n return selector;\n }\n function addCombinator(matcher, combinator, base) {\n var dir = combinator.dir, checkNonElements = base && dir === 'parentNode', doneName = done++;\n return combinator.first ? function (elem, context, xml) {\n while (elem = elem[dir]) {\n if (elem.nodeType === 1 || checkNonElements) {\n return matcher(elem, context, xml);\n }\n }\n } : function (elem, context, xml) {\n var oldCache, outerCache, newCache = [\n dirruns,\n doneName\n ];\n if (xml) {\n while (elem = elem[dir]) {\n if (elem.nodeType === 1 || checkNonElements) {\n if (matcher(elem, context, xml)) {\n return true;\n }\n }\n }\n } else {\n while (elem = elem[dir]) {\n if (elem.nodeType === 1 || checkNonElements) {\n outerCache = elem[expando] || (elem[expando] = {});\n if ((oldCache = outerCache[dir]) && oldCache[0] === dirruns && oldCache[1] === doneName) {\n return newCache[2] = oldCache[2];\n } else {\n outerCache[dir] = newCache;\n if (newCache[2] = matcher(elem, context, xml)) {\n return true;\n }\n }\n }\n }\n }\n };\n }\n function elementMatcher(matchers) {\n return matchers.length > 1 ? function (elem, context, xml) {\n var i = matchers.length;\n while (i--) {\n if (!matchers[i](elem, context, xml)) {\n return false;\n }\n }\n return true;\n } : matchers[0];\n }\n function multipleContexts(selector, contexts, results) {\n var i = 0, len = contexts.length;\n for (; i < len; i++) {\n Sizzle(selector, contexts[i], results);\n }\n return results;\n }\n function condense(unmatched, map, filter, context, xml) {\n var elem, newUnmatched = [], i = 0, len = unmatched.length, mapped = map != null;\n for (; i < len; i++) {\n if (elem = unmatched[i]) {\n if (!filter || filter(elem, context, xml)) {\n newUnmatched.push(elem);\n if (mapped) {\n map.push(i);\n }\n }\n }\n }\n return newUnmatched;\n }\n function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n if (postFilter && !postFilter[expando]) {\n postFilter = setMatcher(postFilter);\n }\n if (postFinder && !postFinder[expando]) {\n postFinder = setMatcher(postFinder, postSelector);\n }\n return markFunction(function (seed, results, context, xml) {\n 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;\n if (matcher) {\n matcher(matcherIn, matcherOut, context, xml);\n }\n if (postFilter) {\n temp = condense(matcherOut, postMap);\n postFilter(temp, [], context, xml);\n i = temp.length;\n while (i--) {\n if (elem = temp[i]) {\n matcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\n }\n }\n }\n if (seed) {\n if (postFinder || preFilter) {\n if (postFinder) {\n temp = [];\n i = matcherOut.length;\n while (i--) {\n if (elem = matcherOut[i]) {\n temp.push(matcherIn[i] = elem);\n }\n }\n postFinder(null, matcherOut = [], temp, xml);\n }\n i = matcherOut.length;\n while (i--) {\n if ((elem = matcherOut[i]) && (temp = postFinder ? indexOf$1.call(seed, elem) : preMap[i]) > -1) {\n seed[temp] = !(results[temp] = elem);\n }\n }\n }\n } else {\n matcherOut = condense(matcherOut === results ? matcherOut.splice(preexisting, matcherOut.length) : matcherOut);\n if (postFinder) {\n postFinder(null, results, matcherOut, xml);\n } else {\n push.apply(results, matcherOut);\n }\n }\n });\n }\n function matcherFromTokens(tokens) {\n 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) {\n return elem === checkContext;\n }, implicitRelative, true), matchAnyContext = addCombinator(function (elem) {\n return indexOf$1.call(checkContext, elem) > -1;\n }, implicitRelative, true), matchers = [function (elem, context, xml) {\n return !leadingRelative && (xml || context !== outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml));\n }];\n for (; i < len; i++) {\n if (matcher = Expr.relative[tokens[i].type]) {\n matchers = [addCombinator(elementMatcher(matchers), matcher)];\n } else {\n matcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);\n if (matcher[expando]) {\n j = ++i;\n for (; j < len; j++) {\n if (Expr.relative[tokens[j].type]) {\n break;\n }\n }\n 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));\n }\n matchers.push(matcher);\n }\n }\n return elementMatcher(matchers);\n }\n function matcherFromGroupMatchers(elementMatchers, setMatchers) {\n var bySet = setMatchers.length > 0, byElement = elementMatchers.length > 0, superMatcher = function (seed, context, xml, results, outermost) {\n 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;\n if (outermost) {\n outermostContext = context !== document && context;\n }\n for (; i !== len && (elem = elems[i]) != null; i++) {\n if (byElement && elem) {\n j = 0;\n while (matcher = elementMatchers[j++]) {\n if (matcher(elem, context, xml)) {\n results.push(elem);\n break;\n }\n }\n if (outermost) {\n dirruns = dirrunsUnique;\n }\n }\n if (bySet) {\n if (elem = !matcher && elem) {\n matchedCount--;\n }\n if (seed) {\n unmatched.push(elem);\n }\n }\n }\n matchedCount += i;\n if (bySet && i !== matchedCount) {\n j = 0;\n while (matcher = setMatchers[j++]) {\n matcher(unmatched, setMatched, context, xml);\n }\n if (seed) {\n if (matchedCount > 0) {\n while (i--) {\n if (!(unmatched[i] || setMatched[i])) {\n setMatched[i] = pop.call(results);\n }\n }\n }\n setMatched = condense(setMatched);\n }\n push.apply(results, setMatched);\n if (outermost && !seed && setMatched.length > 0 && matchedCount + setMatchers.length > 1) {\n Sizzle.uniqueSort(results);\n }\n }\n if (outermost) {\n dirruns = dirrunsUnique;\n outermostContext = contextBackup;\n }\n return unmatched;\n };\n return bySet ? markFunction(superMatcher) : superMatcher;\n }\n compile = Sizzle.compile = function (selector, match) {\n var i, setMatchers = [], elementMatchers = [], cached = compilerCache[selector + ' '];\n if (!cached) {\n if (!match) {\n match = tokenize(selector);\n }\n i = match.length;\n while (i--) {\n cached = matcherFromTokens(match[i]);\n if (cached[expando]) {\n setMatchers.push(cached);\n } else {\n elementMatchers.push(cached);\n }\n }\n cached = compilerCache(selector, matcherFromGroupMatchers(elementMatchers, setMatchers));\n cached.selector = selector;\n }\n return cached;\n };\n select = Sizzle.select = function (selector, context, results, seed) {\n var i, tokens, token, type, find, compiled = typeof selector === 'function' && selector, match = !seed && tokenize(selector = compiled.selector || selector);\n results = results || [];\n if (match.length === 1) {\n tokens = match[0] = match[0].slice(0);\n if (tokens.length > 2 && (token = tokens[0]).type === 'ID' && support.getById && context.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\n context = (Expr.find.ID(token.matches[0].replace(runescape, funescape), context) || [])[0];\n if (!context) {\n return results;\n } else if (compiled) {\n context = context.parentNode;\n }\n selector = selector.slice(tokens.shift().value.length);\n }\n i = matchExpr.needsContext.test(selector) ? 0 : tokens.length;\n while (i--) {\n token = tokens[i];\n if (Expr.relative[type = token.type]) {\n break;\n }\n if (find = Expr.find[type]) {\n if (seed = find(token.matches[0].replace(runescape, funescape), rsibling.test(tokens[0].type) && testContext(context.parentNode) || context)) {\n tokens.splice(i, 1);\n selector = seed.length && toSelector(tokens);\n if (!selector) {\n push.apply(results, seed);\n return results;\n }\n break;\n }\n }\n }\n }\n (compiled || compile(selector, match))(seed, context, !documentIsHTML, results, rsibling.test(selector) && testContext(context.parentNode) || context);\n return results;\n };\n support.sortStable = expando.split('').sort(sortOrder).join('') === expando;\n support.detectDuplicates = !!hasDuplicate;\n setDocument();\n support.sortDetached = true;\n\n var isArray$1 = Array.isArray;\n var toArray = function (obj) {\n var array = obj, i, l;\n if (!isArray$1(obj)) {\n array = [];\n for (i = 0, l = obj.length; i < l; i++) {\n array[i] = obj[i];\n }\n }\n return array;\n };\n var each$1 = function (o, cb, s) {\n var n, l;\n if (!o) {\n return 0;\n }\n s = s || o;\n if (o.length !== undefined) {\n for (n = 0, l = o.length; n < l; n++) {\n if (cb.call(s, o[n], n, o) === false) {\n return 0;\n }\n }\n } else {\n for (n in o) {\n if (o.hasOwnProperty(n)) {\n if (cb.call(s, o[n], n, o) === false) {\n return 0;\n }\n }\n }\n }\n return 1;\n };\n var map$1 = function (array, callback) {\n var out = [];\n each$1(array, function (item, index) {\n out.push(callback(item, index, array));\n });\n return out;\n };\n var filter$1 = function (a, f) {\n var o = [];\n each$1(a, function (v, index) {\n if (!f || f(v, index, a)) {\n o.push(v);\n }\n });\n return o;\n };\n var indexOf$2 = function (a, v) {\n var i, l;\n if (a) {\n for (i = 0, l = a.length; i < l; i++) {\n if (a[i] === v) {\n return i;\n }\n }\n }\n return -1;\n };\n var reduce = function (collection, iteratee, accumulator, thisArg) {\n var i = 0;\n if (arguments.length < 3) {\n accumulator = collection[0];\n }\n for (; i < collection.length; i++) {\n accumulator = iteratee.call(thisArg, accumulator, collection[i], i);\n }\n return accumulator;\n };\n var findIndex$1 = function (array, predicate, thisArg) {\n var i, l;\n for (i = 0, l = array.length; i < l; i++) {\n if (predicate.call(thisArg, array[i], i, array)) {\n return i;\n }\n }\n return -1;\n };\n var find$1 = function (array, predicate, thisArg) {\n var idx = findIndex$1(array, predicate, thisArg);\n if (idx !== -1) {\n return array[idx];\n }\n return undefined;\n };\n var last$1 = function (collection) {\n return collection[collection.length - 1];\n };\n var ArrUtils = {\n isArray: isArray$1,\n toArray: toArray,\n each: each$1,\n map: map$1,\n filter: filter$1,\n indexOf: indexOf$2,\n reduce: reduce,\n findIndex: findIndex$1,\n find: find$1,\n last: last$1\n };\n\n var whiteSpaceRegExp = /^\\s*|\\s*$/g;\n var trim = function (str) {\n return str === null || str === undefined ? '' : ('' + str).replace(whiteSpaceRegExp, '');\n };\n var is = function (obj, type) {\n if (!type) {\n return obj !== undefined;\n }\n if (type === 'array' && ArrUtils.isArray(obj)) {\n return true;\n }\n return typeof obj === type;\n };\n var makeMap = function (items, delim, map) {\n var i;\n items = items || [];\n delim = delim || ',';\n if (typeof items === 'string') {\n items = items.split(delim);\n }\n map = map || {};\n i = items.length;\n while (i--) {\n map[items[i]] = {};\n }\n return map;\n };\n var hasOwnProperty = function (obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n };\n var create = function (s, p, root) {\n var self = this;\n var sp, ns, cn, scn, c, de = 0;\n s = /^((static) )?([\\w.]+)(:([\\w.]+))?/.exec(s);\n cn = s[3].match(/(^|\\.)(\\w+)$/i)[2];\n ns = self.createNS(s[3].replace(/\\.\\w+$/, ''), root);\n if (ns[cn]) {\n return;\n }\n if (s[2] === 'static') {\n ns[cn] = p;\n if (this.onCreate) {\n this.onCreate(s[2], s[3], ns[cn]);\n }\n return;\n }\n if (!p[cn]) {\n p[cn] = function () {\n };\n de = 1;\n }\n ns[cn] = p[cn];\n self.extend(ns[cn].prototype, p);\n if (s[5]) {\n sp = self.resolve(s[5]).prototype;\n scn = s[5].match(/\\.(\\w+)$/i)[1];\n c = ns[cn];\n if (de) {\n ns[cn] = function () {\n return sp[scn].apply(this, arguments);\n };\n } else {\n ns[cn] = function () {\n this.parent = sp[scn];\n return c.apply(this, arguments);\n };\n }\n ns[cn].prototype[cn] = ns[cn];\n self.each(sp, function (f, n) {\n ns[cn].prototype[n] = sp[n];\n });\n self.each(p, function (f, n) {\n if (sp[n]) {\n ns[cn].prototype[n] = function () {\n this.parent = sp[n];\n return f.apply(this, arguments);\n };\n } else {\n if (n !== cn) {\n ns[cn].prototype[n] = f;\n }\n }\n });\n }\n self.each(p.static, function (f, n) {\n ns[cn][n] = f;\n });\n };\n var extend = function (obj, ext) {\n var x = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n x[_i - 2] = arguments[_i];\n }\n var i, l, name;\n var args = arguments;\n var value;\n for (i = 1, l = args.length; i < l; i++) {\n ext = args[i];\n for (name in ext) {\n if (ext.hasOwnProperty(name)) {\n value = ext[name];\n if (value !== undefined) {\n obj[name] = value;\n }\n }\n }\n }\n return obj;\n };\n var walk = function (o, f, n, s) {\n s = s || this;\n if (o) {\n if (n) {\n o = o[n];\n }\n ArrUtils.each(o, function (o, i) {\n if (f.call(s, o, i, n) === false) {\n return false;\n }\n walk(o, f, n, s);\n });\n }\n };\n var createNS = function (n, o) {\n var i, v;\n o = o || domGlobals.window;\n n = n.split('.');\n for (i = 0; i < n.length; i++) {\n v = n[i];\n if (!o[v]) {\n o[v] = {};\n }\n o = o[v];\n }\n return o;\n };\n var resolve$1 = function (n, o) {\n var i, l;\n o = o || domGlobals.window;\n n = n.split('.');\n for (i = 0, l = n.length; i < l; i++) {\n o = o[n[i]];\n if (!o) {\n break;\n }\n }\n return o;\n };\n var explode = function (s, d) {\n if (!s || is(s, 'array')) {\n return s;\n }\n return ArrUtils.map(s.split(d || ','), trim);\n };\n var _addCacheSuffix = function (url) {\n var cacheSuffix = Env.cacheSuffix;\n if (cacheSuffix) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + cacheSuffix;\n }\n return url;\n };\n var Tools = {\n trim: trim,\n isArray: ArrUtils.isArray,\n is: is,\n toArray: ArrUtils.toArray,\n makeMap: makeMap,\n each: ArrUtils.each,\n map: ArrUtils.map,\n grep: ArrUtils.filter,\n inArray: ArrUtils.indexOf,\n hasOwn: hasOwnProperty,\n extend: extend,\n create: create,\n walk: walk,\n createNS: createNS,\n resolve: resolve$1,\n explode: explode,\n _addCacheSuffix: _addCacheSuffix\n };\n\n var doc = domGlobals.document, push$1 = Array.prototype.push, slice$1 = Array.prototype.slice;\n var rquickExpr$1 = /^(?:[^#<]*(<[\\w\\W]+>)[^>]*$|#([\\w\\-]*)$)/;\n var Event = EventUtils.Event;\n var skipUniques = Tools.makeMap('children,contents,next,prev');\n var isDefined = function (obj) {\n return typeof obj !== 'undefined';\n };\n var isString$1 = function (obj) {\n return typeof obj === 'string';\n };\n var isWindow = function (obj) {\n return obj && obj === obj.window;\n };\n var createFragment = function (html, fragDoc) {\n var frag, node, container;\n fragDoc = fragDoc || doc;\n container = fragDoc.createElement('div');\n frag = fragDoc.createDocumentFragment();\n container.innerHTML = html;\n while (node = container.firstChild) {\n frag.appendChild(node);\n }\n return frag;\n };\n var domManipulate = function (targetNodes, sourceItem, callback, reverse) {\n var i;\n if (isString$1(sourceItem)) {\n sourceItem = createFragment(sourceItem, getElementDocument(targetNodes[0]));\n } else if (sourceItem.length && !sourceItem.nodeType) {\n sourceItem = DomQuery.makeArray(sourceItem);\n if (reverse) {\n for (i = sourceItem.length - 1; i >= 0; i--) {\n domManipulate(targetNodes, sourceItem[i], callback, reverse);\n }\n } else {\n for (i = 0; i < sourceItem.length; i++) {\n domManipulate(targetNodes, sourceItem[i], callback, reverse);\n }\n }\n return targetNodes;\n }\n if (sourceItem.nodeType) {\n i = targetNodes.length;\n while (i--) {\n callback.call(targetNodes[i], sourceItem);\n }\n }\n return targetNodes;\n };\n var hasClass = function (node, className) {\n return node && className && (' ' + node.className + ' ').indexOf(' ' + className + ' ') !== -1;\n };\n var wrap = function (elements, wrapper, all) {\n var lastParent, newWrapper;\n wrapper = DomQuery(wrapper)[0];\n elements.each(function () {\n var self = this;\n if (!all || lastParent !== self.parentNode) {\n lastParent = self.parentNode;\n newWrapper = wrapper.cloneNode(false);\n self.parentNode.insertBefore(newWrapper, self);\n newWrapper.appendChild(self);\n } else {\n newWrapper.appendChild(self);\n }\n });\n return elements;\n };\n var numericCssMap = Tools.makeMap('fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom', ' ');\n var booleanMap = Tools.makeMap('checked compact declare defer disabled ismap multiple nohref noshade nowrap readonly selected', ' ');\n var propFix = {\n for: 'htmlFor',\n class: 'className',\n readonly: 'readOnly'\n };\n var cssFix = { float: 'cssFloat' };\n var attrHooks = {}, cssHooks = {};\n var DomQuery = function (selector, context) {\n return new DomQuery.fn.init(selector, context);\n };\n var inArray = function (item, array) {\n var i;\n if (array.indexOf) {\n return array.indexOf(item);\n }\n i = array.length;\n while (i--) {\n if (array[i] === item) {\n return i;\n }\n }\n return -1;\n };\n var whiteSpaceRegExp$1 = /^\\s*|\\s*$/g;\n var trim$1 = function (str) {\n return str === null || str === undefined ? '' : ('' + str).replace(whiteSpaceRegExp$1, '');\n };\n var each$2 = function (obj, callback) {\n var length, key, i, value;\n if (obj) {\n length = obj.length;\n if (length === undefined) {\n for (key in obj) {\n if (obj.hasOwnProperty(key)) {\n value = obj[key];\n if (callback.call(value, key, value) === false) {\n break;\n }\n }\n }\n } else {\n for (i = 0; i < length; i++) {\n value = obj[i];\n if (callback.call(value, i, value) === false) {\n break;\n }\n }\n }\n }\n return obj;\n };\n var grep = function (array, callback) {\n var out = [];\n each$2(array, function (i, item) {\n if (callback(item, i)) {\n out.push(item);\n }\n });\n return out;\n };\n var getElementDocument = function (element) {\n if (!element) {\n return doc;\n }\n if (element.nodeType === 9) {\n return element;\n }\n return element.ownerDocument;\n };\n DomQuery.fn = DomQuery.prototype = {\n constructor: DomQuery,\n selector: '',\n context: null,\n length: 0,\n init: function (selector, context) {\n var self = this;\n var match, node;\n if (!selector) {\n return self;\n }\n if (selector.nodeType) {\n self.context = self[0] = selector;\n self.length = 1;\n return self;\n }\n if (context && context.nodeType) {\n self.context = context;\n } else {\n if (context) {\n return DomQuery(selector).attr(context);\n }\n self.context = context = domGlobals.document;\n }\n if (isString$1(selector)) {\n self.selector = selector;\n if (selector.charAt(0) === '<' && selector.charAt(selector.length - 1) === '>' && selector.length >= 3) {\n match = [\n null,\n selector,\n null\n ];\n } else {\n match = rquickExpr$1.exec(selector);\n }\n if (match) {\n if (match[1]) {\n node = createFragment(selector, getElementDocument(context)).firstChild;\n while (node) {\n push$1.call(self, node);\n node = node.nextSibling;\n }\n } else {\n node = getElementDocument(context).getElementById(match[2]);\n if (!node) {\n return self;\n }\n if (node.id !== match[2]) {\n return self.find(selector);\n }\n self.length = 1;\n self[0] = node;\n }\n } else {\n return DomQuery(context).find(selector);\n }\n } else {\n this.add(selector, false);\n }\n return self;\n },\n toArray: function () {\n return Tools.toArray(this);\n },\n add: function (items, sort) {\n var self = this;\n var nodes, i;\n if (isString$1(items)) {\n return self.add(DomQuery(items));\n }\n if (sort !== false) {\n nodes = DomQuery.unique(self.toArray().concat(DomQuery.makeArray(items)));\n self.length = nodes.length;\n for (i = 0; i < nodes.length; i++) {\n self[i] = nodes[i];\n }\n } else {\n push$1.apply(self, DomQuery.makeArray(items));\n }\n return self;\n },\n attr: function (name, value) {\n var self = this;\n var hook;\n if (typeof name === 'object') {\n each$2(name, function (name, value) {\n self.attr(name, value);\n });\n } else if (isDefined(value)) {\n this.each(function () {\n var hook;\n if (this.nodeType === 1) {\n hook = attrHooks[name];\n if (hook && hook.set) {\n hook.set(this, value);\n return;\n }\n if (value === null) {\n this.removeAttribute(name, 2);\n } else {\n this.setAttribute(name, value, 2);\n }\n }\n });\n } else {\n if (self[0] && self[0].nodeType === 1) {\n hook = attrHooks[name];\n if (hook && hook.get) {\n return hook.get(self[0], name);\n }\n if (booleanMap[name]) {\n return self.prop(name) ? name : undefined;\n }\n value = self[0].getAttribute(name, 2);\n if (value === null) {\n value = undefined;\n }\n }\n return value;\n }\n return self;\n },\n removeAttr: function (name) {\n return this.attr(name, null);\n },\n prop: function (name, value) {\n var self = this;\n name = propFix[name] || name;\n if (typeof name === 'object') {\n each$2(name, function (name, value) {\n self.prop(name, value);\n });\n } else if (isDefined(value)) {\n this.each(function () {\n if (this.nodeType === 1) {\n this[name] = value;\n }\n });\n } else {\n if (self[0] && self[0].nodeType && name in self[0]) {\n return self[0][name];\n }\n return value;\n }\n return self;\n },\n css: function (name, value) {\n var self = this;\n var elm, hook;\n var camel = function (name) {\n return name.replace(/-(\\D)/g, function (a, b) {\n return b.toUpperCase();\n });\n };\n var dashed = function (name) {\n return name.replace(/[A-Z]/g, function (a) {\n return '-' + a;\n });\n };\n if (typeof name === 'object') {\n each$2(name, function (name, value) {\n self.css(name, value);\n });\n } else {\n if (isDefined(value)) {\n name = camel(name);\n if (typeof value === 'number' && !numericCssMap[name]) {\n value = value.toString() + 'px';\n }\n self.each(function () {\n var style = this.style;\n hook = cssHooks[name];\n if (hook && hook.set) {\n hook.set(this, value);\n return;\n }\n try {\n this.style[cssFix[name] || name] = value;\n } catch (ex) {\n }\n if (value === null || value === '') {\n if (style.removeProperty) {\n style.removeProperty(dashed(name));\n } else {\n style.removeAttribute(name);\n }\n }\n });\n } else {\n elm = self[0];\n hook = cssHooks[name];\n if (hook && hook.get) {\n return hook.get(elm);\n }\n if (elm.ownerDocument.defaultView) {\n try {\n return elm.ownerDocument.defaultView.getComputedStyle(elm, null).getPropertyValue(dashed(name));\n } catch (ex) {\n return undefined;\n }\n } else if (elm.currentStyle) {\n return elm.currentStyle[camel(name)];\n } else {\n return '';\n }\n }\n }\n return self;\n },\n remove: function () {\n var self = this;\n var node, i = this.length;\n while (i--) {\n node = self[i];\n Event.clean(node);\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n }\n }\n return this;\n },\n empty: function () {\n var self = this;\n var node, i = this.length;\n while (i--) {\n node = self[i];\n while (node.firstChild) {\n node.removeChild(node.firstChild);\n }\n }\n return this;\n },\n html: function (value) {\n var self = this;\n var i;\n if (isDefined(value)) {\n i = self.length;\n try {\n while (i--) {\n self[i].innerHTML = value;\n }\n } catch (ex) {\n DomQuery(self[i]).empty().append(value);\n }\n return self;\n }\n return self[0] ? self[0].innerHTML : '';\n },\n text: function (value) {\n var self = this;\n var i;\n if (isDefined(value)) {\n i = self.length;\n while (i--) {\n if ('innerText' in self[i]) {\n self[i].innerText = value;\n } else {\n self[0].textContent = value;\n }\n }\n return self;\n }\n return self[0] ? self[0].innerText || self[0].textContent : '';\n },\n append: function () {\n return domManipulate(this, arguments, function (node) {\n if (this.nodeType === 1 || this.host && this.host.nodeType === 1) {\n this.appendChild(node);\n }\n });\n },\n prepend: function () {\n return domManipulate(this, arguments, function (node) {\n if (this.nodeType === 1 || this.host && this.host.nodeType === 1) {\n this.insertBefore(node, this.firstChild);\n }\n }, true);\n },\n before: function () {\n var self = this;\n if (self[0] && self[0].parentNode) {\n return domManipulate(self, arguments, function (node) {\n this.parentNode.insertBefore(node, this);\n });\n }\n return self;\n },\n after: function () {\n var self = this;\n if (self[0] && self[0].parentNode) {\n return domManipulate(self, arguments, function (node) {\n this.parentNode.insertBefore(node, this.nextSibling);\n }, true);\n }\n return self;\n },\n appendTo: function (val) {\n DomQuery(val).append(this);\n return this;\n },\n prependTo: function (val) {\n DomQuery(val).prepend(this);\n return this;\n },\n replaceWith: function (content) {\n return this.before(content).remove();\n },\n wrap: function (content) {\n return wrap(this, content);\n },\n wrapAll: function (content) {\n return wrap(this, content, true);\n },\n wrapInner: function (content) {\n this.each(function () {\n DomQuery(this).contents().wrapAll(content);\n });\n return this;\n },\n unwrap: function () {\n return this.parent().each(function () {\n DomQuery(this).replaceWith(this.childNodes);\n });\n },\n clone: function () {\n var result = [];\n this.each(function () {\n result.push(this.cloneNode(true));\n });\n return DomQuery(result);\n },\n addClass: function (className) {\n return this.toggleClass(className, true);\n },\n removeClass: function (className) {\n return this.toggleClass(className, false);\n },\n toggleClass: function (className, state) {\n var self = this;\n if (typeof className !== 'string') {\n return self;\n }\n if (className.indexOf(' ') !== -1) {\n each$2(className.split(' '), function () {\n self.toggleClass(this, state);\n });\n } else {\n self.each(function (index, node) {\n var existingClassName, classState;\n classState = hasClass(node, className);\n if (classState !== state) {\n existingClassName = node.className;\n if (classState) {\n node.className = trim$1((' ' + existingClassName + ' ').replace(' ' + className + ' ', ' '));\n } else {\n node.className += existingClassName ? ' ' + className : className;\n }\n }\n });\n }\n return self;\n },\n hasClass: function (className) {\n return hasClass(this[0], className);\n },\n each: function (callback) {\n return each$2(this, callback);\n },\n on: function (name, callback) {\n return this.each(function () {\n Event.bind(this, name, callback);\n });\n },\n off: function (name, callback) {\n return this.each(function () {\n Event.unbind(this, name, callback);\n });\n },\n trigger: function (name) {\n return this.each(function () {\n if (typeof name === 'object') {\n Event.fire(this, name.type, name);\n } else {\n Event.fire(this, name);\n }\n });\n },\n show: function () {\n return this.css('display', '');\n },\n hide: function () {\n return this.css('display', 'none');\n },\n slice: function () {\n return new DomQuery(slice$1.apply(this, arguments));\n },\n eq: function (index) {\n return index === -1 ? this.slice(index) : this.slice(index, +index + 1);\n },\n first: function () {\n return this.eq(0);\n },\n last: function () {\n return this.eq(-1);\n },\n find: function (selector) {\n var i, l;\n var ret = [];\n for (i = 0, l = this.length; i < l; i++) {\n DomQuery.find(selector, this[i], ret);\n }\n return DomQuery(ret);\n },\n filter: function (selector) {\n if (typeof selector === 'function') {\n return DomQuery(grep(this.toArray(), function (item, i) {\n return selector(i, item);\n }));\n }\n return DomQuery(DomQuery.filter(selector, this.toArray()));\n },\n closest: function (selector) {\n var result = [];\n if (selector instanceof DomQuery) {\n selector = selector[0];\n }\n this.each(function (i, node) {\n while (node) {\n if (typeof selector === 'string' && DomQuery(node).is(selector)) {\n result.push(node);\n break;\n } else if (node === selector) {\n result.push(node);\n break;\n }\n node = node.parentNode;\n }\n });\n return DomQuery(result);\n },\n offset: function (offset) {\n var elm, doc, docElm;\n var x = 0, y = 0, pos;\n if (!offset) {\n elm = this[0];\n if (elm) {\n doc = elm.ownerDocument;\n docElm = doc.documentElement;\n if (elm.getBoundingClientRect) {\n pos = elm.getBoundingClientRect();\n x = pos.left + (docElm.scrollLeft || doc.body.scrollLeft) - docElm.clientLeft;\n y = pos.top + (docElm.scrollTop || doc.body.scrollTop) - docElm.clientTop;\n }\n }\n return {\n left: x,\n top: y\n };\n }\n return this.css(offset);\n },\n push: push$1,\n sort: [].sort,\n splice: [].splice\n };\n Tools.extend(DomQuery, {\n extend: Tools.extend,\n makeArray: function (object) {\n if (isWindow(object) || object.nodeType) {\n return [object];\n }\n return Tools.toArray(object);\n },\n inArray: inArray,\n isArray: Tools.isArray,\n each: each$2,\n trim: trim$1,\n grep: grep,\n find: Sizzle,\n expr: Sizzle.selectors,\n unique: Sizzle.uniqueSort,\n text: Sizzle.getText,\n contains: Sizzle.contains,\n filter: function (expr, elems, not) {\n var i = elems.length;\n if (not) {\n expr = ':not(' + expr + ')';\n }\n while (i--) {\n if (elems[i].nodeType !== 1) {\n elems.splice(i, 1);\n }\n }\n if (elems.length === 1) {\n elems = DomQuery.find.matchesSelector(elems[0], expr) ? [elems[0]] : [];\n } else {\n elems = DomQuery.find.matches(expr, elems);\n }\n return elems;\n }\n });\n var dir = function (el, prop, until) {\n var matched = [];\n var cur = el[prop];\n if (typeof until !== 'string' && until instanceof DomQuery) {\n until = until[0];\n }\n while (cur && cur.nodeType !== 9) {\n if (until !== undefined) {\n if (cur === until) {\n break;\n }\n if (typeof until === 'string' && DomQuery(cur).is(until)) {\n break;\n }\n }\n if (cur.nodeType === 1) {\n matched.push(cur);\n }\n cur = cur[prop];\n }\n return matched;\n };\n var sibling = function (node, siblingName, nodeType, until) {\n var result = [];\n if (until instanceof DomQuery) {\n until = until[0];\n }\n for (; node; node = node[siblingName]) {\n if (nodeType && node.nodeType !== nodeType) {\n continue;\n }\n if (until !== undefined) {\n if (node === until) {\n break;\n }\n if (typeof until === 'string' && DomQuery(node).is(until)) {\n break;\n }\n }\n result.push(node);\n }\n return result;\n };\n var firstSibling = function (node, siblingName, nodeType) {\n for (node = node[siblingName]; node; node = node[siblingName]) {\n if (node.nodeType === nodeType) {\n return node;\n }\n }\n return null;\n };\n each$2({\n parent: function (node) {\n var parent = node.parentNode;\n return parent && parent.nodeType !== 11 ? parent : null;\n },\n parents: function (node) {\n return dir(node, 'parentNode');\n },\n next: function (node) {\n return firstSibling(node, 'nextSibling', 1);\n },\n prev: function (node) {\n return firstSibling(node, 'previousSibling', 1);\n },\n children: function (node) {\n return sibling(node.firstChild, 'nextSibling', 1);\n },\n contents: function (node) {\n return Tools.toArray((node.nodeName === 'iframe' ? node.contentDocument || node.contentWindow.document : node).childNodes);\n }\n }, function (name, fn) {\n DomQuery.fn[name] = function (selector) {\n var self = this;\n var result = [];\n self.each(function () {\n var nodes = fn.call(result, this, selector, result);\n if (nodes) {\n if (DomQuery.isArray(nodes)) {\n result.push.apply(result, nodes);\n } else {\n result.push(nodes);\n }\n }\n });\n if (this.length > 1) {\n if (!skipUniques[name]) {\n result = DomQuery.unique(result);\n }\n if (name.indexOf('parents') === 0) {\n result = result.reverse();\n }\n }\n result = DomQuery(result);\n if (selector) {\n return result.filter(selector);\n }\n return result;\n };\n });\n each$2({\n parentsUntil: function (node, until) {\n return dir(node, 'parentNode', until);\n },\n nextUntil: function (node, until) {\n return sibling(node, 'nextSibling', 1, until).slice(1);\n },\n prevUntil: function (node, until) {\n return sibling(node, 'previousSibling', 1, until).slice(1);\n }\n }, function (name, fn) {\n DomQuery.fn[name] = function (selector, filter) {\n var self = this;\n var result = [];\n self.each(function () {\n var nodes = fn.call(result, this, selector, result);\n if (nodes) {\n if (DomQuery.isArray(nodes)) {\n result.push.apply(result, nodes);\n } else {\n result.push(nodes);\n }\n }\n });\n if (this.length > 1) {\n result = DomQuery.unique(result);\n if (name.indexOf('parents') === 0 || name === 'prevUntil') {\n result = result.reverse();\n }\n }\n result = DomQuery(result);\n if (filter) {\n return result.filter(filter);\n }\n return result;\n };\n });\n DomQuery.fn.is = function (selector) {\n return !!selector && this.filter(selector).length > 0;\n };\n DomQuery.fn.init.prototype = DomQuery.fn;\n DomQuery.overrideDefaults = function (callback) {\n var defaults;\n var sub = function (selector, context) {\n defaults = defaults || callback();\n if (arguments.length === 0) {\n selector = defaults.element;\n }\n if (!context) {\n context = defaults.context;\n }\n return new sub.fn.init(selector, context);\n };\n DomQuery.extend(sub, this);\n return sub;\n };\n var appendHooks = function (targetHooks, prop, hooks) {\n each$2(hooks, function (name, func) {\n targetHooks[name] = targetHooks[name] || {};\n targetHooks[name][prop] = func;\n });\n };\n if (Env.ie && Env.ie < 8) {\n appendHooks(attrHooks, 'get', {\n maxlength: function (elm) {\n var value = elm.maxLength;\n if (value === 2147483647) {\n return undefined;\n }\n return value;\n },\n size: function (elm) {\n var value = elm.size;\n if (value === 20) {\n return undefined;\n }\n return value;\n },\n class: function (elm) {\n return elm.className;\n },\n style: function (elm) {\n var value = elm.style.cssText;\n if (value.length === 0) {\n return undefined;\n }\n return value;\n }\n });\n appendHooks(attrHooks, 'set', {\n class: function (elm, value) {\n elm.className = value;\n },\n style: function (elm, value) {\n elm.style.cssText = value;\n }\n });\n }\n if (Env.ie && Env.ie < 9) {\n cssFix.float = 'styleFloat';\n appendHooks(cssHooks, 'set', {\n opacity: function (elm, value) {\n var style = elm.style;\n if (value === null || value === '') {\n style.removeAttribute('filter');\n } else {\n style.zoom = 1;\n style.filter = 'alpha(opacity=' + value * 100 + ')';\n }\n }\n });\n }\n DomQuery.attrHooks = attrHooks;\n DomQuery.cssHooks = cssHooks;\n\n var cached = function (f) {\n var called = false;\n var r;\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (!called) {\n called = true;\n r = f.apply(null, args);\n }\n return r;\n };\n };\n\n var firstMatch = function (regexes, s) {\n for (var i = 0; i < regexes.length; i++) {\n var x = regexes[i];\n if (x.test(s)) {\n return x;\n }\n }\n return undefined;\n };\n var find$2 = function (regexes, agent) {\n var r = firstMatch(regexes, agent);\n if (!r) {\n return {\n major: 0,\n minor: 0\n };\n }\n var group = function (i) {\n return Number(agent.replace(r, '$' + i));\n };\n return nu(group(1), group(2));\n };\n var detect = function (versionRegexes, agent) {\n var cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown();\n }\n return find$2(versionRegexes, cleanedAgent);\n };\n var unknown = function () {\n return nu(0, 0);\n };\n var nu = function (major, minor) {\n return {\n major: major,\n minor: minor\n };\n };\n var Version = {\n nu: nu,\n detect: detect,\n unknown: unknown\n };\n\n var edge = 'Edge';\n var chrome = 'Chrome';\n var ie$1 = 'IE';\n var opera$1 = 'Opera';\n var firefox = 'Firefox';\n var safari = 'Safari';\n var isBrowser = function (name, current) {\n return function () {\n return current === name;\n };\n };\n var unknown$1 = function () {\n return nu$1({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$1 = function (info) {\n var current = info.current;\n var version = info.version;\n return {\n current: current,\n version: version,\n isEdge: isBrowser(edge, current),\n isChrome: isBrowser(chrome, current),\n isIE: isBrowser(ie$1, current),\n isOpera: isBrowser(opera$1, current),\n isFirefox: isBrowser(firefox, current),\n isSafari: isBrowser(safari, current)\n };\n };\n var Browser = {\n unknown: unknown$1,\n nu: nu$1,\n edge: constant(edge),\n chrome: constant(chrome),\n ie: constant(ie$1),\n opera: constant(opera$1),\n firefox: constant(firefox),\n safari: constant(safari)\n };\n\n var windows = 'Windows';\n var ios = 'iOS';\n var android$1 = 'Android';\n var linux = 'Linux';\n var osx = 'OSX';\n var solaris = 'Solaris';\n var freebsd = 'FreeBSD';\n var isOS = function (name, current) {\n return function () {\n return current === name;\n };\n };\n var unknown$2 = function () {\n return nu$2({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$2 = function (info) {\n var current = info.current;\n var version = info.version;\n return {\n current: current,\n version: version,\n isWindows: isOS(windows, current),\n isiOS: isOS(ios, current),\n isAndroid: isOS(android$1, current),\n isOSX: isOS(osx, current),\n isLinux: isOS(linux, current),\n isSolaris: isOS(solaris, current),\n isFreeBSD: isOS(freebsd, current)\n };\n };\n var OperatingSystem = {\n unknown: unknown$2,\n nu: nu$2,\n windows: constant(windows),\n ios: constant(ios),\n android: constant(android$1),\n linux: constant(linux),\n osx: constant(osx),\n solaris: constant(solaris),\n freebsd: constant(freebsd)\n };\n\n var DeviceType = function (os, browser, userAgent) {\n var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n var isiPhone = os.isiOS() && !isiPad;\n var isAndroid3 = os.isAndroid() && os.version.major === 3;\n var isAndroid4 = os.isAndroid() && os.version.major === 4;\n var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true;\n var isTouch = os.isiOS() || os.isAndroid();\n var isPhone = isTouch && !isTablet;\n var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n return {\n isiPad: constant(isiPad),\n isiPhone: constant(isiPhone),\n isTablet: constant(isTablet),\n isPhone: constant(isPhone),\n isTouch: constant(isTouch),\n isAndroid: os.isAndroid,\n isiOS: os.isiOS,\n isWebView: constant(iOSwebview)\n };\n };\n\n var detect$1 = function (candidates, userAgent) {\n var agent = String(userAgent).toLowerCase();\n return find(candidates, function (candidate) {\n return candidate.search(agent);\n });\n };\n var detectBrowser = function (browsers, userAgent) {\n return detect$1(browsers, userAgent).map(function (browser) {\n var version = Version.detect(browser.versionRegexes, userAgent);\n return {\n current: browser.name,\n version: version\n };\n });\n };\n var detectOs = function (oses, userAgent) {\n return detect$1(oses, userAgent).map(function (os) {\n var version = Version.detect(os.versionRegexes, userAgent);\n return {\n current: os.name,\n version: version\n };\n });\n };\n var UaString = {\n detectBrowser: detectBrowser,\n detectOs: detectOs\n };\n\n var contains$2 = function (str, substr) {\n return str.indexOf(substr) !== -1;\n };\n var trim$2 = function (str) {\n return str.replace(/^\\s+|\\s+$/g, '');\n };\n var lTrim = function (str) {\n return str.replace(/^\\s+/g, '');\n };\n var rTrim = function (str) {\n return str.replace(/\\s+$/g, '');\n };\n\n var normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n var checkContains = function (target) {\n return function (uastring) {\n return contains$2(uastring, target);\n };\n };\n var browsers = [\n {\n name: 'Edge',\n versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n search: function (uastring) {\n return contains$2(uastring, 'edge/') && contains$2(uastring, 'chrome') && contains$2(uastring, 'safari') && contains$2(uastring, 'applewebkit');\n }\n },\n {\n name: 'Chrome',\n versionRegexes: [\n /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n normalVersionRegex\n ],\n search: function (uastring) {\n return contains$2(uastring, 'chrome') && !contains$2(uastring, 'chromeframe');\n }\n },\n {\n name: 'IE',\n versionRegexes: [\n /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*?rv:([0-9]+)\\.([0-9]+).*/\n ],\n search: function (uastring) {\n return contains$2(uastring, 'msie') || contains$2(uastring, 'trident');\n }\n },\n {\n name: 'Opera',\n versionRegexes: [\n normalVersionRegex,\n /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n ],\n search: checkContains('opera')\n },\n {\n name: 'Firefox',\n versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n search: checkContains('firefox')\n },\n {\n name: 'Safari',\n versionRegexes: [\n normalVersionRegex,\n /.*?cpu os ([0-9]+)_([0-9]+).*/\n ],\n search: function (uastring) {\n return (contains$2(uastring, 'safari') || contains$2(uastring, 'mobile/')) && contains$2(uastring, 'applewebkit');\n }\n }\n ];\n var oses = [\n {\n name: 'Windows',\n search: checkContains('win'),\n versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'iOS',\n search: function (uastring) {\n return contains$2(uastring, 'iphone') || contains$2(uastring, 'ipad');\n },\n versionRegexes: [\n /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*cpu os ([0-9]+)_([0-9]+).*/,\n /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n ]\n },\n {\n name: 'Android',\n search: checkContains('android'),\n versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'OSX',\n search: checkContains('os x'),\n versionRegexes: [/.*?os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n },\n {\n name: 'Linux',\n search: checkContains('linux'),\n versionRegexes: []\n },\n {\n name: 'Solaris',\n search: checkContains('sunos'),\n versionRegexes: []\n },\n {\n name: 'FreeBSD',\n search: checkContains('freebsd'),\n versionRegexes: []\n }\n ];\n var PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n var detect$2 = function (userAgent) {\n var browsers = PlatformInfo.browsers();\n var oses = PlatformInfo.oses();\n var browser = UaString.detectBrowser(browsers, userAgent).fold(Browser.unknown, Browser.nu);\n var os = UaString.detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n var deviceType = DeviceType(os, browser, userAgent);\n return {\n browser: browser,\n os: os,\n deviceType: deviceType\n };\n };\n var PlatformDetection = { detect: detect$2 };\n\n var detect$3 = cached(function () {\n var userAgent = domGlobals.navigator.userAgent;\n return PlatformDetection.detect(userAgent);\n });\n var PlatformDetection$1 = { detect: detect$3 };\n\n var fromHtml = function (html, scope) {\n var doc = scope || domGlobals.document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n domGlobals.console.error('HTML does not have a single root node', html);\n throw new Error('HTML must have a single root node');\n }\n return fromDom(div.childNodes[0]);\n };\n var fromTag = function (tag, scope) {\n var doc = scope || domGlobals.document;\n var node = doc.createElement(tag);\n return fromDom(node);\n };\n var fromText = function (text, scope) {\n var doc = scope || domGlobals.document;\n var node = doc.createTextNode(text);\n return fromDom(node);\n };\n var fromDom = function (node) {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: constant(node) };\n };\n var fromPoint = function (docElm, x, y) {\n var doc = docElm.dom();\n return Option.from(doc.elementFromPoint(x, y)).map(fromDom);\n };\n var Element = {\n fromHtml: fromHtml,\n fromTag: fromTag,\n fromText: fromText,\n fromDom: fromDom,\n fromPoint: fromPoint\n };\n\n var ATTRIBUTE = domGlobals.Node.ATTRIBUTE_NODE;\n var CDATA_SECTION = domGlobals.Node.CDATA_SECTION_NODE;\n var COMMENT = domGlobals.Node.COMMENT_NODE;\n var DOCUMENT = domGlobals.Node.DOCUMENT_NODE;\n var DOCUMENT_TYPE = domGlobals.Node.DOCUMENT_TYPE_NODE;\n var DOCUMENT_FRAGMENT = domGlobals.Node.DOCUMENT_FRAGMENT_NODE;\n var ELEMENT = domGlobals.Node.ELEMENT_NODE;\n var TEXT = domGlobals.Node.TEXT_NODE;\n var PROCESSING_INSTRUCTION = domGlobals.Node.PROCESSING_INSTRUCTION_NODE;\n var ENTITY_REFERENCE = domGlobals.Node.ENTITY_REFERENCE_NODE;\n var ENTITY = domGlobals.Node.ENTITY_NODE;\n var NOTATION = domGlobals.Node.NOTATION_NODE;\n\n var name = function (element) {\n var r = element.dom().nodeName;\n return r.toLowerCase();\n };\n var type = function (element) {\n return element.dom().nodeType;\n };\n var isType$1 = function (t) {\n return function (element) {\n return type(element) === t;\n };\n };\n var isElement = isType$1(ELEMENT);\n var isText = isType$1(TEXT);\n\n var keys = Object.keys;\n var hasOwnProperty$1 = Object.hasOwnProperty;\n var each$3 = function (obj, f) {\n var props = keys(obj);\n for (var k = 0, len = props.length; k < len; k++) {\n var i = props[k];\n var x = obj[i];\n f(x, i);\n }\n };\n var map$2 = function (obj, f) {\n return tupleMap(obj, function (x, i) {\n return {\n k: i,\n v: f(x, i)\n };\n });\n };\n var tupleMap = function (obj, f) {\n var r = {};\n each$3(obj, function (x, i) {\n var tuple = f(x, i);\n r[tuple.k] = tuple.v;\n });\n return r;\n };\n var bifilter = function (obj, pred) {\n var t = {};\n var f = {};\n each$3(obj, function (x, i) {\n var branch = pred(x, i) ? t : f;\n branch[i] = x;\n });\n return {\n t: t,\n f: f\n };\n };\n var has = function (obj, key) {\n return hasOwnProperty$1.call(obj, key);\n };\n\n var isSupported = function (dom) {\n return dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n };\n\n var inBody = function (element) {\n var dom = isText(element) ? element.dom().parentNode : element.dom();\n return dom !== undefined && dom !== null && dom.ownerDocument.body.contains(dom);\n };\n\n var rawSet = function (dom, key, value) {\n if (isString(value) || isBoolean(value) || isNumber(value)) {\n dom.setAttribute(key, value + '');\n } else {\n domGlobals.console.error('Invalid call to Attr.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n throw new Error('Attribute value was not simple');\n }\n };\n var set = function (element, key, value) {\n rawSet(element.dom(), key, value);\n };\n var setAll = function (element, attrs) {\n var dom = element.dom();\n each$3(attrs, function (v, k) {\n rawSet(dom, k, v);\n });\n };\n var get = function (element, key) {\n var v = element.dom().getAttribute(key);\n return v === null ? undefined : v;\n };\n var has$1 = function (element, key) {\n var dom = element.dom();\n return dom && dom.hasAttribute ? dom.hasAttribute(key) : false;\n };\n var remove = function (element, key) {\n element.dom().removeAttribute(key);\n };\n\n var internalSet = function (dom, property, value) {\n if (!isString(value)) {\n domGlobals.console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n throw new Error('CSS value must be a string: ' + value);\n }\n if (isSupported(dom)) {\n dom.style.setProperty(property, value);\n }\n };\n var setAll$1 = function (element, css) {\n var dom = element.dom();\n each$3(css, function (v, k) {\n internalSet(dom, k, v);\n });\n };\n var get$1 = function (element, property) {\n var dom = element.dom();\n var styles = domGlobals.window.getComputedStyle(dom);\n var r = styles.getPropertyValue(property);\n var v = r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n return v === null ? undefined : v;\n };\n var getUnsafeProperty = function (dom, property) {\n return isSupported(dom) ? dom.style.getPropertyValue(property) : '';\n };\n var getRaw = function (element, property) {\n var dom = element.dom();\n var raw = getUnsafeProperty(dom, property);\n return Option.from(raw).filter(function (r) {\n return r.length > 0;\n });\n };\n var getAllRaw = function (element) {\n var css = {};\n var dom = element.dom();\n if (isSupported(dom)) {\n for (var i = 0; i < dom.style.length; i++) {\n var ruleName = dom.style.item(i);\n css[ruleName] = dom.style[ruleName];\n }\n }\n return css;\n };\n\n var Immutable = function () {\n var fields = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n fields[_i] = arguments[_i];\n }\n return function () {\n var values = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n values[_i] = arguments[_i];\n }\n if (fields.length !== values.length) {\n throw new Error('Wrong number of arguments to struct. Expected \"[' + fields.length + ']\", got ' + values.length + ' arguments');\n }\n var struct = {};\n each(fields, function (name, i) {\n struct[name] = constant(values[i]);\n });\n return struct;\n };\n };\n\n var toArray$1 = function (target, f) {\n var r = [];\n var recurse = function (e) {\n r.push(e);\n return f(e);\n };\n var cur = f(target);\n do {\n cur = cur.bind(recurse);\n } while (cur.isSome());\n return r;\n };\n var Recurse = { toArray: toArray$1 };\n\n var node = function () {\n var f = Global$1.getOrDie('Node');\n return f;\n };\n var compareDocumentPosition = function (a, b, match) {\n return (a.compareDocumentPosition(b) & match) !== 0;\n };\n var documentPositionPreceding = function (a, b) {\n return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING);\n };\n var documentPositionContainedBy = function (a, b) {\n return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY);\n };\n var Node = {\n documentPositionPreceding: documentPositionPreceding,\n documentPositionContainedBy: documentPositionContainedBy\n };\n\n var ELEMENT$1 = ELEMENT;\n var DOCUMENT$1 = DOCUMENT;\n var is$1 = function (element, selector) {\n var dom = element.dom();\n if (dom.nodeType !== ELEMENT$1) {\n return false;\n } else {\n var elem = dom;\n if (elem.matches !== undefined) {\n return elem.matches(selector);\n } else if (elem.msMatchesSelector !== undefined) {\n return elem.msMatchesSelector(selector);\n } else if (elem.webkitMatchesSelector !== undefined) {\n return elem.webkitMatchesSelector(selector);\n } else if (elem.mozMatchesSelector !== undefined) {\n return elem.mozMatchesSelector(selector);\n } else {\n throw new Error('Browser lacks native selectors');\n }\n }\n };\n var bypassSelector = function (dom) {\n return dom.nodeType !== ELEMENT$1 && dom.nodeType !== DOCUMENT$1 || dom.childElementCount === 0;\n };\n var all = function (selector, scope) {\n var base = scope === undefined ? domGlobals.document : scope.dom();\n return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), Element.fromDom);\n };\n var one = function (selector, scope) {\n var base = scope === undefined ? domGlobals.document : scope.dom();\n return bypassSelector(base) ? Option.none() : Option.from(base.querySelector(selector)).map(Element.fromDom);\n };\n\n var eq = function (e1, e2) {\n return e1.dom() === e2.dom();\n };\n var regularContains = function (e1, e2) {\n var d1 = e1.dom();\n var d2 = e2.dom();\n return d1 === d2 ? false : d1.contains(d2);\n };\n var ieContains = function (e1, e2) {\n return Node.documentPositionContainedBy(e1.dom(), e2.dom());\n };\n var browser = PlatformDetection$1.detect().browser;\n var contains$3 = browser.isIE() ? ieContains : regularContains;\n\n var owner = function (element) {\n return Element.fromDom(element.dom().ownerDocument);\n };\n var documentElement = function (element) {\n return Element.fromDom(element.dom().ownerDocument.documentElement);\n };\n var defaultView = function (element) {\n return Element.fromDom(element.dom().ownerDocument.defaultView);\n };\n var parent = function (element) {\n return Option.from(element.dom().parentNode).map(Element.fromDom);\n };\n var parents = function (element, isRoot) {\n var stop = isFunction(isRoot) ? isRoot : never;\n var dom = element.dom();\n var ret = [];\n while (dom.parentNode !== null && dom.parentNode !== undefined) {\n var rawParent = dom.parentNode;\n var p = Element.fromDom(rawParent);\n ret.push(p);\n if (stop(p) === true) {\n break;\n } else {\n dom = rawParent;\n }\n }\n return ret;\n };\n var prevSibling = function (element) {\n return Option.from(element.dom().previousSibling).map(Element.fromDom);\n };\n var nextSibling = function (element) {\n return Option.from(element.dom().nextSibling).map(Element.fromDom);\n };\n var prevSiblings = function (element) {\n return reverse(Recurse.toArray(element, prevSibling));\n };\n var nextSiblings = function (element) {\n return Recurse.toArray(element, nextSibling);\n };\n var children = function (element) {\n return map(element.dom().childNodes, Element.fromDom);\n };\n var child = function (element, index) {\n var cs = element.dom().childNodes;\n return Option.from(cs[index]).map(Element.fromDom);\n };\n var firstChild = function (element) {\n return child(element, 0);\n };\n var lastChild = function (element) {\n return child(element, element.dom().childNodes.length - 1);\n };\n var childNodesCount = function (element) {\n return element.dom().childNodes.length;\n };\n var spot = Immutable('element', 'offset');\n\n var browser$1 = PlatformDetection$1.detect().browser;\n var firstElement = function (nodes) {\n return find(nodes, isElement);\n };\n var getTableCaptionDeltaY = function (elm) {\n if (browser$1.isFirefox() && name(elm) === 'table') {\n return firstElement(children(elm)).filter(function (elm) {\n return name(elm) === 'caption';\n }).bind(function (caption) {\n return firstElement(nextSiblings(caption)).map(function (body) {\n var bodyTop = body.dom().offsetTop;\n var captionTop = caption.dom().offsetTop;\n var captionHeight = caption.dom().offsetHeight;\n return bodyTop <= captionTop ? -captionHeight : 0;\n });\n }).getOr(0);\n } else {\n return 0;\n }\n };\n var getPos = function (body, elm, rootElm) {\n var x = 0, y = 0, offsetParent;\n var doc = body.ownerDocument;\n var pos;\n rootElm = rootElm ? rootElm : body;\n if (elm) {\n if (rootElm === body && elm.getBoundingClientRect && get$1(Element.fromDom(body), 'position') === 'static') {\n pos = elm.getBoundingClientRect();\n x = pos.left + (doc.documentElement.scrollLeft || body.scrollLeft) - doc.documentElement.clientLeft;\n y = pos.top + (doc.documentElement.scrollTop || body.scrollTop) - doc.documentElement.clientTop;\n return {\n x: x,\n y: y\n };\n }\n offsetParent = elm;\n while (offsetParent && offsetParent !== rootElm && offsetParent.nodeType) {\n x += offsetParent.offsetLeft || 0;\n y += offsetParent.offsetTop || 0;\n offsetParent = offsetParent.offsetParent;\n }\n offsetParent = elm.parentNode;\n while (offsetParent && offsetParent !== rootElm && offsetParent.nodeType) {\n x -= offsetParent.scrollLeft || 0;\n y -= offsetParent.scrollTop || 0;\n offsetParent = offsetParent.parentNode;\n }\n y += getTableCaptionDeltaY(Element.fromDom(elm));\n }\n return {\n x: x,\n y: y\n };\n };\n var Position = { getPos: getPos };\n\n var exports$1 = {}, module$1 = { exports: exports$1 };\n (function (define, exports, module, require) {\n (function (f) {\n if (typeof exports === 'object' && typeof module !== 'undefined') {\n module.exports = f();\n } else if (typeof define === 'function' && define.amd) {\n define([], f);\n } else {\n var g;\n if (typeof window !== 'undefined') {\n g = window;\n } else if (typeof global !== 'undefined') {\n g = global;\n } else if (typeof self !== 'undefined') {\n g = self;\n } else {\n g = this;\n }\n g.EphoxContactWrapper = f();\n }\n }(function () {\n return function () {\n function r(e, n, t) {\n function o(i, f) {\n if (!n[i]) {\n if (!e[i]) {\n var c = 'function' == typeof require && require;\n if (!f && c)\n return c(i, !0);\n if (u)\n return u(i, !0);\n var a = new Error('Cannot find module \\'' + i + '\\'');\n throw a.code = 'MODULE_NOT_FOUND', a;\n }\n var p = n[i] = { exports: {} };\n e[i][0].call(p.exports, function (r) {\n var n = e[i][1][r];\n return o(n || r);\n }, p, p.exports, r, e, n, t);\n }\n return n[i].exports;\n }\n for (var u = 'function' == typeof require && require, i = 0; i < t.length; i++)\n o(t[i]);\n return o;\n }\n return r;\n }()({\n 1: [\n function (require, module, exports) {\n var process = module.exports = {};\n var cachedSetTimeout;\n var cachedClearTimeout;\n function defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n }\n function defaultClearTimeout() {\n throw new Error('clearTimeout has not been defined');\n }\n (function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n }());\n function runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n return setTimeout(fun, 0);\n }\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n return cachedSetTimeout(fun, 0);\n } catch (e) {\n try {\n return cachedSetTimeout.call(null, fun, 0);\n } catch (e) {\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n }\n function runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n return clearTimeout(marker);\n }\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n return cachedClearTimeout(marker);\n } catch (e) {\n try {\n return cachedClearTimeout.call(null, marker);\n } catch (e) {\n return cachedClearTimeout.call(this, marker);\n }\n }\n }\n var queue = [];\n var draining = false;\n var currentQueue;\n var queueIndex = -1;\n function cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n }\n function drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n var len = queue.length;\n while (len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n }\n process.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n };\n function Item(fun, array) {\n this.fun = fun;\n this.array = array;\n }\n Item.prototype.run = function () {\n this.fun.apply(null, this.array);\n };\n process.title = 'browser';\n process.browser = true;\n process.env = {};\n process.argv = [];\n process.version = '';\n process.versions = {};\n function noop() {\n }\n process.on = noop;\n process.addListener = noop;\n process.once = noop;\n process.off = noop;\n process.removeListener = noop;\n process.removeAllListeners = noop;\n process.emit = noop;\n process.prependListener = noop;\n process.prependOnceListener = noop;\n process.listeners = function (name) {\n return [];\n };\n process.binding = function (name) {\n throw new Error('process.binding is not supported');\n };\n process.cwd = function () {\n return '/';\n };\n process.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n };\n process.umask = function () {\n return 0;\n };\n },\n {}\n ],\n 2: [\n function (require, module, exports) {\n (function (setImmediate) {\n (function (root) {\n var setTimeoutFunc = setTimeout;\n function noop() {\n }\n function bind(fn, thisArg) {\n return function () {\n fn.apply(thisArg, arguments);\n };\n }\n function Promise(fn) {\n if (typeof this !== 'object')\n throw new TypeError('Promises must be constructed via new');\n if (typeof fn !== 'function')\n throw new TypeError('not a function');\n this._state = 0;\n this._handled = false;\n this._value = undefined;\n this._deferreds = [];\n doResolve(fn, this);\n }\n function handle(self, deferred) {\n while (self._state === 3) {\n self = self._value;\n }\n if (self._state === 0) {\n self._deferreds.push(deferred);\n return;\n }\n self._handled = true;\n Promise._immediateFn(function () {\n var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n return;\n }\n var ret;\n try {\n ret = cb(self._value);\n } catch (e) {\n reject(deferred.promise, e);\n return;\n }\n resolve(deferred.promise, ret);\n });\n }\n function resolve(self, newValue) {\n try {\n if (newValue === self)\n throw new TypeError('A promise cannot be resolved with itself.');\n if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {\n var then = newValue.then;\n if (newValue instanceof Promise) {\n self._state = 3;\n self._value = newValue;\n finale(self);\n return;\n } else if (typeof then === 'function') {\n doResolve(bind(then, newValue), self);\n return;\n }\n }\n self._state = 1;\n self._value = newValue;\n finale(self);\n } catch (e) {\n reject(self, e);\n }\n }\n function reject(self, newValue) {\n self._state = 2;\n self._value = newValue;\n finale(self);\n }\n function finale(self) {\n if (self._state === 2 && self._deferreds.length === 0) {\n Promise._immediateFn(function () {\n if (!self._handled) {\n Promise._unhandledRejectionFn(self._value);\n }\n });\n }\n for (var i = 0, len = self._deferreds.length; i < len; i++) {\n handle(self, self._deferreds[i]);\n }\n self._deferreds = null;\n }\n function Handler(onFulfilled, onRejected, promise) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n }\n function doResolve(fn, self) {\n var done = false;\n try {\n fn(function (value) {\n if (done)\n return;\n done = true;\n resolve(self, value);\n }, function (reason) {\n if (done)\n return;\n done = true;\n reject(self, reason);\n });\n } catch (ex) {\n if (done)\n return;\n done = true;\n reject(self, ex);\n }\n }\n Promise.prototype['catch'] = function (onRejected) {\n return this.then(null, onRejected);\n };\n Promise.prototype.then = function (onFulfilled, onRejected) {\n var prom = new this.constructor(noop);\n handle(this, new Handler(onFulfilled, onRejected, prom));\n return prom;\n };\n Promise.all = function (arr) {\n var args = Array.prototype.slice.call(arr);\n return new Promise(function (resolve, reject) {\n if (args.length === 0)\n return resolve([]);\n var remaining = args.length;\n function res(i, val) {\n try {\n if (val && (typeof val === 'object' || typeof val === 'function')) {\n var then = val.then;\n if (typeof then === 'function') {\n then.call(val, function (val) {\n res(i, val);\n }, reject);\n return;\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n } catch (ex) {\n reject(ex);\n }\n }\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n };\n Promise.resolve = function (value) {\n if (value && typeof value === 'object' && value.constructor === Promise) {\n return value;\n }\n return new Promise(function (resolve) {\n resolve(value);\n });\n };\n Promise.reject = function (value) {\n return new Promise(function (resolve, reject) {\n reject(value);\n });\n };\n Promise.race = function (values) {\n return new Promise(function (resolve, reject) {\n for (var i = 0, len = values.length; i < len; i++) {\n values[i].then(resolve, reject);\n }\n });\n };\n Promise._immediateFn = typeof setImmediate === 'function' ? function (fn) {\n setImmediate(fn);\n } : function (fn) {\n setTimeoutFunc(fn, 0);\n };\n Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n if (typeof console !== 'undefined' && console) {\n console.warn('Possible Unhandled Promise Rejection:', err);\n }\n };\n Promise._setImmediateFn = function _setImmediateFn(fn) {\n Promise._immediateFn = fn;\n };\n Promise._setUnhandledRejectionFn = function _setUnhandledRejectionFn(fn) {\n Promise._unhandledRejectionFn = fn;\n };\n if (typeof module !== 'undefined' && module.exports) {\n module.exports = Promise;\n } else if (!root.Promise) {\n root.Promise = Promise;\n }\n }(this));\n }.call(this, require('timers').setImmediate));\n },\n { 'timers': 3 }\n ],\n 3: [\n function (require, module, exports) {\n (function (setImmediate, clearImmediate) {\n var nextTick = require('process/browser.js').nextTick;\n var apply = Function.prototype.apply;\n var slice = Array.prototype.slice;\n var immediateIds = {};\n var nextImmediateId = 0;\n exports.setTimeout = function () {\n return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\n };\n exports.setInterval = function () {\n return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\n };\n exports.clearTimeout = exports.clearInterval = function (timeout) {\n timeout.close();\n };\n function Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n }\n Timeout.prototype.unref = Timeout.prototype.ref = function () {\n };\n Timeout.prototype.close = function () {\n this._clearFn.call(window, this._id);\n };\n exports.enroll = function (item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n };\n exports.unenroll = function (item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n };\n exports._unrefActive = exports.active = function (item) {\n clearTimeout(item._idleTimeoutId);\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n };\n exports.setImmediate = typeof setImmediate === 'function' ? setImmediate : function (fn) {\n var id = nextImmediateId++;\n var args = arguments.length < 2 ? false : slice.call(arguments, 1);\n immediateIds[id] = true;\n nextTick(function onNextTick() {\n if (immediateIds[id]) {\n if (args) {\n fn.apply(null, args);\n } else {\n fn.call(null);\n }\n exports.clearImmediate(id);\n }\n });\n return id;\n };\n exports.clearImmediate = typeof clearImmediate === 'function' ? clearImmediate : function (id) {\n delete immediateIds[id];\n };\n }.call(this, require('timers').setImmediate, require('timers').clearImmediate));\n },\n {\n 'process/browser.js': 1,\n 'timers': 3\n }\n ],\n 4: [\n function (require, module, exports) {\n var promisePolyfill = require('promise-polyfill');\n var Global = function () {\n if (typeof window !== 'undefined') {\n return window;\n } else {\n return Function('return this;')();\n }\n }();\n module.exports = { boltExport: Global.Promise || promisePolyfill };\n },\n { 'promise-polyfill': 2 }\n ]\n }, {}, [4])(4);\n }));\n }(undefined, exports$1, module$1, undefined));\n var Promise = module$1.exports.boltExport;\n\n var nu$3 = function (baseFn) {\n var data = Option.none();\n var callbacks = [];\n var map = function (f) {\n return nu$3(function (nCallback) {\n get(function (data) {\n nCallback(f(data));\n });\n });\n };\n var get = function (nCallback) {\n if (isReady()) {\n call(nCallback);\n } else {\n callbacks.push(nCallback);\n }\n };\n var set = function (x) {\n data = Option.some(x);\n run(callbacks);\n callbacks = [];\n };\n var isReady = function () {\n return data.isSome();\n };\n var run = function (cbs) {\n each(cbs, call);\n };\n var call = function (cb) {\n data.each(function (x) {\n domGlobals.setTimeout(function () {\n cb(x);\n }, 0);\n });\n };\n baseFn(set);\n return {\n get: get,\n map: map,\n isReady: isReady\n };\n };\n var pure = function (a) {\n return nu$3(function (callback) {\n callback(a);\n });\n };\n var LazyValue = {\n nu: nu$3,\n pure: pure\n };\n\n var errorReporter = function (err) {\n domGlobals.setTimeout(function () {\n throw err;\n }, 0);\n };\n var make = function (run) {\n var get = function (callback) {\n run().then(callback, errorReporter);\n };\n var map = function (fab) {\n return make(function () {\n return run().then(fab);\n });\n };\n var bind = function (aFutureB) {\n return make(function () {\n return run().then(function (v) {\n return aFutureB(v).toPromise();\n });\n });\n };\n var anonBind = function (futureB) {\n return make(function () {\n return run().then(function () {\n return futureB.toPromise();\n });\n });\n };\n var toLazy = function () {\n return LazyValue.nu(get);\n };\n var toCached = function () {\n var cache = null;\n return make(function () {\n if (cache === null) {\n cache = run();\n }\n return cache;\n });\n };\n var toPromise = run;\n return {\n map: map,\n bind: bind,\n anonBind: anonBind,\n toLazy: toLazy,\n toCached: toCached,\n toPromise: toPromise,\n get: get\n };\n };\n var nu$4 = function (baseFn) {\n return make(function () {\n return new Promise(baseFn);\n });\n };\n var pure$1 = function (a) {\n return make(function () {\n return Promise.resolve(a);\n });\n };\n var Future = {\n nu: nu$4,\n pure: pure$1\n };\n\n var par = function (asyncValues, nu) {\n return nu(function (callback) {\n var r = [];\n var count = 0;\n var cb = function (i) {\n return function (value) {\n r[i] = value;\n count++;\n if (count >= asyncValues.length) {\n callback(r);\n }\n };\n };\n if (asyncValues.length === 0) {\n callback([]);\n } else {\n each(asyncValues, function (asyncValue, i) {\n asyncValue.get(cb(i));\n });\n }\n });\n };\n\n var par$1 = function (futures) {\n return par(futures, Future.nu);\n };\n\n var value = function (o) {\n var is = function (v) {\n return o === v;\n };\n var or = function (opt) {\n return value(o);\n };\n var orThunk = function (f) {\n return value(o);\n };\n var map = function (f) {\n return value(f(o));\n };\n var mapError = function (f) {\n return value(o);\n };\n var each = function (f) {\n f(o);\n };\n var bind = function (f) {\n return f(o);\n };\n var fold = function (_, onValue) {\n return onValue(o);\n };\n var exists = function (f) {\n return f(o);\n };\n var forall = function (f) {\n return f(o);\n };\n var toOption = function () {\n return Option.some(o);\n };\n return {\n is: is,\n isValue: always,\n isError: never,\n getOr: constant(o),\n getOrThunk: constant(o),\n getOrDie: constant(o),\n or: or,\n orThunk: orThunk,\n fold: fold,\n map: map,\n mapError: mapError,\n each: each,\n bind: bind,\n exists: exists,\n forall: forall,\n toOption: toOption\n };\n };\n var error = function (message) {\n var getOrThunk = function (f) {\n return f();\n };\n var getOrDie = function () {\n return die(String(message))();\n };\n var or = function (opt) {\n return opt;\n };\n var orThunk = function (f) {\n return f();\n };\n var map = function (f) {\n return error(message);\n };\n var mapError = function (f) {\n return error(f(message));\n };\n var bind = function (f) {\n return error(message);\n };\n var fold = function (onError, _) {\n return onError(message);\n };\n return {\n is: never,\n isValue: never,\n isError: always,\n getOr: identity,\n getOrThunk: getOrThunk,\n getOrDie: getOrDie,\n or: or,\n orThunk: orThunk,\n fold: fold,\n map: map,\n mapError: mapError,\n each: noop,\n bind: bind,\n exists: never,\n forall: always,\n toOption: Option.none\n };\n };\n var fromOption = function (opt, err) {\n return opt.fold(function () {\n return error(err);\n }, value);\n };\n var Result = {\n value: value,\n error: error,\n fromOption: fromOption\n };\n\n function StyleSheetLoader(document, settings) {\n if (settings === void 0) {\n settings = {};\n }\n var idCount = 0;\n var loadedStates = {};\n var maxLoadTime;\n maxLoadTime = settings.maxLoadTime || 5000;\n var appendToHead = function (node) {\n document.getElementsByTagName('head')[0].appendChild(node);\n };\n var load = function (url, loadedCallback, errorCallback) {\n var link, style, startTime, state;\n var passed = function () {\n var callbacks = state.passed;\n var i = callbacks.length;\n while (i--) {\n callbacks[i]();\n }\n state.status = 2;\n state.passed = [];\n state.failed = [];\n };\n var failed = function () {\n var callbacks = state.failed;\n var i = callbacks.length;\n while (i--) {\n callbacks[i]();\n }\n state.status = 3;\n state.passed = [];\n state.failed = [];\n };\n var isOldWebKit = function () {\n var webKitChunks = domGlobals.navigator.userAgent.match(/WebKit\\/(\\d*)/);\n return !!(webKitChunks && parseInt(webKitChunks[1], 10) < 536);\n };\n var wait = function (testCallback, waitCallback) {\n if (!testCallback()) {\n if (new Date().getTime() - startTime < maxLoadTime) {\n Delay.setTimeout(waitCallback);\n } else {\n failed();\n }\n }\n };\n var waitForWebKitLinkLoaded = function () {\n wait(function () {\n var styleSheets = document.styleSheets;\n var styleSheet, i = styleSheets.length, owner;\n while (i--) {\n styleSheet = styleSheets[i];\n owner = styleSheet.ownerNode ? styleSheet.ownerNode : styleSheet.owningElement;\n if (owner && owner.id === link.id) {\n passed();\n return true;\n }\n }\n }, waitForWebKitLinkLoaded);\n };\n var waitForGeckoLinkLoaded = function () {\n wait(function () {\n try {\n var cssRules = style.sheet.cssRules;\n passed();\n return !!cssRules;\n } catch (ex) {\n }\n }, waitForGeckoLinkLoaded);\n };\n url = Tools._addCacheSuffix(url);\n if (!loadedStates[url]) {\n state = {\n passed: [],\n failed: []\n };\n loadedStates[url] = state;\n } else {\n state = loadedStates[url];\n }\n if (loadedCallback) {\n state.passed.push(loadedCallback);\n }\n if (errorCallback) {\n state.failed.push(errorCallback);\n }\n if (state.status === 1) {\n return;\n }\n if (state.status === 2) {\n passed();\n return;\n }\n if (state.status === 3) {\n failed();\n return;\n }\n state.status = 1;\n link = document.createElement('link');\n link.rel = 'stylesheet';\n link.type = 'text/css';\n link.id = 'u' + idCount++;\n link.async = false;\n link.defer = false;\n startTime = new Date().getTime();\n if (settings.contentCssCors) {\n link.crossOrigin = 'anonymous';\n }\n if ('onload' in link && !isOldWebKit()) {\n link.onload = waitForWebKitLinkLoaded;\n link.onerror = failed;\n } else {\n if (domGlobals.navigator.userAgent.indexOf('Firefox') > 0) {\n style = document.createElement('style');\n style.textContent = '@import \"' + url + '\"';\n waitForGeckoLinkLoaded();\n appendToHead(style);\n return;\n }\n waitForWebKitLinkLoaded();\n }\n appendToHead(link);\n link.href = url;\n };\n var loadF = function (url) {\n return Future.nu(function (resolve) {\n load(url, compose(resolve, constant(Result.value(url))), compose(resolve, constant(Result.error(url))));\n });\n };\n var unbox = function (result) {\n return result.fold(identity, identity);\n };\n var loadAll = function (urls, success, failure) {\n par$1(map(urls, loadF)).get(function (result) {\n var parts = partition(result, function (r) {\n return r.isValue();\n });\n if (parts.fail.length > 0) {\n failure(parts.fail.map(unbox));\n } else {\n success(parts.pass.map(unbox));\n }\n });\n };\n return {\n load: load,\n loadAll: loadAll\n };\n }\n\n function TreeWalker (startNode, rootNode) {\n var node = startNode;\n var findSibling = function (node, startName, siblingName, shallow) {\n var sibling, parent;\n if (node) {\n if (!shallow && node[startName]) {\n return node[startName];\n }\n if (node !== rootNode) {\n sibling = node[siblingName];\n if (sibling) {\n return sibling;\n }\n for (parent = node.parentNode; parent && parent !== rootNode; parent = parent.parentNode) {\n sibling = parent[siblingName];\n if (sibling) {\n return sibling;\n }\n }\n }\n }\n };\n var findPreviousNode = function (node, startName, siblingName, shallow) {\n var sibling, parent, child;\n if (node) {\n sibling = node[siblingName];\n if (rootNode && sibling === rootNode) {\n return;\n }\n if (sibling) {\n if (!shallow) {\n for (child = sibling[startName]; child; child = child[startName]) {\n if (!child[startName]) {\n return child;\n }\n }\n }\n return sibling;\n }\n parent = node.parentNode;\n if (parent && parent !== rootNode) {\n return parent;\n }\n }\n };\n this.current = function () {\n return node;\n };\n this.next = function (shallow) {\n node = findSibling(node, 'firstChild', 'nextSibling', shallow);\n return node;\n };\n this.prev = function (shallow) {\n node = findSibling(node, 'lastChild', 'previousSibling', shallow);\n return node;\n };\n this.prev2 = function (shallow) {\n node = findPreviousNode(node, 'lastChild', 'previousSibling', shallow);\n return node;\n };\n }\n\n var blocks = [\n 'article',\n 'aside',\n 'details',\n 'div',\n 'dt',\n 'figcaption',\n 'footer',\n 'form',\n 'fieldset',\n 'header',\n 'hgroup',\n 'html',\n 'main',\n 'nav',\n 'section',\n 'summary',\n 'body',\n 'p',\n 'dl',\n 'multicol',\n 'dd',\n 'figure',\n 'address',\n 'center',\n 'blockquote',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'listing',\n 'xmp',\n 'pre',\n 'plaintext',\n 'menu',\n 'dir',\n 'ul',\n 'ol',\n 'li',\n 'hr',\n 'table',\n 'tbody',\n 'thead',\n 'tfoot',\n 'th',\n 'tr',\n 'td',\n 'caption'\n ];\n var voids = [\n 'area',\n 'base',\n 'basefont',\n 'br',\n 'col',\n 'frame',\n 'hr',\n 'img',\n 'input',\n 'isindex',\n 'link',\n 'meta',\n 'param',\n 'embed',\n 'source',\n 'wbr',\n 'track'\n ];\n var tableCells = [\n 'td',\n 'th'\n ];\n var tableSections = [\n 'thead',\n 'tbody',\n 'tfoot'\n ];\n var textBlocks = [\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'p',\n 'div',\n 'address',\n 'pre',\n 'form',\n 'blockquote',\n 'center',\n 'dir',\n 'fieldset',\n 'header',\n 'footer',\n 'article',\n 'section',\n 'hgroup',\n 'aside',\n 'nav',\n 'figure'\n ];\n var headings = [\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6'\n ];\n var listItems = [\n 'li',\n 'dd',\n 'dt'\n ];\n var lists = [\n 'ul',\n 'ol',\n 'dl'\n ];\n var wsElements = [\n 'pre',\n 'script',\n 'textarea',\n 'style'\n ];\n var lazyLookup = function (items) {\n var lookup;\n return function (node) {\n lookup = lookup ? lookup : mapToObject(items, constant(true));\n return lookup.hasOwnProperty(name(node));\n };\n };\n var isHeading = lazyLookup(headings);\n var isBlock = lazyLookup(blocks);\n var isInline = function (node) {\n return isElement(node) && !isBlock(node);\n };\n var isBr = function (node) {\n return isElement(node) && name(node) === 'br';\n };\n var isTextBlock = lazyLookup(textBlocks);\n var isList = lazyLookup(lists);\n var isListItem = lazyLookup(listItems);\n var isVoid = lazyLookup(voids);\n var isTableSection = lazyLookup(tableSections);\n var isTableCell = lazyLookup(tableCells);\n var isWsPreserveElement = lazyLookup(wsElements);\n\n var isNodeType = function (type) {\n return function (node) {\n return !!node && node.nodeType === type;\n };\n };\n var isRestrictedNode = function (node) {\n return !!node && !Object.getPrototypeOf(node);\n };\n var isElement$1 = isNodeType(1);\n var matchNodeNames = function (names) {\n var items = names.toLowerCase().split(' ');\n return function (node) {\n var i, name;\n if (node && node.nodeType) {\n name = node.nodeName.toLowerCase();\n for (i = 0; i < items.length; i++) {\n if (name === items[i]) {\n return true;\n }\n }\n }\n return false;\n };\n };\n var matchStyleValues = function (name, values) {\n var items = values.toLowerCase().split(' ');\n return function (node) {\n var i, cssValue;\n if (isElement$1(node)) {\n for (i = 0; i < items.length; i++) {\n var computed = node.ownerDocument.defaultView.getComputedStyle(node, null);\n cssValue = computed ? computed.getPropertyValue(name) : null;\n if (cssValue === items[i]) {\n return true;\n }\n }\n }\n return false;\n };\n };\n var hasPropValue = function (propName, propValue) {\n return function (node) {\n return isElement$1(node) && node[propName] === propValue;\n };\n };\n var hasAttribute = function (attrName, attrValue) {\n return function (node) {\n return isElement$1(node) && node.hasAttribute(attrName);\n };\n };\n var hasAttributeValue = function (attrName, attrValue) {\n return function (node) {\n return isElement$1(node) && node.getAttribute(attrName) === attrValue;\n };\n };\n var isBogus = function (node) {\n return isElement$1(node) && node.hasAttribute('data-mce-bogus');\n };\n var isBogusAll = function (node) {\n return isElement$1(node) && node.getAttribute('data-mce-bogus') === 'all';\n };\n var isTable = function (node) {\n return isElement$1(node) && node.tagName === 'TABLE';\n };\n var hasContentEditableState = function (value) {\n return function (node) {\n if (isElement$1(node)) {\n if (node.contentEditable === value) {\n return true;\n }\n if (node.getAttribute('data-mce-contenteditable') === value) {\n return true;\n }\n }\n return false;\n };\n };\n var isText$1 = isNodeType(3);\n var isComment = isNodeType(8);\n var isDocument = isNodeType(9);\n var isDocumentFragment = isNodeType(11);\n var isBr$1 = matchNodeNames('br');\n var isContentEditableTrue = hasContentEditableState('true');\n var isContentEditableFalse = hasContentEditableState('false');\n var NodeType = {\n isText: isText$1,\n isElement: isElement$1,\n isComment: isComment,\n isDocument: isDocument,\n isDocumentFragment: isDocumentFragment,\n isBr: isBr$1,\n isContentEditableTrue: isContentEditableTrue,\n isContentEditableFalse: isContentEditableFalse,\n isRestrictedNode: isRestrictedNode,\n matchNodeNames: matchNodeNames,\n hasPropValue: hasPropValue,\n hasAttribute: hasAttribute,\n hasAttributeValue: hasAttributeValue,\n matchStyleValues: matchStyleValues,\n isBogus: isBogus,\n isBogusAll: isBogusAll,\n isTable: isTable\n };\n\n var surroundedBySpans = function (node) {\n var previousIsSpan = node.previousSibling && node.previousSibling.nodeName === 'SPAN';\n var nextIsSpan = node.nextSibling && node.nextSibling.nodeName === 'SPAN';\n return previousIsSpan && nextIsSpan;\n };\n var isBookmarkNode = function (node) {\n return node && node.tagName === 'SPAN' && node.getAttribute('data-mce-type') === 'bookmark';\n };\n var trimNode = function (dom, node) {\n var i, children = node.childNodes;\n if (NodeType.isElement(node) && isBookmarkNode(node)) {\n return;\n }\n for (i = children.length - 1; i >= 0; i--) {\n trimNode(dom, children[i]);\n }\n if (NodeType.isDocument(node) === false) {\n if (NodeType.isText(node) && node.nodeValue.length > 0) {\n var trimmedLength = Tools.trim(node.nodeValue).length;\n if (dom.isBlock(node.parentNode) || trimmedLength > 0) {\n return;\n }\n if (trimmedLength === 0 && surroundedBySpans(node)) {\n return;\n }\n } else if (NodeType.isElement(node)) {\n children = node.childNodes;\n if (children.length === 1 && isBookmarkNode(children[0])) {\n node.parentNode.insertBefore(children[0], node);\n }\n if (children.length || isVoid(Element.fromDom(node))) {\n return;\n }\n }\n dom.remove(node);\n }\n return node;\n };\n var TrimNode = { trimNode: trimNode };\n\n var makeMap$1 = Tools.makeMap;\n var namedEntities, baseEntities, reverseEntities;\n var attrsCharsRegExp = /[&<>\\\"\\u0060\\u007E-\\uD7FF\\uE000-\\uFFEF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n var textCharsRegExp = /[<>&\\u007E-\\uD7FF\\uE000-\\uFFEF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n var rawCharsRegExp = /[<>&\\\"\\']/g;\n var entityRegExp = /&#([a-z0-9]+);?|&([a-z0-9]+);/gi;\n var asciiMap = {\n 128: '\\u20AC',\n 130: '\\u201A',\n 131: '\\u0192',\n 132: '\\u201E',\n 133: '\\u2026',\n 134: '\\u2020',\n 135: '\\u2021',\n 136: '\\u02c6',\n 137: '\\u2030',\n 138: '\\u0160',\n 139: '\\u2039',\n 140: '\\u0152',\n 142: '\\u017d',\n 145: '\\u2018',\n 146: '\\u2019',\n 147: '\\u201C',\n 148: '\\u201D',\n 149: '\\u2022',\n 150: '\\u2013',\n 151: '\\u2014',\n 152: '\\u02DC',\n 153: '\\u2122',\n 154: '\\u0161',\n 155: '\\u203A',\n 156: '\\u0153',\n 158: '\\u017e',\n 159: '\\u0178'\n };\n baseEntities = {\n '\"': '"',\n '\\'': ''',\n '<': '<',\n '>': '>',\n '&': '&',\n '`': '`'\n };\n reverseEntities = {\n '<': '<',\n '>': '>',\n '&': '&',\n '"': '\"',\n ''': '\\''\n };\n var nativeDecode = function (text) {\n var elm;\n elm = Element.fromTag('div').dom();\n elm.innerHTML = text;\n return elm.textContent || elm.innerText || text;\n };\n var buildEntitiesLookup = function (items, radix) {\n var i, chr, entity;\n var lookup = {};\n if (items) {\n items = items.split(',');\n radix = radix || 10;\n for (i = 0; i < items.length; i += 2) {\n chr = String.fromCharCode(parseInt(items[i], radix));\n if (!baseEntities[chr]) {\n entity = '&' + items[i + 1] + ';';\n lookup[chr] = entity;\n lookup[entity] = chr;\n }\n }\n return lookup;\n }\n };\n 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);\n var encodeRaw = function (text, attr) {\n return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) {\n return baseEntities[chr] || chr;\n });\n };\n var encodeAllRaw = function (text) {\n return ('' + text).replace(rawCharsRegExp, function (chr) {\n return baseEntities[chr] || chr;\n });\n };\n var encodeNumeric = function (text, attr) {\n return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) {\n if (chr.length > 1) {\n return '&#' + ((chr.charCodeAt(0) - 55296) * 1024 + (chr.charCodeAt(1) - 56320) + 65536) + ';';\n }\n return baseEntities[chr] || '&#' + chr.charCodeAt(0) + ';';\n });\n };\n var encodeNamed = function (text, attr, entities) {\n entities = entities || namedEntities;\n return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) {\n return baseEntities[chr] || entities[chr] || chr;\n });\n };\n var getEncodeFunc = function (name, entities) {\n var entitiesMap = buildEntitiesLookup(entities) || namedEntities;\n var encodeNamedAndNumeric = function (text, attr) {\n return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) {\n if (baseEntities[chr] !== undefined) {\n return baseEntities[chr];\n }\n if (entitiesMap[chr] !== undefined) {\n return entitiesMap[chr];\n }\n if (chr.length > 1) {\n return '&#' + ((chr.charCodeAt(0) - 55296) * 1024 + (chr.charCodeAt(1) - 56320) + 65536) + ';';\n }\n return '&#' + chr.charCodeAt(0) + ';';\n });\n };\n var encodeCustomNamed = function (text, attr) {\n return encodeNamed(text, attr, entitiesMap);\n };\n var nameMap = makeMap$1(name.replace(/\\+/g, ','));\n if (nameMap.named && nameMap.numeric) {\n return encodeNamedAndNumeric;\n }\n if (nameMap.named) {\n if (entities) {\n return encodeCustomNamed;\n }\n return encodeNamed;\n }\n if (nameMap.numeric) {\n return encodeNumeric;\n }\n return encodeRaw;\n };\n var decode = function (text) {\n return text.replace(entityRegExp, function (all, numeric) {\n if (numeric) {\n if (numeric.charAt(0).toLowerCase() === 'x') {\n numeric = parseInt(numeric.substr(1), 16);\n } else {\n numeric = parseInt(numeric, 10);\n }\n if (numeric > 65535) {\n numeric -= 65536;\n return String.fromCharCode(55296 + (numeric >> 10), 56320 + (numeric & 1023));\n }\n return asciiMap[numeric] || String.fromCharCode(numeric);\n }\n return reverseEntities[all] || namedEntities[all] || nativeDecode(all);\n });\n };\n var Entities = {\n encodeRaw: encodeRaw,\n encodeAllRaw: encodeAllRaw,\n encodeNumeric: encodeNumeric,\n encodeNamed: encodeNamed,\n getEncodeFunc: getEncodeFunc,\n decode: decode\n };\n\n var mapCache = {}, dummyObj = {};\n var makeMap$2 = Tools.makeMap, each$4 = Tools.each, extend$1 = Tools.extend, explode$1 = Tools.explode, inArray$1 = Tools.inArray;\n var split = function (items, delim) {\n items = Tools.trim(items);\n return items ? items.split(delim || ' ') : [];\n };\n var compileSchema = function (type) {\n var schema = {};\n var globalAttributes, blockContent;\n var phrasingContent, flowContent, html4BlockContent, html4PhrasingContent;\n var add = function (name, attributes, children) {\n var ni, attributesOrder, element;\n var arrayToMap = function (array, obj) {\n var map = {};\n var i, l;\n for (i = 0, l = array.length; i < l; i++) {\n map[array[i]] = obj || {};\n }\n return map;\n };\n children = children || [];\n attributes = attributes || '';\n if (typeof children === 'string') {\n children = split(children);\n }\n name = split(name);\n ni = name.length;\n while (ni--) {\n attributesOrder = split([\n globalAttributes,\n attributes\n ].join(' '));\n element = {\n attributes: arrayToMap(attributesOrder),\n attributesOrder: attributesOrder,\n children: arrayToMap(children, dummyObj)\n };\n schema[name[ni]] = element;\n }\n };\n var addAttrs = function (name, attributes) {\n var ni, schemaItem, i, l;\n name = split(name);\n ni = name.length;\n attributes = split(attributes);\n while (ni--) {\n schemaItem = schema[name[ni]];\n for (i = 0, l = attributes.length; i < l; i++) {\n schemaItem.attributes[attributes[i]] = {};\n schemaItem.attributesOrder.push(attributes[i]);\n }\n }\n };\n if (mapCache[type]) {\n return mapCache[type];\n }\n globalAttributes = 'id accesskey class dir lang style tabindex title role';\n blockContent = 'address blockquote div dl fieldset form h1 h2 h3 h4 h5 h6 hr menu ol p pre table ul';\n 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';\n if (type !== 'html4') {\n globalAttributes += ' contenteditable contextmenu draggable dropzone ' + 'hidden spellcheck translate';\n blockContent += ' article aside details dialog figure main header footer hgroup section nav';\n phrasingContent += ' audio canvas command datalist mark meter output picture ' + 'progress time wbr video ruby bdi keygen';\n }\n if (type !== 'html5-strict') {\n globalAttributes += ' xml:lang';\n html4PhrasingContent = 'acronym applet basefont big font strike tt';\n phrasingContent = [\n phrasingContent,\n html4PhrasingContent\n ].join(' ');\n each$4(split(html4PhrasingContent), function (name) {\n add(name, '', phrasingContent);\n });\n html4BlockContent = 'center dir isindex noframes';\n blockContent = [\n blockContent,\n html4BlockContent\n ].join(' ');\n flowContent = [\n blockContent,\n phrasingContent\n ].join(' ');\n each$4(split(html4BlockContent), function (name) {\n add(name, '', flowContent);\n });\n }\n flowContent = flowContent || [\n blockContent,\n phrasingContent\n ].join(' ');\n add('html', 'manifest', 'head body');\n add('head', '', 'base command link meta noscript script style title');\n add('title hr noscript br');\n add('base', 'href target');\n add('link', 'href rel media hreflang type sizes hreflang');\n add('meta', 'name http-equiv content charset');\n add('style', 'media type scoped');\n add('script', 'src async defer type charset');\n add('body', 'onafterprint onbeforeprint onbeforeunload onblur onerror onfocus ' + 'onhashchange onload onmessage onoffline ononline onpagehide onpageshow ' + 'onpopstate onresize onscroll onstorage onunload', flowContent);\n add('address dt dd div caption', '', flowContent);\n 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);\n add('blockquote', 'cite', flowContent);\n add('ol', 'reversed start type', 'li');\n add('ul', '', 'li');\n add('li', 'value', flowContent);\n add('dl', '', 'dt dd');\n add('a', 'href target rel media hreflang type', phrasingContent);\n add('q', 'cite', phrasingContent);\n add('ins del', 'cite datetime', flowContent);\n add('img', 'src sizes srcset alt usemap ismap width height');\n add('iframe', 'src name width height', flowContent);\n add('embed', 'src type width height');\n add('object', 'data type typemustmatch name usemap form width height', [\n flowContent,\n 'param'\n ].join(' '));\n add('param', 'name value');\n add('map', 'name', [\n flowContent,\n 'area'\n ].join(' '));\n add('area', 'alt coords shape href target rel media hreflang type');\n add('table', 'border', 'caption colgroup thead tfoot tbody tr' + (type === 'html4' ? ' col' : ''));\n add('colgroup', 'span', 'col');\n add('col', 'span');\n add('tbody thead tfoot', '', 'tr');\n add('tr', '', 'td th');\n add('td', 'colspan rowspan headers', flowContent);\n add('th', 'colspan rowspan headers scope abbr', flowContent);\n add('form', 'accept-charset action autocomplete enctype method name novalidate target', flowContent);\n add('fieldset', 'disabled form name', [\n flowContent,\n 'legend'\n ].join(' '));\n add('label', 'form for', phrasingContent);\n 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');\n add('button', 'disabled form formaction formenctype formmethod formnovalidate formtarget name type value', type === 'html4' ? flowContent : phrasingContent);\n add('select', 'disabled form multiple name required size', 'option optgroup');\n add('optgroup', 'disabled label', 'option');\n add('option', 'disabled label selected value');\n add('textarea', 'cols dirname disabled form maxlength name readonly required rows wrap');\n add('menu', 'type label', [\n flowContent,\n 'li'\n ].join(' '));\n add('noscript', '', flowContent);\n if (type !== 'html4') {\n add('wbr');\n add('ruby', '', [\n phrasingContent,\n 'rt rp'\n ].join(' '));\n add('figcaption', '', flowContent);\n add('mark rt rp summary bdi', '', phrasingContent);\n add('canvas', 'width height', flowContent);\n add('video', 'src crossorigin poster preload autoplay mediagroup loop ' + 'muted controls width height buffered', [\n flowContent,\n 'track source'\n ].join(' '));\n add('audio', 'src crossorigin preload autoplay mediagroup loop muted controls ' + 'buffered volume', [\n flowContent,\n 'track source'\n ].join(' '));\n add('picture', '', 'img source');\n add('source', 'src srcset type media sizes');\n add('track', 'kind src srclang label default');\n add('datalist', '', [\n phrasingContent,\n 'option'\n ].join(' '));\n add('article section nav aside main header footer', '', flowContent);\n add('hgroup', '', 'h1 h2 h3 h4 h5 h6');\n add('figure', '', [\n flowContent,\n 'figcaption'\n ].join(' '));\n add('time', 'datetime', phrasingContent);\n add('dialog', 'open', flowContent);\n add('command', 'type label icon disabled checked radiogroup command');\n add('output', 'for form name', phrasingContent);\n add('progress', 'value max', phrasingContent);\n add('meter', 'value min max low high optimum', phrasingContent);\n add('details', 'open', [\n flowContent,\n 'summary'\n ].join(' '));\n add('keygen', 'autofocus challenge disabled form keytype name');\n }\n if (type !== 'html5-strict') {\n addAttrs('script', 'language xml:space');\n addAttrs('style', 'xml:space');\n addAttrs('object', 'declare classid code codebase codetype archive standby align border hspace vspace');\n addAttrs('embed', 'align name hspace vspace');\n addAttrs('param', 'valuetype type');\n addAttrs('a', 'charset name rev shape coords');\n addAttrs('br', 'clear');\n addAttrs('applet', 'codebase archive code object alt name width height align hspace vspace');\n addAttrs('img', 'name longdesc align border hspace vspace');\n addAttrs('iframe', 'longdesc frameborder marginwidth marginheight scrolling align');\n addAttrs('font basefont', 'size color face');\n addAttrs('input', 'usemap align');\n addAttrs('select', 'onchange');\n addAttrs('textarea');\n addAttrs('h1 h2 h3 h4 h5 h6 div p legend caption', 'align');\n addAttrs('ul', 'type compact');\n addAttrs('li', 'type');\n addAttrs('ol dl menu dir', 'compact');\n addAttrs('pre', 'width xml:space');\n addAttrs('hr', 'align noshade size width');\n addAttrs('isindex', 'prompt');\n addAttrs('table', 'summary width frame rules cellspacing cellpadding align bgcolor');\n addAttrs('col', 'width align char charoff valign');\n addAttrs('colgroup', 'width align char charoff valign');\n addAttrs('thead', 'align char charoff valign');\n addAttrs('tr', 'align char charoff valign bgcolor');\n addAttrs('th', 'axis align char charoff valign nowrap bgcolor width height');\n addAttrs('form', 'accept');\n addAttrs('td', 'abbr axis scope align char charoff valign nowrap bgcolor width height');\n addAttrs('tfoot', 'align char charoff valign');\n addAttrs('tbody', 'align char charoff valign');\n addAttrs('area', 'nohref');\n addAttrs('body', 'background bgcolor text link vlink alink');\n }\n if (type !== 'html4') {\n addAttrs('input button select textarea', 'autofocus');\n addAttrs('input textarea', 'placeholder');\n addAttrs('a', 'download');\n addAttrs('link script img', 'crossorigin');\n addAttrs('iframe', 'sandbox seamless allowfullscreen');\n }\n each$4(split('a form meter progress dfn'), function (name) {\n if (schema[name]) {\n delete schema[name].children[name];\n }\n });\n delete schema.caption.children.table;\n delete schema.script;\n mapCache[type] = schema;\n return schema;\n };\n var compileElementMap = function (value, mode) {\n var styles;\n if (value) {\n styles = {};\n if (typeof value === 'string') {\n value = { '*': value };\n }\n each$4(value, function (value, key) {\n styles[key] = styles[key.toUpperCase()] = mode === 'map' ? makeMap$2(value, /[, ]/) : explode$1(value, /[, ]/);\n });\n }\n return styles;\n };\n function Schema(settings) {\n var elements = {};\n var children = {};\n var patternElements = [];\n var validStyles;\n var invalidStyles;\n var schemaItems;\n var whiteSpaceElementsMap, selfClosingElementsMap, shortEndedElementsMap, boolAttrMap, validClasses;\n var blockElementsMap, nonEmptyElementsMap, moveCaretBeforeOnEnterElementsMap, textBlockElementsMap, textInlineElementsMap;\n var customElementsMap = {}, specialElements = {};\n var createLookupTable = function (option, defaultValue, extendWith) {\n var value = settings[option];\n if (!value) {\n value = mapCache[option];\n if (!value) {\n value = makeMap$2(defaultValue, ' ', makeMap$2(defaultValue.toUpperCase(), ' '));\n value = extend$1(value, extendWith);\n mapCache[option] = value;\n }\n } else {\n value = makeMap$2(value, /[, ]/, makeMap$2(value.toUpperCase(), /[, ]/));\n }\n return value;\n };\n settings = settings || {};\n schemaItems = compileSchema(settings.schema);\n if (settings.verify_html === false) {\n settings.valid_elements = '*[*]';\n }\n validStyles = compileElementMap(settings.valid_styles);\n invalidStyles = compileElementMap(settings.invalid_styles, 'map');\n validClasses = compileElementMap(settings.valid_classes, 'map');\n whiteSpaceElementsMap = createLookupTable('whitespace_elements', 'pre script noscript style textarea video audio iframe object code');\n selfClosingElementsMap = createLookupTable('self_closing_elements', 'colgroup dd dt li option p td tfoot th thead tr');\n shortEndedElementsMap = createLookupTable('short_ended_elements', 'area base basefont br col frame hr img input isindex link ' + 'meta param embed source wbr track');\n boolAttrMap = createLookupTable('boolean_attributes', 'checked compact declare defer disabled ismap multiple nohref noresize ' + 'noshade nowrap readonly selected autoplay loop controls');\n nonEmptyElementsMap = createLookupTable('non_empty_elements', 'td th iframe video audio object ' + 'script pre code', shortEndedElementsMap);\n moveCaretBeforeOnEnterElementsMap = createLookupTable('move_caret_before_on_enter_elements', 'table', nonEmptyElementsMap);\n 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');\n 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);\n textInlineElementsMap = createLookupTable('text_inline_elements', 'span strong b em i font strike u var cite ' + 'dfn code mark q sup sub samp');\n each$4((settings.special || 'script noscript iframe noframes noembed title style textarea xmp').split(' '), function (name) {\n specialElements[name] = new RegExp(']*>', 'gi');\n });\n var patternToRegExp = function (str) {\n return new RegExp('^' + str.replace(/([?+*])/g, '.$1') + '$');\n };\n var addValidElements = function (validElements) {\n var ei, el, ai, al, matches, element, attr, attrData, elementName, attrName, attrType, attributes, attributesOrder, prefix, outputName, globalAttributes, globalAttributesOrder, key, value;\n var elementRuleRegExp = /^([#+\\-])?([^\\[!\\/]+)(?:\\/([^\\[!]+))?(?:(!?)\\[([^\\]]+)\\])?$/, attrRuleRegExp = /^([!\\-])?(\\w+[\\\\:]:\\w+|[^=:<]+)?(?:([=:<])(.*))?$/, hasPatternsRegExp = /[*?+]/;\n if (validElements) {\n validElements = split(validElements, ',');\n if (elements['@']) {\n globalAttributes = elements['@'].attributes;\n globalAttributesOrder = elements['@'].attributesOrder;\n }\n for (ei = 0, el = validElements.length; ei < el; ei++) {\n matches = elementRuleRegExp.exec(validElements[ei]);\n if (matches) {\n prefix = matches[1];\n elementName = matches[2];\n outputName = matches[3];\n attrData = matches[5];\n attributes = {};\n attributesOrder = [];\n element = {\n attributes: attributes,\n attributesOrder: attributesOrder\n };\n if (prefix === '#') {\n element.paddEmpty = true;\n }\n if (prefix === '-') {\n element.removeEmpty = true;\n }\n if (matches[4] === '!') {\n element.removeEmptyAttrs = true;\n }\n if (globalAttributes) {\n for (key in globalAttributes) {\n attributes[key] = globalAttributes[key];\n }\n attributesOrder.push.apply(attributesOrder, globalAttributesOrder);\n }\n if (attrData) {\n attrData = split(attrData, '|');\n for (ai = 0, al = attrData.length; ai < al; ai++) {\n matches = attrRuleRegExp.exec(attrData[ai]);\n if (matches) {\n attr = {};\n attrType = matches[1];\n attrName = matches[2].replace(/[\\\\:]:/g, ':');\n prefix = matches[3];\n value = matches[4];\n if (attrType === '!') {\n element.attributesRequired = element.attributesRequired || [];\n element.attributesRequired.push(attrName);\n attr.required = true;\n }\n if (attrType === '-') {\n delete attributes[attrName];\n attributesOrder.splice(inArray$1(attributesOrder, attrName), 1);\n continue;\n }\n if (prefix) {\n if (prefix === '=') {\n element.attributesDefault = element.attributesDefault || [];\n element.attributesDefault.push({\n name: attrName,\n value: value\n });\n attr.defaultValue = value;\n }\n if (prefix === ':') {\n element.attributesForced = element.attributesForced || [];\n element.attributesForced.push({\n name: attrName,\n value: value\n });\n attr.forcedValue = value;\n }\n if (prefix === '<') {\n attr.validValues = makeMap$2(value, '?');\n }\n }\n if (hasPatternsRegExp.test(attrName)) {\n element.attributePatterns = element.attributePatterns || [];\n attr.pattern = patternToRegExp(attrName);\n element.attributePatterns.push(attr);\n } else {\n if (!attributes[attrName]) {\n attributesOrder.push(attrName);\n }\n attributes[attrName] = attr;\n }\n }\n }\n }\n if (!globalAttributes && elementName === '@') {\n globalAttributes = attributes;\n globalAttributesOrder = attributesOrder;\n }\n if (outputName) {\n element.outputName = elementName;\n elements[outputName] = element;\n }\n if (hasPatternsRegExp.test(elementName)) {\n element.pattern = patternToRegExp(elementName);\n patternElements.push(element);\n } else {\n elements[elementName] = element;\n }\n }\n }\n }\n };\n var setValidElements = function (validElements) {\n elements = {};\n patternElements = [];\n addValidElements(validElements);\n each$4(schemaItems, function (element, name) {\n children[name] = element.children;\n });\n };\n var addCustomElements = function (customElements) {\n var customElementRegExp = /^(~)?(.+)$/;\n if (customElements) {\n mapCache.text_block_elements = mapCache.block_elements = null;\n each$4(split(customElements, ','), function (rule) {\n var matches = customElementRegExp.exec(rule), inline = matches[1] === '~', cloneName = inline ? 'span' : 'div', name = matches[2];\n children[name] = children[cloneName];\n customElementsMap[name] = cloneName;\n if (!inline) {\n blockElementsMap[name.toUpperCase()] = {};\n blockElementsMap[name] = {};\n }\n if (!elements[name]) {\n var customRule = elements[cloneName];\n customRule = extend$1({}, customRule);\n delete customRule.removeEmptyAttrs;\n delete customRule.removeEmpty;\n elements[name] = customRule;\n }\n each$4(children, function (element, elmName) {\n if (element[cloneName]) {\n children[elmName] = element = extend$1({}, children[elmName]);\n element[name] = element[cloneName];\n }\n });\n });\n }\n };\n var addValidChildren = function (validChildren) {\n var childRuleRegExp = /^([+\\-]?)(\\w+)\\[([^\\]]+)\\]$/;\n mapCache[settings.schema] = null;\n if (validChildren) {\n each$4(split(validChildren, ','), function (rule) {\n var matches = childRuleRegExp.exec(rule);\n var parent, prefix;\n if (matches) {\n prefix = matches[1];\n if (prefix) {\n parent = children[matches[2]];\n } else {\n parent = children[matches[2]] = { '#comment': {} };\n }\n parent = children[matches[2]];\n each$4(split(matches[3], '|'), function (child) {\n if (prefix === '-') {\n delete parent[child];\n } else {\n parent[child] = {};\n }\n });\n }\n });\n }\n };\n var getElementRule = function (name) {\n var element = elements[name], i;\n if (element) {\n return element;\n }\n i = patternElements.length;\n while (i--) {\n element = patternElements[i];\n if (element.pattern.test(name)) {\n return element;\n }\n }\n };\n if (!settings.valid_elements) {\n each$4(schemaItems, function (element, name) {\n elements[name] = {\n attributes: element.attributes,\n attributesOrder: element.attributesOrder\n };\n children[name] = element.children;\n });\n if (settings.schema !== 'html5') {\n each$4(split('strong/b em/i'), function (item) {\n item = split(item, '/');\n elements[item[1]].outputName = item[0];\n });\n }\n each$4(split('ol ul sub sup blockquote span font a table tbody tr strong em b i'), function (name) {\n if (elements[name]) {\n elements[name].removeEmpty = true;\n }\n });\n each$4(split('p h1 h2 h3 h4 h5 h6 th td pre div address caption li'), function (name) {\n elements[name].paddEmpty = true;\n });\n each$4(split('span'), function (name) {\n elements[name].removeEmptyAttrs = true;\n });\n } else {\n setValidElements(settings.valid_elements);\n }\n addCustomElements(settings.custom_elements);\n addValidChildren(settings.valid_children);\n addValidElements(settings.extended_valid_elements);\n addValidChildren('+ol[ul|ol],+ul[ul|ol]');\n each$4({\n dd: 'dl',\n dt: 'dl',\n li: 'ul ol',\n td: 'tr',\n th: 'tr',\n tr: 'tbody thead tfoot',\n tbody: 'table',\n thead: 'table',\n tfoot: 'table',\n legend: 'fieldset',\n area: 'map',\n param: 'video audio object'\n }, function (parents, item) {\n if (elements[item]) {\n elements[item].parentsRequired = split(parents);\n }\n });\n if (settings.invalid_elements) {\n each$4(explode$1(settings.invalid_elements), function (item) {\n if (elements[item]) {\n delete elements[item];\n }\n });\n }\n if (!getElementRule('span')) {\n addValidElements('span[!data-mce-type|*]');\n }\n var getValidStyles = function () {\n return validStyles;\n };\n var getInvalidStyles = function () {\n return invalidStyles;\n };\n var getValidClasses = function () {\n return validClasses;\n };\n var getBoolAttrs = function () {\n return boolAttrMap;\n };\n var getBlockElements = function () {\n return blockElementsMap;\n };\n var getTextBlockElements = function () {\n return textBlockElementsMap;\n };\n var getTextInlineElements = function () {\n return textInlineElementsMap;\n };\n var getShortEndedElements = function () {\n return shortEndedElementsMap;\n };\n var getSelfClosingElements = function () {\n return selfClosingElementsMap;\n };\n var getNonEmptyElements = function () {\n return nonEmptyElementsMap;\n };\n var getMoveCaretBeforeOnEnterElements = function () {\n return moveCaretBeforeOnEnterElementsMap;\n };\n var getWhiteSpaceElements = function () {\n return whiteSpaceElementsMap;\n };\n var getSpecialElements = function () {\n return specialElements;\n };\n var isValidChild = function (name, child) {\n var parent = children[name.toLowerCase()];\n return !!(parent && parent[child.toLowerCase()]);\n };\n var isValid = function (name, attr) {\n var attrPatterns, i;\n var rule = getElementRule(name);\n if (rule) {\n if (attr) {\n if (rule.attributes[attr]) {\n return true;\n }\n attrPatterns = rule.attributePatterns;\n if (attrPatterns) {\n i = attrPatterns.length;\n while (i--) {\n if (attrPatterns[i].pattern.test(name)) {\n return true;\n }\n }\n }\n } else {\n return true;\n }\n }\n return false;\n };\n var getCustomElements = function () {\n return customElementsMap;\n };\n return {\n children: children,\n elements: elements,\n getValidStyles: getValidStyles,\n getValidClasses: getValidClasses,\n getBlockElements: getBlockElements,\n getInvalidStyles: getInvalidStyles,\n getShortEndedElements: getShortEndedElements,\n getTextBlockElements: getTextBlockElements,\n getTextInlineElements: getTextInlineElements,\n getBoolAttrs: getBoolAttrs,\n getElementRule: getElementRule,\n getSelfClosingElements: getSelfClosingElements,\n getNonEmptyElements: getNonEmptyElements,\n getMoveCaretBeforeOnEnterElements: getMoveCaretBeforeOnEnterElements,\n getWhiteSpaceElements: getWhiteSpaceElements,\n getSpecialElements: getSpecialElements,\n isValidChild: isValidChild,\n isValid: isValid,\n getCustomElements: getCustomElements,\n addValidElements: addValidElements,\n setValidElements: setValidElements,\n addCustomElements: addCustomElements,\n addValidChildren: addValidChildren\n };\n }\n\n var toHex = function (match, r, g, b) {\n var hex = function (val) {\n val = parseInt(val, 10).toString(16);\n return val.length > 1 ? val : '0' + val;\n };\n return '#' + hex(r) + hex(g) + hex(b);\n };\n function Styles(settings, schema) {\n var rgbRegExp = /rgb\\s*\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*\\)/gi;\n var urlOrStrRegExp = /(?:url(?:(?:\\(\\s*\\\"([^\\\"]+)\\\"\\s*\\))|(?:\\(\\s*\\'([^\\']+)\\'\\s*\\))|(?:\\(\\s*([^)\\s]+)\\s*\\))))|(?:\\'([^\\']+)\\')|(?:\\\"([^\\\"]+)\\\")/gi;\n var styleRegExp = /\\s*([^:]+):\\s*([^;]+);?/g;\n var trimRightRegExp = /\\s+$/;\n var i;\n var encodingLookup = {};\n var encodingItems;\n var validStyles;\n var invalidStyles;\n var invisibleChar = '\\uFEFF';\n settings = settings || {};\n if (schema) {\n validStyles = schema.getValidStyles();\n invalidStyles = schema.getInvalidStyles();\n }\n encodingItems = ('\\\\\" \\\\\\' \\\\; \\\\: ; : ' + invisibleChar).split(' ');\n for (i = 0; i < encodingItems.length; i++) {\n encodingLookup[encodingItems[i]] = invisibleChar + i;\n encodingLookup[invisibleChar + i] = encodingItems[i];\n }\n return {\n toHex: function (color) {\n return color.replace(rgbRegExp, toHex);\n },\n parse: function (css) {\n var styles = {};\n var matches, name, value, isEncoded;\n var urlConverter = settings.url_converter;\n var urlConverterScope = settings.url_converter_scope || this;\n var compress = function (prefix, suffix, noJoin) {\n var top, right, bottom, left;\n top = styles[prefix + '-top' + suffix];\n if (!top) {\n return;\n }\n right = styles[prefix + '-right' + suffix];\n if (!right) {\n return;\n }\n bottom = styles[prefix + '-bottom' + suffix];\n if (!bottom) {\n return;\n }\n left = styles[prefix + '-left' + suffix];\n if (!left) {\n return;\n }\n var box = [\n top,\n right,\n bottom,\n left\n ];\n i = box.length - 1;\n while (i--) {\n if (box[i] !== box[i + 1]) {\n break;\n }\n }\n if (i > -1 && noJoin) {\n return;\n }\n styles[prefix + suffix] = i === -1 ? box[0] : box.join(' ');\n delete styles[prefix + '-top' + suffix];\n delete styles[prefix + '-right' + suffix];\n delete styles[prefix + '-bottom' + suffix];\n delete styles[prefix + '-left' + suffix];\n };\n var canCompress = function (key) {\n var value = styles[key], i;\n if (!value) {\n return;\n }\n value = value.split(' ');\n i = value.length;\n while (i--) {\n if (value[i] !== value[0]) {\n return false;\n }\n }\n styles[key] = value[0];\n return true;\n };\n var compress2 = function (target, a, b, c) {\n if (!canCompress(a)) {\n return;\n }\n if (!canCompress(b)) {\n return;\n }\n if (!canCompress(c)) {\n return;\n }\n styles[target] = styles[a] + ' ' + styles[b] + ' ' + styles[c];\n delete styles[a];\n delete styles[b];\n delete styles[c];\n };\n var encode = function (str) {\n isEncoded = true;\n return encodingLookup[str];\n };\n var decode = function (str, keepSlashes) {\n if (isEncoded) {\n str = str.replace(/\\uFEFF[0-9]/g, function (str) {\n return encodingLookup[str];\n });\n }\n if (!keepSlashes) {\n str = str.replace(/\\\\([\\'\\\";:])/g, '$1');\n }\n return str;\n };\n var decodeSingleHexSequence = function (escSeq) {\n return String.fromCharCode(parseInt(escSeq.slice(1), 16));\n };\n var decodeHexSequences = function (value) {\n return value.replace(/\\\\[0-9a-f]+/gi, decodeSingleHexSequence);\n };\n var processUrl = function (match, url, url2, url3, str, str2) {\n str = str || str2;\n if (str) {\n str = decode(str);\n return '\\'' + str.replace(/\\'/g, '\\\\\\'') + '\\'';\n }\n url = decode(url || url2 || url3);\n if (!settings.allow_script_urls) {\n var scriptUrl = url.replace(/[\\s\\r\\n]+/g, '');\n if (/(java|vb)script:/i.test(scriptUrl)) {\n return '';\n }\n if (!settings.allow_svg_data_urls && /^data:image\\/svg/i.test(scriptUrl)) {\n return '';\n }\n }\n if (urlConverter) {\n url = urlConverter.call(urlConverterScope, url, 'style');\n }\n return 'url(\\'' + url.replace(/\\'/g, '\\\\\\'') + '\\')';\n };\n if (css) {\n css = css.replace(/[\\u0000-\\u001F]/g, '');\n css = css.replace(/\\\\[\\\"\\';:\\uFEFF]/g, encode).replace(/\\\"[^\\\"]+\\\"|\\'[^\\']+\\'/g, function (str) {\n return str.replace(/[;:]/g, encode);\n });\n while (matches = styleRegExp.exec(css)) {\n styleRegExp.lastIndex = matches.index + matches[0].length;\n name = matches[1].replace(trimRightRegExp, '').toLowerCase();\n value = matches[2].replace(trimRightRegExp, '');\n if (name && value) {\n name = decodeHexSequences(name);\n value = decodeHexSequences(value);\n if (name.indexOf(invisibleChar) !== -1 || name.indexOf('\"') !== -1) {\n continue;\n }\n if (!settings.allow_script_urls && (name === 'behavior' || /expression\\s*\\(|\\/\\*|\\*\\//.test(value))) {\n continue;\n }\n if (name === 'font-weight' && value === '700') {\n value = 'bold';\n } else if (name === 'color' || name === 'background-color') {\n value = value.toLowerCase();\n }\n value = value.replace(rgbRegExp, toHex);\n value = value.replace(urlOrStrRegExp, processUrl);\n styles[name] = isEncoded ? decode(value, true) : value;\n }\n }\n compress('border', '', true);\n compress('border', '-width');\n compress('border', '-color');\n compress('border', '-style');\n compress('padding', '');\n compress('margin', '');\n compress2('border', 'border-width', 'border-style', 'border-color');\n if (styles.border === 'medium none') {\n delete styles.border;\n }\n if (styles['border-image'] === 'none') {\n delete styles['border-image'];\n }\n }\n return styles;\n },\n serialize: function (styles, elementName) {\n var css = '', name, value;\n var serializeStyles = function (name) {\n var styleList, i, l, value;\n styleList = validStyles[name];\n if (styleList) {\n for (i = 0, l = styleList.length; i < l; i++) {\n name = styleList[i];\n value = styles[name];\n if (value) {\n css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';\n }\n }\n }\n };\n var isValid = function (name, elementName) {\n var styleMap;\n styleMap = invalidStyles['*'];\n if (styleMap && styleMap[name]) {\n return false;\n }\n styleMap = invalidStyles[elementName];\n if (styleMap && styleMap[name]) {\n return false;\n }\n return true;\n };\n if (elementName && validStyles) {\n serializeStyles('*');\n serializeStyles(elementName);\n } else {\n for (name in styles) {\n value = styles[name];\n if (value && (!invalidStyles || isValid(name, elementName))) {\n css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';\n }\n }\n }\n return css;\n }\n };\n }\n\n var each$5 = Tools.each;\n var grep$1 = Tools.grep;\n var isIE = Env.ie;\n var simpleSelectorRe = /^([a-z0-9],?)+$/i;\n var whiteSpaceRegExp$2 = /^[ \\t\\r\\n]*$/;\n var setupAttrHooks = function (styles, settings, getContext) {\n var attrHooks = {};\n var keepValues = settings.keep_values;\n var keepUrlHook = {\n set: function ($elm, value, name) {\n if (settings.url_converter) {\n value = settings.url_converter.call(settings.url_converter_scope || getContext(), value, name, $elm[0]);\n }\n $elm.attr('data-mce-' + name, value).attr(name, value);\n },\n get: function ($elm, name) {\n return $elm.attr('data-mce-' + name) || $elm.attr(name);\n }\n };\n attrHooks = {\n style: {\n set: function ($elm, value) {\n if (value !== null && typeof value === 'object') {\n $elm.css(value);\n return;\n }\n if (keepValues) {\n $elm.attr('data-mce-style', value);\n }\n $elm.attr('style', value);\n },\n get: function ($elm) {\n var value = $elm.attr('data-mce-style') || $elm.attr('style');\n value = styles.serialize(styles.parse(value), $elm[0].nodeName);\n return value;\n }\n }\n };\n if (keepValues) {\n attrHooks.href = attrHooks.src = keepUrlHook;\n }\n return attrHooks;\n };\n var updateInternalStyleAttr = function (styles, $elm) {\n var rawValue = $elm.attr('style');\n var value = styles.serialize(styles.parse(rawValue), $elm[0].nodeName);\n if (!value) {\n value = null;\n }\n $elm.attr('data-mce-style', value);\n };\n var findNodeIndex = function (node, normalized) {\n var idx = 0, lastNodeType, nodeType;\n if (node) {\n for (lastNodeType = node.nodeType, node = node.previousSibling; node; node = node.previousSibling) {\n nodeType = node.nodeType;\n if (normalized && nodeType === 3) {\n if (nodeType === lastNodeType || !node.nodeValue.length) {\n continue;\n }\n }\n idx++;\n lastNodeType = nodeType;\n }\n }\n return idx;\n };\n function DOMUtils(doc, settings) {\n var _this = this;\n if (settings === void 0) {\n settings = {};\n }\n var attrHooks;\n var addedStyles = {};\n var win = domGlobals.window;\n var files = {};\n var counter = 0;\n var stdMode = true;\n var boxModel = true;\n var styleSheetLoader = StyleSheetLoader(doc, { contentCssCors: settings.contentCssCors });\n var boundEvents = [];\n var schema = settings.schema ? settings.schema : Schema({});\n var styles = Styles({\n url_converter: settings.url_converter,\n url_converter_scope: settings.url_converter_scope\n }, settings.schema);\n var events = settings.ownEvents ? new EventUtils(settings.proxy) : EventUtils.Event;\n var blockElementsMap = schema.getBlockElements();\n var $ = DomQuery.overrideDefaults(function () {\n return {\n context: doc,\n element: self.getRoot()\n };\n });\n var isBlock = function (node) {\n if (typeof node === 'string') {\n return !!blockElementsMap[node];\n } else if (node) {\n var type = node.nodeType;\n if (type) {\n return !!(type === 1 && blockElementsMap[node.nodeName]);\n }\n }\n return false;\n };\n var get = function (elm) {\n if (elm && doc && typeof elm === 'string') {\n var node = doc.getElementById(elm);\n if (node && node.id !== elm) {\n return doc.getElementsByName(elm)[1];\n } else {\n return node;\n }\n }\n return elm;\n };\n var $$ = function (elm) {\n if (typeof elm === 'string') {\n elm = get(elm);\n }\n return $(elm);\n };\n var getAttrib = function (elm, name, defaultVal) {\n var hook, value;\n var $elm = $$(elm);\n if ($elm.length) {\n hook = attrHooks[name];\n if (hook && hook.get) {\n value = hook.get($elm, name);\n } else {\n value = $elm.attr(name);\n }\n }\n if (typeof value === 'undefined') {\n value = defaultVal || '';\n }\n return value;\n };\n var getAttribs = function (elm) {\n var node = get(elm);\n if (!node) {\n return [];\n }\n return node.attributes;\n };\n var setAttrib = function (elm, name, value) {\n var originalValue, hook;\n if (value === '') {\n value = null;\n }\n var $elm = $$(elm);\n originalValue = $elm.attr(name);\n if (!$elm.length) {\n return;\n }\n hook = attrHooks[name];\n if (hook && hook.set) {\n hook.set($elm, value, name);\n } else {\n $elm.attr(name, value);\n }\n if (originalValue !== value && settings.onSetAttrib) {\n settings.onSetAttrib({\n attrElm: $elm,\n attrName: name,\n attrValue: value\n });\n }\n };\n var clone = function (node, deep) {\n if (!isIE || node.nodeType !== 1 || deep) {\n return node.cloneNode(deep);\n }\n if (!deep) {\n var clone_1 = doc.createElement(node.nodeName);\n each$5(getAttribs(node), function (attr) {\n setAttrib(clone_1, attr.nodeName, getAttrib(node, attr.nodeName));\n });\n return clone_1;\n }\n return null;\n };\n var getRoot = function () {\n return settings.root_element || doc.body;\n };\n var getViewPort = function (argWin) {\n var actWin = !argWin ? win : argWin;\n var doc = actWin.document;\n var rootElm = doc.documentElement ;\n return {\n x: actWin.pageXOffset || rootElm.scrollLeft,\n y: actWin.pageYOffset || rootElm.scrollTop,\n w: actWin.innerWidth || rootElm.clientWidth,\n h: actWin.innerHeight || rootElm.clientHeight\n };\n };\n var getPos = function (elm, rootElm) {\n return Position.getPos(doc.body, get(elm), rootElm);\n };\n var setStyle = function (elm, name, value) {\n var $elm = $$(elm).css(name, value);\n if (settings.update_styles) {\n updateInternalStyleAttr(styles, $elm);\n }\n };\n var setStyles = function (elm, stylesArg) {\n var $elm = $$(elm).css(stylesArg);\n if (settings.update_styles) {\n updateInternalStyleAttr(styles, $elm);\n }\n };\n var getStyle = function (elm, name, computed) {\n var $elm = $$(elm);\n if (computed) {\n return $elm.css(name);\n }\n name = name.replace(/-(\\D)/g, function (a, b) {\n return b.toUpperCase();\n });\n if (name === 'float') {\n name = Env.ie && Env.ie < 12 ? 'styleFloat' : 'cssFloat';\n }\n return $elm[0] && $elm[0].style ? $elm[0].style[name] : undefined;\n };\n var getSize = function (elm) {\n var w, h;\n elm = get(elm);\n w = getStyle(elm, 'width');\n h = getStyle(elm, 'height');\n if (w.indexOf('px') === -1) {\n w = 0;\n }\n if (h.indexOf('px') === -1) {\n h = 0;\n }\n return {\n w: parseInt(w, 10) || elm.offsetWidth || elm.clientWidth,\n h: parseInt(h, 10) || elm.offsetHeight || elm.clientHeight\n };\n };\n var getRect = function (elm) {\n var pos, size;\n elm = get(elm);\n pos = getPos(elm);\n size = getSize(elm);\n return {\n x: pos.x,\n y: pos.y,\n w: size.w,\n h: size.h\n };\n };\n var is = function (elm, selector) {\n var i;\n if (!elm) {\n return false;\n }\n if (!Array.isArray(elm)) {\n if (selector === '*') {\n return elm.nodeType === 1;\n }\n if (simpleSelectorRe.test(selector)) {\n var selectors = selector.toLowerCase().split(/,/);\n var elmName = elm.nodeName.toLowerCase();\n for (i = selectors.length - 1; i >= 0; i--) {\n if (selectors[i] === elmName) {\n return true;\n }\n }\n return false;\n }\n if (elm.nodeType && elm.nodeType !== 1) {\n return false;\n }\n }\n var elms = !Array.isArray(elm) ? [elm] : elm;\n return Sizzle(selector, elms[0].ownerDocument || elms[0], null, elms).length > 0;\n };\n var getParents = function (elm, selector, root, collect) {\n var result = [];\n var selectorVal;\n var node = get(elm);\n collect = collect === undefined;\n root = root || (getRoot().nodeName !== 'BODY' ? getRoot().parentNode : null);\n if (Tools.is(selector, 'string')) {\n selectorVal = selector;\n if (selector === '*') {\n selector = function (node) {\n return node.nodeType === 1;\n };\n } else {\n selector = function (node) {\n return is(node, selectorVal);\n };\n }\n }\n while (node) {\n if (node === root || !node.nodeType || node.nodeType === 9) {\n break;\n }\n if (!selector || typeof selector === 'function' && selector(node)) {\n if (collect) {\n result.push(node);\n } else {\n return [node];\n }\n }\n node = node.parentNode;\n }\n return collect ? result : null;\n };\n var getParent = function (node, selector, root) {\n var parents = getParents(node, selector, root, false);\n return parents && parents.length > 0 ? parents[0] : null;\n };\n var _findSib = function (node, selector, name) {\n var func = selector;\n if (node) {\n if (typeof selector === 'string') {\n func = function (node) {\n return is(node, selector);\n };\n }\n for (node = node[name]; node; node = node[name]) {\n if (typeof func === 'function' && func(node)) {\n return node;\n }\n }\n }\n return null;\n };\n var getNext = function (node, selector) {\n return _findSib(node, selector, 'nextSibling');\n };\n var getPrev = function (node, selector) {\n return _findSib(node, selector, 'previousSibling');\n };\n var select = function (selector, scope) {\n return Sizzle(selector, get(scope) || settings.root_element || doc, []);\n };\n var run = function (elm, func, scope) {\n var result;\n var node = typeof elm === 'string' ? get(elm) : elm;\n if (!node) {\n return false;\n }\n if (Tools.isArray(node) && (node.length || node.length === 0)) {\n result = [];\n each$5(node, function (elm, i) {\n if (elm) {\n if (typeof elm === 'string') {\n elm = get(elm);\n }\n result.push(func.call(scope, elm, i));\n }\n });\n return result;\n }\n var context = scope ? scope : _this;\n return func.call(context, node);\n };\n var setAttribs = function (elm, attrs) {\n $$(elm).each(function (i, node) {\n each$5(attrs, function (value, name) {\n setAttrib(node, name, value);\n });\n });\n };\n var setHTML = function (elm, html) {\n var $elm = $$(elm);\n if (isIE) {\n $elm.each(function (i, target) {\n if (target.canHaveHTML === false) {\n return;\n }\n while (target.firstChild) {\n target.removeChild(target.firstChild);\n }\n try {\n target.innerHTML = '
' + html;\n target.removeChild(target.firstChild);\n } catch (ex) {\n DomQuery('
').html('
' + html).contents().slice(1).appendTo(target);\n }\n return html;\n });\n } else {\n $elm.html(html);\n }\n };\n var add = function (parentElm, name, attrs, html, create) {\n return run(parentElm, function (parentElm) {\n var newElm = typeof name === 'string' ? doc.createElement(name) : name;\n setAttribs(newElm, attrs);\n if (html) {\n if (typeof html !== 'string' && html.nodeType) {\n newElm.appendChild(html);\n } else if (typeof html === 'string') {\n setHTML(newElm, html);\n }\n }\n return !create ? parentElm.appendChild(newElm) : newElm;\n });\n };\n var create = function (name, attrs, html) {\n return add(doc.createElement(name), name, attrs, html, true);\n };\n var decode = Entities.decode;\n var encode = Entities.encodeAllRaw;\n var createHTML = function (name, attrs, html) {\n var outHtml = '', key;\n outHtml += '<' + name;\n for (key in attrs) {\n if (attrs.hasOwnProperty(key) && attrs[key] !== null && typeof attrs[key] !== 'undefined') {\n outHtml += ' ' + key + '=\"' + encode(attrs[key]) + '\"';\n }\n }\n if (typeof html !== 'undefined') {\n return outHtml + '>' + html + '';\n }\n return outHtml + ' />';\n };\n var createFragment = function (html) {\n var node;\n var container = doc.createElement('div');\n var frag = doc.createDocumentFragment();\n frag.appendChild(container);\n if (html) {\n container.innerHTML = html;\n }\n while (node = container.firstChild) {\n frag.appendChild(node);\n }\n frag.removeChild(container);\n return frag;\n };\n var remove = function (node, keepChildren) {\n var $node = $$(node);\n if (keepChildren) {\n $node.each(function () {\n var child;\n while (child = this.firstChild) {\n if (child.nodeType === 3 && child.data.length === 0) {\n this.removeChild(child);\n } else {\n this.parentNode.insertBefore(child, this);\n }\n }\n }).remove();\n } else {\n $node.remove();\n }\n return $node.length > 1 ? $node.toArray() : $node[0];\n };\n var removeAllAttribs = function (e) {\n return run(e, function (e) {\n var i;\n var attrs = e.attributes;\n for (i = attrs.length - 1; i >= 0; i--) {\n e.removeAttributeNode(attrs.item(i));\n }\n });\n };\n var parseStyle = function (cssText) {\n return styles.parse(cssText);\n };\n var serializeStyle = function (stylesArg, name) {\n return styles.serialize(stylesArg, name);\n };\n var addStyle = function (cssText) {\n var head, styleElm;\n if (self !== DOMUtils.DOM && doc === domGlobals.document) {\n if (addedStyles[cssText]) {\n return;\n }\n addedStyles[cssText] = true;\n }\n styleElm = doc.getElementById('mceDefaultStyles');\n if (!styleElm) {\n styleElm = doc.createElement('style');\n styleElm.id = 'mceDefaultStyles';\n styleElm.type = 'text/css';\n head = doc.getElementsByTagName('head')[0];\n if (head.firstChild) {\n head.insertBefore(styleElm, head.firstChild);\n } else {\n head.appendChild(styleElm);\n }\n }\n if (styleElm.styleSheet) {\n styleElm.styleSheet.cssText += cssText;\n } else {\n styleElm.appendChild(doc.createTextNode(cssText));\n }\n };\n var loadCSS = function (url) {\n var head;\n if (self !== DOMUtils.DOM && doc === domGlobals.document) {\n DOMUtils.DOM.loadCSS(url);\n return;\n }\n if (!url) {\n url = '';\n }\n head = doc.getElementsByTagName('head')[0];\n each$5(url.split(','), function (url) {\n var link;\n url = Tools._addCacheSuffix(url);\n if (files[url]) {\n return;\n }\n files[url] = true;\n link = create('link', {\n rel: 'stylesheet',\n href: url\n });\n head.appendChild(link);\n });\n };\n var toggleClass = function (elm, cls, state) {\n $$(elm).toggleClass(cls, state).each(function () {\n if (this.className === '') {\n DomQuery(this).attr('class', null);\n }\n });\n };\n var addClass = function (elm, cls) {\n $$(elm).addClass(cls);\n };\n var removeClass = function (elm, cls) {\n toggleClass(elm, cls, false);\n };\n var hasClass = function (elm, cls) {\n return $$(elm).hasClass(cls);\n };\n var show = function (elm) {\n $$(elm).show();\n };\n var hide = function (elm) {\n $$(elm).hide();\n };\n var isHidden = function (elm) {\n return $$(elm).css('display') === 'none';\n };\n var uniqueId = function (prefix) {\n return (!prefix ? 'mce_' : prefix) + counter++;\n };\n var getOuterHTML = function (elm) {\n var node = typeof elm === 'string' ? get(elm) : elm;\n return NodeType.isElement(node) ? node.outerHTML : DomQuery('
').append(DomQuery(node).clone()).html();\n };\n var setOuterHTML = function (elm, html) {\n $$(elm).each(function () {\n try {\n if ('outerHTML' in this) {\n this.outerHTML = html;\n return;\n }\n } catch (ex) {\n }\n remove(DomQuery(this).html(html), true);\n });\n };\n var insertAfter = function (node, reference) {\n var referenceNode = get(reference);\n return run(node, function (node) {\n var parent, nextSibling;\n parent = referenceNode.parentNode;\n nextSibling = referenceNode.nextSibling;\n if (nextSibling) {\n parent.insertBefore(node, nextSibling);\n } else {\n parent.appendChild(node);\n }\n return node;\n });\n };\n var replace = function (newElm, oldElm, keepChildren) {\n return run(oldElm, function (oldElm) {\n if (Tools.is(oldElm, 'array')) {\n newElm = newElm.cloneNode(true);\n }\n if (keepChildren) {\n each$5(grep$1(oldElm.childNodes), function (node) {\n newElm.appendChild(node);\n });\n }\n return oldElm.parentNode.replaceChild(newElm, oldElm);\n });\n };\n var rename = function (elm, name) {\n var newElm;\n if (elm.nodeName !== name.toUpperCase()) {\n newElm = create(name);\n each$5(getAttribs(elm), function (attrNode) {\n setAttrib(newElm, attrNode.nodeName, getAttrib(elm, attrNode.nodeName));\n });\n replace(newElm, elm, true);\n }\n return newElm || elm;\n };\n var findCommonAncestor = function (a, b) {\n var ps = a, pe;\n while (ps) {\n pe = b;\n while (pe && ps !== pe) {\n pe = pe.parentNode;\n }\n if (ps === pe) {\n break;\n }\n ps = ps.parentNode;\n }\n if (!ps && a.ownerDocument) {\n return a.ownerDocument.documentElement;\n }\n return ps;\n };\n var toHex = function (rgbVal) {\n return styles.toHex(Tools.trim(rgbVal));\n };\n var isEmpty = function (node, elements) {\n var i, attributes, type, whitespace, walker, name, brCount = 0;\n node = node.firstChild;\n if (node) {\n walker = new TreeWalker(node, node.parentNode);\n elements = elements || (schema ? schema.getNonEmptyElements() : null);\n whitespace = schema ? schema.getWhiteSpaceElements() : {};\n do {\n type = node.nodeType;\n if (NodeType.isElement(node)) {\n var bogusVal = node.getAttribute('data-mce-bogus');\n if (bogusVal) {\n node = walker.next(bogusVal === 'all');\n continue;\n }\n name = node.nodeName.toLowerCase();\n if (elements && elements[name]) {\n if (name === 'br') {\n brCount++;\n node = walker.next();\n continue;\n }\n return false;\n }\n attributes = getAttribs(node);\n i = attributes.length;\n while (i--) {\n name = attributes[i].nodeName;\n if (name === 'name' || name === 'data-mce-bookmark') {\n return false;\n }\n }\n }\n if (type === 8) {\n return false;\n }\n if (type === 3 && !whiteSpaceRegExp$2.test(node.nodeValue)) {\n return false;\n }\n if (type === 3 && node.parentNode && whitespace[node.parentNode.nodeName] && whiteSpaceRegExp$2.test(node.nodeValue)) {\n return false;\n }\n node = walker.next();\n } while (node);\n }\n return brCount <= 1;\n };\n var createRng = function () {\n return doc.createRange();\n };\n var split = function (parentElm, splitElm, replacementElm) {\n var r = createRng(), bef, aft, pa;\n if (parentElm && splitElm) {\n r.setStart(parentElm.parentNode, findNodeIndex(parentElm));\n r.setEnd(splitElm.parentNode, findNodeIndex(splitElm));\n bef = r.extractContents();\n r = createRng();\n r.setStart(splitElm.parentNode, findNodeIndex(splitElm) + 1);\n r.setEnd(parentElm.parentNode, findNodeIndex(parentElm) + 1);\n aft = r.extractContents();\n pa = parentElm.parentNode;\n pa.insertBefore(TrimNode.trimNode(self, bef), parentElm);\n if (replacementElm) {\n pa.insertBefore(replacementElm, parentElm);\n } else {\n pa.insertBefore(splitElm, parentElm);\n }\n pa.insertBefore(TrimNode.trimNode(self, aft), parentElm);\n remove(parentElm);\n return replacementElm || splitElm;\n }\n };\n var bind = function (target, name, func, scope) {\n if (Tools.isArray(target)) {\n var i = target.length;\n while (i--) {\n target[i] = bind(target[i], name, func, scope);\n }\n return target;\n }\n if (settings.collect && (target === doc || target === win)) {\n boundEvents.push([\n target,\n name,\n func,\n scope\n ]);\n }\n return events.bind(target, name, func, scope || self);\n };\n var unbind = function (target, name, func) {\n var i;\n if (Tools.isArray(target)) {\n i = target.length;\n while (i--) {\n target[i] = unbind(target[i], name, func);\n }\n return target;\n }\n if (boundEvents && (target === doc || target === win)) {\n i = boundEvents.length;\n while (i--) {\n var item = boundEvents[i];\n if (target === item[0] && (!name || name === item[1]) && (!func || func === item[2])) {\n events.unbind(item[0], item[1], item[2]);\n }\n }\n }\n return events.unbind(target, name, func);\n };\n var fire = function (target, name, evt) {\n return events.fire(target, name, evt);\n };\n var getContentEditable = function (node) {\n if (node && NodeType.isElement(node)) {\n var contentEditable = node.getAttribute('data-mce-contenteditable');\n if (contentEditable && contentEditable !== 'inherit') {\n return contentEditable;\n }\n return node.contentEditable !== 'inherit' ? node.contentEditable : null;\n } else {\n return null;\n }\n };\n var getContentEditableParent = function (node) {\n var root = getRoot();\n var state = null;\n for (; node && node !== root; node = node.parentNode) {\n state = getContentEditable(node);\n if (state !== null) {\n break;\n }\n }\n return state;\n };\n var destroy = function () {\n if (boundEvents) {\n var i = boundEvents.length;\n while (i--) {\n var item = boundEvents[i];\n events.unbind(item[0], item[1], item[2]);\n }\n }\n if (Sizzle.setDocument) {\n Sizzle.setDocument();\n }\n };\n var isChildOf = function (node, parent) {\n while (node) {\n if (parent === node) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n };\n var dumpRng = function (r) {\n return 'startContainer: ' + r.startContainer.nodeName + ', startOffset: ' + r.startOffset + ', endContainer: ' + r.endContainer.nodeName + ', endOffset: ' + r.endOffset;\n };\n var self = {\n doc: doc,\n settings: settings,\n win: win,\n files: files,\n stdMode: stdMode,\n boxModel: boxModel,\n styleSheetLoader: styleSheetLoader,\n boundEvents: boundEvents,\n styles: styles,\n schema: schema,\n events: events,\n isBlock: isBlock,\n $: $,\n $$: $$,\n root: null,\n clone: clone,\n getRoot: getRoot,\n getViewPort: getViewPort,\n getRect: getRect,\n getSize: getSize,\n getParent: getParent,\n getParents: getParents,\n get: get,\n getNext: getNext,\n getPrev: getPrev,\n select: select,\n is: is,\n add: add,\n create: create,\n createHTML: createHTML,\n createFragment: createFragment,\n remove: remove,\n setStyle: setStyle,\n getStyle: getStyle,\n setStyles: setStyles,\n removeAllAttribs: removeAllAttribs,\n setAttrib: setAttrib,\n setAttribs: setAttribs,\n getAttrib: getAttrib,\n getPos: getPos,\n parseStyle: parseStyle,\n serializeStyle: serializeStyle,\n addStyle: addStyle,\n loadCSS: loadCSS,\n addClass: addClass,\n removeClass: removeClass,\n hasClass: hasClass,\n toggleClass: toggleClass,\n show: show,\n hide: hide,\n isHidden: isHidden,\n uniqueId: uniqueId,\n setHTML: setHTML,\n getOuterHTML: getOuterHTML,\n setOuterHTML: setOuterHTML,\n decode: decode,\n encode: encode,\n insertAfter: insertAfter,\n replace: replace,\n rename: rename,\n findCommonAncestor: findCommonAncestor,\n toHex: toHex,\n run: run,\n getAttribs: getAttribs,\n isEmpty: isEmpty,\n createRng: createRng,\n nodeIndex: findNodeIndex,\n split: split,\n bind: bind,\n unbind: unbind,\n fire: fire,\n getContentEditable: getContentEditable,\n getContentEditableParent: getContentEditableParent,\n destroy: destroy,\n isChildOf: isChildOf,\n dumpRng: dumpRng\n };\n attrHooks = setupAttrHooks(styles, settings, function () {\n return self;\n });\n return self;\n }\n (function (DOMUtils) {\n DOMUtils.DOM = DOMUtils(domGlobals.document);\n DOMUtils.nodeIndex = findNodeIndex;\n }(DOMUtils || (DOMUtils = {})));\n var DOMUtils$1 = DOMUtils;\n\n var DOM = DOMUtils$1.DOM;\n var each$6 = Tools.each, grep$2 = Tools.grep;\n var isFunction$1 = function (f) {\n return typeof f === 'function';\n };\n var ScriptLoader = function () {\n var QUEUED = 0;\n var LOADING = 1;\n var LOADED = 2;\n var FAILED = 3;\n var states = {};\n var queue = [];\n var scriptLoadedCallbacks = {};\n var queueLoadedCallbacks = [];\n var loading = 0;\n var loadScript = function (url, success, failure) {\n var dom = DOM;\n var elm, id;\n var done = function () {\n dom.remove(id);\n if (elm) {\n elm.onreadystatechange = elm.onload = elm = null;\n }\n success();\n };\n var error = function () {\n if (isFunction$1(failure)) {\n failure();\n } else {\n if (typeof console !== 'undefined' && console.log) {\n console.log('Failed to load script: ' + url);\n }\n }\n };\n id = dom.uniqueId();\n elm = domGlobals.document.createElement('script');\n elm.id = id;\n elm.type = 'text/javascript';\n elm.src = Tools._addCacheSuffix(url);\n elm.onload = done;\n elm.onerror = error;\n (domGlobals.document.getElementsByTagName('head')[0] || domGlobals.document.body).appendChild(elm);\n };\n this.isDone = function (url) {\n return states[url] === LOADED;\n };\n this.markDone = function (url) {\n states[url] = LOADED;\n };\n this.add = this.load = function (url, success, scope, failure) {\n var state = states[url];\n if (state === undefined) {\n queue.push(url);\n states[url] = QUEUED;\n }\n if (success) {\n if (!scriptLoadedCallbacks[url]) {\n scriptLoadedCallbacks[url] = [];\n }\n scriptLoadedCallbacks[url].push({\n success: success,\n failure: failure,\n scope: scope || this\n });\n }\n };\n this.remove = function (url) {\n delete states[url];\n delete scriptLoadedCallbacks[url];\n };\n this.loadQueue = function (success, scope, failure) {\n this.loadScripts(queue, success, scope, failure);\n };\n this.loadScripts = function (scripts, success, scope, failure) {\n var loadScripts;\n var failures = [];\n var execCallbacks = function (name, url) {\n each$6(scriptLoadedCallbacks[url], function (callback) {\n if (isFunction$1(callback[name])) {\n callback[name].call(callback.scope);\n }\n });\n scriptLoadedCallbacks[url] = undefined;\n };\n queueLoadedCallbacks.push({\n success: success,\n failure: failure,\n scope: scope || this\n });\n loadScripts = function () {\n var loadingScripts = grep$2(scripts);\n scripts.length = 0;\n each$6(loadingScripts, function (url) {\n if (states[url] === LOADED) {\n execCallbacks('success', url);\n return;\n }\n if (states[url] === FAILED) {\n execCallbacks('failure', url);\n return;\n }\n if (states[url] !== LOADING) {\n states[url] = LOADING;\n loading++;\n loadScript(url, function () {\n states[url] = LOADED;\n loading--;\n execCallbacks('success', url);\n loadScripts();\n }, function () {\n states[url] = FAILED;\n loading--;\n failures.push(url);\n execCallbacks('failure', url);\n loadScripts();\n });\n }\n });\n if (!loading) {\n var notifyCallbacks = queueLoadedCallbacks.slice(0);\n queueLoadedCallbacks.length = 0;\n each$6(notifyCallbacks, function (callback) {\n if (failures.length === 0) {\n if (isFunction$1(callback.success)) {\n callback.success.call(callback.scope);\n }\n } else {\n if (isFunction$1(callback.failure)) {\n callback.failure.call(callback.scope, failures);\n }\n }\n });\n }\n };\n loadScripts();\n };\n };\n ScriptLoader.ScriptLoader = new ScriptLoader();\n\n var each$7 = Tools.each;\n function AddOnManager() {\n var _this = this;\n var items = [];\n var urls = {};\n var lookup = {};\n var _listeners = [];\n var get = function (name) {\n if (lookup[name]) {\n return lookup[name].instance;\n }\n return undefined;\n };\n var dependencies = function (name) {\n var result;\n if (lookup[name]) {\n result = lookup[name].dependencies;\n }\n return result || [];\n };\n var requireLangPack = function (name, languages) {\n var language = AddOnManager.language;\n if (language && AddOnManager.languageLoad !== false) {\n if (languages) {\n languages = ',' + languages + ',';\n if (languages.indexOf(',' + language.substr(0, 2) + ',') !== -1) {\n language = language.substr(0, 2);\n } else if (languages.indexOf(',' + language + ',') === -1) {\n return;\n }\n }\n ScriptLoader.ScriptLoader.add(urls[name] + '/langs/' + language + '.js');\n }\n };\n var add = function (id, addOn, dependencies) {\n items.push(addOn);\n lookup[id] = {\n instance: addOn,\n dependencies: dependencies\n };\n var result = partition(_listeners, function (listener) {\n return listener.name === id;\n });\n _listeners = result.fail;\n each$7(result.pass, function (listener) {\n listener.callback();\n });\n return addOn;\n };\n var remove = function (name) {\n delete urls[name];\n delete lookup[name];\n };\n var createUrl = function (baseUrl, dep) {\n if (typeof dep === 'object') {\n return dep;\n }\n return typeof baseUrl === 'string' ? {\n prefix: '',\n resource: dep,\n suffix: ''\n } : {\n prefix: baseUrl.prefix,\n resource: dep,\n suffix: baseUrl.suffix\n };\n };\n var addComponents = function (pluginName, scripts) {\n var pluginUrl = _this.urls[pluginName];\n each$7(scripts, function (script) {\n ScriptLoader.ScriptLoader.add(pluginUrl + '/' + script);\n });\n };\n var loadDependencies = function (name, addOnUrl, success, scope) {\n var deps = dependencies(name);\n each$7(deps, function (dep) {\n var newUrl = createUrl(addOnUrl, dep);\n load(newUrl.resource, newUrl, undefined, undefined);\n });\n if (success) {\n if (scope) {\n success.call(scope);\n } else {\n success.call(ScriptLoader);\n }\n }\n };\n var load = function (name, addOnUrl, success, scope, failure) {\n if (urls[name]) {\n return;\n }\n var urlString = typeof addOnUrl === 'string' ? addOnUrl : addOnUrl.prefix + addOnUrl.resource + addOnUrl.suffix;\n if (urlString.indexOf('/') !== 0 && urlString.indexOf('://') === -1) {\n urlString = AddOnManager.baseURL + '/' + urlString;\n }\n urls[name] = urlString.substring(0, urlString.lastIndexOf('/'));\n if (lookup[name]) {\n loadDependencies(name, addOnUrl, success, scope);\n } else {\n ScriptLoader.ScriptLoader.add(urlString, function () {\n return loadDependencies(name, addOnUrl, success, scope);\n }, scope, failure);\n }\n };\n var waitFor = function (name, callback) {\n if (lookup.hasOwnProperty(name)) {\n callback();\n } else {\n _listeners.push({\n name: name,\n callback: callback\n });\n }\n };\n return {\n items: items,\n urls: urls,\n lookup: lookup,\n _listeners: _listeners,\n get: get,\n dependencies: dependencies,\n requireLangPack: requireLangPack,\n add: add,\n remove: remove,\n createUrl: createUrl,\n addComponents: addComponents,\n load: load,\n waitFor: waitFor\n };\n }\n (function (AddOnManager) {\n AddOnManager.PluginManager = AddOnManager();\n AddOnManager.ThemeManager = AddOnManager();\n }(AddOnManager || (AddOnManager = {})));\n\n var before = function (marker, element) {\n var parent$1 = parent(marker);\n parent$1.each(function (v) {\n v.dom().insertBefore(element.dom(), marker.dom());\n });\n };\n var after = function (marker, element) {\n var sibling = nextSibling(marker);\n sibling.fold(function () {\n var parent$1 = parent(marker);\n parent$1.each(function (v) {\n append(v, element);\n });\n }, function (v) {\n before(v, element);\n });\n };\n var prepend = function (parent, element) {\n var firstChild$1 = firstChild(parent);\n firstChild$1.fold(function () {\n append(parent, element);\n }, function (v) {\n parent.dom().insertBefore(element.dom(), v.dom());\n });\n };\n var append = function (parent, element) {\n parent.dom().appendChild(element.dom());\n };\n var wrap$1 = function (element, wrapper) {\n before(element, wrapper);\n append(wrapper, element);\n };\n\n var before$1 = function (marker, elements) {\n each(elements, function (x) {\n before(marker, x);\n });\n };\n var append$1 = function (parent, elements) {\n each(elements, function (x) {\n append(parent, x);\n });\n };\n\n var empty = function (element) {\n element.dom().textContent = '';\n each(children(element), function (rogue) {\n remove$1(rogue);\n });\n };\n var remove$1 = function (element) {\n var dom = element.dom();\n if (dom.parentNode !== null) {\n dom.parentNode.removeChild(dom);\n }\n };\n var unwrap = function (wrapper) {\n var children$1 = children(wrapper);\n if (children$1.length > 0) {\n before$1(wrapper, children$1);\n }\n remove$1(wrapper);\n };\n\n var first = function (fn, rate) {\n var timer = null;\n var cancel = function () {\n if (timer !== null) {\n domGlobals.clearTimeout(timer);\n timer = null;\n }\n };\n var throttle = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (timer === null) {\n timer = domGlobals.setTimeout(function () {\n fn.apply(null, args);\n timer = null;\n }, rate);\n }\n };\n return {\n cancel: cancel,\n throttle: throttle\n };\n };\n var last$2 = function (fn, rate) {\n var timer = null;\n var cancel = function () {\n if (timer !== null) {\n domGlobals.clearTimeout(timer);\n timer = null;\n }\n };\n var throttle = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (timer !== null) {\n domGlobals.clearTimeout(timer);\n }\n timer = domGlobals.setTimeout(function () {\n fn.apply(null, args);\n timer = null;\n }, rate);\n };\n return {\n cancel: cancel,\n throttle: throttle\n };\n };\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n var clone = function () {\n return Cell(get());\n };\n return {\n get: get,\n set: set,\n clone: clone\n };\n };\n\n var read = function (element, attr) {\n var value = get(element, attr);\n return value === undefined || value === '' ? [] : value.split(' ');\n };\n var add = function (element, attr, id) {\n var old = read(element, attr);\n var nu = old.concat([id]);\n set(element, attr, nu.join(' '));\n return true;\n };\n var remove$2 = function (element, attr, id) {\n var nu = filter(read(element, attr), function (v) {\n return v !== id;\n });\n if (nu.length > 0) {\n set(element, attr, nu.join(' '));\n } else {\n remove(element, attr);\n }\n return false;\n };\n\n var supports = function (element) {\n return element.dom().classList !== undefined;\n };\n var get$2 = function (element) {\n return read(element, 'class');\n };\n var add$1 = function (element, clazz) {\n return add(element, 'class', clazz);\n };\n var remove$3 = function (element, clazz) {\n return remove$2(element, 'class', clazz);\n };\n\n var add$2 = function (element, clazz) {\n if (supports(element)) {\n element.dom().classList.add(clazz);\n } else {\n add$1(element, clazz);\n }\n };\n var cleanClass = function (element) {\n var classList = supports(element) ? element.dom().classList : get$2(element);\n if (classList.length === 0) {\n remove(element, 'class');\n }\n };\n var remove$4 = function (element, clazz) {\n if (supports(element)) {\n var classList = element.dom().classList;\n classList.remove(clazz);\n } else {\n remove$3(element, clazz);\n }\n cleanClass(element);\n };\n var has$2 = function (element, clazz) {\n return supports(element) && element.dom().classList.contains(clazz);\n };\n\n var descendants = function (scope, predicate) {\n var result = [];\n each(children(scope), function (x) {\n if (predicate(x)) {\n result = result.concat([x]);\n }\n result = result.concat(descendants(x, predicate));\n });\n return result;\n };\n\n var descendants$1 = function (scope, selector) {\n return all(selector, scope);\n };\n\n function ClosestOrAncestor (is, ancestor, scope, a, isRoot) {\n return is(scope, a) ? Option.some(scope) : isFunction(isRoot) && isRoot(scope) ? Option.none() : ancestor(scope, a, isRoot);\n }\n\n var ancestor = function (scope, predicate, isRoot) {\n var element = scope.dom();\n var stop = isFunction(isRoot) ? isRoot : constant(false);\n while (element.parentNode) {\n element = element.parentNode;\n var el = Element.fromDom(element);\n if (predicate(el)) {\n return Option.some(el);\n } else if (stop(el)) {\n break;\n }\n }\n return Option.none();\n };\n var closest = function (scope, predicate, isRoot) {\n var is = function (s, test) {\n return test(s);\n };\n return ClosestOrAncestor(is, ancestor, scope, predicate, isRoot);\n };\n\n var ancestor$1 = function (scope, selector, isRoot) {\n return ancestor(scope, function (e) {\n return is$1(e, selector);\n }, isRoot);\n };\n var descendant = function (scope, selector) {\n return one(selector, scope);\n };\n var closest$1 = function (scope, selector, isRoot) {\n return ClosestOrAncestor(is$1, ancestor$1, scope, selector, isRoot);\n };\n\n var annotation = constant('mce-annotation');\n var dataAnnotation = constant('data-mce-annotation');\n var dataAnnotationId = constant('data-mce-annotation-uid');\n\n var identify = function (editor, annotationName) {\n var rng = editor.selection.getRng();\n var start = Element.fromDom(rng.startContainer);\n var root = Element.fromDom(editor.getBody());\n var selector = annotationName.fold(function () {\n return '.' + annotation();\n }, function (an) {\n return '[' + dataAnnotation() + '=\"' + an + '\"]';\n });\n var newStart = child(start, rng.startOffset).getOr(start);\n var closest = closest$1(newStart, selector, function (n) {\n return eq(n, root);\n });\n var getAttr = function (c, property) {\n if (has$1(c, property)) {\n return Option.some(get(c, property));\n } else {\n return Option.none();\n }\n };\n return closest.bind(function (c) {\n return getAttr(c, '' + dataAnnotationId()).bind(function (uid) {\n return getAttr(c, '' + dataAnnotation()).map(function (name) {\n var elements = findMarkers(editor, uid);\n return {\n uid: uid,\n name: name,\n elements: elements\n };\n });\n });\n });\n };\n var isAnnotation = function (elem) {\n return isElement(elem) && has$2(elem, annotation());\n };\n var findMarkers = function (editor, uid) {\n var body = Element.fromDom(editor.getBody());\n return descendants$1(body, '[' + dataAnnotationId() + '=\"' + uid + '\"]');\n };\n var findAll = function (editor, name) {\n var body = Element.fromDom(editor.getBody());\n var markers = descendants$1(body, '[' + dataAnnotation() + '=\"' + name + '\"]');\n var directory = {};\n each(markers, function (m) {\n var uid = get(m, dataAnnotationId());\n var nodesAlready = directory.hasOwnProperty(uid) ? directory[uid] : [];\n directory[uid] = nodesAlready.concat([m]);\n });\n return directory;\n };\n\n var setup = function (editor, registry) {\n var changeCallbacks = Cell({});\n var initData = function () {\n return {\n listeners: [],\n previous: Cell(Option.none())\n };\n };\n var withCallbacks = function (name, f) {\n updateCallbacks(name, function (data) {\n f(data);\n return data;\n });\n };\n var updateCallbacks = function (name, f) {\n var callbackMap = changeCallbacks.get();\n var data = callbackMap.hasOwnProperty(name) ? callbackMap[name] : initData();\n var outputData = f(data);\n callbackMap[name] = outputData;\n changeCallbacks.set(callbackMap);\n };\n var fireCallbacks = function (name, uid, elements) {\n withCallbacks(name, function (data) {\n each(data.listeners, function (f) {\n return f(true, name, {\n uid: uid,\n nodes: map(elements, function (elem) {\n return elem.dom();\n })\n });\n });\n });\n };\n var fireNoAnnotation = function (name) {\n withCallbacks(name, function (data) {\n each(data.listeners, function (f) {\n return f(false, name);\n });\n });\n };\n var onNodeChange = last$2(function () {\n var callbackMap = changeCallbacks.get();\n var annotations = sort(keys(callbackMap));\n each(annotations, function (name) {\n updateCallbacks(name, function (data) {\n var prev = data.previous.get();\n identify(editor, Option.some(name)).fold(function () {\n if (prev.isSome()) {\n fireNoAnnotation(name);\n data.previous.set(Option.none());\n }\n }, function (_a) {\n var uid = _a.uid, name = _a.name, elements = _a.elements;\n if (!prev.is(uid)) {\n fireCallbacks(name, uid, elements);\n data.previous.set(Option.some(uid));\n }\n });\n return {\n previous: data.previous,\n listeners: data.listeners\n };\n });\n });\n }, 30);\n editor.on('remove', function () {\n onNodeChange.cancel();\n });\n editor.on('nodeChange', function () {\n onNodeChange.throttle();\n });\n var addListener = function (name, f) {\n updateCallbacks(name, function (data) {\n return {\n previous: data.previous,\n listeners: data.listeners.concat([f])\n };\n });\n };\n return { addListener: addListener };\n };\n\n var setup$1 = function (editor, registry) {\n var identifyParserNode = function (span) {\n var optAnnotation = Option.from(span.attributes.map[dataAnnotation()]);\n return optAnnotation.bind(registry.lookup);\n };\n editor.on('init', function () {\n editor.serializer.addNodeFilter('span', function (spans) {\n each(spans, function (span) {\n identifyParserNode(span).each(function (settings) {\n if (settings.persistent === false) {\n span.unwrap();\n }\n });\n });\n });\n });\n };\n\n var create$1 = function () {\n var annotations = {};\n var register = function (name, settings) {\n annotations[name] = {\n name: name,\n settings: settings\n };\n };\n var lookup = function (name) {\n return annotations.hasOwnProperty(name) ? Option.from(annotations[name]).map(function (a) {\n return a.settings;\n }) : Option.none();\n };\n return {\n register: register,\n lookup: lookup\n };\n };\n\n var __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n };\n function __rest(s, e) {\n var t = {};\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === 'function')\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n }\n function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++)\n s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n }\n\n var unique = 0;\n var generate = function (prefix) {\n var date = new Date();\n var time = date.getTime();\n var random = Math.floor(Math.random() * 1000000000);\n unique++;\n return prefix + '_' + random + unique + String(time);\n };\n\n var add$3 = function (element, classes) {\n each(classes, function (x) {\n add$2(element, x);\n });\n };\n\n var clone = function (original, isDeep) {\n return Element.fromDom(original.dom().cloneNode(isDeep));\n };\n var shallow = function (original) {\n return clone(original, false);\n };\n var deep = function (original) {\n return clone(original, true);\n };\n\n var fromHtml$1 = function (html, scope) {\n var doc = scope || domGlobals.document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n return children(Element.fromDom(div));\n };\n\n var get$3 = function (element) {\n return element.dom().innerHTML;\n };\n var set$1 = function (element, content) {\n var owner$1 = owner(element);\n var docDom = owner$1.dom();\n var fragment = Element.fromDom(docDom.createDocumentFragment());\n var contentElements = fromHtml$1(content, docDom);\n append$1(fragment, contentElements);\n empty(element);\n append(element, fragment);\n };\n\n var ZWSP = '\\uFEFF';\n var isZwsp = function (chr) {\n return chr === ZWSP;\n };\n var trim$3 = function (text) {\n return text.replace(new RegExp(ZWSP, 'g'), '');\n };\n var Zwsp = {\n isZwsp: isZwsp,\n ZWSP: ZWSP,\n trim: trim$3\n };\n\n var isElement$2 = NodeType.isElement;\n var isText$2 = NodeType.isText;\n var isCaretContainerBlock = function (node) {\n if (isText$2(node)) {\n node = node.parentNode;\n }\n return isElement$2(node) && node.hasAttribute('data-mce-caret');\n };\n var isCaretContainerInline = function (node) {\n return isText$2(node) && Zwsp.isZwsp(node.data);\n };\n var isCaretContainer = function (node) {\n return isCaretContainerBlock(node) || isCaretContainerInline(node);\n };\n var hasContent = function (node) {\n return node.firstChild !== node.lastChild || !NodeType.isBr(node.firstChild);\n };\n var insertInline = function (node, before) {\n var doc, sibling, textNode, parentNode;\n doc = node.ownerDocument;\n textNode = doc.createTextNode(Zwsp.ZWSP);\n parentNode = node.parentNode;\n if (!before) {\n sibling = node.nextSibling;\n if (isText$2(sibling)) {\n if (isCaretContainer(sibling)) {\n return sibling;\n }\n if (startsWithCaretContainer(sibling)) {\n sibling.splitText(1);\n return sibling;\n }\n }\n if (node.nextSibling) {\n parentNode.insertBefore(textNode, node.nextSibling);\n } else {\n parentNode.appendChild(textNode);\n }\n } else {\n sibling = node.previousSibling;\n if (isText$2(sibling)) {\n if (isCaretContainer(sibling)) {\n return sibling;\n }\n if (endsWithCaretContainer(sibling)) {\n return sibling.splitText(sibling.data.length - 1);\n }\n }\n parentNode.insertBefore(textNode, node);\n }\n return textNode;\n };\n var isBeforeInline = function (pos) {\n var container = pos.container();\n if (!pos || !NodeType.isText(container)) {\n return false;\n }\n return container.data.charAt(pos.offset()) === Zwsp.ZWSP || pos.isAtStart() && isCaretContainerInline(container.previousSibling);\n };\n var isAfterInline = function (pos) {\n var container = pos.container();\n if (!pos || !NodeType.isText(container)) {\n return false;\n }\n return container.data.charAt(pos.offset() - 1) === Zwsp.ZWSP || pos.isAtEnd() && isCaretContainerInline(container.nextSibling);\n };\n var createBogusBr = function () {\n var br = domGlobals.document.createElement('br');\n br.setAttribute('data-mce-bogus', '1');\n return br;\n };\n var insertBlock = function (blockName, node, before) {\n var doc, blockNode, parentNode;\n doc = node.ownerDocument;\n blockNode = doc.createElement(blockName);\n blockNode.setAttribute('data-mce-caret', before ? 'before' : 'after');\n blockNode.setAttribute('data-mce-bogus', 'all');\n blockNode.appendChild(createBogusBr());\n parentNode = node.parentNode;\n if (!before) {\n if (node.nextSibling) {\n parentNode.insertBefore(blockNode, node.nextSibling);\n } else {\n parentNode.appendChild(blockNode);\n }\n } else {\n parentNode.insertBefore(blockNode, node);\n }\n return blockNode;\n };\n var startsWithCaretContainer = function (node) {\n return isText$2(node) && node.data[0] === Zwsp.ZWSP;\n };\n var endsWithCaretContainer = function (node) {\n return isText$2(node) && node.data[node.data.length - 1] === Zwsp.ZWSP;\n };\n var trimBogusBr = function (elm) {\n var brs = elm.getElementsByTagName('br');\n var lastBr = brs[brs.length - 1];\n if (NodeType.isBogus(lastBr)) {\n lastBr.parentNode.removeChild(lastBr);\n }\n };\n var showCaretContainerBlock = function (caretContainer) {\n if (caretContainer && caretContainer.hasAttribute('data-mce-caret')) {\n trimBogusBr(caretContainer);\n caretContainer.removeAttribute('data-mce-caret');\n caretContainer.removeAttribute('data-mce-bogus');\n caretContainer.removeAttribute('style');\n caretContainer.removeAttribute('_moz_abspos');\n return caretContainer;\n }\n return null;\n };\n var isRangeInCaretContainerBlock = function (range) {\n return isCaretContainerBlock(range.startContainer);\n };\n\n var isContentEditableTrue$1 = NodeType.isContentEditableTrue;\n var isContentEditableFalse$1 = NodeType.isContentEditableFalse;\n var isBr$2 = NodeType.isBr;\n var isText$3 = NodeType.isText;\n var isInvalidTextElement = NodeType.matchNodeNames('script style textarea');\n var isAtomicInline = NodeType.matchNodeNames('img input textarea hr iframe video audio object');\n var isTable$1 = NodeType.matchNodeNames('table');\n var isCaretContainer$1 = isCaretContainer;\n var isCaretCandidate = function (node) {\n if (isCaretContainer$1(node)) {\n return false;\n }\n if (isText$3(node)) {\n if (isInvalidTextElement(node.parentNode)) {\n return false;\n }\n return true;\n }\n return isAtomicInline(node) || isBr$2(node) || isTable$1(node) || isNonUiContentEditableFalse(node);\n };\n var isUnselectable = function (node) {\n return NodeType.isElement(node) && node.getAttribute('unselectable') === 'true';\n };\n var isNonUiContentEditableFalse = function (node) {\n return isUnselectable(node) === false && isContentEditableFalse$1(node);\n };\n var isInEditable = function (node, root) {\n for (node = node.parentNode; node && node !== root; node = node.parentNode) {\n if (isNonUiContentEditableFalse(node)) {\n return false;\n }\n if (isContentEditableTrue$1(node)) {\n return true;\n }\n }\n return true;\n };\n var isAtomicContentEditableFalse = function (node) {\n if (!isNonUiContentEditableFalse(node)) {\n return false;\n }\n return foldl(from$1(node.getElementsByTagName('*')), function (result, elm) {\n return result || isContentEditableTrue$1(elm);\n }, false) !== true;\n };\n var isAtomic = function (node) {\n return isAtomicInline(node) || isAtomicContentEditableFalse(node);\n };\n var isEditableCaretCandidate = function (node, root) {\n return isCaretCandidate(node) && isInEditable(node, root);\n };\n\n var round = Math.round;\n var clone$1 = function (rect) {\n if (!rect) {\n return {\n left: 0,\n top: 0,\n bottom: 0,\n right: 0,\n width: 0,\n height: 0\n };\n }\n return {\n left: round(rect.left),\n top: round(rect.top),\n bottom: round(rect.bottom),\n right: round(rect.right),\n width: round(rect.width),\n height: round(rect.height)\n };\n };\n var collapse = function (rect, toStart) {\n rect = clone$1(rect);\n if (toStart) {\n rect.right = rect.left;\n } else {\n rect.left = rect.left + rect.width;\n rect.right = rect.left;\n }\n rect.width = 0;\n return rect;\n };\n var isEqual = function (rect1, rect2) {\n return rect1.left === rect2.left && rect1.top === rect2.top && rect1.bottom === rect2.bottom && rect1.right === rect2.right;\n };\n var isValidOverflow = function (overflowY, rect1, rect2) {\n return overflowY >= 0 && overflowY <= Math.min(rect1.height, rect2.height) / 2;\n };\n var isAbove = function (rect1, rect2) {\n var halfHeight = Math.min(rect2.height / 2, rect1.height / 2);\n if (rect1.bottom - halfHeight < rect2.top) {\n return true;\n }\n if (rect1.top > rect2.bottom) {\n return false;\n }\n return isValidOverflow(rect2.top - rect1.bottom, rect1, rect2);\n };\n var isBelow = function (rect1, rect2) {\n if (rect1.top > rect2.bottom) {\n return true;\n }\n if (rect1.bottom < rect2.top) {\n return false;\n }\n return isValidOverflow(rect2.bottom - rect1.top, rect1, rect2);\n };\n var containsXY = function (rect, clientX, clientY) {\n return clientX >= rect.left && clientX <= rect.right && clientY >= rect.top && clientY <= rect.bottom;\n };\n var overflowX = function (outer, inner) {\n if (inner.left > outer.left && inner.right < outer.right) {\n return 0;\n } else {\n return inner.left < outer.left ? inner.left - outer.left : inner.right - outer.right;\n }\n };\n var overflowY = function (outer, inner) {\n if (inner.top > outer.top && inner.bottom < outer.bottom) {\n return 0;\n } else {\n return inner.top < outer.top ? inner.top - outer.top : inner.bottom - outer.bottom;\n }\n };\n var getOverflow = function (outer, inner) {\n return {\n x: overflowX(outer, inner),\n y: overflowY(outer, inner)\n };\n };\n\n var getSelectedNode = function (range) {\n var startContainer = range.startContainer, startOffset = range.startOffset;\n if (startContainer.hasChildNodes() && range.endOffset === startOffset + 1) {\n return startContainer.childNodes[startOffset];\n }\n return null;\n };\n var getNode = function (container, offset) {\n if (container.nodeType === 1 && container.hasChildNodes()) {\n if (offset >= container.childNodes.length) {\n offset = container.childNodes.length - 1;\n }\n container = container.childNodes[offset];\n }\n return container;\n };\n\n 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]');\n var isExtendingChar = function (ch) {\n return typeof ch === 'string' && ch.charCodeAt(0) >= 768 && extendingChars.test(ch);\n };\n\n var lift2 = function (oa, ob, f) {\n return oa.isSome() && ob.isSome() ? Option.some(f(oa.getOrDie(), ob.getOrDie())) : Option.none();\n };\n var lift3 = function (oa, ob, oc, f) {\n return oa.isSome() && ob.isSome() && oc.isSome() ? Option.some(f(oa.getOrDie(), ob.getOrDie(), oc.getOrDie())) : Option.none();\n };\n\n var slice$2 = [].slice;\n var or = function () {\n var x = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n x[_i] = arguments[_i];\n }\n var args = slice$2.call(arguments);\n return function (x) {\n for (var i = 0; i < args.length; i++) {\n if (args[i](x)) {\n return true;\n }\n }\n return false;\n };\n };\n var and = function () {\n var x = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n x[_i] = arguments[_i];\n }\n var args = slice$2.call(arguments);\n return function (x) {\n for (var i = 0; i < args.length; i++) {\n if (!args[i](x)) {\n return false;\n }\n }\n return true;\n };\n };\n var Predicate = {\n and: and,\n or: or\n };\n\n var isElement$3 = NodeType.isElement;\n var isCaretCandidate$1 = isCaretCandidate;\n var isBlock$1 = NodeType.matchStyleValues('display', 'block table');\n var isFloated = NodeType.matchStyleValues('float', 'left right');\n var isValidElementCaretCandidate = Predicate.and(isElement$3, isCaretCandidate$1, not(isFloated));\n var isNotPre = not(NodeType.matchStyleValues('white-space', 'pre pre-line pre-wrap'));\n var isText$4 = NodeType.isText;\n var isBr$3 = NodeType.isBr;\n var nodeIndex = DOMUtils$1.nodeIndex;\n var resolveIndex = getNode;\n var createRange = function (doc) {\n return 'createRange' in doc ? doc.createRange() : DOMUtils$1.DOM.createRng();\n };\n var isWhiteSpace = function (chr) {\n return chr && /[\\r\\n\\t ]/.test(chr);\n };\n var isRange = function (rng) {\n return !!rng.setStart && !!rng.setEnd;\n };\n var isHiddenWhiteSpaceRange = function (range) {\n var container = range.startContainer;\n var offset = range.startOffset;\n var text;\n if (isWhiteSpace(range.toString()) && isNotPre(container.parentNode) && NodeType.isText(container)) {\n text = container.data;\n if (isWhiteSpace(text[offset - 1]) || isWhiteSpace(text[offset + 1])) {\n return true;\n }\n }\n return false;\n };\n var getBrClientRect = function (brNode) {\n var doc = brNode.ownerDocument;\n var rng = createRange(doc);\n var nbsp = doc.createTextNode('\\xA0');\n var parentNode = brNode.parentNode;\n var clientRect;\n parentNode.insertBefore(nbsp, brNode);\n rng.setStart(nbsp, 0);\n rng.setEnd(nbsp, 1);\n clientRect = clone$1(rng.getBoundingClientRect());\n parentNode.removeChild(nbsp);\n return clientRect;\n };\n var getBoundingClientRectWebKitText = function (rng) {\n var sc = rng.startContainer;\n var ec = rng.endContainer;\n var so = rng.startOffset;\n var eo = rng.endOffset;\n if (sc === ec && NodeType.isText(ec) && so === 0 && eo === 1) {\n var newRng = rng.cloneRange();\n newRng.setEndAfter(ec);\n return getBoundingClientRect(newRng);\n } else {\n return null;\n }\n };\n var isZeroRect = function (r) {\n return r.left === 0 && r.right === 0 && r.top === 0 && r.bottom === 0;\n };\n var getBoundingClientRect = function (item) {\n var clientRect, clientRects;\n clientRects = item.getClientRects();\n if (clientRects.length > 0) {\n clientRect = clone$1(clientRects[0]);\n } else {\n clientRect = clone$1(item.getBoundingClientRect());\n }\n if (!isRange(item) && isBr$3(item) && isZeroRect(clientRect)) {\n return getBrClientRect(item);\n }\n if (isZeroRect(clientRect) && isRange(item)) {\n return getBoundingClientRectWebKitText(item);\n }\n return clientRect;\n };\n var collapseAndInflateWidth = function (clientRect, toStart) {\n var newClientRect = collapse(clientRect, toStart);\n newClientRect.width = 1;\n newClientRect.right = newClientRect.left + 1;\n return newClientRect;\n };\n var getCaretPositionClientRects = function (caretPosition) {\n var clientRects = [];\n var beforeNode, node;\n var addUniqueAndValidRect = function (clientRect) {\n if (clientRect.height === 0) {\n return;\n }\n if (clientRects.length > 0) {\n if (isEqual(clientRect, clientRects[clientRects.length - 1])) {\n return;\n }\n }\n clientRects.push(clientRect);\n };\n var addCharacterOffset = function (container, offset) {\n var range = createRange(container.ownerDocument);\n if (offset < container.data.length) {\n if (isExtendingChar(container.data[offset])) {\n return clientRects;\n }\n if (isExtendingChar(container.data[offset - 1])) {\n range.setStart(container, offset);\n range.setEnd(container, offset + 1);\n if (!isHiddenWhiteSpaceRange(range)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(range), false));\n return clientRects;\n }\n }\n }\n if (offset > 0) {\n range.setStart(container, offset - 1);\n range.setEnd(container, offset);\n if (!isHiddenWhiteSpaceRange(range)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(range), false));\n }\n }\n if (offset < container.data.length) {\n range.setStart(container, offset);\n range.setEnd(container, offset + 1);\n if (!isHiddenWhiteSpaceRange(range)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(range), true));\n }\n }\n };\n if (isText$4(caretPosition.container())) {\n addCharacterOffset(caretPosition.container(), caretPosition.offset());\n return clientRects;\n }\n if (isElement$3(caretPosition.container())) {\n if (caretPosition.isAtEnd()) {\n node = resolveIndex(caretPosition.container(), caretPosition.offset());\n if (isText$4(node)) {\n addCharacterOffset(node, node.data.length);\n }\n if (isValidElementCaretCandidate(node) && !isBr$3(node)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(node), false));\n }\n } else {\n node = resolveIndex(caretPosition.container(), caretPosition.offset());\n if (isText$4(node)) {\n addCharacterOffset(node, 0);\n }\n if (isValidElementCaretCandidate(node) && caretPosition.isAtEnd()) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(node), false));\n return clientRects;\n }\n beforeNode = resolveIndex(caretPosition.container(), caretPosition.offset() - 1);\n if (isValidElementCaretCandidate(beforeNode) && !isBr$3(beforeNode)) {\n if (isBlock$1(beforeNode) || isBlock$1(node) || !isValidElementCaretCandidate(node)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(beforeNode), false));\n }\n }\n if (isValidElementCaretCandidate(node)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(node), true));\n }\n }\n }\n return clientRects;\n };\n function CaretPosition(container, offset, clientRects) {\n var isAtStart = function () {\n if (isText$4(container)) {\n return offset === 0;\n }\n return offset === 0;\n };\n var isAtEnd = function () {\n if (isText$4(container)) {\n return offset >= container.data.length;\n }\n return offset >= container.childNodes.length;\n };\n var toRange = function () {\n var range;\n range = createRange(container.ownerDocument);\n range.setStart(container, offset);\n range.setEnd(container, offset);\n return range;\n };\n var getClientRects = function () {\n if (!clientRects) {\n clientRects = getCaretPositionClientRects(CaretPosition(container, offset));\n }\n return clientRects;\n };\n var isVisible = function () {\n return getClientRects().length > 0;\n };\n var isEqual = function (caretPosition) {\n return caretPosition && container === caretPosition.container() && offset === caretPosition.offset();\n };\n var getNode = function (before) {\n return resolveIndex(container, before ? offset - 1 : offset);\n };\n return {\n container: constant(container),\n offset: constant(offset),\n toRange: toRange,\n getClientRects: getClientRects,\n isVisible: isVisible,\n isAtStart: isAtStart,\n isAtEnd: isAtEnd,\n isEqual: isEqual,\n getNode: getNode\n };\n }\n (function (CaretPosition) {\n CaretPosition.fromRangeStart = function (range) {\n return CaretPosition(range.startContainer, range.startOffset);\n };\n CaretPosition.fromRangeEnd = function (range) {\n return CaretPosition(range.endContainer, range.endOffset);\n };\n CaretPosition.after = function (node) {\n return CaretPosition(node.parentNode, nodeIndex(node) + 1);\n };\n CaretPosition.before = function (node) {\n return CaretPosition(node.parentNode, nodeIndex(node));\n };\n CaretPosition.isAbove = function (pos1, pos2) {\n return lift2(head(pos2.getClientRects()), last(pos1.getClientRects()), isAbove).getOr(false);\n };\n CaretPosition.isBelow = function (pos1, pos2) {\n return lift2(last(pos2.getClientRects()), head(pos1.getClientRects()), isBelow).getOr(false);\n };\n CaretPosition.isAtStart = function (pos) {\n return pos ? pos.isAtStart() : false;\n };\n CaretPosition.isAtEnd = function (pos) {\n return pos ? pos.isAtEnd() : false;\n };\n CaretPosition.isTextPosition = function (pos) {\n return pos ? NodeType.isText(pos.container()) : false;\n };\n CaretPosition.isElementPosition = function (pos) {\n return CaretPosition.isTextPosition(pos) === false;\n };\n }(CaretPosition || (CaretPosition = {})));\n var CaretPosition$1 = CaretPosition;\n\n var isText$5 = NodeType.isText;\n var isBogus$1 = NodeType.isBogus;\n var nodeIndex$1 = DOMUtils$1.nodeIndex;\n var normalizedParent = function (node) {\n var parentNode = node.parentNode;\n if (isBogus$1(parentNode)) {\n return normalizedParent(parentNode);\n }\n return parentNode;\n };\n var getChildNodes = function (node) {\n if (!node) {\n return [];\n }\n return ArrUtils.reduce(node.childNodes, function (result, node) {\n if (isBogus$1(node) && node.nodeName !== 'BR') {\n result = result.concat(getChildNodes(node));\n } else {\n result.push(node);\n }\n return result;\n }, []);\n };\n var normalizedTextOffset = function (node, offset) {\n while (node = node.previousSibling) {\n if (!isText$5(node)) {\n break;\n }\n offset += node.data.length;\n }\n return offset;\n };\n var equal = function (a) {\n return function (b) {\n return a === b;\n };\n };\n var normalizedNodeIndex = function (node) {\n var nodes, index, numTextFragments;\n nodes = getChildNodes(normalizedParent(node));\n index = ArrUtils.findIndex(nodes, equal(node), node);\n nodes = nodes.slice(0, index + 1);\n numTextFragments = ArrUtils.reduce(nodes, function (result, node, i) {\n if (isText$5(node) && isText$5(nodes[i - 1])) {\n result++;\n }\n return result;\n }, 0);\n nodes = ArrUtils.filter(nodes, NodeType.matchNodeNames(node.nodeName));\n index = ArrUtils.findIndex(nodes, equal(node), node);\n return index - numTextFragments;\n };\n var createPathItem = function (node) {\n var name;\n if (isText$5(node)) {\n name = 'text()';\n } else {\n name = node.nodeName.toLowerCase();\n }\n return name + '[' + normalizedNodeIndex(node) + ']';\n };\n var parentsUntil = function (root, node, predicate) {\n var parents = [];\n for (node = node.parentNode; node !== root; node = node.parentNode) {\n if (predicate && predicate(node)) {\n break;\n }\n parents.push(node);\n }\n return parents;\n };\n var create$2 = function (root, caretPosition) {\n var container, offset, path = [], outputOffset, childNodes, parents;\n container = caretPosition.container();\n offset = caretPosition.offset();\n if (isText$5(container)) {\n outputOffset = normalizedTextOffset(container, offset);\n } else {\n childNodes = container.childNodes;\n if (offset >= childNodes.length) {\n outputOffset = 'after';\n offset = childNodes.length - 1;\n } else {\n outputOffset = 'before';\n }\n container = childNodes[offset];\n }\n path.push(createPathItem(container));\n parents = parentsUntil(root, container);\n parents = ArrUtils.filter(parents, not(NodeType.isBogus));\n path = path.concat(ArrUtils.map(parents, function (node) {\n return createPathItem(node);\n }));\n return path.reverse().join('/') + ',' + outputOffset;\n };\n var resolvePathItem = function (node, name, index) {\n var nodes = getChildNodes(node);\n nodes = ArrUtils.filter(nodes, function (node, index) {\n return !isText$5(node) || !isText$5(nodes[index - 1]);\n });\n nodes = ArrUtils.filter(nodes, NodeType.matchNodeNames(name));\n return nodes[index];\n };\n var findTextPosition = function (container, offset) {\n var node = container, targetOffset = 0, dataLen;\n while (isText$5(node)) {\n dataLen = node.data.length;\n if (offset >= targetOffset && offset <= targetOffset + dataLen) {\n container = node;\n offset = offset - targetOffset;\n break;\n }\n if (!isText$5(node.nextSibling)) {\n container = node;\n offset = dataLen;\n break;\n }\n targetOffset += dataLen;\n node = node.nextSibling;\n }\n if (isText$5(container) && offset > container.data.length) {\n offset = container.data.length;\n }\n return CaretPosition$1(container, offset);\n };\n var resolve$2 = function (root, path) {\n var parts, container, offset;\n if (!path) {\n return null;\n }\n parts = path.split(',');\n path = parts[0].split('/');\n offset = parts.length > 1 ? parts[1] : 'before';\n container = ArrUtils.reduce(path, function (result, value) {\n value = /([\\w\\-\\(\\)]+)\\[([0-9]+)\\]/.exec(value);\n if (!value) {\n return null;\n }\n if (value[1] === 'text()') {\n value[1] = '#text';\n }\n return resolvePathItem(result, value[1], parseInt(value[2], 10));\n }, root);\n if (!container) {\n return null;\n }\n if (!isText$5(container)) {\n if (offset === 'after') {\n offset = nodeIndex$1(container) + 1;\n } else {\n offset = nodeIndex$1(container);\n }\n return CaretPosition$1(container.parentNode, offset);\n }\n return findTextPosition(container, parseInt(offset, 10));\n };\n\n var trimEmptyTextNode = function (dom, node) {\n if (NodeType.isText(node) && node.data.length === 0) {\n dom.remove(node);\n }\n };\n var insertNode = function (dom, rng, node) {\n rng.insertNode(node);\n trimEmptyTextNode(dom, node.previousSibling);\n trimEmptyTextNode(dom, node.nextSibling);\n };\n var insertFragment = function (dom, rng, frag) {\n var firstChild = Option.from(frag.firstChild);\n var lastChild = Option.from(frag.lastChild);\n rng.insertNode(frag);\n firstChild.each(function (child) {\n return trimEmptyTextNode(dom, child.previousSibling);\n });\n lastChild.each(function (child) {\n return trimEmptyTextNode(dom, child.nextSibling);\n });\n };\n var rangeInsertNode = function (dom, rng, node) {\n if (NodeType.isDocumentFragment(node)) {\n insertFragment(dom, rng, node);\n } else {\n insertNode(dom, rng, node);\n }\n };\n\n var isContentEditableFalse$2 = NodeType.isContentEditableFalse;\n var getNormalizedTextOffset = function (trim, container, offset) {\n var node, trimmedOffset;\n trimmedOffset = trim(container.data.slice(0, offset)).length;\n for (node = container.previousSibling; node && NodeType.isText(node); node = node.previousSibling) {\n trimmedOffset += trim(node.data).length;\n }\n return trimmedOffset;\n };\n var getPoint = function (dom, trim, normalized, rng, start) {\n var container = rng[start ? 'startContainer' : 'endContainer'];\n var offset = rng[start ? 'startOffset' : 'endOffset'];\n var point = [];\n var childNodes, after = 0;\n var root = dom.getRoot();\n if (NodeType.isText(container)) {\n point.push(normalized ? getNormalizedTextOffset(trim, container, offset) : offset);\n } else {\n childNodes = container.childNodes;\n if (offset >= childNodes.length && childNodes.length) {\n after = 1;\n offset = Math.max(0, childNodes.length - 1);\n }\n point.push(dom.nodeIndex(childNodes[offset], normalized) + after);\n }\n for (; container && container !== root; container = container.parentNode) {\n point.push(dom.nodeIndex(container, normalized));\n }\n return point;\n };\n var getLocation = function (trim, selection, normalized, rng) {\n var dom = selection.dom, bookmark = {};\n bookmark.start = getPoint(dom, trim, normalized, rng, true);\n if (!selection.isCollapsed()) {\n bookmark.end = getPoint(dom, trim, normalized, rng, false);\n }\n return bookmark;\n };\n var findIndex$2 = function (dom, name, element) {\n var count = 0;\n Tools.each(dom.select(name), function (node) {\n if (node.getAttribute('data-mce-bogus') === 'all') {\n return;\n }\n if (node === element) {\n return false;\n }\n count++;\n });\n return count;\n };\n var moveEndPoint = function (rng, start) {\n var container, offset, childNodes;\n var prefix = start ? 'start' : 'end';\n container = rng[prefix + 'Container'];\n offset = rng[prefix + 'Offset'];\n if (NodeType.isElement(container) && container.nodeName === 'TR') {\n childNodes = container.childNodes;\n container = childNodes[Math.min(start ? offset : offset - 1, childNodes.length - 1)];\n if (container) {\n offset = start ? 0 : container.childNodes.length;\n rng['set' + (start ? 'Start' : 'End')](container, offset);\n }\n }\n };\n var normalizeTableCellSelection = function (rng) {\n moveEndPoint(rng, true);\n moveEndPoint(rng, false);\n return rng;\n };\n var findSibling = function (node, offset) {\n var sibling;\n if (NodeType.isElement(node)) {\n node = getNode(node, offset);\n if (isContentEditableFalse$2(node)) {\n return node;\n }\n }\n if (isCaretContainer(node)) {\n if (NodeType.isText(node) && isCaretContainerBlock(node)) {\n node = node.parentNode;\n }\n sibling = node.previousSibling;\n if (isContentEditableFalse$2(sibling)) {\n return sibling;\n }\n sibling = node.nextSibling;\n if (isContentEditableFalse$2(sibling)) {\n return sibling;\n }\n }\n };\n var findAdjacentContentEditableFalseElm = function (rng) {\n return findSibling(rng.startContainer, rng.startOffset) || findSibling(rng.endContainer, rng.endOffset);\n };\n var getOffsetBookmark = function (trim, normalized, selection) {\n var element = selection.getNode();\n var name = element ? element.nodeName : null;\n var rng = selection.getRng();\n if (isContentEditableFalse$2(element) || name === 'IMG') {\n return {\n name: name,\n index: findIndex$2(selection.dom, name, element)\n };\n }\n var sibling = findAdjacentContentEditableFalseElm(rng);\n if (sibling) {\n name = sibling.tagName;\n return {\n name: name,\n index: findIndex$2(selection.dom, name, sibling)\n };\n }\n return getLocation(trim, selection, normalized, rng);\n };\n var getCaretBookmark = function (selection) {\n var rng = selection.getRng();\n return {\n start: create$2(selection.dom.getRoot(), CaretPosition$1.fromRangeStart(rng)),\n end: create$2(selection.dom.getRoot(), CaretPosition$1.fromRangeEnd(rng))\n };\n };\n var getRangeBookmark = function (selection) {\n return { rng: selection.getRng() };\n };\n var createBookmarkSpan = function (dom, id, filled) {\n var args = {\n 'data-mce-type': 'bookmark',\n 'id': id,\n 'style': 'overflow:hidden;line-height:0px'\n };\n return filled ? dom.create('span', args, '') : dom.create('span', args);\n };\n var getPersistentBookmark = function (selection, filled) {\n var dom = selection.dom;\n var rng = selection.getRng();\n var id = dom.uniqueId();\n var collapsed = selection.isCollapsed();\n var element = selection.getNode();\n var name = element.nodeName;\n if (name === 'IMG') {\n return {\n name: name,\n index: findIndex$2(dom, name, element)\n };\n }\n var rng2 = normalizeTableCellSelection(rng.cloneRange());\n if (!collapsed) {\n rng2.collapse(false);\n var endBookmarkNode = createBookmarkSpan(dom, id + '_end', filled);\n rangeInsertNode(dom, rng2, endBookmarkNode);\n }\n rng = normalizeTableCellSelection(rng);\n rng.collapse(true);\n var startBookmarkNode = createBookmarkSpan(dom, id + '_start', filled);\n rangeInsertNode(dom, rng, startBookmarkNode);\n selection.moveToBookmark({\n id: id,\n keep: 1\n });\n return { id: id };\n };\n var getBookmark = function (selection, type, normalized) {\n if (type === 2) {\n return getOffsetBookmark(Zwsp.trim, normalized, selection);\n } else if (type === 3) {\n return getCaretBookmark(selection);\n } else if (type) {\n return getRangeBookmark(selection);\n } else {\n return getPersistentBookmark(selection, false);\n }\n };\n var GetBookmark = {\n getBookmark: getBookmark,\n getUndoBookmark: curry(getOffsetBookmark, identity, true),\n getPersistentBookmark: getPersistentBookmark\n };\n\n var CARET_ID = '_mce_caret';\n var isCaretNode = function (node) {\n return NodeType.isElement(node) && node.id === CARET_ID;\n };\n var getParentCaretContainer = function (body, node) {\n while (node && node !== body) {\n if (node.id === CARET_ID) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n };\n\n var isElement$4 = NodeType.isElement;\n var isText$6 = NodeType.isText;\n var removeNode = function (node) {\n var parentNode = node.parentNode;\n if (parentNode) {\n parentNode.removeChild(node);\n }\n };\n var getNodeValue = function (node) {\n try {\n return node.nodeValue;\n } catch (ex) {\n return '';\n }\n };\n var setNodeValue = function (node, text) {\n if (text.length === 0) {\n removeNode(node);\n } else {\n node.nodeValue = text;\n }\n };\n var trimCount = function (text) {\n var trimmedText = Zwsp.trim(text);\n return {\n count: text.length - trimmedText.length,\n text: trimmedText\n };\n };\n var removeUnchanged = function (caretContainer, pos) {\n remove$5(caretContainer);\n return pos;\n };\n var removeTextAndReposition = function (caretContainer, pos) {\n var before = trimCount(caretContainer.data.substr(0, pos.offset()));\n var after = trimCount(caretContainer.data.substr(pos.offset()));\n var text = before.text + after.text;\n if (text.length > 0) {\n setNodeValue(caretContainer, text);\n return CaretPosition$1(caretContainer, pos.offset() - before.count);\n } else {\n return pos;\n }\n };\n var removeElementAndReposition = function (caretContainer, pos) {\n var parentNode = pos.container();\n var newPosition = indexOf(from$1(parentNode.childNodes), caretContainer).map(function (index) {\n return index < pos.offset() ? CaretPosition$1(parentNode, pos.offset() - 1) : pos;\n }).getOr(pos);\n remove$5(caretContainer);\n return newPosition;\n };\n var removeTextCaretContainer = function (caretContainer, pos) {\n return isText$6(caretContainer) && pos.container() === caretContainer ? removeTextAndReposition(caretContainer, pos) : removeUnchanged(caretContainer, pos);\n };\n var removeElementCaretContainer = function (caretContainer, pos) {\n return pos.container() === caretContainer.parentNode ? removeElementAndReposition(caretContainer, pos) : removeUnchanged(caretContainer, pos);\n };\n var removeAndReposition = function (container, pos) {\n return CaretPosition$1.isTextPosition(pos) ? removeTextCaretContainer(container, pos) : removeElementCaretContainer(container, pos);\n };\n var remove$5 = function (caretContainerNode) {\n if (isElement$4(caretContainerNode) && isCaretContainer(caretContainerNode)) {\n if (hasContent(caretContainerNode)) {\n caretContainerNode.removeAttribute('data-mce-caret');\n } else {\n removeNode(caretContainerNode);\n }\n }\n if (isText$6(caretContainerNode)) {\n var text = Zwsp.trim(getNodeValue(caretContainerNode));\n setNodeValue(caretContainerNode, text);\n }\n };\n var CaretContainerRemove = {\n removeAndReposition: removeAndReposition,\n remove: remove$5\n };\n\n var browser$2 = PlatformDetection$1.detect().browser;\n var isContentEditableFalse$3 = NodeType.isContentEditableFalse;\n var isTableCell$1 = function (node) {\n return NodeType.isElement(node) && /^(TD|TH)$/i.test(node.tagName);\n };\n var getAbsoluteClientRect = function (root, element, before) {\n var clientRect = collapse(element.getBoundingClientRect(), before);\n var docElm, scrollX, scrollY, margin, rootRect;\n if (root.tagName === 'BODY') {\n docElm = root.ownerDocument.documentElement;\n scrollX = root.scrollLeft || docElm.scrollLeft;\n scrollY = root.scrollTop || docElm.scrollTop;\n } else {\n rootRect = root.getBoundingClientRect();\n scrollX = root.scrollLeft - rootRect.left;\n scrollY = root.scrollTop - rootRect.top;\n }\n clientRect.left += scrollX;\n clientRect.right += scrollX;\n clientRect.top += scrollY;\n clientRect.bottom += scrollY;\n clientRect.width = 1;\n margin = element.offsetWidth - element.clientWidth;\n if (margin > 0) {\n if (before) {\n margin *= -1;\n }\n clientRect.left += margin;\n clientRect.right += margin;\n }\n return clientRect;\n };\n var trimInlineCaretContainers = function (root) {\n var contentEditableFalseNodes, node, sibling, i, data;\n contentEditableFalseNodes = DomQuery('*[contentEditable=false]', root);\n for (i = 0; i < contentEditableFalseNodes.length; i++) {\n node = contentEditableFalseNodes[i];\n sibling = node.previousSibling;\n if (endsWithCaretContainer(sibling)) {\n data = sibling.data;\n if (data.length === 1) {\n sibling.parentNode.removeChild(sibling);\n } else {\n sibling.deleteData(data.length - 1, 1);\n }\n }\n sibling = node.nextSibling;\n if (startsWithCaretContainer(sibling)) {\n data = sibling.data;\n if (data.length === 1) {\n sibling.parentNode.removeChild(sibling);\n } else {\n sibling.deleteData(0, 1);\n }\n }\n }\n };\n var FakeCaret = function (root, isBlock, hasFocus) {\n var lastVisualCaret = Cell(Option.none());\n var cursorInterval, caretContainerNode;\n var show = function (before, element) {\n var clientRect, rng;\n hide();\n if (isTableCell$1(element)) {\n return null;\n }\n if (isBlock(element)) {\n caretContainerNode = insertBlock('p', element, before);\n clientRect = getAbsoluteClientRect(root, element, before);\n DomQuery(caretContainerNode).css('top', clientRect.top);\n var caret = DomQuery('
').css(clientRect).appendTo(root)[0];\n lastVisualCaret.set(Option.some({\n caret: caret,\n element: element,\n before: before\n }));\n lastVisualCaret.get().each(function (caretState) {\n if (before) {\n DomQuery(caretState.caret).addClass('mce-visual-caret-before');\n }\n });\n startBlink();\n rng = element.ownerDocument.createRange();\n rng.setStart(caretContainerNode, 0);\n rng.setEnd(caretContainerNode, 0);\n } else {\n caretContainerNode = insertInline(element, before);\n rng = element.ownerDocument.createRange();\n if (isContentEditableFalse$3(caretContainerNode.nextSibling)) {\n rng.setStart(caretContainerNode, 0);\n rng.setEnd(caretContainerNode, 0);\n } else {\n rng.setStart(caretContainerNode, 1);\n rng.setEnd(caretContainerNode, 1);\n }\n return rng;\n }\n return rng;\n };\n var hide = function () {\n trimInlineCaretContainers(root);\n if (caretContainerNode) {\n CaretContainerRemove.remove(caretContainerNode);\n caretContainerNode = null;\n }\n lastVisualCaret.get().each(function (caretState) {\n DomQuery(caretState.caret).remove();\n lastVisualCaret.set(Option.none());\n });\n clearInterval(cursorInterval);\n };\n var startBlink = function () {\n cursorInterval = Delay.setInterval(function () {\n if (hasFocus()) {\n DomQuery('div.mce-visual-caret', root).toggleClass('mce-visual-caret-hidden');\n } else {\n DomQuery('div.mce-visual-caret', root).addClass('mce-visual-caret-hidden');\n }\n }, 500);\n };\n var reposition = function () {\n lastVisualCaret.get().each(function (caretState) {\n var clientRect = getAbsoluteClientRect(root, caretState.element, caretState.before);\n DomQuery(caretState.caret).css(clientRect);\n });\n };\n var destroy = function () {\n return Delay.clearInterval(cursorInterval);\n };\n var getCss = function () {\n 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;' + '}';\n };\n return {\n show: show,\n hide: hide,\n getCss: getCss,\n reposition: reposition,\n destroy: destroy\n };\n };\n var isFakeCaretTableBrowser = function () {\n return browser$2.isIE() || browser$2.isEdge() || browser$2.isFirefox();\n };\n var isFakeCaretTarget = function (node) {\n return isContentEditableFalse$3(node) || NodeType.isTable(node) && isFakeCaretTableBrowser();\n };\n\n var isContentEditableFalse$4 = NodeType.isContentEditableFalse;\n var isBlockLike = NodeType.matchStyleValues('display', 'block table table-cell table-caption list-item');\n var isCaretContainer$2 = isCaretContainer;\n var isCaretContainerBlock$1 = isCaretContainerBlock;\n var isElement$5 = NodeType.isElement;\n var isCaretCandidate$2 = isCaretCandidate;\n var isForwards = function (direction) {\n return direction > 0;\n };\n var isBackwards = function (direction) {\n return direction < 0;\n };\n var skipCaretContainers = function (walk, shallow) {\n var node;\n while (node = walk(shallow)) {\n if (!isCaretContainerBlock$1(node)) {\n return node;\n }\n }\n return null;\n };\n var findNode = function (node, direction, predicateFn, rootNode, shallow) {\n var walker = new TreeWalker(node, rootNode);\n if (isBackwards(direction)) {\n if (isContentEditableFalse$4(node) || isCaretContainerBlock$1(node)) {\n node = skipCaretContainers(walker.prev, true);\n if (predicateFn(node)) {\n return node;\n }\n }\n while (node = skipCaretContainers(walker.prev, shallow)) {\n if (predicateFn(node)) {\n return node;\n }\n }\n }\n if (isForwards(direction)) {\n if (isContentEditableFalse$4(node) || isCaretContainerBlock$1(node)) {\n node = skipCaretContainers(walker.next, true);\n if (predicateFn(node)) {\n return node;\n }\n }\n while (node = skipCaretContainers(walker.next, shallow)) {\n if (predicateFn(node)) {\n return node;\n }\n }\n }\n return null;\n };\n var getParentBlock = function (node, rootNode) {\n while (node && node !== rootNode) {\n if (isBlockLike(node)) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n };\n var isInSameBlock = function (caretPosition1, caretPosition2, rootNode) {\n return getParentBlock(caretPosition1.container(), rootNode) === getParentBlock(caretPosition2.container(), rootNode);\n };\n var getChildNodeAtRelativeOffset = function (relativeOffset, caretPosition) {\n var container, offset;\n if (!caretPosition) {\n return null;\n }\n container = caretPosition.container();\n offset = caretPosition.offset();\n if (!isElement$5(container)) {\n return null;\n }\n return container.childNodes[offset + relativeOffset];\n };\n var beforeAfter = function (before, node) {\n var range = node.ownerDocument.createRange();\n if (before) {\n range.setStartBefore(node);\n range.setEndBefore(node);\n } else {\n range.setStartAfter(node);\n range.setEndAfter(node);\n }\n return range;\n };\n var isNodesInSameBlock = function (root, node1, node2) {\n return getParentBlock(node1, root) === getParentBlock(node2, root);\n };\n var lean = function (left, root, node) {\n var sibling, siblingName;\n if (left) {\n siblingName = 'previousSibling';\n } else {\n siblingName = 'nextSibling';\n }\n while (node && node !== root) {\n sibling = node[siblingName];\n if (isCaretContainer$2(sibling)) {\n sibling = sibling[siblingName];\n }\n if (isContentEditableFalse$4(sibling)) {\n if (isNodesInSameBlock(root, sibling, node)) {\n return sibling;\n }\n break;\n }\n if (isCaretCandidate$2(sibling)) {\n break;\n }\n node = node.parentNode;\n }\n return null;\n };\n var before$2 = curry(beforeAfter, true);\n var after$1 = curry(beforeAfter, false);\n var normalizeRange = function (direction, root, range) {\n var node, container, offset, location;\n var leanLeft = curry(lean, true, root);\n var leanRight = curry(lean, false, root);\n container = range.startContainer;\n offset = range.startOffset;\n if (isCaretContainerBlock(container)) {\n if (!isElement$5(container)) {\n container = container.parentNode;\n }\n location = container.getAttribute('data-mce-caret');\n if (location === 'before') {\n node = container.nextSibling;\n if (isFakeCaretTarget(node)) {\n return before$2(node);\n }\n }\n if (location === 'after') {\n node = container.previousSibling;\n if (isFakeCaretTarget(node)) {\n return after$1(node);\n }\n }\n }\n if (!range.collapsed) {\n return range;\n }\n if (NodeType.isText(container)) {\n if (isCaretContainer$2(container)) {\n if (direction === 1) {\n node = leanRight(container);\n if (node) {\n return before$2(node);\n }\n node = leanLeft(container);\n if (node) {\n return after$1(node);\n }\n }\n if (direction === -1) {\n node = leanLeft(container);\n if (node) {\n return after$1(node);\n }\n node = leanRight(container);\n if (node) {\n return before$2(node);\n }\n }\n return range;\n }\n if (endsWithCaretContainer(container) && offset >= container.data.length - 1) {\n if (direction === 1) {\n node = leanRight(container);\n if (node) {\n return before$2(node);\n }\n }\n return range;\n }\n if (startsWithCaretContainer(container) && offset <= 1) {\n if (direction === -1) {\n node = leanLeft(container);\n if (node) {\n return after$1(node);\n }\n }\n return range;\n }\n if (offset === container.data.length) {\n node = leanRight(container);\n if (node) {\n return before$2(node);\n }\n return range;\n }\n if (offset === 0) {\n node = leanLeft(container);\n if (node) {\n return after$1(node);\n }\n return range;\n }\n }\n return range;\n };\n var getRelativeCefElm = function (forward, caretPosition) {\n return Option.from(getChildNodeAtRelativeOffset(forward ? 0 : -1, caretPosition)).filter(isContentEditableFalse$4);\n };\n var getNormalizedRangeEndPoint = function (direction, root, range) {\n var normalizedRange = normalizeRange(direction, root, range);\n if (direction === -1) {\n return CaretPosition.fromRangeStart(normalizedRange);\n }\n return CaretPosition.fromRangeEnd(normalizedRange);\n };\n var getElementFromPosition = function (pos) {\n return Option.from(pos.getNode()).map(Element.fromDom);\n };\n var getElementFromPrevPosition = function (pos) {\n return Option.from(pos.getNode(true)).map(Element.fromDom);\n };\n var getVisualCaretPosition = function (walkFn, caretPosition) {\n while (caretPosition = walkFn(caretPosition)) {\n if (caretPosition.isVisible()) {\n return caretPosition;\n }\n }\n return caretPosition;\n };\n var isMoveInsideSameBlock = function (from, to) {\n var inSameBlock = isInSameBlock(from, to);\n if (!inSameBlock && NodeType.isBr(from.getNode())) {\n return true;\n }\n return inSameBlock;\n };\n\n var HDirection;\n (function (HDirection) {\n HDirection[HDirection['Backwards'] = -1] = 'Backwards';\n HDirection[HDirection['Forwards'] = 1] = 'Forwards';\n }(HDirection || (HDirection = {})));\n var isContentEditableFalse$5 = NodeType.isContentEditableFalse;\n var isText$7 = NodeType.isText;\n var isElement$6 = NodeType.isElement;\n var isBr$4 = NodeType.isBr;\n var isCaretCandidate$3 = isCaretCandidate;\n var isAtomic$1 = isAtomic;\n var isEditableCaretCandidate$1 = isEditableCaretCandidate;\n var getParents = function (node, root) {\n var parents = [];\n while (node && node !== root) {\n parents.push(node);\n node = node.parentNode;\n }\n return parents;\n };\n var nodeAtIndex = function (container, offset) {\n if (container.hasChildNodes() && offset < container.childNodes.length) {\n return container.childNodes[offset];\n }\n return null;\n };\n var getCaretCandidatePosition = function (direction, node) {\n if (isForwards(direction)) {\n if (isCaretCandidate$3(node.previousSibling) && !isText$7(node.previousSibling)) {\n return CaretPosition$1.before(node);\n }\n if (isText$7(node)) {\n return CaretPosition$1(node, 0);\n }\n }\n if (isBackwards(direction)) {\n if (isCaretCandidate$3(node.nextSibling) && !isText$7(node.nextSibling)) {\n return CaretPosition$1.after(node);\n }\n if (isText$7(node)) {\n return CaretPosition$1(node, node.data.length);\n }\n }\n if (isBackwards(direction)) {\n if (isBr$4(node)) {\n return CaretPosition$1.before(node);\n }\n return CaretPosition$1.after(node);\n }\n return CaretPosition$1.before(node);\n };\n var moveForwardFromBr = function (root, nextNode) {\n var nextSibling = nextNode.nextSibling;\n if (nextSibling && isCaretCandidate$3(nextSibling)) {\n if (isText$7(nextSibling)) {\n return CaretPosition$1(nextSibling, 0);\n } else {\n return CaretPosition$1.before(nextSibling);\n }\n } else {\n return findCaretPosition(HDirection.Forwards, CaretPosition$1.after(nextNode), root);\n }\n };\n var findCaretPosition = function (direction, startPos, root) {\n var node, nextNode, innerNode;\n var rootContentEditableFalseElm, caretPosition;\n if (!isElement$6(root) || !startPos) {\n return null;\n }\n if (startPos.isEqual(CaretPosition$1.after(root)) && root.lastChild) {\n caretPosition = CaretPosition$1.after(root.lastChild);\n if (isBackwards(direction) && isCaretCandidate$3(root.lastChild) && isElement$6(root.lastChild)) {\n return isBr$4(root.lastChild) ? CaretPosition$1.before(root.lastChild) : caretPosition;\n }\n } else {\n caretPosition = startPos;\n }\n var container = caretPosition.container();\n var offset = caretPosition.offset();\n if (isText$7(container)) {\n if (isBackwards(direction) && offset > 0) {\n return CaretPosition$1(container, --offset);\n }\n if (isForwards(direction) && offset < container.length) {\n return CaretPosition$1(container, ++offset);\n }\n node = container;\n } else {\n if (isBackwards(direction) && offset > 0) {\n nextNode = nodeAtIndex(container, offset - 1);\n if (isCaretCandidate$3(nextNode)) {\n if (!isAtomic$1(nextNode)) {\n innerNode = findNode(nextNode, direction, isEditableCaretCandidate$1, nextNode);\n if (innerNode) {\n if (isText$7(innerNode)) {\n return CaretPosition$1(innerNode, innerNode.data.length);\n }\n return CaretPosition$1.after(innerNode);\n }\n }\n if (isText$7(nextNode)) {\n return CaretPosition$1(nextNode, nextNode.data.length);\n }\n return CaretPosition$1.before(nextNode);\n }\n }\n if (isForwards(direction) && offset < container.childNodes.length) {\n nextNode = nodeAtIndex(container, offset);\n if (isCaretCandidate$3(nextNode)) {\n if (isBr$4(nextNode)) {\n return moveForwardFromBr(root, nextNode);\n }\n if (!isAtomic$1(nextNode)) {\n innerNode = findNode(nextNode, direction, isEditableCaretCandidate$1, nextNode);\n if (innerNode) {\n if (isText$7(innerNode)) {\n return CaretPosition$1(innerNode, 0);\n }\n return CaretPosition$1.before(innerNode);\n }\n }\n if (isText$7(nextNode)) {\n return CaretPosition$1(nextNode, 0);\n }\n return CaretPosition$1.after(nextNode);\n }\n }\n node = nextNode ? nextNode : caretPosition.getNode();\n }\n if (isForwards(direction) && caretPosition.isAtEnd() || isBackwards(direction) && caretPosition.isAtStart()) {\n node = findNode(node, direction, constant(true), root, true);\n if (isEditableCaretCandidate$1(node, root)) {\n return getCaretCandidatePosition(direction, node);\n }\n }\n nextNode = findNode(node, direction, isEditableCaretCandidate$1, root);\n rootContentEditableFalseElm = ArrUtils.last(filter(getParents(container, root), isContentEditableFalse$5));\n if (rootContentEditableFalseElm && (!nextNode || !rootContentEditableFalseElm.contains(nextNode))) {\n if (isForwards(direction)) {\n caretPosition = CaretPosition$1.after(rootContentEditableFalseElm);\n } else {\n caretPosition = CaretPosition$1.before(rootContentEditableFalseElm);\n }\n return caretPosition;\n }\n if (nextNode) {\n return getCaretCandidatePosition(direction, nextNode);\n }\n return null;\n };\n var CaretWalker = function (root) {\n return {\n next: function (caretPosition) {\n return findCaretPosition(HDirection.Forwards, caretPosition, root);\n },\n prev: function (caretPosition) {\n return findCaretPosition(HDirection.Backwards, caretPosition, root);\n }\n };\n };\n\n var walkToPositionIn = function (forward, root, start) {\n var position = forward ? CaretPosition$1.before(start) : CaretPosition$1.after(start);\n return fromPosition(forward, root, position);\n };\n var afterElement = function (node) {\n return NodeType.isBr(node) ? CaretPosition$1.before(node) : CaretPosition$1.after(node);\n };\n var isBeforeOrStart = function (position) {\n if (CaretPosition$1.isTextPosition(position)) {\n return position.offset() === 0;\n } else {\n return isCaretCandidate(position.getNode());\n }\n };\n var isAfterOrEnd = function (position) {\n if (CaretPosition$1.isTextPosition(position)) {\n var container = position.container();\n return position.offset() === container.data.length;\n } else {\n return isCaretCandidate(position.getNode(true));\n }\n };\n var isBeforeAfterSameElement = function (from, to) {\n return !CaretPosition$1.isTextPosition(from) && !CaretPosition$1.isTextPosition(to) && from.getNode() === to.getNode(true);\n };\n var isAtBr = function (position) {\n return !CaretPosition$1.isTextPosition(position) && NodeType.isBr(position.getNode());\n };\n var shouldSkipPosition = function (forward, from, to) {\n if (forward) {\n return !isBeforeAfterSameElement(from, to) && !isAtBr(from) && isAfterOrEnd(from) && isBeforeOrStart(to);\n } else {\n return !isBeforeAfterSameElement(to, from) && isBeforeOrStart(from) && isAfterOrEnd(to);\n }\n };\n var fromPosition = function (forward, root, pos) {\n var walker = CaretWalker(root);\n return Option.from(forward ? walker.next(pos) : walker.prev(pos));\n };\n var navigate = function (forward, root, from) {\n return fromPosition(forward, root, from).bind(function (to) {\n if (isInSameBlock(from, to, root) && shouldSkipPosition(forward, from, to)) {\n return fromPosition(forward, root, to);\n } else {\n return Option.some(to);\n }\n });\n };\n var navigateIgnore = function (forward, root, from, ignoreFilter) {\n return navigate(forward, root, from).bind(function (pos) {\n return ignoreFilter(pos) ? navigateIgnore(forward, root, pos, ignoreFilter) : Option.some(pos);\n });\n };\n var positionIn = function (forward, element) {\n var startNode = forward ? element.firstChild : element.lastChild;\n if (NodeType.isText(startNode)) {\n return Option.some(CaretPosition$1(startNode, forward ? 0 : startNode.data.length));\n } else if (startNode) {\n if (isCaretCandidate(startNode)) {\n return Option.some(forward ? CaretPosition$1.before(startNode) : afterElement(startNode));\n } else {\n return walkToPositionIn(forward, element, startNode);\n }\n } else {\n return Option.none();\n }\n };\n var nextPosition = curry(fromPosition, true);\n var prevPosition = curry(fromPosition, false);\n var CaretFinder = {\n fromPosition: fromPosition,\n nextPosition: nextPosition,\n prevPosition: prevPosition,\n navigate: navigate,\n navigateIgnore: navigateIgnore,\n positionIn: positionIn,\n firstPositionIn: curry(positionIn, true),\n lastPositionIn: curry(positionIn, false)\n };\n\n var isStringPathBookmark = function (bookmark) {\n return typeof bookmark.start === 'string';\n };\n var isRangeBookmark = function (bookmark) {\n return bookmark.hasOwnProperty('rng');\n };\n var isIdBookmark = function (bookmark) {\n return bookmark.hasOwnProperty('id');\n };\n var isIndexBookmark = function (bookmark) {\n return bookmark.hasOwnProperty('name');\n };\n var isPathBookmark = function (bookmark) {\n return Tools.isArray(bookmark.start);\n };\n\n var addBogus = function (dom, node) {\n if (NodeType.isElement(node) && dom.isBlock(node) && !node.innerHTML && !Env.ie) {\n node.innerHTML = '
';\n }\n return node;\n };\n var resolveCaretPositionBookmark = function (dom, bookmark) {\n var rng, pos;\n rng = dom.createRng();\n pos = resolve$2(dom.getRoot(), bookmark.start);\n rng.setStart(pos.container(), pos.offset());\n pos = resolve$2(dom.getRoot(), bookmark.end);\n rng.setEnd(pos.container(), pos.offset());\n return rng;\n };\n var insertZwsp = function (node, rng) {\n var textNode = node.ownerDocument.createTextNode(Zwsp.ZWSP);\n node.appendChild(textNode);\n rng.setStart(textNode, 0);\n rng.setEnd(textNode, 0);\n };\n var isEmpty = function (node) {\n return node.hasChildNodes() === false;\n };\n var tryFindRangePosition = function (node, rng) {\n return CaretFinder.lastPositionIn(node).fold(function () {\n return false;\n }, function (pos) {\n rng.setStart(pos.container(), pos.offset());\n rng.setEnd(pos.container(), pos.offset());\n return true;\n });\n };\n var padEmptyCaretContainer = function (root, node, rng) {\n if (isEmpty(node) && getParentCaretContainer(root, node)) {\n insertZwsp(node, rng);\n return true;\n } else {\n return false;\n }\n };\n var setEndPoint = function (dom, start, bookmark, rng) {\n var point = bookmark[start ? 'start' : 'end'];\n var i, node, offset, children;\n var root = dom.getRoot();\n if (point) {\n offset = point[0];\n for (node = root, i = point.length - 1; i >= 1; i--) {\n children = node.childNodes;\n if (padEmptyCaretContainer(root, node, rng)) {\n return true;\n }\n if (point[i] > children.length - 1) {\n if (padEmptyCaretContainer(root, node, rng)) {\n return true;\n }\n return tryFindRangePosition(node, rng);\n }\n node = children[point[i]];\n }\n if (node.nodeType === 3) {\n offset = Math.min(point[0], node.nodeValue.length);\n }\n if (node.nodeType === 1) {\n offset = Math.min(point[0], node.childNodes.length);\n }\n if (start) {\n rng.setStart(node, offset);\n } else {\n rng.setEnd(node, offset);\n }\n }\n return true;\n };\n var isValidTextNode = function (node) {\n return NodeType.isText(node) && node.data.length > 0;\n };\n var restoreEndPoint = function (dom, suffix, bookmark) {\n var marker = dom.get(bookmark.id + '_' + suffix), node, idx, next, prev;\n var keep = bookmark.keep;\n var container, offset;\n if (marker) {\n node = marker.parentNode;\n if (suffix === 'start') {\n if (!keep) {\n idx = dom.nodeIndex(marker);\n } else {\n if (marker.hasChildNodes()) {\n node = marker.firstChild;\n idx = 1;\n } else if (isValidTextNode(marker.nextSibling)) {\n node = marker.nextSibling;\n idx = 0;\n } else if (isValidTextNode(marker.previousSibling)) {\n node = marker.previousSibling;\n idx = marker.previousSibling.data.length;\n } else {\n node = marker.parentNode;\n idx = dom.nodeIndex(marker) + 1;\n }\n }\n container = node;\n offset = idx;\n } else {\n if (!keep) {\n idx = dom.nodeIndex(marker);\n } else {\n if (marker.hasChildNodes()) {\n node = marker.firstChild;\n idx = 1;\n } else if (isValidTextNode(marker.previousSibling)) {\n node = marker.previousSibling;\n idx = marker.previousSibling.data.length;\n } else {\n node = marker.parentNode;\n idx = dom.nodeIndex(marker);\n }\n }\n container = node;\n offset = idx;\n }\n if (!keep) {\n prev = marker.previousSibling;\n next = marker.nextSibling;\n Tools.each(Tools.grep(marker.childNodes), function (node) {\n if (NodeType.isText(node)) {\n node.nodeValue = node.nodeValue.replace(/\\uFEFF/g, '');\n }\n });\n while (marker = dom.get(bookmark.id + '_' + suffix)) {\n dom.remove(marker, true);\n }\n if (prev && next && prev.nodeType === next.nodeType && NodeType.isText(prev) && !Env.opera) {\n idx = prev.nodeValue.length;\n prev.appendData(next.nodeValue);\n dom.remove(next);\n if (suffix === 'start') {\n container = prev;\n offset = idx;\n } else {\n container = prev;\n offset = idx;\n }\n }\n }\n return Option.some(CaretPosition$1(container, offset));\n } else {\n return Option.none();\n }\n };\n var alt = function (o1, o2) {\n return o1.isSome() ? o1 : o2;\n };\n var resolvePaths = function (dom, bookmark) {\n var rng = dom.createRng();\n if (setEndPoint(dom, true, bookmark, rng) && setEndPoint(dom, false, bookmark, rng)) {\n return Option.some(rng);\n } else {\n return Option.none();\n }\n };\n var resolveId = function (dom, bookmark) {\n var startPos = restoreEndPoint(dom, 'start', bookmark);\n var endPos = restoreEndPoint(dom, 'end', bookmark);\n return lift2(startPos, alt(endPos, startPos), function (spos, epos) {\n var rng = dom.createRng();\n rng.setStart(addBogus(dom, spos.container()), spos.offset());\n rng.setEnd(addBogus(dom, epos.container()), epos.offset());\n return rng;\n });\n };\n var resolveIndex$1 = function (dom, bookmark) {\n return Option.from(dom.select(bookmark.name)[bookmark.index]).map(function (elm) {\n var rng = dom.createRng();\n rng.selectNode(elm);\n return rng;\n });\n };\n var resolve$3 = function (selection, bookmark) {\n var dom = selection.dom;\n if (bookmark) {\n if (isPathBookmark(bookmark)) {\n return resolvePaths(dom, bookmark);\n } else if (isStringPathBookmark(bookmark)) {\n return Option.some(resolveCaretPositionBookmark(dom, bookmark));\n } else if (isIdBookmark(bookmark)) {\n return resolveId(dom, bookmark);\n } else if (isIndexBookmark(bookmark)) {\n return resolveIndex$1(dom, bookmark);\n } else if (isRangeBookmark(bookmark)) {\n return Option.some(bookmark.rng);\n }\n }\n return Option.none();\n };\n var ResolveBookmark = { resolve: resolve$3 };\n\n var getBookmark$1 = function (selection, type, normalized) {\n return GetBookmark.getBookmark(selection, type, normalized);\n };\n var moveToBookmark = function (selection, bookmark) {\n ResolveBookmark.resolve(selection, bookmark).each(function (rng) {\n selection.setRng(rng);\n });\n };\n var isBookmarkNode$1 = function (node) {\n return NodeType.isElement(node) && node.tagName === 'SPAN' && node.getAttribute('data-mce-type') === 'bookmark';\n };\n var Bookmarks = {\n getBookmark: getBookmark$1,\n moveToBookmark: moveToBookmark,\n isBookmarkNode: isBookmarkNode$1\n };\n\n var isInlineBlock = function (node) {\n return node && /^(IMG)$/.test(node.nodeName);\n };\n var moveStart = function (dom, selection, rng) {\n var offset = rng.startOffset;\n var container = rng.startContainer, walker, node, nodes;\n if (rng.startContainer === rng.endContainer) {\n if (isInlineBlock(rng.startContainer.childNodes[rng.startOffset])) {\n return;\n }\n }\n if (container.nodeType === 1) {\n nodes = container.childNodes;\n if (offset < nodes.length) {\n container = nodes[offset];\n walker = new TreeWalker(container, dom.getParent(container, dom.isBlock));\n } else {\n container = nodes[nodes.length - 1];\n walker = new TreeWalker(container, dom.getParent(container, dom.isBlock));\n walker.next(true);\n }\n for (node = walker.current(); node; node = walker.next()) {\n if (node.nodeType === 3 && !isWhiteSpaceNode(node)) {\n rng.setStart(node, 0);\n selection.setRng(rng);\n return;\n }\n }\n }\n };\n var getNonWhiteSpaceSibling = function (node, next, inc) {\n if (node) {\n next = next ? 'nextSibling' : 'previousSibling';\n for (node = inc ? node : node[next]; node; node = node[next]) {\n if (node.nodeType === 1 || !isWhiteSpaceNode(node)) {\n return node;\n }\n }\n }\n };\n var isTextBlock$1 = function (editor, name) {\n if (name.nodeType) {\n name = name.nodeName;\n }\n return !!editor.schema.getTextBlockElements()[name.toLowerCase()];\n };\n var isValid = function (ed, parent, child) {\n return ed.schema.isValidChild(parent, child);\n };\n var isWhiteSpaceNode = function (node) {\n return node && node.nodeType === 3 && /^([\\t \\r\\n]+|)$/.test(node.nodeValue);\n };\n var replaceVars = function (value, vars) {\n if (typeof value !== 'string') {\n value = value(vars);\n } else if (vars) {\n value = value.replace(/%(\\w+)/g, function (str, name) {\n return vars[name] || str;\n });\n }\n return value;\n };\n var isEq = function (str1, str2) {\n str1 = str1 || '';\n str2 = str2 || '';\n str1 = '' + (str1.nodeName || str1);\n str2 = '' + (str2.nodeName || str2);\n return str1.toLowerCase() === str2.toLowerCase();\n };\n var normalizeStyleValue = function (dom, value, name) {\n if (name === 'color' || name === 'backgroundColor') {\n value = dom.toHex(value);\n }\n if (name === 'fontWeight' && value === 700) {\n value = 'bold';\n }\n if (name === 'fontFamily') {\n value = value.replace(/[\\'\\\"]/g, '').replace(/,\\s+/g, ',');\n }\n return '' + value;\n };\n var getStyle = function (dom, node, name) {\n return normalizeStyleValue(dom, dom.getStyle(node, name), name);\n };\n var getTextDecoration = function (dom, node) {\n var decoration;\n dom.getParent(node, function (n) {\n decoration = dom.getStyle(n, 'text-decoration');\n return decoration && decoration !== 'none';\n });\n return decoration;\n };\n var getParents$1 = function (dom, node, selector) {\n return dom.getParents(node, selector, dom.getRoot());\n };\n var FormatUtils = {\n isInlineBlock: isInlineBlock,\n moveStart: moveStart,\n getNonWhiteSpaceSibling: getNonWhiteSpaceSibling,\n isTextBlock: isTextBlock$1,\n isValid: isValid,\n isWhiteSpaceNode: isWhiteSpaceNode,\n replaceVars: replaceVars,\n isEq: isEq,\n normalizeStyleValue: normalizeStyleValue,\n getStyle: getStyle,\n getTextDecoration: getTextDecoration,\n getParents: getParents$1\n };\n\n var isBookmarkNode$2 = Bookmarks.isBookmarkNode;\n var getParents$2 = FormatUtils.getParents, isWhiteSpaceNode$1 = FormatUtils.isWhiteSpaceNode, isTextBlock$2 = FormatUtils.isTextBlock;\n var findLeaf = function (node, offset) {\n if (typeof offset === 'undefined') {\n offset = node.nodeType === 3 ? node.length : node.childNodes.length;\n }\n while (node && node.hasChildNodes()) {\n node = node.childNodes[offset];\n if (node) {\n offset = node.nodeType === 3 ? node.length : node.childNodes.length;\n }\n }\n return {\n node: node,\n offset: offset\n };\n };\n var excludeTrailingWhitespace = function (endContainer, endOffset) {\n var leaf = findLeaf(endContainer, endOffset);\n if (leaf.node) {\n while (leaf.node && leaf.offset === 0 && leaf.node.previousSibling) {\n leaf = findLeaf(leaf.node.previousSibling);\n }\n if (leaf.node && leaf.offset > 0 && leaf.node.nodeType === 3 && leaf.node.nodeValue.charAt(leaf.offset - 1) === ' ') {\n if (leaf.offset > 1) {\n endContainer = leaf.node;\n endContainer.splitText(leaf.offset - 1);\n }\n }\n }\n return endContainer;\n };\n var isBogusBr = function (node) {\n return node.nodeName === 'BR' && node.getAttribute('data-mce-bogus') && !node.nextSibling;\n };\n var findParentContentEditable = function (dom, node) {\n var parent = node;\n while (parent) {\n if (parent.nodeType === 1 && dom.getContentEditable(parent)) {\n return dom.getContentEditable(parent) === 'false' ? parent : node;\n }\n parent = parent.parentNode;\n }\n return node;\n };\n var findSpace = function (start, remove, node, offset) {\n var pos, pos2;\n var str = node.nodeValue;\n if (typeof offset === 'undefined') {\n offset = start ? str.length : 0;\n }\n if (start) {\n pos = str.lastIndexOf(' ', offset);\n pos2 = str.lastIndexOf('\\xA0', offset);\n pos = pos > pos2 ? pos : pos2;\n if (pos !== -1 && !remove && (pos < offset || !start) && pos <= str.length) {\n pos++;\n }\n } else {\n pos = str.indexOf(' ', offset);\n pos2 = str.indexOf('\\xA0', offset);\n pos = pos !== -1 && (pos2 === -1 || pos < pos2) ? pos : pos2;\n }\n return pos;\n };\n var findWordEndPoint = function (dom, body, container, offset, start, remove) {\n var walker, node, pos, lastTextNode;\n if (container.nodeType === 3) {\n pos = findSpace(start, remove, container, offset);\n if (pos !== -1) {\n return {\n container: container,\n offset: pos\n };\n }\n lastTextNode = container;\n }\n walker = new TreeWalker(container, dom.getParent(container, dom.isBlock) || body);\n while (node = walker[start ? 'prev' : 'next']()) {\n if (node.nodeType === 3 && !isBookmarkNode$2(node.parentNode)) {\n lastTextNode = node;\n pos = findSpace(start, remove, node);\n if (pos !== -1) {\n return {\n container: node,\n offset: pos\n };\n }\n } else if (dom.isBlock(node) || FormatUtils.isEq(node, 'BR')) {\n break;\n }\n }\n if (lastTextNode) {\n if (start) {\n offset = 0;\n } else {\n offset = lastTextNode.length;\n }\n return {\n container: lastTextNode,\n offset: offset\n };\n }\n };\n var findSelectorEndPoint = function (dom, format, rng, container, siblingName) {\n var parents, i, y, curFormat;\n if (container.nodeType === 3 && container.nodeValue.length === 0 && container[siblingName]) {\n container = container[siblingName];\n }\n parents = getParents$2(dom, container);\n for (i = 0; i < parents.length; i++) {\n for (y = 0; y < format.length; y++) {\n curFormat = format[y];\n if ('collapsed' in curFormat && curFormat.collapsed !== rng.collapsed) {\n continue;\n }\n if (dom.is(parents[i], curFormat.selector)) {\n return parents[i];\n }\n }\n }\n return container;\n };\n var findBlockEndPoint = function (editor, format, container, siblingName) {\n var node;\n var dom = editor.dom;\n var root = dom.getRoot();\n if (!format[0].wrapper) {\n node = dom.getParent(container, format[0].block, root);\n }\n if (!node) {\n var scopeRoot = dom.getParent(container, 'LI,TD,TH');\n node = dom.getParent(container.nodeType === 3 ? container.parentNode : container, function (node) {\n return node !== root && isTextBlock$2(editor, node);\n }, scopeRoot);\n }\n if (node && format[0].wrapper) {\n node = getParents$2(dom, node, 'ul,ol').reverse()[0] || node;\n }\n if (!node) {\n node = container;\n while (node[siblingName] && !dom.isBlock(node[siblingName])) {\n node = node[siblingName];\n if (FormatUtils.isEq(node, 'br')) {\n break;\n }\n }\n }\n return node || container;\n };\n var findParentContainer = function (dom, format, startContainer, startOffset, endContainer, endOffset, start) {\n var container, parent, sibling, siblingName, root;\n container = parent = start ? startContainer : endContainer;\n siblingName = start ? 'previousSibling' : 'nextSibling';\n root = dom.getRoot();\n if (container.nodeType === 3 && !isWhiteSpaceNode$1(container)) {\n if (start ? startOffset > 0 : endOffset < container.nodeValue.length) {\n return container;\n }\n }\n while (true) {\n if (!format[0].block_expand && dom.isBlock(parent)) {\n return parent;\n }\n for (sibling = parent[siblingName]; sibling; sibling = sibling[siblingName]) {\n if (!isBookmarkNode$2(sibling) && !isWhiteSpaceNode$1(sibling) && !isBogusBr(sibling)) {\n return parent;\n }\n }\n if (parent === root || parent.parentNode === root) {\n container = parent;\n break;\n }\n parent = parent.parentNode;\n }\n return container;\n };\n var expandRng = function (editor, rng, format, remove) {\n var endPoint, startContainer = rng.startContainer, startOffset = rng.startOffset, endContainer = rng.endContainer, endOffset = rng.endOffset;\n var dom = editor.dom;\n if (startContainer.nodeType === 1 && startContainer.hasChildNodes()) {\n startContainer = getNode(startContainer, startOffset);\n if (startContainer.nodeType === 3) {\n startOffset = 0;\n }\n }\n if (endContainer.nodeType === 1 && endContainer.hasChildNodes()) {\n endContainer = getNode(endContainer, rng.collapsed ? endOffset : endOffset - 1);\n if (endContainer.nodeType === 3) {\n endOffset = endContainer.nodeValue.length;\n }\n }\n startContainer = findParentContentEditable(dom, startContainer);\n endContainer = findParentContentEditable(dom, endContainer);\n if (isBookmarkNode$2(startContainer.parentNode) || isBookmarkNode$2(startContainer)) {\n startContainer = isBookmarkNode$2(startContainer) ? startContainer : startContainer.parentNode;\n if (rng.collapsed) {\n startContainer = startContainer.previousSibling || startContainer;\n } else {\n startContainer = startContainer.nextSibling || startContainer;\n }\n if (startContainer.nodeType === 3) {\n startOffset = rng.collapsed ? startContainer.length : 0;\n }\n }\n if (isBookmarkNode$2(endContainer.parentNode) || isBookmarkNode$2(endContainer)) {\n endContainer = isBookmarkNode$2(endContainer) ? endContainer : endContainer.parentNode;\n if (rng.collapsed) {\n endContainer = endContainer.nextSibling || endContainer;\n } else {\n endContainer = endContainer.previousSibling || endContainer;\n }\n if (endContainer.nodeType === 3) {\n endOffset = rng.collapsed ? 0 : endContainer.length;\n }\n }\n if (rng.collapsed) {\n endPoint = findWordEndPoint(dom, editor.getBody(), startContainer, startOffset, true, remove);\n if (endPoint) {\n startContainer = endPoint.container;\n startOffset = endPoint.offset;\n }\n endPoint = findWordEndPoint(dom, editor.getBody(), endContainer, endOffset, false, remove);\n if (endPoint) {\n endContainer = endPoint.container;\n endOffset = endPoint.offset;\n }\n }\n if (format[0].inline) {\n endContainer = remove ? endContainer : excludeTrailingWhitespace(endContainer, endOffset);\n }\n if (format[0].inline || format[0].block_expand) {\n if (!format[0].inline || (startContainer.nodeType !== 3 || startOffset === 0)) {\n startContainer = findParentContainer(dom, format, startContainer, startOffset, endContainer, endOffset, true);\n }\n if (!format[0].inline || (endContainer.nodeType !== 3 || endOffset === endContainer.nodeValue.length)) {\n endContainer = findParentContainer(dom, format, startContainer, startOffset, endContainer, endOffset, false);\n }\n }\n if (format[0].selector && format[0].expand !== false && !format[0].inline) {\n startContainer = findSelectorEndPoint(dom, format, rng, startContainer, 'previousSibling');\n endContainer = findSelectorEndPoint(dom, format, rng, endContainer, 'nextSibling');\n }\n if (format[0].block || format[0].selector) {\n startContainer = findBlockEndPoint(editor, format, startContainer, 'previousSibling');\n endContainer = findBlockEndPoint(editor, format, endContainer, 'nextSibling');\n if (format[0].block) {\n if (!dom.isBlock(startContainer)) {\n startContainer = findParentContainer(dom, format, startContainer, startOffset, endContainer, endOffset, true);\n }\n if (!dom.isBlock(endContainer)) {\n endContainer = findParentContainer(dom, format, startContainer, startOffset, endContainer, endOffset, false);\n }\n }\n }\n if (startContainer.nodeType === 1) {\n startOffset = dom.nodeIndex(startContainer);\n startContainer = startContainer.parentNode;\n }\n if (endContainer.nodeType === 1) {\n endOffset = dom.nodeIndex(endContainer) + 1;\n endContainer = endContainer.parentNode;\n }\n return {\n startContainer: startContainer,\n startOffset: startOffset,\n endContainer: endContainer,\n endOffset: endOffset\n };\n };\n var ExpandRange = { expandRng: expandRng };\n\n var each$8 = Tools.each;\n var getEndChild = function (container, index) {\n var childNodes = container.childNodes;\n index--;\n if (index > childNodes.length - 1) {\n index = childNodes.length - 1;\n } else if (index < 0) {\n index = 0;\n }\n return childNodes[index] || container;\n };\n var walk$1 = function (dom, rng, callback) {\n var startContainer = rng.startContainer;\n var startOffset = rng.startOffset;\n var endContainer = rng.endContainer;\n var endOffset = rng.endOffset;\n var ancestor;\n var startPoint;\n var endPoint;\n var node;\n var parent;\n var siblings;\n var nodes;\n nodes = dom.select('td[data-mce-selected],th[data-mce-selected]');\n if (nodes.length > 0) {\n each$8(nodes, function (node) {\n callback([node]);\n });\n return;\n }\n var exclude = function (nodes) {\n var node;\n node = nodes[0];\n if (node.nodeType === 3 && node === startContainer && startOffset >= node.nodeValue.length) {\n nodes.splice(0, 1);\n }\n node = nodes[nodes.length - 1];\n if (endOffset === 0 && nodes.length > 0 && node === endContainer && node.nodeType === 3) {\n nodes.splice(nodes.length - 1, 1);\n }\n return nodes;\n };\n var collectSiblings = function (node, name, endNode) {\n var siblings = [];\n for (; node && node !== endNode; node = node[name]) {\n siblings.push(node);\n }\n return siblings;\n };\n var findEndPoint = function (node, root) {\n do {\n if (node.parentNode === root) {\n return node;\n }\n node = node.parentNode;\n } while (node);\n };\n var walkBoundary = function (startNode, endNode, next) {\n var siblingName = next ? 'nextSibling' : 'previousSibling';\n for (node = startNode, parent = node.parentNode; node && node !== endNode; node = parent) {\n parent = node.parentNode;\n siblings = collectSiblings(node === startNode ? node : node[siblingName], siblingName);\n if (siblings.length) {\n if (!next) {\n siblings.reverse();\n }\n callback(exclude(siblings));\n }\n }\n };\n if (startContainer.nodeType === 1 && startContainer.hasChildNodes()) {\n startContainer = startContainer.childNodes[startOffset];\n }\n if (endContainer.nodeType === 1 && endContainer.hasChildNodes()) {\n endContainer = getEndChild(endContainer, endOffset);\n }\n if (startContainer === endContainer) {\n return callback(exclude([startContainer]));\n }\n ancestor = dom.findCommonAncestor(startContainer, endContainer);\n for (node = startContainer; node; node = node.parentNode) {\n if (node === endContainer) {\n return walkBoundary(startContainer, ancestor, true);\n }\n if (node === ancestor) {\n break;\n }\n }\n for (node = endContainer; node; node = node.parentNode) {\n if (node === startContainer) {\n return walkBoundary(endContainer, ancestor);\n }\n if (node === ancestor) {\n break;\n }\n }\n startPoint = findEndPoint(startContainer, ancestor) || startContainer;\n endPoint = findEndPoint(endContainer, ancestor) || endContainer;\n walkBoundary(startContainer, startPoint, true);\n siblings = collectSiblings(startPoint === startContainer ? startPoint : startPoint.nextSibling, 'nextSibling', endPoint === endContainer ? endPoint.nextSibling : endPoint);\n if (siblings.length) {\n callback(exclude(siblings));\n }\n walkBoundary(endContainer, endPoint);\n };\n var RangeWalk = { walk: walk$1 };\n\n var zeroWidth = function () {\n return '\\uFEFF';\n };\n\n function NodeValue (is, name) {\n var get = function (element) {\n if (!is(element)) {\n throw new Error('Can only get ' + name + ' value of a ' + name + ' node');\n }\n return getOption(element).getOr('');\n };\n var getOption = function (element) {\n return is(element) ? Option.from(element.dom().nodeValue) : Option.none();\n };\n var set = function (element, value) {\n if (!is(element)) {\n throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');\n }\n element.dom().nodeValue = value;\n };\n return {\n get: get,\n getOption: getOption,\n set: set\n };\n }\n\n var api = NodeValue(isText, 'text');\n var get$4 = function (element) {\n return api.get(element);\n };\n\n var isZeroWidth = function (elem) {\n return isText(elem) && get$4(elem) === zeroWidth();\n };\n var context = function (editor, elem, wrapName, nodeName) {\n return parent(elem).fold(function () {\n return 'skipping';\n }, function (parent) {\n if (nodeName === 'br' || isZeroWidth(elem)) {\n return 'valid';\n } else if (isAnnotation(elem)) {\n return 'existing';\n } else if (isCaretNode(elem)) {\n return 'caret';\n } else if (!FormatUtils.isValid(editor, wrapName, nodeName) || !FormatUtils.isValid(editor, name(parent), wrapName)) {\n return 'invalid-child';\n } else {\n return 'valid';\n }\n });\n };\n\n var shouldApplyToTrailingSpaces = function (rng) {\n return rng.startContainer.nodeType === 3 && rng.startContainer.nodeValue.length >= rng.startOffset && rng.startContainer.nodeValue[rng.startOffset] === '\\xA0';\n };\n var applyWordGrab = function (editor, rng) {\n var r = ExpandRange.expandRng(editor, rng, [{ inline: true }], shouldApplyToTrailingSpaces(rng));\n rng.setStart(r.startContainer, r.startOffset);\n rng.setEnd(r.endContainer, r.endOffset);\n editor.selection.setRng(rng);\n };\n var makeAnnotation = function (eDoc, _a, annotationName, decorate) {\n var _b = _a.uid, uid = _b === void 0 ? generate('mce-annotation') : _b, data = __rest(_a, ['uid']);\n var master = Element.fromTag('span', eDoc);\n add$2(master, annotation());\n set(master, '' + dataAnnotationId(), uid);\n set(master, '' + dataAnnotation(), annotationName);\n var _c = decorate(uid, data), _d = _c.attributes, attributes = _d === void 0 ? {} : _d, _e = _c.classes, classes = _e === void 0 ? [] : _e;\n setAll(master, attributes);\n add$3(master, classes);\n return master;\n };\n var annotate = function (editor, rng, annotationName, decorate, data) {\n var newWrappers = [];\n var master = makeAnnotation(editor.getDoc(), data, annotationName, decorate);\n var wrapper = Cell(Option.none());\n var finishWrapper = function () {\n wrapper.set(Option.none());\n };\n var getOrOpenWrapper = function () {\n return wrapper.get().getOrThunk(function () {\n var nu = shallow(master);\n newWrappers.push(nu);\n wrapper.set(Option.some(nu));\n return nu;\n });\n };\n var processElements = function (elems) {\n each(elems, processElement);\n };\n var processElement = function (elem) {\n var ctx = context(editor, elem, 'span', name(elem));\n switch (ctx) {\n case 'invalid-child': {\n finishWrapper();\n var children$1 = children(elem);\n processElements(children$1);\n finishWrapper();\n break;\n }\n case 'valid': {\n var w = getOrOpenWrapper();\n wrap$1(elem, w);\n break;\n }\n case 'skipping':\n case 'existing':\n case 'caret':\n }\n };\n var processNodes = function (nodes) {\n var elems = map(nodes, Element.fromDom);\n processElements(elems);\n };\n RangeWalk.walk(editor.dom, rng, function (nodes) {\n finishWrapper();\n processNodes(nodes);\n });\n return newWrappers;\n };\n var annotateWithBookmark = function (editor, name, settings, data) {\n editor.undoManager.transact(function () {\n var initialRng = editor.selection.getRng();\n if (initialRng.collapsed) {\n applyWordGrab(editor, initialRng);\n }\n if (editor.selection.getRng().collapsed) {\n var wrapper = makeAnnotation(editor.getDoc(), data, name, settings.decorate);\n set$1(wrapper, '\\xA0');\n editor.selection.getRng().insertNode(wrapper.dom());\n editor.selection.select(wrapper.dom());\n } else {\n var bookmark = GetBookmark.getPersistentBookmark(editor.selection, false);\n var rng = editor.selection.getRng();\n annotate(editor, rng, name, settings.decorate, data);\n editor.selection.moveToBookmark(bookmark);\n }\n });\n };\n\n function Annotator (editor) {\n var registry = create$1();\n setup$1(editor, registry);\n var changes = setup(editor);\n return {\n register: function (name, settings) {\n registry.register(name, settings);\n },\n annotate: function (name, data) {\n registry.lookup(name).each(function (settings) {\n annotateWithBookmark(editor, name, settings, data);\n });\n },\n annotationChanged: function (name, callback) {\n changes.addListener(name, callback);\n },\n remove: function (name) {\n identify(editor, Option.some(name)).each(function (_a) {\n var elements = _a.elements;\n each(elements, unwrap);\n });\n },\n getAll: function (name) {\n var directory = findAll(editor, name);\n return map$2(directory, function (elems) {\n return map(elems, function (elem) {\n return elem.dom();\n });\n });\n }\n };\n }\n\n var hasOnlyOneChild = function (node) {\n return node.firstChild && node.firstChild === node.lastChild;\n };\n var isPaddingNode = function (node) {\n return node.name === 'br' || node.value === '\\xA0';\n };\n var isPaddedEmptyBlock = function (schema, node) {\n var blockElements = schema.getBlockElements();\n return blockElements[node.name] && hasOnlyOneChild(node) && isPaddingNode(node.firstChild);\n };\n var isEmptyFragmentElement = function (schema, node) {\n var nonEmptyElements = schema.getNonEmptyElements();\n return node && (node.isEmpty(nonEmptyElements) || isPaddedEmptyBlock(schema, node));\n };\n var isListFragment = function (schema, fragment) {\n var firstChild = fragment.firstChild;\n var lastChild = fragment.lastChild;\n if (firstChild && firstChild.name === 'meta') {\n firstChild = firstChild.next;\n }\n if (lastChild && lastChild.attr('id') === 'mce_marker') {\n lastChild = lastChild.prev;\n }\n if (isEmptyFragmentElement(schema, lastChild)) {\n lastChild = lastChild.prev;\n }\n if (!firstChild || firstChild !== lastChild) {\n return false;\n }\n return firstChild.name === 'ul' || firstChild.name === 'ol';\n };\n var cleanupDomFragment = function (domFragment) {\n var firstChild = domFragment.firstChild;\n var lastChild = domFragment.lastChild;\n if (firstChild && firstChild.nodeName === 'META') {\n firstChild.parentNode.removeChild(firstChild);\n }\n if (lastChild && lastChild.id === 'mce_marker') {\n lastChild.parentNode.removeChild(lastChild);\n }\n return domFragment;\n };\n var toDomFragment = function (dom, serializer, fragment) {\n var html = serializer.serialize(fragment);\n var domFragment = dom.createFragment(html);\n return cleanupDomFragment(domFragment);\n };\n var listItems$1 = function (elm) {\n return Tools.grep(elm.childNodes, function (child) {\n return child.nodeName === 'LI';\n });\n };\n var isPadding = function (node) {\n return node.data === '\\xA0' || NodeType.isBr(node);\n };\n var isListItemPadded = function (node) {\n return node && node.firstChild && node.firstChild === node.lastChild && isPadding(node.firstChild);\n };\n var isEmptyOrPadded = function (elm) {\n return !elm.firstChild || isListItemPadded(elm);\n };\n var trimListItems = function (elms) {\n return elms.length > 0 && isEmptyOrPadded(elms[elms.length - 1]) ? elms.slice(0, -1) : elms;\n };\n var getParentLi = function (dom, node) {\n var parentBlock = dom.getParent(node, dom.isBlock);\n return parentBlock && parentBlock.nodeName === 'LI' ? parentBlock : null;\n };\n var isParentBlockLi = function (dom, node) {\n return !!getParentLi(dom, node);\n };\n var getSplit = function (parentNode, rng) {\n var beforeRng = rng.cloneRange();\n var afterRng = rng.cloneRange();\n beforeRng.setStartBefore(parentNode);\n afterRng.setEndAfter(parentNode);\n return [\n beforeRng.cloneContents(),\n afterRng.cloneContents()\n ];\n };\n var findFirstIn = function (node, rootNode) {\n var caretPos = CaretPosition$1.before(node);\n var caretWalker = CaretWalker(rootNode);\n var newCaretPos = caretWalker.next(caretPos);\n return newCaretPos ? newCaretPos.toRange() : null;\n };\n var findLastOf = function (node, rootNode) {\n var caretPos = CaretPosition$1.after(node);\n var caretWalker = CaretWalker(rootNode);\n var newCaretPos = caretWalker.prev(caretPos);\n return newCaretPos ? newCaretPos.toRange() : null;\n };\n var insertMiddle = function (target, elms, rootNode, rng) {\n var parts = getSplit(target, rng);\n var parentElm = target.parentNode;\n parentElm.insertBefore(parts[0], target);\n Tools.each(elms, function (li) {\n parentElm.insertBefore(li, target);\n });\n parentElm.insertBefore(parts[1], target);\n parentElm.removeChild(target);\n return findLastOf(elms[elms.length - 1], rootNode);\n };\n var insertBefore = function (target, elms, rootNode) {\n var parentElm = target.parentNode;\n Tools.each(elms, function (elm) {\n parentElm.insertBefore(elm, target);\n });\n return findFirstIn(target, rootNode);\n };\n var insertAfter = function (target, elms, rootNode, dom) {\n dom.insertAfter(elms.reverse(), target);\n return findLastOf(elms[0], rootNode);\n };\n var insertAtCaret = function (serializer, dom, rng, fragment) {\n var domFragment = toDomFragment(dom, serializer, fragment);\n var liTarget = getParentLi(dom, rng.startContainer);\n var liElms = trimListItems(listItems$1(domFragment.firstChild));\n var BEGINNING = 1, END = 2;\n var rootNode = dom.getRoot();\n var isAt = function (location) {\n var caretPos = CaretPosition$1.fromRangeStart(rng);\n var caretWalker = CaretWalker(dom.getRoot());\n var newPos = location === BEGINNING ? caretWalker.prev(caretPos) : caretWalker.next(caretPos);\n return newPos ? getParentLi(dom, newPos.getNode()) !== liTarget : true;\n };\n if (isAt(BEGINNING)) {\n return insertBefore(liTarget, liElms, rootNode);\n } else if (isAt(END)) {\n return insertAfter(liTarget, liElms, rootNode, dom);\n }\n return insertMiddle(liTarget, liElms, rootNode, rng);\n };\n var InsertList = {\n isListFragment: isListFragment,\n insertAtCaret: insertAtCaret,\n isParentBlockLi: isParentBlockLi,\n trimListItems: trimListItems,\n listItems: listItems$1\n };\n\n var each$9 = Tools.each;\n var ElementUtils = function (dom) {\n this.compare = function (node1, node2) {\n if (node1.nodeName !== node2.nodeName) {\n return false;\n }\n var getAttribs = function (node) {\n var attribs = {};\n each$9(dom.getAttribs(node), function (attr) {\n var name = attr.nodeName.toLowerCase();\n if (name.indexOf('_') !== 0 && name !== 'style' && name.indexOf('data-') !== 0) {\n attribs[name] = dom.getAttrib(node, name);\n }\n });\n return attribs;\n };\n var compareObjects = function (obj1, obj2) {\n var value, name;\n for (name in obj1) {\n if (obj1.hasOwnProperty(name)) {\n value = obj2[name];\n if (typeof value === 'undefined') {\n return false;\n }\n if (obj1[name] !== value) {\n return false;\n }\n delete obj2[name];\n }\n }\n for (name in obj2) {\n if (obj2.hasOwnProperty(name)) {\n return false;\n }\n }\n return true;\n };\n if (!compareObjects(getAttribs(node1), getAttribs(node2))) {\n return false;\n }\n if (!compareObjects(dom.parseStyle(dom.getAttrib(node1, 'style')), dom.parseStyle(dom.getAttrib(node2, 'style')))) {\n return false;\n }\n return !Bookmarks.isBookmarkNode(node1) && !Bookmarks.isBookmarkNode(node2);\n };\n };\n\n var getLastChildren = function (elm) {\n var children = [];\n var rawNode = elm.dom();\n while (rawNode) {\n children.push(Element.fromDom(rawNode));\n rawNode = rawNode.lastChild;\n }\n return children;\n };\n var removeTrailingBr = function (elm) {\n var allBrs = descendants$1(elm, 'br');\n var brs = filter(getLastChildren(elm).slice(-1), isBr);\n if (allBrs.length === brs.length) {\n each(brs, remove$1);\n }\n };\n var fillWithPaddingBr = function (elm) {\n empty(elm);\n append(elm, Element.fromHtml('
'));\n };\n var isPaddingContents = function (elm) {\n return isText(elm) ? get$4(elm) === '\\xA0' : isBr(elm);\n };\n var isPaddedElement = function (elm) {\n return filter(children(elm), isPaddingContents).length === 1;\n };\n var trimBlockTrailingBr = function (elm) {\n lastChild(elm).each(function (lastChild) {\n prevSibling(lastChild).each(function (lastChildPrevSibling) {\n if (isBlock(elm) && isBr(lastChild) && isBlock(lastChildPrevSibling)) {\n remove$1(lastChild);\n }\n });\n });\n };\n var PaddingBr = {\n removeTrailingBr: removeTrailingBr,\n fillWithPaddingBr: fillWithPaddingBr,\n isPaddedElement: isPaddedElement,\n trimBlockTrailingBr: trimBlockTrailingBr\n };\n\n var makeMap$3 = Tools.makeMap;\n function Writer (settings) {\n var html = [];\n var indent, indentBefore, indentAfter, encode, htmlOutput;\n settings = settings || {};\n indent = settings.indent;\n indentBefore = makeMap$3(settings.indent_before || '');\n indentAfter = makeMap$3(settings.indent_after || '');\n encode = Entities.getEncodeFunc(settings.entity_encoding || 'raw', settings.entities);\n htmlOutput = settings.element_format === 'html';\n return {\n start: function (name, attrs, empty) {\n var i, l, attr, value;\n if (indent && indentBefore[name] && html.length > 0) {\n value = html[html.length - 1];\n if (value.length > 0 && value !== '\\n') {\n html.push('\\n');\n }\n }\n html.push('<', name);\n if (attrs) {\n for (i = 0, l = attrs.length; i < l; i++) {\n attr = attrs[i];\n html.push(' ', attr.name, '=\"', encode(attr.value, true), '\"');\n }\n }\n if (!empty || htmlOutput) {\n html[html.length] = '>';\n } else {\n html[html.length] = ' />';\n }\n if (empty && indent && indentAfter[name] && html.length > 0) {\n value = html[html.length - 1];\n if (value.length > 0 && value !== '\\n') {\n html.push('\\n');\n }\n }\n },\n end: function (name) {\n var value;\n html.push('');\n if (indent && indentAfter[name] && html.length > 0) {\n value = html[html.length - 1];\n if (value.length > 0 && value !== '\\n') {\n html.push('\\n');\n }\n }\n },\n text: function (text, raw) {\n if (text.length > 0) {\n html[html.length] = raw ? text : encode(text);\n }\n },\n cdata: function (text) {\n html.push('');\n },\n comment: function (text) {\n html.push('');\n },\n pi: function (name, text) {\n if (text) {\n html.push('');\n } else {\n html.push('');\n }\n if (indent) {\n html.push('\\n');\n }\n },\n doctype: function (text) {\n html.push('', indent ? '\\n' : '');\n },\n reset: function () {\n html.length = 0;\n },\n getContent: function () {\n return html.join('').replace(/\\n$/, '');\n }\n };\n }\n\n function HtmlSerializer (settings, schema) {\n if (schema === void 0) {\n schema = Schema();\n }\n var writer = Writer(settings);\n settings = settings || {};\n settings.validate = 'validate' in settings ? settings.validate : true;\n var serialize = function (node) {\n var handlers, validate;\n validate = settings.validate;\n handlers = {\n 3: function (node) {\n writer.text(node.value, node.raw);\n },\n 8: function (node) {\n writer.comment(node.value);\n },\n 7: function (node) {\n writer.pi(node.name, node.value);\n },\n 10: function (node) {\n writer.doctype(node.value);\n },\n 4: function (node) {\n writer.cdata(node.value);\n },\n 11: function (node) {\n if (node = node.firstChild) {\n do {\n walk(node);\n } while (node = node.next);\n }\n }\n };\n writer.reset();\n var walk = function (node) {\n var handler = handlers[node.type];\n var name, isEmpty, attrs, attrName, attrValue, sortedAttrs, i, l, elementRule;\n if (!handler) {\n name = node.name;\n isEmpty = node.shortEnded;\n attrs = node.attributes;\n if (validate && attrs && attrs.length > 1) {\n sortedAttrs = [];\n sortedAttrs.map = {};\n elementRule = schema.getElementRule(node.name);\n if (elementRule) {\n for (i = 0, l = elementRule.attributesOrder.length; i < l; i++) {\n attrName = elementRule.attributesOrder[i];\n if (attrName in attrs.map) {\n attrValue = attrs.map[attrName];\n sortedAttrs.map[attrName] = attrValue;\n sortedAttrs.push({\n name: attrName,\n value: attrValue\n });\n }\n }\n for (i = 0, l = attrs.length; i < l; i++) {\n attrName = attrs[i].name;\n if (!(attrName in sortedAttrs.map)) {\n attrValue = attrs.map[attrName];\n sortedAttrs.map[attrName] = attrValue;\n sortedAttrs.push({\n name: attrName,\n value: attrValue\n });\n }\n }\n attrs = sortedAttrs;\n }\n }\n writer.start(node.name, attrs, isEmpty);\n if (!isEmpty) {\n if (node = node.firstChild) {\n do {\n walk(node);\n } while (node = node.next);\n }\n writer.end(name);\n }\n } else {\n handler(node);\n }\n };\n if (node.type === 1 && !settings.inner) {\n walk(node);\n } else {\n handlers[11](node);\n }\n return writer.getContent();\n };\n return { serialize: serialize };\n }\n\n var createRange$1 = function (sc, so, ec, eo) {\n var rng = domGlobals.document.createRange();\n rng.setStart(sc, so);\n rng.setEnd(ec, eo);\n return rng;\n };\n var normalizeBlockSelectionRange = function (rng) {\n var startPos = CaretPosition$1.fromRangeStart(rng);\n var endPos = CaretPosition$1.fromRangeEnd(rng);\n var rootNode = rng.commonAncestorContainer;\n return CaretFinder.fromPosition(false, rootNode, endPos).map(function (newEndPos) {\n if (!isInSameBlock(startPos, endPos, rootNode) && isInSameBlock(startPos, newEndPos, rootNode)) {\n return createRange$1(startPos.container(), startPos.offset(), newEndPos.container(), newEndPos.offset());\n } else {\n return rng;\n }\n }).getOr(rng);\n };\n var normalize = function (rng) {\n return rng.collapsed ? rng : normalizeBlockSelectionRange(rng);\n };\n var RangeNormalizer = { normalize: normalize };\n\n var isAfterNbsp = function (container, offset) {\n return NodeType.isText(container) && container.nodeValue[offset - 1] === '\\xA0';\n };\n var trimOrPadLeftRight = function (rng, html) {\n var container, offset;\n container = rng.startContainer;\n offset = rng.startOffset;\n var hasSiblingText = function (siblingName) {\n return container[siblingName] && container[siblingName].nodeType === 3;\n };\n if (container.nodeType === 3) {\n if (offset > 0) {\n html = html.replace(/^ /, ' ');\n } else if (!hasSiblingText('previousSibling')) {\n html = html.replace(/^ /, ' ');\n }\n if (offset < container.length) {\n html = html.replace(/ (
|)$/, ' ');\n } else if (!hasSiblingText('nextSibling')) {\n html = html.replace(/( | )(
|)$/, ' ');\n }\n }\n return html;\n };\n var trimNbspAfterDeleteAndPadValue = function (rng, value) {\n var container, offset;\n container = rng.startContainer;\n offset = rng.startOffset;\n if (container.nodeType === 3 && rng.collapsed) {\n if (container.data[offset] === '\\xA0') {\n container.deleteData(offset, 1);\n if (!/[\\u00a0| ]$/.test(value)) {\n value += ' ';\n }\n } else if (container.data[offset - 1] === '\\xA0') {\n container.deleteData(offset - 1, 1);\n if (!/[\\u00a0| ]$/.test(value)) {\n value = ' ' + value;\n }\n }\n }\n return value;\n };\n\n var isTableCell$2 = NodeType.matchNodeNames('td th');\n var selectionSetContent = function (editor, content) {\n var rng = editor.selection.getRng();\n var container = rng.startContainer;\n var offset = rng.startOffset;\n if (rng.collapsed && isAfterNbsp(container, offset) && NodeType.isText(container)) {\n container.insertData(offset - 1, ' ');\n container.deleteData(offset, 1);\n rng.setStart(container, offset);\n rng.setEnd(container, offset);\n editor.selection.setRng(rng);\n }\n editor.selection.setContent(content);\n };\n var validInsertion = function (editor, value, parentNode) {\n if (parentNode.getAttribute('data-mce-bogus') === 'all') {\n parentNode.parentNode.insertBefore(editor.dom.createFragment(value), parentNode);\n } else {\n var node = parentNode.firstChild;\n var node2 = parentNode.lastChild;\n if (!node || node === node2 && node.nodeName === 'BR') {\n editor.dom.setHTML(parentNode, value);\n } else {\n selectionSetContent(editor, value);\n }\n }\n };\n var trimBrsFromTableCell = function (dom, elm) {\n Option.from(dom.getParent(elm, 'td,th')).map(Element.fromDom).each(PaddingBr.trimBlockTrailingBr);\n };\n var reduceInlineTextElements = function (editor, merge) {\n var textInlineElements = editor.schema.getTextInlineElements();\n var dom = editor.dom;\n if (merge) {\n var root_1 = editor.getBody(), elementUtils_1 = new ElementUtils(dom);\n Tools.each(dom.select('*[data-mce-fragment]'), function (node) {\n for (var testNode = node.parentNode; testNode && testNode !== root_1; testNode = testNode.parentNode) {\n if (textInlineElements[node.nodeName.toLowerCase()] && elementUtils_1.compare(testNode, node)) {\n dom.remove(node, true);\n }\n }\n });\n }\n };\n var markFragmentElements = function (fragment) {\n var node = fragment;\n while (node = node.walk()) {\n if (node.type === 1) {\n node.attr('data-mce-fragment', '1');\n }\n }\n };\n var umarkFragmentElements = function (elm) {\n Tools.each(elm.getElementsByTagName('*'), function (elm) {\n elm.removeAttribute('data-mce-fragment');\n });\n };\n var isPartOfFragment = function (node) {\n return !!node.getAttribute('data-mce-fragment');\n };\n var canHaveChildren = function (editor, node) {\n return node && !editor.schema.getShortEndedElements()[node.nodeName];\n };\n var moveSelectionToMarker = function (editor, marker) {\n var parentEditableFalseElm, parentBlock, nextRng;\n var dom = editor.dom, selection = editor.selection;\n var node, node2;\n var getContentEditableFalseParent = function (node) {\n var root = editor.getBody();\n for (; node && node !== root; node = node.parentNode) {\n if (editor.dom.getContentEditable(node) === 'false') {\n return node;\n }\n }\n return null;\n };\n if (!marker) {\n return;\n }\n editor.selection.scrollIntoView(marker);\n parentEditableFalseElm = getContentEditableFalseParent(marker);\n if (parentEditableFalseElm) {\n dom.remove(marker);\n selection.select(parentEditableFalseElm);\n return;\n }\n var rng = dom.createRng();\n node = marker.previousSibling;\n if (node && node.nodeType === 3) {\n rng.setStart(node, node.nodeValue.length);\n if (!Env.ie) {\n node2 = marker.nextSibling;\n if (node2 && node2.nodeType === 3) {\n node.appendData(node2.data);\n node2.parentNode.removeChild(node2);\n }\n }\n } else {\n rng.setStartBefore(marker);\n rng.setEndBefore(marker);\n }\n var findNextCaretRng = function (rng) {\n var caretPos = CaretPosition$1.fromRangeStart(rng);\n var caretWalker = CaretWalker(editor.getBody());\n caretPos = caretWalker.next(caretPos);\n if (caretPos) {\n return caretPos.toRange();\n }\n };\n parentBlock = dom.getParent(marker, dom.isBlock);\n dom.remove(marker);\n if (parentBlock && dom.isEmpty(parentBlock)) {\n editor.$(parentBlock).empty();\n rng.setStart(parentBlock, 0);\n rng.setEnd(parentBlock, 0);\n if (!isTableCell$2(parentBlock) && !isPartOfFragment(parentBlock) && (nextRng = findNextCaretRng(rng))) {\n rng = nextRng;\n dom.remove(parentBlock);\n } else {\n dom.add(parentBlock, dom.create('br', { 'data-mce-bogus': '1' }));\n }\n }\n selection.setRng(rng);\n };\n var insertHtmlAtCaret = function (editor, value, details) {\n var parser, serializer, parentNode, rootNode, fragment, args;\n var marker, rng, node, bookmarkHtml, merge;\n var selection = editor.selection, dom = editor.dom;\n if (/^ | $/.test(value)) {\n value = trimOrPadLeftRight(selection.getRng(), value);\n }\n parser = editor.parser;\n merge = details.merge;\n serializer = HtmlSerializer({ validate: editor.settings.validate }, editor.schema);\n bookmarkHtml = '​';\n args = {\n content: value,\n format: 'html',\n selection: true,\n paste: details.paste\n };\n args = editor.fire('BeforeSetContent', args);\n if (args.isDefaultPrevented()) {\n editor.fire('SetContent', {\n content: args.content,\n format: 'html',\n selection: true,\n paste: details.paste\n });\n return;\n }\n value = args.content;\n if (value.indexOf('{$caret}') === -1) {\n value += '{$caret}';\n }\n value = value.replace(/\\{\\$caret\\}/, bookmarkHtml);\n rng = selection.getRng();\n var caretElement = rng.startContainer || (rng.parentElement ? rng.parentElement() : null);\n var body = editor.getBody();\n if (caretElement === body && selection.isCollapsed()) {\n if (dom.isBlock(body.firstChild) && canHaveChildren(editor, body.firstChild) && dom.isEmpty(body.firstChild)) {\n rng = dom.createRng();\n rng.setStart(body.firstChild, 0);\n rng.setEnd(body.firstChild, 0);\n selection.setRng(rng);\n }\n }\n if (!selection.isCollapsed()) {\n editor.selection.setRng(RangeNormalizer.normalize(editor.selection.getRng()));\n editor.getDoc().execCommand('Delete', false, null);\n value = trimNbspAfterDeleteAndPadValue(editor.selection.getRng(), value);\n }\n parentNode = selection.getNode();\n var parserArgs = {\n context: parentNode.nodeName.toLowerCase(),\n data: details.data,\n insert: true\n };\n fragment = parser.parse(value, parserArgs);\n if (details.paste === true && InsertList.isListFragment(editor.schema, fragment) && InsertList.isParentBlockLi(dom, parentNode)) {\n rng = InsertList.insertAtCaret(serializer, dom, editor.selection.getRng(), fragment);\n editor.selection.setRng(rng);\n editor.fire('SetContent', args);\n return;\n }\n markFragmentElements(fragment);\n node = fragment.lastChild;\n if (node.attr('id') === 'mce_marker') {\n marker = node;\n for (node = node.prev; node; node = node.walk(true)) {\n if (node.type === 3 || !dom.isBlock(node.name)) {\n if (editor.schema.isValidChild(node.parent.name, 'span')) {\n node.parent.insert(marker, node, node.name === 'br');\n }\n break;\n }\n }\n }\n editor._selectionOverrides.showBlockCaretContainer(parentNode);\n if (!parserArgs.invalid) {\n value = serializer.serialize(fragment);\n validInsertion(editor, value, parentNode);\n } else {\n selectionSetContent(editor, bookmarkHtml);\n parentNode = selection.getNode();\n rootNode = editor.getBody();\n if (parentNode.nodeType === 9) {\n parentNode = node = rootNode;\n } else {\n node = parentNode;\n }\n while (node !== rootNode) {\n parentNode = node;\n node = node.parentNode;\n }\n value = parentNode === rootNode ? rootNode.innerHTML : dom.getOuterHTML(parentNode);\n value = serializer.serialize(parser.parse(value.replace(//i, function () {\n return serializer.serialize(fragment);\n })));\n if (parentNode === rootNode) {\n dom.setHTML(rootNode, value);\n } else {\n dom.setOuterHTML(parentNode, value);\n }\n }\n reduceInlineTextElements(editor, merge);\n moveSelectionToMarker(editor, dom.get('mce_marker'));\n umarkFragmentElements(editor.getBody());\n trimBrsFromTableCell(editor.dom, editor.selection.getStart());\n editor.fire('SetContent', args);\n editor.addVisual();\n };\n var processValue = function (value) {\n var details;\n if (typeof value !== 'string') {\n details = Tools.extend({\n paste: value.paste,\n data: { paste: value.paste }\n }, value);\n return {\n content: value.content,\n details: details\n };\n }\n return {\n content: value,\n details: {}\n };\n };\n var insertAtCaret$1 = function (editor, value) {\n var result = processValue(value);\n insertHtmlAtCaret(editor, result.content, result.details);\n };\n var InsertContent = { insertAtCaret: insertAtCaret$1 };\n\n var strongRtl = /[\\u0591-\\u07FF\\uFB1D-\\uFDFF\\uFE70-\\uFEFC]/;\n var hasStrongRtl = function (text) {\n return strongRtl.test(text);\n };\n\n var getBodySetting = function (editor, name, defaultValue) {\n var value = editor.getParam(name, defaultValue);\n if (value.indexOf('=') !== -1) {\n var bodyObj = editor.getParam(name, '', 'hash');\n return bodyObj.hasOwnProperty(editor.id) ? bodyObj[editor.id] : defaultValue;\n } else {\n return value;\n }\n };\n var getIframeAttrs = function (editor) {\n return editor.getParam('iframe_attrs', {});\n };\n var getDocType = function (editor) {\n return editor.getParam('doctype', '');\n };\n var getDocumentBaseUrl = function (editor) {\n return editor.getParam('document_base_url', '');\n };\n var getBodyId = function (editor) {\n return getBodySetting(editor, 'body_id', 'tinymce');\n };\n var getBodyClass = function (editor) {\n return getBodySetting(editor, 'body_class', '');\n };\n var getContentSecurityPolicy = function (editor) {\n return editor.getParam('content_security_policy', '');\n };\n var shouldPutBrInPre = function (editor) {\n return editor.getParam('br_in_pre', true);\n };\n var getForcedRootBlock = function (editor) {\n if (editor.getParam('force_p_newlines', false)) {\n return 'p';\n }\n var block = editor.getParam('forced_root_block', 'p');\n return block === false ? '' : block;\n };\n var getForcedRootBlockAttrs = function (editor) {\n return editor.getParam('forced_root_block_attrs', {});\n };\n var getBrNewLineSelector = function (editor) {\n return editor.getParam('br_newline_selector', '.mce-toc h2,figcaption,caption');\n };\n var getNoNewLineSelector = function (editor) {\n return editor.getParam('no_newline_selector', '');\n };\n var shouldKeepStyles = function (editor) {\n return editor.getParam('keep_styles', true);\n };\n var shouldEndContainerOnEmptyBlock = function (editor) {\n return editor.getParam('end_container_on_empty_block', false);\n };\n var getFontStyleValues = function (editor) {\n return Tools.explode(editor.getParam('font_size_style_values', ''));\n };\n var getFontSizeClasses = function (editor) {\n return Tools.explode(editor.getParam('font_size_classes', ''));\n };\n var getImagesDataImgFilter = function (editor) {\n return editor.getParam('images_dataimg_filter', constant(true), 'function');\n };\n var isAutomaticUploadsEnabled = function (editor) {\n return editor.getParam('automatic_uploads', true, 'boolean');\n };\n var shouldReuseFileName = function (editor) {\n return editor.getParam('images_reuse_filename', false, 'boolean');\n };\n var shouldReplaceBlobUris = function (editor) {\n return editor.getParam('images_replace_blob_uris', true, 'boolean');\n };\n var getImageUploadUrl = function (editor) {\n return editor.getParam('images_upload_url', '', 'string');\n };\n var getImageUploadBasePath = function (editor) {\n return editor.getParam('images_upload_base_path', '', 'string');\n };\n var getImagesUploadCredentials = function (editor) {\n return editor.getParam('images_upload_credentials', false, 'boolean');\n };\n var getImagesUploadHandler = function (editor) {\n return editor.getParam('images_upload_handler', null, 'function');\n };\n var shouldUseContentCssCors = function (editor) {\n return editor.getParam('content_css_cors', false, 'boolean');\n };\n var getInlineBoundarySelector = function (editor) {\n return editor.getParam('inline_boundaries_selector', 'a[href],code,.mce-annotation', 'string');\n };\n var Settings = {\n getIframeAttrs: getIframeAttrs,\n getDocType: getDocType,\n getDocumentBaseUrl: getDocumentBaseUrl,\n getBodyId: getBodyId,\n getBodyClass: getBodyClass,\n getContentSecurityPolicy: getContentSecurityPolicy,\n shouldPutBrInPre: shouldPutBrInPre,\n getForcedRootBlock: getForcedRootBlock,\n getForcedRootBlockAttrs: getForcedRootBlockAttrs,\n getBrNewLineSelector: getBrNewLineSelector,\n getNoNewLineSelector: getNoNewLineSelector,\n shouldKeepStyles: shouldKeepStyles,\n shouldEndContainerOnEmptyBlock: shouldEndContainerOnEmptyBlock,\n getFontStyleValues: getFontStyleValues,\n getFontSizeClasses: getFontSizeClasses,\n getImagesDataImgFilter: getImagesDataImgFilter,\n isAutomaticUploadsEnabled: isAutomaticUploadsEnabled,\n shouldReuseFileName: shouldReuseFileName,\n shouldReplaceBlobUris: shouldReplaceBlobUris,\n getImageUploadUrl: getImageUploadUrl,\n getImageUploadBasePath: getImageUploadBasePath,\n getImagesUploadCredentials: getImagesUploadCredentials,\n getImagesUploadHandler: getImagesUploadHandler,\n shouldUseContentCssCors: shouldUseContentCssCors,\n getInlineBoundarySelector: getInlineBoundarySelector\n };\n\n var isInlineTarget = function (editor, elm) {\n return is$1(Element.fromDom(elm), Settings.getInlineBoundarySelector(editor));\n };\n var isRtl = function (element) {\n return DOMUtils$1.DOM.getStyle(element, 'direction', true) === 'rtl' || hasStrongRtl(element.textContent);\n };\n var findInlineParents = function (isInlineTarget, rootNode, pos) {\n return filter(DOMUtils$1.DOM.getParents(pos.container(), '*', rootNode), isInlineTarget);\n };\n var findRootInline = function (isInlineTarget, rootNode, pos) {\n var parents = findInlineParents(isInlineTarget, rootNode, pos);\n return Option.from(parents[parents.length - 1]);\n };\n var hasSameParentBlock = function (rootNode, node1, node2) {\n var block1 = getParentBlock(node1, rootNode);\n var block2 = getParentBlock(node2, rootNode);\n return block1 && block1 === block2;\n };\n var isAtZwsp = function (pos) {\n return isBeforeInline(pos) || isAfterInline(pos);\n };\n var normalizePosition = function (forward, pos) {\n if (!pos) {\n return pos;\n }\n var container = pos.container(), offset = pos.offset();\n if (forward) {\n if (isCaretContainerInline(container)) {\n if (NodeType.isText(container.nextSibling)) {\n return CaretPosition$1(container.nextSibling, 0);\n } else {\n return CaretPosition$1.after(container);\n }\n } else {\n return isBeforeInline(pos) ? CaretPosition$1(container, offset + 1) : pos;\n }\n } else {\n if (isCaretContainerInline(container)) {\n if (NodeType.isText(container.previousSibling)) {\n return CaretPosition$1(container.previousSibling, container.previousSibling.data.length);\n } else {\n return CaretPosition$1.before(container);\n }\n } else {\n return isAfterInline(pos) ? CaretPosition$1(container, offset - 1) : pos;\n }\n }\n };\n var normalizeForwards = curry(normalizePosition, true);\n var normalizeBackwards = curry(normalizePosition, false);\n var InlineUtils = {\n isInlineTarget: isInlineTarget,\n findRootInline: findRootInline,\n isRtl: isRtl,\n isAtZwsp: isAtZwsp,\n normalizePosition: normalizePosition,\n normalizeForwards: normalizeForwards,\n normalizeBackwards: normalizeBackwards,\n hasSameParentBlock: hasSameParentBlock\n };\n\n var isBeforeRoot = function (rootNode) {\n return function (elm) {\n return eq(rootNode, Element.fromDom(elm.dom().parentNode));\n };\n };\n var getParentBlock$1 = function (rootNode, elm) {\n return contains$3(rootNode, elm) ? closest(elm, function (element) {\n return isTextBlock(element) || isListItem(element);\n }, isBeforeRoot(rootNode)) : Option.none();\n };\n var placeCaretInEmptyBody = function (editor) {\n var body = editor.getBody();\n var node = body.firstChild && editor.dom.isBlock(body.firstChild) ? body.firstChild : body;\n editor.selection.setCursorLocation(node, 0);\n };\n var paddEmptyBody = function (editor) {\n if (editor.dom.isEmpty(editor.getBody())) {\n editor.setContent('');\n placeCaretInEmptyBody(editor);\n }\n };\n var willDeleteLastPositionInElement = function (forward, fromPos, elm) {\n return lift2(CaretFinder.firstPositionIn(elm), CaretFinder.lastPositionIn(elm), function (firstPos, lastPos) {\n var normalizedFirstPos = InlineUtils.normalizePosition(true, firstPos);\n var normalizedLastPos = InlineUtils.normalizePosition(false, lastPos);\n var normalizedFromPos = InlineUtils.normalizePosition(false, fromPos);\n if (forward) {\n return CaretFinder.nextPosition(elm, normalizedFromPos).map(function (nextPos) {\n return nextPos.isEqual(normalizedLastPos) && fromPos.isEqual(normalizedFirstPos);\n }).getOr(false);\n } else {\n return CaretFinder.prevPosition(elm, normalizedFromPos).map(function (prevPos) {\n return prevPos.isEqual(normalizedFirstPos) && fromPos.isEqual(normalizedLastPos);\n }).getOr(false);\n }\n }).getOr(true);\n };\n var DeleteUtils = {\n getParentBlock: getParentBlock$1,\n paddEmptyBody: paddEmptyBody,\n willDeleteLastPositionInElement: willDeleteLastPositionInElement\n };\n\n var ancestor$2 = function (scope, selector, isRoot) {\n return ancestor$1(scope, selector, isRoot).isSome();\n };\n\n var hasWhitespacePreserveParent = function (rootNode, node) {\n var rootElement = Element.fromDom(rootNode);\n var startNode = Element.fromDom(node);\n return ancestor$2(startNode, 'pre,code', curry(eq, rootElement));\n };\n var isWhitespace = function (rootNode, node) {\n return NodeType.isText(node) && /^[ \\t\\r\\n]*$/.test(node.data) && hasWhitespacePreserveParent(rootNode, node) === false;\n };\n var isNamedAnchor = function (node) {\n return NodeType.isElement(node) && node.nodeName === 'A' && node.hasAttribute('name');\n };\n var isContent = function (rootNode, node) {\n return isCaretCandidate(node) && isWhitespace(rootNode, node) === false || isNamedAnchor(node) || isBookmark(node);\n };\n var isBookmark = NodeType.hasAttribute('data-mce-bookmark');\n var isBogus$2 = NodeType.hasAttribute('data-mce-bogus');\n var isBogusAll$1 = NodeType.hasAttributeValue('data-mce-bogus', 'all');\n var isEmptyNode = function (targetNode) {\n var walker, node, brCount = 0;\n if (isContent(targetNode, targetNode)) {\n return false;\n } else {\n node = targetNode.firstChild;\n if (!node) {\n return true;\n }\n walker = new TreeWalker(node, targetNode);\n do {\n if (isBogusAll$1(node)) {\n node = walker.next(true);\n continue;\n }\n if (isBogus$2(node)) {\n node = walker.next();\n continue;\n }\n if (NodeType.isBr(node)) {\n brCount++;\n node = walker.next();\n continue;\n }\n if (isContent(targetNode, node)) {\n return false;\n }\n node = walker.next();\n } while (node);\n return brCount <= 1;\n }\n };\n var isEmpty$1 = function (elm) {\n return isEmptyNode(elm.dom());\n };\n var Empty = { isEmpty: isEmpty$1 };\n\n var BlockPosition = Immutable('block', 'position');\n var BlockBoundary = Immutable('from', 'to');\n var getBlockPosition = function (rootNode, pos) {\n var rootElm = Element.fromDom(rootNode);\n var containerElm = Element.fromDom(pos.container());\n return DeleteUtils.getParentBlock(rootElm, containerElm).map(function (block) {\n return BlockPosition(block, pos);\n });\n };\n var isDifferentBlocks = function (blockBoundary) {\n return eq(blockBoundary.from().block(), blockBoundary.to().block()) === false;\n };\n var hasSameParent = function (blockBoundary) {\n return parent(blockBoundary.from().block()).bind(function (parent1) {\n return parent(blockBoundary.to().block()).filter(function (parent2) {\n return eq(parent1, parent2);\n });\n }).isSome();\n };\n var isEditable = function (blockBoundary) {\n return NodeType.isContentEditableFalse(blockBoundary.from().block().dom()) === false && NodeType.isContentEditableFalse(blockBoundary.to().block().dom()) === false;\n };\n var skipLastBr = function (rootNode, forward, blockPosition) {\n if (NodeType.isBr(blockPosition.position().getNode()) && Empty.isEmpty(blockPosition.block()) === false) {\n return CaretFinder.positionIn(false, blockPosition.block().dom()).bind(function (lastPositionInBlock) {\n if (lastPositionInBlock.isEqual(blockPosition.position())) {\n return CaretFinder.fromPosition(forward, rootNode, lastPositionInBlock).bind(function (to) {\n return getBlockPosition(rootNode, to);\n });\n } else {\n return Option.some(blockPosition);\n }\n }).getOr(blockPosition);\n } else {\n return blockPosition;\n }\n };\n var readFromRange = function (rootNode, forward, rng) {\n var fromBlockPos = getBlockPosition(rootNode, CaretPosition$1.fromRangeStart(rng));\n var toBlockPos = fromBlockPos.bind(function (blockPos) {\n return CaretFinder.fromPosition(forward, rootNode, blockPos.position()).bind(function (to) {\n return getBlockPosition(rootNode, to).map(function (blockPos) {\n return skipLastBr(rootNode, forward, blockPos);\n });\n });\n });\n return lift2(fromBlockPos, toBlockPos, BlockBoundary).filter(function (blockBoundary) {\n return isDifferentBlocks(blockBoundary) && hasSameParent(blockBoundary) && isEditable(blockBoundary);\n });\n };\n var read$1 = function (rootNode, forward, rng) {\n return rng.collapsed ? readFromRange(rootNode, forward, rng) : Option.none();\n };\n var BlockMergeBoundary = { read: read$1 };\n\n var dropLast = function (xs) {\n return xs.slice(0, -1);\n };\n var parentsUntil$1 = function (start, root, predicate) {\n if (contains$3(root, start)) {\n return dropLast(parents(start, function (elm) {\n return predicate(elm) || eq(elm, root);\n }));\n } else {\n return [];\n }\n };\n var parents$1 = function (start, root) {\n return parentsUntil$1(start, root, constant(false));\n };\n var parentsAndSelf = function (start, root) {\n return [start].concat(parents$1(start, root));\n };\n var Parents = {\n parentsUntil: parentsUntil$1,\n parents: parents$1,\n parentsAndSelf: parentsAndSelf\n };\n\n var getChildrenUntilBlockBoundary = function (block) {\n var children$1 = children(block);\n return findIndex(children$1, isBlock).fold(function () {\n return children$1;\n }, function (index) {\n return children$1.slice(0, index);\n });\n };\n var extractChildren = function (block) {\n var children = getChildrenUntilBlockBoundary(block);\n each(children, remove$1);\n return children;\n };\n var removeEmptyRoot = function (rootNode, block) {\n var parents = Parents.parentsAndSelf(block, rootNode);\n return find(parents.reverse(), Empty.isEmpty).each(remove$1);\n };\n var isEmptyBefore = function (el) {\n return filter(prevSiblings(el), function (el) {\n return !Empty.isEmpty(el);\n }).length === 0;\n };\n var nestedBlockMerge = function (rootNode, fromBlock, toBlock, insertionPoint) {\n if (Empty.isEmpty(toBlock)) {\n PaddingBr.fillWithPaddingBr(toBlock);\n return CaretFinder.firstPositionIn(toBlock.dom());\n }\n if (isEmptyBefore(insertionPoint) && Empty.isEmpty(fromBlock)) {\n before(insertionPoint, Element.fromTag('br'));\n }\n var position = CaretFinder.prevPosition(toBlock.dom(), CaretPosition$1.before(insertionPoint.dom()));\n each(extractChildren(fromBlock), function (child) {\n before(insertionPoint, child);\n });\n removeEmptyRoot(rootNode, fromBlock);\n return position;\n };\n var sidelongBlockMerge = function (rootNode, fromBlock, toBlock) {\n if (Empty.isEmpty(toBlock)) {\n remove$1(toBlock);\n if (Empty.isEmpty(fromBlock)) {\n PaddingBr.fillWithPaddingBr(fromBlock);\n }\n return CaretFinder.firstPositionIn(fromBlock.dom());\n }\n var position = CaretFinder.lastPositionIn(toBlock.dom());\n each(extractChildren(fromBlock), function (child) {\n append(toBlock, child);\n });\n removeEmptyRoot(rootNode, fromBlock);\n return position;\n };\n var findInsertionPoint = function (toBlock, block) {\n var parentsAndSelf = Parents.parentsAndSelf(block, toBlock);\n return Option.from(parentsAndSelf[parentsAndSelf.length - 1]);\n };\n var getInsertionPoint = function (fromBlock, toBlock) {\n return contains$3(toBlock, fromBlock) ? findInsertionPoint(toBlock, fromBlock) : Option.none();\n };\n var trimBr = function (first, block) {\n CaretFinder.positionIn(first, block.dom()).map(function (position) {\n return position.getNode();\n }).map(Element.fromDom).filter(isBr).each(remove$1);\n };\n var mergeBlockInto = function (rootNode, fromBlock, toBlock) {\n trimBr(true, fromBlock);\n trimBr(false, toBlock);\n return getInsertionPoint(fromBlock, toBlock).fold(curry(sidelongBlockMerge, rootNode, fromBlock, toBlock), curry(nestedBlockMerge, rootNode, fromBlock, toBlock));\n };\n var mergeBlocks = function (rootNode, forward, block1, block2) {\n return forward ? mergeBlockInto(rootNode, block2, block1) : mergeBlockInto(rootNode, block1, block2);\n };\n var MergeBlocks = { mergeBlocks: mergeBlocks };\n\n var backspaceDelete = function (editor, forward) {\n var position;\n var rootNode = Element.fromDom(editor.getBody());\n position = BlockMergeBoundary.read(rootNode.dom(), forward, editor.selection.getRng()).bind(function (blockBoundary) {\n return MergeBlocks.mergeBlocks(rootNode, forward, blockBoundary.from().block(), blockBoundary.to().block());\n });\n position.each(function (pos) {\n editor.selection.setRng(pos.toRange());\n });\n return position.isSome();\n };\n var BlockBoundaryDelete = { backspaceDelete: backspaceDelete };\n\n var deleteRangeMergeBlocks = function (rootNode, selection) {\n var rng = selection.getRng();\n return lift2(DeleteUtils.getParentBlock(rootNode, Element.fromDom(rng.startContainer)), DeleteUtils.getParentBlock(rootNode, Element.fromDom(rng.endContainer)), function (block1, block2) {\n if (eq(block1, block2) === false) {\n rng.deleteContents();\n MergeBlocks.mergeBlocks(rootNode, true, block1, block2).each(function (pos) {\n selection.setRng(pos.toRange());\n });\n return true;\n } else {\n return false;\n }\n }).getOr(false);\n };\n var isRawNodeInTable = function (root, rawNode) {\n var node = Element.fromDom(rawNode);\n var isRoot = curry(eq, root);\n return ancestor(node, isTableCell, isRoot).isSome();\n };\n var isSelectionInTable = function (root, rng) {\n return isRawNodeInTable(root, rng.startContainer) || isRawNodeInTable(root, rng.endContainer);\n };\n var isEverythingSelected = function (root, rng) {\n var noPrevious = CaretFinder.prevPosition(root.dom(), CaretPosition$1.fromRangeStart(rng)).isNone();\n var noNext = CaretFinder.nextPosition(root.dom(), CaretPosition$1.fromRangeEnd(rng)).isNone();\n return !isSelectionInTable(root, rng) && noPrevious && noNext;\n };\n var emptyEditor = function (editor) {\n editor.setContent('');\n editor.selection.setCursorLocation();\n return true;\n };\n var deleteRange = function (editor) {\n var rootNode = Element.fromDom(editor.getBody());\n var rng = editor.selection.getRng();\n return isEverythingSelected(rootNode, rng) ? emptyEditor(editor) : deleteRangeMergeBlocks(rootNode, editor.selection);\n };\n var backspaceDelete$1 = function (editor, forward) {\n return editor.selection.isCollapsed() ? false : deleteRange(editor);\n };\n var BlockRangeDelete = { backspaceDelete: backspaceDelete$1 };\n\n var generate$1 = function (cases) {\n if (!isArray(cases)) {\n throw new Error('cases must be an array');\n }\n if (cases.length === 0) {\n throw new Error('there must be at least one case');\n }\n var constructors = [];\n var adt = {};\n each(cases, function (acase, count) {\n var keys$1 = keys(acase);\n if (keys$1.length !== 1) {\n throw new Error('one and only one name per case');\n }\n var key = keys$1[0];\n var value = acase[key];\n if (adt[key] !== undefined) {\n throw new Error('duplicate key detected:' + key);\n } else if (key === 'cata') {\n throw new Error('cannot have a case named cata (sorry)');\n } else if (!isArray(value)) {\n throw new Error('case arguments must be an array');\n }\n constructors.push(key);\n adt[key] = function () {\n var argLength = arguments.length;\n if (argLength !== value.length) {\n throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);\n }\n var args = new Array(argLength);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n var match = function (branches) {\n var branchKeys = keys(branches);\n if (constructors.length !== branchKeys.length) {\n throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\\nActual: ' + branchKeys.join(','));\n }\n var allReqd = forall(constructors, function (reqKey) {\n return contains(branchKeys, reqKey);\n });\n if (!allReqd) {\n throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\\nRequired: ' + constructors.join(', '));\n }\n return branches[key].apply(null, args);\n };\n return {\n fold: function () {\n if (arguments.length !== cases.length) {\n throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + arguments.length);\n }\n var target = arguments[count];\n return target.apply(null, args);\n },\n match: match,\n log: function (label) {\n domGlobals.console.log(label, {\n constructors: constructors,\n constructor: key,\n params: args\n });\n }\n };\n };\n });\n return adt;\n };\n var Adt = { generate: generate$1 };\n\n var isBr$5 = function (pos) {\n return getElementFromPosition(pos).exists(isBr);\n };\n var findBr = function (forward, root, pos) {\n var parentBlocks = filter(Parents.parentsAndSelf(Element.fromDom(pos.container()), root), isBlock);\n var scope = head(parentBlocks).getOr(root);\n return CaretFinder.fromPosition(forward, scope.dom(), pos).filter(isBr$5);\n };\n var isBeforeBr = function (root, pos) {\n return getElementFromPosition(pos).exists(isBr) || findBr(true, root, pos).isSome();\n };\n var isAfterBr = function (root, pos) {\n return getElementFromPrevPosition(pos).exists(isBr) || findBr(false, root, pos).isSome();\n };\n var findPreviousBr = curry(findBr, false);\n var findNextBr = curry(findBr, true);\n\n var is$2 = function (expected) {\n return function (actual) {\n return expected === actual;\n };\n };\n var isNbsp = is$2('\\xA0');\n var isWhiteSpace$1 = function (chr) {\n return /^[\\r\\n\\t ]$/.test(chr);\n };\n var isContent$1 = function (chr) {\n return !isWhiteSpace$1(chr) && !isNbsp(chr);\n };\n\n var isChar = function (forward, predicate, pos) {\n return Option.from(pos.container()).filter(NodeType.isText).exists(function (text) {\n var delta = forward ? 0 : -1;\n return predicate(text.data.charAt(pos.offset() + delta));\n });\n };\n var isBeforeSpace = curry(isChar, true, isWhiteSpace$1);\n var isAfterSpace = curry(isChar, false, isWhiteSpace$1);\n var isEmptyText = function (pos) {\n var container = pos.container();\n return NodeType.isText(container) && container.data.length === 0;\n };\n var isNextToContentEditableFalse = function (relativeOffset, caretPosition) {\n var node = getChildNodeAtRelativeOffset(relativeOffset, caretPosition);\n return NodeType.isContentEditableFalse(node) && !NodeType.isBogusAll(node);\n };\n var isBeforeContentEditableFalse = curry(isNextToContentEditableFalse, 0);\n var isAfterContentEditableFalse = curry(isNextToContentEditableFalse, -1);\n var isNextToTable = function (relativeOffset, caretPosition) {\n return NodeType.isTable(getChildNodeAtRelativeOffset(relativeOffset, caretPosition));\n };\n var isBeforeTable = curry(isNextToTable, 0);\n var isAfterTable = curry(isNextToTable, -1);\n\n var isCompoundElement = function (node) {\n return isTableCell(Element.fromDom(node)) || isListItem(Element.fromDom(node));\n };\n var DeleteAction = Adt.generate([\n { remove: ['element'] },\n { moveToElement: ['element'] },\n { moveToPosition: ['position'] }\n ]);\n var isAtContentEditableBlockCaret = function (forward, from) {\n var elm = from.getNode(forward === false);\n var caretLocation = forward ? 'after' : 'before';\n return NodeType.isElement(elm) && elm.getAttribute('data-mce-caret') === caretLocation;\n };\n var isDeleteFromCefDifferentBlocks = function (root, forward, from, to) {\n var inSameBlock = function (elm) {\n return isInline(Element.fromDom(elm)) && !isInSameBlock(from, to, root);\n };\n return getRelativeCefElm(!forward, from).fold(function () {\n return getRelativeCefElm(forward, to).fold(constant(false), inSameBlock);\n }, inSameBlock);\n };\n var deleteEmptyBlockOrMoveToCef = function (root, forward, from, to) {\n var toCefElm = to.getNode(forward === false);\n return DeleteUtils.getParentBlock(Element.fromDom(root), Element.fromDom(from.getNode())).map(function (blockElm) {\n return Empty.isEmpty(blockElm) ? DeleteAction.remove(blockElm.dom()) : DeleteAction.moveToElement(toCefElm);\n }).orThunk(function () {\n return Option.some(DeleteAction.moveToElement(toCefElm));\n });\n };\n var findCefPosition = function (root, forward, from) {\n return CaretFinder.fromPosition(forward, root, from).bind(function (to) {\n if (isCompoundElement(to.getNode())) {\n return Option.none();\n } else if (isDeleteFromCefDifferentBlocks(root, forward, from, to)) {\n return Option.none();\n } else if (forward && NodeType.isContentEditableFalse(to.getNode())) {\n return deleteEmptyBlockOrMoveToCef(root, forward, from, to);\n } else if (forward === false && NodeType.isContentEditableFalse(to.getNode(true))) {\n return deleteEmptyBlockOrMoveToCef(root, forward, from, to);\n } else if (forward && isAfterContentEditableFalse(from)) {\n return Option.some(DeleteAction.moveToPosition(to));\n } else if (forward === false && isBeforeContentEditableFalse(from)) {\n return Option.some(DeleteAction.moveToPosition(to));\n } else {\n return Option.none();\n }\n });\n };\n var getContentEditableBlockAction = function (forward, elm) {\n if (forward && NodeType.isContentEditableFalse(elm.nextSibling)) {\n return Option.some(DeleteAction.moveToElement(elm.nextSibling));\n } else if (forward === false && NodeType.isContentEditableFalse(elm.previousSibling)) {\n return Option.some(DeleteAction.moveToElement(elm.previousSibling));\n } else {\n return Option.none();\n }\n };\n var skipMoveToActionFromInlineCefToContent = function (root, from, deleteAction) {\n return deleteAction.fold(function (elm) {\n return Option.some(DeleteAction.remove(elm));\n }, function (elm) {\n return Option.some(DeleteAction.moveToElement(elm));\n }, function (to) {\n if (isInSameBlock(from, to, root)) {\n return Option.none();\n } else {\n return Option.some(DeleteAction.moveToPosition(to));\n }\n });\n };\n var getContentEditableAction = function (root, forward, from) {\n if (isAtContentEditableBlockCaret(forward, from)) {\n return getContentEditableBlockAction(forward, from.getNode(forward === false)).fold(function () {\n return findCefPosition(root, forward, from);\n }, Option.some);\n } else {\n return findCefPosition(root, forward, from).bind(function (deleteAction) {\n return skipMoveToActionFromInlineCefToContent(root, from, deleteAction);\n });\n }\n };\n var read$2 = function (root, forward, rng) {\n var normalizedRange = normalizeRange(forward ? 1 : -1, root, rng);\n var from = CaretPosition$1.fromRangeStart(normalizedRange);\n var rootElement = Element.fromDom(root);\n if (forward === false && isAfterContentEditableFalse(from)) {\n return Option.some(DeleteAction.remove(from.getNode(true)));\n } else if (forward && isBeforeContentEditableFalse(from)) {\n return Option.some(DeleteAction.remove(from.getNode()));\n } else if (forward === false && isBeforeContentEditableFalse(from) && isAfterBr(rootElement, from)) {\n return findPreviousBr(rootElement, from).map(function (br) {\n return DeleteAction.remove(br.getNode());\n });\n } else if (forward && isAfterContentEditableFalse(from) && isBeforeBr(rootElement, from)) {\n return findNextBr(rootElement, from).map(function (br) {\n return DeleteAction.remove(br.getNode());\n });\n } else {\n return getContentEditableAction(root, forward, from);\n }\n };\n\n var isCollapsibleWhitespace = function (c) {\n return ' \\f\\n\\r\\t\\x0B'.indexOf(c) !== -1;\n };\n var normalizeContent = function (content, isStartOfContent, isEndOfContent) {\n var result = foldl(content.split(''), function (acc, c) {\n if (isCollapsibleWhitespace(c) || c === '\\xA0') {\n if (acc.previousCharIsSpace || acc.str === '' && isStartOfContent || acc.str.length === content.length - 1 && isEndOfContent) {\n return {\n previousCharIsSpace: false,\n str: acc.str + '\\xA0'\n };\n } else {\n return {\n previousCharIsSpace: true,\n str: acc.str + ' '\n };\n }\n } else {\n return {\n previousCharIsSpace: false,\n str: acc.str + c\n };\n }\n }, {\n previousCharIsSpace: false,\n str: ''\n });\n return result.str;\n };\n var normalize$1 = function (node, offset, count) {\n if (count === 0) {\n return;\n }\n var whitespace = node.data.slice(offset, offset + count);\n var isEndOfContent = offset + count >= node.data.length;\n var isStartOfContent = offset === 0;\n node.replaceData(offset, count, normalizeContent(whitespace, isStartOfContent, isEndOfContent));\n };\n var normalizeWhitespaceAfter = function (node, offset) {\n var content = node.data.slice(offset);\n var whitespaceCount = content.length - lTrim(content).length;\n return normalize$1(node, offset, whitespaceCount);\n };\n var normalizeWhitespaceBefore = function (node, offset) {\n var content = node.data.slice(0, offset);\n var whitespaceCount = content.length - rTrim(content).length;\n return normalize$1(node, offset - whitespaceCount, whitespaceCount);\n };\n var mergeTextNodes = function (prevNode, nextNode, normalizeWhitespace) {\n var whitespaceOffset = rTrim(prevNode.data).length;\n prevNode.appendData(nextNode.data);\n remove$1(Element.fromDom(nextNode));\n if (normalizeWhitespace) {\n normalizeWhitespaceAfter(prevNode, whitespaceOffset);\n }\n return prevNode;\n };\n\n var needsReposition = function (pos, elm) {\n var container = pos.container();\n var offset = pos.offset();\n return CaretPosition$1.isTextPosition(pos) === false && container === elm.parentNode && offset > CaretPosition$1.before(elm).offset();\n };\n var reposition = function (elm, pos) {\n return needsReposition(pos, elm) ? CaretPosition$1(pos.container(), pos.offset() - 1) : pos;\n };\n var beforeOrStartOf = function (node) {\n return NodeType.isText(node) ? CaretPosition$1(node, 0) : CaretPosition$1.before(node);\n };\n var afterOrEndOf = function (node) {\n return NodeType.isText(node) ? CaretPosition$1(node, node.data.length) : CaretPosition$1.after(node);\n };\n var getPreviousSiblingCaretPosition = function (elm) {\n if (isCaretCandidate(elm.previousSibling)) {\n return Option.some(afterOrEndOf(elm.previousSibling));\n } else {\n return elm.previousSibling ? CaretFinder.lastPositionIn(elm.previousSibling) : Option.none();\n }\n };\n var getNextSiblingCaretPosition = function (elm) {\n if (isCaretCandidate(elm.nextSibling)) {\n return Option.some(beforeOrStartOf(elm.nextSibling));\n } else {\n return elm.nextSibling ? CaretFinder.firstPositionIn(elm.nextSibling) : Option.none();\n }\n };\n var findCaretPositionBackwardsFromElm = function (rootElement, elm) {\n var startPosition = CaretPosition$1.before(elm.previousSibling ? elm.previousSibling : elm.parentNode);\n return CaretFinder.prevPosition(rootElement, startPosition).fold(function () {\n return CaretFinder.nextPosition(rootElement, CaretPosition$1.after(elm));\n }, Option.some);\n };\n var findCaretPositionForwardsFromElm = function (rootElement, elm) {\n return CaretFinder.nextPosition(rootElement, CaretPosition$1.after(elm)).fold(function () {\n return CaretFinder.prevPosition(rootElement, CaretPosition$1.before(elm));\n }, Option.some);\n };\n var findCaretPositionBackwards = function (rootElement, elm) {\n return getPreviousSiblingCaretPosition(elm).orThunk(function () {\n return getNextSiblingCaretPosition(elm);\n }).orThunk(function () {\n return findCaretPositionBackwardsFromElm(rootElement, elm);\n });\n };\n var findCaretPositionForward = function (rootElement, elm) {\n return getNextSiblingCaretPosition(elm).orThunk(function () {\n return getPreviousSiblingCaretPosition(elm);\n }).orThunk(function () {\n return findCaretPositionForwardsFromElm(rootElement, elm);\n });\n };\n var findCaretPosition$1 = function (forward, rootElement, elm) {\n return forward ? findCaretPositionForward(rootElement, elm) : findCaretPositionBackwards(rootElement, elm);\n };\n var findCaretPosOutsideElmAfterDelete = function (forward, rootElement, elm) {\n return findCaretPosition$1(forward, rootElement, elm).map(curry(reposition, elm));\n };\n var setSelection = function (editor, forward, pos) {\n pos.fold(function () {\n editor.focus();\n }, function (pos) {\n editor.selection.setRng(pos.toRange(), forward);\n });\n };\n var eqRawNode = function (rawNode) {\n return function (elm) {\n return elm.dom() === rawNode;\n };\n };\n var isBlock$2 = function (editor, elm) {\n return elm && editor.schema.getBlockElements().hasOwnProperty(name(elm));\n };\n var paddEmptyBlock = function (elm) {\n if (Empty.isEmpty(elm)) {\n var br = Element.fromHtml('
');\n empty(elm);\n append(elm, br);\n return Option.some(CaretPosition$1.before(br.dom()));\n } else {\n return Option.none();\n }\n };\n var deleteNormalized = function (elm, afterDeletePosOpt, normalizeWhitespace) {\n var prevTextOpt = prevSibling(elm).filter(isText);\n var nextTextOpt = nextSibling(elm).filter(isText);\n remove$1(elm);\n return lift3(prevTextOpt, nextTextOpt, afterDeletePosOpt, function (prev, next, pos) {\n var prevNode = prev.dom(), nextNode = next.dom();\n var offset = prevNode.data.length;\n mergeTextNodes(prevNode, nextNode, normalizeWhitespace);\n return pos.container() === nextNode ? CaretPosition$1(prevNode, offset) : pos;\n }).orThunk(function () {\n if (normalizeWhitespace) {\n prevTextOpt.each(function (elm) {\n return normalizeWhitespaceBefore(elm.dom(), elm.dom().length);\n });\n nextTextOpt.each(function (elm) {\n return normalizeWhitespaceAfter(elm.dom(), 0);\n });\n }\n return afterDeletePosOpt;\n });\n };\n var isInlineElement = function (editor, element) {\n return has(editor.schema.getTextInlineElements(), name(element));\n };\n var deleteElement = function (editor, forward, elm, moveCaret) {\n if (moveCaret === void 0) {\n moveCaret = true;\n }\n var afterDeletePos = findCaretPosOutsideElmAfterDelete(forward, editor.getBody(), elm.dom());\n var parentBlock = ancestor(elm, curry(isBlock$2, editor), eqRawNode(editor.getBody()));\n var normalizedAfterDeletePos = deleteNormalized(elm, afterDeletePos, isInlineElement(editor, elm));\n if (editor.dom.isEmpty(editor.getBody())) {\n editor.setContent('');\n editor.selection.setCursorLocation();\n } else {\n parentBlock.bind(paddEmptyBlock).fold(function () {\n if (moveCaret) {\n setSelection(editor, forward, normalizedAfterDeletePos);\n }\n }, function (paddPos) {\n if (moveCaret) {\n setSelection(editor, forward, Option.some(paddPos));\n }\n });\n }\n };\n var DeleteElement = { deleteElement: deleteElement };\n\n var deleteElement$1 = function (editor, forward) {\n return function (element) {\n editor._selectionOverrides.hideFakeCaret();\n DeleteElement.deleteElement(editor, forward, Element.fromDom(element));\n return true;\n };\n };\n var moveToElement = function (editor, forward) {\n return function (element) {\n var pos = forward ? CaretPosition$1.before(element) : CaretPosition$1.after(element);\n editor.selection.setRng(pos.toRange());\n return true;\n };\n };\n var moveToPosition = function (editor) {\n return function (pos) {\n editor.selection.setRng(pos.toRange());\n return true;\n };\n };\n var backspaceDeleteCaret = function (editor, forward) {\n var result = read$2(editor.getBody(), forward, editor.selection.getRng()).map(function (deleteAction) {\n return deleteAction.fold(deleteElement$1(editor, forward), moveToElement(editor, forward), moveToPosition(editor));\n });\n return result.getOr(false);\n };\n var deleteOffscreenSelection = function (rootElement) {\n each(descendants$1(rootElement, '.mce-offscreen-selection'), remove$1);\n };\n var backspaceDeleteRange = function (editor, forward) {\n var selectedElement = editor.selection.getNode();\n if (NodeType.isContentEditableFalse(selectedElement)) {\n deleteOffscreenSelection(Element.fromDom(editor.getBody()));\n DeleteElement.deleteElement(editor, forward, Element.fromDom(editor.selection.getNode()));\n DeleteUtils.paddEmptyBody(editor);\n return true;\n } else {\n return false;\n }\n };\n var getContentEditableRoot = function (root, node) {\n while (node && node !== root) {\n if (NodeType.isContentEditableTrue(node) || NodeType.isContentEditableFalse(node)) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n };\n var paddEmptyElement = function (editor) {\n var br;\n var ceRoot = getContentEditableRoot(editor.getBody(), editor.selection.getNode());\n if (NodeType.isContentEditableTrue(ceRoot) && editor.dom.isBlock(ceRoot) && editor.dom.isEmpty(ceRoot)) {\n br = editor.dom.create('br', { 'data-mce-bogus': '1' });\n editor.dom.setHTML(ceRoot, '');\n ceRoot.appendChild(br);\n editor.selection.setRng(CaretPosition$1.before(br).toRange());\n }\n return true;\n };\n var backspaceDelete$2 = function (editor, forward) {\n if (editor.selection.isCollapsed()) {\n return backspaceDeleteCaret(editor, forward);\n } else {\n return backspaceDeleteRange(editor, forward);\n }\n };\n var CefDelete = {\n backspaceDelete: backspaceDelete$2,\n paddEmptyElement: paddEmptyElement\n };\n\n var isText$8 = NodeType.isText;\n var startsWithCaretContainer$1 = function (node) {\n return isText$8(node) && node.data[0] === Zwsp.ZWSP;\n };\n var endsWithCaretContainer$1 = function (node) {\n return isText$8(node) && node.data[node.data.length - 1] === Zwsp.ZWSP;\n };\n var createZwsp = function (node) {\n return node.ownerDocument.createTextNode(Zwsp.ZWSP);\n };\n var insertBefore$1 = function (node) {\n if (isText$8(node.previousSibling)) {\n if (endsWithCaretContainer$1(node.previousSibling)) {\n return node.previousSibling;\n } else {\n node.previousSibling.appendData(Zwsp.ZWSP);\n return node.previousSibling;\n }\n } else if (isText$8(node)) {\n if (startsWithCaretContainer$1(node)) {\n return node;\n } else {\n node.insertData(0, Zwsp.ZWSP);\n return node;\n }\n } else {\n var newNode = createZwsp(node);\n node.parentNode.insertBefore(newNode, node);\n return newNode;\n }\n };\n var insertAfter$1 = function (node) {\n if (isText$8(node.nextSibling)) {\n if (startsWithCaretContainer$1(node.nextSibling)) {\n return node.nextSibling;\n } else {\n node.nextSibling.insertData(0, Zwsp.ZWSP);\n return node.nextSibling;\n }\n } else if (isText$8(node)) {\n if (endsWithCaretContainer$1(node)) {\n return node;\n } else {\n node.appendData(Zwsp.ZWSP);\n return node;\n }\n } else {\n var newNode = createZwsp(node);\n if (node.nextSibling) {\n node.parentNode.insertBefore(newNode, node.nextSibling);\n } else {\n node.parentNode.appendChild(newNode);\n }\n return newNode;\n }\n };\n var insertInline$1 = function (before, node) {\n return before ? insertBefore$1(node) : insertAfter$1(node);\n };\n var insertInlineBefore = curry(insertInline$1, true);\n var insertInlineAfter = curry(insertInline$1, false);\n\n var insertInlinePos = function (pos, before) {\n if (NodeType.isText(pos.container())) {\n return insertInline$1(before, pos.container());\n } else {\n return insertInline$1(before, pos.getNode());\n }\n };\n var isPosCaretContainer = function (pos, caret) {\n var caretNode = caret.get();\n return caretNode && pos.container() === caretNode && isCaretContainerInline(caretNode);\n };\n var renderCaret = function (caret, location) {\n return location.fold(function (element) {\n CaretContainerRemove.remove(caret.get());\n var text = insertInlineBefore(element);\n caret.set(text);\n return Option.some(CaretPosition$1(text, text.length - 1));\n }, function (element) {\n return CaretFinder.firstPositionIn(element).map(function (pos) {\n if (!isPosCaretContainer(pos, caret)) {\n CaretContainerRemove.remove(caret.get());\n var text = insertInlinePos(pos, true);\n caret.set(text);\n return CaretPosition$1(text, 1);\n } else {\n return CaretPosition$1(caret.get(), 1);\n }\n });\n }, function (element) {\n return CaretFinder.lastPositionIn(element).map(function (pos) {\n if (!isPosCaretContainer(pos, caret)) {\n CaretContainerRemove.remove(caret.get());\n var text = insertInlinePos(pos, false);\n caret.set(text);\n return CaretPosition$1(text, text.length - 1);\n } else {\n return CaretPosition$1(caret.get(), caret.get().length - 1);\n }\n });\n }, function (element) {\n CaretContainerRemove.remove(caret.get());\n var text = insertInlineAfter(element);\n caret.set(text);\n return Option.some(CaretPosition$1(text, 1));\n });\n };\n var BoundaryCaret = { renderCaret: renderCaret };\n\n var evaluateUntil = function (fns, args) {\n for (var i = 0; i < fns.length; i++) {\n var result = fns[i].apply(null, args);\n if (result.isSome()) {\n return result;\n }\n }\n return Option.none();\n };\n var LazyEvaluator = { evaluateUntil: evaluateUntil };\n\n var Location = Adt.generate([\n { before: ['element'] },\n { start: ['element'] },\n { end: ['element'] },\n { after: ['element'] }\n ]);\n var rescope = function (rootNode, node) {\n var parentBlock = getParentBlock(node, rootNode);\n return parentBlock ? parentBlock : rootNode;\n };\n var before$3 = function (isInlineTarget, rootNode, pos) {\n var nPos = InlineUtils.normalizeForwards(pos);\n var scope = rescope(rootNode, nPos.container());\n return InlineUtils.findRootInline(isInlineTarget, scope, nPos).fold(function () {\n return CaretFinder.nextPosition(scope, nPos).bind(curry(InlineUtils.findRootInline, isInlineTarget, scope)).map(function (inline) {\n return Location.before(inline);\n });\n }, Option.none);\n };\n var isNotInsideFormatCaretContainer = function (rootNode, elm) {\n return getParentCaretContainer(rootNode, elm) === null;\n };\n var findInsideRootInline = function (isInlineTarget, rootNode, pos) {\n return InlineUtils.findRootInline(isInlineTarget, rootNode, pos).filter(curry(isNotInsideFormatCaretContainer, rootNode));\n };\n var start = function (isInlineTarget, rootNode, pos) {\n var nPos = InlineUtils.normalizeBackwards(pos);\n return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(function (inline) {\n var prevPos = CaretFinder.prevPosition(inline, nPos);\n return prevPos.isNone() ? Option.some(Location.start(inline)) : Option.none();\n });\n };\n var end = function (isInlineTarget, rootNode, pos) {\n var nPos = InlineUtils.normalizeForwards(pos);\n return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(function (inline) {\n var nextPos = CaretFinder.nextPosition(inline, nPos);\n return nextPos.isNone() ? Option.some(Location.end(inline)) : Option.none();\n });\n };\n var after$2 = function (isInlineTarget, rootNode, pos) {\n var nPos = InlineUtils.normalizeBackwards(pos);\n var scope = rescope(rootNode, nPos.container());\n return InlineUtils.findRootInline(isInlineTarget, scope, nPos).fold(function () {\n return CaretFinder.prevPosition(scope, nPos).bind(curry(InlineUtils.findRootInline, isInlineTarget, scope)).map(function (inline) {\n return Location.after(inline);\n });\n }, Option.none);\n };\n var isValidLocation = function (location) {\n return InlineUtils.isRtl(getElement(location)) === false;\n };\n var readLocation = function (isInlineTarget, rootNode, pos) {\n var location = LazyEvaluator.evaluateUntil([\n before$3,\n start,\n end,\n after$2\n ], [\n isInlineTarget,\n rootNode,\n pos\n ]);\n return location.filter(isValidLocation);\n };\n var getElement = function (location) {\n return location.fold(identity, identity, identity, identity);\n };\n var getName = function (location) {\n return location.fold(constant('before'), constant('start'), constant('end'), constant('after'));\n };\n var outside = function (location) {\n return location.fold(Location.before, Location.before, Location.after, Location.after);\n };\n var inside = function (location) {\n return location.fold(Location.start, Location.start, Location.end, Location.end);\n };\n var isEq$1 = function (location1, location2) {\n return getName(location1) === getName(location2) && getElement(location1) === getElement(location2);\n };\n var betweenInlines = function (forward, isInlineTarget, rootNode, from, to, location) {\n return lift2(InlineUtils.findRootInline(isInlineTarget, rootNode, from), InlineUtils.findRootInline(isInlineTarget, rootNode, to), function (fromInline, toInline) {\n if (fromInline !== toInline && InlineUtils.hasSameParentBlock(rootNode, fromInline, toInline)) {\n return Location.after(forward ? fromInline : toInline);\n } else {\n return location;\n }\n }).getOr(location);\n };\n var skipNoMovement = function (fromLocation, toLocation) {\n return fromLocation.fold(constant(true), function (fromLocation) {\n return !isEq$1(fromLocation, toLocation);\n });\n };\n var findLocationTraverse = function (forward, isInlineTarget, rootNode, fromLocation, pos) {\n var from = InlineUtils.normalizePosition(forward, pos);\n var to = CaretFinder.fromPosition(forward, rootNode, from).map(curry(InlineUtils.normalizePosition, forward));\n var location = to.fold(function () {\n return fromLocation.map(outside);\n }, function (to) {\n return readLocation(isInlineTarget, rootNode, to).map(curry(betweenInlines, forward, isInlineTarget, rootNode, from, to)).filter(curry(skipNoMovement, fromLocation));\n });\n return location.filter(isValidLocation);\n };\n var findLocationSimple = function (forward, location) {\n if (forward) {\n return location.fold(compose(Option.some, Location.start), Option.none, compose(Option.some, Location.after), Option.none);\n } else {\n return location.fold(Option.none, compose(Option.some, Location.before), Option.none, compose(Option.some, Location.end));\n }\n };\n var findLocation = function (forward, isInlineTarget, rootNode, pos) {\n var from = InlineUtils.normalizePosition(forward, pos);\n var fromLocation = readLocation(isInlineTarget, rootNode, from);\n return readLocation(isInlineTarget, rootNode, from).bind(curry(findLocationSimple, forward)).orThunk(function () {\n return findLocationTraverse(forward, isInlineTarget, rootNode, fromLocation, pos);\n });\n };\n var BoundaryLocation = {\n readLocation: readLocation,\n findLocation: findLocation,\n prevLocation: curry(findLocation, false),\n nextLocation: curry(findLocation, true),\n getElement: getElement,\n outside: outside,\n inside: inside\n };\n\n var hasSelectionModifyApi = function (editor) {\n return isFunction(editor.selection.getSel().modify);\n };\n var moveRel = function (forward, selection, pos) {\n var delta = forward ? 1 : -1;\n selection.setRng(CaretPosition$1(pos.container(), pos.offset() + delta).toRange());\n selection.getSel().modify('move', forward ? 'forward' : 'backward', 'word');\n return true;\n };\n var moveByWord = function (forward, editor) {\n var rng = editor.selection.getRng();\n var pos = forward ? CaretPosition$1.fromRangeEnd(rng) : CaretPosition$1.fromRangeStart(rng);\n if (!hasSelectionModifyApi(editor)) {\n return false;\n } else if (forward && isBeforeInline(pos)) {\n return moveRel(true, editor.selection, pos);\n } else if (!forward && isAfterInline(pos)) {\n return moveRel(false, editor.selection, pos);\n } else {\n return false;\n }\n };\n var WordSelection = {\n hasSelectionModifyApi: hasSelectionModifyApi,\n moveByWord: moveByWord\n };\n\n var setCaretPosition = function (editor, pos) {\n var rng = editor.dom.createRng();\n rng.setStart(pos.container(), pos.offset());\n rng.setEnd(pos.container(), pos.offset());\n editor.selection.setRng(rng);\n };\n var isFeatureEnabled = function (editor) {\n return editor.settings.inline_boundaries !== false;\n };\n var setSelected = function (state, elm) {\n if (state) {\n elm.setAttribute('data-mce-selected', 'inline-boundary');\n } else {\n elm.removeAttribute('data-mce-selected');\n }\n };\n var renderCaretLocation = function (editor, caret, location) {\n return BoundaryCaret.renderCaret(caret, location).map(function (pos) {\n setCaretPosition(editor, pos);\n return location;\n });\n };\n var findLocation$1 = function (editor, caret, forward) {\n var rootNode = editor.getBody();\n var from = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);\n var location = BoundaryLocation.findLocation(forward, isInlineTarget, rootNode, from);\n return location.bind(function (location) {\n return renderCaretLocation(editor, caret, location);\n });\n };\n var toggleInlines = function (isInlineTarget, dom, elms) {\n var selectedInlines = filter(dom.select('*[data-mce-selected=\"inline-boundary\"]'), isInlineTarget);\n var targetInlines = filter(elms, isInlineTarget);\n each(difference(selectedInlines, targetInlines), curry(setSelected, false));\n each(difference(targetInlines, selectedInlines), curry(setSelected, true));\n };\n var safeRemoveCaretContainer = function (editor, caret) {\n if (editor.selection.isCollapsed() && editor.composing !== true && caret.get()) {\n var pos = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n if (CaretPosition$1.isTextPosition(pos) && InlineUtils.isAtZwsp(pos) === false) {\n setCaretPosition(editor, CaretContainerRemove.removeAndReposition(caret.get(), pos));\n caret.set(null);\n }\n }\n };\n var renderInsideInlineCaret = function (isInlineTarget, editor, caret, elms) {\n if (editor.selection.isCollapsed()) {\n var inlines = filter(elms, isInlineTarget);\n each(inlines, function (inline) {\n var pos = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n BoundaryLocation.readLocation(isInlineTarget, editor.getBody(), pos).bind(function (location) {\n return renderCaretLocation(editor, caret, location);\n });\n });\n }\n };\n var move = function (editor, caret, forward) {\n return function () {\n return isFeatureEnabled(editor) ? findLocation$1(editor, caret, forward).isSome() : false;\n };\n };\n var moveWord = function (forward, editor, caret) {\n return function () {\n return isFeatureEnabled(editor) ? WordSelection.moveByWord(forward, editor) : false;\n };\n };\n var setupSelectedState = function (editor) {\n var caret = Cell(null);\n var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);\n editor.on('NodeChange', function (e) {\n if (isFeatureEnabled(editor)) {\n toggleInlines(isInlineTarget, editor.dom, e.parents);\n safeRemoveCaretContainer(editor, caret);\n renderInsideInlineCaret(isInlineTarget, editor, caret, e.parents);\n }\n });\n return caret;\n };\n var moveNextWord = curry(moveWord, true);\n var movePrevWord = curry(moveWord, false);\n var BoundarySelection = {\n move: move,\n moveNextWord: moveNextWord,\n movePrevWord: movePrevWord,\n setupSelectedState: setupSelectedState,\n setCaretPosition: setCaretPosition\n };\n\n var isFeatureEnabled$1 = function (editor) {\n return editor.settings.inline_boundaries !== false;\n };\n var rangeFromPositions = function (from, to) {\n var range = domGlobals.document.createRange();\n range.setStart(from.container(), from.offset());\n range.setEnd(to.container(), to.offset());\n return range;\n };\n var hasOnlyTwoOrLessPositionsLeft = function (elm) {\n return lift2(CaretFinder.firstPositionIn(elm), CaretFinder.lastPositionIn(elm), function (firstPos, lastPos) {\n var normalizedFirstPos = InlineUtils.normalizePosition(true, firstPos);\n var normalizedLastPos = InlineUtils.normalizePosition(false, lastPos);\n return CaretFinder.nextPosition(elm, normalizedFirstPos).map(function (pos) {\n return pos.isEqual(normalizedLastPos);\n }).getOr(true);\n }).getOr(true);\n };\n var setCaretLocation = function (editor, caret) {\n return function (location) {\n return BoundaryCaret.renderCaret(caret, location).map(function (pos) {\n BoundarySelection.setCaretPosition(editor, pos);\n return true;\n }).getOr(false);\n };\n };\n var deleteFromTo = function (editor, caret, from, to) {\n var rootNode = editor.getBody();\n var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);\n editor.undoManager.ignore(function () {\n editor.selection.setRng(rangeFromPositions(from, to));\n editor.execCommand('Delete');\n BoundaryLocation.readLocation(isInlineTarget, rootNode, CaretPosition$1.fromRangeStart(editor.selection.getRng())).map(BoundaryLocation.inside).map(setCaretLocation(editor, caret));\n });\n editor.nodeChanged();\n };\n var rescope$1 = function (rootNode, node) {\n var parentBlock = getParentBlock(node, rootNode);\n return parentBlock ? parentBlock : rootNode;\n };\n var backspaceDeleteCollapsed = function (editor, caret, forward, from) {\n var rootNode = rescope$1(editor.getBody(), from.container());\n var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);\n var fromLocation = BoundaryLocation.readLocation(isInlineTarget, rootNode, from);\n return fromLocation.bind(function (location) {\n if (forward) {\n return location.fold(constant(Option.some(BoundaryLocation.inside(location))), Option.none, constant(Option.some(BoundaryLocation.outside(location))), Option.none);\n } else {\n return location.fold(Option.none, constant(Option.some(BoundaryLocation.outside(location))), Option.none, constant(Option.some(BoundaryLocation.inside(location))));\n }\n }).map(setCaretLocation(editor, caret)).getOrThunk(function () {\n var toPosition = CaretFinder.navigate(forward, rootNode, from);\n var toLocation = toPosition.bind(function (pos) {\n return BoundaryLocation.readLocation(isInlineTarget, rootNode, pos);\n });\n if (fromLocation.isSome() && toLocation.isSome()) {\n return InlineUtils.findRootInline(isInlineTarget, rootNode, from).map(function (elm) {\n if (hasOnlyTwoOrLessPositionsLeft(elm)) {\n DeleteElement.deleteElement(editor, forward, Element.fromDom(elm));\n return true;\n } else {\n return false;\n }\n }).getOr(false);\n } else {\n return toLocation.bind(function (_) {\n return toPosition.map(function (to) {\n if (forward) {\n deleteFromTo(editor, caret, from, to);\n } else {\n deleteFromTo(editor, caret, to, from);\n }\n return true;\n });\n }).getOr(false);\n }\n });\n };\n var backspaceDelete$3 = function (editor, caret, forward) {\n if (editor.selection.isCollapsed() && isFeatureEnabled$1(editor)) {\n var from = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n return backspaceDeleteCollapsed(editor, caret, forward, from);\n }\n return false;\n };\n var InlineBoundaryDelete = { backspaceDelete: backspaceDelete$3 };\n\n var tableCellRng = Immutable('start', 'end');\n var tableSelection = Immutable('rng', 'table', 'cells');\n var deleteAction = Adt.generate([\n { removeTable: ['element'] },\n { emptyCells: ['cells'] }\n ]);\n var isRootFromElement = function (root) {\n return curry(eq, root);\n };\n var getClosestCell = function (container, isRoot) {\n return closest$1(Element.fromDom(container), 'td,th', isRoot);\n };\n var getClosestTable = function (cell, isRoot) {\n return ancestor$1(cell, 'table', isRoot);\n };\n var isExpandedCellRng = function (cellRng) {\n return eq(cellRng.start(), cellRng.end()) === false;\n };\n var getTableFromCellRng = function (cellRng, isRoot) {\n return getClosestTable(cellRng.start(), isRoot).bind(function (startParentTable) {\n return getClosestTable(cellRng.end(), isRoot).bind(function (endParentTable) {\n return eq(startParentTable, endParentTable) ? Option.some(startParentTable) : Option.none();\n });\n });\n };\n var getTableCells = function (table) {\n return descendants$1(table, 'td,th');\n };\n var getCellRangeFromStartTable = function (cellRng, isRoot) {\n return getClosestTable(cellRng.start(), isRoot).bind(function (table) {\n return last(getTableCells(table)).map(function (endCell) {\n return tableCellRng(cellRng.start(), endCell);\n });\n });\n };\n var partialSelection = function (isRoot, rng) {\n var startCell = getClosestCell(rng.startContainer, isRoot);\n var endCell = getClosestCell(rng.endContainer, isRoot);\n return rng.collapsed ? Option.none() : lift2(startCell, endCell, tableCellRng).fold(function () {\n return startCell.fold(function () {\n return endCell.bind(function (endCell) {\n return getClosestTable(endCell, isRoot).bind(function (table) {\n return head(getTableCells(table)).map(function (startCell) {\n return tableCellRng(startCell, endCell);\n });\n });\n });\n }, function (startCell) {\n return getClosestTable(startCell, isRoot).bind(function (table) {\n return last(getTableCells(table)).map(function (endCell) {\n return tableCellRng(startCell, endCell);\n });\n });\n });\n }, function (cellRng) {\n return isWithinSameTable(isRoot, cellRng) ? Option.none() : getCellRangeFromStartTable(cellRng, isRoot);\n });\n };\n var isWithinSameTable = function (isRoot, cellRng) {\n return getTableFromCellRng(cellRng, isRoot).isSome();\n };\n var getCellRng = function (rng, isRoot) {\n var startCell = getClosestCell(rng.startContainer, isRoot);\n var endCell = getClosestCell(rng.endContainer, isRoot);\n return lift2(startCell, endCell, tableCellRng).filter(isExpandedCellRng).filter(function (cellRng) {\n return isWithinSameTable(isRoot, cellRng);\n }).orThunk(function () {\n return partialSelection(isRoot, rng);\n });\n };\n var getTableSelectionFromCellRng = function (cellRng, isRoot) {\n return getTableFromCellRng(cellRng, isRoot).map(function (table) {\n return tableSelection(cellRng, table, getTableCells(table));\n });\n };\n var getTableSelectionFromRng = function (root, rng) {\n var isRoot = isRootFromElement(root);\n return getCellRng(rng, isRoot).bind(function (cellRng) {\n return getTableSelectionFromCellRng(cellRng, isRoot);\n });\n };\n var getCellIndex = function (cells, cell) {\n return findIndex(cells, function (x) {\n return eq(x, cell);\n });\n };\n var getSelectedCells = function (tableSelection) {\n return lift2(getCellIndex(tableSelection.cells(), tableSelection.rng().start()), getCellIndex(tableSelection.cells(), tableSelection.rng().end()), function (startIndex, endIndex) {\n return tableSelection.cells().slice(startIndex, endIndex + 1);\n });\n };\n var getAction = function (tableSelection) {\n return getSelectedCells(tableSelection).map(function (selected) {\n var cells = tableSelection.cells();\n return selected.length === cells.length ? deleteAction.removeTable(tableSelection.table()) : deleteAction.emptyCells(selected);\n });\n };\n var getActionFromCells = function (cells) {\n return deleteAction.emptyCells(cells);\n };\n var getActionFromRange = function (root, rng) {\n return getTableSelectionFromRng(root, rng).bind(getAction);\n };\n var TableDeleteAction = {\n getActionFromRange: getActionFromRange,\n getActionFromCells: getActionFromCells\n };\n\n var getRanges = function (selection) {\n var ranges = [];\n if (selection) {\n for (var i = 0; i < selection.rangeCount; i++) {\n ranges.push(selection.getRangeAt(i));\n }\n }\n return ranges;\n };\n var getSelectedNodes = function (ranges) {\n return bind(ranges, function (range) {\n var node = getSelectedNode(range);\n return node ? [Element.fromDom(node)] : [];\n });\n };\n var hasMultipleRanges = function (selection) {\n return getRanges(selection).length > 1;\n };\n var MultiRange = {\n getRanges: getRanges,\n getSelectedNodes: getSelectedNodes,\n hasMultipleRanges: hasMultipleRanges\n };\n\n var getCellsFromRanges = function (ranges) {\n return filter(MultiRange.getSelectedNodes(ranges), isTableCell);\n };\n var getCellsFromElement = function (elm) {\n var selectedCells = descendants$1(elm, 'td[data-mce-selected],th[data-mce-selected]');\n return selectedCells;\n };\n var getCellsFromElementOrRanges = function (ranges, element) {\n var selectedCells = getCellsFromElement(element);\n var rangeCells = getCellsFromRanges(ranges);\n return selectedCells.length > 0 ? selectedCells : rangeCells;\n };\n var getCellsFromEditor = function (editor) {\n return getCellsFromElementOrRanges(MultiRange.getRanges(editor.selection.getSel()), Element.fromDom(editor.getBody()));\n };\n var TableCellSelection = {\n getCellsFromRanges: getCellsFromRanges,\n getCellsFromElement: getCellsFromElement,\n getCellsFromElementOrRanges: getCellsFromElementOrRanges,\n getCellsFromEditor: getCellsFromEditor\n };\n\n var emptyCells = function (editor, cells) {\n each(cells, PaddingBr.fillWithPaddingBr);\n editor.selection.setCursorLocation(cells[0].dom(), 0);\n return true;\n };\n var deleteTableElement = function (editor, table) {\n DeleteElement.deleteElement(editor, false, table);\n return true;\n };\n var deleteCellRange = function (editor, rootElm, rng) {\n return TableDeleteAction.getActionFromRange(rootElm, rng).map(function (action) {\n return action.fold(curry(deleteTableElement, editor), curry(emptyCells, editor));\n });\n };\n var deleteCaptionRange = function (editor, caption) {\n return emptyElement(editor, caption);\n };\n var deleteTableRange = function (editor, rootElm, rng, startElm) {\n return getParentCaption(rootElm, startElm).fold(function () {\n return deleteCellRange(editor, rootElm, rng);\n }, function (caption) {\n return deleteCaptionRange(editor, caption);\n }).getOr(false);\n };\n var deleteRange$1 = function (editor, startElm) {\n var rootNode = Element.fromDom(editor.getBody());\n var rng = editor.selection.getRng();\n var selectedCells = TableCellSelection.getCellsFromEditor(editor);\n return selectedCells.length !== 0 ? emptyCells(editor, selectedCells) : deleteTableRange(editor, rootNode, rng, startElm);\n };\n var getParentCell = function (rootElm, elm) {\n return find(Parents.parentsAndSelf(elm, rootElm), isTableCell);\n };\n var getParentCaption = function (rootElm, elm) {\n return find(Parents.parentsAndSelf(elm, rootElm), function (elm) {\n return name(elm) === 'caption';\n });\n };\n var deleteBetweenCells = function (editor, rootElm, forward, fromCell, from) {\n return CaretFinder.navigate(forward, editor.getBody(), from).bind(function (to) {\n return getParentCell(rootElm, Element.fromDom(to.getNode())).map(function (toCell) {\n return eq(toCell, fromCell) === false;\n });\n });\n };\n var emptyElement = function (editor, elm) {\n PaddingBr.fillWithPaddingBr(elm);\n editor.selection.setCursorLocation(elm.dom(), 0);\n return Option.some(true);\n };\n var isDeleteOfLastCharPos = function (fromCaption, forward, from, to) {\n return CaretFinder.firstPositionIn(fromCaption.dom()).bind(function (first) {\n return CaretFinder.lastPositionIn(fromCaption.dom()).map(function (last) {\n return forward ? from.isEqual(first) && to.isEqual(last) : from.isEqual(last) && to.isEqual(first);\n });\n }).getOr(true);\n };\n var emptyCaretCaption = function (editor, elm) {\n return emptyElement(editor, elm);\n };\n var validateCaretCaption = function (rootElm, fromCaption, to) {\n return getParentCaption(rootElm, Element.fromDom(to.getNode())).map(function (toCaption) {\n return eq(toCaption, fromCaption) === false;\n });\n };\n var deleteCaretInsideCaption = function (editor, rootElm, forward, fromCaption, from) {\n return CaretFinder.navigate(forward, editor.getBody(), from).bind(function (to) {\n return isDeleteOfLastCharPos(fromCaption, forward, from, to) ? emptyCaretCaption(editor, fromCaption) : validateCaretCaption(rootElm, fromCaption, to);\n }).or(Option.some(true));\n };\n var deleteCaretCells = function (editor, forward, rootElm, startElm) {\n var from = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n return getParentCell(rootElm, startElm).bind(function (fromCell) {\n return Empty.isEmpty(fromCell) ? emptyElement(editor, fromCell) : deleteBetweenCells(editor, rootElm, forward, fromCell, from);\n });\n };\n var deleteCaretCaption = function (editor, forward, rootElm, fromCaption) {\n var from = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n return Empty.isEmpty(fromCaption) ? emptyElement(editor, fromCaption) : deleteCaretInsideCaption(editor, rootElm, forward, fromCaption, from);\n };\n var deleteCaret = function (editor, forward, startElm) {\n var rootElm = Element.fromDom(editor.getBody());\n return getParentCaption(rootElm, startElm).fold(function () {\n return deleteCaretCells(editor, forward, rootElm, startElm);\n }, function (fromCaption) {\n return deleteCaretCaption(editor, forward, rootElm, fromCaption);\n }).getOr(false);\n };\n var backspaceDelete$4 = function (editor, forward) {\n var startElm = Element.fromDom(editor.selection.getStart(true));\n var cells = TableCellSelection.getCellsFromEditor(editor);\n return editor.selection.isCollapsed() && cells.length === 0 ? deleteCaret(editor, forward, startElm) : deleteRange$1(editor, startElm);\n };\n var TableDelete = { backspaceDelete: backspaceDelete$4 };\n\n var isEq$2 = FormatUtils.isEq;\n var matchesUnInheritedFormatSelector = function (ed, node, name) {\n var formatList = ed.formatter.get(name);\n if (formatList) {\n for (var i = 0; i < formatList.length; i++) {\n if (formatList[i].inherit === false && ed.dom.is(node, formatList[i].selector)) {\n return true;\n }\n }\n }\n return false;\n };\n var matchParents = function (editor, node, name, vars) {\n var root = editor.dom.getRoot();\n if (node === root) {\n return false;\n }\n node = editor.dom.getParent(node, function (node) {\n if (matchesUnInheritedFormatSelector(editor, node, name)) {\n return true;\n }\n return node.parentNode === root || !!matchNode(editor, node, name, vars, true);\n });\n return matchNode(editor, node, name, vars);\n };\n var matchName = function (dom, node, format) {\n if (isEq$2(node, format.inline)) {\n return true;\n }\n if (isEq$2(node, format.block)) {\n return true;\n }\n if (format.selector) {\n return node.nodeType === 1 && dom.is(node, format.selector);\n }\n };\n var matchItems = function (dom, node, format, itemName, similar, vars) {\n var key, value;\n var items = format[itemName];\n var i;\n if (format.onmatch) {\n return format.onmatch(node, format, itemName);\n }\n if (items) {\n if (typeof items.length === 'undefined') {\n for (key in items) {\n if (items.hasOwnProperty(key)) {\n if (itemName === 'attributes') {\n value = dom.getAttrib(node, key);\n } else {\n value = FormatUtils.getStyle(dom, node, key);\n }\n if (similar && !value && !format.exact) {\n return;\n }\n if ((!similar || format.exact) && !isEq$2(value, FormatUtils.normalizeStyleValue(dom, FormatUtils.replaceVars(items[key], vars), key))) {\n return;\n }\n }\n }\n } else {\n for (i = 0; i < items.length; i++) {\n if (itemName === 'attributes' ? dom.getAttrib(node, items[i]) : FormatUtils.getStyle(dom, node, items[i])) {\n return format;\n }\n }\n }\n }\n return format;\n };\n var matchNode = function (ed, node, name, vars, similar) {\n var formatList = ed.formatter.get(name);\n var format, i, x, classes;\n var dom = ed.dom;\n if (formatList && node) {\n for (i = 0; i < formatList.length; i++) {\n format = formatList[i];\n if (matchName(ed.dom, node, format) && matchItems(dom, node, format, 'attributes', similar, vars) && matchItems(dom, node, format, 'styles', similar, vars)) {\n if (classes = format.classes) {\n for (x = 0; x < classes.length; x++) {\n if (!ed.dom.hasClass(node, classes[x])) {\n return;\n }\n }\n }\n return format;\n }\n }\n }\n };\n var match = function (editor, name, vars, node) {\n var startNode;\n if (node) {\n return matchParents(editor, node, name, vars);\n }\n node = editor.selection.getNode();\n if (matchParents(editor, node, name, vars)) {\n return true;\n }\n startNode = editor.selection.getStart();\n if (startNode !== node) {\n if (matchParents(editor, startNode, name, vars)) {\n return true;\n }\n }\n return false;\n };\n var matchAll = function (editor, names, vars) {\n var startElement;\n var matchedFormatNames = [];\n var checkedMap = {};\n startElement = editor.selection.getStart();\n editor.dom.getParent(startElement, function (node) {\n var i, name;\n for (i = 0; i < names.length; i++) {\n name = names[i];\n if (!checkedMap[name] && matchNode(editor, node, name, vars)) {\n checkedMap[name] = true;\n matchedFormatNames.push(name);\n }\n }\n }, editor.dom.getRoot());\n return matchedFormatNames;\n };\n var canApply = function (editor, name) {\n var formatList = editor.formatter.get(name);\n var startNode, parents, i, x, selector;\n var dom = editor.dom;\n if (formatList) {\n startNode = editor.selection.getStart();\n parents = FormatUtils.getParents(dom, startNode);\n for (x = formatList.length - 1; x >= 0; x--) {\n selector = formatList[x].selector;\n if (!selector || formatList[x].defaultBlock) {\n return true;\n }\n for (i = parents.length - 1; i >= 0; i--) {\n if (dom.is(parents[i], selector)) {\n return true;\n }\n }\n }\n }\n return false;\n };\n var MatchFormat = {\n matchNode: matchNode,\n matchName: matchName,\n match: match,\n matchAll: matchAll,\n canApply: canApply,\n matchesUnInheritedFormatSelector: matchesUnInheritedFormatSelector\n };\n\n var splitText = function (node, offset) {\n return node.splitText(offset);\n };\n var split$1 = function (rng) {\n var startContainer = rng.startContainer, startOffset = rng.startOffset, endContainer = rng.endContainer, endOffset = rng.endOffset;\n if (startContainer === endContainer && NodeType.isText(startContainer)) {\n if (startOffset > 0 && startOffset < startContainer.nodeValue.length) {\n endContainer = splitText(startContainer, startOffset);\n startContainer = endContainer.previousSibling;\n if (endOffset > startOffset) {\n endOffset = endOffset - startOffset;\n startContainer = endContainer = splitText(endContainer, endOffset).previousSibling;\n endOffset = endContainer.nodeValue.length;\n startOffset = 0;\n } else {\n endOffset = 0;\n }\n }\n } else {\n if (NodeType.isText(startContainer) && startOffset > 0 && startOffset < startContainer.nodeValue.length) {\n startContainer = splitText(startContainer, startOffset);\n startOffset = 0;\n }\n if (NodeType.isText(endContainer) && endOffset > 0 && endOffset < endContainer.nodeValue.length) {\n endContainer = splitText(endContainer, endOffset).previousSibling;\n endOffset = endContainer.nodeValue.length;\n }\n }\n return {\n startContainer: startContainer,\n startOffset: startOffset,\n endContainer: endContainer,\n endOffset: endOffset\n };\n };\n var SplitRange = { split: split$1 };\n\n var ZWSP$1 = Zwsp.ZWSP, CARET_ID$1 = '_mce_caret';\n var importNode = function (ownerDocument, node) {\n return ownerDocument.importNode(node, true);\n };\n var getEmptyCaretContainers = function (node) {\n var nodes = [];\n while (node) {\n if (node.nodeType === 3 && node.nodeValue !== ZWSP$1 || node.childNodes.length > 1) {\n return [];\n }\n if (node.nodeType === 1) {\n nodes.push(node);\n }\n node = node.firstChild;\n }\n return nodes;\n };\n var isCaretContainerEmpty = function (node) {\n return getEmptyCaretContainers(node).length > 0;\n };\n var findFirstTextNode = function (node) {\n var walker;\n if (node) {\n walker = new TreeWalker(node, node);\n for (node = walker.current(); node; node = walker.next()) {\n if (node.nodeType === 3) {\n return node;\n }\n }\n }\n return null;\n };\n var createCaretContainer = function (fill) {\n var caretContainer = Element.fromTag('span');\n setAll(caretContainer, {\n 'id': CARET_ID$1,\n 'data-mce-bogus': '1',\n 'data-mce-type': 'format-caret'\n });\n if (fill) {\n append(caretContainer, Element.fromText(ZWSP$1));\n }\n return caretContainer;\n };\n var trimZwspFromCaretContainer = function (caretContainerNode) {\n var textNode = findFirstTextNode(caretContainerNode);\n if (textNode && textNode.nodeValue.charAt(0) === ZWSP$1) {\n textNode.deleteData(0, 1);\n }\n return textNode;\n };\n var removeCaretContainerNode = function (editor, node, moveCaret) {\n if (moveCaret === void 0) {\n moveCaret = true;\n }\n var dom = editor.dom, selection = editor.selection;\n if (isCaretContainerEmpty(node)) {\n DeleteElement.deleteElement(editor, false, Element.fromDom(node), moveCaret);\n } else {\n var rng = selection.getRng();\n var block = dom.getParent(node, dom.isBlock);\n var textNode = trimZwspFromCaretContainer(node);\n if (rng.startContainer === textNode && rng.startOffset > 0) {\n rng.setStart(textNode, rng.startOffset - 1);\n }\n if (rng.endContainer === textNode && rng.endOffset > 0) {\n rng.setEnd(textNode, rng.endOffset - 1);\n }\n dom.remove(node, true);\n if (block && dom.isEmpty(block)) {\n PaddingBr.fillWithPaddingBr(Element.fromDom(block));\n }\n selection.setRng(rng);\n }\n };\n var removeCaretContainer = function (editor, node, moveCaret) {\n if (moveCaret === void 0) {\n moveCaret = true;\n }\n var dom = editor.dom, selection = editor.selection;\n if (!node) {\n node = getParentCaretContainer(editor.getBody(), selection.getStart());\n if (!node) {\n while (node = dom.get(CARET_ID$1)) {\n removeCaretContainerNode(editor, node, false);\n }\n }\n } else {\n removeCaretContainerNode(editor, node, moveCaret);\n }\n };\n var insertCaretContainerNode = function (editor, caretContainer, formatNode) {\n var dom = editor.dom, block = dom.getParent(formatNode, curry(FormatUtils.isTextBlock, editor));\n if (block && dom.isEmpty(block)) {\n formatNode.parentNode.replaceChild(caretContainer, formatNode);\n } else {\n PaddingBr.removeTrailingBr(Element.fromDom(formatNode));\n if (dom.isEmpty(formatNode)) {\n formatNode.parentNode.replaceChild(caretContainer, formatNode);\n } else {\n dom.insertAfter(caretContainer, formatNode);\n }\n }\n };\n var appendNode = function (parentNode, node) {\n parentNode.appendChild(node);\n return node;\n };\n var insertFormatNodesIntoCaretContainer = function (formatNodes, caretContainer) {\n var innerMostFormatNode = foldr(formatNodes, function (parentNode, formatNode) {\n return appendNode(parentNode, formatNode.cloneNode(false));\n }, caretContainer);\n return appendNode(innerMostFormatNode, innerMostFormatNode.ownerDocument.createTextNode(ZWSP$1));\n };\n var applyCaretFormat = function (editor, name, vars) {\n var rng, caretContainer, textNode, offset, bookmark, container, text;\n var selection = editor.selection;\n rng = selection.getRng(true);\n offset = rng.startOffset;\n container = rng.startContainer;\n text = container.nodeValue;\n caretContainer = getParentCaretContainer(editor.getBody(), selection.getStart());\n if (caretContainer) {\n textNode = findFirstTextNode(caretContainer);\n }\n var wordcharRegex = /[^\\s\\u00a0\\u00ad\\u200b\\ufeff]/;\n if (text && offset > 0 && offset < text.length && wordcharRegex.test(text.charAt(offset)) && wordcharRegex.test(text.charAt(offset - 1))) {\n bookmark = selection.getBookmark();\n rng.collapse(true);\n rng = ExpandRange.expandRng(editor, rng, editor.formatter.get(name));\n rng = SplitRange.split(rng);\n editor.formatter.apply(name, vars, rng);\n selection.moveToBookmark(bookmark);\n } else {\n if (!caretContainer || textNode.nodeValue !== ZWSP$1) {\n caretContainer = importNode(editor.getDoc(), createCaretContainer(true).dom());\n textNode = caretContainer.firstChild;\n rng.insertNode(caretContainer);\n offset = 1;\n editor.formatter.apply(name, vars, caretContainer);\n } else {\n editor.formatter.apply(name, vars, caretContainer);\n }\n selection.setCursorLocation(textNode, offset);\n }\n };\n var removeCaretFormat = function (editor, name, vars, similar) {\n var dom = editor.dom, selection = editor.selection;\n var container, offset, bookmark;\n var hasContentAfter, node, formatNode;\n var parents = [], rng = selection.getRng();\n var caretContainer;\n container = rng.startContainer;\n offset = rng.startOffset;\n node = container;\n if (container.nodeType === 3) {\n if (offset !== container.nodeValue.length) {\n hasContentAfter = true;\n }\n node = node.parentNode;\n }\n while (node) {\n if (MatchFormat.matchNode(editor, node, name, vars, similar)) {\n formatNode = node;\n break;\n }\n if (node.nextSibling) {\n hasContentAfter = true;\n }\n parents.push(node);\n node = node.parentNode;\n }\n if (!formatNode) {\n return;\n }\n if (hasContentAfter) {\n bookmark = selection.getBookmark();\n rng.collapse(true);\n var expandedRng = ExpandRange.expandRng(editor, rng, editor.formatter.get(name), true);\n expandedRng = SplitRange.split(expandedRng);\n editor.formatter.remove(name, vars, expandedRng);\n selection.moveToBookmark(bookmark);\n } else {\n caretContainer = getParentCaretContainer(editor.getBody(), formatNode);\n var newCaretContainer = createCaretContainer(false).dom();\n var caretNode = insertFormatNodesIntoCaretContainer(parents, newCaretContainer);\n if (caretContainer) {\n insertCaretContainerNode(editor, newCaretContainer, caretContainer);\n } else {\n insertCaretContainerNode(editor, newCaretContainer, formatNode);\n }\n removeCaretContainerNode(editor, caretContainer, false);\n selection.setCursorLocation(caretNode, 1);\n if (dom.isEmpty(formatNode)) {\n dom.remove(formatNode);\n }\n }\n };\n var disableCaretContainer = function (editor, keyCode) {\n var selection = editor.selection, body = editor.getBody();\n removeCaretContainer(editor, null, false);\n if ((keyCode === 8 || keyCode === 46) && selection.isCollapsed() && selection.getStart().innerHTML === ZWSP$1) {\n removeCaretContainer(editor, getParentCaretContainer(body, selection.getStart()));\n }\n if (keyCode === 37 || keyCode === 39) {\n removeCaretContainer(editor, getParentCaretContainer(body, selection.getStart()));\n }\n };\n var setup$2 = function (editor) {\n editor.on('mouseup keydown', function (e) {\n disableCaretContainer(editor, e.keyCode);\n });\n };\n var replaceWithCaretFormat = function (targetNode, formatNodes) {\n var caretContainer = createCaretContainer(false);\n var innerMost = insertFormatNodesIntoCaretContainer(formatNodes, caretContainer.dom());\n before(Element.fromDom(targetNode), caretContainer);\n remove$1(Element.fromDom(targetNode));\n return CaretPosition$1(innerMost, 0);\n };\n var isFormatElement = function (editor, element) {\n var inlineElements = editor.schema.getTextInlineElements();\n return inlineElements.hasOwnProperty(name(element)) && !isCaretNode(element.dom()) && !NodeType.isBogus(element.dom());\n };\n var isEmptyCaretFormatElement = function (element) {\n return isCaretNode(element.dom()) && isCaretContainerEmpty(element.dom());\n };\n\n var getParentInlines = function (rootElm, startElm) {\n var parents = Parents.parentsAndSelf(startElm, rootElm);\n return findIndex(parents, isBlock).fold(constant(parents), function (index) {\n return parents.slice(0, index);\n });\n };\n var hasOnlyOneChild$1 = function (elm) {\n return children(elm).length === 1;\n };\n var deleteLastPosition = function (forward, editor, target, parentInlines) {\n var isFormatElement$1 = curry(isFormatElement, editor);\n var formatNodes = map(filter(parentInlines, isFormatElement$1), function (elm) {\n return elm.dom();\n });\n if (formatNodes.length === 0) {\n DeleteElement.deleteElement(editor, forward, target);\n } else {\n var pos = replaceWithCaretFormat(target.dom(), formatNodes);\n editor.selection.setRng(pos.toRange());\n }\n };\n var deleteCaret$1 = function (editor, forward) {\n var rootElm = Element.fromDom(editor.getBody());\n var startElm = Element.fromDom(editor.selection.getStart());\n var parentInlines = filter(getParentInlines(rootElm, startElm), hasOnlyOneChild$1);\n return last(parentInlines).map(function (target) {\n var fromPos = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n if (DeleteUtils.willDeleteLastPositionInElement(forward, fromPos, target.dom()) && !isEmptyCaretFormatElement(target)) {\n deleteLastPosition(forward, editor, target, parentInlines);\n return true;\n } else {\n return false;\n }\n }).getOr(false);\n };\n var backspaceDelete$5 = function (editor, forward) {\n return editor.selection.isCollapsed() ? deleteCaret$1(editor, forward) : false;\n };\n var InlineFormatDelete = { backspaceDelete: backspaceDelete$5 };\n\n var getPos$1 = function (elm) {\n var x = 0, y = 0;\n var offsetParent = elm;\n while (offsetParent && offsetParent.nodeType) {\n x += offsetParent.offsetLeft || 0;\n y += offsetParent.offsetTop || 0;\n offsetParent = offsetParent.offsetParent;\n }\n return {\n x: x,\n y: y\n };\n };\n var fireScrollIntoViewEvent = function (editor, elm, alignToTop) {\n var scrollEvent = {\n elm: elm,\n alignToTop: alignToTop\n };\n editor.fire('scrollIntoView', scrollEvent);\n return scrollEvent.isDefaultPrevented();\n };\n var scrollElementIntoView = function (editor, elm, alignToTop) {\n var y, viewPort;\n var dom = editor.dom;\n var root = dom.getRoot();\n var viewPortY, viewPortH, offsetY = 0;\n if (fireScrollIntoViewEvent(editor, elm, alignToTop)) {\n return;\n }\n if (!NodeType.isElement(elm)) {\n return;\n }\n if (alignToTop === false) {\n offsetY = elm.offsetHeight;\n }\n if (root.nodeName !== 'BODY') {\n var scrollContainer = editor.selection.getScrollContainer();\n if (scrollContainer) {\n y = getPos$1(elm).y - getPos$1(scrollContainer).y + offsetY;\n viewPortH = scrollContainer.clientHeight;\n viewPortY = scrollContainer.scrollTop;\n if (y < viewPortY || y + 25 > viewPortY + viewPortH) {\n scrollContainer.scrollTop = y < viewPortY ? y : y - viewPortH + 25;\n }\n return;\n }\n }\n viewPort = dom.getViewPort(editor.getWin());\n y = dom.getPos(elm).y + offsetY;\n viewPortY = viewPort.y;\n viewPortH = viewPort.h;\n if (y < viewPort.y || y + 25 > viewPortY + viewPortH) {\n editor.getWin().scrollTo(0, y < viewPortY ? y : y - viewPortH + 25);\n }\n };\n var getViewPortRect = function (editor) {\n if (editor.inline) {\n return editor.getBody().getBoundingClientRect();\n } else {\n var win = editor.getWin();\n return {\n left: 0,\n right: win.innerWidth,\n top: 0,\n bottom: win.innerHeight,\n width: win.innerWidth,\n height: win.innerHeight\n };\n }\n };\n var scrollBy = function (editor, dx, dy) {\n if (editor.inline) {\n editor.getBody().scrollLeft += dx;\n editor.getBody().scrollTop += dy;\n } else {\n editor.getWin().scrollBy(dx, dy);\n }\n };\n var scrollRangeIntoView = function (editor, rng) {\n head(CaretPosition.fromRangeStart(rng).getClientRects()).each(function (rngRect) {\n var bodyRect = getViewPortRect(editor);\n var overflow = getOverflow(bodyRect, rngRect);\n var margin = 4;\n var dx = overflow.x > 0 ? overflow.x + margin : overflow.x - margin;\n var dy = overflow.y > 0 ? overflow.y + margin : overflow.y - margin;\n scrollBy(editor, overflow.x !== 0 ? dx : 0, overflow.y !== 0 ? dy : 0);\n });\n };\n var ScrollIntoView = {\n scrollElementIntoView: scrollElementIntoView,\n scrollRangeIntoView: scrollRangeIntoView\n };\n\n var isContentEditableTrue$2 = NodeType.isContentEditableTrue;\n var isContentEditableFalse$6 = NodeType.isContentEditableFalse;\n var showCaret = function (direction, editor, node, before, scrollIntoView) {\n return editor._selectionOverrides.showCaret(direction, node, before, scrollIntoView);\n };\n var getNodeRange = function (node) {\n var rng = node.ownerDocument.createRange();\n rng.selectNode(node);\n return rng;\n };\n var selectNode = function (editor, node) {\n var e = editor.fire('BeforeObjectSelected', { target: node });\n if (e.isDefaultPrevented()) {\n return null;\n }\n return getNodeRange(node);\n };\n var renderCaretAtRange = function (editor, range, scrollIntoView) {\n var normalizedRange = normalizeRange(1, editor.getBody(), range);\n var caretPosition = CaretPosition$1.fromRangeStart(normalizedRange);\n var caretPositionNode = caretPosition.getNode();\n if (isContentEditableFalse$6(caretPositionNode)) {\n return showCaret(1, editor, caretPositionNode, !caretPosition.isAtEnd(), false);\n }\n var caretPositionBeforeNode = caretPosition.getNode(true);\n if (isContentEditableFalse$6(caretPositionBeforeNode)) {\n return showCaret(1, editor, caretPositionBeforeNode, false, false);\n }\n var ceRoot = editor.dom.getParent(caretPosition.getNode(), function (node) {\n return isContentEditableFalse$6(node) || isContentEditableTrue$2(node);\n });\n if (isContentEditableFalse$6(ceRoot)) {\n return showCaret(1, editor, ceRoot, false, scrollIntoView);\n }\n return null;\n };\n var renderRangeCaret = function (editor, range, scrollIntoView) {\n if (!range || !range.collapsed) {\n return range;\n }\n var caretRange = renderCaretAtRange(editor, range, scrollIntoView);\n if (caretRange) {\n return caretRange;\n }\n return range;\n };\n var moveToRange = function (editor, rng) {\n editor.selection.setRng(rng);\n ScrollIntoView.scrollRangeIntoView(editor, editor.selection.getRng());\n };\n\n var trimEmptyTextNode$1 = function (dom, node) {\n if (NodeType.isText(node) && node.data.length === 0) {\n dom.remove(node);\n }\n };\n var deleteContentAndShowCaret = function (editor, range, node, direction, forward, peekCaretPosition) {\n var caretRange = showCaret(direction, editor, peekCaretPosition.getNode(!forward), forward, true);\n if (range.collapsed) {\n var deleteRange = range.cloneRange();\n if (forward) {\n deleteRange.setEnd(caretRange.startContainer, caretRange.startOffset);\n } else {\n deleteRange.setStart(caretRange.endContainer, caretRange.endOffset);\n }\n deleteRange.deleteContents();\n } else {\n range.deleteContents();\n }\n editor.selection.setRng(caretRange);\n trimEmptyTextNode$1(editor.dom, node);\n return true;\n };\n var deleteCefBoundaryText = function (editor, forward) {\n var range = editor.selection.getRng();\n if (!NodeType.isText(range.commonAncestorContainer)) {\n return false;\n }\n var direction = forward ? HDirection.Forwards : HDirection.Backwards;\n var caretWalker = CaretWalker(editor.getBody());\n var getNextVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.next);\n var getPrevVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.prev);\n var getNextPosFn = forward ? getNextVisualCaretPosition : getPrevVisualCaretPosition;\n var isBeforeContentEditableFalseFn = forward ? isBeforeContentEditableFalse : isAfterContentEditableFalse;\n var caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n var nextCaretPosition = InlineUtils.normalizePosition(forward, getNextPosFn(caretPosition));\n if (!nextCaretPosition) {\n return false;\n } else if (isBeforeContentEditableFalseFn(nextCaretPosition)) {\n return deleteContentAndShowCaret(editor, range, caretPosition.getNode(), direction, forward, nextCaretPosition);\n }\n var peekCaretPosition = getNextPosFn(nextCaretPosition);\n if (peekCaretPosition && isBeforeContentEditableFalseFn(peekCaretPosition)) {\n if (isMoveInsideSameBlock(nextCaretPosition, peekCaretPosition)) {\n return deleteContentAndShowCaret(editor, range, caretPosition.getNode(), direction, forward, peekCaretPosition);\n }\n }\n return false;\n };\n var backspaceDelete$6 = function (editor, forward) {\n return deleteCefBoundaryText(editor, forward);\n };\n var CefBoundaryDelete = { backspaceDelete: backspaceDelete$6 };\n\n var nativeCommand = function (editor, command) {\n editor.getDoc().execCommand(command, false, null);\n };\n var deleteCommand = function (editor) {\n if (CefDelete.backspaceDelete(editor, false)) {\n return;\n } else if (CefBoundaryDelete.backspaceDelete(editor, false)) {\n return;\n } else if (InlineBoundaryDelete.backspaceDelete(editor, false)) {\n return;\n } else if (BlockBoundaryDelete.backspaceDelete(editor, false)) {\n return;\n } else if (TableDelete.backspaceDelete(editor)) {\n return;\n } else if (BlockRangeDelete.backspaceDelete(editor, false)) {\n return;\n } else if (InlineFormatDelete.backspaceDelete(editor, false)) {\n return;\n } else {\n nativeCommand(editor, 'Delete');\n DeleteUtils.paddEmptyBody(editor);\n }\n };\n var forwardDeleteCommand = function (editor) {\n if (CefDelete.backspaceDelete(editor, true)) {\n return;\n } else if (CefBoundaryDelete.backspaceDelete(editor, true)) {\n return;\n } else if (InlineBoundaryDelete.backspaceDelete(editor, true)) {\n return;\n } else if (BlockBoundaryDelete.backspaceDelete(editor, true)) {\n return;\n } else if (TableDelete.backspaceDelete(editor)) {\n return;\n } else if (BlockRangeDelete.backspaceDelete(editor, true)) {\n return;\n } else if (InlineFormatDelete.backspaceDelete(editor, true)) {\n return;\n } else {\n nativeCommand(editor, 'ForwardDelete');\n }\n };\n var DeleteCommands = {\n deleteCommand: deleteCommand,\n forwardDeleteCommand: forwardDeleteCommand\n };\n\n var getSpecifiedFontProp = function (propName, rootElm, elm) {\n var getProperty = function (elm) {\n return getRaw(elm, propName);\n };\n var isRoot = function (elm) {\n return eq(Element.fromDom(rootElm), elm);\n };\n return closest(Element.fromDom(elm), function (elm) {\n return getProperty(elm).isSome();\n }, isRoot).bind(getProperty);\n };\n var round$1 = function (number, precision) {\n var factor = Math.pow(10, precision);\n return Math.round(number * factor) / factor;\n };\n var toPt = function (fontSize, precision) {\n if (/[0-9.]+px$/.test(fontSize)) {\n return round$1(parseInt(fontSize, 10) * 72 / 96, precision || 0) + 'pt';\n }\n return fontSize;\n };\n var normalizeFontFamily = function (fontFamily) {\n return fontFamily.replace(/[\\'\\\"\\\\]/g, '').replace(/,\\s+/g, ',');\n };\n var getComputedFontProp = function (propName, elm) {\n return Option.from(DOMUtils$1.DOM.getStyle(elm, propName, true));\n };\n var getFontProp = function (propName) {\n return function (rootElm, elm) {\n return Option.from(elm).map(Element.fromDom).filter(isElement).bind(function (element) {\n return getSpecifiedFontProp(propName, rootElm, element.dom()).or(getComputedFontProp(propName, element.dom()));\n }).getOr('');\n };\n };\n var FontInfo = {\n getFontSize: getFontProp('font-size'),\n getFontFamily: compose(normalizeFontFamily, getFontProp('font-family')),\n toPt: toPt\n };\n\n var findFirstCaretElement = function (editor) {\n return CaretFinder.firstPositionIn(editor.getBody()).map(function (caret) {\n var container = caret.container();\n return NodeType.isText(container) ? container.parentNode : container;\n });\n };\n var isRangeAtStartOfNode = function (rng, root) {\n return rng.startContainer === root && rng.startOffset === 0;\n };\n var getCaretElement = function (editor) {\n return Option.from(editor.selection.getRng()).bind(function (rng) {\n var root = editor.getBody();\n return isRangeAtStartOfNode(rng, root) ? Option.none() : Option.from(editor.selection.getStart(true));\n });\n };\n var fromFontSizeNumber = function (editor, value) {\n if (/^[0-9\\.]+$/.test(value)) {\n var fontSizeNumber = parseInt(value, 10);\n if (fontSizeNumber >= 1 && fontSizeNumber <= 7) {\n var fontSizes = Settings.getFontStyleValues(editor);\n var fontClasses = Settings.getFontSizeClasses(editor);\n if (fontClasses) {\n return fontClasses[fontSizeNumber - 1] || value;\n } else {\n return fontSizes[fontSizeNumber - 1] || value;\n }\n } else {\n return value;\n }\n } else {\n return value;\n }\n };\n var fontNameAction = function (editor, value) {\n editor.formatter.toggle('fontname', { value: fromFontSizeNumber(editor, value) });\n editor.nodeChanged();\n };\n var fontNameQuery = function (editor) {\n return getCaretElement(editor).fold(function () {\n return findFirstCaretElement(editor).map(function (caretElement) {\n return FontInfo.getFontFamily(editor.getBody(), caretElement);\n }).getOr('');\n }, function (caretElement) {\n return FontInfo.getFontFamily(editor.getBody(), caretElement);\n });\n };\n var fontSizeAction = function (editor, value) {\n editor.formatter.toggle('fontsize', { value: fromFontSizeNumber(editor, value) });\n editor.nodeChanged();\n };\n var fontSizeQuery = function (editor) {\n return getCaretElement(editor).fold(function () {\n return findFirstCaretElement(editor).map(function (caretElement) {\n return FontInfo.getFontSize(editor.getBody(), caretElement);\n }).getOr('');\n }, function (caretElement) {\n return FontInfo.getFontSize(editor.getBody(), caretElement);\n });\n };\n\n var isEq$3 = function (rng1, rng2) {\n return rng1 && rng2 && (rng1.startContainer === rng2.startContainer && rng1.startOffset === rng2.startOffset) && (rng1.endContainer === rng2.endContainer && rng1.endOffset === rng2.endOffset);\n };\n var RangeCompare = { isEq: isEq$3 };\n\n var findParent = function (node, rootNode, predicate) {\n while (node && node !== rootNode) {\n if (predicate(node)) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n };\n var hasParent = function (node, rootNode, predicate) {\n return findParent(node, rootNode, predicate) !== null;\n };\n var hasParentWithName = function (node, rootNode, name) {\n return hasParent(node, rootNode, function (node) {\n return node.nodeName === name;\n });\n };\n var isTable$2 = function (node) {\n return node && node.nodeName === 'TABLE';\n };\n var isTableCell$3 = function (node) {\n return node && /^(TD|TH|CAPTION)$/.test(node.nodeName);\n };\n var isCeFalseCaretContainer = function (node, rootNode) {\n return isCaretContainer(node) && hasParent(node, rootNode, isCaretNode) === false;\n };\n var hasBrBeforeAfter = function (dom, node, left) {\n var walker = new TreeWalker(node, dom.getParent(node.parentNode, dom.isBlock) || dom.getRoot());\n while (node = walker[left ? 'prev' : 'next']()) {\n if (NodeType.isBr(node)) {\n return true;\n }\n }\n };\n var isPrevNode = function (node, name) {\n return node.previousSibling && node.previousSibling.nodeName === name;\n };\n var hasContentEditableFalseParent = function (body, node) {\n while (node && node !== body) {\n if (NodeType.isContentEditableFalse(node)) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n };\n var findTextNodeRelative = function (dom, isAfterNode, collapsed, left, startNode) {\n var walker, lastInlineElement, parentBlockContainer;\n var body = dom.getRoot();\n var node;\n var nonEmptyElementsMap = dom.schema.getNonEmptyElements();\n parentBlockContainer = dom.getParent(startNode.parentNode, dom.isBlock) || body;\n if (left && NodeType.isBr(startNode) && isAfterNode && dom.isEmpty(parentBlockContainer)) {\n return Option.some(CaretPosition(startNode.parentNode, dom.nodeIndex(startNode)));\n }\n walker = new TreeWalker(startNode, parentBlockContainer);\n while (node = walker[left ? 'prev' : 'next']()) {\n if (dom.getContentEditableParent(node) === 'false' || isCeFalseCaretContainer(node, body)) {\n return Option.none();\n }\n if (NodeType.isText(node) && node.nodeValue.length > 0) {\n if (hasParentWithName(node, body, 'A') === false) {\n return Option.some(CaretPosition(node, left ? node.nodeValue.length : 0));\n }\n return Option.none();\n }\n if (dom.isBlock(node) || nonEmptyElementsMap[node.nodeName.toLowerCase()]) {\n return Option.none();\n }\n lastInlineElement = node;\n }\n if (collapsed && lastInlineElement) {\n return Option.some(CaretPosition(lastInlineElement, 0));\n }\n return Option.none();\n };\n var normalizeEndPoint = function (dom, collapsed, start, rng) {\n var container, offset, walker;\n var body = dom.getRoot();\n var node, nonEmptyElementsMap;\n var directionLeft, isAfterNode, normalized = false;\n container = rng[(start ? 'start' : 'end') + 'Container'];\n offset = rng[(start ? 'start' : 'end') + 'Offset'];\n isAfterNode = NodeType.isElement(container) && offset === container.childNodes.length;\n nonEmptyElementsMap = dom.schema.getNonEmptyElements();\n directionLeft = start;\n if (isCaretContainer(container)) {\n return Option.none();\n }\n if (NodeType.isElement(container) && offset > container.childNodes.length - 1) {\n directionLeft = false;\n }\n if (NodeType.isDocument(container)) {\n container = body;\n offset = 0;\n }\n if (container === body) {\n if (directionLeft) {\n node = container.childNodes[offset > 0 ? offset - 1 : 0];\n if (node) {\n if (isCaretContainer(node)) {\n return Option.none();\n }\n if (nonEmptyElementsMap[node.nodeName] || isTable$2(node)) {\n return Option.none();\n }\n }\n }\n if (container.hasChildNodes()) {\n offset = Math.min(!directionLeft && offset > 0 ? offset - 1 : offset, container.childNodes.length - 1);\n container = container.childNodes[offset];\n offset = NodeType.isText(container) && isAfterNode ? container.data.length : 0;\n if (!collapsed && container === body.lastChild && isTable$2(container)) {\n return Option.none();\n }\n if (hasContentEditableFalseParent(body, container) || isCaretContainer(container)) {\n return Option.none();\n }\n if (container.hasChildNodes() && isTable$2(container) === false) {\n node = container;\n walker = new TreeWalker(container, body);\n do {\n if (NodeType.isContentEditableFalse(node) || isCaretContainer(node)) {\n normalized = false;\n break;\n }\n if (NodeType.isText(node) && node.nodeValue.length > 0) {\n offset = directionLeft ? 0 : node.nodeValue.length;\n container = node;\n normalized = true;\n break;\n }\n if (nonEmptyElementsMap[node.nodeName.toLowerCase()] && !isTableCell$3(node)) {\n offset = dom.nodeIndex(node);\n container = node.parentNode;\n if (!directionLeft) {\n offset++;\n }\n normalized = true;\n break;\n }\n } while (node = directionLeft ? walker.next() : walker.prev());\n }\n }\n }\n if (collapsed) {\n if (NodeType.isText(container) && offset === 0) {\n findTextNodeRelative(dom, isAfterNode, collapsed, true, container).each(function (pos) {\n container = pos.container();\n offset = pos.offset();\n normalized = true;\n });\n }\n if (NodeType.isElement(container)) {\n node = container.childNodes[offset];\n if (!node) {\n node = container.childNodes[offset - 1];\n }\n if (node && NodeType.isBr(node) && !isPrevNode(node, 'A') && !hasBrBeforeAfter(dom, node, false) && !hasBrBeforeAfter(dom, node, true)) {\n findTextNodeRelative(dom, isAfterNode, collapsed, true, node).each(function (pos) {\n container = pos.container();\n offset = pos.offset();\n normalized = true;\n });\n }\n }\n }\n if (directionLeft && !collapsed && NodeType.isText(container) && offset === container.nodeValue.length) {\n findTextNodeRelative(dom, isAfterNode, collapsed, false, container).each(function (pos) {\n container = pos.container();\n offset = pos.offset();\n normalized = true;\n });\n }\n return normalized ? Option.some(CaretPosition(container, offset)) : Option.none();\n };\n var normalize$2 = function (dom, rng) {\n var collapsed = rng.collapsed, normRng = rng.cloneRange();\n var startPos = CaretPosition.fromRangeStart(rng);\n normalizeEndPoint(dom, collapsed, true, normRng).each(function (pos) {\n if (!collapsed || !CaretPosition.isAbove(startPos, pos)) {\n normRng.setStart(pos.container(), pos.offset());\n }\n });\n if (!collapsed) {\n normalizeEndPoint(dom, collapsed, false, normRng).each(function (pos) {\n normRng.setEnd(pos.container(), pos.offset());\n });\n }\n if (collapsed) {\n normRng.collapse(true);\n }\n return RangeCompare.isEq(rng, normRng) ? Option.none() : Option.some(normRng);\n };\n var NormalizeRange = { normalize: normalize$2 };\n\n var hasRightSideContent = function (schema, container, parentBlock) {\n var walker = new TreeWalker(container, parentBlock);\n var node;\n var nonEmptyElementsMap = schema.getNonEmptyElements();\n while (node = walker.next()) {\n if (nonEmptyElementsMap[node.nodeName.toLowerCase()] || node.length > 0) {\n return true;\n }\n }\n };\n var scrollToBr = function (dom, selection, brElm) {\n var marker = dom.create('span', {}, ' ');\n brElm.parentNode.insertBefore(marker, brElm);\n selection.scrollIntoView(marker);\n dom.remove(marker);\n };\n var moveSelectionToBr = function (dom, selection, brElm, extraBr) {\n var rng = dom.createRng();\n if (!extraBr) {\n rng.setStartAfter(brElm);\n rng.setEndAfter(brElm);\n } else {\n rng.setStartBefore(brElm);\n rng.setEndBefore(brElm);\n }\n selection.setRng(rng);\n };\n var insertBrAtCaret = function (editor, evt) {\n var selection = editor.selection;\n var dom = editor.dom;\n var rng = selection.getRng();\n var brElm;\n var extraBr;\n NormalizeRange.normalize(dom, rng).each(function (normRng) {\n rng.setStart(normRng.startContainer, normRng.startOffset);\n rng.setEnd(normRng.endContainer, normRng.endOffset);\n });\n var offset = rng.startOffset;\n var container = rng.startContainer;\n if (container.nodeType === 1 && container.hasChildNodes()) {\n var isAfterLastNodeInContainer = offset > container.childNodes.length - 1;\n container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;\n if (isAfterLastNodeInContainer && container.nodeType === 3) {\n offset = container.nodeValue.length;\n } else {\n offset = 0;\n }\n }\n var parentBlock = dom.getParent(container, dom.isBlock);\n var containerBlock = parentBlock ? dom.getParent(parentBlock.parentNode, dom.isBlock) : null;\n var containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : '';\n var isControlKey = evt && evt.ctrlKey;\n if (containerBlockName === 'LI' && !isControlKey) {\n parentBlock = containerBlock;\n }\n if (container && container.nodeType === 3 && offset >= container.nodeValue.length) {\n if (!hasRightSideContent(editor.schema, container, parentBlock)) {\n brElm = dom.create('br');\n rng.insertNode(brElm);\n rng.setStartAfter(brElm);\n rng.setEndAfter(brElm);\n extraBr = true;\n }\n }\n brElm = dom.create('br');\n rangeInsertNode(dom, rng, brElm);\n scrollToBr(dom, selection, brElm);\n moveSelectionToBr(dom, selection, brElm, extraBr);\n editor.undoManager.add();\n };\n var insertBrBefore = function (editor, inline) {\n var br = Element.fromTag('br');\n before(Element.fromDom(inline), br);\n editor.undoManager.add();\n };\n var insertBrAfter = function (editor, inline) {\n if (!hasBrAfter(editor.getBody(), inline)) {\n after(Element.fromDom(inline), Element.fromTag('br'));\n }\n var br = Element.fromTag('br');\n after(Element.fromDom(inline), br);\n scrollToBr(editor.dom, editor.selection, br.dom());\n moveSelectionToBr(editor.dom, editor.selection, br.dom(), false);\n editor.undoManager.add();\n };\n var isBeforeBr$1 = function (pos) {\n return NodeType.isBr(pos.getNode());\n };\n var hasBrAfter = function (rootNode, startNode) {\n if (isBeforeBr$1(CaretPosition$1.after(startNode))) {\n return true;\n } else {\n return CaretFinder.nextPosition(rootNode, CaretPosition$1.after(startNode)).map(function (pos) {\n return NodeType.isBr(pos.getNode());\n }).getOr(false);\n }\n };\n var isAnchorLink = function (elm) {\n return elm && elm.nodeName === 'A' && 'href' in elm;\n };\n var isInsideAnchor = function (location) {\n return location.fold(constant(false), isAnchorLink, isAnchorLink, constant(false));\n };\n var readInlineAnchorLocation = function (editor) {\n var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);\n var position = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n return BoundaryLocation.readLocation(isInlineTarget, editor.getBody(), position).filter(isInsideAnchor);\n };\n var insertBrOutsideAnchor = function (editor, location) {\n location.fold(noop, curry(insertBrBefore, editor), curry(insertBrAfter, editor), noop);\n };\n var insert = function (editor, evt) {\n var anchorLocation = readInlineAnchorLocation(editor);\n if (anchorLocation.isSome()) {\n anchorLocation.each(curry(insertBrOutsideAnchor, editor));\n } else {\n insertBrAtCaret(editor, evt);\n }\n };\n var InsertBr = { insert: insert };\n\n var create$3 = Immutable('start', 'soffset', 'finish', 'foffset');\n var SimRange = { create: create$3 };\n\n var adt = Adt.generate([\n { before: ['element'] },\n {\n on: [\n 'element',\n 'offset'\n ]\n },\n { after: ['element'] }\n ]);\n var cata = function (subject, onBefore, onOn, onAfter) {\n return subject.fold(onBefore, onOn, onAfter);\n };\n var getStart = function (situ) {\n return situ.fold(identity, identity, identity);\n };\n var before$4 = adt.before;\n var on = adt.on;\n var after$3 = adt.after;\n var Situ = {\n before: before$4,\n on: on,\n after: after$3,\n cata: cata,\n getStart: getStart\n };\n\n var adt$1 = Adt.generate([\n { domRange: ['rng'] },\n {\n relative: [\n 'startSitu',\n 'finishSitu'\n ]\n },\n {\n exact: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n var exactFromRange = function (simRange) {\n return adt$1.exact(simRange.start(), simRange.soffset(), simRange.finish(), simRange.foffset());\n };\n var getStart$1 = function (selection) {\n return selection.match({\n domRange: function (rng) {\n return Element.fromDom(rng.startContainer);\n },\n relative: function (startSitu, finishSitu) {\n return Situ.getStart(startSitu);\n },\n exact: function (start, soffset, finish, foffset) {\n return start;\n }\n });\n };\n var domRange = adt$1.domRange;\n var relative = adt$1.relative;\n var exact = adt$1.exact;\n var getWin = function (selection) {\n var start = getStart$1(selection);\n return defaultView(start);\n };\n var range = SimRange.create;\n var Selection = {\n domRange: domRange,\n relative: relative,\n exact: exact,\n exactFromRange: exactFromRange,\n getWin: getWin,\n range: range\n };\n\n var browser$3 = PlatformDetection$1.detect().browser;\n var clamp = function (offset, element) {\n var max = isText(element) ? get$4(element).length : children(element).length + 1;\n if (offset > max) {\n return max;\n } else if (offset < 0) {\n return 0;\n }\n return offset;\n };\n var normalizeRng = function (rng) {\n return Selection.range(rng.start(), clamp(rng.soffset(), rng.start()), rng.finish(), clamp(rng.foffset(), rng.finish()));\n };\n var isOrContains = function (root, elm) {\n return !NodeType.isRestrictedNode(elm.dom()) && (contains$3(root, elm) || eq(root, elm));\n };\n var isRngInRoot = function (root) {\n return function (rng) {\n return isOrContains(root, rng.start()) && isOrContains(root, rng.finish());\n };\n };\n var shouldStore = function (editor) {\n return editor.inline === true || browser$3.isIE();\n };\n var nativeRangeToSelectionRange = function (r) {\n return Selection.range(Element.fromDom(r.startContainer), r.startOffset, Element.fromDom(r.endContainer), r.endOffset);\n };\n var readRange = function (win) {\n var selection = win.getSelection();\n var rng = !selection || selection.rangeCount === 0 ? Option.none() : Option.from(selection.getRangeAt(0));\n return rng.map(nativeRangeToSelectionRange);\n };\n var getBookmark$2 = function (root) {\n var win = defaultView(root);\n return readRange(win.dom()).filter(isRngInRoot(root));\n };\n var validate = function (root, bookmark) {\n return Option.from(bookmark).filter(isRngInRoot(root)).map(normalizeRng);\n };\n var bookmarkToNativeRng = function (bookmark) {\n var rng = domGlobals.document.createRange();\n try {\n rng.setStart(bookmark.start().dom(), bookmark.soffset());\n rng.setEnd(bookmark.finish().dom(), bookmark.foffset());\n return Option.some(rng);\n } catch (_) {\n return Option.none();\n }\n };\n var store = function (editor) {\n var newBookmark = shouldStore(editor) ? getBookmark$2(Element.fromDom(editor.getBody())) : Option.none();\n editor.bookmark = newBookmark.isSome() ? newBookmark : editor.bookmark;\n };\n var storeNative = function (editor, rng) {\n var root = Element.fromDom(editor.getBody());\n var range = shouldStore(editor) ? Option.from(rng) : Option.none();\n var newBookmark = range.map(nativeRangeToSelectionRange).filter(isRngInRoot(root));\n editor.bookmark = newBookmark.isSome() ? newBookmark : editor.bookmark;\n };\n var getRng = function (editor) {\n var bookmark = editor.bookmark ? editor.bookmark : Option.none();\n return bookmark.bind(curry(validate, Element.fromDom(editor.getBody()))).bind(bookmarkToNativeRng);\n };\n var restore = function (editor) {\n getRng(editor).each(function (rng) {\n editor.selection.setRng(rng);\n });\n };\n var SelectionBookmark = {\n store: store,\n storeNative: storeNative,\n readRange: readRange,\n restore: restore,\n getRng: getRng,\n getBookmark: getBookmark$2,\n validate: validate\n };\n\n var indentElement = function (dom, command, useMargin, value, unit, element) {\n if (dom.getContentEditable(element) === 'false') {\n return;\n }\n var indentStyleName = useMargin ? 'margin' : 'padding';\n indentStyleName = element.nodeName === 'TABLE' ? 'margin' : indentStyleName;\n indentStyleName += dom.getStyle(element, 'direction', true) === 'rtl' ? 'Right' : 'Left';\n if (command === 'outdent') {\n var styleValue = Math.max(0, parseInt(element.style[indentStyleName] || 0, 10) - value);\n dom.setStyle(element, indentStyleName, styleValue ? styleValue + unit : '');\n } else {\n var styleValue = parseInt(element.style[indentStyleName] || 0, 10) + value + unit;\n dom.setStyle(element, indentStyleName, styleValue);\n }\n };\n var isListComponent = function (el) {\n return isList(el) || isListItem(el);\n };\n var parentIsListComponent = function (el) {\n return parent(el).map(isListComponent).getOr(false);\n };\n var getBlocksToIndent = function (editor) {\n return filter(map(editor.selection.getSelectedBlocks(), Element.fromDom), function (el) {\n return !isListComponent(el) && !parentIsListComponent(el);\n });\n };\n var handle = function (editor, command) {\n var settings = editor.settings, dom = editor.dom, selection = editor.selection, formatter = editor.formatter;\n var indentUnit = /[a-z%]+$/i.exec(settings.indentation)[0];\n var indentValue = parseInt(settings.indentation, 10);\n var useMargin = editor.getParam('indent_use_margin', false);\n if (!editor.queryCommandState('InsertUnorderedList') && !editor.queryCommandState('InsertOrderedList')) {\n if (!settings.forced_root_block && !dom.getParent(selection.getNode(), dom.isBlock)) {\n formatter.apply('div');\n }\n }\n each(getBlocksToIndent(editor), function (block) {\n indentElement(dom, command, useMargin, indentValue, indentUnit, block.dom());\n });\n };\n\n var each$a = Tools.each, extend$2 = Tools.extend;\n var map$3 = Tools.map, inArray$2 = Tools.inArray;\n function EditorCommands (editor) {\n var dom, selection, formatter;\n var commands = {\n state: {},\n exec: {},\n value: {}\n };\n var settings = editor.settings, bookmark;\n editor.on('PreInit', function () {\n dom = editor.dom;\n selection = editor.selection;\n settings = editor.settings;\n formatter = editor.formatter;\n });\n var execCommand = function (command, ui, value, args) {\n var func, customCommand, state = false;\n if (editor.removed) {\n return;\n }\n if (!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(command) && (!args || !args.skip_focus)) {\n editor.focus();\n } else {\n SelectionBookmark.restore(editor);\n }\n args = editor.fire('BeforeExecCommand', {\n command: command,\n ui: ui,\n value: value\n });\n if (args.isDefaultPrevented()) {\n return false;\n }\n customCommand = command.toLowerCase();\n if (func = commands.exec[customCommand]) {\n func(customCommand, ui, value);\n editor.fire('ExecCommand', {\n command: command,\n ui: ui,\n value: value\n });\n return true;\n }\n each$a(editor.plugins, function (p) {\n if (p.execCommand && p.execCommand(command, ui, value)) {\n editor.fire('ExecCommand', {\n command: command,\n ui: ui,\n value: value\n });\n state = true;\n return false;\n }\n });\n if (state) {\n return state;\n }\n if (editor.theme && editor.theme.execCommand && editor.theme.execCommand(command, ui, value)) {\n editor.fire('ExecCommand', {\n command: command,\n ui: ui,\n value: value\n });\n return true;\n }\n try {\n state = editor.getDoc().execCommand(command, ui, value);\n } catch (ex) {\n }\n if (state) {\n editor.fire('ExecCommand', {\n command: command,\n ui: ui,\n value: value\n });\n return true;\n }\n return false;\n };\n var queryCommandState = function (command) {\n var func;\n if (editor.quirks.isHidden() || editor.removed) {\n return;\n }\n command = command.toLowerCase();\n if (func = commands.state[command]) {\n return func(command);\n }\n try {\n return editor.getDoc().queryCommandState(command);\n } catch (ex) {\n }\n return false;\n };\n var queryCommandValue = function (command) {\n var func;\n if (editor.quirks.isHidden() || editor.removed) {\n return;\n }\n command = command.toLowerCase();\n if (func = commands.value[command]) {\n return func(command);\n }\n try {\n return editor.getDoc().queryCommandValue(command);\n } catch (ex) {\n }\n };\n var addCommands = function (commandList, type) {\n type = type || 'exec';\n each$a(commandList, function (callback, command) {\n each$a(command.toLowerCase().split(','), function (command) {\n commands[type][command] = callback;\n });\n });\n };\n var addCommand = function (command, callback, scope) {\n command = command.toLowerCase();\n commands.exec[command] = function (command, ui, value, args) {\n return callback.call(scope || editor, ui, value, args);\n };\n };\n var queryCommandSupported = function (command) {\n command = command.toLowerCase();\n if (commands.exec[command]) {\n return true;\n }\n try {\n return editor.getDoc().queryCommandSupported(command);\n } catch (ex) {\n }\n return false;\n };\n var addQueryStateHandler = function (command, callback, scope) {\n command = command.toLowerCase();\n commands.state[command] = function () {\n return callback.call(scope || editor);\n };\n };\n var addQueryValueHandler = function (command, callback, scope) {\n command = command.toLowerCase();\n commands.value[command] = function () {\n return callback.call(scope || editor);\n };\n };\n var hasCustomCommand = function (command) {\n command = command.toLowerCase();\n return !!commands.exec[command];\n };\n extend$2(this, {\n execCommand: execCommand,\n queryCommandState: queryCommandState,\n queryCommandValue: queryCommandValue,\n queryCommandSupported: queryCommandSupported,\n addCommands: addCommands,\n addCommand: addCommand,\n addQueryStateHandler: addQueryStateHandler,\n addQueryValueHandler: addQueryValueHandler,\n hasCustomCommand: hasCustomCommand\n });\n var execNativeCommand = function (command, ui, value) {\n if (ui === undefined) {\n ui = false;\n }\n if (value === undefined) {\n value = null;\n }\n return editor.getDoc().execCommand(command, ui, value);\n };\n var isFormatMatch = function (name) {\n return formatter.match(name);\n };\n var toggleFormat = function (name, value) {\n formatter.toggle(name, value ? { value: value } : undefined);\n editor.nodeChanged();\n };\n var storeSelection = function (type) {\n bookmark = selection.getBookmark(type);\n };\n var restoreSelection = function () {\n selection.moveToBookmark(bookmark);\n };\n addCommands({\n 'mceResetDesignMode,mceBeginUndoLevel': function () {\n },\n 'mceEndUndoLevel,mceAddUndoLevel': function () {\n editor.undoManager.add();\n },\n 'Cut,Copy,Paste': function (command) {\n var doc = editor.getDoc();\n var failed;\n try {\n execNativeCommand(command);\n } catch (ex) {\n failed = true;\n }\n if (command === 'paste' && !doc.queryCommandEnabled(command)) {\n failed = true;\n }\n if (failed || !doc.queryCommandSupported(command)) {\n var msg = editor.translate('Your browser doesn\\'t support direct access to the clipboard. ' + 'Please use the Ctrl+X/C/V keyboard shortcuts instead.');\n if (Env.mac) {\n msg = msg.replace(/Ctrl\\+/g, '\\u2318+');\n }\n editor.notificationManager.open({\n text: msg,\n type: 'error'\n });\n }\n },\n 'unlink': function () {\n if (selection.isCollapsed()) {\n var elm = editor.dom.getParent(editor.selection.getStart(), 'a');\n if (elm) {\n editor.dom.remove(elm, true);\n }\n return;\n }\n formatter.remove('link');\n },\n 'JustifyLeft,JustifyCenter,JustifyRight,JustifyFull,JustifyNone': function (command) {\n var align = command.substring(7);\n if (align === 'full') {\n align = 'justify';\n }\n each$a('left,center,right,justify'.split(','), function (name) {\n if (align !== name) {\n formatter.remove('align' + name);\n }\n });\n if (align !== 'none') {\n toggleFormat('align' + align);\n }\n },\n 'InsertUnorderedList,InsertOrderedList': function (command) {\n var listElm, listParent;\n execNativeCommand(command);\n listElm = dom.getParent(selection.getNode(), 'ol,ul');\n if (listElm) {\n listParent = listElm.parentNode;\n if (/^(H[1-6]|P|ADDRESS|PRE)$/.test(listParent.nodeName)) {\n storeSelection();\n dom.split(listParent, listElm);\n restoreSelection();\n }\n }\n },\n 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': function (command) {\n toggleFormat(command);\n },\n 'ForeColor,HiliteColor': function (command, ui, value) {\n toggleFormat(command, value);\n },\n 'FontName': function (command, ui, value) {\n fontNameAction(editor, value);\n },\n 'FontSize': function (command, ui, value) {\n fontSizeAction(editor, value);\n },\n 'RemoveFormat': function (command) {\n formatter.remove(command);\n },\n 'mceBlockQuote': function () {\n toggleFormat('blockquote');\n },\n 'FormatBlock': function (command, ui, value) {\n return toggleFormat(value || 'p');\n },\n 'mceCleanup': function () {\n var bookmark = selection.getBookmark();\n editor.setContent(editor.getContent());\n selection.moveToBookmark(bookmark);\n },\n 'mceRemoveNode': function (command, ui, value) {\n var node = value || selection.getNode();\n if (node !== editor.getBody()) {\n storeSelection();\n editor.dom.remove(node, true);\n restoreSelection();\n }\n },\n 'mceSelectNodeDepth': function (command, ui, value) {\n var counter = 0;\n dom.getParent(selection.getNode(), function (node) {\n if (node.nodeType === 1 && counter++ === value) {\n selection.select(node);\n return false;\n }\n }, editor.getBody());\n },\n 'mceSelectNode': function (command, ui, value) {\n selection.select(value);\n },\n 'mceInsertContent': function (command, ui, value) {\n InsertContent.insertAtCaret(editor, value);\n },\n 'mceInsertRawHTML': function (command, ui, value) {\n selection.setContent('tiny_mce_marker');\n var content = editor.getContent();\n editor.setContent(content.replace(/tiny_mce_marker/g, function () {\n return value;\n }));\n },\n 'mceToggleFormat': function (command, ui, value) {\n toggleFormat(value);\n },\n 'mceSetContent': function (command, ui, value) {\n editor.setContent(value);\n },\n 'Indent,Outdent': function (command) {\n handle(editor, command);\n },\n 'mceRepaint': function () {\n },\n 'InsertHorizontalRule': function () {\n editor.execCommand('mceInsertContent', false, '
');\n },\n 'mceToggleVisualAid': function () {\n editor.hasVisual = !editor.hasVisual;\n editor.addVisual();\n },\n 'mceReplaceContent': function (command, ui, value) {\n editor.execCommand('mceInsertContent', false, value.replace(/\\{\\$selection\\}/g, selection.getContent({ format: 'text' })));\n },\n 'mceInsertLink': function (command, ui, value) {\n var anchor;\n if (typeof value === 'string') {\n value = { href: value };\n }\n anchor = dom.getParent(selection.getNode(), 'a');\n value.href = value.href.replace(' ', '%20');\n if (!anchor || !value.href) {\n formatter.remove('link');\n }\n if (value.href) {\n formatter.apply('link', value, anchor);\n }\n },\n 'selectAll': function () {\n var editingHost = dom.getParent(selection.getStart(), NodeType.isContentEditableTrue);\n if (editingHost) {\n var rng = dom.createRng();\n rng.selectNodeContents(editingHost);\n selection.setRng(rng);\n }\n },\n 'delete': function () {\n DeleteCommands.deleteCommand(editor);\n },\n 'forwardDelete': function () {\n DeleteCommands.forwardDeleteCommand(editor);\n },\n 'mceNewDocument': function () {\n editor.setContent('');\n },\n 'InsertLineBreak': function (command, ui, value) {\n InsertBr.insert(editor, value);\n return true;\n }\n });\n var alignStates = function (name) {\n return function () {\n var nodes = selection.isCollapsed() ? [dom.getParent(selection.getNode(), dom.isBlock)] : selection.getSelectedBlocks();\n var matches = map$3(nodes, function (node) {\n return !!formatter.matchNode(node, name);\n });\n return inArray$2(matches, true) !== -1;\n };\n };\n addCommands({\n 'JustifyLeft': alignStates('alignleft'),\n 'JustifyCenter': alignStates('aligncenter'),\n 'JustifyRight': alignStates('alignright'),\n 'JustifyFull': alignStates('alignjustify'),\n 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': function (command) {\n return isFormatMatch(command);\n },\n 'mceBlockQuote': function () {\n return isFormatMatch('blockquote');\n },\n 'Outdent': function () {\n var node;\n if (settings.inline_styles) {\n if ((node = dom.getParent(selection.getStart(), dom.isBlock)) && parseInt(node.style.paddingLeft, 10) > 0) {\n return true;\n }\n if ((node = dom.getParent(selection.getEnd(), dom.isBlock)) && parseInt(node.style.paddingLeft, 10) > 0) {\n return true;\n }\n }\n return queryCommandState('InsertUnorderedList') || queryCommandState('InsertOrderedList') || !settings.inline_styles && !!dom.getParent(selection.getNode(), 'BLOCKQUOTE');\n },\n 'InsertUnorderedList,InsertOrderedList': function (command) {\n var list = dom.getParent(selection.getNode(), 'ul,ol');\n return list && (command === 'insertunorderedlist' && list.tagName === 'UL' || command === 'insertorderedlist' && list.tagName === 'OL');\n }\n }, 'state');\n addCommands({\n Undo: function () {\n editor.undoManager.undo();\n },\n Redo: function () {\n editor.undoManager.redo();\n }\n });\n addQueryValueHandler('FontName', function () {\n return fontNameQuery(editor);\n }, this);\n addQueryValueHandler('FontSize', function () {\n return fontSizeQuery(editor);\n }, this);\n }\n\n 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', ' ');\n var Dispatcher = function (settings) {\n var self = this;\n var scope, bindings = {}, toggleEvent;\n var returnFalse = function () {\n return false;\n };\n var returnTrue = function () {\n return true;\n };\n settings = settings || {};\n scope = settings.scope || self;\n toggleEvent = settings.toggleEvent || returnFalse;\n var fire = function (name, args) {\n var handlers, i, l, callback;\n name = name.toLowerCase();\n args = args || {};\n args.type = name;\n if (!args.target) {\n args.target = scope;\n }\n if (!args.preventDefault) {\n args.preventDefault = function () {\n args.isDefaultPrevented = returnTrue;\n };\n args.stopPropagation = function () {\n args.isPropagationStopped = returnTrue;\n };\n args.stopImmediatePropagation = function () {\n args.isImmediatePropagationStopped = returnTrue;\n };\n args.isDefaultPrevented = returnFalse;\n args.isPropagationStopped = returnFalse;\n args.isImmediatePropagationStopped = returnFalse;\n }\n if (settings.beforeFire) {\n settings.beforeFire(args);\n }\n handlers = bindings[name];\n if (handlers) {\n for (i = 0, l = handlers.length; i < l; i++) {\n callback = handlers[i];\n if (callback.once) {\n off(name, callback.func);\n }\n if (args.isImmediatePropagationStopped()) {\n args.stopPropagation();\n return args;\n }\n if (callback.func.call(scope, args) === false) {\n args.preventDefault();\n return args;\n }\n }\n }\n return args;\n };\n var on = function (name, callback, prepend, extra) {\n var handlers, names, i;\n if (callback === false) {\n callback = returnFalse;\n }\n if (callback) {\n callback = { func: callback };\n if (extra) {\n Tools.extend(callback, extra);\n }\n names = name.toLowerCase().split(' ');\n i = names.length;\n while (i--) {\n name = names[i];\n handlers = bindings[name];\n if (!handlers) {\n handlers = bindings[name] = [];\n toggleEvent(name, true);\n }\n if (prepend) {\n handlers.unshift(callback);\n } else {\n handlers.push(callback);\n }\n }\n }\n return self;\n };\n var off = function (name, callback) {\n var i, handlers, bindingName, names, hi;\n if (name) {\n names = name.toLowerCase().split(' ');\n i = names.length;\n while (i--) {\n name = names[i];\n handlers = bindings[name];\n if (!name) {\n for (bindingName in bindings) {\n toggleEvent(bindingName, false);\n delete bindings[bindingName];\n }\n return self;\n }\n if (handlers) {\n if (!callback) {\n handlers.length = 0;\n } else {\n hi = handlers.length;\n while (hi--) {\n if (handlers[hi].func === callback) {\n handlers = handlers.slice(0, hi).concat(handlers.slice(hi + 1));\n bindings[name] = handlers;\n }\n }\n }\n if (!handlers.length) {\n toggleEvent(name, false);\n delete bindings[name];\n }\n }\n }\n } else {\n for (name in bindings) {\n toggleEvent(name, false);\n }\n bindings = {};\n }\n return self;\n };\n var once = function (name, callback, prepend) {\n return on(name, callback, prepend, { once: true });\n };\n var has = function (name) {\n name = name.toLowerCase();\n return !(!bindings[name] || bindings[name].length === 0);\n };\n self.fire = fire;\n self.on = on;\n self.off = off;\n self.once = once;\n self.has = has;\n };\n Dispatcher.isNative = function (name) {\n return !!nativeEvents[name.toLowerCase()];\n };\n\n var getEventDispatcher = function (obj) {\n if (!obj._eventDispatcher) {\n obj._eventDispatcher = new Dispatcher({\n scope: obj,\n toggleEvent: function (name, state) {\n if (Dispatcher.isNative(name) && obj.toggleNativeEvent) {\n obj.toggleNativeEvent(name, state);\n }\n }\n });\n }\n return obj._eventDispatcher;\n };\n var Observable = {\n fire: function (name, args, bubble) {\n var self = this;\n if (self.removed && name !== 'remove' && name !== 'detach') {\n return args;\n }\n args = getEventDispatcher(self).fire(name, args, bubble);\n if (bubble !== false && self.parent) {\n var parent = self.parent();\n while (parent && !args.isPropagationStopped()) {\n parent.fire(name, args, false);\n parent = parent.parent();\n }\n }\n return args;\n },\n on: function (name, callback, prepend) {\n return getEventDispatcher(this).on(name, callback, prepend);\n },\n off: function (name, callback) {\n return getEventDispatcher(this).off(name, callback);\n },\n once: function (name, callback) {\n return getEventDispatcher(this).once(name, callback);\n },\n hasEventListeners: function (name) {\n return getEventDispatcher(this).has(name);\n }\n };\n\n var firePreProcess = function (editor, args) {\n return editor.fire('PreProcess', args);\n };\n var firePostProcess = function (editor, args) {\n return editor.fire('PostProcess', args);\n };\n var fireRemove = function (editor) {\n return editor.fire('remove');\n };\n var fireDetach = function (editor) {\n return editor.fire('detach');\n };\n var fireSwitchMode = function (editor, mode) {\n return editor.fire('SwitchMode', { mode: mode });\n };\n var fireObjectResizeStart = function (editor, target, width, height) {\n editor.fire('ObjectResizeStart', {\n target: target,\n width: width,\n height: height\n });\n };\n var fireObjectResized = function (editor, target, width, height) {\n editor.fire('ObjectResized', {\n target: target,\n width: width,\n height: height\n });\n };\n var Events = {\n firePreProcess: firePreProcess,\n firePostProcess: firePostProcess,\n fireRemove: fireRemove,\n fireDetach: fireDetach,\n fireSwitchMode: fireSwitchMode,\n fireObjectResizeStart: fireObjectResizeStart,\n fireObjectResized: fireObjectResized\n };\n\n var setEditorCommandState = function (editor, cmd, state) {\n try {\n editor.getDoc().execCommand(cmd, false, state);\n } catch (ex) {\n }\n };\n var toggleClass = function (elm, cls, state) {\n if (has$2(elm, cls) && state === false) {\n remove$4(elm, cls);\n } else if (state) {\n add$2(elm, cls);\n }\n };\n var toggleReadOnly = function (editor, state) {\n toggleClass(Element.fromDom(editor.getBody()), 'mce-content-readonly', state);\n if (state) {\n editor.selection.controlSelection.hideResizeRect();\n editor.readonly = true;\n editor.getBody().contentEditable = 'false';\n } else {\n editor.readonly = false;\n editor.getBody().contentEditable = 'true';\n setEditorCommandState(editor, 'StyleWithCSS', false);\n setEditorCommandState(editor, 'enableInlineTableEditing', false);\n setEditorCommandState(editor, 'enableObjectResizing', false);\n editor.focus();\n editor.nodeChanged();\n }\n };\n var setMode = function (editor, mode) {\n if (mode === getMode(editor)) {\n return;\n }\n if (editor.initialized) {\n toggleReadOnly(editor, mode === 'readonly');\n } else {\n editor.on('init', function () {\n toggleReadOnly(editor, mode === 'readonly');\n });\n }\n Events.fireSwitchMode(editor, mode);\n };\n var getMode = function (editor) {\n return editor.readonly ? 'readonly' : 'design';\n };\n var isReadOnly = function (editor) {\n return editor.readonly === true;\n };\n\n var DOM$1 = DOMUtils$1.DOM;\n var customEventRootDelegates;\n var getEventTarget = function (editor, eventName) {\n if (eventName === 'selectionchange') {\n return editor.getDoc();\n }\n if (!editor.inline && /^mouse|touch|click|contextmenu|drop|dragover|dragend/.test(eventName)) {\n return editor.getDoc().documentElement;\n }\n if (editor.settings.event_root) {\n if (!editor.eventRoot) {\n editor.eventRoot = DOM$1.select(editor.settings.event_root)[0];\n }\n return editor.eventRoot;\n }\n return editor.getBody();\n };\n var isListening = function (editor) {\n return !editor.hidden && !editor.readonly;\n };\n var fireEvent = function (editor, eventName, e) {\n if (isListening(editor)) {\n editor.fire(eventName, e);\n } else if (isReadOnly(editor)) {\n e.preventDefault();\n }\n };\n var bindEventDelegate = function (editor, eventName) {\n var eventRootElm, delegate;\n if (!editor.delegates) {\n editor.delegates = {};\n }\n if (editor.delegates[eventName] || editor.removed) {\n return;\n }\n eventRootElm = getEventTarget(editor, eventName);\n if (editor.settings.event_root) {\n if (!customEventRootDelegates) {\n customEventRootDelegates = {};\n editor.editorManager.on('removeEditor', function () {\n var name;\n if (!editor.editorManager.activeEditor) {\n if (customEventRootDelegates) {\n for (name in customEventRootDelegates) {\n editor.dom.unbind(getEventTarget(editor, name));\n }\n customEventRootDelegates = null;\n }\n }\n });\n }\n if (customEventRootDelegates[eventName]) {\n return;\n }\n delegate = function (e) {\n var target = e.target;\n var editors = editor.editorManager.get();\n var i = editors.length;\n while (i--) {\n var body = editors[i].getBody();\n if (body === target || DOM$1.isChildOf(target, body)) {\n fireEvent(editors[i], eventName, e);\n }\n }\n };\n customEventRootDelegates[eventName] = delegate;\n DOM$1.bind(eventRootElm, eventName, delegate);\n } else {\n delegate = function (e) {\n fireEvent(editor, eventName, e);\n };\n DOM$1.bind(eventRootElm, eventName, delegate);\n editor.delegates[eventName] = delegate;\n }\n };\n var EditorObservable = {\n bindPendingEventDelegates: function () {\n var self = this;\n Tools.each(self._pendingNativeEvents, function (name) {\n bindEventDelegate(self, name);\n });\n },\n toggleNativeEvent: function (name, state) {\n var self = this;\n if (name === 'focus' || name === 'blur') {\n return;\n }\n if (state) {\n if (self.initialized) {\n bindEventDelegate(self, name);\n } else {\n if (!self._pendingNativeEvents) {\n self._pendingNativeEvents = [name];\n } else {\n self._pendingNativeEvents.push(name);\n }\n }\n } else if (self.initialized) {\n self.dom.unbind(getEventTarget(self, name), name, self.delegates[name]);\n delete self.delegates[name];\n }\n },\n unbindAllNativeEvents: function () {\n var self = this;\n var body = self.getBody();\n var dom = self.dom;\n var name;\n if (self.delegates) {\n for (name in self.delegates) {\n self.dom.unbind(getEventTarget(self, name), name, self.delegates[name]);\n }\n delete self.delegates;\n }\n if (!self.inline && body && dom) {\n body.onload = null;\n dom.unbind(self.getWin());\n dom.unbind(self.getDoc());\n }\n if (dom) {\n dom.unbind(body);\n dom.unbind(self.getContainer());\n }\n }\n };\n EditorObservable = Tools.extend({}, Observable, EditorObservable);\n var EditorObservable$1 = EditorObservable;\n\n var sectionResult = Immutable('sections', 'settings');\n var detection = PlatformDetection$1.detect();\n var isTouch = detection.deviceType.isTouch();\n var mobilePlugins = [\n 'lists',\n 'autolink',\n 'autosave'\n ];\n var defaultMobileSettings = { theme: 'mobile' };\n var normalizePlugins = function (plugins) {\n var pluginNames = isArray(plugins) ? plugins.join(' ') : plugins;\n var trimmedPlugins = map(isString(pluginNames) ? pluginNames.split(' ') : [], trim$2);\n return filter(trimmedPlugins, function (item) {\n return item.length > 0;\n });\n };\n var filterMobilePlugins = function (plugins) {\n return filter(plugins, curry(contains, mobilePlugins));\n };\n var extractSections = function (keys, settings) {\n var result = bifilter(settings, function (value, key) {\n return contains(keys, key);\n });\n return sectionResult(result.t, result.f);\n };\n var getSection = function (sectionResult, name, defaults) {\n var sections = sectionResult.sections();\n var sectionSettings = sections.hasOwnProperty(name) ? sections[name] : {};\n return Tools.extend({}, defaults, sectionSettings);\n };\n var hasSection = function (sectionResult, name) {\n return sectionResult.sections().hasOwnProperty(name);\n };\n var getDefaultSettings = function (id, documentBaseUrl, editor) {\n return {\n id: id,\n theme: 'modern',\n delta_width: 0,\n delta_height: 0,\n popup_css: '',\n plugins: '',\n document_base_url: documentBaseUrl,\n add_form_submit_trigger: true,\n submit_patch: true,\n add_unload_trigger: true,\n convert_urls: true,\n relative_urls: true,\n remove_script_host: true,\n object_resizing: true,\n doctype: '',\n visual: true,\n font_size_style_values: 'xx-small,x-small,small,medium,large,x-large,xx-large',\n font_size_legacy_values: 'xx-small,small,medium,large,x-large,xx-large,300%',\n forced_root_block: 'p',\n hidden_input: true,\n render_ui: true,\n indentation: '40px',\n inline_styles: true,\n convert_fonts_to_spans: true,\n indent: 'simple',\n 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',\n 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',\n entity_encoding: 'named',\n url_converter: editor.convertURL,\n url_converter_scope: editor,\n ie7_compat: true\n };\n };\n var getExternalPlugins = function (overrideSettings, settings) {\n var userDefinedExternalPlugins = settings.external_plugins ? settings.external_plugins : {};\n if (overrideSettings && overrideSettings.external_plugins) {\n return Tools.extend({}, overrideSettings.external_plugins, userDefinedExternalPlugins);\n } else {\n return userDefinedExternalPlugins;\n }\n };\n var combinePlugins = function (forcedPlugins, plugins) {\n return [].concat(normalizePlugins(forcedPlugins)).concat(normalizePlugins(plugins));\n };\n var processPlugins = function (isTouchDevice, sectionResult, defaultOverrideSettings, settings) {\n var forcedPlugins = normalizePlugins(defaultOverrideSettings.forced_plugins);\n var plugins = normalizePlugins(settings.plugins);\n var platformPlugins = isTouchDevice && hasSection(sectionResult, 'mobile') ? filterMobilePlugins(plugins) : plugins;\n var combinedPlugins = combinePlugins(forcedPlugins, platformPlugins);\n return Tools.extend(settings, { plugins: combinedPlugins.join(' ') });\n };\n var isOnMobile = function (isTouchDevice, sectionResult) {\n var isInline = sectionResult.settings().inline;\n return isTouchDevice && hasSection(sectionResult, 'mobile') && !isInline;\n };\n var combineSettings = function (isTouchDevice, defaultSettings, defaultOverrideSettings, settings) {\n var sectionResult = extractSections(['mobile'], settings);\n var extendedSettings = Tools.extend(defaultSettings, defaultOverrideSettings, sectionResult.settings(), isOnMobile(isTouchDevice, sectionResult) ? getSection(sectionResult, 'mobile', defaultMobileSettings) : {}, {\n validate: true,\n content_editable: sectionResult.settings().inline,\n external_plugins: getExternalPlugins(defaultOverrideSettings, sectionResult.settings())\n });\n return processPlugins(isTouchDevice, sectionResult, defaultOverrideSettings, extendedSettings);\n };\n var getEditorSettings = function (editor, id, documentBaseUrl, defaultOverrideSettings, settings) {\n var defaultSettings = getDefaultSettings(id, documentBaseUrl, editor);\n return combineSettings(isTouch, defaultSettings, defaultOverrideSettings, settings);\n };\n var getFiltered = function (predicate, editor, name) {\n return Option.from(editor.settings[name]).filter(predicate);\n };\n var getParamObject = function (value) {\n var output = {};\n if (typeof value === 'string') {\n each(value.indexOf('=') > 0 ? value.split(/[;,](?![^=;,]*(?:[;,]|$))/) : value.split(','), function (val) {\n var arr = val.split('=');\n if (arr.length > 1) {\n output[Tools.trim(arr[0])] = Tools.trim(arr[1]);\n } else {\n output[Tools.trim(arr[0])] = Tools.trim(arr);\n }\n });\n } else {\n output = value;\n }\n return output;\n };\n var isArrayOf = function (p) {\n return function (a) {\n return isArray(a) && forall(a, p);\n };\n };\n var getParam = function (editor, name, defaultVal, type) {\n var value = name in editor.settings ? editor.settings[name] : defaultVal;\n if (type === 'hash') {\n return getParamObject(value);\n } else if (type === 'string') {\n return getFiltered(isString, editor, name).getOr(defaultVal);\n } else if (type === 'number') {\n return getFiltered(isNumber, editor, name).getOr(defaultVal);\n } else if (type === 'boolean') {\n return getFiltered(isBoolean, editor, name).getOr(defaultVal);\n } else if (type === 'object') {\n return getFiltered(isObject, editor, name).getOr(defaultVal);\n } else if (type === 'array') {\n return getFiltered(isArray, editor, name).getOr(defaultVal);\n } else if (type === 'string[]') {\n return getFiltered(isArrayOf(isString), editor, name).getOr(defaultVal);\n } else if (type === 'function') {\n return getFiltered(isFunction, editor, name).getOr(defaultVal);\n } else {\n return value;\n }\n };\n\n var each$b = Tools.each, explode$2 = Tools.explode;\n var keyCodeLookup = {\n f1: 112,\n f2: 113,\n f3: 114,\n f4: 115,\n f5: 116,\n f6: 117,\n f7: 118,\n f8: 119,\n f9: 120,\n f10: 121,\n f11: 122,\n f12: 123\n };\n var modifierNames = Tools.makeMap('alt,ctrl,shift,meta,access');\n function Shortcuts (editor) {\n var self = this;\n var shortcuts = {};\n var pendingPatterns = [];\n var parseShortcut = function (pattern) {\n var id, key;\n var shortcut = {};\n each$b(explode$2(pattern, '+'), function (value) {\n if (value in modifierNames) {\n shortcut[value] = true;\n } else {\n if (/^[0-9]{2,}$/.test(value)) {\n shortcut.keyCode = parseInt(value, 10);\n } else {\n shortcut.charCode = value.charCodeAt(0);\n shortcut.keyCode = keyCodeLookup[value] || value.toUpperCase().charCodeAt(0);\n }\n }\n });\n id = [shortcut.keyCode];\n for (key in modifierNames) {\n if (shortcut[key]) {\n id.push(key);\n } else {\n shortcut[key] = false;\n }\n }\n shortcut.id = id.join(',');\n if (shortcut.access) {\n shortcut.alt = true;\n if (Env.mac) {\n shortcut.ctrl = true;\n } else {\n shortcut.shift = true;\n }\n }\n if (shortcut.meta) {\n if (Env.mac) {\n shortcut.meta = true;\n } else {\n shortcut.ctrl = true;\n shortcut.meta = false;\n }\n }\n return shortcut;\n };\n var createShortcut = function (pattern, desc, cmdFunc, scope) {\n var shortcuts;\n shortcuts = Tools.map(explode$2(pattern, '>'), parseShortcut);\n shortcuts[shortcuts.length - 1] = Tools.extend(shortcuts[shortcuts.length - 1], {\n func: cmdFunc,\n scope: scope || editor\n });\n return Tools.extend(shortcuts[0], {\n desc: editor.translate(desc),\n subpatterns: shortcuts.slice(1)\n });\n };\n var hasModifier = function (e) {\n return e.altKey || e.ctrlKey || e.metaKey;\n };\n var isFunctionKey = function (e) {\n return e.type === 'keydown' && e.keyCode >= 112 && e.keyCode <= 123;\n };\n var matchShortcut = function (e, shortcut) {\n if (!shortcut) {\n return false;\n }\n if (shortcut.ctrl !== e.ctrlKey || shortcut.meta !== e.metaKey) {\n return false;\n }\n if (shortcut.alt !== e.altKey || shortcut.shift !== e.shiftKey) {\n return false;\n }\n if (e.keyCode === shortcut.keyCode || e.charCode && e.charCode === shortcut.charCode) {\n e.preventDefault();\n return true;\n }\n return false;\n };\n var executeShortcutAction = function (shortcut) {\n return shortcut.func ? shortcut.func.call(shortcut.scope) : null;\n };\n editor.on('keyup keypress keydown', function (e) {\n if ((hasModifier(e) || isFunctionKey(e)) && !e.isDefaultPrevented()) {\n each$b(shortcuts, function (shortcut) {\n if (matchShortcut(e, shortcut)) {\n pendingPatterns = shortcut.subpatterns.slice(0);\n if (e.type === 'keydown') {\n executeShortcutAction(shortcut);\n }\n return true;\n }\n });\n if (matchShortcut(e, pendingPatterns[0])) {\n if (pendingPatterns.length === 1) {\n if (e.type === 'keydown') {\n executeShortcutAction(pendingPatterns[0]);\n }\n }\n pendingPatterns.shift();\n }\n }\n });\n self.add = function (pattern, desc, cmdFunc, scope) {\n var cmd;\n cmd = cmdFunc;\n if (typeof cmdFunc === 'string') {\n cmdFunc = function () {\n editor.execCommand(cmd, false, null);\n };\n } else if (Tools.isArray(cmd)) {\n cmdFunc = function () {\n editor.execCommand(cmd[0], cmd[1], cmd[2]);\n };\n }\n each$b(explode$2(Tools.trim(pattern.toLowerCase())), function (pattern) {\n var shortcut = createShortcut(pattern, desc, cmdFunc, scope);\n shortcuts[shortcut.id] = shortcut;\n });\n return true;\n };\n self.remove = function (pattern) {\n var shortcut = createShortcut(pattern);\n if (shortcuts[shortcut.id]) {\n delete shortcuts[shortcut.id];\n return true;\n }\n return false;\n };\n }\n\n var hasFocus = function (element) {\n var doc = owner(element).dom();\n return element.dom() === doc.activeElement;\n };\n var active = function (_doc) {\n var doc = _doc !== undefined ? _doc.dom() : domGlobals.document;\n return Option.from(doc.activeElement).map(Element.fromDom);\n };\n var search = function (element) {\n return active(owner(element)).filter(function (e) {\n return element.dom().contains(e.dom());\n });\n };\n\n var getContentEditableHost = function (editor, node) {\n return editor.dom.getParent(node, function (node) {\n return editor.dom.getContentEditable(node) === 'true';\n });\n };\n var getCollapsedNode = function (rng) {\n return rng.collapsed ? Option.from(getNode(rng.startContainer, rng.startOffset)).map(Element.fromDom) : Option.none();\n };\n var getFocusInElement = function (root, rng) {\n return getCollapsedNode(rng).bind(function (node) {\n if (isTableSection(node)) {\n return Option.some(node);\n } else if (contains$3(root, node) === false) {\n return Option.some(root);\n } else {\n return Option.none();\n }\n });\n };\n var normalizeSelection = function (editor, rng) {\n getFocusInElement(Element.fromDom(editor.getBody()), rng).bind(function (elm) {\n return CaretFinder.firstPositionIn(elm.dom());\n }).fold(function () {\n editor.selection.normalize();\n return;\n }, function (caretPos) {\n return editor.selection.setRng(caretPos.toRange());\n });\n };\n var focusBody = function (body) {\n if (body.setActive) {\n try {\n body.setActive();\n } catch (ex) {\n body.focus();\n }\n } else {\n body.focus();\n }\n };\n var hasElementFocus = function (elm) {\n return hasFocus(elm) || search(elm).isSome();\n };\n var hasIframeFocus = function (editor) {\n return editor.iframeElement && hasFocus(Element.fromDom(editor.iframeElement));\n };\n var hasInlineFocus = function (editor) {\n var rawBody = editor.getBody();\n return rawBody && hasElementFocus(Element.fromDom(rawBody));\n };\n var hasFocus$1 = function (editor) {\n return editor.inline ? hasInlineFocus(editor) : hasIframeFocus(editor);\n };\n var focusEditor = function (editor) {\n var selection = editor.selection, contentEditable = editor.settings.content_editable;\n var body = editor.getBody();\n var rng = selection.getRng();\n editor.quirks.refreshContentEditable();\n var contentEditableHost = getContentEditableHost(editor, selection.getNode());\n if (editor.$.contains(body, contentEditableHost)) {\n focusBody(contentEditableHost);\n normalizeSelection(editor, rng);\n activateEditor(editor);\n return;\n }\n if (editor.bookmark !== undefined && hasFocus$1(editor) === false) {\n SelectionBookmark.getRng(editor).each(function (bookmarkRng) {\n editor.selection.setRng(bookmarkRng);\n rng = bookmarkRng;\n });\n }\n if (!contentEditable) {\n if (!Env.opera) {\n focusBody(body);\n }\n editor.getWin().focus();\n }\n if (Env.gecko || contentEditable) {\n focusBody(body);\n normalizeSelection(editor, rng);\n }\n activateEditor(editor);\n };\n var activateEditor = function (editor) {\n return editor.editorManager.setActive(editor);\n };\n var focus = function (editor, skipFocus) {\n if (editor.removed) {\n return;\n }\n skipFocus ? activateEditor(editor) : focusEditor(editor);\n };\n var EditorFocus = {\n focus: focus,\n hasFocus: hasFocus$1\n };\n\n var getProp = function (propName, elm) {\n var rawElm = elm.dom();\n return rawElm[propName];\n };\n var getComputedSizeProp = function (propName, elm) {\n return parseInt(get$1(elm, propName), 10);\n };\n var getClientWidth = curry(getProp, 'clientWidth');\n var getClientHeight = curry(getProp, 'clientHeight');\n var getMarginTop = curry(getComputedSizeProp, 'margin-top');\n var getMarginLeft = curry(getComputedSizeProp, 'margin-left');\n var getBoundingClientRect$1 = function (elm) {\n return elm.dom().getBoundingClientRect();\n };\n var isInsideElementContentArea = function (bodyElm, clientX, clientY) {\n var clientWidth = getClientWidth(bodyElm);\n var clientHeight = getClientHeight(bodyElm);\n return clientX >= 0 && clientY >= 0 && clientX <= clientWidth && clientY <= clientHeight;\n };\n var transpose = function (inline, elm, clientX, clientY) {\n var clientRect = getBoundingClientRect$1(elm);\n var deltaX = inline ? clientRect.left + elm.dom().clientLeft + getMarginLeft(elm) : 0;\n var deltaY = inline ? clientRect.top + elm.dom().clientTop + getMarginTop(elm) : 0;\n var x = clientX - deltaX;\n var y = clientY - deltaY;\n return {\n x: x,\n y: y\n };\n };\n var isXYInContentArea = function (editor, clientX, clientY) {\n var bodyElm = Element.fromDom(editor.getBody());\n var targetElm = editor.inline ? bodyElm : documentElement(bodyElm);\n var transposedPoint = transpose(editor.inline, targetElm, clientX, clientY);\n return isInsideElementContentArea(targetElm, transposedPoint.x, transposedPoint.y);\n };\n var fromDomSafe = function (node) {\n return Option.from(node).map(Element.fromDom);\n };\n var isEditorAttachedToDom = function (editor) {\n var rawContainer = editor.inline ? editor.getBody() : editor.getContentAreaContainer();\n return fromDomSafe(rawContainer).map(function (container) {\n return contains$3(owner(container), container);\n }).getOr(false);\n };\n var EditorView = {\n isXYInContentArea: isXYInContentArea,\n isEditorAttachedToDom: isEditorAttachedToDom\n };\n\n function NotificationManagerImpl () {\n var unimplemented = function () {\n throw new Error('Theme did not provide a NotificationManager implementation.');\n };\n return {\n open: unimplemented,\n close: unimplemented,\n reposition: unimplemented,\n getArgs: unimplemented\n };\n }\n\n function NotificationManager (editor) {\n var notifications = [];\n var getImplementation = function () {\n var theme = editor.theme;\n return theme && theme.getNotificationManagerImpl ? theme.getNotificationManagerImpl() : NotificationManagerImpl();\n };\n var getTopNotification = function () {\n return Option.from(notifications[0]);\n };\n var isEqual = function (a, b) {\n return a.type === b.type && a.text === b.text && !a.progressBar && !a.timeout && !b.progressBar && !b.timeout;\n };\n var reposition = function () {\n if (notifications.length > 0) {\n getImplementation().reposition(notifications);\n }\n };\n var addNotification = function (notification) {\n notifications.push(notification);\n };\n var closeNotification = function (notification) {\n findIndex(notifications, function (otherNotification) {\n return otherNotification === notification;\n }).each(function (index) {\n notifications.splice(index, 1);\n });\n };\n var open = function (args) {\n if (editor.removed || !EditorView.isEditorAttachedToDom(editor)) {\n return;\n }\n return find(notifications, function (notification) {\n return isEqual(getImplementation().getArgs(notification), args);\n }).getOrThunk(function () {\n editor.editorManager.setActive(editor);\n var notification = getImplementation().open(args, function () {\n closeNotification(notification);\n reposition();\n });\n addNotification(notification);\n reposition();\n return notification;\n });\n };\n var close = function () {\n getTopNotification().each(function (notification) {\n getImplementation().close(notification);\n closeNotification(notification);\n reposition();\n });\n };\n var getNotifications = function () {\n return notifications;\n };\n var registerEvents = function (editor) {\n editor.on('SkinLoaded', function () {\n var serviceMessage = editor.settings.service_message;\n if (serviceMessage) {\n open({\n text: serviceMessage,\n type: 'warning',\n timeout: 0,\n icon: ''\n });\n }\n });\n editor.on('ResizeEditor ResizeWindow', function () {\n Delay.requestAnimationFrame(reposition);\n });\n editor.on('remove', function () {\n each(notifications.slice(), function (notification) {\n getImplementation().close(notification);\n });\n });\n };\n registerEvents(editor);\n return {\n open: open,\n close: close,\n getNotifications: getNotifications\n };\n }\n\n function WindowManagerImpl () {\n var unimplemented = function () {\n throw new Error('Theme did not provide a WindowManager implementation.');\n };\n return {\n open: unimplemented,\n alert: unimplemented,\n confirm: unimplemented,\n close: unimplemented,\n getParams: unimplemented,\n setParams: unimplemented\n };\n }\n\n function WindowManager (editor) {\n var windows = [];\n var getImplementation = function () {\n var theme = editor.theme;\n return theme && theme.getWindowManagerImpl ? theme.getWindowManagerImpl() : WindowManagerImpl();\n };\n var funcBind = function (scope, f) {\n return function () {\n return f ? f.apply(scope, arguments) : undefined;\n };\n };\n var fireOpenEvent = function (win) {\n editor.fire('OpenWindow', { win: win });\n };\n var fireCloseEvent = function (win) {\n editor.fire('CloseWindow', { win: win });\n };\n var addWindow = function (win) {\n windows.push(win);\n fireOpenEvent(win);\n };\n var closeWindow = function (win) {\n findIndex(windows, function (otherWindow) {\n return otherWindow === win;\n }).each(function (index) {\n windows.splice(index, 1);\n fireCloseEvent(win);\n if (windows.length === 0) {\n editor.focus();\n }\n });\n };\n var getTopWindow = function () {\n return Option.from(windows[windows.length - 1]);\n };\n var open = function (args, params) {\n editor.editorManager.setActive(editor);\n SelectionBookmark.store(editor);\n var win = getImplementation().open(args, params, closeWindow);\n addWindow(win);\n return win;\n };\n var alert = function (message, callback, scope) {\n var win = getImplementation().alert(message, funcBind(scope ? scope : this, callback), closeWindow);\n addWindow(win);\n };\n var confirm = function (message, callback, scope) {\n var win = getImplementation().confirm(message, funcBind(scope ? scope : this, callback), closeWindow);\n addWindow(win);\n };\n var close = function () {\n getTopWindow().each(function (win) {\n getImplementation().close(win);\n closeWindow(win);\n });\n };\n var getParams = function () {\n return getTopWindow().map(getImplementation().getParams).getOr(null);\n };\n var setParams = function (params) {\n getTopWindow().each(function (win) {\n getImplementation().setParams(win, params);\n });\n };\n var getWindows = function () {\n return windows;\n };\n editor.on('remove', function () {\n each(windows.slice(0), function (win) {\n getImplementation().close(win);\n });\n });\n return {\n windows: windows,\n open: open,\n alert: alert,\n confirm: confirm,\n close: close,\n getParams: getParams,\n setParams: setParams,\n getWindows: getWindows\n };\n }\n\n var data = {};\n var code = 'en';\n var I18n = {\n setCode: function (newCode) {\n if (newCode) {\n code = newCode;\n this.rtl = this.data[newCode] ? this.data[newCode]._dir === 'rtl' : false;\n }\n },\n getCode: function () {\n return code;\n },\n rtl: false,\n add: function (code, items) {\n var langData = data[code];\n if (!langData) {\n data[code] = langData = {};\n }\n for (var name in items) {\n langData[name] = items[name];\n }\n this.setCode(code);\n },\n translate: function (text) {\n var langData = data[code] || {};\n var toString = function (obj) {\n if (Tools.is(obj, 'function')) {\n return Object.prototype.toString.call(obj);\n }\n return !isEmpty(obj) ? '' + obj : '';\n };\n var isEmpty = function (text) {\n return text === '' || text === null || Tools.is(text, 'undefined');\n };\n var getLangData = function (text) {\n text = toString(text);\n return Tools.hasOwn(langData, text) ? toString(langData[text]) : text;\n };\n if (isEmpty(text)) {\n return '';\n }\n if (Tools.is(text, 'object') && Tools.hasOwn(text, 'raw')) {\n return toString(text.raw);\n }\n if (Tools.is(text, 'array')) {\n var values_1 = text.slice(1);\n text = getLangData(text[0]).replace(/\\{([0-9]+)\\}/g, function ($1, $2) {\n return Tools.hasOwn(values_1, $2) ? toString(values_1[$2]) : $1;\n });\n }\n return getLangData(text).replace(/{context:\\w+}$/, '');\n },\n data: data\n };\n\n var PluginManager = AddOnManager.PluginManager;\n var resolvePluginName = function (targetUrl, suffix) {\n for (var name in PluginManager.urls) {\n var matchUrl = PluginManager.urls[name] + '/plugin' + suffix + '.js';\n if (matchUrl === targetUrl) {\n return name;\n }\n }\n return null;\n };\n var pluginUrlToMessage = function (editor, url) {\n var plugin = resolvePluginName(url, editor.suffix);\n return plugin ? I18n.translate([\n 'Failed to load plugin: {0} from url {1}',\n plugin,\n url\n ]) : I18n.translate([\n 'Failed to load plugin url: {0}',\n url\n ]);\n };\n var displayNotification = function (editor, message) {\n editor.notificationManager.open({\n type: 'error',\n text: message\n });\n };\n var displayError = function (editor, message) {\n if (editor._skinLoaded) {\n displayNotification(editor, message);\n } else {\n editor.on('SkinLoaded', function () {\n displayNotification(editor, message);\n });\n }\n };\n var uploadError = function (editor, message) {\n displayError(editor, I18n.translate([\n 'Failed to upload image: {0}',\n message\n ]));\n };\n var pluginLoadError = function (editor, url) {\n displayError(editor, pluginUrlToMessage(editor, url));\n };\n var pluginInitError = function (editor, name, err) {\n var message = I18n.translate([\n 'Failed to initialize plugin: {0}',\n name\n ]);\n initError(message, err);\n displayError(editor, message);\n };\n var initError = function (message) {\n var x = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n x[_i - 1] = arguments[_i];\n }\n var console = domGlobals.window.console;\n if (console) {\n if (console.error) {\n console.error.apply(console, arguments);\n } else {\n console.log.apply(console, arguments);\n }\n }\n };\n var ErrorReporter = {\n pluginLoadError: pluginLoadError,\n pluginInitError: pluginInitError,\n uploadError: uploadError,\n displayError: displayError,\n initError: initError\n };\n\n var PluginManager$1 = AddOnManager.PluginManager;\n\n var ThemeManager = AddOnManager.ThemeManager;\n\n function XMLHttpRequest () {\n var f = Global$1.getOrDie('XMLHttpRequest');\n return new f();\n }\n\n function Uploader (uploadStatus, settings) {\n var pendingPromises = {};\n var pathJoin = function (path1, path2) {\n if (path1) {\n return path1.replace(/\\/$/, '') + '/' + path2.replace(/^\\//, '');\n }\n return path2;\n };\n var defaultHandler = function (blobInfo, success, failure, progress) {\n var xhr, formData;\n xhr = XMLHttpRequest();\n xhr.open('POST', settings.url);\n xhr.withCredentials = settings.credentials;\n xhr.upload.onprogress = function (e) {\n progress(e.loaded / e.total * 100);\n };\n xhr.onerror = function () {\n failure('Image upload failed due to a XHR Transport error. Code: ' + xhr.status);\n };\n xhr.onload = function () {\n var json;\n if (xhr.status < 200 || xhr.status >= 300) {\n failure('HTTP Error: ' + xhr.status);\n return;\n }\n json = JSON.parse(xhr.responseText);\n if (!json || typeof json.location !== 'string') {\n failure('Invalid JSON: ' + xhr.responseText);\n return;\n }\n success(pathJoin(settings.basePath, json.location));\n };\n formData = new domGlobals.FormData();\n formData.append('file', blobInfo.blob(), blobInfo.filename());\n xhr.send(formData);\n };\n var noUpload = function () {\n return new promiseObj(function (resolve) {\n resolve([]);\n });\n };\n var handlerSuccess = function (blobInfo, url) {\n return {\n url: url,\n blobInfo: blobInfo,\n status: true\n };\n };\n var handlerFailure = function (blobInfo, error) {\n return {\n url: '',\n blobInfo: blobInfo,\n status: false,\n error: error\n };\n };\n var resolvePending = function (blobUri, result) {\n Tools.each(pendingPromises[blobUri], function (resolve) {\n resolve(result);\n });\n delete pendingPromises[blobUri];\n };\n var uploadBlobInfo = function (blobInfo, handler, openNotification) {\n uploadStatus.markPending(blobInfo.blobUri());\n return new promiseObj(function (resolve) {\n var notification, progress;\n var noop = function () {\n };\n try {\n var closeNotification_1 = function () {\n if (notification) {\n notification.close();\n progress = noop;\n }\n };\n var success = function (url) {\n closeNotification_1();\n uploadStatus.markUploaded(blobInfo.blobUri(), url);\n resolvePending(blobInfo.blobUri(), handlerSuccess(blobInfo, url));\n resolve(handlerSuccess(blobInfo, url));\n };\n var failure = function (error) {\n closeNotification_1();\n uploadStatus.removeFailed(blobInfo.blobUri());\n resolvePending(blobInfo.blobUri(), handlerFailure(blobInfo, error));\n resolve(handlerFailure(blobInfo, error));\n };\n progress = function (percent) {\n if (percent < 0 || percent > 100) {\n return;\n }\n if (!notification) {\n notification = openNotification();\n }\n notification.progressBar.value(percent);\n };\n handler(blobInfo, success, failure, progress);\n } catch (ex) {\n resolve(handlerFailure(blobInfo, ex.message));\n }\n });\n };\n var isDefaultHandler = function (handler) {\n return handler === defaultHandler;\n };\n var pendingUploadBlobInfo = function (blobInfo) {\n var blobUri = blobInfo.blobUri();\n return new promiseObj(function (resolve) {\n pendingPromises[blobUri] = pendingPromises[blobUri] || [];\n pendingPromises[blobUri].push(resolve);\n });\n };\n var uploadBlobs = function (blobInfos, openNotification) {\n blobInfos = Tools.grep(blobInfos, function (blobInfo) {\n return !uploadStatus.isUploaded(blobInfo.blobUri());\n });\n return promiseObj.all(Tools.map(blobInfos, function (blobInfo) {\n return uploadStatus.isPending(blobInfo.blobUri()) ? pendingUploadBlobInfo(blobInfo) : uploadBlobInfo(blobInfo, settings.handler, openNotification);\n }));\n };\n var upload = function (blobInfos, openNotification) {\n return !settings.url && isDefaultHandler(settings.handler) ? noUpload() : uploadBlobs(blobInfos, openNotification);\n };\n if (isFunction(settings.handler) === false) {\n settings.handler = defaultHandler;\n }\n return { upload: upload };\n }\n\n function FileReader () {\n var f = Global$1.getOrDie('FileReader');\n return new f();\n }\n\n function Uint8Array (arr) {\n var f = Global$1.getOrDie('Uint8Array');\n return new f(arr);\n }\n\n var requestAnimationFrame$1 = function (callback) {\n var f = Global$1.getOrDie('requestAnimationFrame');\n f(callback);\n };\n var atob = function (base64) {\n var f = Global$1.getOrDie('atob');\n return f(base64);\n };\n var Window = {\n atob: atob,\n requestAnimationFrame: requestAnimationFrame$1\n };\n\n var blobUriToBlob = function (url) {\n return new promiseObj(function (resolve, reject) {\n var rejectWithError = function () {\n reject('Cannot convert ' + url + ' to Blob. Resource might not exist or is inaccessible.');\n };\n try {\n var xhr = XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.responseType = 'blob';\n xhr.onload = function () {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n rejectWithError();\n }\n };\n xhr.onerror = rejectWithError;\n xhr.send();\n } catch (ex) {\n rejectWithError();\n }\n });\n };\n var parseDataUri = function (uri) {\n var type, matches;\n var uriParts = decodeURIComponent(uri).split(',');\n matches = /data:([^;]+)/.exec(uriParts[0]);\n if (matches) {\n type = matches[1];\n }\n return {\n type: type,\n data: uriParts[1]\n };\n };\n var dataUriToBlob = function (uri) {\n return new promiseObj(function (resolve) {\n var str, arr, i;\n var uriParts = parseDataUri(uri);\n try {\n str = Window.atob(uriParts.data);\n } catch (e) {\n resolve(new domGlobals.Blob([]));\n return;\n }\n arr = Uint8Array(str.length);\n for (i = 0; i < arr.length; i++) {\n arr[i] = str.charCodeAt(i);\n }\n resolve(new domGlobals.Blob([arr], { type: uriParts.type }));\n });\n };\n var uriToBlob = function (url) {\n if (url.indexOf('blob:') === 0) {\n return blobUriToBlob(url);\n }\n if (url.indexOf('data:') === 0) {\n return dataUriToBlob(url);\n }\n return null;\n };\n var blobToDataUri = function (blob) {\n return new promiseObj(function (resolve) {\n var reader = FileReader();\n reader.onloadend = function () {\n resolve(reader.result);\n };\n reader.readAsDataURL(blob);\n });\n };\n var Conversions = {\n uriToBlob: uriToBlob,\n blobToDataUri: blobToDataUri,\n parseDataUri: parseDataUri\n };\n\n var count = 0;\n var uniqueId = function (prefix) {\n return (prefix || 'blobid') + count++;\n };\n var imageToBlobInfo = function (blobCache, img, resolve, reject) {\n var base64, blobInfo;\n if (img.src.indexOf('blob:') === 0) {\n blobInfo = blobCache.getByUri(img.src);\n if (blobInfo) {\n resolve({\n image: img,\n blobInfo: blobInfo\n });\n } else {\n Conversions.uriToBlob(img.src).then(function (blob) {\n Conversions.blobToDataUri(blob).then(function (dataUri) {\n base64 = Conversions.parseDataUri(dataUri).data;\n blobInfo = blobCache.create(uniqueId(), blob, base64);\n blobCache.add(blobInfo);\n resolve({\n image: img,\n blobInfo: blobInfo\n });\n });\n }, function (err) {\n reject(err);\n });\n }\n return;\n }\n base64 = Conversions.parseDataUri(img.src).data;\n blobInfo = blobCache.findFirst(function (cachedBlobInfo) {\n return cachedBlobInfo.base64() === base64;\n });\n if (blobInfo) {\n resolve({\n image: img,\n blobInfo: blobInfo\n });\n } else {\n Conversions.uriToBlob(img.src).then(function (blob) {\n blobInfo = blobCache.create(uniqueId(), blob, base64);\n blobCache.add(blobInfo);\n resolve({\n image: img,\n blobInfo: blobInfo\n });\n }, function (err) {\n reject(err);\n });\n }\n };\n var getAllImages = function (elm) {\n return elm ? from$1(elm.getElementsByTagName('img')) : [];\n };\n function ImageScanner (uploadStatus, blobCache) {\n var cachedPromises = {};\n var findAll = function (elm, predicate) {\n var images;\n if (!predicate) {\n predicate = constant(true);\n }\n images = filter(getAllImages(elm), function (img) {\n var src = img.src;\n if (!Env.fileApi) {\n return false;\n }\n if (img.hasAttribute('data-mce-bogus')) {\n return false;\n }\n if (img.hasAttribute('data-mce-placeholder')) {\n return false;\n }\n if (!src || src === Env.transparentSrc) {\n return false;\n }\n if (src.indexOf('blob:') === 0) {\n return !uploadStatus.isUploaded(src) && predicate(img);\n }\n if (src.indexOf('data:') === 0) {\n return predicate(img);\n }\n return false;\n });\n var promises = map(images, function (img) {\n if (cachedPromises[img.src]) {\n return new promiseObj(function (resolve) {\n cachedPromises[img.src].then(function (imageInfo) {\n if (typeof imageInfo === 'string') {\n return imageInfo;\n }\n resolve({\n image: img,\n blobInfo: imageInfo.blobInfo\n });\n });\n });\n }\n var newPromise = new promiseObj(function (resolve, reject) {\n imageToBlobInfo(blobCache, img, resolve, reject);\n }).then(function (result) {\n delete cachedPromises[result.image.src];\n return result;\n }).catch(function (error) {\n delete cachedPromises[img.src];\n return error;\n });\n cachedPromises[img.src] = newPromise;\n return newPromise;\n });\n return promiseObj.all(promises);\n };\n return { findAll: findAll };\n }\n\n var count$1 = 0;\n var seed = function () {\n var rnd = function () {\n return Math.round(Math.random() * 4294967295).toString(36);\n };\n var now = new Date().getTime();\n return 's' + now.toString(36) + rnd() + rnd() + rnd();\n };\n var uuid = function (prefix) {\n return prefix + count$1++ + seed();\n };\n var Uuid = { uuid: uuid };\n\n function BlobCache () {\n var cache = [];\n var mimeToExt = function (mime) {\n var mimes = {\n 'image/jpeg': 'jpg',\n 'image/jpg': 'jpg',\n 'image/gif': 'gif',\n 'image/png': 'png'\n };\n return mimes[mime.toLowerCase()] || 'dat';\n };\n var create = function (o, blob, base64, filename) {\n if (isString(o)) {\n var id = o;\n return toBlobInfo({\n id: id,\n name: filename,\n blob: blob,\n base64: base64\n });\n } else if (isObject(o)) {\n return toBlobInfo(o);\n } else {\n throw new Error('Unknown input type');\n }\n };\n var toBlobInfo = function (o) {\n var id, name;\n if (!o.blob || !o.base64) {\n throw new Error('blob and base64 representations of the image are required for BlobInfo to be created');\n }\n id = o.id || Uuid.uuid('blobid');\n name = o.name || id;\n return {\n id: constant(id),\n name: constant(name),\n filename: constant(name + '.' + mimeToExt(o.blob.type)),\n blob: constant(o.blob),\n base64: constant(o.base64),\n blobUri: constant(o.blobUri || URL.createObjectURL(o.blob)),\n uri: constant(o.uri)\n };\n };\n var add = function (blobInfo) {\n if (!get(blobInfo.id())) {\n cache.push(blobInfo);\n }\n };\n var get = function (id) {\n return findFirst(function (cachedBlobInfo) {\n return cachedBlobInfo.id() === id;\n });\n };\n var findFirst = function (predicate) {\n return filter(cache, predicate)[0];\n };\n var getByUri = function (blobUri) {\n return findFirst(function (blobInfo) {\n return blobInfo.blobUri() === blobUri;\n });\n };\n var removeByUri = function (blobUri) {\n cache = filter(cache, function (blobInfo) {\n if (blobInfo.blobUri() === blobUri) {\n URL.revokeObjectURL(blobInfo.blobUri());\n return false;\n }\n return true;\n });\n };\n var destroy = function () {\n each(cache, function (cachedBlobInfo) {\n URL.revokeObjectURL(cachedBlobInfo.blobUri());\n });\n cache = [];\n };\n return {\n create: create,\n add: add,\n get: get,\n getByUri: getByUri,\n findFirst: findFirst,\n removeByUri: removeByUri,\n destroy: destroy\n };\n }\n\n function UploadStatus () {\n var PENDING = 1, UPLOADED = 2;\n var blobUriStatuses = {};\n var createStatus = function (status, resultUri) {\n return {\n status: status,\n resultUri: resultUri\n };\n };\n var hasBlobUri = function (blobUri) {\n return blobUri in blobUriStatuses;\n };\n var getResultUri = function (blobUri) {\n var result = blobUriStatuses[blobUri];\n return result ? result.resultUri : null;\n };\n var isPending = function (blobUri) {\n return hasBlobUri(blobUri) ? blobUriStatuses[blobUri].status === PENDING : false;\n };\n var isUploaded = function (blobUri) {\n return hasBlobUri(blobUri) ? blobUriStatuses[blobUri].status === UPLOADED : false;\n };\n var markPending = function (blobUri) {\n blobUriStatuses[blobUri] = createStatus(PENDING, null);\n };\n var markUploaded = function (blobUri, resultUri) {\n blobUriStatuses[blobUri] = createStatus(UPLOADED, resultUri);\n };\n var removeFailed = function (blobUri) {\n delete blobUriStatuses[blobUri];\n };\n var destroy = function () {\n blobUriStatuses = {};\n };\n return {\n hasBlobUri: hasBlobUri,\n getResultUri: getResultUri,\n isPending: isPending,\n isUploaded: isUploaded,\n markPending: markPending,\n markUploaded: markUploaded,\n removeFailed: removeFailed,\n destroy: destroy\n };\n }\n\n function EditorUpload (editor) {\n var blobCache = BlobCache();\n var uploader, imageScanner;\n var uploadStatus = UploadStatus();\n var urlFilters = [];\n var aliveGuard = function (callback) {\n return function (result) {\n if (editor.selection) {\n return callback(result);\n }\n return [];\n };\n };\n var cacheInvalidator = function () {\n return '?' + new Date().getTime();\n };\n var replaceString = function (content, search, replace) {\n var index = 0;\n do {\n index = content.indexOf(search, index);\n if (index !== -1) {\n content = content.substring(0, index) + replace + content.substr(index + search.length);\n index += replace.length - search.length + 1;\n }\n } while (index !== -1);\n return content;\n };\n var replaceImageUrl = function (content, targetUrl, replacementUrl) {\n content = replaceString(content, 'src=\"' + targetUrl + '\"', 'src=\"' + replacementUrl + '\"');\n content = replaceString(content, 'data-mce-src=\"' + targetUrl + '\"', 'data-mce-src=\"' + replacementUrl + '\"');\n return content;\n };\n var replaceUrlInUndoStack = function (targetUrl, replacementUrl) {\n each(editor.undoManager.data, function (level) {\n if (level.type === 'fragmented') {\n level.fragments = map(level.fragments, function (fragment) {\n return replaceImageUrl(fragment, targetUrl, replacementUrl);\n });\n } else {\n level.content = replaceImageUrl(level.content, targetUrl, replacementUrl);\n }\n });\n };\n var openNotification = function () {\n return editor.notificationManager.open({\n text: editor.translate('Image uploading...'),\n type: 'info',\n timeout: -1,\n progressBar: true\n });\n };\n var replaceImageUri = function (image, resultUri) {\n blobCache.removeByUri(image.src);\n replaceUrlInUndoStack(image.src, resultUri);\n editor.$(image).attr({\n 'src': Settings.shouldReuseFileName(editor) ? resultUri + cacheInvalidator() : resultUri,\n 'data-mce-src': editor.convertURL(resultUri, 'src')\n });\n };\n var uploadImages = function (callback) {\n if (!uploader) {\n uploader = Uploader(uploadStatus, {\n url: Settings.getImageUploadUrl(editor),\n basePath: Settings.getImageUploadBasePath(editor),\n credentials: Settings.getImagesUploadCredentials(editor),\n handler: Settings.getImagesUploadHandler(editor)\n });\n }\n return scanForImages().then(aliveGuard(function (imageInfos) {\n var blobInfos;\n blobInfos = map(imageInfos, function (imageInfo) {\n return imageInfo.blobInfo;\n });\n return uploader.upload(blobInfos, openNotification).then(aliveGuard(function (result) {\n var filteredResult = map(result, function (uploadInfo, index) {\n var image = imageInfos[index].image;\n if (uploadInfo.status && Settings.shouldReplaceBlobUris(editor)) {\n replaceImageUri(image, uploadInfo.url);\n } else if (uploadInfo.error) {\n ErrorReporter.uploadError(editor, uploadInfo.error);\n }\n return {\n element: image,\n status: uploadInfo.status\n };\n });\n if (callback) {\n callback(filteredResult);\n }\n return filteredResult;\n }));\n }));\n };\n var uploadImagesAuto = function (callback) {\n if (Settings.isAutomaticUploadsEnabled(editor)) {\n return uploadImages(callback);\n }\n };\n var isValidDataUriImage = function (imgElm) {\n if (forall(urlFilters, function (filter) {\n return filter(imgElm);\n }) === false) {\n return false;\n }\n if (imgElm.getAttribute('src').indexOf('data:') === 0) {\n var dataImgFilter = Settings.getImagesDataImgFilter(editor);\n return dataImgFilter(imgElm);\n }\n return true;\n };\n var addFilter = function (filter) {\n urlFilters.push(filter);\n };\n var scanForImages = function () {\n if (!imageScanner) {\n imageScanner = ImageScanner(uploadStatus, blobCache);\n }\n return imageScanner.findAll(editor.getBody(), isValidDataUriImage).then(aliveGuard(function (result) {\n result = filter(result, function (resultItem) {\n if (typeof resultItem === 'string') {\n ErrorReporter.displayError(editor, resultItem);\n return false;\n }\n return true;\n });\n each(result, function (resultItem) {\n replaceUrlInUndoStack(resultItem.image.src, resultItem.blobInfo.blobUri());\n resultItem.image.src = resultItem.blobInfo.blobUri();\n resultItem.image.removeAttribute('data-mce-src');\n });\n return result;\n }));\n };\n var destroy = function () {\n blobCache.destroy();\n uploadStatus.destroy();\n imageScanner = uploader = null;\n };\n var replaceBlobUris = function (content) {\n return content.replace(/src=\"(blob:[^\"]+)\"/g, function (match, blobUri) {\n var resultUri = uploadStatus.getResultUri(blobUri);\n if (resultUri) {\n return 'src=\"' + resultUri + '\"';\n }\n var blobInfo = blobCache.getByUri(blobUri);\n if (!blobInfo) {\n blobInfo = foldl(editor.editorManager.get(), function (result, editor) {\n return result || editor.editorUpload && editor.editorUpload.blobCache.getByUri(blobUri);\n }, null);\n }\n if (blobInfo) {\n var blob = blobInfo.blob();\n return 'src=\"data:' + blob.type + ';base64,' + blobInfo.base64() + '\"';\n }\n return match;\n });\n };\n editor.on('setContent', function () {\n if (Settings.isAutomaticUploadsEnabled(editor)) {\n uploadImagesAuto();\n } else {\n scanForImages();\n }\n });\n editor.on('RawSaveContent', function (e) {\n e.content = replaceBlobUris(e.content);\n });\n editor.on('getContent', function (e) {\n if (e.source_view || e.format === 'raw') {\n return;\n }\n e.content = replaceBlobUris(e.content);\n });\n editor.on('PostRender', function () {\n editor.parser.addNodeFilter('img', function (images) {\n each(images, function (img) {\n var src = img.attr('src');\n if (blobCache.getByUri(src)) {\n return;\n }\n var resultUri = uploadStatus.getResultUri(src);\n if (resultUri) {\n img.attr('src', resultUri);\n }\n });\n });\n });\n return {\n blobCache: blobCache,\n addFilter: addFilter,\n uploadImages: uploadImages,\n uploadImagesAuto: uploadImagesAuto,\n scanForImages: scanForImages,\n destroy: destroy\n };\n }\n\n var isBlockElement = function (blockElements, node) {\n return blockElements.hasOwnProperty(node.nodeName);\n };\n var isValidTarget = function (blockElements, node) {\n if (NodeType.isText(node)) {\n return true;\n } else if (NodeType.isElement(node)) {\n return !isBlockElement(blockElements, node) && !Bookmarks.isBookmarkNode(node);\n } else {\n return false;\n }\n };\n var hasBlockParent = function (blockElements, root, node) {\n return exists(Parents.parents(Element.fromDom(node), Element.fromDom(root)), function (elm) {\n return isBlockElement(blockElements, elm.dom());\n });\n };\n var shouldRemoveTextNode = function (blockElements, node) {\n if (NodeType.isText(node)) {\n if (node.nodeValue.length === 0) {\n return true;\n } else if (/^\\s+$/.test(node.nodeValue) && (!node.nextSibling || isBlockElement(blockElements, node.nextSibling))) {\n return true;\n }\n }\n return false;\n };\n var addRootBlocks = function (editor) {\n var settings = editor.settings, dom = editor.dom, selection = editor.selection;\n var schema = editor.schema, blockElements = schema.getBlockElements();\n var node = selection.getStart();\n var rootNode = editor.getBody();\n var rng;\n var startContainer, startOffset, endContainer, endOffset, rootBlockNode;\n var tempNode, wrapped, restoreSelection;\n var rootNodeName, forcedRootBlock;\n forcedRootBlock = settings.forced_root_block;\n if (!node || !NodeType.isElement(node) || !forcedRootBlock) {\n return;\n }\n rootNodeName = rootNode.nodeName.toLowerCase();\n if (!schema.isValidChild(rootNodeName, forcedRootBlock.toLowerCase()) || hasBlockParent(blockElements, rootNode, node)) {\n return;\n }\n rng = selection.getRng();\n startContainer = rng.startContainer;\n startOffset = rng.startOffset;\n endContainer = rng.endContainer;\n endOffset = rng.endOffset;\n restoreSelection = EditorFocus.hasFocus(editor);\n node = rootNode.firstChild;\n while (node) {\n if (isValidTarget(blockElements, node)) {\n if (shouldRemoveTextNode(blockElements, node)) {\n tempNode = node;\n node = node.nextSibling;\n dom.remove(tempNode);\n continue;\n }\n if (!rootBlockNode) {\n rootBlockNode = dom.create(forcedRootBlock, editor.settings.forced_root_block_attrs);\n node.parentNode.insertBefore(rootBlockNode, node);\n wrapped = true;\n }\n tempNode = node;\n node = node.nextSibling;\n rootBlockNode.appendChild(tempNode);\n } else {\n rootBlockNode = null;\n node = node.nextSibling;\n }\n }\n if (wrapped && restoreSelection) {\n rng.setStart(startContainer, startOffset);\n rng.setEnd(endContainer, endOffset);\n selection.setRng(rng);\n editor.nodeChanged();\n }\n };\n var setup$3 = function (editor) {\n if (editor.settings.forced_root_block) {\n editor.on('NodeChange', curry(addRootBlocks, editor));\n }\n };\n var ForceBlocks = { setup: setup$3 };\n\n var getStartNode = function (rng) {\n var sc = rng.startContainer, so = rng.startOffset;\n if (NodeType.isText(sc)) {\n return so === 0 ? Option.some(Element.fromDom(sc)) : Option.none();\n } else {\n return Option.from(sc.childNodes[so]).map(Element.fromDom);\n }\n };\n var getEndNode = function (rng) {\n var ec = rng.endContainer, eo = rng.endOffset;\n if (NodeType.isText(ec)) {\n return eo === ec.data.length ? Option.some(Element.fromDom(ec)) : Option.none();\n } else {\n return Option.from(ec.childNodes[eo - 1]).map(Element.fromDom);\n }\n };\n var getFirstChildren = function (node) {\n return firstChild(node).fold(constant([node]), function (child) {\n return [node].concat(getFirstChildren(child));\n });\n };\n var getLastChildren$1 = function (node) {\n return lastChild(node).fold(constant([node]), function (child) {\n if (name(child) === 'br') {\n return prevSibling(child).map(function (sibling) {\n return [node].concat(getLastChildren$1(sibling));\n }).getOr([]);\n } else {\n return [node].concat(getLastChildren$1(child));\n }\n });\n };\n var hasAllContentsSelected = function (elm, rng) {\n return lift2(getStartNode(rng), getEndNode(rng), function (startNode, endNode) {\n var start = find(getFirstChildren(elm), curry(eq, startNode));\n var end = find(getLastChildren$1(elm), curry(eq, endNode));\n return start.isSome() && end.isSome();\n }).getOr(false);\n };\n var moveEndPoint$1 = function (dom, rng, node, start) {\n var root = node, walker = new TreeWalker(node, root);\n var nonEmptyElementsMap = dom.schema.getNonEmptyElements();\n do {\n if (node.nodeType === 3 && Tools.trim(node.nodeValue).length !== 0) {\n if (start) {\n rng.setStart(node, 0);\n } else {\n rng.setEnd(node, node.nodeValue.length);\n }\n return;\n }\n if (nonEmptyElementsMap[node.nodeName] && !/^(TD|TH)$/.test(node.nodeName)) {\n if (start) {\n rng.setStartBefore(node);\n } else {\n if (node.nodeName === 'BR') {\n rng.setEndBefore(node);\n } else {\n rng.setEndAfter(node);\n }\n }\n return;\n }\n if (Env.ie && Env.ie < 11 && dom.isBlock(node) && dom.isEmpty(node)) {\n if (start) {\n rng.setStart(node, 0);\n } else {\n rng.setEnd(node, 0);\n }\n return;\n }\n } while (node = start ? walker.next() : walker.prev());\n if (root.nodeName === 'BODY') {\n if (start) {\n rng.setStart(root, 0);\n } else {\n rng.setEnd(root, root.childNodes.length);\n }\n }\n };\n var hasAnyRanges = function (editor) {\n var sel = editor.selection.getSel();\n return sel && sel.rangeCount > 0;\n };\n\n function NodeChange (editor) {\n var lastRng, lastPath = [];\n var isSameElementPath = function (startElm) {\n var i, currentPath;\n currentPath = editor.$(startElm).parentsUntil(editor.getBody()).add(startElm);\n if (currentPath.length === lastPath.length) {\n for (i = currentPath.length; i >= 0; i--) {\n if (currentPath[i] !== lastPath[i]) {\n break;\n }\n }\n if (i === -1) {\n lastPath = currentPath;\n return true;\n }\n }\n lastPath = currentPath;\n return false;\n };\n if (!('onselectionchange' in editor.getDoc())) {\n editor.on('NodeChange Click MouseUp KeyUp Focus', function (e) {\n var nativeRng, fakeRng;\n nativeRng = editor.selection.getRng();\n fakeRng = {\n startContainer: nativeRng.startContainer,\n startOffset: nativeRng.startOffset,\n endContainer: nativeRng.endContainer,\n endOffset: nativeRng.endOffset\n };\n if (e.type === 'nodechange' || !RangeCompare.isEq(fakeRng, lastRng)) {\n editor.fire('SelectionChange');\n }\n lastRng = fakeRng;\n });\n }\n editor.on('contextmenu', function () {\n editor.fire('SelectionChange');\n });\n editor.on('SelectionChange', function () {\n var startElm = editor.selection.getStart(true);\n if (!startElm || !Env.range && editor.selection.isCollapsed()) {\n return;\n }\n if (hasAnyRanges(editor) && !isSameElementPath(startElm) && editor.dom.isChildOf(startElm, editor.getBody())) {\n editor.nodeChanged({ selectionChange: true });\n }\n });\n editor.on('MouseUp', function (e) {\n if (!e.isDefaultPrevented() && hasAnyRanges(editor)) {\n if (editor.selection.getNode().nodeName === 'IMG') {\n Delay.setEditorTimeout(editor, function () {\n editor.nodeChanged();\n });\n } else {\n editor.nodeChanged();\n }\n }\n });\n this.nodeChanged = function (args) {\n var selection = editor.selection;\n var node, parents, root;\n if (editor.initialized && selection && !editor.settings.disable_nodechange && !editor.readonly) {\n root = editor.getBody();\n node = selection.getStart(true) || root;\n if (node.ownerDocument !== editor.getDoc() || !editor.dom.isChildOf(node, root)) {\n node = root;\n }\n parents = [];\n editor.dom.getParent(node, function (node) {\n if (node === root) {\n return true;\n }\n parents.push(node);\n });\n args = args || {};\n args.element = node;\n args.parents = parents;\n editor.fire('NodeChange', args);\n }\n };\n }\n\n var VK = {\n BACKSPACE: 8,\n DELETE: 46,\n DOWN: 40,\n ENTER: 13,\n LEFT: 37,\n RIGHT: 39,\n SPACEBAR: 32,\n TAB: 9,\n UP: 38,\n END: 35,\n HOME: 36,\n modifierPressed: function (e) {\n return e.shiftKey || e.ctrlKey || e.altKey || this.metaKeyPressed(e);\n },\n metaKeyPressed: function (e) {\n return Env.mac ? e.metaKey : e.ctrlKey && !e.altKey;\n }\n };\n\n var getNodeClientRects = function (node) {\n var toArrayWithNode = function (clientRects) {\n return map(clientRects, function (clientRect) {\n clientRect = clone$1(clientRect);\n clientRect.node = node;\n return clientRect;\n });\n };\n if (NodeType.isElement(node)) {\n return toArrayWithNode(node.getClientRects());\n }\n if (NodeType.isText(node)) {\n var rng = node.ownerDocument.createRange();\n rng.setStart(node, 0);\n rng.setEnd(node, node.data.length);\n return toArrayWithNode(rng.getClientRects());\n }\n };\n var getClientRects = function (node) {\n return foldl(node, function (result, node) {\n return result.concat(getNodeClientRects(node));\n }, []);\n };\n\n var VDirection;\n (function (VDirection) {\n VDirection[VDirection['Up'] = -1] = 'Up';\n VDirection[VDirection['Down'] = 1] = 'Down';\n }(VDirection || (VDirection = {})));\n var findUntil = function (direction, root, predicateFn, node) {\n while (node = findNode(node, direction, isEditableCaretCandidate, root)) {\n if (predicateFn(node)) {\n return;\n }\n }\n };\n var walkUntil = function (direction, isAboveFn, isBeflowFn, root, predicateFn, caretPosition) {\n var line = 0, node;\n var result = [];\n var targetClientRect;\n var add = function (node) {\n var i, clientRect, clientRects;\n clientRects = getClientRects([node]);\n if (direction === -1) {\n clientRects = clientRects.reverse();\n }\n for (i = 0; i < clientRects.length; i++) {\n clientRect = clientRects[i];\n if (isBeflowFn(clientRect, targetClientRect)) {\n continue;\n }\n if (result.length > 0 && isAboveFn(clientRect, ArrUtils.last(result))) {\n line++;\n }\n clientRect.line = line;\n if (predicateFn(clientRect)) {\n return true;\n }\n result.push(clientRect);\n }\n };\n targetClientRect = ArrUtils.last(caretPosition.getClientRects());\n if (!targetClientRect) {\n return result;\n }\n node = caretPosition.getNode();\n add(node);\n findUntil(direction, root, add, node);\n return result;\n };\n var aboveLineNumber = function (lineNumber, clientRect) {\n return clientRect.line > lineNumber;\n };\n var isLineNumber = function (lineNumber, clientRect) {\n return clientRect.line === lineNumber;\n };\n var upUntil = curry(walkUntil, VDirection.Up, isAbove, isBelow);\n var downUntil = curry(walkUntil, VDirection.Down, isBelow, isAbove);\n var positionsUntil = function (direction, root, predicateFn, node) {\n var caretWalker = CaretWalker(root);\n var walkFn, isBelowFn, isAboveFn, caretPosition;\n var result = [];\n var line = 0, clientRect, targetClientRect;\n var getClientRect = function (caretPosition) {\n if (direction === 1) {\n return ArrUtils.last(caretPosition.getClientRects());\n }\n return ArrUtils.last(caretPosition.getClientRects());\n };\n if (direction === 1) {\n walkFn = caretWalker.next;\n isBelowFn = isBelow;\n isAboveFn = isAbove;\n caretPosition = CaretPosition$1.after(node);\n } else {\n walkFn = caretWalker.prev;\n isBelowFn = isAbove;\n isAboveFn = isBelow;\n caretPosition = CaretPosition$1.before(node);\n }\n targetClientRect = getClientRect(caretPosition);\n do {\n if (!caretPosition.isVisible()) {\n continue;\n }\n clientRect = getClientRect(caretPosition);\n if (isAboveFn(clientRect, targetClientRect)) {\n continue;\n }\n if (result.length > 0 && isBelowFn(clientRect, ArrUtils.last(result))) {\n line++;\n }\n clientRect = clone$1(clientRect);\n clientRect.position = caretPosition;\n clientRect.line = line;\n if (predicateFn(clientRect)) {\n return result;\n }\n result.push(clientRect);\n } while (caretPosition = walkFn(caretPosition));\n return result;\n };\n var isAboveLine = function (lineNumber) {\n return function (clientRect) {\n return aboveLineNumber(lineNumber, clientRect);\n };\n };\n var isLine = function (lineNumber) {\n return function (clientRect) {\n return isLineNumber(lineNumber, clientRect);\n };\n };\n\n var isContentEditableFalse$7 = NodeType.isContentEditableFalse;\n var findNode$1 = findNode;\n var distanceToRectLeft = function (clientRect, clientX) {\n return Math.abs(clientRect.left - clientX);\n };\n var distanceToRectRight = function (clientRect, clientX) {\n return Math.abs(clientRect.right - clientX);\n };\n var isInside = function (clientX, clientRect) {\n return clientX >= clientRect.left && clientX <= clientRect.right;\n };\n var findClosestClientRect = function (clientRects, clientX) {\n return ArrUtils.reduce(clientRects, function (oldClientRect, clientRect) {\n var oldDistance, newDistance;\n oldDistance = Math.min(distanceToRectLeft(oldClientRect, clientX), distanceToRectRight(oldClientRect, clientX));\n newDistance = Math.min(distanceToRectLeft(clientRect, clientX), distanceToRectRight(clientRect, clientX));\n if (isInside(clientX, clientRect)) {\n return clientRect;\n }\n if (isInside(clientX, oldClientRect)) {\n return oldClientRect;\n }\n if (newDistance === oldDistance && isContentEditableFalse$7(clientRect.node)) {\n return clientRect;\n }\n if (newDistance < oldDistance) {\n return clientRect;\n }\n return oldClientRect;\n });\n };\n var walkUntil$1 = function (direction, root, predicateFn, node) {\n while (node = findNode$1(node, direction, isEditableCaretCandidate, root)) {\n if (predicateFn(node)) {\n return;\n }\n }\n };\n var findLineNodeRects = function (root, targetNodeRect) {\n var clientRects = [];\n var collect = function (checkPosFn, node) {\n var lineRects;\n lineRects = filter(getClientRects([node]), function (clientRect) {\n return !checkPosFn(clientRect, targetNodeRect);\n });\n clientRects = clientRects.concat(lineRects);\n return lineRects.length === 0;\n };\n clientRects.push(targetNodeRect);\n walkUntil$1(VDirection.Up, root, curry(collect, isAbove), targetNodeRect.node);\n walkUntil$1(VDirection.Down, root, curry(collect, isBelow), targetNodeRect.node);\n return clientRects;\n };\n var getFakeCaretTargets = function (root) {\n return filter(from$1(root.getElementsByTagName('*')), isFakeCaretTarget);\n };\n var caretInfo = function (clientRect, clientX) {\n return {\n node: clientRect.node,\n before: distanceToRectLeft(clientRect, clientX) < distanceToRectRight(clientRect, clientX)\n };\n };\n var closestCaret = function (root, clientX, clientY) {\n var closestNodeRect;\n var contentEditableFalseNodeRects = getClientRects(getFakeCaretTargets(root));\n var targetNodeRects = filter(contentEditableFalseNodeRects, function (rect) {\n return clientY >= rect.top && clientY <= rect.bottom;\n });\n closestNodeRect = findClosestClientRect(targetNodeRects, clientX);\n if (closestNodeRect) {\n closestNodeRect = findClosestClientRect(findLineNodeRects(root, closestNodeRect), clientX);\n if (closestNodeRect && isFakeCaretTarget(closestNodeRect.node)) {\n return caretInfo(closestNodeRect, clientX);\n }\n }\n return null;\n };\n\n var isXYWithinRange = function (clientX, clientY, range) {\n if (range.collapsed) {\n return false;\n }\n if (Env.ie && Env.ie <= 11 && range.startOffset === range.endOffset - 1 && range.startContainer === range.endContainer) {\n var elm = range.startContainer.childNodes[range.startOffset];\n if (NodeType.isElement(elm)) {\n return exists(elm.getClientRects(), function (rect) {\n return containsXY(rect, clientX, clientY);\n });\n }\n }\n return exists(range.getClientRects(), function (rect) {\n return containsXY(rect, clientX, clientY);\n });\n };\n var RangePoint = { isXYWithinRange: isXYWithinRange };\n\n var getAbsolutePosition = function (elm) {\n var doc, docElem, win, clientRect;\n clientRect = elm.getBoundingClientRect();\n doc = elm.ownerDocument;\n docElem = doc.documentElement;\n win = doc.defaultView;\n return {\n top: clientRect.top + win.pageYOffset - docElem.clientTop,\n left: clientRect.left + win.pageXOffset - docElem.clientLeft\n };\n };\n var getBodyPosition = function (editor) {\n return editor.inline ? getAbsolutePosition(editor.getBody()) : {\n left: 0,\n top: 0\n };\n };\n var getScrollPosition = function (editor) {\n var body = editor.getBody();\n return editor.inline ? {\n left: body.scrollLeft,\n top: body.scrollTop\n } : {\n left: 0,\n top: 0\n };\n };\n var getBodyScroll = function (editor) {\n var body = editor.getBody(), docElm = editor.getDoc().documentElement;\n var inlineScroll = {\n left: body.scrollLeft,\n top: body.scrollTop\n };\n var iframeScroll = {\n left: body.scrollLeft || docElm.scrollLeft,\n top: body.scrollTop || docElm.scrollTop\n };\n return editor.inline ? inlineScroll : iframeScroll;\n };\n var getMousePosition = function (editor, event) {\n if (event.target.ownerDocument !== editor.getDoc()) {\n var iframePosition = getAbsolutePosition(editor.getContentAreaContainer());\n var scrollPosition = getBodyScroll(editor);\n return {\n left: event.pageX - iframePosition.left + scrollPosition.left,\n top: event.pageY - iframePosition.top + scrollPosition.top\n };\n }\n return {\n left: event.pageX,\n top: event.pageY\n };\n };\n var calculatePosition = function (bodyPosition, scrollPosition, mousePosition) {\n return {\n pageX: mousePosition.left - bodyPosition.left + scrollPosition.left,\n pageY: mousePosition.top - bodyPosition.top + scrollPosition.top\n };\n };\n var calc = function (editor, event) {\n return calculatePosition(getBodyPosition(editor), getScrollPosition(editor), getMousePosition(editor, event));\n };\n var MousePosition = { calc: calc };\n\n var isContentEditableFalse$8 = NodeType.isContentEditableFalse, isContentEditableTrue$3 = NodeType.isContentEditableTrue;\n var isDraggable = function (rootElm, elm) {\n return isContentEditableFalse$8(elm) && elm !== rootElm;\n };\n var isValidDropTarget = function (editor, targetElement, dragElement) {\n if (targetElement === dragElement || editor.dom.isChildOf(targetElement, dragElement)) {\n return false;\n }\n if (isContentEditableFalse$8(targetElement)) {\n return false;\n }\n return true;\n };\n var cloneElement = function (elm) {\n var cloneElm = elm.cloneNode(true);\n cloneElm.removeAttribute('data-mce-selected');\n return cloneElm;\n };\n var createGhost = function (editor, elm, width, height) {\n var clonedElm = elm.cloneNode(true);\n editor.dom.setStyles(clonedElm, {\n width: width,\n height: height\n });\n editor.dom.setAttrib(clonedElm, 'data-mce-selected', null);\n var ghostElm = editor.dom.create('div', {\n 'class': 'mce-drag-container',\n 'data-mce-bogus': 'all',\n 'unselectable': 'on',\n 'contenteditable': 'false'\n });\n editor.dom.setStyles(ghostElm, {\n position: 'absolute',\n opacity: 0.5,\n overflow: 'hidden',\n border: 0,\n padding: 0,\n margin: 0,\n width: width,\n height: height\n });\n editor.dom.setStyles(clonedElm, {\n margin: 0,\n boxSizing: 'border-box'\n });\n ghostElm.appendChild(clonedElm);\n return ghostElm;\n };\n var appendGhostToBody = function (ghostElm, bodyElm) {\n if (ghostElm.parentNode !== bodyElm) {\n bodyElm.appendChild(ghostElm);\n }\n };\n var moveGhost = function (ghostElm, position, width, height, maxX, maxY) {\n var overflowX = 0, overflowY = 0;\n ghostElm.style.left = position.pageX + 'px';\n ghostElm.style.top = position.pageY + 'px';\n if (position.pageX + width > maxX) {\n overflowX = position.pageX + width - maxX;\n }\n if (position.pageY + height > maxY) {\n overflowY = position.pageY + height - maxY;\n }\n ghostElm.style.width = width - overflowX + 'px';\n ghostElm.style.height = height - overflowY + 'px';\n };\n var removeElement = function (elm) {\n if (elm && elm.parentNode) {\n elm.parentNode.removeChild(elm);\n }\n };\n var isLeftMouseButtonPressed = function (e) {\n return e.button === 0;\n };\n var hasDraggableElement = function (state) {\n return state.element;\n };\n var applyRelPos = function (state, position) {\n return {\n pageX: position.pageX - state.relX,\n pageY: position.pageY + 5\n };\n };\n var start$1 = function (state, editor) {\n return function (e) {\n if (isLeftMouseButtonPressed(e)) {\n var ceElm = find(editor.dom.getParents(e.target), Predicate.or(isContentEditableFalse$8, isContentEditableTrue$3)).getOr(null);\n if (isDraggable(editor.getBody(), ceElm)) {\n var elmPos = editor.dom.getPos(ceElm);\n var bodyElm = editor.getBody();\n var docElm = editor.getDoc().documentElement;\n state.element = ceElm;\n state.screenX = e.screenX;\n state.screenY = e.screenY;\n state.maxX = (editor.inline ? bodyElm.scrollWidth : docElm.offsetWidth) - 2;\n state.maxY = (editor.inline ? bodyElm.scrollHeight : docElm.offsetHeight) - 2;\n state.relX = e.pageX - elmPos.x;\n state.relY = e.pageY - elmPos.y;\n state.width = ceElm.offsetWidth;\n state.height = ceElm.offsetHeight;\n state.ghost = createGhost(editor, ceElm, state.width, state.height);\n }\n }\n };\n };\n var move$1 = function (state, editor) {\n var throttledPlaceCaretAt = Delay.throttle(function (clientX, clientY) {\n editor._selectionOverrides.hideFakeCaret();\n editor.selection.placeCaretAt(clientX, clientY);\n }, 0);\n return function (e) {\n var movement = Math.max(Math.abs(e.screenX - state.screenX), Math.abs(e.screenY - state.screenY));\n if (hasDraggableElement(state) && !state.dragging && movement > 10) {\n var args = editor.fire('dragstart', { target: state.element });\n if (args.isDefaultPrevented()) {\n return;\n }\n state.dragging = true;\n editor.focus();\n }\n if (state.dragging) {\n var targetPos = applyRelPos(state, MousePosition.calc(editor, e));\n appendGhostToBody(state.ghost, editor.getBody());\n moveGhost(state.ghost, targetPos, state.width, state.height, state.maxX, state.maxY);\n throttledPlaceCaretAt(e.clientX, e.clientY);\n }\n };\n };\n var getRawTarget = function (selection) {\n var rng = selection.getSel().getRangeAt(0);\n var startContainer = rng.startContainer;\n return startContainer.nodeType === 3 ? startContainer.parentNode : startContainer;\n };\n var drop = function (state, editor) {\n return function (e) {\n if (state.dragging) {\n if (isValidDropTarget(editor, getRawTarget(editor.selection), state.element)) {\n var targetClone_1 = cloneElement(state.element);\n var args = editor.fire('drop', {\n targetClone: targetClone_1,\n clientX: e.clientX,\n clientY: e.clientY\n });\n if (!args.isDefaultPrevented()) {\n targetClone_1 = args.targetClone;\n editor.undoManager.transact(function () {\n removeElement(state.element);\n editor.insertContent(editor.dom.getOuterHTML(targetClone_1));\n editor._selectionOverrides.hideFakeCaret();\n });\n }\n }\n }\n removeDragState(state);\n };\n };\n var stop = function (state, editor) {\n return function () {\n if (state.dragging) {\n editor.fire('dragend');\n }\n removeDragState(state);\n };\n };\n var removeDragState = function (state) {\n state.dragging = false;\n state.element = null;\n removeElement(state.ghost);\n };\n var bindFakeDragEvents = function (editor) {\n var state = {};\n var pageDom, dragStartHandler, dragHandler, dropHandler, dragEndHandler, rootDocument;\n pageDom = DOMUtils$1.DOM;\n rootDocument = domGlobals.document;\n dragStartHandler = start$1(state, editor);\n dragHandler = move$1(state, editor);\n dropHandler = drop(state, editor);\n dragEndHandler = stop(state, editor);\n editor.on('mousedown', dragStartHandler);\n editor.on('mousemove', dragHandler);\n editor.on('mouseup', dropHandler);\n pageDom.bind(rootDocument, 'mousemove', dragHandler);\n pageDom.bind(rootDocument, 'mouseup', dragEndHandler);\n editor.on('remove', function () {\n pageDom.unbind(rootDocument, 'mousemove', dragHandler);\n pageDom.unbind(rootDocument, 'mouseup', dragEndHandler);\n });\n };\n var blockIeDrop = function (editor) {\n editor.on('drop', function (e) {\n var realTarget = typeof e.clientX !== 'undefined' ? editor.getDoc().elementFromPoint(e.clientX, e.clientY) : null;\n if (isContentEditableFalse$8(realTarget) || isContentEditableFalse$8(editor.dom.getContentEditableParent(realTarget))) {\n e.preventDefault();\n }\n });\n };\n var init = function (editor) {\n bindFakeDragEvents(editor);\n blockIeDrop(editor);\n };\n var DragDropOverrides = { init: init };\n\n var setup$4 = function (editor) {\n var renderFocusCaret = first(function () {\n if (!editor.removed) {\n var rng = editor.selection.getRng();\n if (rng.collapsed) {\n var caretRange = renderRangeCaret(editor, editor.selection.getRng(), false);\n editor.selection.setRng(caretRange);\n }\n }\n }, 0);\n editor.on('focus', function () {\n renderFocusCaret.throttle();\n });\n editor.on('blur', function () {\n renderFocusCaret.cancel();\n });\n };\n var CefFocus = { setup: setup$4 };\n\n var isContentEditableTrue$4 = NodeType.isContentEditableTrue;\n var isContentEditableFalse$9 = NodeType.isContentEditableFalse;\n var getContentEditableRoot$1 = function (editor, node) {\n var root = editor.getBody();\n while (node && node !== root) {\n if (isContentEditableTrue$4(node) || isContentEditableFalse$9(node)) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n };\n var SelectionOverrides = function (editor) {\n var isBlock = function (node) {\n return editor.dom.isBlock(node);\n };\n var rootNode = editor.getBody();\n var fakeCaret = FakeCaret(editor.getBody(), isBlock, function () {\n return EditorFocus.hasFocus(editor);\n });\n var realSelectionId = 'sel-' + editor.dom.uniqueId();\n var selectedContentEditableNode;\n var isFakeSelectionElement = function (elm) {\n return editor.dom.hasClass(elm, 'mce-offscreen-selection');\n };\n var getRealSelectionElement = function () {\n var container = editor.dom.get(realSelectionId);\n return container ? container.getElementsByTagName('*')[0] : container;\n };\n var setRange = function (range) {\n if (range) {\n editor.selection.setRng(range);\n }\n };\n var getRange = function () {\n return editor.selection.getRng();\n };\n var showCaret = function (direction, node, before, scrollIntoView) {\n if (scrollIntoView === void 0) {\n scrollIntoView = true;\n }\n var e;\n e = editor.fire('ShowCaret', {\n target: node,\n direction: direction,\n before: before\n });\n if (e.isDefaultPrevented()) {\n return null;\n }\n if (scrollIntoView) {\n editor.selection.scrollIntoView(node, direction === -1);\n }\n return fakeCaret.show(before, node);\n };\n var getNormalizedRangeEndPoint = function (direction, range) {\n range = normalizeRange(direction, rootNode, range);\n if (direction === -1) {\n return CaretPosition$1.fromRangeStart(range);\n }\n return CaretPosition$1.fromRangeEnd(range);\n };\n var showBlockCaretContainer = function (blockCaretContainer) {\n if (blockCaretContainer.hasAttribute('data-mce-caret')) {\n showCaretContainerBlock(blockCaretContainer);\n setRange(getRange());\n editor.selection.scrollIntoView(blockCaretContainer[0]);\n }\n };\n var registerEvents = function () {\n editor.on('mouseup', function (e) {\n var range = getRange();\n if (range.collapsed && EditorView.isXYInContentArea(editor, e.clientX, e.clientY)) {\n setRange(renderCaretAtRange(editor, range, false));\n }\n });\n editor.on('click', function (e) {\n var contentEditableRoot;\n contentEditableRoot = getContentEditableRoot$1(editor, e.target);\n if (contentEditableRoot) {\n if (isContentEditableFalse$9(contentEditableRoot)) {\n e.preventDefault();\n editor.focus();\n }\n if (isContentEditableTrue$4(contentEditableRoot)) {\n if (editor.dom.isChildOf(contentEditableRoot, editor.selection.getNode())) {\n removeContentEditableSelection();\n }\n }\n }\n });\n editor.on('blur NewBlock', function () {\n removeContentEditableSelection();\n });\n editor.on('ResizeWindow FullscreenStateChanged', function () {\n return fakeCaret.reposition();\n });\n var handleTouchSelect = function (editor) {\n var moved = false;\n editor.on('touchstart', function () {\n moved = false;\n });\n editor.on('touchmove', function () {\n moved = true;\n });\n editor.on('touchend', function (e) {\n var contentEditableRoot = getContentEditableRoot$1(editor, e.target);\n if (isContentEditableFalse$9(contentEditableRoot)) {\n if (!moved) {\n e.preventDefault();\n setContentEditableSelection(selectNode(editor, contentEditableRoot));\n }\n }\n });\n };\n var hasNormalCaretPosition = function (elm) {\n var caretWalker = CaretWalker(elm);\n if (!elm.firstChild) {\n return false;\n }\n var startPos = CaretPosition$1.before(elm.firstChild);\n var newPos = caretWalker.next(startPos);\n return newPos && !isBeforeContentEditableFalse(newPos) && !isAfterContentEditableFalse(newPos);\n };\n var isInSameBlock = function (node1, node2) {\n var block1 = editor.dom.getParent(node1, editor.dom.isBlock);\n var block2 = editor.dom.getParent(node2, editor.dom.isBlock);\n return block1 === block2;\n };\n var hasBetterMouseTarget = function (targetNode, caretNode) {\n var targetBlock = editor.dom.getParent(targetNode, editor.dom.isBlock);\n var caretBlock = editor.dom.getParent(caretNode, editor.dom.isBlock);\n if (targetBlock && editor.dom.isChildOf(targetBlock, caretBlock) && isContentEditableFalse$9(getContentEditableRoot$1(editor, targetBlock)) === false) {\n return true;\n }\n return targetBlock && !isInSameBlock(targetBlock, caretBlock) && hasNormalCaretPosition(targetBlock);\n };\n handleTouchSelect(editor);\n editor.on('mousedown', function (e) {\n var contentEditableRoot;\n var targetElm = e.target;\n if (targetElm !== rootNode && targetElm.nodeName !== 'HTML' && !editor.dom.isChildOf(targetElm, rootNode)) {\n return;\n }\n if (EditorView.isXYInContentArea(editor, e.clientX, e.clientY) === false) {\n return;\n }\n contentEditableRoot = getContentEditableRoot$1(editor, targetElm);\n if (contentEditableRoot) {\n if (isContentEditableFalse$9(contentEditableRoot)) {\n e.preventDefault();\n setContentEditableSelection(selectNode(editor, contentEditableRoot));\n } else {\n removeContentEditableSelection();\n if (!(isContentEditableTrue$4(contentEditableRoot) && e.shiftKey) && !RangePoint.isXYWithinRange(e.clientX, e.clientY, editor.selection.getRng())) {\n hideFakeCaret();\n editor.selection.placeCaretAt(e.clientX, e.clientY);\n }\n }\n } else if (isFakeCaretTarget(targetElm) === false) {\n removeContentEditableSelection();\n hideFakeCaret();\n var caretInfo = closestCaret(rootNode, e.clientX, e.clientY);\n if (caretInfo) {\n if (!hasBetterMouseTarget(e.target, caretInfo.node)) {\n e.preventDefault();\n var range = showCaret(1, caretInfo.node, caretInfo.before, false);\n editor.getBody().focus();\n setRange(range);\n }\n }\n }\n });\n editor.on('keypress', function (e) {\n if (VK.modifierPressed(e)) {\n return;\n }\n switch (e.keyCode) {\n default:\n if (isContentEditableFalse$9(editor.selection.getNode())) {\n e.preventDefault();\n }\n break;\n }\n });\n editor.on('getSelectionRange', function (e) {\n var rng = e.range;\n if (selectedContentEditableNode) {\n if (!selectedContentEditableNode.parentNode) {\n selectedContentEditableNode = null;\n return;\n }\n rng = rng.cloneRange();\n rng.selectNode(selectedContentEditableNode);\n e.range = rng;\n }\n });\n editor.on('setSelectionRange', function (e) {\n e.range = normalizeShortEndedElementSelection(e.range);\n var rng = setContentEditableSelection(e.range, e.forward);\n if (rng) {\n e.range = rng;\n }\n });\n var isPasteBin = function (node) {\n return node.id === 'mcepastebin';\n };\n editor.on('AfterSetSelectionRange', function (e) {\n var rng = e.range;\n if (!isRangeInCaretContainer(rng) && !isPasteBin(rng.startContainer.parentNode)) {\n hideFakeCaret();\n }\n if (!isFakeSelectionElement(rng.startContainer.parentNode)) {\n removeContentEditableSelection();\n }\n });\n editor.on('copy', function (e) {\n var clipboardData = e.clipboardData;\n if (!e.isDefaultPrevented() && e.clipboardData && !Env.ie) {\n var realSelectionElement = getRealSelectionElement();\n if (realSelectionElement) {\n e.preventDefault();\n clipboardData.clearData();\n clipboardData.setData('text/html', realSelectionElement.outerHTML);\n clipboardData.setData('text/plain', realSelectionElement.outerText);\n }\n }\n });\n DragDropOverrides.init(editor);\n CefFocus.setup(editor);\n };\n var addCss = function () {\n var styles = editor.contentStyles, rootClass = '.mce-content-body';\n styles.push(fakeCaret.getCss());\n styles.push(rootClass + ' .mce-offscreen-selection {' + 'position: absolute;' + 'left: -9999999999px;' + 'max-width: 1000000px;' + '}' + rootClass + ' *[contentEditable=false] {' + 'cursor: default;' + '}' + rootClass + ' *[contentEditable=true] {' + 'cursor: text;' + '}');\n };\n var isWithinCaretContainer = function (node) {\n return isCaretContainer(node) || startsWithCaretContainer(node) || endsWithCaretContainer(node);\n };\n var isRangeInCaretContainer = function (rng) {\n return isWithinCaretContainer(rng.startContainer) || isWithinCaretContainer(rng.endContainer);\n };\n var normalizeShortEndedElementSelection = function (rng) {\n var shortEndedElements = editor.schema.getShortEndedElements();\n var newRng = editor.dom.createRng();\n var startContainer = rng.startContainer;\n var startOffset = rng.startOffset;\n var endContainer = rng.endContainer;\n var endOffset = rng.endOffset;\n if (has(shortEndedElements, startContainer.nodeName.toLowerCase())) {\n if (startOffset === 0) {\n newRng.setStartBefore(startContainer);\n } else {\n newRng.setStartAfter(startContainer);\n }\n } else {\n newRng.setStart(startContainer, startOffset);\n }\n if (has(shortEndedElements, endContainer.nodeName.toLowerCase())) {\n if (endOffset === 0) {\n newRng.setEndBefore(endContainer);\n } else {\n newRng.setEndAfter(endContainer);\n }\n } else {\n newRng.setEnd(endContainer, endOffset);\n }\n return newRng;\n };\n var setContentEditableSelection = function (range, forward) {\n var node;\n var $ = editor.$;\n var dom = editor.dom;\n var $realSelectionContainer, sel, startContainer, startOffset, endOffset, e, caretPosition, targetClone, origTargetClone;\n if (!range) {\n return null;\n }\n if (range.collapsed) {\n if (!isRangeInCaretContainer(range)) {\n if (forward === false) {\n caretPosition = getNormalizedRangeEndPoint(-1, range);\n if (isFakeCaretTarget(caretPosition.getNode(true))) {\n return showCaret(-1, caretPosition.getNode(true), false, false);\n }\n if (isFakeCaretTarget(caretPosition.getNode())) {\n return showCaret(-1, caretPosition.getNode(), !caretPosition.isAtEnd(), false);\n }\n } else {\n caretPosition = getNormalizedRangeEndPoint(1, range);\n if (isFakeCaretTarget(caretPosition.getNode())) {\n return showCaret(1, caretPosition.getNode(), !caretPosition.isAtEnd(), false);\n }\n if (isFakeCaretTarget(caretPosition.getNode(true))) {\n return showCaret(1, caretPosition.getNode(true), false, false);\n }\n }\n }\n return null;\n }\n startContainer = range.startContainer;\n startOffset = range.startOffset;\n endOffset = range.endOffset;\n if (startContainer.nodeType === 3 && startOffset === 0 && isContentEditableFalse$9(startContainer.parentNode)) {\n startContainer = startContainer.parentNode;\n startOffset = dom.nodeIndex(startContainer);\n startContainer = startContainer.parentNode;\n }\n if (startContainer.nodeType !== 1) {\n return null;\n }\n if (endOffset === startOffset + 1 && startContainer === range.endContainer) {\n node = startContainer.childNodes[startOffset];\n }\n if (!isContentEditableFalse$9(node)) {\n return null;\n }\n targetClone = origTargetClone = node.cloneNode(true);\n e = editor.fire('ObjectSelected', {\n target: node,\n targetClone: targetClone\n });\n if (e.isDefaultPrevented()) {\n return null;\n }\n $realSelectionContainer = descendant(Element.fromDom(editor.getBody()), '#' + realSelectionId).fold(function () {\n return $([]);\n }, function (elm) {\n return $([elm.dom()]);\n });\n targetClone = e.targetClone;\n if ($realSelectionContainer.length === 0) {\n $realSelectionContainer = $('
').attr('id', realSelectionId);\n $realSelectionContainer.appendTo(editor.getBody());\n }\n range = editor.dom.createRng();\n if (targetClone === origTargetClone && Env.ie) {\n $realSelectionContainer.empty().append('

\\xA0

').append(targetClone);\n range.setStartAfter($realSelectionContainer[0].firstChild.firstChild);\n range.setEndAfter(targetClone);\n } else {\n $realSelectionContainer.empty().append('\\xA0').append(targetClone).append('\\xA0');\n range.setStart($realSelectionContainer[0].firstChild, 1);\n range.setEnd($realSelectionContainer[0].lastChild, 0);\n }\n $realSelectionContainer.css({ top: dom.getPos(node, editor.getBody()).y });\n $realSelectionContainer[0].focus();\n sel = editor.selection.getSel();\n sel.removeAllRanges();\n sel.addRange(range);\n each(descendants$1(Element.fromDom(editor.getBody()), '*[data-mce-selected]'), function (elm) {\n remove(elm, 'data-mce-selected');\n });\n node.setAttribute('data-mce-selected', '1');\n selectedContentEditableNode = node;\n hideFakeCaret();\n return range;\n };\n var removeContentEditableSelection = function () {\n if (selectedContentEditableNode) {\n selectedContentEditableNode.removeAttribute('data-mce-selected');\n descendant(Element.fromDom(editor.getBody()), '#' + realSelectionId).each(remove$1);\n selectedContentEditableNode = null;\n }\n descendant(Element.fromDom(editor.getBody()), '#' + realSelectionId).each(remove$1);\n selectedContentEditableNode = null;\n };\n var destroy = function () {\n fakeCaret.destroy();\n selectedContentEditableNode = null;\n };\n var hideFakeCaret = function () {\n fakeCaret.hide();\n };\n if (Env.ceFalse) {\n registerEvents();\n addCss();\n }\n return {\n showCaret: showCaret,\n showBlockCaretContainer: showBlockCaretContainer,\n hideFakeCaret: hideFakeCaret,\n destroy: destroy\n };\n };\n\n var isValidPrefixAttrName = function (name) {\n return name.indexOf('data-') === 0 || name.indexOf('aria-') === 0;\n };\n var trimComments = function (text) {\n var sanitizedText = text;\n while (/';\n }\n return '';\n };\n var createFragment$1 = function (html) {\n var frag, node, container;\n container = domGlobals.document.createElement('div');\n frag = domGlobals.document.createDocumentFragment();\n if (html) {\n container.innerHTML = html;\n }\n while (node = container.firstChild) {\n frag.appendChild(node);\n }\n return frag;\n };\n var insertAt = function (elm, html, index) {\n var fragment = createFragment$1(html);\n if (elm.hasChildNodes() && index < elm.childNodes.length) {\n var target = elm.childNodes[index];\n target.parentNode.insertBefore(fragment, target);\n } else {\n elm.appendChild(fragment);\n }\n };\n var removeAt = function (elm, index) {\n if (elm.hasChildNodes() && index < elm.childNodes.length) {\n var target = elm.childNodes[index];\n target.parentNode.removeChild(target);\n }\n };\n var applyDiff = function (diff, elm) {\n var index = 0;\n each(diff, function (action) {\n if (action[0] === Diff.KEEP) {\n index++;\n } else if (action[0] === Diff.INSERT) {\n insertAt(elm, action[1], index);\n index++;\n } else if (action[0] === Diff.DELETE) {\n removeAt(elm, index);\n }\n });\n };\n var read$3 = function (elm) {\n return filter(map(from$1(elm.childNodes), getOuterHtml), function (item) {\n return item.length > 0;\n });\n };\n var write = function (fragments, elm) {\n var currentFragments = map(from$1(elm.childNodes), getOuterHtml);\n applyDiff(Diff.diff(currentFragments, fragments), elm);\n return elm;\n };\n var Fragments = {\n read: read$3,\n write: write\n };\n\n var undoLevelDocument = Cell(Option.none());\n var lazyTempDocument = function () {\n return undoLevelDocument.get().getOrThunk(function () {\n var doc = domGlobals.document.implementation.createHTMLDocument('undo');\n undoLevelDocument.set(Option.some(doc));\n return doc;\n });\n };\n var hasIframes = function (html) {\n return html.indexOf('') !== -1;\n };\n var createFragmentedLevel = function (fragments) {\n return {\n type: 'fragmented',\n fragments: fragments,\n content: '',\n bookmark: null,\n beforeBookmark: null\n };\n };\n var createCompleteLevel = function (content) {\n return {\n type: 'complete',\n fragments: null,\n content: content,\n bookmark: null,\n beforeBookmark: null\n };\n };\n var createFromEditor = function (editor) {\n var fragments, content, trimmedFragments;\n fragments = Fragments.read(editor.getBody());\n trimmedFragments = bind(fragments, function (html) {\n var trimmed = TrimHtml.trimInternal(editor.serializer, html);\n return trimmed.length > 0 ? [trimmed] : [];\n });\n content = trimmedFragments.join('');\n return hasIframes(content) ? createFragmentedLevel(trimmedFragments) : createCompleteLevel(content);\n };\n var applyToEditor = function (editor, level, before) {\n if (level.type === 'fragmented') {\n Fragments.write(level.fragments, editor.getBody());\n } else {\n editor.setContent(level.content, { format: 'raw' });\n }\n editor.selection.moveToBookmark(before ? level.beforeBookmark : level.bookmark);\n };\n var getLevelContent = function (level) {\n return level.type === 'fragmented' ? level.fragments.join('') : level.content;\n };\n var getCleanLevelContent = function (level) {\n var elm = Element.fromTag('body', lazyTempDocument());\n set$1(elm, getLevelContent(level));\n each(descendants$1(elm, '*[data-mce-bogus]'), unwrap);\n return get$3(elm);\n };\n var hasEqualContent = function (level1, level2) {\n return getLevelContent(level1) === getLevelContent(level2);\n };\n var hasEqualCleanedContent = function (level1, level2) {\n return getCleanLevelContent(level1) === getCleanLevelContent(level2);\n };\n var isEq$4 = function (level1, level2) {\n if (!level1 || !level2) {\n return false;\n } else if (hasEqualContent(level1, level2)) {\n return true;\n } else {\n return hasEqualCleanedContent(level1, level2);\n }\n };\n var Levels = {\n createFragmentedLevel: createFragmentedLevel,\n createCompleteLevel: createCompleteLevel,\n createFromEditor: createFromEditor,\n applyToEditor: applyToEditor,\n isEq: isEq$4\n };\n\n function UndoManager (editor) {\n var self = this, index = 0, data = [], beforeBookmark, isFirstTypedCharacter, locks = 0;\n var isUnlocked = function () {\n return locks === 0;\n };\n var setTyping = function (typing) {\n if (isUnlocked()) {\n self.typing = typing;\n }\n };\n var setDirty = function (state) {\n editor.setDirty(state);\n };\n var addNonTypingUndoLevel = function (e) {\n setTyping(false);\n self.add({}, e);\n };\n var endTyping = function () {\n if (self.typing) {\n setTyping(false);\n self.add();\n }\n };\n editor.on('init', function () {\n self.add();\n });\n editor.on('BeforeExecCommand', function (e) {\n var cmd = e.command;\n if (cmd !== 'Undo' && cmd !== 'Redo' && cmd !== 'mceRepaint') {\n endTyping();\n self.beforeChange();\n }\n });\n editor.on('ExecCommand', function (e) {\n var cmd = e.command;\n if (cmd !== 'Undo' && cmd !== 'Redo' && cmd !== 'mceRepaint') {\n addNonTypingUndoLevel(e);\n }\n });\n editor.on('ObjectResizeStart Cut', function () {\n self.beforeChange();\n });\n editor.on('SaveContent ObjectResized blur', addNonTypingUndoLevel);\n editor.on('DragEnd', addNonTypingUndoLevel);\n editor.on('KeyUp', function (e) {\n var keyCode = e.keyCode;\n if (e.isDefaultPrevented()) {\n return;\n }\n if (keyCode >= 33 && keyCode <= 36 || keyCode >= 37 && keyCode <= 40 || keyCode === 45 || e.ctrlKey) {\n addNonTypingUndoLevel();\n editor.nodeChanged();\n }\n if (keyCode === 46 || keyCode === 8) {\n editor.nodeChanged();\n }\n if (isFirstTypedCharacter && self.typing && Levels.isEq(Levels.createFromEditor(editor), data[0]) === false) {\n if (editor.isDirty() === false) {\n setDirty(true);\n editor.fire('change', {\n level: data[0],\n lastLevel: null\n });\n }\n editor.fire('TypingUndo');\n isFirstTypedCharacter = false;\n editor.nodeChanged();\n }\n });\n editor.on('KeyDown', function (e) {\n var keyCode = e.keyCode;\n if (e.isDefaultPrevented()) {\n return;\n }\n if (keyCode >= 33 && keyCode <= 36 || keyCode >= 37 && keyCode <= 40 || keyCode === 45) {\n if (self.typing) {\n addNonTypingUndoLevel(e);\n }\n return;\n }\n var modKey = e.ctrlKey && !e.altKey || e.metaKey;\n if ((keyCode < 16 || keyCode > 20) && keyCode !== 224 && keyCode !== 91 && !self.typing && !modKey) {\n self.beforeChange();\n setTyping(true);\n self.add({}, e);\n isFirstTypedCharacter = true;\n }\n });\n editor.on('MouseDown', function (e) {\n if (self.typing) {\n addNonTypingUndoLevel(e);\n }\n });\n var isInsertReplacementText = function (event) {\n return event.inputType === 'insertReplacementText';\n };\n var isInsertTextDataNull = function (event) {\n return event.inputType === 'insertText' && event.data === null;\n };\n editor.on('input', function (e) {\n if (e.inputType && (isInsertReplacementText(e) || isInsertTextDataNull(e))) {\n addNonTypingUndoLevel(e);\n }\n });\n editor.addShortcut('meta+z', '', 'Undo');\n editor.addShortcut('meta+y,meta+shift+z', '', 'Redo');\n editor.on('AddUndo Undo Redo ClearUndos', function (e) {\n if (!e.isDefaultPrevented()) {\n editor.nodeChanged();\n }\n });\n self = {\n data: data,\n typing: false,\n beforeChange: function () {\n if (isUnlocked()) {\n beforeBookmark = GetBookmark.getUndoBookmark(editor.selection);\n }\n },\n add: function (level, event) {\n var i;\n var settings = editor.settings;\n var lastLevel, currentLevel;\n currentLevel = Levels.createFromEditor(editor);\n level = level || {};\n level = Tools.extend(level, currentLevel);\n if (isUnlocked() === false || editor.removed) {\n return null;\n }\n lastLevel = data[index];\n if (editor.fire('BeforeAddUndo', {\n level: level,\n lastLevel: lastLevel,\n originalEvent: event\n }).isDefaultPrevented()) {\n return null;\n }\n if (lastLevel && Levels.isEq(lastLevel, level)) {\n return null;\n }\n if (data[index]) {\n data[index].beforeBookmark = beforeBookmark;\n }\n if (settings.custom_undo_redo_levels) {\n if (data.length > settings.custom_undo_redo_levels) {\n for (i = 0; i < data.length - 1; i++) {\n data[i] = data[i + 1];\n }\n data.length--;\n index = data.length;\n }\n }\n level.bookmark = GetBookmark.getUndoBookmark(editor.selection);\n if (index < data.length - 1) {\n data.length = index + 1;\n }\n data.push(level);\n index = data.length - 1;\n var args = {\n level: level,\n lastLevel: lastLevel,\n originalEvent: event\n };\n editor.fire('AddUndo', args);\n if (index > 0) {\n setDirty(true);\n editor.fire('change', args);\n }\n return level;\n },\n undo: function () {\n var level;\n if (self.typing) {\n self.add();\n self.typing = false;\n setTyping(false);\n }\n if (index > 0) {\n level = data[--index];\n Levels.applyToEditor(editor, level, true);\n setDirty(true);\n editor.fire('undo', { level: level });\n }\n return level;\n },\n redo: function () {\n var level;\n if (index < data.length - 1) {\n level = data[++index];\n Levels.applyToEditor(editor, level, false);\n setDirty(true);\n editor.fire('redo', { level: level });\n }\n return level;\n },\n clear: function () {\n data = [];\n index = 0;\n self.typing = false;\n self.data = data;\n editor.fire('ClearUndos');\n },\n hasUndo: function () {\n return index > 0 || self.typing && data[0] && !Levels.isEq(Levels.createFromEditor(editor), data[0]);\n },\n hasRedo: function () {\n return index < data.length - 1 && !self.typing;\n },\n transact: function (callback) {\n endTyping();\n self.beforeChange();\n self.ignore(callback);\n return self.add();\n },\n ignore: function (callback) {\n try {\n locks++;\n callback();\n } finally {\n locks--;\n }\n },\n extra: function (callback1, callback2) {\n var lastLevel, bookmark;\n if (self.transact(callback1)) {\n bookmark = data[index].bookmark;\n lastLevel = data[index - 1];\n Levels.applyToEditor(editor, lastLevel, true);\n if (self.transact(callback2)) {\n data[index - 1].beforeBookmark = bookmark;\n }\n }\n }\n };\n return self;\n }\n\n var postProcessHooks = {}, filter$2 = ArrUtils.filter, each$c = ArrUtils.each;\n var addPostProcessHook = function (name, hook) {\n var hooks = postProcessHooks[name];\n if (!hooks) {\n postProcessHooks[name] = hooks = [];\n }\n postProcessHooks[name].push(hook);\n };\n var postProcess = function (name, editor) {\n each$c(postProcessHooks[name], function (hook) {\n hook(editor);\n });\n };\n addPostProcessHook('pre', function (editor) {\n var rng = editor.selection.getRng();\n var isPre, blocks;\n var hasPreSibling = function (pre) {\n return isPre(pre.previousSibling) && ArrUtils.indexOf(blocks, pre.previousSibling) !== -1;\n };\n var joinPre = function (pre1, pre2) {\n DomQuery(pre2).remove();\n DomQuery(pre1).append('

').append(pre2.childNodes);\n };\n isPre = NodeType.matchNodeNames('pre');\n if (!rng.collapsed) {\n blocks = editor.selection.getSelectedBlocks();\n each$c(filter$2(filter$2(blocks, isPre), hasPreSibling), function (pre) {\n joinPre(pre.previousSibling, pre);\n });\n }\n });\n var Hooks = { postProcess: postProcess };\n\n var MCE_ATTR_RE = /^(src|href|style)$/;\n var each$d = Tools.each;\n var isEq$5 = FormatUtils.isEq;\n var isTableCell$4 = function (node) {\n return /^(TH|TD)$/.test(node.nodeName);\n };\n var isChildOfInlineParent = function (dom, node, parent) {\n return dom.isChildOf(node, parent) && node !== parent && !dom.isBlock(parent);\n };\n var getContainer = function (ed, rng, start) {\n var container, offset, lastIdx;\n container = rng[start ? 'startContainer' : 'endContainer'];\n offset = rng[start ? 'startOffset' : 'endOffset'];\n if (NodeType.isElement(container)) {\n lastIdx = container.childNodes.length - 1;\n if (!start && offset) {\n offset--;\n }\n container = container.childNodes[offset > lastIdx ? lastIdx : offset];\n }\n if (NodeType.isText(container) && start && offset >= container.nodeValue.length) {\n container = new TreeWalker(container, ed.getBody()).next() || container;\n }\n if (NodeType.isText(container) && !start && offset === 0) {\n container = new TreeWalker(container, ed.getBody()).prev() || container;\n }\n return container;\n };\n var wrap$2 = function (dom, node, name, attrs) {\n var wrapper = dom.create(name, attrs);\n node.parentNode.insertBefore(wrapper, node);\n wrapper.appendChild(node);\n return wrapper;\n };\n var wrapWithSiblings = function (dom, node, next, name, attrs) {\n var start = Element.fromDom(node);\n var wrapper = Element.fromDom(dom.create(name, attrs));\n var siblings = next ? nextSiblings(start) : prevSiblings(start);\n append$1(wrapper, siblings);\n if (next) {\n before(start, wrapper);\n prepend(wrapper, start);\n } else {\n after(start, wrapper);\n append(wrapper, start);\n }\n return wrapper.dom();\n };\n var matchName$1 = function (dom, node, format) {\n if (isEq$5(node, format.inline)) {\n return true;\n }\n if (isEq$5(node, format.block)) {\n return true;\n }\n if (format.selector) {\n return NodeType.isElement(node) && dom.is(node, format.selector);\n }\n };\n var isColorFormatAndAnchor = function (node, format) {\n return format.links && node.tagName === 'A';\n };\n var find$3 = function (dom, node, next, inc) {\n node = FormatUtils.getNonWhiteSpaceSibling(node, next, inc);\n return !node || (node.nodeName === 'BR' || dom.isBlock(node));\n };\n var removeNode$1 = function (ed, node, format) {\n var parentNode = node.parentNode;\n var rootBlockElm;\n var dom = ed.dom, forcedRootBlock = ed.settings.forced_root_block;\n if (format.block) {\n if (!forcedRootBlock) {\n if (dom.isBlock(node) && !dom.isBlock(parentNode)) {\n if (!find$3(dom, node, false) && !find$3(dom, node.firstChild, true, 1)) {\n node.insertBefore(dom.create('br'), node.firstChild);\n }\n if (!find$3(dom, node, true) && !find$3(dom, node.lastChild, false, 1)) {\n node.appendChild(dom.create('br'));\n }\n }\n } else {\n if (parentNode === dom.getRoot()) {\n if (!format.list_block || !isEq$5(node, format.list_block)) {\n each$d(Tools.grep(node.childNodes), function (node) {\n if (FormatUtils.isValid(ed, forcedRootBlock, node.nodeName.toLowerCase())) {\n if (!rootBlockElm) {\n rootBlockElm = wrap$2(dom, node, forcedRootBlock);\n dom.setAttribs(rootBlockElm, ed.settings.forced_root_block_attrs);\n } else {\n rootBlockElm.appendChild(node);\n }\n } else {\n rootBlockElm = 0;\n }\n });\n }\n }\n }\n }\n if (format.selector && format.inline && !isEq$5(format.inline, node)) {\n return;\n }\n dom.remove(node, 1);\n };\n var removeFormat = function (ed, format, vars, node, compareNode) {\n var i, attrs, stylesModified;\n var dom = ed.dom;\n if (!matchName$1(dom, node, format) && !isColorFormatAndAnchor(node, format)) {\n return false;\n }\n if (format.remove !== 'all') {\n each$d(format.styles, function (value, name) {\n value = FormatUtils.normalizeStyleValue(dom, FormatUtils.replaceVars(value, vars), name);\n if (typeof name === 'number') {\n name = value;\n compareNode = 0;\n }\n if (format.remove_similar || (!compareNode || isEq$5(FormatUtils.getStyle(dom, compareNode, name), value))) {\n dom.setStyle(node, name, '');\n }\n stylesModified = 1;\n });\n if (stylesModified && dom.getAttrib(node, 'style') === '') {\n node.removeAttribute('style');\n node.removeAttribute('data-mce-style');\n }\n each$d(format.attributes, function (value, name) {\n var valueOut;\n value = FormatUtils.replaceVars(value, vars);\n if (typeof name === 'number') {\n name = value;\n compareNode = 0;\n }\n if (!compareNode || isEq$5(dom.getAttrib(compareNode, name), value)) {\n if (name === 'class') {\n value = dom.getAttrib(node, name);\n if (value) {\n valueOut = '';\n each$d(value.split(/\\s+/), function (cls) {\n if (/mce\\-\\w+/.test(cls)) {\n valueOut += (valueOut ? ' ' : '') + cls;\n }\n });\n if (valueOut) {\n dom.setAttrib(node, name, valueOut);\n return;\n }\n }\n }\n if (name === 'class') {\n node.removeAttribute('className');\n }\n if (MCE_ATTR_RE.test(name)) {\n node.removeAttribute('data-mce-' + name);\n }\n node.removeAttribute(name);\n }\n });\n each$d(format.classes, function (value) {\n value = FormatUtils.replaceVars(value, vars);\n if (!compareNode || dom.hasClass(compareNode, value)) {\n dom.removeClass(node, value);\n }\n });\n attrs = dom.getAttribs(node);\n for (i = 0; i < attrs.length; i++) {\n var attrName = attrs[i].nodeName;\n if (attrName.indexOf('_') !== 0 && attrName.indexOf('data-') !== 0) {\n return false;\n }\n }\n }\n if (format.remove !== 'none') {\n removeNode$1(ed, node, format);\n return true;\n }\n };\n var findFormatRoot = function (editor, container, name, vars, similar) {\n var formatRoot;\n each$d(FormatUtils.getParents(editor.dom, container.parentNode).reverse(), function (parent) {\n var format;\n if (!formatRoot && parent.id !== '_start' && parent.id !== '_end') {\n format = MatchFormat.matchNode(editor, parent, name, vars, similar);\n if (format && format.split !== false) {\n formatRoot = parent;\n }\n }\n });\n return formatRoot;\n };\n var wrapAndSplit = function (editor, formatList, formatRoot, container, target, split, format, vars) {\n var parent, clone, lastClone, firstClone, i, formatRootParent;\n var dom = editor.dom;\n if (formatRoot) {\n formatRootParent = formatRoot.parentNode;\n for (parent = container.parentNode; parent && parent !== formatRootParent; parent = parent.parentNode) {\n clone = dom.clone(parent, false);\n for (i = 0; i < formatList.length; i++) {\n if (removeFormat(editor, formatList[i], vars, clone, clone)) {\n clone = 0;\n break;\n }\n }\n if (clone) {\n if (lastClone) {\n clone.appendChild(lastClone);\n }\n if (!firstClone) {\n firstClone = clone;\n }\n lastClone = clone;\n }\n }\n if (split && (!format.mixed || !dom.isBlock(formatRoot))) {\n container = dom.split(formatRoot, container);\n }\n if (lastClone) {\n target.parentNode.insertBefore(lastClone, target);\n firstClone.appendChild(target);\n }\n }\n return container;\n };\n var remove$6 = function (ed, name, vars, node, similar) {\n var formatList = ed.formatter.get(name), format = formatList[0];\n var bookmark, rng, contentEditable = true;\n var dom = ed.dom;\n var selection = ed.selection;\n var splitToFormatRoot = function (container) {\n var formatRoot = findFormatRoot(ed, container, name, vars, similar);\n return wrapAndSplit(ed, formatList, formatRoot, container, container, true, format, vars);\n };\n var isRemoveBookmarkNode = function (node) {\n return Bookmarks.isBookmarkNode(node) && NodeType.isElement(node) && (node.id === '_start' || node.id === '_end');\n };\n var process = function (node) {\n var children, i, l, lastContentEditable, hasContentEditableState;\n if (NodeType.isElement(node) && dom.getContentEditable(node)) {\n lastContentEditable = contentEditable;\n contentEditable = dom.getContentEditable(node) === 'true';\n hasContentEditableState = true;\n }\n children = Tools.grep(node.childNodes);\n if (contentEditable && !hasContentEditableState) {\n for (i = 0, l = formatList.length; i < l; i++) {\n if (removeFormat(ed, formatList[i], vars, node, node)) {\n break;\n }\n }\n }\n if (format.deep) {\n if (children.length) {\n for (i = 0, l = children.length; i < l; i++) {\n process(children[i]);\n }\n if (hasContentEditableState) {\n contentEditable = lastContentEditable;\n }\n }\n }\n };\n var unwrap = function (start) {\n var node = dom.get(start ? '_start' : '_end');\n var out = node[start ? 'firstChild' : 'lastChild'];\n if (isRemoveBookmarkNode(out)) {\n out = out[start ? 'firstChild' : 'lastChild'];\n }\n if (NodeType.isText(out) && out.data.length === 0) {\n out = start ? node.previousSibling || node.nextSibling : node.nextSibling || node.previousSibling;\n }\n dom.remove(node, true);\n return out;\n };\n var removeRngStyle = function (rng) {\n var startContainer, endContainer;\n var commonAncestorContainer = rng.commonAncestorContainer;\n rng = ExpandRange.expandRng(ed, rng, formatList, true);\n if (format.split) {\n rng = SplitRange.split(rng);\n startContainer = getContainer(ed, rng, true);\n endContainer = getContainer(ed, rng);\n if (startContainer !== endContainer) {\n if (/^(TR|TH|TD)$/.test(startContainer.nodeName) && startContainer.firstChild) {\n if (startContainer.nodeName === 'TR') {\n startContainer = startContainer.firstChild.firstChild || startContainer;\n } else {\n startContainer = startContainer.firstChild || startContainer;\n }\n }\n if (commonAncestorContainer && /^T(HEAD|BODY|FOOT|R)$/.test(commonAncestorContainer.nodeName) && isTableCell$4(endContainer) && endContainer.firstChild) {\n endContainer = endContainer.firstChild || endContainer;\n }\n if (isChildOfInlineParent(dom, startContainer, endContainer)) {\n var marker = Option.from(startContainer.firstChild).getOr(startContainer);\n splitToFormatRoot(wrapWithSiblings(dom, marker, true, 'span', {\n 'id': '_start',\n 'data-mce-type': 'bookmark'\n }));\n unwrap(true);\n return;\n }\n if (isChildOfInlineParent(dom, endContainer, startContainer)) {\n var marker = Option.from(endContainer.lastChild).getOr(endContainer);\n splitToFormatRoot(wrapWithSiblings(dom, marker, false, 'span', {\n 'id': '_end',\n 'data-mce-type': 'bookmark'\n }));\n unwrap(false);\n return;\n }\n startContainer = wrap$2(dom, startContainer, 'span', {\n 'id': '_start',\n 'data-mce-type': 'bookmark'\n });\n endContainer = wrap$2(dom, endContainer, 'span', {\n 'id': '_end',\n 'data-mce-type': 'bookmark'\n });\n splitToFormatRoot(startContainer);\n splitToFormatRoot(endContainer);\n startContainer = unwrap(true);\n endContainer = unwrap();\n } else {\n startContainer = endContainer = splitToFormatRoot(startContainer);\n }\n rng.startContainer = startContainer.parentNode ? startContainer.parentNode : startContainer;\n rng.startOffset = dom.nodeIndex(startContainer);\n rng.endContainer = endContainer.parentNode ? endContainer.parentNode : endContainer;\n rng.endOffset = dom.nodeIndex(endContainer) + 1;\n }\n RangeWalk.walk(dom, rng, function (nodes) {\n each$d(nodes, function (node) {\n process(node);\n if (NodeType.isElement(node) && ed.dom.getStyle(node, 'text-decoration') === 'underline' && node.parentNode && FormatUtils.getTextDecoration(dom, node.parentNode) === 'underline') {\n removeFormat(ed, {\n deep: false,\n exact: true,\n inline: 'span',\n styles: { textDecoration: 'underline' }\n }, null, node);\n }\n });\n });\n };\n if (node) {\n if (node.nodeType) {\n rng = dom.createRng();\n rng.setStartBefore(node);\n rng.setEndAfter(node);\n removeRngStyle(rng);\n } else {\n removeRngStyle(node);\n }\n return;\n }\n if (dom.getContentEditable(selection.getNode()) === 'false') {\n node = selection.getNode();\n for (var i = 0, l = formatList.length; i < l; i++) {\n if (formatList[i].ceFalseOverride) {\n if (removeFormat(ed, formatList[i], vars, node, node)) {\n break;\n }\n }\n }\n return;\n }\n if (!selection.isCollapsed() || !format.inline || dom.select('td[data-mce-selected],th[data-mce-selected]').length) {\n bookmark = GetBookmark.getPersistentBookmark(ed.selection, true);\n removeRngStyle(selection.getRng());\n selection.moveToBookmark(bookmark);\n if (format.inline && MatchFormat.match(ed, name, vars, selection.getStart())) {\n FormatUtils.moveStart(dom, selection, selection.getRng());\n }\n ed.nodeChanged();\n } else {\n removeCaretFormat(ed, name, vars, similar);\n }\n };\n var RemoveFormat = {\n removeFormat: removeFormat,\n remove: remove$6\n };\n\n var each$e = Tools.each;\n var isElementNode = function (node) {\n return node && node.nodeType === 1 && !Bookmarks.isBookmarkNode(node) && !isCaretNode(node) && !NodeType.isBogus(node);\n };\n var findElementSibling = function (node, siblingName) {\n var sibling;\n for (sibling = node; sibling; sibling = sibling[siblingName]) {\n if (sibling.nodeType === 3 && sibling.nodeValue.length !== 0) {\n return node;\n }\n if (sibling.nodeType === 1 && !Bookmarks.isBookmarkNode(sibling)) {\n return sibling;\n }\n }\n return node;\n };\n var mergeSiblingsNodes = function (dom, prev, next) {\n var sibling, tmpSibling;\n var elementUtils = new ElementUtils(dom);\n if (prev && next) {\n prev = findElementSibling(prev, 'previousSibling');\n next = findElementSibling(next, 'nextSibling');\n if (elementUtils.compare(prev, next)) {\n for (sibling = prev.nextSibling; sibling && sibling !== next;) {\n tmpSibling = sibling;\n sibling = sibling.nextSibling;\n prev.appendChild(tmpSibling);\n }\n dom.remove(next);\n Tools.each(Tools.grep(next.childNodes), function (node) {\n prev.appendChild(node);\n });\n return prev;\n }\n }\n return next;\n };\n var processChildElements = function (node, filter, process) {\n each$e(node.childNodes, function (node) {\n if (isElementNode(node)) {\n if (filter(node)) {\n process(node);\n }\n if (node.hasChildNodes()) {\n processChildElements(node, filter, process);\n }\n }\n });\n };\n var hasStyle = function (dom, name) {\n return curry(function (name, node) {\n return !!(node && FormatUtils.getStyle(dom, node, name));\n }, name);\n };\n var applyStyle = function (dom, name, value) {\n return curry(function (name, value, node) {\n dom.setStyle(node, name, value);\n if (node.getAttribute('style') === '') {\n node.removeAttribute('style');\n }\n unwrapEmptySpan(dom, node);\n }, name, value);\n };\n var unwrapEmptySpan = function (dom, node) {\n if (node.nodeName === 'SPAN' && dom.getAttribs(node).length === 0) {\n dom.remove(node, true);\n }\n };\n var processUnderlineAndColor = function (dom, node) {\n var textDecoration;\n if (node.nodeType === 1 && node.parentNode && node.parentNode.nodeType === 1) {\n textDecoration = FormatUtils.getTextDecoration(dom, node.parentNode);\n if (dom.getStyle(node, 'color') && textDecoration) {\n dom.setStyle(node, 'text-decoration', textDecoration);\n } else if (dom.getStyle(node, 'text-decoration') === textDecoration) {\n dom.setStyle(node, 'text-decoration', null);\n }\n }\n };\n var mergeUnderlineAndColor = function (dom, format, vars, node) {\n if (format.styles.color || format.styles.textDecoration) {\n Tools.walk(node, curry(processUnderlineAndColor, dom), 'childNodes');\n processUnderlineAndColor(dom, node);\n }\n };\n var mergeBackgroundColorAndFontSize = function (dom, format, vars, node) {\n if (format.styles && format.styles.backgroundColor) {\n processChildElements(node, hasStyle(dom, 'fontSize'), applyStyle(dom, 'backgroundColor', FormatUtils.replaceVars(format.styles.backgroundColor, vars)));\n }\n };\n var mergeSubSup = function (dom, format, vars, node) {\n if (format.inline === 'sub' || format.inline === 'sup') {\n processChildElements(node, hasStyle(dom, 'fontSize'), applyStyle(dom, 'fontSize', ''));\n dom.remove(dom.select(format.inline === 'sup' ? 'sub' : 'sup', node), true);\n }\n };\n var mergeSiblings = function (dom, format, vars, node) {\n if (node && format.merge_siblings !== false) {\n node = mergeSiblingsNodes(dom, FormatUtils.getNonWhiteSpaceSibling(node), node);\n node = mergeSiblingsNodes(dom, node, FormatUtils.getNonWhiteSpaceSibling(node, true));\n }\n };\n var clearChildStyles = function (dom, format, node) {\n if (format.clear_child_styles) {\n var selector = format.links ? '*:not(a)' : '*';\n each$e(dom.select(selector, node), function (node) {\n if (isElementNode(node)) {\n each$e(format.styles, function (value, name) {\n dom.setStyle(node, name, '');\n });\n }\n });\n }\n };\n var mergeWithChildren = function (editor, formatList, vars, node) {\n each$e(formatList, function (format) {\n each$e(editor.dom.select(format.inline, node), function (child) {\n if (!isElementNode(child)) {\n return;\n }\n RemoveFormat.removeFormat(editor, format, vars, child, format.exact ? child : null);\n });\n clearChildStyles(editor.dom, format, node);\n });\n };\n var mergeWithParents = function (editor, format, name, vars, node) {\n if (MatchFormat.matchNode(editor, node.parentNode, name, vars)) {\n if (RemoveFormat.removeFormat(editor, format, vars, node)) {\n return;\n }\n }\n if (format.merge_with_parents) {\n editor.dom.getParent(node.parentNode, function (parent) {\n if (MatchFormat.matchNode(editor, parent, name, vars)) {\n RemoveFormat.removeFormat(editor, format, vars, node);\n return true;\n }\n });\n }\n };\n var MergeFormats = {\n mergeWithChildren: mergeWithChildren,\n mergeUnderlineAndColor: mergeUnderlineAndColor,\n mergeBackgroundColorAndFontSize: mergeBackgroundColorAndFontSize,\n mergeSubSup: mergeSubSup,\n mergeSiblings: mergeSiblings,\n mergeWithParents: mergeWithParents\n };\n\n var each$f = Tools.each;\n var isElementNode$1 = function (node) {\n return node && node.nodeType === 1 && !Bookmarks.isBookmarkNode(node) && !isCaretNode(node) && !NodeType.isBogus(node);\n };\n var applyFormat = function (ed, name, vars, node) {\n var formatList = ed.formatter.get(name);\n var format = formatList[0];\n var bookmark, rng;\n var isCollapsed = !node && ed.selection.isCollapsed();\n var dom = ed.dom, selection = ed.selection;\n var setElementFormat = function (elm, fmt) {\n fmt = fmt || format;\n if (elm) {\n if (fmt.onformat) {\n fmt.onformat(elm, fmt, vars, node);\n }\n each$f(fmt.styles, function (value, name) {\n dom.setStyle(elm, name, FormatUtils.replaceVars(value, vars));\n });\n if (fmt.styles) {\n var styleVal = dom.getAttrib(elm, 'style');\n if (styleVal) {\n elm.setAttribute('data-mce-style', styleVal);\n }\n }\n each$f(fmt.attributes, function (value, name) {\n dom.setAttrib(elm, name, FormatUtils.replaceVars(value, vars));\n });\n each$f(fmt.classes, function (value) {\n value = FormatUtils.replaceVars(value, vars);\n if (!dom.hasClass(elm, value)) {\n dom.addClass(elm, value);\n }\n });\n }\n };\n var applyNodeStyle = function (formatList, node) {\n var found = false;\n if (!format.selector) {\n return false;\n }\n each$f(formatList, function (format) {\n if ('collapsed' in format && format.collapsed !== isCollapsed) {\n return;\n }\n if (dom.is(node, format.selector) && !isCaretNode(node)) {\n setElementFormat(node, format);\n found = true;\n return false;\n }\n });\n return found;\n };\n var applyRngStyle = function (dom, rng, bookmark, nodeSpecific) {\n var newWrappers = [];\n var wrapName, wrapElm, contentEditable = true;\n wrapName = format.inline || format.block;\n wrapElm = dom.create(wrapName);\n setElementFormat(wrapElm);\n RangeWalk.walk(dom, rng, function (nodes) {\n var currentWrapElm;\n var process = function (node) {\n var nodeName, parentName, hasContentEditableState, lastContentEditable;\n lastContentEditable = contentEditable;\n nodeName = node.nodeName.toLowerCase();\n parentName = node.parentNode.nodeName.toLowerCase();\n if (node.nodeType === 1 && dom.getContentEditable(node)) {\n lastContentEditable = contentEditable;\n contentEditable = dom.getContentEditable(node) === 'true';\n hasContentEditableState = true;\n }\n if (FormatUtils.isEq(nodeName, 'br')) {\n currentWrapElm = 0;\n if (format.block) {\n dom.remove(node);\n }\n return;\n }\n if (format.wrapper && MatchFormat.matchNode(ed, node, name, vars)) {\n currentWrapElm = 0;\n return;\n }\n if (contentEditable && !hasContentEditableState && format.block && !format.wrapper && FormatUtils.isTextBlock(ed, nodeName) && FormatUtils.isValid(ed, parentName, wrapName)) {\n node = dom.rename(node, wrapName);\n setElementFormat(node);\n newWrappers.push(node);\n currentWrapElm = 0;\n return;\n }\n if (format.selector) {\n var found = applyNodeStyle(formatList, node);\n if (!format.inline || found) {\n currentWrapElm = 0;\n return;\n }\n }\n 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))) {\n if (!currentWrapElm) {\n currentWrapElm = dom.clone(wrapElm, false);\n node.parentNode.insertBefore(currentWrapElm, node);\n newWrappers.push(currentWrapElm);\n }\n currentWrapElm.appendChild(node);\n } else {\n currentWrapElm = 0;\n each$f(Tools.grep(node.childNodes), process);\n if (hasContentEditableState) {\n contentEditable = lastContentEditable;\n }\n currentWrapElm = 0;\n }\n };\n each$f(nodes, process);\n });\n if (format.links === true) {\n each$f(newWrappers, function (node) {\n var process = function (node) {\n if (node.nodeName === 'A') {\n setElementFormat(node, format);\n }\n each$f(Tools.grep(node.childNodes), process);\n };\n process(node);\n });\n }\n each$f(newWrappers, function (node) {\n var childCount;\n var getChildCount = function (node) {\n var count = 0;\n each$f(node.childNodes, function (node) {\n if (!FormatUtils.isWhiteSpaceNode(node) && !Bookmarks.isBookmarkNode(node)) {\n count++;\n }\n });\n return count;\n };\n var getChildElementNode = function (root) {\n var child = false;\n each$f(root.childNodes, function (node) {\n if (isElementNode$1(node)) {\n child = node;\n return false;\n }\n });\n return child;\n };\n var mergeStyles = function (node) {\n var child, clone;\n child = getChildElementNode(node);\n if (child && !Bookmarks.isBookmarkNode(child) && MatchFormat.matchName(dom, child, format)) {\n clone = dom.clone(child, false);\n setElementFormat(clone);\n dom.replace(clone, node, true);\n dom.remove(child, 1);\n }\n return clone || node;\n };\n childCount = getChildCount(node);\n if ((newWrappers.length > 1 || !dom.isBlock(node)) && childCount === 0) {\n dom.remove(node, 1);\n return;\n }\n if (format.inline || format.wrapper) {\n if (!format.exact && childCount === 1) {\n node = mergeStyles(node);\n }\n MergeFormats.mergeWithChildren(ed, formatList, vars, node);\n MergeFormats.mergeWithParents(ed, format, name, vars, node);\n MergeFormats.mergeBackgroundColorAndFontSize(dom, format, vars, node);\n MergeFormats.mergeSubSup(dom, format, vars, node);\n MergeFormats.mergeSiblings(dom, format, vars, node);\n }\n });\n };\n if (dom.getContentEditable(selection.getNode()) === 'false') {\n node = selection.getNode();\n for (var i = 0, l = formatList.length; i < l; i++) {\n if (formatList[i].ceFalseOverride && dom.is(node, formatList[i].selector)) {\n setElementFormat(node, formatList[i]);\n return;\n }\n }\n return;\n }\n if (format) {\n if (node) {\n if (node.nodeType) {\n if (!applyNodeStyle(formatList, node)) {\n rng = dom.createRng();\n rng.setStartBefore(node);\n rng.setEndAfter(node);\n applyRngStyle(dom, ExpandRange.expandRng(ed, rng, formatList), null, true);\n }\n } else {\n applyRngStyle(dom, node, null, true);\n }\n } else {\n if (!isCollapsed || !format.inline || dom.select('td[data-mce-selected],th[data-mce-selected]').length) {\n var curSelNode = ed.selection.getNode();\n if (!ed.settings.forced_root_block && formatList[0].defaultBlock && !dom.getParent(curSelNode, dom.isBlock)) {\n applyFormat(ed, formatList[0].defaultBlock);\n }\n ed.selection.setRng(RangeNormalizer.normalize(ed.selection.getRng()));\n bookmark = GetBookmark.getPersistentBookmark(ed.selection, true);\n applyRngStyle(dom, ExpandRange.expandRng(ed, selection.getRng(), formatList));\n if (format.styles) {\n MergeFormats.mergeUnderlineAndColor(dom, format, vars, curSelNode);\n }\n selection.moveToBookmark(bookmark);\n FormatUtils.moveStart(dom, selection, selection.getRng());\n ed.nodeChanged();\n } else {\n applyCaretFormat(ed, name, vars);\n }\n }\n Hooks.postProcess(name, ed);\n }\n };\n var ApplyFormat = { applyFormat: applyFormat };\n\n var each$g = Tools.each;\n var setup$5 = function (formatChangeData, editor) {\n var currentFormats = {};\n formatChangeData.set({});\n editor.on('NodeChange', function (e) {\n var parents = FormatUtils.getParents(editor.dom, e.element);\n var matchedFormats = {};\n parents = Tools.grep(parents, function (node) {\n return node.nodeType === 1 && !node.getAttribute('data-mce-bogus');\n });\n each$g(formatChangeData.get(), function (callbacks, format) {\n each$g(parents, function (node) {\n if (editor.formatter.matchNode(node, format, {}, callbacks.similar)) {\n if (!currentFormats[format]) {\n each$g(callbacks, function (callback) {\n callback(true, {\n node: node,\n format: format,\n parents: parents\n });\n });\n currentFormats[format] = callbacks;\n }\n matchedFormats[format] = callbacks;\n return false;\n }\n if (MatchFormat.matchesUnInheritedFormatSelector(editor, node, format)) {\n return false;\n }\n });\n });\n each$g(currentFormats, function (callbacks, format) {\n if (!matchedFormats[format]) {\n delete currentFormats[format];\n each$g(callbacks, function (callback) {\n callback(false, {\n node: e.element,\n format: format,\n parents: parents\n });\n });\n }\n });\n });\n };\n var addListeners = function (formatChangeData, formats, callback, similar) {\n var formatChangeItems = formatChangeData.get();\n each$g(formats.split(','), function (format) {\n if (!formatChangeItems[format]) {\n formatChangeItems[format] = [];\n formatChangeItems[format].similar = similar;\n }\n formatChangeItems[format].push(callback);\n });\n formatChangeData.set(formatChangeItems);\n };\n var formatChanged = function (editor, formatChangeState, formats, callback, similar) {\n if (formatChangeState.get() === null) {\n setup$5(formatChangeState, editor);\n }\n addListeners(formatChangeState, formats, callback, similar);\n };\n var FormatChanged = { formatChanged: formatChanged };\n\n var get$5 = function (dom) {\n var formats = {\n valigntop: [{\n selector: 'td,th',\n styles: { verticalAlign: 'top' }\n }],\n valignmiddle: [{\n selector: 'td,th',\n styles: { verticalAlign: 'middle' }\n }],\n valignbottom: [{\n selector: 'td,th',\n styles: { verticalAlign: 'bottom' }\n }],\n alignleft: [\n {\n selector: 'figure.image',\n collapsed: false,\n classes: 'align-left',\n ceFalseOverride: true,\n preview: 'font-family font-size'\n },\n {\n selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li',\n styles: { textAlign: 'left' },\n inherit: false,\n preview: false,\n defaultBlock: 'div'\n },\n {\n selector: 'img,table',\n collapsed: false,\n styles: { float: 'left' },\n preview: 'font-family font-size'\n }\n ],\n aligncenter: [\n {\n selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li',\n styles: { textAlign: 'center' },\n inherit: false,\n preview: 'font-family font-size',\n defaultBlock: 'div'\n },\n {\n selector: 'figure.image',\n collapsed: false,\n classes: 'align-center',\n ceFalseOverride: true,\n preview: 'font-family font-size'\n },\n {\n selector: 'img',\n collapsed: false,\n styles: {\n display: 'block',\n marginLeft: 'auto',\n marginRight: 'auto'\n },\n preview: false\n },\n {\n selector: 'table',\n collapsed: false,\n styles: {\n marginLeft: 'auto',\n marginRight: 'auto'\n },\n preview: 'font-family font-size'\n }\n ],\n alignright: [\n {\n selector: 'figure.image',\n collapsed: false,\n classes: 'align-right',\n ceFalseOverride: true,\n preview: 'font-family font-size'\n },\n {\n selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li',\n styles: { textAlign: 'right' },\n inherit: false,\n preview: 'font-family font-size',\n defaultBlock: 'div'\n },\n {\n selector: 'img,table',\n collapsed: false,\n styles: { float: 'right' },\n preview: 'font-family font-size'\n }\n ],\n alignjustify: [{\n selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li',\n styles: { textAlign: 'justify' },\n inherit: false,\n defaultBlock: 'div',\n preview: 'font-family font-size'\n }],\n bold: [\n {\n inline: 'strong',\n remove: 'all'\n },\n {\n inline: 'span',\n styles: { fontWeight: 'bold' }\n },\n {\n inline: 'b',\n remove: 'all'\n }\n ],\n italic: [\n {\n inline: 'em',\n remove: 'all'\n },\n {\n inline: 'span',\n styles: { fontStyle: 'italic' }\n },\n {\n inline: 'i',\n remove: 'all'\n }\n ],\n underline: [\n {\n inline: 'span',\n styles: { textDecoration: 'underline' },\n exact: true\n },\n {\n inline: 'u',\n remove: 'all'\n }\n ],\n strikethrough: [\n {\n inline: 'span',\n styles: { textDecoration: 'line-through' },\n exact: true\n },\n {\n inline: 'strike',\n remove: 'all'\n }\n ],\n forecolor: {\n inline: 'span',\n styles: { color: '%value' },\n links: true,\n remove_similar: true,\n clear_child_styles: true\n },\n hilitecolor: {\n inline: 'span',\n styles: { backgroundColor: '%value' },\n links: true,\n remove_similar: true,\n clear_child_styles: true\n },\n fontname: {\n inline: 'span',\n toggle: false,\n styles: { fontFamily: '%value' },\n clear_child_styles: true\n },\n fontsize: {\n inline: 'span',\n toggle: false,\n styles: { fontSize: '%value' },\n clear_child_styles: true\n },\n fontsize_class: {\n inline: 'span',\n attributes: { class: '%value' }\n },\n blockquote: {\n block: 'blockquote',\n wrapper: 1,\n remove: 'all'\n },\n subscript: { inline: 'sub' },\n superscript: { inline: 'sup' },\n code: { inline: 'code' },\n link: {\n inline: 'a',\n selector: 'a',\n remove: 'all',\n split: true,\n deep: true,\n onmatch: function () {\n return true;\n },\n onformat: function (elm, fmt, vars) {\n Tools.each(vars, function (value, key) {\n dom.setAttrib(elm, key, value);\n });\n }\n },\n removeformat: [\n {\n selector: 'b,strong,em,i,font,u,strike,sub,sup,dfn,code,samp,kbd,var,cite,mark,q,del,ins',\n remove: 'all',\n split: true,\n expand: false,\n block_expand: true,\n deep: true\n },\n {\n selector: 'span',\n attributes: [\n 'style',\n 'class'\n ],\n remove: 'empty',\n split: true,\n expand: false,\n deep: true\n },\n {\n selector: '*',\n attributes: [\n 'style',\n 'class'\n ],\n split: false,\n expand: false,\n deep: true\n }\n ]\n };\n Tools.each('p h1 h2 h3 h4 h5 h6 div address pre div dt dd samp'.split(/\\s/), function (name) {\n formats[name] = {\n block: name,\n remove: 'all'\n };\n });\n return formats;\n };\n var DefaultFormats = { get: get$5 };\n\n function FormatRegistry (editor) {\n var formats = {};\n var get = function (name) {\n return name ? formats[name] : formats;\n };\n var register = function (name, format) {\n if (name) {\n if (typeof name !== 'string') {\n Tools.each(name, function (format, name) {\n register(name, format);\n });\n } else {\n format = format.length ? format : [format];\n Tools.each(format, function (format) {\n if (typeof format.deep === 'undefined') {\n format.deep = !format.selector;\n }\n if (typeof format.split === 'undefined') {\n format.split = !format.selector || format.inline;\n }\n if (typeof format.remove === 'undefined' && format.selector && !format.inline) {\n format.remove = 'none';\n }\n if (format.selector && format.inline) {\n format.mixed = true;\n format.block_expand = true;\n }\n if (typeof format.classes === 'string') {\n format.classes = format.classes.split(/\\s+/);\n }\n });\n formats[name] = format;\n }\n }\n };\n var unregister = function (name) {\n if (name && formats[name]) {\n delete formats[name];\n }\n return formats;\n };\n register(DefaultFormats.get(editor.dom));\n register(editor.settings.formats);\n return {\n get: get,\n register: register,\n unregister: unregister\n };\n }\n\n var each$h = Tools.each;\n var dom = DOMUtils$1.DOM;\n var parsedSelectorToHtml = function (ancestry, editor) {\n var elm, item, fragment;\n var schema = editor && editor.schema || Schema({});\n var decorate = function (elm, item) {\n if (item.classes.length) {\n dom.addClass(elm, item.classes.join(' '));\n }\n dom.setAttribs(elm, item.attrs);\n };\n var createElement = function (sItem) {\n var elm;\n item = typeof sItem === 'string' ? {\n name: sItem,\n classes: [],\n attrs: {}\n } : sItem;\n elm = dom.create(item.name);\n decorate(elm, item);\n return elm;\n };\n var getRequiredParent = function (elm, candidate) {\n var name = typeof elm !== 'string' ? elm.nodeName.toLowerCase() : elm;\n var elmRule = schema.getElementRule(name);\n var parentsRequired = elmRule && elmRule.parentsRequired;\n if (parentsRequired && parentsRequired.length) {\n return candidate && Tools.inArray(parentsRequired, candidate) !== -1 ? candidate : parentsRequired[0];\n } else {\n return false;\n }\n };\n var wrapInHtml = function (elm, ancestry, siblings) {\n var parent, parentCandidate, parentRequired;\n var ancestor = ancestry.length > 0 && ancestry[0];\n var ancestorName = ancestor && ancestor.name;\n parentRequired = getRequiredParent(elm, ancestorName);\n if (parentRequired) {\n if (ancestorName === parentRequired) {\n parentCandidate = ancestry[0];\n ancestry = ancestry.slice(1);\n } else {\n parentCandidate = parentRequired;\n }\n } else if (ancestor) {\n parentCandidate = ancestry[0];\n ancestry = ancestry.slice(1);\n } else if (!siblings) {\n return elm;\n }\n if (parentCandidate) {\n parent = createElement(parentCandidate);\n parent.appendChild(elm);\n }\n if (siblings) {\n if (!parent) {\n parent = dom.create('div');\n parent.appendChild(elm);\n }\n Tools.each(siblings, function (sibling) {\n var siblingElm = createElement(sibling);\n parent.insertBefore(siblingElm, elm);\n });\n }\n return wrapInHtml(parent, ancestry, parentCandidate && parentCandidate.siblings);\n };\n if (ancestry && ancestry.length) {\n item = ancestry[0];\n elm = createElement(item);\n fragment = dom.create('div');\n fragment.appendChild(wrapInHtml(elm, ancestry.slice(1), item.siblings));\n return fragment;\n } else {\n return '';\n }\n };\n var selectorToHtml = function (selector, editor) {\n return parsedSelectorToHtml(parseSelector(selector), editor);\n };\n var parseSelectorItem = function (item) {\n var tagName;\n var obj = {\n classes: [],\n attrs: {}\n };\n item = obj.selector = Tools.trim(item);\n if (item !== '*') {\n tagName = item.replace(/(?:([#\\.]|::?)([\\w\\-]+)|(\\[)([^\\]]+)\\]?)/g, function ($0, $1, $2, $3, $4) {\n switch ($1) {\n case '#':\n obj.attrs.id = $2;\n break;\n case '.':\n obj.classes.push($2);\n break;\n case ':':\n if (Tools.inArray('checked disabled enabled read-only required'.split(' '), $2) !== -1) {\n obj.attrs[$2] = $2;\n }\n break;\n }\n if ($3 === '[') {\n var m = $4.match(/([\\w\\-]+)(?:\\=\\\"([^\\\"]+))?/);\n if (m) {\n obj.attrs[m[1]] = m[2];\n }\n }\n return '';\n });\n }\n obj.name = tagName || 'div';\n return obj;\n };\n var parseSelector = function (selector) {\n if (!selector || typeof selector !== 'string') {\n return [];\n }\n selector = selector.split(/\\s*,\\s*/)[0];\n selector = selector.replace(/\\s*(~\\+|~|\\+|>)\\s*/g, '$1');\n return Tools.map(selector.split(/(?:>|\\s+(?![^\\[\\]]+\\]))/), function (item) {\n var siblings = Tools.map(item.split(/(?:~\\+|~|\\+)/), parseSelectorItem);\n var obj = siblings.pop();\n if (siblings.length) {\n obj.siblings = siblings;\n }\n return obj;\n }).reverse();\n };\n var getCssText = function (editor, format) {\n var name, previewFrag, previewElm, items;\n var previewCss = '', parentFontSize, previewStyles;\n previewStyles = editor.settings.preview_styles;\n if (previewStyles === false) {\n return '';\n }\n if (typeof previewStyles !== 'string') {\n previewStyles = 'font-family font-size font-weight font-style text-decoration ' + 'text-transform color background-color border border-radius outline text-shadow';\n }\n var removeVars = function (val) {\n return val.replace(/%(\\w+)/g, '');\n };\n if (typeof format === 'string') {\n format = editor.formatter.get(format);\n if (!format) {\n return;\n }\n format = format[0];\n }\n if ('preview' in format) {\n previewStyles = format.preview;\n if (previewStyles === false) {\n return '';\n }\n }\n name = format.block || format.inline || 'span';\n items = parseSelector(format.selector);\n if (items.length) {\n if (!items[0].name) {\n items[0].name = name;\n }\n name = format.selector;\n previewFrag = parsedSelectorToHtml(items, editor);\n } else {\n previewFrag = parsedSelectorToHtml([name], editor);\n }\n previewElm = dom.select(name, previewFrag)[0] || previewFrag.firstChild;\n each$h(format.styles, function (value, name) {\n value = removeVars(value);\n if (value) {\n dom.setStyle(previewElm, name, value);\n }\n });\n each$h(format.attributes, function (value, name) {\n value = removeVars(value);\n if (value) {\n dom.setAttrib(previewElm, name, value);\n }\n });\n each$h(format.classes, function (value) {\n value = removeVars(value);\n if (!dom.hasClass(previewElm, value)) {\n dom.addClass(previewElm, value);\n }\n });\n editor.fire('PreviewFormats');\n dom.setStyles(previewFrag, {\n position: 'absolute',\n left: -65535\n });\n editor.getBody().appendChild(previewFrag);\n parentFontSize = dom.getStyle(editor.getBody(), 'fontSize', true);\n parentFontSize = /px$/.test(parentFontSize) ? parseInt(parentFontSize, 10) : 0;\n each$h(previewStyles.split(' '), function (name) {\n var value = dom.getStyle(previewElm, name, true);\n if (name === 'background-color' && /transparent|rgba\\s*\\([^)]+,\\s*0\\)/.test(value)) {\n value = dom.getStyle(editor.getBody(), name, true);\n if (dom.toHex(value).toLowerCase() === '#ffffff') {\n return;\n }\n }\n if (name === 'color') {\n if (dom.toHex(value).toLowerCase() === '#000000') {\n return;\n }\n }\n if (name === 'font-size') {\n if (/em|%$/.test(value)) {\n if (parentFontSize === 0) {\n return;\n }\n var numValue = parseFloat(value) / (/%$/.test(value) ? 100 : 1);\n value = numValue * parentFontSize + 'px';\n }\n }\n if (name === 'border' && value) {\n previewCss += 'padding:0 2px;';\n }\n previewCss += name + ':' + value + ';';\n });\n editor.fire('AfterPreviewFormats');\n dom.remove(previewFrag);\n return previewCss;\n };\n var Preview = {\n getCssText: getCssText,\n parseSelector: parseSelector,\n selectorToHtml: selectorToHtml\n };\n\n var toggle = function (editor, formats, name, vars, node) {\n var fmt = formats.get(name);\n if (MatchFormat.match(editor, name, vars, node) && (!('toggle' in fmt[0]) || fmt[0].toggle)) {\n RemoveFormat.remove(editor, name, vars, node);\n } else {\n ApplyFormat.applyFormat(editor, name, vars, node);\n }\n };\n var ToggleFormat = { toggle: toggle };\n\n var setup$6 = function (editor) {\n editor.addShortcut('meta+b', '', 'Bold');\n editor.addShortcut('meta+i', '', 'Italic');\n editor.addShortcut('meta+u', '', 'Underline');\n for (var i = 1; i <= 6; i++) {\n editor.addShortcut('access+' + i, '', [\n 'FormatBlock',\n false,\n 'h' + i\n ]);\n }\n editor.addShortcut('access+7', '', [\n 'FormatBlock',\n false,\n 'p'\n ]);\n editor.addShortcut('access+8', '', [\n 'FormatBlock',\n false,\n 'div'\n ]);\n editor.addShortcut('access+9', '', [\n 'FormatBlock',\n false,\n 'address'\n ]);\n };\n var FormatShortcuts = { setup: setup$6 };\n\n function Formatter (editor) {\n var formats = FormatRegistry(editor);\n var formatChangeState = Cell(null);\n FormatShortcuts.setup(editor);\n setup$2(editor);\n return {\n get: formats.get,\n register: formats.register,\n unregister: formats.unregister,\n apply: curry(ApplyFormat.applyFormat, editor),\n remove: curry(RemoveFormat.remove, editor),\n toggle: curry(ToggleFormat.toggle, editor, formats),\n match: curry(MatchFormat.match, editor),\n matchAll: curry(MatchFormat.matchAll, editor),\n matchNode: curry(MatchFormat.matchNode, editor),\n canApply: curry(MatchFormat.canApply, editor),\n formatChanged: curry(FormatChanged.formatChanged, editor, formatChangeState),\n getCssText: curry(Preview.getCssText, editor)\n };\n }\n\n var hasOwnProperty$2 = Object.prototype.hasOwnProperty;\n var shallow$1 = function (old, nu) {\n return nu;\n };\n var baseMerge = function (merger) {\n return function () {\n var objects = new Array(arguments.length);\n for (var i = 0; i < objects.length; i++) {\n objects[i] = arguments[i];\n }\n if (objects.length === 0) {\n throw new Error('Can\\'t merge zero objects');\n }\n var ret = {};\n for (var j = 0; j < objects.length; j++) {\n var curObject = objects[j];\n for (var key in curObject) {\n if (hasOwnProperty$2.call(curObject, key)) {\n ret[key] = merger(ret[key], curObject[key]);\n }\n }\n }\n return ret;\n };\n };\n var merge = baseMerge(shallow$1);\n\n var register = function (htmlParser, settings, dom) {\n htmlParser.addAttributeFilter('data-mce-tabindex', function (nodes, name) {\n var i = nodes.length, node;\n while (i--) {\n node = nodes[i];\n node.attr('tabindex', node.attributes.map['data-mce-tabindex']);\n node.attr(name, null);\n }\n });\n htmlParser.addAttributeFilter('src,href,style', function (nodes, name) {\n var i = nodes.length, node, value;\n var internalName = 'data-mce-' + name;\n var urlConverter = settings.url_converter;\n var urlConverterScope = settings.url_converter_scope;\n while (i--) {\n node = nodes[i];\n value = node.attributes.map[internalName];\n if (value !== undefined) {\n node.attr(name, value.length > 0 ? value : null);\n node.attr(internalName, null);\n } else {\n value = node.attributes.map[name];\n if (name === 'style') {\n value = dom.serializeStyle(dom.parseStyle(value), node.name);\n } else if (urlConverter) {\n value = urlConverter.call(urlConverterScope, value, name, node.name);\n }\n node.attr(name, value.length > 0 ? value : null);\n }\n }\n });\n htmlParser.addAttributeFilter('class', function (nodes) {\n var i = nodes.length, node, value;\n while (i--) {\n node = nodes[i];\n value = node.attr('class');\n if (value) {\n value = node.attr('class').replace(/(?:^|\\s)mce-item-\\w+(?!\\S)/g, '');\n node.attr('class', value.length > 0 ? value : null);\n }\n }\n });\n htmlParser.addAttributeFilter('data-mce-type', function (nodes, name, args) {\n var i = nodes.length, node;\n while (i--) {\n node = nodes[i];\n if (node.attributes.map['data-mce-type'] === 'bookmark' && !args.cleanup) {\n var hasChildren = Option.from(node.firstChild).exists(function (firstChild) {\n return !Zwsp.isZwsp(firstChild.value);\n });\n if (hasChildren) {\n node.unwrap();\n } else {\n node.remove();\n }\n }\n }\n });\n htmlParser.addNodeFilter('noscript', function (nodes) {\n var i = nodes.length, node;\n while (i--) {\n node = nodes[i].firstChild;\n if (node) {\n node.value = Entities.decode(node.value);\n }\n }\n });\n htmlParser.addNodeFilter('script,style', function (nodes, name) {\n var i = nodes.length, node, value, type;\n var trim = function (value) {\n return value.replace(/()/g, '\\n').replace(/^[\\r\\n]*|[\\r\\n]*$/g, '').replace(/^\\s*(()?|\\s*\\/\\/\\s*\\]\\]>(-->)?|\\/\\/\\s*(-->)?|\\]\\]>|\\/\\*\\s*-->\\s*\\*\\/|\\s*-->\\s*)\\s*$/g, '');\n };\n while (i--) {\n node = nodes[i];\n value = node.firstChild ? node.firstChild.value : '';\n if (name === 'script') {\n type = node.attr('type');\n if (type) {\n node.attr('type', type === 'mce-no/type' ? null : type.replace(/^mce\\-/, ''));\n }\n if (settings.element_format === 'xhtml' && value.length > 0) {\n node.firstChild.value = '// ';\n }\n } else {\n if (settings.element_format === 'xhtml' && value.length > 0) {\n node.firstChild.value = '';\n }\n }\n }\n });\n htmlParser.addNodeFilter('#comment', function (nodes) {\n var i = nodes.length, node;\n while (i--) {\n node = nodes[i];\n if (node.value.indexOf('[CDATA[') === 0) {\n node.name = '#cdata';\n node.type = 4;\n node.value = node.value.replace(/^\\[CDATA\\[|\\]\\]$/g, '');\n } else if (node.value.indexOf('mce:protected ') === 0) {\n node.name = '#text';\n node.type = 3;\n node.raw = true;\n node.value = unescape(node.value).substr(14);\n }\n }\n });\n htmlParser.addNodeFilter('xml:namespace,input', function (nodes, name) {\n var i = nodes.length, node;\n while (i--) {\n node = nodes[i];\n if (node.type === 7) {\n node.remove();\n } else if (node.type === 1) {\n if (name === 'input' && !('type' in node.attributes.map)) {\n node.attr('type', 'text');\n }\n }\n }\n });\n htmlParser.addAttributeFilter('data-mce-type', function (nodes) {\n each(nodes, function (node) {\n if (node.attr('data-mce-type') === 'format-caret') {\n if (node.isEmpty(htmlParser.schema.getNonEmptyElements())) {\n node.remove();\n } else {\n node.unwrap();\n }\n }\n });\n });\n 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) {\n var i = nodes.length;\n while (i--) {\n nodes[i].attr(name, null);\n }\n });\n };\n var trimTrailingBr = function (rootNode) {\n var brNode1, brNode2;\n var isBr = function (node) {\n return node && node.name === 'br';\n };\n brNode1 = rootNode.lastChild;\n if (isBr(brNode1)) {\n brNode2 = brNode1.prev;\n if (isBr(brNode2)) {\n brNode1.remove();\n brNode2.remove();\n }\n }\n };\n var DomSerializerFilters = {\n register: register,\n trimTrailingBr: trimTrailingBr\n };\n\n var preProcess = function (editor, node, args) {\n var impl, doc, oldDoc;\n var dom = editor.dom;\n node = node.cloneNode(true);\n impl = domGlobals.document.implementation;\n if (impl.createHTMLDocument) {\n doc = impl.createHTMLDocument('');\n Tools.each(node.nodeName === 'BODY' ? node.childNodes : [node], function (node) {\n doc.body.appendChild(doc.importNode(node, true));\n });\n if (node.nodeName !== 'BODY') {\n node = doc.body.firstChild;\n } else {\n node = doc.body;\n }\n oldDoc = dom.doc;\n dom.doc = doc;\n }\n Events.firePreProcess(editor, merge(args, { node: node }));\n if (oldDoc) {\n dom.doc = oldDoc;\n }\n return node;\n };\n var shouldFireEvent = function (editor, args) {\n return editor && editor.hasEventListeners('PreProcess') && !args.no_events;\n };\n var process = function (editor, node, args) {\n return shouldFireEvent(editor, args) ? preProcess(editor, node, args) : node;\n };\n var DomSerializerPreProcess = { process: process };\n\n var removeAttrs = function (node, names) {\n each(names, function (name) {\n node.attr(name, null);\n });\n };\n var addFontToSpansFilter = function (domParser, styles, fontSizes) {\n domParser.addNodeFilter('font', function (nodes) {\n each(nodes, function (node) {\n var props = styles.parse(node.attr('style'));\n var color = node.attr('color');\n var face = node.attr('face');\n var size = node.attr('size');\n if (color) {\n props.color = color;\n }\n if (face) {\n props['font-family'] = face;\n }\n if (size) {\n props['font-size'] = fontSizes[parseInt(node.attr('size'), 10) - 1];\n }\n node.name = 'span';\n node.attr('style', styles.serialize(props));\n removeAttrs(node, [\n 'color',\n 'face',\n 'size'\n ]);\n });\n });\n };\n var addStrikeToSpanFilter = function (domParser, styles) {\n domParser.addNodeFilter('strike', function (nodes) {\n each(nodes, function (node) {\n var props = styles.parse(node.attr('style'));\n props['text-decoration'] = 'line-through';\n node.name = 'span';\n node.attr('style', styles.serialize(props));\n });\n });\n };\n var addFilters = function (domParser, settings) {\n var styles = Styles();\n if (settings.convert_fonts_to_spans) {\n addFontToSpansFilter(domParser, styles, Tools.explode(settings.font_size_legacy_values));\n }\n addStrikeToSpanFilter(domParser, styles);\n };\n var register$1 = function (domParser, settings) {\n if (settings.inline_styles) {\n addFilters(domParser, settings);\n }\n };\n var LegacyFilter = { register: register$1 };\n\n var whiteSpaceRegExp$3 = /^[ \\t\\r\\n]*$/;\n var typeLookup = {\n '#text': 3,\n '#comment': 8,\n '#cdata': 4,\n '#pi': 7,\n '#doctype': 10,\n '#document-fragment': 11\n };\n var walk$2 = function (node, root, prev) {\n var sibling;\n var parent;\n var startName = prev ? 'lastChild' : 'firstChild';\n var siblingName = prev ? 'prev' : 'next';\n if (node[startName]) {\n return node[startName];\n }\n if (node !== root) {\n sibling = node[siblingName];\n if (sibling) {\n return sibling;\n }\n for (parent = node.parent; parent && parent !== root; parent = parent.parent) {\n sibling = parent[siblingName];\n if (sibling) {\n return sibling;\n }\n }\n }\n };\n var Node$1 = function () {\n function Node(name, type) {\n this.name = name;\n this.type = type;\n if (type === 1) {\n this.attributes = [];\n this.attributes.map = {};\n }\n }\n Node.create = function (name, attrs) {\n var node, attrName;\n node = new Node(name, typeLookup[name] || 1);\n if (attrs) {\n for (attrName in attrs) {\n node.attr(attrName, attrs[attrName]);\n }\n }\n return node;\n };\n Node.prototype.replace = function (node) {\n var self = this;\n if (node.parent) {\n node.remove();\n }\n self.insert(node, self);\n self.remove();\n return self;\n };\n Node.prototype.attr = function (name, value) {\n var self = this;\n var attrs, i;\n if (typeof name !== 'string') {\n for (i in name) {\n self.attr(i, name[i]);\n }\n return self;\n }\n if (attrs = self.attributes) {\n if (value !== undefined) {\n if (value === null) {\n if (name in attrs.map) {\n delete attrs.map[name];\n i = attrs.length;\n while (i--) {\n if (attrs[i].name === name) {\n attrs = attrs.splice(i, 1);\n return self;\n }\n }\n }\n return self;\n }\n if (name in attrs.map) {\n i = attrs.length;\n while (i--) {\n if (attrs[i].name === name) {\n attrs[i].value = value;\n break;\n }\n }\n } else {\n attrs.push({\n name: name,\n value: value\n });\n }\n attrs.map[name] = value;\n return self;\n }\n return attrs.map[name];\n }\n };\n Node.prototype.clone = function () {\n var self = this;\n var clone = new Node(self.name, self.type);\n var i, l, selfAttrs, selfAttr, cloneAttrs;\n if (selfAttrs = self.attributes) {\n cloneAttrs = [];\n cloneAttrs.map = {};\n for (i = 0, l = selfAttrs.length; i < l; i++) {\n selfAttr = selfAttrs[i];\n if (selfAttr.name !== 'id') {\n cloneAttrs[cloneAttrs.length] = {\n name: selfAttr.name,\n value: selfAttr.value\n };\n cloneAttrs.map[selfAttr.name] = selfAttr.value;\n }\n }\n clone.attributes = cloneAttrs;\n }\n clone.value = self.value;\n clone.shortEnded = self.shortEnded;\n return clone;\n };\n Node.prototype.wrap = function (wrapper) {\n var self = this;\n self.parent.insert(wrapper, self);\n wrapper.append(self);\n return self;\n };\n Node.prototype.unwrap = function () {\n var self = this;\n var node, next;\n for (node = self.firstChild; node;) {\n next = node.next;\n self.insert(node, self, true);\n node = next;\n }\n self.remove();\n };\n Node.prototype.remove = function () {\n var self = this, parent = self.parent, next = self.next, prev = self.prev;\n if (parent) {\n if (parent.firstChild === self) {\n parent.firstChild = next;\n if (next) {\n next.prev = null;\n }\n } else {\n prev.next = next;\n }\n if (parent.lastChild === self) {\n parent.lastChild = prev;\n if (prev) {\n prev.next = null;\n }\n } else {\n next.prev = prev;\n }\n self.parent = self.next = self.prev = null;\n }\n return self;\n };\n Node.prototype.append = function (node) {\n var self = this;\n var last;\n if (node.parent) {\n node.remove();\n }\n last = self.lastChild;\n if (last) {\n last.next = node;\n node.prev = last;\n self.lastChild = node;\n } else {\n self.lastChild = self.firstChild = node;\n }\n node.parent = self;\n return node;\n };\n Node.prototype.insert = function (node, refNode, before) {\n var parent;\n if (node.parent) {\n node.remove();\n }\n parent = refNode.parent || this;\n if (before) {\n if (refNode === parent.firstChild) {\n parent.firstChild = node;\n } else {\n refNode.prev.next = node;\n }\n node.prev = refNode.prev;\n node.next = refNode;\n refNode.prev = node;\n } else {\n if (refNode === parent.lastChild) {\n parent.lastChild = node;\n } else {\n refNode.next.prev = node;\n }\n node.next = refNode.next;\n node.prev = refNode;\n refNode.next = node;\n }\n node.parent = parent;\n return node;\n };\n Node.prototype.getAll = function (name) {\n var self = this;\n var node;\n var collection = [];\n for (node = self.firstChild; node; node = walk$2(node, self)) {\n if (node.name === name) {\n collection.push(node);\n }\n }\n return collection;\n };\n Node.prototype.empty = function () {\n var self = this;\n var nodes, i, node;\n if (self.firstChild) {\n nodes = [];\n for (node = self.firstChild; node; node = walk$2(node, self)) {\n nodes.push(node);\n }\n i = nodes.length;\n while (i--) {\n node = nodes[i];\n node.parent = node.firstChild = node.lastChild = node.next = node.prev = null;\n }\n }\n self.firstChild = self.lastChild = null;\n return self;\n };\n Node.prototype.isEmpty = function (elements, whitespace, predicate) {\n var self = this;\n var node = self.firstChild, i, name;\n whitespace = whitespace || {};\n if (node) {\n do {\n if (node.type === 1) {\n if (node.attributes.map['data-mce-bogus']) {\n continue;\n }\n if (elements[node.name]) {\n return false;\n }\n i = node.attributes.length;\n while (i--) {\n name = node.attributes[i].name;\n if (name === 'name' || name.indexOf('data-mce-bookmark') === 0) {\n return false;\n }\n }\n }\n if (node.type === 8) {\n return false;\n }\n if (node.type === 3 && !whiteSpaceRegExp$3.test(node.value)) {\n return false;\n }\n if (node.type === 3 && node.parent && whitespace[node.parent.name] && whiteSpaceRegExp$3.test(node.value)) {\n return false;\n }\n if (predicate && predicate(node)) {\n return false;\n }\n } while (node = walk$2(node, self));\n }\n return true;\n };\n Node.prototype.walk = function (prev) {\n return walk$2(this, null, prev);\n };\n return Node;\n }();\n\n var paddEmptyNode = function (settings, args, blockElements, node) {\n var brPreferred = settings.padd_empty_with_br || args.insert;\n if (brPreferred && blockElements[node.name]) {\n node.empty().append(new Node$1('br', 1)).shortEnded = true;\n } else {\n node.empty().append(new Node$1('#text', 3)).value = '\\xA0';\n }\n };\n var isPaddedWithNbsp = function (node) {\n return hasOnlyChild(node, '#text') && node.firstChild.value === '\\xA0';\n };\n var hasOnlyChild = function (node, name) {\n return node && node.firstChild && node.firstChild === node.lastChild && node.firstChild.name === name;\n };\n var isPadded = function (schema, node) {\n var rule = schema.getElementRule(node.name);\n return rule && rule.paddEmpty;\n };\n var isEmpty$2 = function (schema, nonEmptyElements, whitespaceElements, node) {\n return node.isEmpty(nonEmptyElements, whitespaceElements, function (node) {\n return isPadded(schema, node);\n });\n };\n var isLineBreakNode = function (node, blockElements) {\n return node && (blockElements[node.name] || node.name === 'br');\n };\n\n var register$2 = function (parser, settings) {\n var schema = parser.schema;\n if (settings.remove_trailing_brs) {\n parser.addNodeFilter('br', function (nodes, _, args) {\n var i;\n var l = nodes.length;\n var node;\n var blockElements = Tools.extend({}, schema.getBlockElements());\n var nonEmptyElements = schema.getNonEmptyElements();\n var parent, lastParent, prev, prevName;\n var whiteSpaceElements = schema.getWhiteSpaceElements();\n var elementRule, textNode;\n blockElements.body = 1;\n for (i = 0; i < l; i++) {\n node = nodes[i];\n parent = node.parent;\n if (blockElements[node.parent.name] && node === parent.lastChild) {\n prev = node.prev;\n while (prev) {\n prevName = prev.name;\n if (prevName !== 'span' || prev.attr('data-mce-type') !== 'bookmark') {\n if (prevName !== 'br') {\n break;\n }\n if (prevName === 'br') {\n node = null;\n break;\n }\n }\n prev = prev.prev;\n }\n if (node) {\n node.remove();\n if (isEmpty$2(schema, nonEmptyElements, whiteSpaceElements, parent)) {\n elementRule = schema.getElementRule(parent.name);\n if (elementRule) {\n if (elementRule.removeEmpty) {\n parent.remove();\n } else if (elementRule.paddEmpty) {\n paddEmptyNode(settings, args, blockElements, parent);\n }\n }\n }\n }\n } else {\n lastParent = node;\n while (parent && parent.firstChild === lastParent && parent.lastChild === lastParent) {\n lastParent = parent;\n if (blockElements[parent.name]) {\n break;\n }\n parent = parent.parent;\n }\n if (lastParent === parent && settings.padd_empty_with_br !== true) {\n textNode = new Node$1('#text', 3);\n textNode.value = '\\xA0';\n node.replace(textNode);\n }\n }\n }\n });\n }\n parser.addAttributeFilter('href', function (nodes) {\n var i = nodes.length, node;\n var appendRel = function (rel) {\n var parts = rel.split(' ').filter(function (p) {\n return p.length > 0;\n });\n return parts.concat(['noopener']).sort().join(' ');\n };\n var addNoOpener = function (rel) {\n var newRel = rel ? Tools.trim(rel) : '';\n if (!/\\b(noopener)\\b/g.test(newRel)) {\n return appendRel(newRel);\n } else {\n return newRel;\n }\n };\n if (!settings.allow_unsafe_link_target) {\n while (i--) {\n node = nodes[i];\n if (node.name === 'a' && node.attr('target') === '_blank') {\n node.attr('rel', addNoOpener(node.attr('rel')));\n }\n }\n }\n });\n if (!settings.allow_html_in_named_anchor) {\n parser.addAttributeFilter('id,name', function (nodes) {\n var i = nodes.length, sibling, prevSibling, parent, node;\n while (i--) {\n node = nodes[i];\n if (node.name === 'a' && node.firstChild && !node.attr('href')) {\n parent = node.parent;\n sibling = node.lastChild;\n do {\n prevSibling = sibling.prev;\n parent.insert(sibling, node);\n sibling = prevSibling;\n } while (sibling);\n }\n }\n });\n }\n if (settings.fix_list_elements) {\n parser.addNodeFilter('ul,ol', function (nodes) {\n var i = nodes.length, node, parentNode;\n while (i--) {\n node = nodes[i];\n parentNode = node.parent;\n if (parentNode.name === 'ul' || parentNode.name === 'ol') {\n if (node.prev && node.prev.name === 'li') {\n node.prev.append(node);\n } else {\n var li = new Node$1('li', 1);\n li.attr('style', 'list-style-type: none');\n node.wrap(li);\n }\n }\n }\n });\n }\n if (settings.validate && schema.getValidClasses()) {\n parser.addAttributeFilter('class', function (nodes) {\n var i = nodes.length, node, classList, ci, className, classValue;\n var validClasses = schema.getValidClasses();\n var validClassesMap, valid;\n while (i--) {\n node = nodes[i];\n classList = node.attr('class').split(' ');\n classValue = '';\n for (ci = 0; ci < classList.length; ci++) {\n className = classList[ci];\n valid = false;\n validClassesMap = validClasses['*'];\n if (validClassesMap && validClassesMap[className]) {\n valid = true;\n }\n validClassesMap = validClasses[node.name];\n if (!valid && validClassesMap && validClassesMap[className]) {\n valid = true;\n }\n if (valid) {\n if (classValue) {\n classValue += ' ';\n }\n classValue += className;\n }\n }\n if (!classValue.length) {\n classValue = null;\n }\n node.attr('class', classValue);\n }\n });\n }\n };\n\n var makeMap$4 = Tools.makeMap, each$i = Tools.each, explode$3 = Tools.explode, extend$3 = Tools.extend;\n function DomParser (settings, schema) {\n if (schema === void 0) {\n schema = Schema();\n }\n var nodeFilters = {};\n var attributeFilters = [];\n var matchedNodes = {};\n var matchedAttributes = {};\n settings = settings || {};\n settings.validate = 'validate' in settings ? settings.validate : true;\n settings.root_name = settings.root_name || 'body';\n var fixInvalidChildren = function (nodes) {\n var ni, node, parent, parents, newParent, currentNode, tempNode, childNode, i;\n var nonEmptyElements, whitespaceElements, nonSplitableElements, textBlockElements, specialElements, sibling, nextNode;\n nonSplitableElements = makeMap$4('tr,td,th,tbody,thead,tfoot,table');\n nonEmptyElements = schema.getNonEmptyElements();\n whitespaceElements = schema.getWhiteSpaceElements();\n textBlockElements = schema.getTextBlockElements();\n specialElements = schema.getSpecialElements();\n for (ni = 0; ni < nodes.length; ni++) {\n node = nodes[ni];\n if (!node.parent || node.fixed) {\n continue;\n }\n if (textBlockElements[node.name] && node.parent.name === 'li') {\n sibling = node.next;\n while (sibling) {\n if (textBlockElements[sibling.name]) {\n sibling.name = 'li';\n sibling.fixed = true;\n node.parent.insert(sibling, node.parent);\n } else {\n break;\n }\n sibling = sibling.next;\n }\n node.unwrap(node);\n continue;\n }\n parents = [node];\n for (parent = node.parent; parent && !schema.isValidChild(parent.name, node.name) && !nonSplitableElements[parent.name]; parent = parent.parent) {\n parents.push(parent);\n }\n if (parent && parents.length > 1) {\n parents.reverse();\n newParent = currentNode = filterNode(parents[0].clone());\n for (i = 0; i < parents.length - 1; i++) {\n if (schema.isValidChild(currentNode.name, parents[i].name)) {\n tempNode = filterNode(parents[i].clone());\n currentNode.append(tempNode);\n } else {\n tempNode = currentNode;\n }\n for (childNode = parents[i].firstChild; childNode && childNode !== parents[i + 1];) {\n nextNode = childNode.next;\n tempNode.append(childNode);\n childNode = nextNode;\n }\n currentNode = tempNode;\n }\n if (!isEmpty$2(schema, nonEmptyElements, whitespaceElements, newParent)) {\n parent.insert(newParent, parents[0], true);\n parent.insert(node, newParent);\n } else {\n parent.insert(node, parents[0], true);\n }\n parent = parents[0];\n if (isEmpty$2(schema, nonEmptyElements, whitespaceElements, parent) || hasOnlyChild(parent, 'br')) {\n parent.empty().remove();\n }\n } else if (node.parent) {\n if (node.name === 'li') {\n sibling = node.prev;\n if (sibling && (sibling.name === 'ul' || sibling.name === 'ul')) {\n sibling.append(node);\n continue;\n }\n sibling = node.next;\n if (sibling && (sibling.name === 'ul' || sibling.name === 'ul')) {\n sibling.insert(node, sibling.firstChild, true);\n continue;\n }\n node.wrap(filterNode(new Node$1('ul', 1)));\n continue;\n }\n if (schema.isValidChild(node.parent.name, 'div') && schema.isValidChild('div', node.name)) {\n node.wrap(filterNode(new Node$1('div', 1)));\n } else {\n if (specialElements[node.name]) {\n node.empty().remove();\n } else {\n node.unwrap();\n }\n }\n }\n }\n };\n var filterNode = function (node) {\n var i, name, list;\n name = node.name;\n if (name in nodeFilters) {\n list = matchedNodes[name];\n if (list) {\n list.push(node);\n } else {\n matchedNodes[name] = [node];\n }\n }\n i = attributeFilters.length;\n while (i--) {\n name = attributeFilters[i].name;\n if (name in node.attributes.map) {\n list = matchedAttributes[name];\n if (list) {\n list.push(node);\n } else {\n matchedAttributes[name] = [node];\n }\n }\n }\n return node;\n };\n var addNodeFilter = function (name, callback) {\n each$i(explode$3(name), function (name) {\n var list = nodeFilters[name];\n if (!list) {\n nodeFilters[name] = list = [];\n }\n list.push(callback);\n });\n };\n var getNodeFilters = function () {\n var out = [];\n for (var name in nodeFilters) {\n if (nodeFilters.hasOwnProperty(name)) {\n out.push({\n name: name,\n callbacks: nodeFilters[name]\n });\n }\n }\n return out;\n };\n var addAttributeFilter = function (name, callback) {\n each$i(explode$3(name), function (name) {\n var i;\n for (i = 0; i < attributeFilters.length; i++) {\n if (attributeFilters[i].name === name) {\n attributeFilters[i].callbacks.push(callback);\n return;\n }\n }\n attributeFilters.push({\n name: name,\n callbacks: [callback]\n });\n });\n };\n var getAttributeFilters = function () {\n return [].concat(attributeFilters);\n };\n var parse = function (html, args) {\n var parser, nodes, i, l, fi, fl, list, name;\n var blockElements;\n var invalidChildren = [];\n var isInWhiteSpacePreservedElement;\n var node;\n args = args || {};\n matchedNodes = {};\n matchedAttributes = {};\n blockElements = extend$3(makeMap$4('script,style,head,html,body,title,meta,param'), schema.getBlockElements());\n var nonEmptyElements = schema.getNonEmptyElements();\n var children = schema.children;\n var validate = settings.validate;\n var rootBlockName = 'forced_root_block' in args ? args.forced_root_block : settings.forced_root_block;\n var whiteSpaceElements = schema.getWhiteSpaceElements();\n var startWhiteSpaceRegExp = /^[ \\t\\r\\n]+/;\n var endWhiteSpaceRegExp = /[ \\t\\r\\n]+$/;\n var allWhiteSpaceRegExp = /[ \\t\\r\\n]+/g;\n var isAllWhiteSpaceRegExp = /^[ \\t\\r\\n]+$/;\n isInWhiteSpacePreservedElement = whiteSpaceElements.hasOwnProperty(args.context) || whiteSpaceElements.hasOwnProperty(settings.root_name);\n var addRootBlocks = function () {\n var node = rootNode.firstChild, next, rootBlockNode;\n var trim = function (rootBlockNode) {\n if (rootBlockNode) {\n node = rootBlockNode.firstChild;\n if (node && node.type === 3) {\n node.value = node.value.replace(startWhiteSpaceRegExp, '');\n }\n node = rootBlockNode.lastChild;\n if (node && node.type === 3) {\n node.value = node.value.replace(endWhiteSpaceRegExp, '');\n }\n }\n };\n if (!schema.isValidChild(rootNode.name, rootBlockName.toLowerCase())) {\n return;\n }\n while (node) {\n next = node.next;\n if (node.type === 3 || node.type === 1 && node.name !== 'p' && !blockElements[node.name] && !node.attr('data-mce-type')) {\n if (!rootBlockNode) {\n rootBlockNode = createNode(rootBlockName, 1);\n rootBlockNode.attr(settings.forced_root_block_attrs);\n rootNode.insert(rootBlockNode, node);\n rootBlockNode.append(node);\n } else {\n rootBlockNode.append(node);\n }\n } else {\n trim(rootBlockNode);\n rootBlockNode = null;\n }\n node = next;\n }\n trim(rootBlockNode);\n };\n var createNode = function (name, type) {\n var node = new Node$1(name, type);\n var list;\n if (name in nodeFilters) {\n list = matchedNodes[name];\n if (list) {\n list.push(node);\n } else {\n matchedNodes[name] = [node];\n }\n }\n return node;\n };\n var removeWhitespaceBefore = function (node) {\n var textNode, textNodeNext, textVal, sibling;\n var blockElements = schema.getBlockElements();\n for (textNode = node.prev; textNode && textNode.type === 3;) {\n textVal = textNode.value.replace(endWhiteSpaceRegExp, '');\n if (textVal.length > 0) {\n textNode.value = textVal;\n return;\n }\n textNodeNext = textNode.next;\n if (textNodeNext) {\n if (textNodeNext.type === 3 && textNodeNext.value.length) {\n textNode = textNode.prev;\n continue;\n }\n if (!blockElements[textNodeNext.name] && textNodeNext.name !== 'script' && textNodeNext.name !== 'style') {\n textNode = textNode.prev;\n continue;\n }\n }\n sibling = textNode.prev;\n textNode.remove();\n textNode = sibling;\n }\n };\n var cloneAndExcludeBlocks = function (input) {\n var name;\n var output = {};\n for (name in input) {\n if (name !== 'li' && name !== 'p') {\n output[name] = input[name];\n }\n }\n return output;\n };\n parser = SaxParser$1({\n validate: validate,\n allow_script_urls: settings.allow_script_urls,\n allow_conditional_comments: settings.allow_conditional_comments,\n self_closing_elements: cloneAndExcludeBlocks(schema.getSelfClosingElements()),\n cdata: function (text) {\n node.append(createNode('#cdata', 4)).value = text;\n },\n text: function (text, raw) {\n var textNode;\n if (!isInWhiteSpacePreservedElement) {\n text = text.replace(allWhiteSpaceRegExp, ' ');\n if (isLineBreakNode(node.lastChild, blockElements)) {\n text = text.replace(startWhiteSpaceRegExp, '');\n }\n }\n if (text.length !== 0) {\n textNode = createNode('#text', 3);\n textNode.raw = !!raw;\n node.append(textNode).value = text;\n }\n },\n comment: function (text) {\n node.append(createNode('#comment', 8)).value = text;\n },\n pi: function (name, text) {\n node.append(createNode(name, 7)).value = text;\n removeWhitespaceBefore(node);\n },\n doctype: function (text) {\n var newNode;\n newNode = node.append(createNode('#doctype', 10));\n newNode.value = text;\n removeWhitespaceBefore(node);\n },\n start: function (name, attrs, empty) {\n var newNode, attrFiltersLen, elementRule, attrName, parent;\n elementRule = validate ? schema.getElementRule(name) : {};\n if (elementRule) {\n newNode = createNode(elementRule.outputName || name, 1);\n newNode.attributes = attrs;\n newNode.shortEnded = empty;\n node.append(newNode);\n parent = children[node.name];\n if (parent && children[newNode.name] && !parent[newNode.name]) {\n invalidChildren.push(newNode);\n }\n attrFiltersLen = attributeFilters.length;\n while (attrFiltersLen--) {\n attrName = attributeFilters[attrFiltersLen].name;\n if (attrName in attrs.map) {\n list = matchedAttributes[attrName];\n if (list) {\n list.push(newNode);\n } else {\n matchedAttributes[attrName] = [newNode];\n }\n }\n }\n if (blockElements[name]) {\n removeWhitespaceBefore(newNode);\n }\n if (!empty) {\n node = newNode;\n }\n if (!isInWhiteSpacePreservedElement && whiteSpaceElements[name]) {\n isInWhiteSpacePreservedElement = true;\n }\n }\n },\n end: function (name) {\n var textNode, elementRule, text, sibling, tempNode;\n elementRule = validate ? schema.getElementRule(name) : {};\n if (elementRule) {\n if (blockElements[name]) {\n if (!isInWhiteSpacePreservedElement) {\n textNode = node.firstChild;\n if (textNode && textNode.type === 3) {\n text = textNode.value.replace(startWhiteSpaceRegExp, '');\n if (text.length > 0) {\n textNode.value = text;\n textNode = textNode.next;\n } else {\n sibling = textNode.next;\n textNode.remove();\n textNode = sibling;\n while (textNode && textNode.type === 3) {\n text = textNode.value;\n sibling = textNode.next;\n if (text.length === 0 || isAllWhiteSpaceRegExp.test(text)) {\n textNode.remove();\n textNode = sibling;\n }\n textNode = sibling;\n }\n }\n }\n textNode = node.lastChild;\n if (textNode && textNode.type === 3) {\n text = textNode.value.replace(endWhiteSpaceRegExp, '');\n if (text.length > 0) {\n textNode.value = text;\n textNode = textNode.prev;\n } else {\n sibling = textNode.prev;\n textNode.remove();\n textNode = sibling;\n while (textNode && textNode.type === 3) {\n text = textNode.value;\n sibling = textNode.prev;\n if (text.length === 0 || isAllWhiteSpaceRegExp.test(text)) {\n textNode.remove();\n textNode = sibling;\n }\n textNode = sibling;\n }\n }\n }\n }\n }\n if (isInWhiteSpacePreservedElement && whiteSpaceElements[name]) {\n isInWhiteSpacePreservedElement = false;\n }\n if (elementRule.removeEmpty && isEmpty$2(schema, nonEmptyElements, whiteSpaceElements, node)) {\n if (!node.attributes.map.name && !node.attr('id')) {\n tempNode = node.parent;\n if (blockElements[node.name]) {\n node.empty().remove();\n } else {\n node.unwrap();\n }\n node = tempNode;\n return;\n }\n }\n if (elementRule.paddEmpty && (isPaddedWithNbsp(node) || isEmpty$2(schema, nonEmptyElements, whiteSpaceElements, node))) {\n paddEmptyNode(settings, args, blockElements, node);\n }\n node = node.parent;\n }\n }\n }, schema);\n var rootNode = node = new Node$1(args.context || settings.root_name, 11);\n parser.parse(html);\n if (validate && invalidChildren.length) {\n if (!args.context) {\n fixInvalidChildren(invalidChildren);\n } else {\n args.invalid = true;\n }\n }\n if (rootBlockName && (rootNode.name === 'body' || args.isRootContent)) {\n addRootBlocks();\n }\n if (!args.invalid) {\n for (name in matchedNodes) {\n list = nodeFilters[name];\n nodes = matchedNodes[name];\n fi = nodes.length;\n while (fi--) {\n if (!nodes[fi].parent) {\n nodes.splice(fi, 1);\n }\n }\n for (i = 0, l = list.length; i < l; i++) {\n list[i](nodes, name, args);\n }\n }\n for (i = 0, l = attributeFilters.length; i < l; i++) {\n list = attributeFilters[i];\n if (list.name in matchedAttributes) {\n nodes = matchedAttributes[list.name];\n fi = nodes.length;\n while (fi--) {\n if (!nodes[fi].parent) {\n nodes.splice(fi, 1);\n }\n }\n for (fi = 0, fl = list.callbacks.length; fi < fl; fi++) {\n list.callbacks[fi](nodes, list.name, args);\n }\n }\n }\n }\n return rootNode;\n };\n var exports = {\n schema: schema,\n addAttributeFilter: addAttributeFilter,\n getAttributeFilters: getAttributeFilters,\n addNodeFilter: addNodeFilter,\n getNodeFilters: getNodeFilters,\n filterNode: filterNode,\n parse: parse\n };\n register$2(exports, settings);\n LegacyFilter.register(exports, settings);\n return exports;\n }\n\n var addTempAttr = function (htmlParser, tempAttrs, name) {\n if (Tools.inArray(tempAttrs, name) === -1) {\n htmlParser.addAttributeFilter(name, function (nodes, name) {\n var i = nodes.length;\n while (i--) {\n nodes[i].attr(name, null);\n }\n });\n tempAttrs.push(name);\n }\n };\n var postProcess$1 = function (editor, args, content) {\n if (!args.no_events && editor) {\n var outArgs = Events.firePostProcess(editor, merge(args, { content: content }));\n return outArgs.content;\n } else {\n return content;\n }\n };\n var getHtmlFromNode = function (dom, node, args) {\n var html = Zwsp.trim(args.getInner ? node.innerHTML : dom.getOuterHTML(node));\n return args.selection || isWsPreserveElement(Element.fromDom(node)) ? html : Tools.trim(html);\n };\n var parseHtml = function (htmlParser, html, args) {\n var parserArgs = args.selection ? merge({ forced_root_block: false }, args) : args;\n var rootNode = htmlParser.parse(html, parserArgs);\n DomSerializerFilters.trimTrailingBr(rootNode);\n return rootNode;\n };\n var serializeNode = function (settings, schema, node) {\n var htmlSerializer = HtmlSerializer(settings, schema);\n return htmlSerializer.serialize(node);\n };\n var toHtml = function (editor, settings, schema, rootNode, args) {\n var content = serializeNode(settings, schema, rootNode);\n return postProcess$1(editor, args, content);\n };\n function DomSerializer (settings, editor) {\n var dom, schema, htmlParser;\n var tempAttrs = ['data-mce-selected'];\n dom = editor && editor.dom ? editor.dom : DOMUtils$1.DOM;\n schema = editor && editor.schema ? editor.schema : Schema(settings);\n settings.entity_encoding = settings.entity_encoding || 'named';\n settings.remove_trailing_brs = 'remove_trailing_brs' in settings ? settings.remove_trailing_brs : true;\n htmlParser = DomParser(settings, schema);\n DomSerializerFilters.register(htmlParser, settings, dom);\n var serialize = function (node, parserArgs) {\n var args = merge({ format: 'html' }, parserArgs ? parserArgs : {});\n var targetNode = DomSerializerPreProcess.process(editor, node, args);\n var html = getHtmlFromNode(dom, targetNode, args);\n var rootNode = parseHtml(htmlParser, html, args);\n return args.format === 'tree' ? rootNode : toHtml(editor, settings, schema, rootNode, args);\n };\n return {\n schema: schema,\n addNodeFilter: htmlParser.addNodeFilter,\n addAttributeFilter: htmlParser.addAttributeFilter,\n serialize: serialize,\n addRules: function (rules) {\n schema.addValidElements(rules);\n },\n setRules: function (rules) {\n schema.setValidElements(rules);\n },\n addTempAttr: curry(addTempAttr, htmlParser, tempAttrs),\n getTempAttrs: function () {\n return tempAttrs;\n }\n };\n }\n\n function DomSerializer$1 (settings, editor) {\n var domSerializer = DomSerializer(settings, editor);\n return {\n schema: domSerializer.schema,\n addNodeFilter: domSerializer.addNodeFilter,\n addAttributeFilter: domSerializer.addAttributeFilter,\n serialize: domSerializer.serialize,\n addRules: domSerializer.addRules,\n setRules: domSerializer.setRules,\n addTempAttr: domSerializer.addTempAttr,\n getTempAttrs: domSerializer.getTempAttrs\n };\n }\n\n function BookmarkManager(selection) {\n return {\n getBookmark: curry(Bookmarks.getBookmark, selection),\n moveToBookmark: curry(Bookmarks.moveToBookmark, selection)\n };\n }\n (function (BookmarkManager) {\n BookmarkManager.isBookmarkNode = Bookmarks.isBookmarkNode;\n }(BookmarkManager || (BookmarkManager = {})));\n var BookmarkManager$1 = BookmarkManager;\n\n var isContentEditableFalse$a = NodeType.isContentEditableFalse;\n var isContentEditableTrue$5 = NodeType.isContentEditableTrue;\n var getContentEditableRoot$2 = function (root, node) {\n while (node && node !== root) {\n if (isContentEditableTrue$5(node) || isContentEditableFalse$a(node)) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n };\n var ControlSelection = function (selection, editor) {\n var dom = editor.dom, each = Tools.each;\n var selectedElm, selectedElmGhost, resizeHelper, resizeHandles, selectedHandle;\n var startX, startY, selectedElmX, selectedElmY, startW, startH, ratio, resizeStarted;\n var width, height;\n var editableDoc = editor.getDoc(), rootDocument = domGlobals.document;\n var abs = Math.abs, round = Math.round, rootElement = editor.getBody();\n var startScrollWidth, startScrollHeight;\n resizeHandles = {\n nw: [\n 0,\n 0,\n -1,\n -1\n ],\n ne: [\n 1,\n 0,\n 1,\n -1\n ],\n se: [\n 1,\n 1,\n 1,\n 1\n ],\n sw: [\n 0,\n 1,\n -1,\n 1\n ]\n };\n var rootClass = '.mce-content-body';\n 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' + '}');\n var isImage = function (elm) {\n return elm && (elm.nodeName === 'IMG' || editor.dom.is(elm, 'figure.image'));\n };\n var isEventOnImageOutsideRange = function (evt, range) {\n return isImage(evt.target) && !RangePoint.isXYWithinRange(evt.clientX, evt.clientY, range);\n };\n var contextMenuSelectImage = function (evt) {\n var target = evt.target;\n if (isEventOnImageOutsideRange(evt, editor.selection.getRng()) && !evt.isDefaultPrevented()) {\n editor.selection.select(target);\n }\n };\n var getResizeTarget = function (elm) {\n return editor.dom.is(elm, 'figure.image') ? elm.querySelector('img') : elm;\n };\n var isResizable = function (elm) {\n var selector = editor.settings.object_resizing;\n if (selector === false || Env.iOS) {\n return false;\n }\n if (typeof selector !== 'string') {\n selector = 'table,img,figure.image,div';\n }\n if (elm.getAttribute('data-mce-resize') === 'false') {\n return false;\n }\n if (elm === editor.getBody()) {\n return false;\n }\n return is$1(Element.fromDom(elm), selector);\n };\n var resizeGhostElement = function (e) {\n var deltaX, deltaY, proportional;\n var resizeHelperX, resizeHelperY;\n deltaX = e.screenX - startX;\n deltaY = e.screenY - startY;\n width = deltaX * selectedHandle[2] + startW;\n height = deltaY * selectedHandle[3] + startH;\n width = width < 5 ? 5 : width;\n height = height < 5 ? 5 : height;\n if (isImage(selectedElm) && editor.settings.resize_img_proportional !== false) {\n proportional = !VK.modifierPressed(e);\n } else {\n proportional = VK.modifierPressed(e) || isImage(selectedElm) && selectedHandle[2] * selectedHandle[3] !== 0;\n }\n if (proportional) {\n if (abs(deltaX) > abs(deltaY)) {\n height = round(width * ratio);\n width = round(height / ratio);\n } else {\n width = round(height / ratio);\n height = round(width * ratio);\n }\n }\n dom.setStyles(getResizeTarget(selectedElmGhost), {\n width: width,\n height: height\n });\n resizeHelperX = selectedHandle.startPos.x + deltaX;\n resizeHelperY = selectedHandle.startPos.y + deltaY;\n resizeHelperX = resizeHelperX > 0 ? resizeHelperX : 0;\n resizeHelperY = resizeHelperY > 0 ? resizeHelperY : 0;\n dom.setStyles(resizeHelper, {\n left: resizeHelperX,\n top: resizeHelperY,\n display: 'block'\n });\n resizeHelper.innerHTML = width + ' × ' + height;\n if (selectedHandle[2] < 0 && selectedElmGhost.clientWidth <= width) {\n dom.setStyle(selectedElmGhost, 'left', selectedElmX + (startW - width));\n }\n if (selectedHandle[3] < 0 && selectedElmGhost.clientHeight <= height) {\n dom.setStyle(selectedElmGhost, 'top', selectedElmY + (startH - height));\n }\n deltaX = rootElement.scrollWidth - startScrollWidth;\n deltaY = rootElement.scrollHeight - startScrollHeight;\n if (deltaX + deltaY !== 0) {\n dom.setStyles(resizeHelper, {\n left: resizeHelperX - deltaX,\n top: resizeHelperY - deltaY\n });\n }\n if (!resizeStarted) {\n Events.fireObjectResizeStart(editor, selectedElm, startW, startH);\n resizeStarted = true;\n }\n };\n var endGhostResize = function () {\n resizeStarted = false;\n var setSizeProp = function (name, value) {\n if (value) {\n if (selectedElm.style[name] || !editor.schema.isValid(selectedElm.nodeName.toLowerCase(), name)) {\n dom.setStyle(getResizeTarget(selectedElm), name, value);\n } else {\n dom.setAttrib(getResizeTarget(selectedElm), name, value);\n }\n }\n };\n setSizeProp('width', width);\n setSizeProp('height', height);\n dom.unbind(editableDoc, 'mousemove', resizeGhostElement);\n dom.unbind(editableDoc, 'mouseup', endGhostResize);\n if (rootDocument !== editableDoc) {\n dom.unbind(rootDocument, 'mousemove', resizeGhostElement);\n dom.unbind(rootDocument, 'mouseup', endGhostResize);\n }\n dom.remove(selectedElmGhost);\n dom.remove(resizeHelper);\n showResizeRect(selectedElm);\n Events.fireObjectResized(editor, selectedElm, width, height);\n dom.setAttrib(selectedElm, 'style', dom.getAttrib(selectedElm, 'style'));\n editor.nodeChanged();\n };\n var showResizeRect = function (targetElm) {\n var position, targetWidth, targetHeight, e, rect;\n hideResizeRect();\n unbindResizeHandleEvents();\n position = dom.getPos(targetElm, rootElement);\n selectedElmX = position.x;\n selectedElmY = position.y;\n rect = targetElm.getBoundingClientRect();\n targetWidth = rect.width || rect.right - rect.left;\n targetHeight = rect.height || rect.bottom - rect.top;\n if (selectedElm !== targetElm) {\n selectedElm = targetElm;\n width = height = 0;\n }\n e = editor.fire('ObjectSelected', { target: targetElm });\n if (isResizable(targetElm) && !e.isDefaultPrevented()) {\n each(resizeHandles, function (handle, name) {\n var handleElm;\n var startDrag = function (e) {\n startX = e.screenX;\n startY = e.screenY;\n startW = getResizeTarget(selectedElm).clientWidth;\n startH = getResizeTarget(selectedElm).clientHeight;\n ratio = startH / startW;\n selectedHandle = handle;\n handle.startPos = {\n x: targetWidth * handle[0] + selectedElmX,\n y: targetHeight * handle[1] + selectedElmY\n };\n startScrollWidth = rootElement.scrollWidth;\n startScrollHeight = rootElement.scrollHeight;\n selectedElmGhost = selectedElm.cloneNode(true);\n dom.addClass(selectedElmGhost, 'mce-clonedresizable');\n dom.setAttrib(selectedElmGhost, 'data-mce-bogus', 'all');\n selectedElmGhost.contentEditable = false;\n selectedElmGhost.unSelectabe = true;\n dom.setStyles(selectedElmGhost, {\n left: selectedElmX,\n top: selectedElmY,\n margin: 0\n });\n selectedElmGhost.removeAttribute('data-mce-selected');\n rootElement.appendChild(selectedElmGhost);\n dom.bind(editableDoc, 'mousemove', resizeGhostElement);\n dom.bind(editableDoc, 'mouseup', endGhostResize);\n if (rootDocument !== editableDoc) {\n dom.bind(rootDocument, 'mousemove', resizeGhostElement);\n dom.bind(rootDocument, 'mouseup', endGhostResize);\n }\n resizeHelper = dom.add(rootElement, 'div', {\n 'class': 'mce-resize-helper',\n 'data-mce-bogus': 'all'\n }, startW + ' × ' + startH);\n };\n handleElm = dom.get('mceResizeHandle' + name);\n if (handleElm) {\n dom.remove(handleElm);\n }\n handleElm = dom.add(rootElement, 'div', {\n 'id': 'mceResizeHandle' + name,\n 'data-mce-bogus': 'all',\n 'class': 'mce-resizehandle',\n 'unselectable': true,\n 'style': 'cursor:' + name + '-resize; margin:0; padding:0'\n });\n if (Env.ie === 11) {\n handleElm.contentEditable = false;\n }\n dom.bind(handleElm, 'mousedown', function (e) {\n e.stopImmediatePropagation();\n e.preventDefault();\n startDrag(e);\n });\n handle.elm = handleElm;\n dom.setStyles(handleElm, {\n left: targetWidth * handle[0] + selectedElmX - handleElm.offsetWidth / 2,\n top: targetHeight * handle[1] + selectedElmY - handleElm.offsetHeight / 2\n });\n });\n } else {\n hideResizeRect();\n }\n selectedElm.setAttribute('data-mce-selected', '1');\n };\n var hideResizeRect = function () {\n var name, handleElm;\n unbindResizeHandleEvents();\n if (selectedElm) {\n selectedElm.removeAttribute('data-mce-selected');\n }\n for (name in resizeHandles) {\n handleElm = dom.get('mceResizeHandle' + name);\n if (handleElm) {\n dom.unbind(handleElm);\n dom.remove(handleElm);\n }\n }\n };\n var updateResizeRect = function (e) {\n var startElm, controlElm;\n var isChildOrEqual = function (node, parent) {\n if (node) {\n do {\n if (node === parent) {\n return true;\n }\n } while (node = node.parentNode);\n }\n };\n if (resizeStarted || editor.removed) {\n return;\n }\n each(dom.select('img[data-mce-selected],hr[data-mce-selected]'), function (img) {\n img.removeAttribute('data-mce-selected');\n });\n controlElm = e.type === 'mousedown' ? e.target : selection.getNode();\n controlElm = dom.$(controlElm).closest('table,img,figure.image,hr')[0];\n if (isChildOrEqual(controlElm, rootElement)) {\n disableGeckoResize();\n startElm = selection.getStart(true);\n if (isChildOrEqual(startElm, controlElm) && isChildOrEqual(selection.getEnd(true), controlElm)) {\n showResizeRect(controlElm);\n return;\n }\n }\n hideResizeRect();\n };\n var isWithinContentEditableFalse = function (elm) {\n return isContentEditableFalse$a(getContentEditableRoot$2(editor.getBody(), elm));\n };\n var unbindResizeHandleEvents = function () {\n for (var name in resizeHandles) {\n var handle = resizeHandles[name];\n if (handle.elm) {\n dom.unbind(handle.elm);\n delete handle.elm;\n }\n }\n };\n var disableGeckoResize = function () {\n try {\n editor.getDoc().execCommand('enableObjectResizing', false, false);\n } catch (ex) {\n }\n };\n editor.on('init', function () {\n disableGeckoResize();\n if (Env.ie && Env.ie >= 11) {\n editor.on('mousedown click', function (e) {\n var target = e.target, nodeName = target.nodeName;\n if (!resizeStarted && /^(TABLE|IMG|HR)$/.test(nodeName) && !isWithinContentEditableFalse(target)) {\n if (e.button !== 2) {\n editor.selection.select(target, nodeName === 'TABLE');\n }\n if (e.type === 'mousedown') {\n editor.nodeChanged();\n }\n }\n });\n editor.dom.bind(rootElement, 'mscontrolselect', function (e) {\n var delayedSelect = function (node) {\n Delay.setEditorTimeout(editor, function () {\n editor.selection.select(node);\n });\n };\n if (isWithinContentEditableFalse(e.target)) {\n e.preventDefault();\n delayedSelect(e.target);\n return;\n }\n if (/^(TABLE|IMG|HR)$/.test(e.target.nodeName)) {\n e.preventDefault();\n if (e.target.tagName === 'IMG') {\n delayedSelect(e.target);\n }\n }\n });\n }\n var throttledUpdateResizeRect = Delay.throttle(function (e) {\n if (!editor.composing) {\n updateResizeRect(e);\n }\n });\n editor.on('nodechange ResizeEditor ResizeWindow drop FullscreenStateChanged', throttledUpdateResizeRect);\n editor.on('keyup compositionend', function (e) {\n if (selectedElm && selectedElm.nodeName === 'TABLE') {\n throttledUpdateResizeRect(e);\n }\n });\n editor.on('hide blur', hideResizeRect);\n editor.on('contextmenu', contextMenuSelectImage);\n });\n editor.on('remove', unbindResizeHandleEvents);\n var destroy = function () {\n selectedElm = selectedElmGhost = null;\n };\n return {\n isResizable: isResizable,\n showResizeRect: showResizeRect,\n hideResizeRect: hideResizeRect,\n updateResizeRect: updateResizeRect,\n destroy: destroy\n };\n };\n\n var hasCeProperty = function (node) {\n return NodeType.isContentEditableTrue(node) || NodeType.isContentEditableFalse(node);\n };\n var findParent$1 = function (node, rootNode, predicate) {\n while (node && node !== rootNode) {\n if (predicate(node)) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n };\n var findClosestIeRange = function (clientX, clientY, doc) {\n var element, rng, rects;\n element = doc.elementFromPoint(clientX, clientY);\n rng = doc.body.createTextRange();\n if (!element || element.tagName === 'HTML') {\n element = doc.body;\n }\n rng.moveToElementText(element);\n rects = Tools.toArray(rng.getClientRects());\n rects = rects.sort(function (a, b) {\n a = Math.abs(Math.max(a.top - clientY, a.bottom - clientY));\n b = Math.abs(Math.max(b.top - clientY, b.bottom - clientY));\n return a - b;\n });\n if (rects.length > 0) {\n clientY = (rects[0].bottom + rects[0].top) / 2;\n try {\n rng.moveToPoint(clientX, clientY);\n rng.collapse(true);\n return rng;\n } catch (ex) {\n }\n }\n return null;\n };\n var moveOutOfContentEditableFalse = function (rng, rootNode) {\n var parentElement = rng && rng.parentElement ? rng.parentElement() : null;\n return NodeType.isContentEditableFalse(findParent$1(parentElement, rootNode, hasCeProperty)) ? null : rng;\n };\n var fromPoint$1 = function (clientX, clientY, doc) {\n var rng, point;\n var pointDoc = doc;\n if (pointDoc.caretPositionFromPoint) {\n point = pointDoc.caretPositionFromPoint(clientX, clientY);\n if (point) {\n rng = doc.createRange();\n rng.setStart(point.offsetNode, point.offset);\n rng.collapse(true);\n }\n } else if (doc.caretRangeFromPoint) {\n rng = doc.caretRangeFromPoint(clientX, clientY);\n } else if (pointDoc.body.createTextRange) {\n rng = pointDoc.body.createTextRange();\n try {\n rng.moveToPoint(clientX, clientY);\n rng.collapse(true);\n } catch (ex) {\n rng = findClosestIeRange(clientX, clientY, doc);\n }\n return moveOutOfContentEditableFalse(rng, doc.body);\n }\n return rng;\n };\n var CaretRangeFromPoint = { fromPoint: fromPoint$1 };\n\n var processRanges = function (editor, ranges) {\n return map(ranges, function (range) {\n var evt = editor.fire('GetSelectionRange', { range: range });\n return evt.range !== range ? evt.range : range;\n });\n };\n var EventProcessRanges = { processRanges: processRanges };\n\n var fromElements = function (elements, scope) {\n var doc = scope || domGlobals.document;\n var fragment = doc.createDocumentFragment();\n each(elements, function (element) {\n fragment.appendChild(element.dom());\n });\n return Element.fromDom(fragment);\n };\n\n var tableModel = Immutable('element', 'width', 'rows');\n var tableRow = Immutable('element', 'cells');\n var cellPosition = Immutable('x', 'y');\n var getSpan = function (td, key) {\n var value = parseInt(get(td, key), 10);\n return isNaN(value) ? 1 : value;\n };\n var fillout = function (table, x, y, tr, td) {\n var rowspan = getSpan(td, 'rowspan');\n var colspan = getSpan(td, 'colspan');\n var rows = table.rows();\n for (var y2 = y; y2 < y + rowspan; y2++) {\n if (!rows[y2]) {\n rows[y2] = tableRow(deep(tr), []);\n }\n for (var x2 = x; x2 < x + colspan; x2++) {\n var cells = rows[y2].cells();\n cells[x2] = y2 === y && x2 === x ? td : shallow(td);\n }\n }\n };\n var cellExists = function (table, x, y) {\n var rows = table.rows();\n var cells = rows[y] ? rows[y].cells() : [];\n return !!cells[x];\n };\n var skipCellsX = function (table, x, y) {\n while (cellExists(table, x, y)) {\n x++;\n }\n return x;\n };\n var getWidth = function (rows) {\n return foldl(rows, function (acc, row) {\n return row.cells().length > acc ? row.cells().length : acc;\n }, 0);\n };\n var findElementPos = function (table, element) {\n var rows = table.rows();\n for (var y = 0; y < rows.length; y++) {\n var cells = rows[y].cells();\n for (var x = 0; x < cells.length; x++) {\n if (eq(cells[x], element)) {\n return Option.some(cellPosition(x, y));\n }\n }\n }\n return Option.none();\n };\n var extractRows = function (table, sx, sy, ex, ey) {\n var newRows = [];\n var rows = table.rows();\n for (var y = sy; y <= ey; y++) {\n var cells = rows[y].cells();\n var slice = sx < ex ? cells.slice(sx, ex + 1) : cells.slice(ex, sx + 1);\n newRows.push(tableRow(rows[y].element(), slice));\n }\n return newRows;\n };\n var subTable = function (table, startPos, endPos) {\n var sx = startPos.x(), sy = startPos.y();\n var ex = endPos.x(), ey = endPos.y();\n var newRows = sy < ey ? extractRows(table, sx, sy, ex, ey) : extractRows(table, sx, ey, ex, sy);\n return tableModel(table.element(), getWidth(newRows), newRows);\n };\n var createDomTable = function (table, rows) {\n var tableElement = shallow(table.element());\n var tableBody = Element.fromTag('tbody');\n append$1(tableBody, rows);\n append(tableElement, tableBody);\n return tableElement;\n };\n var modelRowsToDomRows = function (table) {\n return map(table.rows(), function (row) {\n var cells = map(row.cells(), function (cell) {\n var td = deep(cell);\n remove(td, 'colspan');\n remove(td, 'rowspan');\n return td;\n });\n var tr = shallow(row.element());\n append$1(tr, cells);\n return tr;\n });\n };\n var fromDom$1 = function (tableElm) {\n var table = tableModel(shallow(tableElm), 0, []);\n each(descendants$1(tableElm, 'tr'), function (tr, y) {\n each(descendants$1(tr, 'td,th'), function (td, x) {\n fillout(table, skipCellsX(table, x, y), y, tr, td);\n });\n });\n return tableModel(table.element(), getWidth(table.rows()), table.rows());\n };\n var toDom = function (table) {\n return createDomTable(table, modelRowsToDomRows(table));\n };\n var subsection = function (table, startElement, endElement) {\n return findElementPos(table, startElement).bind(function (startPos) {\n return findElementPos(table, endElement).map(function (endPos) {\n return subTable(table, startPos, endPos);\n });\n });\n };\n var SimpleTableModel = {\n fromDom: fromDom$1,\n toDom: toDom,\n subsection: subsection\n };\n\n var findParentListContainer = function (parents) {\n return find(parents, function (elm) {\n return name(elm) === 'ul' || name(elm) === 'ol';\n });\n };\n var getFullySelectedListWrappers = function (parents, rng) {\n return find(parents, function (elm) {\n return name(elm) === 'li' && hasAllContentsSelected(elm, rng);\n }).fold(constant([]), function (li) {\n return findParentListContainer(parents).map(function (listCont) {\n return [\n Element.fromTag('li'),\n Element.fromTag(name(listCont))\n ];\n }).getOr([]);\n });\n };\n var wrap$3 = function (innerElm, elms) {\n var wrapped = foldl(elms, function (acc, elm) {\n append(elm, acc);\n return elm;\n }, innerElm);\n return elms.length > 0 ? fromElements([wrapped]) : wrapped;\n };\n var directListWrappers = function (commonAnchorContainer) {\n if (isListItem(commonAnchorContainer)) {\n return parent(commonAnchorContainer).filter(isList).fold(constant([]), function (listElm) {\n return [\n commonAnchorContainer,\n listElm\n ];\n });\n } else {\n return isList(commonAnchorContainer) ? [commonAnchorContainer] : [];\n }\n };\n var getWrapElements = function (rootNode, rng) {\n var commonAnchorContainer = Element.fromDom(rng.commonAncestorContainer);\n var parents = Parents.parentsAndSelf(commonAnchorContainer, rootNode);\n var wrapElements = filter(parents, function (elm) {\n return isInline(elm) || isHeading(elm);\n });\n var listWrappers = getFullySelectedListWrappers(parents, rng);\n var allWrappers = wrapElements.concat(listWrappers.length ? listWrappers : directListWrappers(commonAnchorContainer));\n return map(allWrappers, shallow);\n };\n var emptyFragment = function () {\n return fromElements([]);\n };\n var getFragmentFromRange = function (rootNode, rng) {\n return wrap$3(Element.fromDom(rng.cloneContents()), getWrapElements(rootNode, rng));\n };\n var getParentTable = function (rootElm, cell) {\n return ancestor$1(cell, 'table', curry(eq, rootElm));\n };\n var getTableFragment = function (rootNode, selectedTableCells) {\n return getParentTable(rootNode, selectedTableCells[0]).bind(function (tableElm) {\n var firstCell = selectedTableCells[0];\n var lastCell = selectedTableCells[selectedTableCells.length - 1];\n var fullTableModel = SimpleTableModel.fromDom(tableElm);\n return SimpleTableModel.subsection(fullTableModel, firstCell, lastCell).map(function (sectionedTableModel) {\n return fromElements([SimpleTableModel.toDom(sectionedTableModel)]);\n });\n }).getOrThunk(emptyFragment);\n };\n var getSelectionFragment = function (rootNode, ranges) {\n return ranges.length > 0 && ranges[0].collapsed ? emptyFragment() : getFragmentFromRange(rootNode, ranges[0]);\n };\n var read$4 = function (rootNode, ranges) {\n var selectedCells = TableCellSelection.getCellsFromElementOrRanges(ranges, rootNode);\n return selectedCells.length > 0 ? getTableFragment(rootNode, selectedCells) : getSelectionFragment(rootNode, ranges);\n };\n var FragmentReader = { read: read$4 };\n\n var getTextContent = function (editor) {\n return Option.from(editor.selection.getRng()).map(function (rng) {\n var bin = editor.dom.add(editor.getBody(), 'div', {\n 'data-mce-bogus': 'all',\n 'style': 'overflow: hidden; opacity: 0;'\n }, rng.cloneContents());\n var text = Zwsp.trim(bin.innerText);\n editor.dom.remove(bin);\n return text;\n }).getOr('');\n };\n var getHtmlContent = function (editor, args) {\n var rng = editor.selection.getRng(), tmpElm = editor.dom.create('body');\n var sel = editor.selection.getSel();\n var fragment;\n var ranges = EventProcessRanges.processRanges(editor, MultiRange.getRanges(sel));\n fragment = args.contextual ? FragmentReader.read(Element.fromDom(editor.getBody()), ranges).dom() : rng.cloneContents();\n if (fragment) {\n tmpElm.appendChild(fragment);\n }\n return editor.selection.serializer.serialize(tmpElm, args);\n };\n var getContent = function (editor, args) {\n if (args === void 0) {\n args = {};\n }\n args.get = true;\n args.format = args.format || 'html';\n args.selection = true;\n args = editor.fire('BeforeGetContent', args);\n if (args.isDefaultPrevented()) {\n editor.fire('GetContent', args);\n return args.content;\n }\n if (args.format === 'text') {\n return getTextContent(editor);\n } else {\n args.getInner = true;\n var content = getHtmlContent(editor, args);\n if (args.format === 'tree') {\n return content;\n } else {\n args.content = editor.selection.isCollapsed() ? '' : content;\n editor.fire('GetContent', args);\n return args.content;\n }\n }\n };\n var GetSelectionContent = { getContent: getContent };\n\n var setupArgs = function (args, content) {\n return __assign(__assign({ format: 'html' }, args), {\n set: true,\n selection: true,\n content: content\n });\n };\n var cleanContent = function (editor, args) {\n if (args.format !== 'raw') {\n var node = editor.parser.parse(args.content, __assign({\n isRootContent: true,\n forced_root_block: false\n }, args));\n return HtmlSerializer({ validate: editor.validate }, editor.schema).serialize(node);\n } else {\n return args.content;\n }\n };\n var setContent = function (editor, content, args) {\n var contentArgs = setupArgs(args, content);\n var rng = editor.selection.getRng(), caretNode;\n var doc = editor.getDoc();\n var frag, temp;\n if (!contentArgs.no_events) {\n contentArgs = editor.fire('BeforeSetContent', contentArgs);\n if (contentArgs.isDefaultPrevented()) {\n editor.fire('SetContent', contentArgs);\n return;\n }\n }\n content = cleanContent(editor, contentArgs);\n if (rng.insertNode) {\n content += '_';\n if (rng.startContainer === doc && rng.endContainer === doc) {\n doc.body.innerHTML = content;\n } else {\n rng.deleteContents();\n if (doc.body.childNodes.length === 0) {\n doc.body.innerHTML = content;\n } else {\n if (rng.createContextualFragment) {\n rng.insertNode(rng.createContextualFragment(content));\n } else {\n frag = doc.createDocumentFragment();\n temp = doc.createElement('div');\n frag.appendChild(temp);\n temp.outerHTML = content;\n rng.insertNode(frag);\n }\n }\n }\n caretNode = editor.dom.get('__caret');\n rng = doc.createRange();\n rng.setStartBefore(caretNode);\n rng.setEndBefore(caretNode);\n editor.selection.setRng(rng);\n editor.dom.remove('__caret');\n try {\n editor.selection.setRng(rng);\n } catch (ex) {\n }\n } else {\n var anyRng = rng;\n if (anyRng.item) {\n doc.execCommand('Delete', false, null);\n anyRng = editor.selection.getRng();\n }\n if (/^\\s+/.test(content)) {\n anyRng.pasteHTML('_' + content);\n editor.dom.remove('__mce_tmp');\n } else {\n anyRng.pasteHTML(content);\n }\n }\n if (!contentArgs.no_events) {\n editor.fire('SetContent', contentArgs);\n }\n };\n var SetSelectionContent = { setContent: setContent };\n\n var getEndpointElement = function (root, rng, start, real, resolve) {\n var container = start ? rng.startContainer : rng.endContainer;\n var offset = start ? rng.startOffset : rng.endOffset;\n return Option.from(container).map(Element.fromDom).map(function (elm) {\n return !real || !rng.collapsed ? child(elm, resolve(elm, offset)).getOr(elm) : elm;\n }).bind(function (elm) {\n return isElement(elm) ? Option.some(elm) : parent(elm);\n }).map(function (elm) {\n return elm.dom();\n }).getOr(root);\n };\n var getStart$2 = function (root, rng, real) {\n return getEndpointElement(root, rng, true, real, function (elm, offset) {\n return Math.min(childNodesCount(elm), offset);\n });\n };\n var getEnd = function (root, rng, real) {\n return getEndpointElement(root, rng, false, real, function (elm, offset) {\n return offset > 0 ? offset - 1 : offset;\n });\n };\n var skipEmptyTextNodes = function (node, forwards) {\n var orig = node;\n while (node && NodeType.isText(node) && node.length === 0) {\n node = forwards ? node.nextSibling : node.previousSibling;\n }\n return node || orig;\n };\n var getNode$1 = function (root, rng) {\n var elm, startContainer, endContainer, startOffset, endOffset;\n if (!rng) {\n return root;\n }\n startContainer = rng.startContainer;\n endContainer = rng.endContainer;\n startOffset = rng.startOffset;\n endOffset = rng.endOffset;\n elm = rng.commonAncestorContainer;\n if (!rng.collapsed) {\n if (startContainer === endContainer) {\n if (endOffset - startOffset < 2) {\n if (startContainer.hasChildNodes()) {\n elm = startContainer.childNodes[startOffset];\n }\n }\n }\n if (startContainer.nodeType === 3 && endContainer.nodeType === 3) {\n if (startContainer.length === startOffset) {\n startContainer = skipEmptyTextNodes(startContainer.nextSibling, true);\n } else {\n startContainer = startContainer.parentNode;\n }\n if (endOffset === 0) {\n endContainer = skipEmptyTextNodes(endContainer.previousSibling, false);\n } else {\n endContainer = endContainer.parentNode;\n }\n if (startContainer && startContainer === endContainer) {\n return startContainer;\n }\n }\n }\n if (elm && elm.nodeType === 3) {\n return elm.parentNode;\n }\n return elm;\n };\n var getSelectedBlocks = function (dom, rng, startElm, endElm) {\n var node, root;\n var selectedBlocks = [];\n root = dom.getRoot();\n startElm = dom.getParent(startElm || getStart$2(root, rng, rng.collapsed), dom.isBlock);\n endElm = dom.getParent(endElm || getEnd(root, rng, rng.collapsed), dom.isBlock);\n if (startElm && startElm !== root) {\n selectedBlocks.push(startElm);\n }\n if (startElm && endElm && startElm !== endElm) {\n node = startElm;\n var walker = new TreeWalker(startElm, root);\n while ((node = walker.next()) && node !== endElm) {\n if (dom.isBlock(node)) {\n selectedBlocks.push(node);\n }\n }\n }\n if (endElm && startElm !== endElm && endElm !== root) {\n selectedBlocks.push(endElm);\n }\n return selectedBlocks;\n };\n var select$1 = function (dom, node, content) {\n return Option.from(node).map(function (node) {\n var idx = dom.nodeIndex(node);\n var rng = dom.createRng();\n rng.setStart(node.parentNode, idx);\n rng.setEnd(node.parentNode, idx + 1);\n if (content) {\n moveEndPoint$1(dom, rng, node, true);\n moveEndPoint$1(dom, rng, node, false);\n }\n return rng;\n });\n };\n\n var each$j = Tools.each;\n var isNativeIeSelection = function (rng) {\n return !!rng.select;\n };\n var isAttachedToDom = function (node) {\n return !!(node && node.ownerDocument) && contains$3(Element.fromDom(node.ownerDocument), Element.fromDom(node));\n };\n var isValidRange = function (rng) {\n if (!rng) {\n return false;\n } else if (isNativeIeSelection(rng)) {\n return true;\n } else {\n return isAttachedToDom(rng.startContainer) && isAttachedToDom(rng.endContainer);\n }\n };\n var Selection$1 = function (dom, win, serializer, editor) {\n var bookmarkManager, controlSelection;\n var selectedRange, explicitRange, selectorChangedData;\n var setCursorLocation = function (node, offset) {\n var rng = dom.createRng();\n if (!node) {\n moveEndPoint$1(dom, rng, editor.getBody(), true);\n setRng(rng);\n } else {\n rng.setStart(node, offset);\n rng.setEnd(node, offset);\n setRng(rng);\n collapse(false);\n }\n };\n var getContent = function (args) {\n return GetSelectionContent.getContent(editor, args);\n };\n var setContent = function (content, args) {\n return SetSelectionContent.setContent(editor, content, args);\n };\n var getStart = function (real) {\n return getStart$2(editor.getBody(), getRng(), real);\n };\n var getEnd$1 = function (real) {\n return getEnd(editor.getBody(), getRng(), real);\n };\n var getBookmark = function (type, normalized) {\n return bookmarkManager.getBookmark(type, normalized);\n };\n var moveToBookmark = function (bookmark) {\n return bookmarkManager.moveToBookmark(bookmark);\n };\n var select = function (node, content) {\n select$1(dom, node, content).each(setRng);\n return node;\n };\n var isCollapsed = function () {\n var rng = getRng(), sel = getSel();\n if (!rng || rng.item) {\n return false;\n }\n if (rng.compareEndPoints) {\n return rng.compareEndPoints('StartToEnd', rng) === 0;\n }\n return !sel || rng.collapsed;\n };\n var collapse = function (toStart) {\n var rng = getRng();\n rng.collapse(!!toStart);\n setRng(rng);\n };\n var getSel = function () {\n return win.getSelection ? win.getSelection() : win.document.selection;\n };\n var getRng = function () {\n var selection, rng, elm, doc;\n var tryCompareBoundaryPoints = function (how, sourceRange, destinationRange) {\n try {\n return sourceRange.compareBoundaryPoints(how, destinationRange);\n } catch (ex) {\n return -1;\n }\n };\n if (!win) {\n return null;\n }\n doc = win.document;\n if (typeof doc === 'undefined' || doc === null) {\n return null;\n }\n if (editor.bookmark !== undefined && EditorFocus.hasFocus(editor) === false) {\n var bookmark = SelectionBookmark.getRng(editor);\n if (bookmark.isSome()) {\n return bookmark.map(function (r) {\n return EventProcessRanges.processRanges(editor, [r])[0];\n }).getOr(doc.createRange());\n }\n }\n try {\n if ((selection = getSel()) && !NodeType.isRestrictedNode(selection.anchorNode)) {\n if (selection.rangeCount > 0) {\n rng = selection.getRangeAt(0);\n } else {\n rng = selection.createRange ? selection.createRange() : doc.createRange();\n }\n }\n } catch (ex) {\n }\n rng = EventProcessRanges.processRanges(editor, [rng])[0];\n if (!rng) {\n rng = doc.createRange ? doc.createRange() : doc.body.createTextRange();\n }\n if (rng.setStart && rng.startContainer.nodeType === 9 && rng.collapsed) {\n elm = dom.getRoot();\n rng.setStart(elm, 0);\n rng.setEnd(elm, 0);\n }\n if (selectedRange && explicitRange) {\n if (tryCompareBoundaryPoints(rng.START_TO_START, rng, selectedRange) === 0 && tryCompareBoundaryPoints(rng.END_TO_END, rng, selectedRange) === 0) {\n rng = explicitRange;\n } else {\n selectedRange = null;\n explicitRange = null;\n }\n }\n return rng;\n };\n var setRng = function (rng, forward) {\n var sel, node, evt;\n if (!isValidRange(rng)) {\n return;\n }\n var ieRange = isNativeIeSelection(rng) ? rng : null;\n if (ieRange) {\n explicitRange = null;\n try {\n ieRange.select();\n } catch (ex) {\n }\n return;\n }\n sel = getSel();\n evt = editor.fire('SetSelectionRange', {\n range: rng,\n forward: forward\n });\n rng = evt.range;\n if (sel) {\n explicitRange = rng;\n try {\n sel.removeAllRanges();\n sel.addRange(rng);\n } catch (ex) {\n }\n if (forward === false && sel.extend) {\n sel.collapse(rng.endContainer, rng.endOffset);\n sel.extend(rng.startContainer, rng.startOffset);\n }\n selectedRange = sel.rangeCount > 0 ? sel.getRangeAt(0) : null;\n }\n if (!rng.collapsed && rng.startContainer === rng.endContainer && sel.setBaseAndExtent && !Env.ie) {\n if (rng.endOffset - rng.startOffset < 2) {\n if (rng.startContainer.hasChildNodes()) {\n node = rng.startContainer.childNodes[rng.startOffset];\n if (node && node.tagName === 'IMG') {\n sel.setBaseAndExtent(rng.startContainer, rng.startOffset, rng.endContainer, rng.endOffset);\n if (sel.anchorNode !== rng.startContainer || sel.focusNode !== rng.endContainer) {\n sel.setBaseAndExtent(node, 0, node, 1);\n }\n }\n }\n }\n }\n editor.fire('AfterSetSelectionRange', {\n range: rng,\n forward: forward\n });\n };\n var setNode = function (elm) {\n setContent(dom.getOuterHTML(elm));\n return elm;\n };\n var getNode = function () {\n return getNode$1(editor.getBody(), getRng());\n };\n var getSelectedBlocks$1 = function (startElm, endElm) {\n return getSelectedBlocks(dom, getRng(), startElm, endElm);\n };\n var isForward = function () {\n var sel = getSel();\n var anchorRange, focusRange;\n if (!sel || !sel.anchorNode || !sel.focusNode) {\n return true;\n }\n anchorRange = dom.createRng();\n anchorRange.setStart(sel.anchorNode, sel.anchorOffset);\n anchorRange.collapse(true);\n focusRange = dom.createRng();\n focusRange.setStart(sel.focusNode, sel.focusOffset);\n focusRange.collapse(true);\n return anchorRange.compareBoundaryPoints(anchorRange.START_TO_START, focusRange) <= 0;\n };\n var normalize = function () {\n var rng = getRng();\n var sel = getSel();\n if (!MultiRange.hasMultipleRanges(sel) && hasAnyRanges(editor)) {\n var normRng = NormalizeRange.normalize(dom, rng);\n normRng.each(function (normRng) {\n setRng(normRng, isForward());\n });\n return normRng.getOr(rng);\n }\n return rng;\n };\n var selectorChanged = function (selector, callback) {\n var currentSelectors;\n if (!selectorChangedData) {\n selectorChangedData = {};\n currentSelectors = {};\n editor.on('NodeChange', function (e) {\n var node = e.element, parents = dom.getParents(node, null, dom.getRoot()), matchedSelectors = {};\n each$j(selectorChangedData, function (callbacks, selector) {\n each$j(parents, function (node) {\n if (dom.is(node, selector)) {\n if (!currentSelectors[selector]) {\n each$j(callbacks, function (callback) {\n callback(true, {\n node: node,\n selector: selector,\n parents: parents\n });\n });\n currentSelectors[selector] = callbacks;\n }\n matchedSelectors[selector] = callbacks;\n return false;\n }\n });\n });\n each$j(currentSelectors, function (callbacks, selector) {\n if (!matchedSelectors[selector]) {\n delete currentSelectors[selector];\n each$j(callbacks, function (callback) {\n callback(false, {\n node: node,\n selector: selector,\n parents: parents\n });\n });\n }\n });\n });\n }\n if (!selectorChangedData[selector]) {\n selectorChangedData[selector] = [];\n }\n selectorChangedData[selector].push(callback);\n return exports;\n };\n var getScrollContainer = function () {\n var scrollContainer;\n var node = dom.getRoot();\n while (node && node.nodeName !== 'BODY') {\n if (node.scrollHeight > node.clientHeight) {\n scrollContainer = node;\n break;\n }\n node = node.parentNode;\n }\n return scrollContainer;\n };\n var scrollIntoView = function (elm, alignToTop) {\n return ScrollIntoView.scrollElementIntoView(editor, elm, alignToTop);\n };\n var placeCaretAt = function (clientX, clientY) {\n return setRng(CaretRangeFromPoint.fromPoint(clientX, clientY, editor.getDoc()));\n };\n var getBoundingClientRect = function () {\n var rng = getRng();\n return rng.collapsed ? CaretPosition$1.fromRangeStart(rng).getClientRects()[0] : rng.getBoundingClientRect();\n };\n var destroy = function () {\n win = selectedRange = explicitRange = null;\n controlSelection.destroy();\n };\n var exports = {\n bookmarkManager: null,\n controlSelection: null,\n dom: dom,\n win: win,\n serializer: serializer,\n editor: editor,\n collapse: collapse,\n setCursorLocation: setCursorLocation,\n getContent: getContent,\n setContent: setContent,\n getBookmark: getBookmark,\n moveToBookmark: moveToBookmark,\n select: select,\n isCollapsed: isCollapsed,\n isForward: isForward,\n setNode: setNode,\n getNode: getNode,\n getSel: getSel,\n setRng: setRng,\n getRng: getRng,\n getStart: getStart,\n getEnd: getEnd$1,\n getSelectedBlocks: getSelectedBlocks$1,\n normalize: normalize,\n selectorChanged: selectorChanged,\n getScrollContainer: getScrollContainer,\n scrollIntoView: scrollIntoView,\n placeCaretAt: placeCaretAt,\n getBoundingClientRect: getBoundingClientRect,\n destroy: destroy\n };\n bookmarkManager = BookmarkManager$1(exports);\n controlSelection = ControlSelection(exports, editor);\n exports.bookmarkManager = bookmarkManager;\n exports.controlSelection = controlSelection;\n return exports;\n };\n\n var BreakType;\n (function (BreakType) {\n BreakType[BreakType['Br'] = 0] = 'Br';\n BreakType[BreakType['Block'] = 1] = 'Block';\n BreakType[BreakType['Wrap'] = 2] = 'Wrap';\n BreakType[BreakType['Eol'] = 3] = 'Eol';\n }(BreakType || (BreakType = {})));\n var flip = function (direction, positions) {\n return direction === HDirection.Backwards ? positions.reverse() : positions;\n };\n var walk$3 = function (direction, caretWalker, pos) {\n return direction === HDirection.Forwards ? caretWalker.next(pos) : caretWalker.prev(pos);\n };\n var getBreakType = function (scope, direction, currentPos, nextPos) {\n if (NodeType.isBr(nextPos.getNode(direction === HDirection.Forwards))) {\n return BreakType.Br;\n } else if (isInSameBlock(currentPos, nextPos) === false) {\n return BreakType.Block;\n } else {\n return BreakType.Wrap;\n }\n };\n var getPositionsUntil = function (predicate, direction, scope, start) {\n var caretWalker = CaretWalker(scope);\n var currentPos = start, nextPos;\n var positions = [];\n while (currentPos) {\n nextPos = walk$3(direction, caretWalker, currentPos);\n if (!nextPos) {\n break;\n }\n if (NodeType.isBr(nextPos.getNode(false))) {\n if (direction === HDirection.Forwards) {\n return {\n positions: flip(direction, positions).concat([nextPos]),\n breakType: BreakType.Br,\n breakAt: Option.some(nextPos)\n };\n } else {\n return {\n positions: flip(direction, positions),\n breakType: BreakType.Br,\n breakAt: Option.some(nextPos)\n };\n }\n }\n if (!nextPos.isVisible()) {\n currentPos = nextPos;\n continue;\n }\n if (predicate(currentPos, nextPos)) {\n var breakType = getBreakType(scope, direction, currentPos, nextPos);\n return {\n positions: flip(direction, positions),\n breakType: breakType,\n breakAt: Option.some(nextPos)\n };\n }\n positions.push(nextPos);\n currentPos = nextPos;\n }\n return {\n positions: flip(direction, positions),\n breakType: BreakType.Eol,\n breakAt: Option.none()\n };\n };\n var getAdjacentLinePositions = function (direction, getPositionsUntilBreak, scope, start) {\n return getPositionsUntilBreak(scope, start).breakAt.map(function (pos) {\n var positions = getPositionsUntilBreak(scope, pos).positions;\n return direction === HDirection.Backwards ? positions.concat(pos) : [pos].concat(positions);\n }).getOr([]);\n };\n var findClosestHorizontalPositionFromPoint = function (positions, x) {\n return foldl(positions, function (acc, newPos) {\n return acc.fold(function () {\n return Option.some(newPos);\n }, function (lastPos) {\n return lift2(head(lastPos.getClientRects()), head(newPos.getClientRects()), function (lastRect, newRect) {\n var lastDist = Math.abs(x - lastRect.left);\n var newDist = Math.abs(x - newRect.left);\n return newDist <= lastDist ? newPos : lastPos;\n }).or(acc);\n });\n }, Option.none());\n };\n var findClosestHorizontalPosition = function (positions, pos) {\n return head(pos.getClientRects()).bind(function (targetRect) {\n return findClosestHorizontalPositionFromPoint(positions, targetRect.left);\n });\n };\n var getPositionsUntilPreviousLine = curry(getPositionsUntil, CaretPosition.isAbove, -1);\n var getPositionsUntilNextLine = curry(getPositionsUntil, CaretPosition.isBelow, 1);\n var isAtFirstLine = function (scope, pos) {\n return getPositionsUntilPreviousLine(scope, pos).breakAt.isNone();\n };\n var isAtLastLine = function (scope, pos) {\n return getPositionsUntilNextLine(scope, pos).breakAt.isNone();\n };\n var getPositionsAbove = curry(getAdjacentLinePositions, -1, getPositionsUntilPreviousLine);\n var getPositionsBelow = curry(getAdjacentLinePositions, 1, getPositionsUntilNextLine);\n var getFirstLinePositions = function (scope) {\n return CaretFinder.firstPositionIn(scope).map(function (pos) {\n return [pos].concat(getPositionsUntilNextLine(scope, pos).positions);\n }).getOr([]);\n };\n var getLastLinePositions = function (scope) {\n return CaretFinder.lastPositionIn(scope).map(function (pos) {\n return getPositionsUntilPreviousLine(scope, pos).positions.concat(pos);\n }).getOr([]);\n };\n\n var isContentEditableFalse$b = NodeType.isContentEditableFalse;\n var getSelectedNode$1 = getSelectedNode;\n var moveToCeFalseHorizontally = function (direction, editor, getNextPosFn, range) {\n var forwards = direction === HDirection.Forwards;\n var isBeforeContentEditableFalseFn = forwards ? isBeforeContentEditableFalse : isAfterContentEditableFalse;\n if (!range.collapsed) {\n var node = getSelectedNode$1(range);\n if (isContentEditableFalse$b(node)) {\n return showCaret(direction, editor, node, direction === HDirection.Backwards, true);\n }\n }\n var rangeIsInContainerBlock = isRangeInCaretContainerBlock(range);\n var caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n if (isBeforeContentEditableFalseFn(caretPosition)) {\n return selectNode(editor, caretPosition.getNode(!forwards));\n }\n var nextCaretPosition = InlineUtils.normalizePosition(forwards, getNextPosFn(caretPosition));\n if (!nextCaretPosition) {\n if (rangeIsInContainerBlock) {\n return range;\n }\n return null;\n }\n if (isBeforeContentEditableFalseFn(nextCaretPosition)) {\n return showCaret(direction, editor, nextCaretPosition.getNode(!forwards), forwards, true);\n }\n var peekCaretPosition = getNextPosFn(nextCaretPosition);\n if (peekCaretPosition && isBeforeContentEditableFalseFn(peekCaretPosition)) {\n if (isMoveInsideSameBlock(nextCaretPosition, peekCaretPosition)) {\n return showCaret(direction, editor, peekCaretPosition.getNode(!forwards), forwards, true);\n }\n }\n if (rangeIsInContainerBlock) {\n return renderRangeCaret(editor, nextCaretPosition.toRange(), true);\n }\n return null;\n };\n var moveToCeFalseVertically = function (direction, editor, walkerFn, range) {\n var caretPosition, linePositions, nextLinePositions;\n var closestNextLineRect, caretClientRect, clientX;\n var dist1, dist2, contentEditableFalseNode;\n contentEditableFalseNode = getSelectedNode$1(range);\n caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n linePositions = walkerFn(editor.getBody(), isAboveLine(1), caretPosition);\n nextLinePositions = filter(linePositions, isLine(1));\n caretClientRect = ArrUtils.last(caretPosition.getClientRects());\n if (isBeforeContentEditableFalse(caretPosition) || isBeforeTable(caretPosition)) {\n contentEditableFalseNode = caretPosition.getNode();\n }\n if (isAfterContentEditableFalse(caretPosition) || isAfterTable(caretPosition)) {\n contentEditableFalseNode = caretPosition.getNode(true);\n }\n if (!caretClientRect) {\n return null;\n }\n clientX = caretClientRect.left;\n closestNextLineRect = findClosestClientRect(nextLinePositions, clientX);\n if (closestNextLineRect) {\n if (isContentEditableFalse$b(closestNextLineRect.node)) {\n dist1 = Math.abs(clientX - closestNextLineRect.left);\n dist2 = Math.abs(clientX - closestNextLineRect.right);\n return showCaret(direction, editor, closestNextLineRect.node, dist1 < dist2, true);\n }\n }\n if (contentEditableFalseNode) {\n var caretPositions = positionsUntil(direction, editor.getBody(), isAboveLine(1), contentEditableFalseNode);\n closestNextLineRect = findClosestClientRect(filter(caretPositions, isLine(1)), clientX);\n if (closestNextLineRect) {\n return renderRangeCaret(editor, closestNextLineRect.position.toRange(), true);\n }\n closestNextLineRect = ArrUtils.last(filter(caretPositions, isLine(0)));\n if (closestNextLineRect) {\n return renderRangeCaret(editor, closestNextLineRect.position.toRange(), true);\n }\n }\n };\n var createTextBlock = function (editor) {\n var textBlock = editor.dom.create(Settings.getForcedRootBlock(editor));\n if (!Env.ie || Env.ie >= 11) {\n textBlock.innerHTML = '
';\n }\n return textBlock;\n };\n var exitPreBlock = function (editor, direction, range) {\n var pre, caretPos, newBlock;\n var caretWalker = CaretWalker(editor.getBody());\n var getNextVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.next);\n var getPrevVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.prev);\n if (range.collapsed && editor.settings.forced_root_block) {\n pre = editor.dom.getParent(range.startContainer, 'PRE');\n if (!pre) {\n return;\n }\n if (direction === 1) {\n caretPos = getNextVisualCaretPosition(CaretPosition$1.fromRangeStart(range));\n } else {\n caretPos = getPrevVisualCaretPosition(CaretPosition$1.fromRangeStart(range));\n }\n if (!caretPos) {\n newBlock = createTextBlock(editor);\n if (direction === 1) {\n editor.$(pre).after(newBlock);\n } else {\n editor.$(pre).before(newBlock);\n }\n editor.selection.select(newBlock, true);\n editor.selection.collapse();\n }\n }\n };\n var getHorizontalRange = function (editor, forward) {\n var caretWalker = CaretWalker(editor.getBody());\n var getNextVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.next);\n var getPrevVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.prev);\n var newRange;\n var direction = forward ? HDirection.Forwards : HDirection.Backwards;\n var getNextPosFn = forward ? getNextVisualCaretPosition : getPrevVisualCaretPosition;\n var range = editor.selection.getRng();\n newRange = moveToCeFalseHorizontally(direction, editor, getNextPosFn, range);\n if (newRange) {\n return newRange;\n }\n newRange = exitPreBlock(editor, direction, range);\n if (newRange) {\n return newRange;\n }\n return null;\n };\n var getVerticalRange = function (editor, down) {\n var newRange;\n var direction = down ? 1 : -1;\n var walkerFn = down ? downUntil : upUntil;\n var range = editor.selection.getRng();\n newRange = moveToCeFalseVertically(direction, editor, walkerFn, range);\n if (newRange) {\n return newRange;\n }\n newRange = exitPreBlock(editor, direction, range);\n if (newRange) {\n return newRange;\n }\n return null;\n };\n var moveH = function (editor, forward) {\n return function () {\n var newRng = getHorizontalRange(editor, forward);\n if (newRng) {\n moveToRange(editor, newRng);\n return true;\n } else {\n return false;\n }\n };\n };\n var moveV = function (editor, down) {\n return function () {\n var newRng = getVerticalRange(editor, down);\n if (newRng) {\n moveToRange(editor, newRng);\n return true;\n } else {\n return false;\n }\n };\n };\n var isCefPosition = function (forward) {\n return function (pos) {\n return forward ? isAfterContentEditableFalse(pos) : isBeforeContentEditableFalse(pos);\n };\n };\n var moveToLineEndPoint = function (editor, forward) {\n return function () {\n var from = forward ? CaretPosition$1.fromRangeEnd(editor.selection.getRng()) : CaretPosition$1.fromRangeStart(editor.selection.getRng());\n var result = forward ? getPositionsUntilNextLine(editor.getBody(), from) : getPositionsUntilPreviousLine(editor.getBody(), from);\n var to = forward ? last(result.positions) : head(result.positions);\n return to.filter(isCefPosition(forward)).fold(constant(false), function (pos) {\n editor.selection.setRng(pos.toRange());\n return true;\n });\n };\n };\n\n var deflate = function (rect, delta) {\n return {\n left: rect.left - delta,\n top: rect.top - delta,\n right: rect.right + delta * 2,\n bottom: rect.bottom + delta * 2,\n width: rect.width + delta,\n height: rect.height + delta\n };\n };\n var getCorners = function (getYAxisValue, tds) {\n return bind(tds, function (td) {\n var rect = deflate(clone$1(td.getBoundingClientRect()), -1);\n return [\n {\n x: rect.left,\n y: getYAxisValue(rect),\n cell: td\n },\n {\n x: rect.right,\n y: getYAxisValue(rect),\n cell: td\n }\n ];\n });\n };\n var findClosestCorner = function (corners, x, y) {\n return foldl(corners, function (acc, newCorner) {\n return acc.fold(function () {\n return Option.some(newCorner);\n }, function (oldCorner) {\n var oldDist = Math.sqrt(Math.abs(oldCorner.x - x) + Math.abs(oldCorner.y - y));\n var newDist = Math.sqrt(Math.abs(newCorner.x - x) + Math.abs(newCorner.y - y));\n return Option.some(newDist < oldDist ? newCorner : oldCorner);\n });\n }, Option.none());\n };\n var getClosestCell$1 = function (getYAxisValue, isTargetCorner, table, x, y) {\n var cells = descendants$1(Element.fromDom(table), 'td,th,caption').map(function (e) {\n return e.dom();\n });\n var corners = filter(getCorners(getYAxisValue, cells), function (corner) {\n return isTargetCorner(corner, y);\n });\n return findClosestCorner(corners, x, y).map(function (corner) {\n return corner.cell;\n });\n };\n var getBottomValue = function (rect) {\n return rect.bottom;\n };\n var getTopValue = function (rect) {\n return rect.top;\n };\n var isAbove$1 = function (corner, y) {\n return corner.y < y;\n };\n var isBelow$1 = function (corner, y) {\n return corner.y > y;\n };\n var getClosestCellAbove = curry(getClosestCell$1, getBottomValue, isAbove$1);\n var getClosestCellBelow = curry(getClosestCell$1, getTopValue, isBelow$1);\n var findClosestPositionInAboveCell = function (table, pos) {\n return head(pos.getClientRects()).bind(function (rect) {\n return getClosestCellAbove(table, rect.left, rect.top);\n }).bind(function (cell) {\n return findClosestHorizontalPosition(getLastLinePositions(cell), pos);\n });\n };\n var findClosestPositionInBelowCell = function (table, pos) {\n return last(pos.getClientRects()).bind(function (rect) {\n return getClosestCellBelow(table, rect.left, rect.top);\n }).bind(function (cell) {\n return findClosestHorizontalPosition(getFirstLinePositions(cell), pos);\n });\n };\n\n var hasNextBreak = function (getPositionsUntil, scope, lineInfo) {\n return lineInfo.breakAt.map(function (breakPos) {\n return getPositionsUntil(scope, breakPos).breakAt.isSome();\n }).getOr(false);\n };\n var startsWithWrapBreak = function (lineInfo) {\n return lineInfo.breakType === BreakType.Wrap && lineInfo.positions.length === 0;\n };\n var startsWithBrBreak = function (lineInfo) {\n return lineInfo.breakType === BreakType.Br && lineInfo.positions.length === 1;\n };\n var isAtTableCellLine = function (getPositionsUntil, scope, pos) {\n var lineInfo = getPositionsUntil(scope, pos);\n if (startsWithWrapBreak(lineInfo) || !NodeType.isBr(pos.getNode()) && startsWithBrBreak(lineInfo)) {\n return !hasNextBreak(getPositionsUntil, scope, lineInfo);\n } else {\n return lineInfo.breakAt.isNone();\n }\n };\n var isAtFirstTableCellLine = curry(isAtTableCellLine, getPositionsUntilPreviousLine);\n var isAtLastTableCellLine = curry(isAtTableCellLine, getPositionsUntilNextLine);\n var isCaretAtStartOrEndOfTable = function (forward, rng, table) {\n var caretPos = CaretPosition$1.fromRangeStart(rng);\n return CaretFinder.positionIn(!forward, table).map(function (pos) {\n return pos.isEqual(caretPos);\n }).getOr(false);\n };\n var navigateHorizontally = function (editor, forward, table, td) {\n var rng = editor.selection.getRng();\n var direction = forward ? 1 : -1;\n if (isFakeCaretTableBrowser() && isCaretAtStartOrEndOfTable(forward, rng, table)) {\n var newRng = showCaret(direction, editor, table, !forward, true);\n moveToRange(editor, newRng);\n return true;\n }\n return false;\n };\n var getClosestAbovePosition = function (root, table, start) {\n return findClosestPositionInAboveCell(table, start).orThunk(function () {\n return head(start.getClientRects()).bind(function (rect) {\n return findClosestHorizontalPositionFromPoint(getPositionsAbove(root, CaretPosition$1.before(table)), rect.left);\n });\n }).getOr(CaretPosition$1.before(table));\n };\n var getClosestBelowPosition = function (root, table, start) {\n return findClosestPositionInBelowCell(table, start).orThunk(function () {\n return head(start.getClientRects()).bind(function (rect) {\n return findClosestHorizontalPositionFromPoint(getPositionsBelow(root, CaretPosition$1.after(table)), rect.left);\n });\n }).getOr(CaretPosition$1.after(table));\n };\n var getTable = function (previous, pos) {\n var node = pos.getNode(previous);\n return NodeType.isElement(node) && node.nodeName === 'TABLE' ? Option.some(node) : Option.none();\n };\n var renderBlock = function (down, editor, table, pos) {\n var forcedRootBlock = Settings.getForcedRootBlock(editor);\n if (forcedRootBlock) {\n editor.undoManager.transact(function () {\n var element = Element.fromTag(forcedRootBlock);\n setAll(element, Settings.getForcedRootBlockAttrs(editor));\n append(element, Element.fromTag('br'));\n if (down) {\n after(Element.fromDom(table), element);\n } else {\n before(Element.fromDom(table), element);\n }\n var rng = editor.dom.createRng();\n rng.setStart(element.dom(), 0);\n rng.setEnd(element.dom(), 0);\n moveToRange(editor, rng);\n });\n } else {\n moveToRange(editor, pos.toRange());\n }\n };\n var moveCaret = function (editor, down, pos) {\n var table = down ? getTable(true, pos) : getTable(false, pos);\n var last = down === false;\n table.fold(function () {\n return moveToRange(editor, pos.toRange());\n }, function (table) {\n return CaretFinder.positionIn(last, editor.getBody()).filter(function (lastPos) {\n return lastPos.isEqual(pos);\n }).fold(function () {\n return moveToRange(editor, pos.toRange());\n }, function (_) {\n return renderBlock(down, editor, table, pos);\n });\n });\n };\n var navigateVertically = function (editor, down, table, td) {\n var rng = editor.selection.getRng();\n var pos = CaretPosition$1.fromRangeStart(rng);\n var root = editor.getBody();\n if (!down && isAtFirstTableCellLine(td, pos)) {\n var newPos = getClosestAbovePosition(root, table, pos);\n moveCaret(editor, down, newPos);\n return true;\n } else if (down && isAtLastTableCellLine(td, pos)) {\n var newPos = getClosestBelowPosition(root, table, pos);\n moveCaret(editor, down, newPos);\n return true;\n } else {\n return false;\n }\n };\n var moveH$1 = function (editor, forward) {\n return function () {\n return Option.from(editor.dom.getParent(editor.selection.getNode(), 'td,th')).bind(function (td) {\n return Option.from(editor.dom.getParent(td, 'table')).map(function (table) {\n return navigateHorizontally(editor, forward, table);\n });\n }).getOr(false);\n };\n };\n var moveV$1 = function (editor, forward) {\n return function () {\n return Option.from(editor.dom.getParent(editor.selection.getNode(), 'td,th')).bind(function (td) {\n return Option.from(editor.dom.getParent(td, 'table')).map(function (table) {\n return navigateVertically(editor, forward, table, td);\n });\n }).getOr(false);\n };\n };\n\n var isTarget = function (node) {\n return contains(['figcaption'], name(node));\n };\n var rangeBefore = function (target) {\n var rng = domGlobals.document.createRange();\n rng.setStartBefore(target.dom());\n rng.setEndBefore(target.dom());\n return rng;\n };\n var insertElement = function (root, elm, forward) {\n if (forward) {\n append(root, elm);\n } else {\n prepend(root, elm);\n }\n };\n var insertBr = function (root, forward) {\n var br = Element.fromTag('br');\n insertElement(root, br, forward);\n return rangeBefore(br);\n };\n var insertBlock$1 = function (root, forward, blockName, attrs) {\n var block = Element.fromTag(blockName);\n var br = Element.fromTag('br');\n setAll(block, attrs);\n append(block, br);\n insertElement(root, block, forward);\n return rangeBefore(br);\n };\n var insertEmptyLine = function (root, rootBlockName, attrs, forward) {\n if (rootBlockName === '') {\n return insertBr(root, forward);\n } else {\n return insertBlock$1(root, forward, rootBlockName, attrs);\n }\n };\n var getClosestTargetBlock = function (pos, root) {\n var isRoot = curry(eq, root);\n return closest(Element.fromDom(pos.container()), isBlock, isRoot).filter(isTarget);\n };\n var isAtFirstOrLastLine = function (root, forward, pos) {\n return forward ? isAtLastLine(root.dom(), pos) : isAtFirstLine(root.dom(), pos);\n };\n var moveCaretToNewEmptyLine = function (editor, forward) {\n var root = Element.fromDom(editor.getBody());\n var pos = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n var rootBlock = Settings.getForcedRootBlock(editor);\n var rootBlockAttrs = Settings.getForcedRootBlockAttrs(editor);\n return getClosestTargetBlock(pos, root).exists(function () {\n if (isAtFirstOrLastLine(root, forward, pos)) {\n var rng = insertEmptyLine(root, rootBlock, rootBlockAttrs, forward);\n editor.selection.setRng(rng);\n return true;\n } else {\n return false;\n }\n });\n };\n var moveV$2 = function (editor, forward) {\n return function () {\n if (editor.selection.isCollapsed()) {\n return moveCaretToNewEmptyLine(editor, forward);\n } else {\n return false;\n }\n };\n };\n\n var defaultPatterns = function (patterns) {\n return map(patterns, function (pattern) {\n return merge({\n shiftKey: false,\n altKey: false,\n ctrlKey: false,\n metaKey: false,\n keyCode: 0,\n action: noop\n }, pattern);\n });\n };\n var matchesEvent = function (pattern, evt) {\n return evt.keyCode === pattern.keyCode && evt.shiftKey === pattern.shiftKey && evt.altKey === pattern.altKey && evt.ctrlKey === pattern.ctrlKey && evt.metaKey === pattern.metaKey;\n };\n var match$1 = function (patterns, evt) {\n return bind(defaultPatterns(patterns), function (pattern) {\n return matchesEvent(pattern, evt) ? [pattern] : [];\n });\n };\n var action = function (f) {\n var x = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n x[_i - 1] = arguments[_i];\n }\n var args = Array.prototype.slice.call(arguments, 1);\n return function () {\n return f.apply(null, args);\n };\n };\n var execute = function (patterns, evt) {\n return find(match$1(patterns, evt), function (pattern) {\n return pattern.action();\n });\n };\n var MatchKeys = {\n match: match$1,\n action: action,\n execute: execute\n };\n\n var executeKeydownOverride = function (editor, caret, evt) {\n var os = PlatformDetection$1.detect().os;\n MatchKeys.execute([\n {\n keyCode: VK.RIGHT,\n action: moveH(editor, true)\n },\n {\n keyCode: VK.LEFT,\n action: moveH(editor, false)\n },\n {\n keyCode: VK.UP,\n action: moveV(editor, false)\n },\n {\n keyCode: VK.DOWN,\n action: moveV(editor, true)\n },\n {\n keyCode: VK.RIGHT,\n action: moveH$1(editor, true)\n },\n {\n keyCode: VK.LEFT,\n action: moveH$1(editor, false)\n },\n {\n keyCode: VK.UP,\n action: moveV$1(editor, false)\n },\n {\n keyCode: VK.DOWN,\n action: moveV$1(editor, true)\n },\n {\n keyCode: VK.RIGHT,\n action: BoundarySelection.move(editor, caret, true)\n },\n {\n keyCode: VK.LEFT,\n action: BoundarySelection.move(editor, caret, false)\n },\n {\n keyCode: VK.RIGHT,\n ctrlKey: !os.isOSX(),\n altKey: os.isOSX(),\n action: BoundarySelection.moveNextWord(editor, caret)\n },\n {\n keyCode: VK.LEFT,\n ctrlKey: !os.isOSX(),\n altKey: os.isOSX(),\n action: BoundarySelection.movePrevWord(editor, caret)\n },\n {\n keyCode: VK.UP,\n action: moveV$2(editor, false)\n },\n {\n keyCode: VK.DOWN,\n action: moveV$2(editor, true)\n }\n ], evt).each(function (_) {\n evt.preventDefault();\n });\n };\n var setup$7 = function (editor, caret) {\n editor.on('keydown', function (evt) {\n if (evt.isDefaultPrevented() === false) {\n executeKeydownOverride(editor, caret, evt);\n }\n });\n };\n var ArrowKeys = { setup: setup$7 };\n\n var executeKeydownOverride$1 = function (editor, caret, evt) {\n MatchKeys.execute([\n {\n keyCode: VK.BACKSPACE,\n action: MatchKeys.action(CefDelete.backspaceDelete, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: MatchKeys.action(CefDelete.backspaceDelete, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: MatchKeys.action(CefBoundaryDelete.backspaceDelete, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: MatchKeys.action(CefBoundaryDelete.backspaceDelete, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: MatchKeys.action(InlineBoundaryDelete.backspaceDelete, editor, caret, false)\n },\n {\n keyCode: VK.DELETE,\n action: MatchKeys.action(InlineBoundaryDelete.backspaceDelete, editor, caret, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: MatchKeys.action(TableDelete.backspaceDelete, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: MatchKeys.action(TableDelete.backspaceDelete, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: MatchKeys.action(BlockRangeDelete.backspaceDelete, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: MatchKeys.action(BlockRangeDelete.backspaceDelete, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: MatchKeys.action(BlockBoundaryDelete.backspaceDelete, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: MatchKeys.action(BlockBoundaryDelete.backspaceDelete, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: MatchKeys.action(InlineFormatDelete.backspaceDelete, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: MatchKeys.action(InlineFormatDelete.backspaceDelete, editor, true)\n }\n ], evt).each(function (_) {\n evt.preventDefault();\n });\n };\n var executeKeyupOverride = function (editor, evt) {\n MatchKeys.execute([\n {\n keyCode: VK.BACKSPACE,\n action: MatchKeys.action(CefDelete.paddEmptyElement, editor)\n },\n {\n keyCode: VK.DELETE,\n action: MatchKeys.action(CefDelete.paddEmptyElement, editor)\n }\n ], evt);\n };\n var setup$8 = function (editor, caret) {\n editor.on('keydown', function (evt) {\n if (evt.isDefaultPrevented() === false) {\n executeKeydownOverride$1(editor, caret, evt);\n }\n });\n editor.on('keyup', function (evt) {\n if (evt.isDefaultPrevented() === false) {\n executeKeyupOverride(editor, evt);\n }\n });\n };\n var DeleteBackspaceKeys = { setup: setup$8 };\n\n var firstNonWhiteSpaceNodeSibling = function (node) {\n while (node) {\n if (node.nodeType === 1 || node.nodeType === 3 && node.data && /[\\r\\n\\s]/.test(node.data)) {\n return node;\n }\n node = node.nextSibling;\n }\n };\n var moveToCaretPosition = function (editor, root) {\n var walker, node, rng, lastNode = root, tempElm;\n var dom = editor.dom;\n var moveCaretBeforeOnEnterElementsMap = editor.schema.getMoveCaretBeforeOnEnterElements();\n if (!root) {\n return;\n }\n if (/^(LI|DT|DD)$/.test(root.nodeName)) {\n var firstChild = firstNonWhiteSpaceNodeSibling(root.firstChild);\n if (firstChild && /^(UL|OL|DL)$/.test(firstChild.nodeName)) {\n root.insertBefore(dom.doc.createTextNode('\\xA0'), root.firstChild);\n }\n }\n rng = dom.createRng();\n root.normalize();\n if (root.hasChildNodes()) {\n walker = new TreeWalker(root, root);\n while (node = walker.current()) {\n if (NodeType.isText(node)) {\n rng.setStart(node, 0);\n rng.setEnd(node, 0);\n break;\n }\n if (moveCaretBeforeOnEnterElementsMap[node.nodeName.toLowerCase()]) {\n rng.setStartBefore(node);\n rng.setEndBefore(node);\n break;\n }\n lastNode = node;\n node = walker.next();\n }\n if (!node) {\n rng.setStart(lastNode, 0);\n rng.setEnd(lastNode, 0);\n }\n } else {\n if (NodeType.isBr(root)) {\n if (root.nextSibling && dom.isBlock(root.nextSibling)) {\n rng.setStartBefore(root);\n rng.setEndBefore(root);\n } else {\n rng.setStartAfter(root);\n rng.setEndAfter(root);\n }\n } else {\n rng.setStart(root, 0);\n rng.setEnd(root, 0);\n }\n }\n editor.selection.setRng(rng);\n dom.remove(tempElm);\n editor.selection.scrollIntoView(root);\n };\n var getEditableRoot = function (dom, node) {\n var root = dom.getRoot();\n var parent, editableRoot;\n parent = node;\n while (parent !== root && dom.getContentEditable(parent) !== 'false') {\n if (dom.getContentEditable(parent) === 'true') {\n editableRoot = parent;\n }\n parent = parent.parentNode;\n }\n return parent !== root ? editableRoot : root;\n };\n var getParentBlock$2 = function (editor) {\n return Option.from(editor.dom.getParent(editor.selection.getStart(true), editor.dom.isBlock));\n };\n var getParentBlockName = function (editor) {\n return getParentBlock$2(editor).fold(constant(''), function (parentBlock) {\n return parentBlock.nodeName.toUpperCase();\n });\n };\n var isListItemParentBlock = function (editor) {\n return getParentBlock$2(editor).filter(function (elm) {\n return isListItem(Element.fromDom(elm));\n }).isSome();\n };\n var NewLineUtils = {\n moveToCaretPosition: moveToCaretPosition,\n getEditableRoot: getEditableRoot,\n getParentBlock: getParentBlock$2,\n getParentBlockName: getParentBlockName,\n isListItemParentBlock: isListItemParentBlock\n };\n\n var hasFirstChild = function (elm, name) {\n return elm.firstChild && elm.firstChild.nodeName === name;\n };\n var hasParent$1 = function (elm, parentName) {\n return elm && elm.parentNode && elm.parentNode.nodeName === parentName;\n };\n var isListBlock = function (elm) {\n return elm && /^(OL|UL|LI)$/.test(elm.nodeName);\n };\n var isNestedList = function (elm) {\n return isListBlock(elm) && isListBlock(elm.parentNode);\n };\n var getContainerBlock = function (containerBlock) {\n var containerBlockParent = containerBlock.parentNode;\n if (/^(LI|DT|DD)$/.test(containerBlockParent.nodeName)) {\n return containerBlockParent;\n }\n return containerBlock;\n };\n var isFirstOrLastLi = function (containerBlock, parentBlock, first) {\n var node = containerBlock[first ? 'firstChild' : 'lastChild'];\n while (node) {\n if (NodeType.isElement(node)) {\n break;\n }\n node = node[first ? 'nextSibling' : 'previousSibling'];\n }\n return node === parentBlock;\n };\n var insert$1 = function (editor, createNewBlock, containerBlock, parentBlock, newBlockName) {\n var dom = editor.dom;\n var rng = editor.selection.getRng();\n if (containerBlock === editor.getBody()) {\n return;\n }\n if (isNestedList(containerBlock)) {\n newBlockName = 'LI';\n }\n var newBlock = newBlockName ? createNewBlock(newBlockName) : dom.create('BR');\n if (isFirstOrLastLi(containerBlock, parentBlock, true) && isFirstOrLastLi(containerBlock, parentBlock, false)) {\n if (hasParent$1(containerBlock, 'LI')) {\n dom.insertAfter(newBlock, getContainerBlock(containerBlock));\n } else {\n dom.replace(newBlock, containerBlock);\n }\n } else if (isFirstOrLastLi(containerBlock, parentBlock, true)) {\n if (hasParent$1(containerBlock, 'LI')) {\n dom.insertAfter(newBlock, getContainerBlock(containerBlock));\n newBlock.appendChild(dom.doc.createTextNode(' '));\n newBlock.appendChild(containerBlock);\n } else {\n containerBlock.parentNode.insertBefore(newBlock, containerBlock);\n }\n } else if (isFirstOrLastLi(containerBlock, parentBlock, false)) {\n dom.insertAfter(newBlock, getContainerBlock(containerBlock));\n } else {\n containerBlock = getContainerBlock(containerBlock);\n var tmpRng = rng.cloneRange();\n tmpRng.setStartAfter(parentBlock);\n tmpRng.setEndAfter(containerBlock);\n var fragment = tmpRng.extractContents();\n if (newBlockName === 'LI' && hasFirstChild(fragment, 'LI')) {\n newBlock = fragment.firstChild;\n dom.insertAfter(fragment, containerBlock);\n } else {\n dom.insertAfter(fragment, containerBlock);\n dom.insertAfter(newBlock, containerBlock);\n }\n }\n dom.remove(parentBlock);\n NewLineUtils.moveToCaretPosition(editor, newBlock);\n };\n var InsertLi = { insert: insert$1 };\n\n var trimZwsp = function (fragment) {\n each(descendants(Element.fromDom(fragment), isText), function (text) {\n var rawNode = text.dom();\n rawNode.nodeValue = Zwsp.trim(rawNode.nodeValue);\n });\n };\n var isEmptyAnchor = function (dom, elm) {\n return elm && elm.nodeName === 'A' && dom.isEmpty(elm);\n };\n var isTableCell$5 = function (node) {\n return node && /^(TD|TH|CAPTION)$/.test(node.nodeName);\n };\n var emptyBlock = function (elm) {\n elm.innerHTML = '
';\n };\n var containerAndSiblingName = function (container, nodeName) {\n return container.nodeName === nodeName || container.previousSibling && container.previousSibling.nodeName === nodeName;\n };\n var canSplitBlock = function (dom, node) {\n return node && dom.isBlock(node) && !/^(TD|TH|CAPTION|FORM)$/.test(node.nodeName) && !/^(fixed|absolute)/i.test(node.style.position) && dom.getContentEditable(node) !== 'true';\n };\n var trimInlineElementsOnLeftSideOfBlock = function (dom, nonEmptyElementsMap, block) {\n var node = block;\n var firstChilds = [];\n var i;\n if (!node) {\n return;\n }\n while (node = node.firstChild) {\n if (dom.isBlock(node)) {\n return;\n }\n if (NodeType.isElement(node) && !nonEmptyElementsMap[node.nodeName.toLowerCase()]) {\n firstChilds.push(node);\n }\n }\n i = firstChilds.length;\n while (i--) {\n node = firstChilds[i];\n if (!node.hasChildNodes() || node.firstChild === node.lastChild && node.firstChild.nodeValue === '') {\n dom.remove(node);\n } else {\n if (isEmptyAnchor(dom, node)) {\n dom.remove(node);\n }\n }\n }\n };\n var normalizeZwspOffset = function (start, container, offset) {\n if (NodeType.isText(container) === false) {\n return offset;\n } else if (start) {\n return offset === 1 && container.data.charAt(offset - 1) === Zwsp.ZWSP ? 0 : offset;\n } else {\n return offset === container.data.length - 1 && container.data.charAt(offset) === Zwsp.ZWSP ? container.data.length : offset;\n }\n };\n var includeZwspInRange = function (rng) {\n var newRng = rng.cloneRange();\n newRng.setStart(rng.startContainer, normalizeZwspOffset(true, rng.startContainer, rng.startOffset));\n newRng.setEnd(rng.endContainer, normalizeZwspOffset(false, rng.endContainer, rng.endOffset));\n return newRng;\n };\n var trimLeadingLineBreaks = function (node) {\n do {\n if (NodeType.isText(node)) {\n node.nodeValue = node.nodeValue.replace(/^[\\r\\n]+/, '');\n }\n node = node.firstChild;\n } while (node);\n };\n var getEditableRoot$1 = function (dom, node) {\n var root = dom.getRoot();\n var parent, editableRoot;\n parent = node;\n while (parent !== root && dom.getContentEditable(parent) !== 'false') {\n if (dom.getContentEditable(parent) === 'true') {\n editableRoot = parent;\n }\n parent = parent.parentNode;\n }\n return parent !== root ? editableRoot : root;\n };\n var applyAttributes = function (editor, node, forcedRootBlockAttrs) {\n Option.from(forcedRootBlockAttrs.style).map(editor.dom.parseStyle).each(function (attrStyles) {\n var currentStyles = getAllRaw(Element.fromDom(node));\n var newStyles = __assign(__assign({}, currentStyles), attrStyles);\n editor.dom.setStyles(node, newStyles);\n });\n var attrClassesOpt = Option.from(forcedRootBlockAttrs.class).map(function (attrClasses) {\n return attrClasses.split(/\\s+/);\n });\n var currentClassesOpt = Option.from(node.className).map(function (currentClasses) {\n return filter(currentClasses.split(/\\s+/), function (clazz) {\n return clazz !== '';\n });\n });\n lift2(attrClassesOpt, currentClassesOpt, function (attrClasses, currentClasses) {\n var filteredClasses = filter(currentClasses, function (clazz) {\n return !contains(attrClasses, clazz);\n });\n var newClasses = __spreadArrays(attrClasses, filteredClasses);\n editor.dom.setAttrib(node, 'class', newClasses.join(' '));\n });\n var appliedAttrs = [\n 'style',\n 'class'\n ];\n var remainingAttrs = bifilter(forcedRootBlockAttrs, function (_, attrs) {\n return !contains(appliedAttrs, attrs);\n }).t;\n editor.dom.setAttribs(node, remainingAttrs);\n };\n var setForcedBlockAttrs = function (editor, node) {\n var forcedRootBlockName = Settings.getForcedRootBlock(editor);\n if (forcedRootBlockName && forcedRootBlockName.toLowerCase() === node.tagName.toLowerCase()) {\n var forcedRootBlockAttrs = Settings.getForcedRootBlockAttrs(editor);\n applyAttributes(editor, node, forcedRootBlockAttrs);\n }\n };\n var wrapSelfAndSiblingsInDefaultBlock = function (editor, newBlockName, rng, container, offset) {\n var newBlock, parentBlock, startNode, node, next, rootBlockName;\n var blockName = newBlockName || 'P';\n var dom = editor.dom, editableRoot = getEditableRoot$1(dom, container);\n parentBlock = dom.getParent(container, dom.isBlock);\n if (!parentBlock || !canSplitBlock(dom, parentBlock)) {\n parentBlock = parentBlock || editableRoot;\n if (parentBlock === editor.getBody() || isTableCell$5(parentBlock)) {\n rootBlockName = parentBlock.nodeName.toLowerCase();\n } else {\n rootBlockName = parentBlock.parentNode.nodeName.toLowerCase();\n }\n if (!parentBlock.hasChildNodes()) {\n newBlock = dom.create(blockName);\n setForcedBlockAttrs(editor, newBlock);\n parentBlock.appendChild(newBlock);\n rng.setStart(newBlock, 0);\n rng.setEnd(newBlock, 0);\n return newBlock;\n }\n node = container;\n while (node.parentNode !== parentBlock) {\n node = node.parentNode;\n }\n while (node && !dom.isBlock(node)) {\n startNode = node;\n node = node.previousSibling;\n }\n if (startNode && editor.schema.isValidChild(rootBlockName, blockName.toLowerCase())) {\n newBlock = dom.create(blockName);\n setForcedBlockAttrs(editor, newBlock);\n startNode.parentNode.insertBefore(newBlock, startNode);\n node = startNode;\n while (node && !dom.isBlock(node)) {\n next = node.nextSibling;\n newBlock.appendChild(node);\n node = next;\n }\n rng.setStart(container, offset);\n rng.setEnd(container, offset);\n }\n }\n return container;\n };\n var addBrToBlockIfNeeded = function (dom, block) {\n var lastChild;\n block.normalize();\n lastChild = block.lastChild;\n if (!lastChild || /^(left|right)$/gi.test(dom.getStyle(lastChild, 'float', true))) {\n dom.add(block, 'br');\n }\n };\n var insert$2 = function (editor, evt) {\n var tmpRng, editableRoot, container, offset, parentBlock, shiftKey;\n var newBlock, fragment, containerBlock, parentBlockName, containerBlockName, newBlockName, isAfterLastNodeInContainer;\n var dom = editor.dom;\n var schema = editor.schema, nonEmptyElementsMap = schema.getNonEmptyElements();\n var rng = editor.selection.getRng();\n var createNewBlock = function (name) {\n var node = container, block, clonedNode, caretNode;\n var textInlineElements = schema.getTextInlineElements();\n if (name || parentBlockName === 'TABLE' || parentBlockName === 'HR') {\n block = dom.create(name || newBlockName);\n } else {\n block = parentBlock.cloneNode(false);\n }\n caretNode = block;\n if (Settings.shouldKeepStyles(editor) === false) {\n dom.setAttrib(block, 'style', null);\n dom.setAttrib(block, 'class', null);\n } else {\n do {\n if (textInlineElements[node.nodeName]) {\n if (isCaretNode(node) || Bookmarks.isBookmarkNode(node)) {\n continue;\n }\n clonedNode = node.cloneNode(false);\n dom.setAttrib(clonedNode, 'id', '');\n if (block.hasChildNodes()) {\n clonedNode.appendChild(block.firstChild);\n block.appendChild(clonedNode);\n } else {\n caretNode = clonedNode;\n block.appendChild(clonedNode);\n }\n }\n } while ((node = node.parentNode) && node !== editableRoot);\n }\n setForcedBlockAttrs(editor, block);\n emptyBlock(caretNode);\n return block;\n };\n var isCaretAtStartOrEndOfBlock = function (start) {\n var walker, node, name, normalizedOffset;\n normalizedOffset = normalizeZwspOffset(start, container, offset);\n if (NodeType.isText(container) && (start ? normalizedOffset > 0 : normalizedOffset < container.nodeValue.length)) {\n return false;\n }\n if (container.parentNode === parentBlock && isAfterLastNodeInContainer && !start) {\n return true;\n }\n if (start && NodeType.isElement(container) && container === parentBlock.firstChild) {\n return true;\n }\n if (containerAndSiblingName(container, 'TABLE') || containerAndSiblingName(container, 'HR')) {\n return isAfterLastNodeInContainer && !start || !isAfterLastNodeInContainer && start;\n }\n walker = new TreeWalker(container, parentBlock);\n if (NodeType.isText(container)) {\n if (start && normalizedOffset === 0) {\n walker.prev();\n } else if (!start && normalizedOffset === container.nodeValue.length) {\n walker.next();\n }\n }\n while (node = walker.current()) {\n if (NodeType.isElement(node)) {\n if (!node.getAttribute('data-mce-bogus')) {\n name = node.nodeName.toLowerCase();\n if (nonEmptyElementsMap[name] && name !== 'br') {\n return false;\n }\n }\n } else if (NodeType.isText(node) && !/^[ \\t\\r\\n]*$/.test(node.nodeValue)) {\n return false;\n }\n if (start) {\n walker.prev();\n } else {\n walker.next();\n }\n }\n return true;\n };\n var insertNewBlockAfter = function () {\n if (/^(H[1-6]|PRE|FIGURE)$/.test(parentBlockName) && containerBlockName !== 'HGROUP') {\n newBlock = createNewBlock(newBlockName);\n } else {\n newBlock = createNewBlock();\n }\n if (Settings.shouldEndContainerOnEmptyBlock(editor) && canSplitBlock(dom, containerBlock) && dom.isEmpty(parentBlock)) {\n newBlock = dom.split(containerBlock, parentBlock);\n } else {\n dom.insertAfter(newBlock, parentBlock);\n }\n NewLineUtils.moveToCaretPosition(editor, newBlock);\n };\n NormalizeRange.normalize(dom, rng).each(function (normRng) {\n rng.setStart(normRng.startContainer, normRng.startOffset);\n rng.setEnd(normRng.endContainer, normRng.endOffset);\n });\n container = rng.startContainer;\n offset = rng.startOffset;\n newBlockName = Settings.getForcedRootBlock(editor);\n shiftKey = evt.shiftKey;\n if (NodeType.isElement(container) && container.hasChildNodes()) {\n isAfterLastNodeInContainer = offset > container.childNodes.length - 1;\n container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;\n if (isAfterLastNodeInContainer && NodeType.isText(container)) {\n offset = container.nodeValue.length;\n } else {\n offset = 0;\n }\n }\n editableRoot = getEditableRoot$1(dom, container);\n if (!editableRoot) {\n return;\n }\n if (newBlockName && !shiftKey || !newBlockName && shiftKey) {\n container = wrapSelfAndSiblingsInDefaultBlock(editor, newBlockName, rng, container, offset);\n }\n parentBlock = dom.getParent(container, dom.isBlock);\n containerBlock = parentBlock ? dom.getParent(parentBlock.parentNode, dom.isBlock) : null;\n parentBlockName = parentBlock ? parentBlock.nodeName.toUpperCase() : '';\n containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : '';\n if (containerBlockName === 'LI' && !evt.ctrlKey) {\n parentBlock = containerBlock;\n containerBlock = containerBlock.parentNode;\n parentBlockName = containerBlockName;\n }\n if (/^(LI|DT|DD)$/.test(parentBlockName)) {\n if (dom.isEmpty(parentBlock)) {\n InsertLi.insert(editor, createNewBlock, containerBlock, parentBlock, newBlockName);\n return;\n }\n }\n if (newBlockName && parentBlock === editor.getBody()) {\n return;\n }\n newBlockName = newBlockName || 'P';\n if (isCaretContainerBlock(parentBlock)) {\n newBlock = showCaretContainerBlock(parentBlock);\n if (dom.isEmpty(parentBlock)) {\n emptyBlock(parentBlock);\n }\n setForcedBlockAttrs(editor, newBlock);\n NewLineUtils.moveToCaretPosition(editor, newBlock);\n } else if (isCaretAtStartOrEndOfBlock()) {\n insertNewBlockAfter();\n } else if (isCaretAtStartOrEndOfBlock(true)) {\n newBlock = parentBlock.parentNode.insertBefore(createNewBlock(), parentBlock);\n NewLineUtils.moveToCaretPosition(editor, containerAndSiblingName(parentBlock, 'HR') ? newBlock : parentBlock);\n } else {\n tmpRng = includeZwspInRange(rng).cloneRange();\n tmpRng.setEndAfter(parentBlock);\n fragment = tmpRng.extractContents();\n trimZwsp(fragment);\n trimLeadingLineBreaks(fragment);\n newBlock = fragment.firstChild;\n dom.insertAfter(fragment, parentBlock);\n trimInlineElementsOnLeftSideOfBlock(dom, nonEmptyElementsMap, newBlock);\n addBrToBlockIfNeeded(dom, parentBlock);\n if (dom.isEmpty(parentBlock)) {\n emptyBlock(parentBlock);\n }\n newBlock.normalize();\n if (dom.isEmpty(newBlock)) {\n dom.remove(newBlock);\n insertNewBlockAfter();\n } else {\n setForcedBlockAttrs(editor, newBlock);\n NewLineUtils.moveToCaretPosition(editor, newBlock);\n }\n }\n dom.setAttrib(newBlock, 'id', '');\n editor.fire('NewBlock', { newBlock: newBlock });\n };\n var InsertBlock = { insert: insert$2 };\n\n var matchesSelector = function (editor, selector) {\n return NewLineUtils.getParentBlock(editor).filter(function (parentBlock) {\n return selector.length > 0 && is$1(Element.fromDom(parentBlock), selector);\n }).isSome();\n };\n var shouldInsertBr = function (editor) {\n return matchesSelector(editor, Settings.getBrNewLineSelector(editor));\n };\n var shouldBlockNewLine = function (editor) {\n return matchesSelector(editor, Settings.getNoNewLineSelector(editor));\n };\n var ContextSelectors = {\n shouldInsertBr: shouldInsertBr,\n shouldBlockNewLine: shouldBlockNewLine\n };\n\n var newLineAction = Adt.generate([\n { br: [] },\n { block: [] },\n { none: [] }\n ]);\n var shouldBlockNewLine$1 = function (editor, shiftKey) {\n return ContextSelectors.shouldBlockNewLine(editor);\n };\n var isBrMode = function (requiredState) {\n return function (editor, shiftKey) {\n var brMode = Settings.getForcedRootBlock(editor) === '';\n return brMode === requiredState;\n };\n };\n var inListBlock = function (requiredState) {\n return function (editor, shiftKey) {\n return NewLineUtils.isListItemParentBlock(editor) === requiredState;\n };\n };\n var inBlock = function (blockName, requiredState) {\n return function (editor, shiftKey) {\n var state = NewLineUtils.getParentBlockName(editor) === blockName.toUpperCase();\n return state === requiredState;\n };\n };\n var inPreBlock = function (requiredState) {\n return inBlock('pre', requiredState);\n };\n var inSummaryBlock = function () {\n return inBlock('summary', true);\n };\n var shouldPutBrInPre$1 = function (requiredState) {\n return function (editor, shiftKey) {\n return Settings.shouldPutBrInPre(editor) === requiredState;\n };\n };\n var inBrContext = function (editor, shiftKey) {\n return ContextSelectors.shouldInsertBr(editor);\n };\n var hasShiftKey = function (editor, shiftKey) {\n return shiftKey;\n };\n var canInsertIntoEditableRoot = function (editor) {\n var forcedRootBlock = Settings.getForcedRootBlock(editor);\n var rootEditable = NewLineUtils.getEditableRoot(editor.dom, editor.selection.getStart());\n return rootEditable && editor.schema.isValidChild(rootEditable.nodeName, forcedRootBlock ? forcedRootBlock : 'P');\n };\n var match$2 = function (predicates, action) {\n return function (editor, shiftKey) {\n var isMatch = foldl(predicates, function (res, p) {\n return res && p(editor, shiftKey);\n }, true);\n return isMatch ? Option.some(action) : Option.none();\n };\n };\n var getAction$1 = function (editor, evt) {\n return LazyEvaluator.evaluateUntil([\n match$2([shouldBlockNewLine$1], newLineAction.none()),\n match$2([inSummaryBlock()], newLineAction.br()),\n match$2([\n inPreBlock(true),\n shouldPutBrInPre$1(false),\n hasShiftKey\n ], newLineAction.br()),\n match$2([\n inPreBlock(true),\n shouldPutBrInPre$1(false)\n ], newLineAction.block()),\n match$2([\n inPreBlock(true),\n shouldPutBrInPre$1(true),\n hasShiftKey\n ], newLineAction.block()),\n match$2([\n inPreBlock(true),\n shouldPutBrInPre$1(true)\n ], newLineAction.br()),\n match$2([\n inListBlock(true),\n hasShiftKey\n ], newLineAction.br()),\n match$2([inListBlock(true)], newLineAction.block()),\n match$2([\n isBrMode(true),\n hasShiftKey,\n canInsertIntoEditableRoot\n ], newLineAction.block()),\n match$2([isBrMode(true)], newLineAction.br()),\n match$2([inBrContext], newLineAction.br()),\n match$2([\n isBrMode(false),\n hasShiftKey\n ], newLineAction.br()),\n match$2([canInsertIntoEditableRoot], newLineAction.block())\n ], [\n editor,\n evt.shiftKey\n ]).getOr(newLineAction.none());\n };\n var NewLineAction = { getAction: getAction$1 };\n\n var insert$3 = function (editor, evt) {\n NewLineAction.getAction(editor, evt).fold(function () {\n InsertBr.insert(editor, evt);\n }, function () {\n InsertBlock.insert(editor, evt);\n }, noop);\n };\n var InsertNewLine = { insert: insert$3 };\n\n var endTypingLevel = function (undoManager) {\n if (undoManager.typing) {\n undoManager.typing = false;\n undoManager.add();\n }\n };\n var handleEnterKeyEvent = function (editor, event) {\n if (event.isDefaultPrevented()) {\n return;\n }\n event.preventDefault();\n endTypingLevel(editor.undoManager);\n editor.undoManager.transact(function () {\n if (editor.selection.isCollapsed() === false) {\n editor.execCommand('Delete');\n }\n InsertNewLine.insert(editor, event);\n });\n };\n var setup$9 = function (editor) {\n editor.on('keydown', function (event) {\n if (event.keyCode === VK.ENTER) {\n handleEnterKeyEvent(editor, event);\n }\n });\n };\n var EnterKey = { setup: setup$9 };\n\n var insertTextAtPosition = function (text, pos) {\n var container = pos.container();\n var offset = pos.offset();\n if (NodeType.isText(container)) {\n container.insertData(offset, text);\n return Option.some(CaretPosition(container, offset + text.length));\n } else {\n return getElementFromPosition(pos).map(function (elm) {\n var textNode = Element.fromText(text);\n if (pos.isAtEnd()) {\n after(elm, textNode);\n } else {\n before(elm, textNode);\n }\n return CaretPosition(textNode.dom(), text.length);\n });\n }\n };\n var insertNbspAtPosition = curry(insertTextAtPosition, '\\xA0');\n var insertSpaceAtPosition = curry(insertTextAtPosition, ' ');\n\n var navigateIgnoreEmptyTextNodes = function (forward, root, from) {\n return CaretFinder.navigateIgnore(forward, root, from, isEmptyText);\n };\n var getClosestBlock = function (root, pos) {\n return find(Parents.parentsAndSelf(Element.fromDom(pos.container()), root), isBlock);\n };\n var isAtBeforeAfterBlockBoundary = function (forward, root, pos) {\n return navigateIgnoreEmptyTextNodes(forward, root.dom(), pos).forall(function (newPos) {\n return getClosestBlock(root, pos).fold(function () {\n return isInSameBlock(newPos, pos, root.dom()) === false;\n }, function (fromBlock) {\n return isInSameBlock(newPos, pos, root.dom()) === false && contains$3(fromBlock, Element.fromDom(newPos.container()));\n });\n });\n };\n var isAtBlockBoundary = function (forward, root, pos) {\n return getClosestBlock(root, pos).fold(function () {\n return navigateIgnoreEmptyTextNodes(forward, root.dom(), pos).forall(function (newPos) {\n return isInSameBlock(newPos, pos, root.dom()) === false;\n });\n }, function (parent) {\n return navigateIgnoreEmptyTextNodes(forward, parent.dom(), pos).isNone();\n });\n };\n var isAtStartOfBlock = curry(isAtBlockBoundary, false);\n var isAtEndOfBlock = curry(isAtBlockBoundary, true);\n var isBeforeBlock = curry(isAtBeforeAfterBlockBoundary, false);\n var isAfterBlock = curry(isAtBeforeAfterBlockBoundary, true);\n\n var nbsp = '\\xA0';\n var isInMiddleOfText = function (pos) {\n return CaretPosition.isTextPosition(pos) && !pos.isAtStart() && !pos.isAtEnd();\n };\n var getClosestBlock$1 = function (root, pos) {\n var parentBlocks = filter(Parents.parentsAndSelf(Element.fromDom(pos.container()), root), isBlock);\n return head(parentBlocks).getOr(root);\n };\n var hasSpaceBefore = function (root, pos) {\n if (isInMiddleOfText(pos)) {\n return isAfterSpace(pos);\n } else {\n return isAfterSpace(pos) || CaretFinder.prevPosition(getClosestBlock$1(root, pos).dom(), pos).exists(isAfterSpace);\n }\n };\n var hasSpaceAfter = function (root, pos) {\n if (isInMiddleOfText(pos)) {\n return isBeforeSpace(pos);\n } else {\n return isBeforeSpace(pos) || CaretFinder.nextPosition(getClosestBlock$1(root, pos).dom(), pos).exists(isBeforeSpace);\n }\n };\n var isPreValue = function (value) {\n return contains([\n 'pre',\n 'pre-wrap'\n ], value);\n };\n var isInPre = function (pos) {\n return getElementFromPosition(pos).bind(function (elm) {\n return closest(elm, isElement);\n }).exists(function (elm) {\n return isPreValue(get$1(elm, 'white-space'));\n });\n };\n var isAtBeginningOfBody = function (root, pos) {\n return CaretFinder.prevPosition(root.dom(), pos).isNone();\n };\n var isAtEndOfBody = function (root, pos) {\n return CaretFinder.nextPosition(root.dom(), pos).isNone();\n };\n var isAtLineBoundary = function (root, pos) {\n return isAtBeginningOfBody(root, pos) || isAtEndOfBody(root, pos) || isAtStartOfBlock(root, pos) || isAtEndOfBlock(root, pos) || isAfterBr(root, pos) || isBeforeBr(root, pos);\n };\n var needsToHaveNbsp = function (root, pos) {\n if (isInPre(pos)) {\n return false;\n } else {\n return isAtLineBoundary(root, pos) || hasSpaceBefore(root, pos) || hasSpaceAfter(root, pos);\n }\n };\n var needsToBeNbspLeft = function (root, pos) {\n if (isInPre(pos)) {\n return false;\n } else {\n return isAtStartOfBlock(root, pos) || isBeforeBlock(root, pos) || isAfterBr(root, pos) || hasSpaceBefore(root, pos);\n }\n };\n var leanRight = function (pos) {\n var container = pos.container();\n var offset = pos.offset();\n if (NodeType.isText(container) && offset < container.data.length) {\n return CaretPosition(container, offset + 1);\n } else {\n return pos;\n }\n };\n var needsToBeNbspRight = function (root, pos) {\n var afterPos = leanRight(pos);\n if (isInPre(afterPos)) {\n return false;\n } else {\n return isAtEndOfBlock(root, afterPos) || isAfterBlock(root, afterPos) || isBeforeBr(root, afterPos) || hasSpaceAfter(root, afterPos);\n }\n };\n var needsToBeNbsp = function (root, pos) {\n return needsToBeNbspLeft(root, pos) || needsToBeNbspRight(root, pos);\n };\n var isNbspAt = function (text, offset) {\n return isNbsp(text.charAt(offset));\n };\n var hasNbsp = function (pos) {\n var container = pos.container();\n return NodeType.isText(container) && contains$2(container.data, nbsp);\n };\n var normalizeNbspMiddle = function (text) {\n var chars = text.split('');\n return map(chars, function (chr, i) {\n if (isNbsp(chr) && i > 0 && i < chars.length - 1 && isContent$1(chars[i - 1]) && isContent$1(chars[i + 1])) {\n return ' ';\n } else {\n return chr;\n }\n }).join('');\n };\n var normalizeNbspAtStart = function (root, node) {\n var text = node.data;\n var firstPos = CaretPosition(node, 0);\n if (isNbspAt(text, 0) && !needsToBeNbsp(root, firstPos)) {\n node.data = ' ' + text.slice(1);\n return true;\n } else {\n return false;\n }\n };\n var normalizeNbspInMiddleOfTextNode = function (node) {\n var text = node.data;\n var newText = normalizeNbspMiddle(text);\n if (newText !== text) {\n node.data = newText;\n return true;\n } else {\n return false;\n }\n };\n var normalizeNbspAtEnd = function (root, node) {\n var text = node.data;\n var lastPos = CaretPosition(node, text.length - 1);\n if (isNbspAt(text, text.length - 1) && !needsToBeNbsp(root, lastPos)) {\n node.data = text.slice(0, -1) + ' ';\n return true;\n } else {\n return false;\n }\n };\n var normalizeNbsps = function (root, pos) {\n return Option.some(pos).filter(hasNbsp).bind(function (pos) {\n var container = pos.container();\n var normalized = normalizeNbspAtStart(root, container) || normalizeNbspInMiddleOfTextNode(container) || normalizeNbspAtEnd(root, container);\n return normalized ? Option.some(pos) : Option.none();\n });\n };\n var normalizeNbspsInEditor = function (editor) {\n var root = Element.fromDom(editor.getBody());\n if (editor.selection.isCollapsed()) {\n normalizeNbsps(root, CaretPosition.fromRangeStart(editor.selection.getRng())).each(function (pos) {\n editor.selection.setRng(pos.toRange());\n });\n }\n };\n\n var locationToCaretPosition = function (root) {\n return function (location) {\n return location.fold(function (element) {\n return CaretFinder.prevPosition(root.dom(), CaretPosition$1.before(element));\n }, function (element) {\n return CaretFinder.firstPositionIn(element);\n }, function (element) {\n return CaretFinder.lastPositionIn(element);\n }, function (element) {\n return CaretFinder.nextPosition(root.dom(), CaretPosition$1.after(element));\n });\n };\n };\n var insertInlineBoundarySpaceOrNbsp = function (root, pos) {\n return function (checkPos) {\n return needsToHaveNbsp(root, checkPos) ? insertNbspAtPosition(pos) : insertSpaceAtPosition(pos);\n };\n };\n var setSelection$1 = function (editor) {\n return function (pos) {\n editor.selection.setRng(pos.toRange());\n editor.nodeChanged();\n return true;\n };\n };\n var insertSpaceOrNbspAtSelection = function (editor) {\n var pos = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n var root = Element.fromDom(editor.getBody());\n if (editor.selection.isCollapsed()) {\n var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);\n var caretPosition = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n return BoundaryLocation.readLocation(isInlineTarget, editor.getBody(), caretPosition).bind(locationToCaretPosition(root)).bind(insertInlineBoundarySpaceOrNbsp(root, pos)).exists(setSelection$1(editor));\n } else {\n return false;\n }\n };\n\n var executeKeydownOverride$2 = function (editor, evt) {\n MatchKeys.execute([{\n keyCode: VK.SPACEBAR,\n action: MatchKeys.action(insertSpaceOrNbspAtSelection, editor)\n }], evt).each(function (_) {\n evt.preventDefault();\n });\n };\n var setup$a = function (editor) {\n editor.on('keydown', function (evt) {\n if (evt.isDefaultPrevented() === false) {\n executeKeydownOverride$2(editor, evt);\n }\n });\n };\n var SpaceKey = { setup: setup$a };\n\n var findBlockCaretContainer = function (editor) {\n return descendant(Element.fromDom(editor.getBody()), '*[data-mce-caret]').fold(constant(null), function (elm) {\n return elm.dom();\n });\n };\n var removeIeControlRect = function (editor) {\n editor.selection.setRng(editor.selection.getRng());\n };\n var showBlockCaretContainer = function (editor, blockCaretContainer) {\n if (blockCaretContainer.hasAttribute('data-mce-caret')) {\n showCaretContainerBlock(blockCaretContainer);\n removeIeControlRect(editor);\n editor.selection.scrollIntoView(blockCaretContainer);\n }\n };\n var handleBlockContainer = function (editor, e) {\n var blockCaretContainer = findBlockCaretContainer(editor);\n if (!blockCaretContainer) {\n return;\n }\n if (e.type === 'compositionstart') {\n e.preventDefault();\n e.stopPropagation();\n showBlockCaretContainer(editor, blockCaretContainer);\n return;\n }\n if (hasContent(blockCaretContainer)) {\n showBlockCaretContainer(editor, blockCaretContainer);\n editor.undoManager.add();\n }\n };\n var setup$b = function (editor) {\n editor.on('keyup compositionstart', curry(handleBlockContainer, editor));\n };\n var CaretContainerInput = { setup: setup$b };\n\n var browser$4 = PlatformDetection$1.detect().browser;\n var setupIeInput = function (editor) {\n var keypressThrotter = first(function () {\n if (!editor.composing) {\n normalizeNbspsInEditor(editor);\n }\n }, 0);\n if (browser$4.isIE()) {\n editor.on('keypress', function (e) {\n keypressThrotter.throttle();\n });\n editor.on('remove', function (e) {\n keypressThrotter.cancel();\n });\n }\n };\n var setup$c = function (editor) {\n setupIeInput(editor);\n editor.on('input', function (e) {\n if (e.isComposing === false) {\n normalizeNbspsInEditor(editor);\n }\n });\n };\n\n var executeKeydownOverride$3 = function (editor, evt) {\n MatchKeys.execute([\n {\n keyCode: VK.END,\n action: moveToLineEndPoint(editor, true)\n },\n {\n keyCode: VK.HOME,\n action: moveToLineEndPoint(editor, false)\n }\n ], evt).each(function (_) {\n evt.preventDefault();\n });\n };\n var setup$d = function (editor) {\n editor.on('keydown', function (evt) {\n if (evt.isDefaultPrevented() === false) {\n executeKeydownOverride$3(editor, evt);\n }\n });\n };\n var HomeEndKeys = { setup: setup$d };\n\n var setup$e = function (editor) {\n var caret = BoundarySelection.setupSelectedState(editor);\n CaretContainerInput.setup(editor);\n ArrowKeys.setup(editor, caret);\n DeleteBackspaceKeys.setup(editor, caret);\n EnterKey.setup(editor);\n SpaceKey.setup(editor);\n setup$c(editor);\n HomeEndKeys.setup(editor);\n };\n var KeyboardOverrides = { setup: setup$e };\n\n function Quirks (editor) {\n var each = Tools.each;\n var BACKSPACE = VK.BACKSPACE, DELETE = VK.DELETE, dom = editor.dom, selection = editor.selection, settings = editor.settings, parser = editor.parser;\n var isGecko = Env.gecko, isIE = Env.ie, isWebKit = Env.webkit;\n var mceInternalUrlPrefix = 'data:text/mce-internal,';\n var mceInternalDataType = isIE ? 'Text' : 'URL';\n var setEditorCommandState = function (cmd, state) {\n try {\n editor.getDoc().execCommand(cmd, false, state);\n } catch (ex) {\n }\n };\n var isDefaultPrevented = function (e) {\n return e.isDefaultPrevented();\n };\n var setMceInternalContent = function (e) {\n var selectionHtml, internalContent;\n if (e.dataTransfer) {\n if (editor.selection.isCollapsed() && e.target.tagName === 'IMG') {\n selection.select(e.target);\n }\n selectionHtml = editor.selection.getContent();\n if (selectionHtml.length > 0) {\n internalContent = mceInternalUrlPrefix + escape(editor.id) + ',' + escape(selectionHtml);\n e.dataTransfer.setData(mceInternalDataType, internalContent);\n }\n }\n };\n var getMceInternalContent = function (e) {\n var internalContent;\n if (e.dataTransfer) {\n internalContent = e.dataTransfer.getData(mceInternalDataType);\n if (internalContent && internalContent.indexOf(mceInternalUrlPrefix) >= 0) {\n internalContent = internalContent.substr(mceInternalUrlPrefix.length).split(',');\n return {\n id: unescape(internalContent[0]),\n html: unescape(internalContent[1])\n };\n }\n }\n return null;\n };\n var insertClipboardContents = function (content, internal) {\n if (editor.queryCommandSupported('mceInsertClipboardContent')) {\n editor.execCommand('mceInsertClipboardContent', false, {\n content: content,\n internal: internal\n });\n } else {\n editor.execCommand('mceInsertContent', false, content);\n }\n };\n var emptyEditorWhenDeleting = function () {\n var serializeRng = function (rng) {\n var body = dom.create('body');\n var contents = rng.cloneContents();\n body.appendChild(contents);\n return selection.serializer.serialize(body, { format: 'html' });\n };\n var allContentsSelected = function (rng) {\n var selection = serializeRng(rng);\n var allRng = dom.createRng();\n allRng.selectNode(editor.getBody());\n var allSelection = serializeRng(allRng);\n return selection === allSelection;\n };\n editor.on('keydown', function (e) {\n var keyCode = e.keyCode;\n var isCollapsed, body;\n if (!isDefaultPrevented(e) && (keyCode === DELETE || keyCode === BACKSPACE)) {\n isCollapsed = editor.selection.isCollapsed();\n body = editor.getBody();\n if (isCollapsed && !dom.isEmpty(body)) {\n return;\n }\n if (!isCollapsed && !allContentsSelected(editor.selection.getRng())) {\n return;\n }\n e.preventDefault();\n editor.setContent('');\n if (body.firstChild && dom.isBlock(body.firstChild)) {\n editor.selection.setCursorLocation(body.firstChild, 0);\n } else {\n editor.selection.setCursorLocation(body, 0);\n }\n editor.nodeChanged();\n }\n });\n };\n var selectAll = function () {\n editor.shortcuts.add('meta+a', null, 'SelectAll');\n };\n var inputMethodFocus = function () {\n if (!editor.settings.content_editable) {\n dom.bind(editor.getDoc(), 'mousedown mouseup', function (e) {\n var rng;\n if (e.target === editor.getDoc().documentElement) {\n rng = selection.getRng();\n editor.getBody().focus();\n if (e.type === 'mousedown') {\n if (isCaretContainer(rng.startContainer)) {\n return;\n }\n selection.placeCaretAt(e.clientX, e.clientY);\n } else {\n selection.setRng(rng);\n }\n }\n });\n }\n };\n var removeHrOnBackspace = function () {\n editor.on('keydown', function (e) {\n if (!isDefaultPrevented(e) && e.keyCode === BACKSPACE) {\n if (!editor.getBody().getElementsByTagName('hr').length) {\n return;\n }\n if (selection.isCollapsed() && selection.getRng().startOffset === 0) {\n var node = selection.getNode();\n var previousSibling = node.previousSibling;\n if (node.nodeName === 'HR') {\n dom.remove(node);\n e.preventDefault();\n return;\n }\n if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === 'hr') {\n dom.remove(previousSibling);\n e.preventDefault();\n }\n }\n }\n });\n };\n var focusBody = function () {\n if (!domGlobals.Range.prototype.getClientRects) {\n editor.on('mousedown', function (e) {\n if (!isDefaultPrevented(e) && e.target.nodeName === 'HTML') {\n var body_1 = editor.getBody();\n body_1.blur();\n Delay.setEditorTimeout(editor, function () {\n body_1.focus();\n });\n }\n });\n }\n };\n var selectControlElements = function () {\n editor.on('click', function (e) {\n var target = e.target;\n if (/^(IMG|HR)$/.test(target.nodeName) && dom.getContentEditableParent(target) !== 'false') {\n e.preventDefault();\n editor.selection.select(target);\n editor.nodeChanged();\n }\n if (target.nodeName === 'A' && dom.hasClass(target, 'mce-item-anchor')) {\n e.preventDefault();\n selection.select(target);\n }\n });\n };\n var removeStylesWhenDeletingAcrossBlockElements = function () {\n var getAttributeApplyFunction = function () {\n var template = dom.getAttribs(selection.getStart().cloneNode(false));\n return function () {\n var target = selection.getStart();\n if (target !== editor.getBody()) {\n dom.setAttrib(target, 'style', null);\n each(template, function (attr) {\n target.setAttributeNode(attr.cloneNode(true));\n });\n }\n };\n };\n var isSelectionAcrossElements = function () {\n return !selection.isCollapsed() && dom.getParent(selection.getStart(), dom.isBlock) !== dom.getParent(selection.getEnd(), dom.isBlock);\n };\n editor.on('keypress', function (e) {\n var applyAttributes;\n if (!isDefaultPrevented(e) && (e.keyCode === 8 || e.keyCode === 46) && isSelectionAcrossElements()) {\n applyAttributes = getAttributeApplyFunction();\n editor.getDoc().execCommand('delete', false, null);\n applyAttributes();\n e.preventDefault();\n return false;\n }\n });\n dom.bind(editor.getDoc(), 'cut', function (e) {\n var applyAttributes;\n if (!isDefaultPrevented(e) && isSelectionAcrossElements()) {\n applyAttributes = getAttributeApplyFunction();\n Delay.setEditorTimeout(editor, function () {\n applyAttributes();\n });\n }\n });\n };\n var disableBackspaceIntoATable = function () {\n editor.on('keydown', function (e) {\n if (!isDefaultPrevented(e) && e.keyCode === BACKSPACE) {\n if (selection.isCollapsed() && selection.getRng().startOffset === 0) {\n var previousSibling = selection.getNode().previousSibling;\n if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === 'table') {\n e.preventDefault();\n return false;\n }\n }\n }\n });\n };\n var removeBlockQuoteOnBackSpace = function () {\n editor.on('keydown', function (e) {\n var rng, container, offset, root, parent;\n if (isDefaultPrevented(e) || e.keyCode !== VK.BACKSPACE) {\n return;\n }\n rng = selection.getRng();\n container = rng.startContainer;\n offset = rng.startOffset;\n root = dom.getRoot();\n parent = container;\n if (!rng.collapsed || offset !== 0) {\n return;\n }\n while (parent && parent.parentNode && parent.parentNode.firstChild === parent && parent.parentNode !== root) {\n parent = parent.parentNode;\n }\n if (parent.tagName === 'BLOCKQUOTE') {\n editor.formatter.toggle('blockquote', null, parent);\n rng = dom.createRng();\n rng.setStart(container, 0);\n rng.setEnd(container, 0);\n selection.setRng(rng);\n }\n });\n };\n var setGeckoEditingOptions = function () {\n var setOpts = function () {\n setEditorCommandState('StyleWithCSS', false);\n setEditorCommandState('enableInlineTableEditing', false);\n if (!settings.object_resizing) {\n setEditorCommandState('enableObjectResizing', false);\n }\n };\n if (!settings.readonly) {\n editor.on('BeforeExecCommand MouseDown', setOpts);\n }\n };\n var addBrAfterLastLinks = function () {\n var fixLinks = function () {\n each(dom.select('a'), function (node) {\n var parentNode = node.parentNode;\n var root = dom.getRoot();\n if (parentNode.lastChild === node) {\n while (parentNode && !dom.isBlock(parentNode)) {\n if (parentNode.parentNode.lastChild !== parentNode || parentNode === root) {\n return;\n }\n parentNode = parentNode.parentNode;\n }\n dom.add(parentNode, 'br', { 'data-mce-bogus': 1 });\n }\n });\n };\n editor.on('SetContent ExecCommand', function (e) {\n if (e.type === 'setcontent' || e.command === 'mceInsertLink') {\n fixLinks();\n }\n });\n };\n var setDefaultBlockType = function () {\n if (settings.forced_root_block) {\n editor.on('init', function () {\n setEditorCommandState('DefaultParagraphSeparator', settings.forced_root_block);\n });\n }\n };\n var normalizeSelection = function () {\n editor.on('keyup focusin mouseup', function (e) {\n if (!VK.modifierPressed(e)) {\n selection.normalize();\n }\n }, true);\n };\n var showBrokenImageIcon = function () {\n editor.contentStyles.push('img:-moz-broken {' + '-moz-force-broken-image-icon:1;' + 'min-width:24px;' + 'min-height:24px' + '}');\n };\n var restoreFocusOnKeyDown = function () {\n if (!editor.inline) {\n editor.on('keydown', function () {\n if (domGlobals.document.activeElement === domGlobals.document.body) {\n editor.getWin().focus();\n }\n });\n }\n };\n var bodyHeight = function () {\n if (!editor.inline) {\n editor.contentStyles.push('body {min-height: 150px}');\n editor.on('click', function (e) {\n var rng;\n if (e.target.nodeName === 'HTML') {\n if (Env.ie > 11) {\n editor.getBody().focus();\n return;\n }\n rng = editor.selection.getRng();\n editor.getBody().focus();\n editor.selection.setRng(rng);\n editor.selection.normalize();\n editor.nodeChanged();\n }\n });\n }\n };\n var blockCmdArrowNavigation = function () {\n if (Env.mac) {\n editor.on('keydown', function (e) {\n if (VK.metaKeyPressed(e) && !e.shiftKey && (e.keyCode === 37 || e.keyCode === 39)) {\n e.preventDefault();\n editor.selection.getSel().modify('move', e.keyCode === 37 ? 'backward' : 'forward', 'lineboundary');\n }\n });\n }\n };\n var disableAutoUrlDetect = function () {\n setEditorCommandState('AutoUrlDetect', false);\n };\n var tapLinksAndImages = function () {\n editor.on('click', function (e) {\n var elm = e.target;\n do {\n if (elm.tagName === 'A') {\n e.preventDefault();\n return;\n }\n } while (elm = elm.parentNode);\n });\n editor.contentStyles.push('.mce-content-body {-webkit-touch-callout: none}');\n };\n var blockFormSubmitInsideEditor = function () {\n editor.on('init', function () {\n editor.dom.bind(editor.getBody(), 'submit', function (e) {\n e.preventDefault();\n });\n });\n };\n var removeAppleInterchangeBrs = function () {\n parser.addNodeFilter('br', function (nodes) {\n var i = nodes.length;\n while (i--) {\n if (nodes[i].attr('class') === 'Apple-interchange-newline') {\n nodes[i].remove();\n }\n }\n });\n };\n var ieInternalDragAndDrop = function () {\n editor.on('dragstart', function (e) {\n setMceInternalContent(e);\n });\n editor.on('drop', function (e) {\n if (!isDefaultPrevented(e)) {\n var internalContent = getMceInternalContent(e);\n if (internalContent && internalContent.id !== editor.id) {\n e.preventDefault();\n var rng = CaretRangeFromPoint.fromPoint(e.x, e.y, editor.getDoc());\n selection.setRng(rng);\n insertClipboardContents(internalContent.html, true);\n }\n }\n });\n };\n var refreshContentEditable = function () {\n };\n var isHidden = function () {\n var sel;\n if (!isGecko || editor.removed) {\n return 0;\n }\n sel = editor.selection.getSel();\n return !sel || !sel.rangeCount || sel.rangeCount === 0;\n };\n removeBlockQuoteOnBackSpace();\n emptyEditorWhenDeleting();\n if (!Env.windowsPhone) {\n normalizeSelection();\n }\n if (isWebKit) {\n inputMethodFocus();\n selectControlElements();\n setDefaultBlockType();\n blockFormSubmitInsideEditor();\n disableBackspaceIntoATable();\n removeAppleInterchangeBrs();\n if (Env.iOS) {\n restoreFocusOnKeyDown();\n bodyHeight();\n tapLinksAndImages();\n } else {\n selectAll();\n }\n }\n if (Env.ie >= 11) {\n bodyHeight();\n disableBackspaceIntoATable();\n }\n if (Env.ie) {\n selectAll();\n disableAutoUrlDetect();\n ieInternalDragAndDrop();\n }\n if (isGecko) {\n removeHrOnBackspace();\n focusBody();\n removeStylesWhenDeletingAcrossBlockElements();\n setGeckoEditingOptions();\n addBrAfterLastLinks();\n showBrokenImageIcon();\n blockCmdArrowNavigation();\n disableBackspaceIntoATable();\n }\n return {\n refreshContentEditable: refreshContentEditable,\n isHidden: isHidden\n };\n }\n\n var isTextBlockNode = function (node) {\n return NodeType.isElement(node) && isTextBlock(Element.fromDom(node));\n };\n var normalizeSelection$1 = function (editor) {\n var rng = editor.selection.getRng();\n var startPos = CaretPosition.fromRangeStart(rng);\n var endPos = CaretPosition.fromRangeEnd(rng);\n if (CaretPosition.isElementPosition(startPos)) {\n var container = startPos.container();\n if (isTextBlockNode(container)) {\n CaretFinder.firstPositionIn(container).each(function (pos) {\n return rng.setStart(pos.container(), pos.offset());\n });\n }\n }\n if (CaretPosition.isElementPosition(endPos)) {\n var container = startPos.container();\n if (isTextBlockNode(container)) {\n CaretFinder.lastPositionIn(container).each(function (pos) {\n return rng.setEnd(pos.container(), pos.offset());\n });\n }\n }\n editor.selection.setRng(RangeNormalizer.normalize(rng));\n };\n var setup$f = function (editor) {\n editor.on('click', function (e) {\n if (e.detail >= 3) {\n normalizeSelection$1(editor);\n }\n });\n };\n\n var preventSummaryToggle = function (editor) {\n editor.on('click', function (e) {\n if (editor.dom.getParent(e.target, 'details')) {\n e.preventDefault();\n }\n });\n };\n var filterDetails = function (editor) {\n editor.parser.addNodeFilter('details', function (elms) {\n each(elms, function (details) {\n details.attr('data-mce-open', details.attr('open'));\n details.attr('open', 'open');\n });\n });\n editor.serializer.addNodeFilter('details', function (elms) {\n each(elms, function (details) {\n var open = details.attr('data-mce-open');\n details.attr('open', isString(open) ? open : null);\n details.attr('data-mce-open', null);\n });\n });\n };\n var setup$g = function (editor) {\n preventSummaryToggle(editor);\n filterDetails(editor);\n };\n\n var DOM$2 = DOMUtils$1.DOM;\n var appendStyle = function (editor, text) {\n var head = Element.fromDom(editor.getDoc().head);\n var tag = Element.fromTag('style');\n set(tag, 'type', 'text/css');\n append(tag, Element.fromText(text));\n append(head, tag);\n };\n var createParser = function (editor) {\n var parser = DomParser(editor.settings, editor.schema);\n parser.addAttributeFilter('src,href,style,tabindex', function (nodes, name) {\n var i = nodes.length, node;\n var dom = editor.dom;\n var value, internalName;\n while (i--) {\n node = nodes[i];\n value = node.attr(name);\n internalName = 'data-mce-' + name;\n if (!node.attributes.map[internalName]) {\n if (value.indexOf('data:') === 0 || value.indexOf('blob:') === 0) {\n continue;\n }\n if (name === 'style') {\n value = dom.serializeStyle(dom.parseStyle(value), node.name);\n if (!value.length) {\n value = null;\n }\n node.attr(internalName, value);\n node.attr(name, value);\n } else if (name === 'tabindex') {\n node.attr(internalName, value);\n node.attr(name, null);\n } else {\n node.attr(internalName, editor.convertURL(value, name, node.name));\n }\n }\n }\n });\n parser.addNodeFilter('script', function (nodes) {\n var i = nodes.length, node, type;\n while (i--) {\n node = nodes[i];\n type = node.attr('type') || 'no/type';\n if (type.indexOf('mce-') !== 0) {\n node.attr('type', 'mce-' + type);\n }\n }\n });\n parser.addNodeFilter('#cdata', function (nodes) {\n var i = nodes.length, node;\n while (i--) {\n node = nodes[i];\n node.type = 8;\n node.name = '#comment';\n node.value = '[CDATA[' + node.value + ']]';\n }\n });\n parser.addNodeFilter('p,h1,h2,h3,h4,h5,h6,div', function (nodes) {\n var i = nodes.length, node;\n var nonEmptyElements = editor.schema.getNonEmptyElements();\n while (i--) {\n node = nodes[i];\n if (node.isEmpty(nonEmptyElements) && node.getAll('br').length === 0) {\n node.append(new Node$1('br', 1)).shortEnded = true;\n }\n }\n });\n return parser;\n };\n var autoFocus = function (editor) {\n if (editor.settings.auto_focus) {\n Delay.setEditorTimeout(editor, function () {\n var focusEditor;\n if (editor.settings.auto_focus === true) {\n focusEditor = editor;\n } else {\n focusEditor = editor.editorManager.get(editor.settings.auto_focus);\n }\n if (!focusEditor.destroyed) {\n focusEditor.focus();\n }\n }, 100);\n }\n };\n var initEditor = function (editor) {\n editor.bindPendingEventDelegates();\n editor.initialized = true;\n editor.fire('init');\n editor.focus(true);\n editor.nodeChanged({ initial: true });\n editor.execCallback('init_instance_callback', editor);\n autoFocus(editor);\n };\n var getStyleSheetLoader = function (editor) {\n return editor.inline ? DOM$2.styleSheetLoader : editor.dom.styleSheetLoader;\n };\n var initContentBody = function (editor, skipWrite) {\n var settings = editor.settings;\n var targetElm = editor.getElement();\n var doc = editor.getDoc(), body, contentCssText;\n if (!settings.inline) {\n editor.getElement().style.visibility = editor.orgVisibility;\n }\n if (!skipWrite && !settings.content_editable) {\n doc.open();\n doc.write(editor.iframeHTML);\n doc.close();\n }\n if (settings.content_editable) {\n editor.on('remove', function () {\n var bodyEl = this.getBody();\n DOM$2.removeClass(bodyEl, 'mce-content-body');\n DOM$2.removeClass(bodyEl, 'mce-edit-focus');\n DOM$2.setAttrib(bodyEl, 'contentEditable', null);\n });\n DOM$2.addClass(targetElm, 'mce-content-body');\n editor.contentDocument = doc = settings.content_document || domGlobals.document;\n editor.contentWindow = settings.content_window || domGlobals.window;\n editor.bodyElement = targetElm;\n settings.content_document = settings.content_window = null;\n settings.root_name = targetElm.nodeName.toLowerCase();\n }\n body = editor.getBody();\n body.disabled = true;\n editor.readonly = settings.readonly;\n if (!editor.readonly) {\n if (editor.inline && DOM$2.getStyle(body, 'position', true) === 'static') {\n body.style.position = 'relative';\n }\n body.contentEditable = editor.getParam('content_editable_state', true);\n }\n body.disabled = false;\n editor.editorUpload = EditorUpload(editor);\n editor.schema = Schema(settings);\n editor.dom = DOMUtils$1(doc, {\n keep_values: true,\n url_converter: editor.convertURL,\n url_converter_scope: editor,\n hex_colors: settings.force_hex_style_colors,\n class_filter: settings.class_filter,\n update_styles: true,\n root_element: editor.inline ? editor.getBody() : null,\n collect: settings.content_editable,\n schema: editor.schema,\n contentCssCors: Settings.shouldUseContentCssCors(editor),\n onSetAttrib: function (e) {\n editor.fire('SetAttrib', e);\n }\n });\n editor.parser = createParser(editor);\n editor.serializer = DomSerializer$1(settings, editor);\n editor.selection = Selection$1(editor.dom, editor.getWin(), editor.serializer, editor);\n editor.annotator = Annotator(editor);\n editor.formatter = Formatter(editor);\n editor.undoManager = UndoManager(editor);\n editor._nodeChangeDispatcher = new NodeChange(editor);\n editor._selectionOverrides = SelectionOverrides(editor);\n setup$g(editor);\n setup$f(editor);\n KeyboardOverrides.setup(editor);\n ForceBlocks.setup(editor);\n editor.fire('PreInit');\n if (!settings.browser_spellcheck && !settings.gecko_spellcheck) {\n doc.body.spellcheck = false;\n DOM$2.setAttrib(body, 'spellcheck', 'false');\n }\n editor.quirks = Quirks(editor);\n editor.fire('PostRender');\n if (settings.directionality) {\n body.dir = settings.directionality;\n }\n if (settings.nowrap) {\n body.style.whiteSpace = 'nowrap';\n }\n if (settings.protect) {\n editor.on('BeforeSetContent', function (e) {\n Tools.each(settings.protect, function (pattern) {\n e.content = e.content.replace(pattern, function (str) {\n return '';\n });\n });\n });\n }\n editor.on('SetContent', function () {\n editor.addVisual(editor.getBody());\n });\n editor.load({\n initial: true,\n format: 'html'\n });\n editor.startContent = editor.getContent({ format: 'raw' });\n editor.on('compositionstart compositionend', function (e) {\n editor.composing = e.type === 'compositionstart';\n });\n if (editor.contentStyles.length > 0) {\n contentCssText = '';\n Tools.each(editor.contentStyles, function (style) {\n contentCssText += style + '\\r\\n';\n });\n editor.dom.addStyle(contentCssText);\n }\n getStyleSheetLoader(editor).loadAll(editor.contentCSS, function (_) {\n initEditor(editor);\n }, function (urls) {\n initEditor(editor);\n });\n if (settings.content_style) {\n appendStyle(editor, settings.content_style);\n }\n };\n var InitContentBody = { initContentBody: initContentBody };\n\n var DOM$3 = DOMUtils$1.DOM;\n var relaxDomain = function (editor, ifr) {\n if (domGlobals.document.domain !== domGlobals.window.location.hostname && Env.ie && Env.ie < 12) {\n var bodyUuid = Uuid.uuid('mce');\n editor[bodyUuid] = function () {\n InitContentBody.initContentBody(editor);\n };\n var domainRelaxUrl = 'javascript:(function(){' + 'document.open();document.domain=\"' + domGlobals.document.domain + '\";' + 'var ed = window.parent.tinymce.get(\"' + editor.id + '\");document.write(ed.iframeHTML);' + 'document.close();ed.' + bodyUuid + '(true);})()';\n DOM$3.setAttrib(ifr, 'src', domainRelaxUrl);\n return true;\n }\n return false;\n };\n var normalizeHeight = function (height) {\n var normalizedHeight = typeof height === 'number' ? height + 'px' : height;\n return normalizedHeight ? normalizedHeight : '';\n };\n var createIframeElement = function (id, title, height, customAttrs) {\n var iframe = Element.fromTag('iframe');\n setAll(iframe, customAttrs);\n setAll(iframe, {\n id: id + '_ifr',\n frameBorder: '0',\n allowTransparency: 'true',\n title: title\n });\n setAll$1(iframe, {\n width: '100%',\n height: normalizeHeight(height),\n display: 'block'\n });\n return iframe;\n };\n var getIframeHtml = function (editor) {\n var bodyId, bodyClass, iframeHTML;\n iframeHTML = Settings.getDocType(editor) + '';\n if (Settings.getDocumentBaseUrl(editor) !== editor.documentBaseUrl) {\n iframeHTML += '';\n }\n iframeHTML += '';\n bodyId = Settings.getBodyId(editor);\n bodyClass = Settings.getBodyClass(editor);\n if (Settings.getContentSecurityPolicy(editor)) {\n iframeHTML += '';\n }\n iframeHTML += '
';\n return iframeHTML;\n };\n var createIframe = function (editor, o) {\n var title = editor.editorManager.translate('Rich Text Area. Press ALT-F9 for menu. ' + 'Press ALT-F10 for toolbar. Press ALT-0 for help');\n var ifr = createIframeElement(editor.id, title, o.height, Settings.getIframeAttrs(editor)).dom();\n ifr.onload = function () {\n ifr.onload = null;\n editor.fire('load');\n };\n var isDomainRelaxed = relaxDomain(editor, ifr);\n editor.contentAreaContainer = o.iframeContainer;\n editor.iframeElement = ifr;\n editor.iframeHTML = getIframeHtml(editor);\n DOM$3.add(o.iframeContainer, ifr);\n return isDomainRelaxed;\n };\n var init$1 = function (editor, boxInfo) {\n var isDomainRelaxed = createIframe(editor, boxInfo);\n if (boxInfo.editorContainer) {\n DOM$3.get(boxInfo.editorContainer).style.display = editor.orgDisplay;\n editor.hidden = DOM$3.isHidden(boxInfo.editorContainer);\n }\n editor.getElement().style.display = 'none';\n DOM$3.setAttrib(editor.id, 'aria-hidden', 'true');\n if (!isDomainRelaxed) {\n InitContentBody.initContentBody(editor);\n }\n };\n var InitIframe = { init: init$1 };\n\n var DOM$4 = DOMUtils$1.DOM;\n var initPlugin = function (editor, initializedPlugins, plugin) {\n var Plugin = PluginManager$1.get(plugin);\n var pluginUrl = PluginManager$1.urls[plugin] || editor.documentBaseUrl.replace(/\\/$/, '');\n plugin = Tools.trim(plugin);\n if (Plugin && Tools.inArray(initializedPlugins, plugin) === -1) {\n Tools.each(PluginManager$1.dependencies(plugin), function (dep) {\n initPlugin(editor, initializedPlugins, dep);\n });\n if (editor.plugins[plugin]) {\n return;\n }\n try {\n var pluginInstance = new Plugin(editor, pluginUrl, editor.$);\n editor.plugins[plugin] = pluginInstance;\n if (pluginInstance.init) {\n pluginInstance.init(editor, pluginUrl);\n initializedPlugins.push(plugin);\n }\n } catch (e) {\n ErrorReporter.pluginInitError(editor, plugin, e);\n }\n }\n };\n var trimLegacyPrefix = function (name) {\n return name.replace(/^\\-/, '');\n };\n var initPlugins = function (editor) {\n var initializedPlugins = [];\n Tools.each(editor.settings.plugins.split(/[ ,]/), function (name) {\n initPlugin(editor, initializedPlugins, trimLegacyPrefix(name));\n });\n };\n var initTheme = function (editor) {\n var Theme;\n var theme = editor.settings.theme;\n if (isString(theme)) {\n editor.settings.theme = trimLegacyPrefix(theme);\n Theme = ThemeManager.get(theme);\n editor.theme = new Theme(editor, ThemeManager.urls[theme]);\n if (editor.theme.init) {\n editor.theme.init(editor, ThemeManager.urls[theme] || editor.documentBaseUrl.replace(/\\/$/, ''), editor.$);\n }\n } else {\n editor.theme = {};\n }\n };\n var renderFromLoadedTheme = function (editor) {\n var w, h, minHeight, re, info;\n var settings = editor.settings;\n var elm = editor.getElement();\n w = settings.width || DOM$4.getStyle(elm, 'width') || '100%';\n h = settings.height || DOM$4.getStyle(elm, 'height') || elm.offsetHeight;\n minHeight = settings.min_height || 100;\n re = /^[0-9\\.]+(|px)$/i;\n if (re.test('' + w)) {\n w = Math.max(parseInt(w, 10), 100);\n }\n if (re.test('' + h)) {\n h = Math.max(parseInt(h, 10), minHeight);\n }\n info = editor.theme.renderUI({\n targetNode: elm,\n width: w,\n height: h,\n deltaWidth: settings.delta_width,\n deltaHeight: settings.delta_height\n });\n if (!settings.content_editable) {\n h = (info.iframeHeight || h) + (typeof h === 'number' ? info.deltaHeight || 0 : '');\n if (h < minHeight) {\n h = minHeight;\n }\n }\n info.height = h;\n return info;\n };\n var renderFromThemeFunc = function (editor) {\n var info;\n var elm = editor.getElement();\n info = editor.settings.theme(editor, elm);\n if (info.editorContainer.nodeType) {\n info.editorContainer.id = info.editorContainer.id || editor.id + '_parent';\n }\n if (info.iframeContainer && info.iframeContainer.nodeType) {\n info.iframeContainer.id = info.iframeContainer.id || editor.id + '_iframecontainer';\n }\n info.height = info.iframeHeight ? info.iframeHeight : elm.offsetHeight;\n return info;\n };\n var createThemeFalseResult = function (element) {\n return {\n editorContainer: element,\n iframeContainer: element\n };\n };\n var renderThemeFalseIframe = function (targetElement) {\n var iframeContainer = DOM$4.create('div');\n DOM$4.insertAfter(iframeContainer, targetElement);\n return createThemeFalseResult(iframeContainer);\n };\n var renderThemeFalse = function (editor) {\n var targetElement = editor.getElement();\n return editor.inline ? createThemeFalseResult(null) : renderThemeFalseIframe(targetElement);\n };\n var renderThemeUi = function (editor) {\n var settings = editor.settings, elm = editor.getElement();\n editor.orgDisplay = elm.style.display;\n if (isString(settings.theme)) {\n return renderFromLoadedTheme(editor);\n } else if (isFunction(settings.theme)) {\n return renderFromThemeFunc(editor);\n } else {\n return renderThemeFalse(editor);\n }\n };\n var init$2 = function (editor) {\n var settings = editor.settings;\n var elm = editor.getElement();\n var boxInfo;\n editor.rtl = settings.rtl_ui || editor.editorManager.i18n.rtl;\n editor.editorManager.i18n.setCode(settings.language);\n settings.aria_label = settings.aria_label || DOM$4.getAttrib(elm, 'aria-label', editor.getLang('aria.rich_text_area'));\n editor.fire('ScriptsLoaded');\n initTheme(editor);\n initPlugins(editor);\n boxInfo = renderThemeUi(editor);\n editor.editorContainer = boxInfo.editorContainer ? boxInfo.editorContainer : null;\n if (settings.content_css) {\n Tools.each(Tools.explode(settings.content_css), function (u) {\n editor.contentCSS.push(editor.documentBaseURI.toAbsolute(u));\n });\n }\n if (settings.content_editable) {\n return InitContentBody.initContentBody(editor);\n } else {\n return InitIframe.init(editor, boxInfo);\n }\n };\n var Init = { init: init$2 };\n\n var DOM$5 = DOMUtils$1.DOM;\n var hasSkipLoadPrefix = function (name) {\n return name.charAt(0) === '-';\n };\n var loadLanguage = function (scriptLoader, editor) {\n var settings = editor.settings;\n if (settings.language && settings.language !== 'en' && !settings.language_url) {\n settings.language_url = editor.editorManager.baseURL + '/langs/' + settings.language + '.js';\n }\n if (settings.language_url && !editor.editorManager.i18n.data[settings.language]) {\n scriptLoader.add(settings.language_url);\n }\n };\n var loadTheme = function (scriptLoader, editor, suffix, callback) {\n var settings = editor.settings, theme = settings.theme;\n if (isString(theme)) {\n if (!hasSkipLoadPrefix(theme) && !ThemeManager.urls.hasOwnProperty(theme)) {\n var themeUrl = settings.theme_url;\n if (themeUrl) {\n ThemeManager.load(theme, editor.documentBaseURI.toAbsolute(themeUrl));\n } else {\n ThemeManager.load(theme, 'themes/' + theme + '/theme' + suffix + '.js');\n }\n }\n scriptLoader.loadQueue(function () {\n ThemeManager.waitFor(theme, callback);\n });\n } else {\n callback();\n }\n };\n var loadPlugins = function (settings, suffix) {\n if (Tools.isArray(settings.plugins)) {\n settings.plugins = settings.plugins.join(' ');\n }\n Tools.each(settings.external_plugins, function (url, name) {\n PluginManager$1.load(name, url);\n settings.plugins += ' ' + name;\n });\n Tools.each(settings.plugins.split(/[ ,]/), function (plugin) {\n plugin = Tools.trim(plugin);\n if (plugin && !PluginManager$1.urls[plugin]) {\n if (hasSkipLoadPrefix(plugin)) {\n plugin = plugin.substr(1, plugin.length);\n var dependencies = PluginManager$1.dependencies(plugin);\n Tools.each(dependencies, function (dep) {\n var defaultSettings = {\n prefix: 'plugins/',\n resource: dep,\n suffix: '/plugin' + suffix + '.js'\n };\n dep = PluginManager$1.createUrl(defaultSettings, dep);\n PluginManager$1.load(dep.resource, dep);\n });\n } else {\n PluginManager$1.load(plugin, {\n prefix: 'plugins/',\n resource: plugin,\n suffix: '/plugin' + suffix + '.js'\n });\n }\n }\n });\n };\n var loadScripts = function (editor, suffix) {\n var scriptLoader = ScriptLoader.ScriptLoader;\n loadTheme(scriptLoader, editor, suffix, function () {\n loadLanguage(scriptLoader, editor);\n loadPlugins(editor.settings, suffix);\n scriptLoader.loadQueue(function () {\n if (!editor.removed) {\n Init.init(editor);\n }\n }, editor, function (urls) {\n ErrorReporter.pluginLoadError(editor, urls[0]);\n if (!editor.removed) {\n Init.init(editor);\n }\n });\n });\n };\n var render = function (editor) {\n var settings = editor.settings, id = editor.id;\n var readyHandler = function () {\n DOM$5.unbind(domGlobals.window, 'ready', readyHandler);\n editor.render();\n };\n if (!EventUtils.Event.domLoaded) {\n DOM$5.bind(domGlobals.window, 'ready', readyHandler);\n return;\n }\n if (!editor.getElement()) {\n return;\n }\n if (!Env.contentEditable) {\n return;\n }\n if (!settings.inline) {\n editor.orgVisibility = editor.getElement().style.visibility;\n editor.getElement().style.visibility = 'hidden';\n } else {\n editor.inline = true;\n }\n var form = editor.getElement().form || DOM$5.getParent(id, 'form');\n if (form) {\n editor.formElement = form;\n if (settings.hidden_input && !/TEXTAREA|INPUT/i.test(editor.getElement().nodeName)) {\n DOM$5.insertAfter(DOM$5.create('input', {\n type: 'hidden',\n name: id\n }), id);\n editor.hasHiddenInput = true;\n }\n editor.formEventDelegate = function (e) {\n editor.fire(e.type, e);\n };\n DOM$5.bind(form, 'submit reset', editor.formEventDelegate);\n editor.on('reset', function () {\n editor.setContent(editor.startContent, { format: 'raw' });\n });\n if (settings.submit_patch && !form.submit.nodeType && !form.submit.length && !form._mceOldSubmit) {\n form._mceOldSubmit = form.submit;\n form.submit = function () {\n editor.editorManager.triggerSave();\n editor.setDirty(false);\n return form._mceOldSubmit(form);\n };\n }\n }\n editor.windowManager = WindowManager(editor);\n editor.notificationManager = NotificationManager(editor);\n if (settings.encoding === 'xml') {\n editor.on('GetContent', function (e) {\n if (e.save) {\n e.content = DOM$5.encode(e.content);\n }\n });\n }\n if (settings.add_form_submit_trigger) {\n editor.on('submit', function () {\n if (editor.initialized) {\n editor.save();\n }\n });\n }\n if (settings.add_unload_trigger) {\n editor._beforeUnload = function () {\n if (editor.initialized && !editor.destroyed && !editor.isHidden()) {\n editor.save({\n format: 'raw',\n no_events: true,\n set_dirty: false\n });\n }\n };\n editor.editorManager.on('BeforeUnload', editor._beforeUnload);\n }\n editor.editorManager.add(editor);\n loadScripts(editor, editor.suffix);\n };\n var Render = { render: render };\n\n var add$4 = function (editor, name, settings) {\n var sidebars = editor.sidebars ? editor.sidebars : [];\n sidebars.push({\n name: name,\n settings: settings\n });\n editor.sidebars = sidebars;\n };\n var Sidebar = { add: add$4 };\n\n var each$k = Tools.each, trim$4 = Tools.trim;\n var queryParts = 'source protocol authority userInfo user password host port relative path directory file query anchor'.split(' ');\n var DEFAULT_PORTS = {\n ftp: 21,\n http: 80,\n https: 443,\n mailto: 25\n };\n var URI = function (url, settings) {\n var self = this;\n var baseUri, baseUrl;\n url = trim$4(url);\n settings = self.settings = settings || {};\n baseUri = settings.base_uri;\n if (/^([\\w\\-]+):([^\\/]{2})/i.test(url) || /^\\s*#/.test(url)) {\n self.source = url;\n return;\n }\n var isProtocolRelative = url.indexOf('//') === 0;\n if (url.indexOf('/') === 0 && !isProtocolRelative) {\n url = (baseUri ? baseUri.protocol || 'http' : 'http') + '://mce_host' + url;\n }\n if (!/^[\\w\\-]*:?\\/\\//.test(url)) {\n baseUrl = settings.base_uri ? settings.base_uri.path : new URI(domGlobals.document.location.href).directory;\n if (settings.base_uri.protocol == '') {\n url = '//mce_host' + self.toAbsPath(baseUrl, url);\n } else {\n url = /([^#?]*)([#?]?.*)/.exec(url);\n url = (baseUri && baseUri.protocol || 'http') + '://mce_host' + self.toAbsPath(baseUrl, url[1]) + url[2];\n }\n }\n url = url.replace(/@@/g, '(mce_at)');\n url = /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@\\/]*):?([^:@\\/]*))?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/.exec(url);\n each$k(queryParts, function (v, i) {\n var part = url[i];\n if (part) {\n part = part.replace(/\\(mce_at\\)/g, '@@');\n }\n self[v] = part;\n });\n if (baseUri) {\n if (!self.protocol) {\n self.protocol = baseUri.protocol;\n }\n if (!self.userInfo) {\n self.userInfo = baseUri.userInfo;\n }\n if (!self.port && self.host === 'mce_host') {\n self.port = baseUri.port;\n }\n if (!self.host || self.host === 'mce_host') {\n self.host = baseUri.host;\n }\n self.source = '';\n }\n if (isProtocolRelative) {\n self.protocol = '';\n }\n };\n URI.prototype = {\n setPath: function (path) {\n var self = this;\n path = /^(.*?)\\/?(\\w+)?$/.exec(path);\n self.path = path[0];\n self.directory = path[1];\n self.file = path[2];\n self.source = '';\n self.getURI();\n },\n toRelative: function (uri) {\n var self = this;\n var output;\n if (uri === './') {\n return uri;\n }\n uri = new URI(uri, { base_uri: self });\n if (uri.host !== 'mce_host' && self.host !== uri.host && uri.host || self.port !== uri.port || self.protocol !== uri.protocol && uri.protocol !== '') {\n return uri.getURI();\n }\n var tu = self.getURI(), uu = uri.getURI();\n if (tu === uu || tu.charAt(tu.length - 1) === '/' && tu.substr(0, tu.length - 1) === uu) {\n return tu;\n }\n output = self.toRelPath(self.path, uri.path);\n if (uri.query) {\n output += '?' + uri.query;\n }\n if (uri.anchor) {\n output += '#' + uri.anchor;\n }\n return output;\n },\n toAbsolute: function (uri, noHost) {\n uri = new URI(uri, { base_uri: this });\n return uri.getURI(noHost && this.isSameOrigin(uri));\n },\n isSameOrigin: function (uri) {\n if (this.host == uri.host && this.protocol == uri.protocol) {\n if (this.port == uri.port) {\n return true;\n }\n var defaultPort = DEFAULT_PORTS[this.protocol];\n if (defaultPort && (this.port || defaultPort) == (uri.port || defaultPort)) {\n return true;\n }\n }\n return false;\n },\n toRelPath: function (base, path) {\n var items, breakPoint = 0, out = '', i, l;\n base = base.substring(0, base.lastIndexOf('/'));\n base = base.split('/');\n items = path.split('/');\n if (base.length >= items.length) {\n for (i = 0, l = base.length; i < l; i++) {\n if (i >= items.length || base[i] !== items[i]) {\n breakPoint = i + 1;\n break;\n }\n }\n }\n if (base.length < items.length) {\n for (i = 0, l = items.length; i < l; i++) {\n if (i >= base.length || base[i] !== items[i]) {\n breakPoint = i + 1;\n break;\n }\n }\n }\n if (breakPoint === 1) {\n return path;\n }\n for (i = 0, l = base.length - (breakPoint - 1); i < l; i++) {\n out += '../';\n }\n for (i = breakPoint - 1, l = items.length; i < l; i++) {\n if (i !== breakPoint - 1) {\n out += '/' + items[i];\n } else {\n out += items[i];\n }\n }\n return out;\n },\n toAbsPath: function (base, path) {\n var i, nb = 0, o = [], tr, outPath;\n tr = /\\/$/.test(path) ? '/' : '';\n base = base.split('/');\n path = path.split('/');\n each$k(base, function (k) {\n if (k) {\n o.push(k);\n }\n });\n base = o;\n for (i = path.length - 1, o = []; i >= 0; i--) {\n if (path[i].length === 0 || path[i] === '.') {\n continue;\n }\n if (path[i] === '..') {\n nb++;\n continue;\n }\n if (nb > 0) {\n nb--;\n continue;\n }\n o.push(path[i]);\n }\n i = base.length - nb;\n if (i <= 0) {\n outPath = o.reverse().join('/');\n } else {\n outPath = base.slice(0, i).join('/') + '/' + o.reverse().join('/');\n }\n if (outPath.indexOf('/') !== 0) {\n outPath = '/' + outPath;\n }\n if (tr && outPath.lastIndexOf('/') !== outPath.length - 1) {\n outPath += tr;\n }\n return outPath;\n },\n getURI: function (noProtoHost) {\n var s;\n var self = this;\n if (!self.source || noProtoHost) {\n s = '';\n if (!noProtoHost) {\n if (self.protocol) {\n s += self.protocol + '://';\n } else {\n s += '//';\n }\n if (self.userInfo) {\n s += self.userInfo + '@';\n }\n if (self.host) {\n s += self.host;\n }\n if (self.port) {\n s += ':' + self.port;\n }\n }\n if (self.path) {\n s += self.path;\n }\n if (self.query) {\n s += '?' + self.query;\n }\n if (self.anchor) {\n s += '#' + self.anchor;\n }\n self.source = s;\n }\n return self.source;\n }\n };\n URI.parseDataUri = function (uri) {\n var type, matches;\n uri = decodeURIComponent(uri).split(',');\n matches = /data:([^;]+)/.exec(uri[0]);\n if (matches) {\n type = matches[1];\n }\n return {\n type: type,\n data: uri[1]\n };\n };\n URI.getDocumentBaseUrl = function (loc) {\n var baseUrl;\n if (loc.protocol.indexOf('http') !== 0 && loc.protocol !== 'file:') {\n baseUrl = loc.href;\n } else {\n baseUrl = loc.protocol + '//' + loc.host + loc.pathname;\n }\n if (/^[^:]+:\\/\\/\\/?[^\\/]+\\//.test(baseUrl)) {\n baseUrl = baseUrl.replace(/[\\?#].*$/, '').replace(/[\\/\\\\][^\\/]+$/, '');\n if (!/[\\/\\\\]$/.test(baseUrl)) {\n baseUrl += '/';\n }\n }\n return baseUrl;\n };\n\n var defaultFormat = 'html';\n var trimEmptyContents = function (editor, html) {\n var blockName = Settings.getForcedRootBlock(editor);\n var emptyRegExp = new RegExp('^(<' + blockName + '[^>]*>( | |\\\\s|\\xA0|
|)<\\\\/' + blockName + '>[\\r\\n]*|
[\\r\\n]*)$');\n return html.replace(emptyRegExp, '');\n };\n var getContentFromBody = function (editor, args, body) {\n var content;\n args.format = args.format ? args.format : defaultFormat;\n args.get = true;\n args.getInner = true;\n if (!args.no_events) {\n editor.fire('BeforeGetContent', args);\n }\n if (args.format === 'raw') {\n content = Tools.trim(TrimHtml.trimExternal(editor.serializer, body.innerHTML));\n } else if (args.format === 'text') {\n content = Zwsp.trim(body.innerText || body.textContent);\n } else if (args.format === 'tree') {\n return editor.serializer.serialize(body, args);\n } else {\n content = trimEmptyContents(editor, editor.serializer.serialize(body, args));\n }\n if (args.format !== 'text' && !isWsPreserveElement(Element.fromDom(body))) {\n args.content = Tools.trim(content);\n } else {\n args.content = content;\n }\n if (!args.no_events) {\n editor.fire('GetContent', args);\n }\n return args.content;\n };\n var getContent$1 = function (editor, args) {\n if (args === void 0) {\n args = {};\n }\n return Option.from(editor.getBody()).fold(constant(args.format === 'tree' ? new Node$1('body', 11) : ''), function (body) {\n return getContentFromBody(editor, args, body);\n });\n };\n\n var traverse = function (node, fn) {\n fn(node);\n if (node.firstChild) {\n traverse(node.firstChild, fn);\n }\n if (node.next) {\n traverse(node.next, fn);\n }\n };\n var findMatchingNodes = function (nodeFilters, attributeFilters, node) {\n var nodeMatches = {};\n var attrMatches = {};\n var matches = [];\n if (node.firstChild) {\n traverse(node.firstChild, function (node) {\n each(nodeFilters, function (filter) {\n if (filter.name === node.name) {\n if (nodeMatches[filter.name]) {\n nodeMatches[filter.name].nodes.push(node);\n } else {\n nodeMatches[filter.name] = {\n filter: filter,\n nodes: [node]\n };\n }\n }\n });\n each(attributeFilters, function (filter) {\n if (typeof node.attr(filter.name) === 'string') {\n if (attrMatches[filter.name]) {\n attrMatches[filter.name].nodes.push(node);\n } else {\n attrMatches[filter.name] = {\n filter: filter,\n nodes: [node]\n };\n }\n }\n });\n });\n }\n for (var name in nodeMatches) {\n if (nodeMatches.hasOwnProperty(name)) {\n matches.push(nodeMatches[name]);\n }\n }\n for (var name in attrMatches) {\n if (attrMatches.hasOwnProperty(name)) {\n matches.push(attrMatches[name]);\n }\n }\n return matches;\n };\n var filter$3 = function (nodeFilters, attributeFilters, node) {\n var matches = findMatchingNodes(nodeFilters, attributeFilters, node);\n each(matches, function (match) {\n each(match.filter.callbacks, function (callback) {\n callback(match.nodes, match.filter.name, {});\n });\n });\n };\n\n var defaultFormat$1 = 'html';\n var isTreeNode = function (content) {\n return content instanceof Node$1;\n };\n var moveSelection = function (editor) {\n if (EditorFocus.hasFocus(editor)) {\n CaretFinder.firstPositionIn(editor.getBody()).each(function (pos) {\n var node = pos.getNode();\n var caretPos = NodeType.isTable(node) ? CaretFinder.firstPositionIn(node).getOr(pos) : pos;\n editor.selection.setRng(caretPos.toRange());\n });\n }\n };\n var setEditorHtml = function (editor, html) {\n editor.dom.setHTML(editor.getBody(), html);\n moveSelection(editor);\n };\n var setContentString = function (editor, body, content, args) {\n var forcedRootBlockName, padd;\n if (content.length === 0 || /^\\s+$/.test(content)) {\n padd = '
';\n if (body.nodeName === 'TABLE') {\n content = '' + padd + '';\n } else if (/^(UL|OL)$/.test(body.nodeName)) {\n content = '
  • ' + padd + '
  • ';\n }\n forcedRootBlockName = Settings.getForcedRootBlock(editor);\n if (forcedRootBlockName && editor.schema.isValidChild(body.nodeName.toLowerCase(), forcedRootBlockName.toLowerCase())) {\n content = padd;\n content = editor.dom.createHTML(forcedRootBlockName, editor.settings.forced_root_block_attrs, content);\n } else if (!content) {\n content = '
    ';\n }\n setEditorHtml(editor, content);\n editor.fire('SetContent', args);\n } else {\n if (args.format !== 'raw') {\n content = HtmlSerializer({ validate: editor.validate }, editor.schema).serialize(editor.parser.parse(content, {\n isRootContent: true,\n insert: true\n }));\n }\n args.content = isWsPreserveElement(Element.fromDom(body)) ? content : Tools.trim(content);\n setEditorHtml(editor, args.content);\n if (!args.no_events) {\n editor.fire('SetContent', args);\n }\n }\n return args.content;\n };\n var setContentTree = function (editor, body, content, args) {\n filter$3(editor.parser.getNodeFilters(), editor.parser.getAttributeFilters(), content);\n var html = HtmlSerializer({ validate: editor.validate }, editor.schema).serialize(content);\n args.content = isWsPreserveElement(Element.fromDom(body)) ? html : Tools.trim(html);\n setEditorHtml(editor, args.content);\n if (!args.no_events) {\n editor.fire('SetContent', args);\n }\n return content;\n };\n var setContent$1 = function (editor, content, args) {\n if (args === void 0) {\n args = {};\n }\n args.format = args.format ? args.format : defaultFormat$1;\n args.set = true;\n args.content = isTreeNode(content) ? '' : content;\n if (!isTreeNode(content) && !args.no_events) {\n editor.fire('BeforeSetContent', args);\n content = args.content;\n }\n return Option.from(editor.getBody()).fold(constant(content), function (body) {\n return isTreeNode(content) ? setContentTree(editor, body, content, args) : setContentString(editor, body, content, args);\n });\n };\n\n var DOM$6 = DOMUtils$1.DOM;\n var restoreOriginalStyles = function (editor) {\n DOM$6.setStyle(editor.id, 'display', editor.orgDisplay);\n };\n var safeDestroy = function (x) {\n return Option.from(x).each(function (x) {\n return x.destroy();\n });\n };\n var clearDomReferences = function (editor) {\n editor.contentAreaContainer = editor.formElement = editor.container = editor.editorContainer = null;\n editor.bodyElement = editor.contentDocument = editor.contentWindow = null;\n editor.iframeElement = editor.targetElm = null;\n if (editor.selection) {\n editor.selection = editor.selection.win = editor.selection.dom = editor.selection.dom.doc = null;\n }\n };\n var restoreForm = function (editor) {\n var form = editor.formElement;\n if (form) {\n if (form._mceOldSubmit) {\n form.submit = form._mceOldSubmit;\n form._mceOldSubmit = null;\n }\n DOM$6.unbind(form, 'submit reset', editor.formEventDelegate);\n }\n };\n var remove$7 = function (editor) {\n if (!editor.removed) {\n var _selectionOverrides = editor._selectionOverrides, editorUpload = editor.editorUpload;\n var body = editor.getBody();\n var element = editor.getElement();\n if (body) {\n editor.save({ is_removing: true });\n }\n editor.removed = true;\n editor.unbindAllNativeEvents();\n if (editor.hasHiddenInput && element) {\n DOM$6.remove(element.nextSibling);\n }\n Events.fireRemove(editor);\n editor.editorManager.remove(editor);\n if (!editor.inline && body) {\n restoreOriginalStyles(editor);\n }\n Events.fireDetach(editor);\n DOM$6.remove(editor.getContainer());\n safeDestroy(_selectionOverrides);\n safeDestroy(editorUpload);\n editor.destroy();\n }\n };\n var destroy = function (editor, automatic) {\n var selection = editor.selection, dom = editor.dom;\n if (editor.destroyed) {\n return;\n }\n if (!automatic && !editor.removed) {\n editor.remove();\n return;\n }\n if (!automatic) {\n editor.editorManager.off('beforeunload', editor._beforeUnload);\n if (editor.theme && editor.theme.destroy) {\n editor.theme.destroy();\n }\n safeDestroy(selection);\n safeDestroy(dom);\n }\n restoreForm(editor);\n clearDomReferences(editor);\n editor.destroyed = true;\n };\n\n var DOM$7 = DOMUtils$1.DOM;\n var extend$4 = Tools.extend, each$l = Tools.each;\n var resolve$4 = Tools.resolve;\n var ie$2 = Env.ie;\n var Editor = function (id, settings, editorManager) {\n var self = this;\n var documentBaseUrl = self.documentBaseUrl = editorManager.documentBaseURL;\n var baseUri = editorManager.baseURI;\n settings = getEditorSettings(self, id, documentBaseUrl, editorManager.defaultSettings, settings);\n self.settings = settings;\n AddOnManager.language = settings.language || 'en';\n AddOnManager.languageLoad = settings.language_load;\n AddOnManager.baseURL = editorManager.baseURL;\n self.id = id;\n self.setDirty(false);\n self.plugins = {};\n self.documentBaseURI = new URI(settings.document_base_url, { base_uri: baseUri });\n self.baseURI = baseUri;\n self.contentCSS = [];\n self.contentStyles = [];\n self.shortcuts = new Shortcuts(self);\n self.loadedCSS = {};\n self.editorCommands = new EditorCommands(self);\n self.suffix = editorManager.suffix;\n self.editorManager = editorManager;\n self.inline = settings.inline;\n self.buttons = {};\n self.menuItems = {};\n if (settings.cache_suffix) {\n Env.cacheSuffix = settings.cache_suffix.replace(/^[\\?\\&]+/, '');\n }\n if (settings.override_viewport === false) {\n Env.overrideViewPort = false;\n }\n editorManager.fire('SetupEditor', { editor: self });\n self.execCallback('setup', self);\n self.$ = DomQuery.overrideDefaults(function () {\n return {\n context: self.inline ? self.getBody() : self.getDoc(),\n element: self.getBody()\n };\n });\n };\n Editor.prototype = {\n render: function () {\n Render.render(this);\n },\n focus: function (skipFocus) {\n EditorFocus.focus(this, skipFocus);\n },\n hasFocus: function () {\n return EditorFocus.hasFocus(this);\n },\n execCallback: function (name) {\n var x = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n x[_i - 1] = arguments[_i];\n }\n var self = this;\n var callback = self.settings[name], scope;\n if (!callback) {\n return;\n }\n if (self.callbackLookup && (scope = self.callbackLookup[name])) {\n callback = scope.func;\n scope = scope.scope;\n }\n if (typeof callback === 'string') {\n scope = callback.replace(/\\.\\w+$/, '');\n scope = scope ? resolve$4(scope) : 0;\n callback = resolve$4(callback);\n self.callbackLookup = self.callbackLookup || {};\n self.callbackLookup[name] = {\n func: callback,\n scope: scope\n };\n }\n return callback.apply(scope || self, Array.prototype.slice.call(arguments, 1));\n },\n translate: function (text) {\n if (text && Tools.is(text, 'string')) {\n var lang_1 = this.settings.language || 'en', i18n_1 = this.editorManager.i18n;\n text = i18n_1.data[lang_1 + '.' + text] || text.replace(/\\{\\#([^\\}]+)\\}/g, function (a, b) {\n return i18n_1.data[lang_1 + '.' + b] || '{#' + b + '}';\n });\n }\n return this.editorManager.translate(text);\n },\n getLang: function (name, defaultVal) {\n return this.editorManager.i18n.data[(this.settings.language || 'en') + '.' + name] || (defaultVal !== undefined ? defaultVal : '{#' + name + '}');\n },\n getParam: function (name, defaultVal, type) {\n return getParam(this, name, defaultVal, type);\n },\n nodeChanged: function (args) {\n this._nodeChangeDispatcher.nodeChanged(args);\n },\n addButton: function (name, settings) {\n var self = this;\n if (settings.cmd) {\n settings.onclick = function () {\n self.execCommand(settings.cmd);\n };\n }\n if (settings.stateSelector && typeof settings.active === 'undefined') {\n settings.active = false;\n }\n if (!settings.text && !settings.icon) {\n settings.icon = name;\n }\n settings.tooltip = settings.tooltip || settings.title;\n self.buttons[name] = settings;\n },\n addSidebar: function (name, settings) {\n return Sidebar.add(this, name, settings);\n },\n addMenuItem: function (name, settings) {\n var self = this;\n if (settings.cmd) {\n settings.onclick = function () {\n self.execCommand(settings.cmd);\n };\n }\n self.menuItems[name] = settings;\n },\n addContextToolbar: function (predicate, items) {\n var self = this;\n var selector;\n self.contextToolbars = self.contextToolbars || [];\n if (typeof predicate === 'string') {\n selector = predicate;\n predicate = function (elm) {\n return self.dom.is(elm, selector);\n };\n }\n self.contextToolbars.push({\n id: Uuid.uuid('mcet'),\n predicate: predicate,\n items: items\n });\n },\n addCommand: function (name, callback, scope) {\n this.editorCommands.addCommand(name, callback, scope);\n },\n addQueryStateHandler: function (name, callback, scope) {\n this.editorCommands.addQueryStateHandler(name, callback, scope);\n },\n addQueryValueHandler: function (name, callback, scope) {\n this.editorCommands.addQueryValueHandler(name, callback, scope);\n },\n addShortcut: function (pattern, desc, cmdFunc, scope) {\n this.shortcuts.add(pattern, desc, cmdFunc, scope);\n },\n execCommand: function (cmd, ui, value, args) {\n return this.editorCommands.execCommand(cmd, ui, value, args);\n },\n queryCommandState: function (cmd) {\n return this.editorCommands.queryCommandState(cmd);\n },\n queryCommandValue: function (cmd) {\n return this.editorCommands.queryCommandValue(cmd);\n },\n queryCommandSupported: function (cmd) {\n return this.editorCommands.queryCommandSupported(cmd);\n },\n show: function () {\n var self = this;\n if (self.hidden) {\n self.hidden = false;\n if (self.inline) {\n self.getBody().contentEditable = true;\n } else {\n DOM$7.show(self.getContainer());\n DOM$7.hide(self.id);\n }\n self.load();\n self.fire('show');\n }\n },\n hide: function () {\n var self = this, doc = self.getDoc();\n if (!self.hidden) {\n if (ie$2 && doc && !self.inline) {\n doc.execCommand('SelectAll');\n }\n self.save();\n if (self.inline) {\n self.getBody().contentEditable = false;\n if (self === self.editorManager.focusedEditor) {\n self.editorManager.focusedEditor = null;\n }\n } else {\n DOM$7.hide(self.getContainer());\n DOM$7.setStyle(self.id, 'display', self.orgDisplay);\n }\n self.hidden = true;\n self.fire('hide');\n }\n },\n isHidden: function () {\n return !!this.hidden;\n },\n setProgressState: function (state, time) {\n this.fire('ProgressState', {\n state: state,\n time: time\n });\n },\n load: function (args) {\n var self = this;\n var elm = self.getElement(), html;\n if (self.removed) {\n return '';\n }\n if (elm) {\n args = args || {};\n args.load = true;\n html = self.setContent(elm.value !== undefined ? elm.value : elm.innerHTML, args);\n args.element = elm;\n if (!args.no_events) {\n self.fire('LoadContent', args);\n }\n args.element = elm = null;\n return html;\n }\n },\n save: function (args) {\n var self = this;\n var elm = self.getElement(), html, form;\n if (!elm || !self.initialized || self.removed) {\n return;\n }\n args = args || {};\n args.save = true;\n args.element = elm;\n html = args.content = self.getContent(args);\n if (!args.no_events) {\n self.fire('SaveContent', args);\n }\n if (args.format === 'raw') {\n self.fire('RawSaveContent', args);\n }\n html = args.content;\n if (!/TEXTAREA|INPUT/i.test(elm.nodeName)) {\n if (args.is_removing || !self.inline) {\n elm.innerHTML = html;\n }\n if (form = DOM$7.getParent(self.id, 'form')) {\n each$l(form.elements, function (elm) {\n if (elm.name === self.id) {\n elm.value = html;\n return false;\n }\n });\n }\n } else {\n elm.value = html;\n }\n args.element = elm = null;\n if (args.set_dirty !== false) {\n self.setDirty(false);\n }\n return html;\n },\n setContent: function (content, args) {\n return setContent$1(this, content, args);\n },\n getContent: function (args) {\n return getContent$1(this, args);\n },\n insertContent: function (content, args) {\n if (args) {\n content = extend$4({ content: content }, args);\n }\n this.execCommand('mceInsertContent', false, content);\n },\n isDirty: function () {\n return !this.isNotDirty;\n },\n setDirty: function (state) {\n var oldState = !this.isNotDirty;\n this.isNotDirty = !state;\n if (state && state !== oldState) {\n this.fire('dirty');\n }\n },\n setMode: function (mode) {\n setMode(this, mode);\n },\n getContainer: function () {\n var self = this;\n if (!self.container) {\n self.container = DOM$7.get(self.editorContainer || self.id + '_parent');\n }\n return self.container;\n },\n getContentAreaContainer: function () {\n return this.contentAreaContainer;\n },\n getElement: function () {\n if (!this.targetElm) {\n this.targetElm = DOM$7.get(this.id);\n }\n return this.targetElm;\n },\n getWin: function () {\n var self = this;\n var elm;\n if (!self.contentWindow) {\n elm = self.iframeElement;\n if (elm) {\n self.contentWindow = elm.contentWindow;\n }\n }\n return self.contentWindow;\n },\n getDoc: function () {\n var self = this;\n var win;\n if (!self.contentDocument) {\n win = self.getWin();\n if (win) {\n self.contentDocument = win.document;\n }\n }\n return self.contentDocument;\n },\n getBody: function () {\n var doc = this.getDoc();\n return this.bodyElement || (doc ? doc.body : null);\n },\n convertURL: function (url, name, elm) {\n var self = this, settings = self.settings;\n if (settings.urlconverter_callback) {\n return self.execCallback('urlconverter_callback', url, elm, true, name);\n }\n if (!settings.convert_urls || elm && elm.nodeName === 'LINK' || url.indexOf('file:') === 0 || url.length === 0) {\n return url;\n }\n if (settings.relative_urls) {\n return self.documentBaseURI.toRelative(url);\n }\n url = self.documentBaseURI.toAbsolute(url, settings.remove_script_host);\n return url;\n },\n addVisual: function (elm) {\n var self = this;\n var settings = self.settings;\n var dom = self.dom;\n var cls;\n elm = elm || self.getBody();\n if (self.hasVisual === undefined) {\n self.hasVisual = settings.visual;\n }\n each$l(dom.select('table,a', elm), function (elm) {\n var value;\n switch (elm.nodeName) {\n case 'TABLE':\n cls = settings.visual_table_class || 'mce-item-table';\n value = dom.getAttrib(elm, 'border');\n if ((!value || value === '0') && self.hasVisual) {\n dom.addClass(elm, cls);\n } else {\n dom.removeClass(elm, cls);\n }\n return;\n case 'A':\n if (!dom.getAttrib(elm, 'href')) {\n value = dom.getAttrib(elm, 'name') || elm.id;\n cls = settings.visual_anchor_class || 'mce-item-anchor';\n if (value && self.hasVisual) {\n dom.addClass(elm, cls);\n } else {\n dom.removeClass(elm, cls);\n }\n }\n return;\n }\n });\n self.fire('VisualAid', {\n element: elm,\n hasVisual: self.hasVisual\n });\n },\n remove: function () {\n remove$7(this);\n },\n destroy: function (automatic) {\n destroy(this, automatic);\n },\n uploadImages: function (callback) {\n return this.editorUpload.uploadImages(callback);\n },\n _scanForImages: function () {\n return this.editorUpload.scanForImages();\n }\n };\n extend$4(Editor.prototype, EditorObservable$1);\n\n var isEditorUIElement = function (elm) {\n return elm.className.toString().indexOf('mce-') !== -1;\n };\n var FocusManager = { isEditorUIElement: isEditorUIElement };\n\n var isManualNodeChange = function (e) {\n return e.type === 'nodechange' && e.selectionChange;\n };\n var registerPageMouseUp = function (editor, throttledStore) {\n var mouseUpPage = function () {\n throttledStore.throttle();\n };\n DOMUtils$1.DOM.bind(domGlobals.document, 'mouseup', mouseUpPage);\n editor.on('remove', function () {\n DOMUtils$1.DOM.unbind(domGlobals.document, 'mouseup', mouseUpPage);\n });\n };\n var registerFocusOut = function (editor) {\n editor.on('focusout', function () {\n SelectionBookmark.store(editor);\n });\n };\n var registerMouseUp = function (editor, throttledStore) {\n editor.on('mouseup touchend', function (e) {\n throttledStore.throttle();\n });\n };\n var registerEditorEvents = function (editor, throttledStore) {\n var browser = PlatformDetection$1.detect().browser;\n if (browser.isIE()) {\n registerFocusOut(editor);\n } else {\n registerMouseUp(editor, throttledStore);\n }\n editor.on('keyup nodechange', function (e) {\n if (!isManualNodeChange(e)) {\n SelectionBookmark.store(editor);\n }\n });\n };\n var register$3 = function (editor) {\n var throttledStore = first(function () {\n SelectionBookmark.store(editor);\n }, 0);\n if (editor.inline) {\n registerPageMouseUp(editor, throttledStore);\n }\n editor.on('init', function () {\n registerEditorEvents(editor, throttledStore);\n });\n editor.on('remove', function () {\n throttledStore.cancel();\n });\n };\n var SelectionRestore = { register: register$3 };\n\n var documentFocusInHandler;\n var DOM$8 = DOMUtils$1.DOM;\n var isEditorUIElement$1 = function (elm) {\n return FocusManager.isEditorUIElement(elm);\n };\n var isUIElement = function (editor, elm) {\n var customSelector = editor ? editor.settings.custom_ui_selector : '';\n var parent = DOM$8.getParent(elm, function (elm) {\n return isEditorUIElement$1(elm) || (customSelector ? editor.dom.is(elm, customSelector) : false);\n });\n return parent !== null;\n };\n var getActiveElement = function () {\n try {\n return domGlobals.document.activeElement;\n } catch (ex) {\n return domGlobals.document.body;\n }\n };\n var registerEvents = function (editorManager, e) {\n var editor = e.editor;\n SelectionRestore.register(editor);\n editor.on('focusin', function () {\n var self = this;\n var focusedEditor = editorManager.focusedEditor;\n if (focusedEditor !== self) {\n if (focusedEditor) {\n focusedEditor.fire('blur', { focusedEditor: self });\n }\n editorManager.setActive(self);\n editorManager.focusedEditor = self;\n self.fire('focus', { blurredEditor: focusedEditor });\n self.focus(true);\n }\n });\n editor.on('focusout', function () {\n var self = this;\n Delay.setEditorTimeout(self, function () {\n var focusedEditor = editorManager.focusedEditor;\n if (!isUIElement(self, getActiveElement()) && focusedEditor === self) {\n self.fire('blur', { focusedEditor: null });\n editorManager.focusedEditor = null;\n }\n });\n });\n if (!documentFocusInHandler) {\n documentFocusInHandler = function (e) {\n var activeEditor = editorManager.activeEditor;\n var target;\n target = e.target;\n if (activeEditor && target.ownerDocument === domGlobals.document) {\n if (target !== domGlobals.document.body && !isUIElement(activeEditor, target) && editorManager.focusedEditor === activeEditor) {\n activeEditor.fire('blur', { focusedEditor: null });\n editorManager.focusedEditor = null;\n }\n }\n };\n DOM$8.bind(domGlobals.document, 'focusin', documentFocusInHandler);\n }\n };\n var unregisterDocumentEvents = function (editorManager, e) {\n if (editorManager.focusedEditor === e.editor) {\n editorManager.focusedEditor = null;\n }\n if (!editorManager.activeEditor) {\n DOM$8.unbind(domGlobals.document, 'focusin', documentFocusInHandler);\n documentFocusInHandler = null;\n }\n };\n var setup$h = function (editorManager) {\n editorManager.on('AddEditor', curry(registerEvents, editorManager));\n editorManager.on('RemoveEditor', curry(unregisterDocumentEvents, editorManager));\n };\n var FocusController = {\n setup: setup$h,\n isEditorUIElement: isEditorUIElement$1,\n isUIElement: isUIElement\n };\n\n var DOM$9 = DOMUtils$1.DOM;\n var explode$4 = Tools.explode, each$m = Tools.each, extend$5 = Tools.extend;\n var instanceCounter = 0, beforeUnloadDelegate, EditorManager, boundGlobalEvents = false;\n var legacyEditors = [];\n var editors = [];\n var isValidLegacyKey = function (id) {\n return id !== 'length';\n };\n var globalEventDelegate = function (e) {\n var type = e.type;\n each$m(EditorManager.get(), function (editor) {\n switch (type) {\n case 'scroll':\n editor.fire('ScrollWindow', e);\n break;\n case 'resize':\n editor.fire('ResizeWindow', e);\n break;\n }\n });\n };\n var toggleGlobalEvents = function (state) {\n if (state !== boundGlobalEvents) {\n if (state) {\n DomQuery(window).on('resize scroll', globalEventDelegate);\n } else {\n DomQuery(window).off('resize scroll', globalEventDelegate);\n }\n boundGlobalEvents = state;\n }\n };\n var removeEditorFromList = function (targetEditor) {\n var oldEditors = editors;\n delete legacyEditors[targetEditor.id];\n for (var i = 0; i < legacyEditors.length; i++) {\n if (legacyEditors[i] === targetEditor) {\n legacyEditors.splice(i, 1);\n break;\n }\n }\n editors = filter(editors, function (editor) {\n return targetEditor !== editor;\n });\n if (EditorManager.activeEditor === targetEditor) {\n EditorManager.activeEditor = editors.length > 0 ? editors[0] : null;\n }\n if (EditorManager.focusedEditor === targetEditor) {\n EditorManager.focusedEditor = null;\n }\n return oldEditors.length !== editors.length;\n };\n var purgeDestroyedEditor = function (editor) {\n if (editor && editor.initialized && !(editor.getContainer() || editor.getBody()).parentNode) {\n removeEditorFromList(editor);\n editor.unbindAllNativeEvents();\n editor.destroy(true);\n editor.removed = true;\n editor = null;\n }\n return editor;\n };\n EditorManager = {\n defaultSettings: {},\n $: DomQuery,\n majorVersion: '4',\n minorVersion: '9.11',\n releaseDate: '2020-07-13',\n editors: legacyEditors,\n i18n: I18n,\n activeEditor: null,\n settings: {},\n setup: function () {\n var self = this;\n var baseURL, documentBaseURL, suffix = '';\n documentBaseURL = URI.getDocumentBaseUrl(domGlobals.document.location);\n if (/^[^:]+:\\/\\/\\/?[^\\/]+\\//.test(documentBaseURL)) {\n documentBaseURL = documentBaseURL.replace(/[\\?#].*$/, '').replace(/[\\/\\\\][^\\/]+$/, '');\n if (!/[\\/\\\\]$/.test(documentBaseURL)) {\n documentBaseURL += '/';\n }\n }\n var preInit = window.tinymce || window.tinyMCEPreInit;\n if (preInit) {\n baseURL = preInit.base || preInit.baseURL;\n suffix = preInit.suffix;\n } else {\n var scripts = domGlobals.document.getElementsByTagName('script');\n for (var i = 0; i < scripts.length; i++) {\n var src = scripts[i].src || '';\n if (src === '') {\n continue;\n }\n var srcScript = src.substring(src.lastIndexOf('/'));\n if (/tinymce(\\.full|\\.jquery|)(\\.min|\\.dev|)\\.js/.test(src)) {\n if (srcScript.indexOf('.min') !== -1) {\n suffix = '.min';\n }\n baseURL = src.substring(0, src.lastIndexOf('/'));\n break;\n }\n }\n if (!baseURL && domGlobals.document.currentScript) {\n var src = domGlobals.document.currentScript.src;\n if (src.indexOf('.min') !== -1) {\n suffix = '.min';\n }\n baseURL = src.substring(0, src.lastIndexOf('/'));\n }\n }\n self.baseURL = new URI(documentBaseURL).toAbsolute(baseURL);\n self.documentBaseURL = documentBaseURL;\n self.baseURI = new URI(self.baseURL);\n self.suffix = suffix;\n FocusController.setup(self);\n },\n overrideDefaults: function (defaultSettings) {\n var baseUrl, suffix;\n baseUrl = defaultSettings.base_url;\n if (baseUrl) {\n this.baseURL = new URI(this.documentBaseURL).toAbsolute(baseUrl.replace(/\\/+$/, ''));\n this.baseURI = new URI(this.baseURL);\n }\n suffix = defaultSettings.suffix;\n if (defaultSettings.suffix) {\n this.suffix = suffix;\n }\n this.defaultSettings = defaultSettings;\n var pluginBaseUrls = defaultSettings.plugin_base_urls;\n for (var name in pluginBaseUrls) {\n AddOnManager.PluginManager.urls[name] = pluginBaseUrls[name];\n }\n },\n init: function (settings) {\n var self = this;\n var result, invalidInlineTargets;\n 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', ' ');\n var isInvalidInlineTarget = function (settings, elm) {\n return settings.inline && elm.tagName.toLowerCase() in invalidInlineTargets;\n };\n var createId = function (elm) {\n var id = elm.id;\n if (!id) {\n id = elm.name;\n if (id && !DOM$9.get(id)) {\n id = elm.name;\n } else {\n id = DOM$9.uniqueId();\n }\n elm.setAttribute('id', id);\n }\n return id;\n };\n var execCallback = function (name) {\n var callback = settings[name];\n if (!callback) {\n return;\n }\n return callback.apply(self, Array.prototype.slice.call(arguments, 2));\n };\n var hasClass = function (elm, className) {\n return className.constructor === RegExp ? className.test(elm.className) : DOM$9.hasClass(elm, className);\n };\n var findTargets = function (settings) {\n var l, targets = [];\n if (Env.ie && Env.ie < 11) {\n 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/');\n return [];\n }\n if (settings.types) {\n each$m(settings.types, function (type) {\n targets = targets.concat(DOM$9.select(type.selector));\n });\n return targets;\n } else if (settings.selector) {\n return DOM$9.select(settings.selector);\n } else if (settings.target) {\n return [settings.target];\n }\n switch (settings.mode) {\n case 'exact':\n l = settings.elements || '';\n if (l.length > 0) {\n each$m(explode$4(l), function (id) {\n var elm;\n if (elm = DOM$9.get(id)) {\n targets.push(elm);\n } else {\n each$m(domGlobals.document.forms, function (f) {\n each$m(f.elements, function (e) {\n if (e.name === id) {\n id = 'mce_editor_' + instanceCounter++;\n DOM$9.setAttrib(e, 'id', id);\n targets.push(e);\n }\n });\n });\n }\n });\n }\n break;\n case 'textareas':\n case 'specific_textareas':\n each$m(DOM$9.select('textarea'), function (elm) {\n if (settings.editor_deselector && hasClass(elm, settings.editor_deselector)) {\n return;\n }\n if (!settings.editor_selector || hasClass(elm, settings.editor_selector)) {\n targets.push(elm);\n }\n });\n break;\n }\n return targets;\n };\n var provideResults = function (editors) {\n result = editors;\n };\n var initEditors = function () {\n var initCount = 0;\n var editors = [];\n var targets;\n var createEditor = function (id, settings, targetElm) {\n var editor = new Editor(id, settings, self);\n editors.push(editor);\n editor.on('init', function () {\n if (++initCount === targets.length) {\n provideResults(editors);\n }\n });\n editor.targetElm = editor.targetElm || targetElm;\n editor.render();\n };\n DOM$9.unbind(window, 'ready', initEditors);\n execCallback('onpageload');\n targets = DomQuery.unique(findTargets(settings));\n if (settings.types) {\n each$m(settings.types, function (type) {\n Tools.each(targets, function (elm) {\n if (DOM$9.is(elm, type.selector)) {\n createEditor(createId(elm), extend$5({}, settings, type), elm);\n return false;\n }\n return true;\n });\n });\n return;\n }\n Tools.each(targets, function (elm) {\n purgeDestroyedEditor(self.get(elm.id));\n });\n targets = Tools.grep(targets, function (elm) {\n return !self.get(elm.id);\n });\n if (targets.length === 0) {\n provideResults([]);\n } else {\n each$m(targets, function (elm) {\n if (isInvalidInlineTarget(settings, elm)) {\n ErrorReporter.initError('Could not initialize inline editor on invalid inline target element', elm);\n } else {\n createEditor(createId(elm), settings, elm);\n }\n });\n }\n };\n self.settings = settings;\n DOM$9.bind(window, 'ready', initEditors);\n return new promiseObj(function (resolve) {\n if (result) {\n resolve(result);\n } else {\n provideResults = function (editors) {\n resolve(editors);\n };\n }\n });\n },\n get: function (id) {\n if (arguments.length === 0) {\n return editors.slice(0);\n } else if (isString(id)) {\n return find(editors, function (editor) {\n return editor.id === id;\n }).getOr(null);\n } else if (isNumber(id)) {\n return editors[id] ? editors[id] : null;\n } else {\n return null;\n }\n },\n add: function (editor) {\n var self = this;\n var existingEditor;\n existingEditor = legacyEditors[editor.id];\n if (existingEditor === editor) {\n return editor;\n }\n if (self.get(editor.id) === null) {\n if (isValidLegacyKey(editor.id)) {\n legacyEditors[editor.id] = editor;\n }\n legacyEditors.push(editor);\n editors.push(editor);\n }\n toggleGlobalEvents(true);\n self.activeEditor = editor;\n self.fire('AddEditor', { editor: editor });\n if (!beforeUnloadDelegate) {\n beforeUnloadDelegate = function () {\n self.fire('BeforeUnload');\n };\n DOM$9.bind(window, 'beforeunload', beforeUnloadDelegate);\n }\n return editor;\n },\n createEditor: function (id, settings) {\n return this.add(new Editor(id, settings, this));\n },\n remove: function (selector) {\n var self = this;\n var i, editor;\n if (!selector) {\n for (i = editors.length - 1; i >= 0; i--) {\n self.remove(editors[i]);\n }\n return;\n }\n if (isString(selector)) {\n each$m(DOM$9.select(selector), function (elm) {\n editor = self.get(elm.id);\n if (editor) {\n self.remove(editor);\n }\n });\n return;\n }\n editor = selector;\n if (isNull(self.get(editor.id))) {\n return null;\n }\n if (removeEditorFromList(editor)) {\n self.fire('RemoveEditor', { editor: editor });\n }\n if (editors.length === 0) {\n DOM$9.unbind(window, 'beforeunload', beforeUnloadDelegate);\n }\n editor.remove();\n toggleGlobalEvents(editors.length > 0);\n return editor;\n },\n execCommand: function (cmd, ui, value) {\n var self = this, editor = self.get(value);\n switch (cmd) {\n case 'mceAddEditor':\n if (!self.get(value)) {\n new Editor(value, self.settings, self).render();\n }\n return true;\n case 'mceRemoveEditor':\n if (editor) {\n editor.remove();\n }\n return true;\n case 'mceToggleEditor':\n if (!editor) {\n self.execCommand('mceAddEditor', 0, value);\n return true;\n }\n if (editor.isHidden()) {\n editor.show();\n } else {\n editor.hide();\n }\n return true;\n }\n if (self.activeEditor) {\n return self.activeEditor.execCommand(cmd, ui, value);\n }\n return false;\n },\n triggerSave: function () {\n each$m(editors, function (editor) {\n editor.save();\n });\n },\n addI18n: function (code, items) {\n I18n.add(code, items);\n },\n translate: function (text) {\n return I18n.translate(text);\n },\n setActive: function (editor) {\n var activeEditor = this.activeEditor;\n if (this.activeEditor !== editor) {\n if (activeEditor) {\n activeEditor.fire('deactivate', { relatedTarget: editor });\n }\n editor.fire('activate', { relatedTarget: activeEditor });\n }\n this.activeEditor = editor;\n }\n };\n extend$5(EditorManager, Observable);\n EditorManager.setup();\n var EditorManager$1 = EditorManager;\n\n function RangeUtils(dom) {\n var walk = function (rng, callback) {\n return RangeWalk.walk(dom, rng, callback);\n };\n var split = SplitRange.split;\n var normalize = function (rng) {\n return NormalizeRange.normalize(dom, rng).fold(constant(false), function (normalizedRng) {\n rng.setStart(normalizedRng.startContainer, normalizedRng.startOffset);\n rng.setEnd(normalizedRng.endContainer, normalizedRng.endOffset);\n return true;\n });\n };\n return {\n walk: walk,\n split: split,\n normalize: normalize\n };\n }\n (function (RangeUtils) {\n RangeUtils.compareRanges = RangeCompare.isEq;\n RangeUtils.getCaretRangeFromPoint = CaretRangeFromPoint.fromPoint;\n RangeUtils.getSelectedNode = getSelectedNode;\n RangeUtils.getNode = getNode;\n }(RangeUtils || (RangeUtils = {})));\n var RangeUtils$1 = RangeUtils;\n\n var min = Math.min, max = Math.max, round$2 = Math.round;\n var relativePosition = function (rect, targetRect, rel) {\n var x, y, w, h, targetW, targetH;\n x = targetRect.x;\n y = targetRect.y;\n w = rect.w;\n h = rect.h;\n targetW = targetRect.w;\n targetH = targetRect.h;\n rel = (rel || '').split('');\n if (rel[0] === 'b') {\n y += targetH;\n }\n if (rel[1] === 'r') {\n x += targetW;\n }\n if (rel[0] === 'c') {\n y += round$2(targetH / 2);\n }\n if (rel[1] === 'c') {\n x += round$2(targetW / 2);\n }\n if (rel[3] === 'b') {\n y -= h;\n }\n if (rel[4] === 'r') {\n x -= w;\n }\n if (rel[3] === 'c') {\n y -= round$2(h / 2);\n }\n if (rel[4] === 'c') {\n x -= round$2(w / 2);\n }\n return create$4(x, y, w, h);\n };\n var findBestRelativePosition = function (rect, targetRect, constrainRect, rels) {\n var pos, i;\n for (i = 0; i < rels.length; i++) {\n pos = relativePosition(rect, targetRect, rels[i]);\n 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) {\n return rels[i];\n }\n }\n return null;\n };\n var inflate = function (rect, w, h) {\n return create$4(rect.x - w, rect.y - h, rect.w + w * 2, rect.h + h * 2);\n };\n var intersect = function (rect, cropRect) {\n var x1, y1, x2, y2;\n x1 = max(rect.x, cropRect.x);\n y1 = max(rect.y, cropRect.y);\n x2 = min(rect.x + rect.w, cropRect.x + cropRect.w);\n y2 = min(rect.y + rect.h, cropRect.y + cropRect.h);\n if (x2 - x1 < 0 || y2 - y1 < 0) {\n return null;\n }\n return create$4(x1, y1, x2 - x1, y2 - y1);\n };\n var clamp$1 = function (rect, clampRect, fixedSize) {\n var underflowX1, underflowY1, overflowX2, overflowY2, x1, y1, x2, y2, cx2, cy2;\n x1 = rect.x;\n y1 = rect.y;\n x2 = rect.x + rect.w;\n y2 = rect.y + rect.h;\n cx2 = clampRect.x + clampRect.w;\n cy2 = clampRect.y + clampRect.h;\n underflowX1 = max(0, clampRect.x - x1);\n underflowY1 = max(0, clampRect.y - y1);\n overflowX2 = max(0, x2 - cx2);\n overflowY2 = max(0, y2 - cy2);\n x1 += underflowX1;\n y1 += underflowY1;\n if (fixedSize) {\n x2 += underflowX1;\n y2 += underflowY1;\n x1 -= overflowX2;\n y1 -= overflowY2;\n }\n x2 -= overflowX2;\n y2 -= overflowY2;\n return create$4(x1, y1, x2 - x1, y2 - y1);\n };\n var create$4 = function (x, y, w, h) {\n return {\n x: x,\n y: y,\n w: w,\n h: h\n };\n };\n var fromClientRect = function (clientRect) {\n return create$4(clientRect.left, clientRect.top, clientRect.width, clientRect.height);\n };\n var Rect = {\n inflate: inflate,\n relativePosition: relativePosition,\n findBestRelativePosition: findBestRelativePosition,\n intersect: intersect,\n clamp: clamp$1,\n create: create$4,\n fromClientRect: fromClientRect\n };\n\n var types = {};\n var Factory = {\n add: function (type, typeClass) {\n types[type.toLowerCase()] = typeClass;\n },\n has: function (type) {\n return !!types[type.toLowerCase()];\n },\n get: function (type) {\n var lctype = type.toLowerCase();\n var controlType = types.hasOwnProperty(lctype) ? types[lctype] : null;\n if (controlType === null) {\n throw new Error('Could not find module for type: ' + type);\n }\n return controlType;\n },\n create: function (type, settings) {\n var ControlType;\n if (typeof type === 'string') {\n settings = settings || {};\n settings.type = type;\n } else {\n settings = type;\n type = settings.type;\n }\n type = type.toLowerCase();\n ControlType = types[type];\n if (!ControlType) {\n throw new Error('Could not find control by type: ' + type);\n }\n ControlType = new ControlType(settings);\n ControlType.type = type;\n return ControlType;\n }\n };\n\n var each$n = Tools.each, extend$6 = Tools.extend;\n var extendClass, initializing;\n var Class = function () {\n };\n Class.extend = extendClass = function (prop) {\n var self = this;\n var _super = self.prototype;\n var prototype, name, member;\n var Class = function () {\n var i, mixins, mixin;\n var self = this;\n if (!initializing) {\n if (self.init) {\n self.init.apply(self, arguments);\n }\n mixins = self.Mixins;\n if (mixins) {\n i = mixins.length;\n while (i--) {\n mixin = mixins[i];\n if (mixin.init) {\n mixin.init.apply(self, arguments);\n }\n }\n }\n }\n };\n var dummy = function () {\n return this;\n };\n var createMethod = function (name, fn) {\n return function () {\n var self = this;\n var tmp = self._super;\n var ret;\n self._super = _super[name];\n ret = fn.apply(self, arguments);\n self._super = tmp;\n return ret;\n };\n };\n initializing = true;\n prototype = new self();\n initializing = false;\n if (prop.Mixins) {\n each$n(prop.Mixins, function (mixin) {\n for (var name_1 in mixin) {\n if (name_1 !== 'init') {\n prop[name_1] = mixin[name_1];\n }\n }\n });\n if (_super.Mixins) {\n prop.Mixins = _super.Mixins.concat(prop.Mixins);\n }\n }\n if (prop.Methods) {\n each$n(prop.Methods.split(','), function (name) {\n prop[name] = dummy;\n });\n }\n if (prop.Properties) {\n each$n(prop.Properties.split(','), function (name) {\n var fieldName = '_' + name;\n prop[name] = function (value) {\n var self = this;\n if (value !== undefined) {\n self[fieldName] = value;\n return self;\n }\n return self[fieldName];\n };\n });\n }\n if (prop.Statics) {\n each$n(prop.Statics, function (func, name) {\n Class[name] = func;\n });\n }\n if (prop.Defaults && _super.Defaults) {\n prop.Defaults = extend$6({}, _super.Defaults, prop.Defaults);\n }\n for (name in prop) {\n member = prop[name];\n if (typeof member === 'function' && _super[name]) {\n prototype[name] = createMethod(name, member);\n } else {\n prototype[name] = member;\n }\n }\n Class.prototype = prototype;\n Class.constructor = Class;\n Class.extend = extendClass;\n return Class;\n };\n\n var min$1 = Math.min, max$1 = Math.max, round$3 = Math.round;\n var Color = function (value) {\n var self = {};\n var r = 0, g = 0, b = 0;\n var rgb2hsv = function (r, g, b) {\n var h, s, v, d, minRGB, maxRGB;\n h = 0;\n s = 0;\n v = 0;\n r = r / 255;\n g = g / 255;\n b = b / 255;\n minRGB = min$1(r, min$1(g, b));\n maxRGB = max$1(r, max$1(g, b));\n if (minRGB === maxRGB) {\n v = minRGB;\n return {\n h: 0,\n s: 0,\n v: v * 100\n };\n }\n d = r === minRGB ? g - b : b === minRGB ? r - g : b - r;\n h = r === minRGB ? 3 : b === minRGB ? 1 : 5;\n h = 60 * (h - d / (maxRGB - minRGB));\n s = (maxRGB - minRGB) / maxRGB;\n v = maxRGB;\n return {\n h: round$3(h),\n s: round$3(s * 100),\n v: round$3(v * 100)\n };\n };\n var hsvToRgb = function (hue, saturation, brightness) {\n var side, chroma, x, match;\n hue = (parseInt(hue, 10) || 0) % 360;\n saturation = parseInt(saturation, 10) / 100;\n brightness = parseInt(brightness, 10) / 100;\n saturation = max$1(0, min$1(saturation, 1));\n brightness = max$1(0, min$1(brightness, 1));\n if (saturation === 0) {\n r = g = b = round$3(255 * brightness);\n return;\n }\n side = hue / 60;\n chroma = brightness * saturation;\n x = chroma * (1 - Math.abs(side % 2 - 1));\n match = brightness - chroma;\n switch (Math.floor(side)) {\n case 0:\n r = chroma;\n g = x;\n b = 0;\n break;\n case 1:\n r = x;\n g = chroma;\n b = 0;\n break;\n case 2:\n r = 0;\n g = chroma;\n b = x;\n break;\n case 3:\n r = 0;\n g = x;\n b = chroma;\n break;\n case 4:\n r = x;\n g = 0;\n b = chroma;\n break;\n case 5:\n r = chroma;\n g = 0;\n b = x;\n break;\n default:\n r = g = b = 0;\n }\n r = round$3(255 * (r + match));\n g = round$3(255 * (g + match));\n b = round$3(255 * (b + match));\n };\n var toHex = function () {\n var hex = function (val) {\n val = parseInt(val, 10).toString(16);\n return val.length > 1 ? val : '0' + val;\n };\n return '#' + hex(r) + hex(g) + hex(b);\n };\n var toRgb = function () {\n return {\n r: r,\n g: g,\n b: b\n };\n };\n var toHsv = function () {\n return rgb2hsv(r, g, b);\n };\n var parse = function (value) {\n var matches;\n if (typeof value === 'object') {\n if ('r' in value) {\n r = value.r;\n g = value.g;\n b = value.b;\n } else if ('v' in value) {\n hsvToRgb(value.h, value.s, value.v);\n }\n } else {\n if (matches = /rgb\\s*\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)[^\\)]*\\)/gi.exec(value)) {\n r = parseInt(matches[1], 10);\n g = parseInt(matches[2], 10);\n b = parseInt(matches[3], 10);\n } else if (matches = /#([0-F]{2})([0-F]{2})([0-F]{2})/gi.exec(value)) {\n r = parseInt(matches[1], 16);\n g = parseInt(matches[2], 16);\n b = parseInt(matches[3], 16);\n } else if (matches = /#([0-F])([0-F])([0-F])/gi.exec(value)) {\n r = parseInt(matches[1] + matches[1], 16);\n g = parseInt(matches[2] + matches[2], 16);\n b = parseInt(matches[3] + matches[3], 16);\n }\n }\n r = r < 0 ? 0 : r > 255 ? 255 : r;\n g = g < 0 ? 0 : g > 255 ? 255 : g;\n b = b < 0 ? 0 : b > 255 ? 255 : b;\n return self;\n };\n if (value) {\n parse(value);\n }\n self.toRgb = toRgb;\n self.toHsv = toHsv;\n self.toHex = toHex;\n self.parse = parse;\n return self;\n };\n\n var serialize = function (o, quote) {\n var i, v, t, name;\n quote = quote || '\"';\n if (o === null) {\n return 'null';\n }\n t = typeof o;\n if (t === 'string') {\n v = '\\bb\\tt\\nn\\ff\\rr\"\"\\'\\'\\\\\\\\';\n return quote + o.replace(/([\\u0080-\\uFFFF\\x00-\\x1f\\\"\\'\\\\])/g, function (a, b) {\n if (quote === '\"' && a === '\\'') {\n return a;\n }\n i = v.indexOf(b);\n if (i + 1) {\n return '\\\\' + v.charAt(i + 1);\n }\n a = b.charCodeAt().toString(16);\n return '\\\\u' + '0000'.substring(a.length) + a;\n }) + quote;\n }\n if (t === 'object') {\n if (o.hasOwnProperty && Object.prototype.toString.call(o) === '[object Array]') {\n for (i = 0, v = '['; i < o.length; i++) {\n v += (i > 0 ? ',' : '') + serialize(o[i], quote);\n }\n return v + ']';\n }\n v = '{';\n for (name in o) {\n if (o.hasOwnProperty(name)) {\n v += typeof o[name] !== 'function' ? (v.length > 1 ? ',' + quote : quote) + name + quote + ':' + serialize(o[name], quote) : '';\n }\n }\n return v + '}';\n }\n return '' + o;\n };\n var JSON$1 = {\n serialize: serialize,\n parse: function (text) {\n try {\n return JSON.parse(text);\n } catch (ex) {\n }\n }\n };\n\n var JSONP = {\n callbacks: {},\n count: 0,\n send: function (settings) {\n var self = this, dom = DOMUtils$1.DOM, count = settings.count !== undefined ? settings.count : self.count;\n var id = 'tinymce_jsonp_' + count;\n self.callbacks[count] = function (json) {\n dom.remove(id);\n delete self.callbacks[count];\n settings.callback(json);\n };\n dom.add(dom.doc.body, 'script', {\n id: id,\n src: settings.url,\n type: 'text/javascript'\n });\n self.count++;\n }\n };\n\n var XHR = {\n send: function (settings) {\n var xhr, count = 0;\n var ready = function () {\n if (!settings.async || xhr.readyState === 4 || count++ > 10000) {\n if (settings.success && count < 10000 && xhr.status === 200) {\n settings.success.call(settings.success_scope, '' + xhr.responseText, xhr, settings);\n } else if (settings.error) {\n settings.error.call(settings.error_scope, count > 10000 ? 'TIMED_OUT' : 'GENERAL', xhr, settings);\n }\n xhr = null;\n } else {\n setTimeout(ready, 10);\n }\n };\n settings.scope = settings.scope || this;\n settings.success_scope = settings.success_scope || settings.scope;\n settings.error_scope = settings.error_scope || settings.scope;\n settings.async = settings.async === false ? false : true;\n settings.data = settings.data || '';\n XHR.fire('beforeInitialize', { settings: settings });\n xhr = XMLHttpRequest();\n if (xhr) {\n if (xhr.overrideMimeType) {\n xhr.overrideMimeType(settings.content_type);\n }\n xhr.open(settings.type || (settings.data ? 'POST' : 'GET'), settings.url, settings.async);\n if (settings.crossDomain) {\n xhr.withCredentials = true;\n }\n if (settings.content_type) {\n xhr.setRequestHeader('Content-Type', settings.content_type);\n }\n if (settings.requestheaders) {\n Tools.each(settings.requestheaders, function (header) {\n xhr.setRequestHeader(header.key, header.value);\n });\n }\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n xhr = XHR.fire('beforeSend', {\n xhr: xhr,\n settings: settings\n }).xhr;\n xhr.send(settings.data);\n if (!settings.async) {\n return ready();\n }\n setTimeout(ready, 10);\n }\n }\n };\n Tools.extend(XHR, Observable);\n\n var extend$7 = Tools.extend;\n var JSONRequest = function (settings) {\n this.settings = extend$7({}, settings);\n this.count = 0;\n };\n JSONRequest.sendRPC = function (o) {\n return new JSONRequest().send(o);\n };\n JSONRequest.prototype = {\n send: function (args) {\n var ecb = args.error, scb = args.success;\n args = extend$7(this.settings, args);\n args.success = function (c, x) {\n c = JSON$1.parse(c);\n if (typeof c === 'undefined') {\n c = { error: 'JSON Parse error.' };\n }\n if (c.error) {\n ecb.call(args.error_scope || args.scope, c.error, x);\n } else {\n scb.call(args.success_scope || args.scope, c.result);\n }\n };\n args.error = function (ty, x) {\n if (ecb) {\n ecb.call(args.error_scope || args.scope, ty, x);\n }\n };\n args.data = JSON$1.serialize({\n id: args.id || 'c' + this.count++,\n method: args.method,\n params: args.params\n });\n args.content_type = 'application/json';\n XHR.send(args);\n }\n };\n\n var create$5 = function () {\n return function () {\n var data = {};\n var keys = [];\n var storage = {\n getItem: function (key) {\n var item = data[key];\n return item ? item : null;\n },\n setItem: function (key, value) {\n keys.push(key);\n data[key] = String(value);\n },\n key: function (index) {\n return keys[index];\n },\n removeItem: function (key) {\n keys = keys.filter(function (k) {\n return k === key;\n });\n delete data[key];\n },\n clear: function () {\n keys = [];\n data = {};\n },\n length: 0\n };\n Object.defineProperty(storage, 'length', {\n get: function () {\n return keys.length;\n },\n configurable: false,\n enumerable: false\n });\n return storage;\n }();\n };\n\n var localStorage;\n try {\n localStorage = domGlobals.window.localStorage;\n } catch (e) {\n localStorage = create$5();\n }\n var LocalStorage = localStorage;\n\n var tinymce = EditorManager$1;\n var publicApi = {\n geom: { Rect: Rect },\n util: {\n Promise: promiseObj,\n Delay: Delay,\n Tools: Tools,\n VK: VK,\n URI: URI,\n Class: Class,\n EventDispatcher: Dispatcher,\n Observable: Observable,\n I18n: I18n,\n XHR: XHR,\n JSON: JSON$1,\n JSONRequest: JSONRequest,\n JSONP: JSONP,\n LocalStorage: LocalStorage,\n Color: Color\n },\n dom: {\n EventUtils: EventUtils,\n Sizzle: Sizzle,\n DomQuery: DomQuery,\n TreeWalker: TreeWalker,\n DOMUtils: DOMUtils$1,\n ScriptLoader: ScriptLoader,\n RangeUtils: RangeUtils$1,\n Serializer: DomSerializer$1,\n ControlSelection: ControlSelection,\n BookmarkManager: BookmarkManager$1,\n Selection: Selection$1,\n Event: EventUtils.Event\n },\n html: {\n Styles: Styles,\n Entities: Entities,\n Node: Node$1,\n Schema: Schema,\n SaxParser: SaxParser$1,\n DomParser: DomParser,\n Writer: Writer,\n Serializer: HtmlSerializer\n },\n ui: { Factory: Factory },\n Env: Env,\n AddOnManager: AddOnManager,\n Annotator: Annotator,\n Formatter: Formatter,\n UndoManager: UndoManager,\n EditorCommands: EditorCommands,\n WindowManager: WindowManager,\n NotificationManager: NotificationManager,\n EditorObservable: EditorObservable$1,\n Shortcuts: Shortcuts,\n Editor: Editor,\n FocusManager: FocusManager,\n EditorManager: EditorManager$1,\n DOM: DOMUtils$1.DOM,\n ScriptLoader: ScriptLoader.ScriptLoader,\n PluginManager: AddOnManager.PluginManager,\n ThemeManager: AddOnManager.ThemeManager,\n trim: Tools.trim,\n isArray: Tools.isArray,\n is: Tools.is,\n toArray: Tools.toArray,\n makeMap: Tools.makeMap,\n each: Tools.each,\n map: Tools.map,\n grep: Tools.grep,\n inArray: Tools.inArray,\n extend: Tools.extend,\n create: Tools.create,\n walk: Tools.walk,\n createNS: Tools.createNS,\n resolve: Tools.resolve,\n explode: Tools.explode,\n _addCacheSuffix: Tools._addCacheSuffix,\n isOpera: Env.opera,\n isWebKit: Env.webkit,\n isIE: Env.ie,\n isGecko: Env.gecko,\n isMac: Env.mac\n };\n tinymce = Tools.extend(tinymce, publicApi);\n var Tinymce = tinymce;\n\n var exportToModuleLoaders = function (tinymce) {\n if (typeof module === 'object') {\n try {\n module.exports = tinymce;\n } catch (_) {\n }\n }\n };\n var exportToWindowGlobal = function (tinymce) {\n window.tinymce = tinymce;\n window.tinyMCE = tinymce;\n };\n exportToWindowGlobal(Tinymce);\n exportToModuleLoaders(Tinymce);\n\n}(window));\n})();\n"],"names":["tinymce","addI18n","global","util","Tools","resolve","global$1","Actions","editor","listName","styleValue","cmd","execCommand","Commands","addCommand","ui","value","Settings","styles","getParam","split","ListUtils","node","test","nodeName","elm","$","contains","getBody","isChildOfBody","listElm","dom","getParent","selection","getNode","getStyle","ListStyles","map","text","replace","chr","toUpperCase","styleValueToText","data","listState","e","ctrl","control","on","tableCellIndex","list","predicate","index","length","findIndex","parents","slice","lists","grep","active","updateSelection","listStyleType","items","each","settings","addControl","id","tooltip","addButton","type","menu","onPostRender","onshow","onselect","onclick","addSplitButton","Buttons","add","plugin","plugins","inArray","hasPlugin","Anchor","selectedNode","tagName","getAttrib","name","removeAttribute","undoManager","focus","collapse","createHTML","Dialog","currentId","windowManager","open","title","body","size","label","onsubmit","newId","alert","insertAnchor","preventDefault","setContentEditable","state","nodes","i","attr","firstChild","FilterContent","parser","addNodeFilter","serializer","icon","stateSelector","addMenuItem","context","scopeIndex","container","nodeType","len","setStart","rng","offset","hasChildNodes","setStartBefore","setEnd","setEndAfter","parseCurrentLine","endOffset","delimiter","end","start","endContainer","bookmark","matches","prev","rngText","autoLinkPattern","defaultLinkTarget","getRng","cloneRange","startOffset","previousSibling","nextSibling","nodeValue","toString","charCodeAt","rangeString","rangeEqualsDelimiterOrSpace","charAt","trim","match","getBookmark","setRng","setAttrib","moveToBookmark","nodeChanged","Keys","autoUrlDetectState","keyCode","handleEnter","ie","ex","handleEclipse","handleSpacebar","Events","fire","evtChr","charmap","charmap_append","isArray","getCharsFromSetting","settingValue","concat","item","charmapFilter","CharMap","userCharMap","userCharMapAppend","extendCharMap","Api","getCharMap","insertChar","GridHtml","gridHtml","x","y","width","Math","min","height","ceil","charCode","parseInt","chrText","String","fromCharCode","getParentTd","parentNode","win","charMapPanel","html","target","charDiv","hasAttribute","charCodeString","getAttribute","isNaN","ctrlKey","close","onmouseover","td","find","spacing","padding","layout","direction","align","minWidth","minHeight","style","border","buttons","DOM","getViewPort","h","Content","transact","setContent","setCursorLocation","getContent","source_view","multiline","spellcheck","onSubmit","code","showPreview","hexColor","getEl","background","setColor","color","rgb","toRgb","fromJSON","r","g","b","hex","toHex","substr","callback","onchange","this","labelGap","defaults","flex","colorPickerCtrl","autofocus","toJSON","color_picker_callback","emoticons","PanelHtml","pluginUrl","emoticonsHtml","row","emoticonUrl","panelHtml","panel","role","autohide","linkElm","src","alt","insertContent","insertEmoticon","hide","domGlobals","Cell","initial","get","set","v","clone","fullscreenState","isFullscreen","editorContainerStyle","editorContainer","iframe","iframeStyle","pos","vp","document","documentElement","fullscreenInfo","resize","setStyle","w","window","offsetWidth","offsetHeight","innerWidth","innerHeight","getWindowSize","clientHeight","removeResize","unbind","getContainer","getContentAreaContainer","iframeWidth","iframeHeight","containerWidth","containerHeight","removeClass","scrollPos","scrollTo","resizeHandler","off","removeHandler","newFullScreenInfo","addClass","bind","postRender","shortcut","selectable","inline","addShortcut","merger","image_dimensions","image_advtab","image_description","image_title","image_caption","Global","Function","p","scope","parts","o","path","Global$1","actual","unsafe","Error","global$2","global$3","parseIntAndGetMax","val1","val2","max","Utils","url","img","createElement","done","removeChild","onload","clientWidth","onerror","visibility","position","bottom","left","appendChild","inputList","itemCallback","startItems","appendItems","values","output","menuItem","push","css","margin","splitMargin","imageList","send","success","JSON","parse","imgElm","selectImage","select","setAttribs","blob","reject","reader","result","error","message","readAsDataURL","global$4","hasOwnProperty","Object","prototype","merge","old","nu","objects","Array","arguments","ret","j","curObject","key","call","getHspace","image","marginLeft","marginRight","getVspace","marginTop","marginBottom","getBorder","borderWidth","hasCaption","setAttribute","toggleCaption","figureElm","insertAfter","remove","removeFigure","create","class","contentEditable","wrapInFigure","normalizeStyle","normalizeCss","attrValue","setSize","getSize","setHspace","pxValue","setVspace","setBorder","setBorderStyle","borderStyle","isFigure","getStyleValue","hspace","vspace","getBorderStyle","read","caption","updateProp","oldData","newData","normalized","write","_name","_value","cssText","mergedCss","compressed","serialize","getSelectedImage","splitTextBlock","figure","textBlock","schema","getTextBlockElements","readImageDataFromSelection","insertImageAtCaret","outerHTML","insertedElm","insertOrUpdateImage","syncSrcAttr","writeImageDataToSelection","is","isEmpty","deleteImage","updateVSpaceHSpaceBorder","evt","rootControl","parseStyle","serializeStyle","updateStyle","AdvTab","pack","packV","columns","maxWidth","doSyncSize","widthCtrl","heightCtrl","doSizeControls","f","constrained","checked","doUpdateSize","isContrained","oldWidth","oldHeight","newWidth","newHeight","round","updateSize","SizeManager","recalcSize","maxLength","ariaLabel","onBeforeCall","meta","getGeneralItems","imageListCtrl","generalFormItems","filetype","srcURL","prependURL","absoluteURLPattern","convertURL","RegExp","substring","documentBaseURI","toAbsolute","onSrcChange","onbeforecall","textStyle","formatter","getCssText","classes","MainTab","URL","createObjectURL","u","revokeObjectURL","global$5","noop","Uploader","defaultHandler","blobInfo","failure","progress","xhr","formData","withCredentials","credentials","upload","onprogress","loaded","total","status","json","path1","path2","responseText","location","basePath","FormData","append","filename","extend","handler","uploadBlob","onFileInput","Throbber","throbber","file","blobUri","uploader","finalize","show","then","dataUrl","editorUpload","blobCache","base64","activateTab","catch","err","acceptExts","UploadTab","accept","curry","fn","initialArgs","_i","restArgs","all","apply","submitForm","getRoot","uploadImagesAuto","showDialog","altCtrl","lastControl","bodyType","hasImageClass","className","toggleContentEditableState","toggleContentEditable","getAll","prependToContext","getTimeFormat","translate","getFormats","formats","daysShort","daysLong","monthsShort","monthsLong","addZeros","getDateTime","fmt","date","Date","getFullYear","getYear","getMonth","getDate","getHours","getMinutes","getSeconds","getDay","format","userTime","computerTime","timeElm","getStart","newTimeElm","datetime","insertBefore","updateElement","lastFormatState","menuItems","createMenuItems","lastFormat","getTargetList","editorSettings","target_list","getRelList","rel_list","getLinkClassList","link_class_list","link_assume_external_targets","link_context_toolbar","link_list","default_link_target","undefined","link_title","allow_unsafe_link_target","OpenUrl","link","href","rel","createEvent","initMouseEvent","dispatchEvent","appendClickRemove","opener","doc","encode","toggleTargetRules","isUnsafe","rules","newRel","removeTargetRules","filter","val","addTargetRules","sort","join","getAnchorElement","selectedElm","isImageFigure","isLink","unlinkImageFigure","fig","a","getParents","linkImageFigure","attrs","attachState","anchorElm","linkAttrs","attach","innerText","textContent","elements","indexOf","trimCaretContainers","global$6","buildListItems","delayedConfirm","setEditorTimeout","confirm","linkList","initialText","onlyText","textListCtrl","linkListCtrl","relListCtrl","targetListCtrl","classListCtrl","linkTitleCtrl","linkListChangeHandler","textCtrl","updateText","parent","inp","onkeyup","onpaste","anchorList","anchor","selected","unshift","buildAnchorListControl","assumeExternalTargets","insertLink","removeLink","resultData","createLinkList","getLink","getSelectedLink","gotoLink","getHref","targetEl","scrollIntoView","sel","contextmenu","isContextMenuVisible","startContainer","isCollapsed","metaKeyPressed","altKey","shiftKey","metaKey","hasOnlyAltModifier","self","readonly","element","toggleVisibility","Keyboard","Controls","onpostrender","addContextToolbar","called","t","isBr","NodeType","blockElements","isBlock","keepBookmarks","empty","isChildOf","getNormalizedPoint","childNodes","Range","outRng","rangeStart","rangeEnd","Bookmark","setupEndPoint","offsetNode","collapsed","restoreEndPoint","idx","nodeIndex","createRng","constant","not","args","never","always","none","NONE","eq","isNone","thunk","n","me","fold","s","isSome","getOr","getOrThunk","getOrDie","msg","getOrNull","getOrUndefined","or","orThunk","exists","forall","equals","equals_","toArray","freeze","some","constant_a","elementEq","Option","from","isType","isPrototypeOf","constructor","typeOf","isString","isBoolean","isFunction","isNumber","nativeSlice","nativePush","xs","pred","foldl","acc","flatten","head","last","HTMLElement","htmlElement","global$7","getParentList","selectionStart","getClosestListRootElm","getSelectedListItems","selectedBlocks","getSelectedBlocks","elms","listItemsElms","unique","findParentListItemsNodes","block","parentTableCell","findLastParentListNode","parentLists","getUniqueListRoots","listRoots","Selection","isList","getSelectedSubLists","parentList","isParentListSelected","querySelectorAll","findSubLists","getSelectedDlItems","getSelectedListRoots","selectedLists","firstList","subsequentLists","getSelectedLists","fromDom","Element","fromHtml","div","innerHTML","console","fromTag","tag","fromText","createTextNode","fromPoint","docElm","elementFromPoint","lift2","oa","ob","keys","compareDocumentPosition","Node","DOCUMENT_POSITION_CONTAINED_BY","unknown","major","minor","Version","detect","versionRegexes","agent","cleanedAgent","toLowerCase","regexes","firstMatch","group","Number","find$1","edge","chrome","opera","firefox","safari","isBrowser","current","nu$1","info","version","isEdge","isChrome","isIE","isOpera","isFirefox","isSafari","Browser","windows","android","linux","solaris","freebsd","isOS","nu$2","isWindows","isiOS","isAndroid","isOSX","isLinux","isSolaris","isFreeBSD","OperatingSystem","ios","osx","detect$1","candidates","userAgent","candidate","search","UaString","browsers","browser","oses","os","str","normalVersionRegex","checkContains","uastring","PlatformInfo","PlatformDetection","deviceType","isiPad","isiPhone","isAndroid3","isAndroid4","isTablet","isTouch","isPhone","iOSwebview","isWebView","DeviceType","detect$3","navigator","PlatformDetection$1","ELEMENT","ATTRIBUTE_NODE","CDATA_SECTION_NODE","COMMENT_NODE","DOCUMENT_NODE","DOCUMENT_TYPE_NODE","DOCUMENT_FRAGMENT_NODE","ELEMENT_NODE","ELEMENT$1","TEXT_NODE","PROCESSING_INSTRUCTION_NODE","ENTITY_REFERENCE_NODE","ENTITY_NODE","NOTATION_NODE","e1","e2","contains$1","d1","d2","is$1","selector","elem","msMatchesSelector","webkitMatchesSelector","mozMatchesSelector","children","child","cs","lastChild","before","fields","Immutable","marker","append$1","isElement","setAll","obj","props","k","each$1","rawSet","attributes","internalSet","property","getPropertyValue","isSupported","setProperty","deep","original","isDeep","cloneNode","clone$1","mutate","shallowAs","children$1","joinSegment","createSegment","listType","segment","writeShallow","cast","entry","newCast","depth","content","createItem","itemAttributes","appendItem","listAttributes","normalizeSegment","writeDeep","tail","segments","createSegments","joinSegments","populateSegments","isList$1","el","hasFirstChildList","isIndented","isSelected","cloneItemContent","li","normalizeEntries","entries","previousSiblingEntry","matchingEntry","source","parseItem","itemSelection","selectionState","currentItemEntry","createEntry","childListEntries","parseList","global$8","createTextBlock","contentNode","blockName","hasContentNode","getBlockElements","fragment","createFragment","forced_root_block","forced_root_block_attrs","outdentedComposer","createDocumentFragment","indentedComposer","composeList","contentDocument","getItemSelection","selectedListItems","reverse","listsIndentation","indentation","entrySets","sourceList","parseLists","entrySet","indentEntry","indentSelectedEntries","wasType","groupBy","composeEntries","DOM$1","SplitList","ul","tmpRng","bookmarks","newBlock","targetNode","setStartAfter","extractContents","indentDlItem","dlIndentation","dlItems","dl","outdentDlItem","selectionIndentation","isHandled","indentListSelection","outdentListSelection","flattenListSelection","updateListWithDetails","detail","updateListStyle","updateListAttrs","getEndPointNode","root","applyList","listItemName","getContentEditable","textBlocks","startNode","endNode","siblings","isBookmarkNode","getSelectedTextBlocks","listBlock","sibling","sib","sibStyle","detailStyle","hasCompatibleStyle","rename","_a","removeStyles","mergeWithAdjacentLists","shouldMerge","list1","list2","isValidLists","hasSameListStyle","elm2","toggleMultipleLists","hasListStyleDetail","newList","updateList","ToggleList","toggleList","selectedSubLists","toggleSingleList","DOM$2","normalizeList","NormalizeLists","findNextCaretContainer","isForward","nonEmptyBlocks","walker","getNonEmptyElements","next","hasOnlyOneBlockChild","moveChildren","fromElm","toElm","targetElm","unwrapSingleBlockChild","mergeLiElements","listNode","nestedLists","mergeForward","fromLi","toLi","mergeIntoEmptyLi","backspaceDeleteFromListToListCaret","otherLi","selectionStartElm","resolvedBookmark","mergeBackward","backspaceDeleteCaret","otherLi_1","parentBlock","removeBlock","backspaceDeleteIntoListCaret","backspaceDelete","backspaceDeleteRange","Delete","BACKSPACE","DELETE","queryListCommandState","command","addQueryStateHandler","TAB","setupTabKey","has","VideoScript","prefixes","trimPx","HtmlToData","isEphoxEmbed","validate","allow_conditional_comments","special","source1","source2","poster","getEphoxEmbedData","movie","videoScript","Mime","mime","mp3","wav","mp4","webm","ogg","swf","pop","addPx","setAttributes","updatedAttrs","splice","UpdateHtml","updateAll","hasImage","writer","sourceCount","comment","cdata","raw","styleMap","updateEphoxEmbed","imgAttrs","urlPatterns","regex","allowFullscreen","getUrl","pattern","exec","newUrl","_loop_1","DataToHtml","dataIn","embed","source1mime","source2mime","matchPattern","audioTemplateCallback","videoTemplateCallback","getIframeHtml","getFlashHtml","getAudioHtml","getScriptHtml","getVideoHtml","cache","loadedData","Service","embedHandler","dataToHtml","res","rej","wrappedResolve","response","embedPromise","defaultPromise","addPx$1","Size","getMaxWidth","getMaxHeight","setMaxWidth","setMaxHeight","onChange","embedChange","handleError","errorMessage","notificationManager","getSource","addEmbedHtml","handleInsert","beforeObjects","afterObjects","selectPlaceholder","setTimeout","populateMeta","advancedFormItems","update","dataEmbed","getData","embedTextBox","rows","forId","Sanitize","blocked","attrName","createPlaceholderNode","placeHolder","shortEnded","retainAttributesAndInnerHtml","transparentSrc","createPreviewIframeNode","previewWrapper","previewNode","shimNode","allowfullscreen","frameborder","sourceNode","attribs","ai","innerHtml","escape","isWithinEphoxEmbed","Nodes","ceFalse","specialElements","getSpecialElements","boolAttrs","getBoolAttrs","addAttributeFilter","realElm","innerNode","realElmName","unescape","$elm","ResolveName","hasClass","objectType","getPageBreakClass","getPlaceholderHtml","separatorHtml","pageBreakSeparatorRegExp","pagebreak_split_block","DetectProPlugin","log","clipboard","quirks","internal","isWordHtml","wordContent","ieFake","userIsInformedState","pasteFormat","shouldInformUserAboutPlainText","displayNotification","pasteHtml","pasteText","internalMimeType","internalMark","InternalHtml","toBRs","toBlockElements","rootTag","rootAttrs","blocks","tagOpen","encodeAllRaw","openContainer","tagClose","paragraphs","Newlines","global$9","global$a","domParser","shortEndedElements","getShortEndedElements","ignoreElements","makeMap","walk","currentNode","trimHtml","s1","s2","createIdGenerator","prefix","count","isMsEdge","isNumericList","found","patterns","convertFakeListsToProperLists","currentListNode","prevListNode","lastLevel","getText","txt","trimListStart","regExp","removeIgnoredNodes","_listIgnore","convertParagraphToLi","paragraphNode","level","_listLevel","wrap","nodeText","filterStyles","validStyles","outputStyles","WordFilter","preProcess","retainStyleProperties","spaces","floor","validElements","valid_elements","valid_children","rule","attributesOrder","unwrap","rootNode","filterWordContent","isWordContent","processResult","cancelled","filterContent","preProcessArgs","filteredContent","isRootContent","preProcess$1","hasEventListeners","isDefaultPrevented","tempBody","postProcessArgs","postProcessFilter","ProcessFilters","paste","isAbsoluteUrl","isImageUrl","linkSelection","pasteHtmlFn","extra","createLink","insertImage","createImage","SmartPaste","action","smartInsertContent","from$1","exports$1","module","exports","define","amd","EphoxContactWrapper","c","require","cachedSetTimeout","cachedClearTimeout","process","defaultSetTimout","defaultClearTimeout","runTimeout","fun","clearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","timeout","run","runClearTimeout","Item","array","nextTick","env","argv","versions","addListener","once","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","dir","umask","setImmediate","setTimeoutFunc","Promise","TypeError","_state","_handled","_deferreds","doResolve","handle","deferred","_immediateFn","cb","onFulfilled","onRejected","promise","newValue","finale","thisArg","_unhandledRejectionFn","Handler","reason","prom","arr","remaining","race","warn","_setImmediateFn","_setUnhandledRejectionFn","clearImmediate","immediateIds","nextImmediateId","Timeout","clearFn","_id","_clearFn","setInterval","clearInterval","unref","ref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","_onTimeout","promisePolyfill","boltExport","baseFn","callbacks","nCallback","isReady","cbs","LazyValue","pure","errorReporter","make","fab","aFutureB","toPromise","anonBind","futureB","toLazy","toCached","Future","par","asyncValues","asyncValue","mapM","futures","pasteHtml$1","internalFlag","getDataTransferItems","dataTransfer","legacyText","types","contentType","hasContentType","clipboardContent","mimeType","hasHtmlOrText","uniqueId","pasteImageData","clipboardData","paste_data_images","images","getAsFile","files","filter$1","getImagesFromDataTransfer","FileReader","uri","blobResults","imageItem","images_reuse_filename","m","extractFilename","Image","images_dataimg_filter","existingBlobInfo","findFirst","cachedBlobInfo","pasteImage","isKeyboardPasteEvent","registerEventHandlers","pasteBin","subject","keyboardPastePlainTextState","keyboardPasteEvent","clear","isSet","insertClipboardContent","isKeyBoardPaste","plainTextMode","isPlainTextHtml","getHtml","isDefaultContent","removePasteBinOnKeyUp","webkit","stopImmediatePropagation","clipboardEvent","getDoc","getClipboardContent","isBrokenAndroidClipboardEvent","getLastRng","stopPropagation","getPasteBinParent","delegatePasteEvents","pasteBinElm","pasteBinDefaultContent","isExternalPasteBin","isDefault","PasteBin","lastRng","lastRngCell","gecko","pasteBinClone","pasteBinClones","dirtyWrappers","cleanWrapper","copyAndRemove","shift","Clipboard","isWebKitFakeUrl","isDataUri","isPasteInsert","allow_html_data_urls","registerEventsAndFilters","noop$1","setHtml5Clipboard","iOS","setData","hasWorkingClipboardApi","clearData","setClipboardData","fallback","markedHtml","outer","inner","contenteditable","setStyles","top","overflow","range","offscreenRange","selectNodeContents","contextual","hasSelectedContent","isTableSelection","CutCopy","cut","copy","global$b","getCaretRangeFromEvent","getCaretRangeFromPoint","clientX","clientY","setFocusedRange","DragDrop","draggingInternallyState","dropContent","plainTextContent","content_1","PrePostProcess","postProcess","addPreProcessFilter","filterFunc","removeExplorerBrElementsAfterBlocks","explorerBlocksRegExp","removeWebKitStyles","webKitStyles","webKitStylesSetting","dom_1","node_1","after","inputStyles","decode","inputValue","currentValue","removeUnderlineAndFontInAnchor","Quirks","addPostProcessFilter","stateChange","getPreviewHtml","headHtml","contentStyle","getURI","contentCSS","bodyId","body_id","bodyClass","body_class","dirAttr","directionality","IframeContent","sandbox","previewHtml","encodeURIComponent","contentWindow","dialogHtml","dialogWidth","dialogHeight","iframeElm","getWin","print","isContentEditableFalse","FindReplaceText","findAndReplaceDOMText","replacementNode","captureGroup","blockElementsMap","hiddenTextElementsMap","shortEndedElementsMap","getMatchIndexes","cg","ownerDocument","getWhiteSpaceElements","replaceFn","startNodeIndex","endNodeIndex","innerNodes","atIndex","curNode","matchLocation","matchIndex","out","stepThroughMatches","makeReplacementNode","stencilNode_1","fill","elA","l","innerEl","replaceChild","elB","genReplacer","getElmIndex","findSpansByIndex","spans","getElementsByTagName","moveSelection","currentIndexState","forward","testIndex","removeNode","isMatchSpan","keepEditorSelection","hasNext","hasPrev","matchCase","wholeWord","markAllMatches","currentMatchIndex","hasMore","nextIndex","selectedText","updateButtonStates","statusbar","disabled","notFoundAlert","onClose","caseState","subtype","submit","separator","shortcuts","compose","fa","fb","identity","nativeIndexOf","ts","foldr","eachr","map$1","tupleMap","tuple","struct","reqMessage","required","unsuppMessage","unsupported","validateStrArr","checkDupes","everything","sorted","d","MixedBag","optional","keys$1","req","opt","COMMENT","DOCUMENT","TEXT","isType$1","isComment","isText","cached","inBody","set$1","setAll$1","get$1","getComputedStyle","getUnsafeProperty","getRaw","remove$1","removeProperty","internalRemove","DOCUMENT$1","bypassSelector","childElementCount","contains$2","owner","isRoot","stop","rawParent","prevSibling","prepend","firstChild$1","wrapper","after$1","rogue","remove$2","grid","address","detailnew","extended","rowdata","elementnew","rowdatanew","rowcells","rowdetails","bounds","descendants","ancestors$1","ancestors","children$2","descendants$1","base","ClosestOrAncestor","ancestor","ancestor$1","child$2","child$1","descendant$1","querySelector","one","closest$1","filterFirstLayer","LayerSelector","firstLayer","lookup","tags","neighbours","TableLookup","DetailsList","table","parentSection","parentName","cells","cell","rowspan","colspan","example","section","column","filterItems","warehouse","Warehouse","generate","access","maxRows","maxColumns","details","currentRow","cc","newpos","grid$1","getAt","findItem","comparator","filtered","justCells","statsStruct","makeCell","seenSelected","rowIndex","CopySelected","selectedSelector","house","stats","totalColumns","minRow","minCol","maxRow","maxCol","startRow","endRow","startCol","endCol","findSelectedStats","unselectedCells","totalRows","fillInGaps","emptyRows","clean","api","getOption","NodeValue","get$2","set$2","getEnd","elementsWithCursorPosition","isCursorPosition","hasCursorPosition","first","descend","child_1","last$1","descendantRtl","shallow","copy$1","cloneChildren","createCell","replica","pasteReplace","newRow","TableFill","formatsToClone","sourceDom","targetDom","docu","lastNode","oldCell","newCell","firstText","formatSelector","clonedFormat","cloneFormats","gap","isWithin","finishCol","finishRow","CellBounds","leftEdge","rightEdge","topEdge","bottomEdge","isRect","detailIsWithin","getAnyBox","startCell","finishCell","startCoords","finishCoords","sc","fc","detailA","detailB","CellGroup","CellFinder","finish","inside","innerCell","c1","c2","getWarehouse","TablePositions","deltaRow","deltaColumn","firstTable","lastTable","optStartCell","optLastCell","lastCell","TagBoundaries","DomUniverse","up","closest","down","copyTo","destination","as","insert","afterAll","appendAll","query","comparePosition","other","setText","isBoundary","isEmptyTag","leftRight","brokenPath","bisect","universe","ind","unsafeOne","look","commonElement","eq$1","ancestors$2","ps1","ps2","prune","pruned1","pruned2","shared","firstpath","secondpath","SubsetFn","ancs","common","finder","ps","topDown","startIndex","endIndex","sIndex","eIndex","unsafeSubset","sharedOne","all$1","breakToLeft$1","prior","breakToRight$1","second","breakPath$1","isTop","breaker","splits","breakage","right","nextChild","Parent","subset","breakToLeft","breakToRight","breakPath","DomParent","_universe","Identified","lookupTable","identify","getIsRoot","rootTable","boxes","startTable","finishTable","ancestorCells","lca","lcaTable","finishAncestorCells","startAncestorCells","CellSelection","sels","firstSelectedSelector","lastSelectedSelector","box","getLast","identified","expandTo","tbl","TableSelection","edges","firstAncestor","lastAncestor","fA","lA","attributeSelector","firstSelected","lastSelected","Ephemera","Adt","cases","constructors","adt","acase","argLength","branches","branchKeys","reqKey","params","type$1","multiple","single","SelectionTypes","cata","onNone","onMultiple","onSingle","selections","CellOperations","_env","noMenu","mergable","unmergable","paste$1","TableTargets","forMenu","notCell","pasteRows","generators","actions","cellSelection","extractSelected","getTextContent","serializeElements","domCell","targets","pasteCells","Dimension","getOffset","parseFloat","aggregate","properties","getOuter","cumulativeInclusions","api$1","getBoundingClientRect","get$3","api$2","get$4","getOuter$1","platform","getProp","px","num","toNumber","RuntimeSize","paddingTop","paddingBottom","borderTop","borderBottom","getCalculatedHeight","genericSizeRegex","percentageBasedSizeRegex","pixelBasedSizeRegex","setHeight","amount","normalizePixelSize","getter","setter","suffix","number","checkRange","newSize","convert","getTotalHeight","getHeightValue","getSpan","getRawWidth","normalizePercentageWidth","cellWidth","tableSize","pixelWidth","Sizes","setPixelWidth","setPercentageWidth","getPixelWidth","pixelMatch","percentMatch","normalizePixelWidth","choosePixelSize","getPercentageWidth","intWidth","choosePercentageSize","getGenericWidth","unit","setGenericWidth","getHeight","get$5","CellMutations","main","Position","firstDefinedOrZero","absolute","defaultView","scrollTop","pageYOffset","scrollLeft","pageXOffset","clientTop","clientLeft","viewport","offsetLeft","offsetTop","boxPosition","rowInfo","colInfo","rtlEdge","ltrEdge","getLeftEdge","getRightEdge","getTop","getTopEdge","getBottomEdge","findPositions","getInnerEdge","getOuterEdge","lines","cellOption","lastLine","BarPositions","delta","positions","optElements","rtl","step","ltr","ResizeDirection","TableDirection","directionAt","auto","isRtl","cols","TableGridSize","input","__assign","assign","cat","findMap","setIfNot","ignore","Redraw","newRows","newCells","renderOrRemoveSection","gridSection","sectionName","tb","isNew","tr","renderSection","removeSection","headSection","bodySection","footSection","clonedCell","supports","classList","add$1","clazz","add$2","has$1","deduce","rest","aa","extras","abs","decide","getBlock","isSingle","getFallback","inBlock","Blocks","rowsArr","col","namespace","dashNamespace","Styles","Bar","blocker","resizeBar","resizeRowBar","resizeColBar","destroy","wire","previous","drawBar","origin","cpOption","cp","bar","refreshGrid","hdirection","vdirection","rowPositions","tableWidth","rowBar","refreshRow","colPositions","tableHeight","colBar","refreshCol","each$2","bars","Bars","setCells","gridRow","getCell","GridRow","addCell","mutateCell","getCellElement","mapCells","cellLength","findDiff","comp","TableGrid","restOfRow","getRow","endColIndex","restOfColumn","getColumn","endRowIndex","Transitions","seen","ri","ci","updateSeen","rowCells","deriveRows","rendered","rowOfCells","findRow","toDetailList","findInWarehouse","operation","extract","adjustment","postAction","genWrappers","model","fromWarehouse","cursor","newElements","onCell","onPasteRows","lc","onCells","isValue","isError","_","onValue","mapError","toOption","onError","Result","fromOption","generator","rowFill","repititions","repeat","_row","colFill","Fitment","startAddress","gridA","gridB","rowRemainder","colRemainder","colRequired","rowRequired","rowDelta","colDelta","colLengthA","colLengthB","fillCols","MergingOperations","substitution","isToReplace","currentCell","uniqueCells","replacement","_loop_2","sub","isSpanning","matching","TableMerge","fittedGrid","mergeTables","fittedNewGrid","secondDelta","fittedOldGrid","ModificationOperations","between","exampleRow","exampleCol","replaceIn","isTarget","notStartRow","colIndex","notStartColumn","TransformOperations","targetRow","only","middle","ColumnContext","Deltas","neighbours$1","zero","newNext","minCellWidth","newThis","diffx","onLeft","singleColumnWidth","_prev","getSpan$1","CellUtils","hasColspan","hasRowspan","getInt","getRaw$1","getRawW","getRawH","getWidthFrom","getWidth","backups","deduced","getDeduced","getHeightFrom","ColumnSizes","getRawWidths","getPixelWidths","getPercentageWidths","getPixelHeights","getRawHeights","measures","Recalculations","widths","heights","pixelSize","getCellDelta","getWidths","setElementWidth","setTableWidth","newWidths","_delta","chooseSize","floatWidth","_newWidths","change","percentageSize","fallbackWidth","TableSize","getWarehouse$1","getTableWarehouse","Adjustments","deltas","dx","newSizes","newHeights","dy","newCellSizes","newRowSizes","baseWith","handleUnsupported","invalidKeys","incorrect","invalidTypeMessage","handleExact","exactly","verifyGenerators","elementToData","Generators","toData","nuFrom","recent","getOrInit","makeNew","replaceOrInit","combine","blockList","Structure","universe$1","DomStructure","TableContent","markCell","rightSiblingIsBlock","rightSibling","isListItem","contents","advancedBr","outcome","elementFromGrid","findIn","bundle","uniqueRows","currentDetail","uniqueColumns","gridifyRows","pasteDetails","wh","TableOperations","insertRowBefore","targetIndex","newGrid","insertRowsBefore","newG","insertRowAfter","insertRowsAfter","insertColumnBefore","insertColumnsBefore","insertColumnAfter","insertColumnsAfter","splitCellIntoColumns","splitCellIntoRows","eraseColumns","_comparator","_genWrappers","eraseRows","makeColumnHeader","unmakeColumnHeader","makeRowHeader","unmakeRowHeader","mergeCells","_warehouse","unmergeCells","gridify","nuGrid","pasteRowsBefore","mergedGrid","pasteRowsAfter","getBody$1","getPixelWidth$1","getPixelHeight","addSizeSuffix","removeDataStyle","dataStyleCells","ltr$1","rtl$1","Direction","getDirection","defaultTableToolbar","defaultStyles","defaultAttributes","getDefaultAttributes","getDefaultStyles","hasAdvancedCellTab","hasAdvancedRowTab","hasAdvancedTableTab","hasAppearanceOptions","shouldStyleWithCss","getCellClassList","getRowClassList","getTableClassList","isPixelsForced","fireNewRow","fireNewCell","fireObjectResizeStart","fireObjectResized","TableActions","lazyWire","isTableBody","cloneElements","getCloneElements","execute","guard","deleteRow","deleteColumn","CopyRows","selectedCells","slicedGrid","slicedDetails","Styles$1","firstChildStyle","currentStyle","checkChildren","updateStyleField","borderColor","backgroundColor","updateAdvancedFields","Helpers","createStyleForm","createColorPickAction","colorPickerCallback","getColorPickerCallback","formItemDefaults","alignH","onaction","extractAdvancedStyles","syncAdvancedStyleFields","isEqualNode","activeElement","onSubmitCellForm","cellElm","dataset","mceStyle","valign","CellDialog","matchNode","extractDataFromElement","generalCellForm","labelGapCalc","onSubmitRowForm","rowElm","toType","tableElm","oldParentElm","parentElm","switchRowType","RowDialog","generalRowForm","extractDataFromElement$1","DefaultRenderOptions","percentages","render$1","rowHeaders","columnHeaders","renderOpts","tbody","trs","placeCaretInCell","InsertTable","options","get$7","getOuter$2","fireEvents","selectFirstCellInTable","styleTDTH","onSubmitTableForm","captionElm","cellspacing","cellpadding","applyDataToElement","addVisual","TableDialog","isProps","colsCtrl","rowsCtrl","generalTableForm","extractDataFromElement$2","each$3","clipboardRows","getSelectionStartFromSelector","getSelectionStartCaption","getSelectionStartCell","getTableFromCell","actOnSelection","beforeSize","oldSize","resizeChange","copyRowSelection","pasteOnSelection","clonedRows","mceTableSplitCells","mceTableMergeCells","mceTableInsertRowBefore","mceTableInsertRowAfter","mceTableInsertColBefore","mceTableInsertColAfter","mceTableDeleteCol","mceTableDeleteRow","mceTableCutRow","mceTableCopyRow","mceTablePasteRowBefore","mceTablePasteRowAfter","mceTableDelete","cellOrCaption","func","mceInsertTable","mceTableProps","mceTableRowProps","mceTableCellProps","ResizeWire","view","editable","Event","handlers","trigger","event","typeDefs","registry","rawEvent","prevent","kill","mkEvent","bind$1","useCapture","wrapped","addEventListener","binder","removeEventListener","bind$2","merge$3","Styles$2","DragMode","DragSink","DragApi","MouseDrag","compare","sink","dragApi","layerClass","Blocker","mdown","forceDrop","mup","drop","mmove","move","mout","delayDrop","mutation","InDrag","events","onEvent","mode","reset","Movement","noDragState","inDragState","dragState","isOn","Dragging","rate","timer","movement","throttledDrop","cancel","throttle","runIfActive","go","Dragger","BarMutation","drag","delegate","Mutation","xDelta","yDelta","isContentEditableTrue","resizeBarDragging","BarManager","resizing","hoverTable","getResizer","_dataRow","_dataCol","currentCol","getDelta","adjustHeight","adjustWidth","startAdjust","mousedown","findClosestEditableTable","findClosestContentEditable","mouseover","refresh","hideBars","showBars","TableResize","manager","beforeResize","afterResize","startDrag","TableWire","createContainer","ResizeHandler","startW","startRawW","selectionRng","isTable","rawWire","objectResizing","hasObjectResizing","hasTableResizeBars","sz","rawTable","percentW","targetPercentW","newCellSizes_1","newCellSize","lazyResize","adt$1","CellLocation","detect$4","CellNavigation","SimRange","adt$2","Situ","onBefore","onOn","onAfter","situ","adt$3","domRange","relative","exact","exactFromRange","simRange","soffset","foffset","startSitu","finishSitu","getStart$1","selectNodeContentsUsing","relativeToNative","createRange","setEndBefore","setFinish","exactToNative","toRect","rect","adt$4","fromRange","diagnose","ranges","getRanges","rev","doDiagnose","asLtrRange","inRect","locateOffset","textnode","rangeForOffset","rectForOffset","maxX","curDeltaX","searchForPoint","locateNode","selectNode","rects","getClientRects","locate","searchInChildren","COLLAPSE_TO_LEFT","getCollapseDirection","createCollapsedNode","collapseDirection","locateInElement","cursorRange","locateInEmpty","searchTextNodes","boundedX","boundedY","locate$1","availableSearch","caretPositionFromPoint","caretRangeFromPoint","beforeSpecial","name$1","preprocessRelative","preprocessExact","after$3","makeRange","same","doSetNativeRange","getSelection","removeAllRanges","addRange","doSetRange","setRangeFromRelative","setBaseAndExtent","setLegacyRtlRange","toNative","getDomRange","preprocess","doGetExact","anchorNode","focusNode","anchorOffset","focusOffset","rangeCount","firstRng","getRangeAt","readRange","setToElement","get$9","getExact","getFirstRect$1","getFirstRect","getAtPoint","fromPoint$1","backward","getCellFirstCursorPosition","getNewRowCursorPosition","rootElements","TabContext","body_1","isRoot_1","Response","Situs","Util","convertToRange","makeSitus","detect$5","selectRange","cellSel","KeySelection","sync","annotations","newSels","traverse","backtrack","_direction","transition","sidestep","advance","successors","go$1","succ","Walkers","hone","isLeaf","seekLeft","seekRight","universe$2","before$4","before$3","after$5","after$4","point","adt$5","failedUp","failedDown","isRow","BeforeAfter","verify","bridge","beforeOffset","afterOffset","afterCell","beforeCell","beforeBounds","getRect","afterBounds","isOverlapping","_sharedRow","onSuccess","onFailedUp","onFailedDown","inParent","gatherer","cand","gather","handleParent","findBr","br","adjacent","indexInParent","BrTags","handleBr","tgt","analysis","nu$3","Carets","moveUp","caret","moveDown","moveBottomTo","moveTopTo","getBottom","toCaret","getElemBox","Rectangles","getRangedRect","getPartialBox","adt$6","retry","inOutsideBlock","isOutside","upMovement","adjuster","guessBox","higherCaret","downMovement","lowerCaret","adjustTil","numRetries","isAtTable","adjustForTable","situsFromPoint","guess","newCaret","moved","adjusted","getInnerHeight","checkScroll","scrollBy","Retries","tryUp","tryDown","ieTryUp","ieTryDown","getJumpSize","platform$1","scan","tryCursor","situs","fromSitus","tryAgain","tryAt","otherRetry","ieRetry","TableKeys","brNeighbour","findSpot","spot","detection","inSameTable","simulate","VerticalMovement","precheck","seekLeft$1","lastOffset","seekRight$1","findCell","KeyDirection","isKey","keycode","isUp","isDown","SelectionKeys","isBackward","isNavigation","Rect","sr","WindowBridge","exactAdt","clearSelection","setSelection","setExact","setRelativeSelection","setRelative","selectContents","getScrollY","_DOC","by","rc","InputHandlers","clearState","mouseup","_event","MouseSelection","clearToNavigate","keydown","realEvent","which","attempts","navigation","keyup","SelectionAnnotation","ephemera","removeSelectionAttributes","addSelectionAttribute","hasInternalTarget","CellSelection$1","handlerStruct","mouseHandlers","keyHandlers","handleResponse","hasShiftKey","ns","wrappedEvent","wrapEvent","isMouseEvent","isLeftMouse","button","mouseDown","mouseOver","mouseUp","each$4","toolbar","getToolbar","MenuItems","tableCtrls","cellCtrls","mergeCtrls","unmergeCtrls","noTargetDisable","ctrlEnable","pushTable","pushCell","cellOpt","cellDom","mergeCtrl","unmergeCtrl","selectGrid","tx","ty","focusCell","toggleClass","insertTable","hasTableGrid","ariaHideMenu","aria","hideAll","onhide","generateTableGrid","lastX","lastY","onmousemove","tableProperties","deleteTable","getApi","setClipboardRows","sugarRows","getClipboardRows","Selections","addTempAttr","hasTabNavigation","TextColor","colorMap","colors","defaultColorMap","getTextColorMap","getTextColorRows","getTextColorCols","ColorPickerHtml","hasColorPicker","getColorCellHtml","isNoColor","setDivColor","onButtonClick","_color","onPanelClick","buttonCtrl","currentColor","selectColor","hidePanel","customColorCells","lastId","resetColor","renderColorPicker","foreColor","ariaRemember","visualblocks_content_css","cssId","LoadCss","linkElements","VisualBlocks","enabledState","contentCss","Bindings","toggleActiveState","hasMenubar","getMenubar","getToolbarSize","getMenu","isSkinDisabled","skin","getResize","A11y","getUiContainer","uiContainer","UiContainer","getUiContainerDelta","containerPos","getPos","setUiContainer","ui_container","inheritUiContainer","fromCtrl","toCtrl","createToolbar","buttonGroup","toolbarItems","itemName","bindSelectorChanged","selectorChanged","disabledStateSelector","initialized","Toolbar","toolbars","defaultToolbar","mainToolbar","getIndexedToolbars","getToolbars","ariaRoot","toClientRect","geomRect","movePanelTo","moveTo","userConstrain","elementRect","contentAreaRect","panelRect","ContextToolbars","scrollContainer","getContextToolbars","contextToolbars","reposition","shouldShow","relPos","relRect","testPositions","getInlineToolbarPositionHandler","removed","targetRect","clientRect","controlSelection","isResizable","inflate","findBestRelativePosition","clamp","relativePosition","intersect","cls","toggle","togglePositionClass","pos1","pos2","hideAllFloatingPanels","repositionHandler","requestAnimationFrame","findFrontMostMatch","showContextToolbar","autofix","fixed","oncancel","reposition_1","uiContainer_1","getScrollContainer","bindScrollEvent","renderTo","reflow","hideAllContextToolbars","parentsAndSelf","defaultMenus","edit","tools","help","createMenuNameItemPair","hasItemName","namedMenuItems","namedMenuItem","isSeparator","createMenu","editorMenuItems","menus","removedMenuItems","menuButton","isUserDefined","menuItemsPass1","menuItemsPass2","cleanupMenu","Menubar","menuButtons","defaultMenuBar","getDefaultMenubar","getRemovedMenuItems","menubar","enabledMenuNames","resizeTo","containerElm","containerSize","iframeSize","getMinWidth","getMinHeight","Resize","dw","dh","sidebar","callbackName","showPanel","sidebars","btnCtrl","findSidebar","visible","hidePanels","Sidebar","SkinLoaded","_skinLoaded","editArea","editAreaContainer","Iframe","theme","resizeHandleCtrl","startSize","skinUiCss","styleSheetLoader","load","onResizeStart","onResize","deltaX","deltaY","hasStatusbar","brandingLabel","isBrandingEnabled","switchMode","renderBefore","isReadOnly","setMode","iframeContainer","funcs","getElementById","getRuntimeStyle","setHTML","isStatic","isFixed","calculateRelativePosition","ctrlElm","selfW","selfH","targetW","targetH","getWindowViewPort","getViewPortRect","customUiContainer","scrollWidth","scrollHeight","getUiContainerViewPort","Movable","testMoveRel","rels","viewPortRect","moveRel","moveBy","layoutRect","constrain","constrainToViewport","repaint","BoxUtils","getSide","computedStyle","ClassList","_map","_change","curState","clsValue","Collection","Collection$1","proto","expression","chunker","whiteSpace","Selector","init","compile","filters","direct","compileNameFilter","compileIdFilter","compileClassesFilter","cmp","check","compileAttrFilter","notSelectors","parseChunks","compilePsuedoFilter","pseudo","selectors","_selectors","si","sl","fi","fl","collect","uniqueItems","__checked","prop","Collection$2","Binding","otherModel","otherName","bindings","fromSelfToOther","_bindings","global$c","isNode","isEqual","animationFrameRequested","Control","ObservableObject","Mixins","oldValue","dirtyCtrls","ReflowQueue","_layout","isNative","hasMouseWheelEventSupport","classPrefix","idCounter","proto$1","Statics","defaultClasses","applyClasses","Defaults","_aria","_elmCache","borderBox","paddingBox","marginBox","hidden","Properties","getContainerElm","getParentCtrl","controlIdLookup","initLayoutRect","autoResize","startMinWidth","startMinHeight","initialSize","deltaW","deltaH","maxW","maxH","maxHeight","_layoutRect","contentW","contentH","innerW","innerH","minW","minH","scrollW","_lastLayoutRect","newRect","lastLayoutRect","deltaWidth","deltaHeight","repaintControls","curRect","bodyStyle","bodyElm","borderW","borderH","lastRepaintRect","_lastRepaintRect","_hasBody","updateLayoutRect","_lastRect","getEventDispatcher","resolveCallbackName","bubble","isPropagationStopped","parentControls","$el","blur","ariaTarget","newItems","controls","_eventsRoot","renderHtml","preRender","render","parentEventsRoot","_nativeEvents","bindPendingEvents","display","bindStates","parentCtrl","parentWidth","parentHeight","rootElm","offsetParent","_eventDispatcher","toggleEvent","eventCtrl","eventRootCtrl","nativeEvents","mouseLeaveHandler","_lastHoverCtrl","mouseEnterHandler","lastParents","lastCtrl","fixWheelEvent","wheelDelta","wheelDeltaX","eventRootDelegates","_delegates","_hasMouseEnter","Control$1","hasTabstopData","KeyboardNavigation","focusedElement","focusedControl","getRole","getParentRole","getAriaProp","isTextInputElement","getFocusElements","canFocus","getNavigationRoot","targetControl","navigationRoot","moveFocusToIndex","moveFocus","lastAriaIndex","submenu","parentRole","enter","handleNonTabOrEscEvent","tab","focusFirst","focusElements","selectorCache","Container","_super","_items","bodyClasses","containerCls","keyboard","focusCtrl","keyboardNav","oldItem","newItem","ctrlItems","defaultType","renderNew","curItems","beforeItems","afterItems","recalc","lastRect","updateWithTouchData","changedTouches","DragHelper","$eventOverlay","downButton","startX","startY","handleElement","handleElm","docSize","getDocumentSize","screenX","screenY","runtimeStyle","zIndex","opacity","appendTo","documentClickHandler","documentScrollHandler","windowResizeHandler","hasModal","Scrollable","renderScroll","repaintScroll","hasScrollH","hasScrollV","repaintAxis","axisName","posName","sizeName","contentSizeName","hasScroll","ax","scrollBarElm","scrollThumbElm","ratio","posNameLower","sizeNameLower","autoScroll","_hasScroll","addScrollAxis","deltaPosName","scrollStart","axisId","draghelper","addScroll","bodyEl","Panel","_preBodyHtml","Resizable","resizeToContent","resizeBy","visiblePanels","zOrder","bindDocumentClickHandler","clickCtrl","skipOrHidePanels","repositionPanel","scrollY","toggleFixedChildPanels","_autoFixY","addRemove","topModal","FloatPanel","modal","modalBlockEl","currentZIndex","docElm_1","clientWidth_1","clientHeight_1","bindWindowResizeHandler","$modalBlockEl_1","prefix_1","popover","describedBy","removeVisiblePanel","bodyRole","isFixed$1","inlineToolbarContainer","Inline","fixedToolbarContainer","getFixedToolbarContainer","_fixed","bodyPos","scrollContainerPos","content_editable","time","ProgressState","Render","skinUrl","skin_url","skinName","baseURL","getSkinUrl","isInline","Tooltip","Widget","tooltips","_tooltip","disable","Progress","setValue","updateLiveRegion","ctx","progressBar","Notification","closeButton","notificationStyle","NotificationManagerImpl","getEditorContainer","getElement","closeCallback","extendedArgs","notif","notification","notifications","prePositionNotifications","firstItem","positionNotifications","getArgs","oldMetaValue","toggleFullScreenState","contentValue","overrideViewPort","toggleBodyFullScreenClasses","_fullscreen","checkFullscreenWindows","Window","closeClass","needsRecalc","headerW","headEl","headerH","headerHtml","footerHtml","fullscreen","slowRendering","_timer","getTime","_initial","startPos","dragHelper","getContentWindow","ifr","desktop","lastSize_1","handleWindowResize","MessageBox","OK","OK_CANCEL","YES_NO","YES_NO_CANCEL","msgBox","createButton","primary","onClick","onCancel","ThemeApi","renderUI","getNotificationManagerImpl","getWindowManagerImpl","commands","features","choiceCallback","getParams","setParams","Layout","firstControlClass","lastControlClass","containerClass","firstClass","lastClass","lastItem","controlClass","AbsoluteLayout","Button","btnStyle","btnElm","ariaPressed","textHtml","textCls","setButtonText","$span","iconElm","BrowseButton","click","ButtonGroup","Checkbox","global$d","ComboBox","subinput","showMenu","statusLevel","statusMessage","lineHeight","openElm","innerPadding","inputElm","documentMode","statusHtml","openBtnHtml","extraAttrs","placeholder","showAutoComplete","term","previewUrl","hideMenu","statusIconElm","focusIdx","DOWN","UP","ColorBox","repaintColor","PanelButton","panelSettings","popoverAlign","DOM$3","ColorButton","onClickHandler","global$e","ColorPicker","hsv","hueRootElm","huePointElm","svRootElm","svPointElm","pageX","pageY","updateColor","hueUpdate","hue","updateSaturationAndValue","updateHue","toHsv","_repaint","_svdraghelper","_hdraghelper","_rendered","hueHtml","stops","gradientPrefix","stopsList","getOldIeFallbackHtml","DropZone","cfg","hidefocus","toggleDragClass","re","Path","_getDataPathHtml","ElementPath","isHidden","elementpath","outParents","FormItem","Form","formItem","recalcLabels","maxLabelWidth","labels","labelCtrl","labelWidth","FieldSet","unique$1","windows$1","hasContentEditableState","getElementText","getOrGenerateId","random","isValidAnchor","isAnchor","isEditable","isHeader","isChildOfContentEditableTrue","isValidHeader","headerTarget","headerId","getLevel","anchorTarget","anchorId","anchorText","getTargetElements","hasTitle","LinkTargets","getHeaderTargets","getAnchorTargets","history","toMenuItem","staticMenuItem","getSetting","defaultValue","fileType","fromHistoryMenuItems","historyItems","uniqueHistory","isUniqueUrl","fromMenuItems","toMenuItems","typeahead_urls","filterByQuery","anchorMenuItems","topAnchor","bottomAchor","lowerCaseTerm","setupAutoCompleteHandler","autocomplete","linkTargets","linkDetails","getTitle","addToHistory","setupLinkValidatorHandler","validatorHandler","filepicker_validator_handler","uiState","statusToUiState","FilePicker","clearHistory","actionCallback","fileBrowserCallback","fileBrowserCallbackTypes","activeEditor","file_picker_types","file_browser_callback_types","file_picker_callback","file_browser_callback","FitLayout","contLayoutRect","FlexLayout","contPaddingBox","contSettings","totalFlex","availableSpace","ctrlLayoutRect","maxSize","maxAlignEndPos","minSizeName","maxSizeName","beforeName","innerSizeName","deltaSizeName","alignAxisName","alignInnerSizeName","alignSizeName","alignMinSizeName","alignBeforeName","alignAfterName","alignDeltaSizeName","alignContentSizeName","maxSizeItems","maxFlexSize","FlowLayout","endClass","descendant","toggleFormat","addFormatChangedListener","changed","formatChanged","postRenderFormatToggle","Align","alignFormats","defaultAlign","alignMenuItems","onShowMenu","formatName","alignleft","aligncenter","alignright","alignjustify","alignnone","getFirstFont","fontFamily","createFontNameListBoxChangeHandler","queryCommandValue","font","findMatchingValue","registerButtons","fonts","createFormats","font_formats","getFontItems","fixedWidth","FontSelect","toPt","fontSize","precision","factor","pow","findMatchingValue$1","pt","createFontSizeListBoxChangeHandler","registerButtons$1","fontsizeFormats","fontsize_formats","getFontSizeItems","FontSizeSelect","hideMenuObjects","canApply","hideFormatMenuItems","Formats","formatMenu","newFormats","defaultStyleFormats","register","style_formats_merge","style_formats","itemDefaults","preview","queryCommandState","createFormatMenu","registerMenuItems","style_formats_autohide","registerButtons$2","createListBoxChangeHandler","buildMenuItems","FormatSelect","createFormats$1","block_formats","lazyFormatSelectBoxItems","createCustomMenuItems","names","nameList","isSeparator$1","trimMenuItems","menuItems2","createInsertMenu","insertButtonItems","insert_button_items","outputMenuItems","createContextMenuItems","InsertButton","oncreatemenu","registerButtons$3","registerButtons$4","bold","italic","underline","strikethrough","subscript","superscript","registerFormatButtons","outdent","indent","selectall","visualaid","newdocument","removeformat","registerCommandButtons","blockquote","registerCommandToggleButtons","SimpleControls","registerMenuItems$1","toggleUndoRedoState","checkState","typeFn","UndoRedo","registerMenuItems$2","registerButtons$5","toggleVisualAidState","hasVisual","VisualAid","registerMenuItems$3","FormatControls","setup","setupRtlMode","setupHideFloatPanels","setupUiContainer","GridLayout","posX","posY","ctrlSettings","spacingH","spacingV","alignV","maxY","ctrlMinWidth","ctrlMinHeight","availableWidth","availableHeight","reverseRows","colWidths","rowHeights","sqrt","flexV","flexWidths","Iframe$1","InfoBox","severity","Label","strong","startMinH","targetCtrl","forName","Toolbar$1","MenuBar","MenuButton","_renderOpen","animate","activeMenu","menuLayoutRect","selfBottom","isChildOf$1","hasVisibleSiblingMenu","overCtrl","Menu","itemsFactory","hideThrobber","requestTime","_hasIcons","ListBox","lastItemCtrl","_values","setSelected","menuValues","valueExists","getSelectedItem","selectedItem","hasMenus","MenuItem","_parentMenu","_lastRel","iconHtml","escapeRegExp","markMatches","boldMatches","mac","convertShortcut","textElm","_textStyle","hover","toggleTextStyle","Radio","ResizeHandle","resizeDragHelper","createOptions","strOptions","SelectBox","_options","minVal","maxVal","setAriaProp","updateSliderHandle","shortSizeName","stylePosName","handleEl","orientation","_minValue","_maxValue","previewFilter","Slider","minValue","maxValue","_initValue","screenCordName","alter","fromFraction","handleKeyboard","startHandlePos","maxHandlePos","handlePos","_dragHelper","handleDrag","Spacer","SplitButton","mainButtonElm","menuButtonElm","_menuBtnText","StackLayout","TabPanel","activeTabElm","activeTabId","tabsHtml","activeTab","targetParent","headH","TextBox","Factory","ie11","ie12","iDevice","fileApi","phone","tablet","windowsPhone","isObject","isNull","rawIndexOf","partition","pass","fail","difference","a1","a2","nav","matchMediaQuery","matchMedia","appName","requestAnimationFramePromise","Env","caretAfter","cacheSuffix","experimentalShadowDom","canHaveCSP","promiseObj","asap","immediateFn","wrappedSetTimeout","wrappedSetInterval","debounce","Delay","requestAnimationFrameFunc","vendors","setEditorInterval","mouseEventRe","deprecated","keyLocation","layerX","layerY","returnValue","webkitMovementX","webkitMovementY","keyIdentifier","returnFalse","returnTrue","addEvent","capture","attachEvent","removeEvent","detachEvent","fix","originalEvent","srcElement","defaultTarget","composedPath","getTargetFromShadowDom","eventDoc","cancelBubble","isImmediatePropagationStopped","hasIsDefaultPrevented","bindOnReady","eventUtils","domLoaded","isDocReady","readyState","readyHandler","waitForDomLoaded","tryScroll","doScroll","EventUtils","expando","hasFocusIn","hasMouseEnterLeave","mouseEnterLeave","mouseenter","mouseleave","executeHandlers","callbackList","fakeName","nativeHandler","defaultNativeHandler","related","currentTarget","relatedTarget","eventMap","parentWindow","support","Expr","isXML","tokenize","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","preferredDoc","dirruns","classCache","createCache","tokenCache","compilerCache","sortOrder","strundefined","MAX_NEGATIVE","hasOwn","push_native","indexOf$1","whitespace","identifier","pseudos","rtrim","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","rquickExpr","rsibling","rescape","runescape","funescape","escaped","escapedWhitespace","high","els","Sizzle","results","seed","groups","nid","newContext","newSelector","getElementsByClassName","qsa","toSelector","testContext","qsaError","cacheLength","markFunction","siblingCheck","cur","diff","sourceIndex","createInputPseudo","createButtonPseudo","createPositionalPseudo","argument","matchIndexes","hasCompare","getById","attrId","tmp","disconnectedMatch","adown","bup","sortDetached","aup","ap","bp","expr","matchesSelector","attrHandle","getAttributeNode","specified","uniqueSort","duplicates","detectDuplicates","sortStable","createPseudo","preFilter","excess","unquoted","nodeNameSelector","operator","what","simple","ofType","xml","outerCache","useCache","setFilters","matched","matcher","unmatched","lang","elemLang","hash","hasFocus","tabIndex","enabled","selectedIndex","header","even","odd","lt","gt","nth","radio","checkbox","password","tokens","addCombinator","combinator","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","elems","contexts","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","parseOnly","soFar","preFilters","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","matcherFromGroupMatchers","token","compiled","isArray$1","findIndex$1","ArrUtils","reduce","collection","iteratee","accumulator","whiteSpaceRegExp","delim","ext","sp","cn","scn","de","createNS","onCreate","static","explode","_addCacheSuffix","push$1","slice$1","rquickExpr$1","skipUniques","isDefined","isString$1","fragDoc","frag","domManipulate","targetNodes","sourceItem","getElementDocument","DomQuery","makeArray","lastParent","newWrapper","numericCssMap","booleanMap","propFix","for","cssFix","float","attrHooks","cssHooks","whiteSpaceRegExp$1","trim$1","hook","removeAttr","camel","dashed","host","prependTo","replaceWith","wrapAll","wrapInner","existingClassName","classState","object","until","siblingName","firstSibling","parentsUntil","nextUntil","prevUntil","overrideDefaults","appendHooks","targetHooks","hooks","maxlength","zoom","find$2","opera$1","android$1","trim$2","rTrim","hasOwnProperty$1","bifilter","Recurse","recurse","contains$3","prevSiblings","nextSiblings","browser$1","firstElement","bodyTop","captionTop","captionHeight","getTableCaptionDeltaY","module$1","StyleSheetLoader","maxLoadTime","idCount","loadedStates","appendToHead","loadedCallback","errorCallback","startTime","passed","failed","wait","testCallback","waitCallback","waitForWebKitLinkLoaded","styleSheet","styleSheets","ownerNode","owningElement","waitForGeckoLinkLoaded","cssRules","sheet","async","defer","contentCssCors","crossOrigin","webKitChunks","loadF","unbox","loadAll","urls","TreeWalker","findSibling","startName","prev2","findPreviousNode","namedEntities","baseEntities","reverseEntities","lazyLookup","mapToObject","isHeading","isTextBlock","isVoid","isTableSection","isTableCell","isWsPreserveElement","isNodeType","isElement$1","matchNodeNames","isText$1","isDocument","isDocumentFragment","isBr$1","isRestrictedNode","getPrototypeOf","hasPropValue","propName","propValue","hasAttributeValue","matchStyleValues","computed","isBogus","isBogusAll","trimNode","trimmedLength","previousIsSpan","nextIsSpan","surroundedBySpans","TrimNode","makeMap$1","attrsCharsRegExp","textCharsRegExp","rawCharsRegExp","entityRegExp","asciiMap","buildEntitiesLookup","radix","entity","encodeRaw","encodeNumeric","encodeNamed","entities","Entities","getEncodeFunc","entitiesMap","nameMap","named","numeric","nativeDecode","mapCache","dummyObj","makeMap$2","extend$1","explode$1","inArray$1","compileElementMap","Schema","invalidStyles","schemaItems","whiteSpaceElementsMap","selfClosingElementsMap","boolAttrMap","validClasses","nonEmptyElementsMap","moveCaretBeforeOnEnterElementsMap","textBlockElementsMap","textInlineElementsMap","patternElements","customElementsMap","createLookupTable","option","extendWith","globalAttributes","blockContent","phrasingContent","flowContent","html4BlockContent","html4PhrasingContent","ni","arrayToMap","addAttrs","schemaItem","script","compileSchema","verify_html","valid_styles","invalid_styles","valid_classes","patternToRegExp","addValidElements","ei","al","attrData","elementName","attrType","outputName","globalAttributesOrder","elementRuleRegExp","attrRuleRegExp","hasPatternsRegExp","paddEmpty","removeEmpty","removeEmptyAttrs","attributesRequired","attributesDefault","attributesForced","forcedValue","validValues","attributePatterns","setValidElements","addCustomElements","customElements","customElementRegExp","text_block_elements","block_elements","cloneName","customRule","elmName","addValidChildren","validChildren","childRuleRegExp","getElementRule","custom_elements","extended_valid_elements","dd","dt","th","thead","tfoot","legend","area","param","parentsRequired","invalid_elements","getValidStyles","getValidClasses","getInvalidStyles","getTextInlineElements","getSelfClosingElements","getMoveCaretBeforeOnEnterElements","isValidChild","isValid","attrPatterns","getCustomElements","encodingItems","rgbRegExp","urlOrStrRegExp","styleRegExp","trimRightRegExp","encodingLookup","invisibleChar","isEncoded","urlConverter","url_converter","urlConverterScope","url_converter_scope","compress","noJoin","canCompress","keepSlashes","decodeSingleHexSequence","escSeq","decodeHexSequences","processUrl","url2","url3","str2","allow_script_urls","scriptUrl","allow_svg_data_urls","lastIndex","serializeStyles","styleList","each$5","grep$1","simpleSelectorRe","whiteSpaceRegExp$2","updateInternalStyleAttr","rawValue","findNodeIndex","lastNodeType","DOMUtils","_this","addedStyles","counter","boundEvents","ownEvents","proxy","getElementsByName","$$","defaultVal","getAttribs","originalValue","onSetAttrib","attrElm","root_element","selectorVal","_findSib","canHaveHTML","newElm","keepChildren","$node","oldElm","stdMode","boxModel","clone_1","argWin","actWin","getNext","getPrev","outHtml","update_styles","stylesArg","removeAllAttribs","removeAttributeNode","addStyle","styleElm","loadCSS","getOuterHTML","setOuterHTML","reference","referenceNode","attrNode","findCommonAncestor","pe","rgbVal","brCount","bogusVal","splitElm","replacementElm","bef","aft","pa","getContentEditableParent","dumpRng","getContext","keepValues","keep_values","keepUrlHook","setupAttrHooks","DOMUtils$1","each$6","grep$2","isFunction$1","ScriptLoader","states","scriptLoadedCallbacks","queueLoadedCallbacks","loading","isDone","markDone","loadQueue","loadScripts","scripts","failures","execCallbacks","loadingScripts","onreadystatechange","loadScript","notifyCallbacks","each$7","AddOnManager","_listeners","dependencies","createUrl","baseUrl","dep","resource","loadDependencies","addOnUrl","deps","urlString","lastIndexOf","instance","requireLangPack","languages","language","languageLoad","addOn","listener","addComponents","pluginName","waitFor","PluginManager","ThemeManager","remove$3","cleanClass","has$2","annotation","dataAnnotation","dataAnnotationId","annotationName","an","newStart","getAttr","uid","findMarkers","changeCallbacks","withCallbacks","updateCallbacks","callbackMap","outputData","onNodeChange","fireNoAnnotation","fireCallbacks","setup$1","span","identifyParserNode","persistent","docDom","contentElements","Zwsp","isElement$2","isText$2","isCaretContainerBlock","isCaretContainerInline","isCaretContainer","hasContent","isBeforeInline","isAtStart","isAfterInline","isAtEnd","insertBlock","blockNode","startsWithCaretContainer","endsWithCaretContainer","showCaretContainerBlock","caretContainer","brs","lastBr","isContentEditableTrue$1","isContentEditableFalse$1","isBr$2","isText$3","isInvalidTextElement","isAtomicInline","isTable$1","isCaretContainer$1","isCaretCandidate","isNonUiContentEditableFalse","isUnselectable","isEditableCaretCandidate","isInEditable","toStart","isValidOverflow","overflowY","rect1","rect2","isAbove","halfHeight","isBelow","containsXY","overflowX","getSelectedNode","extendingChars","isExtendingChar","ch","slice$2","Predicate","isElement$3","isCaretCandidate$1","isBlock$1","isFloated","isValidElementCaretCandidate","isNotPre","isText$4","isBr$3","resolveIndex","isWhiteSpace","isRange","isHiddenWhiteSpaceRange","isZeroRect","clientRects","brNode","nbsp","getBrClientRect","ec","so","eo","newRng","getBoundingClientRectWebKitText","collapseAndInflateWidth","newClientRect","getCaretPositionClientRects","caretPosition","beforeNode","addUniqueAndValidRect","addCharacterOffset","CaretPosition","toRange","isVisible","fromRangeStart","fromRangeEnd","isTextPosition","isElementPosition","HDirection","CaretPosition$1","isText$5","isBogus$1","nodeIndex$1","normalizedParent","getChildNodes","equal","createPathItem","numTextFragments","normalizedNodeIndex","create$2","outputOffset","normalizedTextOffset","resolve$2","resolvePathItem","dataLen","targetOffset","findTextPosition","trimEmptyTextNode","rangeInsertNode","insertNode","insertFragment","isContentEditableFalse$2","getPoint","trimmedOffset","getNormalizedTextOffset","findIndex$2","moveEndPoint","normalizeTableCellSelection","getOffsetBookmark","findAdjacentContentEditableFalseElm","getLocation","createBookmarkSpan","filled","getPersistentBookmark","rng2","endBookmarkNode","startBookmarkNode","keep","GetBookmark","getCaretBookmark","getRangeBookmark","getUndoBookmark","CARET_ID","isCaretNode","getParentCaretContainer","isElement$4","isText$6","setNodeValue","trimCount","trimmedText","removeUnchanged","remove$5","removeElementAndReposition","newPosition","removeTextCaretContainer","removeTextAndReposition","caretContainerNode","getNodeValue","CaretContainerRemove","removeAndReposition","removeElementCaretContainer","browser$2","isContentEditableFalse$3","getAbsoluteClientRect","scrollX","rootRect","FakeCaret","cursorInterval","lastVisualCaret","contentEditableFalseNodes","deleteData","trimInlineCaretContainers","caretState","startBlink","isTableCell$1","textNode","splitText","insertInline","getCss","isFakeCaretTableBrowser","isFakeCaretTarget","isContentEditableFalse$4","isBlockLike","isCaretContainer$2","isCaretContainerBlock$1","isElement$5","isCaretCandidate$2","isForwards","isBackwards","skipCaretContainers","findNode","predicateFn","getParentBlock","isInSameBlock","caretPosition1","caretPosition2","getChildNodeAtRelativeOffset","relativeOffset","beforeAfter","isNodesInSameBlock","node1","node2","lean","before$2","normalizeRange","leanLeft","leanRight","getRelativeCefElm","getNormalizedRangeEndPoint","normalizedRange","getElementFromPosition","getVisualCaretPosition","walkFn","isMoveInsideSameBlock","to","inSameBlock","isContentEditableFalse$5","isText$7","isElement$6","isBr$4","isCaretCandidate$3","isAtomic$1","isAtomicContentEditableFalse","isEditableCaretCandidate$1","nodeAtIndex","getCaretCandidatePosition","findCaretPosition","nextNode","rootContentEditableFalseElm","Forwards","moveForwardFromBr","CaretWalker","Backwards","isBeforeOrStart","isAfterOrEnd","isBeforeAfterSameElement","shouldSkipPosition","fromPosition","navigate","navigateIgnore","ignoreFilter","positionIn","afterElement","walkToPositionIn","nextPosition","prevPosition","CaretFinder","firstPositionIn","lastPositionIn","addBogus","tryFindRangePosition","padEmptyCaretContainer","insertZwsp","setEndPoint","isValidTextNode","appendData","ResolveBookmark","isPathBookmark","resolvePaths","isStringPathBookmark","resolveCaretPositionBookmark","isIdBookmark","o1","o2","endPos","spos","epos","resolveId","isIndexBookmark","resolveIndex$1","isRangeBookmark","Bookmarks","isInlineBlock","isWhiteSpaceNode","normalizeStyleValue","FormatUtils","moveStart","getNonWhiteSpaceSibling","inc","ed","replaceVars","vars","isEq","str1","getTextDecoration","decoration","isBookmarkNode$2","getParents$2","isWhiteSpaceNode$1","isTextBlock$2","findLeaf","isBogusBr","findParentContentEditable","findSpace","findWordEndPoint","lastTextNode","findSelectorEndPoint","curFormat","findBlockEndPoint","scopeRoot","findParentContainer","block_expand","ExpandRange","endPoint","leaf","excludeTrailingWhitespace","expand","each$8","RangeWalk","startPoint","exclude","collectSiblings","findEndPoint","walkBoundary","wrapName","isZeroWidth","isAnnotation","makeAnnotation","eDoc","decorate","_b","getOwnPropertySymbols","propertyIsEnumerable","__rest","master","_c","_d","_e","add$3","annotate","newWrappers","finishWrapper","processElements","processElement","wrap$1","processNodes","annotateWithBookmark","initialRng","shouldApplyToTrailingSpaces","applyWordGrab","Annotator","changes","annotationChanged","directory","markers","nodesAlready","findAll","map$2","listItems$1","isListItemPadded","isPadding","trimListItems","getParentLi","findLastOf","caretPos","newCaretPos","findFirstIn","InsertList","nonEmptyElements","hasOnlyOneChild","isPaddingNode","isPaddedEmptyBlock","isEmptyFragmentElement","domFragment","cleanupDomFragment","toDomFragment","liTarget","liElms","isAt","caretWalker","newPos","beforeRng","afterRng","cloneContents","getSplit","insertMiddle","each$9","ElementUtils","compareObjects","obj1","obj2","PaddingBr","allBrs","rawNode","getLastChildren","lastChildPrevSibling","makeMap$3","Writer","indentBefore","indentAfter","htmlOutput","indent_before","indent_after","entity_encoding","element_format","pi","doctype","HtmlSerializer","sortedAttrs","elementRule","expected","normalizeBlockSelectionRange","commonAncestorContainer","newEndPos","createRange$1","RangeNormalizer","isTableCell$2","selectionSetContent","isAfterNbsp","insertData","insertHtmlAtCaret","bookmarkHtml","hasSiblingText","trimOrPadLeftRight","caretElement","parentElement","canHaveChildren","trimNbspAfterDeleteAndPadValue","parserArgs","markFragmentElements","_selectionOverrides","showBlockCaretContainer","invalid","validInsertion","textInlineElements","root_1","elementUtils_1","testNode","reduceInlineTextElements","parentEditableFalseElm","nextRng","getContentEditableFalseParent","isPartOfFragment","findNextCaretRng","moveSelectionToMarker","trimBrsFromTableCell","InsertContent","processValue","strongRtl","getBodySetting","bodyObj","normalizePosition","normalizeForwards","normalizeBackwards","InlineUtils","isInlineTarget","findRootInline","findInlineParents","isAtZwsp","hasSameParentBlock","block1","block2","DeleteUtils","isBeforeRoot","placeCaretInEmptyBody","fromPos","firstPos","lastPos","normalizedFirstPos","normalizedLastPos","normalizedFromPos","nextPos","prevPos","hasWhitespacePreserveParent","rootElement","isContent","isWhitespace","isNamedAnchor","isBookmark","isBogus$2","isBogusAll$1","Empty","isEmptyNode","BlockPosition","BlockBoundary","getBlockPosition","readFromRange","fromBlockPos","toBlockPos","blockPos","blockPosition","lastPositionInBlock","skipLastBr","blockBoundary","isDifferentBlocks","parent1","parent2","hasSameParent","BlockMergeBoundary","parentsUntil$1","parents$1","Parents","getChildrenUntilBlockBoundary","extractChildren","removeEmptyRoot","nestedBlockMerge","fromBlock","toBlock","insertionPoint","sidelongBlockMerge","getInsertionPoint","findInsertionPoint","trimBr","mergeBlockInto","MergeBlocks","BlockBoundaryDelete","isRawNodeInTable","isEverythingSelected","noPrevious","noNext","isSelectionInTable","deleteRange","emptyEditor","deleteContents","deleteRangeMergeBlocks","BlockRangeDelete","isBr$5","parentBlocks","isBeforeBr","isAfterBr","getElementFromPrevPosition","findPreviousBr","findNextBr","isNbsp","isWhiteSpace$1","isContent$1","isChar","isBeforeSpace","isAfterSpace","isEmptyText","isNextToContentEditableFalse","isBeforeContentEditableFalse","isAfterContentEditableFalse","isNextToTable","isBeforeTable","isAfterTable","DeleteAction","moveToElement","moveToPosition","deleteEmptyBlockOrMoveToCef","toCefElm","blockElm","findCefPosition","isCompoundElement","isDeleteFromCefDifferentBlocks","getContentEditableAction","caretLocation","isAtContentEditableBlockCaret","getContentEditableBlockAction","deleteAction","skipMoveToActionFromInlineCefToContent","normalize$1","isEndOfContent","isStartOfContent","replaceData","isCollapsibleWhitespace","previousCharIsSpace","normalizeContent","normalizeWhitespaceAfter","whitespaceCount","needsReposition","getPreviousSiblingCaretPosition","afterOrEndOf","getNextSiblingCaretPosition","beforeOrStartOf","findCaretPositionBackwards","startPosition","findCaretPositionBackwardsFromElm","findCaretPositionForward","findCaretPositionForwardsFromElm","findCaretPosOutsideElmAfterDelete","findCaretPosition$1","isBlock$2","paddEmptyBlock","deleteNormalized","afterDeletePosOpt","normalizeWhitespace","prevTextOpt","nextTextOpt","oc","lift3","prevNode","whitespaceOffset","mergeTextNodes","normalizeWhitespaceBefore","DeleteElement","moveCaret","afterDeletePos","normalizedAfterDeletePos","isInlineElement","paddPos","read$2","hideFakeCaret","deleteElement$1","selectedElement","CefDelete","ceRoot","getContentEditableRoot","isText$8","startsWithCaretContainer$1","endsWithCaretContainer$1","createZwsp","insertInline$1","newNode","insertBefore$1","insertAfter$1","insertInlineBefore","insertInlineAfter","insertInlinePos","isPosCaretContainer","caretNode","BoundaryCaret","LazyEvaluator","fns","Location","rescope","nPos","isNotInsideFormatCaretContainer","findInsideRootInline","after$2","isValidLocation","readLocation","getName","outside","betweenInlines","fromInline","toInline","skipNoMovement","fromLocation","toLocation","location2","location1","findLocationSimple","findLocation","findLocationTraverse","BoundaryLocation","hasSelectionModifyApi","getSel","modify","WordSelection","setCaretPosition","isFeatureEnabled","inline_boundaries","renderCaretLocation","moveWord","moveNextWord","movePrevWord","BoundarySelection","findLocation$1","setupSelectedState","selectedInlines","targetInlines","toggleInlines","composing","safeRemoveCaretContainer","inlines","renderInsideInlineCaret","setCaretLocation","deleteFromTo","rangeFromPositions","backspaceDeleteCollapsed","rescope$1","toPosition","hasOnlyTwoOrLessPositionsLeft","InlineBoundaryDelete","isFeatureEnabled$1","tableCellRng","tableSelection","removeTable","emptyCells","getClosestCell","getClosestTable","isExpandedCellRng","cellRng","getTableFromCellRng","startParentTable","endParentTable","getTableCells","partialSelection","endCell","isWithinSameTable","getCellRangeFromStartTable","getTableSelectionFromRng","isRootFromElement","getCellRng","getTableSelectionFromCellRng","getCellIndex","getAction","getSelectedCells","TableDeleteAction","MultiRange","getCellsFromRanges","getCellsFromElement","getCellsFromElementOrRanges","rangeCells","TableCellSelection","deleteTableElement","deleteTableRange","startElm","getParentCaption","deleteCellRange","emptyElement","deleteCaptionRange","getParentCell","deleteCaretInsideCaption","fromCaption","isDeleteOfLastCharPos","emptyCaretCaption","toCaption","validateCaretCaption","deleteCaretCells","fromCell","toCell","deleteBetweenCells","deleteCaret","deleteCaretCaption","TableDelete","deleteRange$1","isEq$2","matchesUnInheritedFormatSelector","formatList","inherit","matchParents","matchName","matchItems","similar","onmatch","MatchFormat","matchAll","startElement","matchedFormatNames","checkedMap","defaultBlock","SplitRange","ZWSP$1","CARET_ID$1","isCaretContainerEmpty","getEmptyCaretContainers","findFirstTextNode","createCaretContainer","removeCaretContainerNode","trimZwspFromCaretContainer","removeCaretContainer","insertCaretContainerNode","formatNode","appendNode","insertFormatNodesIntoCaretContainer","formatNodes","innerMostFormatNode","setup$2","disableCaretContainer","isFormatElement","hasOnlyOneChild$1","deleteLastPosition","parentInlines","isFormatElement$1","innerMost","replaceWithCaretFormat","deleteCaret$1","getParentInlines","InlineFormatDelete","getPos$1","ScrollIntoView","alignToTop","viewPort","viewPortY","viewPortH","offsetY","scrollEvent","fireScrollIntoViewEvent","rngRect","bodyRect","isContentEditableTrue$2","isContentEditableFalse$6","showCaret","getNodeRange","renderCaretAtRange","caretPositionNode","caretPositionBeforeNode","renderRangeCaret","caretRange","moveToRange","deleteContentAndShowCaret","peekCaretPosition","trimEmptyTextNode$1","CefBoundaryDelete","getNextVisualCaretPosition","getPrevVisualCaretPosition","getNextPosFn","isBeforeContentEditableFalseFn","nextCaretPosition","deleteCefBoundaryText","nativeCommand","DeleteCommands","getSpecifiedFontProp","getProperty","getFontProp","getComputedFontProp","FontInfo","getFontSize","getFontFamily","round$1","findFirstCaretElement","getCaretElement","isRangeAtStartOfNode","fromFontSizeNumber","fontSizeNumber","fontSizes","fontClasses","RangeCompare","rng1","hasParent","findParent","hasParentWithName","isTable$2","isTableCell$3","isCeFalseCaretContainer","hasBrBeforeAfter","findTextNodeRelative","isAfterNode","lastInlineElement","parentBlockContainer","normalizeEndPoint","directionLeft","hasContentEditableFalseParent","isPrevNode","NormalizeRange","normRng","scrollToBr","brElm","moveSelectionToBr","extraBr","insertBrAtCaret","isAfterLastNodeInContainer","containerBlock","containerBlockName","isControlKey","hasRightSideContent","insertBrBefore","insertBrAfter","hasBrAfter","isAnchorLink","isInsideAnchor","insertBrOutsideAnchor","InsertBr","anchorLocation","readInlineAnchorLocation","browser$3","normalizeRng","isOrContains","isRngInRoot","shouldStore","nativeRangeToSelectionRange","getBookmark$2","bookmarkToNativeRng","SelectionBookmark","newBookmark","isListComponent","getBlocksToIndent","parentIsListComponent","indentUnit","indentValue","useMargin","indentStyleName","indentElement","each$a","extend$2","map$3","inArray$2","EditorCommands","addCommands","commandList","addQueryValueHandler","customCommand","skip_focus","queryCommandSupported","hasCustomCommand","execNativeCommand","isFormatMatch","storeSelection","restoreSelection","queryCommandEnabled","listParent","fontNameAction","fontSizeAction","editingHost","alignStates","inline_styles","paddingLeft","Undo","undo","Redo","redo","fontNameQuery","fontSizeQuery","Dispatcher","bindingName","hi","beforeFire","customEventRootDelegates","toggleNativeEvent","Observable","setEditorCommandState","toggleReadOnly","hideResizeRect","getMode","getEventTarget","eventName","event_root","eventRoot","fireEvent","isListening","bindEventDelegate","eventRootElm","delegates","editorManager","editors","EditorObservable","bindPendingEventDelegates","_pendingNativeEvents","unbindAllNativeEvents","EditorObservable$1","sectionResult","mobilePlugins","defaultMobileSettings","normalizePlugins","pluginNames","trimmedPlugins","extractSections","hasSection","sections","getExternalPlugins","overrideSettings","userDefinedExternalPlugins","external_plugins","processPlugins","isTouchDevice","defaultOverrideSettings","forcedPlugins","forced_plugins","combinedPlugins","combinePlugins","filterMobilePlugins","combineSettings","defaultSettings","extendedSettings","isOnMobile","sectionSettings","getSection","getFiltered","getParamObject","each$b","explode$2","keyCodeLookup","f1","f2","f3","f4","f5","f6","f7","f8","f9","f10","f11","f12","modifierNames","Shortcuts","pendingPatterns","parseShortcut","createShortcut","desc","cmdFunc","subpatterns","matchShortcut","executeShortcutAction","hasModifier","isFunctionKey","_doc","getFocusInElement","getCollapsedNode","normalizeSelection","normalize","focusBody","setActive","hasInlineFocus","rawBody","hasFocus$1","iframeElement","hasIframeFocus","activateEditor","EditorFocus","skipFocus","refreshContentEditable","contentEditableHost","getContentEditableHost","bookmarkRng","focusEditor","getComputedSizeProp","getClientWidth","getClientHeight","getMarginTop","getMarginLeft","EditorView","transposedPoint","getBoundingClientRect$1","transpose","isInsideElementContentArea","fromDomSafe","NotificationManager","getImplementation","unimplemented","closeNotification","otherNotification","addNotification","serviceMessage","service_message","registerEvents","getNotifications","WindowManager","funcBind","addWindow","fireOpenEvent","closeWindow","otherWindow","fireCloseEvent","getTopWindow","getWindows","I18n","setCode","newCode","_dir","getCode","langData","getLangData","values_1","$1","$2","pluginUrlToMessage","targetUrl","resolvePluginName","displayError","initError","ErrorReporter","pluginLoadError","pluginInitError","uploadError","PluginManager$1","XMLHttpRequest","uploadStatus","pendingPromises","handlerSuccess","handlerFailure","resolvePending","uploadBlobs","blobInfos","openNotification","isUploaded","isPending","pendingUploadBlobInfo","markPending","closeNotification_1","markUploaded","removeFailed","percent","uploadBlobInfo","parseDataUri","uriParts","decodeURIComponent","dataUriToBlob","Blob","Uint8Array","Conversions","rejectWithError","responseType","blobUriToBlob","onloadend","ImageScanner","cachedPromises","getAllImages","promises","imageInfo","newPromise","getByUri","dataUri","imageToBlobInfo","count$1","Uuid","rnd","EditorUpload","imageScanner","blobUriStatuses","createStatus","hasBlobUri","toBlobInfo","removeByUri","BlobCache","resultUri","getResultUri","urlFilters","aliveGuard","replaceString","replaceImageUrl","replacementUrl","replaceUrlInUndoStack","fragments","uploadImages","scanForImages","imageInfos","filteredResult","uploadInfo","replaceImageUri","isValidDataUriImage","dataImgFilter","resultItem","replaceBlobUris","addFilter","isBlockElement","isValidTarget","shouldRemoveTextNode","addRootBlocks","rootBlockNode","tempNode","rootNodeName","forcedRootBlock","hasBlockParent","ForceBlocks","getFirstChildren","getLastChildren$1","hasAllContentsSelected","getStartNode","getEndNode","moveEndPoint$1","hasAnyRanges","NodeChange","lastPath","nativeRng","fakeRng","currentPath","isSameElementPath","selectionChange","disable_nodechange","VDirection","VK","ENTER","LEFT","RIGHT","SPACEBAR","END","HOME","modifierPressed","toArrayWithNode","getNodeClientRects","walkUntil","isAboveFn","isBeflowFn","targetClientRect","line","findUntil","upUntil","Up","downUntil","Down","isAboveLine","lineNumber","aboveLineNumber","isLine","isLineNumber","isContentEditableFalse$7","findNode$1","distanceToRectLeft","distanceToRectRight","isInside","findClosestClientRect","oldClientRect","oldDistance","newDistance","walkUntil$1","closestCaret","closestNodeRect","contentEditableFalseNodeRects","getFakeCaretTargets","targetNodeRects","targetNodeRect","checkPosFn","lineRects","findLineNodeRects","caretInfo","RangePoint","getAbsolutePosition","MousePosition","bodyPosition","getBodyPosition","scrollPosition","getScrollPosition","mousePosition","iframePosition","inlineScroll","iframeScroll","getBodyScroll","getMousePosition","isContentEditableFalse$8","isContentEditableTrue$3","removeElement","start$1","isLeftMouseButtonPressed","ceElm","elmPos","relX","relY","ghost","clonedElm","ghostElm","boxSizing","createGhost","dragging","targetElement","dragElement","isValidDropTarget","targetClone_1","cloneElm","targetClone","removeDragState","bindFakeDragEvents","pageDom","dragStartHandler","dragHandler","dropHandler","dragEndHandler","rootDocument","throttledPlaceCaretAt","placeCaretAt","hasDraggableElement","targetPos","applyRelPos","moveGhost","move$1","DragDropOverrides","realTarget","blockIeDrop","CefFocus","renderFocusCaret","isContentEditableTrue$4","isContentEditableFalse$9","getContentEditableRoot$1","SelectionOverrides","selectedContentEditableNode","rootClass","fakeCaret","realSelectionId","setRange","getRange","isWithinCaretContainer","isRangeInCaretContainer","normalizeShortEndedElementSelection","setContentEditableSelection","$realSelectionContainer","origTargetClone","removeContentEditableSelection","contentEditableRoot","hasBetterMouseTarget","targetBlock","caretBlock","hasNormalCaretPosition","handleTouchSelect","isPasteBin","realSelectionElement","outerText","contentStyles","blockCaretContainer","trimComments","sanitizedText","findEndTagIndex","tokenRegExp","checkBogusAttribute","attrString","SaxParser","fix_self_closing","endRegExp","attrList","textData","isInternalElement","removeInternalElements","fillAttrsMap","isShortEnded","isValidElement","attribsValue","validAttributesMap","validAttributePatterns","processHtml","selfClosing","attrRegExp","fixSelfClosing","stack","filteredUrlAttrs","scriptUriRegExp","processEndTag","valid","parseAttribute","val3","attrRule","isValidPrefixAttrName","isInvalidUri","self_closing_elements","remove_internals","bogusValue","findEndTag","SaxParser$1","trimInternal","endTagIndex","matchLength","bogusAllRegExp","tempAttrs","trimContentRegExp","getTempAttrs","TrimHtml","trimExternal","Diff","vDown","vUp","buildScript","start1","end1","start2","end2","getMiddleSnake","diag","i2","buildSnake","snake","sum","getOuterHtml","insertAt","createFragment$1","Fragments","currentFragments","removeAt","applyDiff","undoLevelDocument","createFragmentedLevel","beforeBookmark","createCompleteLevel","getLevelContent","getCleanLevelContent","implementation","createHTMLDocument","Levels","trimmedFragments","trimmed","level1","level2","hasEqualContent","hasEqualCleanedContent","UndoManager","isFirstTypedCharacter","locks","isUnlocked","setTyping","typing","setDirty","addNonTypingUndoLevel","endTyping","beforeChange","isDirty","modKey","inputType","isInsertTextDataNull","currentLevel","custom_undo_redo_levels","hasUndo","hasRedo","callback1","callback2","postProcessHooks","filter$2","each$c","addPostProcessHook","isPre","pre","pre1","pre2","Hooks","MCE_ATTR_RE","each$d","isEq$5","isChildOfInlineParent","lastIdx","wrap$2","wrapWithSiblings","find$3","removeFormat","compareNode","stylesModified","matchName$1","links","isColorFormatAndAnchor","remove_similar","valueOut","rootBlockElm","list_block","removeNode$1","RemoveFormat","splitToFormatRoot","formatRoot","findFormatRoot","lastClone","firstClone","formatRootParent","mixed","wrapAndSplit","lastContentEditable","isRemoveBookmarkNode","removeRngStyle","isTableCell$4","textDecoration","hasContentAfter","expandedRng","newCaretContainer","removeCaretFormat","ceFalseOverride","each$e","isElementNode","findElementSibling","mergeSiblingsNodes","tmpSibling","elementUtils","processChildElements","hasStyle","applyStyle","unwrapEmptySpan","processUnderlineAndColor","MergeFormats","clear_child_styles","clearChildStyles","merge_siblings","merge_with_parents","each$f","applyFormat","setElementFormat","onformat","styleVal","applyNodeStyle","applyRngStyle","nodeSpecific","wrapElm","currentWrapElm","childCount","getChildElementNode","isElementNode$1","getChildCount","mergeStyles","wordcharRegex","importNode","applyCaretFormat","curSelNode","ApplyFormat","each$g","FormatChanged","formatChangeState","formatChangeData","currentFormats","matchedFormats","setup$5","formatChangeItems","addListeners","DefaultFormats","valigntop","verticalAlign","valignmiddle","valignbottom","textAlign","fontWeight","fontStyle","forecolor","hilitecolor","fontname","fontsize","fontsize_class","each$h","parsedSelectorToHtml","ancestry","sItem","wrapInHtml","parentCandidate","parentRequired","ancestorName","elmRule","getRequiredParent","siblingElm","parseSelectorItem","$0","$3","$4","parseSelector","Preview","previewFrag","previewElm","parentFontSize","previewStyles","previewCss","preview_styles","removeVars","ToggleFormat","FormatShortcuts","Formatter","unregister","FormatRegistry","hasOwnProperty$2","DomSerializerFilters","htmlParser","internalName","cleanup","hasChildren","brNode1","brNode2","DomSerializerPreProcess","no_events","shouldFireEvent","impl","oldDoc","addFontToSpansFilter","face","removeAttrs","addFilters","convert_fonts_to_spans","font_size_legacy_values","addStrikeToSpanFilter","LegacyFilter","whiteSpaceRegExp$3","typeLookup","walk$2","Node$1","selfAttrs","selfAttr","cloneAttrs","refNode","paddEmptyNode","padd_empty_with_br","hasOnlyChild","isEmpty$2","whitespaceElements","isPadded","makeMap$4","each$i","explode$3","extend$3","DomParser","nodeFilters","attributeFilters","matchedNodes","matchedAttributes","root_name","filterNode","getAttributeFilters","getNodeFilters","isInWhiteSpacePreservedElement","invalidChildren","rootBlockName","whiteSpaceElements","startWhiteSpaceRegExp","endWhiteSpaceRegExp","allWhiteSpaceRegExp","isAllWhiteSpaceRegExp","createNode","removeWhitespaceBefore","textNodeNext","textVal","cloneAndExcludeBlocks","isLineBreakNode","attrFiltersLen","isPaddedWithNbsp","newParent","childNode","nonSplitableElements","textBlockElements","fixInvalidChildren","remove_trailing_brs","prevName","appendRel","allow_html_in_named_anchor","fix_list_elements","classValue","validClassesMap","register$2","toHtml","serializeNode","postProcess$1","DomSerializer","getInner","getHtmlFromNode","parseHtml","addRules","setRules","DomSerializer$1","domSerializer","BookmarkManager","BreakType","BookmarkManager$1","isContentEditableFalse$a","isContentEditableTrue$5","ControlSelection","selectedElmGhost","resizeHelper","resizeHandles","selectedHandle","selectedElmX","selectedElmY","startH","resizeStarted","startScrollWidth","startScrollHeight","editableDoc","nw","ne","se","sw","isImage","contextMenuSelectImage","isEventOnImageOutsideRange","getResizeTarget","object_resizing","resizeGhostElement","resizeHelperX","resizeHelperY","resize_img_proportional","endGhostResize","setSizeProp","showResizeRect","targetWidth","targetHeight","unbindResizeHandleEvents","unSelectabe","updateResizeRect","controlElm","isChildOrEqual","disableGeckoResize","isWithinContentEditableFalse","getContentEditableRoot$2","delayedSelect","throttledUpdateResizeRect","hasCeProperty","CaretRangeFromPoint","pointDoc","createTextRange","moveToPoint","moveToElementText","findClosestIeRange","findParent$1","moveOutOfContentEditableFalse","EventProcessRanges","fromElements","tableModel","tableRow","cellPosition","cellExists","findElementPos","extractRows","sx","sy","ey","SimpleTableModel","y2","x2","fillout","skipCellsX","tableElement","tableBody","createDomTable","modelRowsToDomRows","endElement","subTable","getFullySelectedListWrappers","findParentListContainer","listCont","getWrapElements","commonAnchorContainer","wrapElements","listWrappers","allWrappers","directListWrappers","emptyFragment","getFragmentFromRange","innerElm","getTableFragment","selectedTableCells","firstCell","fullTableModel","sectionedTableModel","FragmentReader","getSelectionFragment","GetSelectionContent","bin","tmpElm","getHtmlContent","SetSelectionContent","contentArgs","setupArgs","cleanContent","createContextualFragment","anyRng","pasteHTML","getEndpointElement","real","getStart$2","skipEmptyTextNodes","forwards","orig","each$j","isNativeIeSelection","isAttachedToDom","Selection$1","bookmarkManager","selectedRange","explicitRange","selectorChangedData","tryCompareBoundaryPoints","how","sourceRange","destinationRange","compareBoundaryPoints","START_TO_START","END_TO_END","isValidRange","ieRange","anchorRange","focusRange","select$1","compareEndPoints","setNode","endElm","currentSelectors","matchedSelectors","flip","walk$3","getBreakType","currentPos","Br","Block","Wrap","getPositionsUntil","breakType","breakAt","Eol","getAdjacentLinePositions","getPositionsUntilBreak","findClosestHorizontalPositionFromPoint","lastDist","findClosestHorizontalPosition","getPositionsUntilPreviousLine","getPositionsUntilNextLine","getPositionsAbove","getPositionsBelow","isContentEditableFalse$b","getSelectedNode$1","moveToCeFalseHorizontally","rangeIsInContainerBlock","isRangeInCaretContainerBlock","moveToCeFalseVertically","walkerFn","linePositions","nextLinePositions","closestNextLineRect","caretClientRect","dist1","dist2","contentEditableFalseNode","caretPositions","isBelowFn","getClientRect","positionsUntil","exitPreBlock","moveH","newRange","getHorizontalRange","moveV","getVerticalRange","moveToLineEndPoint","isCefPosition","getClosestCell$1","getYAxisValue","isTargetCorner","corners","tds","deflate","getCorners","corner","newCorner","oldCorner","oldDist","newDist","findClosestCorner","getClosestCellAbove","getClosestCellBelow","findClosestPositionInAboveCell","findClosestPositionInBelowCell","isAtTableCellLine","lineInfo","startsWithWrapBreak","startsWithBrBreak","breakPos","hasNextBreak","isAtFirstTableCellLine","isAtLastTableCellLine","navigateHorizontally","isCaretAtStartOrEndOfTable","getTable","renderBlock","navigateVertically","getClosestAbovePosition","getClosestBelowPosition","moveH$1","moveV$1","rangeBefore","insertElement","insertEmptyLine","insertBr","insertBlock$1","isAtFirstOrLastLine","isAtLastLine","isAtFirstLine","moveCaretToNewEmptyLine","rootBlock","rootBlockAttrs","getClosestTargetBlock","moveV$2","match$1","defaultPatterns","matchesEvent","MatchKeys","ArrowKeys","executeKeydownOverride","DeleteBackspaceKeys","executeKeydownOverride$1","executeKeyupOverride","getParentBlock$2","NewLineUtils","firstNonWhiteSpaceNodeSibling","tempElm","editableRoot","hasParent$1","isListBlock","getContainerBlock","containerBlockParent","isFirstOrLastLi","InsertLi","createNewBlock","newBlockName","hasFirstChild","isEmptyAnchor","emptyBlock","containerAndSiblingName","canSplitBlock","normalizeZwspOffset","getEditableRoot$1","applyAttributes","forcedRootBlockAttrs","attrStyles","currentStyles","ruleName","getAllRaw","newStyles","attrClassesOpt","attrClasses","currentClassesOpt","currentClasses","filteredClasses","newClasses","il","jl","__spreadArrays","appliedAttrs","remainingAttrs","setForcedBlockAttrs","forcedRootBlockName","InsertBlock","parentBlockName","clonedNode","isCaretAtStartOrEndOfBlock","normalizedOffset","insertNewBlockAfter","isTableCell$5","wrapSelfAndSiblingsInDefaultBlock","includeZwspInRange","trimZwsp","trimLeadingLineBreaks","firstChilds","trimInlineElementsOnLeftSideOfBlock","addBrToBlockIfNeeded","ContextSelectors","newLineAction","shouldBlockNewLine$1","isBrMode","requiredState","inListBlock","inPreBlock","shouldPutBrInPre$1","inBrContext","canInsertIntoEditableRoot","rootEditable","match$2","predicates","NewLineAction","InsertNewLine","EnterKey","handleEnterKeyEvent","insertTextAtPosition","insertNbspAtPosition","insertSpaceAtPosition","navigateIgnoreEmptyTextNodes","getClosestBlock","isAtBeforeAfterBlockBoundary","isAtBlockBoundary","isAtStartOfBlock","isAtEndOfBlock","isBeforeBlock","isAfterBlock","isInMiddleOfText","getClosestBlock$1","hasSpaceBefore","hasSpaceAfter","isInPre","isPreValue","isAtLineBoundary","isAtBeginningOfBody","isAtEndOfBody","needsToBeNbspRight","afterPos","needsToBeNbsp","needsToBeNbspLeft","isNbspAt","hasNbsp","normalizeNbspInMiddleOfTextNode","newText","chars","normalizeNbspMiddle","normalizeNbsps","normalizeNbspAtStart","normalizeNbspAtEnd","normalizeNbspsInEditor","insertInlineBoundarySpaceOrNbsp","checkPos","needsToHaveNbsp","insertSpaceOrNbspAtSelection","locationToCaretPosition","setSelection$1","SpaceKey","executeKeydownOverride$2","removeIeControlRect","handleBlockContainer","findBlockCaretContainer","CaretContainerInput","browser$4","setup$c","keypressThrotter","setupIeInput","isComposing","HomeEndKeys","executeKeydownOverride$3","KeyboardOverrides","serializeRng","getAttributeApplyFunction","isSelectionAcrossElements","isGecko","isWebKit","mceInternalUrlPrefix","mceInternalDataType","selectAll","disableBackspaceIntoATable","bodyHeight","allRng","allContentsSelected","selectionHtml","internalContent","setMceInternalContent","getMceInternalContent","template","setAttributeNode","isTextBlockNode","setup$f","normalizeSelection$1","setup$g","preventSummaryToggle","filterDetails","initEditor","execCallback","auto_focus","destroyed","autoFocus","InitContentBody","skipWrite","contentCssText","orgVisibility","iframeHTML","content_document","content_window","bodyElement","hex_colors","force_hex_style_colors","class_filter","createParser","annotator","_nodeChangeDispatcher","browser_spellcheck","gecko_spellcheck","nowrap","protect","startContent","getStyleSheetLoader","content_style","appendStyle","normalizeHeight","normalizedHeight","createIframe","customAttrs","frameBorder","allowTransparency","createIframeElement","isDomainRelaxed","domain","hostname","bodyUuid","domainRelaxUrl","relaxDomain","contentAreaContainer","documentBaseUrl","InitIframe","boxInfo","orgDisplay","DOM$4","initPlugin","initializedPlugins","Plugin","pluginInstance","trimLegacyPrefix","createThemeFalseResult","renderThemeFalse","renderThemeFalseIframe","renderThemeUi","min_height","delta_width","delta_height","renderFromLoadedTheme","renderFromThemeFunc","Init","rtl_ui","i18n","aria_label","getLang","Theme","initTheme","initPlugins","content_css","DOM$5","hasSkipLoadPrefix","scriptLoader","themeUrl","theme_url","loadTheme","language_url","loadLanguage","loadPlugins","form","formElement","hidden_input","hasHiddenInput","formEventDelegate","submit_patch","_mceOldSubmit","triggerSave","encoding","save","add_form_submit_trigger","add_unload_trigger","_beforeUnload","set_dirty","each$k","trim$4","queryParts","DEFAULT_PORTS","ftp","http","https","mailto","URI","baseUri","base_uri","isProtocolRelative","protocol","toAbsPath","part","userInfo","port","setPath","toRelative","tu","uu","toRelPath","noHost","isSameOrigin","defaultPort","breakPoint","outPath","nb","noProtoHost","getDocumentBaseUrl","loc","pathname","getContentFromBody","emptyRegExp","trimEmptyContents","filter$3","nodeMatches","attrMatches","findMatchingNodes","isTreeNode","setEditorHtml","setContent$1","setContentTree","padd","setContentString","DOM$6","safeDestroy","remove$7","is_removing","restoreOriginalStyles","automatic","restoreForm","clearDomReferences","DOM$7","extend$4","each$l","resolve$4","ie$2","Editor","documentBaseURL","baseURI","popup_css","document_base_url","convert_urls","relative_urls","remove_script_host","visual","font_size_style_values","render_ui","ie7_compat","getDefaultSettings","getEditorSettings","language_load","loadedCSS","editorCommands","cache_suffix","override_viewport","callbackLookup","lang_1","i18n_1","addSidebar","focusedEditor","setProgressState","getContent$1","isNotDirty","oldState","urlconverter_callback","visual_table_class","visual_anchor_class","_scanForImages","documentFocusInHandler","beforeUnloadDelegate","EditorManager","FocusManager","isEditorUIElement","registerEditorEvents","throttledStore","registerFocusOut","registerMouseUp","isManualNodeChange","SelectionRestore","mouseUpPage","registerPageMouseUp","DOM$8","isEditorUIElement$1","isUIElement","customSelector","custom_ui_selector","blurredEditor","getActiveElement","unregisterDocumentEvents","FocusController","DOM$9","explode$4","each$m","extend$5","instanceCounter","boundGlobalEvents","legacyEditors","globalEventDelegate","toggleGlobalEvents","removeEditorFromList","targetEditor","oldEditors","majorVersion","minorVersion","releaseDate","preInit","tinyMCEPreInit","srcScript","currentScript","base_url","pluginBaseUrls","plugin_base_urls","invalidInlineTargets","createId","provideResults","initEditors","initCount","createEditor","forms","editor_deselector","editor_selector","findTargets","isInvalidInlineTarget","EditorManager$1","RangeUtils","normalizedRng","compareRanges","extendClass","initializing","RangeUtils$1","round$2","create$4","constrainRect","cropRect","x1","y1","clampRect","fixedSize","underflowX1","underflowY1","overflowX2","overflowY2","cx2","cy2","fromClientRect","typeClass","lctype","controlType","ControlType","each$n","extend$6","Class","member","mixins","mixin","dummy","createMethod","name_1","Methods","fieldName","min$1","max$1","round$3","quote","JSON$1","JSONP","XHR","ready","success_scope","error_scope","overrideMimeType","content_type","crossDomain","setRequestHeader","requestheaders","localStorage","extend$7","JSONRequest","sendRPC","ecb","scb","method","storage","getItem","setItem","removeItem","defineProperty","configurable","enumerable","publicApi","geom","EventDispatcher","LocalStorage","Color","saturation","brightness","side","chroma","hsvToRgb","minRGB","maxRGB","rgb2hsv","Serializer","isMac","Tinymce","tinyMCE","exportToWindowGlobal","exportToModuleLoaders"],"sourceRoot":""}