{"version":3,"file":"7241_16510ecb3900abd5720e.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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,GAxID,CACX,UACA,QACA,UACA,MACA,KACA,aACA,SACA,OACA,WACA,SACA,SACA,OACA,OACA,MACA,UACA,UACA,OACA,IACA,KACA,WACA,KACA,SACA,UACA,SACA,aACA,KACA,KACA,KACA,KACA,KACA,KACA,UACA,MACA,MACA,YACA,OACA,MACA,KACA,KACA,KACA,KACA,QACA,QACA,QACA,QACA,KACA,KACA,KACA,YAwFE30B,GAAW,SAAU1+G,GACvB,OAAO27B,GAAU37B,KAAUmtB,GAAQntB,EACrC,EACIgtB,GAAO,SAAUhtB,GACnB,OAAO27B,GAAU37B,IAAwB,OAAfgE,GAAKhE,EACjC,EACIwzI,GAAcH,GAhED,CACf,KACA,KACA,KACA,KACA,KACA,KACA,IACA,MACA,UACA,MACA,OACA,aACA,SACA,MACA,WACA,SACA,SACA,UACA,UACA,SACA,QACA,MACA,WA0CE1gH,GAAS0gH,GA3BD,CACV,KACA,KACA,OAyBEl7D,GAAak7D,GAjCD,CACd,KACA,KACA,OA+BEI,GAASJ,GA/FD,CACV,OACA,OACA,WACA,KACA,MACA,QACA,KACA,MACA,QACA,UACA,OACA,OACA,QACA,QACA,SACA,MACA,UA+EEK,GAAiBL,GAzED,CAClB,QACA,QACA,UAuEEM,GAAcN,GA9ED,CACf,KACA,OA6EEO,GAAsBP,GA3BT,CACf,MACA,SACA,WACA,UAyBEQ,GAAa,SAAU9wI,GACzB,OAAO,SAAU/C,GACf,QAASA,GAAQA,EAAKmG,WAAapD,CACrC,CACF,EAII+wI,GAAcD,GAAW,GACzBE,GAAiB,SAAUhhB,GAC7B,IAAIvwH,EAAQuwH,EAAM59F,cAAcr1B,MAAM,KACtC,OAAO,SAAUE,GACf,IAAIsF,EAAGtB,EACP,GAAIhE,GAAQA,EAAKmG,SAEf,IADAnC,EAAOhE,EAAKE,SAASi1B,cAChB7vB,EAAI,EAAGA,EAAI9C,EAAMT,OAAQuD,IAC5B,GAAItB,IAASxB,EAAM8C,GACjB,OAAO,EAIb,OAAO,CACT,CACF,EAyCI+jH,GAA0B,SAAU3pH,GACtC,OAAO,SAAU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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","getOrDie","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","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","neighbourCells","neighbourRows","TableLookup","cell","firstCell","cells","table","notCell","rowProp","colProp","rowsCount","cols","DetailsList","parentSection","parentName","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","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","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","remove$4","remove$3","add$2","cleanClass","get$6","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","mouse","clearState","mouseup","_event","MouseSelection","keyboard","clearToNavigate","keydown","realEvent","which","attempts","navigation","keyup","remove$7","remove$5","SelectionAnnotation","byClass","ephemera","addSelectionClass","removeSelectionClasses","byAttr","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","hasWheelEventSupport","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","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","par$1","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","compileSchema","globalAttributes","blockContent","phrasingContent","flowContent","html4BlockContent","html4PhrasingContent","ni","arrayToMap","addAttrs","schemaItem","script","compileElementMap","Schema","invalidStyles","schemaItems","whiteSpaceElementsMap","selfClosingElementsMap","boolAttrMap","validClasses","nonEmptyElementsMap","moveCaretBeforeOnEnterElementsMap","textBlockElementsMap","textInlineElementsMap","patternElements","customElementsMap","createLookupTable","option","extendWith","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","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","StyleSheetLoader","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","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","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","imageToBlobInfo","getByUri","dataUri","getAllImages","count$1","Uuid","uuid","rnd","EditorUpload","imageScanner","blobUriStatuses","createStatus","hasBlobUri","toBlobInfo","removeByUri","BlobCache","resultUri","getResultUri","urlFilters","aliveGuard","replaceString","replaceImageUrl","replacementUrl","replaceUrlInUndoStack","fragments","uploadImages","scanForImages","imageInfos","imageInfo","filteredResult","uploadInfo","replaceImageUri","isValidDataUriImage","dataImgFilter","cachedPromises","promises","newPromise","ImageScanner","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","trimTrailingBr","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","isPaddedWithNbsp","hasOnlyChild","isEmpty$2","whitespaceElements","isPadded","isLineBreakNode","register$2","remove_trailing_brs","prevName","whiteSpaceElements","appendRel","allow_html_in_named_anchor","fix_list_elements","classValue","validClassesMap","makeMap$4","each$i","explode$3","extend$3","DomParser","nodeFilters","attributeFilters","matchedNodes","matchedAttributes","root_name","filterNode","getAttributeFilters","getNodeFilters","isInWhiteSpacePreservedElement","invalidChildren","rootBlockName","startWhiteSpaceRegExp","endWhiteSpaceRegExp","allWhiteSpaceRegExp","isAllWhiteSpaceRegExp","createNode","removeWhitespaceBefore","textNodeNext","textVal","cloneAndExcludeBlocks","attrFiltersLen","newParent","childNode","nonSplitableElements","textBlockElements","fixInvalidChildren","getHtmlFromNode","getInner","parseHtml","toHtml","serializeNode","postProcess$1","DomSerializer$1","domSerializer","addRules","setRules","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","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","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":""}