From fe847720eac0ed35b1674d4c0b68323fb7e5985f Mon Sep 17 00:00:00 2001 From: Abdallah Date: Thu, 13 Feb 2014 17:49:25 +0200 Subject: [PATCH 01/11] Upgrade to TinyMCE 4.0.16. Detailed commit messages: deleted old tinymce new tinymce js changes to support new tinymce scss changes for alignments Include all the controls on the toolbar that we previously had. Changes to support Bulk e-mail usage. adding new studio skin for TinyMCE4 Get handling of static image links working again. Delete old Studio skin. Version 1.3 of CodeMirror plugin. Modify paths for location of CodeMirror files. Fire events when CodeMirror Editor is open and closed. Needed to switch static links back and forth. Remove CodeMirror tabbed editor. fixed tinymce visual editor css Change how we detect that an image has been inserted. made the codemirror look more studio-like reordered the tinymce buttons Update unit tests. Update acceptance test for image plugin. Make sure to strip out temporary caret. It can get left behind in style blocks. Test for style block being maintained. Allow TinyMCE to create p's, else formatting doesn't work. Add tests for toolbar buttons and converting links. Add test for code format toolbar button. Remove unnecessary code. Remove unused testing templates and unused tabs. Update tinymce paths. Fire an event with the link plugin closes so we can rewrite links. pep8 Updates from code review. Change the name of the button to "Edit HTML". Changed menu name for consistency, but we don't show it. Changed name of "code" toolbar button to "Code block". Switch from tabbed Visual/HTML Editor for HTML modules to showing the code editor as a plugin within TinyMCE (triggered from toolbar). STUD-1422 Fire events before and after the image dialog is shown. We use this to rewrite links. Change the event handling for image plugin. Fixes FireFox bug, and allows us to correct the image path when we show the plugin (as opposed ot only correcting path when we close the plugin). Code review feedback. Fire events before and after the link dialog is shown. This allows us to convert the static links. Remove unnecessary helper method. keeping the component editor inside the component window Use compressed CodeMirror file. replaced code icon in TinyMCE editor; simplified UI on TMCE toolbar Change code editor icon to say HTML. Move code style block button. Update tests for minor UI changes. Code editor button no longer shows an icon, and code style toolbar button location has moved. Fix typos. --- CHANGELOG.rst | 4 + .../contentstore/features/common.py | 18 +- .../contentstore/features/html-editor.feature | 50 +- .../contentstore/features/html-editor.py | 188 +- cms/static/sass/views/_unit.scss | 1 + cms/templates/base.html | 4 +- cms/templates/widgets/html-edit.html | 6 - common/lib/xmodule/xmodule/css/html/edit.scss | 2 +- .../js/fixtures/html-edit-formattingbug.html | 18 - .../js/fixtures/html-edit-with-links.html | 10 - .../xmodule/js/fixtures/html-edit.html | 11 +- common/lib/xmodule/xmodule/js/js_test.yml | 4 +- .../xmodule/js/spec/html/edit_spec.coffee | 105 +- .../xmodule/xmodule/js/src/html/edit.coffee | 156 +- common/static/css/tiny-mce.css | 2 +- common/static/images/ico-tinymce-code.png | Bin 553 -> 337 bytes .../CodeMirror/addons/dialog/dialog.css | 32 + .../vendor/CodeMirror/addons/dialog/dialog.js | 122 + .../js/vendor/tiny_mce/jquery.tinymce.js | 1 - .../js/vendor/tiny_mce/jquery.tinymce.min.js | 1 + common/static/js/vendor/tiny_mce/langs/en.js | 1 - .../static/js/vendor/tiny_mce/langs/readme.md | 3 + .../tiny_mce/plugins/advhr/css/advhr.css | 5 - .../tiny_mce/plugins/advhr/editor_plugin.js | 1 - .../plugins/advhr/editor_plugin_src.js | 57 - .../vendor/tiny_mce/plugins/advhr/js/rule.js | 43 - .../tiny_mce/plugins/advhr/langs/en_dlg.js | 1 - .../js/vendor/tiny_mce/plugins/advhr/rule.htm | 58 - .../plugins/advimage/css/advimage.css | 13 - .../plugins/advimage/editor_plugin.js | 1 - .../plugins/advimage/editor_plugin_src.js | 50 - .../tiny_mce/plugins/advimage/image.htm | 235 - .../tiny_mce/plugins/advimage/img/sample.gif | Bin 1624 -> 0 bytes .../tiny_mce/plugins/advimage/js/image.js | 464 - .../tiny_mce/plugins/advimage/langs/en_dlg.js | 1 - .../tiny_mce/plugins/advlink/css/advlink.css | 8 - .../tiny_mce/plugins/advlink/editor_plugin.js | 1 - .../plugins/advlink/editor_plugin_src.js | 61 - .../tiny_mce/plugins/advlink/js/advlink.js | 543 - .../tiny_mce/plugins/advlink/langs/en_dlg.js | 1 - .../vendor/tiny_mce/plugins/advlink/link.htm | 338 - .../tiny_mce/plugins/advlist/editor_plugin.js | 1 - .../plugins/advlist/editor_plugin_src.js | 176 - .../tiny_mce/plugins/advlist/plugin.min.js | 1 + .../tiny_mce/plugins/anchor/plugin.min.js | 1 + .../plugins/autolink/editor_plugin.js | 1 - .../plugins/autolink/editor_plugin_src.js | 184 - .../tiny_mce/plugins/autolink/plugin.min.js | 1 + .../plugins/autoresize/editor_plugin.js | 1 - .../plugins/autoresize/editor_plugin_src.js | 119 - .../tiny_mce/plugins/autoresize/plugin.min.js | 1 + .../plugins/autosave/editor_plugin.js | 1 - .../plugins/autosave/editor_plugin_src.js | 433 - .../tiny_mce/plugins/autosave/plugin.min.js | 1 + .../tiny_mce/plugins/bbcode/editor_plugin.js | 1 - .../plugins/bbcode/editor_plugin_src.js | 120 - .../tiny_mce/plugins/bbcode/plugin.min.js | 1 + .../tiny_mce/plugins/charmap/plugin.min.js | 1 + .../tiny_mce/plugins/code/plugin.min.js | 1 + .../tiny_mce/plugins/codemirror/LICENSE.txt | 193 + .../tiny_mce/plugins/codemirror/README.txt | 26 + .../tiny_mce/plugins/codemirror/langs/en.js | 8 + .../tiny_mce/plugins/codemirror/langs/nl.js | 8 + .../tiny_mce/plugins/codemirror/plugin.js | 56 + .../tiny_mce/plugins/codemirror/plugin.min.js | 3 + .../tiny_mce/plugins/codemirror/source.html | 252 + .../plugins/contextmenu/editor_plugin.js | 1 - .../plugins/contextmenu/editor_plugin_src.js | 163 - .../plugins/contextmenu/plugin.min.js | 1 + .../plugins/directionality/editor_plugin.js | 1 - .../directionality/editor_plugin_src.js | 85 - .../plugins/directionality/plugin.min.js | 1 + .../img/smiley-cool.gif | Bin .../img/smiley-cry.gif | Bin .../img/smiley-embarassed.gif | Bin .../img/smiley-foot-in-mouth.gif | Bin .../img/smiley-frown.gif | Bin .../img/smiley-innocent.gif | Bin .../img/smiley-kiss.gif | Bin .../img/smiley-laughing.gif | Bin .../img/smiley-money-mouth.gif | Bin .../img/smiley-sealed.gif | Bin .../img/smiley-smile.gif | Bin .../img/smiley-surprised.gif | Bin .../img/smiley-tongue-out.gif | Bin .../img/smiley-undecided.gif | Bin .../img/smiley-wink.gif | Bin .../img/smiley-yell.gif | Bin .../tiny_mce/plugins/emoticons/plugin.min.js | 1 + .../plugins/emotions/editor_plugin.js | 1 - .../plugins/emotions/editor_plugin_src.js | 43 - .../tiny_mce/plugins/emotions/emotions.htm | 42 - .../tiny_mce/plugins/emotions/js/emotions.js | 43 - .../tiny_mce/plugins/emotions/langs/en_dlg.js | 1 - .../tiny_mce/plugins/example/dialog.htm | 22 - .../tiny_mce/plugins/example/editor_plugin.js | 1 - .../plugins/example/editor_plugin_src.js | 84 - .../tiny_mce/plugins/example/img/example.gif | Bin 87 -> 0 bytes .../tiny_mce/plugins/example/js/dialog.js | 19 - .../tiny_mce/plugins/example/langs/en.js | 3 - .../tiny_mce/plugins/example/langs/en_dlg.js | 3 - .../tiny_mce/plugins/example/plugin.min.js | 1 + .../example_dependency/editor_plugin.js | 1 - .../example_dependency/editor_plugin_src.js | 50 - .../plugins/example_dependency/plugin.min.js | 1 + .../plugins/fullpage/css/fullpage.css | 143 - .../plugins/fullpage/editor_plugin.js | 1 - .../plugins/fullpage/editor_plugin_src.js | 405 - .../tiny_mce/plugins/fullpage/fullpage.htm | 259 - .../tiny_mce/plugins/fullpage/js/fullpage.js | 232 - .../tiny_mce/plugins/fullpage/langs/en_dlg.js | 1 - .../tiny_mce/plugins/fullpage/plugin.min.js | 1 + .../plugins/fullscreen/editor_plugin.js | 1 - .../plugins/fullscreen/editor_plugin_src.js | 159 - .../plugins/fullscreen/fullscreen.htm | 110 - .../tiny_mce/plugins/fullscreen/plugin.min.js | 1 + .../vendor/tiny_mce/plugins/hr/plugin.min.js | 1 + .../tiny_mce/plugins/iespell/editor_plugin.js | 1 - .../plugins/iespell/editor_plugin_src.js | 54 - .../tiny_mce/plugins/image/plugin.min.js | 1 + .../tiny_mce/plugins/importcss/plugin.min.js | 1 + .../plugins/inlinepopups/editor_plugin.js | 1 - .../plugins/inlinepopups/editor_plugin_src.js | 699 - .../skins/clearlooks2/img/alert.gif | Bin 810 -> 0 bytes .../skins/clearlooks2/img/button.gif | Bin 272 -> 0 bytes .../skins/clearlooks2/img/buttons.gif | Bin 1195 -> 0 bytes .../skins/clearlooks2/img/confirm.gif | Bin 907 -> 0 bytes .../skins/clearlooks2/img/corners.gif | Bin 909 -> 0 bytes .../skins/clearlooks2/img/horizontal.gif | Bin 769 -> 0 bytes .../skins/clearlooks2/img/vertical.gif | Bin 84 -> 0 bytes .../inlinepopups/skins/clearlooks2/window.css | 90 - .../plugins/inlinepopups/template.htm | 387 - .../plugins/insertdatetime/editor_plugin.js | 1 - .../insertdatetime/editor_plugin_src.js | 83 - .../plugins/insertdatetime/plugin.min.js | 1 + .../tiny_mce/plugins/layer/editor_plugin.js | 1 - .../plugins/layer/editor_plugin_src.js | 262 - .../tiny_mce/plugins/layer/plugin.min.js | 1 + .../plugins/legacyoutput/editor_plugin.js | 1 - .../plugins/legacyoutput/editor_plugin_src.js | 139 - .../plugins/legacyoutput/plugin.min.js | 1 + .../tiny_mce/plugins/link/plugin.min.js | 1 + .../tiny_mce/plugins/lists/editor_plugin.js | 1 - .../plugins/lists/editor_plugin_src.js | 955 - .../tiny_mce/plugins/lists/plugin.min.js | 1 + .../tiny_mce/plugins/media/css/media.css | 17 - .../tiny_mce/plugins/media/editor_plugin.js | 1 - .../plugins/media/editor_plugin_src.js | 898 - .../vendor/tiny_mce/plugins/media/js/embed.js | 73 - .../vendor/tiny_mce/plugins/media/js/media.js | 513 - .../tiny_mce/plugins/media/langs/en_dlg.js | 1 - .../vendor/tiny_mce/plugins/media/media.htm | 922 - .../tiny_mce/plugins/media/moxieplayer.swf | Bin 19980 -> 20017 bytes .../tiny_mce/plugins/media/plugin.min.js | 1 + .../plugins/nonbreaking/editor_plugin.js | 1 - .../plugins/nonbreaking/editor_plugin_src.js | 54 - .../plugins/nonbreaking/plugin.min.js | 1 + .../plugins/noneditable/editor_plugin.js | 1 - .../plugins/noneditable/editor_plugin_src.js | 537 - .../plugins/noneditable/plugin.min.js | 1 + .../plugins/pagebreak/editor_plugin.js | 1 - .../plugins/pagebreak/editor_plugin_src.js | 74 - .../tiny_mce/plugins/pagebreak/plugin.min.js | 1 + .../tiny_mce/plugins/paste/editor_plugin.js | 1 - .../plugins/paste/editor_plugin_src.js | 885 - .../tiny_mce/plugins/paste/js/pastetext.js | 36 - .../tiny_mce/plugins/paste/js/pasteword.js | 51 - .../tiny_mce/plugins/paste/langs/en_dlg.js | 1 - .../tiny_mce/plugins/paste/pastetext.htm | 27 - .../tiny_mce/plugins/paste/pasteword.htm | 21 - .../tiny_mce/plugins/paste/plugin.min.js | 1 + .../tiny_mce/plugins/preview/editor_plugin.js | 1 - .../plugins/preview/editor_plugin_src.js | 53 - .../tiny_mce/plugins/preview/example.html | 28 - .../plugins/preview/jscripts/embed.js | 73 - .../tiny_mce/plugins/preview/plugin.min.js | 1 + .../tiny_mce/plugins/preview/preview.html | 17 - .../tiny_mce/plugins/print/editor_plugin.js | 1 - .../plugins/print/editor_plugin_src.js | 34 - .../tiny_mce/plugins/print/plugin.min.js | 1 + .../tiny_mce/plugins/save/editor_plugin.js | 1 - .../plugins/save/editor_plugin_src.js | 101 - .../tiny_mce/plugins/save/plugin.min.js | 1 + .../searchreplace/css/searchreplace.css | 6 - .../plugins/searchreplace/editor_plugin.js | 1 - .../searchreplace/editor_plugin_src.js | 61 - .../plugins/searchreplace/js/searchreplace.js | 142 - .../plugins/searchreplace/langs/en_dlg.js | 1 - .../plugins/searchreplace/plugin.min.js | 1 + .../plugins/searchreplace/searchreplace.htm | 100 - .../plugins/spellchecker/css/content.css | 1 - .../plugins/spellchecker/editor_plugin.js | 1 - .../plugins/spellchecker/editor_plugin_src.js | 436 - .../plugins/spellchecker/plugin.min.js | 1 + .../tiny_mce/plugins/style/css/props.css | 14 - .../tiny_mce/plugins/style/editor_plugin.js | 1 - .../plugins/style/editor_plugin_src.js | 71 - .../vendor/tiny_mce/plugins/style/js/props.js | 709 - .../tiny_mce/plugins/style/langs/en_dlg.js | 1 - .../vendor/tiny_mce/plugins/style/props.htm | 845 - .../vendor/tiny_mce/plugins/style/readme.txt | 19 - .../plugins/tabfocus/editor_plugin.js | 1 - .../plugins/tabfocus/editor_plugin_src.js | 122 - .../tiny_mce/plugins/tabfocus/plugin.min.js | 1 + .../js/vendor/tiny_mce/plugins/table/cell.htm | 180 - .../tiny_mce/plugins/table/css/cell.css | 17 - .../vendor/tiny_mce/plugins/table/css/row.css | 25 - .../tiny_mce/plugins/table/css/table.css | 13 - .../tiny_mce/plugins/table/editor_plugin.js | 1 - .../plugins/table/editor_plugin_src.js | 1456 -- .../vendor/tiny_mce/plugins/table/js/cell.js | 319 - .../tiny_mce/plugins/table/js/merge_cells.js | 27 - .../vendor/tiny_mce/plugins/table/js/row.js | 254 - .../vendor/tiny_mce/plugins/table/js/table.js | 501 - .../tiny_mce/plugins/table/langs/en_dlg.js | 1 - .../tiny_mce/plugins/table/merge_cells.htm | 32 - .../tiny_mce/plugins/table/plugin.min.js | 1 + .../js/vendor/tiny_mce/plugins/table/row.htm | 158 - .../vendor/tiny_mce/plugins/table/table.htm | 188 - .../tiny_mce/plugins/template/blank.htm | 12 - .../plugins/template/css/template.css | 23 - .../plugins/template/editor_plugin.js | 1 - .../plugins/template/editor_plugin_src.js | 159 - .../tiny_mce/plugins/template/js/template.js | 106 - .../tiny_mce/plugins/template/langs/en_dlg.js | 1 - .../tiny_mce/plugins/template/plugin.min.js | 1 + .../tiny_mce/plugins/template/template.htm | 31 - .../tiny_mce/plugins/textcolor/plugin.min.js | 1 + .../plugins/visualblocks/css/visualblocks.css | 147 +- .../plugins/visualblocks/editor_plugin.js | 1 - .../plugins/visualblocks/editor_plugin_src.js | 63 - .../plugins/visualblocks/plugin.min.js | 1 + .../plugins/visualchars/editor_plugin.js | 1 - .../plugins/visualchars/editor_plugin_src.js | 83 - .../plugins/visualchars/plugin.min.js | 1 + .../plugins/wordcount/editor_plugin.js | 1 - .../plugins/wordcount/editor_plugin_src.js | 122 - .../tiny_mce/plugins/wordcount/plugin.min.js | 1 + .../tiny_mce/plugins/xhtmlxtras/abbr.htm | 142 - .../tiny_mce/plugins/xhtmlxtras/acronym.htm | 142 - .../plugins/xhtmlxtras/attributes.htm | 149 - .../tiny_mce/plugins/xhtmlxtras/cite.htm | 142 - .../plugins/xhtmlxtras/css/attributes.css | 11 - .../tiny_mce/plugins/xhtmlxtras/css/popup.css | 9 - .../tiny_mce/plugins/xhtmlxtras/del.htm | 162 - .../plugins/xhtmlxtras/editor_plugin.js | 1 - .../plugins/xhtmlxtras/editor_plugin_src.js | 132 - .../tiny_mce/plugins/xhtmlxtras/ins.htm | 162 - .../tiny_mce/plugins/xhtmlxtras/js/abbr.js | 28 - .../tiny_mce/plugins/xhtmlxtras/js/acronym.js | 28 - .../plugins/xhtmlxtras/js/attributes.js | 111 - .../tiny_mce/plugins/xhtmlxtras/js/cite.js | 28 - .../tiny_mce/plugins/xhtmlxtras/js/del.js | 53 - .../plugins/xhtmlxtras/js/element_common.js | 229 - .../tiny_mce/plugins/xhtmlxtras/js/ins.js | 53 - .../plugins/xhtmlxtras/langs/en_dlg.js | 1 - .../skins/lightgray/content.inline.min.css | 1 + .../tiny_mce/skins/lightgray/content.min.css | 1 + .../tiny_mce/skins/lightgray/fonts/readme.md | 1 + .../skins/lightgray/fonts/tinymce-small.eot | Bin 0 -> 8348 bytes .../skins/lightgray/fonts/tinymce-small.svg | 175 + .../skins/lightgray/fonts/tinymce-small.ttf | Bin 0 -> 8164 bytes .../skins/lightgray/fonts/tinymce-small.woff | Bin 0 -> 8340 bytes .../skins/lightgray/fonts/tinymce.eot | Bin 0 -> 8276 bytes .../skins/lightgray/fonts/tinymce.svg | 153 + .../skins/lightgray/fonts/tinymce.ttf | Bin 0 -> 8112 bytes .../skins/lightgray/fonts/tinymce.woff | Bin 0 -> 8408 bytes .../tiny_mce/skins/lightgray/img/anchor.gif | Bin 0 -> 53 bytes .../tiny_mce/skins/lightgray/img/loader.gif | Bin 0 -> 2608 bytes .../tiny_mce/skins/lightgray/img/object.gif | Bin 0 -> 152 bytes .../lightgray}/img/trans.gif | Bin .../tiny_mce/skins/lightgray/skin.ie7.min.css | 1 + .../tiny_mce/skins/lightgray/skin.min.css | 1 + .../skins/studio-tmce4/content.inline.min.css | 1 + .../skins/studio-tmce4/content.min.css | 1 + .../studio-tmce4/fonts/icomoon-small.eot | Bin 0 -> 8344 bytes .../studio-tmce4/fonts/icomoon-small.svg | 175 + .../studio-tmce4/fonts/icomoon-small.ttf | Bin 0 -> 8160 bytes .../studio-tmce4/fonts/icomoon-small.woff | Bin 0 -> 8336 bytes .../skins/studio-tmce4/fonts/icomoon.eot | Bin 0 -> 8268 bytes .../skins/studio-tmce4/fonts/icomoon.svg | 153 + .../skins/studio-tmce4/fonts/icomoon.ttf | Bin 0 -> 8104 bytes .../skins/studio-tmce4/fonts/icomoon.woff | Bin 0 -> 8400 bytes .../skins/studio-tmce4/fonts/readme.md | 1 + .../skins/studio-tmce4/img/anchor.gif | Bin 0 -> 53 bytes .../skins/studio-tmce4/img/loader.gif | Bin 0 -> 2608 bytes .../skins/studio-tmce4/img/object.gif | Bin 0 -> 152 bytes .../tiny_mce/skins/studio-tmce4/img/trans.gif | Bin 0 -> 43 bytes .../studio-tmce4}/img/wline.gif | Bin .../skins/studio-tmce4/skin.ie7.min.css | 1 + .../tiny_mce/skins/studio-tmce4/skin.json | 51 + .../tiny_mce/skins/studio-tmce4/skin.min.css | 1 + .../vendor/tiny_mce/themes/advanced/about.htm | 52 - .../tiny_mce/themes/advanced/anchor.htm | 26 - .../tiny_mce/themes/advanced/charmap.htm | 55 - .../tiny_mce/themes/advanced/color_picker.htm | 70 - .../themes/advanced/editor_template.js | 1 - .../themes/advanced/editor_template_src.js | 1490 -- .../vendor/tiny_mce/themes/advanced/image.htm | 80 - .../themes/advanced/img/colorpicker.jpg | Bin 2584 -> 0 bytes .../tiny_mce/themes/advanced/img/flash.gif | Bin 239 -> 0 bytes .../tiny_mce/themes/advanced/img/icons.gif | Bin 11982 -> 0 bytes .../tiny_mce/themes/advanced/img/iframe.gif | Bin 600 -> 0 bytes .../themes/advanced/img/pagebreak.gif | Bin 325 -> 0 bytes .../themes/advanced/img/quicktime.gif | Bin 301 -> 0 bytes .../themes/advanced/img/realmedia.gif | Bin 439 -> 0 bytes .../themes/advanced/img/shockwave.gif | Bin 384 -> 0 bytes .../themes/advanced/img/studio-icons.png | Bin 17470 -> 0 bytes .../tiny_mce/themes/advanced/img/video.gif | Bin 597 -> 0 bytes .../themes/advanced/img/windowsmedia.gif | Bin 415 -> 0 bytes .../tiny_mce/themes/advanced/js/about.js | 73 - .../tiny_mce/themes/advanced/js/anchor.js | 56 - .../tiny_mce/themes/advanced/js/charmap.js | 363 - .../themes/advanced/js/color_picker.js | 345 - .../tiny_mce/themes/advanced/js/image.js | 253 - .../tiny_mce/themes/advanced/js/link.js | 159 - .../themes/advanced/js/source_editor.js | 78 - .../tiny_mce/themes/advanced/langs/en.js | 1 - .../tiny_mce/themes/advanced/langs/en_dlg.js | 1 - .../vendor/tiny_mce/themes/advanced/link.htm | 57 - .../tiny_mce/themes/advanced/shortcuts.htm | 47 - .../themes/advanced/skins/default/content.css | 50 - .../themes/advanced/skins/default/dialog.css | 118 - .../advanced/skins/default/img/buttons.png | Bin 3133 -> 0 bytes .../advanced/skins/default/img/items.gif | Bin 64 -> 0 bytes .../advanced/skins/default/img/menu_arrow.gif | Bin 68 -> 0 bytes .../advanced/skins/default/img/menu_check.gif | Bin 70 -> 0 bytes .../advanced/skins/default/img/progress.gif | Bin 1787 -> 0 bytes .../advanced/skins/default/img/tabs.gif | Bin 1322 -> 0 bytes .../themes/advanced/skins/default/ui.css | 219 - .../advanced/skins/highcontrast/content.css | 24 - .../advanced/skins/highcontrast/dialog.css | 106 - .../themes/advanced/skins/highcontrast/ui.css | 106 - .../themes/advanced/skins/o2k7/content.css | 48 - .../themes/advanced/skins/o2k7/dialog.css | 118 - .../advanced/skins/o2k7/img/button_bg.png | Bin 2766 -> 0 bytes .../skins/o2k7/img/button_bg_black.png | Bin 651 -> 0 bytes .../skins/o2k7/img/button_bg_silver.png | Bin 2084 -> 0 bytes .../themes/advanced/skins/o2k7/ui.css | 222 - .../themes/advanced/skins/o2k7/ui_black.css | 8 - .../themes/advanced/skins/o2k7/ui_silver.css | 5 - .../themes/advanced/skins/studio/content.css | 50 - .../themes/advanced/skins/studio/dialog.css | 118 - .../advanced/skins/studio/img/buttons.png | Bin 3133 -> 0 bytes .../advanced/skins/studio/img/items.gif | Bin 64 -> 0 bytes .../advanced/skins/studio/img/menu_arrow.gif | Bin 68 -> 0 bytes .../advanced/skins/studio/img/menu_check.gif | Bin 70 -> 0 bytes .../advanced/skins/studio/img/progress.gif | Bin 1787 -> 0 bytes .../themes/advanced/skins/studio/img/tabs.gif | Bin 1322 -> 0 bytes .../themes/advanced/skins/studio/ui.css | 259 - .../themes/advanced/source_editor.htm | 25 - .../tiny_mce/themes/modern/theme.min.js | 1 + .../tiny_mce/themes/simple/editor_template.js | 1 - .../themes/simple/editor_template_src.js | 84 - .../tiny_mce/themes/simple/img/icons.gif | Bin 806 -> 0 bytes .../vendor/tiny_mce/themes/simple/langs/en.js | 1 - .../themes/simple/skins/default/content.css | 25 - .../themes/simple/skins/default/ui.css | 32 - .../themes/simple/skins/o2k7/content.css | 17 - .../simple/skins/o2k7/img/button_bg.png | Bin 5102 -> 0 bytes .../tiny_mce/themes/simple/skins/o2k7/ui.css | 35 - common/static/js/vendor/tiny_mce/tiny_mce.js | 1 - .../static/js/vendor/tiny_mce/tiny_mce_src.js | 17811 ---------------- .../static/js/vendor/tiny_mce/tinymce.min.js | 6340 ++++++ .../vendor/tiny_mce/utils/editable_selects.js | 70 - .../js/vendor/tiny_mce/utils/form_utils.js | 210 - .../static/js/vendor/tiny_mce/utils/mctabs.js | 162 - .../js/vendor/tiny_mce/utils/validate.js | 252 - .../courseware/instructor_dashboard.html | 4 +- .../instructor_dashboard_2.html | 4 +- lms/templates/widgets/html-edit.html | 6 - 371 files changed, 8236 insertions(+), 43474 deletions(-) delete mode 100644 common/lib/xmodule/xmodule/js/fixtures/html-edit-formattingbug.html delete mode 100644 common/lib/xmodule/xmodule/js/fixtures/html-edit-with-links.html create mode 100755 common/static/js/vendor/CodeMirror/addons/dialog/dialog.css create mode 100755 common/static/js/vendor/CodeMirror/addons/dialog/dialog.js delete mode 100644 common/static/js/vendor/tiny_mce/jquery.tinymce.js create mode 100644 common/static/js/vendor/tiny_mce/jquery.tinymce.min.js delete mode 100644 common/static/js/vendor/tiny_mce/langs/en.js create mode 100644 common/static/js/vendor/tiny_mce/langs/readme.md delete mode 100644 common/static/js/vendor/tiny_mce/plugins/advhr/css/advhr.css delete mode 100644 common/static/js/vendor/tiny_mce/plugins/advhr/editor_plugin.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/advhr/editor_plugin_src.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/advhr/js/rule.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/advhr/langs/en_dlg.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/advhr/rule.htm delete mode 100644 common/static/js/vendor/tiny_mce/plugins/advimage/css/advimage.css delete mode 100644 common/static/js/vendor/tiny_mce/plugins/advimage/editor_plugin.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/advimage/editor_plugin_src.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/advimage/image.htm delete mode 100644 common/static/js/vendor/tiny_mce/plugins/advimage/img/sample.gif delete mode 100644 common/static/js/vendor/tiny_mce/plugins/advimage/js/image.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/advimage/langs/en_dlg.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/advlink/css/advlink.css delete mode 100644 common/static/js/vendor/tiny_mce/plugins/advlink/editor_plugin.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/advlink/editor_plugin_src.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/advlink/js/advlink.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/advlink/langs/en_dlg.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/advlink/link.htm delete mode 100644 common/static/js/vendor/tiny_mce/plugins/advlist/editor_plugin.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/advlist/editor_plugin_src.js create mode 100644 common/static/js/vendor/tiny_mce/plugins/advlist/plugin.min.js create mode 100644 common/static/js/vendor/tiny_mce/plugins/anchor/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/autolink/editor_plugin.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/autolink/editor_plugin_src.js create mode 100644 common/static/js/vendor/tiny_mce/plugins/autolink/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/autoresize/editor_plugin.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/autoresize/editor_plugin_src.js create mode 100644 common/static/js/vendor/tiny_mce/plugins/autoresize/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/autosave/editor_plugin.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/autosave/editor_plugin_src.js create mode 100644 common/static/js/vendor/tiny_mce/plugins/autosave/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/bbcode/editor_plugin.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/bbcode/editor_plugin_src.js create mode 100644 common/static/js/vendor/tiny_mce/plugins/bbcode/plugin.min.js create mode 100644 common/static/js/vendor/tiny_mce/plugins/charmap/plugin.min.js create mode 100644 common/static/js/vendor/tiny_mce/plugins/code/plugin.min.js create mode 100644 common/static/js/vendor/tiny_mce/plugins/codemirror/LICENSE.txt create mode 100644 common/static/js/vendor/tiny_mce/plugins/codemirror/README.txt create mode 100644 common/static/js/vendor/tiny_mce/plugins/codemirror/langs/en.js create mode 100644 common/static/js/vendor/tiny_mce/plugins/codemirror/langs/nl.js create mode 100644 common/static/js/vendor/tiny_mce/plugins/codemirror/plugin.js create mode 100644 common/static/js/vendor/tiny_mce/plugins/codemirror/plugin.min.js create mode 100644 common/static/js/vendor/tiny_mce/plugins/codemirror/source.html delete mode 100644 common/static/js/vendor/tiny_mce/plugins/contextmenu/editor_plugin.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/contextmenu/editor_plugin_src.js create mode 100644 common/static/js/vendor/tiny_mce/plugins/contextmenu/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/directionality/editor_plugin.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/directionality/editor_plugin_src.js create mode 100644 common/static/js/vendor/tiny_mce/plugins/directionality/plugin.min.js rename common/static/js/vendor/tiny_mce/plugins/{emotions => emoticons}/img/smiley-cool.gif (100%) rename common/static/js/vendor/tiny_mce/plugins/{emotions => emoticons}/img/smiley-cry.gif (100%) rename common/static/js/vendor/tiny_mce/plugins/{emotions => emoticons}/img/smiley-embarassed.gif (100%) rename common/static/js/vendor/tiny_mce/plugins/{emotions => emoticons}/img/smiley-foot-in-mouth.gif (100%) rename common/static/js/vendor/tiny_mce/plugins/{emotions => emoticons}/img/smiley-frown.gif (100%) rename common/static/js/vendor/tiny_mce/plugins/{emotions => emoticons}/img/smiley-innocent.gif (100%) rename common/static/js/vendor/tiny_mce/plugins/{emotions => emoticons}/img/smiley-kiss.gif (100%) rename common/static/js/vendor/tiny_mce/plugins/{emotions => emoticons}/img/smiley-laughing.gif (100%) rename common/static/js/vendor/tiny_mce/plugins/{emotions => emoticons}/img/smiley-money-mouth.gif (100%) rename common/static/js/vendor/tiny_mce/plugins/{emotions => emoticons}/img/smiley-sealed.gif (100%) rename common/static/js/vendor/tiny_mce/plugins/{emotions => emoticons}/img/smiley-smile.gif (100%) rename common/static/js/vendor/tiny_mce/plugins/{emotions => emoticons}/img/smiley-surprised.gif (100%) rename common/static/js/vendor/tiny_mce/plugins/{emotions => emoticons}/img/smiley-tongue-out.gif (100%) rename common/static/js/vendor/tiny_mce/plugins/{emotions => emoticons}/img/smiley-undecided.gif (100%) rename common/static/js/vendor/tiny_mce/plugins/{emotions => emoticons}/img/smiley-wink.gif (100%) rename common/static/js/vendor/tiny_mce/plugins/{emotions => emoticons}/img/smiley-yell.gif (100%) create mode 100644 common/static/js/vendor/tiny_mce/plugins/emoticons/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/emotions/editor_plugin.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/emotions/editor_plugin_src.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/emotions/emotions.htm delete mode 100644 common/static/js/vendor/tiny_mce/plugins/emotions/js/emotions.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/emotions/langs/en_dlg.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/example/dialog.htm delete mode 100644 common/static/js/vendor/tiny_mce/plugins/example/editor_plugin.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/example/editor_plugin_src.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/example/img/example.gif delete mode 100644 common/static/js/vendor/tiny_mce/plugins/example/js/dialog.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/example/langs/en.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/example/langs/en_dlg.js create mode 100644 common/static/js/vendor/tiny_mce/plugins/example/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/example_dependency/editor_plugin.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/example_dependency/editor_plugin_src.js create mode 100644 common/static/js/vendor/tiny_mce/plugins/example_dependency/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/fullpage/css/fullpage.css delete mode 100644 common/static/js/vendor/tiny_mce/plugins/fullpage/editor_plugin.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/fullpage/editor_plugin_src.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/fullpage/fullpage.htm delete mode 100644 common/static/js/vendor/tiny_mce/plugins/fullpage/js/fullpage.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/fullpage/langs/en_dlg.js create mode 100644 common/static/js/vendor/tiny_mce/plugins/fullpage/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/fullscreen/editor_plugin.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/fullscreen/editor_plugin_src.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/fullscreen/fullscreen.htm create mode 100644 common/static/js/vendor/tiny_mce/plugins/fullscreen/plugin.min.js create mode 100644 common/static/js/vendor/tiny_mce/plugins/hr/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/iespell/editor_plugin.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/iespell/editor_plugin_src.js create mode 100644 common/static/js/vendor/tiny_mce/plugins/image/plugin.min.js create mode 100644 common/static/js/vendor/tiny_mce/plugins/importcss/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/inlinepopups/editor_plugin.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/inlinepopups/editor_plugin_src.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif delete mode 100644 common/static/js/vendor/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif delete mode 100644 common/static/js/vendor/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif delete mode 100644 common/static/js/vendor/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif delete mode 100644 common/static/js/vendor/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif delete mode 100644 common/static/js/vendor/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif delete mode 100644 common/static/js/vendor/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif delete mode 100644 common/static/js/vendor/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css delete mode 100644 common/static/js/vendor/tiny_mce/plugins/inlinepopups/template.htm delete mode 100644 common/static/js/vendor/tiny_mce/plugins/insertdatetime/editor_plugin.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/insertdatetime/editor_plugin_src.js create mode 100644 common/static/js/vendor/tiny_mce/plugins/insertdatetime/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/layer/editor_plugin.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/layer/editor_plugin_src.js create mode 100644 common/static/js/vendor/tiny_mce/plugins/layer/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/legacyoutput/editor_plugin.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/legacyoutput/editor_plugin_src.js create mode 100644 common/static/js/vendor/tiny_mce/plugins/legacyoutput/plugin.min.js create mode 100644 common/static/js/vendor/tiny_mce/plugins/link/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/lists/editor_plugin.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/lists/editor_plugin_src.js create mode 100644 common/static/js/vendor/tiny_mce/plugins/lists/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/media/css/media.css delete mode 100644 common/static/js/vendor/tiny_mce/plugins/media/editor_plugin.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/media/editor_plugin_src.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/media/js/embed.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/media/js/media.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/media/langs/en_dlg.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/media/media.htm create mode 100644 common/static/js/vendor/tiny_mce/plugins/media/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/nonbreaking/editor_plugin.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/nonbreaking/editor_plugin_src.js create mode 100644 common/static/js/vendor/tiny_mce/plugins/nonbreaking/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/noneditable/editor_plugin.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/noneditable/editor_plugin_src.js create mode 100644 common/static/js/vendor/tiny_mce/plugins/noneditable/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/pagebreak/editor_plugin.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/pagebreak/editor_plugin_src.js create mode 100644 common/static/js/vendor/tiny_mce/plugins/pagebreak/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/paste/editor_plugin.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/paste/editor_plugin_src.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/paste/js/pastetext.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/paste/js/pasteword.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/paste/langs/en_dlg.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/paste/pastetext.htm delete mode 100644 common/static/js/vendor/tiny_mce/plugins/paste/pasteword.htm create mode 100644 common/static/js/vendor/tiny_mce/plugins/paste/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/preview/editor_plugin.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/preview/editor_plugin_src.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/preview/example.html delete mode 100644 common/static/js/vendor/tiny_mce/plugins/preview/jscripts/embed.js create mode 100644 common/static/js/vendor/tiny_mce/plugins/preview/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/preview/preview.html delete mode 100644 common/static/js/vendor/tiny_mce/plugins/print/editor_plugin.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/print/editor_plugin_src.js create mode 100644 common/static/js/vendor/tiny_mce/plugins/print/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/save/editor_plugin.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/save/editor_plugin_src.js create mode 100644 common/static/js/vendor/tiny_mce/plugins/save/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/searchreplace/css/searchreplace.css delete mode 100644 common/static/js/vendor/tiny_mce/plugins/searchreplace/editor_plugin.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/searchreplace/editor_plugin_src.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/searchreplace/js/searchreplace.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/searchreplace/langs/en_dlg.js create mode 100644 common/static/js/vendor/tiny_mce/plugins/searchreplace/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/searchreplace/searchreplace.htm delete mode 100644 common/static/js/vendor/tiny_mce/plugins/spellchecker/css/content.css delete mode 100644 common/static/js/vendor/tiny_mce/plugins/spellchecker/editor_plugin.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/spellchecker/editor_plugin_src.js create mode 100644 common/static/js/vendor/tiny_mce/plugins/spellchecker/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/style/css/props.css delete mode 100644 common/static/js/vendor/tiny_mce/plugins/style/editor_plugin.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/style/editor_plugin_src.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/style/js/props.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/style/langs/en_dlg.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/style/props.htm delete mode 100644 common/static/js/vendor/tiny_mce/plugins/style/readme.txt delete mode 100644 common/static/js/vendor/tiny_mce/plugins/tabfocus/editor_plugin.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/tabfocus/editor_plugin_src.js create mode 100644 common/static/js/vendor/tiny_mce/plugins/tabfocus/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/table/cell.htm delete mode 100644 common/static/js/vendor/tiny_mce/plugins/table/css/cell.css delete mode 100644 common/static/js/vendor/tiny_mce/plugins/table/css/row.css delete mode 100644 common/static/js/vendor/tiny_mce/plugins/table/css/table.css delete mode 100644 common/static/js/vendor/tiny_mce/plugins/table/editor_plugin.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/table/editor_plugin_src.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/table/js/cell.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/table/js/merge_cells.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/table/js/row.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/table/js/table.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/table/langs/en_dlg.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/table/merge_cells.htm create mode 100644 common/static/js/vendor/tiny_mce/plugins/table/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/table/row.htm delete mode 100644 common/static/js/vendor/tiny_mce/plugins/table/table.htm delete mode 100644 common/static/js/vendor/tiny_mce/plugins/template/blank.htm delete mode 100644 common/static/js/vendor/tiny_mce/plugins/template/css/template.css delete mode 100644 common/static/js/vendor/tiny_mce/plugins/template/editor_plugin.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/template/editor_plugin_src.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/template/js/template.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/template/langs/en_dlg.js create mode 100644 common/static/js/vendor/tiny_mce/plugins/template/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/template/template.htm create mode 100644 common/static/js/vendor/tiny_mce/plugins/textcolor/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/visualblocks/editor_plugin.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/visualblocks/editor_plugin_src.js create mode 100644 common/static/js/vendor/tiny_mce/plugins/visualblocks/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/visualchars/editor_plugin.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/visualchars/editor_plugin_src.js create mode 100644 common/static/js/vendor/tiny_mce/plugins/visualchars/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/wordcount/editor_plugin.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/wordcount/editor_plugin_src.js create mode 100644 common/static/js/vendor/tiny_mce/plugins/wordcount/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/abbr.htm delete mode 100644 common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/acronym.htm delete mode 100644 common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/attributes.htm delete mode 100644 common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/cite.htm delete mode 100644 common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/css/attributes.css delete mode 100644 common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/css/popup.css delete mode 100644 common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/del.htm delete mode 100644 common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/editor_plugin.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/ins.htm delete mode 100644 common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/js/abbr.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/js/acronym.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/js/attributes.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/js/cite.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/js/del.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/js/element_common.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/js/ins.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js create mode 100644 common/static/js/vendor/tiny_mce/skins/lightgray/content.inline.min.css create mode 100644 common/static/js/vendor/tiny_mce/skins/lightgray/content.min.css create mode 100644 common/static/js/vendor/tiny_mce/skins/lightgray/fonts/readme.md create mode 100644 common/static/js/vendor/tiny_mce/skins/lightgray/fonts/tinymce-small.eot create mode 100644 common/static/js/vendor/tiny_mce/skins/lightgray/fonts/tinymce-small.svg create mode 100644 common/static/js/vendor/tiny_mce/skins/lightgray/fonts/tinymce-small.ttf create mode 100644 common/static/js/vendor/tiny_mce/skins/lightgray/fonts/tinymce-small.woff create mode 100644 common/static/js/vendor/tiny_mce/skins/lightgray/fonts/tinymce.eot create mode 100644 common/static/js/vendor/tiny_mce/skins/lightgray/fonts/tinymce.svg create mode 100644 common/static/js/vendor/tiny_mce/skins/lightgray/fonts/tinymce.ttf create mode 100644 common/static/js/vendor/tiny_mce/skins/lightgray/fonts/tinymce.woff create mode 100644 common/static/js/vendor/tiny_mce/skins/lightgray/img/anchor.gif create mode 100644 common/static/js/vendor/tiny_mce/skins/lightgray/img/loader.gif create mode 100644 common/static/js/vendor/tiny_mce/skins/lightgray/img/object.gif rename common/static/js/vendor/tiny_mce/{themes/advanced => skins/lightgray}/img/trans.gif (100%) create mode 100644 common/static/js/vendor/tiny_mce/skins/lightgray/skin.ie7.min.css create mode 100644 common/static/js/vendor/tiny_mce/skins/lightgray/skin.min.css create mode 100755 common/static/js/vendor/tiny_mce/skins/studio-tmce4/content.inline.min.css create mode 100755 common/static/js/vendor/tiny_mce/skins/studio-tmce4/content.min.css create mode 100755 common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon-small.eot create mode 100755 common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon-small.svg create mode 100755 common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon-small.ttf create mode 100755 common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon-small.woff create mode 100755 common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon.eot create mode 100755 common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon.svg create mode 100755 common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon.ttf create mode 100755 common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon.woff create mode 100755 common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/readme.md create mode 100755 common/static/js/vendor/tiny_mce/skins/studio-tmce4/img/anchor.gif create mode 100755 common/static/js/vendor/tiny_mce/skins/studio-tmce4/img/loader.gif create mode 100755 common/static/js/vendor/tiny_mce/skins/studio-tmce4/img/object.gif create mode 100755 common/static/js/vendor/tiny_mce/skins/studio-tmce4/img/trans.gif rename common/static/js/vendor/tiny_mce/{plugins/spellchecker => skins/studio-tmce4}/img/wline.gif (100%) mode change 100644 => 100755 create mode 100755 common/static/js/vendor/tiny_mce/skins/studio-tmce4/skin.ie7.min.css create mode 100755 common/static/js/vendor/tiny_mce/skins/studio-tmce4/skin.json create mode 100755 common/static/js/vendor/tiny_mce/skins/studio-tmce4/skin.min.css delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/about.htm delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/anchor.htm delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/charmap.htm delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/color_picker.htm delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/editor_template.js delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/editor_template_src.js delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/image.htm delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/img/colorpicker.jpg delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/img/flash.gif delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/img/icons.gif delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/img/iframe.gif delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/img/pagebreak.gif delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/img/quicktime.gif delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/img/realmedia.gif delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/img/shockwave.gif delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/img/studio-icons.png delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/img/video.gif delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/img/windowsmedia.gif delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/js/about.js delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/js/anchor.js delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/js/charmap.js delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/js/color_picker.js delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/js/image.js delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/js/link.js delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/js/source_editor.js delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/langs/en.js delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/langs/en_dlg.js delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/link.htm delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/shortcuts.htm delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/skins/default/content.css delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/skins/default/dialog.css delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/skins/default/img/buttons.png delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/skins/default/img/items.gif delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/skins/default/img/menu_check.gif delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/skins/default/img/progress.gif delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/skins/default/img/tabs.gif delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/skins/default/ui.css delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/skins/highcontrast/content.css delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/skins/highcontrast/dialog.css delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/skins/highcontrast/ui.css delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/skins/o2k7/content.css delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/skins/o2k7/dialog.css delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/skins/o2k7/ui.css delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/skins/o2k7/ui_black.css delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/skins/studio/content.css delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/skins/studio/dialog.css delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/skins/studio/img/buttons.png delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/skins/studio/img/items.gif delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/skins/studio/img/menu_arrow.gif delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/skins/studio/img/menu_check.gif delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/skins/studio/img/progress.gif delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/skins/studio/img/tabs.gif delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/skins/studio/ui.css delete mode 100644 common/static/js/vendor/tiny_mce/themes/advanced/source_editor.htm create mode 100644 common/static/js/vendor/tiny_mce/themes/modern/theme.min.js delete mode 100644 common/static/js/vendor/tiny_mce/themes/simple/editor_template.js delete mode 100644 common/static/js/vendor/tiny_mce/themes/simple/editor_template_src.js delete mode 100644 common/static/js/vendor/tiny_mce/themes/simple/img/icons.gif delete mode 100644 common/static/js/vendor/tiny_mce/themes/simple/langs/en.js delete mode 100644 common/static/js/vendor/tiny_mce/themes/simple/skins/default/content.css delete mode 100644 common/static/js/vendor/tiny_mce/themes/simple/skins/default/ui.css delete mode 100644 common/static/js/vendor/tiny_mce/themes/simple/skins/o2k7/content.css delete mode 100644 common/static/js/vendor/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png delete mode 100644 common/static/js/vendor/tiny_mce/themes/simple/skins/o2k7/ui.css delete mode 100644 common/static/js/vendor/tiny_mce/tiny_mce.js delete mode 100644 common/static/js/vendor/tiny_mce/tiny_mce_src.js create mode 100644 common/static/js/vendor/tiny_mce/tinymce.min.js delete mode 100644 common/static/js/vendor/tiny_mce/utils/editable_selects.js delete mode 100644 common/static/js/vendor/tiny_mce/utils/form_utils.js delete mode 100644 common/static/js/vendor/tiny_mce/utils/mctabs.js delete mode 100644 common/static/js/vendor/tiny_mce/utils/validate.js diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 40cf14c1f2..ad83dbbf30 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -16,6 +16,10 @@ Studio: Support for viewing built-in tabs on the Pages page. STUD-1193 Blades: Fixed bug when image mapped input's Show Answer multiplies rectangles on many inputtypes. BLD-810. +Studio and LMS: Upgrade version of TinyMCE to 4.0.16. Switch from tabbed Visual/HTML +Editor for HTML modules to showing the code editor as a plugin within TinyMCE (triggered +from toolbar). STUD-1422 + LMS: Enabled screen reader feedback of problem responses. LMS-2158 diff --git a/cms/djangoapps/contentstore/features/common.py b/cms/djangoapps/contentstore/features/common.py index 8353a58d0c..7afa359e39 100644 --- a/cms/djangoapps/contentstore/features/common.py +++ b/cms/djangoapps/contentstore/features/common.py @@ -318,19 +318,23 @@ def i_am_shown_a_notification(step): assert world.is_css_present('.wrapper-prompt') -def type_in_codemirror(index, text): +def type_in_codemirror(index, text, find_prefix="$"): script = """ - var cm = $('div.CodeMirror:eq({})').get(0).CodeMirror; + var cm = {find_prefix}('div.CodeMirror:eq({index})').get(0).CodeMirror; cm.getInputField().focus(); cm.setValue(arguments[0]); - cm.getInputField().blur();""".format(index) + cm.getInputField().blur();""".format(index=index, find_prefix=find_prefix) world.browser.driver.execute_script(script, str(text)) world.wait_for_ajax_complete() -def get_codemirror_value(index=0): - return world.browser.driver.execute_script(""" - return $('div.CodeMirror:eq({})').get(0).CodeMirror.getValue(); - """.format(index)) + +def get_codemirror_value(index=0, find_prefix="$"): + return world.browser.driver.execute_script( + """ + return {find_prefix}('div.CodeMirror:eq({index})').get(0).CodeMirror.getValue(); + """.format(index=index, find_prefix=find_prefix) + ) + def attach_file(filename, sub_path): diff --git a/cms/djangoapps/contentstore/features/html-editor.feature b/cms/djangoapps/contentstore/features/html-editor.feature index 6472f367b7..a23bc4650d 100644 --- a/cms/djangoapps/contentstore/features/html-editor.feature +++ b/cms/djangoapps/contentstore/features/html-editor.feature @@ -22,6 +22,50 @@ Feature: CMS.HTML Editor Scenario: TinyMCE image plugin sets urls correctly Given I have created a Blank HTML Page - When I edit the page and select the Visual Editor - And I add an image with a static link via the Image Plugin Icon - Then the image static link is rewritten to translate the path \ No newline at end of file + When I edit the page + And I add an image with static link "/static/image.jpg" via the Image Plugin Icon + Then the src link is rewritten to "c4x/MITx/999/asset/image.jpg" + And the link is shown as "/static/image.jpg" in the Image Plugin + + Scenario: TinyMCE link plugin sets urls correctly + Given I have created a Blank HTML Page + When I edit the page + And I add a link with static link "/static/image.jpg" via the Link Plugin Icon + Then the href link is rewritten to "c4x/MITx/999/asset/image.jpg" + And the link is shown as "/static/image.jpg" in the Link Plugin + + Scenario: TinyMCE and CodeMirror preserve style tags + Given I have created a Blank HTML Page + When I edit the page + And type "

pages

" in the code editor and press OK + And I save the page + Then the page text contains: + """ +

pages

+ + """ + + Scenario: TinyMCE toolbar buttons are as expected + Given I have created a Blank HTML Page + When I edit the page + Then the expected toolbar buttons are displayed + + Scenario: Static links are converted when switching between code editor and WYSIWYG views + Given I have created a Blank HTML Page + When I edit the page + And type "" in the code editor and press OK + Then the src link is rewritten to "c4x/MITx/999/asset/image.jpg" + And the code editor displays "

" + + Scenario: Code format toolbar button wraps text with code tags + Given I have created a Blank HTML Page + When I edit the page + And I set the text to "display as code" and I select the text + And I select the code toolbar button + And I save the page + Then the page text contains: + """ +

display as code

+ """ diff --git a/cms/djangoapps/contentstore/features/html-editor.py b/cms/djangoapps/contentstore/features/html-editor.py index 89e4100367..4a39eb299f 100644 --- a/cms/djangoapps/contentstore/features/html-editor.py +++ b/cms/djangoapps/contentstore/features/html-editor.py @@ -2,7 +2,10 @@ # pylint: disable=C0111 from lettuce import world, step -from nose.tools import assert_in # pylint: disable=no-name-in-module +from nose.tools import assert_in, assert_equal # pylint: disable=no-name-in-module +from common import type_in_codemirror, get_codemirror_value + +CODEMIRROR_SELECTOR_PREFIX = "$('iframe').contents().find" @step('I have created a Blank HTML Page$') @@ -31,41 +34,168 @@ def i_created_etext_in_latex(step): ) -@step('I edit the page and select the Visual Editor') +@step('I edit the page$') def i_click_on_edit_icon(step): world.edit_component() - world.wait_for(lambda _driver: world.css_visible('a.visual-tab')) - world.css_click('a.visual-tab') -@step('I add an image with a static link via the Image Plugin Icon') -def i_click_on_image_plugin_icon(step): - # Click on image plugin button - world.wait_for(lambda _driver: world.css_visible('a.mce_image')) - world.css_click('a.mce_image') - - # Change to the non-modal TinyMCE Image window - # keeping parent window so we can go back to it. - parent_window = world.browser.current_window - for window in world.browser.windows: - - world.browser.switch_to_window(window) # Switch to a different window - if world.browser.title == 'Insert/Edit Image': - - # This is the Image window so find the url text box, - # enter text in it then hit Insert button. - url_elem = world.browser.find_by_id("src") - url_elem.fill('/static/image.jpg') - world.browser.find_by_id('insert').click() - - world.browser.switch_to_window(parent_window) # Switch back to the main window +@step('I add an image with static link "(.*)" via the Image Plugin Icon$') +def i_click_on_image_plugin_icon(step, path): + use_plugin( + '.mce-i-image', + lambda: world.css_fill('.mce-textbox', path, 0) + ) -@step('the image static link is rewritten to translate the path') -def image_static_link_is_rewritten(step): +@step('the link is shown as "(.*)" in the Image Plugin$') +def check_link_in_image_plugin(step, path): + use_plugin( + '.mce-i-image', + lambda: assert_equal(path, world.css_find('.mce-textbox')[0].value) + ) + + +@step('I add a link with static link "(.*)" via the Link Plugin Icon$') +def i_click_on_link_plugin_icon(step, path): + def fill_in_link_fields(): + world.css_fill('.mce-textbox', path, 0) + world.css_fill('.mce-textbox', 'picture', 1) + + use_plugin('.mce-i-link', fill_in_link_fields) + + +@step('the link is shown as "(.*)" in the Link Plugin$') +def check_link_in_link_plugin(step, path): + # Ensure caret position is within the link just created. + script = """ + var editor = tinyMCE.activeEditor; + editor.selection.select(editor.dom.select('a')[0]);""" + world.browser.driver.execute_script(script) + world.wait_for_ajax_complete() + + use_plugin( + '.mce-i-link', + lambda: assert_equal(path, world.css_find('.mce-textbox')[0].value) + ) + + +@step('type "(.*)" in the code editor and press OK$') +def type_in_codemirror_plugin(step, text): + use_code_editor( + lambda: type_in_codemirror(0, text, CODEMIRROR_SELECTOR_PREFIX) + ) + + +@step('and the code editor displays "(.*)"$') +def verify_code_editor_text(step, text): + use_code_editor( + lambda: assert_equal(text, get_codemirror_value(0, CODEMIRROR_SELECTOR_PREFIX)) + ) + + +def use_plugin(button_class, action): + # Click on plugin button + world.css_click(button_class) + perform_action_in_plugin(action) + + +def use_code_editor(action): + # Click on plugin button + buttons = world.css_find('div.mce-widget>button') + + code_editor = [button for button in buttons if button.text == 'HTML'] + assert_equal(1, len(code_editor)) + code_editor[0].click() + + perform_action_in_plugin(action) + + +def perform_action_in_plugin(action): + # Wait for the plugin window to open. + world.wait_for_visible('.mce-window') + + # Trigger the action + action() + + # Click OK + world.css_click('.mce-primary') + + +@step('I save the page$') +def i_click_on_save(step): + world.save_component(step) + + +@step('the page text contains:') +def check_page_text(step): + assert_in(step.multiline, world.css_find('.xmodule_HtmlModule').html) + + +@step('the src link is rewritten to "(.*)"$') +def image_static_link_is_rewritten(step, path): # Find the TinyMCE iframe within the main window with world.browser.get_iframe('mce_0_ifr') as tinymce: image = tinymce.find_by_tag('img').first + assert_in(path, image['src']) - # Test onExecCommandHandler set the url to absolute. - assert_in('c4x/MITx/999/asset/image.jpg', image['src']) + +@step('the href link is rewritten to "(.*)"$') +def link_static_link_is_rewritten(step, path): + # Find the TinyMCE iframe within the main window + with world.browser.get_iframe('mce_0_ifr') as tinymce: + link = tinymce.find_by_tag('a').first + assert_in(path, link['href']) + + +@step('the expected toolbar buttons are displayed$') +def check_toolbar_buttons(step): + dropdowns = world.css_find('.mce-listbox') + assert_equal(2, len(dropdowns)) + + # Format dropdown + assert_equal('Paragraph', dropdowns[0].text) + # Font dropdown + assert_equal('Font Family', dropdowns[1].text) + + buttons = world.css_find('.mce-ico') + + # Note that the code editor icon is not present because we are now showing text instead of an icon. + # However, other test points user the code editor, so we have already verified its presence. + expected_buttons = [ + 'bold', + 'italic', + 'underline', + 'forecolor', + # This is our custom "code style" button, which uses an image instead of a class. + 'none', + 'bullist', + 'numlist', + 'outdent', + 'indent', + 'blockquote', + 'link', + 'unlink', + 'image' + ] + + assert_equal(len(expected_buttons), len(buttons)) + + for index, button in enumerate(expected_buttons): + class_names = buttons[index]._element.get_attribute('class') + assert_equal("mce-ico mce-i-" + button, class_names) + + +@step('I set the text to "(.*)" and I select the text$') +def set_text_and_select(step, text): + script = """ + var editor = tinyMCE.activeEditor; + editor.setContent(arguments[0]); + editor.selection.select(editor.dom.select('p')[0]);""" + world.browser.driver.execute_script(script, str(text)) + world.wait_for_ajax_complete() + + +@step('I select the code toolbar button$') +def select_code_button(step): + # This is our custom "code style" button. It uses an image instead of a class. + world.css_click(".mce-i-none") diff --git a/cms/static/sass/views/_unit.scss b/cms/static/sass/views/_unit.scss index 9676212aca..e97b6849b8 100644 --- a/cms/static/sass/views/_unit.scss +++ b/cms/static/sass/views/_unit.scss @@ -485,6 +485,7 @@ body.course.unit,.view-unit { .row { margin-bottom: 0px; + overflow: hidden; } // Module Actions, also used for Pages diff --git a/cms/templates/base.html b/cms/templates/base.html index 2b4a8692a5..579a26f504 100644 --- a/cms/templates/base.html +++ b/cms/templates/base.html @@ -70,8 +70,8 @@ "backbone": "js/vendor/backbone-min", "backbone.associations": "js/vendor/backbone-associations-min", "backbone.paginator": "js/vendor/backbone.paginator.min", - "tinymce": "js/vendor/tiny_mce/tiny_mce", - "jquery.tinymce": "js/vendor/tiny_mce/jquery.tinymce", + "tinymce": "js/vendor/tiny_mce/tinymce.min", + "jquery.tinymce": "js/vendor/tiny_mce/jquery.tinymce.min", "xmodule": "/xmodule/xmodule", "xblock": "coffee/src/xblock", "utility": "js/src/utility", diff --git a/cms/templates/widgets/html-edit.html b/cms/templates/widgets/html-edit.html index 34866321c4..a27225e36b 100644 --- a/cms/templates/widgets/html-edit.html +++ b/cms/templates/widgets/html-edit.html @@ -2,14 +2,8 @@
- -
-
diff --git a/common/lib/xmodule/xmodule/css/html/edit.scss b/common/lib/xmodule/xmodule/css/html/edit.scss index bd9722df67..8b8e48d944 100644 --- a/common/lib/xmodule/xmodule/css/html/edit.scss +++ b/common/lib/xmodule/xmodule/css/html/edit.scss @@ -19,7 +19,7 @@ } .editor-tabs { - top: 11px !important; + top: 0 !important; right: 10px; z-index: 99; } diff --git a/common/lib/xmodule/xmodule/js/fixtures/html-edit-formattingbug.html b/common/lib/xmodule/xmodule/js/fixtures/html-edit-formattingbug.html deleted file mode 100644 index 5db864373d..0000000000 --- a/common/lib/xmodule/xmodule/js/fixtures/html-edit-formattingbug.html +++ /dev/null @@ -1,18 +0,0 @@ -
- - - -
\ No newline at end of file diff --git a/common/lib/xmodule/xmodule/js/fixtures/html-edit-with-links.html b/common/lib/xmodule/xmodule/js/fixtures/html-edit-with-links.html deleted file mode 100644 index 46d6313699..0000000000 --- a/common/lib/xmodule/xmodule/js/fixtures/html-edit-with-links.html +++ /dev/null @@ -1,10 +0,0 @@ -
- -
- - -
-
\ No newline at end of file diff --git a/common/lib/xmodule/xmodule/js/fixtures/html-edit.html b/common/lib/xmodule/xmodule/js/fixtures/html-edit.html index 22dfc97dcb..11f7868ff7 100644 --- a/common/lib/xmodule/xmodule/js/fixtures/html-edit.html +++ b/common/lib/xmodule/xmodule/js/fixtures/html-edit.html @@ -1,10 +1,3 @@
- -
- - -
-
\ No newline at end of file + + diff --git a/common/lib/xmodule/xmodule/js/js_test.yml b/common/lib/xmodule/xmodule/js/js_test.yml index ff24f8c9ba..8b251a4842 100644 --- a/common/lib/xmodule/xmodule/js/js_test.yml +++ b/common/lib/xmodule/xmodule/js/js_test.yml @@ -49,8 +49,8 @@ lib_paths: - common_static/js/vendor/backbone-min.js - common_static/js/vendor/jquery.leanModal.min.js - common_static/js/vendor/CodeMirror/codemirror.js - - common_static/js/vendor/tiny_mce/jquery.tinymce.js - - common_static/js/vendor/tiny_mce/tiny_mce.js + - common_static/js/vendor/tiny_mce/jquery.tinymce.min.js + - common_static/js/vendor/tiny_mce/tinymce.min.js - common_static/js/vendor/mathjax-MathJax-c9db6ac/MathJax.js - common_static/js/vendor/jquery.timeago.js - common_static/js/vendor/sinon-1.7.1.js diff --git a/common/lib/xmodule/xmodule/js/spec/html/edit_spec.coffee b/common/lib/xmodule/xmodule/js/spec/html/edit_spec.coffee index 4920002541..9b5cb0c582 100644 --- a/common/lib/xmodule/xmodule/js/spec/html/edit_spec.coffee +++ b/common/lib/xmodule/xmodule/js/spec/html/edit_spec.coffee @@ -3,53 +3,24 @@ describe 'HTMLEditingDescriptor', -> window.baseUrl = "/static/deadbeef" afterEach -> delete window.baseUrl - describe 'Read data from server, create Editor, and get data back out', -> - it 'Does not munge <', -> -# This is a test for Lighthouse #22, -# "html names are automatically converted to the symbols they describe" -# A better test would be a Selenium test to avoid duplicating the -# mako template structure in html-edit-formattingbug.html. -# However, we currently have no working Selenium tests. - loadFixtures 'html-edit-formattingbug.html' - @descriptor = new HTMLEditingDescriptor($('.html-edit')) - visualEditorStub = - isDirty: () -> false - spyOn(@descriptor, 'getVisualEditor').andCallFake () -> - visualEditorStub - data = @descriptor.save().data - expect(data).toEqual("""<problem> - <p></p> - <multiplechoiceresponse> -
<problem>
-                               <p></p>
-
bar
""") - describe 'Saves HTML', -> + describe 'HTML Editor', -> beforeEach -> loadFixtures 'html-edit.html' @descriptor = new HTMLEditingDescriptor($('.html-edit')) - it 'Returns data from Advanced Editor if Visual Editor is not dirty', -> - visualEditorStub = - isDirty: () -> false - spyOn(@descriptor, 'getVisualEditor').andCallFake () -> - visualEditorStub - expect(@descriptor.showingVisualEditor).toEqual(true) - data = @descriptor.save().data - expect(data).toEqual('Advanced Editor Text') - it 'Returns data from Advanced Editor if Visual Editor is not showing (even if Visual Editor is dirty)', -> - visualEditorStub = - isDirty: () -> true - spyOn(@descriptor, 'getVisualEditor').andCallFake () -> - visualEditorStub - @descriptor.showingVisualEditor = false - data = @descriptor.save().data - expect(data).toEqual('Advanced Editor Text') - it 'Returns data from Visual Editor if Visual Editor is dirty and showing', -> + it 'Returns data from Visual Editor if Visual Editor is dirty', -> visualEditorStub = isDirty: () -> true getContent: () -> 'from visual editor' spyOn(@descriptor, 'getVisualEditor').andCallFake () -> visualEditorStub - expect(@descriptor.showingVisualEditor).toEqual(true) + data = @descriptor.save().data + expect(data).toEqual('from visual editor') + it 'Returns data from Visual Editor even if Visual Editor is not dirty', -> + visualEditorStub = + isDirty: () -> false + getContent: () -> 'from visual editor' + spyOn(@descriptor, 'getVisualEditor').andCallFake () -> + visualEditorStub data = @descriptor.save().data expect(data).toEqual('from visual editor') it 'Performs link rewriting for static assets when saving', -> @@ -58,63 +29,19 @@ describe 'HTMLEditingDescriptor', -> getContent: () -> 'from visual editor with /c4x/foo/bar/asset/image.jpg' spyOn(@descriptor, 'getVisualEditor').andCallFake () -> visualEditorStub - expect(@descriptor.showingVisualEditor).toEqual(true) @descriptor.base_asset_url = '/c4x/foo/bar/asset/' data = @descriptor.save().data expect(data).toEqual('from visual editor with /static/image.jpg') - describe 'Can switch to Advanced Editor', -> - beforeEach -> - loadFixtures 'html-edit.html' - @descriptor = new HTMLEditingDescriptor($('.html-edit')) - it 'Populates from Visual Editor if Advanced Visual is dirty', -> - expect(@descriptor.showingVisualEditor).toEqual(true) - visualEditorStub = - isDirty: () -> true - getContent: () -> 'from visual editor' - @descriptor.showAdvancedEditor(visualEditorStub) - expect(@descriptor.showingVisualEditor).toEqual(false) - expect(@descriptor.advanced_editor.getValue()).toEqual('from visual editor') - it 'Does not populate from Visual Editor if Visual Editor is not dirty', -> - expect(@descriptor.showingVisualEditor).toEqual(true) - visualEditorStub = - isDirty: () -> false - getContent: () -> 'from visual editor' - @descriptor.showAdvancedEditor(visualEditorStub) - expect(@descriptor.showingVisualEditor).toEqual(false) - expect(@descriptor.advanced_editor.getValue()).toEqual('Advanced Editor Text') - describe 'Can switch to Visual Editor', -> - it 'Always populates from the Advanced Editor', -> - loadFixtures 'html-edit.html' - @descriptor = new HTMLEditingDescriptor($('.html-edit')) - @descriptor.showingVisualEditor = false - - visualEditorStub = - content: 'not set' - startContent: 'not set', - focus: () -> true - isDirty: () -> false - setContent: (x) -> @content = x - getContent: -> @content - - @descriptor.showVisualEditor(visualEditorStub) - expect(@descriptor.showingVisualEditor).toEqual(true) - expect(visualEditorStub.getContent()).toEqual('Advanced Editor Text') - expect(visualEditorStub.startContent).toEqual('Advanced Editor Text') - it 'When switching to visual editor links are rewritten to c4x format', -> - loadFixtures 'html-edit-with-links.html' + it 'When showing visual editor links are rewritten to c4x format', -> @descriptor = new HTMLEditingDescriptor($('.html-edit')) @descriptor.base_asset_url = '/c4x/foo/bar/asset/' - @descriptor.showingVisualEditor = false visualEditorStub = - content: 'not set' - startContent: 'not set', - focus: () -> true - isDirty: () -> false + content: 'text /static/image.jpg' + startContent: 'text /static/image.jpg' + focus: -> setContent: (x) -> @content = x getContent: -> @content - @descriptor.showVisualEditor(visualEditorStub) - expect(@descriptor.showingVisualEditor).toEqual(true) - expect(visualEditorStub.getContent()).toEqual('Advanced Editor Text with link /c4x/foo/bar/asset/dummy.jpg') - expect(visualEditorStub.startContent).toEqual('Advanced Editor Text with link /c4x/foo/bar/asset/dummy.jpg') + @descriptor.initInstanceCallback(visualEditorStub) + expect(visualEditorStub.getContent()).toEqual('text /c4x/foo/bar/asset/image.jpg') diff --git a/common/lib/xmodule/xmodule/js/src/html/edit.coffee b/common/lib/xmodule/xmodule/js/src/html/edit.coffee index e99922c873..1b9e0c95db 100644 --- a/common/lib/xmodule/xmodule/js/src/html/edit.coffee +++ b/common/lib/xmodule/xmodule/js/src/html/edit.coffee @@ -1,5 +1,4 @@ class @HTMLEditingDescriptor - @isInactiveClass : "is-inactive" constructor: (element) -> @element = element; @@ -7,152 +6,111 @@ class @HTMLEditingDescriptor if @base_asset_url == undefined @base_asset_url = null - @advanced_editor = CodeMirror.fromTextArea($(".edit-box", @element)[0], { - mode: "text/html" - lineNumbers: true - lineWrapping: true - }) - - @$advancedEditorWrapper = $(@advanced_editor.getWrapperElement()) - @$advancedEditorWrapper.addClass(HTMLEditingDescriptor.isInactiveClass) - # This is a workaround for the fact that tinyMCE's baseURL property is not getting correctly set on AWS # instances (like sandbox). It is not necessary to explicitly set baseURL when running locally. tinyMCE.baseURL = "#{baseUrl}/js/vendor/tiny_mce" +# This is necessary for the LMS bulk e-mail acceptance test. In that particular scenario, +# tinyMCE incorrectly decides that the suffix should be "", which means it fails to load files. + tinyMCE.suffix = ".min" @tiny_mce_textarea = $(".tiny-mce", @element).tinymce({ - script_url : "#{baseUrl}/js/vendor/tiny_mce/tiny_mce.js", - theme : "advanced", - skin: 'studio', + script_url : "#{baseUrl}/js/vendor/tiny_mce/tinymce.min.js", + theme : "modern", + skin: 'studio-tmce4', schema: "html5", # Necessary to preserve relative URLs to our images. convert_urls : false, # TODO: we should share this CSS with studio (and LMS) content_css : "#{baseUrl}/css/tiny-mce.css", - # The default popup_css path uses an absolute path referencing page in which tinyMCE is being hosted. - # Supply the correct relative path instead. - popup_css: "#{baseUrl}/js/vendor/tiny_mce/themes/advanced/skins/default/dialog.css", formats : { - # Disable h4, h5, and h6 styles as we don't have CSS for them. - h4: {}, - h5: {}, - h6: {}, # tinyMCE does block level for code by default code: {inline: 'code'} }, # Disable visual aid on borderless table. - visual:false, + visual: false, + plugins: "textcolor, link, image, codemirror", + codemirror: { + path: "#{baseUrl}/js/vendor" + }, + image_advtab: true, # We may want to add "styleselect" when we collect all styles used throughout the LMS - theme_advanced_buttons1 : "formatselect,fontselect,bold,italic,underline,forecolor,|,bullist,numlist,outdent,indent,|,link,unlink,image,|,blockquote,wrapAsCode", - theme_advanced_toolbar_location : "top", - theme_advanced_toolbar_align : "left", - theme_advanced_statusbar_location : "none", - theme_advanced_resizing : true, - theme_advanced_blockformats : "p,pre,h1,h2,h3", + toolbar: "formatselect | fontselect | bold italic underline forecolor wrapAsCode | bullist numlist outdent indent blockquote | link unlink image | code", + block_formats: "Paragraph=p;Preformatted=pre;Heading 1=h1;Heading 2=h2;Heading 3=h3", width: '100%', height: '400px', - setup : @setupTinyMCE, + menubar: false, + statusbar: false, + # Necessary to avoid stripping of style tags. + valid_children : "+body[style]", + setup: @setupTinyMCE, # Cannot get access to tinyMCE Editor instance (for focusing) until after it is rendered. - # The tinyMCE callback passes in the editor as a paramter. + # The tinyMCE callback passes in the editor as a parameter. init_instance_callback: @initInstanceCallback }) - @showingVisualEditor = true - # Doing these find operations within onSwitchEditor leads to sporadic failures on Chrome (version 20 and older). - $element = $(element) - @$htmlTab = $element.find('.html-tab') - @$visualTab = $element.find('.visual-tab') - - @element.on('click', '.editor-tabs .tab', @onSwitchEditor) - setupTinyMCE: (ed) => ed.addButton('wrapAsCode', { - title : 'Code', + title : 'Code block', image : "#{baseUrl}/images/ico-tinymce-code.png", onclick : () -> ed.formatter.toggle('code') - # Without this, the dirty flag does not get set unless the user also types in text. - # Visual Editor must be marked as dirty or else we won't populate the Advanced Editor from it. - ed.isNotDirty = false }) - ed.onNodeChange.add((editor, command, e) -> - command.setActive('wrapAsCode', e.nodeName == 'CODE') - ) - @visualEditor = ed - - ed.onExecCommand.add(@onExecCommandHandler) - # Intended to run after the "image" plugin is used so that static urls are set - # correctly in the Visual editor immediately after command use. - onExecCommandHandler: (ed, cmd, ui, val) => - if cmd == 'mceInsertContent' and val.match(/^ - e.preventDefault(); + editImage: (data) => + # Called when the image plugin will be shown. Input arg is the JSON version of the image data. + if data['src'] + data['src'] = rewriteStaticLinks(data['src'], @base_asset_url, '/static/') - $currentTarget = $(e.currentTarget) - if not $currentTarget.hasClass('current') - $currentTarget.addClass('current') + saveImage: (data) => + # Called when the image plugin is saved. Input arg is the JSON version of the image data. + if data['src'] + data['src'] = rewriteStaticLinks(data['src'], '/static/', @base_asset_url) - # Initializing $mceToolbar if undefined. - if not @$mceToolbar? - @$mceToolbar = $(@element).find('table.mceToolbar') - @$mceToolbar.toggleClass(HTMLEditingDescriptor.isInactiveClass) - @$advancedEditorWrapper.toggleClass(HTMLEditingDescriptor.isInactiveClass) + editLink: (data) => + # Called when the link plugin will be shown. Input arg is the JSON version of the link data. + if data['href'] + data['href'] = rewriteStaticLinks(data['href'], @base_asset_url, '/static/') - visualEditor = @getVisualEditor() - if $currentTarget.data('tab') is 'visual' - @$htmlTab.removeClass('current') - @showVisualEditor(visualEditor) - else - @$visualTab.removeClass('current') - @showAdvancedEditor(visualEditor) + saveLink: (data) => + # Called when the link plugin is saved. Input arg is the JSON version of the link data. + if data['href'] + data['href'] = rewriteStaticLinks(data['href'], '/static/', @base_asset_url) - # Show the Advanced (codemirror) Editor. Pulled out as a helper method for unit testing. - showAdvancedEditor: (visualEditor) -> - if visualEditor.isDirty() - content = rewriteStaticLinks(visualEditor.getContent({no_events: 1}), @base_asset_url, '/static/') - @advanced_editor.setValue(content) - @advanced_editor.setCursor(0) - @advanced_editor.refresh() - @advanced_editor.focus() - @showingVisualEditor = false + showCodeEditor: (codeEditor) => + # Called when the CodeMirror Editor is displayed to convert links to show static prefix. + # The input argument is the CodeMirror instance. + content = rewriteStaticLinks(codeEditor.getValue(), @base_asset_url, '/static/') + codeEditor.setValue(content) - # Show the Visual (tinyMCE) Editor. Pulled out as a helper method for unit testing. - showVisualEditor: (visualEditor) -> - # In order for isDirty() to return true ONLY if edits have been made after setting the text, - # both the startContent must be sync'ed up and the dirty flag set to false. - content = rewriteStaticLinks(@advanced_editor.getValue(), '/static/', @base_asset_url) - visualEditor.setContent(content) - visualEditor.startContent = visualEditor.getContent({format : 'raw'}) - @focusVisualEditor(visualEditor) - @showingVisualEditor = true + saveCodeEditor: (codeEditor) => + # Called when the CodeMirror Editor is saved to convert links back to the full form. + # The input argument is the CodeMirror instance. + content = rewriteStaticLinks(codeEditor.getValue(), '/static/', @base_asset_url) + codeEditor.setValue(content) initInstanceCallback: (visualEditor) => - visualEditor.setContent(rewriteStaticLinks(@advanced_editor.getValue(), '/static/', @base_asset_url)) - @focusVisualEditor(visualEditor) - - focusVisualEditor: (visualEditor) => + visualEditor.setContent(rewriteStaticLinks(visualEditor.getContent({no_events: 1}), '/static/', @base_asset_url)) visualEditor.focus() - if not @$mceToolbar? - @$mceToolbar = $(@element).find('table.mceToolbar') getVisualEditor: () -> ### Returns the instance of TinyMCE. - This is different from the textarea that exists in the HTML template (@tiny_mce_textarea. Pulled out as a helper method for unit test. ### return @visualEditor save: -> - @element.off('click', '.editor-tabs .tab', @onSwitchEditor) - text = @advanced_editor.getValue() visualEditor = @getVisualEditor() - if @showingVisualEditor and visualEditor.isDirty() - text = rewriteStaticLinks(visualEditor.getContent({no_events: 1}), @base_asset_url, '/static/') + text = rewriteStaticLinks(visualEditor.getContent({no_events: 1}), @base_asset_url, '/static/') data: text diff --git a/common/static/css/tiny-mce.css b/common/static/css/tiny-mce.css index 4021409856..99b11993ad 100644 --- a/common/static/css/tiny-mce.css +++ b/common/static/css/tiny-mce.css @@ -1,6 +1,6 @@ @import url(//fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,400,300,600,700); -.mceContentBody { +.mce-content-body { padding: 10px; background-color: #fff; font-family: 'Open Sans', Verdana, Arial, Helvetica, sans-serif; diff --git a/common/static/images/ico-tinymce-code.png b/common/static/images/ico-tinymce-code.png index cc0b8e61f2d778daee57f255a43f36dfc0a59cbf..c3876d5c65512240ab2a1a247201fe6d0c9aa907 100644 GIT binary patch delta 321 zcmV-H0lxmJ1knPJ8Gi-<0051N9Sr~g02y>eSaefwW^{L9a%BKPWN%_+AW3auXJt}l zVPtu6$z?nM008qzL_t(|+G70w|33pY0TTn2!QeNL1)E@ae3}A~Y5-yoU9fWDtP4nT z20&^85I+Fo1wgq21Pz2577t|$pvi&w_D~#vE|1I0FvAMbU4H=OJ3_hqq=w-IY=Y>P z;585!MgpWn0yMm_8wiw408%j9KjLyB6g-5|2Y~ttaJdjVuc?2$sio7iIf0WrzuBb0VP z_cn+RjXaX_@;U}sIAZZOh(8}KrU_=f0%%@!0AlnY0Pz>X@-n(c#*tUR0t6TUp({y+ Tgi{rM00000NkvXXu0mjf4kCPH literal 553 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc3?z4jzqJQaZv%WnT*Km0M*;$R7wFC6?63Ji zmS0JbU+{rTYyyjacg>TwnR;0>fs3`m(5LX2kxSTzZ|d2+C&B~&ZT-74LiFQFCWVwg zV&`6#`~FIeO)l*yDQK*D(Vg)=gx~9D(HHitM~t7CqgWX7B z55;8X+X%#(v}nBgG%>1v(UGsG8g4)2b+Reu$zJ4>%iwuck|9YlYgWagNcJ5Q-I;$h zEttJR#&d^ex|hPdW!GMWro73xwN|WHBUbuS`lKEAeU5z+`2O?MrxOpZ&wBfP|0Cu{ Xa@p?^c1$w|I+VfF)z4*}Q$iB}I9%QR diff --git a/common/static/js/vendor/CodeMirror/addons/dialog/dialog.css b/common/static/js/vendor/CodeMirror/addons/dialog/dialog.css new file mode 100755 index 0000000000..2e7c0fc9b8 --- /dev/null +++ b/common/static/js/vendor/CodeMirror/addons/dialog/dialog.css @@ -0,0 +1,32 @@ +.CodeMirror-dialog { + position: absolute; + left: 0; right: 0; + background: white; + z-index: 15; + padding: .1em .8em; + overflow: hidden; + color: #333; +} + +.CodeMirror-dialog-top { + border-bottom: 1px solid #eee; + top: 0; +} + +.CodeMirror-dialog-bottom { + border-top: 1px solid #eee; + bottom: 0; +} + +.CodeMirror-dialog input { + border: none; + outline: none; + background: transparent; + width: 20em; + color: inherit; + font-family: monospace; +} + +.CodeMirror-dialog button { + font-size: 70%; +} diff --git a/common/static/js/vendor/CodeMirror/addons/dialog/dialog.js b/common/static/js/vendor/CodeMirror/addons/dialog/dialog.js new file mode 100755 index 0000000000..41d7bf8663 --- /dev/null +++ b/common/static/js/vendor/CodeMirror/addons/dialog/dialog.js @@ -0,0 +1,122 @@ +// Open simple dialogs on top of an editor. Relies on dialog.css. + +(function() { + function dialogDiv(cm, template, bottom) { + var wrap = cm.getWrapperElement(); + var dialog; + dialog = wrap.appendChild(document.createElement("div")); + if (bottom) { + dialog.className = "CodeMirror-dialog CodeMirror-dialog-bottom"; + } else { + dialog.className = "CodeMirror-dialog CodeMirror-dialog-top"; + } + if (typeof template == "string") { + dialog.innerHTML = template; + } else { // Assuming it's a detached DOM element. + dialog.appendChild(template); + } + return dialog; + } + + function closeNotification(cm, newVal) { + if (cm.state.currentNotificationClose) + cm.state.currentNotificationClose(); + cm.state.currentNotificationClose = newVal; + } + + CodeMirror.defineExtension("openDialog", function(template, callback, options) { + closeNotification(this, null); + var dialog = dialogDiv(this, template, options && options.bottom); + var closed = false, me = this; + function close() { + if (closed) return; + closed = true; + dialog.parentNode.removeChild(dialog); + } + var inp = dialog.getElementsByTagName("input")[0], button; + if (inp) { + if (options && options.value) inp.value = options.value; + CodeMirror.on(inp, "keydown", function(e) { + if (options && options.onKeyDown && options.onKeyDown(e, inp.value, close)) { return; } + if (e.keyCode == 13 || e.keyCode == 27) { + CodeMirror.e_stop(e); + close(); + me.focus(); + if (e.keyCode == 13) callback(inp.value); + } + }); + if (options && options.onKeyUp) { + CodeMirror.on(inp, "keyup", function(e) {options.onKeyUp(e, inp.value, close);}); + } + if (options && options.value) inp.value = options.value; + inp.focus(); + CodeMirror.on(inp, "blur", close); + } else if (button = dialog.getElementsByTagName("button")[0]) { + CodeMirror.on(button, "click", function() { + close(); + me.focus(); + }); + button.focus(); + CodeMirror.on(button, "blur", close); + } + return close; + }); + + CodeMirror.defineExtension("openConfirm", function(template, callbacks, options) { + closeNotification(this, null); + var dialog = dialogDiv(this, template, options && options.bottom); + var buttons = dialog.getElementsByTagName("button"); + var closed = false, me = this, blurring = 1; + function close() { + if (closed) return; + closed = true; + dialog.parentNode.removeChild(dialog); + me.focus(); + } + buttons[0].focus(); + for (var i = 0; i < buttons.length; ++i) { + var b = buttons[i]; + (function(callback) { + CodeMirror.on(b, "click", function(e) { + CodeMirror.e_preventDefault(e); + close(); + if (callback) callback(me); + }); + })(callbacks[i]); + CodeMirror.on(b, "blur", function() { + --blurring; + setTimeout(function() { if (blurring <= 0) close(); }, 200); + }); + CodeMirror.on(b, "focus", function() { ++blurring; }); + } + }); + + /* + * openNotification + * Opens a notification, that can be closed with an optional timer + * (default 5000ms timer) and always closes on click. + * + * If a notification is opened while another is opened, it will close the + * currently opened one and open the new one immediately. + */ + CodeMirror.defineExtension("openNotification", function(template, options) { + closeNotification(this, close); + var dialog = dialogDiv(this, template, options && options.bottom); + var duration = options && (options.duration === undefined ? 5000 : options.duration); + var closed = false, doneTimer; + + function close() { + if (closed) return; + closed = true; + clearTimeout(doneTimer); + dialog.parentNode.removeChild(dialog); + } + + CodeMirror.on(dialog, 'click', function(e) { + CodeMirror.e_preventDefault(e); + close(); + }); + if (duration) + doneTimer = setTimeout(close, options.duration); + }); +})(); diff --git a/common/static/js/vendor/tiny_mce/jquery.tinymce.js b/common/static/js/vendor/tiny_mce/jquery.tinymce.js deleted file mode 100644 index b4d0c3977a..0000000000 --- a/common/static/js/vendor/tiny_mce/jquery.tinymce.js +++ /dev/null @@ -1 +0,0 @@ -(function(c){var b,e,a=[],d=window;c.fn.tinymce=function(j){var p=this,g,k,h,m,i,l="",n="";if(!p.length){return p}if(!j){return tinyMCE.get(p[0].id)}p.css("visibility","hidden");function o(){var r=[],q=0;if(f){f();f=null}p.each(function(t,u){var s,w=u.id,v=j.oninit;if(!w){u.id=w=tinymce.DOM.uniqueId()}s=new tinymce.Editor(w,j);r.push(s);s.onInit.add(function(){var x,y=v;p.css("visibility","");if(v){if(++q==r.length){if(tinymce.is(y,"string")){x=(y.indexOf(".")===-1)?null:tinymce.resolve(y.replace(/\.\w+$/,""));y=tinymce.resolve(y)}y.apply(x||tinymce,r)}}})});c.each(r,function(t,s){s.render()})}if(!d.tinymce&&!e&&(g=j.script_url)){e=1;h=g.substring(0,g.lastIndexOf("/"));if(/_(src|dev)\.js/g.test(g)){n="_src"}m=g.lastIndexOf("?");if(m!=-1){l=g.substring(m+1)}d.tinyMCEPreInit=d.tinyMCEPreInit||{base:h,suffix:n,query:l};if(g.indexOf("gzip")!=-1){i=j.language||"en";g=g+(/\?/.test(g)?"&":"?")+"js=true&core=true&suffix="+escape(n)+"&themes="+escape(j.theme)+"&plugins="+escape(j.plugins)+"&languages="+i;if(!d.tinyMCE_GZ){tinyMCE_GZ={start:function(){tinymce.suffix=n;function q(r){tinymce.ScriptLoader.markDone(tinyMCE.baseURI.toAbsolute(r))}q("langs/"+i+".js");q("themes/"+j.theme+"/editor_template"+n+".js");q("themes/"+j.theme+"/langs/"+i+".js");c.each(j.plugins.split(","),function(s,r){if(r){q("plugins/"+r+"/editor_plugin"+n+".js");q("plugins/"+r+"/langs/"+i+".js")}})},end:function(){}}}}c.ajax({type:"GET",url:g,dataType:"script",cache:true,success:function(){tinymce.dom.Event.domLoaded=1;e=2;if(j.script_loaded){j.script_loaded()}o();c.each(a,function(q,r){r()})}})}else{if(e===1){a.push(o)}else{o()}}return p};c.extend(c.expr[":"],{tinymce:function(g){return !!(g.id&&"tinyMCE" in window&&tinyMCE.get(g.id))}});function f(){function i(l){if(l==="remove"){this.each(function(n,o){var m=h(o);if(m){m.remove()}})}this.find("span.mceEditor,div.mceEditor").each(function(n,o){var m=tinyMCE.get(o.id.replace(/_parent$/,""));if(m){m.remove()}})}function k(n){var m=this,l;if(n!==b){i.call(m);m.each(function(p,q){var o;if(o=tinyMCE.get(q.id)){o.setContent(n)}})}else{if(m.length>0){if(l=tinyMCE.get(m[0].id)){return l.getContent()}}}}function h(m){var l=null;(m)&&(m.id)&&(d.tinymce)&&(l=tinyMCE.get(m.id));return l}function g(l){return !!((l)&&(l.length)&&(d.tinymce)&&(l.is(":tinymce")))}var j={};c.each(["text","html","val"],function(n,l){var o=j[l]=c.fn[l],m=(l==="text");c.fn[l]=function(s){var p=this;if(!g(p)){return o.apply(p,arguments)}if(s!==b){k.call(p.filter(":tinymce"),s);o.apply(p.not(":tinymce"),arguments);return p}else{var r="";var q=arguments;(m?p:p.eq(0)).each(function(u,v){var t=h(v);r+=t?(m?t.getContent().replace(/<(?:"[^"]*"|'[^']*'|[^'">])*>/g,""):t.getContent({save:true})):o.apply(c(v),q)});return r}}});c.each(["append","prepend"],function(n,m){var o=j[m]=c.fn[m],l=(m==="prepend");c.fn[m]=function(q){var p=this;if(!g(p)){return o.apply(p,arguments)}if(q!==b){p.filter(":tinymce").each(function(s,t){var r=h(t);r&&r.setContent(l?q+r.getContent():r.getContent()+q)});o.apply(p.not(":tinymce"),arguments);return p}}});c.each(["remove","replaceWith","replaceAll","empty"],function(m,l){var n=j[l]=c.fn[l];c.fn[l]=function(){i.call(this,l);return n.apply(this,arguments)}});j.attr=c.fn.attr;c.fn.attr=function(o,q){var m=this,n=arguments;if((!o)||(o!=="value")||(!g(m))){if(q!==b){return j.attr.apply(m,n)}else{return j.attr.apply(m,n)}}if(q!==b){k.call(m.filter(":tinymce"),q);j.attr.apply(m.not(":tinymce"),n);return m}else{var p=m[0],l=h(p);return l?l.getContent({save:true}):j.attr.apply(c(p),n)}}}})(jQuery); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/jquery.tinymce.min.js b/common/static/js/vendor/tiny_mce/jquery.tinymce.min.js new file mode 100644 index 0000000000..9221fa9a4f --- /dev/null +++ b/common/static/js/vendor/tiny_mce/jquery.tinymce.min.js @@ -0,0 +1 @@ +!function(e){function t(){function t(e){"remove"===e&&this.each(function(e,t){var n=r(t);n&&n.remove()}),this.find("span.mceEditor,div.mceEditor").each(function(e,t){var n=tinymce.get(t.id.replace(/_parent$/,""));n&&n.remove()})}function i(e){var n,i=this;if(null!=e)t.call(i),i.each(function(t,n){var i;(i=tinymce.get(n.id))&&i.setContent(e)});else if(i.length>0&&(n=tinymce.get(i[0].id)))return n.getContent()}function r(e){var t=null;return e&&e.id&&a.tinymce&&(t=tinymce.get(e.id)),t}function c(e){return!!(e&&e.length&&a.tinymce&&e.is(":tinymce"))}var u={};e.each(["text","html","val"],function(t,a){var o=u[a]=e.fn[a],s="text"===a;e.fn[a]=function(t){var a=this;if(!c(a))return o.apply(a,arguments);if(t!==n)return i.call(a.filter(":tinymce"),t),o.apply(a.not(":tinymce"),arguments),a;var u="",l=arguments;return(s?a:a.eq(0)).each(function(t,n){var i=r(n);u+=i?s?i.getContent().replace(/<(?:"[^"]*"|'[^']*'|[^'">])*>/g,""):i.getContent({save:!0}):o.apply(e(n),l)}),u}}),e.each(["append","prepend"],function(t,i){var a=u[i]=e.fn[i],o="prepend"===i;e.fn[i]=function(e){var t=this;return c(t)?e!==n?(t.filter(":tinymce").each(function(t,n){var i=r(n);i&&i.setContent(o?e+i.getContent():i.getContent()+e)}),a.apply(t.not(":tinymce"),arguments),t):void 0:a.apply(t,arguments)}}),e.each(["remove","replaceWith","replaceAll","empty"],function(n,i){var r=u[i]=e.fn[i];e.fn[i]=function(){return t.call(this,i),r.apply(this,arguments)}}),u.attr=e.fn.attr,e.fn.attr=function(t,a){var o=this,s=arguments;if(!t||"value"!==t||!c(o))return a!==n?u.attr.apply(o,s):u.attr.apply(o,s);if(a!==n)return i.call(o.filter(":tinymce"),a),u.attr.apply(o.not(":tinymce"),s),o;var l=o[0],m=r(l);return m?m.getContent({save:!0}):u.attr.apply(e(l),s)}}var n,i,r=[],a=window;e.fn.tinymce=function(n){function c(){var i=[],r=0;t&&(t(),t=null),l.each(function(e,t){var a,c=t.id,u=n.oninit;c||(t.id=c=tinymce.DOM.uniqueId()),tinymce.get(c)||(a=new tinymce.Editor(c,n,tinymce.EditorManager),i.push(a),a.on("init",function(){var e,t=u;l.css("visibility",""),u&&++r==i.length&&("string"==typeof t&&(e=-1===t.indexOf(".")?null:tinymce.resolve(t.replace(/\.\w+$/,"")),t=tinymce.resolve(t)),t.apply(e||tinymce,i))}))}),e.each(i,function(e,t){t.render()})}var u,o,s,l=this,m="";if(!l.length)return l;if(!n)return tinymce.get(l[0].id);if(l.css("visibility","hidden"),a.tinymce||i||!(u=n.script_url))1===i?r.push(c):c();else{i=1,o=u.substring(0,u.lastIndexOf("/")),-1!=u.indexOf(".min")&&(m=".min"),a.tinymce=a.tinyMCEPreInit||{base:o,suffix:m},-1!=u.indexOf("gzip")&&(s=n.language||"en",u=u+(/\?/.test(u)?"&":"?")+"js=true&core=true&suffix="+escape(m)+"&themes="+escape(n.theme||"modern")+"&plugins="+escape(n.plugins||"")+"&languages="+(s||""),a.tinyMCE_GZ||(a.tinyMCE_GZ={start:function(){function t(e){tinymce.ScriptLoader.markDone(tinymce.baseURI.toAbsolute(e))}t("langs/"+s+".js"),t("themes/"+n.theme+"/theme"+m+".js"),t("themes/"+n.theme+"/langs/"+s+".js"),e.each(n.plugins.split(","),function(e,n){n&&(t("plugins/"+n+"/plugin"+m+".js"),t("plugins/"+n+"/langs/"+s+".js"))})},end:function(){}}));var p=document.createElement("script");p.type="text/javascript",p.onload=p.onreadystatechange=function(t){t=t||event,2===i||"load"!=t.type&&!/complete|loaded/.test(p.readyState)||(tinymce.dom.Event.domLoaded=1,i=2,n.script_loaded&&n.script_loaded(),c(),e.each(r,function(e,t){t()}))},p.src=u,document.body.appendChild(p)}return l},e.extend(e.expr[":"],{tinymce:function(e){return!!(e.id&&"tinymce"in window&&tinymce.get(e.id))}})}(jQuery); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/langs/en.js b/common/static/js/vendor/tiny_mce/langs/en.js deleted file mode 100644 index 19324f74cd..0000000000 --- a/common/static/js/vendor/tiny_mce/langs/en.js +++ /dev/null @@ -1 +0,0 @@ -tinyMCE.addI18n({en:{common:{"more_colors":"More Colors...","invalid_data":"Error: Invalid values entered, these are marked in red.","popup_blocked":"Sorry, but we have noticed that your popup-blocker has disabled a window that provides application functionality. You will need to disable popup blocking on this site in order to fully utilize this tool.","clipboard_no_support":"Currently not supported by your browser, use keyboard shortcuts instead.","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","not_set":"-- Not Set --","class_name":"Class",browse:"Browse",close:"Close",cancel:"Cancel",update:"Update",insert:"Insert",apply:"Apply","edit_confirm":"Do you want to use the WYSIWYG mode for this textarea?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Full",right:"Right",center:"Center",left:"Left",align:"Alignment"},insertdatetime:{"day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","inserttime_desc":"Insert Time","insertdate_desc":"Insert Date","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Print"},preview:{"preview_desc":"Preview"},directionality:{"rtl_desc":"Direction Right to Left","ltr_desc":"Direction Left to Right"},layer:{content:"New layer...","absolute_desc":"Toggle Absolute Positioning","backward_desc":"Move Backward","forward_desc":"Move Forward","insertlayer_desc":"Insert New Layer"},save:{"save_desc":"Save","cancel_desc":"Cancel All Changes"},nonbreaking:{"nonbreaking_desc":"Insert Non-Breaking Space Character"},iespell:{download:"ieSpell not detected. Do you want to install it now?","iespell_desc":"Check Spelling"},advhr:{"delta_height":"","delta_width":"","advhr_desc":"Insert Horizontal Line"},emotions:{"delta_height":"","delta_width":"","emotions_desc":"Emotions"},searchreplace:{"replace_desc":"Find/Replace","delta_width":"","delta_height":"","search_desc":"Find"},advimage:{"delta_width":"","image_desc":"Insert/Edit Image","delta_height":""},advlink:{"delta_height":"","delta_width":"","link_desc":"Insert/Edit Link"},xhtmlxtras:{"attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":"","attribs_desc":"Insert/Edit Attributes","ins_desc":"Insertion","del_desc":"Deletion","acronym_desc":"Acronym","abbr_desc":"Abbreviation","cite_desc":"Citation"},style:{"delta_height":"","delta_width":"",desc:"Edit CSS Style"},paste:{"plaintext_mode_stick":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode. After you paste something you will be returned to regular paste mode.","selectall_desc":"Select All","paste_word_desc":"Paste from Word","paste_text_desc":"Paste as Plain Text"},"paste_dlg":{"word_title":"Use Ctrl+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep Linebreaks","text_title":"Use Ctrl+V on your keyboard to paste the text into the window."},table:{"merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":"",cell:"Cell",col:"Column",row:"Row",del:"Delete Table","copy_row_desc":"Copy Table Row","cut_row_desc":"Cut Table Row","paste_row_after_desc":"Paste Table Row After","paste_row_before_desc":"Paste Table Row Before","props_desc":"Table Properties","cell_desc":"Table Cell Properties","row_desc":"Table Row Properties","merge_cells_desc":"Merge Table Cells","split_cells_desc":"Split Merged Table Cells","delete_col_desc":"Delete Column","col_after_desc":"Insert Column After","col_before_desc":"Insert Column Before","delete_row_desc":"Delete Row","row_after_desc":"Insert Row After","row_before_desc":"Insert Row Before",desc:"Insert/Edit Table"},autosave:{"warning_message":"If you restore the saved content, you will lose all the content that is currently in the editor.\n\nAre you sure you want to restore the saved content?","restore_content":"Restore auto-saved content.","unload_msg":"The changes you made will be lost if you navigate away from this page."},fullscreen:{desc:"Toggle Full Screen Mode"},media:{"delta_height":"","delta_width":"",edit:"Edit Embedded Media",desc:"Insert/Edit Embedded Media"},fullpage:{desc:"Document Properties","delta_width":"","delta_height":""},template:{desc:"Insert Predefined Template Content"},visualchars:{desc:"Show/Hide Visual Control Characters"},spellchecker:{desc:"Toggle Spell Checker",menu:"Spell Checker Settings","ignore_word":"Ignore Word","ignore_words":"Ignore All",langs:"Languages",wait:"Please wait...",sug:"Suggestions","no_sug":"No Suggestions","no_mpell":"No misspellings found.","learn_word":"Learn word"},pagebreak:{desc:"Insert Page Break for Printing"},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words:"},visualblocks:{desc:'Show/hide block elements'}}}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/langs/readme.md b/common/static/js/vendor/tiny_mce/langs/readme.md new file mode 100644 index 0000000000..a52bf03f9a --- /dev/null +++ b/common/static/js/vendor/tiny_mce/langs/readme.md @@ -0,0 +1,3 @@ +This is where language files should be placed. + +Please DO NOT translate these directly use this service: https://www.transifex.com/projects/p/tinymce/ diff --git a/common/static/js/vendor/tiny_mce/plugins/advhr/css/advhr.css b/common/static/js/vendor/tiny_mce/plugins/advhr/css/advhr.css deleted file mode 100644 index 3fe369cb0d..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/advhr/css/advhr.css +++ /dev/null @@ -1,5 +0,0 @@ -input.radio {border:1px none #000; background:transparent; vertical-align:middle;} -.panel_wrapper div.current {height:80px;} -#width {width:50px; vertical-align:middle;} -#width2 {width:50px; vertical-align:middle;} -#size {width:100px;} diff --git a/common/static/js/vendor/tiny_mce/plugins/advhr/editor_plugin.js b/common/static/js/vendor/tiny_mce/plugins/advhr/editor_plugin.js deleted file mode 100644 index 4d3b062dee..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/advhr/editor_plugin.js +++ /dev/null @@ -1 +0,0 @@ -(function(){tinymce.create("tinymce.plugins.AdvancedHRPlugin",{init:function(a,b){a.addCommand("mceAdvancedHr",function(){a.windowManager.open({file:b+"/rule.htm",width:250+parseInt(a.getLang("advhr.delta_width",0)),height:160+parseInt(a.getLang("advhr.delta_height",0)),inline:1},{plugin_url:b})});a.addButton("advhr",{title:"advhr.advhr_desc",cmd:"mceAdvancedHr"});a.onNodeChange.add(function(d,c,e){c.setActive("advhr",e.nodeName=="HR")});a.onClick.add(function(c,d){d=d.target;if(d.nodeName==="HR"){c.selection.select(d)}})},getInfo:function(){return{longname:"Advanced HR",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advhr",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advhr",tinymce.plugins.AdvancedHRPlugin)})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/advhr/editor_plugin_src.js b/common/static/js/vendor/tiny_mce/plugins/advhr/editor_plugin_src.js deleted file mode 100644 index 5a4b7250bc..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/advhr/editor_plugin_src.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * editor_plugin_src.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -(function() { - tinymce.create('tinymce.plugins.AdvancedHRPlugin', { - init : function(ed, url) { - // Register commands - ed.addCommand('mceAdvancedHr', function() { - ed.windowManager.open({ - file : url + '/rule.htm', - width : 250 + parseInt(ed.getLang('advhr.delta_width', 0)), - height : 160 + parseInt(ed.getLang('advhr.delta_height', 0)), - inline : 1 - }, { - plugin_url : url - }); - }); - - // Register buttons - ed.addButton('advhr', { - title : 'advhr.advhr_desc', - cmd : 'mceAdvancedHr' - }); - - ed.onNodeChange.add(function(ed, cm, n) { - cm.setActive('advhr', n.nodeName == 'HR'); - }); - - ed.onClick.add(function(ed, e) { - e = e.target; - - if (e.nodeName === 'HR') - ed.selection.select(e); - }); - }, - - getInfo : function() { - return { - longname : 'Advanced HR', - author : 'Moxiecode Systems AB', - authorurl : 'http://tinymce.moxiecode.com', - infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advhr', - version : tinymce.majorVersion + "." + tinymce.minorVersion - }; - } - }); - - // Register plugin - tinymce.PluginManager.add('advhr', tinymce.plugins.AdvancedHRPlugin); -})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/advhr/js/rule.js b/common/static/js/vendor/tiny_mce/plugins/advhr/js/rule.js deleted file mode 100644 index a60c35fc3c..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/advhr/js/rule.js +++ /dev/null @@ -1,43 +0,0 @@ -var AdvHRDialog = { - init : function(ed) { - var dom = ed.dom, f = document.forms[0], n = ed.selection.getNode(), w; - - w = dom.getAttrib(n, 'width'); - f.width.value = w ? parseInt(w) : (dom.getStyle('width') || ''); - f.size.value = dom.getAttrib(n, 'size') || parseInt(dom.getStyle('height')) || ''; - f.noshade.checked = !!dom.getAttrib(n, 'noshade') || !!dom.getStyle('border-width'); - selectByValue(f, 'width2', w.indexOf('%') != -1 ? '%' : 'px'); - }, - - update : function() { - var ed = tinyMCEPopup.editor, h, f = document.forms[0], st = ''; - - h = ' - - - {#advhr.advhr_desc} - - - - - - - -
- - -
-
- - - - - - - - - - - - - -
- - - -
-
-
- -
- - -
-
- - diff --git a/common/static/js/vendor/tiny_mce/plugins/advimage/css/advimage.css b/common/static/js/vendor/tiny_mce/plugins/advimage/css/advimage.css deleted file mode 100644 index 228530f9ee..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/advimage/css/advimage.css +++ /dev/null @@ -1,13 +0,0 @@ -#src_list, #over_list, #out_list {width:280px;} -.mceActionPanel {margin-top:7px;} -.alignPreview {border:1px solid #000; width:140px; height:140px; overflow:hidden; padding:5px;} -.checkbox {border:0;} -.panel_wrapper div.current {height:305px;} -#prev {margin:0; border:1px solid #000; width:428px; height:150px; overflow:auto;} -#align, #classlist {width:150px;} -#width, #height {vertical-align:middle; width:50px; text-align:center;} -#vspace, #hspace, #border {vertical-align:middle; width:30px; text-align:center;} -#class_list {width:180px;} -input {width: 280px;} -#constrain, #onmousemovecheck {width:auto;} -#id, #dir, #lang, #usemap, #longdesc {width:200px;} diff --git a/common/static/js/vendor/tiny_mce/plugins/advimage/editor_plugin.js b/common/static/js/vendor/tiny_mce/plugins/advimage/editor_plugin.js deleted file mode 100644 index d613a61393..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/advimage/editor_plugin.js +++ /dev/null @@ -1 +0,0 @@ -(function(){tinymce.create("tinymce.plugins.AdvancedImagePlugin",{init:function(a,b){a.addCommand("mceAdvImage",function(){if(a.dom.getAttrib(a.selection.getNode(),"class","").indexOf("mceItem")!=-1){return}a.windowManager.open({file:b+"/image.htm",width:480+parseInt(a.getLang("advimage.delta_width",0)),height:385+parseInt(a.getLang("advimage.delta_height",0)),inline:1},{plugin_url:b})});a.addButton("image",{title:"advimage.image_desc",cmd:"mceAdvImage"})},getInfo:function(){return{longname:"Advanced image",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advimage",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advimage",tinymce.plugins.AdvancedImagePlugin)})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/advimage/editor_plugin_src.js b/common/static/js/vendor/tiny_mce/plugins/advimage/editor_plugin_src.js deleted file mode 100644 index 76df89a3a9..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/advimage/editor_plugin_src.js +++ /dev/null @@ -1,50 +0,0 @@ -/** - * editor_plugin_src.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -(function() { - tinymce.create('tinymce.plugins.AdvancedImagePlugin', { - init : function(ed, url) { - // Register commands - ed.addCommand('mceAdvImage', function() { - // Internal image object like a flash placeholder - if (ed.dom.getAttrib(ed.selection.getNode(), 'class', '').indexOf('mceItem') != -1) - return; - - ed.windowManager.open({ - file : url + '/image.htm', - width : 480 + parseInt(ed.getLang('advimage.delta_width', 0)), - height : 385 + parseInt(ed.getLang('advimage.delta_height', 0)), - inline : 1 - }, { - plugin_url : url - }); - }); - - // Register buttons - ed.addButton('image', { - title : 'advimage.image_desc', - cmd : 'mceAdvImage' - }); - }, - - getInfo : function() { - return { - longname : 'Advanced image', - author : 'Moxiecode Systems AB', - authorurl : 'http://tinymce.moxiecode.com', - infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advimage', - version : tinymce.majorVersion + "." + tinymce.minorVersion - }; - } - }); - - // Register plugin - tinymce.PluginManager.add('advimage', tinymce.plugins.AdvancedImagePlugin); -})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/advimage/image.htm b/common/static/js/vendor/tiny_mce/plugins/advimage/image.htm deleted file mode 100644 index 835d3882c6..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/advimage/image.htm +++ /dev/null @@ -1,235 +0,0 @@ - - - - {#advimage_dlg.dialog_title} - - - - - - - - - - -
- - -
-
-
- {#advimage_dlg.general} - - - - - - - - - - - - - - - - - - - -
- -
- {#advimage_dlg.preview} - -
-
- -
-
- {#advimage_dlg.tab_appearance} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- {#advimage_dlg.example_img} - Lorem ipsum, Dolor sit amet, consectetuer adipiscing loreum ipsum edipiscing elit, sed diam - nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.Loreum ipsum - edipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam - erat volutpat. -
-
- - x - - px -
  - - - - -
-
-
-
- -
-
- {#advimage_dlg.swap_image} - - - - - - - - - - - - - - - - - - - - - -
- - - - -
 
- - - - -
 
-
- -
- {#advimage_dlg.misc} - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
- -
- - - - -
 
-
-
-
- -
- - -
-
- - diff --git a/common/static/js/vendor/tiny_mce/plugins/advimage/img/sample.gif b/common/static/js/vendor/tiny_mce/plugins/advimage/img/sample.gif deleted file mode 100644 index 53bf6890b507741c10910c9e2217ad8247b98e8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1624 zcmV-e2B-N)Nk%w1VJ!eH0OkMy|NsB}{r&v>{Q3F$`1ttq^YifV@ayaA>FMd_=H}w! z;^5%m-rnBb-QC>W+}qpR+S=OL+1c3G*w@$B*4Eb4)YQ|{)zHw=&d$%x&CScp%gV~i z$;rvc$jHXV#>B+L!^6YE!otD9!N9=4zrVk|y}i7=yt})*y1Kf#xw*Hux3;#nwY9ah zw6wFcv$C?Xv9YnRu&}SMudc4Ht*x!BtgNf6tE#H1si~={sjjD|r>3T+rKP2$q@<&x zqobp!qN1Xqp`oFnrJ$goprE6lpP!zdp`MSWoSd7Ro12@UnwpxLnw^=MnV6WE zmzS58mX?*3mz9;3mX?*2l$4W`lai8@l9G~eg|M^H&l zLpBo?51@vfgB2q_TVh*dNP<;cR$Wg!vYsMHR!qvvOis>GNH`+ zJ3B|tqgANiBSy@x>Q#;x7+DuU7&rwlf#S04)VZvA$XoUy8Y&f7)SqP<}Lw@L# zA(@Cohl`6CZyedUu^BlmK|DG5$Kl2f8z@uCc)^k-3m7$G!njf7$;XhOW>^`rV#UFh zEN#eG;bP?tCs>{+)q)ceg9$aDAaTZ{MGK5rU8ty$qz8){MT#gHGX{#XEJHLonBXFa zj+#9GE&^pq!`qG`K5iiC!gq}sRY|1yD8?j++_^oR0g+)NNtZN`)08!0q=}AA4HhIo zFaa9NYu8%97=oos5f?O`lwre~4VfoIei+FyK|urxj@C(-q(sS(!$5uL3j&jg7&XY% zlr17;3GGL;2K8>CB87G97;W(2VZ((D+3Hz;L;bylfhf(kFNV8at)h;hdM z85WX(#*Hq@@BYePt3t_l{ zCL3|YVWydA0Fz{rTl65n00)c^)^-jJn1c zRVXtA6mkUMEDLU|v7{JK&_IJ2ciiCy7BOT1fdUBh8b=yrbYaCAchCU_7?H`b1`}4q zLB|_mI2!;7W4QCq6F1O+MW||6AwmKafUrReUA&QotxQZI8D$G)AuSVV@X<&A9v;~H zKnWjo&;bljq=29aCeV-t5GBYkL=Q}q(S~FLd2t39MyRmC%_GFHkPc7CfIt8P*emqV z0YK2j9A+kmW^!tn(ZmG+L=6DZR99W}8p9?Utr=#t@rE2=zxf3QQ(JBJ&<{Z2>8EUP zeX1B)2w_3gXV)D-0Tt+=#@cV-0f!PU#MglZ3m6b}0e08zK^x;9(u?Tga{%?&nNTXhcEuM_#J>yL>p*a zuZJ2pliCGSp!Ye8>YFq@)ZOW-uT~OrjFQK!)UyVGFt7ni'); - }, - - init : function(ed) { - var f = document.forms[0], nl = f.elements, ed = tinyMCEPopup.editor, dom = ed.dom, n = ed.selection.getNode(), fl = tinyMCEPopup.getParam('external_image_list', 'tinyMCEImageList'); - - tinyMCEPopup.resizeToInnerSize(); - this.fillClassList('class_list'); - this.fillFileList('src_list', fl); - this.fillFileList('over_list', fl); - this.fillFileList('out_list', fl); - TinyMCE_EditableSelects.init(); - - if (n.nodeName == 'IMG') { - nl.src.value = dom.getAttrib(n, 'src'); - nl.width.value = dom.getAttrib(n, 'width'); - nl.height.value = dom.getAttrib(n, 'height'); - nl.alt.value = dom.getAttrib(n, 'alt'); - nl.title.value = dom.getAttrib(n, 'title'); - nl.vspace.value = this.getAttrib(n, 'vspace'); - nl.hspace.value = this.getAttrib(n, 'hspace'); - nl.border.value = this.getAttrib(n, 'border'); - selectByValue(f, 'align', this.getAttrib(n, 'align')); - selectByValue(f, 'class_list', dom.getAttrib(n, 'class'), true, true); - nl.style.value = dom.getAttrib(n, 'style'); - nl.id.value = dom.getAttrib(n, 'id'); - nl.dir.value = dom.getAttrib(n, 'dir'); - nl.lang.value = dom.getAttrib(n, 'lang'); - nl.usemap.value = dom.getAttrib(n, 'usemap'); - nl.longdesc.value = dom.getAttrib(n, 'longdesc'); - nl.insert.value = ed.getLang('update'); - - if (/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/.test(dom.getAttrib(n, 'onmouseover'))) - nl.onmouseoversrc.value = dom.getAttrib(n, 'onmouseover').replace(/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/, '$1'); - - if (/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/.test(dom.getAttrib(n, 'onmouseout'))) - nl.onmouseoutsrc.value = dom.getAttrib(n, 'onmouseout').replace(/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/, '$1'); - - if (ed.settings.inline_styles) { - // Move attribs to styles - if (dom.getAttrib(n, 'align')) - this.updateStyle('align'); - - if (dom.getAttrib(n, 'hspace')) - this.updateStyle('hspace'); - - if (dom.getAttrib(n, 'border')) - this.updateStyle('border'); - - if (dom.getAttrib(n, 'vspace')) - this.updateStyle('vspace'); - } - } - - // Setup browse button - document.getElementById('srcbrowsercontainer').innerHTML = getBrowserHTML('srcbrowser','src','image','theme_advanced_image'); - if (isVisible('srcbrowser')) - document.getElementById('src').style.width = '260px'; - - // Setup browse button - document.getElementById('onmouseoversrccontainer').innerHTML = getBrowserHTML('overbrowser','onmouseoversrc','image','theme_advanced_image'); - if (isVisible('overbrowser')) - document.getElementById('onmouseoversrc').style.width = '260px'; - - // Setup browse button - document.getElementById('onmouseoutsrccontainer').innerHTML = getBrowserHTML('outbrowser','onmouseoutsrc','image','theme_advanced_image'); - if (isVisible('outbrowser')) - document.getElementById('onmouseoutsrc').style.width = '260px'; - - // If option enabled default contrain proportions to checked - if (ed.getParam("advimage_constrain_proportions", true)) - f.constrain.checked = true; - - // Check swap image if valid data - if (nl.onmouseoversrc.value || nl.onmouseoutsrc.value) - this.setSwapImage(true); - else - this.setSwapImage(false); - - this.changeAppearance(); - this.showPreviewImage(nl.src.value, 1); - }, - - insert : function(file, title) { - var ed = tinyMCEPopup.editor, t = this, f = document.forms[0]; - - if (f.src.value === '') { - if (ed.selection.getNode().nodeName == 'IMG') { - ed.dom.remove(ed.selection.getNode()); - ed.execCommand('mceRepaint'); - } - - tinyMCEPopup.close(); - return; - } - - if (tinyMCEPopup.getParam("accessibility_warnings", 1)) { - if (!f.alt.value) { - tinyMCEPopup.confirm(tinyMCEPopup.getLang('advimage_dlg.missing_alt'), function(s) { - if (s) - t.insertAndClose(); - }); - - return; - } - } - - t.insertAndClose(); - }, - - insertAndClose : function() { - var ed = tinyMCEPopup.editor, f = document.forms[0], nl = f.elements, v, args = {}, el; - - tinyMCEPopup.restoreSelection(); - - // Fixes crash in Safari - if (tinymce.isWebKit) - ed.getWin().focus(); - - if (!ed.settings.inline_styles) { - args = { - vspace : nl.vspace.value, - hspace : nl.hspace.value, - border : nl.border.value, - align : getSelectValue(f, 'align') - }; - } else { - // Remove deprecated values - args = { - vspace : '', - hspace : '', - border : '', - align : '' - }; - } - - tinymce.extend(args, { - src : nl.src.value.replace(/ /g, '%20'), - width : nl.width.value, - height : nl.height.value, - alt : nl.alt.value, - title : nl.title.value, - 'class' : getSelectValue(f, 'class_list'), - style : nl.style.value, - id : nl.id.value, - dir : nl.dir.value, - lang : nl.lang.value, - usemap : nl.usemap.value, - longdesc : nl.longdesc.value - }); - - args.onmouseover = args.onmouseout = ''; - - if (f.onmousemovecheck.checked) { - if (nl.onmouseoversrc.value) - args.onmouseover = "this.src='" + nl.onmouseoversrc.value + "';"; - - if (nl.onmouseoutsrc.value) - args.onmouseout = "this.src='" + nl.onmouseoutsrc.value + "';"; - } - - el = ed.selection.getNode(); - - if (el && el.nodeName == 'IMG') { - ed.dom.setAttribs(el, args); - } else { - tinymce.each(args, function(value, name) { - if (value === "") { - delete args[name]; - } - }); - - ed.execCommand('mceInsertContent', false, tinyMCEPopup.editor.dom.createHTML('img', args), {skip_undo : 1}); - ed.undoManager.add(); - } - - tinyMCEPopup.editor.execCommand('mceRepaint'); - tinyMCEPopup.editor.focus(); - tinyMCEPopup.close(); - }, - - getAttrib : function(e, at) { - var ed = tinyMCEPopup.editor, dom = ed.dom, v, v2; - - if (ed.settings.inline_styles) { - switch (at) { - case 'align': - if (v = dom.getStyle(e, 'float')) - return v; - - if (v = dom.getStyle(e, 'vertical-align')) - return v; - - break; - - case 'hspace': - v = dom.getStyle(e, 'margin-left') - v2 = dom.getStyle(e, 'margin-right'); - - if (v && v == v2) - return parseInt(v.replace(/[^0-9]/g, '')); - - break; - - case 'vspace': - v = dom.getStyle(e, 'margin-top') - v2 = dom.getStyle(e, 'margin-bottom'); - if (v && v == v2) - return parseInt(v.replace(/[^0-9]/g, '')); - - break; - - case 'border': - v = 0; - - tinymce.each(['top', 'right', 'bottom', 'left'], function(sv) { - sv = dom.getStyle(e, 'border-' + sv + '-width'); - - // False or not the same as prev - if (!sv || (sv != v && v !== 0)) { - v = 0; - return false; - } - - if (sv) - v = sv; - }); - - if (v) - return parseInt(v.replace(/[^0-9]/g, '')); - - break; - } - } - - if (v = dom.getAttrib(e, at)) - return v; - - return ''; - }, - - setSwapImage : function(st) { - var f = document.forms[0]; - - f.onmousemovecheck.checked = st; - setBrowserDisabled('overbrowser', !st); - setBrowserDisabled('outbrowser', !st); - - if (f.over_list) - f.over_list.disabled = !st; - - if (f.out_list) - f.out_list.disabled = !st; - - f.onmouseoversrc.disabled = !st; - f.onmouseoutsrc.disabled = !st; - }, - - fillClassList : function(id) { - var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl; - - if (v = tinyMCEPopup.getParam('theme_advanced_styles')) { - cl = []; - - tinymce.each(v.split(';'), function(v) { - var p = v.split('='); - - cl.push({'title' : p[0], 'class' : p[1]}); - }); - } else - cl = tinyMCEPopup.editor.dom.getClasses(); - - if (cl.length > 0) { - lst.options.length = 0; - lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), ''); - - tinymce.each(cl, function(o) { - lst.options[lst.options.length] = new Option(o.title || o['class'], o['class']); - }); - } else - dom.remove(dom.getParent(id, 'tr')); - }, - - fillFileList : function(id, l) { - var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl; - - l = typeof(l) === 'function' ? l() : window[l]; - lst.options.length = 0; - - if (l && l.length > 0) { - lst.options[lst.options.length] = new Option('', ''); - - tinymce.each(l, function(o) { - lst.options[lst.options.length] = new Option(o[0], o[1]); - }); - } else - dom.remove(dom.getParent(id, 'tr')); - }, - - resetImageData : function() { - var f = document.forms[0]; - - f.elements.width.value = f.elements.height.value = ''; - }, - - updateImageData : function(img, st) { - var f = document.forms[0]; - - if (!st) { - f.elements.width.value = img.width; - f.elements.height.value = img.height; - } - - this.preloadImg = img; - }, - - changeAppearance : function() { - var ed = tinyMCEPopup.editor, f = document.forms[0], img = document.getElementById('alignSampleImg'); - - if (img) { - if (ed.getParam('inline_styles')) { - ed.dom.setAttrib(img, 'style', f.style.value); - } else { - img.align = f.align.value; - img.border = f.border.value; - img.hspace = f.hspace.value; - img.vspace = f.vspace.value; - } - } - }, - - changeHeight : function() { - var f = document.forms[0], tp, t = this; - - if (!f.constrain.checked || !t.preloadImg) { - return; - } - - if (f.width.value == "" || f.height.value == "") - return; - - tp = (parseInt(f.width.value) / parseInt(t.preloadImg.width)) * t.preloadImg.height; - f.height.value = tp.toFixed(0); - }, - - changeWidth : function() { - var f = document.forms[0], tp, t = this; - - if (!f.constrain.checked || !t.preloadImg) { - return; - } - - if (f.width.value == "" || f.height.value == "") - return; - - tp = (parseInt(f.height.value) / parseInt(t.preloadImg.height)) * t.preloadImg.width; - f.width.value = tp.toFixed(0); - }, - - updateStyle : function(ty) { - var dom = tinyMCEPopup.dom, b, bStyle, bColor, v, isIE = tinymce.isIE, f = document.forms[0], img = dom.create('img', {style : dom.get('style').value}); - - if (tinyMCEPopup.editor.settings.inline_styles) { - // Handle align - if (ty == 'align') { - dom.setStyle(img, 'float', ''); - dom.setStyle(img, 'vertical-align', ''); - - v = getSelectValue(f, 'align'); - if (v) { - if (v == 'left' || v == 'right') - dom.setStyle(img, 'float', v); - else - img.style.verticalAlign = v; - } - } - - // Handle border - if (ty == 'border') { - b = img.style.border ? img.style.border.split(' ') : []; - bStyle = dom.getStyle(img, 'border-style'); - bColor = dom.getStyle(img, 'border-color'); - - dom.setStyle(img, 'border', ''); - - v = f.border.value; - if (v || v == '0') { - if (v == '0') - img.style.border = isIE ? '0' : '0 none none'; - else { - var isOldIE = tinymce.isIE && (!document.documentMode || document.documentMode < 9); - - if (b.length == 3 && b[isOldIE ? 2 : 1]) - bStyle = b[isOldIE ? 2 : 1]; - else if (!bStyle || bStyle == 'none') - bStyle = 'solid'; - if (b.length == 3 && b[isIE ? 0 : 2]) - bColor = b[isOldIE ? 0 : 2]; - else if (!bColor || bColor == 'none') - bColor = 'black'; - img.style.border = v + 'px ' + bStyle + ' ' + bColor; - } - } - } - - // Handle hspace - if (ty == 'hspace') { - dom.setStyle(img, 'marginLeft', ''); - dom.setStyle(img, 'marginRight', ''); - - v = f.hspace.value; - if (v) { - img.style.marginLeft = v + 'px'; - img.style.marginRight = v + 'px'; - } - } - - // Handle vspace - if (ty == 'vspace') { - dom.setStyle(img, 'marginTop', ''); - dom.setStyle(img, 'marginBottom', ''); - - v = f.vspace.value; - if (v) { - img.style.marginTop = v + 'px'; - img.style.marginBottom = v + 'px'; - } - } - - // Merge - dom.get('style').value = dom.serializeStyle(dom.parseStyle(img.style.cssText), 'img'); - } - }, - - changeMouseMove : function() { - }, - - showPreviewImage : function(u, st) { - if (!u) { - tinyMCEPopup.dom.setHTML('prev', ''); - return; - } - - if (!st && tinyMCEPopup.getParam("advimage_update_dimensions_onchange", true)) - this.resetImageData(); - - u = tinyMCEPopup.editor.documentBaseURI.toAbsolute(u); - - if (!st) - tinyMCEPopup.dom.setHTML('prev', ''); - else - tinyMCEPopup.dom.setHTML('prev', ''); - } -}; - -ImageDialog.preInit(); -tinyMCEPopup.onInit.add(ImageDialog.init, ImageDialog); diff --git a/common/static/js/vendor/tiny_mce/plugins/advimage/langs/en_dlg.js b/common/static/js/vendor/tiny_mce/plugins/advimage/langs/en_dlg.js deleted file mode 100644 index 5f122e2cd3..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/advimage/langs/en_dlg.js +++ /dev/null @@ -1 +0,0 @@ -tinyMCE.addI18n('en.advimage_dlg',{"image_list":"Image List","align_right":"Right","align_left":"Left","align_textbottom":"Text Bottom","align_texttop":"Text Top","align_bottom":"Bottom","align_middle":"Middle","align_top":"Top","align_baseline":"Baseline",align:"Alignment",hspace:"Horizontal Space",vspace:"Vertical Space",dimensions:"Dimensions",border:"Border",list:"Image List",alt:"Image Description",src:"Image URL","dialog_title":"Insert/Edit Image","missing_alt":"Are you sure you want to continue without including an Image Description? Without it the image may not be accessible to some users with disabilities, or to those using a text browser, or browsing the Web with images turned off.","example_img":"Appearance Preview Image",misc:"Miscellaneous",mouseout:"For Mouse Out",mouseover:"For Mouse Over","alt_image":"Alternative Image","swap_image":"Swap Image",map:"Image Map",id:"ID",rtl:"Right to Left",ltr:"Left to Right",classes:"Classes",style:"Style","long_desc":"Long Description Link",langcode:"Language Code",langdir:"Language Direction","constrain_proportions":"Constrain Proportions",preview:"Preview",title:"Title",general:"General","tab_advanced":"Advanced","tab_appearance":"Appearance","tab_general":"General",width:"Width",height:"Height"}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/advlink/css/advlink.css b/common/static/js/vendor/tiny_mce/plugins/advlink/css/advlink.css deleted file mode 100644 index 66c6549354..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/advlink/css/advlink.css +++ /dev/null @@ -1,8 +0,0 @@ -.mceLinkList, .mceAnchorList, #targetlist {width:280px;} -.mceActionPanel {margin-top:7px;} -.panel_wrapper div.current {height:320px;} -#classlist, #title, #href {width:280px;} -#popupurl, #popupname {width:200px;} -#popupwidth, #popupheight, #popupleft, #popuptop {width:30px;vertical-align:middle;text-align:center;} -#id, #style, #classes, #target, #dir, #hreflang, #lang, #charset, #type, #rel, #rev, #tabindex, #accesskey {width:200px;} -#events_panel input {width:200px;} diff --git a/common/static/js/vendor/tiny_mce/plugins/advlink/editor_plugin.js b/common/static/js/vendor/tiny_mce/plugins/advlink/editor_plugin.js deleted file mode 100644 index 983fe5a9ca..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/advlink/editor_plugin.js +++ /dev/null @@ -1 +0,0 @@ -(function(){tinymce.create("tinymce.plugins.AdvancedLinkPlugin",{init:function(a,b){this.editor=a;a.addCommand("mceAdvLink",function(){var c=a.selection;if(c.isCollapsed()&&!a.dom.getParent(c.getNode(),"A")){return}a.windowManager.open({file:b+"/link.htm",width:480+parseInt(a.getLang("advlink.delta_width",0)),height:400+parseInt(a.getLang("advlink.delta_height",0)),inline:1},{plugin_url:b})});a.addButton("link",{title:"advlink.link_desc",cmd:"mceAdvLink"});a.addShortcut("ctrl+k","advlink.advlink_desc","mceAdvLink");a.onNodeChange.add(function(d,c,f,e){c.setDisabled("link",e&&f.nodeName!="A");c.setActive("link",f.nodeName=="A"&&!f.name)})},getInfo:function(){return{longname:"Advanced link",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlink",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advlink",tinymce.plugins.AdvancedLinkPlugin)})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/advlink/editor_plugin_src.js b/common/static/js/vendor/tiny_mce/plugins/advlink/editor_plugin_src.js deleted file mode 100644 index 32ea8f3db9..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/advlink/editor_plugin_src.js +++ /dev/null @@ -1,61 +0,0 @@ -/** - * editor_plugin_src.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -(function() { - tinymce.create('tinymce.plugins.AdvancedLinkPlugin', { - init : function(ed, url) { - this.editor = ed; - - // Register commands - ed.addCommand('mceAdvLink', function() { - var se = ed.selection; - - // No selection and not in link - if (se.isCollapsed() && !ed.dom.getParent(se.getNode(), 'A')) - return; - - ed.windowManager.open({ - file : url + '/link.htm', - width : 480 + parseInt(ed.getLang('advlink.delta_width', 0)), - height : 400 + parseInt(ed.getLang('advlink.delta_height', 0)), - inline : 1 - }, { - plugin_url : url - }); - }); - - // Register buttons - ed.addButton('link', { - title : 'advlink.link_desc', - cmd : 'mceAdvLink' - }); - - ed.addShortcut('ctrl+k', 'advlink.advlink_desc', 'mceAdvLink'); - - ed.onNodeChange.add(function(ed, cm, n, co) { - cm.setDisabled('link', co && n.nodeName != 'A'); - cm.setActive('link', n.nodeName == 'A' && !n.name); - }); - }, - - getInfo : function() { - return { - longname : 'Advanced link', - author : 'Moxiecode Systems AB', - authorurl : 'http://tinymce.moxiecode.com', - infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlink', - version : tinymce.majorVersion + "." + tinymce.minorVersion - }; - } - }); - - // Register plugin - tinymce.PluginManager.add('advlink', tinymce.plugins.AdvancedLinkPlugin); -})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/advlink/js/advlink.js b/common/static/js/vendor/tiny_mce/plugins/advlink/js/advlink.js deleted file mode 100644 index 5bf8070030..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/advlink/js/advlink.js +++ /dev/null @@ -1,543 +0,0 @@ -/* Functions for the advlink plugin popup */ - -tinyMCEPopup.requireLangPack(); - -var templates = { - "window.open" : "window.open('${url}','${target}','${options}')" -}; - -function preinit() { - var url; - - if (url = tinyMCEPopup.getParam("external_link_list_url")) - document.write(''); -} - -function changeClass() { - var f = document.forms[0]; - - f.classes.value = getSelectValue(f, 'classlist'); -} - -function init() { - tinyMCEPopup.resizeToInnerSize(); - - var formObj = document.forms[0]; - var inst = tinyMCEPopup.editor; - var elm = inst.selection.getNode(); - var action = "insert"; - var html; - - document.getElementById('hrefbrowsercontainer').innerHTML = getBrowserHTML('hrefbrowser','href','file','advlink'); - document.getElementById('popupurlbrowsercontainer').innerHTML = getBrowserHTML('popupurlbrowser','popupurl','file','advlink'); - document.getElementById('targetlistcontainer').innerHTML = getTargetListHTML('targetlist','target'); - - // Link list - html = getLinkListHTML('linklisthref','href'); - if (html == "") - document.getElementById("linklisthrefrow").style.display = 'none'; - else - document.getElementById("linklisthrefcontainer").innerHTML = html; - - // Anchor list - html = getAnchorListHTML('anchorlist','href'); - if (html == "") - document.getElementById("anchorlistrow").style.display = 'none'; - else - document.getElementById("anchorlistcontainer").innerHTML = html; - - // Resize some elements - if (isVisible('hrefbrowser')) - document.getElementById('href').style.width = '260px'; - - if (isVisible('popupurlbrowser')) - document.getElementById('popupurl').style.width = '180px'; - - elm = inst.dom.getParent(elm, "A"); - if (elm == null) { - var prospect = inst.dom.create("p", null, inst.selection.getContent()); - if (prospect.childNodes.length === 1) { - elm = prospect.firstChild; - } - } - - if (elm != null && elm.nodeName == "A") - action = "update"; - - formObj.insert.value = tinyMCEPopup.getLang(action, 'Insert', true); - - setPopupControlsDisabled(true); - - if (action == "update") { - var href = inst.dom.getAttrib(elm, 'href'); - var onclick = inst.dom.getAttrib(elm, 'onclick'); - var linkTarget = inst.dom.getAttrib(elm, 'target') ? inst.dom.getAttrib(elm, 'target') : "_self"; - - // Setup form data - setFormValue('href', href); - setFormValue('title', inst.dom.getAttrib(elm, 'title')); - setFormValue('id', inst.dom.getAttrib(elm, 'id')); - setFormValue('style', inst.dom.getAttrib(elm, "style")); - setFormValue('rel', inst.dom.getAttrib(elm, 'rel')); - setFormValue('rev', inst.dom.getAttrib(elm, 'rev')); - setFormValue('charset', inst.dom.getAttrib(elm, 'charset')); - setFormValue('hreflang', inst.dom.getAttrib(elm, 'hreflang')); - setFormValue('dir', inst.dom.getAttrib(elm, 'dir')); - setFormValue('lang', inst.dom.getAttrib(elm, 'lang')); - setFormValue('tabindex', inst.dom.getAttrib(elm, 'tabindex', typeof(elm.tabindex) != "undefined" ? elm.tabindex : "")); - setFormValue('accesskey', inst.dom.getAttrib(elm, 'accesskey', typeof(elm.accesskey) != "undefined" ? elm.accesskey : "")); - setFormValue('type', inst.dom.getAttrib(elm, 'type')); - setFormValue('onfocus', inst.dom.getAttrib(elm, 'onfocus')); - setFormValue('onblur', inst.dom.getAttrib(elm, 'onblur')); - setFormValue('onclick', onclick); - setFormValue('ondblclick', inst.dom.getAttrib(elm, 'ondblclick')); - setFormValue('onmousedown', inst.dom.getAttrib(elm, 'onmousedown')); - setFormValue('onmouseup', inst.dom.getAttrib(elm, 'onmouseup')); - setFormValue('onmouseover', inst.dom.getAttrib(elm, 'onmouseover')); - setFormValue('onmousemove', inst.dom.getAttrib(elm, 'onmousemove')); - setFormValue('onmouseout', inst.dom.getAttrib(elm, 'onmouseout')); - setFormValue('onkeypress', inst.dom.getAttrib(elm, 'onkeypress')); - setFormValue('onkeydown', inst.dom.getAttrib(elm, 'onkeydown')); - setFormValue('onkeyup', inst.dom.getAttrib(elm, 'onkeyup')); - setFormValue('target', linkTarget); - setFormValue('classes', inst.dom.getAttrib(elm, 'class')); - - // Parse onclick data - if (onclick != null && onclick.indexOf('window.open') != -1) - parseWindowOpen(onclick); - else - parseFunction(onclick); - - // Select by the values - selectByValue(formObj, 'dir', inst.dom.getAttrib(elm, 'dir')); - selectByValue(formObj, 'rel', inst.dom.getAttrib(elm, 'rel')); - selectByValue(formObj, 'rev', inst.dom.getAttrib(elm, 'rev')); - selectByValue(formObj, 'linklisthref', href); - - if (href.charAt(0) == '#') - selectByValue(formObj, 'anchorlist', href); - - addClassesToList('classlist', 'advlink_styles'); - - selectByValue(formObj, 'classlist', inst.dom.getAttrib(elm, 'class'), true); - selectByValue(formObj, 'targetlist', linkTarget, true); - } else - addClassesToList('classlist', 'advlink_styles'); -} - -function checkPrefix(n) { - if (n.value && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCEPopup.getLang('advlink_dlg.is_email'))) - n.value = 'mailto:' + n.value; - - if (/^\s*www\./i.test(n.value) && confirm(tinyMCEPopup.getLang('advlink_dlg.is_external'))) - n.value = 'http://' + n.value; -} - -function setFormValue(name, value) { - document.forms[0].elements[name].value = value; -} - -function parseWindowOpen(onclick) { - var formObj = document.forms[0]; - - // Preprocess center code - if (onclick.indexOf('return false;') != -1) { - formObj.popupreturn.checked = true; - onclick = onclick.replace('return false;', ''); - } else - formObj.popupreturn.checked = false; - - var onClickData = parseLink(onclick); - - if (onClickData != null) { - formObj.ispopup.checked = true; - setPopupControlsDisabled(false); - - var onClickWindowOptions = parseOptions(onClickData['options']); - var url = onClickData['url']; - - formObj.popupname.value = onClickData['target']; - formObj.popupurl.value = url; - formObj.popupwidth.value = getOption(onClickWindowOptions, 'width'); - formObj.popupheight.value = getOption(onClickWindowOptions, 'height'); - - formObj.popupleft.value = getOption(onClickWindowOptions, 'left'); - formObj.popuptop.value = getOption(onClickWindowOptions, 'top'); - - if (formObj.popupleft.value.indexOf('screen') != -1) - formObj.popupleft.value = "c"; - - if (formObj.popuptop.value.indexOf('screen') != -1) - formObj.popuptop.value = "c"; - - formObj.popuplocation.checked = getOption(onClickWindowOptions, 'location') == "yes"; - formObj.popupscrollbars.checked = getOption(onClickWindowOptions, 'scrollbars') == "yes"; - formObj.popupmenubar.checked = getOption(onClickWindowOptions, 'menubar') == "yes"; - formObj.popupresizable.checked = getOption(onClickWindowOptions, 'resizable') == "yes"; - formObj.popuptoolbar.checked = getOption(onClickWindowOptions, 'toolbar') == "yes"; - formObj.popupstatus.checked = getOption(onClickWindowOptions, 'status') == "yes"; - formObj.popupdependent.checked = getOption(onClickWindowOptions, 'dependent') == "yes"; - - buildOnClick(); - } -} - -function parseFunction(onclick) { - var formObj = document.forms[0]; - var onClickData = parseLink(onclick); - - // TODO: Add stuff here -} - -function getOption(opts, name) { - return typeof(opts[name]) == "undefined" ? "" : opts[name]; -} - -function setPopupControlsDisabled(state) { - var formObj = document.forms[0]; - - formObj.popupname.disabled = state; - formObj.popupurl.disabled = state; - formObj.popupwidth.disabled = state; - formObj.popupheight.disabled = state; - formObj.popupleft.disabled = state; - formObj.popuptop.disabled = state; - formObj.popuplocation.disabled = state; - formObj.popupscrollbars.disabled = state; - formObj.popupmenubar.disabled = state; - formObj.popupresizable.disabled = state; - formObj.popuptoolbar.disabled = state; - formObj.popupstatus.disabled = state; - formObj.popupreturn.disabled = state; - formObj.popupdependent.disabled = state; - - setBrowserDisabled('popupurlbrowser', state); -} - -function parseLink(link) { - link = link.replace(new RegExp(''', 'g'), "'"); - - var fnName = link.replace(new RegExp("\\s*([A-Za-z0-9\.]*)\\s*\\(.*", "gi"), "$1"); - - // Is function name a template function - var template = templates[fnName]; - if (template) { - // Build regexp - var variableNames = template.match(new RegExp("'?\\$\\{[A-Za-z0-9\.]*\\}'?", "gi")); - var regExp = "\\s*[A-Za-z0-9\.]*\\s*\\("; - var replaceStr = ""; - for (var i=0; i'); - for (var i=0; i' + name + ''; - - if ((name = nodes[i].id) != "" && !nodes[i].href) - html += ''; - } - - if (html == "") - return ""; - - html = ''; - - return html; -} - -function insertAction() { - var inst = tinyMCEPopup.editor; - var elm, elementArray, i; - - elm = inst.selection.getNode(); - checkPrefix(document.forms[0].href); - - elm = inst.dom.getParent(elm, "A"); - - // Remove element if there is no href - if (!document.forms[0].href.value) { - i = inst.selection.getBookmark(); - inst.dom.remove(elm, 1); - inst.selection.moveToBookmark(i); - tinyMCEPopup.execCommand("mceEndUndoLevel"); - tinyMCEPopup.close(); - return; - } - - // Create new anchor elements - if (elm == null) { - inst.getDoc().execCommand("unlink", false, null); - tinyMCEPopup.execCommand("mceInsertLink", false, "#mce_temp_url#", {skip_undo : 1}); - - elementArray = tinymce.grep(inst.dom.select("a"), function(n) {return inst.dom.getAttrib(n, 'href') == '#mce_temp_url#';}); - for (i=0; i' + tinyMCELinkList[i][0] + ''; - - html += ''; - - return html; - - // tinyMCE.debug('-- image list start --', html, '-- image list end --'); -} - -function getTargetListHTML(elm_id, target_form_element) { - var targets = tinyMCEPopup.getParam('theme_advanced_link_targets', '').split(';'); - var html = ''; - - html += ''; - - return html; -} - -// While loading -preinit(); -tinyMCEPopup.onInit.add(init); diff --git a/common/static/js/vendor/tiny_mce/plugins/advlink/langs/en_dlg.js b/common/static/js/vendor/tiny_mce/plugins/advlink/langs/en_dlg.js deleted file mode 100644 index 3169a56580..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/advlink/langs/en_dlg.js +++ /dev/null @@ -1 +0,0 @@ -tinyMCE.addI18n('en.advlink_dlg',{"target_name":"Target Name",classes:"Classes",style:"Style",id:"ID","popup_position":"Position (X/Y)",langdir:"Language Direction","popup_size":"Size","popup_dependent":"Dependent (Mozilla/Firefox Only)","popup_resizable":"Make Window Resizable","popup_location":"Show Location Bar","popup_menubar":"Show Menu Bar","popup_toolbar":"Show Toolbars","popup_statusbar":"Show Status Bar","popup_scrollbars":"Show Scrollbars","popup_return":"Insert \'return false\'","popup_name":"Window Name","popup_url":"Popup URL",popup:"JavaScript Popup","target_blank":"Open in New Window","target_top":"Open in Top Frame (Replaces All Frames)","target_parent":"Open in Parent Window/Frame","target_same":"Open in This Window/Frame","anchor_names":"Anchors","popup_opts":"Options","advanced_props":"Advanced Properties","event_props":"Events","popup_props":"Popup Properties","general_props":"General Properties","advanced_tab":"Advanced","events_tab":"Events","popup_tab":"Popup","general_tab":"General",list:"Link List","is_external":"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?","is_email":"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",titlefield:"Title",target:"Target",url:"Link URL",title:"Insert/Edit Link","link_list":"Link List",rtl:"Right to Left",ltr:"Left to Right",accesskey:"AccessKey",tabindex:"TabIndex",rev:"Relationship Target to Page",rel:"Relationship Page to Target",mime:"Target MIME Type",encoding:"Target Character Encoding",langcode:"Language Code","target_langcode":"Target Language",width:"Width",height:"Height"}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/advlink/link.htm b/common/static/js/vendor/tiny_mce/plugins/advlink/link.htm deleted file mode 100644 index 52623ab571..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/advlink/link.htm +++ /dev/null @@ -1,338 +0,0 @@ - - - - {#advlink_dlg.title} - - - - - - - - - -
- - - - -
- - -
-
- - diff --git a/common/static/js/vendor/tiny_mce/plugins/advlist/editor_plugin.js b/common/static/js/vendor/tiny_mce/plugins/advlist/editor_plugin.js deleted file mode 100644 index 57ecce6e02..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/advlist/editor_plugin.js +++ /dev/null @@ -1 +0,0 @@ -(function(){var a=tinymce.each;tinymce.create("tinymce.plugins.AdvListPlugin",{init:function(b,c){var d=this;d.editor=b;function e(g){var f=[];a(g.split(/,/),function(h){f.push({title:"advlist."+(h=="default"?"def":h.replace(/-/g,"_")),styles:{listStyleType:h=="default"?"":h}})});return f}d.numlist=b.getParam("advlist_number_styles")||e("default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman");d.bullist=b.getParam("advlist_bullet_styles")||e("default,circle,disc,square");if(tinymce.isIE&&/MSIE [2-7]/.test(navigator.userAgent)){d.isIE7=true}},createControl:function(d,b){var f=this,e,i,g=f.editor;if(d=="numlist"||d=="bullist"){if(f[d][0].title=="advlist.def"){i=f[d][0]}function c(j,l){var k=true;a(l.styles,function(n,m){if(g.dom.getStyle(j,m)!=n){k=false;return false}});return k}function h(){var k,l=g.dom,j=g.selection;k=l.getParent(j.getNode(),"ol,ul");if(!k||k.nodeName==(d=="bullist"?"OL":"UL")||c(k,i)){g.execCommand(d=="bullist"?"InsertUnorderedList":"InsertOrderedList")}if(i){k=l.getParent(j.getNode(),"ol,ul");if(k){l.setStyles(k,i.styles);k.removeAttribute("data-mce-style")}}g.focus()}e=b.createSplitButton(d,{title:"advanced."+d+"_desc","class":"mce_"+d,onclick:function(){h()}});e.onRenderMenu.add(function(j,k){k.onHideMenu.add(function(){if(f.bookmark){g.selection.moveToBookmark(f.bookmark);f.bookmark=0}});k.onShowMenu.add(function(){var n=g.dom,m=n.getParent(g.selection.getNode(),"ol,ul"),l;if(m||i){l=f[d];a(k.items,function(o){var p=true;o.setSelected(0);if(m&&!o.isDisabled()){a(l,function(q){if(q.id==o.id){if(!c(m,q)){p=false;return false}}});if(p){o.setSelected(1)}}});if(!m){k.items[i.id].setSelected(1)}}g.focus();if(tinymce.isIE){f.bookmark=g.selection.getBookmark(1)}});k.add({id:g.dom.uniqueId(),title:"advlist.types","class":"mceMenuItemTitle",titleItem:true}).setDisabled(1);a(f[d],function(l){if(f.isIE7&&l.styles.listStyleType=="lower-greek"){return}l.id=g.dom.uniqueId();k.add({id:l.id,title:l.title,onclick:function(){i=l;h()}})})});return e}},getInfo:function(){return{longname:"Advanced lists",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlist",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advlist",tinymce.plugins.AdvListPlugin)})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/advlist/editor_plugin_src.js b/common/static/js/vendor/tiny_mce/plugins/advlist/editor_plugin_src.js deleted file mode 100644 index 4ee4d34c87..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/advlist/editor_plugin_src.js +++ /dev/null @@ -1,176 +0,0 @@ -/** - * editor_plugin_src.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -(function() { - var each = tinymce.each; - - tinymce.create('tinymce.plugins.AdvListPlugin', { - init : function(ed, url) { - var t = this; - - t.editor = ed; - - function buildFormats(str) { - var formats = []; - - each(str.split(/,/), function(type) { - formats.push({ - title : 'advlist.' + (type == 'default' ? 'def' : type.replace(/-/g, '_')), - styles : { - listStyleType : type == 'default' ? '' : type - } - }); - }); - - return formats; - }; - - // Setup number formats from config or default - t.numlist = ed.getParam("advlist_number_styles") || buildFormats("default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman"); - t.bullist = ed.getParam("advlist_bullet_styles") || buildFormats("default,circle,disc,square"); - - if (tinymce.isIE && /MSIE [2-7]/.test(navigator.userAgent)) - t.isIE7 = true; - }, - - createControl: function(name, cm) { - var t = this, btn, format, editor = t.editor; - - if (name == 'numlist' || name == 'bullist') { - // Default to first item if it's a default item - if (t[name][0].title == 'advlist.def') - format = t[name][0]; - - function hasFormat(node, format) { - var state = true; - - each(format.styles, function(value, name) { - // Format doesn't match - if (editor.dom.getStyle(node, name) != value) { - state = false; - return false; - } - }); - - return state; - }; - - function applyListFormat() { - var list, dom = editor.dom, sel = editor.selection; - - // Check for existing list element - list = dom.getParent(sel.getNode(), 'ol,ul'); - - // Switch/add list type if needed - if (!list || list.nodeName == (name == 'bullist' ? 'OL' : 'UL') || hasFormat(list, format)) - editor.execCommand(name == 'bullist' ? 'InsertUnorderedList' : 'InsertOrderedList'); - - // Append styles to new list element - if (format) { - list = dom.getParent(sel.getNode(), 'ol,ul'); - if (list) { - dom.setStyles(list, format.styles); - list.removeAttribute('data-mce-style'); - } - } - - editor.focus(); - }; - - btn = cm.createSplitButton(name, { - title : 'advanced.' + name + '_desc', - 'class' : 'mce_' + name, - onclick : function() { - applyListFormat(); - } - }); - - btn.onRenderMenu.add(function(btn, menu) { - menu.onHideMenu.add(function() { - if (t.bookmark) { - editor.selection.moveToBookmark(t.bookmark); - t.bookmark = 0; - } - }); - - menu.onShowMenu.add(function() { - var dom = editor.dom, list = dom.getParent(editor.selection.getNode(), 'ol,ul'), fmtList; - - if (list || format) { - fmtList = t[name]; - - // Unselect existing items - each(menu.items, function(item) { - var state = true; - - item.setSelected(0); - - if (list && !item.isDisabled()) { - each(fmtList, function(fmt) { - if (fmt.id == item.id) { - if (!hasFormat(list, fmt)) { - state = false; - return false; - } - } - }); - - if (state) - item.setSelected(1); - } - }); - - // Select the current format - if (!list) - menu.items[format.id].setSelected(1); - } - - editor.focus(); - - // IE looses it's selection so store it away and restore it later - if (tinymce.isIE) { - t.bookmark = editor.selection.getBookmark(1); - } - }); - - menu.add({id : editor.dom.uniqueId(), title : 'advlist.types', 'class' : 'mceMenuItemTitle', titleItem: true}).setDisabled(1); - - each(t[name], function(item) { - // IE<8 doesn't support lower-greek, skip it - if (t.isIE7 && item.styles.listStyleType == 'lower-greek') - return; - - item.id = editor.dom.uniqueId(); - - menu.add({id : item.id, title : item.title, onclick : function() { - format = item; - applyListFormat(); - }}); - }); - }); - - return btn; - } - }, - - getInfo : function() { - return { - longname : 'Advanced lists', - author : 'Moxiecode Systems AB', - authorurl : 'http://tinymce.moxiecode.com', - infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlist', - version : tinymce.majorVersion + "." + tinymce.minorVersion - }; - } - }); - - // Register plugin - tinymce.PluginManager.add('advlist', tinymce.plugins.AdvListPlugin); -})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/advlist/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/advlist/plugin.min.js new file mode 100644 index 0000000000..da1cdb2ba4 --- /dev/null +++ b/common/static/js/vendor/tiny_mce/plugins/advlist/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("advlist",function(t){function e(t,e){var n=[];return tinymce.each(e.split(/[ ,]/),function(t){n.push({text:t.replace(/\-/g," ").replace(/\b\w/g,function(t){return t.toUpperCase()}),data:"default"==t?"":t})}),n}function n(e,n){var i,r=t.dom,a=t.selection;i=r.getParent(a.getNode(),"ol,ul"),i&&i.nodeName==e&&n!==!1||t.execCommand("UL"==e?"InsertUnorderedList":"InsertOrderedList"),n=n===!1?o[e]:n,o[e]=n,i=r.getParent(a.getNode(),"ol,ul"),i&&(r.setStyle(i,"listStyleType",n),i.removeAttribute("data-mce-style")),t.focus()}function i(e){var n=t.dom.getStyle(t.dom.getParent(t.selection.getNode(),"ol,ul"),"listStyleType")||"";e.control.items().each(function(t){t.active(t.settings.data===n)})}var r,a,o={};r=e("OL",t.getParam("advlist_number_styles","default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman")),a=e("UL",t.getParam("advlist_bullet_styles","default,circle,disc,square")),t.addButton("numlist",{type:"splitbutton",tooltip:"Numbered list",menu:r,onshow:i,onselect:function(t){n("OL",t.control.settings.data)},onclick:function(){n("OL",!1)}}),t.addButton("bullist",{type:"splitbutton",tooltip:"Bullet list",menu:a,onshow:i,onselect:function(t){n("UL",t.control.settings.data)},onclick:function(){n("UL",!1)}})}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/anchor/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/anchor/plugin.min.js new file mode 100644 index 0000000000..6a3fd792d8 --- /dev/null +++ b/common/static/js/vendor/tiny_mce/plugins/anchor/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("anchor",function(e){function t(){var t=e.selection.getNode();e.windowManager.open({title:"Anchor",body:{type:"textbox",name:"name",size:40,label:"Name",value:t.name||t.id},onsubmit:function(t){e.execCommand("mceInsertContent",!1,e.dom.createHTML("a",{id:t.data.name}))}})}e.addButton("anchor",{icon:"anchor",tooltip:"Anchor",onclick:t,stateSelector:"a:not([href])"}),e.addMenuItem("anchor",{icon:"anchor",text:"Anchor",context:"insert",onclick:t})}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/autolink/editor_plugin.js b/common/static/js/vendor/tiny_mce/plugins/autolink/editor_plugin.js deleted file mode 100644 index 71d86bbecb..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/autolink/editor_plugin.js +++ /dev/null @@ -1 +0,0 @@ -(function(){tinymce.create("tinymce.plugins.AutolinkPlugin",{init:function(a,b){var c=this;a.onKeyDown.addToTop(function(d,f){if(f.keyCode==13){return c.handleEnter(d)}});if(tinyMCE.isIE){return}a.onKeyPress.add(function(d,f){if(f.which==41){return c.handleEclipse(d)}});a.onKeyUp.add(function(d,f){if(f.keyCode==32){return c.handleSpacebar(d)}})},handleEclipse:function(a){this.parseCurrentLine(a,-1,"(",true)},handleSpacebar:function(a){this.parseCurrentLine(a,0,"",true)},handleEnter:function(a){this.parseCurrentLine(a,-1,"",false)},parseCurrentLine:function(i,d,b,g){var a,f,c,n,k,m,h,e,j;a=i.selection.getRng(true).cloneRange();if(a.startOffset<5){e=a.endContainer.previousSibling;if(e==null){if(a.endContainer.firstChild==null||a.endContainer.firstChild.nextSibling==null){return}e=a.endContainer.firstChild.nextSibling}j=e.length;a.setStart(e,j);a.setEnd(e,j);if(a.endOffset<5){return}f=a.endOffset;n=e}else{n=a.endContainer;if(n.nodeType!=3&&n.firstChild){while(n.nodeType!=3&&n.firstChild){n=n.firstChild}if(n.nodeType==3){a.setStart(n,0);a.setEnd(n,n.nodeValue.length)}}if(a.endOffset==1){f=2}else{f=a.endOffset-1-d}}c=f;do{a.setStart(n,f>=2?f-2:0);a.setEnd(n,f>=1?f-1:0);f-=1}while(a.toString()!=" "&&a.toString()!=""&&a.toString().charCodeAt(0)!=160&&(f-2)>=0&&a.toString()!=b);if(a.toString()==b||a.toString().charCodeAt(0)==160){a.setStart(n,f);a.setEnd(n,c);f+=1}else{if(a.startOffset==0){a.setStart(n,0);a.setEnd(n,c)}else{a.setStart(n,f);a.setEnd(n,c)}}var m=a.toString();if(m.charAt(m.length-1)=="."){a.setEnd(n,c-1)}m=a.toString();h=m.match(/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.|(?:mailto:)?[A-Z0-9._%+-]+@)(.+)$/i);if(h){if(h[1]=="www."){h[1]="http://www."}else{if(/@$/.test(h[1])&&!/^mailto:/.test(h[1])){h[1]="mailto:"+h[1]}}k=i.selection.getBookmark();i.selection.setRng(a);tinyMCE.execCommand("createlink",false,h[1]+h[2]);i.selection.moveToBookmark(k);i.nodeChanged();if(tinyMCE.isWebKit){i.selection.collapse(false);var l=Math.min(n.length,c+1);a.setStart(n,l);a.setEnd(n,l);i.selection.setRng(a)}}},getInfo:function(){return{longname:"Autolink",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autolink",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("autolink",tinymce.plugins.AutolinkPlugin)})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/autolink/editor_plugin_src.js b/common/static/js/vendor/tiny_mce/plugins/autolink/editor_plugin_src.js deleted file mode 100644 index 5b61f7a20b..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/autolink/editor_plugin_src.js +++ /dev/null @@ -1,184 +0,0 @@ -/** - * editor_plugin_src.js - * - * Copyright 2011, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -(function() { - tinymce.create('tinymce.plugins.AutolinkPlugin', { - /** - * Initializes the plugin, this will be executed after the plugin has been created. - * This call is done before the editor instance has finished it's initialization so use the onInit event - * of the editor instance to intercept that event. - * - * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in. - * @param {string} url Absolute URL to where the plugin is located. - */ - - init : function(ed, url) { - var t = this; - - // Add a key down handler - ed.onKeyDown.addToTop(function(ed, e) { - if (e.keyCode == 13) - return t.handleEnter(ed); - }); - - // Internet Explorer has built-in automatic linking for most cases - if (tinyMCE.isIE) - return; - - ed.onKeyPress.add(function(ed, e) { - if (e.which == 41) - return t.handleEclipse(ed); - }); - - // Add a key up handler - ed.onKeyUp.add(function(ed, e) { - if (e.keyCode == 32) - return t.handleSpacebar(ed); - }); - }, - - handleEclipse : function(ed) { - this.parseCurrentLine(ed, -1, '(', true); - }, - - handleSpacebar : function(ed) { - this.parseCurrentLine(ed, 0, '', true); - }, - - handleEnter : function(ed) { - this.parseCurrentLine(ed, -1, '', false); - }, - - parseCurrentLine : function(ed, end_offset, delimiter, goback) { - var r, end, start, endContainer, bookmark, text, matches, prev, len; - - // We need at least five characters to form a URL, - // hence, at minimum, five characters from the beginning of the line. - r = ed.selection.getRng(true).cloneRange(); - if (r.startOffset < 5) { - // During testing, the caret is placed inbetween two text nodes. - // The previous text node contains the URL. - prev = r.endContainer.previousSibling; - if (prev == null) { - if (r.endContainer.firstChild == null || r.endContainer.firstChild.nextSibling == null) - return; - - prev = r.endContainer.firstChild.nextSibling; - } - len = prev.length; - r.setStart(prev, len); - r.setEnd(prev, len); - - if (r.endOffset < 5) - return; - - end = r.endOffset; - endContainer = prev; - } else { - endContainer = r.endContainer; - - // Get a text node - if (endContainer.nodeType != 3 && endContainer.firstChild) { - while (endContainer.nodeType != 3 && endContainer.firstChild) - endContainer = endContainer.firstChild; - - // Move range to text node - if (endContainer.nodeType == 3) { - r.setStart(endContainer, 0); - r.setEnd(endContainer, endContainer.nodeValue.length); - } - } - - if (r.endOffset == 1) - end = 2; - else - end = r.endOffset - 1 - end_offset; - } - - start = end; - - do - { - // Move the selection one character backwards. - r.setStart(endContainer, end >= 2 ? end - 2 : 0); - r.setEnd(endContainer, end >= 1 ? end - 1 : 0); - end -= 1; - - // Loop until one of the following is found: a blank space,  , delimeter, (end-2) >= 0 - } while (r.toString() != ' ' && r.toString() != '' && r.toString().charCodeAt(0) != 160 && (end -2) >= 0 && r.toString() != delimiter); - - if (r.toString() == delimiter || r.toString().charCodeAt(0) == 160) { - r.setStart(endContainer, end); - r.setEnd(endContainer, start); - end += 1; - } else if (r.startOffset == 0) { - r.setStart(endContainer, 0); - r.setEnd(endContainer, start); - } - else { - r.setStart(endContainer, end); - r.setEnd(endContainer, start); - } - - // Exclude last . from word like "www.site.com." - var text = r.toString(); - if (text.charAt(text.length - 1) == '.') { - r.setEnd(endContainer, start - 1); - } - - text = r.toString(); - matches = text.match(/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.|(?:mailto:)?[A-Z0-9._%+-]+@)(.+)$/i); - - if (matches) { - if (matches[1] == 'www.') { - matches[1] = 'http://www.'; - } else if (/@$/.test(matches[1]) && !/^mailto:/.test(matches[1])) { - matches[1] = 'mailto:' + matches[1]; - } - - bookmark = ed.selection.getBookmark(); - - ed.selection.setRng(r); - tinyMCE.execCommand('createlink',false, matches[1] + matches[2]); - ed.selection.moveToBookmark(bookmark); - ed.nodeChanged(); - - // TODO: Determine if this is still needed. - if (tinyMCE.isWebKit) { - // move the caret to its original position - ed.selection.collapse(false); - var max = Math.min(endContainer.length, start + 1); - r.setStart(endContainer, max); - r.setEnd(endContainer, max); - ed.selection.setRng(r); - } - } - }, - - /** - * Returns information about the plugin as a name/value array. - * The current keys are longname, author, authorurl, infourl and version. - * - * @return {Object} Name/value array containing information about the plugin. - */ - getInfo : function() { - return { - longname : 'Autolink', - author : 'Moxiecode Systems AB', - authorurl : 'http://tinymce.moxiecode.com', - infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autolink', - version : tinymce.majorVersion + "." + tinymce.minorVersion - }; - } - }); - - // Register plugin - tinymce.PluginManager.add('autolink', tinymce.plugins.AutolinkPlugin); -})(); diff --git a/common/static/js/vendor/tiny_mce/plugins/autolink/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/autolink/plugin.min.js new file mode 100644 index 0000000000..332cababb5 --- /dev/null +++ b/common/static/js/vendor/tiny_mce/plugins/autolink/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("autolink",function(t){function e(t){o(t,-1,"(",!0)}function n(t){o(t,0,"",!0)}function i(t){o(t,-1,"",!1)}function o(t,e,n){var i,o,r,s,d,a,f,l,c;if(i=t.selection.getRng(!0).cloneRange(),i.startOffset<5){if(l=i.endContainer.previousSibling,!l){if(!i.endContainer.firstChild||!i.endContainer.firstChild.nextSibling)return;l=i.endContainer.firstChild.nextSibling}if(c=l.length,i.setStart(l,c),i.setEnd(l,c),i.endOffset<5)return;o=i.endOffset,s=l}else{if(s=i.endContainer,3!=s.nodeType&&s.firstChild){for(;3!=s.nodeType&&s.firstChild;)s=s.firstChild;3==s.nodeType&&(i.setStart(s,0),i.setEnd(s,s.nodeValue.length))}o=1==i.endOffset?2:i.endOffset-1-e}r=o;do i.setStart(s,o>=2?o-2:0),i.setEnd(s,o>=1?o-1:0),o-=1;while(" "!=i.toString()&&""!==i.toString()&&160!=i.toString().charCodeAt(0)&&o-2>=0&&i.toString()!=n);if(i.toString()==n||160==i.toString().charCodeAt(0)?(i.setStart(s,o),i.setEnd(s,r),o+=1):0===i.startOffset?(i.setStart(s,0),i.setEnd(s,r)):(i.setStart(s,o),i.setEnd(s,r)),a=i.toString(),"."==a.charAt(a.length-1)&&i.setEnd(s,r-1),a=i.toString(),f=a.match(/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.|(?:mailto:)?[A-Z0-9._%+\-]+@)(.+)$/i),f&&("www."==f[1]?f[1]="http://www.":/@$/.test(f[1])&&!/^mailto:/.test(f[1])&&(f[1]="mailto:"+f[1]),d=t.selection.getBookmark(),t.selection.setRng(i),t.execCommand("createlink",!1,f[1]+f[2]),t.selection.moveToBookmark(d),t.nodeChanged(),tinymce.Env.webkit)){t.selection.collapse(!1);var g=Math.min(s.length,r+1);i.setStart(s,g),i.setEnd(s,g),t.selection.setRng(i)}}return t.on("keydown",function(e){return 13==e.keyCode?i(t):void 0}),tinymce.Env.ie?void t.on("init",function(){try{t.execCommand("AutoUrlDetect",!1,!0)}catch(e){}}):(t.on("keypress",function(n){return 41==n.which?e(t):void 0}),void t.on("keyup",function(e){return 32==e.keyCode?n(t):void 0}))}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/autoresize/editor_plugin.js b/common/static/js/vendor/tiny_mce/plugins/autoresize/editor_plugin.js deleted file mode 100644 index 46d9dc3dd4..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/autoresize/editor_plugin.js +++ /dev/null @@ -1 +0,0 @@ -(function(){tinymce.create("tinymce.plugins.AutoResizePlugin",{init:function(a,c){var d=this,e=0;if(a.getParam("fullscreen_is_enabled")){return}function b(){var j,i=a.getDoc(),f=i.body,l=i.documentElement,h=tinymce.DOM,k=d.autoresize_min_height,g;g=tinymce.isIE?f.scrollHeight:(tinymce.isWebKit&&f.clientHeight==0?0:f.offsetHeight);if(g>d.autoresize_min_height){k=g}if(d.autoresize_max_height&&g>d.autoresize_max_height){k=d.autoresize_max_height;f.style.overflowY="auto";l.style.overflowY="auto"}else{f.style.overflowY="hidden";l.style.overflowY="hidden";f.scrollTop=0}if(k!==e){j=k-e;h.setStyle(h.get(a.id+"_ifr"),"height",k+"px");e=k;if(tinymce.isWebKit&&j<0){b()}}}d.editor=a;d.autoresize_min_height=parseInt(a.getParam("autoresize_min_height",a.getElement().offsetHeight));d.autoresize_max_height=parseInt(a.getParam("autoresize_max_height",0));a.onInit.add(function(f){f.dom.setStyle(f.getBody(),"paddingBottom",f.getParam("autoresize_bottom_margin",50)+"px")});a.onChange.add(b);a.onSetContent.add(b);a.onPaste.add(b);a.onKeyUp.add(b);a.onPostRender.add(b);if(a.getParam("autoresize_on_init",true)){a.onLoad.add(b);a.onLoadContent.add(b)}a.addCommand("mceAutoResize",b)},getInfo:function(){return{longname:"Auto Resize",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autoresize",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("autoresize",tinymce.plugins.AutoResizePlugin)})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/autoresize/editor_plugin_src.js b/common/static/js/vendor/tiny_mce/plugins/autoresize/editor_plugin_src.js deleted file mode 100644 index 7673bcff86..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/autoresize/editor_plugin_src.js +++ /dev/null @@ -1,119 +0,0 @@ -/** - * editor_plugin_src.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -(function() { - /** - * Auto Resize - * - * This plugin automatically resizes the content area to fit its content height. - * It will retain a minimum height, which is the height of the content area when - * it's initialized. - */ - tinymce.create('tinymce.plugins.AutoResizePlugin', { - /** - * Initializes the plugin, this will be executed after the plugin has been created. - * This call is done before the editor instance has finished it's initialization so use the onInit event - * of the editor instance to intercept that event. - * - * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in. - * @param {string} url Absolute URL to where the plugin is located. - */ - init : function(ed, url) { - var t = this, oldSize = 0; - - if (ed.getParam('fullscreen_is_enabled')) - return; - - /** - * This method gets executed each time the editor needs to resize. - */ - function resize() { - var deltaSize, d = ed.getDoc(), body = d.body, de = d.documentElement, DOM = tinymce.DOM, resizeHeight = t.autoresize_min_height, myHeight; - - // Get height differently depending on the browser used - myHeight = tinymce.isIE ? body.scrollHeight : (tinymce.isWebKit && body.clientHeight == 0 ? 0 : body.offsetHeight); - - // Don't make it smaller than the minimum height - if (myHeight > t.autoresize_min_height) - resizeHeight = myHeight; - - // If a maximum height has been defined don't exceed this height - if (t.autoresize_max_height && myHeight > t.autoresize_max_height) { - resizeHeight = t.autoresize_max_height; - body.style.overflowY = "auto"; - de.style.overflowY = "auto"; // Old IE - } else { - body.style.overflowY = "hidden"; - de.style.overflowY = "hidden"; // Old IE - body.scrollTop = 0; - } - - // Resize content element - if (resizeHeight !== oldSize) { - deltaSize = resizeHeight - oldSize; - DOM.setStyle(DOM.get(ed.id + '_ifr'), 'height', resizeHeight + 'px'); - oldSize = resizeHeight; - - // WebKit doesn't decrease the size of the body element until the iframe gets resized - // So we need to continue to resize the iframe down until the size gets fixed - if (tinymce.isWebKit && deltaSize < 0) - resize(); - } - }; - - t.editor = ed; - - // Define minimum height - t.autoresize_min_height = parseInt(ed.getParam('autoresize_min_height', ed.getElement().offsetHeight)); - - // Define maximum height - t.autoresize_max_height = parseInt(ed.getParam('autoresize_max_height', 0)); - - // Add padding at the bottom for better UX - ed.onInit.add(function(ed){ - ed.dom.setStyle(ed.getBody(), 'paddingBottom', ed.getParam('autoresize_bottom_margin', 50) + 'px'); - }); - - // Add appropriate listeners for resizing content area - ed.onChange.add(resize); - ed.onSetContent.add(resize); - ed.onPaste.add(resize); - ed.onKeyUp.add(resize); - ed.onPostRender.add(resize); - - if (ed.getParam('autoresize_on_init', true)) { - ed.onLoad.add(resize); - ed.onLoadContent.add(resize); - } - - // Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('mceExample'); - ed.addCommand('mceAutoResize', resize); - }, - - /** - * Returns information about the plugin as a name/value array. - * The current keys are longname, author, authorurl, infourl and version. - * - * @return {Object} Name/value array containing information about the plugin. - */ - getInfo : function() { - return { - longname : 'Auto Resize', - author : 'Moxiecode Systems AB', - authorurl : 'http://tinymce.moxiecode.com', - infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autoresize', - version : tinymce.majorVersion + "." + tinymce.minorVersion - }; - } - }); - - // Register plugin - tinymce.PluginManager.add('autoresize', tinymce.plugins.AutoResizePlugin); -})(); diff --git a/common/static/js/vendor/tiny_mce/plugins/autoresize/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/autoresize/plugin.min.js new file mode 100644 index 0000000000..4713ec26fd --- /dev/null +++ b/common/static/js/vendor/tiny_mce/plugins/autoresize/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("autoresize",function(e){function t(i){var a,s,g,r,m=e.getDoc(),u=m.body,l=m.documentElement,h=tinymce.DOM,_=n.autoresize_min_height;!u||!i||"setcontent"===i.type&&i.initial||e.plugins.fullscreen&&e.plugins.fullscreen.isFullscreen()||(g=e.dom.getStyle(u,"margin-top",!0),r=e.dom.getStyle(u,"margin-bottom",!0),s=u.offsetHeight+parseInt(g,10)+parseInt(r,10),(isNaN(s)||0>=s)&&(s=tinymce.Env.ie?u.scrollHeight:tinymce.Env.webkit&&0===u.clientHeight?0:u.offsetHeight),s>n.autoresize_min_height&&(_=s),n.autoresize_max_height&&s>n.autoresize_max_height?(_=n.autoresize_max_height,u.style.overflowY="auto",l.style.overflowY="auto"):(u.style.overflowY="hidden",l.style.overflowY="hidden",u.scrollTop=0),_!==o&&(a=_-o,h.setStyle(h.get(e.id+"_ifr"),"height",_+"px"),o=_,tinymce.isWebKit&&0>a&&t(i)))}function i(e,n,o){setTimeout(function(){t({}),e--?i(e,n,o):o&&o()},n)}var n=e.settings,o=0;e.settings.inline||(n.autoresize_min_height=parseInt(e.getParam("autoresize_min_height",e.getElement().offsetHeight),10),n.autoresize_max_height=parseInt(e.getParam("autoresize_max_height",0),10),e.on("init",function(){var t=e.getParam("autoresize_overflow_padding",1);e.dom.setStyles(e.getBody(),{paddingBottom:e.getParam("autoresize_bottom_margin",50),paddingLeft:t,paddingRight:t})}),e.on("change setcontent paste keyup",t),e.getParam("autoresize_on_init",!0)&&e.on("init",function(){i(20,100,function(){i(5,1e3)})}),e.addCommand("mceAutoResize",t))}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/autosave/editor_plugin.js b/common/static/js/vendor/tiny_mce/plugins/autosave/editor_plugin.js deleted file mode 100644 index 6da98ff33a..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/autosave/editor_plugin.js +++ /dev/null @@ -1 +0,0 @@ -(function(e){var c="autosave",g="restoredraft",b=true,f,d,a=e.util.Dispatcher;e.create("tinymce.plugins.AutoSave",{init:function(i,j){var h=this,l=i.settings;h.editor=i;function k(n){var m={s:1000,m:60000};n=/^(\d+)([ms]?)$/.exec(""+n);return(n[2]?m[n[2]]:1)*parseInt(n)}e.each({ask_before_unload:b,interval:"30s",retention:"20m",minlength:50},function(n,m){m=c+"_"+m;if(l[m]===f){l[m]=n}});l.autosave_interval=k(l.autosave_interval);l.autosave_retention=k(l.autosave_retention);i.addButton(g,{title:c+".restore_content",onclick:function(){if(i.getContent({draft:true}).replace(/\s| |<\/?p[^>]*>|]*>/gi,"").length>0){i.windowManager.confirm(c+".warning_message",function(m){if(m){h.restoreDraft()}})}else{h.restoreDraft()}}});i.onNodeChange.add(function(){var m=i.controlManager;if(m.get(g)){m.setDisabled(g,!h.hasDraft())}});i.onInit.add(function(){if(i.controlManager.get(g)){h.setupStorage(i);setInterval(function(){if(!i.removed){h.storeDraft();i.nodeChanged()}},l.autosave_interval)}});h.onStoreDraft=new a(h);h.onRestoreDraft=new a(h);h.onRemoveDraft=new a(h);if(!d){window.onbeforeunload=e.plugins.AutoSave._beforeUnloadHandler;d=b}},getInfo:function(){return{longname:"Auto save",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autosave",version:e.majorVersion+"."+e.minorVersion}},getExpDate:function(){return new Date(new Date().getTime()+this.editor.settings.autosave_retention).toUTCString()},setupStorage:function(i){var h=this,k=c+"_test",j="OK";h.key=c+i.id;e.each([function(){if(localStorage){localStorage.setItem(k,j);if(localStorage.getItem(k)===j){localStorage.removeItem(k);return localStorage}}},function(){if(sessionStorage){sessionStorage.setItem(k,j);if(sessionStorage.getItem(k)===j){sessionStorage.removeItem(k);return sessionStorage}}},function(){if(e.isIE){i.getElement().style.behavior="url('#default#userData')";return{autoExpires:b,setItem:function(l,n){var m=i.getElement();m.setAttribute(l,n);m.expires=h.getExpDate();try{m.save("TinyMCE")}catch(o){}},getItem:function(l){var m=i.getElement();try{m.load("TinyMCE");return m.getAttribute(l)}catch(n){return null}},removeItem:function(l){i.getElement().removeAttribute(l)}}}},],function(l){try{h.storage=l();if(h.storage){return false}}catch(m){}})},storeDraft:function(){var i=this,l=i.storage,j=i.editor,h,k;if(l){if(!l.getItem(i.key)&&!j.isDirty()){return}k=j.getContent({draft:true});if(k.length>j.settings.autosave_minlength){h=i.getExpDate();if(!i.storage.autoExpires){i.storage.setItem(i.key+"_expires",h)}i.storage.setItem(i.key,k);i.onStoreDraft.dispatch(i,{expires:h,content:k})}}},restoreDraft:function(){var h=this,j=h.storage,i;if(j){i=j.getItem(h.key);if(i){h.editor.setContent(i);h.onRestoreDraft.dispatch(h,{content:i})}}},hasDraft:function(){var h=this,k=h.storage,i,j;if(k){j=!!k.getItem(h.key);if(j){if(!h.storage.autoExpires){i=new Date(k.getItem(h.key+"_expires"));if(new Date().getTime()]*>|]*>/gi, "").length > 0) { - // Show confirm dialog if the editor isn't empty - ed.windowManager.confirm( - PLUGIN_NAME + ".warning_message", - function(ok) { - if (ok) - self.restoreDraft(); - } - ); - } else - self.restoreDraft(); - } - }); - - // Enable/disable restoredraft button depending on if there is a draft stored or not - ed.onNodeChange.add(function() { - var controlManager = ed.controlManager; - - if (controlManager.get(RESTORE_DRAFT)) - controlManager.setDisabled(RESTORE_DRAFT, !self.hasDraft()); - }); - - ed.onInit.add(function() { - // Check if the user added the restore button, then setup auto storage logic - if (ed.controlManager.get(RESTORE_DRAFT)) { - // Setup storage engine - self.setupStorage(ed); - - // Auto save contents each interval time - setInterval(function() { - if (!ed.removed) { - self.storeDraft(); - ed.nodeChanged(); - } - }, settings.autosave_interval); - } - }); - - /** - * This event gets fired when a draft is stored to local storage. - * - * @event onStoreDraft - * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event. - * @param {Object} draft Draft object containing the HTML contents of the editor. - */ - self.onStoreDraft = new Dispatcher(self); - - /** - * This event gets fired when a draft is restored from local storage. - * - * @event onStoreDraft - * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event. - * @param {Object} draft Draft object containing the HTML contents of the editor. - */ - self.onRestoreDraft = new Dispatcher(self); - - /** - * This event gets fired when a draft removed/expired. - * - * @event onRemoveDraft - * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event. - * @param {Object} draft Draft object containing the HTML contents of the editor. - */ - self.onRemoveDraft = new Dispatcher(self); - - // Add ask before unload dialog only add one unload handler - if (!unloadHandlerAdded) { - window.onbeforeunload = tinymce.plugins.AutoSave._beforeUnloadHandler; - unloadHandlerAdded = TRUE; - } - }, - - /** - * Returns information about the plugin as a name/value array. - * The current keys are longname, author, authorurl, infourl and version. - * - * @method getInfo - * @return {Object} Name/value array containing information about the plugin. - */ - getInfo : function() { - return { - longname : 'Auto save', - author : 'Moxiecode Systems AB', - authorurl : 'http://tinymce.moxiecode.com', - infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autosave', - version : tinymce.majorVersion + "." + tinymce.minorVersion - }; - }, - - /** - * Returns an expiration date UTC string. - * - * @method getExpDate - * @return {String} Expiration date UTC string. - */ - getExpDate : function() { - return new Date( - new Date().getTime() + this.editor.settings.autosave_retention - ).toUTCString(); - }, - - /** - * This method will setup the storage engine. If the browser has support for it. - * - * @method setupStorage - */ - setupStorage : function(ed) { - var self = this, testKey = PLUGIN_NAME + '_test', testVal = "OK"; - - self.key = PLUGIN_NAME + ed.id; - - // Loop though each storage engine type until we find one that works - tinymce.each([ - function() { - // Try HTML5 Local Storage - if (localStorage) { - localStorage.setItem(testKey, testVal); - - if (localStorage.getItem(testKey) === testVal) { - localStorage.removeItem(testKey); - - return localStorage; - } - } - }, - - function() { - // Try HTML5 Session Storage - if (sessionStorage) { - sessionStorage.setItem(testKey, testVal); - - if (sessionStorage.getItem(testKey) === testVal) { - sessionStorage.removeItem(testKey); - - return sessionStorage; - } - } - }, - - function() { - // Try IE userData - if (tinymce.isIE) { - ed.getElement().style.behavior = "url('#default#userData')"; - - // Fake localStorage on old IE - return { - autoExpires : TRUE, - - setItem : function(key, value) { - var userDataElement = ed.getElement(); - - userDataElement.setAttribute(key, value); - userDataElement.expires = self.getExpDate(); - - try { - userDataElement.save("TinyMCE"); - } catch (e) { - // Ignore, saving might fail if "Userdata Persistence" is disabled in IE - } - }, - - getItem : function(key) { - var userDataElement = ed.getElement(); - - try { - userDataElement.load("TinyMCE"); - return userDataElement.getAttribute(key); - } catch (e) { - // Ignore, loading might fail if "Userdata Persistence" is disabled in IE - return null; - } - }, - - removeItem : function(key) { - ed.getElement().removeAttribute(key); - } - }; - } - }, - ], function(setup) { - // Try executing each function to find a suitable storage engine - try { - self.storage = setup(); - - if (self.storage) - return false; - } catch (e) { - // Ignore - } - }); - }, - - /** - * This method will store the current contents in the the storage engine. - * - * @method storeDraft - */ - storeDraft : function() { - var self = this, storage = self.storage, editor = self.editor, expires, content; - - // Is the contents dirty - if (storage) { - // If there is no existing key and the contents hasn't been changed since - // it's original value then there is no point in saving a draft - if (!storage.getItem(self.key) && !editor.isDirty()) - return; - - // Store contents if the contents if longer than the minlength of characters - content = editor.getContent({draft: true}); - if (content.length > editor.settings.autosave_minlength) { - expires = self.getExpDate(); - - // Store expiration date if needed IE userData has auto expire built in - if (!self.storage.autoExpires) - self.storage.setItem(self.key + "_expires", expires); - - self.storage.setItem(self.key, content); - self.onStoreDraft.dispatch(self, { - expires : expires, - content : content - }); - } - } - }, - - /** - * This method will restore the contents from the storage engine back to the editor. - * - * @method restoreDraft - */ - restoreDraft : function() { - var self = this, storage = self.storage, content; - - if (storage) { - content = storage.getItem(self.key); - - if (content) { - self.editor.setContent(content); - self.onRestoreDraft.dispatch(self, { - content : content - }); - } - } - }, - - /** - * This method will return true/false if there is a local storage draft available. - * - * @method hasDraft - * @return {boolean} true/false state if there is a local draft. - */ - hasDraft : function() { - var self = this, storage = self.storage, expDate, exists; - - if (storage) { - // Does the item exist at all - exists = !!storage.getItem(self.key); - if (exists) { - // Storage needs autoexpire - if (!self.storage.autoExpires) { - expDate = new Date(storage.getItem(self.key + "_expires")); - - // Contents hasn't expired - if (new Date().getTime() < expDate.getTime()) - return TRUE; - - // Remove it if it has - self.removeDraft(); - } else - return TRUE; - } - } - - return false; - }, - - /** - * Removes the currently stored draft. - * - * @method removeDraft - */ - removeDraft : function() { - var self = this, storage = self.storage, key = self.key, content; - - if (storage) { - // Get current contents and remove the existing draft - content = storage.getItem(key); - storage.removeItem(key); - storage.removeItem(key + "_expires"); - - // Dispatch remove event if we had any contents - if (content) { - self.onRemoveDraft.dispatch(self, { - content : content - }); - } - } - }, - - "static" : { - // Internal unload handler will be called before the page is unloaded - _beforeUnloadHandler : function(e) { - var msg; - - tinymce.each(tinyMCE.editors, function(ed) { - // Store a draft for each editor instance - if (ed.plugins.autosave) - ed.plugins.autosave.storeDraft(); - - // Never ask in fullscreen mode - if (ed.getParam("fullscreen_is_enabled")) - return; - - // Setup a return message if the editor is dirty - if (!msg && ed.isDirty() && ed.getParam("autosave_ask_before_unload")) - msg = ed.getLang("autosave.unload_msg"); - }); - - return msg; - } - } - }); - - tinymce.PluginManager.add('autosave', tinymce.plugins.AutoSave); -})(tinymce); diff --git a/common/static/js/vendor/tiny_mce/plugins/autosave/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/autosave/plugin.min.js new file mode 100644 index 0000000000..bb41975102 --- /dev/null +++ b/common/static/js/vendor/tiny_mce/plugins/autosave/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("autosave",function(e){function t(e,t){var n={s:1e3,m:6e4};return e=/^(\d+)([ms]?)$/.exec(""+(e||t)),(e[2]?n[e[2]]:1)*parseInt(e,10)}function n(){var e=parseInt(l.getItem(d+"time"),10)||0;return(new Date).getTime()-e>v.autosave_retention?(a(!1),!1):!0}function a(t){l.removeItem(d+"draft"),l.removeItem(d+"time"),t!==!1&&e.fire("RemoveDraft")}function r(){!c()&&e.isDirty()&&(l.setItem(d+"draft",e.getContent({format:"raw",no_events:!0})),l.setItem(d+"time",(new Date).getTime()),e.fire("StoreDraft"))}function o(){n()&&(e.setContent(l.getItem(d+"draft"),{format:"raw"}),e.fire("RestoreDraft"))}function i(){m||(setInterval(function(){e.removed||r()},v.autosave_interval),m=!0)}function s(){var t=this;t.disabled(!n()),e.on("StoreDraft RestoreDraft RemoveDraft",function(){t.disabled(!n())}),i()}function u(){e.undoManager.beforeChange(),o(),a(),e.undoManager.add()}function f(){var e;return tinymce.each(tinymce.editors,function(t){t.plugins.autosave&&t.plugins.autosave.storeDraft(),!e&&t.isDirty()&&t.getParam("autosave_ask_before_unload",!0)&&(e=t.translate("You have unsaved changes are you sure you want to navigate away?"))}),e}function c(t){var n=e.settings.forced_root_block;return t=tinymce.trim("undefined"==typeof t?e.getBody().innerHTML:t),""===t||new RegExp("^<"+n+"[^>]*>(( | |[ ]|]*>)+?|)|
$","i").test(t)}var d,m,v=e.settings,l=tinymce.util.LocalStorage;d=v.autosave_prefix||"tinymce-autosave-{path}{query}-{id}-",d=d.replace(/\{path\}/g,document.location.pathname),d=d.replace(/\{query\}/g,document.location.search),d=d.replace(/\{id\}/g,e.id),v.autosave_interval=t(v.autosave_interval,"30s"),v.autosave_retention=t(v.autosave_retention,"20m"),e.addButton("restoredraft",{title:"Restore last draft",onclick:u,onPostRender:s}),e.addMenuItem("restoredraft",{text:"Restore last draft",onclick:u,onPostRender:s,context:"file"}),e.settings.autosave_restore_when_empty!==!1&&(e.on("init",function(){n()&&c()&&o()}),e.on("saveContent",function(){a()})),window.onbeforeunload=f,this.hasDraft=n,this.storeDraft=r,this.restoreDraft=o,this.removeDraft=a,this.isEmpty=c}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/bbcode/editor_plugin.js b/common/static/js/vendor/tiny_mce/plugins/bbcode/editor_plugin.js deleted file mode 100644 index 8f8821fd64..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/bbcode/editor_plugin.js +++ /dev/null @@ -1 +0,0 @@ -(function(){tinymce.create("tinymce.plugins.BBCodePlugin",{init:function(a,b){var d=this,c=a.getParam("bbcode_dialect","punbb").toLowerCase();a.onBeforeSetContent.add(function(e,f){f.content=d["_"+c+"_bbcode2html"](f.content)});a.onPostProcess.add(function(e,f){if(f.set){f.content=d["_"+c+"_bbcode2html"](f.content)}if(f.get){f.content=d["_"+c+"_html2bbcode"](f.content)}})},getInfo:function(){return{longname:"BBCode Plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/bbcode",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_punbb_html2bbcode:function(a){a=tinymce.trim(a);function b(c,d){a=a.replace(c,d)}b(/(.*?)<\/a>/gi,"[url=$1]$2[/url]");b(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");b(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");b(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");b(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");b(/(.*?)<\/span>/gi,"[color=$1]$2[/color]");b(/(.*?)<\/font>/gi,"[color=$1]$2[/color]");b(/(.*?)<\/span>/gi,"[size=$1]$2[/size]");b(/(.*?)<\/font>/gi,"$1");b(//gi,"[img]$1[/img]");b(/(.*?)<\/span>/gi,"[code]$1[/code]");b(/(.*?)<\/span>/gi,"[quote]$1[/quote]");b(/(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]");b(/(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]");b(/(.*?)<\/em>/gi,"[code][i]$1[/i][/code]");b(/(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]");b(/(.*?)<\/u>/gi,"[code][u]$1[/u][/code]");b(/(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]");b(/<\/(strong|b)>/gi,"[/b]");b(/<(strong|b)>/gi,"[b]");b(/<\/(em|i)>/gi,"[/i]");b(/<(em|i)>/gi,"[i]");b(/<\/u>/gi,"[/u]");b(/(.*?)<\/span>/gi,"[u]$1[/u]");b(//gi,"[u]");b(/]*>/gi,"[quote]");b(/<\/blockquote>/gi,"[/quote]");b(/
/gi,"\n");b(//gi,"\n");b(/
/gi,"\n");b(/

/gi,"");b(/<\/p>/gi,"\n");b(/ |\u00a0/gi," ");b(/"/gi,'"');b(/</gi,"<");b(/>/gi,">");b(/&/gi,"&");return a},_punbb_bbcode2html:function(a){a=tinymce.trim(a);function b(c,d){a=a.replace(c,d)}b(/\n/gi,"
");b(/\[b\]/gi,"");b(/\[\/b\]/gi,"");b(/\[i\]/gi,"");b(/\[\/i\]/gi,"");b(/\[u\]/gi,"");b(/\[\/u\]/gi,"");b(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,'$2');b(/\[url\](.*?)\[\/url\]/gi,'$1');b(/\[img\](.*?)\[\/img\]/gi,'');b(/\[color=(.*?)\](.*?)\[\/color\]/gi,'$2');b(/\[code\](.*?)\[\/code\]/gi,'$1 ');b(/\[quote.*?\](.*?)\[\/quote\]/gi,'$1 ');return a}});tinymce.PluginManager.add("bbcode",tinymce.plugins.BBCodePlugin)})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/bbcode/editor_plugin_src.js b/common/static/js/vendor/tiny_mce/plugins/bbcode/editor_plugin_src.js deleted file mode 100644 index 12cdacaa58..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/bbcode/editor_plugin_src.js +++ /dev/null @@ -1,120 +0,0 @@ -/** - * editor_plugin_src.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -(function() { - tinymce.create('tinymce.plugins.BBCodePlugin', { - init : function(ed, url) { - var t = this, dialect = ed.getParam('bbcode_dialect', 'punbb').toLowerCase(); - - ed.onBeforeSetContent.add(function(ed, o) { - o.content = t['_' + dialect + '_bbcode2html'](o.content); - }); - - ed.onPostProcess.add(function(ed, o) { - if (o.set) - o.content = t['_' + dialect + '_bbcode2html'](o.content); - - if (o.get) - o.content = t['_' + dialect + '_html2bbcode'](o.content); - }); - }, - - getInfo : function() { - return { - longname : 'BBCode Plugin', - author : 'Moxiecode Systems AB', - authorurl : 'http://tinymce.moxiecode.com', - infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/bbcode', - version : tinymce.majorVersion + "." + tinymce.minorVersion - }; - }, - - // Private methods - - // HTML -> BBCode in PunBB dialect - _punbb_html2bbcode : function(s) { - s = tinymce.trim(s); - - function rep(re, str) { - s = s.replace(re, str); - }; - - // example: to [b] - rep(/(.*?)<\/a>/gi,"[url=$1]$2[/url]"); - rep(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"); - rep(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"); - rep(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"); - rep(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"); - rep(/(.*?)<\/span>/gi,"[color=$1]$2[/color]"); - rep(/(.*?)<\/font>/gi,"[color=$1]$2[/color]"); - rep(/(.*?)<\/span>/gi,"[size=$1]$2[/size]"); - rep(/(.*?)<\/font>/gi,"$1"); - rep(//gi,"[img]$1[/img]"); - rep(/(.*?)<\/span>/gi,"[code]$1[/code]"); - rep(/(.*?)<\/span>/gi,"[quote]$1[/quote]"); - rep(/(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]"); - rep(/(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]"); - rep(/(.*?)<\/em>/gi,"[code][i]$1[/i][/code]"); - rep(/(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]"); - rep(/(.*?)<\/u>/gi,"[code][u]$1[/u][/code]"); - rep(/(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]"); - rep(/<\/(strong|b)>/gi,"[/b]"); - rep(/<(strong|b)>/gi,"[b]"); - rep(/<\/(em|i)>/gi,"[/i]"); - rep(/<(em|i)>/gi,"[i]"); - rep(/<\/u>/gi,"[/u]"); - rep(/(.*?)<\/span>/gi,"[u]$1[/u]"); - rep(//gi,"[u]"); - rep(/]*>/gi,"[quote]"); - rep(/<\/blockquote>/gi,"[/quote]"); - rep(/
/gi,"\n"); - rep(//gi,"\n"); - rep(/
/gi,"\n"); - rep(/

/gi,""); - rep(/<\/p>/gi,"\n"); - rep(/ |\u00a0/gi," "); - rep(/"/gi,"\""); - rep(/</gi,"<"); - rep(/>/gi,">"); - rep(/&/gi,"&"); - - return s; - }, - - // BBCode -> HTML from PunBB dialect - _punbb_bbcode2html : function(s) { - s = tinymce.trim(s); - - function rep(re, str) { - s = s.replace(re, str); - }; - - // example: [b] to - rep(/\n/gi,"
"); - rep(/\[b\]/gi,""); - rep(/\[\/b\]/gi,""); - rep(/\[i\]/gi,""); - rep(/\[\/i\]/gi,""); - rep(/\[u\]/gi,""); - rep(/\[\/u\]/gi,""); - rep(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,"$2"); - rep(/\[url\](.*?)\[\/url\]/gi,"$1"); - rep(/\[img\](.*?)\[\/img\]/gi,""); - rep(/\[color=(.*?)\](.*?)\[\/color\]/gi,"$2"); - rep(/\[code\](.*?)\[\/code\]/gi,"$1 "); - rep(/\[quote.*?\](.*?)\[\/quote\]/gi,"$1 "); - - return s; - } - }); - - // Register plugin - tinymce.PluginManager.add('bbcode', tinymce.plugins.BBCodePlugin); -})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/bbcode/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/bbcode/plugin.min.js new file mode 100644 index 0000000000..70a88a7d69 --- /dev/null +++ b/common/static/js/vendor/tiny_mce/plugins/bbcode/plugin.min.js @@ -0,0 +1 @@ +!function(){tinymce.create("tinymce.plugins.BBCodePlugin",{init:function(e){var t=this,n=e.getParam("bbcode_dialect","punbb").toLowerCase();e.on("beforeSetContent",function(e){e.content=t["_"+n+"_bbcode2html"](e.content)}),e.on("postProcess",function(e){e.set&&(e.content=t["_"+n+"_bbcode2html"](e.content)),e.get&&(e.content=t["_"+n+"_html2bbcode"](e.content))})},getInfo:function(){return{longname:"BBCode Plugin",author:"Moxiecode Systems AB",authorurl:"http://www.tinymce.com",infourl:"http://www.tinymce.com/wiki.php/Plugin:bbcode"}},_punbb_html2bbcode:function(e){function t(t,n){e=e.replace(t,n)}return e=tinymce.trim(e),t(/(.*?)<\/a>/gi,"[url=$1]$2[/url]"),t(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"),t(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"),t(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"),t(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"),t(/(.*?)<\/span>/gi,"[color=$1]$2[/color]"),t(/(.*?)<\/font>/gi,"[color=$1]$2[/color]"),t(/(.*?)<\/span>/gi,"[size=$1]$2[/size]"),t(/(.*?)<\/font>/gi,"$1"),t(//gi,"[img]$1[/img]"),t(/(.*?)<\/span>/gi,"[code]$1[/code]"),t(/(.*?)<\/span>/gi,"[quote]$1[/quote]"),t(/(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]"),t(/(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]"),t(/(.*?)<\/em>/gi,"[code][i]$1[/i][/code]"),t(/(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]"),t(/(.*?)<\/u>/gi,"[code][u]$1[/u][/code]"),t(/(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]"),t(/<\/(strong|b)>/gi,"[/b]"),t(/<(strong|b)>/gi,"[b]"),t(/<\/(em|i)>/gi,"[/i]"),t(/<(em|i)>/gi,"[i]"),t(/<\/u>/gi,"[/u]"),t(/(.*?)<\/span>/gi,"[u]$1[/u]"),t(//gi,"[u]"),t(/]*>/gi,"[quote]"),t(/<\/blockquote>/gi,"[/quote]"),t(/
/gi,"\n"),t(//gi,"\n"),t(/
/gi,"\n"),t(/

/gi,""),t(/<\/p>/gi,"\n"),t(/ |\u00a0/gi," "),t(/"/gi,'"'),t(/</gi,"<"),t(/>/gi,">"),t(/&/gi,"&"),e},_punbb_bbcode2html:function(e){function t(t,n){e=e.replace(t,n)}return e=tinymce.trim(e),t(/\n/gi,"
"),t(/\[b\]/gi,""),t(/\[\/b\]/gi,""),t(/\[i\]/gi,""),t(/\[\/i\]/gi,""),t(/\[u\]/gi,""),t(/\[\/u\]/gi,""),t(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,'$2'),t(/\[url\](.*?)\[\/url\]/gi,'$1'),t(/\[img\](.*?)\[\/img\]/gi,''),t(/\[color=(.*?)\](.*?)\[\/color\]/gi,'$2'),t(/\[code\](.*?)\[\/code\]/gi,'$1 '),t(/\[quote.*?\](.*?)\[\/quote\]/gi,'$1 '),e}}),tinymce.PluginManager.add("bbcode",tinymce.plugins.BBCodePlugin)}(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/charmap/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/charmap/plugin.min.js new file mode 100644 index 0000000000..dff18e6e55 --- /dev/null +++ b/common/static/js/vendor/tiny_mce/plugins/charmap/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("charmap",function(e){function t(){function t(e){for(;e;){if("TD"==e.nodeName)return e;e=e.parentNode}}var i,a,r,o;i='';var s=25;for(r=0;10>r;r++){for(i+="",a=0;s>a;a++){var l=n[r*s+a],c="g"+(r*s+a);i+='"}i+=""}i+="";var u={type:"container",html:i,onclick:function(t){var n=t.target;"DIV"==n.nodeName&&e.execCommand("mceInsertContent",!1,n.firstChild.nodeValue)},onmouseover:function(e){var n=t(e.target);n&&o.find("#preview").text(n.firstChild.firstChild.data)}};o=e.windowManager.open({title:"Special character",spacing:10,padding:10,items:[u,{type:"label",name:"preview",text:" ",style:"font-size: 40px; text-align: center",border:1,minWidth:100,minHeight:80}],buttons:[{text:"Close",onclick:function(){o.close()}}]})}var n=[["160","no-break space"],["38","ampersand"],["34","quotation mark"],["162","cent sign"],["8364","euro sign"],["163","pound sign"],["165","yen sign"],["169","copyright sign"],["174","registered sign"],["8482","trade mark sign"],["8240","per mille sign"],["181","micro sign"],["183","middle dot"],["8226","bullet"],["8230","three dot leader"],["8242","minutes / feet"],["8243","seconds / inches"],["167","section sign"],["182","paragraph sign"],["223","sharp s / ess-zed"],["8249","single left-pointing angle quotation mark"],["8250","single right-pointing angle quotation mark"],["171","left pointing guillemet"],["187","right pointing guillemet"],["8216","left single quotation mark"],["8217","right single quotation mark"],["8220","left double quotation mark"],["8221","right double quotation mark"],["8218","single low-9 quotation mark"],["8222","double low-9 quotation mark"],["60","less-than sign"],["62","greater-than sign"],["8804","less-than or equal to"],["8805","greater-than or equal to"],["8211","en dash"],["8212","em dash"],["175","macron"],["8254","overline"],["164","currency sign"],["166","broken bar"],["168","diaeresis"],["161","inverted exclamation mark"],["191","turned question mark"],["710","circumflex accent"],["732","small tilde"],["176","degree sign"],["8722","minus sign"],["177","plus-minus sign"],["247","division sign"],["8260","fraction slash"],["215","multiplication sign"],["185","superscript one"],["178","superscript two"],["179","superscript three"],["188","fraction one quarter"],["189","fraction one half"],["190","fraction three quarters"],["402","function / florin"],["8747","integral"],["8721","n-ary sumation"],["8734","infinity"],["8730","square root"],["8764","similar to"],["8773","approximately equal to"],["8776","almost equal to"],["8800","not equal to"],["8801","identical to"],["8712","element of"],["8713","not an element of"],["8715","contains as member"],["8719","n-ary product"],["8743","logical and"],["8744","logical or"],["172","not sign"],["8745","intersection"],["8746","union"],["8706","partial differential"],["8704","for all"],["8707","there exists"],["8709","diameter"],["8711","backward difference"],["8727","asterisk operator"],["8733","proportional to"],["8736","angle"],["180","acute accent"],["184","cedilla"],["170","feminine ordinal indicator"],["186","masculine ordinal indicator"],["8224","dagger"],["8225","double dagger"],["192","A - grave"],["193","A - acute"],["194","A - circumflex"],["195","A - tilde"],["196","A - diaeresis"],["197","A - ring above"],["198","ligature AE"],["199","C - cedilla"],["200","E - grave"],["201","E - acute"],["202","E - circumflex"],["203","E - diaeresis"],["204","I - grave"],["205","I - acute"],["206","I - circumflex"],["207","I - diaeresis"],["208","ETH"],["209","N - tilde"],["210","O - grave"],["211","O - acute"],["212","O - circumflex"],["213","O - tilde"],["214","O - diaeresis"],["216","O - slash"],["338","ligature OE"],["352","S - caron"],["217","U - grave"],["218","U - acute"],["219","U - circumflex"],["220","U - diaeresis"],["221","Y - acute"],["376","Y - diaeresis"],["222","THORN"],["224","a - grave"],["225","a - acute"],["226","a - circumflex"],["227","a - tilde"],["228","a - diaeresis"],["229","a - ring above"],["230","ligature ae"],["231","c - cedilla"],["232","e - grave"],["233","e - acute"],["234","e - circumflex"],["235","e - diaeresis"],["236","i - grave"],["237","i - acute"],["238","i - circumflex"],["239","i - diaeresis"],["240","eth"],["241","n - tilde"],["242","o - grave"],["243","o - acute"],["244","o - circumflex"],["245","o - tilde"],["246","o - diaeresis"],["248","o slash"],["339","ligature oe"],["353","s - caron"],["249","u - grave"],["250","u - acute"],["251","u - circumflex"],["252","u - diaeresis"],["253","y - acute"],["254","thorn"],["255","y - diaeresis"],["913","Alpha"],["914","Beta"],["915","Gamma"],["916","Delta"],["917","Epsilon"],["918","Zeta"],["919","Eta"],["920","Theta"],["921","Iota"],["922","Kappa"],["923","Lambda"],["924","Mu"],["925","Nu"],["926","Xi"],["927","Omicron"],["928","Pi"],["929","Rho"],["931","Sigma"],["932","Tau"],["933","Upsilon"],["934","Phi"],["935","Chi"],["936","Psi"],["937","Omega"],["945","alpha"],["946","beta"],["947","gamma"],["948","delta"],["949","epsilon"],["950","zeta"],["951","eta"],["952","theta"],["953","iota"],["954","kappa"],["955","lambda"],["956","mu"],["957","nu"],["958","xi"],["959","omicron"],["960","pi"],["961","rho"],["962","final sigma"],["963","sigma"],["964","tau"],["965","upsilon"],["966","phi"],["967","chi"],["968","psi"],["969","omega"],["8501","alef symbol"],["982","pi symbol"],["8476","real part symbol"],["978","upsilon - hook symbol"],["8472","Weierstrass p"],["8465","imaginary part"],["8592","leftwards arrow"],["8593","upwards arrow"],["8594","rightwards arrow"],["8595","downwards arrow"],["8596","left right arrow"],["8629","carriage return"],["8656","leftwards double arrow"],["8657","upwards double arrow"],["8658","rightwards double arrow"],["8659","downwards double arrow"],["8660","left right double arrow"],["8756","therefore"],["8834","subset of"],["8835","superset of"],["8836","not a subset of"],["8838","subset of or equal to"],["8839","superset of or equal to"],["8853","circled plus"],["8855","circled times"],["8869","perpendicular"],["8901","dot operator"],["8968","left ceiling"],["8969","right ceiling"],["8970","left floor"],["8971","right floor"],["9001","left-pointing angle bracket"],["9002","right-pointing angle bracket"],["9674","lozenge"],["9824","black spade suit"],["9827","black club suit"],["9829","black heart suit"],["9830","black diamond suit"],["8194","en space"],["8195","em space"],["8201","thin space"],["8204","zero width non-joiner"],["8205","zero width joiner"],["8206","left-to-right mark"],["8207","right-to-left mark"],["173","soft hyphen"]];e.addButton("charmap",{icon:"charmap",tooltip:"Special character",onclick:t}),e.addMenuItem("charmap",{icon:"charmap",text:"Special character",onclick:t,context:"insert"})}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/code/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/code/plugin.min.js new file mode 100644 index 0000000000..9e7e89895e --- /dev/null +++ b/common/static/js/vendor/tiny_mce/plugins/code/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("code",function(e){function o(){e.windowManager.open({title:"Source code",body:{type:"textbox",name:"code",multiline:!0,minWidth:e.getParam("code_dialog_width",600),minHeight:e.getParam("code_dialog_height",Math.min(tinymce.DOM.getViewPort().h-200,500)),value:e.getContent({source_view:!0}),spellcheck:!1,style:"direction: ltr; text-align: left"},onSubmit:function(o){e.focus(),e.undoManager.transact(function(){e.setContent(o.data.code)}),e.selection.setCursorLocation(),e.nodeChanged()}})}e.addCommand("mceCodeEditor",o),e.addButton("code",{icon:"code",tooltip:"Source code",onclick:o}),e.addMenuItem("code",{icon:"code",text:"Source code",context:"tools",onclick:o})}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/codemirror/LICENSE.txt b/common/static/js/vendor/tiny_mce/plugins/codemirror/LICENSE.txt new file mode 100644 index 0000000000..0075380be8 --- /dev/null +++ b/common/static/js/vendor/tiny_mce/plugins/codemirror/LICENSE.txt @@ -0,0 +1,193 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + Copyright 2013 Arjan Haverkamp (arjan@avoid.org) + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/common/static/js/vendor/tiny_mce/plugins/codemirror/README.txt b/common/static/js/vendor/tiny_mce/plugins/codemirror/README.txt new file mode 100644 index 0000000000..038dd804d1 --- /dev/null +++ b/common/static/js/vendor/tiny_mce/plugins/codemirror/README.txt @@ -0,0 +1,26 @@ ++=========================+ +| CodeMirror for TinyMCE4 | ++=========================+ + +(c) 2013-2014 Arjan Haverkamp (arjan@avoid.org) +Download: http://www.avoid.org/codemirror-for-tinymce4/ +Version: 1.3 (2014-03-04) +License: see LICENSE.txt + +Changelog +========= +Version 1.3 - 2014-03-04 +- Bugfix: If any text was highlighted in CodeMirror and the code dialog is closed and saved, + the selected text was removed from TinyMCE. +- Macintosh users now see Macintosh keyboard shortcuts. + +Version 1.2 - 2013-09-04 +- Dirty state of CodeMirror now passed on to TinyMCE. +- When submitting CodeMirror code to TinyMCE, cursor position is retained. + Note: this only works when the cursor is *not* inside a . + +Version 1.1 - 2013-07-19 +- New options jsFiles and cssFiles. + +Version 1.0 - 2013-06-29 +- Initial release. diff --git a/common/static/js/vendor/tiny_mce/plugins/codemirror/langs/en.js b/common/static/js/vendor/tiny_mce/plugins/codemirror/langs/en.js new file mode 100644 index 0000000000..d5e0bbde43 --- /dev/null +++ b/common/static/js/vendor/tiny_mce/plugins/codemirror/langs/en.js @@ -0,0 +1,8 @@ +tinymce.addI18n('en',{ + 'HTML source code': 'HTML source code', + 'Start search': 'Start search', + 'Find next': 'Find next', + 'Find previous': 'Find previous', + 'Replace': 'Replace', + 'Replace all': 'Replace all' +}); diff --git a/common/static/js/vendor/tiny_mce/plugins/codemirror/langs/nl.js b/common/static/js/vendor/tiny_mce/plugins/codemirror/langs/nl.js new file mode 100644 index 0000000000..1c23c232af --- /dev/null +++ b/common/static/js/vendor/tiny_mce/plugins/codemirror/langs/nl.js @@ -0,0 +1,8 @@ +tinymce.addI18n('nl',{ + 'HTML source code': 'HTML broncode', + 'Start search': 'Start zoeken', + 'Find next': 'Zoek volgende', + 'Find previous': 'Zoek vorige', + 'Replace': 'Vervang', + 'Replace all': 'Vervang alle' +}); diff --git a/common/static/js/vendor/tiny_mce/plugins/codemirror/plugin.js b/common/static/js/vendor/tiny_mce/plugins/codemirror/plugin.js new file mode 100644 index 0000000000..9c58127f27 --- /dev/null +++ b/common/static/js/vendor/tiny_mce/plugins/codemirror/plugin.js @@ -0,0 +1,56 @@ +/** + * plugin.js + * + * Copyright 2013 Web Power, www.webpower.nl + * @author Arjan Haverkamp + */ + +/*jshint unused:false */ +/*global tinymce:true */ + +tinymce.PluginManager.requireLangPack('codemirror'); + +tinymce.PluginManager.add('codemirror', function(editor, url) { + + function showSourceEditor() { + // Insert caret marker + editor.focus(); + editor.selection.collapse(true); + editor.selection.setContent(''); + + // Open editor window + var win = editor.windowManager.open({ + title: 'HTML source code', + url: url + '/source.html', + width: 800, + height: 550, + resizable : true, + maximizable : true, + buttons: [ + { text: 'Ok', subtype: 'primary', onclick: function(){ + var doc = document.querySelectorAll('.mce-container-body>iframe')[0]; + doc.contentWindow.submit(); + win.close(); + }}, + { text: 'Cancel', onclick: 'close' } + ] + }); + }; + + // Add a button to the button bar + // EDX changed to show "HTML" on toolbar button + editor.addButton('code', { + title: 'Edit HTML', + text: 'HTML', + icon: false, + onclick: showSourceEditor + }); + + // Add a menu item to the tools menu + editor.addMenuItem('code', { + icon: 'code', + text: 'Edit HTML', + context: 'tools', + onclick: showSourceEditor + }); +}); diff --git a/common/static/js/vendor/tiny_mce/plugins/codemirror/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/codemirror/plugin.min.js new file mode 100644 index 0000000000..05ad0a5597 --- /dev/null +++ b/common/static/js/vendor/tiny_mce/plugins/codemirror/plugin.min.js @@ -0,0 +1,3 @@ +tinymce.PluginManager.requireLangPack("codemirror"); +tinymce.PluginManager.add("codemirror",function(a,c){function b(){a.focus();a.selection.collapse(!0);a.selection.setContent('');var b=a.windowManager.open({title:"HTML source code",url:c+"/source.html",width:800,height:550,resizable:!0,maximizable:!0,buttons:[{text:"Ok",subtype:"primary",onclick:function(){document.querySelectorAll(".mce-container-body>iframe")[0].contentWindow.submit();b.close()}},{text:"Cancel",onclick:"close"}]})}a.addButton("code", +{title:"Edit HTML",text:"HTML",icon:false,onclick:b});a.addMenuItem("code",{icon:"code",text:"Edit HTML",context:"tools",onclick:b})}); diff --git a/common/static/js/vendor/tiny_mce/plugins/codemirror/source.html b/common/static/js/vendor/tiny_mce/plugins/codemirror/source.html new file mode 100644 index 0000000000..15de3748ab --- /dev/null +++ b/common/static/js/vendor/tiny_mce/plugins/codemirror/source.html @@ -0,0 +1,252 @@ + + + + + + + + diff --git a/common/static/js/vendor/tiny_mce/plugins/contextmenu/editor_plugin.js b/common/static/js/vendor/tiny_mce/plugins/contextmenu/editor_plugin.js deleted file mode 100644 index 2ed042c3ae..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/contextmenu/editor_plugin.js +++ /dev/null @@ -1 +0,0 @@ -(function(){var a=tinymce.dom.Event,c=tinymce.each,b=tinymce.DOM;tinymce.create("tinymce.plugins.ContextMenu",{init:function(f){var i=this,g,d,j,e;i.editor=f;d=f.settings.contextmenu_never_use_native;i.onContextMenu=new tinymce.util.Dispatcher(this);e=function(k){h(f,k)};g=f.onContextMenu.add(function(k,l){if((j!==0?j:l.ctrlKey)&&!d){return}a.cancel(l);if(l.target.nodeName=="IMG"){k.selection.select(l.target)}i._getMenu(k).showMenu(l.clientX||l.pageX,l.clientY||l.pageY);a.add(k.getDoc(),"click",e);k.nodeChanged()});f.onRemove.add(function(){if(i._menu){i._menu.removeAll()}});function h(k,l){j=0;if(l&&l.button==2){j=l.ctrlKey;return}if(i._menu){i._menu.removeAll();i._menu.destroy();a.remove(k.getDoc(),"click",e);i._menu=null}}f.onMouseDown.add(h);f.onKeyDown.add(h);f.onKeyDown.add(function(k,l){if(l.shiftKey&&!l.ctrlKey&&!l.altKey&&l.keyCode===121){a.cancel(l);g(k,l)}})},getInfo:function(){return{longname:"Contextmenu",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/contextmenu",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_getMenu:function(e){var g=this,d=g._menu,j=e.selection,f=j.isCollapsed(),h=j.getNode()||e.getBody(),i,k;if(d){d.removeAll();d.destroy()}k=b.getPos(e.getContentAreaContainer());d=e.controlManager.createDropMenu("contextmenu",{offset_x:k.x+e.getParam("contextmenu_offset_x",0),offset_y:k.y+e.getParam("contextmenu_offset_y",0),constrain:1,keyboard_focus:true});g._menu=d;d.add({title:"advanced.cut_desc",icon:"cut",cmd:"Cut"}).setDisabled(f);d.add({title:"advanced.copy_desc",icon:"copy",cmd:"Copy"}).setDisabled(f);d.add({title:"advanced.paste_desc",icon:"paste",cmd:"Paste"});if((h.nodeName=="A"&&!e.dom.getAttrib(h,"name"))||!f){d.addSeparator();d.add({title:"advanced.link_desc",icon:"link",cmd:e.plugins.advlink?"mceAdvLink":"mceLink",ui:true});d.add({title:"advanced.unlink_desc",icon:"unlink",cmd:"UnLink"})}d.addSeparator();d.add({title:"advanced.image_desc",icon:"image",cmd:e.plugins.advimage?"mceAdvImage":"mceImage",ui:true});d.addSeparator();i=d.addMenu({title:"contextmenu.align"});i.add({title:"contextmenu.left",icon:"justifyleft",cmd:"JustifyLeft"});i.add({title:"contextmenu.center",icon:"justifycenter",cmd:"JustifyCenter"});i.add({title:"contextmenu.right",icon:"justifyright",cmd:"JustifyRight"});i.add({title:"contextmenu.full",icon:"justifyfull",cmd:"JustifyFull"});g.onContextMenu.dispatch(g,d,h,f);return d}});tinymce.PluginManager.add("contextmenu",tinymce.plugins.ContextMenu)})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/contextmenu/editor_plugin_src.js b/common/static/js/vendor/tiny_mce/plugins/contextmenu/editor_plugin_src.js deleted file mode 100644 index 237cbf5b0a..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/contextmenu/editor_plugin_src.js +++ /dev/null @@ -1,163 +0,0 @@ -/** - * editor_plugin_src.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -(function() { - var Event = tinymce.dom.Event, each = tinymce.each, DOM = tinymce.DOM; - - /** - * This plugin a context menu to TinyMCE editor instances. - * - * @class tinymce.plugins.ContextMenu - */ - tinymce.create('tinymce.plugins.ContextMenu', { - /** - * Initializes the plugin, this will be executed after the plugin has been created. - * This call is done before the editor instance has finished it's initialization so use the onInit event - * of the editor instance to intercept that event. - * - * @method init - * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in. - * @param {string} url Absolute URL to where the plugin is located. - */ - init : function(ed) { - var t = this, showMenu, contextmenuNeverUseNative, realCtrlKey, hideMenu; - - t.editor = ed; - - contextmenuNeverUseNative = ed.settings.contextmenu_never_use_native; - - /** - * This event gets fired when the context menu is shown. - * - * @event onContextMenu - * @param {tinymce.plugins.ContextMenu} sender Plugin instance sending the event. - * @param {tinymce.ui.DropMenu} menu Drop down menu to fill with more items if needed. - */ - t.onContextMenu = new tinymce.util.Dispatcher(this); - - hideMenu = function(e) { - hide(ed, e); - }; - - showMenu = ed.onContextMenu.add(function(ed, e) { - // Block TinyMCE menu on ctrlKey and work around Safari issue - if ((realCtrlKey !== 0 ? realCtrlKey : e.ctrlKey) && !contextmenuNeverUseNative) - return; - - Event.cancel(e); - - // Select the image if it's clicked. WebKit would other wise expand the selection - if (e.target.nodeName == 'IMG') - ed.selection.select(e.target); - - t._getMenu(ed).showMenu(e.clientX || e.pageX, e.clientY || e.pageY); - Event.add(ed.getDoc(), 'click', hideMenu); - - ed.nodeChanged(); - }); - - ed.onRemove.add(function() { - if (t._menu) - t._menu.removeAll(); - }); - - function hide(ed, e) { - realCtrlKey = 0; - - // Since the contextmenu event moves - // the selection we need to store it away - if (e && e.button == 2) { - realCtrlKey = e.ctrlKey; - return; - } - - if (t._menu) { - t._menu.removeAll(); - t._menu.destroy(); - Event.remove(ed.getDoc(), 'click', hideMenu); - t._menu = null; - } - }; - - ed.onMouseDown.add(hide); - ed.onKeyDown.add(hide); - ed.onKeyDown.add(function(ed, e) { - if (e.shiftKey && !e.ctrlKey && !e.altKey && e.keyCode === 121) { - Event.cancel(e); - showMenu(ed, e); - } - }); - }, - - /** - * Returns information about the plugin as a name/value array. - * The current keys are longname, author, authorurl, infourl and version. - * - * @method getInfo - * @return {Object} Name/value array containing information about the plugin. - */ - getInfo : function() { - return { - longname : 'Contextmenu', - author : 'Moxiecode Systems AB', - authorurl : 'http://tinymce.moxiecode.com', - infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/contextmenu', - version : tinymce.majorVersion + "." + tinymce.minorVersion - }; - }, - - _getMenu : function(ed) { - var t = this, m = t._menu, se = ed.selection, col = se.isCollapsed(), el = se.getNode() || ed.getBody(), am, p; - - if (m) { - m.removeAll(); - m.destroy(); - } - - p = DOM.getPos(ed.getContentAreaContainer()); - - m = ed.controlManager.createDropMenu('contextmenu', { - offset_x : p.x + ed.getParam('contextmenu_offset_x', 0), - offset_y : p.y + ed.getParam('contextmenu_offset_y', 0), - constrain : 1, - keyboard_focus: true - }); - - t._menu = m; - - m.add({title : 'advanced.cut_desc', icon : 'cut', cmd : 'Cut'}).setDisabled(col); - m.add({title : 'advanced.copy_desc', icon : 'copy', cmd : 'Copy'}).setDisabled(col); - m.add({title : 'advanced.paste_desc', icon : 'paste', cmd : 'Paste'}); - - if ((el.nodeName == 'A' && !ed.dom.getAttrib(el, 'name')) || !col) { - m.addSeparator(); - m.add({title : 'advanced.link_desc', icon : 'link', cmd : ed.plugins.advlink ? 'mceAdvLink' : 'mceLink', ui : true}); - m.add({title : 'advanced.unlink_desc', icon : 'unlink', cmd : 'UnLink'}); - } - - m.addSeparator(); - m.add({title : 'advanced.image_desc', icon : 'image', cmd : ed.plugins.advimage ? 'mceAdvImage' : 'mceImage', ui : true}); - - m.addSeparator(); - am = m.addMenu({title : 'contextmenu.align'}); - am.add({title : 'contextmenu.left', icon : 'justifyleft', cmd : 'JustifyLeft'}); - am.add({title : 'contextmenu.center', icon : 'justifycenter', cmd : 'JustifyCenter'}); - am.add({title : 'contextmenu.right', icon : 'justifyright', cmd : 'JustifyRight'}); - am.add({title : 'contextmenu.full', icon : 'justifyfull', cmd : 'JustifyFull'}); - - t.onContextMenu.dispatch(t, m, el, col); - - return m; - } - }); - - // Register plugin - tinymce.PluginManager.add('contextmenu', tinymce.plugins.ContextMenu); -})(); diff --git a/common/static/js/vendor/tiny_mce/plugins/contextmenu/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/contextmenu/plugin.min.js new file mode 100644 index 0000000000..f4c664a065 --- /dev/null +++ b/common/static/js/vendor/tiny_mce/plugins/contextmenu/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("contextmenu",function(e){var n,t=e.settings.contextmenu_never_use_native;e.on("contextmenu",function(o){var i;if(!o.ctrlKey||t){if(o.preventDefault(),i=e.settings.contextmenu||"link image inserttable | cell row column deletetable",n)n.show();else{var c=[];tinymce.each(i.split(/[ ,]/),function(n){var t=e.menuItems[n];"|"==n&&(t={text:n}),t&&(t.shortcut="",c.push(t))});for(var a=0;a'}),t+=""}),t+=""}var i=[["cool","cry","embarassed","foot-in-mouth"],["frown","innocent","kiss","laughing"],["money-mouth","sealed","smile","surprised"],["tongue-out","undecided","wink","yell"]];t.addButton("emoticons",{type:"panelbutton",panel:{autohide:!0,html:n,onclick:function(e){var n=t.dom.getParent(e.target,"a");n&&(t.insertContent(''),this.hide())}},tooltip:"Emoticons"})}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/emotions/editor_plugin.js b/common/static/js/vendor/tiny_mce/plugins/emotions/editor_plugin.js deleted file mode 100644 index dbdd8ffb58..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/emotions/editor_plugin.js +++ /dev/null @@ -1 +0,0 @@ -(function(a){a.create("tinymce.plugins.EmotionsPlugin",{init:function(b,c){b.addCommand("mceEmotion",function(){b.windowManager.open({file:c+"/emotions.htm",width:250+parseInt(b.getLang("emotions.delta_width",0)),height:160+parseInt(b.getLang("emotions.delta_height",0)),inline:1},{plugin_url:c})});b.addButton("emotions",{title:"emotions.emotions_desc",cmd:"mceEmotion"})},getInfo:function(){return{longname:"Emotions",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/emotions",version:a.majorVersion+"."+a.minorVersion}}});a.PluginManager.add("emotions",a.plugins.EmotionsPlugin)})(tinymce); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/emotions/editor_plugin_src.js b/common/static/js/vendor/tiny_mce/plugins/emotions/editor_plugin_src.js deleted file mode 100644 index aeee199d24..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/emotions/editor_plugin_src.js +++ /dev/null @@ -1,43 +0,0 @@ -/** - * editor_plugin_src.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -(function(tinymce) { - tinymce.create('tinymce.plugins.EmotionsPlugin', { - init : function(ed, url) { - // Register commands - ed.addCommand('mceEmotion', function() { - ed.windowManager.open({ - file : url + '/emotions.htm', - width : 250 + parseInt(ed.getLang('emotions.delta_width', 0)), - height : 160 + parseInt(ed.getLang('emotions.delta_height', 0)), - inline : 1 - }, { - plugin_url : url - }); - }); - - // Register buttons - ed.addButton('emotions', {title : 'emotions.emotions_desc', cmd : 'mceEmotion'}); - }, - - getInfo : function() { - return { - longname : 'Emotions', - author : 'Moxiecode Systems AB', - authorurl : 'http://tinymce.moxiecode.com', - infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/emotions', - version : tinymce.majorVersion + "." + tinymce.minorVersion - }; - } - }); - - // Register plugin - tinymce.PluginManager.add('emotions', tinymce.plugins.EmotionsPlugin); -})(tinymce); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/emotions/emotions.htm b/common/static/js/vendor/tiny_mce/plugins/emotions/emotions.htm deleted file mode 100644 index eb7a6b2714..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/emotions/emotions.htm +++ /dev/null @@ -1,42 +0,0 @@ - - - - {#emotions_dlg.title} - - - - - -

-
{#emotions_dlg.title}:

- - - - - - - - - - - - - - - - - - - - - - - - - - - -
{#emotions_dlg.usage}
-
- - diff --git a/common/static/js/vendor/tiny_mce/plugins/emotions/js/emotions.js b/common/static/js/vendor/tiny_mce/plugins/emotions/js/emotions.js deleted file mode 100644 index f73516c833..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/emotions/js/emotions.js +++ /dev/null @@ -1,43 +0,0 @@ -tinyMCEPopup.requireLangPack(); - -var EmotionsDialog = { - addKeyboardNavigation: function(){ - var tableElm, cells, settings; - - cells = tinyMCEPopup.dom.select("a.emoticon_link", "emoticon_table"); - - settings ={ - root: "emoticon_table", - items: cells - }; - cells[0].tabindex=0; - tinyMCEPopup.dom.addClass(cells[0], "mceFocus"); - if (tinymce.isGecko) { - cells[0].focus(); - } else { - setTimeout(function(){ - cells[0].focus(); - }, 100); - } - tinyMCEPopup.editor.windowManager.createInstance('tinymce.ui.KeyboardNavigation', settings, tinyMCEPopup.dom); - }, - init : function(ed) { - tinyMCEPopup.resizeToInnerSize(); - this.addKeyboardNavigation(); - }, - - insert : function(file, title) { - var ed = tinyMCEPopup.editor, dom = ed.dom; - - tinyMCEPopup.execCommand('mceInsertContent', false, dom.createHTML('img', { - src : tinyMCEPopup.getWindowArg('plugin_url') + '/img/' + file, - alt : ed.getLang(title), - title : ed.getLang(title), - border : 0 - })); - - tinyMCEPopup.close(); - } -}; - -tinyMCEPopup.onInit.add(EmotionsDialog.init, EmotionsDialog); diff --git a/common/static/js/vendor/tiny_mce/plugins/emotions/langs/en_dlg.js b/common/static/js/vendor/tiny_mce/plugins/emotions/langs/en_dlg.js deleted file mode 100644 index 037c4b5883..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/emotions/langs/en_dlg.js +++ /dev/null @@ -1 +0,0 @@ -tinyMCE.addI18n('en.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"Emotions",title:"Insert Emotion",usage:"Use left and right arrows to navigate.",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue Out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money Mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in Mouth",embarassed:"Embarassed"}); diff --git a/common/static/js/vendor/tiny_mce/plugins/example/dialog.htm b/common/static/js/vendor/tiny_mce/plugins/example/dialog.htm deleted file mode 100644 index d6f2856aa0..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/example/dialog.htm +++ /dev/null @@ -1,22 +0,0 @@ - - - - {#example_dlg.title} - - - - - -
-

Here is a example dialog.

-

Selected text:

-

Custom arg:

- -
- - -
-
- - - diff --git a/common/static/js/vendor/tiny_mce/plugins/example/editor_plugin.js b/common/static/js/vendor/tiny_mce/plugins/example/editor_plugin.js deleted file mode 100644 index ec1f81ea40..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/example/editor_plugin.js +++ /dev/null @@ -1 +0,0 @@ -(function(){tinymce.PluginManager.requireLangPack("example");tinymce.create("tinymce.plugins.ExamplePlugin",{init:function(a,b){a.addCommand("mceExample",function(){a.windowManager.open({file:b+"/dialog.htm",width:320+parseInt(a.getLang("example.delta_width",0)),height:120+parseInt(a.getLang("example.delta_height",0)),inline:1},{plugin_url:b,some_custom_arg:"custom arg"})});a.addButton("example",{title:"example.desc",cmd:"mceExample",image:b+"/img/example.gif"});a.onNodeChange.add(function(d,c,e){c.setActive("example",e.nodeName=="IMG")})},createControl:function(b,a){return null},getInfo:function(){return{longname:"Example plugin",author:"Some author",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example",version:"1.0"}}});tinymce.PluginManager.add("example",tinymce.plugins.ExamplePlugin)})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/example/editor_plugin_src.js b/common/static/js/vendor/tiny_mce/plugins/example/editor_plugin_src.js deleted file mode 100644 index edc1e776e5..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/example/editor_plugin_src.js +++ /dev/null @@ -1,84 +0,0 @@ -/** - * editor_plugin_src.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -(function() { - // Load plugin specific language pack - tinymce.PluginManager.requireLangPack('example'); - - tinymce.create('tinymce.plugins.ExamplePlugin', { - /** - * Initializes the plugin, this will be executed after the plugin has been created. - * This call is done before the editor instance has finished it's initialization so use the onInit event - * of the editor instance to intercept that event. - * - * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in. - * @param {string} url Absolute URL to where the plugin is located. - */ - init : function(ed, url) { - // Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('mceExample'); - ed.addCommand('mceExample', function() { - ed.windowManager.open({ - file : url + '/dialog.htm', - width : 320 + parseInt(ed.getLang('example.delta_width', 0)), - height : 120 + parseInt(ed.getLang('example.delta_height', 0)), - inline : 1 - }, { - plugin_url : url, // Plugin absolute URL - some_custom_arg : 'custom arg' // Custom argument - }); - }); - - // Register example button - ed.addButton('example', { - title : 'example.desc', - cmd : 'mceExample', - image : url + '/img/example.gif' - }); - - // Add a node change handler, selects the button in the UI when a image is selected - ed.onNodeChange.add(function(ed, cm, n) { - cm.setActive('example', n.nodeName == 'IMG'); - }); - }, - - /** - * Creates control instances based in the incomming name. This method is normally not - * needed since the addButton method of the tinymce.Editor class is a more easy way of adding buttons - * but you sometimes need to create more complex controls like listboxes, split buttons etc then this - * method can be used to create those. - * - * @param {String} n Name of the control to create. - * @param {tinymce.ControlManager} cm Control manager to use inorder to create new control. - * @return {tinymce.ui.Control} New control instance or null if no control was created. - */ - createControl : function(n, cm) { - return null; - }, - - /** - * Returns information about the plugin as a name/value array. - * The current keys are longname, author, authorurl, infourl and version. - * - * @return {Object} Name/value array containing information about the plugin. - */ - getInfo : function() { - return { - longname : 'Example plugin', - author : 'Some author', - authorurl : 'http://tinymce.moxiecode.com', - infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example', - version : "1.0" - }; - } - }); - - // Register plugin - tinymce.PluginManager.add('example', tinymce.plugins.ExamplePlugin); -})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/example/img/example.gif b/common/static/js/vendor/tiny_mce/plugins/example/img/example.gif deleted file mode 100644 index 1ab5da4461113d2af579898528246fdbe52ecd00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 87 zcmZ?wbhEHb6k!lyn83&Y1dNP~ia%L^OhyJB5FaGNz@*pGzw+SQ`#f{}FJ-?!v#V)e mtsGNfpJeCKSAiOz**>0`XR2{OVa>-G_df0vaY"}i=f.getAll("title")[0];if(i&&i.firstChild){h.metatitle=i.firstChild.value}b(f.getAll("meta"),function(m){var k=m.attr("name"),j=m.attr("http-equiv"),l;if(k){h["meta"+k.toLowerCase()]=m.attr("content")}else{if(j=="Content-Type"){l=/charset\s*=\s*(.*)\s*/gi.exec(m.attr("content"));if(l){h.docencoding=l[1]}}}});i=f.getAll("html")[0];if(i){h.langcode=d(i,"lang")||d(i,"xml:lang")}i=f.getAll("link")[0];if(i&&i.attr("rel")=="stylesheet"){h.stylesheet=i.attr("href")}i=f.getAll("body")[0];if(i){h.langdir=d(i,"dir");h.style=d(i,"style");h.visited_color=d(i,"vlink");h.link_color=d(i,"link");h.active_color=d(i,"alink")}return h},_dataToHtml:function(g){var f,d,h,j,k,e=this.editor.dom;function c(n,l,m){n.attr(l,m?m:undefined)}function i(l){if(d.firstChild){d.insert(l,d.firstChild)}else{d.append(l)}}f=this._parseHeader();d=f.getAll("head")[0];if(!d){j=f.getAll("html")[0];d=new a("head",1);if(j.firstChild){j.insert(d,j.firstChild,true)}else{j.append(d)}}j=f.firstChild;if(g.xml_pi){k='version="1.0"';if(g.docencoding){k+=' encoding="'+g.docencoding+'"'}if(j.type!=7){j=new a("xml",7);f.insert(j,f.firstChild,true)}j.value=k}else{if(j&&j.type==7){j.remove()}}j=f.getAll("#doctype")[0];if(g.doctype){if(!j){j=new a("#doctype",10);if(g.xml_pi){f.insert(j,f.firstChild)}else{i(j)}}j.value=g.doctype.substring(9,g.doctype.length-1)}else{if(j){j.remove()}}j=f.getAll("title")[0];if(g.metatitle){if(!j){j=new a("title",1);j.append(new a("#text",3)).value=g.metatitle;i(j)}}if(g.docencoding){j=null;b(f.getAll("meta"),function(l){if(l.attr("http-equiv")=="Content-Type"){j=l}});if(!j){j=new a("meta",1);j.attr("http-equiv","Content-Type");j.shortEnded=true;i(j)}j.attr("content","text/html; charset="+g.docencoding)}b("keywords,description,author,copyright,robots".split(","),function(m){var l=f.getAll("meta"),n,p,o=g["meta"+m];for(n=0;n"))},_parseHeader:function(){return new tinymce.html.DomParser({validate:false,root_name:"#document"}).parse(this.head)},_setContent:function(g,d){var m=this,i,c,h=d.content,f,l="",e=m.editor.dom,j;function k(n){return n.replace(/<\/?[A-Z]+/g,function(o){return o.toLowerCase()})}if(d.format=="raw"&&m.head){return}if(d.source_view&&g.getParam("fullpage_hide_in_source_view")){return}h=h.replace(/<(\/?)BODY/gi,"<$1body");i=h.indexOf("",i);m.head=k(h.substring(0,i+1));c=h.indexOf("\n"}f=m._parseHeader();b(f.getAll("style"),function(n){if(n.firstChild){l+=n.firstChild.value}});j=f.getAll("body")[0];if(j){e.setAttribs(m.editor.getBody(),{style:j.attr("style")||"",dir:j.attr("dir")||"",vLink:j.attr("vlink")||"",link:j.attr("link")||"",aLink:j.attr("alink")||""})}e.remove("fullpage_styles");if(l){e.add(m.editor.getDoc().getElementsByTagName("head")[0],"style",{id:"fullpage_styles"},l);j=e.get("fullpage_styles");if(j.styleSheet){j.styleSheet.cssText=l}}},_getDefaultHeader:function(){var f="",c=this.editor,e,d="";if(c.getParam("fullpage_default_xml_pi")){f+='\n'}f+=c.getParam("fullpage_default_doctype",'');f+="\n\n\n";if(e=c.getParam("fullpage_default_title")){f+=""+e+"\n"}if(e=c.getParam("fullpage_default_encoding")){f+='\n'}if(e=c.getParam("fullpage_default_font_family")){d+="font-family: "+e+";"}if(e=c.getParam("fullpage_default_font_size")){d+="font-size: "+e+";"}if(e=c.getParam("fullpage_default_text_color")){d+="color: "+e+";"}f+="\n\n";return f},_getContent:function(d,e){var c=this;if(!e.source_view||!d.getParam("fullpage_hide_in_source_view")){e.content=tinymce.trim(c.head)+"\n"+tinymce.trim(e.content)+"\n"+tinymce.trim(c.foot)}}});tinymce.PluginManager.add("fullpage",tinymce.plugins.FullPagePlugin)})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/fullpage/editor_plugin_src.js b/common/static/js/vendor/tiny_mce/plugins/fullpage/editor_plugin_src.js deleted file mode 100644 index 8b49c44644..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/fullpage/editor_plugin_src.js +++ /dev/null @@ -1,405 +0,0 @@ -/** - * editor_plugin_src.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -(function() { - var each = tinymce.each, Node = tinymce.html.Node; - - tinymce.create('tinymce.plugins.FullPagePlugin', { - init : function(ed, url) { - var t = this; - - t.editor = ed; - - // Register commands - ed.addCommand('mceFullPageProperties', function() { - ed.windowManager.open({ - file : url + '/fullpage.htm', - width : 430 + parseInt(ed.getLang('fullpage.delta_width', 0)), - height : 495 + parseInt(ed.getLang('fullpage.delta_height', 0)), - inline : 1 - }, { - plugin_url : url, - data : t._htmlToData() - }); - }); - - // Register buttons - ed.addButton('fullpage', {title : 'fullpage.desc', cmd : 'mceFullPageProperties'}); - - ed.onBeforeSetContent.add(t._setContent, t); - ed.onGetContent.add(t._getContent, t); - }, - - getInfo : function() { - return { - longname : 'Fullpage', - author : 'Moxiecode Systems AB', - authorurl : 'http://tinymce.moxiecode.com', - infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullpage', - version : tinymce.majorVersion + "." + tinymce.minorVersion - }; - }, - - // Private plugin internal methods - - _htmlToData : function() { - var headerFragment = this._parseHeader(), data = {}, nodes, elm, matches, editor = this.editor; - - function getAttr(elm, name) { - var value = elm.attr(name); - - return value || ''; - }; - - // Default some values - data.fontface = editor.getParam("fullpage_default_fontface", ""); - data.fontsize = editor.getParam("fullpage_default_fontsize", ""); - - // Parse XML PI - elm = headerFragment.firstChild; - if (elm.type == 7) { - data.xml_pi = true; - matches = /encoding="([^"]+)"/.exec(elm.value); - if (matches) - data.docencoding = matches[1]; - } - - // Parse doctype - elm = headerFragment.getAll('#doctype')[0]; - if (elm) - data.doctype = '"; - - // Parse title element - elm = headerFragment.getAll('title')[0]; - if (elm && elm.firstChild) { - data.metatitle = elm.firstChild.value; - } - - // Parse meta elements - each(headerFragment.getAll('meta'), function(meta) { - var name = meta.attr('name'), httpEquiv = meta.attr('http-equiv'), matches; - - if (name) - data['meta' + name.toLowerCase()] = meta.attr('content'); - else if (httpEquiv == "Content-Type") { - matches = /charset\s*=\s*(.*)\s*/gi.exec(meta.attr('content')); - - if (matches) - data.docencoding = matches[1]; - } - }); - - // Parse html attribs - elm = headerFragment.getAll('html')[0]; - if (elm) - data.langcode = getAttr(elm, 'lang') || getAttr(elm, 'xml:lang'); - - // Parse stylesheet - elm = headerFragment.getAll('link')[0]; - if (elm && elm.attr('rel') == 'stylesheet') - data.stylesheet = elm.attr('href'); - - // Parse body parts - elm = headerFragment.getAll('body')[0]; - if (elm) { - data.langdir = getAttr(elm, 'dir'); - data.style = getAttr(elm, 'style'); - data.visited_color = getAttr(elm, 'vlink'); - data.link_color = getAttr(elm, 'link'); - data.active_color = getAttr(elm, 'alink'); - } - - return data; - }, - - _dataToHtml : function(data) { - var headerFragment, headElement, html, elm, value, dom = this.editor.dom; - - function setAttr(elm, name, value) { - elm.attr(name, value ? value : undefined); - }; - - function addHeadNode(node) { - if (headElement.firstChild) - headElement.insert(node, headElement.firstChild); - else - headElement.append(node); - }; - - headerFragment = this._parseHeader(); - headElement = headerFragment.getAll('head')[0]; - if (!headElement) { - elm = headerFragment.getAll('html')[0]; - headElement = new Node('head', 1); - - if (elm.firstChild) - elm.insert(headElement, elm.firstChild, true); - else - elm.append(headElement); - } - - // Add/update/remove XML-PI - elm = headerFragment.firstChild; - if (data.xml_pi) { - value = 'version="1.0"'; - - if (data.docencoding) - value += ' encoding="' + data.docencoding + '"'; - - if (elm.type != 7) { - elm = new Node('xml', 7); - headerFragment.insert(elm, headerFragment.firstChild, true); - } - - elm.value = value; - } else if (elm && elm.type == 7) - elm.remove(); - - // Add/update/remove doctype - elm = headerFragment.getAll('#doctype')[0]; - if (data.doctype) { - if (!elm) { - elm = new Node('#doctype', 10); - - if (data.xml_pi) - headerFragment.insert(elm, headerFragment.firstChild); - else - addHeadNode(elm); - } - - elm.value = data.doctype.substring(9, data.doctype.length - 1); - } else if (elm) - elm.remove(); - - // Add/update/remove title - elm = headerFragment.getAll('title')[0]; - if (data.metatitle) { - if (!elm) { - elm = new Node('title', 1); - elm.append(new Node('#text', 3)).value = data.metatitle; - addHeadNode(elm); - } - } - - // Add meta encoding - if (data.docencoding) { - elm = null; - each(headerFragment.getAll('meta'), function(meta) { - if (meta.attr('http-equiv') == 'Content-Type') - elm = meta; - }); - - if (!elm) { - elm = new Node('meta', 1); - elm.attr('http-equiv', 'Content-Type'); - elm.shortEnded = true; - addHeadNode(elm); - } - - elm.attr('content', 'text/html; charset=' + data.docencoding); - } - - // Add/update/remove meta - each('keywords,description,author,copyright,robots'.split(','), function(name) { - var nodes = headerFragment.getAll('meta'), i, meta, value = data['meta' + name]; - - for (i = 0; i < nodes.length; i++) { - meta = nodes[i]; - - if (meta.attr('name') == name) { - if (value) - meta.attr('content', value); - else - meta.remove(); - - return; - } - } - - if (value) { - elm = new Node('meta', 1); - elm.attr('name', name); - elm.attr('content', value); - elm.shortEnded = true; - - addHeadNode(elm); - } - }); - - // Add/update/delete link - elm = headerFragment.getAll('link')[0]; - if (elm && elm.attr('rel') == 'stylesheet') { - if (data.stylesheet) - elm.attr('href', data.stylesheet); - else - elm.remove(); - } else if (data.stylesheet) { - elm = new Node('link', 1); - elm.attr({ - rel : 'stylesheet', - text : 'text/css', - href : data.stylesheet - }); - elm.shortEnded = true; - - addHeadNode(elm); - } - - // Update body attributes - elm = headerFragment.getAll('body')[0]; - if (elm) { - setAttr(elm, 'dir', data.langdir); - setAttr(elm, 'style', data.style); - setAttr(elm, 'vlink', data.visited_color); - setAttr(elm, 'link', data.link_color); - setAttr(elm, 'alink', data.active_color); - - // Update iframe body as well - dom.setAttribs(this.editor.getBody(), { - style : data.style, - dir : data.dir, - vLink : data.visited_color, - link : data.link_color, - aLink : data.active_color - }); - } - - // Set html attributes - elm = headerFragment.getAll('html')[0]; - if (elm) { - setAttr(elm, 'lang', data.langcode); - setAttr(elm, 'xml:lang', data.langcode); - } - - // Serialize header fragment and crop away body part - html = new tinymce.html.Serializer({ - validate: false, - indent: true, - apply_source_formatting : true, - indent_before: 'head,html,body,meta,title,script,link,style', - indent_after: 'head,html,body,meta,title,script,link,style' - }).serialize(headerFragment); - - this.head = html.substring(0, html.indexOf('')); - }, - - _parseHeader : function() { - // Parse the contents with a DOM parser - return new tinymce.html.DomParser({ - validate: false, - root_name: '#document' - }).parse(this.head); - }, - - _setContent : function(ed, o) { - var self = this, startPos, endPos, content = o.content, headerFragment, styles = '', dom = self.editor.dom, elm; - - function low(s) { - return s.replace(/<\/?[A-Z]+/g, function(a) { - return a.toLowerCase(); - }) - }; - - // Ignore raw updated if we already have a head, this will fix issues with undo/redo keeping the head/foot separate - if (o.format == 'raw' && self.head) - return; - - if (o.source_view && ed.getParam('fullpage_hide_in_source_view')) - return; - - // Parse out head, body and footer - content = content.replace(/<(\/?)BODY/gi, '<$1body'); - startPos = content.indexOf('', startPos); - self.head = low(content.substring(0, startPos + 1)); - - endPos = content.indexOf('\n'; - - header += editor.getParam('fullpage_default_doctype', ''); - header += '\n\n\n'; - - if (value = editor.getParam('fullpage_default_title')) - header += '' + value + '\n'; - - if (value = editor.getParam('fullpage_default_encoding')) - header += '\n'; - - if (value = editor.getParam('fullpage_default_font_family')) - styles += 'font-family: ' + value + ';'; - - if (value = editor.getParam('fullpage_default_font_size')) - styles += 'font-size: ' + value + ';'; - - if (value = editor.getParam('fullpage_default_text_color')) - styles += 'color: ' + value + ';'; - - header += '\n\n'; - - return header; - }, - - _getContent : function(ed, o) { - var self = this; - - if (!o.source_view || !ed.getParam('fullpage_hide_in_source_view')) - o.content = tinymce.trim(self.head) + '\n' + tinymce.trim(o.content) + '\n' + tinymce.trim(self.foot); - } - }); - - // Register plugin - tinymce.PluginManager.add('fullpage', tinymce.plugins.FullPagePlugin); -})(); diff --git a/common/static/js/vendor/tiny_mce/plugins/fullpage/fullpage.htm b/common/static/js/vendor/tiny_mce/plugins/fullpage/fullpage.htm deleted file mode 100644 index 200f2b8e6c..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/fullpage/fullpage.htm +++ /dev/null @@ -1,259 +0,0 @@ - - - - {#fullpage_dlg.title} - - - - - - - -
- - -
-
-
- {#fullpage_dlg.meta_props} - - - - - - - - - - - - - - - - - - - - - - - - - - -
 
 
 
 
 
  - -
-
- -
- {#fullpage_dlg.langprops} - - - - - - - - - - - - - - - - - - - - - - -
- -
  - -
 
- -
 
-
-
- -
-
- {#fullpage_dlg.appearance_textprops} - - - - - - - - - - - - - - - - -
- -
- -
- - - - - -
 
-
-
- -
- {#fullpage_dlg.appearance_bgprops} - - - - - - - - - - -
- - - - - -
 
-
- - - - - -
 
-
-
- -
- {#fullpage_dlg.appearance_marginprops} - - - - - - - - - - - - - - -
-
- -
- {#fullpage_dlg.appearance_linkprops} - - - - - - - - - - - - - - - - - -
- - - - - -
-
- - - - - -
 
-
- - - - - -
 
-
  
-
- -
- {#fullpage_dlg.appearance_style} - - - - - - - - - - -
- - - - -
 
-
-
-
- -
- - -
-
- - diff --git a/common/static/js/vendor/tiny_mce/plugins/fullpage/js/fullpage.js b/common/static/js/vendor/tiny_mce/plugins/fullpage/js/fullpage.js deleted file mode 100644 index 66eec2d7b4..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/fullpage/js/fullpage.js +++ /dev/null @@ -1,232 +0,0 @@ -/** - * fullpage.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -(function() { - tinyMCEPopup.requireLangPack(); - - var defaultDocTypes = - 'XHTML 1.0 Transitional=,' + - 'XHTML 1.0 Frameset=,' + - 'XHTML 1.0 Strict=,' + - 'XHTML 1.1=,' + - 'HTML 4.01 Transitional=,' + - 'HTML 4.01 Strict=,' + - 'HTML 4.01 Frameset='; - - var defaultEncodings = - 'Western european (iso-8859-1)=iso-8859-1,' + - 'Central European (iso-8859-2)=iso-8859-2,' + - 'Unicode (UTF-8)=utf-8,' + - 'Chinese traditional (Big5)=big5,' + - 'Cyrillic (iso-8859-5)=iso-8859-5,' + - 'Japanese (iso-2022-jp)=iso-2022-jp,' + - 'Greek (iso-8859-7)=iso-8859-7,' + - 'Korean (iso-2022-kr)=iso-2022-kr,' + - 'ASCII (us-ascii)=us-ascii'; - - var defaultFontNames = 'Arial=arial,helvetica,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,times new roman,times,serif;Tahoma=tahoma,arial,helvetica,sans-serif;Times New Roman=times new roman,times,serif;Verdana=verdana,arial,helvetica,sans-serif;Impact=impact;WingDings=wingdings'; - var defaultFontSizes = '10px,11px,12px,13px,14px,15px,16px'; - - function setVal(id, value) { - var elm = document.getElementById(id); - - if (elm) { - value = value || ''; - - if (elm.nodeName == "SELECT") - selectByValue(document.forms[0], id, value); - else if (elm.type == "checkbox") - elm.checked = !!value; - else - elm.value = value; - } - }; - - function getVal(id) { - var elm = document.getElementById(id); - - if (elm.nodeName == "SELECT") - return elm.options[elm.selectedIndex].value; - - if (elm.type == "checkbox") - return elm.checked; - - return elm.value; - }; - - window.FullPageDialog = { - changedStyle : function() { - var val, styles = tinyMCEPopup.editor.dom.parseStyle(getVal('style')); - - setVal('fontface', styles['font-face']); - setVal('fontsize', styles['font-size']); - setVal('textcolor', styles['color']); - - if (val = styles['background-image']) - setVal('bgimage', val.replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1")); - else - setVal('bgimage', ''); - - setVal('bgcolor', styles['background-color']); - - // Reset margin form elements - setVal('topmargin', ''); - setVal('rightmargin', ''); - setVal('bottommargin', ''); - setVal('leftmargin', ''); - - // Expand margin - if (val = styles['margin']) { - val = val.split(' '); - styles['margin-top'] = val[0] || ''; - styles['margin-right'] = val[1] || val[0] || ''; - styles['margin-bottom'] = val[2] || val[0] || ''; - styles['margin-left'] = val[3] || val[0] || ''; - } - - if (val = styles['margin-top']) - setVal('topmargin', val.replace(/px/, '')); - - if (val = styles['margin-right']) - setVal('rightmargin', val.replace(/px/, '')); - - if (val = styles['margin-bottom']) - setVal('bottommargin', val.replace(/px/, '')); - - if (val = styles['margin-left']) - setVal('leftmargin', val.replace(/px/, '')); - - updateColor('bgcolor_pick', 'bgcolor'); - updateColor('textcolor_pick', 'textcolor'); - }, - - changedStyleProp : function() { - var val, dom = tinyMCEPopup.editor.dom, styles = dom.parseStyle(getVal('style')); - - styles['font-face'] = getVal('fontface'); - styles['font-size'] = getVal('fontsize'); - styles['color'] = getVal('textcolor'); - styles['background-color'] = getVal('bgcolor'); - - if (val = getVal('bgimage')) - styles['background-image'] = "url('" + val + "')"; - else - styles['background-image'] = ''; - - delete styles['margin']; - - if (val = getVal('topmargin')) - styles['margin-top'] = val + "px"; - else - styles['margin-top'] = ''; - - if (val = getVal('rightmargin')) - styles['margin-right'] = val + "px"; - else - styles['margin-right'] = ''; - - if (val = getVal('bottommargin')) - styles['margin-bottom'] = val + "px"; - else - styles['margin-bottom'] = ''; - - if (val = getVal('leftmargin')) - styles['margin-left'] = val + "px"; - else - styles['margin-left'] = ''; - - // Serialize, parse and reserialize this will compress redundant styles - setVal('style', dom.serializeStyle(dom.parseStyle(dom.serializeStyle(styles)))); - this.changedStyle(); - }, - - update : function() { - var data = {}; - - tinymce.each(tinyMCEPopup.dom.select('select,input,textarea'), function(node) { - data[node.id] = getVal(node.id); - }); - - tinyMCEPopup.editor.plugins.fullpage._dataToHtml(data); - tinyMCEPopup.close(); - } - }; - - function init() { - var form = document.forms[0], i, item, list, editor = tinyMCEPopup.editor; - - // Setup doctype select box - list = editor.getParam("fullpage_doctypes", defaultDocTypes).split(','); - for (i = 0; i < list.length; i++) { - item = list[i].split('='); - - if (item.length > 1) - addSelectValue(form, 'doctype', item[0], item[1]); - } - - // Setup fonts select box - list = editor.getParam("fullpage_fonts", defaultFontNames).split(';'); - for (i = 0; i < list.length; i++) { - item = list[i].split('='); - - if (item.length > 1) - addSelectValue(form, 'fontface', item[0], item[1]); - } - - // Setup fontsize select box - list = editor.getParam("fullpage_fontsizes", defaultFontSizes).split(','); - for (i = 0; i < list.length; i++) - addSelectValue(form, 'fontsize', list[i], list[i]); - - // Setup encodings select box - list = editor.getParam("fullpage_encodings", defaultEncodings).split(','); - for (i = 0; i < list.length; i++) { - item = list[i].split('='); - - if (item.length > 1) - addSelectValue(form, 'docencoding', item[0], item[1]); - } - - // Setup color pickers - document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor'); - document.getElementById('link_color_pickcontainer').innerHTML = getColorPickerHTML('link_color_pick','link_color'); - document.getElementById('visited_color_pickcontainer').innerHTML = getColorPickerHTML('visited_color_pick','visited_color'); - document.getElementById('active_color_pickcontainer').innerHTML = getColorPickerHTML('active_color_pick','active_color'); - document.getElementById('textcolor_pickcontainer').innerHTML = getColorPickerHTML('textcolor_pick','textcolor'); - document.getElementById('stylesheet_browsercontainer').innerHTML = getBrowserHTML('stylesheetbrowser','stylesheet','file','fullpage'); - document.getElementById('bgimage_pickcontainer').innerHTML = getBrowserHTML('bgimage_browser','bgimage','image','fullpage'); - - // Resize some elements - if (isVisible('stylesheetbrowser')) - document.getElementById('stylesheet').style.width = '220px'; - - if (isVisible('link_href_browser')) - document.getElementById('element_link_href').style.width = '230px'; - - if (isVisible('bgimage_browser')) - document.getElementById('bgimage').style.width = '210px'; - - // Update form - tinymce.each(tinyMCEPopup.getWindowArg('data'), function(value, key) { - setVal(key, value); - }); - - FullPageDialog.changedStyle(); - - // Update colors - updateColor('textcolor_pick', 'textcolor'); - updateColor('bgcolor_pick', 'bgcolor'); - updateColor('visited_color_pick', 'visited_color'); - updateColor('active_color_pick', 'active_color'); - updateColor('link_color_pick', 'link_color'); - }; - - tinyMCEPopup.onInit.add(init); -})(); diff --git a/common/static/js/vendor/tiny_mce/plugins/fullpage/langs/en_dlg.js b/common/static/js/vendor/tiny_mce/plugins/fullpage/langs/en_dlg.js deleted file mode 100644 index 516edc74fd..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/fullpage/langs/en_dlg.js +++ /dev/null @@ -1 +0,0 @@ -tinyMCE.addI18n('en.fullpage_dlg',{title:"Document Properties","meta_tab":"General","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta Information",langprops:"Language and Encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language Code",langdir:"Language Direction",ltr:"Left to Right",rtl:"Right to Left","xml_pi":"XML Declaration",encoding:"Character Encoding","appearance_bgprops":"Background Properties","appearance_marginprops":"Body Margins","appearance_linkprops":"Link Colors","appearance_textprops":"Text Properties",bgcolor:"Background Color",bgimage:"Background Image","left_margin":"Left Margin","right_margin":"Right Margin","top_margin":"Top Margin","bottom_margin":"Bottom Margin","text_color":"Text Color","font_size":"Font Size","font_face":"Font Face","link_color":"Link Color","hover_color":"Hover Color","visited_color":"Visited Color","active_color":"Active Color",textcolor:"Color",fontsize:"Font Size",fontface:"Font Family","meta_index_follow":"Index and Follow the Links","meta_index_nofollow":"Index and Don\'t Follow the Links","meta_noindex_follow":"Do Not Index but Follow the Links","meta_noindex_nofollow":"Do Not Index and Don\'t Follow the Links","appearance_style":"Stylesheet and Style Properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add New Element",remove:"Remove Selected Element",moveup:"Move Selected Element Up",movedown:"Move Selected Element Down","head_elements":"Head Elements",info:"Information","add_title":"Title Element","add_meta":"Meta Element","add_script":"Script Element","add_style":"Style Element","add_link":"Link Element","add_base":"Base Element","add_comment":"Comment Node","title_element":"Title Element","script_element":"Script Element","style_element":"Style Element","base_element":"Base Element","link_element":"Link Element","meta_element":"Meta Element","comment_element":"Comment",src:"Source",language:"Language",href:"HREF",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"HREF Lang","general_props":"General","advanced_props":"Advanced"}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/fullpage/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/fullpage/plugin.min.js new file mode 100644 index 0000000000..7cdbf79275 --- /dev/null +++ b/common/static/js/vendor/tiny_mce/plugins/fullpage/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("fullpage",function(e){function t(){var t=n();e.windowManager.open({title:"Document properties",data:t,defaults:{type:"textbox",size:40},body:[{name:"title",label:"Title"},{name:"keywords",label:"Keywords"},{name:"description",label:"Description"},{name:"robots",label:"Robots"},{name:"author",label:"Author"},{name:"docencoding",label:"Encoding"}],onSubmit:function(e){l(tinymce.extend(t,e.data))}})}function n(){function t(e,t){var n=e.attr(t);return n||""}var n,l,a=i(),r={};return r.fontface=e.getParam("fullpage_default_fontface",""),r.fontsize=e.getParam("fullpage_default_fontsize",""),n=a.firstChild,7==n.type&&(r.xml_pi=!0,l=/encoding="([^"]+)"/.exec(n.value),l&&(r.docencoding=l[1])),n=a.getAll("#doctype")[0],n&&(r.doctype=""),n=a.getAll("title")[0],n&&n.firstChild&&(r.title=n.firstChild.value),s(a.getAll("meta"),function(e){var t,n=e.attr("name"),l=e.attr("http-equiv");n?r[n.toLowerCase()]=e.attr("content"):"Content-Type"==l&&(t=/charset\s*=\s*(.*)\s*/gi.exec(e.attr("content")),t&&(r.docencoding=t[1]))}),n=a.getAll("html")[0],n&&(r.langcode=t(n,"lang")||t(n,"xml:lang")),r.stylesheets=[],tinymce.each(a.getAll("link"),function(e){"stylesheet"==e.attr("rel")&&r.stylesheets.push(e.attr("href"))}),n=a.getAll("body")[0],n&&(r.langdir=t(n,"dir"),r.style=t(n,"style"),r.visited_color=t(n,"vlink"),r.link_color=t(n,"link"),r.active_color=t(n,"alink")),r}function l(t){function n(e,t,n){e.attr(t,n?n:void 0)}function l(e){r.firstChild?r.insert(e,r.firstChild):r.append(e)}var a,r,o,c,u,f=e.dom;a=i(),r=a.getAll("head")[0],r||(c=a.getAll("html")[0],r=new m("head",1),c.firstChild?c.insert(r,c.firstChild,!0):c.append(r)),c=a.firstChild,t.xml_pi?(u='version="1.0"',t.docencoding&&(u+=' encoding="'+t.docencoding+'"'),7!=c.type&&(c=new m("xml",7),a.insert(c,a.firstChild,!0)),c.value=u):c&&7==c.type&&c.remove(),c=a.getAll("#doctype")[0],t.doctype?(c||(c=new m("#doctype",10),t.xml_pi?a.insert(c,a.firstChild):l(c)),c.value=t.doctype.substring(9,t.doctype.length-1)):c&&c.remove(),t.docencoding&&(c=null,s(a.getAll("meta"),function(e){"Content-Type"==e.attr("http-equiv")&&(c=e)}),c||(c=new m("meta",1),c.attr("http-equiv","Content-Type"),c.shortEnded=!0,l(c)),c.attr("content","text/html; charset="+t.docencoding)),c=a.getAll("title")[0],t.title?c||(c=new m("title",1),c.append(new m("#text",3)).value=t.title,l(c)):c&&c.remove(),s("keywords,description,author,copyright,robots".split(","),function(e){var n,i,r=a.getAll("meta"),o=t[e];for(n=0;n"))}function i(){return new tinymce.html.DomParser({validate:!1,root_name:"#document"}).parse(d)}function a(t){function n(e){return e.replace(/<\/?[A-Z]+/g,function(e){return e.toLowerCase()})}var l,a,o,m,u=t.content,f="",g=e.dom;if(!t.selection&&!("raw"==t.format&&d||t.source_view&&e.getParam("fullpage_hide_in_source_view"))){u=u.replace(/<(\/?)BODY/gi,"<$1body"),l=u.indexOf("",l),d=n(u.substring(0,l+1)),a=u.indexOf("\n"),o=i(),s(o.getAll("style"),function(e){e.firstChild&&(f+=e.firstChild.value)}),m=o.getAll("body")[0],m&&g.setAttribs(e.getBody(),{style:m.attr("style")||"",dir:m.attr("dir")||"",vLink:m.attr("vlink")||"",link:m.attr("link")||"",aLink:m.attr("alink")||""}),g.remove("fullpage_styles");var y=e.getDoc().getElementsByTagName("head")[0];f&&(g.add(y,"style",{id:"fullpage_styles"},f),m=g.get("fullpage_styles"),m.styleSheet&&(m.styleSheet.cssText=f));var h={};tinymce.each(y.getElementsByTagName("link"),function(e){"stylesheet"==e.rel&&e.getAttribute("data-mce-fullpage")&&(h[e.href]=e)}),tinymce.each(o.getAll("link"),function(e){var t=e.attr("href");h[t]||"stylesheet"!=e.attr("rel")||g.add(y,"link",{rel:"stylesheet",text:"text/css",href:t,"data-mce-fullpage":"1"}),delete h[t]}),tinymce.each(h,function(e){e.parentNode.removeChild(e)})}}function r(){var t,n="",l="";return e.getParam("fullpage_default_xml_pi")&&(n+='\n'),n+=e.getParam("fullpage_default_doctype",""),n+="\n\n\n",(t=e.getParam("fullpage_default_title"))&&(n+=""+t+"\n"),(t=e.getParam("fullpage_default_encoding"))&&(n+='\n'),(t=e.getParam("fullpage_default_font_family"))&&(l+="font-family: "+t+";"),(t=e.getParam("fullpage_default_font_size"))&&(l+="font-size: "+t+";"),(t=e.getParam("fullpage_default_text_color"))&&(l+="color: "+t+";"),n+="\n\n"}function o(t){t.selection||t.source_view&&e.getParam("fullpage_hide_in_source_view")||(t.content=tinymce.trim(d)+"\n"+tinymce.trim(t.content)+"\n"+tinymce.trim(c))}var d,c,s=tinymce.each,m=tinymce.html.Node;e.addCommand("mceFullPageProperties",t),e.addButton("fullpage",{title:"Document properties",cmd:"mceFullPageProperties"}),e.addMenuItem("fullpage",{text:"Document properties",cmd:"mceFullPageProperties",context:"file"}),e.on("BeforeSetContent",a),e.on("GetContent",o)}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/fullscreen/editor_plugin.js b/common/static/js/vendor/tiny_mce/plugins/fullscreen/editor_plugin.js deleted file mode 100644 index a2eb034839..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/fullscreen/editor_plugin.js +++ /dev/null @@ -1 +0,0 @@ -(function(){var a=tinymce.DOM;tinymce.create("tinymce.plugins.FullScreenPlugin",{init:function(d,e){var f=this,g={},c,b;f.editor=d;d.addCommand("mceFullScreen",function(){var i,j=a.doc.documentElement;if(d.getParam("fullscreen_is_enabled")){if(d.getParam("fullscreen_new_window")){closeFullscreen()}else{a.win.setTimeout(function(){tinymce.dom.Event.remove(a.win,"resize",f.resizeFunc);tinyMCE.get(d.getParam("fullscreen_editor_id")).setContent(d.getContent());tinyMCE.remove(d);a.remove("mce_fullscreen_container");j.style.overflow=d.getParam("fullscreen_html_overflow");a.setStyle(a.doc.body,"overflow",d.getParam("fullscreen_overflow"));a.win.scrollTo(d.getParam("fullscreen_scrollx"),d.getParam("fullscreen_scrolly"));tinyMCE.settings=tinyMCE.oldSettings},10)}return}if(d.getParam("fullscreen_new_window")){i=a.win.open(e+"/fullscreen.htm","mceFullScreenPopup","fullscreen=yes,menubar=no,toolbar=no,scrollbars=no,resizable=yes,left=0,top=0,width="+screen.availWidth+",height="+screen.availHeight);try{i.resizeTo(screen.availWidth,screen.availHeight)}catch(h){}}else{tinyMCE.oldSettings=tinyMCE.settings;g.fullscreen_overflow=a.getStyle(a.doc.body,"overflow",1)||"auto";g.fullscreen_html_overflow=a.getStyle(j,"overflow",1);c=a.getViewPort();g.fullscreen_scrollx=c.x;g.fullscreen_scrolly=c.y;if(tinymce.isOpera&&g.fullscreen_overflow=="visible"){g.fullscreen_overflow="auto"}if(tinymce.isIE&&g.fullscreen_overflow=="scroll"){g.fullscreen_overflow="auto"}if(tinymce.isIE&&(g.fullscreen_html_overflow=="visible"||g.fullscreen_html_overflow=="scroll")){g.fullscreen_html_overflow="auto"}if(g.fullscreen_overflow=="0px"){g.fullscreen_overflow=""}a.setStyle(a.doc.body,"overflow","hidden");j.style.overflow="hidden";c=a.getViewPort();a.win.scrollTo(0,0);if(tinymce.isIE){c.h-=1}if(tinymce.isIE6||document.compatMode=="BackCompat"){b="absolute;top:"+c.y}else{b="fixed;top:0"}n=a.add(a.doc.body,"div",{id:"mce_fullscreen_container",style:"position:"+b+";left:0;width:"+c.w+"px;height:"+c.h+"px;z-index:200000;"});a.add(n,"div",{id:"mce_fullscreen"});tinymce.each(d.settings,function(k,l){g[l]=k});g.id="mce_fullscreen";g.width=n.clientWidth;g.height=n.clientHeight-15;g.fullscreen_is_enabled=true;g.fullscreen_editor_id=d.id;g.theme_advanced_resizing=false;g.save_onsavecallback=function(){d.setContent(tinyMCE.get(g.id).getContent());d.execCommand("mceSave")};tinymce.each(d.getParam("fullscreen_settings"),function(m,l){g[l]=m});if(g.theme_advanced_toolbar_location==="external"){g.theme_advanced_toolbar_location="top"}f.fullscreenEditor=new tinymce.Editor("mce_fullscreen",g);f.fullscreenEditor.onInit.add(function(){f.fullscreenEditor.setContent(d.getContent());f.fullscreenEditor.focus()});f.fullscreenEditor.render();f.fullscreenElement=new tinymce.dom.Element("mce_fullscreen_container");f.fullscreenElement.update();f.resizeFunc=tinymce.dom.Event.add(a.win,"resize",function(){var o=tinymce.DOM.getViewPort(),l=f.fullscreenEditor,k,m;k=l.dom.getSize(l.getContainer().getElementsByTagName("table")[0]);m=l.dom.getSize(l.getContainer().getElementsByTagName("iframe")[0]);l.theme.resizeTo(o.w-k.w+m.w,o.h-k.h+m.h)})}});d.addButton("fullscreen",{title:"fullscreen.desc",cmd:"mceFullScreen"});d.onNodeChange.add(function(i,h){h.setActive("fullscreen",i.getParam("fullscreen_is_enabled"))})},getInfo:function(){return{longname:"Fullscreen",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullscreen",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("fullscreen",tinymce.plugins.FullScreenPlugin)})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/fullscreen/editor_plugin_src.js b/common/static/js/vendor/tiny_mce/plugins/fullscreen/editor_plugin_src.js deleted file mode 100644 index a24a95657f..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/fullscreen/editor_plugin_src.js +++ /dev/null @@ -1,159 +0,0 @@ -/** - * editor_plugin_src.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -(function() { - var DOM = tinymce.DOM; - - tinymce.create('tinymce.plugins.FullScreenPlugin', { - init : function(ed, url) { - var t = this, s = {}, vp, posCss; - - t.editor = ed; - - // Register commands - ed.addCommand('mceFullScreen', function() { - var win, de = DOM.doc.documentElement; - - if (ed.getParam('fullscreen_is_enabled')) { - if (ed.getParam('fullscreen_new_window')) - closeFullscreen(); // Call to close in new window - else { - DOM.win.setTimeout(function() { - tinymce.dom.Event.remove(DOM.win, 'resize', t.resizeFunc); - tinyMCE.get(ed.getParam('fullscreen_editor_id')).setContent(ed.getContent()); - tinyMCE.remove(ed); - DOM.remove('mce_fullscreen_container'); - de.style.overflow = ed.getParam('fullscreen_html_overflow'); - DOM.setStyle(DOM.doc.body, 'overflow', ed.getParam('fullscreen_overflow')); - DOM.win.scrollTo(ed.getParam('fullscreen_scrollx'), ed.getParam('fullscreen_scrolly')); - tinyMCE.settings = tinyMCE.oldSettings; // Restore old settings - }, 10); - } - - return; - } - - if (ed.getParam('fullscreen_new_window')) { - win = DOM.win.open(url + "/fullscreen.htm", "mceFullScreenPopup", "fullscreen=yes,menubar=no,toolbar=no,scrollbars=no,resizable=yes,left=0,top=0,width=" + screen.availWidth + ",height=" + screen.availHeight); - try { - win.resizeTo(screen.availWidth, screen.availHeight); - } catch (e) { - // Ignore - } - } else { - tinyMCE.oldSettings = tinyMCE.settings; // Store old settings - s.fullscreen_overflow = DOM.getStyle(DOM.doc.body, 'overflow', 1) || 'auto'; - s.fullscreen_html_overflow = DOM.getStyle(de, 'overflow', 1); - vp = DOM.getViewPort(); - s.fullscreen_scrollx = vp.x; - s.fullscreen_scrolly = vp.y; - - // Fixes an Opera bug where the scrollbars doesn't reappear - if (tinymce.isOpera && s.fullscreen_overflow == 'visible') - s.fullscreen_overflow = 'auto'; - - // Fixes an IE bug where horizontal scrollbars would appear - if (tinymce.isIE && s.fullscreen_overflow == 'scroll') - s.fullscreen_overflow = 'auto'; - - // Fixes an IE bug where the scrollbars doesn't reappear - if (tinymce.isIE && (s.fullscreen_html_overflow == 'visible' || s.fullscreen_html_overflow == 'scroll')) - s.fullscreen_html_overflow = 'auto'; - - if (s.fullscreen_overflow == '0px') - s.fullscreen_overflow = ''; - - DOM.setStyle(DOM.doc.body, 'overflow', 'hidden'); - de.style.overflow = 'hidden'; //Fix for IE6/7 - vp = DOM.getViewPort(); - DOM.win.scrollTo(0, 0); - - if (tinymce.isIE) - vp.h -= 1; - - // Use fixed position if it exists - if (tinymce.isIE6 || document.compatMode == 'BackCompat') - posCss = 'absolute;top:' + vp.y; - else - posCss = 'fixed;top:0'; - - n = DOM.add(DOM.doc.body, 'div', { - id : 'mce_fullscreen_container', - style : 'position:' + posCss + ';left:0;width:' + vp.w + 'px;height:' + vp.h + 'px;z-index:200000;'}); - DOM.add(n, 'div', {id : 'mce_fullscreen'}); - - tinymce.each(ed.settings, function(v, n) { - s[n] = v; - }); - - s.id = 'mce_fullscreen'; - s.width = n.clientWidth; - s.height = n.clientHeight - 15; - s.fullscreen_is_enabled = true; - s.fullscreen_editor_id = ed.id; - s.theme_advanced_resizing = false; - s.save_onsavecallback = function() { - ed.setContent(tinyMCE.get(s.id).getContent()); - ed.execCommand('mceSave'); - }; - - tinymce.each(ed.getParam('fullscreen_settings'), function(v, k) { - s[k] = v; - }); - - if (s.theme_advanced_toolbar_location === 'external') - s.theme_advanced_toolbar_location = 'top'; - - t.fullscreenEditor = new tinymce.Editor('mce_fullscreen', s); - t.fullscreenEditor.onInit.add(function() { - t.fullscreenEditor.setContent(ed.getContent()); - t.fullscreenEditor.focus(); - }); - - t.fullscreenEditor.render(); - - t.fullscreenElement = new tinymce.dom.Element('mce_fullscreen_container'); - t.fullscreenElement.update(); - //document.body.overflow = 'hidden'; - - t.resizeFunc = tinymce.dom.Event.add(DOM.win, 'resize', function() { - var vp = tinymce.DOM.getViewPort(), fed = t.fullscreenEditor, outerSize, innerSize; - - // Get outer/inner size to get a delta size that can be used to calc the new iframe size - outerSize = fed.dom.getSize(fed.getContainer().getElementsByTagName('table')[0]); - innerSize = fed.dom.getSize(fed.getContainer().getElementsByTagName('iframe')[0]); - - fed.theme.resizeTo(vp.w - outerSize.w + innerSize.w, vp.h - outerSize.h + innerSize.h); - }); - } - }); - - // Register buttons - ed.addButton('fullscreen', {title : 'fullscreen.desc', cmd : 'mceFullScreen'}); - - ed.onNodeChange.add(function(ed, cm) { - cm.setActive('fullscreen', ed.getParam('fullscreen_is_enabled')); - }); - }, - - getInfo : function() { - return { - longname : 'Fullscreen', - author : 'Moxiecode Systems AB', - authorurl : 'http://tinymce.moxiecode.com', - infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullscreen', - version : tinymce.majorVersion + "." + tinymce.minorVersion - }; - } - }); - - // Register plugin - tinymce.PluginManager.add('fullscreen', tinymce.plugins.FullScreenPlugin); -})(); diff --git a/common/static/js/vendor/tiny_mce/plugins/fullscreen/fullscreen.htm b/common/static/js/vendor/tiny_mce/plugins/fullscreen/fullscreen.htm deleted file mode 100644 index 496a2f6293..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/fullscreen/fullscreen.htm +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - - - - -
- -
- - - - - diff --git a/common/static/js/vendor/tiny_mce/plugins/fullscreen/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/fullscreen/plugin.min.js new file mode 100644 index 0000000000..1bb1940dd9 --- /dev/null +++ b/common/static/js/vendor/tiny_mce/plugins/fullscreen/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("fullscreen",function(e){function t(){var e,t,n=window,i=document,l=i.body;return l.offsetWidth&&(e=l.offsetWidth,t=l.offsetHeight),n.innerWidth&&n.innerHeight&&(e=n.innerWidth,t=n.innerHeight),{w:e,h:t}}function n(){function n(){d.setStyle(a,"height",t().h-(h.clientHeight-a.clientHeight))}var u,h,a,f,m=document.body,g=document.documentElement;s=!s,h=e.getContainer(),u=h.style,a=e.getContentAreaContainer().firstChild,f=a.style,s?(i=f.width,l=f.height,f.width=f.height="100%",c=u.width,o=u.height,u.width=u.height="",d.addClass(m,"mce-fullscreen"),d.addClass(g,"mce-fullscreen"),d.addClass(h,"mce-fullscreen"),d.bind(window,"resize",n),n(),r=n):(f.width=i,f.height=l,c&&(u.width=c),o&&(u.height=o),d.removeClass(m,"mce-fullscreen"),d.removeClass(g,"mce-fullscreen"),d.removeClass(h,"mce-fullscreen"),d.unbind(window,"resize",r)),e.fire("FullscreenStateChanged",{state:s})}var i,l,r,c,o,s=!1,d=tinymce.DOM;return e.settings.inline?void 0:(e.on("init",function(){e.addShortcut("Ctrl+Alt+F","",n)}),e.on("remove",function(){r&&d.unbind(window,"resize",r)}),e.addCommand("mceFullScreen",n),e.addMenuItem("fullscreen",{text:"Fullscreen",shortcut:"Ctrl+Alt+F",selectable:!0,onClick:n,onPostRender:function(){var t=this;e.on("FullscreenStateChanged",function(e){t.active(e.state)})},context:"view"}),e.addButton("fullscreen",{tooltip:"Fullscreen",shortcut:"Ctrl+Alt+F",onClick:n,onPostRender:function(){var t=this;e.on("FullscreenStateChanged",function(e){t.active(e.state)})}}),{isFullscreen:function(){return s}})}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/hr/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/hr/plugin.min.js new file mode 100644 index 0000000000..ca36c92751 --- /dev/null +++ b/common/static/js/vendor/tiny_mce/plugins/hr/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("hr",function(e){e.addCommand("InsertHorizontalRule",function(){e.execCommand("mceInsertContent",!1,"
")}),e.addButton("hr",{icon:"hr",tooltip:"Horizontal line",cmd:"InsertHorizontalRule"}),e.addMenuItem("hr",{icon:"hr",text:"Horizontal line",cmd:"InsertHorizontalRule",context:"insert"})}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/iespell/editor_plugin.js b/common/static/js/vendor/tiny_mce/plugins/iespell/editor_plugin.js deleted file mode 100644 index e9cba106c6..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/iespell/editor_plugin.js +++ /dev/null @@ -1 +0,0 @@ -(function(){tinymce.create("tinymce.plugins.IESpell",{init:function(a,b){var c=this,d;if(!tinymce.isIE){return}c.editor=a;a.addCommand("mceIESpell",function(){try{d=new ActiveXObject("ieSpell.ieSpellExtension");d.CheckDocumentNode(a.getDoc().documentElement)}catch(f){if(f.number==-2146827859){a.windowManager.confirm(a.getLang("iespell.download"),function(e){if(e){window.open("http://www.iespell.com/download.php","ieSpellDownload","")}})}else{a.windowManager.alert("Error Loading ieSpell: Exception "+f.number)}}});a.addButton("iespell",{title:"iespell.iespell_desc",cmd:"mceIESpell"})},getInfo:function(){return{longname:"IESpell (IE Only)",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/iespell",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("iespell",tinymce.plugins.IESpell)})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/iespell/editor_plugin_src.js b/common/static/js/vendor/tiny_mce/plugins/iespell/editor_plugin_src.js deleted file mode 100644 index 61edf1e23d..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/iespell/editor_plugin_src.js +++ /dev/null @@ -1,54 +0,0 @@ -/** - * editor_plugin_src.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -(function() { - tinymce.create('tinymce.plugins.IESpell', { - init : function(ed, url) { - var t = this, sp; - - if (!tinymce.isIE) - return; - - t.editor = ed; - - // Register commands - ed.addCommand('mceIESpell', function() { - try { - sp = new ActiveXObject("ieSpell.ieSpellExtension"); - sp.CheckDocumentNode(ed.getDoc().documentElement); - } catch (e) { - if (e.number == -2146827859) { - ed.windowManager.confirm(ed.getLang("iespell.download"), function(s) { - if (s) - window.open('http://www.iespell.com/download.php', 'ieSpellDownload', ''); - }); - } else - ed.windowManager.alert("Error Loading ieSpell: Exception " + e.number); - } - }); - - // Register buttons - ed.addButton('iespell', {title : 'iespell.iespell_desc', cmd : 'mceIESpell'}); - }, - - getInfo : function() { - return { - longname : 'IESpell (IE Only)', - author : 'Moxiecode Systems AB', - authorurl : 'http://tinymce.moxiecode.com', - infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/iespell', - version : tinymce.majorVersion + "." + tinymce.minorVersion - }; - } - }); - - // Register plugin - tinymce.PluginManager.add('iespell', tinymce.plugins.IESpell); -})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/image/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/image/plugin.min.js new file mode 100644 index 0000000000..fb8ee8fd7f --- /dev/null +++ b/common/static/js/vendor/tiny_mce/plugins/image/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("image",function(e){function t(e,t){function n(e,n){i.parentNode&&i.parentNode.removeChild(i),t({width:e,height:n})}var i=document.createElement("img");i.onload=function(){n(i.clientWidth,i.clientHeight)},i.onerror=function(){n()};var a=i.style;a.visibility="hidden",a.position="fixed",a.bottom=a.left=0,a.width=a.height="auto",document.body.appendChild(i),i.src=e}function n(t){return function(){var n=e.settings.image_list;"string"==typeof n?tinymce.util.XHR.send({url:n,success:function(e){t(tinymce.util.JSON.parse(e))}}):t(n)}}function i(n){function i(){var t=[{text:"None",value:""}];return tinymce.each(n,function(n){t.push({text:n.text||n.title,value:e.convertURL(n.value||n.url,"src"),menu:n.menu})}),t}function a(){var e,t,n,i;e=s.find("#width")[0],t=s.find("#height")[0],n=e.value(),i=t.value(),s.find("#constrain")[0].checked()&&d&&u&&n&&i&&(d!=n?(i=Math.round(n/d*i),t.value(i)):(n=Math.round(i/u*n),e.value(n))),d=n,u=i}function o(){function t(t){function i(){t.onload=t.onerror=null,e.selection.select(t),e.nodeChanged()}t.onload=function(){n.width||n.height||m.setAttribs(t,{width:t.clientWidth,height:t.clientHeight}),i()},t.onerror=i}c(),a();var n=s.toJSON();""===n.width&&(n.width=null),""===n.height&&(n.height=null),""===n.style&&(n.style=null),n={src:n.src,alt:n.alt,width:n.width,height:n.height,style:n.style},e.fire('SaveImage', n),e.undoManager.transact(function(){return n.src?(p?m.setAttribs(p,n):(n.id="__mcenew",e.focus(),e.selection.setContent(m.createHTML("img",n)),p=m.get("__mcenew"),m.setAttrib(p,"id",null)),void t(p)):void(p&&(m.remove(p),e.nodeChanged()))})}function l(e){return e&&(e=e.replace(/px$/,"")),e}function r(){h&&h.value(e.convertURL(this.value(),"src")),t(this.value(),function(e){e.width&&e.height&&(d=e.width,u=e.height,s.find("#width").value(d),s.find("#height").value(u))})}function c(){function t(e){return e.length>0&&/^[0-9]+$/.test(e)&&(e+="px"),e}if(e.settings.image_advtab){var n=s.toJSON(),i=m.parseStyle(n.style);delete i.margin,i["margin-top"]=i["margin-bottom"]=t(n.vspace),i["margin-left"]=i["margin-right"]=t(n.hspace),i["border-width"]=t(n.border),s.find("#style").value(m.serializeStyle(m.parseStyle(m.serializeStyle(i))))}}var s,d,u,h,g={},m=e.dom,p=e.selection.getNode();d=m.getAttrib(p,"width"),u=m.getAttrib(p,"height"),"IMG"!=p.nodeName||p.getAttribute("data-mce-object")||p.getAttribute("data-mce-placeholder")?p=null:g={src:m.getAttrib(p,"src"),alt:m.getAttrib(p,"alt"),width:d,height:u},n&&(h={type:"listbox",label:"Image list",values:i(),value:g.src&&e.convertURL(g.src,"src"),onselect:function(e){var t=s.find("#alt");(!t.value()||e.lastControl&&t.value()==e.lastControl.text())&&t.value(e.control.text()),s.find("#src").value(e.control.value())},onPostRender:function(){h=this}});var y=[{name:"src",type:"filepicker",filetype:"image",label:"Source",autofocus:!0,onchange:r},h,{name:"alt",type:"textbox",label:"Image description"},{type:"container",label:"Dimensions",layout:"flex",direction:"row",align:"center",spacing:5,items:[{name:"width",type:"textbox",maxLength:5,size:3,onchange:a},{type:"label",text:"x"},{name:"height",type:"textbox",maxLength:5,size:3,onchange:a},{name:"constrain",type:"checkbox",checked:!0,text:"Constrain proportions"}]}];e.fire('EditImage', g),e.settings.image_advtab?(p&&(g.hspace=l(p.style.marginLeft||p.style.marginRight),g.vspace=l(p.style.marginTop||p.style.marginBottom),g.border=l(p.style.borderWidth),g.style=e.dom.serializeStyle(e.dom.parseStyle(e.dom.getAttrib(p,"style")))),s=e.windowManager.open({title:"Insert/edit image",data:g,bodyType:"tabpanel",body:[{title:"General",type:"form",items:y},{title:"Advanced",type:"form",pack:"start",items:[{label:"Style",name:"style",type:"textbox"},{type:"form",layout:"grid",packV:"start",columns:2,padding:0,alignH:["left","right"],defaults:{type:"textbox",maxWidth:50,onchange:c},items:[{label:"Vertical space",name:"vspace"},{label:"Horizontal space",name:"hspace"},{label:"Border",name:"border"}]}]}],onSubmit:o})):s=e.windowManager.open({title:"Insert/edit image",data:g,body:y,onSubmit:o})}e.addButton("image",{icon:"image",tooltip:"Insert/edit image",onclick:n(i),stateSelector:"img:not([data-mce-object],[data-mce-placeholder])"}),e.addMenuItem("image",{icon:"image",text:"Insert image",onclick:n(i),context:"insert",prependToContext:!0})}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/importcss/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/importcss/plugin.min.js new file mode 100644 index 0000000000..ab38e3959d --- /dev/null +++ b/common/static/js/vendor/tiny_mce/plugins/importcss/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("importcss",function(t){function e(t){return"string"==typeof t?function(e){return-1!==e.indexOf(t)}:t instanceof RegExp?function(e){return t.test(e)}:t}function n(e,n){function i(t,e){var o,l=t.href;if((e||c[l])&&(!n||n(l))){s(t.imports,function(t){i(t,!0)});try{o=t.cssRules||t.rules}catch(a){}s(o,function(t){t.styleSheet?i(t.styleSheet,!0):t.selectorText&&s(t.selectorText.split(","),function(t){r.push(tinymce.trim(t))})})}}var r=[],c={};s(t.contentCSS,function(t){c[t]=!0});try{s(e.styleSheets,function(t){i(t)})}catch(o){}return r}function i(e){var n,i=/^(?:([a-z0-9\-_]+))?(\.[a-z0-9_\-\.]+)$/i.exec(e);if(i){var r=i[1],s=i[2].substr(1).split(".").join(" "),c=tinymce.makeMap("a,img");return i[1]?(n={title:e},t.schema.getTextBlockElements()[r]?n.block=r:t.schema.getBlockElements()[r]||c[r.toLowerCase()]?n.selector=r:n.inline=r):i[2]&&(n={inline:"span",title:e.substr(1),classes:s}),t.settings.importcss_merge_classes!==!1?n.classes=s:n.attributes={"class":s},n}}var r=this,s=tinymce.each;t.on("renderFormatsMenu",function(c){var o=t.settings,l={},a=o.importcss_selector_converter||i,m=e(o.importcss_selector_filter);t.settings.importcss_append||c.control.items().remove();var f=[];tinymce.each(o.importcss_groups,function(t){t=tinymce.extend({},t),t.filter=e(t.filter),f.push(t)}),s(n(t.getDoc(),e(o.importcss_file_filter)),function(e){if(-1===e.indexOf(".mce-")&&!l[e]&&(!m||m(e))){var n,i=a.call(r,e);if(i){var s=i.name||tinymce.DOM.uniqueId();if(f)for(var o=0;o"));a.add(i,"keyup",function(f){var p=27;if(f.keyCode===p){s.button_func(false);return a.cancel(f)}});a.add(i,"keydown",function(f){var t,p=9;if(f.keyCode===p){t=d.select("a.mceCancel",i+"_wrapper")[0];if(t&&t!==f.target){t.focus()}else{d.get(i+"_ok").focus()}return a.cancel(f)}})}o=a.add(i,"mousedown",function(t){var u=t.target,f,p;f=z.windows[i];z.focus(i);if(u.nodeName=="A"||u.nodeName=="a"){if(u.className=="mceClose"){z.close(null,i);return a.cancel(t)}else{if(u.className=="mceMax"){f.oldPos=f.element.getXY();f.oldSize=f.element.getSize();p=d.getViewPort();p.w-=2;p.h-=2;f.element.moveTo(p.x,p.y);f.element.resizeTo(p.w,p.h);d.setStyles(i+"_ifr",{width:p.w-f.deltaWidth,height:p.h-f.deltaHeight});d.addClass(i+"_wrapper","mceMaximized")}else{if(u.className=="mceMed"){f.element.moveTo(f.oldPos.x,f.oldPos.y);f.element.resizeTo(f.oldSize.w,f.oldSize.h);f.iframeElement.resizeTo(f.oldSize.w-f.deltaWidth,f.oldSize.h-f.deltaHeight);d.removeClass(i+"_wrapper","mceMaximized")}else{if(u.className=="mceMove"){return z._startDrag(i,t,u.className)}else{if(d.hasClass(u,"mceResize")){return z._startDrag(i,t,u.className.substring(13))}}}}}}});q=a.add(i,"click",function(f){var p=f.target;z.focus(i);if(p.nodeName=="A"||p.nodeName=="a"){switch(p.className){case"mceClose":z.close(null,i);return a.cancel(f);case"mceButton mceOk":case"mceButton mceCancel":s.button_func(p.className=="mceButton mceOk");return a.cancel(f)}}});a.add([i+"_left",i+"_right"],"focus",function(p){var t=d.get(i+"_ifr");if(t){var f=t.contentWindow.document.body;var u=d.select(":input:enabled,*[tabindex=0]",f);if(p.target.id===(i+"_left")){u[u.length-1].focus()}else{u[0].focus()}}else{d.get(i+"_ok").focus()}});x=z.windows[i]={id:i,mousedown_func:o,click_func:q,element:new b(i,{blocker:1,container:r.getContainer()}),iframeElement:new b(i+"_ifr"),features:s,deltaWidth:g,deltaHeight:v};x.iframeElement.on("focus",function(){z.focus(i)});if(z.count==0&&z.editor.getParam("dialog_type","modal")=="modal"){d.add(d.doc.body,"div",{id:"mceModalBlocker","class":(z.editor.settings.inlinepopups_skin||"clearlooks2")+"_modalBlocker",style:{zIndex:z.zIndex-1}});d.show("mceModalBlocker");d.setAttrib(d.doc.body,"aria-hidden","true")}else{d.setStyle("mceModalBlocker","z-index",z.zIndex-1)}if(tinymce.isIE6||/Firefox\/2\./.test(navigator.userAgent)||(tinymce.isIE&&!d.boxModel)){d.setStyles("mceModalBlocker",{position:"absolute",left:h.x,top:h.y,width:h.w-2,height:h.h-2})}d.setAttrib(i,"aria-hidden","false");z.focus(i);z._fixIELayout(i,1);if(d.get(i+"_ok")){d.get(i+"_ok").focus()}z.count++;return x},focus:function(h){var g=this,f;if(f=g.windows[h]){f.zIndex=this.zIndex++;f.element.setStyle("zIndex",f.zIndex);f.element.update();h=h+"_wrapper";d.removeClass(g.lastId,"mceFocus");d.addClass(h,"mceFocus");g.lastId=h;if(f.focussedElement){f.focussedElement.focus()}else{if(d.get(h+"_ok")){d.get(f.id+"_ok").focus()}else{if(d.get(f.id+"_ifr")){d.get(f.id+"_ifr").focus()}}}}},_addAll:function(k,h){var g,l,f=this,j=tinymce.DOM;if(c(h,"string")){k.appendChild(j.doc.createTextNode(h))}else{if(h.length){k=k.appendChild(j.create(h[0],h[1]));for(g=2;gf){g=h;f=h.zIndex}});return g},setTitle:function(f,g){var h;f=this._findId(f);if(h=d.get(f+"_title")){h.innerHTML=d.encode(g)}},alert:function(g,f,j){var i=this,h;h=i.open({title:i,type:"alert",button_func:function(k){if(f){f.call(k||i,k)}i.close(null,h.id)},content:d.encode(i.editor.getLang(g,g)),inline:1,width:400,height:130})},confirm:function(g,f,j){var i=this,h;h=i.open({title:i,type:"confirm",button_func:function(k){if(f){f.call(k||i,k)}i.close(null,h.id)},content:d.encode(i.editor.getLang(g,g)),inline:1,width:400,height:130})},_findId:function(f){var g=this;if(typeof(f)=="string"){return f}e(g.windows,function(h){var i=d.get(h.id+"_ifr");if(i&&f==i.contentWindow){f=h.id;return false}});return f},_fixIELayout:function(i,h){var f,g;if(!tinymce.isIE6){return}e(["n","s","w","e","nw","ne","sw","se"],function(j){var k=d.get(i+"_resize_"+j);d.setStyles(k,{width:h?k.clientWidth:"",height:h?k.clientHeight:"",cursor:d.getStyle(k,"cursor",1)});d.setStyle(i+"_bottom","bottom","-1px");k=0});if(f=this.windows[i]){f.element.hide();f.element.show();e(d.select("div,a",i),function(k,j){if(k.currentStyle.backgroundImage!="none"){g=new Image();g.src=k.currentStyle.backgroundImage.replace(/url\(\"(.+)\"\)/,"$1")}});d.get(i).style.filter=""}}});tinymce.PluginManager.add("inlinepopups",tinymce.plugins.InlinePopups)})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/inlinepopups/editor_plugin_src.js b/common/static/js/vendor/tiny_mce/plugins/inlinepopups/editor_plugin_src.js deleted file mode 100644 index 2a6f3ad299..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/inlinepopups/editor_plugin_src.js +++ /dev/null @@ -1,699 +0,0 @@ -/** - * editor_plugin_src.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -(function() { - var DOM = tinymce.DOM, Element = tinymce.dom.Element, Event = tinymce.dom.Event, each = tinymce.each, is = tinymce.is; - - tinymce.create('tinymce.plugins.InlinePopups', { - init : function(ed, url) { - // Replace window manager - ed.onBeforeRenderUI.add(function() { - ed.windowManager = new tinymce.InlineWindowManager(ed); - DOM.loadCSS(url + '/skins/' + (ed.settings.inlinepopups_skin || 'clearlooks2') + "/window.css"); - }); - }, - - getInfo : function() { - return { - longname : 'InlinePopups', - author : 'Moxiecode Systems AB', - authorurl : 'http://tinymce.moxiecode.com', - infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/inlinepopups', - version : tinymce.majorVersion + "." + tinymce.minorVersion - }; - } - }); - - tinymce.create('tinymce.InlineWindowManager:tinymce.WindowManager', { - InlineWindowManager : function(ed) { - var t = this; - - t.parent(ed); - t.zIndex = 300000; - t.count = 0; - t.windows = {}; - }, - - open : function(f, p) { - var t = this, id, opt = '', ed = t.editor, dw = 0, dh = 0, vp, po, mdf, clf, we, w, u, parentWindow; - - f = f || {}; - p = p || {}; - - // Run native windows - if (!f.inline) - return t.parent(f, p); - - parentWindow = t._frontWindow(); - if (parentWindow && DOM.get(parentWindow.id + '_ifr')) { - parentWindow.focussedElement = DOM.get(parentWindow.id + '_ifr').contentWindow.document.activeElement; - } - - // Only store selection if the type is a normal window - if (!f.type) - t.bookmark = ed.selection.getBookmark(1); - - id = DOM.uniqueId(); - vp = DOM.getViewPort(); - f.width = parseInt(f.width || 320); - f.height = parseInt(f.height || 240) + (tinymce.isIE ? 8 : 0); - f.min_width = parseInt(f.min_width || 150); - f.min_height = parseInt(f.min_height || 100); - f.max_width = parseInt(f.max_width || 2000); - f.max_height = parseInt(f.max_height || 2000); - f.left = f.left || Math.round(Math.max(vp.x, vp.x + (vp.w / 2.0) - (f.width / 2.0))); - f.top = f.top || Math.round(Math.max(vp.y, vp.y + (vp.h / 2.0) - (f.height / 2.0))); - f.movable = f.resizable = true; - p.mce_width = f.width; - p.mce_height = f.height; - p.mce_inline = true; - p.mce_window_id = id; - p.mce_auto_focus = f.auto_focus; - - // Transpose -// po = DOM.getPos(ed.getContainer()); -// f.left -= po.x; -// f.top -= po.y; - - t.features = f; - t.params = p; - t.onOpen.dispatch(t, f, p); - - if (f.type) { - opt += ' mceModal'; - - if (f.type) - opt += ' mce' + f.type.substring(0, 1).toUpperCase() + f.type.substring(1); - - f.resizable = false; - } - - if (f.statusbar) - opt += ' mceStatusbar'; - - if (f.resizable) - opt += ' mceResizable'; - - if (f.minimizable) - opt += ' mceMinimizable'; - - if (f.maximizable) - opt += ' mceMaximizable'; - - if (f.movable) - opt += ' mceMovable'; - - // Create DOM objects - t._addAll(DOM.doc.body, - ['div', {id : id, role : 'dialog', 'aria-labelledby': f.type ? id + '_content' : id + '_title', 'class' : (ed.settings.inlinepopups_skin || 'clearlooks2') + (tinymce.isIE && window.getSelection ? ' ie9' : ''), style : 'width:100px;height:100px'}, - ['div', {id : id + '_wrapper', 'class' : 'mceWrapper' + opt}, - ['div', {id : id + '_top', 'class' : 'mceTop'}, - ['div', {'class' : 'mceLeft'}], - ['div', {'class' : 'mceCenter'}], - ['div', {'class' : 'mceRight'}], - ['span', {id : id + '_title'}, f.title || ''] - ], - - ['div', {id : id + '_middle', 'class' : 'mceMiddle'}, - ['div', {id : id + '_left', 'class' : 'mceLeft', tabindex : '0'}], - ['span', {id : id + '_content'}], - ['div', {id : id + '_right', 'class' : 'mceRight', tabindex : '0'}] - ], - - ['div', {id : id + '_bottom', 'class' : 'mceBottom'}, - ['div', {'class' : 'mceLeft'}], - ['div', {'class' : 'mceCenter'}], - ['div', {'class' : 'mceRight'}], - ['span', {id : id + '_status'}, 'Content'] - ], - - ['a', {'class' : 'mceMove', tabindex : '-1', href : 'javascript:;'}], - ['a', {'class' : 'mceMin', tabindex : '-1', href : 'javascript:;', onmousedown : 'return false;'}], - ['a', {'class' : 'mceMax', tabindex : '-1', href : 'javascript:;', onmousedown : 'return false;'}], - ['a', {'class' : 'mceMed', tabindex : '-1', href : 'javascript:;', onmousedown : 'return false;'}], - ['a', {'class' : 'mceClose', tabindex : '-1', href : 'javascript:;', onmousedown : 'return false;'}], - ['a', {id : id + '_resize_n', 'class' : 'mceResize mceResizeN', tabindex : '-1', href : 'javascript:;'}], - ['a', {id : id + '_resize_s', 'class' : 'mceResize mceResizeS', tabindex : '-1', href : 'javascript:;'}], - ['a', {id : id + '_resize_w', 'class' : 'mceResize mceResizeW', tabindex : '-1', href : 'javascript:;'}], - ['a', {id : id + '_resize_e', 'class' : 'mceResize mceResizeE', tabindex : '-1', href : 'javascript:;'}], - ['a', {id : id + '_resize_nw', 'class' : 'mceResize mceResizeNW', tabindex : '-1', href : 'javascript:;'}], - ['a', {id : id + '_resize_ne', 'class' : 'mceResize mceResizeNE', tabindex : '-1', href : 'javascript:;'}], - ['a', {id : id + '_resize_sw', 'class' : 'mceResize mceResizeSW', tabindex : '-1', href : 'javascript:;'}], - ['a', {id : id + '_resize_se', 'class' : 'mceResize mceResizeSE', tabindex : '-1', href : 'javascript:;'}] - ] - ] - ); - - DOM.setStyles(id, {top : -10000, left : -10000}); - - // Fix gecko rendering bug, where the editors iframe messed with window contents - if (tinymce.isGecko) - DOM.setStyle(id, 'overflow', 'auto'); - - // Measure borders - if (!f.type) { - dw += DOM.get(id + '_left').clientWidth; - dw += DOM.get(id + '_right').clientWidth; - dh += DOM.get(id + '_top').clientHeight; - dh += DOM.get(id + '_bottom').clientHeight; - } - - // Resize window - DOM.setStyles(id, {top : f.top, left : f.left, width : f.width + dw, height : f.height + dh}); - - u = f.url || f.file; - if (u) { - if (tinymce.relaxedDomain) - u += (u.indexOf('?') == -1 ? '?' : '&') + 'mce_rdomain=' + tinymce.relaxedDomain; - - u = tinymce._addVer(u); - } - - if (!f.type) { - DOM.add(id + '_content', 'iframe', {id : id + '_ifr', src : 'javascript:""', frameBorder : 0, style : 'border:0;width:10px;height:10px'}); - DOM.setStyles(id + '_ifr', {width : f.width, height : f.height}); - DOM.setAttrib(id + '_ifr', 'src', u); - } else { - DOM.add(id + '_wrapper', 'a', {id : id + '_ok', 'class' : 'mceButton mceOk', href : 'javascript:;', onmousedown : 'return false;'}, 'Ok'); - - if (f.type == 'confirm') - DOM.add(id + '_wrapper', 'a', {'class' : 'mceButton mceCancel', href : 'javascript:;', onmousedown : 'return false;'}, 'Cancel'); - - DOM.add(id + '_middle', 'div', {'class' : 'mceIcon'}); - DOM.setHTML(id + '_content', f.content.replace('\n', '
')); - - Event.add(id, 'keyup', function(evt) { - var VK_ESCAPE = 27; - if (evt.keyCode === VK_ESCAPE) { - f.button_func(false); - return Event.cancel(evt); - } - }); - - Event.add(id, 'keydown', function(evt) { - var cancelButton, VK_TAB = 9; - if (evt.keyCode === VK_TAB) { - cancelButton = DOM.select('a.mceCancel', id + '_wrapper')[0]; - if (cancelButton && cancelButton !== evt.target) { - cancelButton.focus(); - } else { - DOM.get(id + '_ok').focus(); - } - return Event.cancel(evt); - } - }); - } - - // Register events - mdf = Event.add(id, 'mousedown', function(e) { - var n = e.target, w, vp; - - w = t.windows[id]; - t.focus(id); - - if (n.nodeName == 'A' || n.nodeName == 'a') { - if (n.className == 'mceClose') { - t.close(null, id); - return Event.cancel(e); - } else if (n.className == 'mceMax') { - w.oldPos = w.element.getXY(); - w.oldSize = w.element.getSize(); - - vp = DOM.getViewPort(); - - // Reduce viewport size to avoid scrollbars - vp.w -= 2; - vp.h -= 2; - - w.element.moveTo(vp.x, vp.y); - w.element.resizeTo(vp.w, vp.h); - DOM.setStyles(id + '_ifr', {width : vp.w - w.deltaWidth, height : vp.h - w.deltaHeight}); - DOM.addClass(id + '_wrapper', 'mceMaximized'); - } else if (n.className == 'mceMed') { - // Reset to old size - w.element.moveTo(w.oldPos.x, w.oldPos.y); - w.element.resizeTo(w.oldSize.w, w.oldSize.h); - w.iframeElement.resizeTo(w.oldSize.w - w.deltaWidth, w.oldSize.h - w.deltaHeight); - - DOM.removeClass(id + '_wrapper', 'mceMaximized'); - } else if (n.className == 'mceMove') - return t._startDrag(id, e, n.className); - else if (DOM.hasClass(n, 'mceResize')) - return t._startDrag(id, e, n.className.substring(13)); - } - }); - - clf = Event.add(id, 'click', function(e) { - var n = e.target; - - t.focus(id); - - if (n.nodeName == 'A' || n.nodeName == 'a') { - switch (n.className) { - case 'mceClose': - t.close(null, id); - return Event.cancel(e); - - case 'mceButton mceOk': - case 'mceButton mceCancel': - f.button_func(n.className == 'mceButton mceOk'); - return Event.cancel(e); - } - } - }); - - // Make sure the tab order loops within the dialog. - Event.add([id + '_left', id + '_right'], 'focus', function(evt) { - var iframe = DOM.get(id + '_ifr'); - if (iframe) { - var body = iframe.contentWindow.document.body; - var focusable = DOM.select(':input:enabled,*[tabindex=0]', body); - if (evt.target.id === (id + '_left')) { - focusable[focusable.length - 1].focus(); - } else { - focusable[0].focus(); - } - } else { - DOM.get(id + '_ok').focus(); - } - }); - - // Add window - w = t.windows[id] = { - id : id, - mousedown_func : mdf, - click_func : clf, - element : new Element(id, {blocker : 1, container : ed.getContainer()}), - iframeElement : new Element(id + '_ifr'), - features : f, - deltaWidth : dw, - deltaHeight : dh - }; - - w.iframeElement.on('focus', function() { - t.focus(id); - }); - - // Setup blocker - if (t.count == 0 && t.editor.getParam('dialog_type', 'modal') == 'modal') { - DOM.add(DOM.doc.body, 'div', { - id : 'mceModalBlocker', - 'class' : (t.editor.settings.inlinepopups_skin || 'clearlooks2') + '_modalBlocker', - style : {zIndex : t.zIndex - 1} - }); - - DOM.show('mceModalBlocker'); // Reduces flicker in IE - DOM.setAttrib(DOM.doc.body, 'aria-hidden', 'true'); - } else - DOM.setStyle('mceModalBlocker', 'z-index', t.zIndex - 1); - - if (tinymce.isIE6 || /Firefox\/2\./.test(navigator.userAgent) || (tinymce.isIE && !DOM.boxModel)) - DOM.setStyles('mceModalBlocker', {position : 'absolute', left : vp.x, top : vp.y, width : vp.w - 2, height : vp.h - 2}); - - DOM.setAttrib(id, 'aria-hidden', 'false'); - t.focus(id); - t._fixIELayout(id, 1); - - // Focus ok button - if (DOM.get(id + '_ok')) - DOM.get(id + '_ok').focus(); - t.count++; - - return w; - }, - - focus : function(id) { - var t = this, w; - - if (w = t.windows[id]) { - w.zIndex = this.zIndex++; - w.element.setStyle('zIndex', w.zIndex); - w.element.update(); - - id = id + '_wrapper'; - DOM.removeClass(t.lastId, 'mceFocus'); - DOM.addClass(id, 'mceFocus'); - t.lastId = id; - - if (w.focussedElement) { - w.focussedElement.focus(); - } else if (DOM.get(id + '_ok')) { - DOM.get(w.id + '_ok').focus(); - } else if (DOM.get(w.id + '_ifr')) { - DOM.get(w.id + '_ifr').focus(); - } - } - }, - - _addAll : function(te, ne) { - var i, n, t = this, dom = tinymce.DOM; - - if (is(ne, 'string')) - te.appendChild(dom.doc.createTextNode(ne)); - else if (ne.length) { - te = te.appendChild(dom.create(ne[0], ne[1])); - - for (i=2; i ix) { - fw = w; - ix = w.zIndex; - } - }); - return fw; - }, - - setTitle : function(w, ti) { - var e; - - w = this._findId(w); - - if (e = DOM.get(w + '_title')) - e.innerHTML = DOM.encode(ti); - }, - - alert : function(txt, cb, s) { - var t = this, w; - - w = t.open({ - title : t, - type : 'alert', - button_func : function(s) { - if (cb) - cb.call(s || t, s); - - t.close(null, w.id); - }, - content : DOM.encode(t.editor.getLang(txt, txt)), - inline : 1, - width : 400, - height : 130 - }); - }, - - confirm : function(txt, cb, s) { - var t = this, w; - - w = t.open({ - title : t, - type : 'confirm', - button_func : function(s) { - if (cb) - cb.call(s || t, s); - - t.close(null, w.id); - }, - content : DOM.encode(t.editor.getLang(txt, txt)), - inline : 1, - width : 400, - height : 130 - }); - }, - - // Internal functions - - _findId : function(w) { - var t = this; - - if (typeof(w) == 'string') - return w; - - each(t.windows, function(wo) { - var ifr = DOM.get(wo.id + '_ifr'); - - if (ifr && w == ifr.contentWindow) { - w = wo.id; - return false; - } - }); - - return w; - }, - - _fixIELayout : function(id, s) { - var w, img; - - if (!tinymce.isIE6) - return; - - // Fixes the bug where hover flickers and does odd things in IE6 - each(['n','s','w','e','nw','ne','sw','se'], function(v) { - var e = DOM.get(id + '_resize_' + v); - - DOM.setStyles(e, { - width : s ? e.clientWidth : '', - height : s ? e.clientHeight : '', - cursor : DOM.getStyle(e, 'cursor', 1) - }); - - DOM.setStyle(id + "_bottom", 'bottom', '-1px'); - - e = 0; - }); - - // Fixes graphics glitch - if (w = this.windows[id]) { - // Fixes rendering bug after resize - w.element.hide(); - w.element.show(); - - // Forced a repaint of the window - //DOM.get(id).style.filter = ''; - - // IE has a bug where images used in CSS won't get loaded - // sometimes when the cache in the browser is disabled - // This fix tries to solve it by loading the images using the image object - each(DOM.select('div,a', id), function(e, i) { - if (e.currentStyle.backgroundImage != 'none') { - img = new Image(); - img.src = e.currentStyle.backgroundImage.replace(/url\(\"(.+)\"\)/, '$1'); - } - }); - - DOM.get(id).style.filter = ''; - } - } - }); - - // Register plugin - tinymce.PluginManager.add('inlinepopups', tinymce.plugins.InlinePopups); -})(); - diff --git a/common/static/js/vendor/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif b/common/static/js/vendor/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif deleted file mode 100644 index 219139857ead162c6c83fa92e4a36eb978359b70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 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 QatMOy3rC81I1F^)55?|uDF6Tf diff --git a/common/static/js/vendor/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif b/common/static/js/vendor/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif deleted file mode 100644 index c2a2ad454db194e428a7b9da40f62d5376a17428..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 769 zcmb7?=`WiB0LI^D)(HC`v6*aD4AW#LGRb0Oi$tH~CP=nb%N%8n zy02ceuewTUUDeW|RaMp*TlLV6R$o=rQOY{@AME+?`}QQiCwU%4Jq)?`{5B8=ECT1T z+wH!7{zji$)-UA>D9({)xO1SJGLHK54Mat(}s4_unMiKjB85EHng*~!Ddt+?(c5uHG4ZI zsc>jP#5Y6w6Wj5!Y=0^oK*&D+R;Yh@ze z7vfi;qFW{owiOfGqcB@XkwUZ0j?Km4{qjE- z6c!Z|O1!?5l~+^}tE#*^aCo0?lZ$rLKBwT;dI+nLO(UEMvb-ad9elEWPw8Xg(t zx$y<#6T+{PQ@$ecjAT|iC%dxnP5yoH$I`OLFU5*drPiz>bidcu^@a^2v}rP3-`?4^ z?Cl>M-Z(n8ot*x$0~Z|;ku35!-qAHSQN*GM3tW8AN#VWJNrHQD+6qXfO_zB^6eFVU zOjzupAb0*`W8} zQVeE5Djt<a0+Owme6r2OGio7DoTWqkhGKj0`0*1-*<$#uL5YH*kC8Z>wpCvYO~asp;G r-~A;>$wp)vkltB=c_?k6Zw*FUgrbAm;sB08O9+}m=}H3OFd*zN8L+JA diff --git a/common/static/js/vendor/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif b/common/static/js/vendor/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif deleted file mode 100644 index 0b4cc3682a1c62b3583d83ad83b84fce14461ec3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84 zcmZ?wbh9u| --> - - -Template for dialogs - - - - -
-
-
-
-
-
-
- Blured -
- -
-
- Content -
-
- -
-
-
-
- Statusbar text. -
- - - - - - - - - - - - - - -
-
- -
-
-
-
-
-
- Focused -
- -
-
- Content -
-
- -
-
-
-
- Statusbar text. -
- - - - - - - - - - - - - - -
-
- -
-
-
-
-
-
- Statusbar -
- -
-
- Content -
-
- -
-
-
-
- Statusbar text. -
- - - - - - - - - - - - - - -
-
- -
-
-
-
-
-
- Statusbar, Resizable -
- -
-
- Content -
-
- -
-
-
-
- Statusbar text. -
- - - - - - - - - - - - - - -
-
- -
-
-
-
-
-
- Resizable, Maximizable -
- -
-
- Content -
-
- -
-
-
-
- Statusbar text. -
- - - - - - - - - - - - - - -
-
- -
-
-
-
-
-
- Blurred, Maximizable, Statusbar, Resizable -
- -
-
- Content -
-
- -
-
-
-
- Statusbar text. -
- - - - - - - - - - - - - - -
-
- -
-
-
-
-
-
- Maximized, Maximizable, Minimizable -
- -
-
- Content -
-
- -
-
-
-
- Statusbar text. -
- - - - - - - - - - - - - - -
-
- -
-
-
-
-
-
- Blured -
- -
-
- Content -
-
- -
-
-
-
- Statusbar text. -
- - - - - - - - - - - - - - -
-
- -
-
-
-
-
-
- Alert -
- -
-
- - This is a very long error message. This is a very long error message. - This is a very long error message. This is a very long error message. - This is a very long error message. This is a very long error message. - This is a very long error message. This is a very long error message. - This is a very long error message. This is a very long error message. - This is a very long error message. This is a very long error message. - -
-
-
- -
-
-
-
-
- - - Ok - -
-
- -
-
-
-
-
-
- Confirm -
- -
-
- - This is a very long error message. This is a very long error message. - This is a very long error message. This is a very long error message. - This is a very long error message. This is a very long error message. - This is a very long error message. This is a very long error message. - This is a very long error message. This is a very long error message. - This is a very long error message. This is a very long error message. - -
-
-
- -
-
-
-
-
- - - Ok - Cancel - -
-
-
- - - diff --git a/common/static/js/vendor/tiny_mce/plugins/insertdatetime/editor_plugin.js b/common/static/js/vendor/tiny_mce/plugins/insertdatetime/editor_plugin.js deleted file mode 100644 index 938ce6b17d..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/insertdatetime/editor_plugin.js +++ /dev/null @@ -1 +0,0 @@ -(function(){tinymce.create("tinymce.plugins.InsertDateTime",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceInsertDate",function(){var d=c._getDateTime(new Date(),a.getParam("plugin_insertdate_dateFormat",a.getLang("insertdatetime.date_fmt")));a.execCommand("mceInsertContent",false,d)});a.addCommand("mceInsertTime",function(){var d=c._getDateTime(new Date(),a.getParam("plugin_insertdate_timeFormat",a.getLang("insertdatetime.time_fmt")));a.execCommand("mceInsertContent",false,d)});a.addButton("insertdate",{title:"insertdatetime.insertdate_desc",cmd:"mceInsertDate"});a.addButton("inserttime",{title:"insertdatetime.inserttime_desc",cmd:"mceInsertTime"})},getInfo:function(){return{longname:"Insert date/time",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/insertdatetime",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_getDateTime:function(e,a){var c=this.editor;function b(g,d){g=""+g;if(g.length'+n+"";var i=e.dom.getParent(e.selection.getStart(),"time");if(i)return e.dom.setOuterHTML(i,n),void 0}e.insertContent(n)}var n,r,i="Sun Mon Tue Wed Thu Fri Sat Sun".split(" "),c="Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday".split(" "),m="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),u="January February March April May June July August September October November December".split(" "),d=[];e.addCommand("mceInsertDate",function(){a(e.getParam("insertdatetime_dateformat",e.translate("%Y-%m-%d")))}),e.addCommand("mceInsertTime",function(){a(e.getParam("insertdatetime_timeformat",e.translate("%H:%M:%S")))}),e.addButton("inserttime",{type:"splitbutton",title:"Insert time",onclick:function(){a(n||r)},menu:d}),tinymce.each(e.settings.insertdatetime_formats||["%H:%M:%S","%Y-%m-%d","%I:%M:%S %p","%D"],function(e){r||(r=e),d.push({text:t(e),onclick:function(){n=e,a(e)}})}),e.addMenuItem("insertdatetime",{icon:"date",text:"Insert date/time",menu:d,context:"insert"})}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/layer/editor_plugin.js b/common/static/js/vendor/tiny_mce/plugins/layer/editor_plugin.js deleted file mode 100644 index ca3857a74e..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/layer/editor_plugin.js +++ /dev/null @@ -1 +0,0 @@ -(function(){function a(b){do{if(b.className&&b.className.indexOf("mceItemLayer")!=-1){return b}}while(b=b.parentNode)}tinymce.create("tinymce.plugins.Layer",{init:function(b,c){var d=this;d.editor=b;b.addCommand("mceInsertLayer",d._insertLayer,d);b.addCommand("mceMoveForward",function(){d._move(1)});b.addCommand("mceMoveBackward",function(){d._move(-1)});b.addCommand("mceMakeAbsolute",function(){d._toggleAbsolute()});b.addButton("moveforward",{title:"layer.forward_desc",cmd:"mceMoveForward"});b.addButton("movebackward",{title:"layer.backward_desc",cmd:"mceMoveBackward"});b.addButton("absolute",{title:"layer.absolute_desc",cmd:"mceMakeAbsolute"});b.addButton("insertlayer",{title:"layer.insertlayer_desc",cmd:"mceInsertLayer"});b.onInit.add(function(){var e=b.dom;if(tinymce.isIE){b.getDoc().execCommand("2D-Position",false,true)}});b.onMouseUp.add(function(f,h){var g=a(h.target);if(g){f.dom.setAttrib(g,"data-mce-style","")}});b.onMouseDown.add(function(f,j){var h=j.target,i=f.getDoc(),g;if(tinymce.isGecko){if(a(h)){if(i.designMode!=="on"){i.designMode="on";h=i.body;g=h.parentNode;g.removeChild(h);g.appendChild(h)}}else{if(i.designMode=="on"){i.designMode="off"}}}});b.onNodeChange.add(d._nodeChange,d);b.onVisualAid.add(d._visualAid,d)},getInfo:function(){return{longname:"Layer",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/layer",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_nodeChange:function(c,b,f){var d,e;d=this._getParentLayer(f);e=c.dom.getParent(f,"DIV,P,IMG");if(!e){b.setDisabled("absolute",1);b.setDisabled("moveforward",1);b.setDisabled("movebackward",1)}else{b.setDisabled("absolute",0);b.setDisabled("moveforward",!d);b.setDisabled("movebackward",!d);b.setActive("absolute",d&&d.style.position.toLowerCase()=="absolute")}},_visualAid:function(b,d,c){var f=b.dom;tinymce.each(f.select("div,p",d),function(g){if(/^(absolute|relative|fixed)$/i.test(g.style.position)){if(c){f.addClass(g,"mceItemVisualAid")}else{f.removeClass(g,"mceItemVisualAid")}f.addClass(g,"mceItemLayer")}})},_move:function(j){var c=this.editor,g,h=[],f=this._getParentLayer(c.selection.getNode()),e=-1,k=-1,b;b=[];tinymce.walk(c.getBody(),function(d){if(d.nodeType==1&&/^(absolute|relative|static)$/i.test(d.style.position)){b.push(d)}},"childNodes");for(g=0;g-1){b[e].style.zIndex=h[k];b[k].style.zIndex=h[e]}else{if(h[e]>0){b[e].style.zIndex=h[e]-1}}}else{for(g=0;gh[e]){k=g;break}}if(k>-1){b[e].style.zIndex=h[k];b[k].style.zIndex=h[e]}else{b[e].style.zIndex=h[e]+1}}c.execCommand("mceRepaint")},_getParentLayer:function(b){return this.editor.dom.getParent(b,function(c){return c.nodeType==1&&/^(absolute|relative|static)$/i.test(c.style.position)})},_insertLayer:function(){var c=this.editor,e=c.dom,d=e.getPos(e.getParent(c.selection.getNode(),"*")),b=c.getBody();c.dom.add(b,"div",{style:{position:"absolute",left:d.x,top:(d.y>20?d.y:20),width:100,height:100},"class":"mceItemVisualAid mceItemLayer"},c.selection.getContent()||c.getLang("layer.content"));if(tinymce.isIE){e.setHTML(b,b.innerHTML)}},_toggleAbsolute:function(){var b=this.editor,c=this._getParentLayer(b.selection.getNode());if(!c){c=b.dom.getParent(b.selection.getNode(),"DIV,P,IMG")}if(c){if(c.style.position.toLowerCase()=="absolute"){b.dom.setStyles(c,{position:"",left:"",top:"",width:"",height:""});b.dom.removeClass(c,"mceItemVisualAid");b.dom.removeClass(c,"mceItemLayer")}else{if(c.style.left==""){c.style.left=20+"px"}if(c.style.top==""){c.style.top=20+"px"}if(c.style.width==""){c.style.width=c.width?(c.width+"px"):"100px"}if(c.style.height==""){c.style.height=c.height?(c.height+"px"):"100px"}c.style.position="absolute";b.dom.setAttrib(c,"data-mce-style","");b.addVisual(b.getBody())}b.execCommand("mceRepaint");b.nodeChanged()}}});tinymce.PluginManager.add("layer",tinymce.plugins.Layer)})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/layer/editor_plugin_src.js b/common/static/js/vendor/tiny_mce/plugins/layer/editor_plugin_src.js deleted file mode 100644 index d31978bf60..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/layer/editor_plugin_src.js +++ /dev/null @@ -1,262 +0,0 @@ -/** - * editor_plugin_src.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -(function() { - function findParentLayer(node) { - do { - if (node.className && node.className.indexOf('mceItemLayer') != -1) { - return node; - } - } while (node = node.parentNode); - }; - - tinymce.create('tinymce.plugins.Layer', { - init : function(ed, url) { - var t = this; - - t.editor = ed; - - // Register commands - ed.addCommand('mceInsertLayer', t._insertLayer, t); - - ed.addCommand('mceMoveForward', function() { - t._move(1); - }); - - ed.addCommand('mceMoveBackward', function() { - t._move(-1); - }); - - ed.addCommand('mceMakeAbsolute', function() { - t._toggleAbsolute(); - }); - - // Register buttons - ed.addButton('moveforward', {title : 'layer.forward_desc', cmd : 'mceMoveForward'}); - ed.addButton('movebackward', {title : 'layer.backward_desc', cmd : 'mceMoveBackward'}); - ed.addButton('absolute', {title : 'layer.absolute_desc', cmd : 'mceMakeAbsolute'}); - ed.addButton('insertlayer', {title : 'layer.insertlayer_desc', cmd : 'mceInsertLayer'}); - - ed.onInit.add(function() { - var dom = ed.dom; - - if (tinymce.isIE) - ed.getDoc().execCommand('2D-Position', false, true); - }); - - // Remove serialized styles when selecting a layer since it might be changed by a drag operation - ed.onMouseUp.add(function(ed, e) { - var layer = findParentLayer(e.target); - - if (layer) { - ed.dom.setAttrib(layer, 'data-mce-style', ''); - } - }); - - // Fixes edit focus issues with layers on Gecko - // This will enable designMode while inside a layer and disable it when outside - ed.onMouseDown.add(function(ed, e) { - var node = e.target, doc = ed.getDoc(), parent; - - if (tinymce.isGecko) { - if (findParentLayer(node)) { - if (doc.designMode !== 'on') { - doc.designMode = 'on'; - - // Repaint caret - node = doc.body; - parent = node.parentNode; - parent.removeChild(node); - parent.appendChild(node); - } - } else if (doc.designMode == 'on') { - doc.designMode = 'off'; - } - } - }); - - ed.onNodeChange.add(t._nodeChange, t); - ed.onVisualAid.add(t._visualAid, t); - }, - - getInfo : function() { - return { - longname : 'Layer', - author : 'Moxiecode Systems AB', - authorurl : 'http://tinymce.moxiecode.com', - infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/layer', - version : tinymce.majorVersion + "." + tinymce.minorVersion - }; - }, - - // Private methods - - _nodeChange : function(ed, cm, n) { - var le, p; - - le = this._getParentLayer(n); - p = ed.dom.getParent(n, 'DIV,P,IMG'); - - if (!p) { - cm.setDisabled('absolute', 1); - cm.setDisabled('moveforward', 1); - cm.setDisabled('movebackward', 1); - } else { - cm.setDisabled('absolute', 0); - cm.setDisabled('moveforward', !le); - cm.setDisabled('movebackward', !le); - cm.setActive('absolute', le && le.style.position.toLowerCase() == "absolute"); - } - }, - - // Private methods - - _visualAid : function(ed, e, s) { - var dom = ed.dom; - - tinymce.each(dom.select('div,p', e), function(e) { - if (/^(absolute|relative|fixed)$/i.test(e.style.position)) { - if (s) - dom.addClass(e, 'mceItemVisualAid'); - else - dom.removeClass(e, 'mceItemVisualAid'); - - dom.addClass(e, 'mceItemLayer'); - } - }); - }, - - _move : function(d) { - var ed = this.editor, i, z = [], le = this._getParentLayer(ed.selection.getNode()), ci = -1, fi = -1, nl; - - nl = []; - tinymce.walk(ed.getBody(), function(n) { - if (n.nodeType == 1 && /^(absolute|relative|static)$/i.test(n.style.position)) - nl.push(n); - }, 'childNodes'); - - // Find z-indexes - for (i=0; i -1) { - nl[ci].style.zIndex = z[fi]; - nl[fi].style.zIndex = z[ci]; - } else { - if (z[ci] > 0) - nl[ci].style.zIndex = z[ci] - 1; - } - } else { - // Move forward - - // Try find a higher one - for (i=0; i z[ci]) { - fi = i; - break; - } - } - - if (fi > -1) { - nl[ci].style.zIndex = z[fi]; - nl[fi].style.zIndex = z[ci]; - } else - nl[ci].style.zIndex = z[ci] + 1; - } - - ed.execCommand('mceRepaint'); - }, - - _getParentLayer : function(n) { - return this.editor.dom.getParent(n, function(n) { - return n.nodeType == 1 && /^(absolute|relative|static)$/i.test(n.style.position); - }); - }, - - _insertLayer : function() { - var ed = this.editor, dom = ed.dom, p = dom.getPos(dom.getParent(ed.selection.getNode(), '*')), body = ed.getBody(); - - ed.dom.add(body, 'div', { - style : { - position : 'absolute', - left : p.x, - top : (p.y > 20 ? p.y : 20), - width : 100, - height : 100 - }, - 'class' : 'mceItemVisualAid mceItemLayer' - }, ed.selection.getContent() || ed.getLang('layer.content')); - - // Workaround for IE where it messes up the JS engine if you insert a layer on IE 6,7 - if (tinymce.isIE) - dom.setHTML(body, body.innerHTML); - }, - - _toggleAbsolute : function() { - var ed = this.editor, le = this._getParentLayer(ed.selection.getNode()); - - if (!le) - le = ed.dom.getParent(ed.selection.getNode(), 'DIV,P,IMG'); - - if (le) { - if (le.style.position.toLowerCase() == "absolute") { - ed.dom.setStyles(le, { - position : '', - left : '', - top : '', - width : '', - height : '' - }); - - ed.dom.removeClass(le, 'mceItemVisualAid'); - ed.dom.removeClass(le, 'mceItemLayer'); - } else { - if (le.style.left == "") - le.style.left = 20 + 'px'; - - if (le.style.top == "") - le.style.top = 20 + 'px'; - - if (le.style.width == "") - le.style.width = le.width ? (le.width + 'px') : '100px'; - - if (le.style.height == "") - le.style.height = le.height ? (le.height + 'px') : '100px'; - - le.style.position = "absolute"; - - ed.dom.setAttrib(le, 'data-mce-style', ''); - ed.addVisual(ed.getBody()); - } - - ed.execCommand('mceRepaint'); - ed.nodeChanged(); - } - } - }); - - // Register plugin - tinymce.PluginManager.add('layer', tinymce.plugins.Layer); -})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/layer/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/layer/plugin.min.js new file mode 100644 index 0000000000..eb1ad4b68d --- /dev/null +++ b/common/static/js/vendor/tiny_mce/plugins/layer/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("layer",function(e){function t(e){do if(e.className&&-1!=e.className.indexOf("mceItemLayer"))return e;while(e=e.parentNode)}function n(t){var n=e.dom;tinymce.each(n.select("div,p",t),function(e){/^(absolute|relative|fixed)$/i.test(e.style.position)&&(e.hasVisual?n.addClass(e,"mceItemVisualAid"):n.removeClass(e,"mceItemVisualAid"),n.addClass(e,"mceItemLayer"))})}function i(n){var i,o,a=[],r=t(e.selection.getNode()),l=-1,s=-1;for(o=[],tinymce.walk(e.getBody(),function(e){1==e.nodeType&&/^(absolute|relative|static)$/i.test(e.style.position)&&o.push(e)},"childNodes"),i=0;il&&o[i]==r&&(l=i);if(0>n){for(i=0;i-1?(o[l].style.zIndex=a[s],o[s].style.zIndex=a[l]):a[l]>0&&(o[l].style.zIndex=a[l]-1)}else{for(i=0;ia[l]){s=i;break}s>-1?(o[l].style.zIndex=a[s],o[s].style.zIndex=a[l]):o[l].style.zIndex=a[l]+1}e.execCommand("mceRepaint")}function o(){var t=e.dom,n=t.getPos(t.getParent(e.selection.getNode(),"*")),i=e.getBody();e.dom.add(i,"div",{style:{position:"absolute",left:n.x,top:n.y>20?n.y:20,width:100,height:100},"class":"mceItemVisualAid mceItemLayer"},e.selection.getContent()||e.getLang("layer.content")),tinymce.Env.ie&&t.setHTML(i,i.innerHTML)}function a(){var n=t(e.selection.getNode());n||(n=e.dom.getParent(e.selection.getNode(),"DIV,P,IMG")),n&&("absolute"==n.style.position.toLowerCase()?(e.dom.setStyles(n,{position:"",left:"",top:"",width:"",height:""}),e.dom.removeClass(n,"mceItemVisualAid"),e.dom.removeClass(n,"mceItemLayer")):(n.style.left||(n.style.left="20px"),n.style.top||(n.style.top="20px"),n.style.width||(n.style.width=n.width?n.width+"px":"100px"),n.style.height||(n.style.height=n.height?n.height+"px":"100px"),n.style.position="absolute",e.dom.setAttrib(n,"data-mce-style",""),e.addVisual(e.getBody())),e.execCommand("mceRepaint"),e.nodeChanged())}e.addCommand("mceInsertLayer",o),e.addCommand("mceMoveForward",function(){i(1)}),e.addCommand("mceMoveBackward",function(){i(-1)}),e.addCommand("mceMakeAbsolute",function(){a()}),e.addButton("moveforward",{title:"layer.forward_desc",cmd:"mceMoveForward"}),e.addButton("movebackward",{title:"layer.backward_desc",cmd:"mceMoveBackward"}),e.addButton("absolute",{title:"layer.absolute_desc",cmd:"mceMakeAbsolute"}),e.addButton("insertlayer",{title:"layer.insertlayer_desc",cmd:"mceInsertLayer"}),e.on("init",function(){tinymce.Env.ie&&e.getDoc().execCommand("2D-Position",!1,!0)}),e.on("mouseup",function(n){var i=t(n.target);i&&e.dom.setAttrib(i,"data-mce-style","")}),e.on("mousedown",function(n){var i,o=n.target,a=e.getDoc();tinymce.Env.gecko&&(t(o)?"on"!==a.designMode&&(a.designMode="on",o=a.body,i=o.parentNode,i.removeChild(o),i.appendChild(o)):"on"==a.designMode&&(a.designMode="off"))}),e.on("NodeChange",n)}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/legacyoutput/editor_plugin.js b/common/static/js/vendor/tiny_mce/plugins/legacyoutput/editor_plugin.js deleted file mode 100644 index 2ed5f41ae4..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/legacyoutput/editor_plugin.js +++ /dev/null @@ -1 +0,0 @@ -(function(a){a.onAddEditor.addToTop(function(c,b){b.settings.inline_styles=false});a.create("tinymce.plugins.LegacyOutput",{init:function(b){b.onInit.add(function(){var c="p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img",e=a.explode(b.settings.font_size_style_values),d=b.schema;b.formatter.register({alignleft:{selector:c,attributes:{align:"left"}},aligncenter:{selector:c,attributes:{align:"center"}},alignright:{selector:c,attributes:{align:"right"}},alignfull:{selector:c,attributes:{align:"justify"}},bold:[{inline:"b",remove:"all"},{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}}],italic:[{inline:"i",remove:"all"},{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}}],underline:[{inline:"u",remove:"all"},{inline:"span",styles:{textDecoration:"underline"},exact:true}],strikethrough:[{inline:"strike",remove:"all"},{inline:"span",styles:{textDecoration:"line-through"},exact:true}],fontname:{inline:"font",attributes:{face:"%value"}},fontsize:{inline:"font",attributes:{size:function(f){return a.inArray(e,f.value)+1}}},forecolor:{inline:"font",attributes:{color:"%value"}},hilitecolor:{inline:"font",styles:{backgroundColor:"%value"}}});a.each("b,i,u,strike".split(","),function(f){d.addValidElements(f+"[*]")});if(!d.getElementRule("font")){d.addValidElements("font[face|size|color|style]")}a.each(c.split(","),function(f){var h=d.getElementRule(f),g;if(h){if(!h.attributes.align){h.attributes.align={};h.attributesOrder.push("align")}}});b.onNodeChange.add(function(g,k){var j,f,h,i;f=g.dom.getParent(g.selection.getNode(),"font");if(f){h=f.face;i=f.size}if(j=k.get("fontselect")){j.select(function(l){return l==h})}if(j=k.get("fontsizeselect")){j.select(function(m){var l=a.inArray(e,m.fontSize);return l+1==i})}})})},getInfo:function(){return{longname:"LegacyOutput",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/legacyoutput",version:a.majorVersion+"."+a.minorVersion}}});a.PluginManager.add("legacyoutput",a.plugins.LegacyOutput)})(tinymce); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/legacyoutput/editor_plugin_src.js b/common/static/js/vendor/tiny_mce/plugins/legacyoutput/editor_plugin_src.js deleted file mode 100644 index 349bf80e0c..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/legacyoutput/editor_plugin_src.js +++ /dev/null @@ -1,139 +0,0 @@ -/** - * editor_plugin_src.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - * - * This plugin will force TinyMCE to produce deprecated legacy output such as font elements, u elements, align - * attributes and so forth. There are a few cases where these old items might be needed for example in email applications or with Flash - * - * However you should NOT use this plugin if you are building some system that produces web contents such as a CMS. All these elements are - * not apart of the newer specifications for HTML and XHTML. - */ - -(function(tinymce) { - // Override inline_styles setting to force TinyMCE to produce deprecated contents - tinymce.onAddEditor.addToTop(function(tinymce, editor) { - editor.settings.inline_styles = false; - }); - - // Create the legacy ouput plugin - tinymce.create('tinymce.plugins.LegacyOutput', { - init : function(editor) { - editor.onInit.add(function() { - var alignElements = 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img', - fontSizes = tinymce.explode(editor.settings.font_size_style_values), - schema = editor.schema; - - // Override some internal formats to produce legacy elements and attributes - editor.formatter.register({ - // Change alignment formats to use the deprecated align attribute - alignleft : {selector : alignElements, attributes : {align : 'left'}}, - aligncenter : {selector : alignElements, attributes : {align : 'center'}}, - alignright : {selector : alignElements, attributes : {align : 'right'}}, - alignfull : {selector : alignElements, attributes : {align : 'justify'}}, - - // Change the basic formatting elements to use deprecated element types - bold : [ - {inline : 'b', remove : 'all'}, - {inline : 'strong', remove : 'all'}, - {inline : 'span', styles : {fontWeight : 'bold'}} - ], - italic : [ - {inline : 'i', remove : 'all'}, - {inline : 'em', remove : 'all'}, - {inline : 'span', styles : {fontStyle : 'italic'}} - ], - underline : [ - {inline : 'u', remove : 'all'}, - {inline : 'span', styles : {textDecoration : 'underline'}, exact : true} - ], - strikethrough : [ - {inline : 'strike', remove : 'all'}, - {inline : 'span', styles : {textDecoration: 'line-through'}, exact : true} - ], - - // Change font size and font family to use the deprecated font element - fontname : {inline : 'font', attributes : {face : '%value'}}, - fontsize : { - inline : 'font', - attributes : { - size : function(vars) { - return tinymce.inArray(fontSizes, vars.value) + 1; - } - } - }, - - // Setup font elements for colors as well - forecolor : {inline : 'font', attributes : {color : '%value'}}, - hilitecolor : {inline : 'font', styles : {backgroundColor : '%value'}} - }); - - // Check that deprecated elements are allowed if not add them - tinymce.each('b,i,u,strike'.split(','), function(name) { - schema.addValidElements(name + '[*]'); - }); - - // Add font element if it's missing - if (!schema.getElementRule("font")) - schema.addValidElements("font[face|size|color|style]"); - - // Add the missing and depreacted align attribute for the serialization engine - tinymce.each(alignElements.split(','), function(name) { - var rule = schema.getElementRule(name), found; - - if (rule) { - if (!rule.attributes.align) { - rule.attributes.align = {}; - rule.attributesOrder.push('align'); - } - } - }); - - // Listen for the onNodeChange event so that we can do special logic for the font size and font name drop boxes - editor.onNodeChange.add(function(editor, control_manager) { - var control, fontElm, fontName, fontSize; - - // Find font element get it's name and size - fontElm = editor.dom.getParent(editor.selection.getNode(), 'font'); - if (fontElm) { - fontName = fontElm.face; - fontSize = fontElm.size; - } - - // Select/unselect the font name in droplist - if (control = control_manager.get('fontselect')) { - control.select(function(value) { - return value == fontName; - }); - } - - // Select/unselect the font size in droplist - if (control = control_manager.get('fontsizeselect')) { - control.select(function(value) { - var index = tinymce.inArray(fontSizes, value.fontSize); - - return index + 1 == fontSize; - }); - } - }); - }); - }, - - getInfo : function() { - return { - longname : 'LegacyOutput', - author : 'Moxiecode Systems AB', - authorurl : 'http://tinymce.moxiecode.com', - infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/legacyoutput', - version : tinymce.majorVersion + "." + tinymce.minorVersion - }; - } - }); - - // Register plugin - tinymce.PluginManager.add('legacyoutput', tinymce.plugins.LegacyOutput); -})(tinymce); diff --git a/common/static/js/vendor/tiny_mce/plugins/legacyoutput/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/legacyoutput/plugin.min.js new file mode 100644 index 0000000000..4f6f7c1aa3 --- /dev/null +++ b/common/static/js/vendor/tiny_mce/plugins/legacyoutput/plugin.min.js @@ -0,0 +1 @@ +!function(e){e.on("AddEditor",function(e){e.editor.settings.inline_styles=!1}),e.PluginManager.add("legacyoutput",function(t){t.on("init",function(){var n="p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img",i=e.explode(t.settings.font_size_style_values),o=t.schema;t.formatter.register({alignleft:{selector:n,attributes:{align:"left"}},aligncenter:{selector:n,attributes:{align:"center"}},alignright:{selector:n,attributes:{align:"right"}},alignjustify:{selector:n,attributes:{align:"justify"}},bold:[{inline:"b",remove:"all"},{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}}],italic:[{inline:"i",remove:"all"},{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}}],underline:[{inline:"u",remove:"all"},{inline:"span",styles:{textDecoration:"underline"},exact:!0}],strikethrough:[{inline:"strike",remove:"all"},{inline:"span",styles:{textDecoration:"line-through"},exact:!0}],fontname:{inline:"font",attributes:{face:"%value"}},fontsize:{inline:"font",attributes:{size:function(t){return e.inArray(i,t.value)+1}}},forecolor:{inline:"font",attributes:{color:"%value"}},hilitecolor:{inline:"font",styles:{backgroundColor:"%value"}}}),e.each("b,i,u,strike".split(","),function(e){o.addValidElements(e+"[*]")}),o.getElementRule("font")||o.addValidElements("font[face|size|color|style]"),e.each(n.split(","),function(e){var t=o.getElementRule(e);t&&(t.attributes.align||(t.attributes.align={},t.attributesOrder.push("align")))})})})}(tinymce); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/link/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/link/plugin.min.js new file mode 100644 index 0000000000..f4c44d8766 --- /dev/null +++ b/common/static/js/vendor/tiny_mce/plugins/link/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("link",function(e){function t(t){return function(){var n=e.settings.link_list;"string"==typeof n?tinymce.util.XHR.send({url:n,success:function(e){t(tinymce.util.JSON.parse(e))}}):t(n)}}function n(t){function n(e){var t=f.find("#text");(!t.value()||e.lastControl&&t.value()==e.lastControl.text())&&t.value(e.control.text()),f.find("#href").value(e.control.value())}function l(){var n=[{text:"None",value:""}];return tinymce.each(t,function(t){n.push({text:t.text||t.title,value:e.convertURL(t.value||t.url,"href"),menu:t.menu})}),n}function i(t){var n=[{text:"None",value:""}];return tinymce.each(e.settings.rel_list,function(e){n.push({text:e.text||e.title,value:e.value,selected:t===e.value})}),n}function r(t){var n=[];return e.settings.target_list||(n.push({text:"None",value:""}),n.push({text:"New window",value:"_blank"})),tinymce.each(e.settings.target_list,function(e){n.push({text:e.text||e.title,value:e.value,selected:t===e.value})}),n}function a(t){var l=[];return tinymce.each(e.dom.select("a:not([href])"),function(e){var n=e.name||e.id;n&&l.push({text:n,value:"#"+n,selected:-1!=t.indexOf("#"+n)})}),l.length?(l.unshift({text:"None",value:""}),{name:"anchor",type:"listbox",label:"Anchors",values:l,onselect:n}):void 0}function o(){h&&h.value(e.convertURL(this.value(),"href")),!c&&0===x.text.length&&k&&this.parent().parent().find("#text")[0].value(this.value())}var u,s,c,f,d,h,v,g,x={},m=e.selection,p=e.dom;u=m.getNode(),s=p.getParent(u,"a[href]");var k=!0;if(/=0;y--)if(3!=b[y].nodeType){k=!1;break}}x.text=c=s?s.innerText||s.textContent:m.getContent({format:"text"}),x.href=s?p.getAttrib(s,"href"):"",x.target=s?p.getAttrib(s,"target"):e.settings.default_link_target||"",x.rel=s?p.getAttrib(s,"rel"):"",e.fire('EditLink', x),k&&(d={name:"text",type:"textbox",size:40,label:"Text to display",onchange:function(){x.text=this.value()}}),t&&(h={type:"listbox",label:"Link list",values:l(),onselect:n,value:e.convertURL(x.href,"href"),onPostRender:function(){h=this}}),e.settings.target_list!==!1&&(g={name:"target",type:"listbox",label:"Target",values:r(x.target)}),e.settings.rel_list&&(v={name:"rel",type:"listbox",label:"Rel",values:i(x.rel)}),f=e.windowManager.open({title:"Insert link",data:x,body:[{name:"href",type:"filepicker",filetype:"file",size:40,autofocus:!0,label:"Url",onchange:o,onkeyup:o},d,a(x.href),h,v,g],onSubmit:function(t){function n(t,n){var l=e.selection.getRng();window.setTimeout(function(){e.windowManager.confirm(t,function(t){e.selection.setRng(l),n(t)})},0)}function l(){s?(e.focus(),k&&i.text!=c&&(s.innerText=i.text),p.setAttribs(s,{href:r,target:i.target?i.target:null,rel:i.rel?i.rel:null}),m.select(s),e.undoManager.add()):k?e.insertContent(p.createHTML("a",{href:r,target:i.target?i.target:null,rel:i.rel?i.rel:null},p.encode(i.text))):e.execCommand("mceInsertLink",!1,{href:r,target:i.target,rel:i.rel?i.rel:null})}var i=t.data;e.fire('SaveLink', i);var r=i.href;return r?r.indexOf("@")>0&&-1==r.indexOf("//")&&-1==r.indexOf("mailto:")?void n("The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",function(e){e&&(r="mailto:"+r),l()}):/^\s*www\./i.test(r)?void n("The URL you entered seems to be an external link. Do you want to add the required http:// prefix?",function(e){e&&(r="http://"+r),l()}):void l():void e.execCommand("unlink")}})}e.addButton("link",{icon:"link",tooltip:"Insert/edit link",shortcut:"Ctrl+K",onclick:t(n),stateSelector:"a[href]"}),e.addButton("unlink",{icon:"unlink",tooltip:"Remove link",cmd:"unlink",stateSelector:"a[href]"}),e.addShortcut("Ctrl+K","",t(n)),this.showDialog=n,e.addMenuItem("link",{icon:"link",text:"Insert link",shortcut:"Ctrl+K",onclick:t(n),stateSelector:"a[href]",context:"insert",prependToContext:!0})}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/lists/editor_plugin.js b/common/static/js/vendor/tiny_mce/plugins/lists/editor_plugin.js deleted file mode 100644 index ec21b256ec..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/lists/editor_plugin.js +++ /dev/null @@ -1 +0,0 @@ -(function(){var e=tinymce.each,r=tinymce.dom.Event,g;function p(t,s){while(t&&(t.nodeType===8||(t.nodeType===3&&/^[ \t\n\r]*$/.test(t.nodeValue)))){t=s(t)}return t}function b(s){return p(s,function(t){return t.previousSibling})}function i(s){return p(s,function(t){return t.nextSibling})}function d(s,u,t){return s.dom.getParent(u,function(v){return tinymce.inArray(t,v)!==-1})}function n(s){return s&&(s.tagName==="OL"||s.tagName==="UL")}function c(u,v){var t,w,s;t=b(u.lastChild);while(n(t)){w=t;t=b(w.previousSibling)}if(w){s=v.create("li",{style:"list-style-type: none;"});v.split(u,w);v.insertAfter(s,w);s.appendChild(w);s.appendChild(w);u=s.previousSibling}return u}function m(t,s,u){t=a(t,s,u);return o(t,s,u)}function a(u,s,v){var t=b(u.previousSibling);if(t){return h(t,u,s?t:false,v)}else{return u}}function o(u,t,v){var s=i(u.nextSibling);if(s){return h(u,s,t?s:false,v)}else{return u}}function h(u,s,t,v){if(l(u,s,!!t,v)){return f(u,s,t)}else{if(u&&u.tagName==="LI"&&n(s)){u.appendChild(s)}}return s}function l(u,t,s,v){if(!u||!t){return false}else{if(u.tagName==="LI"&&t.tagName==="LI"){return t.style.listStyleType==="none"||j(t)}else{if(n(u)){return(u.tagName===t.tagName&&(s||u.style.listStyleType===t.style.listStyleType))||q(t)}else{return v&&u.tagName==="P"&&t.tagName==="P"}}}}function q(t){var s=i(t.firstChild),u=b(t.lastChild);return s&&u&&n(t)&&s===u&&(n(s)||s.style.listStyleType==="none"||j(s))}function j(u){var t=i(u.firstChild),s=b(u.lastChild);return t&&s&&t===s&&n(t)}function f(w,v,s){var u=b(w.lastChild),t=i(v.firstChild);if(w.tagName==="P"){w.appendChild(w.ownerDocument.createElement("br"))}while(v.firstChild){w.appendChild(v.firstChild)}if(s){w.style.listStyleType=s.style.listStyleType}v.parentNode.removeChild(v);h(u,t,false);return w}function k(t,u){var s;if(!u.is(t,"li,ol,ul")){s=u.getParent(t,"li");if(s){t=s}}return t}tinymce.create("tinymce.plugins.Lists",{init:function(y){var v="TABBING";var s="EMPTY";var J="ESCAPE";var z="PARAGRAPH";var N="UNKNOWN";var x=N;function E(U){return U.keyCode===tinymce.VK.TAB&&!(U.altKey||U.ctrlKey)&&(y.queryCommandState("InsertUnorderedList")||y.queryCommandState("InsertOrderedList"))}function w(){var U=B();var W=U.parentNode.parentNode;var V=U.parentNode.lastChild===U;return V&&!t(W)&&P(U)}function t(U){if(n(U)){return U.parentNode&&U.parentNode.tagName==="LI"}else{return U.tagName==="LI"}}function F(){return y.selection.isCollapsed()&&P(B())}function B(){var U=y.selection.getStart();return((U.tagName=="BR"||U.tagName=="")&&U.parentNode.tagName=="LI")?U.parentNode:U}function P(U){var V=U.childNodes.length;if(U.tagName==="LI"){return V==0?true:V==1&&(U.firstChild.tagName==""||U.firstChild.tagName=="BR"||H(U))}return false}function H(U){var V=tinymce.grep(U.parentNode.childNodes,function(Y){return Y.tagName=="LI"});var W=U==V[V.length-1];var X=U.firstChild;return tinymce.isIE9&&W&&(X.nodeValue==String.fromCharCode(160)||X.nodeValue==String.fromCharCode(32))}function T(U){return U.keyCode===tinymce.VK.ENTER}function A(U){return T(U)&&!U.shiftKey}function M(U){if(E(U)){return v}else{if(A(U)&&w()){return N}else{if(A(U)&&F()){return s}else{return N}}}}function D(U,V){if(x==v||x==s||tinymce.isGecko&&x==J){r.cancel(V)}}function C(){var U=y.selection.getRng(true);var V=U.startContainer;if(V.nodeType==3){var W=V.nodeValue;if(tinymce.isIE9&&W.length>1&&W.charCodeAt(W.length-1)==32){return(U.endOffset==W.length-1)}else{return(U.endOffset==W.length)}}else{if(V.nodeType==1){return U.endOffset==V.childNodes.length}}return false}function I(){var W=y.selection.getNode();var V="h1,h2,h3,h4,h5,h6,p,div";var U=y.dom.is(W,V)&&W.parentNode.tagName==="LI"&&W.parentNode.lastChild===W;return y.selection.isCollapsed()&&U&&C()}function K(W,Y){if(A(Y)&&I()){var X=W.selection.getNode();var V=W.dom.create("li");var U=W.dom.getParent(X,"li");W.dom.insertAfter(V,U);if(tinymce.isIE6||tinymce.isIE7||tinyMCE.isIE8){W.selection.setCursorLocation(V,1)}else{W.selection.setCursorLocation(V,0)}Y.preventDefault()}}function u(X,Z){var ac;if(!tinymce.isGecko){return}var V=X.selection.getStart();if(Z.keyCode!=tinymce.VK.BACKSPACE||V.tagName!=="IMG"){return}function W(ag){var ah=ag.firstChild;var af=null;do{if(!ah){break}if(ah.tagName==="LI"){af=ah}}while(ah=ah.nextSibling);return af}function ae(ag,af){while(ag.childNodes.length>0){af.appendChild(ag.childNodes[0])}}ac=V.parentNode.previousSibling;if(!ac){return}var aa;if(ac.tagName==="UL"||ac.tagName==="OL"){aa=ac}else{if(ac.previousSibling&&(ac.previousSibling.tagName==="UL"||ac.previousSibling.tagName==="OL")){aa=ac.previousSibling}else{return}}var ad=W(aa);var U=X.dom.createRng();U.setStart(ad,1);U.setEnd(ad,1);X.selection.setRng(U);X.selection.collapse(true);var Y=X.selection.getBookmark();var ab=V.parentNode.cloneNode(true);if(ab.tagName==="P"||ab.tagName==="DIV"){ae(ab,ad)}else{ad.appendChild(ab)}V.parentNode.parentNode.removeChild(V.parentNode);X.selection.moveToBookmark(Y)}function G(U){var V=y.dom.getParent(U,"ol,ul");if(V!=null){var W=V.lastChild;y.selection.setCursorLocation(W,0)}}this.ed=y;y.addCommand("Indent",this.indent,this);y.addCommand("Outdent",this.outdent,this);y.addCommand("InsertUnorderedList",function(){this.applyList("UL","OL")},this);y.addCommand("InsertOrderedList",function(){this.applyList("OL","UL")},this);y.onInit.add(function(){y.editorCommands.addCommands({outdent:function(){var V=y.selection,W=y.dom;function U(X){X=W.getParent(X,W.isBlock);return X&&(parseInt(y.dom.getStyle(X,"margin-left")||0,10)+parseInt(y.dom.getStyle(X,"padding-left")||0,10))>0}return U(V.getStart())||U(V.getEnd())||y.queryCommandState("InsertOrderedList")||y.queryCommandState("InsertUnorderedList")}},"state")});y.onKeyUp.add(function(V,W){if(x==v){V.execCommand(W.shiftKey?"Outdent":"Indent",true,null);x=N;return r.cancel(W)}else{if(x==s){var U=B();var Y=V.settings.list_outdent_on_enter===true||W.shiftKey;V.execCommand(Y?"Outdent":"Indent",true,null);if(tinymce.isIE){G(U)}return r.cancel(W)}else{if(x==J){if(tinymce.isIE6||tinymce.isIE7||tinymce.isIE8){var X=V.getDoc().createTextNode("\uFEFF");V.selection.getNode().appendChild(X)}else{if(tinymce.isIE9||tinymce.isGecko){V.execCommand("Outdent");return r.cancel(W)}}}}}});function L(V,U){var W=y.getDoc().createTextNode("\uFEFF");V.insertBefore(W,U);y.selection.setCursorLocation(W,0);y.execCommand("mceRepaint")}function R(V,X){if(T(X)){var U=B();if(U){var W=U.parentNode;var Y=W&&W.parentNode;if(Y&&Y.nodeName=="LI"&&Y.firstChild==W&&U==W.firstChild){L(Y,W)}}}}function S(V,X){if(T(X)){var U=B();if(V.dom.select("ul li",U).length===1){var W=U.firstChild;L(U,W)}}}function Q(W,aa){function X(ab){var ad=[];var ae=new tinymce.dom.TreeWalker(ab.firstChild,ab);for(var ac=ae.current();ac;ac=ae.next()){if(W.dom.is(ac,"ol,ul,li")){ad.push(ac)}}return ad}if(aa.keyCode==tinymce.VK.BACKSPACE){var U=B();if(U){var Z=W.dom.getParent(U,"ol,ul"),V=W.selection.getRng();if(Z&&Z.firstChild===U&&V.startOffset==0){var Y=X(U);Y.unshift(U);W.execCommand("Outdent",false,Y);W.undoManager.add();return r.cancel(aa)}}}}function O(V,X){var U=B();if(X.keyCode===tinymce.VK.BACKSPACE&&V.dom.is(U,"li")&&U.parentNode.firstChild!==U){if(V.dom.select("ul,ol",U).length===1){var Z=U.previousSibling;V.dom.remove(V.dom.select("br",U));V.dom.remove(U,true);var W=tinymce.grep(Z.childNodes,function(aa){return aa.nodeType===3});if(W.length===1){var Y=W[0];V.selection.setCursorLocation(Y,Y.length)}V.undoManager.add();return r.cancel(X)}}}y.onKeyDown.add(function(U,V){x=M(V)});y.onKeyDown.add(D);y.onKeyDown.add(u);y.onKeyDown.add(K);if(tinymce.isGecko){y.onKeyUp.add(R)}if(tinymce.isIE8){y.onKeyUp.add(S)}if(tinymce.isGecko||tinymce.isWebKit){y.onKeyDown.add(Q)}if(tinymce.isWebKit){y.onKeyDown.add(O)}},applyList:function(y,v){var C=this,z=C.ed,I=z.dom,s=[],H=false,u=false,w=false,B,G=z.selection.getSelectedBlocks();function E(t){if(t&&t.tagName==="BR"){I.remove(t)}}function F(M){var N=I.create(y),t;function L(O){if(O.style.marginLeft||O.style.paddingLeft){C.adjustPaddingFunction(false)(O)}}if(M.tagName==="LI"){}else{if(M.tagName==="P"||M.tagName==="DIV"||M.tagName==="BODY"){K(M,function(P,O){J(P,O,M.tagName==="BODY"?null:P.parentNode);t=P.parentNode;L(t);E(O)});if(t){if(t.tagName==="LI"&&(M.tagName==="P"||G.length>1)){I.split(t.parentNode.parentNode,t.parentNode)}m(t.parentNode,true)}return}else{t=I.create("li");I.insertAfter(t,M);t.appendChild(M);L(M);M=t}}I.insertAfter(N,M);N.appendChild(M);m(N,true);s.push(M)}function J(P,L,N){var t,O=P,M;while(!I.isBlock(P.parentNode)&&P.parentNode!==I.getRoot()){P=I.split(P.parentNode,P.previousSibling);P=P.nextSibling;O=P}if(N){t=N.cloneNode(true);P.parentNode.insertBefore(t,P);while(t.firstChild){I.remove(t.firstChild)}t=I.rename(t,"li")}else{t=I.create("li");P.parentNode.insertBefore(t,P)}while(O&&O!=L){M=O.nextSibling;t.appendChild(O);O=M}if(t.childNodes.length===0){t.innerHTML='
'}F(t)}function K(Q,T){var N,R,O=3,L=1,t="br,ul,ol,p,div,h1,h2,h3,h4,h5,h6,table,blockquote,address,pre,form,center,dl";function P(X,U){var V=I.createRng(),W;g.keep=true;z.selection.moveToBookmark(g);g.keep=false;W=z.selection.getRng(true);if(!U){U=X.parentNode.lastChild}V.setStartBefore(X);V.setEndAfter(U);return !(V.compareBoundaryPoints(O,W)>0||V.compareBoundaryPoints(L,W)<=0)}function S(U){if(U.nextSibling){return U.nextSibling}if(!I.isBlock(U.parentNode)&&U.parentNode!==I.getRoot()){return S(U.parentNode)}}N=Q.firstChild;var M=false;e(I.select(t,Q),function(U){if(U.hasAttribute&&U.hasAttribute("_mce_bogus")){return true}if(P(N,U)){I.addClass(U,"_mce_tagged_br");N=S(U)}});M=(N&&P(N,undefined));N=Q.firstChild;e(I.select(t,Q),function(V){var U=S(V);if(V.hasAttribute&&V.hasAttribute("_mce_bogus")){return true}if(I.hasClass(V,"_mce_tagged_br")){T(N,V,R);R=null}else{R=V}N=U});if(M){T(N,undefined,R)}}function D(t){K(t,function(M,L,N){J(M,L);E(L);E(N)})}function A(t){if(tinymce.inArray(s,t)!==-1){return}if(t.parentNode.tagName===v){I.split(t.parentNode,t);F(t);o(t.parentNode,false)}s.push(t)}function x(M){var O,N,L,t;if(tinymce.inArray(s,M)!==-1){return}M=c(M,I);while(I.is(M.parentNode,"ol,ul,li")){I.split(M.parentNode,M)}s.push(M);M=I.rename(M,"p");L=m(M,false,z.settings.force_br_newlines);if(L===M){O=M.firstChild;while(O){if(I.isBlock(O)){O=I.split(O.parentNode,O);t=true;N=O.nextSibling&&O.nextSibling.firstChild}else{N=O.nextSibling;if(t&&O.tagName==="BR"){I.remove(O)}t=false}O=N}}}e(G,function(t){t=k(t,I);if(t.tagName===v||(t.tagName==="LI"&&t.parentNode.tagName===v)){u=true}else{if(t.tagName===y||(t.tagName==="LI"&&t.parentNode.tagName===y)){H=true}else{w=true}}});if(w&&!H||u||G.length===0){B={LI:A,H1:F,H2:F,H3:F,H4:F,H5:F,H6:F,P:F,BODY:F,DIV:G.length>1?F:D,defaultAction:D,elements:this.selectedBlocks()}}else{B={defaultAction:x,elements:this.selectedBlocks(),processEvenIfEmpty:true}}this.process(B)},indent:function(){var u=this.ed,w=u.dom,x=[];function s(z){var y=w.create("li",{style:"list-style-type: none;"});w.insertAfter(y,z);return y}function t(B){var y=s(B),D=w.getParent(B,"ol,ul"),C=D.tagName,E=w.getStyle(D,"list-style-type"),A={},z;if(E!==""){A.style="list-style-type: "+E+";"}z=w.create(C,A);y.appendChild(z);return z}function v(z){if(!d(u,z,x)){z=c(z,w);var y=t(z);y.appendChild(z);m(y.parentNode,false);m(y,false);x.push(z)}}this.process({LI:v,defaultAction:this.adjustPaddingFunction(true),elements:this.selectedBlocks()})},outdent:function(y,x){var w=this,u=w.ed,z=u.dom,s=[];function A(t){var C,B,D;if(!d(u,t,s)){if(z.getStyle(t,"margin-left")!==""||z.getStyle(t,"padding-left")!==""){return w.adjustPaddingFunction(false)(t)}D=z.getStyle(t,"text-align",true);if(D==="center"||D==="right"){z.setStyle(t,"text-align","left");return}t=c(t,z);C=t.parentNode;B=t.parentNode.parentNode;if(B.tagName==="P"){z.split(B,t.parentNode)}else{z.split(C,t);if(B.tagName==="LI"){z.split(B,t)}else{if(!z.is(B,"ol,ul")){z.rename(t,"p")}}}s.push(t)}}var v=x&&tinymce.is(x,"array")?x:this.selectedBlocks();this.process({LI:A,defaultAction:this.adjustPaddingFunction(false),elements:v});e(s,m)},process:function(y){var F=this,w=F.ed.selection,z=F.ed.dom,E,u;function B(t){var s=tinymce.grep(t.childNodes,function(H){return !(H.nodeName==="BR"||H.nodeName==="SPAN"&&z.getAttrib(H,"data-mce-type")=="bookmark"||H.nodeType==3&&(H.nodeValue==String.fromCharCode(160)||H.nodeValue==""))});return s.length===0}function x(s){z.removeClass(s,"_mce_act_on");if(!s||s.nodeType!==1||!y.processEvenIfEmpty&&E.length>1&&B(s)){return}s=k(s,z);var t=y[s.tagName];if(!t){t=y.defaultAction}t(s)}function v(s){F.splitSafeEach(s.childNodes,x,true)}function C(s,t){return t>=0&&s.hasChildNodes()&&t0){t=s.shift();w.removeClass(t,"_mce_act_on");u(t);s=w.select("._mce_act_on")}},adjustPaddingFunction:function(u){var s,v,t=this.ed;s=t.settings.indentation;v=/[a-z%]+/i.exec(s);s=parseInt(s,10);return function(w){var y,x;y=parseInt(t.dom.getStyle(w,"margin-left")||0,10)+parseInt(t.dom.getStyle(w,"padding-left")||0,10);if(u){x=y+s}else{x=y-s}t.dom.setStyle(w,"padding-left","");t.dom.setStyle(w,"margin-left",x>0?x+v:"")}},selectedBlocks:function(){var s=this.ed,t=s.selection.getSelectedBlocks();return t.length==0?[s.dom.getRoot()]:t},getInfo:function(){return{longname:"Lists",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/lists",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("lists",tinymce.plugins.Lists)}()); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/lists/editor_plugin_src.js b/common/static/js/vendor/tiny_mce/plugins/lists/editor_plugin_src.js deleted file mode 100644 index 1000ef7455..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/lists/editor_plugin_src.js +++ /dev/null @@ -1,955 +0,0 @@ -/** - * editor_plugin_src.js - * - * Copyright 2011, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -(function() { - var each = tinymce.each, Event = tinymce.dom.Event, bookmark; - - // Skips text nodes that only contain whitespace since they aren't semantically important. - function skipWhitespaceNodes(e, next) { - while (e && (e.nodeType === 8 || (e.nodeType === 3 && /^[ \t\n\r]*$/.test(e.nodeValue)))) { - e = next(e); - } - return e; - } - - function skipWhitespaceNodesBackwards(e) { - return skipWhitespaceNodes(e, function(e) { - return e.previousSibling; - }); - } - - function skipWhitespaceNodesForwards(e) { - return skipWhitespaceNodes(e, function(e) { - return e.nextSibling; - }); - } - - function hasParentInList(ed, e, list) { - return ed.dom.getParent(e, function(p) { - return tinymce.inArray(list, p) !== -1; - }); - } - - function isList(e) { - return e && (e.tagName === 'OL' || e.tagName === 'UL'); - } - - function splitNestedLists(element, dom) { - var tmp, nested, wrapItem; - tmp = skipWhitespaceNodesBackwards(element.lastChild); - while (isList(tmp)) { - nested = tmp; - tmp = skipWhitespaceNodesBackwards(nested.previousSibling); - } - if (nested) { - wrapItem = dom.create('li', { style: 'list-style-type: none;'}); - dom.split(element, nested); - dom.insertAfter(wrapItem, nested); - wrapItem.appendChild(nested); - wrapItem.appendChild(nested); - element = wrapItem.previousSibling; - } - return element; - } - - function attemptMergeWithAdjacent(e, allowDifferentListStyles, mergeParagraphs) { - e = attemptMergeWithPrevious(e, allowDifferentListStyles, mergeParagraphs); - return attemptMergeWithNext(e, allowDifferentListStyles, mergeParagraphs); - } - - function attemptMergeWithPrevious(e, allowDifferentListStyles, mergeParagraphs) { - var prev = skipWhitespaceNodesBackwards(e.previousSibling); - if (prev) { - return attemptMerge(prev, e, allowDifferentListStyles ? prev : false, mergeParagraphs); - } else { - return e; - } - } - - function attemptMergeWithNext(e, allowDifferentListStyles, mergeParagraphs) { - var next = skipWhitespaceNodesForwards(e.nextSibling); - if (next) { - return attemptMerge(e, next, allowDifferentListStyles ? next : false, mergeParagraphs); - } else { - return e; - } - } - - function attemptMerge(e1, e2, differentStylesMasterElement, mergeParagraphs) { - if (canMerge(e1, e2, !!differentStylesMasterElement, mergeParagraphs)) { - return merge(e1, e2, differentStylesMasterElement); - } else if (e1 && e1.tagName === 'LI' && isList(e2)) { - // Fix invalidly nested lists. - e1.appendChild(e2); - } - return e2; - } - - function canMerge(e1, e2, allowDifferentListStyles, mergeParagraphs) { - if (!e1 || !e2) { - return false; - } else if (e1.tagName === 'LI' && e2.tagName === 'LI') { - return e2.style.listStyleType === 'none' || containsOnlyAList(e2); - } else if (isList(e1)) { - return (e1.tagName === e2.tagName && (allowDifferentListStyles || e1.style.listStyleType === e2.style.listStyleType)) || isListForIndent(e2); - } else return mergeParagraphs && e1.tagName === 'P' && e2.tagName === 'P'; - } - - function isListForIndent(e) { - var firstLI = skipWhitespaceNodesForwards(e.firstChild), lastLI = skipWhitespaceNodesBackwards(e.lastChild); - return firstLI && lastLI && isList(e) && firstLI === lastLI && (isList(firstLI) || firstLI.style.listStyleType === 'none' || containsOnlyAList(firstLI)); - } - - function containsOnlyAList(e) { - var firstChild = skipWhitespaceNodesForwards(e.firstChild), lastChild = skipWhitespaceNodesBackwards(e.lastChild); - return firstChild && lastChild && firstChild === lastChild && isList(firstChild); - } - - function merge(e1, e2, masterElement) { - var lastOriginal = skipWhitespaceNodesBackwards(e1.lastChild), firstNew = skipWhitespaceNodesForwards(e2.firstChild); - if (e1.tagName === 'P') { - e1.appendChild(e1.ownerDocument.createElement('br')); - } - while (e2.firstChild) { - e1.appendChild(e2.firstChild); - } - if (masterElement) { - e1.style.listStyleType = masterElement.style.listStyleType; - } - e2.parentNode.removeChild(e2); - attemptMerge(lastOriginal, firstNew, false); - return e1; - } - - function findItemToOperateOn(e, dom) { - var item; - if (!dom.is(e, 'li,ol,ul')) { - item = dom.getParent(e, 'li'); - if (item) { - e = item; - } - } - return e; - } - - tinymce.create('tinymce.plugins.Lists', { - init: function(ed) { - var LIST_TABBING = 'TABBING'; - var LIST_EMPTY_ITEM = 'EMPTY'; - var LIST_ESCAPE = 'ESCAPE'; - var LIST_PARAGRAPH = 'PARAGRAPH'; - var LIST_UNKNOWN = 'UNKNOWN'; - var state = LIST_UNKNOWN; - - function isTabInList(e) { - // Don't indent on Ctrl+Tab or Alt+Tab - return e.keyCode === tinymce.VK.TAB && !(e.altKey || e.ctrlKey) && - (ed.queryCommandState('InsertUnorderedList') || ed.queryCommandState('InsertOrderedList')); - } - - function isOnLastListItem() { - var li = getLi(); - var grandParent = li.parentNode.parentNode; - var isLastItem = li.parentNode.lastChild === li; - return isLastItem && !isNestedList(grandParent) && isEmptyListItem(li); - } - - function isNestedList(grandParent) { - if (isList(grandParent)) { - return grandParent.parentNode && grandParent.parentNode.tagName === 'LI'; - } else { - return grandParent.tagName === 'LI'; - } - } - - function isInEmptyListItem() { - return ed.selection.isCollapsed() && isEmptyListItem(getLi()); - } - - function getLi() { - var n = ed.selection.getStart(); - // Get start will return BR if the LI only contains a BR or an empty element as we use these to fix caret position - return ((n.tagName == 'BR' || n.tagName == '') && n.parentNode.tagName == 'LI') ? n.parentNode : n; - } - - function isEmptyListItem(li) { - var numChildren = li.childNodes.length; - if (li.tagName === 'LI') { - return numChildren == 0 ? true : numChildren == 1 && (li.firstChild.tagName == '' || li.firstChild.tagName == 'BR' || isEmptyIE9Li(li)); - } - return false; - } - - function isEmptyIE9Li(li) { - // only consider this to be last item if there is no list item content or that content is nbsp or space since IE9 creates these - var lis = tinymce.grep(li.parentNode.childNodes, function(n) {return n.tagName == 'LI'}); - var isLastLi = li == lis[lis.length - 1]; - var child = li.firstChild; - return tinymce.isIE9 && isLastLi && (child.nodeValue == String.fromCharCode(160) || child.nodeValue == String.fromCharCode(32)); - } - - function isEnter(e) { - return e.keyCode === tinymce.VK.ENTER; - } - - function isEnterWithoutShift(e) { - return isEnter(e) && !e.shiftKey; - } - - function getListKeyState(e) { - if (isTabInList(e)) { - return LIST_TABBING; - } else if (isEnterWithoutShift(e) && isOnLastListItem()) { - // Returns LIST_UNKNOWN since breaking out of lists is handled by the EnterKey.js logic now - //return LIST_ESCAPE; - return LIST_UNKNOWN; - } else if (isEnterWithoutShift(e) && isInEmptyListItem()) { - return LIST_EMPTY_ITEM; - } else { - return LIST_UNKNOWN; - } - } - - function cancelDefaultEvents(ed, e) { - // list escape is done manually using outdent as it does not create paragraphs correctly in td's - if (state == LIST_TABBING || state == LIST_EMPTY_ITEM || tinymce.isGecko && state == LIST_ESCAPE) { - Event.cancel(e); - } - } - - function isCursorAtEndOfContainer() { - var range = ed.selection.getRng(true); - var startContainer = range.startContainer; - if (startContainer.nodeType == 3) { - var value = startContainer.nodeValue; - if (tinymce.isIE9 && value.length > 1 && value.charCodeAt(value.length-1) == 32) { - // IE9 places a space on the end of the text in some cases so ignore last char - return (range.endOffset == value.length-1); - } else { - return (range.endOffset == value.length); - } - } else if (startContainer.nodeType == 1) { - return range.endOffset == startContainer.childNodes.length; - } - return false; - } - - /* - If we are at the end of a list item surrounded with an element, pressing enter should create a - new list item instead without splitting the element e.g. don't want to create new P or H1 tag - */ - function isEndOfListItem() { - var node = ed.selection.getNode(); - var validElements = 'h1,h2,h3,h4,h5,h6,p,div'; - var isLastParagraphOfLi = ed.dom.is(node, validElements) && node.parentNode.tagName === 'LI' && node.parentNode.lastChild === node; - return ed.selection.isCollapsed() && isLastParagraphOfLi && isCursorAtEndOfContainer(); - } - - // Creates a new list item after the current selection's list item parent - function createNewLi(ed, e) { - if (isEnterWithoutShift(e) && isEndOfListItem()) { - var node = ed.selection.getNode(); - var li = ed.dom.create("li"); - var parentLi = ed.dom.getParent(node, 'li'); - ed.dom.insertAfter(li, parentLi); - - // Move caret to new list element. - if (tinymce.isIE6 || tinymce.isIE7 || tinyMCE.isIE8) { - // Removed this line since it would create an odd < > tag and placing the caret inside an empty LI is handled and should be handled by the selection logic - //li.appendChild(ed.dom.create(" ")); // IE needs an element within the bullet point - ed.selection.setCursorLocation(li, 1); - } else { - ed.selection.setCursorLocation(li, 0); - } - e.preventDefault(); - } - } - - function imageJoiningListItem(ed, e) { - var prevSibling; - - if (!tinymce.isGecko) - return; - - var n = ed.selection.getStart(); - if (e.keyCode != tinymce.VK.BACKSPACE || n.tagName !== 'IMG') - return; - - function lastLI(node) { - var child = node.firstChild; - var li = null; - do { - if (!child) - break; - - if (child.tagName === 'LI') - li = child; - } while (child = child.nextSibling); - - return li; - } - - function addChildren(parentNode, destination) { - while (parentNode.childNodes.length > 0) - destination.appendChild(parentNode.childNodes[0]); - } - - // Check if there is a previous sibling - prevSibling = n.parentNode.previousSibling; - if (!prevSibling) - return; - - var ul; - if (prevSibling.tagName === 'UL' || prevSibling.tagName === 'OL') - ul = prevSibling; - else if (prevSibling.previousSibling && (prevSibling.previousSibling.tagName === 'UL' || prevSibling.previousSibling.tagName === 'OL')) - ul = prevSibling.previousSibling; - else - return; - - var li = lastLI(ul); - - // move the caret to the end of the list item - var rng = ed.dom.createRng(); - rng.setStart(li, 1); - rng.setEnd(li, 1); - ed.selection.setRng(rng); - ed.selection.collapse(true); - - // save a bookmark at the end of the list item - var bookmark = ed.selection.getBookmark(); - - // copy the image an its text to the list item - var clone = n.parentNode.cloneNode(true); - if (clone.tagName === 'P' || clone.tagName === 'DIV') - addChildren(clone, li); - else - li.appendChild(clone); - - // remove the old copy of the image - n.parentNode.parentNode.removeChild(n.parentNode); - - // move the caret where we saved the bookmark - ed.selection.moveToBookmark(bookmark); - } - - // fix the cursor position to ensure it is correct in IE - function setCursorPositionToOriginalLi(li) { - var list = ed.dom.getParent(li, 'ol,ul'); - if (list != null) { - var lastLi = list.lastChild; - // Removed this line since IE9 would report an DOM character error and placing the caret inside an empty LI is handled and should be handled by the selection logic - //lastLi.appendChild(ed.getDoc().createElement('')); - ed.selection.setCursorLocation(lastLi, 0); - } - } - - this.ed = ed; - ed.addCommand('Indent', this.indent, this); - ed.addCommand('Outdent', this.outdent, this); - ed.addCommand('InsertUnorderedList', function() { - this.applyList('UL', 'OL'); - }, this); - ed.addCommand('InsertOrderedList', function() { - this.applyList('OL', 'UL'); - }, this); - - ed.onInit.add(function() { - ed.editorCommands.addCommands({ - 'outdent': function() { - var sel = ed.selection, dom = ed.dom; - - function hasStyleIndent(n) { - n = dom.getParent(n, dom.isBlock); - return n && (parseInt(ed.dom.getStyle(n, 'margin-left') || 0, 10) + parseInt(ed.dom.getStyle(n, 'padding-left') || 0, 10)) > 0; - } - - return hasStyleIndent(sel.getStart()) || hasStyleIndent(sel.getEnd()) || ed.queryCommandState('InsertOrderedList') || ed.queryCommandState('InsertUnorderedList'); - } - }, 'state'); - }); - - ed.onKeyUp.add(function(ed, e) { - if (state == LIST_TABBING) { - ed.execCommand(e.shiftKey ? 'Outdent' : 'Indent', true, null); - state = LIST_UNKNOWN; - return Event.cancel(e); - } else if (state == LIST_EMPTY_ITEM) { - var li = getLi(); - var shouldOutdent = ed.settings.list_outdent_on_enter === true || e.shiftKey; - ed.execCommand(shouldOutdent ? 'Outdent' : 'Indent', true, null); - if (tinymce.isIE) { - setCursorPositionToOriginalLi(li); - } - - return Event.cancel(e); - } else if (state == LIST_ESCAPE) { - if (tinymce.isIE6 || tinymce.isIE7 || tinymce.isIE8) { - // append a zero sized nbsp so that caret is positioned correctly in IE after escaping and applying formatting. - // if there is no text then applying formatting for e.g a H1 to the P tag immediately following list after - // escaping from it will cause the caret to be positioned on the last li instead of staying the in P tag. - var n = ed.getDoc().createTextNode('\uFEFF'); - ed.selection.getNode().appendChild(n); - } else if (tinymce.isIE9 || tinymce.isGecko) { - // IE9 does not escape the list so we use outdent to do this and cancel the default behaviour - // Gecko does not create a paragraph outdenting inside a TD so default behaviour is cancelled and we outdent ourselves - ed.execCommand('Outdent'); - return Event.cancel(e); - } - } - }); - - function fixListItem(parent, reference) { - // a zero-sized non-breaking space is placed in the empty list item so that the nested list is - // displayed on the below line instead of next to it - var n = ed.getDoc().createTextNode('\uFEFF'); - parent.insertBefore(n, reference); - ed.selection.setCursorLocation(n, 0); - // repaint to remove rendering artifact. only visible when creating new list - ed.execCommand('mceRepaint'); - } - - function fixIndentedListItemForGecko(ed, e) { - if (isEnter(e)) { - var li = getLi(); - if (li) { - var parent = li.parentNode; - var grandParent = parent && parent.parentNode; - if (grandParent && grandParent.nodeName == 'LI' && grandParent.firstChild == parent && li == parent.firstChild) { - fixListItem(grandParent, parent); - } - } - } - } - - function fixIndentedListItemForIE8(ed, e) { - if (isEnter(e)) { - var li = getLi(); - if (ed.dom.select('ul li', li).length === 1) { - var list = li.firstChild; - fixListItem(li, list); - } - } - } - - function fixDeletingFirstCharOfList(ed, e) { - function listElements(li) { - var elements = []; - var walker = new tinymce.dom.TreeWalker(li.firstChild, li); - for (var node = walker.current(); node; node = walker.next()) { - if (ed.dom.is(node, 'ol,ul,li')) { - elements.push(node); - } - } - return elements; - } - - if (e.keyCode == tinymce.VK.BACKSPACE) { - var li = getLi(); - if (li) { - var list = ed.dom.getParent(li, 'ol,ul'), - rng = ed.selection.getRng(); - if (list && list.firstChild === li && rng.startOffset == 0) { - var elements = listElements(li); - elements.unshift(li); - ed.execCommand("Outdent", false, elements); - ed.undoManager.add(); - return Event.cancel(e); - } - } - } - } - - function fixDeletingEmptyLiInWebkit(ed, e) { - var li = getLi(); - if (e.keyCode === tinymce.VK.BACKSPACE && ed.dom.is(li, 'li') && li.parentNode.firstChild!==li) { - if (ed.dom.select('ul,ol', li).length === 1) { - var prevLi = li.previousSibling; - ed.dom.remove(ed.dom.select('br', li)); - ed.dom.remove(li, true); - var textNodes = tinymce.grep(prevLi.childNodes, function(n){ return n.nodeType === 3 }); - if (textNodes.length === 1) { - var textNode = textNodes[0]; - ed.selection.setCursorLocation(textNode, textNode.length); - } - ed.undoManager.add(); - return Event.cancel(e); - } - } - } - - ed.onKeyDown.add(function(_, e) { state = getListKeyState(e); }); - ed.onKeyDown.add(cancelDefaultEvents); - ed.onKeyDown.add(imageJoiningListItem); - ed.onKeyDown.add(createNewLi); - - if (tinymce.isGecko) { - ed.onKeyUp.add(fixIndentedListItemForGecko); - } - if (tinymce.isIE8) { - ed.onKeyUp.add(fixIndentedListItemForIE8); - } - if (tinymce.isGecko || tinymce.isWebKit) { - ed.onKeyDown.add(fixDeletingFirstCharOfList); - } - if (tinymce.isWebKit) { - ed.onKeyDown.add(fixDeletingEmptyLiInWebkit); - } - }, - - applyList: function(targetListType, oppositeListType) { - var t = this, ed = t.ed, dom = ed.dom, applied = [], hasSameType = false, hasOppositeType = false, hasNonList = false, actions, - selectedBlocks = ed.selection.getSelectedBlocks(); - - function cleanupBr(e) { - if (e && e.tagName === 'BR') { - dom.remove(e); - } - } - - function makeList(element) { - var list = dom.create(targetListType), li; - - function adjustIndentForNewList(element) { - // If there's a margin-left, outdent one level to account for the extra list margin. - if (element.style.marginLeft || element.style.paddingLeft) { - t.adjustPaddingFunction(false)(element); - } - } - - if (element.tagName === 'LI') { - // No change required. - } else if (element.tagName === 'P' || element.tagName === 'DIV' || element.tagName === 'BODY') { - processBrs(element, function(startSection, br) { - doWrapList(startSection, br, element.tagName === 'BODY' ? null : startSection.parentNode); - li = startSection.parentNode; - adjustIndentForNewList(li); - cleanupBr(br); - }); - if (li) { - if (li.tagName === 'LI' && (element.tagName === 'P' || selectedBlocks.length > 1)) { - dom.split(li.parentNode.parentNode, li.parentNode); - } - attemptMergeWithAdjacent(li.parentNode, true); - } - return; - } else { - // Put the list around the element. - li = dom.create('li'); - dom.insertAfter(li, element); - li.appendChild(element); - adjustIndentForNewList(element); - element = li; - } - dom.insertAfter(list, element); - list.appendChild(element); - attemptMergeWithAdjacent(list, true); - applied.push(element); - } - - function doWrapList(start, end, template) { - var li, n = start, tmp; - while (!dom.isBlock(start.parentNode) && start.parentNode !== dom.getRoot()) { - start = dom.split(start.parentNode, start.previousSibling); - start = start.nextSibling; - n = start; - } - if (template) { - li = template.cloneNode(true); - start.parentNode.insertBefore(li, start); - while (li.firstChild) dom.remove(li.firstChild); - li = dom.rename(li, 'li'); - } else { - li = dom.create('li'); - start.parentNode.insertBefore(li, start); - } - while (n && n != end) { - tmp = n.nextSibling; - li.appendChild(n); - n = tmp; - } - if (li.childNodes.length === 0) { - li.innerHTML = '
'; - } - makeList(li); - } - - function processBrs(element, callback) { - var startSection, previousBR, END_TO_START = 3, START_TO_END = 1, - breakElements = 'br,ul,ol,p,div,h1,h2,h3,h4,h5,h6,table,blockquote,address,pre,form,center,dl'; - - function isAnyPartSelected(start, end) { - var r = dom.createRng(), sel; - bookmark.keep = true; - ed.selection.moveToBookmark(bookmark); - bookmark.keep = false; - sel = ed.selection.getRng(true); - if (!end) { - end = start.parentNode.lastChild; - } - r.setStartBefore(start); - r.setEndAfter(end); - return !(r.compareBoundaryPoints(END_TO_START, sel) > 0 || r.compareBoundaryPoints(START_TO_END, sel) <= 0); - } - - function nextLeaf(br) { - if (br.nextSibling) - return br.nextSibling; - if (!dom.isBlock(br.parentNode) && br.parentNode !== dom.getRoot()) - return nextLeaf(br.parentNode); - } - - // Split on BRs within the range and process those. - startSection = element.firstChild; - // First mark the BRs that have any part of the previous section selected. - var trailingContentSelected = false; - each(dom.select(breakElements, element), function(br) { - if (br.hasAttribute && br.hasAttribute('_mce_bogus')) { - return true; // Skip the bogus Brs that are put in to appease Firefox and Safari. - } - if (isAnyPartSelected(startSection, br)) { - dom.addClass(br, '_mce_tagged_br'); - startSection = nextLeaf(br); - } - }); - trailingContentSelected = (startSection && isAnyPartSelected(startSection, undefined)); - startSection = element.firstChild; - each(dom.select(breakElements, element), function(br) { - // Got a section from start to br. - var tmp = nextLeaf(br); - if (br.hasAttribute && br.hasAttribute('_mce_bogus')) { - return true; // Skip the bogus Brs that are put in to appease Firefox and Safari. - } - if (dom.hasClass(br, '_mce_tagged_br')) { - callback(startSection, br, previousBR); - previousBR = null; - } else { - previousBR = br; - } - startSection = tmp; - }); - if (trailingContentSelected) { - callback(startSection, undefined, previousBR); - } - } - - function wrapList(element) { - processBrs(element, function(startSection, br, previousBR) { - // Need to indent this part - doWrapList(startSection, br); - cleanupBr(br); - cleanupBr(previousBR); - }); - } - - function changeList(element) { - if (tinymce.inArray(applied, element) !== -1) { - return; - } - if (element.parentNode.tagName === oppositeListType) { - dom.split(element.parentNode, element); - makeList(element); - attemptMergeWithNext(element.parentNode, false); - } - applied.push(element); - } - - function convertListItemToParagraph(element) { - var child, nextChild, mergedElement, splitLast; - if (tinymce.inArray(applied, element) !== -1) { - return; - } - element = splitNestedLists(element, dom); - while (dom.is(element.parentNode, 'ol,ul,li')) { - dom.split(element.parentNode, element); - } - // Push the original element we have from the selection, not the renamed one. - applied.push(element); - element = dom.rename(element, 'p'); - mergedElement = attemptMergeWithAdjacent(element, false, ed.settings.force_br_newlines); - if (mergedElement === element) { - // Now split out any block elements that can't be contained within a P. - // Manually iterate to ensure we handle modifications correctly (doesn't work with tinymce.each) - child = element.firstChild; - while (child) { - if (dom.isBlock(child)) { - child = dom.split(child.parentNode, child); - splitLast = true; - nextChild = child.nextSibling && child.nextSibling.firstChild; - } else { - nextChild = child.nextSibling; - if (splitLast && child.tagName === 'BR') { - dom.remove(child); - } - splitLast = false; - } - child = nextChild; - } - } - } - - each(selectedBlocks, function(e) { - e = findItemToOperateOn(e, dom); - if (e.tagName === oppositeListType || (e.tagName === 'LI' && e.parentNode.tagName === oppositeListType)) { - hasOppositeType = true; - } else if (e.tagName === targetListType || (e.tagName === 'LI' && e.parentNode.tagName === targetListType)) { - hasSameType = true; - } else { - hasNonList = true; - } - }); - - if (hasNonList &&!hasSameType || hasOppositeType || selectedBlocks.length === 0) { - actions = { - 'LI': changeList, - 'H1': makeList, - 'H2': makeList, - 'H3': makeList, - 'H4': makeList, - 'H5': makeList, - 'H6': makeList, - 'P': makeList, - 'BODY': makeList, - 'DIV': selectedBlocks.length > 1 ? makeList : wrapList, - defaultAction: wrapList, - elements: this.selectedBlocks() - }; - } else { - actions = { - defaultAction: convertListItemToParagraph, - elements: this.selectedBlocks(), - processEvenIfEmpty: true - }; - } - this.process(actions); - }, - - indent: function() { - var ed = this.ed, dom = ed.dom, indented = []; - - function createWrapItem(element) { - var wrapItem = dom.create('li', { style: 'list-style-type: none;'}); - dom.insertAfter(wrapItem, element); - return wrapItem; - } - - function createWrapList(element) { - var wrapItem = createWrapItem(element), - list = dom.getParent(element, 'ol,ul'), - listType = list.tagName, - listStyle = dom.getStyle(list, 'list-style-type'), - attrs = {}, - wrapList; - if (listStyle !== '') { - attrs.style = 'list-style-type: ' + listStyle + ';'; - } - wrapList = dom.create(listType, attrs); - wrapItem.appendChild(wrapList); - return wrapList; - } - - function indentLI(element) { - if (!hasParentInList(ed, element, indented)) { - element = splitNestedLists(element, dom); - var wrapList = createWrapList(element); - wrapList.appendChild(element); - attemptMergeWithAdjacent(wrapList.parentNode, false); - attemptMergeWithAdjacent(wrapList, false); - indented.push(element); - } - } - - this.process({ - 'LI': indentLI, - defaultAction: this.adjustPaddingFunction(true), - elements: this.selectedBlocks() - }); - - }, - - outdent: function(ui, elements) { - var t = this, ed = t.ed, dom = ed.dom, outdented = []; - - function outdentLI(element) { - var listElement, targetParent, align; - if (!hasParentInList(ed, element, outdented)) { - if (dom.getStyle(element, 'margin-left') !== '' || dom.getStyle(element, 'padding-left') !== '') { - return t.adjustPaddingFunction(false)(element); - } - align = dom.getStyle(element, 'text-align', true); - if (align === 'center' || align === 'right') { - dom.setStyle(element, 'text-align', 'left'); - return; - } - element = splitNestedLists(element, dom); - listElement = element.parentNode; - targetParent = element.parentNode.parentNode; - if (targetParent.tagName === 'P') { - dom.split(targetParent, element.parentNode); - } else { - dom.split(listElement, element); - if (targetParent.tagName === 'LI') { - // Nested list, need to split the LI and go back out to the OL/UL element. - dom.split(targetParent, element); - } else if (!dom.is(targetParent, 'ol,ul')) { - dom.rename(element, 'p'); - } - } - outdented.push(element); - } - } - - var listElements = elements && tinymce.is(elements, 'array') ? elements : this.selectedBlocks(); - this.process({ - 'LI': outdentLI, - defaultAction: this.adjustPaddingFunction(false), - elements: listElements - }); - - each(outdented, attemptMergeWithAdjacent); - }, - - process: function(actions) { - var t = this, sel = t.ed.selection, dom = t.ed.dom, selectedBlocks, r; - - function isEmptyElement(element) { - var excludeBrsAndBookmarks = tinymce.grep(element.childNodes, function(n) { - return !(n.nodeName === 'BR' || n.nodeName === 'SPAN' && dom.getAttrib(n, 'data-mce-type') == 'bookmark' - || n.nodeType == 3 && (n.nodeValue == String.fromCharCode(160) || n.nodeValue == '')); - }); - return excludeBrsAndBookmarks.length === 0; - } - - function processElement(element) { - dom.removeClass(element, '_mce_act_on'); - if (!element || element.nodeType !== 1 || ! actions.processEvenIfEmpty && selectedBlocks.length > 1 && isEmptyElement(element)) { - return; - } - element = findItemToOperateOn(element, dom); - var action = actions[element.tagName]; - if (!action) { - action = actions.defaultAction; - } - action(element); - } - - function recurse(element) { - t.splitSafeEach(element.childNodes, processElement, true); - } - - function brAtEdgeOfSelection(container, offset) { - return offset >= 0 && container.hasChildNodes() && offset < container.childNodes.length && - container.childNodes[offset].tagName === 'BR'; - } - - function isInTable() { - var n = sel.getNode(); - var p = dom.getParent(n, 'td'); - return p !== null; - } - - selectedBlocks = actions.elements; - - r = sel.getRng(true); - if (!r.collapsed) { - if (brAtEdgeOfSelection(r.endContainer, r.endOffset - 1)) { - r.setEnd(r.endContainer, r.endOffset - 1); - sel.setRng(r); - } - if (brAtEdgeOfSelection(r.startContainer, r.startOffset)) { - r.setStart(r.startContainer, r.startOffset + 1); - sel.setRng(r); - } - } - - - if (tinymce.isIE8) { - // append a zero sized nbsp so that caret is restored correctly using bookmark - var s = t.ed.selection.getNode(); - if (s.tagName === 'LI' && !(s.parentNode.lastChild === s)) { - var i = t.ed.getDoc().createTextNode('\uFEFF'); - s.appendChild(i); - } - } - - bookmark = sel.getBookmark(); - actions.OL = actions.UL = recurse; - t.splitSafeEach(selectedBlocks, processElement); - sel.moveToBookmark(bookmark); - bookmark = null; - - // we avoid doing repaint in a table as this will move the caret out of the table in Firefox 3.6 - if (!isInTable()) { - // Avoids table or image handles being left behind in Firefox. - t.ed.execCommand('mceRepaint'); - } - }, - - splitSafeEach: function(elements, f, forceClassBase) { - if (forceClassBase || - (tinymce.isGecko && - (/Firefox\/[12]\.[0-9]/.test(navigator.userAgent) || - /Firefox\/3\.[0-4]/.test(navigator.userAgent)))) { - this.classBasedEach(elements, f); - } else { - each(elements, f); - } - }, - - classBasedEach: function(elements, f) { - var dom = this.ed.dom, nodes, element; - // Mark nodes - each(elements, function(element) { - dom.addClass(element, '_mce_act_on'); - }); - nodes = dom.select('._mce_act_on'); - while (nodes.length > 0) { - element = nodes.shift(); - dom.removeClass(element, '_mce_act_on'); - f(element); - nodes = dom.select('._mce_act_on'); - } - }, - - adjustPaddingFunction: function(isIndent) { - var indentAmount, indentUnits, ed = this.ed; - indentAmount = ed.settings.indentation; - indentUnits = /[a-z%]+/i.exec(indentAmount); - indentAmount = parseInt(indentAmount, 10); - return function(element) { - var currentIndent, newIndentAmount; - currentIndent = parseInt(ed.dom.getStyle(element, 'margin-left') || 0, 10) + parseInt(ed.dom.getStyle(element, 'padding-left') || 0, 10); - if (isIndent) { - newIndentAmount = currentIndent + indentAmount; - } else { - newIndentAmount = currentIndent - indentAmount; - } - ed.dom.setStyle(element, 'padding-left', ''); - ed.dom.setStyle(element, 'margin-left', newIndentAmount > 0 ? newIndentAmount + indentUnits : ''); - }; - }, - - selectedBlocks: function() { - var ed = this.ed, selectedBlocks = ed.selection.getSelectedBlocks(); - return selectedBlocks.length == 0 ? [ ed.dom.getRoot() ] : selectedBlocks; - }, - - getInfo: function() { - return { - longname : 'Lists', - author : 'Moxiecode Systems AB', - authorurl : 'http://tinymce.moxiecode.com', - infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/lists', - version : tinymce.majorVersion + "." + tinymce.minorVersion - }; - } - }); - tinymce.PluginManager.add("lists", tinymce.plugins.Lists); -}()); diff --git a/common/static/js/vendor/tiny_mce/plugins/lists/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/lists/plugin.min.js new file mode 100644 index 0000000000..3f1de3972e --- /dev/null +++ b/common/static/js/vendor/tiny_mce/plugins/lists/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("lists",function(e){function t(e){return e&&/^(OL|UL)$/.test(e.nodeName)}function n(e){return e.parentNode.firstChild==e}function r(e){return e.parentNode.lastChild==e}function o(t){return t&&!!e.schema.getTextBlockElements()[t.nodeName]}function i(e){return e&&"SPAN"===e.nodeName&&"bookmark"===e.getAttribute("data-mce-type")}var a=this;e.on("init",function(){function d(e){function t(t){var r,o,i;o=e[t?"startContainer":"endContainer"],i=e[t?"startOffset":"endOffset"],1==o.nodeType&&(r=b.create("span",{"data-mce-type":"bookmark"}),o.hasChildNodes()?(i=Math.min(i,o.childNodes.length-1),t?o.insertBefore(r,o.childNodes[i]):b.insertAfter(r,o.childNodes[i])):o.appendChild(r),o=r,i=0),n[t?"startContainer":"endContainer"]=o,n[t?"startOffset":"endOffset"]=i}var n={};return t(!0),e.collapsed||t(),n}function s(e){function t(t){function n(e){for(var t=e.parentNode.firstChild,n=0;t;){if(t==e)return n;(1!=t.nodeType||"bookmark"!=t.getAttribute("data-mce-type"))&&n++,t=t.nextSibling}return-1}var r,o,i;r=i=e[t?"startContainer":"endContainer"],o=e[t?"startOffset":"endOffset"],r&&(1==r.nodeType&&(o=n(r),r=r.parentNode,b.remove(i)),e[t?"startContainer":"endContainer"]=r,e[t?"startOffset":"endOffset"]=o)}t(!0),t();var n=b.createRng();n.setStart(e.startContainer,e.startOffset),e.endContainer&&n.setEnd(e.endContainer,e.endOffset),L.setRng(n)}function f(t,n){var r,o,i,a=b.createFragment(),d=e.schema.getBlockElements();if(e.settings.forced_root_block&&(n=n||e.settings.forced_root_block),n&&(o=b.create(n),o.tagName===e.settings.forced_root_block&&b.setAttribs(o,e.settings.forced_root_block_attrs),a.appendChild(o)),t)for(;r=t.firstChild;){var s=r.nodeName;i||"SPAN"==s&&"bookmark"==r.getAttribute("data-mce-type")||(i=!0),d[s]?(a.appendChild(r),o=null):n?(o||(o=b.create(n),a.appendChild(o)),o.appendChild(r)):a.appendChild(r)}return e.settings.forced_root_block?i||tinymce.Env.ie&&!(tinymce.Env.ie>10)||o.appendChild(b.create("br",{"data-mce-bogus":"1"})):a.appendChild(b.create("br")),a}function l(){return tinymce.grep(L.getSelectedBlocks(),function(e){return"LI"==e.nodeName})}function c(e,t,n){var r,o,i=b.select('span[data-mce-type="bookmark"]',e);n=n||f(t),r=b.createRng(),r.setStartAfter(t),r.setEndAfter(e),o=r.extractContents(),b.isEmpty(o)||b.insertAfter(o,e),b.insertAfter(n,e),b.isEmpty(t.parentNode)&&(tinymce.each(i,function(e){t.parentNode.parentNode.insertBefore(e,t.parentNode)}),b.remove(t.parentNode)),b.remove(t)}function p(e){var n,r;if(n=e.nextSibling,n&&t(n)&&n.nodeName==e.nodeName){for(;r=n.firstChild;)e.appendChild(r);b.remove(n)}if(n=e.previousSibling,n&&t(n)&&n.nodeName==e.nodeName){for(;r=n.firstChild;)e.insertBefore(r,e.firstChild);b.remove(n)}}function u(e){tinymce.each(tinymce.grep(b.select("ol,ul",e)),function(e){var n,r=e.parentNode;"LI"==r.nodeName&&r.firstChild==e&&(n=r.previousSibling,n&&"LI"==n.nodeName&&(n.appendChild(e),b.isEmpty(r)&&b.remove(r))),t(r)&&(n=r.previousSibling,n&&"LI"==n.nodeName&&n.appendChild(e))})}function m(e){function o(e){b.isEmpty(e)&&b.remove(e)}var i,a=e.parentNode,d=a.parentNode;return n(e)&&r(e)?("LI"==d.nodeName?(b.insertAfter(e,d),o(d),b.remove(a)):t(d)?b.remove(a,!0):(d.insertBefore(f(e),a),b.remove(a)),!0):n(e)?("LI"==d.nodeName?(b.insertAfter(e,d),e.appendChild(a),o(d)):t(d)?d.insertBefore(e,a):(d.insertBefore(f(e),a),b.remove(e)),!0):r(e)?("LI"==d.nodeName?b.insertAfter(e,d):t(d)?b.insertAfter(e,a):(b.insertAfter(f(e),a),b.remove(e)),!0):("LI"==d.nodeName?(a=d,i=f(e,"LI")):i=t(d)?f(e,"LI"):f(e),c(a,e,i),u(a.parentNode),!0)}function h(e){function n(n,r){var o;if(t(n)){for(;o=e.lastChild.firstChild;)r.appendChild(o);b.remove(n)}}var r,o;return r=e.previousSibling,r&&t(r)?(r.appendChild(e),!0):r&&"LI"==r.nodeName&&t(r.lastChild)?(r.lastChild.appendChild(e),n(e.lastChild,r.lastChild),!0):(r=e.nextSibling,r&&t(r)?(r.insertBefore(e,r.firstChild),!0):r&&"LI"==r.nodeName&&t(e.lastChild)?!1:(r=e.previousSibling,r&&"LI"==r.nodeName?(o=b.create(e.parentNode.nodeName),r.appendChild(o),o.appendChild(e),n(e.lastChild,o),!0):!1))}function v(){var t=l();if(t.length){for(var n=d(L.getRng(!0)),r=0;r0))return n;for(var o=new tinymce.dom.TreeWalker(e.startContainer);n=o[t?"next":"prev"]();)if(3==n.nodeType&&n.data.length>0)return n}function r(e,n){var r,o,i=e.parentNode;for(t(n.lastChild)&&(o=n.lastChild),r=n.lastChild,r&&"BR"==r.nodeName&&e.hasChildNodes()&&b.remove(r);r=e.firstChild;)n.appendChild(r);o&&n.appendChild(o),b.remove(e),b.isEmpty(i)&&b.remove(i)}if(L.isCollapsed()){var o=b.getParent(L.getStart(),"LI");if(o){var i=L.getRng(!0),a=b.getParent(n(i,e),"LI");if(a&&a!=o){var f=d(i);return e?r(a,o):r(o,a),s(f),!0}if(!a&&!e&&N(o.parentNode.nodeName))return!0}}},e.addCommand("Indent",function(){return v()?void 0:!0}),e.addCommand("Outdent",function(){return C()?void 0:!0}),e.addCommand("InsertUnorderedList",function(){y("UL")}),e.addCommand("InsertOrderedList",function(){y("OL")}),e.on("keydown",function(t){9==t.keyCode&&e.dom.getParent(e.selection.getStart(),"LI")&&(t.preventDefault(),t.shiftKey?C():v())})}),e.addButton("indent",{icon:"indent",title:"Increase indent",cmd:"Indent",onPostRender:function(){var t=this;e.on("nodechange",function(){var r=e.dom.getParent(e.selection.getNode(),"LI,UL,OL");t.disabled(r&&("LI"!=r.nodeName||n(r)))})}}),e.on("keydown",function(e){e.keyCode==tinymce.util.VK.BACKSPACE?a.backspaceDelete()&&e.preventDefault():e.keyCode==tinymce.util.VK.DELETE&&a.backspaceDelete(!0)&&e.preventDefault()})}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/media/css/media.css b/common/static/js/vendor/tiny_mce/plugins/media/css/media.css deleted file mode 100644 index fd04898ca5..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/media/css/media.css +++ /dev/null @@ -1,17 +0,0 @@ -#id, #name, #hspace, #vspace, #class_name, #align { width: 100px } -#hspace, #vspace { width: 50px } -#flash_quality, #flash_align, #flash_scale, #flash_salign, #flash_wmode { width: 100px } -#flash_base, #flash_flashvars, #html5_altsource1, #html5_altsource2, #html5_poster { width: 240px } -#width, #height { width: 40px } -#src, #media_type { width: 250px } -#class { width: 120px } -#prev { margin: 0; border: 1px solid black; width: 380px; height: 260px; overflow: auto } -.panel_wrapper div.current { height: 420px; overflow: auto } -#flash_options, #shockwave_options, #qt_options, #wmp_options, #rmp_options { display: none } -.mceAddSelectValue { background-color: #DDDDDD } -#qt_starttime, #qt_endtime, #qt_fov, #qt_href, #qt_moveid, #qt_moviename, #qt_node, #qt_pan, #qt_qtsrc, #qt_qtsrcchokespeed, #qt_target, #qt_tilt, #qt_urlsubstituten, #qt_volume { width: 70px } -#wmp_balance, #wmp_baseurl, #wmp_captioningid, #wmp_currentmarker, #wmp_currentposition, #wmp_defaultframe, #wmp_playcount, #wmp_rate, #wmp_uimode, #wmp_volume { width: 70px } -#rmp_console, #rmp_numloop, #rmp_controls, #rmp_scriptcallbacks { width: 70px } -#shockwave_swvolume, #shockwave_swframe, #shockwave_swurl, #shockwave_swstretchvalign, #shockwave_swstretchhalign, #shockwave_swstretchstyle { width: 90px } -#qt_qtsrc { width: 200px } -iframe {border: 1px solid gray} diff --git a/common/static/js/vendor/tiny_mce/plugins/media/editor_plugin.js b/common/static/js/vendor/tiny_mce/plugins/media/editor_plugin.js deleted file mode 100644 index 9ac42e0d21..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/media/editor_plugin.js +++ /dev/null @@ -1 +0,0 @@ -(function(){var b=tinymce.explode("id,name,width,height,style,align,class,hspace,vspace,bgcolor,type"),a=tinymce.makeMap(b.join(",")),f=tinymce.html.Node,d,i,h=tinymce.util.JSON,g;d=[["Flash","d27cdb6e-ae6d-11cf-96b8-444553540000","application/x-shockwave-flash","http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"],["ShockWave","166b1bca-3f9c-11cf-8075-444553540000","application/x-director","http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0"],["WindowsMedia","6bf52a52-394a-11d3-b153-00c04f79faa6,22d6f312-b0f6-11d0-94ab-0080c74c7e95,05589fa1-c356-11ce-bf01-00aa0055595a","application/x-mplayer2","http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701"],["QuickTime","02bf25d5-8c17-4b23-bc80-d3488abddc6b","video/quicktime","http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0"],["RealMedia","cfcdaa03-8be4-11cf-b84b-0020afbbccfa","audio/x-pn-realaudio-plugin","http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"],["Java","8ad9c840-044e-11d1-b3e9-00805f499d93","application/x-java-applet","http://java.sun.com/products/plugin/autodl/jinstall-1_5_0-windows-i586.cab#Version=1,5,0,0"],["Silverlight","dfeaf541-f3e1-4c24-acac-99c30715084a","application/x-silverlight-2"],["Iframe"],["Video"],["EmbeddedAudio"],["Audio"]];function e(j){return typeof(j)=="string"?j.replace(/[^0-9%]/g,""):j}function c(m){var l,j,k;if(m&&!m.splice){j=[];for(k=0;true;k++){if(m[k]){j[k]=m[k]}else{break}}return j}return m}tinymce.create("tinymce.plugins.MediaPlugin",{init:function(n,j){var r=this,l={},m,p,q,k;function o(s){return s&&s.nodeName==="IMG"&&n.dom.hasClass(s,"mceItemMedia")}r.editor=n;r.url=j;i="";for(m=0;m0){O+=(O?"&":"")+P+"="+escape(Q)}});if(O.length){G.params.flashvars=O}L=p.getParam("flash_video_player_params",{allowfullscreen:true,allowscriptaccess:true});tinymce.each(L,function(Q,P){G.params[P]=""+Q})}}G=z.attr("data-mce-json");if(!G){return}G=h.parse(G);q=this.getType(z.attr("class"));B=z.attr("data-mce-style");if(!B){B=z.attr("style");if(B){B=p.dom.serializeStyle(p.dom.parseStyle(B,"img"))}}G.width=z.attr("width")||G.width;G.height=z.attr("height")||G.height;if(q.name==="Iframe"){x=new f("iframe",1);tinymce.each(b,function(n){var J=z.attr(n);if(n=="class"&&J){J=J.replace(/mceItem.+ ?/g,"")}if(J&&J.length>0){x.attr(n,J)}});for(I in G.params){x.attr(I,G.params[I])}x.attr({style:B,src:G.params.src});z.replace(x);return}if(this.editor.settings.media_use_script){x=new f("script",1).attr("type","text/javascript");y=new f("#text",3);y.value="write"+q.name+"("+h.serialize(tinymce.extend(G.params,{width:z.attr("width"),height:z.attr("height")}))+");";x.append(y);z.replace(x);return}if(q.name==="Video"&&G.video.sources[0]){C=new f("video",1).attr(tinymce.extend({id:z.attr("id"),width:e(z.attr("width")),height:e(z.attr("height")),style:B},G.video.attrs));if(G.video.attrs){l=G.video.attrs.poster}k=G.video.sources=c(G.video.sources);for(A=0;A 0) - flashVarsOutput += (flashVarsOutput ? '&' : '') + name + '=' + escape(value); - }); - - if (flashVarsOutput.length) - data.params.flashvars = flashVarsOutput; - - params = editor.getParam('flash_video_player_params', { - allowfullscreen: true, - allowscriptaccess: true - }); - - tinymce.each(params, function(value, name) { - data.params[name] = "" + value; - }); - } - }; - - data = node.attr('data-mce-json'); - if (!data) - return; - - data = JSON.parse(data); - typeItem = this.getType(node.attr('class')); - - style = node.attr('data-mce-style'); - if (!style) { - style = node.attr('style'); - - if (style) - style = editor.dom.serializeStyle(editor.dom.parseStyle(style, 'img')); - } - - // Use node width/height to override the data width/height when the placeholder is resized - data.width = node.attr('width') || data.width; - data.height = node.attr('height') || data.height; - - // Handle iframe - if (typeItem.name === 'Iframe') { - replacement = new Node('iframe', 1); - - tinymce.each(rootAttributes, function(name) { - var value = node.attr(name); - - if (name == 'class' && value) - value = value.replace(/mceItem.+ ?/g, ''); - - if (value && value.length > 0) - replacement.attr(name, value); - }); - - for (name in data.params) - replacement.attr(name, data.params[name]); - - replacement.attr({ - style: style, - src: data.params.src - }); - - node.replace(replacement); - - return; - } - - // Handle scripts - if (this.editor.settings.media_use_script) { - replacement = new Node('script', 1).attr('type', 'text/javascript'); - - value = new Node('#text', 3); - value.value = 'write' + typeItem.name + '(' + JSON.serialize(tinymce.extend(data.params, { - width: node.attr('width'), - height: node.attr('height') - })) + ');'; - - replacement.append(value); - node.replace(replacement); - - return; - } - - // Add HTML5 video element - if (typeItem.name === 'Video' && data.video.sources[0]) { - // Create new object element - video = new Node('video', 1).attr(tinymce.extend({ - id : node.attr('id'), - width: normalizeSize(node.attr('width')), - height: normalizeSize(node.attr('height')), - style : style - }, data.video.attrs)); - - // Get poster source and use that for flash fallback - if (data.video.attrs) - posterSrc = data.video.attrs.poster; - - sources = data.video.sources = toArray(data.video.sources); - for (i = 0; i < sources.length; i++) { - if (/\.mp4$/.test(sources[i].src)) - mp4Source = sources[i].src; - } - - if (!sources[0].type) { - video.attr('src', sources[0].src); - sources.splice(0, 1); - } - - for (i = 0; i < sources.length; i++) { - source = new Node('source', 1).attr(sources[i]); - source.shortEnded = true; - video.append(source); - } - - // Create flash fallback for video if we have a mp4 source - if (mp4Source) { - addPlayer(mp4Source, posterSrc); - typeItem = self.getType('flash'); - } else - data.params.src = ''; - } - - // Add HTML5 audio element - if (typeItem.name === 'Audio' && data.video.sources[0]) { - // Create new object element - audio = new Node('audio', 1).attr(tinymce.extend({ - id : node.attr('id'), - width: normalizeSize(node.attr('width')), - height: normalizeSize(node.attr('height')), - style : style - }, data.video.attrs)); - - // Get poster source and use that for flash fallback - if (data.video.attrs) - posterSrc = data.video.attrs.poster; - - sources = data.video.sources = toArray(data.video.sources); - if (!sources[0].type) { - audio.attr('src', sources[0].src); - sources.splice(0, 1); - } - - for (i = 0; i < sources.length; i++) { - source = new Node('source', 1).attr(sources[i]); - source.shortEnded = true; - audio.append(source); - } - - data.params.src = ''; - } - - if (typeItem.name === 'EmbeddedAudio') { - embed = new Node('embed', 1); - embed.shortEnded = true; - embed.attr({ - id: node.attr('id'), - width: normalizeSize(node.attr('width')), - height: normalizeSize(node.attr('height')), - style : style, - type: node.attr('type') - }); - - for (name in data.params) - embed.attr(name, data.params[name]); - - tinymce.each(rootAttributes, function(name) { - if (data[name] && name != 'type') - embed.attr(name, data[name]); - }); - - data.params.src = ''; - } - - // Do we have a params src then we can generate object - if (data.params.src) { - // Is flv movie add player for it - if (/\.flv$/i.test(data.params.src)) - addPlayer(data.params.src, ''); - - if (args && args.force_absolute) - data.params.src = editor.documentBaseURI.toAbsolute(data.params.src); - - // Create new object element - object = new Node('object', 1).attr({ - id : node.attr('id'), - width: normalizeSize(node.attr('width')), - height: normalizeSize(node.attr('height')), - style : style - }); - - tinymce.each(rootAttributes, function(name) { - var value = data[name]; - - if (name == 'class' && value) - value = value.replace(/mceItem.+ ?/g, ''); - - if (value && name != 'type') - object.attr(name, value); - }); - - // Add params - for (name in data.params) { - param = new Node('param', 1); - param.shortEnded = true; - value = data.params[name]; - - // Windows media needs to use url instead of src for the media URL - if (name === 'src' && typeItem.name === 'WindowsMedia') - name = 'url'; - - param.attr({name: name, value: value}); - object.append(param); - } - - // Setup add type and classid if strict is disabled - if (this.editor.getParam('media_strict', true)) { - object.attr({ - data: data.params.src, - type: typeItem.mimes[0] - }); - } else { - object.attr({ - classid: "clsid:" + typeItem.clsids[0], - codebase: typeItem.codebase - }); - - embed = new Node('embed', 1); - embed.shortEnded = true; - embed.attr({ - id: node.attr('id'), - width: normalizeSize(node.attr('width')), - height: normalizeSize(node.attr('height')), - style : style, - type: typeItem.mimes[0] - }); - - for (name in data.params) - embed.attr(name, data.params[name]); - - tinymce.each(rootAttributes, function(name) { - if (data[name] && name != 'type') - embed.attr(name, data[name]); - }); - - object.append(embed); - } - - // Insert raw HTML - if (data.object_html) { - value = new Node('#text', 3); - value.raw = true; - value.value = data.object_html; - object.append(value); - } - - // Append object to video element if it exists - if (video) - video.append(object); - } - - if (video) { - // Insert raw HTML - if (data.video_html) { - value = new Node('#text', 3); - value.raw = true; - value.value = data.video_html; - video.append(value); - } - } - - if (audio) { - // Insert raw HTML - if (data.video_html) { - value = new Node('#text', 3); - value.raw = true; - value.value = data.video_html; - audio.append(value); - } - } - - var n = video || audio || object || embed; - if (n) - node.replace(n); - else - node.remove(); - }, - - /** - * Converts a tinymce.html.Node video/object/embed to an img element. - * - * The video/object/embed will be converted into an image placeholder with a JSON data attribute like this: - * - * - * The JSON structure will be like this: - * {'params':{'flashvars':'something','quality':'high','src':'someurl'}, 'video':{'sources':[{src: 'someurl', type: 'video/mp4'}]}} - */ - objectToImg : function(node) { - var object, embed, video, iframe, img, name, id, width, height, style, i, html, - param, params, source, sources, data, type, lookup = this.lookup, - matches, attrs, urlConverter = this.editor.settings.url_converter, - urlConverterScope = this.editor.settings.url_converter_scope, - hspace, vspace, align, bgcolor; - - function getInnerHTML(node) { - return new tinymce.html.Serializer({ - inner: true, - validate: false - }).serialize(node); - }; - - function lookupAttribute(o, attr) { - return lookup[(o.attr(attr) || '').toLowerCase()]; - } - - function lookupExtension(src) { - var ext = src.replace(/^.*\.([^.]+)$/, '$1'); - return lookup[ext.toLowerCase() || '']; - } - - // If node isn't in document - if (!node.parent) - return; - - // Handle media scripts - if (node.name === 'script') { - if (node.firstChild) - matches = scriptRegExp.exec(node.firstChild.value); - - if (!matches) - return; - - type = matches[1]; - data = {video : {}, params : JSON.parse(matches[2])}; - width = data.params.width; - height = data.params.height; - } - - // Setup data objects - data = data || { - video : {}, - params : {} - }; - - // Setup new image object - img = new Node('img', 1); - img.attr({ - src : this.editor.theme.url + '/img/trans.gif' - }); - - // Video element - name = node.name; - if (name === 'video' || name == 'audio') { - video = node; - object = node.getAll('object')[0]; - embed = node.getAll('embed')[0]; - width = video.attr('width'); - height = video.attr('height'); - id = video.attr('id'); - data.video = {attrs : {}, sources : []}; - - // Get all video attributes - attrs = data.video.attrs; - for (name in video.attributes.map) - attrs[name] = video.attributes.map[name]; - - source = node.attr('src'); - if (source) - data.video.sources.push({src : urlConverter.call(urlConverterScope, source, 'src', node.name)}); - - // Get all sources - sources = video.getAll("source"); - for (i = 0; i < sources.length; i++) { - source = sources[i].remove(); - - data.video.sources.push({ - src: urlConverter.call(urlConverterScope, source.attr('src'), 'src', 'source'), - type: source.attr('type'), - media: source.attr('media') - }); - } - - // Convert the poster URL - if (attrs.poster) - attrs.poster = urlConverter.call(urlConverterScope, attrs.poster, 'poster', node.name); - } - - // Object element - if (node.name === 'object') { - object = node; - embed = node.getAll('embed')[0]; - } - - // Embed element - if (node.name === 'embed') - embed = node; - - // Iframe element - if (node.name === 'iframe') { - iframe = node; - type = 'Iframe'; - } - - if (object) { - // Get width/height - width = width || object.attr('width'); - height = height || object.attr('height'); - style = style || object.attr('style'); - id = id || object.attr('id'); - hspace = hspace || object.attr('hspace'); - vspace = vspace || object.attr('vspace'); - align = align || object.attr('align'); - bgcolor = bgcolor || object.attr('bgcolor'); - data.name = object.attr('name'); - - // Get all object params - params = object.getAll("param"); - for (i = 0; i < params.length; i++) { - param = params[i]; - name = param.remove().attr('name'); - - if (!excludedAttrs[name]) - data.params[name] = param.attr('value'); - } - - data.params.src = data.params.src || object.attr('data'); - } - - if (embed) { - // Get width/height - width = width || embed.attr('width'); - height = height || embed.attr('height'); - style = style || embed.attr('style'); - id = id || embed.attr('id'); - hspace = hspace || embed.attr('hspace'); - vspace = vspace || embed.attr('vspace'); - align = align || embed.attr('align'); - bgcolor = bgcolor || embed.attr('bgcolor'); - - // Get all embed attributes - for (name in embed.attributes.map) { - if (!excludedAttrs[name] && !data.params[name]) - data.params[name] = embed.attributes.map[name]; - } - } - - if (iframe) { - // Get width/height - width = normalizeSize(iframe.attr('width')); - height = normalizeSize(iframe.attr('height')); - style = style || iframe.attr('style'); - id = iframe.attr('id'); - hspace = iframe.attr('hspace'); - vspace = iframe.attr('vspace'); - align = iframe.attr('align'); - bgcolor = iframe.attr('bgcolor'); - - tinymce.each(rootAttributes, function(name) { - img.attr(name, iframe.attr(name)); - }); - - // Get all iframe attributes - for (name in iframe.attributes.map) { - if (!excludedAttrs[name] && !data.params[name]) - data.params[name] = iframe.attributes.map[name]; - } - } - - // Use src not movie - if (data.params.movie) { - data.params.src = data.params.src || data.params.movie; - delete data.params.movie; - } - - // Convert the URL to relative/absolute depending on configuration - if (data.params.src) - data.params.src = urlConverter.call(urlConverterScope, data.params.src, 'src', 'object'); - - if (video) { - if (node.name === 'video') - type = lookup.video.name; - else if (node.name === 'audio') - type = lookup.audio.name; - } - - if (object && !type) - type = (lookupAttribute(object, 'clsid') || lookupAttribute(object, 'classid') || lookupAttribute(object, 'type') || {}).name; - - if (embed && !type) - type = (lookupAttribute(embed, 'type') || lookupExtension(data.params.src) || {}).name; - - // for embedded audio we preserve the original specified type - if (embed && type == 'EmbeddedAudio') { - data.params.type = embed.attr('type'); - } - - // Replace the video/object/embed element with a placeholder image containing the data - node.replace(img); - - // Remove embed - if (embed) - embed.remove(); - - // Serialize the inner HTML of the object element - if (object) { - html = getInnerHTML(object.remove()); - - if (html) - data.object_html = html; - } - - // Serialize the inner HTML of the video element - if (video) { - html = getInnerHTML(video.remove()); - - if (html) - data.video_html = html; - } - - data.hspace = hspace; - data.vspace = vspace; - data.align = align; - data.bgcolor = bgcolor; - - // Set width/height of placeholder - img.attr({ - id : id, - 'class' : 'mceItemMedia mceItem' + (type || 'Flash'), - style : style, - width : width || (node.name == 'audio' ? "300" : "320"), - height : height || (node.name == 'audio' ? "32" : "240"), - hspace : hspace, - vspace : vspace, - align : align, - bgcolor : bgcolor, - "data-mce-json" : JSON.serialize(data, "'") - }); - } - }); - - // Register plugin - tinymce.PluginManager.add('media', tinymce.plugins.MediaPlugin); -})(); diff --git a/common/static/js/vendor/tiny_mce/plugins/media/js/embed.js b/common/static/js/vendor/tiny_mce/plugins/media/js/embed.js deleted file mode 100644 index 6fe25de090..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/media/js/embed.js +++ /dev/null @@ -1,73 +0,0 @@ -/** - * This script contains embed functions for common plugins. This scripts are complety free to use for any purpose. - */ - -function writeFlash(p) { - writeEmbed( - 'D27CDB6E-AE6D-11cf-96B8-444553540000', - 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0', - 'application/x-shockwave-flash', - p - ); -} - -function writeShockWave(p) { - writeEmbed( - '166B1BCA-3F9C-11CF-8075-444553540000', - 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0', - 'application/x-director', - p - ); -} - -function writeQuickTime(p) { - writeEmbed( - '02BF25D5-8C17-4B23-BC80-D3488ABDDC6B', - 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0', - 'video/quicktime', - p - ); -} - -function writeRealMedia(p) { - writeEmbed( - 'CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA', - 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0', - 'audio/x-pn-realaudio-plugin', - p - ); -} - -function writeWindowsMedia(p) { - p.url = p.src; - writeEmbed( - '6BF52A52-394A-11D3-B153-00C04F79FAA6', - 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701', - 'application/x-mplayer2', - p - ); -} - -function writeEmbed(cls, cb, mt, p) { - var h = '', n; - - h += ''; - - h += ''); - - function get(id) { - return document.getElementById(id); - } - - function clone(obj) { - var i, len, copy, attr; - - if (null == obj || "object" != typeof obj) - return obj; - - // Handle Array - if ('length' in obj) { - copy = []; - - for (i = 0, len = obj.length; i < len; ++i) { - copy[i] = clone(obj[i]); - } - - return copy; - } - - // Handle Object - copy = {}; - for (attr in obj) { - if (obj.hasOwnProperty(attr)) - copy[attr] = clone(obj[attr]); - } - - return copy; - } - - function getVal(id) { - var elm = get(id); - - if (elm.nodeName == "SELECT") - return elm.options[elm.selectedIndex].value; - - if (elm.type == "checkbox") - return elm.checked; - - return elm.value; - } - - function setVal(id, value, name) { - if (typeof(value) != 'undefined' && value != null) { - var elm = get(id); - - if (elm.nodeName == "SELECT") - selectByValue(document.forms[0], id, value); - else if (elm.type == "checkbox") { - if (typeof(value) == 'string') { - value = value.toLowerCase(); - value = (!name && value === 'true') || (name && value === name.toLowerCase()); - } - elm.checked = !!value; - } else - elm.value = value; - } - } - - window.Media = { - init : function() { - var html, editor, self = this; - - self.editor = editor = tinyMCEPopup.editor; - - // Setup file browsers and color pickers - get('filebrowsercontainer').innerHTML = getBrowserHTML('filebrowser','src','media','media'); - get('qtsrcfilebrowsercontainer').innerHTML = getBrowserHTML('qtsrcfilebrowser','quicktime_qtsrc','media','media'); - get('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor'); - get('video_altsource1_filebrowser').innerHTML = getBrowserHTML('video_filebrowser_altsource1','video_altsource1','media','media'); - get('video_altsource2_filebrowser').innerHTML = getBrowserHTML('video_filebrowser_altsource2','video_altsource2','media','media'); - get('audio_altsource1_filebrowser').innerHTML = getBrowserHTML('audio_filebrowser_altsource1','audio_altsource1','media','media'); - get('audio_altsource2_filebrowser').innerHTML = getBrowserHTML('audio_filebrowser_altsource2','audio_altsource2','media','media'); - get('video_poster_filebrowser').innerHTML = getBrowserHTML('filebrowser_poster','video_poster','image','media'); - - html = self.getMediaListHTML('medialist', 'src', 'media', 'media'); - if (html == "") - get("linklistrow").style.display = 'none'; - else - get("linklistcontainer").innerHTML = html; - - if (isVisible('filebrowser')) - get('src').style.width = '230px'; - - if (isVisible('video_filebrowser_altsource1')) - get('video_altsource1').style.width = '220px'; - - if (isVisible('video_filebrowser_altsource2')) - get('video_altsource2').style.width = '220px'; - - if (isVisible('audio_filebrowser_altsource1')) - get('audio_altsource1').style.width = '220px'; - - if (isVisible('audio_filebrowser_altsource2')) - get('audio_altsource2').style.width = '220px'; - - if (isVisible('filebrowser_poster')) - get('video_poster').style.width = '220px'; - - editor.dom.setOuterHTML(get('media_type'), self.getMediaTypeHTML(editor)); - - self.setDefaultDialogSettings(editor); - self.data = clone(tinyMCEPopup.getWindowArg('data')); - self.dataToForm(); - self.preview(); - - updateColor('bgcolor_pick', 'bgcolor'); - }, - - insert : function() { - var editor = tinyMCEPopup.editor; - - this.formToData(); - editor.execCommand('mceRepaint'); - tinyMCEPopup.restoreSelection(); - editor.selection.setNode(editor.plugins.media.dataToImg(this.data)); - tinyMCEPopup.close(); - }, - - preview : function() { - get('prev').innerHTML = this.editor.plugins.media.dataToHtml(this.data, true); - }, - - moveStates : function(to_form, field) { - var data = this.data, editor = this.editor, - mediaPlugin = editor.plugins.media, ext, src, typeInfo, defaultStates, src; - - defaultStates = { - // QuickTime - quicktime_autoplay : true, - quicktime_controller : true, - - // Flash - flash_play : true, - flash_loop : true, - flash_menu : true, - - // WindowsMedia - windowsmedia_autostart : true, - windowsmedia_enablecontextmenu : true, - windowsmedia_invokeurls : true, - - // RealMedia - realmedia_autogotourl : true, - realmedia_imagestatus : true - }; - - function parseQueryParams(str) { - var out = {}; - - if (str) { - tinymce.each(str.split('&'), function(item) { - var parts = item.split('='); - - out[unescape(parts[0])] = unescape(parts[1]); - }); - } - - return out; - }; - - function setOptions(type, names) { - var i, name, formItemName, value, list; - - if (type == data.type || type == 'global') { - names = tinymce.explode(names); - for (i = 0; i < names.length; i++) { - name = names[i]; - formItemName = type == 'global' ? name : type + '_' + name; - - if (type == 'global') - list = data; - else if (type == 'video' || type == 'audio') { - list = data.video.attrs; - - if (!list && !to_form) - data.video.attrs = list = {}; - } else - list = data.params; - - if (list) { - if (to_form) { - setVal(formItemName, list[name], type == 'video' || type == 'audio' ? name : ''); - } else { - delete list[name]; - - value = getVal(formItemName); - if ((type == 'video' || type == 'audio') && value === true) - value = name; - - if (defaultStates[formItemName]) { - if (value !== defaultStates[formItemName]) { - value = "" + value; - list[name] = value; - } - } else if (value) { - value = "" + value; - list[name] = value; - } - } - } - } - } - } - - if (!to_form) { - data.type = get('media_type').options[get('media_type').selectedIndex].value; - data.width = getVal('width'); - data.height = getVal('height'); - - // Switch type based on extension - src = getVal('src'); - if (field == 'src') { - ext = src.replace(/^.*\.([^.]+)$/, '$1'); - if (typeInfo = mediaPlugin.getType(ext)) - data.type = typeInfo.name.toLowerCase(); - - setVal('media_type', data.type); - } - - if (data.type == "video" || data.type == "audio") { - if (!data.video.sources) - data.video.sources = []; - - data.video.sources[0] = {src: getVal('src')}; - } - } - - // Hide all fieldsets and show the one active - get('video_options').style.display = 'none'; - get('audio_options').style.display = 'none'; - get('flash_options').style.display = 'none'; - get('quicktime_options').style.display = 'none'; - get('shockwave_options').style.display = 'none'; - get('windowsmedia_options').style.display = 'none'; - get('realmedia_options').style.display = 'none'; - get('embeddedaudio_options').style.display = 'none'; - - if (get(data.type + '_options')) - get(data.type + '_options').style.display = 'block'; - - setVal('media_type', data.type); - - setOptions('flash', 'play,loop,menu,swliveconnect,quality,scale,salign,wmode,base,flashvars'); - setOptions('quicktime', 'loop,autoplay,cache,controller,correction,enablejavascript,kioskmode,autohref,playeveryframe,targetcache,scale,starttime,endtime,target,qtsrcchokespeed,volume,qtsrc'); - setOptions('shockwave', 'sound,progress,autostart,swliveconnect,swvolume,swstretchstyle,swstretchhalign,swstretchvalign'); - setOptions('windowsmedia', 'autostart,enabled,enablecontextmenu,fullscreen,invokeurls,mute,stretchtofit,windowlessvideo,balance,baseurl,captioningid,currentmarker,currentposition,defaultframe,playcount,rate,uimode,volume'); - setOptions('realmedia', 'autostart,loop,autogotourl,center,imagestatus,maintainaspect,nojava,prefetch,shuffle,console,controls,numloop,scriptcallbacks'); - setOptions('video', 'poster,autoplay,loop,muted,preload,controls'); - setOptions('audio', 'autoplay,loop,preload,controls'); - setOptions('embeddedaudio', 'autoplay,loop,controls'); - setOptions('global', 'id,name,vspace,hspace,bgcolor,align,width,height'); - - if (to_form) { - if (data.type == 'video') { - if (data.video.sources[0]) - setVal('src', data.video.sources[0].src); - - src = data.video.sources[1]; - if (src) - setVal('video_altsource1', src.src); - - src = data.video.sources[2]; - if (src) - setVal('video_altsource2', src.src); - } else if (data.type == 'audio') { - if (data.video.sources[0]) - setVal('src', data.video.sources[0].src); - - src = data.video.sources[1]; - if (src) - setVal('audio_altsource1', src.src); - - src = data.video.sources[2]; - if (src) - setVal('audio_altsource2', src.src); - } else { - // Check flash vars - if (data.type == 'flash') { - tinymce.each(editor.getParam('flash_video_player_flashvars', {url : '$url', poster : '$poster'}), function(value, name) { - if (value == '$url') - data.params.src = parseQueryParams(data.params.flashvars)[name] || data.params.src || ''; - }); - } - - setVal('src', data.params.src); - } - } else { - src = getVal("src"); - - // YouTube Embed - if (src.match(/youtube\.com\/embed\/\w+/)) { - data.width = 425; - data.height = 350; - data.params.frameborder = '0'; - data.type = 'iframe'; - setVal('src', src); - setVal('media_type', data.type); - } else { - // YouTube *NEW* - if (src.match(/youtu\.be\/[a-z1-9.-_]+/)) { - data.width = 425; - data.height = 350; - data.params.frameborder = '0'; - data.type = 'iframe'; - src = 'http://www.youtube.com/embed/' + src.match(/youtu.be\/([a-z1-9.-_]+)/)[1]; - setVal('src', src); - setVal('media_type', data.type); - } - - // YouTube - if (src.match(/youtube\.com(.+)v=([^&]+)/)) { - data.width = 425; - data.height = 350; - data.params.frameborder = '0'; - data.type = 'iframe'; - src = 'http://www.youtube.com/embed/' + src.match(/v=([^&]+)/)[1]; - setVal('src', src); - setVal('media_type', data.type); - } - } - - // Google video - if (src.match(/video\.google\.com(.+)docid=([^&]+)/)) { - data.width = 425; - data.height = 326; - data.type = 'flash'; - src = 'http://video.google.com/googleplayer.swf?docId=' + src.match(/docid=([^&]+)/)[1] + '&hl=en'; - setVal('src', src); - setVal('media_type', data.type); - } - - // Vimeo - if (src.match(/vimeo\.com\/([0-9]+)/)) { - data.width = 425; - data.height = 350; - data.params.frameborder = '0'; - data.type = 'iframe'; - src = 'http://player.vimeo.com/video/' + src.match(/vimeo.com\/([0-9]+)/)[1]; - setVal('src', src); - setVal('media_type', data.type); - } - - // stream.cz - if (src.match(/stream\.cz\/((?!object).)*\/([0-9]+)/)) { - data.width = 425; - data.height = 350; - data.params.frameborder = '0'; - data.type = 'iframe'; - src = 'http://www.stream.cz/object/' + src.match(/stream.cz\/[^/]+\/([0-9]+)/)[1]; - setVal('src', src); - setVal('media_type', data.type); - } - - // Google maps - if (src.match(/maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/)) { - data.width = 425; - data.height = 350; - data.params.frameborder = '0'; - data.type = 'iframe'; - src = 'http://maps.google.com/maps/ms?msid=' + src.match(/msid=(.+)/)[1] + "&output=embed"; - setVal('src', src); - setVal('media_type', data.type); - } - - if (data.type == 'video') { - if (!data.video.sources) - data.video.sources = []; - - data.video.sources[0] = {src : src}; - - src = getVal("video_altsource1"); - if (src) - data.video.sources[1] = {src : src}; - - src = getVal("video_altsource2"); - if (src) - data.video.sources[2] = {src : src}; - } else if (data.type == 'audio') { - if (!data.video.sources) - data.video.sources = []; - - data.video.sources[0] = {src : src}; - - src = getVal("audio_altsource1"); - if (src) - data.video.sources[1] = {src : src}; - - src = getVal("audio_altsource2"); - if (src) - data.video.sources[2] = {src : src}; - } else - data.params.src = src; - - // Set default size - setVal('width', data.width || (data.type == 'audio' ? 300 : 320)); - setVal('height', data.height || (data.type == 'audio' ? 32 : 240)); - } - }, - - dataToForm : function() { - this.moveStates(true); - }, - - formToData : function(field) { - if (field == "width" || field == "height") - this.changeSize(field); - - if (field == 'source') { - this.moveStates(false, field); - setVal('source', this.editor.plugins.media.dataToHtml(this.data)); - this.panel = 'source'; - } else { - if (this.panel == 'source') { - this.data = clone(this.editor.plugins.media.htmlToData(getVal('source'))); - this.dataToForm(); - this.panel = ''; - } - - this.moveStates(false, field); - this.preview(); - } - }, - - beforeResize : function() { - this.width = parseInt(getVal('width') || (this.data.type == 'audio' ? "300" : "320"), 10); - this.height = parseInt(getVal('height') || (this.data.type == 'audio' ? "32" : "240"), 10); - }, - - changeSize : function(type) { - var width, height, scale, size; - - if (get('constrain').checked) { - width = parseInt(getVal('width') || (this.data.type == 'audio' ? "300" : "320"), 10); - height = parseInt(getVal('height') || (this.data.type == 'audio' ? "32" : "240"), 10); - - if (type == 'width') { - this.height = Math.round((width / this.width) * height); - setVal('height', this.height); - } else { - this.width = Math.round((height / this.height) * width); - setVal('width', this.width); - } - } - }, - - getMediaListHTML : function() { - if (typeof(tinyMCEMediaList) != "undefined" && tinyMCEMediaList.length > 0) { - var html = ""; - - html += ''; - - return html; - } - - return ""; - }, - - getMediaTypeHTML : function(editor) { - function option(media_type, element) { - if (!editor.schema.getElementRule(element || media_type)) { - return ''; - } - - return '' - } - - var html = ""; - - html += ''; - return html; - }, - - setDefaultDialogSettings : function(editor) { - var defaultDialogSettings = editor.getParam("media_dialog_defaults", {}); - tinymce.each(defaultDialogSettings, function(v, k) { - setVal(k, v); - }); - } - }; - - tinyMCEPopup.requireLangPack(); - tinyMCEPopup.onInit.add(function() { - Media.init(); - }); -})(); diff --git a/common/static/js/vendor/tiny_mce/plugins/media/langs/en_dlg.js b/common/static/js/vendor/tiny_mce/plugins/media/langs/en_dlg.js deleted file mode 100644 index ecef3a8013..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/media/langs/en_dlg.js +++ /dev/null @@ -1 +0,0 @@ -tinyMCE.addI18n('en.media_dlg',{list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert/Edit Embedded Media","align_top_left":"Top Left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","qt_stream_warn":"Streamed RTSP resources should be added to the QT Source field under the Advanced tab.\nYou should also add a non-streamed version to the Source field.",qtsrc:"QT Source",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch Style",scriptcallbacks:"Script Callbacks","align_top_right":"Top Right",uimode:"UI Mode",rate:"Rate",playcount:"Play Count",defaultframe:"Default Frame",currentposition:"Current Position",currentmarker:"Current Marker",captioningid:"Captioning ID",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless Video",stretchtofit:"Stretch to Fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Full Screen",enabled:"Enabled",autostart:"Auto Start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke Speed",href:"HREF",endtime:"End Time",starttime:"Start Time",enablejavascript:"Enable JavaScript",correction:"No Correction",targetcache:"Target Cache",playeveryframe:"Play Every Frame",kioskmode:"Kiosk Mode",controller:"Controller",menu:"Show Menu",loop:"Loop",play:"Auto Play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"ID",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain Proportions",controls:"Controls",numloop:"Num Loops",console:"Console",cache:"Cache",autohref:"Auto HREF",liveconnect:"SWLiveConnect",flashvars:"Flash Vars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No Java",maintainaspect:"Maintain Aspect",imagestatus:"Image Status",center:"Center",autogotourl:"Auto Goto URL","shockwave_options":"Shockwave Options","rmp_options":"Real Media Player Options","wmp_options":"Windows Media Player Options","qt_options":"QuickTime Options","flash_options":"Flash Options",hidden:"Hidden","align_bottom_left":"Bottom Left","align_bottom_right":"Bottom Right","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide", "embedded_audio_options":"Embedded Audio Options", video:"HTML5 Video", audio:"HTML5 Audio", flash:"Flash", quicktime:"QuickTime", shockwave:"Shockwave", windowsmedia:"Windows Media", realmedia:"Real Media", iframe:"Iframe", embeddedaudio:"Embedded Audio" }); diff --git a/common/static/js/vendor/tiny_mce/plugins/media/media.htm b/common/static/js/vendor/tiny_mce/plugins/media/media.htm deleted file mode 100644 index 50efe9182d..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/media/media.htm +++ /dev/null @@ -1,922 +0,0 @@ - - - - {#media_dlg.title} - - - - - - - - - -
- - -
-
-
- {#media_dlg.general} - - - - - - - - - - - - - - - - - - -
- -
- - - - - -
 
-
- - - - - - -
x   
-
-
- -
- {#media_dlg.preview} - -
-
- -
-
- {#media_dlg.advanced} - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - -
 
-
-
- -
- {#media_dlg.html5_video_options} - - - - - - - - - - - - - - - - - - - - - -
- - - - - -
 
-
- - - - - -
 
-
- - - - - -
 
-
- -
- - - - - - - - - - - -
- - - - - -
-
- - - - - -
-
- - - - - -
-
- - - - - -
-
-
- -
- {#media_dlg.embedded_audio_options} - - - - - - - - - -
- - - - - -
-
- - - - - -
-
- - - - - -
-
-
- -
- {#media_dlg.html5_audio_options} - - - - - - - - - - - - - - - - -
- - - - - -
 
-
- - - - - -
 
-
- -
- - - - - - - - - -
- - - - - -
-
- - - - - -
-
- - - - - -
-
-
- -
- {#media_dlg.flash_options} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - -
- - - - - -
-
- - - - - -
-
- - - - - -
-
- - - - - -
-
- - - - - - - - - - - -
-
- -
- {#media_dlg.qt_options} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - -
-
- - - - - -
-
- - - - - -
-
- - - - - -
-
- - - - - -
-
- - - - - -
-
- - - - - -
-
- - - - - -
-
- - - - - -
-
- - - - - -
-
-  
- - - - - -
 
-
-
- -
- {#media_dlg.wmp_options} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - -
-
- - - - - -
-
- - - - - -
-
- - - - - -
-
- - - - - -
-
- - - - - -
-
- - - - - -
-
- - - - - -
-
-
- -
- {#media_dlg.rmp_options} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - -
-
- - - - - -
-
- - - - - -
-
- - - - - -
-
- - - - - -
-
- - - - - -
-
- - - - - -
-
- - - - - -
-
- - - - - -
-
-   -
-
- -
- {#media_dlg.shockwave_options} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - - - -
-
- - - - - -
-
- - - - - -
-
- - - - - -
-
-
-
- -
-
- {#media_dlg.source} - -
-
-
- -
- - -
-
- - diff --git a/common/static/js/vendor/tiny_mce/plugins/media/moxieplayer.swf b/common/static/js/vendor/tiny_mce/plugins/media/moxieplayer.swf index 585d772d6d3c23626fddfa58c4220b056783e148..19c771bea50c6665fe0ee5f46515e9686427dbc7 100644 GIT binary patch literal 20017 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 b==_iWodI83J<=N diff --git a/common/static/js/vendor/tiny_mce/plugins/media/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/media/plugin.min.js new file mode 100644 index 0000000000..e276ecfd39 --- /dev/null +++ b/common/static/js/vendor/tiny_mce/plugins/media/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("media",function(e,t){function i(e){return-1!=e.indexOf(".mp3")?"audio/mpeg":-1!=e.indexOf(".wav")?"audio/wav":-1!=e.indexOf(".mp4")?"video/mp4":-1!=e.indexOf(".webm")?"video/webm":-1!=e.indexOf(".ogg")?"video/ogg":-1!=e.indexOf(".swf")?"application/x-shockwave-flash":""}function r(t){var i=e.settings.media_scripts;if(i)for(var r=0;r':"application/x-shockwave-flash"==a.source1mime?(o+='',a.poster&&(o+=''),o+=""):-1!=a.source1mime.indexOf("audio")?e.settings.audio_template_callback?o=e.settings.audio_template_callback(a):o+='":"script"==a.type?o+='':o=e.settings.video_template_callback?e.settings.video_template_callback(a):'"}return o}function n(e){var t={};return new tinymce.html.SaxParser({validate:!1,allow_conditional_comments:!0,special:"script,noscript",start:function(e,i){if(t.source1||"param"!=e||(t.source1=i.map.movie),("iframe"==e||"object"==e||"embed"==e||"video"==e||"audio"==e)&&(t.type||(t.type=e),t=tinymce.extend(i.map,t)),"script"==e){var a=r(i.map.src);if(!a)return;t={type:"script",source1:i.map.src,width:a.width,height:a.height}}"source"==e&&(t.source1?t.source2||(t.source2=i.map.src):t.source1=i.map.src),"img"!=e||t.poster||(t.poster=i.map.src)}}).parse(e),t.source1=t.source1||t.src||t.data,t.source2=t.source2||"",t.poster=t.poster||"",t}function s(t){return t.getAttribute("data-mce-object")?n(e.serializer.serialize(t,{selection:!0})):{}}function m(e,t,i){function r(e,t){var i,r,a,o;for(i in t)if(a=""+t[i],e.map[i])for(r=e.length;r--;)o=e[r],o.name==i&&(a?(e.map[i]=a,o.value=a):(delete e.map[i],e.splice(r,1)));else a&&(e.push({name:i,value:a}),e.map[i]=a)}var a,o=new tinymce.html.Writer,c=0;return new tinymce.html.SaxParser({validate:!1,allow_conditional_comments:!0,special:"script,noscript",comment:function(e){o.comment(e)},cdata:function(e){o.cdata(e)},text:function(e,t){o.text(e,t)},start:function(e,n,s){switch(e){case"video":case"object":case"embed":case"img":case"iframe":r(n,{width:t.width,height:t.height})}if(i)switch(e){case"video":r(n,{poster:t.poster,src:""}),t.source2&&r(n,{src:""});break;case"iframe":r(n,{src:t.source1});break;case"source":if(c++,2>=c&&(r(n,{src:t["source"+c],type:t["source"+c+"mime"]}),!t["source"+c]))return;break;case"img":if(!t.poster)return;a=!0}o.start(e,n,s)},end:function(e){if("video"==e&&i)for(var n=1;2>=n;n++)if(t["source"+n]){var s=[];s.map={},n>c&&(r(s,{src:t["source"+n],type:t["source"+n+"mime"]}),o.start("source",s,!0))}if(t.poster&&"object"==e&&i&&!a){var m=[];m.map={},r(m,{src:t.poster,width:t.width,height:t.height}),o.start("img",m,!0)}o.end(e)}},new tinymce.html.Schema({})).parse(e),o.getContent()}var d=[{regex:/youtu\.be\/([a-z1-9.-_]+)/,type:"iframe",w:425,h:350,url:"http://www.youtube.com/embed/$1"},{regex:/youtube\.com(.+)v=([^&]+)/,type:"iframe",w:425,h:350,url:"http://www.youtube.com/embed/$2"},{regex:/vimeo\.com\/([0-9]+)/,type:"iframe",w:425,h:350,url:"http://player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc"},{regex:/maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/,type:"iframe",w:425,h:350,url:'http://maps.google.com/maps/ms?msid=$2&output=embed"'}];e.on("ResolveName",function(e){var t;1==e.target.nodeType&&(t=e.target.getAttribute("data-mce-object"))&&(e.name=t)}),e.on("preInit",function(){var t=e.schema.getSpecialElements();tinymce.each("video audio iframe object".split(" "),function(e){t[e]=new RegExp("]*>","gi")}),e.schema.addValidElements("object[id|style|width|height|classid|codebase|*],embed[id|style|width|height|type|src|*],video[*],audio[*]");var i=e.schema.getBoolAttrs();tinymce.each("webkitallowfullscreen mozallowfullscreen allowfullscreen".split(" "),function(e){i[e]={}}),e.parser.addNodeFilter("iframe,video,audio,object,embed,script",function(t,i){for(var a,o,c,n,s,m,d,u,l=t.length;l--;)if(o=t[l],"script"!=o.name||(u=r(o.attr("src")))){for(c=new tinymce.html.Node("img",1),c.shortEnded=!0,u&&(u.width&&o.attr("width",u.width.toString()),u.height&&o.attr("height",u.height.toString())),m=o.attributes,a=m.length;a--;)n=m[a].name,s=m[a].value,"width"!==n&&"height"!==n&&"style"!==n&&(("data"==n||"src"==n)&&(s=e.convertURL(s,n)),c.attr("data-mce-p-"+n,s));d=o.firstChild&&o.firstChild.value,d&&(c.attr("data-mce-html",escape(d)),c.firstChild=null),c.attr({width:o.attr("width")||"300",height:o.attr("height")||("audio"==i?"30":"150"),style:o.attr("style"),src:tinymce.Env.transparentSrc,"data-mce-object":i,"class":"mce-object mce-object-"+i}),o.replace(c)}}),e.serializer.addAttributeFilter("data-mce-object",function(e,t){for(var i,r,a,o,c,n,s,m=e.length;m--;){for(i=e[m],s=i.attr(t),r=new tinymce.html.Node(s,1),"audio"!=s&&"script"!=s&&r.attr({width:i.attr("width"),height:i.attr("height")}),r.attr({style:i.attr("style")}),o=i.attributes,a=o.length;a--;){var d=o[a].name;0===d.indexOf("data-mce-p-")&&r.attr(d.substr(11),o[a].value)}"script"==s&&r.attr("type","text/javascript"),c=i.attr("data-mce-html"),c&&(n=new tinymce.html.Node("#text",3),n.raw=!0,n.value=unescape(c),r.append(n)),i.replace(r)}})}),e.on("ObjectSelected",function(e){var t=e.target.getAttribute("data-mce-object");("audio"==t||"script"==t)&&e.preventDefault()}),e.on("objectResized",function(e){var t,i=e.target;i.getAttribute("data-mce-object")&&(t=i.getAttribute("data-mce-html"),t&&(t=unescape(t),i.setAttribute("data-mce-html",escape(m(t,{width:e.width,height:e.height})))))}),e.addButton("media",{tooltip:"Insert/edit video",onclick:a,stateSelector:"img[data-mce-object=video]"}),e.addMenuItem("media",{icon:"media",text:"Insert video",onclick:a,context:"insert",prependToContext:!0})}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/nonbreaking/editor_plugin.js b/common/static/js/vendor/tiny_mce/plugins/nonbreaking/editor_plugin.js deleted file mode 100644 index 687f548669..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/nonbreaking/editor_plugin.js +++ /dev/null @@ -1 +0,0 @@ -(function(){tinymce.create("tinymce.plugins.Nonbreaking",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceNonBreaking",function(){a.execCommand("mceInsertContent",false,(a.plugins.visualchars&&a.plugins.visualchars.state)?' ':" ")});a.addButton("nonbreaking",{title:"nonbreaking.nonbreaking_desc",cmd:"mceNonBreaking"});if(a.getParam("nonbreaking_force_tab")){a.onKeyDown.add(function(d,f){if(f.keyCode==9){f.preventDefault();d.execCommand("mceNonBreaking");d.execCommand("mceNonBreaking");d.execCommand("mceNonBreaking")}})}},getInfo:function(){return{longname:"Nonbreaking space",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/nonbreaking",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("nonbreaking",tinymce.plugins.Nonbreaking)})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/nonbreaking/editor_plugin_src.js b/common/static/js/vendor/tiny_mce/plugins/nonbreaking/editor_plugin_src.js deleted file mode 100644 index 0a048b3796..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/nonbreaking/editor_plugin_src.js +++ /dev/null @@ -1,54 +0,0 @@ -/** - * editor_plugin_src.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -(function() { - tinymce.create('tinymce.plugins.Nonbreaking', { - init : function(ed, url) { - var t = this; - - t.editor = ed; - - // Register commands - ed.addCommand('mceNonBreaking', function() { - ed.execCommand('mceInsertContent', false, (ed.plugins.visualchars && ed.plugins.visualchars.state) ? ' ' : ' '); - }); - - // Register buttons - ed.addButton('nonbreaking', {title : 'nonbreaking.nonbreaking_desc', cmd : 'mceNonBreaking'}); - - if (ed.getParam('nonbreaking_force_tab')) { - ed.onKeyDown.add(function(ed, e) { - if (e.keyCode == 9) { - e.preventDefault(); - - ed.execCommand('mceNonBreaking'); - ed.execCommand('mceNonBreaking'); - ed.execCommand('mceNonBreaking'); - } - }); - } - }, - - getInfo : function() { - return { - longname : 'Nonbreaking space', - author : 'Moxiecode Systems AB', - authorurl : 'http://tinymce.moxiecode.com', - infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/nonbreaking', - version : tinymce.majorVersion + "." + tinymce.minorVersion - }; - } - - // Private methods - }); - - // Register plugin - tinymce.PluginManager.add('nonbreaking', tinymce.plugins.Nonbreaking); -})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/nonbreaking/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/nonbreaking/plugin.min.js new file mode 100644 index 0000000000..866339c7dc --- /dev/null +++ b/common/static/js/vendor/tiny_mce/plugins/nonbreaking/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("nonbreaking",function(e){var t=e.getParam("nonbreaking_force_tab");if(e.addCommand("mceNonBreaking",function(){e.insertContent(e.plugins.visualchars&&e.plugins.visualchars.state?' ':" ")}),e.addButton("nonbreaking",{title:"Insert nonbreaking space",cmd:"mceNonBreaking"}),e.addMenuItem("nonbreaking",{text:"Nonbreaking space",cmd:"mceNonBreaking",context:"insert"}),t){var n=+t>1?+t:3;e.on("keydown",function(t){if(9==t.keyCode){if(t.shiftKey)return;t.preventDefault();for(var i=0;n>i;i++)e.execCommand("mceNonBreaking")}})}}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/noneditable/editor_plugin.js b/common/static/js/vendor/tiny_mce/plugins/noneditable/editor_plugin.js deleted file mode 100644 index da411ebc09..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/noneditable/editor_plugin.js +++ /dev/null @@ -1 +0,0 @@ -(function(){var c=tinymce.dom.TreeWalker;var a="contenteditable",d="data-mce-"+a;var e=tinymce.VK;function b(n){var j=n.dom,p=n.selection,r,o="mce_noneditablecaret",r="\uFEFF";function m(t){var s;if(t.nodeType===1){s=t.getAttribute(d);if(s&&s!=="inherit"){return s}s=t.contentEditable;if(s!=="inherit"){return s}}return null}function g(s){var t;while(s){t=m(s);if(t){return t==="false"?s:null}s=s.parentNode}}function l(s){while(s){if(s.id===o){return s}s=s.parentNode}}function k(s){var t;if(s){t=new c(s,s);for(s=t.current();s;s=t.next()){if(s.nodeType===3){return s}}}}function f(v,u){var s,t;if(m(v)==="false"){if(j.isBlock(v)){p.select(v);return}}t=j.createRng();if(m(v)==="true"){if(!v.firstChild){v.appendChild(n.getDoc().createTextNode("\u00a0"))}v=v.firstChild;u=true}s=j.create("span",{id:o,"data-mce-bogus":true},r);if(u){v.parentNode.insertBefore(s,v)}else{j.insertAfter(s,v)}t.setStart(s.firstChild,1);t.collapse(true);p.setRng(t);return s}function i(s){var v,t,u;if(s){rng=p.getRng(true);rng.setStartBefore(s);rng.setEndBefore(s);v=k(s);if(v&&v.nodeValue.charAt(0)==r){v=v.deleteData(0,1)}j.remove(s,true);p.setRng(rng)}else{t=l(p.getStart());while((s=j.get(o))&&s!==u){if(t!==s){v=k(s);if(v&&v.nodeValue.charAt(0)==r){v=v.deleteData(0,1)}j.remove(s,true)}u=s}}}function q(){var s,w,u,t,v;function x(B,D){var A,F,E,C,z;A=t.startContainer;F=t.startOffset;if(A.nodeType==3){z=A.nodeValue.length;if((F>0&&F0?F-1:F;A=A.childNodes[G];if(A.hasChildNodes()){A=A.firstChild}}else{return !D?B:null}}E=new c(A,B);while(C=E[D?"prev":"next"]()){if(C.nodeType===3&&C.nodeValue.length>0){return}else{if(m(C)==="true"){return C}}}return B}i();u=p.isCollapsed();s=g(p.getStart());w=g(p.getEnd());if(s||w){t=p.getRng(true);if(u){s=s||w;var y=p.getStart();if(v=x(s,true)){f(v,true)}else{if(v=x(s,false)){f(v,false)}else{p.select(s)}}}else{t=p.getRng(true);if(s){t.setStartBefore(s)}if(w){t.setEndAfter(w)}p.setRng(t)}}}function h(z,B){var F=B.keyCode,x,C,D,v;function u(H,G){while(H=H[G?"previousSibling":"nextSibling"]){if(H.nodeType!==3||H.nodeValue.length>0){return H}}}function y(G,H){p.select(G);p.collapse(H)}function t(K){var J,I,M,H;function G(O){var N=I;while(N){if(N===O){return}N=N.parentNode}j.remove(O);q()}function L(){var O,P,N=z.schema.getNonEmptyElements();P=new tinymce.dom.TreeWalker(I,z.getBody());while(O=(K?P.prev():P.next())){if(N[O.nodeName.toLowerCase()]){break}if(O.nodeType===3&&tinymce.trim(O.nodeValue).length>0){break}if(m(O)==="false"){G(O);return true}}if(g(O)){return true}return false}if(p.isCollapsed()){J=p.getRng(true);I=J.startContainer;M=J.startOffset;I=l(I)||I;if(H=g(I)){G(H);return false}if(I.nodeType==3&&(K?M>0:M124)&&F!=e.DELETE&&F!=e.BACKSPACE){if((tinymce.isMac?B.metaKey:B.ctrlKey)&&(F==67||F==88||F==86)){return}B.preventDefault();if(F==e.LEFT||F==e.RIGHT){var w=F==e.LEFT;if(z.dom.isBlock(x)){var A=w?x.previousSibling:x.nextSibling;var s=new c(A,A);var E=w?s.prev():s.next();y(E,!w)}else{y(x,w)}}}else{if(F==e.LEFT||F==e.RIGHT||F==e.BACKSPACE||F==e.DELETE){C=l(D);if(C){if(F==e.LEFT||F==e.BACKSPACE){x=u(C,true);if(x&&m(x)==="false"){B.preventDefault();if(F==e.LEFT){y(x,true)}else{j.remove(x);return}}else{i(C)}}if(F==e.RIGHT||F==e.DELETE){x=u(C);if(x&&m(x)==="false"){B.preventDefault();if(F==e.RIGHT){y(x,false)}else{j.remove(x);return}}else{i(C)}}}if((F==e.BACKSPACE||F==e.DELETE)&&!t(F==e.BACKSPACE)){B.preventDefault();return false}}}}n.onMouseDown.addToTop(function(s,u){var t=s.selection.getNode();if(m(t)==="false"&&t==u.target){q()}});n.onMouseUp.addToTop(q);n.onKeyDown.addToTop(h);n.onKeyUp.addToTop(q)}tinymce.create("tinymce.plugins.NonEditablePlugin",{init:function(i,k){var h,g,j;function f(m,n){var o=j.length,p=n.content,l=tinymce.trim(g);if(n.format=="raw"){return}while(o--){p=p.replace(j[o],function(s){var r=arguments,q=r[r.length-2];if(q>0&&p.charAt(q-1)=='"'){return s}return''+m.dom.encode(typeof(r[1])==="string"?r[1]:r[0])+""})}n.content=p}h=" "+tinymce.trim(i.getParam("noneditable_editable_class","mceEditable"))+" ";g=" "+tinymce.trim(i.getParam("noneditable_noneditable_class","mceNonEditable"))+" ";j=i.getParam("noneditable_regexp");if(j&&!j.length){j=[j]}i.onPreInit.add(function(){b(i);if(j){i.selection.onBeforeSetContent.add(f);i.onBeforeSetContent.add(f)}i.parser.addAttributeFilter("class",function(l){var m=l.length,n,o;while(m--){o=l[m];n=" "+o.attr("class")+" ";if(n.indexOf(h)!==-1){o.attr(d,"true")}else{if(n.indexOf(g)!==-1){o.attr(d,"false")}}}});i.serializer.addAttributeFilter(d,function(l,m){var n=l.length,o;while(n--){o=l[n];if(j&&o.attr("data-mce-content")){o.name="#text";o.type=3;o.raw=true;o.value=o.attr("data-mce-content")}else{o.attr(a,null);o.attr(d,null)}}});i.parser.addAttributeFilter(a,function(l,m){var n=l.length,o;while(n--){o=l[n];o.attr(d,o.attr(a));o.attr(a,null)}})})},getInfo:function(){return{longname:"Non editable elements",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/noneditable",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("noneditable",tinymce.plugins.NonEditablePlugin)})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/noneditable/editor_plugin_src.js b/common/static/js/vendor/tiny_mce/plugins/noneditable/editor_plugin_src.js deleted file mode 100644 index 35c0cea745..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/noneditable/editor_plugin_src.js +++ /dev/null @@ -1,537 +0,0 @@ -/** - * editor_plugin_src.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -(function() { - var TreeWalker = tinymce.dom.TreeWalker; - var externalName = 'contenteditable', internalName = 'data-mce-' + externalName; - var VK = tinymce.VK; - - function handleContentEditableSelection(ed) { - var dom = ed.dom, selection = ed.selection, invisibleChar, caretContainerId = 'mce_noneditablecaret', invisibleChar = '\uFEFF'; - - // Returns the content editable state of a node "true/false" or null - function getContentEditable(node) { - var contentEditable; - - // Ignore non elements - if (node.nodeType === 1) { - // Check for fake content editable - contentEditable = node.getAttribute(internalName); - if (contentEditable && contentEditable !== "inherit") { - return contentEditable; - } - - // Check for real content editable - contentEditable = node.contentEditable; - if (contentEditable !== "inherit") { - return contentEditable; - } - } - - return null; - }; - - // Returns the noneditable parent or null if there is a editable before it or if it wasn't found - function getNonEditableParent(node) { - var state; - - while (node) { - state = getContentEditable(node); - if (state) { - return state === "false" ? node : null; - } - - node = node.parentNode; - } - }; - - // Get caret container parent for the specified node - function getParentCaretContainer(node) { - while (node) { - if (node.id === caretContainerId) { - return node; - } - - node = node.parentNode; - } - }; - - // Finds the first text node in the specified node - function findFirstTextNode(node) { - var walker; - - if (node) { - walker = new TreeWalker(node, node); - - for (node = walker.current(); node; node = walker.next()) { - if (node.nodeType === 3) { - return node; - } - } - } - }; - - // Insert caret container before/after target or expand selection to include block - function insertCaretContainerOrExpandToBlock(target, before) { - var caretContainer, rng; - - // Select block - if (getContentEditable(target) === "false") { - if (dom.isBlock(target)) { - selection.select(target); - return; - } - } - - rng = dom.createRng(); - - if (getContentEditable(target) === "true") { - if (!target.firstChild) { - target.appendChild(ed.getDoc().createTextNode('\u00a0')); - } - - target = target.firstChild; - before = true; - } - - //caretContainer = dom.create('span', {id: caretContainerId, 'data-mce-bogus': true, style:'border: 1px solid red'}, invisibleChar); - caretContainer = dom.create('span', {id: caretContainerId, 'data-mce-bogus': true}, invisibleChar); - - if (before) { - target.parentNode.insertBefore(caretContainer, target); - } else { - dom.insertAfter(caretContainer, target); - } - - rng.setStart(caretContainer.firstChild, 1); - rng.collapse(true); - selection.setRng(rng); - - return caretContainer; - }; - - // Removes any caret container except the one we might be in - function removeCaretContainer(caretContainer) { - var child, currentCaretContainer, lastContainer; - - if (caretContainer) { - rng = selection.getRng(true); - rng.setStartBefore(caretContainer); - rng.setEndBefore(caretContainer); - - child = findFirstTextNode(caretContainer); - if (child && child.nodeValue.charAt(0) == invisibleChar) { - child = child.deleteData(0, 1); - } - - dom.remove(caretContainer, true); - - selection.setRng(rng); - } else { - currentCaretContainer = getParentCaretContainer(selection.getStart()); - while ((caretContainer = dom.get(caretContainerId)) && caretContainer !== lastContainer) { - if (currentCaretContainer !== caretContainer) { - child = findFirstTextNode(caretContainer); - if (child && child.nodeValue.charAt(0) == invisibleChar) { - child = child.deleteData(0, 1); - } - - dom.remove(caretContainer, true); - } - - lastContainer = caretContainer; - } - } - }; - - // Modifies the selection to include contentEditable false elements or insert caret containers - function moveSelection() { - var nonEditableStart, nonEditableEnd, isCollapsed, rng, element; - - // Checks if there is any contents to the left/right side of caret returns the noneditable element or any editable element if it finds one inside - function hasSideContent(element, left) { - var container, offset, walker, node, len; - - container = rng.startContainer; - offset = rng.startOffset; - - // If endpoint is in middle of text node then expand to beginning/end of element - if (container.nodeType == 3) { - len = container.nodeValue.length; - if ((offset > 0 && offset < len) || (left ? offset == len : offset == 0)) { - return; - } - } else { - // Can we resolve the node by index - if (offset < container.childNodes.length) { - // Browser represents caret position as the offset at the start of an element. When moving right - // this is the element we are moving into so we consider our container to be child node at offset-1 - var pos = !left && offset > 0 ? offset-1 : offset; - container = container.childNodes[pos]; - if (container.hasChildNodes()) { - container = container.firstChild; - } - } else { - // If not then the caret is at the last position in it's container and the caret container should be inserted after the noneditable element - return !left ? element : null; - } - } - - // Walk left/right to look for contents - walker = new TreeWalker(container, element); - while (node = walker[left ? 'prev' : 'next']()) { - if (node.nodeType === 3 && node.nodeValue.length > 0) { - return; - } else if (getContentEditable(node) === "true") { - // Found contentEditable=true element return this one to we can move the caret inside it - return node; - } - } - - return element; - }; - - // Remove any existing caret containers - removeCaretContainer(); - - // Get noneditable start/end elements - isCollapsed = selection.isCollapsed(); - nonEditableStart = getNonEditableParent(selection.getStart()); - nonEditableEnd = getNonEditableParent(selection.getEnd()); - - // Is any fo the range endpoints noneditable - if (nonEditableStart || nonEditableEnd) { - rng = selection.getRng(true); - - // If it's a caret selection then look left/right to see if we need to move the caret out side or expand - if (isCollapsed) { - nonEditableStart = nonEditableStart || nonEditableEnd; - var start = selection.getStart(); - if (element = hasSideContent(nonEditableStart, true)) { - // We have no contents to the left of the caret then insert a caret container before the noneditable element - insertCaretContainerOrExpandToBlock(element, true); - } else if (element = hasSideContent(nonEditableStart, false)) { - // We have no contents to the right of the caret then insert a caret container after the noneditable element - insertCaretContainerOrExpandToBlock(element, false); - } else { - // We are in the middle of a noneditable so expand to select it - selection.select(nonEditableStart); - } - } else { - rng = selection.getRng(true); - - // Expand selection to include start non editable element - if (nonEditableStart) { - rng.setStartBefore(nonEditableStart); - } - - // Expand selection to include end non editable element - if (nonEditableEnd) { - rng.setEndAfter(nonEditableEnd); - } - - selection.setRng(rng); - } - } - }; - - function handleKey(ed, e) { - var keyCode = e.keyCode, nonEditableParent, caretContainer, startElement, endElement; - - function getNonEmptyTextNodeSibling(node, prev) { - while (node = node[prev ? 'previousSibling' : 'nextSibling']) { - if (node.nodeType !== 3 || node.nodeValue.length > 0) { - return node; - } - } - }; - - function positionCaretOnElement(element, start) { - selection.select(element); - selection.collapse(start); - } - - function canDelete(backspace) { - var rng, container, offset, nonEditableParent; - - function removeNodeIfNotParent(node) { - var parent = container; - - while (parent) { - if (parent === node) { - return; - } - - parent = parent.parentNode; - } - - dom.remove(node); - moveSelection(); - } - - function isNextPrevTreeNodeNonEditable() { - var node, walker, nonEmptyElements = ed.schema.getNonEmptyElements(); - - walker = new tinymce.dom.TreeWalker(container, ed.getBody()); - while (node = (backspace ? walker.prev() : walker.next())) { - // Found IMG/INPUT etc - if (nonEmptyElements[node.nodeName.toLowerCase()]) { - break; - } - - // Found text node with contents - if (node.nodeType === 3 && tinymce.trim(node.nodeValue).length > 0) { - break; - } - - // Found non editable node - if (getContentEditable(node) === "false") { - removeNodeIfNotParent(node); - return true; - } - } - - // Check if the content node is within a non editable parent - if (getNonEditableParent(node)) { - return true; - } - - return false; - } - - if (selection.isCollapsed()) { - rng = selection.getRng(true); - container = rng.startContainer; - offset = rng.startOffset; - container = getParentCaretContainer(container) || container; - - // Is in noneditable parent - if (nonEditableParent = getNonEditableParent(container)) { - removeNodeIfNotParent(nonEditableParent); - return false; - } - - // Check if the caret is in the middle of a text node - if (container.nodeType == 3 && (backspace ? offset > 0 : offset < container.nodeValue.length)) { - return true; - } - - // Resolve container index - if (container.nodeType == 1) { - container = container.childNodes[offset] || container; - } - - // Check if previous or next tree node is non editable then block the event - if (isNextPrevTreeNodeNonEditable()) { - return false; - } - } - - return true; - } - - startElement = selection.getStart() - endElement = selection.getEnd(); - - // Disable all key presses in contentEditable=false except delete or backspace - nonEditableParent = getNonEditableParent(startElement) || getNonEditableParent(endElement); - if (nonEditableParent && (keyCode < 112 || keyCode > 124) && keyCode != VK.DELETE && keyCode != VK.BACKSPACE) { - // Is Ctrl+c, Ctrl+v or Ctrl+x then use default browser behavior - if ((tinymce.isMac ? e.metaKey : e.ctrlKey) && (keyCode == 67 || keyCode == 88 || keyCode == 86)) { - return; - } - - e.preventDefault(); - - // Arrow left/right select the element and collapse left/right - if (keyCode == VK.LEFT || keyCode == VK.RIGHT) { - var left = keyCode == VK.LEFT; - // If a block element find previous or next element to position the caret - if (ed.dom.isBlock(nonEditableParent)) { - var targetElement = left ? nonEditableParent.previousSibling : nonEditableParent.nextSibling; - var walker = new TreeWalker(targetElement, targetElement); - var caretElement = left ? walker.prev() : walker.next(); - positionCaretOnElement(caretElement, !left); - } else { - positionCaretOnElement(nonEditableParent, left); - } - } - } else { - // Is arrow left/right, backspace or delete - if (keyCode == VK.LEFT || keyCode == VK.RIGHT || keyCode == VK.BACKSPACE || keyCode == VK.DELETE) { - caretContainer = getParentCaretContainer(startElement); - if (caretContainer) { - // Arrow left or backspace - if (keyCode == VK.LEFT || keyCode == VK.BACKSPACE) { - nonEditableParent = getNonEmptyTextNodeSibling(caretContainer, true); - - if (nonEditableParent && getContentEditable(nonEditableParent) === "false") { - e.preventDefault(); - - if (keyCode == VK.LEFT) { - positionCaretOnElement(nonEditableParent, true); - } else { - dom.remove(nonEditableParent); - return; - } - } else { - removeCaretContainer(caretContainer); - } - } - - // Arrow right or delete - if (keyCode == VK.RIGHT || keyCode == VK.DELETE) { - nonEditableParent = getNonEmptyTextNodeSibling(caretContainer); - - if (nonEditableParent && getContentEditable(nonEditableParent) === "false") { - e.preventDefault(); - - if (keyCode == VK.RIGHT) { - positionCaretOnElement(nonEditableParent, false); - } else { - dom.remove(nonEditableParent); - return; - } - } else { - removeCaretContainer(caretContainer); - } - } - } - - if ((keyCode == VK.BACKSPACE || keyCode == VK.DELETE) && !canDelete(keyCode == VK.BACKSPACE)) { - e.preventDefault(); - return false; - } - } - } - }; - - ed.onMouseDown.addToTop(function(ed, e) { - var node = ed.selection.getNode(); - - if (getContentEditable(node) === "false" && node == e.target) { - // Expand selection on mouse down we can't block the default event since it's used for drag/drop - moveSelection(); - } - }); - - ed.onMouseUp.addToTop(moveSelection); - ed.onKeyDown.addToTop(handleKey); - ed.onKeyUp.addToTop(moveSelection); - }; - - tinymce.create('tinymce.plugins.NonEditablePlugin', { - init : function(ed, url) { - var editClass, nonEditClass, nonEditableRegExps; - - // Converts configured regexps to noneditable span items - function convertRegExpsToNonEditable(ed, args) { - var i = nonEditableRegExps.length, content = args.content, cls = tinymce.trim(nonEditClass); - - // Don't replace the variables when raw is used for example on undo/redo - if (args.format == "raw") { - return; - } - - while (i--) { - content = content.replace(nonEditableRegExps[i], function(match) { - var args = arguments, index = args[args.length - 2]; - - // Is value inside an attribute then don't replace - if (index > 0 && content.charAt(index - 1) == '"') { - return match; - } - - return '' + ed.dom.encode(typeof(args[1]) === "string" ? args[1] : args[0]) + ''; - }); - } - - args.content = content; - }; - - editClass = " " + tinymce.trim(ed.getParam("noneditable_editable_class", "mceEditable")) + " "; - nonEditClass = " " + tinymce.trim(ed.getParam("noneditable_noneditable_class", "mceNonEditable")) + " "; - - // Setup noneditable regexps array - nonEditableRegExps = ed.getParam("noneditable_regexp"); - if (nonEditableRegExps && !nonEditableRegExps.length) { - nonEditableRegExps = [nonEditableRegExps]; - } - - ed.onPreInit.add(function() { - handleContentEditableSelection(ed); - - if (nonEditableRegExps) { - ed.selection.onBeforeSetContent.add(convertRegExpsToNonEditable); - ed.onBeforeSetContent.add(convertRegExpsToNonEditable); - } - - // Apply contentEditable true/false on elements with the noneditable/editable classes - ed.parser.addAttributeFilter('class', function(nodes) { - var i = nodes.length, className, node; - - while (i--) { - node = nodes[i]; - className = " " + node.attr("class") + " "; - - if (className.indexOf(editClass) !== -1) { - node.attr(internalName, "true"); - } else if (className.indexOf(nonEditClass) !== -1) { - node.attr(internalName, "false"); - } - } - }); - - // Remove internal name - ed.serializer.addAttributeFilter(internalName, function(nodes, name) { - var i = nodes.length, node; - - while (i--) { - node = nodes[i]; - - if (nonEditableRegExps && node.attr('data-mce-content')) { - node.name = "#text"; - node.type = 3; - node.raw = true; - node.value = node.attr('data-mce-content'); - } else { - node.attr(externalName, null); - node.attr(internalName, null); - } - } - }); - - // Convert external name into internal name - ed.parser.addAttributeFilter(externalName, function(nodes, name) { - var i = nodes.length, node; - - while (i--) { - node = nodes[i]; - node.attr(internalName, node.attr(externalName)); - node.attr(externalName, null); - } - }); - }); - }, - - getInfo : function() { - return { - longname : 'Non editable elements', - author : 'Moxiecode Systems AB', - authorurl : 'http://tinymce.moxiecode.com', - infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/noneditable', - version : tinymce.majorVersion + "." + tinymce.minorVersion - }; - } - }); - - // Register plugin - tinymce.PluginManager.add('noneditable', tinymce.plugins.NonEditablePlugin); -})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/noneditable/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/noneditable/plugin.min.js new file mode 100644 index 0000000000..aa642de8c6 --- /dev/null +++ b/common/static/js/vendor/tiny_mce/plugins/noneditable/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("noneditable",function(e){function t(e){var t;if(1===e.nodeType){if(t=e.getAttribute(u),t&&"inherit"!==t)return t;if(t=e.contentEditable,"inherit"!==t)return t}return null}function n(e){for(var n;e;){if(n=t(e))return"false"===n?e:null;e=e.parentNode}}function r(){function r(e){for(;e;){if(e.id===g)return e;e=e.parentNode}}function a(e){var t;if(e)for(t=new f(e,e),e=t.current();e;e=t.next())if(3===e.nodeType)return e}function i(n,r){var a,i;return"false"===t(n)&&u.isBlock(n)?void s.select(n):(i=u.createRng(),"true"===t(n)&&(n.firstChild||n.appendChild(e.getDoc().createTextNode(" ")),n=n.firstChild,r=!0),a=u.create("span",{id:g,"data-mce-bogus":!0},m),r?n.parentNode.insertBefore(a,n):u.insertAfter(a,n),i.setStart(a.firstChild,1),i.collapse(!0),s.setRng(i),a)}function o(e){var t,n,i,o;if(e)t=s.getRng(!0),t.setStartBefore(e),t.setEndBefore(e),n=a(e),n&&n.nodeValue.charAt(0)==m&&(n=n.deleteData(0,1)),u.remove(e,!0),s.setRng(t);else for(i=r(s.getStart());(e=u.get(g))&&e!==o;)i!==e&&(n=a(e),n&&n.nodeValue.charAt(0)==m&&(n=n.deleteData(0,1)),u.remove(e,!0)),o=e}function l(){function e(e,n){var r,a,i,o,l;if(r=d.startContainer,a=d.startOffset,3==r.nodeType){if(l=r.nodeValue.length,a>0&&l>a||(n?a==l:0===a))return}else{if(!(a0?a-1:a;r=r.childNodes[u],r.hasChildNodes()&&(r=r.firstChild)}for(i=new f(r,e);o=i[n?"prev":"next"]();){if(3===o.nodeType&&o.nodeValue.length>0)return;if("true"===t(o))return o}return e}var r,a,l,d,u;o(),l=s.isCollapsed(),r=n(s.getStart()),a=n(s.getEnd()),(r||a)&&(d=s.getRng(!0),l?(r=r||a,(u=e(r,!0))?i(u,!0):(u=e(r,!1))?i(u,!1):s.select(r)):(d=s.getRng(!0),r&&d.setStartBefore(r),a&&d.setEndAfter(a),s.setRng(d)))}function d(a){function i(e,t){for(;e=e[t?"previousSibling":"nextSibling"];)if(3!==e.nodeType||e.nodeValue.length>0)return e}function d(e,t){s.select(e),s.collapse(t)}function g(a){function i(e){for(var t=d;t;){if(t===e)return;t=t.parentNode}u.remove(e),l()}function o(){var r,o,l=e.schema.getNonEmptyElements();for(o=new tinymce.dom.TreeWalker(d,e.getBody());(r=a?o.prev():o.next())&&!l[r.nodeName.toLowerCase()]&&!(3===r.nodeType&&tinymce.trim(r.nodeValue).length>0);)if("false"===t(r))return i(r),!0;return n(r)?!0:!1}var f,d,c,g;if(s.isCollapsed()){if(f=s.getRng(!0),d=f.startContainer,c=f.startOffset,d=r(d)||d,g=n(d))return i(g),!1;if(3==d.nodeType&&(a?c>0:ch||h>124)&&h!=c.DELETE&&h!=c.BACKSPACE){if((tinymce.isMac?a.metaKey:a.ctrlKey)&&(67==h||88==h||86==h))return;if(a.preventDefault(),h==c.LEFT||h==c.RIGHT){var y=h==c.LEFT;if(e.dom.isBlock(m)){var T=y?m.previousSibling:m.nextSibling,C=new f(T,T),b=y?C.prev():C.next();d(b,!y)}else d(m,y)}}else if(h==c.LEFT||h==c.RIGHT||h==c.BACKSPACE||h==c.DELETE){if(p=r(v)){if(h==c.LEFT||h==c.BACKSPACE)if(m=i(p,!0),m&&"false"===t(m)){if(a.preventDefault(),h!=c.LEFT)return void u.remove(m);d(m,!0)}else o(p);if(h==c.RIGHT||h==c.DELETE)if(m=i(p),m&&"false"===t(m)){if(a.preventDefault(),h!=c.RIGHT)return void u.remove(m);d(m,!1)}else o(p)}if((h==c.BACKSPACE||h==c.DELETE)&&!g(h==c.BACKSPACE))return a.preventDefault(),!1}}var u=e.dom,s=e.selection,g="mce_noneditablecaret",m="";e.on("mousedown",function(n){var r=e.selection.getNode();"false"===t(r)&&r==n.target&&l()}),e.on("mouseup keyup",l),e.on("keydown",d)}function a(t){var n=l.length,r=t.content,a=tinymce.trim(o);if("raw"!=t.format){for(;n--;)r=r.replace(l[n],function(t){var n=arguments,i=n[n.length-2];return i>0&&'"'==r.charAt(i-1)?t:''+e.dom.encode("string"==typeof n[1]?n[1]:n[0])+""});t.content=r}}var i,o,l,f=tinymce.dom.TreeWalker,d="contenteditable",u="data-mce-"+d,c=tinymce.util.VK;i=" "+tinymce.trim(e.getParam("noneditable_editable_class","mceEditable"))+" ",o=" "+tinymce.trim(e.getParam("noneditable_noneditable_class","mceNonEditable"))+" ",l=e.getParam("noneditable_regexp"),l&&!l.length&&(l=[l]),e.on("PreInit",function(){r(),l&&e.on("BeforeSetContent",a),e.parser.addAttributeFilter("class",function(e){for(var t,n,r=e.length;r--;)n=e[r],t=" "+n.attr("class")+" ",-1!==t.indexOf(i)?n.attr(u,"true"):-1!==t.indexOf(o)&&n.attr(u,"false")}),e.serializer.addAttributeFilter(u,function(e){for(var t,n=e.length;n--;)t=e[n],l&&t.attr("data-mce-content")?(t.name="#text",t.type=3,t.raw=!0,t.value=t.attr("data-mce-content")):(t.attr(d,null),t.attr(u,null))}),e.parser.addAttributeFilter(d,function(e){for(var t,n=e.length;n--;)t=e[n],t.attr(u,t.attr(d)),t.attr(d,null)})}),e.on("drop",function(e){n(e.target)&&e.preventDefault()})}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/pagebreak/editor_plugin.js b/common/static/js/vendor/tiny_mce/plugins/pagebreak/editor_plugin.js deleted file mode 100644 index 35085e8adc..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/pagebreak/editor_plugin.js +++ /dev/null @@ -1 +0,0 @@ -(function(){tinymce.create("tinymce.plugins.PageBreakPlugin",{init:function(b,d){var f='',a="mcePageBreak",c=b.getParam("pagebreak_separator",""),e;e=new RegExp(c.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(g){return"\\"+g}),"g");b.addCommand("mcePageBreak",function(){b.execCommand("mceInsertContent",0,f)});b.addButton("pagebreak",{title:"pagebreak.desc",cmd:a});b.onInit.add(function(){if(b.theme.onResolveName){b.theme.onResolveName.add(function(g,h){if(h.node.nodeName=="IMG"&&b.dom.hasClass(h.node,a)){h.name="pagebreak"}})}});b.onClick.add(function(g,h){h=h.target;if(h.nodeName==="IMG"&&g.dom.hasClass(h,a)){g.selection.select(h)}});b.onNodeChange.add(function(h,g,i){g.setActive("pagebreak",i.nodeName==="IMG"&&h.dom.hasClass(i,a))});b.onBeforeSetContent.add(function(g,h){h.content=h.content.replace(e,f)});b.onPostProcess.add(function(g,h){if(h.get){h.content=h.content.replace(/]+>/g,function(i){if(i.indexOf('class="mcePageBreak')!==-1){i=c}return i})}})},getInfo:function(){return{longname:"PageBreak",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/pagebreak",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("pagebreak",tinymce.plugins.PageBreakPlugin)})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/pagebreak/editor_plugin_src.js b/common/static/js/vendor/tiny_mce/plugins/pagebreak/editor_plugin_src.js deleted file mode 100644 index fc3b3b4a15..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/pagebreak/editor_plugin_src.js +++ /dev/null @@ -1,74 +0,0 @@ -/** - * editor_plugin_src.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -(function() { - tinymce.create('tinymce.plugins.PageBreakPlugin', { - init : function(ed, url) { - var pb = '', cls = 'mcePageBreak', sep = ed.getParam('pagebreak_separator', ''), pbRE; - - pbRE = new RegExp(sep.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g, function(a) {return '\\' + a;}), 'g'); - - // Register commands - ed.addCommand('mcePageBreak', function() { - ed.execCommand('mceInsertContent', 0, pb); - }); - - // Register buttons - ed.addButton('pagebreak', {title : 'pagebreak.desc', cmd : cls}); - - ed.onInit.add(function() { - if (ed.theme.onResolveName) { - ed.theme.onResolveName.add(function(th, o) { - if (o.node.nodeName == 'IMG' && ed.dom.hasClass(o.node, cls)) - o.name = 'pagebreak'; - }); - } - }); - - ed.onClick.add(function(ed, e) { - e = e.target; - - if (e.nodeName === 'IMG' && ed.dom.hasClass(e, cls)) - ed.selection.select(e); - }); - - ed.onNodeChange.add(function(ed, cm, n) { - cm.setActive('pagebreak', n.nodeName === 'IMG' && ed.dom.hasClass(n, cls)); - }); - - ed.onBeforeSetContent.add(function(ed, o) { - o.content = o.content.replace(pbRE, pb); - }); - - ed.onPostProcess.add(function(ed, o) { - if (o.get) - o.content = o.content.replace(/]+>/g, function(im) { - if (im.indexOf('class="mcePageBreak') !== -1) - im = sep; - - return im; - }); - }); - }, - - getInfo : function() { - return { - longname : 'PageBreak', - author : 'Moxiecode Systems AB', - authorurl : 'http://tinymce.moxiecode.com', - infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/pagebreak', - version : tinymce.majorVersion + "." + tinymce.minorVersion - }; - } - }); - - // Register plugin - tinymce.PluginManager.add('pagebreak', tinymce.plugins.PageBreakPlugin); -})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/pagebreak/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/pagebreak/plugin.min.js new file mode 100644 index 0000000000..e224cb4414 --- /dev/null +++ b/common/static/js/vendor/tiny_mce/plugins/pagebreak/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("pagebreak",function(e){var a="mce-pagebreak",t=e.getParam("pagebreak_separator",""),n=new RegExp(t.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(e){return"\\"+e}),"gi"),r='';e.addCommand("mcePageBreak",function(){e.settings.pagebreak_split_block?e.insertContent("

"+r+"

"):e.insertContent(r)}),e.addButton("pagebreak",{title:"Page break",cmd:"mcePageBreak"}),e.addMenuItem("pagebreak",{text:"Page break",icon:"pagebreak",cmd:"mcePageBreak",context:"insert"}),e.on("ResolveName",function(t){"IMG"==t.target.nodeName&&e.dom.hasClass(t.target,a)&&(t.name="pagebreak")}),e.on("click",function(t){t=t.target,"IMG"===t.nodeName&&e.dom.hasClass(t,a)&&e.selection.select(t)}),e.on("BeforeSetContent",function(e){e.content=e.content.replace(n,r)}),e.on("PreInit",function(){e.serializer.addNodeFilter("img",function(a){for(var n,r,c=a.length;c--;)if(n=a[c],r=n.attr("class"),r&&-1!==r.indexOf("mce-pagebreak")){var o=n.parent;if(e.schema.getBlockElements()[o.name]&&e.settings.pagebreak_split_block){o.type=3,o.value=t,o.raw=!0,n.remove();continue}n.type=3,n.value=t,n.raw=!0}})})}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/paste/editor_plugin.js b/common/static/js/vendor/tiny_mce/plugins/paste/editor_plugin.js deleted file mode 100644 index 0ab05ebbb6..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/paste/editor_plugin.js +++ /dev/null @@ -1 +0,0 @@ -(function(){var c=tinymce.each,a={paste_auto_cleanup_on_paste:true,paste_enable_default_filters:true,paste_block_drop:false,paste_retain_style_properties:"none",paste_strip_class_attributes:"mso",paste_remove_spans:false,paste_remove_styles:false,paste_remove_styles_if_webkit:true,paste_convert_middot_lists:true,paste_convert_headers_to_strong:false,paste_dialog_width:"450",paste_dialog_height:"400",paste_max_consecutive_linebreaks:2,paste_text_use_dialog:false,paste_text_sticky:false,paste_text_sticky_default:false,paste_text_notifyalways:false,paste_text_linebreaktype:"combined",paste_text_replacements:[[/\u2026/g,"..."],[/[\x93\x94\u201c\u201d]/g,'"'],[/[\x60\x91\x92\u2018\u2019]/g,"'"]]};function b(d,e){return d.getParam(e,a[e])}tinymce.create("tinymce.plugins.PastePlugin",{init:function(d,e){var f=this;f.editor=d;f.url=e;f.onPreProcess=new tinymce.util.Dispatcher(f);f.onPostProcess=new tinymce.util.Dispatcher(f);f.onPreProcess.add(f._preProcess);f.onPostProcess.add(f._postProcess);f.onPreProcess.add(function(i,j){d.execCallback("paste_preprocess",i,j)});f.onPostProcess.add(function(i,j){d.execCallback("paste_postprocess",i,j)});d.onKeyDown.addToTop(function(i,j){if(((tinymce.isMac?j.metaKey:j.ctrlKey)&&j.keyCode==86)||(j.shiftKey&&j.keyCode==45)){return false}});d.pasteAsPlainText=b(d,"paste_text_sticky_default");function h(l,j){var k=d.dom,i;f.onPreProcess.dispatch(f,l);l.node=k.create("div",0,l.content);if(tinymce.isGecko){i=d.selection.getRng(true);if(i.startContainer==i.endContainer&&i.startContainer.nodeType==3){if(l.node.childNodes.length===1&&/^(p|h[1-6]|pre)$/i.test(l.node.firstChild.nodeName)&&l.content.indexOf("__MCE_ITEM__")===-1){k.remove(l.node.firstChild,true)}}}f.onPostProcess.dispatch(f,l);l.content=d.serializer.serialize(l.node,{getInner:1,forced_root_block:""});if((!j)&&(d.pasteAsPlainText)){f._insertPlainText(l.content);if(!b(d,"paste_text_sticky")){d.pasteAsPlainText=false;d.controlManager.setActive("pastetext",false)}}else{f._insert(l.content)}}d.addCommand("mceInsertClipboardContent",function(i,j){h(j,true)});if(!b(d,"paste_text_use_dialog")){d.addCommand("mcePasteText",function(j,i){var k=tinymce.util.Cookie;d.pasteAsPlainText=!d.pasteAsPlainText;d.controlManager.setActive("pastetext",d.pasteAsPlainText);if((d.pasteAsPlainText)&&(!k.get("tinymcePasteText"))){if(b(d,"paste_text_sticky")){d.windowManager.alert(d.translate("paste.plaintext_mode_sticky"))}else{d.windowManager.alert(d.translate("paste.plaintext_mode"))}if(!b(d,"paste_text_notifyalways")){k.set("tinymcePasteText","1",new Date(new Date().getFullYear()+1,12,31))}}})}d.addButton("pastetext",{title:"paste.paste_text_desc",cmd:"mcePasteText"});d.addButton("selectall",{title:"paste.selectall_desc",cmd:"selectall"});function g(s){var l,p,j,t,k=d.selection,o=d.dom,q=d.getBody(),i,r;if(s.clipboardData||o.doc.dataTransfer){r=(s.clipboardData||o.doc.dataTransfer).getData("Text");if(d.pasteAsPlainText){s.preventDefault();h({content:o.encode(r).replace(/\r?\n/g,"
")});return}}if(o.get("_mcePaste")){return}l=o.add(q,"div",{id:"_mcePaste","class":"mcePaste","data-mce-bogus":"1"},"\uFEFF\uFEFF");if(q!=d.getDoc().body){i=o.getPos(d.selection.getStart(),q).y}else{i=q.scrollTop+o.getViewPort(d.getWin()).y}o.setStyles(l,{position:"absolute",left:tinymce.isGecko?-40:0,top:i-25,width:1,height:1,overflow:"hidden"});if(tinymce.isIE){t=k.getRng();j=o.doc.body.createTextRange();j.moveToElementText(l);j.execCommand("Paste");o.remove(l);if(l.innerHTML==="\uFEFF\uFEFF"){d.execCommand("mcePasteWord");s.preventDefault();return}k.setRng(t);k.setContent("");setTimeout(function(){h({content:l.innerHTML})},0);return tinymce.dom.Event.cancel(s)}else{function m(n){n.preventDefault()}o.bind(d.getDoc(),"mousedown",m);o.bind(d.getDoc(),"keydown",m);p=d.selection.getRng();l=l.firstChild;j=d.getDoc().createRange();j.setStart(l,0);j.setEnd(l,2);k.setRng(j);window.setTimeout(function(){var u="",n;if(!o.select("div.mcePaste > div.mcePaste").length){n=o.select("div.mcePaste");c(n,function(w){var v=w.firstChild;if(v&&v.nodeName=="DIV"&&v.style.marginTop&&v.style.backgroundColor){o.remove(v,1)}c(o.select("span.Apple-style-span",w),function(x){o.remove(x,1)});c(o.select("br[data-mce-bogus]",w),function(x){o.remove(x)});if(w.parentNode.className!="mcePaste"){u+=w.innerHTML}})}else{u="

"+o.encode(r).replace(/\r?\n\r?\n/g,"

").replace(/\r?\n/g,"
")+"

"}c(o.select("div.mcePaste"),function(v){o.remove(v)});if(p){k.setRng(p)}h({content:u});o.unbind(d.getDoc(),"mousedown",m);o.unbind(d.getDoc(),"keydown",m)},0)}}if(b(d,"paste_auto_cleanup_on_paste")){if(tinymce.isOpera||/Firefox\/2/.test(navigator.userAgent)){d.onKeyDown.addToTop(function(i,j){if(((tinymce.isMac?j.metaKey:j.ctrlKey)&&j.keyCode==86)||(j.shiftKey&&j.keyCode==45)){g(j)}})}else{d.onPaste.addToTop(function(i,j){return g(j)})}}d.onInit.add(function(){d.controlManager.setActive("pastetext",d.pasteAsPlainText);if(b(d,"paste_block_drop")){d.dom.bind(d.getBody(),["dragend","dragover","draggesture","dragdrop","drop","drag"],function(i){i.preventDefault();i.stopPropagation();return false})}});f._legacySupport()},getInfo:function(){return{longname:"Paste text/word",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/paste",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_preProcess:function(g,e){var k=this.editor,j=e.content,p=tinymce.grep,n=tinymce.explode,f=tinymce.trim,l,i;function d(h){c(h,function(o){if(o.constructor==RegExp){j=j.replace(o,"")}else{j=j.replace(o[0],o[1])}})}if(k.settings.paste_enable_default_filters==false){return}if(tinymce.isIE&&document.documentMode>=9&&/<(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)/.test(e.content)){d([[/(?:
 [\s\r\n]+|
)*(<\/?(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)[^>]*>)(?:
 [\s\r\n]+|
)*/g,"$1"]]);d([[/

/g,"

"],[/
/g," "],[/

/g,"
"]])}if(/class="?Mso|style="[^"]*\bmso-|w:WordDocument/i.test(j)||e.wordContent){e.wordContent=true;d([/^\s*( )+/gi,/( |]*>)+\s*$/gi]);if(b(k,"paste_convert_headers_to_strong")){j=j.replace(/

]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi,"

$1

")}if(b(k,"paste_convert_middot_lists")){d([[//gi,"$&__MCE_ITEM__"],[/(]+(?:mso-list:|:\s*symbol)[^>]+>)/gi,"$1__MCE_ITEM__"],[/(]+(?:MsoListParagraph)[^>]+>)/gi,"$1__MCE_ITEM__"]])}d([//gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/ /gi,"\u00a0"]]);do{l=j.length;j=j.replace(/(<[a-z][^>]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi,"$1")}while(l!=j.length);if(b(k,"paste_retain_style_properties").replace(/^none$/i,"").length==0){j=j.replace(/<\/?span[^>]*>/gi,"")}else{d([[/([\s\u00a0]*)<\/span>/gi,function(o,h){return(h.length>0)?h.replace(/./," ").slice(Math.floor(h.length/2)).split("").join("\u00a0"):""}],[/(<[a-z][^>]*)\sstyle="([^"]*)"/gi,function(t,h,r){var u=[],o=0,q=n(f(r).replace(/"/gi,"'"),";");c(q,function(s){var w,y,z=n(s,":");function x(A){return A+((A!=="0")&&(/\d$/.test(A)))?"px":""}if(z.length==2){w=z[0].toLowerCase();y=z[1].toLowerCase();switch(w){case"mso-padding-alt":case"mso-padding-top-alt":case"mso-padding-right-alt":case"mso-padding-bottom-alt":case"mso-padding-left-alt":case"mso-margin-alt":case"mso-margin-top-alt":case"mso-margin-right-alt":case"mso-margin-bottom-alt":case"mso-margin-left-alt":case"mso-table-layout-alt":case"mso-height":case"mso-width":case"mso-vertical-align-alt":u[o++]=w.replace(/^mso-|-alt$/g,"")+":"+x(y);return;case"horiz-align":u[o++]="text-align:"+y;return;case"vert-align":u[o++]="vertical-align:"+y;return;case"font-color":case"mso-foreground":u[o++]="color:"+y;return;case"mso-background":case"mso-highlight":u[o++]="background:"+y;return;case"mso-default-height":u[o++]="min-height:"+x(y);return;case"mso-default-width":u[o++]="min-width:"+x(y);return;case"mso-padding-between-alt":u[o++]="border-collapse:separate;border-spacing:"+x(y);return;case"text-line-through":if((y=="single")||(y=="double")){u[o++]="text-decoration:line-through"}return;case"mso-zero-height":if(y=="yes"){u[o++]="display:none"}return}if(/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?!align|decor|indent|trans)|top-bar|version|vnd|word-break)/.test(w)){return}u[o++]=w+":"+z[1]}});if(o>0){return h+' style="'+u.join(";")+'"'}else{return h}}]])}}if(b(k,"paste_convert_headers_to_strong")){d([[/]*>/gi,"

"],[/<\/h[1-6][^>]*>/gi,"

"]])}d([[/Version:[\d.]+\nStartHTML:\d+\nEndHTML:\d+\nStartFragment:\d+\nEndFragment:\d+/gi,""]]);i=b(k,"paste_strip_class_attributes");if(i!=="none"){function m(q,o){if(i==="all"){return""}var h=p(n(o.replace(/^(["'])(.*)\1$/,"$2")," "),function(r){return(/^(?!mso)/i.test(r))});return h.length?' class="'+h.join(" ")+'"':""}j=j.replace(/ class="([^"]+)"/gi,m);j=j.replace(/ class=([\-\w]+)/gi,m)}if(b(k,"paste_remove_spans")){j=j.replace(/<\/?span[^>]*>/gi,"")}e.content=j},_postProcess:function(g,i){var f=this,e=f.editor,h=e.dom,d;if(e.settings.paste_enable_default_filters==false){return}if(i.wordContent){c(h.select("a",i.node),function(j){if(!j.href||j.href.indexOf("#_Toc")!=-1){h.remove(j,1)}});if(b(e,"paste_convert_middot_lists")){f._convertLists(g,i)}d=b(e,"paste_retain_style_properties");if((tinymce.is(d,"string"))&&(d!=="all")&&(d!=="*")){d=tinymce.explode(d.replace(/^none$/i,""));c(h.select("*",i.node),function(m){var n={},k=0,l,o,j;if(d){for(l=0;l0){h.setStyles(m,n)}else{if(m.nodeName=="SPAN"&&!m.className){h.remove(m,true)}}})}}if(b(e,"paste_remove_styles")||(b(e,"paste_remove_styles_if_webkit")&&tinymce.isWebKit)){c(h.select("*[style]",i.node),function(j){j.removeAttribute("style");j.removeAttribute("data-mce-style")})}else{if(tinymce.isWebKit){c(h.select("*",i.node),function(j){j.removeAttribute("data-mce-style")})}}},_convertLists:function(g,e){var i=g.editor.dom,h,l,d=-1,f,m=[],k,j;c(i.select("p",e.node),function(t){var q,u="",s,r,n,o;for(q=t.firstChild;q&&q.nodeType==3;q=q.nextSibling){u+=q.nodeValue}u=t.innerHTML.replace(/<\/?\w+[^>]*>/gi,"").replace(/ /g,"\u00a0");if(/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*\u00a0*/.test(u)){s="ul"}if(/^__MCE_ITEM__\s*\w+\.\s*\u00a0+/.test(u)){s="ol"}if(s){f=parseFloat(t.style.marginLeft||0);if(f>d){m.push(f)}if(!h||s!=k){h=i.create(s);i.insertAfter(h,t)}else{if(f>d){h=l.appendChild(i.create(s))}else{if(f]*>/gi,"");if(s=="ul"&&/^__MCE_ITEM__[\u2022\u00b7\u00a7\u00d8o\u25CF]/.test(p)){i.remove(v)}else{if(/^__MCE_ITEM__[\s\S]*\w+\.( |\u00a0)*\s*/.test(p)){i.remove(v)}}});r=t.innerHTML;if(s=="ul"){r=t.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*( |\u00a0)+\s*/,"")}else{r=t.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^\s*\w+\.( |\u00a0)+\s*/,"")}l=h.appendChild(i.create("li",0,r));i.remove(t);d=f;k=s}else{h=d=0}});j=e.node.innerHTML;if(j.indexOf("__MCE_ITEM__")!=-1){e.node.innerHTML=j.replace(/__MCE_ITEM__/g,"")}},_insert:function(f,d){var e=this.editor,g=e.selection.getRng();if(!e.selection.isCollapsed()&&g.startContainer!=g.endContainer){e.getDoc().execCommand("Delete",false,null)}e.execCommand("mceInsertContent",false,f,{skip_undo:d})},_insertPlainText:function(j){var h=this.editor,f=b(h,"paste_text_linebreaktype"),k=b(h,"paste_text_replacements"),g=tinymce.is;function e(m){c(m,function(n){if(n.constructor==RegExp){j=j.replace(n,"")}else{j=j.replace(n[0],n[1])}})}if((typeof(j)==="string")&&(j.length>0)){if(/<(?:p|br|h[1-6]|ul|ol|dl|table|t[rdh]|div|blockquote|fieldset|pre|address|center)[^>]*>/i.test(j)){e([/[\n\r]+/g])}else{e([/\r+/g])}e([[/<\/(?:p|h[1-6]|ul|ol|dl|table|div|blockquote|fieldset|pre|address|center)>/gi,"\n\n"],[/]*>|<\/tr>/gi,"\n"],[/<\/t[dh]>\s*]*>/gi,"\t"],/<[a-z!\/?][^>]*>/gi,[/ /gi," "],[/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi,"$1"]]);var d=Number(b(h,"paste_max_consecutive_linebreaks"));if(d>-1){var l=new RegExp("\n{"+(d+1)+",}","g");var i="";while(i.length"]])}else{if(f=="p"){e([[/\n+/g,"

"],[/^(.*<\/p>)(

)$/,"

$1"]])}else{e([[/\n\n/g,"

"],[/^(.*<\/p>)(

)$/,"

$1"],[/\n/g,"
"]])}}}h.execCommand("mceInsertContent",false,j)}},_legacySupport:function(){var e=this,d=e.editor;d.addCommand("mcePasteWord",function(){d.windowManager.open({file:e.url+"/pasteword.htm",width:parseInt(b(d,"paste_dialog_width")),height:parseInt(b(d,"paste_dialog_height")),inline:1})});if(b(d,"paste_text_use_dialog")){d.addCommand("mcePasteText",function(){d.windowManager.open({file:e.url+"/pastetext.htm",width:parseInt(b(d,"paste_dialog_width")),height:parseInt(b(d,"paste_dialog_height")),inline:1})})}d.addButton("pasteword",{title:"paste.paste_word_desc",cmd:"mcePasteWord"})}});tinymce.PluginManager.add("paste",tinymce.plugins.PastePlugin)})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/paste/editor_plugin_src.js b/common/static/js/vendor/tiny_mce/plugins/paste/editor_plugin_src.js deleted file mode 100644 index c8230e9c9b..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/paste/editor_plugin_src.js +++ /dev/null @@ -1,885 +0,0 @@ -/** - * editor_plugin_src.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -(function() { - var each = tinymce.each, - defs = { - paste_auto_cleanup_on_paste : true, - paste_enable_default_filters : true, - paste_block_drop : false, - paste_retain_style_properties : "none", - paste_strip_class_attributes : "mso", - paste_remove_spans : false, - paste_remove_styles : false, - paste_remove_styles_if_webkit : true, - paste_convert_middot_lists : true, - paste_convert_headers_to_strong : false, - paste_dialog_width : "450", - paste_dialog_height : "400", - paste_max_consecutive_linebreaks: 2, - paste_text_use_dialog : false, - paste_text_sticky : false, - paste_text_sticky_default : false, - paste_text_notifyalways : false, - paste_text_linebreaktype : "combined", - paste_text_replacements : [ - [/\u2026/g, "..."], - [/[\x93\x94\u201c\u201d]/g, '"'], - [/[\x60\x91\x92\u2018\u2019]/g, "'"] - ] - }; - - function getParam(ed, name) { - return ed.getParam(name, defs[name]); - } - - tinymce.create('tinymce.plugins.PastePlugin', { - init : function(ed, url) { - var t = this; - - t.editor = ed; - t.url = url; - - // Setup plugin events - t.onPreProcess = new tinymce.util.Dispatcher(t); - t.onPostProcess = new tinymce.util.Dispatcher(t); - - // Register default handlers - t.onPreProcess.add(t._preProcess); - t.onPostProcess.add(t._postProcess); - - // Register optional preprocess handler - t.onPreProcess.add(function(pl, o) { - ed.execCallback('paste_preprocess', pl, o); - }); - - // Register optional postprocess - t.onPostProcess.add(function(pl, o) { - ed.execCallback('paste_postprocess', pl, o); - }); - - ed.onKeyDown.addToTop(function(ed, e) { - // Block ctrl+v from adding an undo level since the default logic in tinymce.Editor will add that - if (((tinymce.isMac ? e.metaKey : e.ctrlKey) && e.keyCode == 86) || (e.shiftKey && e.keyCode == 45)) - return false; // Stop other listeners - }); - - // Initialize plain text flag - ed.pasteAsPlainText = getParam(ed, 'paste_text_sticky_default'); - - // This function executes the process handlers and inserts the contents - // force_rich overrides plain text mode set by user, important for pasting with execCommand - function process(o, force_rich) { - var dom = ed.dom, rng; - - // Execute pre process handlers - t.onPreProcess.dispatch(t, o); - - // Create DOM structure - o.node = dom.create('div', 0, o.content); - - // If pasting inside the same element and the contents is only one block - // remove the block and keep the text since Firefox will copy parts of pre and h1-h6 as a pre element - if (tinymce.isGecko) { - rng = ed.selection.getRng(true); - if (rng.startContainer == rng.endContainer && rng.startContainer.nodeType == 3) { - // Is only one block node and it doesn't contain word stuff - if (o.node.childNodes.length === 1 && /^(p|h[1-6]|pre)$/i.test(o.node.firstChild.nodeName) && o.content.indexOf('__MCE_ITEM__') === -1) - dom.remove(o.node.firstChild, true); - } - } - - // Execute post process handlers - t.onPostProcess.dispatch(t, o); - - // Serialize content - o.content = ed.serializer.serialize(o.node, {getInner : 1, forced_root_block : ''}); - - // Plain text option active? - if ((!force_rich) && (ed.pasteAsPlainText)) { - t._insertPlainText(o.content); - - if (!getParam(ed, "paste_text_sticky")) { - ed.pasteAsPlainText = false; - ed.controlManager.setActive("pastetext", false); - } - } else { - t._insert(o.content); - } - } - - // Add command for external usage - ed.addCommand('mceInsertClipboardContent', function(u, o) { - process(o, true); - }); - - if (!getParam(ed, "paste_text_use_dialog")) { - ed.addCommand('mcePasteText', function(u, v) { - var cookie = tinymce.util.Cookie; - - ed.pasteAsPlainText = !ed.pasteAsPlainText; - ed.controlManager.setActive('pastetext', ed.pasteAsPlainText); - - if ((ed.pasteAsPlainText) && (!cookie.get("tinymcePasteText"))) { - if (getParam(ed, "paste_text_sticky")) { - ed.windowManager.alert(ed.translate('paste.plaintext_mode_sticky')); - } else { - ed.windowManager.alert(ed.translate('paste.plaintext_mode')); - } - - if (!getParam(ed, "paste_text_notifyalways")) { - cookie.set("tinymcePasteText", "1", new Date(new Date().getFullYear() + 1, 12, 31)) - } - } - }); - } - - ed.addButton('pastetext', {title: 'paste.paste_text_desc', cmd: 'mcePasteText'}); - ed.addButton('selectall', {title: 'paste.selectall_desc', cmd: 'selectall'}); - - // This function grabs the contents from the clipboard by adding a - // hidden div and placing the caret inside it and after the browser paste - // is done it grabs that contents and processes that - function grabContent(e) { - var n, or, rng, oldRng, sel = ed.selection, dom = ed.dom, body = ed.getBody(), posY, textContent; - - // Check if browser supports direct plaintext access - if (e.clipboardData || dom.doc.dataTransfer) { - textContent = (e.clipboardData || dom.doc.dataTransfer).getData('Text'); - - if (ed.pasteAsPlainText) { - e.preventDefault(); - process({content : dom.encode(textContent).replace(/\r?\n/g, '
')}); - return; - } - } - - if (dom.get('_mcePaste')) - return; - - // Create container to paste into - n = dom.add(body, 'div', {id : '_mcePaste', 'class' : 'mcePaste', 'data-mce-bogus' : '1'}, '\uFEFF\uFEFF'); - - // If contentEditable mode we need to find out the position of the closest element - if (body != ed.getDoc().body) - posY = dom.getPos(ed.selection.getStart(), body).y; - else - posY = body.scrollTop + dom.getViewPort(ed.getWin()).y; - - // Styles needs to be applied after the element is added to the document since WebKit will otherwise remove all styles - // If also needs to be in view on IE or the paste would fail - dom.setStyles(n, { - position : 'absolute', - left : tinymce.isGecko ? -40 : 0, // Need to move it out of site on Gecko since it will othewise display a ghost resize rect for the div - top : posY - 25, - width : 1, - height : 1, - overflow : 'hidden' - }); - - if (tinymce.isIE) { - // Store away the old range - oldRng = sel.getRng(); - - // Select the container - rng = dom.doc.body.createTextRange(); - rng.moveToElementText(n); - rng.execCommand('Paste'); - - // Remove container - dom.remove(n); - - // Check if the contents was changed, if it wasn't then clipboard extraction failed probably due - // to IE security settings so we pass the junk though better than nothing right - if (n.innerHTML === '\uFEFF\uFEFF') { - ed.execCommand('mcePasteWord'); - e.preventDefault(); - return; - } - - // Restore the old range and clear the contents before pasting - sel.setRng(oldRng); - sel.setContent(''); - - // For some odd reason we need to detach the the mceInsertContent call from the paste event - // It's like IE has a reference to the parent element that you paste in and the selection gets messed up - // when it tries to restore the selection - setTimeout(function() { - // Process contents - process({content : n.innerHTML}); - }, 0); - - // Block the real paste event - return tinymce.dom.Event.cancel(e); - } else { - function block(e) { - e.preventDefault(); - }; - - // Block mousedown and click to prevent selection change - dom.bind(ed.getDoc(), 'mousedown', block); - dom.bind(ed.getDoc(), 'keydown', block); - - or = ed.selection.getRng(); - - // Move select contents inside DIV - n = n.firstChild; - rng = ed.getDoc().createRange(); - rng.setStart(n, 0); - rng.setEnd(n, 2); - sel.setRng(rng); - - // Wait a while and grab the pasted contents - window.setTimeout(function() { - var h = '', nl; - - // Paste divs duplicated in paste divs seems to happen when you paste plain text so lets first look for that broken behavior in WebKit - if (!dom.select('div.mcePaste > div.mcePaste').length) { - nl = dom.select('div.mcePaste'); - - // WebKit will split the div into multiple ones so this will loop through then all and join them to get the whole HTML string - each(nl, function(n) { - var child = n.firstChild; - - // WebKit inserts a DIV container with lots of odd styles - if (child && child.nodeName == 'DIV' && child.style.marginTop && child.style.backgroundColor) { - dom.remove(child, 1); - } - - // Remove apply style spans - each(dom.select('span.Apple-style-span', n), function(n) { - dom.remove(n, 1); - }); - - // Remove bogus br elements - each(dom.select('br[data-mce-bogus]', n), function(n) { - dom.remove(n); - }); - - // WebKit will make a copy of the DIV for each line of plain text pasted and insert them into the DIV - if (n.parentNode.className != 'mcePaste') - h += n.innerHTML; - }); - } else { - // Found WebKit weirdness so force the content into paragraphs this seems to happen when you paste plain text from Nodepad etc - // So this logic will replace double enter with paragraphs and single enter with br so it kind of looks the same - h = '

' + dom.encode(textContent).replace(/\r?\n\r?\n/g, '

').replace(/\r?\n/g, '
') + '

'; - } - - // Remove the nodes - each(dom.select('div.mcePaste'), function(n) { - dom.remove(n); - }); - - // Restore the old selection - if (or) - sel.setRng(or); - - process({content : h}); - - // Unblock events ones we got the contents - dom.unbind(ed.getDoc(), 'mousedown', block); - dom.unbind(ed.getDoc(), 'keydown', block); - }, 0); - } - } - - // Check if we should use the new auto process method - if (getParam(ed, "paste_auto_cleanup_on_paste")) { - // Is it's Opera or older FF use key handler - if (tinymce.isOpera || /Firefox\/2/.test(navigator.userAgent)) { - ed.onKeyDown.addToTop(function(ed, e) { - if (((tinymce.isMac ? e.metaKey : e.ctrlKey) && e.keyCode == 86) || (e.shiftKey && e.keyCode == 45)) - grabContent(e); - }); - } else { - // Grab contents on paste event on Gecko and WebKit - ed.onPaste.addToTop(function(ed, e) { - return grabContent(e); - }); - } - } - - ed.onInit.add(function() { - ed.controlManager.setActive("pastetext", ed.pasteAsPlainText); - - // Block all drag/drop events - if (getParam(ed, "paste_block_drop")) { - ed.dom.bind(ed.getBody(), ['dragend', 'dragover', 'draggesture', 'dragdrop', 'drop', 'drag'], function(e) { - e.preventDefault(); - e.stopPropagation(); - - return false; - }); - } - }); - - // Add legacy support - t._legacySupport(); - }, - - getInfo : function() { - return { - longname : 'Paste text/word', - author : 'Moxiecode Systems AB', - authorurl : 'http://tinymce.moxiecode.com', - infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/paste', - version : tinymce.majorVersion + "." + tinymce.minorVersion - }; - }, - - _preProcess : function(pl, o) { - var ed = this.editor, - h = o.content, - grep = tinymce.grep, - explode = tinymce.explode, - trim = tinymce.trim, - len, stripClass; - - //console.log('Before preprocess:' + o.content); - - function process(items) { - each(items, function(v) { - // Remove or replace - if (v.constructor == RegExp) - h = h.replace(v, ''); - else - h = h.replace(v[0], v[1]); - }); - } - - if (ed.settings.paste_enable_default_filters == false) { - return; - } - - // IE9 adds BRs before/after block elements when contents is pasted from word or for example another browser - if (tinymce.isIE && document.documentMode >= 9 && /<(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)/.test(o.content)) { - // IE9 adds BRs before/after block elements when contents is pasted from word or for example another browser - process([[/(?:
 [\s\r\n]+|
)*(<\/?(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)[^>]*>)(?:
 [\s\r\n]+|
)*/g, '$1']]); - - // IE9 also adds an extra BR element for each soft-linefeed and it also adds a BR for each word wrap break - process([ - [/

/g, '

'], // Replace multiple BR elements with uppercase BR to keep them intact - [/
/g, ' '], // Replace single br elements with space since they are word wrap BR:s - [/

/g, '
'] // Replace back the double brs but into a single BR - ]); - } - - // Detect Word content and process it more aggressive - if (/class="?Mso|style="[^"]*\bmso-|w:WordDocument/i.test(h) || o.wordContent) { - o.wordContent = true; // Mark the pasted contents as word specific content - //console.log('Word contents detected.'); - - // Process away some basic content - process([ - /^\s*( )+/gi, //   entities at the start of contents - /( |]*>)+\s*$/gi //   entities at the end of contents - ]); - - if (getParam(ed, "paste_convert_headers_to_strong")) { - h = h.replace(/

]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi, "

$1

"); - } - - if (getParam(ed, "paste_convert_middot_lists")) { - process([ - [//gi, '$&__MCE_ITEM__'], // Convert supportLists to a list item marker - [/(]+(?:mso-list:|:\s*symbol)[^>]+>)/gi, '$1__MCE_ITEM__'], // Convert mso-list and symbol spans to item markers - [/(]+(?:MsoListParagraph)[^>]+>)/gi, '$1__MCE_ITEM__'] // Convert mso-list and symbol paragraphs to item markers (FF) - ]); - } - - process([ - // Word comments like conditional comments etc - //gi, - - // Remove comments, scripts (e.g., msoShowComment), XML tag, VML content, MS Office namespaced tags, and a few other tags - /<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi, - - // Convert into for line-though - [/<(\/?)s>/gi, "<$1strike>"], - - // Replace nsbp entites to char since it's easier to handle - [/ /gi, "\u00a0"] - ]); - - // Remove bad attributes, with or without quotes, ensuring that attribute text is really inside a tag. - // If JavaScript had a RegExp look-behind, we could have integrated this with the last process() array and got rid of the loop. But alas, it does not, so we cannot. - do { - len = h.length; - h = h.replace(/(<[a-z][^>]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi, "$1"); - } while (len != h.length); - - // Remove all spans if no styles is to be retained - if (getParam(ed, "paste_retain_style_properties").replace(/^none$/i, "").length == 0) { - h = h.replace(/<\/?span[^>]*>/gi, ""); - } else { - // We're keeping styles, so at least clean them up. - // CSS Reference: http://msdn.microsoft.com/en-us/library/aa155477.aspx - - process([ - // Convert ___ to string of alternating breaking/non-breaking spaces of same length - [/([\s\u00a0]*)<\/span>/gi, - function(str, spaces) { - return (spaces.length > 0)? spaces.replace(/./, " ").slice(Math.floor(spaces.length/2)).split("").join("\u00a0") : ""; - } - ], - - // Examine all styles: delete junk, transform some, and keep the rest - [/(<[a-z][^>]*)\sstyle="([^"]*)"/gi, - function(str, tag, style) { - var n = [], - i = 0, - s = explode(trim(style).replace(/"/gi, "'"), ";"); - - // Examine each style definition within the tag's style attribute - each(s, function(v) { - var name, value, - parts = explode(v, ":"); - - function ensureUnits(v) { - return v + ((v !== "0") && (/\d$/.test(v)))? "px" : ""; - } - - if (parts.length == 2) { - name = parts[0].toLowerCase(); - value = parts[1].toLowerCase(); - - // Translate certain MS Office styles into their CSS equivalents - switch (name) { - case "mso-padding-alt": - case "mso-padding-top-alt": - case "mso-padding-right-alt": - case "mso-padding-bottom-alt": - case "mso-padding-left-alt": - case "mso-margin-alt": - case "mso-margin-top-alt": - case "mso-margin-right-alt": - case "mso-margin-bottom-alt": - case "mso-margin-left-alt": - case "mso-table-layout-alt": - case "mso-height": - case "mso-width": - case "mso-vertical-align-alt": - n[i++] = name.replace(/^mso-|-alt$/g, "") + ":" + ensureUnits(value); - return; - - case "horiz-align": - n[i++] = "text-align:" + value; - return; - - case "vert-align": - n[i++] = "vertical-align:" + value; - return; - - case "font-color": - case "mso-foreground": - n[i++] = "color:" + value; - return; - - case "mso-background": - case "mso-highlight": - n[i++] = "background:" + value; - return; - - case "mso-default-height": - n[i++] = "min-height:" + ensureUnits(value); - return; - - case "mso-default-width": - n[i++] = "min-width:" + ensureUnits(value); - return; - - case "mso-padding-between-alt": - n[i++] = "border-collapse:separate;border-spacing:" + ensureUnits(value); - return; - - case "text-line-through": - if ((value == "single") || (value == "double")) { - n[i++] = "text-decoration:line-through"; - } - return; - - case "mso-zero-height": - if (value == "yes") { - n[i++] = "display:none"; - } - return; - } - - // Eliminate all MS Office style definitions that have no CSS equivalent by examining the first characters in the name - if (/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?!align|decor|indent|trans)|top-bar|version|vnd|word-break)/.test(name)) { - return; - } - - // If it reached this point, it must be a valid CSS style - n[i++] = name + ":" + parts[1]; // Lower-case name, but keep value case - } - }); - - // If style attribute contained any valid styles the re-write it; otherwise delete style attribute. - if (i > 0) { - return tag + ' style="' + n.join(';') + '"'; - } else { - return tag; - } - } - ] - ]); - } - } - - // Replace headers with - if (getParam(ed, "paste_convert_headers_to_strong")) { - process([ - [/]*>/gi, "

"], - [/<\/h[1-6][^>]*>/gi, "

"] - ]); - } - - process([ - // Copy paste from Java like Open Office will produce this junk on FF - [/Version:[\d.]+\nStartHTML:\d+\nEndHTML:\d+\nStartFragment:\d+\nEndFragment:\d+/gi, ''] - ]); - - // Class attribute options are: leave all as-is ("none"), remove all ("all"), or remove only those starting with mso ("mso"). - // Note:- paste_strip_class_attributes: "none", verify_css_classes: true is also a good variation. - stripClass = getParam(ed, "paste_strip_class_attributes"); - - if (stripClass !== "none") { - function removeClasses(match, g1) { - if (stripClass === "all") - return ''; - - var cls = grep(explode(g1.replace(/^(["'])(.*)\1$/, "$2"), " "), - function(v) { - return (/^(?!mso)/i.test(v)); - } - ); - - return cls.length ? ' class="' + cls.join(" ") + '"' : ''; - }; - - h = h.replace(/ class="([^"]+)"/gi, removeClasses); - h = h.replace(/ class=([\-\w]+)/gi, removeClasses); - } - - // Remove spans option - if (getParam(ed, "paste_remove_spans")) { - h = h.replace(/<\/?span[^>]*>/gi, ""); - } - - //console.log('After preprocess:' + h); - - o.content = h; - }, - - /** - * Various post process items. - */ - _postProcess : function(pl, o) { - var t = this, ed = t.editor, dom = ed.dom, styleProps; - - if (ed.settings.paste_enable_default_filters == false) { - return; - } - - if (o.wordContent) { - // Remove named anchors or TOC links - each(dom.select('a', o.node), function(a) { - if (!a.href || a.href.indexOf('#_Toc') != -1) - dom.remove(a, 1); - }); - - if (getParam(ed, "paste_convert_middot_lists")) { - t._convertLists(pl, o); - } - - // Process styles - styleProps = getParam(ed, "paste_retain_style_properties"); // retained properties - - // Process only if a string was specified and not equal to "all" or "*" - if ((tinymce.is(styleProps, "string")) && (styleProps !== "all") && (styleProps !== "*")) { - styleProps = tinymce.explode(styleProps.replace(/^none$/i, "")); - - // Retains some style properties - each(dom.select('*', o.node), function(el) { - var newStyle = {}, npc = 0, i, sp, sv; - - // Store a subset of the existing styles - if (styleProps) { - for (i = 0; i < styleProps.length; i++) { - sp = styleProps[i]; - sv = dom.getStyle(el, sp); - - if (sv) { - newStyle[sp] = sv; - npc++; - } - } - } - - // Remove all of the existing styles - dom.setAttrib(el, 'style', ''); - - if (styleProps && npc > 0) - dom.setStyles(el, newStyle); // Add back the stored subset of styles - else // Remove empty span tags that do not have class attributes - if (el.nodeName == 'SPAN' && !el.className) - dom.remove(el, true); - }); - } - } - - // Remove all style information or only specifically on WebKit to avoid the style bug on that browser - if (getParam(ed, "paste_remove_styles") || (getParam(ed, "paste_remove_styles_if_webkit") && tinymce.isWebKit)) { - each(dom.select('*[style]', o.node), function(el) { - el.removeAttribute('style'); - el.removeAttribute('data-mce-style'); - }); - } else { - if (tinymce.isWebKit) { - // We need to compress the styles on WebKit since if you paste it will become - // Removing the mce_style that contains the real value will force the Serializer engine to compress the styles - each(dom.select('*', o.node), function(el) { - el.removeAttribute('data-mce-style'); - }); - } - } - }, - - /** - * Converts the most common bullet and number formats in Office into a real semantic UL/LI list. - */ - _convertLists : function(pl, o) { - var dom = pl.editor.dom, listElm, li, lastMargin = -1, margin, levels = [], lastType, html; - - // Convert middot lists into real semantic lists - each(dom.select('p', o.node), function(p) { - var sib, val = '', type, html, idx, parents; - - // Get text node value at beginning of paragraph - for (sib = p.firstChild; sib && sib.nodeType == 3; sib = sib.nextSibling) - val += sib.nodeValue; - - val = p.innerHTML.replace(/<\/?\w+[^>]*>/gi, '').replace(/ /g, '\u00a0'); - - // Detect unordered lists look for bullets - if (/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*\u00a0*/.test(val)) - type = 'ul'; - - // Detect ordered lists 1., a. or ixv. - if (/^__MCE_ITEM__\s*\w+\.\s*\u00a0+/.test(val)) - type = 'ol'; - - // Check if node value matches the list pattern: o   - if (type) { - margin = parseFloat(p.style.marginLeft || 0); - - if (margin > lastMargin) - levels.push(margin); - - if (!listElm || type != lastType) { - listElm = dom.create(type); - dom.insertAfter(listElm, p); - } else { - // Nested list element - if (margin > lastMargin) { - listElm = li.appendChild(dom.create(type)); - } else if (margin < lastMargin) { - // Find parent level based on margin value - idx = tinymce.inArray(levels, margin); - parents = dom.getParents(listElm.parentNode, type); - listElm = parents[parents.length - 1 - idx] || listElm; - } - } - - // Remove middot or number spans if they exists - each(dom.select('span', p), function(span) { - var html = span.innerHTML.replace(/<\/?\w+[^>]*>/gi, ''); - - // Remove span with the middot or the number - if (type == 'ul' && /^__MCE_ITEM__[\u2022\u00b7\u00a7\u00d8o\u25CF]/.test(html)) - dom.remove(span); - else if (/^__MCE_ITEM__[\s\S]*\w+\.( |\u00a0)*\s*/.test(html)) - dom.remove(span); - }); - - html = p.innerHTML; - - // Remove middot/list items - if (type == 'ul') - html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*( |\u00a0)+\s*/, ''); - else - html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^\s*\w+\.( |\u00a0)+\s*/, ''); - - // Create li and add paragraph data into the new li - li = listElm.appendChild(dom.create('li', 0, html)); - dom.remove(p); - - lastMargin = margin; - lastType = type; - } else - listElm = lastMargin = 0; // End list element - }); - - // Remove any left over makers - html = o.node.innerHTML; - if (html.indexOf('__MCE_ITEM__') != -1) - o.node.innerHTML = html.replace(/__MCE_ITEM__/g, ''); - }, - - /** - * Inserts the specified contents at the caret position. - */ - _insert : function(h, skip_undo) { - var ed = this.editor, r = ed.selection.getRng(); - - // First delete the contents seems to work better on WebKit when the selection spans multiple list items or multiple table cells. - if (!ed.selection.isCollapsed() && r.startContainer != r.endContainer) - ed.getDoc().execCommand('Delete', false, null); - - ed.execCommand('mceInsertContent', false, h, {skip_undo : skip_undo}); - }, - - /** - * Instead of the old plain text method which tried to re-create a paste operation, the - * new approach adds a plain text mode toggle switch that changes the behavior of paste. - * This function is passed the same input that the regular paste plugin produces. - * It performs additional scrubbing and produces (and inserts) the plain text. - * This approach leverages all of the great existing functionality in the paste - * plugin, and requires minimal changes to add the new functionality. - * Speednet - June 2009 - */ - _insertPlainText : function(content) { - var ed = this.editor, - linebr = getParam(ed, "paste_text_linebreaktype"), - rl = getParam(ed, "paste_text_replacements"), - is = tinymce.is; - - function process(items) { - each(items, function(v) { - if (v.constructor == RegExp) - content = content.replace(v, ""); - else - content = content.replace(v[0], v[1]); - }); - }; - - if ((typeof(content) === "string") && (content.length > 0)) { - // If HTML content with line-breaking tags, then remove all cr/lf chars because only tags will break a line - if (/<(?:p|br|h[1-6]|ul|ol|dl|table|t[rdh]|div|blockquote|fieldset|pre|address|center)[^>]*>/i.test(content)) { - process([ - /[\n\r]+/g - ]); - } else { - // Otherwise just get rid of carriage returns (only need linefeeds) - process([ - /\r+/g - ]); - } - - process([ - [/<\/(?:p|h[1-6]|ul|ol|dl|table|div|blockquote|fieldset|pre|address|center)>/gi, "\n\n"], // Block tags get a blank line after them - [/]*>|<\/tr>/gi, "\n"], // Single linebreak for
tags and table rows - [/<\/t[dh]>\s*]*>/gi, "\t"], // Table cells get tabs betweem them - /<[a-z!\/?][^>]*>/gi, // Delete all remaining tags - [/ /gi, " "], // Convert non-break spaces to regular spaces (remember, *plain text*) - [/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi, "$1"] // Cool little RegExp deletes whitespace around linebreak chars. - ]); - - var maxLinebreaks = Number(getParam(ed, "paste_max_consecutive_linebreaks")); - if (maxLinebreaks > -1) { - var maxLinebreaksRegex = new RegExp("\n{" + (maxLinebreaks + 1) + ",}", "g"); - var linebreakReplacement = ""; - - while (linebreakReplacement.length < maxLinebreaks) { - linebreakReplacement += "\n"; - } - - process([ - [maxLinebreaksRegex, linebreakReplacement] // Limit max consecutive linebreaks - ]); - } - - content = ed.dom.decode(tinymce.html.Entities.encodeRaw(content)); - - // Perform default or custom replacements - if (is(rl, "array")) { - process(rl); - } else if (is(rl, "string")) { - process(new RegExp(rl, "gi")); - } - - // Treat paragraphs as specified in the config - if (linebr == "none") { - // Convert all line breaks to space - process([ - [/\n+/g, " "] - ]); - } else if (linebr == "br") { - // Convert all line breaks to
- process([ - [/\n/g, "
"] - ]); - } else if (linebr == "p") { - // Convert all line breaks to

...

- process([ - [/\n+/g, "

"], - [/^(.*<\/p>)(

)$/, '

$1'] - ]); - } else { - // defaults to "combined" - // Convert single line breaks to
and double line breaks to

...

- process([ - [/\n\n/g, "

"], - [/^(.*<\/p>)(

)$/, '

$1'], - [/\n/g, "
"] - ]); - } - - ed.execCommand('mceInsertContent', false, content); - } - }, - - /** - * This method will open the old style paste dialogs. Some users might want the old behavior but still use the new cleanup engine. - */ - _legacySupport : function() { - var t = this, ed = t.editor; - - // Register command(s) for backwards compatibility - ed.addCommand("mcePasteWord", function() { - ed.windowManager.open({ - file: t.url + "/pasteword.htm", - width: parseInt(getParam(ed, "paste_dialog_width")), - height: parseInt(getParam(ed, "paste_dialog_height")), - inline: 1 - }); - }); - - if (getParam(ed, "paste_text_use_dialog")) { - ed.addCommand("mcePasteText", function() { - ed.windowManager.open({ - file : t.url + "/pastetext.htm", - width: parseInt(getParam(ed, "paste_dialog_width")), - height: parseInt(getParam(ed, "paste_dialog_height")), - inline : 1 - }); - }); - } - - // Register button for backwards compatibility - ed.addButton("pasteword", {title : "paste.paste_word_desc", cmd : "mcePasteWord"}); - } - }); - - // Register plugin - tinymce.PluginManager.add("paste", tinymce.plugins.PastePlugin); -})(); diff --git a/common/static/js/vendor/tiny_mce/plugins/paste/js/pastetext.js b/common/static/js/vendor/tiny_mce/plugins/paste/js/pastetext.js deleted file mode 100644 index 81b1d6a01e..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/paste/js/pastetext.js +++ /dev/null @@ -1,36 +0,0 @@ -tinyMCEPopup.requireLangPack(); - -var PasteTextDialog = { - init : function() { - this.resize(); - }, - - insert : function() { - var h = tinyMCEPopup.dom.encode(document.getElementById('content').value), lines; - - // Convert linebreaks into paragraphs - if (document.getElementById('linebreaks').checked) { - lines = h.split(/\r?\n/); - if (lines.length > 1) { - h = ''; - tinymce.each(lines, function(row) { - h += '

' + row + '

'; - }); - } - } - - tinyMCEPopup.editor.execCommand('mceInsertClipboardContent', false, {content : h}); - tinyMCEPopup.close(); - }, - - resize : function() { - var vp = tinyMCEPopup.dom.getViewPort(window), el; - - el = document.getElementById('content'); - - el.style.width = (vp.w - 20) + 'px'; - el.style.height = (vp.h - 90) + 'px'; - } -}; - -tinyMCEPopup.onInit.add(PasteTextDialog.init, PasteTextDialog); diff --git a/common/static/js/vendor/tiny_mce/plugins/paste/js/pasteword.js b/common/static/js/vendor/tiny_mce/plugins/paste/js/pasteword.js deleted file mode 100644 index 959bf3992d..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/paste/js/pasteword.js +++ /dev/null @@ -1,51 +0,0 @@ -tinyMCEPopup.requireLangPack(); - -var PasteWordDialog = { - init : function() { - var ed = tinyMCEPopup.editor, el = document.getElementById('iframecontainer'), ifr, doc, css, cssHTML = ''; - - // Create iframe - el.innerHTML = ''; - ifr = document.getElementById('iframe'); - doc = ifr.contentWindow.document; - - // Force absolute CSS urls - css = [ed.baseURI.toAbsolute("themes/" + ed.settings.theme + "/skins/" + ed.settings.skin + "/content.css")]; - css = css.concat(tinymce.explode(ed.settings.content_css) || []); - tinymce.each(css, function(u) { - cssHTML += ''; - }); - - // Write content into iframe - doc.open(); - doc.write('' + cssHTML + ''); - doc.close(); - - doc.designMode = 'on'; - this.resize(); - - window.setTimeout(function() { - ifr.contentWindow.focus(); - }, 10); - }, - - insert : function() { - var h = document.getElementById('iframe').contentWindow.document.body.innerHTML; - - tinyMCEPopup.editor.execCommand('mceInsertClipboardContent', false, {content : h, wordContent : true}); - tinyMCEPopup.close(); - }, - - resize : function() { - var vp = tinyMCEPopup.dom.getViewPort(window), el; - - el = document.getElementById('iframe'); - - if (el) { - el.style.width = (vp.w - 20) + 'px'; - el.style.height = (vp.h - 90) + 'px'; - } - } -}; - -tinyMCEPopup.onInit.add(PasteWordDialog.init, PasteWordDialog); diff --git a/common/static/js/vendor/tiny_mce/plugins/paste/langs/en_dlg.js b/common/static/js/vendor/tiny_mce/plugins/paste/langs/en_dlg.js deleted file mode 100644 index bc74daf85c..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/paste/langs/en_dlg.js +++ /dev/null @@ -1 +0,0 @@ -tinyMCE.addI18n('en.paste_dlg',{"word_title":"Use Ctrl+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep Linebreaks","text_title":"Use Ctrl+V on your keyboard to paste the text into the window."}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/paste/pastetext.htm b/common/static/js/vendor/tiny_mce/plugins/paste/pastetext.htm deleted file mode 100644 index 8ccfbb970f..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/paste/pastetext.htm +++ /dev/null @@ -1,27 +0,0 @@ - - - {#paste.paste_text_desc} - - - - -
-
{#paste.paste_text_desc}
- -
- -
- -
- -
{#paste_dlg.text_title}
- - - -
- - -
-
- - \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/paste/pasteword.htm b/common/static/js/vendor/tiny_mce/plugins/paste/pasteword.htm deleted file mode 100644 index 7731f39c48..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/paste/pasteword.htm +++ /dev/null @@ -1,21 +0,0 @@ - - - {#paste.paste_word_desc} - - - - -
-
{#paste.paste_word_desc}
- -
{#paste_dlg.word_title}
- -
- -
- - -
-
- - diff --git a/common/static/js/vendor/tiny_mce/plugins/paste/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/paste/plugin.min.js new file mode 100644 index 0000000000..c099330686 --- /dev/null +++ b/common/static/js/vendor/tiny_mce/plugins/paste/plugin.min.js @@ -0,0 +1 @@ +!function(e,t){"use strict";function n(e,t){for(var n,r=[],i=0;i"),t&&/^(PRE|DIV)$/.test(t.nodeName)||!o?e=n.filter(e,[[/\n/g,"
"]]):(e=n.filter(e,[[/\n\n/g,"

"+a],[/^(.*<\/p>)(

)$/,a+"$1"],[/\n/g,"
"]]),-1!=e.indexOf("

")&&(e=a+e)),i(e)}function a(){var t=r.dom,n=r.getBody(),i=r.dom.getViewPort(r.getWin()),o=i.y,a=20;if(h=r.selection.getRng(),r.inline){var s=r.selection.getScrollContainer();s&&(o=s.scrollTop)}if(h.getClientRects){var l=h.getClientRects();l.length&&(a=o+(l[0].top-t.getPos(n).y))}m=t.add(r.getBody(),"div",{id:"mcepastebin",contentEditable:!0,"data-mce-bogus":"1",style:"position: absolute; top: "+a+"px;width: 10px; height: 10px; overflow: hidden; opacity: 0"},v),(e.ie||e.gecko)&&t.setStyle(m,"left","rtl"==t.getStyle(n,"direction",!0)?65535:-65535),t.bind(m,"beforedeactivate focusin focusout",function(e){e.stopPropagation()}),m.focus(),r.selection.select(m,!0)}function s(){if(m){for(var e;e=r.dom.get("mcepastebin");)r.dom.remove(e),r.dom.unbind(e);h&&r.selection.setRng(h)}y=!1,m=h=null}function l(){var e=v,t,n;for(t=r.dom.select("div[id=mcepastebin]"),n=t.length;n--;){var i=t[n].innerHTML;e==v&&(e=""),i.length>e.length&&(e=i)}return e}function c(e){var t={};if(e&&e.types){t["text/plain"]=e.getData("Text");for(var n=0;nl?n&&(n=n.parent.parent):(r=n,n=null)),n&&n.name==a?n.append(e):(r=r||n,n=new i(a,1),s>1&&n.attr("start",""+s),e.wrap(n)),e.name="li",t.value="";var c=t.next;c&&3==c.type&&(c.value=c.value.replace(/^\u00a0+/,"")),l>o&&r&&r.lastChild.append(n),o=l}for(var n,r,o=1,a=e.getAll("p"),s=0;s/gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/ /gi,"\xa0"],[/([\s\u00a0]*)<\/span>/gi,function(e,t){return t.length>0?t.replace(/./," ").slice(Math.floor(t.length/2)).split("").join("\xa0"):""}]]);var h=l.paste_word_valid_elements;h||(h="@[style],-strong/b,-em/i,-span,-p,-ol,-ul,-li,-h1,-h2,-h3,-h4,-h5,-h6,-table,-tr,-td[colspan|rowspan],-th,-thead,-tfoot,-tbody,-a[href|name],sub,sup,strike,br");var g=new n({valid_elements:h}),v=new t({},g);v.addAttributeFilter("style",function(e){for(var t=e.length,n;t--;)n=e[t],n.attr("style",u(n,n.attr("style"))),"span"!=n.name||n.attributes.length||n.unwrap()}),v.addNodeFilter("a",function(e){for(var t=e.length,n,r,i;t--;)n=e[t],r=n.attr("href"),i=n.attr("name"),r&&0===r.indexOf("file://")&&(r=r.split("#")[1],r&&(r="#"+r)),r||i?n.attr({href:r,name:i}):n.unwrap()});var y=v.parse(f);d(y),c.content=new r({},g).serialize(y)}})}return s.isWordContent=a,s}),r(y,[p,c,h,l],function(e,t,n,r){return function(i){function o(e){i.on("BeforePastePreProcess",function(t){t.content=e(t.content)})}function a(e){return e=r.filter(e,[/^[\s\S]*|[\s\S]*$/g,[/\u00a0<\/span>/g,"\xa0"],/
$/])}function s(e){if(!n.isWordContent(e))return e;var o=[];t.each(i.schema.getBlockElements(),function(e,t){o.push(t)});var a=new RegExp("(?:
 [\\s\\r\\n]+|
)*(<\\/?("+o.join("|")+")[^>]*>)(?:
 [\\s\\r\\n]+|
)*","g");return e=r.filter(e,[[a,"$1"]]),e=r.filter(e,[[/

/g,"

"],[/
/g," "],[/

/g,"
"]])}function l(e){return(i.settings.paste_remove_styles||i.settings.paste_remove_styles_if_webkit!==!1)&&(e=e.replace(/ style=\"[^\"]+\"/g,"")),e}e.webkit&&(o(l),o(a)),e.ie&&o(s)}}),r(b,[C,f,h,y],function(e,t,n,r){var i;e.add("paste",function(e){function o(){"text"==s.pasteFormat?(this.active(!1),s.pasteFormat="html"):(s.pasteFormat="text",this.active(!0),i||(e.windowManager.alert("Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off."),i=!0))}var a=this,s,l=e.settings;a.clipboard=s=new t(e),a.quirks=new r(e),a.wordFilter=new n(e),e.settings.paste_as_text&&(a.clipboard.pasteFormat="text"),l.paste_preprocess&&e.on("PastePreProcess",function(e){l.paste_preprocess.call(a,a,e)}),l.paste_postprocess&&e.on("PastePostProcess",function(e){l.paste_postprocess.call(a,a,e)}),e.addCommand("mceInsertClipboardContent",function(e,t){t.content&&a.clipboard.pasteHtml(t.content),t.text&&a.clipboard.pasteText(t.text)}),e.paste_block_drop&&e.on("dragend dragover draggesture dragdrop drop drag",function(e){e.preventDefault(),e.stopPropagation()}),e.settings.paste_data_images||e.on("drop",function(e){var t=e.dataTransfer;t&&t.files&&t.files.length>0&&e.preventDefault()}),e.addButton("pastetext",{icon:"pastetext",tooltip:"Paste as text",onclick:o,active:"text"==a.clipboard.pasteFormat}),e.addMenuItem("pastetext",{text:"Paste as text",selectable:!0,active:s.pasteFormat,onclick:o})})}),a([l,f,h,y,b])}(this); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/preview/editor_plugin.js b/common/static/js/vendor/tiny_mce/plugins/preview/editor_plugin.js deleted file mode 100644 index 507909c5f0..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/preview/editor_plugin.js +++ /dev/null @@ -1 +0,0 @@ -(function(){tinymce.create("tinymce.plugins.Preview",{init:function(a,b){var d=this,c=tinymce.explode(a.settings.content_css);d.editor=a;tinymce.each(c,function(f,e){c[e]=a.documentBaseURI.toAbsolute(f)});a.addCommand("mcePreview",function(){a.windowManager.open({file:a.getParam("plugin_preview_pageurl",b+"/preview.html"),width:parseInt(a.getParam("plugin_preview_width","550")),height:parseInt(a.getParam("plugin_preview_height","600")),resizable:"yes",scrollbars:"yes",popup_css:c?c.join(","):a.baseURI.toAbsolute("themes/"+a.settings.theme+"/skins/"+a.settings.skin+"/content.css"),inline:a.getParam("plugin_preview_inline",1)},{base:a.documentBaseURI.getURI()})});a.addButton("preview",{title:"preview.preview_desc",cmd:"mcePreview"})},getInfo:function(){return{longname:"Preview",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/preview",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("preview",tinymce.plugins.Preview)})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/preview/editor_plugin_src.js b/common/static/js/vendor/tiny_mce/plugins/preview/editor_plugin_src.js deleted file mode 100644 index 80f00f0d9f..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/preview/editor_plugin_src.js +++ /dev/null @@ -1,53 +0,0 @@ -/** - * editor_plugin_src.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -(function() { - tinymce.create('tinymce.plugins.Preview', { - init : function(ed, url) { - var t = this, css = tinymce.explode(ed.settings.content_css); - - t.editor = ed; - - // Force absolute CSS urls - tinymce.each(css, function(u, k) { - css[k] = ed.documentBaseURI.toAbsolute(u); - }); - - ed.addCommand('mcePreview', function() { - ed.windowManager.open({ - file : ed.getParam("plugin_preview_pageurl", url + "/preview.html"), - width : parseInt(ed.getParam("plugin_preview_width", "550")), - height : parseInt(ed.getParam("plugin_preview_height", "600")), - resizable : "yes", - scrollbars : "yes", - popup_css : css ? css.join(',') : ed.baseURI.toAbsolute("themes/" + ed.settings.theme + "/skins/" + ed.settings.skin + "/content.css"), - inline : ed.getParam("plugin_preview_inline", 1) - }, { - base : ed.documentBaseURI.getURI() - }); - }); - - ed.addButton('preview', {title : 'preview.preview_desc', cmd : 'mcePreview'}); - }, - - getInfo : function() { - return { - longname : 'Preview', - author : 'Moxiecode Systems AB', - authorurl : 'http://tinymce.moxiecode.com', - infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/preview', - version : tinymce.majorVersion + "." + tinymce.minorVersion - }; - } - }); - - // Register plugin - tinymce.PluginManager.add('preview', tinymce.plugins.Preview); -})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/preview/example.html b/common/static/js/vendor/tiny_mce/plugins/preview/example.html deleted file mode 100644 index 48202224dd..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/preview/example.html +++ /dev/null @@ -1,28 +0,0 @@ - - - - - -Example of a custom preview page - - - -Editor contents:
-

- -
- - - diff --git a/common/static/js/vendor/tiny_mce/plugins/preview/jscripts/embed.js b/common/static/js/vendor/tiny_mce/plugins/preview/jscripts/embed.js deleted file mode 100644 index 6fe25de090..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/preview/jscripts/embed.js +++ /dev/null @@ -1,73 +0,0 @@ -/** - * This script contains embed functions for common plugins. This scripts are complety free to use for any purpose. - */ - -function writeFlash(p) { - writeEmbed( - 'D27CDB6E-AE6D-11cf-96B8-444553540000', - 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0', - 'application/x-shockwave-flash', - p - ); -} - -function writeShockWave(p) { - writeEmbed( - '166B1BCA-3F9C-11CF-8075-444553540000', - 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0', - 'application/x-director', - p - ); -} - -function writeQuickTime(p) { - writeEmbed( - '02BF25D5-8C17-4B23-BC80-D3488ABDDC6B', - 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0', - 'video/quicktime', - p - ); -} - -function writeRealMedia(p) { - writeEmbed( - 'CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA', - 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0', - 'audio/x-pn-realaudio-plugin', - p - ); -} - -function writeWindowsMedia(p) { - p.url = p.src; - writeEmbed( - '6BF52A52-394A-11D3-B153-00C04F79FAA6', - 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701', - 'application/x-mplayer2', - p - ); -} - -function writeEmbed(cls, cb, mt, p) { - var h = '', n; - - h += ''; - - h += '',buttons:{text:"Close",onclick:function(){this.parent().parent().close()}},onPostRender:function(){var i,n=this.getEl("body").firstChild.contentWindow.document,a="";tinymce.each(e.contentCSS,function(t){a+=''});var d=t.body_id||"tinymce";-1!=d.indexOf("=")&&(d=e.getParam("body_id","","hash"),d=d[e.id]||d);var r=t.body_class||"";-1!=r.indexOf("=")&&(r=e.getParam("body_class","","hash"),r=r[e.id]||""),i=""+a+""+''+e.getContent()+""+"",n.open(),n.write(i),n.close()}})}),e.addButton("preview",{title:"Preview",cmd:"mcePreview"}),e.addMenuItem("preview",{text:"Preview",cmd:"mcePreview",context:"view"})}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/preview/preview.html b/common/static/js/vendor/tiny_mce/plugins/preview/preview.html deleted file mode 100644 index c09a7f059d..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/preview/preview.html +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - -{#preview.preview_desc} - - - - - diff --git a/common/static/js/vendor/tiny_mce/plugins/print/editor_plugin.js b/common/static/js/vendor/tiny_mce/plugins/print/editor_plugin.js deleted file mode 100644 index b5b3a55edf..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/print/editor_plugin.js +++ /dev/null @@ -1 +0,0 @@ -(function(){tinymce.create("tinymce.plugins.Print",{init:function(a,b){a.addCommand("mcePrint",function(){a.getWin().print()});a.addButton("print",{title:"print.print_desc",cmd:"mcePrint"})},getInfo:function(){return{longname:"Print",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/print",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("print",tinymce.plugins.Print)})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/print/editor_plugin_src.js b/common/static/js/vendor/tiny_mce/plugins/print/editor_plugin_src.js deleted file mode 100644 index 47e666a300..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/print/editor_plugin_src.js +++ /dev/null @@ -1,34 +0,0 @@ -/** - * editor_plugin_src.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -(function() { - tinymce.create('tinymce.plugins.Print', { - init : function(ed, url) { - ed.addCommand('mcePrint', function() { - ed.getWin().print(); - }); - - ed.addButton('print', {title : 'print.print_desc', cmd : 'mcePrint'}); - }, - - getInfo : function() { - return { - longname : 'Print', - author : 'Moxiecode Systems AB', - authorurl : 'http://tinymce.moxiecode.com', - infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/print', - version : tinymce.majorVersion + "." + tinymce.minorVersion - }; - } - }); - - // Register plugin - tinymce.PluginManager.add('print', tinymce.plugins.Print); -})(); diff --git a/common/static/js/vendor/tiny_mce/plugins/print/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/print/plugin.min.js new file mode 100644 index 0000000000..abc37b5fd4 --- /dev/null +++ b/common/static/js/vendor/tiny_mce/plugins/print/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("print",function(t){t.addCommand("mcePrint",function(){t.getWin().print()}),t.addButton("print",{title:"Print",cmd:"mcePrint"}),t.addShortcut("Ctrl+P","","mcePrint"),t.addMenuItem("print",{text:"Print",cmd:"mcePrint",icon:"print",shortcut:"Ctrl+P",context:"file"})}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/save/editor_plugin.js b/common/static/js/vendor/tiny_mce/plugins/save/editor_plugin.js deleted file mode 100644 index 8e93996671..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/save/editor_plugin.js +++ /dev/null @@ -1 +0,0 @@ -(function(){tinymce.create("tinymce.plugins.Save",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceSave",c._save,c);a.addCommand("mceCancel",c._cancel,c);a.addButton("save",{title:"save.save_desc",cmd:"mceSave"});a.addButton("cancel",{title:"save.cancel_desc",cmd:"mceCancel"});a.onNodeChange.add(c._nodeChange,c);a.addShortcut("ctrl+s",a.getLang("save.save_desc"),"mceSave")},getInfo:function(){return{longname:"Save",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/save",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_nodeChange:function(b,a,c){var b=this.editor;if(b.getParam("save_enablewhendirty")){a.setDisabled("save",!b.isDirty());a.setDisabled("cancel",!b.isDirty())}},_save:function(){var c=this.editor,a,e,d,b;a=tinymce.DOM.get(c.id).form||tinymce.DOM.getParent(c.id,"form");if(c.getParam("save_enablewhendirty")&&!c.isDirty()){return}tinyMCE.triggerSave();if(e=c.getParam("save_onsavecallback")){if(c.execCallback("save_onsavecallback",c)){c.startContent=tinymce.trim(c.getContent({format:"raw"}));c.nodeChanged()}return}if(a){c.isNotDirty=true;if(a.onsubmit==null||a.onsubmit()!=false){a.submit()}c.nodeChanged()}else{c.windowManager.alert("Error: No form element found.")}},_cancel:function(){var a=this.editor,c,b=tinymce.trim(a.startContent);if(c=a.getParam("save_oncancelcallback")){a.execCallback("save_oncancelcallback",a);return}a.setContent(b);a.undoManager.clear();a.nodeChanged()}});tinymce.PluginManager.add("save",tinymce.plugins.Save)})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/save/editor_plugin_src.js b/common/static/js/vendor/tiny_mce/plugins/save/editor_plugin_src.js deleted file mode 100644 index 5ab6491c83..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/save/editor_plugin_src.js +++ /dev/null @@ -1,101 +0,0 @@ -/** - * editor_plugin_src.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -(function() { - tinymce.create('tinymce.plugins.Save', { - init : function(ed, url) { - var t = this; - - t.editor = ed; - - // Register commands - ed.addCommand('mceSave', t._save, t); - ed.addCommand('mceCancel', t._cancel, t); - - // Register buttons - ed.addButton('save', {title : 'save.save_desc', cmd : 'mceSave'}); - ed.addButton('cancel', {title : 'save.cancel_desc', cmd : 'mceCancel'}); - - ed.onNodeChange.add(t._nodeChange, t); - ed.addShortcut('ctrl+s', ed.getLang('save.save_desc'), 'mceSave'); - }, - - getInfo : function() { - return { - longname : 'Save', - author : 'Moxiecode Systems AB', - authorurl : 'http://tinymce.moxiecode.com', - infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/save', - version : tinymce.majorVersion + "." + tinymce.minorVersion - }; - }, - - // Private methods - - _nodeChange : function(ed, cm, n) { - var ed = this.editor; - - if (ed.getParam('save_enablewhendirty')) { - cm.setDisabled('save', !ed.isDirty()); - cm.setDisabled('cancel', !ed.isDirty()); - } - }, - - // Private methods - - _save : function() { - var ed = this.editor, formObj, os, i, elementId; - - formObj = tinymce.DOM.get(ed.id).form || tinymce.DOM.getParent(ed.id, 'form'); - - if (ed.getParam("save_enablewhendirty") && !ed.isDirty()) - return; - - tinyMCE.triggerSave(); - - // Use callback instead - if (os = ed.getParam("save_onsavecallback")) { - if (ed.execCallback('save_onsavecallback', ed)) { - ed.startContent = tinymce.trim(ed.getContent({format : 'raw'})); - ed.nodeChanged(); - } - - return; - } - - if (formObj) { - ed.isNotDirty = true; - - if (formObj.onsubmit == null || formObj.onsubmit() != false) - formObj.submit(); - - ed.nodeChanged(); - } else - ed.windowManager.alert("Error: No form element found."); - }, - - _cancel : function() { - var ed = this.editor, os, h = tinymce.trim(ed.startContent); - - // Use callback instead - if (os = ed.getParam("save_oncancelcallback")) { - ed.execCallback('save_oncancelcallback', ed); - return; - } - - ed.setContent(h); - ed.undoManager.clear(); - ed.nodeChanged(); - } - }); - - // Register plugin - tinymce.PluginManager.add('save', tinymce.plugins.Save); -})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/save/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/save/plugin.min.js new file mode 100644 index 0000000000..bd50cec41e --- /dev/null +++ b/common/static/js/vendor/tiny_mce/plugins/save/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("save",function(e){function t(){var t,n;return t=tinymce.DOM.getParent(e.id,"form"),!e.getParam("save_enablewhendirty",!0)||e.isDirty()?(tinymce.triggerSave(),(n=e.getParam("save_onsavecallback"))?(e.execCallback("save_onsavecallback",e)&&(e.startContent=tinymce.trim(e.getContent({format:"raw"})),e.nodeChanged()),void 0):(t?(e.isNotDirty=!0,(!t.onsubmit||t.onsubmit())&&("function"==typeof t.submit?t.submit():e.windowManager.alert("Error: Form submit field collision.")),e.nodeChanged()):e.windowManager.alert("Error: No form element found."),void 0)):void 0}function n(){var t,n=tinymce.trim(e.startContent);return(t=e.getParam("save_oncancelcallback"))?(e.execCallback("save_oncancelcallback",e),void 0):(e.setContent(n),e.undoManager.clear(),e.nodeChanged(),void 0)}function i(){var t=this;e.on("nodeChange",function(){t.disabled(e.getParam("save_enablewhendirty",!0)&&!e.isDirty())})}e.addCommand("mceSave",t),e.addCommand("mceCancel",n),e.addButton("save",{icon:"save",text:"Save",cmd:"mceSave",disabled:!0,onPostRender:i}),e.addButton("cancel",{text:"Cancel",icon:!1,cmd:"mceCancel",disabled:!0,onPostRender:i}),e.addShortcut("ctrl+s","","mceSave")}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/searchreplace/css/searchreplace.css b/common/static/js/vendor/tiny_mce/plugins/searchreplace/css/searchreplace.css deleted file mode 100644 index 3e2eaf34b3..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/searchreplace/css/searchreplace.css +++ /dev/null @@ -1,6 +0,0 @@ -.panel_wrapper {height:85px;} -.panel_wrapper div.current {height:85px;} - -/* IE */ -* html .panel_wrapper {height:100px;} -* html .panel_wrapper div.current {height:100px;} diff --git a/common/static/js/vendor/tiny_mce/plugins/searchreplace/editor_plugin.js b/common/static/js/vendor/tiny_mce/plugins/searchreplace/editor_plugin.js deleted file mode 100644 index 165bc12df5..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/searchreplace/editor_plugin.js +++ /dev/null @@ -1 +0,0 @@ -(function(){tinymce.create("tinymce.plugins.SearchReplacePlugin",{init:function(a,c){function b(d){window.focus();a.windowManager.open({file:c+"/searchreplace.htm",width:420+parseInt(a.getLang("searchreplace.delta_width",0)),height:170+parseInt(a.getLang("searchreplace.delta_height",0)),inline:1,auto_focus:0},{mode:d,search_string:a.selection.getContent({format:"text"}),plugin_url:c})}a.addCommand("mceSearch",function(){b("search")});a.addCommand("mceReplace",function(){b("replace")});a.addButton("search",{title:"searchreplace.search_desc",cmd:"mceSearch"});a.addButton("replace",{title:"searchreplace.replace_desc",cmd:"mceReplace"});a.addShortcut("ctrl+f","searchreplace.search_desc","mceSearch")},getInfo:function(){return{longname:"Search/Replace",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/searchreplace",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("searchreplace",tinymce.plugins.SearchReplacePlugin)})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/searchreplace/editor_plugin_src.js b/common/static/js/vendor/tiny_mce/plugins/searchreplace/editor_plugin_src.js deleted file mode 100644 index b0c013fdf8..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/searchreplace/editor_plugin_src.js +++ /dev/null @@ -1,61 +0,0 @@ -/** - * editor_plugin_src.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -(function() { - tinymce.create('tinymce.plugins.SearchReplacePlugin', { - init : function(ed, url) { - function open(m) { - // Keep IE from writing out the f/r character to the editor - // instance while initializing a new dialog. See: #3131190 - window.focus(); - - ed.windowManager.open({ - file : url + '/searchreplace.htm', - width : 420 + parseInt(ed.getLang('searchreplace.delta_width', 0)), - height : 170 + parseInt(ed.getLang('searchreplace.delta_height', 0)), - inline : 1, - auto_focus : 0 - }, { - mode : m, - search_string : ed.selection.getContent({format : 'text'}), - plugin_url : url - }); - }; - - // Register commands - ed.addCommand('mceSearch', function() { - open('search'); - }); - - ed.addCommand('mceReplace', function() { - open('replace'); - }); - - // Register buttons - ed.addButton('search', {title : 'searchreplace.search_desc', cmd : 'mceSearch'}); - ed.addButton('replace', {title : 'searchreplace.replace_desc', cmd : 'mceReplace'}); - - ed.addShortcut('ctrl+f', 'searchreplace.search_desc', 'mceSearch'); - }, - - getInfo : function() { - return { - longname : 'Search/Replace', - author : 'Moxiecode Systems AB', - authorurl : 'http://tinymce.moxiecode.com', - infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/searchreplace', - version : tinymce.majorVersion + "." + tinymce.minorVersion - }; - } - }); - - // Register plugin - tinymce.PluginManager.add('searchreplace', tinymce.plugins.SearchReplacePlugin); -})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/searchreplace/js/searchreplace.js b/common/static/js/vendor/tiny_mce/plugins/searchreplace/js/searchreplace.js deleted file mode 100644 index b1630ca892..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/searchreplace/js/searchreplace.js +++ /dev/null @@ -1,142 +0,0 @@ -tinyMCEPopup.requireLangPack(); - -var SearchReplaceDialog = { - init : function(ed) { - var t = this, f = document.forms[0], m = tinyMCEPopup.getWindowArg("mode"); - - t.switchMode(m); - - f[m + '_panel_searchstring'].value = tinyMCEPopup.getWindowArg("search_string"); - - // Focus input field - f[m + '_panel_searchstring'].focus(); - - mcTabs.onChange.add(function(tab_id, panel_id) { - t.switchMode(tab_id.substring(0, tab_id.indexOf('_'))); - }); - }, - - switchMode : function(m) { - var f, lm = this.lastMode; - - if (lm != m) { - f = document.forms[0]; - - if (lm) { - f[m + '_panel_searchstring'].value = f[lm + '_panel_searchstring'].value; - f[m + '_panel_backwardsu'].checked = f[lm + '_panel_backwardsu'].checked; - f[m + '_panel_backwardsd'].checked = f[lm + '_panel_backwardsd'].checked; - f[m + '_panel_casesensitivebox'].checked = f[lm + '_panel_casesensitivebox'].checked; - } - - mcTabs.displayTab(m + '_tab', m + '_panel'); - document.getElementById("replaceBtn").style.display = (m == "replace") ? "inline" : "none"; - document.getElementById("replaceAllBtn").style.display = (m == "replace") ? "inline" : "none"; - this.lastMode = m; - } - }, - - searchNext : function(a) { - var ed = tinyMCEPopup.editor, se = ed.selection, r = se.getRng(), f, m = this.lastMode, s, b, fl = 0, w = ed.getWin(), wm = ed.windowManager, fo = 0; - - // Get input - f = document.forms[0]; - s = f[m + '_panel_searchstring'].value; - b = f[m + '_panel_backwardsu'].checked; - ca = f[m + '_panel_casesensitivebox'].checked; - rs = f['replace_panel_replacestring'].value; - - if (tinymce.isIE) { - r = ed.getDoc().selection.createRange(); - } - - if (s == '') - return; - - function fix() { - // Correct Firefox graphics glitches - // TODO: Verify if this is actually needed any more, maybe it was for very old FF versions? - r = se.getRng().cloneRange(); - ed.getDoc().execCommand('SelectAll', false, null); - se.setRng(r); - }; - - function replace() { - ed.selection.setContent(rs); // Needs to be duplicated due to selection bug in IE - }; - - // IE flags - if (ca) - fl = fl | 4; - - switch (a) { - case 'all': - // Move caret to beginning of text - ed.execCommand('SelectAll'); - ed.selection.collapse(true); - - if (tinymce.isIE) { - ed.focus(); - r = ed.getDoc().selection.createRange(); - - while (r.findText(s, b ? -1 : 1, fl)) { - r.scrollIntoView(); - r.select(); - replace(); - fo = 1; - - if (b) { - r.moveEnd("character", -(rs.length)); // Otherwise will loop forever - } - } - - tinyMCEPopup.storeSelection(); - } else { - while (w.find(s, ca, b, false, false, false, false)) { - replace(); - fo = 1; - } - } - - if (fo) - tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.allreplaced')); - else - tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound')); - - return; - - case 'current': - if (!ed.selection.isCollapsed()) - replace(); - - break; - } - - se.collapse(b); - r = se.getRng(); - - // Whats the point - if (!s) - return; - - if (tinymce.isIE) { - ed.focus(); - r = ed.getDoc().selection.createRange(); - - if (r.findText(s, b ? -1 : 1, fl)) { - r.scrollIntoView(); - r.select(); - } else - tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound')); - - tinyMCEPopup.storeSelection(); - } else { - if (!w.find(s, ca, b, false, false, false, false)) - tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound')); - else - fix(); - } - } -}; - -tinyMCEPopup.onInit.add(SearchReplaceDialog.init, SearchReplaceDialog); diff --git a/common/static/js/vendor/tiny_mce/plugins/searchreplace/langs/en_dlg.js b/common/static/js/vendor/tiny_mce/plugins/searchreplace/langs/en_dlg.js deleted file mode 100644 index 8a65900977..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/searchreplace/langs/en_dlg.js +++ /dev/null @@ -1 +0,0 @@ -tinyMCE.addI18n('en.searchreplace_dlg',{findwhat:"Find What",replacewith:"Replace with",direction:"Direction",up:"Up",down:"Down",mcase:"Match Case",findnext:"Find Next",allreplaced:"All occurrences of the search string were replaced.","searchnext_desc":"Find Again",notfound:"The search has been completed. The search string could not be found.","search_title":"Find","replace_title":"Find/Replace",replaceall:"Replace All",replace:"Replace"}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/searchreplace/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/searchreplace/plugin.min.js new file mode 100644 index 0000000000..7ffaf4610f --- /dev/null +++ b/common/static/js/vendor/tiny_mce/plugins/searchreplace/plugin.min.js @@ -0,0 +1 @@ +!function(){function e(e,t,n,a,r){function i(e,t){if(t=t||0,!e[0])throw"findAndReplaceDOMText cannot handle zero-length matches";var n=e.index;if(t>0){var a=e[t];if(!a)throw"Invalid capture group";n+=e[0].indexOf(a),e[0]=a}return[n,n+e[0].length,[e[0]]]}function d(e){var t;if(3===e.nodeType)return e.data;if(h[e.nodeName]&&!u[e.nodeName])return"";if(t="",(u[e.nodeName]||m[e.nodeName])&&(t+="\n"),e=e.firstChild)do t+=d(e);while(e=e.nextSibling);return t}function o(e,t,n){var a,r,i,d,o=[],l=0,c=e,s=t.shift(),f=0;e:for(;;){if((u[c.nodeName]||m[c.nodeName])&&l++,3===c.nodeType&&(!r&&c.length+l>=s[1]?(r=c,d=s[1]-l):a&&o.push(c),!a&&c.length+l>s[0]&&(a=c,i=s[0]-l),l+=c.length),a&&r){if(c=n({startNode:a,startNodeIndex:i,endNode:r,endNodeIndex:d,innerNodes:o,match:s[2],matchIndex:f}),l-=r.length-d,a=null,r=null,o=[],s=t.shift(),f++,!s)break}else{if((!h[c.nodeName]||u[c.nodeName])&&c.firstChild){c=c.firstChild;continue}if(c.nextSibling){c=c.nextSibling;continue}}for(;;){if(c.nextSibling){c=c.nextSibling;break}if(c.parentNode===e)break e;c=c.parentNode}}}function l(e){var t;if("function"!=typeof e){var n=e.nodeType?e:f.createElement(e);t=function(e,t){var a=n.cloneNode(!1);return a.setAttribute("data-mce-index",t),e&&a.appendChild(f.createTextNode(e)),a}}else t=e;return function(e){var n,a,r,i=e.startNode,d=e.endNode,o=e.matchIndex;if(i===d){var l=i;r=l.parentNode,e.startNodeIndex>0&&(n=f.createTextNode(l.data.substring(0,e.startNodeIndex)),r.insertBefore(n,l));var c=t(e.match[0],o);return r.insertBefore(c,l),e.endNodeIndexh;++h){var g=e.innerNodes[h],p=t(g.data,o);g.parentNode.replaceChild(p,g),u.push(p)}var x=t(d.data.substring(0,e.endNodeIndex),o);return r=i.parentNode,r.insertBefore(n,i),r.insertBefore(s,i),r.removeChild(i),r=d.parentNode,r.insertBefore(x,d),r.insertBefore(a,d),r.removeChild(d),x}}var c,s,f,u,h,m,g=[],p=0;if(f=t.ownerDocument,u=r.getBlockElements(),h=r.getWhiteSpaceElements(),m=r.getShortEndedElements(),s=d(t)){if(e.global)for(;c=e.exec(s);)g.push(i(c,a));else c=s.match(e),g.push(i(c,a));return g.length&&(p=g.length,o(t,g,l(n))),p}}function t(t){function n(){function e(){r.statusbar.find("#next").disabled(!d(s+1).length),r.statusbar.find("#prev").disabled(!d(s-1).length)}function n(){tinymce.ui.MessageBox.alert("Could not find the specified string.",function(){r.find("#find")[0].focus()})}var a={},r=tinymce.ui.Factory.create({type:"window",layout:"flex",pack:"center",align:"center",onClose:function(){t.focus(),c.done()},onSubmit:function(t){var i,o,l,f;return t.preventDefault(),o=r.find("#case").checked(),f=r.find("#words").checked(),l=r.find("#find").value(),l.length?a.text==l&&a.caseState==o&&a.wholeWord==f?0===d(s+1).length?(n(),void 0):(c.next(),e(),void 0):(i=c.find(l,o,f),i||n(),r.statusbar.items().slice(1).disabled(0===i),e(),a={text:l,caseState:o,wholeWord:f},void 0):(c.done(!1),r.statusbar.items().slice(1).disabled(!0),void 0)},buttons:[{text:"Find",onclick:function(){r.submit()}},{text:"Replace",disabled:!0,onclick:function(){c.replace(r.find("#replace").value())||(r.statusbar.items().slice(1).disabled(!0),s=-1,a={})}},{text:"Replace all",disabled:!0,onclick:function(){c.replace(r.find("#replace").value(),!0,!0),r.statusbar.items().slice(1).disabled(!0),a={}}},{type:"spacer",flex:1},{text:"Prev",name:"prev",disabled:!0,onclick:function(){c.prev(),e()}},{text:"Next",name:"next",disabled:!0,onclick:function(){c.next(),e()}}],title:"Find and replace",items:{type:"form",padding:20,labelGap:30,spacing:10,items:[{type:"textbox",name:"find",size:40,label:"Find",value:t.selection.getNode().src},{type:"textbox",name:"replace",size:40,label:"Replace with"},{type:"checkbox",name:"case",text:"Match case",label:" "},{type:"checkbox",name:"words",text:"Whole words",label:" "}]}}).renderTo().reflow()}function a(e){var t=e.getAttribute("data-mce-index");return"number"==typeof t?""+t:t}function r(n){var a,r;return r=t.dom.create("span",{"data-mce-bogus":1}),r.className="mce-match-marker",a=t.getBody(),c.done(!1),e(n,a,r,!1,t.schema)}function i(e){var t=e.parentNode;t.insertBefore(e.firstChild,e),e.parentNode.removeChild(e)}function d(e){var n,r=[];if(n=tinymce.toArray(t.getBody().getElementsByTagName("span")),n.length)for(var i=0;is&&f[o].setAttribute("data-mce-index",m-1)}return t.undoManager.add(),s=p,n?(g=d(p+1).length>0,c.next()):(g=d(p-1).length>0,c.prev()),!r&&g},c.done=function(e){var n,r,d,o;for(r=tinymce.toArray(t.getBody().getElementsByTagName("span")),n=0;n - - - {#searchreplace_dlg.replace_title} - - - - - - - - -
- - -
-
- - - - - - - - - - - -
- - - - - - - - - -
- - - - - -
-
-
- -
- - - - - - - - - - - - - - - -
- - - - - - - - - -
- - - - - -
-
-
- -
- -
- - - - -
-
- - diff --git a/common/static/js/vendor/tiny_mce/plugins/spellchecker/css/content.css b/common/static/js/vendor/tiny_mce/plugins/spellchecker/css/content.css deleted file mode 100644 index 656ce1eee6..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/spellchecker/css/content.css +++ /dev/null @@ -1 +0,0 @@ -.mceItemHiddenSpellWord {background:url(../img/wline.gif) repeat-x bottom left; cursor:default;} diff --git a/common/static/js/vendor/tiny_mce/plugins/spellchecker/editor_plugin.js b/common/static/js/vendor/tiny_mce/plugins/spellchecker/editor_plugin.js deleted file mode 100644 index 48549c9239..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/spellchecker/editor_plugin.js +++ /dev/null @@ -1 +0,0 @@ -(function(){var a=tinymce.util.JSONRequest,c=tinymce.each,b=tinymce.DOM;tinymce.create("tinymce.plugins.SpellcheckerPlugin",{getInfo:function(){return{longname:"Spellchecker",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/spellchecker",version:tinymce.majorVersion+"."+tinymce.minorVersion}},init:function(e,f){var g=this,d;g.url=f;g.editor=e;g.rpcUrl=e.getParam("spellchecker_rpc_url","{backend}");if(g.rpcUrl=="{backend}"){if(tinymce.isIE){return}g.hasSupport=true;e.onContextMenu.addToTop(function(h,i){if(g.active){return false}})}e.addCommand("mceSpellCheck",function(){if(g.rpcUrl=="{backend}"){g.editor.getBody().spellcheck=g.active=!g.active;return}if(!g.active){e.setProgressState(1);g._sendRPC("checkWords",[g.selectedLang,g._getWords()],function(h){if(h.length>0){g.active=1;g._markWords(h);e.setProgressState(0);e.nodeChanged()}else{e.setProgressState(0);if(e.getParam("spellchecker_report_no_misspellings",true)){e.windowManager.alert("spellchecker.no_mpell")}}})}else{g._done()}});if(e.settings.content_css!==false){e.contentCSS.push(f+"/css/content.css")}e.onClick.add(g._showMenu,g);e.onContextMenu.add(g._showMenu,g);e.onBeforeGetContent.add(function(){if(g.active){g._removeWords()}});e.onNodeChange.add(function(i,h){h.setActive("spellchecker",g.active)});e.onSetContent.add(function(){g._done()});e.onBeforeGetContent.add(function(){g._done()});e.onBeforeExecCommand.add(function(h,i){if(i=="mceFullScreen"){g._done()}});g.languages={};c(e.getParam("spellchecker_languages","+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv","hash"),function(i,h){if(h.indexOf("+")===0){h=h.substring(1);g.selectedLang=i}g.languages[h]=i})},createControl:function(h,d){var f=this,g,e=f.editor;if(h=="spellchecker"){if(f.rpcUrl=="{backend}"){if(f.hasSupport){g=d.createButton(h,{title:"spellchecker.desc",cmd:"mceSpellCheck",scope:f})}return g}g=d.createSplitButton(h,{title:"spellchecker.desc",cmd:"mceSpellCheck",scope:f});g.onRenderMenu.add(function(j,i){i.add({title:"spellchecker.langs","class":"mceMenuItemTitle"}).setDisabled(1);c(f.languages,function(n,m){var p={icon:1},l;p.onclick=function(){if(n==f.selectedLang){return}l.setSelected(1);f.selectedItem.setSelected(0);f.selectedItem=l;f.selectedLang=n};p.title=m;l=i.add(p);l.setSelected(n==f.selectedLang);if(n==f.selectedLang){f.selectedItem=l}})});return g}},_walk:function(i,g){var h=this.editor.getDoc(),e;if(h.createTreeWalker){e=h.createTreeWalker(i,NodeFilter.SHOW_TEXT,null,false);while((i=e.nextNode())!=null){g.call(this,i)}}else{tinymce.walk(i,g,"childNodes")}},_getSeparators:function(){var e="",d,f=this.editor.getParam("spellchecker_word_separator_chars",'\\s!"#$%&()*+,-./:;<=>?@[]^_{|}§©«®±¶·¸»¼½¾¿×÷¤\u201d\u201c');for(d=0;d$2");while((s=p.indexOf(""))!=-1){o=p.substring(0,s);if(o.length){r=j.createTextNode(g.decode(o));q.appendChild(r)}p=p.substring(s+10);s=p.indexOf("");o=p.substring(0,s);p=p.substring(s+11);q.appendChild(g.create("span",{"class":"mceItemHiddenSpellWord"},o))}if(p.length){r=j.createTextNode(g.decode(p));q.appendChild(r)}}else{q.innerHTML=p.replace(f,'$1$2')}g.replace(q,t)}});i.setRng(d)},_showMenu:function(h,j){var i=this,h=i.editor,d=i._menu,l,k=h.dom,g=k.getViewPort(h.getWin()),f=j.target;j=0;if(!d){d=h.controlManager.createDropMenu("spellcheckermenu",{"class":"mceNoIcons"});i._menu=d}if(k.hasClass(f,"mceItemHiddenSpellWord")){d.removeAll();d.add({title:"spellchecker.wait","class":"mceMenuItemTitle"}).setDisabled(1);i._sendRPC("getSuggestions",[i.selectedLang,k.decode(f.innerHTML)],function(m){var e;d.removeAll();if(m.length>0){d.add({title:"spellchecker.sug","class":"mceMenuItemTitle"}).setDisabled(1);c(m,function(n){d.add({title:n,onclick:function(){k.replace(h.getDoc().createTextNode(n),f);i._checkDone()}})});d.addSeparator()}else{d.add({title:"spellchecker.no_sug","class":"mceMenuItemTitle"}).setDisabled(1)}if(h.getParam("show_ignore_words",true)){e=i.editor.getParam("spellchecker_enable_ignore_rpc","");d.add({title:"spellchecker.ignore_word",onclick:function(){var n=f.innerHTML;k.remove(f,1);i._checkDone();if(e){h.setProgressState(1);i._sendRPC("ignoreWord",[i.selectedLang,n],function(o){h.setProgressState(0)})}}});d.add({title:"spellchecker.ignore_words",onclick:function(){var n=f.innerHTML;i._removeWords(k.decode(n));i._checkDone();if(e){h.setProgressState(1);i._sendRPC("ignoreWords",[i.selectedLang,n],function(o){h.setProgressState(0)})}}})}if(i.editor.getParam("spellchecker_enable_learn_rpc")){d.add({title:"spellchecker.learn_word",onclick:function(){var n=f.innerHTML;k.remove(f,1);i._checkDone();h.setProgressState(1);i._sendRPC("learnWord",[i.selectedLang,n],function(o){h.setProgressState(0)})}})}d.update()});l=b.getPos(h.getContentAreaContainer());d.settings.offset_x=l.x;d.settings.offset_y=l.y;h.selection.select(f);l=k.getPos(f);d.showMenu(l.x,l.y+f.offsetHeight-g.y);return tinymce.dom.Event.cancel(j)}else{d.hideMenu()}},_checkDone:function(){var e=this,d=e.editor,g=d.dom,f;c(g.select("span"),function(h){if(h&&g.hasClass(h,"mceItemHiddenSpellWord")){f=true;return false}});if(!f){e._done()}},_done:function(){var d=this,e=d.active;if(d.active){d.active=0;d._removeWords();if(d._menu){d._menu.hideMenu()}if(e){d.editor.nodeChanged()}}},_sendRPC:function(e,g,d){var f=this;a.sendRPC({url:f.rpcUrl,method:e,params:g,success:d,error:function(i,h){f.editor.setProgressState(0);f.editor.windowManager.alert(i.errstr||("Error response: "+h.responseText))}})}});tinymce.PluginManager.add("spellchecker",tinymce.plugins.SpellcheckerPlugin)})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/spellchecker/editor_plugin_src.js b/common/static/js/vendor/tiny_mce/plugins/spellchecker/editor_plugin_src.js deleted file mode 100644 index 925d2f21a6..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/spellchecker/editor_plugin_src.js +++ /dev/null @@ -1,436 +0,0 @@ -/** - * editor_plugin_src.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -(function() { - var JSONRequest = tinymce.util.JSONRequest, each = tinymce.each, DOM = tinymce.DOM; - - tinymce.create('tinymce.plugins.SpellcheckerPlugin', { - getInfo : function() { - return { - longname : 'Spellchecker', - author : 'Moxiecode Systems AB', - authorurl : 'http://tinymce.moxiecode.com', - infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/spellchecker', - version : tinymce.majorVersion + "." + tinymce.minorVersion - }; - }, - - init : function(ed, url) { - var t = this, cm; - - t.url = url; - t.editor = ed; - t.rpcUrl = ed.getParam("spellchecker_rpc_url", "{backend}"); - - if (t.rpcUrl == '{backend}') { - // Sniff if the browser supports native spellchecking (Don't know of a better way) - if (tinymce.isIE) - return; - - t.hasSupport = true; - - // Disable the context menu when spellchecking is active - ed.onContextMenu.addToTop(function(ed, e) { - if (t.active) - return false; - }); - } - - // Register commands - ed.addCommand('mceSpellCheck', function() { - if (t.rpcUrl == '{backend}') { - // Enable/disable native spellchecker - t.editor.getBody().spellcheck = t.active = !t.active; - return; - } - - if (!t.active) { - ed.setProgressState(1); - t._sendRPC('checkWords', [t.selectedLang, t._getWords()], function(r) { - if (r.length > 0) { - t.active = 1; - t._markWords(r); - ed.setProgressState(0); - ed.nodeChanged(); - } else { - ed.setProgressState(0); - - if (ed.getParam('spellchecker_report_no_misspellings', true)) - ed.windowManager.alert('spellchecker.no_mpell'); - } - }); - } else - t._done(); - }); - - if (ed.settings.content_css !== false) - ed.contentCSS.push(url + '/css/content.css'); - - ed.onClick.add(t._showMenu, t); - ed.onContextMenu.add(t._showMenu, t); - ed.onBeforeGetContent.add(function() { - if (t.active) - t._removeWords(); - }); - - ed.onNodeChange.add(function(ed, cm) { - cm.setActive('spellchecker', t.active); - }); - - ed.onSetContent.add(function() { - t._done(); - }); - - ed.onBeforeGetContent.add(function() { - t._done(); - }); - - ed.onBeforeExecCommand.add(function(ed, cmd) { - if (cmd == 'mceFullScreen') - t._done(); - }); - - // Find selected language - t.languages = {}; - each(ed.getParam('spellchecker_languages', '+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv', 'hash'), function(v, k) { - if (k.indexOf('+') === 0) { - k = k.substring(1); - t.selectedLang = v; - } - - t.languages[k] = v; - }); - }, - - createControl : function(n, cm) { - var t = this, c, ed = t.editor; - - if (n == 'spellchecker') { - // Use basic button if we use the native spellchecker - if (t.rpcUrl == '{backend}') { - // Create simple toggle button if we have native support - if (t.hasSupport) - c = cm.createButton(n, {title : 'spellchecker.desc', cmd : 'mceSpellCheck', scope : t}); - - return c; - } - - c = cm.createSplitButton(n, {title : 'spellchecker.desc', cmd : 'mceSpellCheck', scope : t}); - - c.onRenderMenu.add(function(c, m) { - m.add({title : 'spellchecker.langs', 'class' : 'mceMenuItemTitle'}).setDisabled(1); - each(t.languages, function(v, k) { - var o = {icon : 1}, mi; - - o.onclick = function() { - if (v == t.selectedLang) { - return; - } - mi.setSelected(1); - t.selectedItem.setSelected(0); - t.selectedItem = mi; - t.selectedLang = v; - }; - - o.title = k; - mi = m.add(o); - mi.setSelected(v == t.selectedLang); - - if (v == t.selectedLang) - t.selectedItem = mi; - }) - }); - - return c; - } - }, - - // Internal functions - - _walk : function(n, f) { - var d = this.editor.getDoc(), w; - - if (d.createTreeWalker) { - w = d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false); - - while ((n = w.nextNode()) != null) - f.call(this, n); - } else - tinymce.walk(n, f, 'childNodes'); - }, - - _getSeparators : function() { - var re = '', i, str = this.editor.getParam('spellchecker_word_separator_chars', '\\s!"#$%&()*+,-./:;<=>?@[\]^_{|}§©«®±¶·¸»¼½¾¿×÷¤\u201d\u201c'); - - // Build word separator regexp - for (i=0; i elements content is broken after spellchecking. - // Bug #1408: Preceding whitespace characters are removed - // @TODO: I'm not sure that both are still issues on IE9. - if (tinymce.isIE) { - // Enclose mispelled words with temporal tag - v = v.replace(rx, '$1$2'); - // Loop over the content finding mispelled words - while ((pos = v.indexOf('')) != -1) { - // Add text node for the content before the word - txt = v.substring(0, pos); - if (txt.length) { - node = doc.createTextNode(dom.decode(txt)); - elem.appendChild(node); - } - v = v.substring(pos+10); - pos = v.indexOf(''); - txt = v.substring(0, pos); - v = v.substring(pos+11); - // Add span element for the word - elem.appendChild(dom.create('span', {'class' : 'mceItemHiddenSpellWord'}, txt)); - } - // Add text node for the rest of the content - if (v.length) { - node = doc.createTextNode(dom.decode(v)); - elem.appendChild(node); - } - } else { - // Other browsers preserve whitespace characters on innerHTML usage - elem.innerHTML = v.replace(rx, '$1$2'); - } - - // Finally, replace the node with the container - dom.replace(elem, n); - } - }); - - se.setRng(r); - }, - - _showMenu : function(ed, e) { - var t = this, ed = t.editor, m = t._menu, p1, dom = ed.dom, vp = dom.getViewPort(ed.getWin()), wordSpan = e.target; - - e = 0; // Fixes IE memory leak - - if (!m) { - m = ed.controlManager.createDropMenu('spellcheckermenu', {'class' : 'mceNoIcons'}); - t._menu = m; - } - - if (dom.hasClass(wordSpan, 'mceItemHiddenSpellWord')) { - m.removeAll(); - m.add({title : 'spellchecker.wait', 'class' : 'mceMenuItemTitle'}).setDisabled(1); - - t._sendRPC('getSuggestions', [t.selectedLang, dom.decode(wordSpan.innerHTML)], function(r) { - var ignoreRpc; - - m.removeAll(); - - if (r.length > 0) { - m.add({title : 'spellchecker.sug', 'class' : 'mceMenuItemTitle'}).setDisabled(1); - each(r, function(v) { - m.add({title : v, onclick : function() { - dom.replace(ed.getDoc().createTextNode(v), wordSpan); - t._checkDone(); - }}); - }); - - m.addSeparator(); - } else - m.add({title : 'spellchecker.no_sug', 'class' : 'mceMenuItemTitle'}).setDisabled(1); - - if (ed.getParam('show_ignore_words', true)) { - ignoreRpc = t.editor.getParam("spellchecker_enable_ignore_rpc", ''); - m.add({ - title : 'spellchecker.ignore_word', - onclick : function() { - var word = wordSpan.innerHTML; - - dom.remove(wordSpan, 1); - t._checkDone(); - - // tell the server if we need to - if (ignoreRpc) { - ed.setProgressState(1); - t._sendRPC('ignoreWord', [t.selectedLang, word], function(r) { - ed.setProgressState(0); - }); - } - } - }); - - m.add({ - title : 'spellchecker.ignore_words', - onclick : function() { - var word = wordSpan.innerHTML; - - t._removeWords(dom.decode(word)); - t._checkDone(); - - // tell the server if we need to - if (ignoreRpc) { - ed.setProgressState(1); - t._sendRPC('ignoreWords', [t.selectedLang, word], function(r) { - ed.setProgressState(0); - }); - } - } - }); - } - - if (t.editor.getParam("spellchecker_enable_learn_rpc")) { - m.add({ - title : 'spellchecker.learn_word', - onclick : function() { - var word = wordSpan.innerHTML; - - dom.remove(wordSpan, 1); - t._checkDone(); - - ed.setProgressState(1); - t._sendRPC('learnWord', [t.selectedLang, word], function(r) { - ed.setProgressState(0); - }); - } - }); - } - - m.update(); - }); - - p1 = DOM.getPos(ed.getContentAreaContainer()); - m.settings.offset_x = p1.x; - m.settings.offset_y = p1.y; - - ed.selection.select(wordSpan); - p1 = dom.getPos(wordSpan); - m.showMenu(p1.x, p1.y + wordSpan.offsetHeight - vp.y); - - return tinymce.dom.Event.cancel(e); - } else - m.hideMenu(); - }, - - _checkDone : function() { - var t = this, ed = t.editor, dom = ed.dom, o; - - each(dom.select('span'), function(n) { - if (n && dom.hasClass(n, 'mceItemHiddenSpellWord')) { - o = true; - return false; - } - }); - - if (!o) - t._done(); - }, - - _done : function() { - var t = this, la = t.active; - - if (t.active) { - t.active = 0; - t._removeWords(); - - if (t._menu) - t._menu.hideMenu(); - - if (la) - t.editor.nodeChanged(); - } - }, - - _sendRPC : function(m, p, cb) { - var t = this; - - JSONRequest.sendRPC({ - url : t.rpcUrl, - method : m, - params : p, - success : cb, - error : function(e, x) { - t.editor.setProgressState(0); - t.editor.windowManager.alert(e.errstr || ('Error response: ' + x.responseText)); - } - }); - } - }); - - // Register plugin - tinymce.PluginManager.add('spellchecker', tinymce.plugins.SpellcheckerPlugin); -})(); diff --git a/common/static/js/vendor/tiny_mce/plugins/spellchecker/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/spellchecker/plugin.min.js new file mode 100644 index 0000000000..628cf4e056 --- /dev/null +++ b/common/static/js/vendor/tiny_mce/plugins/spellchecker/plugin.min.js @@ -0,0 +1 @@ +!function(e,t){"use strict";function n(e,t){for(var n,r=[],i=0;i=d.end?(i=c,a=d.end-l):r&&s.push(c),!r&&c.length+l>d.start&&(r=c,o=d.start-l),l+=c.length),r&&i){if(c=n({startNode:r,startNodeIndex:o,endNode:i,endNodeIndex:a,innerNodes:s,match:d.text,matchIndex:u}),l-=i.length-a,r=null,i=null,s=[],d=t.shift(),u++,!d)break}else{if((!k[c.nodeName]||N[c.nodeName])&&c.firstChild){c=c.firstChild;continue}if(c.nextSibling){c=c.nextSibling;continue}}for(;;){if(c.nextSibling){c=c.nextSibling;break}if(c.parentNode===e)break e;c=c.parentNode}}}function o(e){function t(t,n){var r=x[n];r.stencil||(r.stencil=e(r));var i=r.stencil.cloneNode(!1);return i.setAttribute("data-mce-index",n),t&&i.appendChild(_.doc.createTextNode(t)),i}return function n(e){var n,r,i,o=e.startNode,a=e.endNode,s=e.matchIndex,l=_.doc;if(o===a){var c=o;i=c.parentNode,e.startNodeIndex>0&&(n=l.createTextNode(c.data.substring(0,e.startNodeIndex)),i.insertBefore(n,c));var d=t(e.match,s);return i.insertBefore(d,c),e.endNodeIndexp;++p){var h=e.innerNodes[p],g=t(h.data,s);h.parentNode.replaceChild(g,h),f.push(g)}var v=t(a.data.substring(0,e.endNodeIndex),s);return i=o.parentNode,i.insertBefore(n,o),i.insertBefore(u,o),i.removeChild(o),i=a.parentNode,i.insertBefore(v,a),i.insertBefore(r,a),i.removeChild(a),v}}function a(e){var t=e.parentNode;t.insertBefore(e.firstChild,e),e.parentNode.removeChild(e)}function s(t){var n=e.getElementsByTagName("*"),r=[];t="number"==typeof t?""+t:null;for(var i=0;it&&e(x[t],t)!==!1;t++);return this}function u(t){return x.length&&i(e,x,o(t)),this}function f(e,t){if(w&&e.global)for(;C=e.exec(w);)x.push(n(C,t));return this}function p(e){var t,n=s(e?l(e):null);for(t=n.length;t--;)a(n[t]);return this}function m(e){return x[e.getAttribute("data-mce-index")]}function h(e){return s(l(e))[0]}function g(e,t,n){return x.push({start:e,end:e+t,text:w.substr(e,t),data:n}),this}function v(e){var n=s(l(e)),r=t.dom.createRng();return r.setStartBefore(n[0]),r.setEndAfter(n[n.length-1]),r}function y(e,n){var r=v(e);return r.deleteContents(),n.length>0&&r.insertNode(t.dom.doc.createTextNode(n)),r}function b(){return x.splice(0,x.length),p(),this}var C,x=[],w,_=t.dom,N,k,E;return N=t.schema.getBlockElements(),k=t.schema.getWhiteSpaceElements(),E=t.schema.getShortEndedElements(),w=r(e),{text:w,matches:x,each:d,filter:c,reset:b,matchFromElement:m,elementFromMatch:h,find:f,add:g,wrap:u,unwrap:p,replace:y,rangeFromMatch:v,indexOf:l}}}),r(c,[l,d,u,f,p,m,h],function(e,t,n,r,i,o,a){t.add("spellchecker",function(t,s){function l(){return y.textMatcher||(y.textMatcher=new e(t.getBody(),t)),y.textMatcher}function c(e,t){var r=[];return n.each(t,function(e){r.push({selectable:!0,text:e.name,data:e.value})}),r}function d(e){for(var t in e)return!1;return!0}function u(e){var o=[],a=b[e.text];n.each(a,function(n){o.push({text:n,onclick:function(){var r=l().replace(e,n);r.collapse(!1),t.selection.setRng(r),p()}})}),o.push.apply(o,[{text:"-"},{text:"Ignore",onclick:function(){m(e)}},{text:"Ignore all",onclick:function(){m(e,!0)}},{text:"Finish",onclick:h}]),x=new r({items:o,context:"contextmenu",onautohide:function(e){-1!=e.target.className.indexOf("spellchecker")&&e.preventDefault()},onhide:function(){x.remove(),x=null}}),x.renderTo(document.body);var s=l().elementFromMatch(e),c=i.DOM.getPos(t.getContentAreaContainer()),d=t.dom.getPos(s),u=t.dom.getRoot();"BODY"==u.nodeName?(d.x-=u.ownerDocument.documentElement.scrollLeft||u.scrollLeft,d.y-=u.ownerDocument.documentElement.scrollTop||u.scrollTop):(d.x-=u.scrollLeft,d.y-=u.scrollTop),c.x+=d.x,c.y+=d.y,x.moveTo(c.x,c.y+s.offsetHeight)}function f(){function e(e){return t.setProgressState(!1),d(e)?(t.windowManager.alert("No misspellings found"),void(C=!1)):(b=e,l().filter(function(t){return!!e[t.text]}).wrap(function(){return t.dom.create("span",{"class":"mce-spellchecker-word","data-mce-bogus":1})}),void t.fire("SpellcheckStart"))}function n(e,n,r){o.sendRPC({url:new a(s).toAbsolute(w.spellchecker_rpc_url),method:e,params:{lang:w.spellchecker_language||"en",words:n},success:function(e){r(e)},error:function(e,n){e="JSON Parse error."==e?"Non JSON response:"+n.responseText:"Error: "+e,t.windowManager.alert(e),t.setProgressState(!1),h()}})}var r=[],i={};if(C)return void h();h(),C=!0;var c=t.getParam("spellchecker_wordchar_pattern")||new RegExp('[^\\s!"#$%&()*+,-./:;<=>?@[\\]^_{|}`\xa7\xa9\xab\xae\xb1\xb6\xb7\xb8\xbb\xbc\xbd\xbe\xbf\xd7\xf7\xa4\u201d\u201c\u201e]+',"g");l().find(c).each(function(e){var t=e.text;if(!i[t]){if(/^\d+$/.test(t)||1==t.length)return;r.push(t),i[t]=!0}}),t.setProgressState(!0);var u=w.spellchecker_callback||n;u("spellcheck",r,e)}function p(){t.dom.select("span.mce-spellchecker-word").length||h()}function m(e,n){t.selection.collapse(),n?l().each(function(t){t.text==e.text&&l().unwrap(t)}):l().unwrap(e),p()}function h(){l().reset(),y.textMatcher=null,C&&(C=!1,t.fire("SpellcheckEnd"))}function g(e){var t=w.spellchecker_language;e.control.items().each(function(e){e.active(e.settings.data===t)})}var v,y=this,b,C,x,w=t.settings,_=w.spellchecker_languages||"English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr_FR,German=de,Italian=it,Polish=pl,Portuguese=pt_BR,Spanish=es,Swedish=sv";v=c("Language",n.map(_.split(","),function(e){var t=e.split("=");return{name:t[0],value:t[1]}})),t.on("click",function(e){if("mce-spellchecker-word"==e.target.className){e.preventDefault();var n=l().matchFromElement(e.target);t.selection.setRng(l().rangeFromMatch(n)),u(n)}}),t.addMenuItem("spellchecker",{text:"Spellcheck",context:"tools",onclick:f,selectable:!0,onPostRender:function(){var e=this;t.on("SpellcheckStart SpellcheckEnd",function(){e.active(C)})}});var N={tooltip:"Spellcheck",onclick:f,onPostRender:function(){var e=this;t.on("SpellcheckStart SpellcheckEnd",function(){e.active(C)})}};v.length>1&&(N.type="splitbutton",N.menu=v,N.onshow=g,N.onselect=function(e){w.spellchecker_language=e.control.settings.data}),t.addButton("spellchecker",N),t.addCommand("mceSpellCheck",f),t.on("remove",function(){x&&(x.remove(),x=null)}),this.getTextMatcher=l,w.spellchecker_language=w.spellchecker_language||w.language||"en"})}),a([l,c])}(this); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/style/css/props.css b/common/static/js/vendor/tiny_mce/plugins/style/css/props.css deleted file mode 100644 index 51a3b1f2f0..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/style/css/props.css +++ /dev/null @@ -1,14 +0,0 @@ -#text_font {width:250px;} -#text_size {width:70px;} -.mceAddSelectValue {background:#DDD;} -select, #block_text_indent, #box_width, #box_height, #box_padding_top, #box_padding_right, #box_padding_bottom, #box_padding_left {width:70px;} -#box_margin_top, #box_margin_right, #box_margin_bottom, #box_margin_left, #positioning_width, #positioning_height, #positioning_zindex {width:70px;} -#positioning_placement_top, #positioning_placement_right, #positioning_placement_bottom, #positioning_placement_left {width:70px;} -#positioning_clip_top, #positioning_clip_right, #positioning_clip_bottom, #positioning_clip_left {width:70px;} -.panel_toggle_insert_span {padding-top:10px;} -.panel_wrapper div.current {padding-top:10px;height:230px;} -.delim {border-left:1px solid gray;} -.tdelim {border-bottom:1px solid gray;} -#block_display {width:145px;} -#list_type {width:115px;} -.disabled {background:#EEE;} diff --git a/common/static/js/vendor/tiny_mce/plugins/style/editor_plugin.js b/common/static/js/vendor/tiny_mce/plugins/style/editor_plugin.js deleted file mode 100644 index dda9f928b9..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/style/editor_plugin.js +++ /dev/null @@ -1 +0,0 @@ -(function(){tinymce.create("tinymce.plugins.StylePlugin",{init:function(a,b){a.addCommand("mceStyleProps",function(){var c=false;var f=a.selection.getSelectedBlocks();var d=[];if(f.length===1){d.push(a.selection.getNode().style.cssText)}else{tinymce.each(f,function(g){d.push(a.dom.getAttrib(g,"style"))});c=true}a.windowManager.open({file:b+"/props.htm",width:480+parseInt(a.getLang("style.delta_width",0)),height:340+parseInt(a.getLang("style.delta_height",0)),inline:1},{applyStyleToBlocks:c,plugin_url:b,styles:d})});a.addCommand("mceSetElementStyle",function(d,c){if(e=a.selection.getNode()){a.dom.setAttrib(e,"style",c);a.execCommand("mceRepaint")}});a.onNodeChange.add(function(d,c,f){c.setDisabled("styleprops",f.nodeName==="BODY")});a.addButton("styleprops",{title:"style.desc",cmd:"mceStyleProps"})},getInfo:function(){return{longname:"Style",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/style",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("style",tinymce.plugins.StylePlugin)})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/style/editor_plugin_src.js b/common/static/js/vendor/tiny_mce/plugins/style/editor_plugin_src.js deleted file mode 100644 index 5a2d8483a6..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/style/editor_plugin_src.js +++ /dev/null @@ -1,71 +0,0 @@ -/** - * editor_plugin_src.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -(function() { - tinymce.create('tinymce.plugins.StylePlugin', { - init : function(ed, url) { - // Register commands - ed.addCommand('mceStyleProps', function() { - - var applyStyleToBlocks = false; - var blocks = ed.selection.getSelectedBlocks(); - var styles = []; - - if (blocks.length === 1) { - styles.push(ed.selection.getNode().style.cssText); - } - else { - tinymce.each(blocks, function(block) { - styles.push(ed.dom.getAttrib(block, 'style')); - }); - applyStyleToBlocks = true; - } - - ed.windowManager.open({ - file : url + '/props.htm', - width : 480 + parseInt(ed.getLang('style.delta_width', 0)), - height : 340 + parseInt(ed.getLang('style.delta_height', 0)), - inline : 1 - }, { - applyStyleToBlocks : applyStyleToBlocks, - plugin_url : url, - styles : styles - }); - }); - - ed.addCommand('mceSetElementStyle', function(ui, v) { - if (e = ed.selection.getNode()) { - ed.dom.setAttrib(e, 'style', v); - ed.execCommand('mceRepaint'); - } - }); - - ed.onNodeChange.add(function(ed, cm, n) { - cm.setDisabled('styleprops', n.nodeName === 'BODY'); - }); - - // Register buttons - ed.addButton('styleprops', {title : 'style.desc', cmd : 'mceStyleProps'}); - }, - - getInfo : function() { - return { - longname : 'Style', - author : 'Moxiecode Systems AB', - authorurl : 'http://tinymce.moxiecode.com', - infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/style', - version : tinymce.majorVersion + "." + tinymce.minorVersion - }; - } - }); - - // Register plugin - tinymce.PluginManager.add('style', tinymce.plugins.StylePlugin); -})(); diff --git a/common/static/js/vendor/tiny_mce/plugins/style/js/props.js b/common/static/js/vendor/tiny_mce/plugins/style/js/props.js deleted file mode 100644 index 853222bee5..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/style/js/props.js +++ /dev/null @@ -1,709 +0,0 @@ -tinyMCEPopup.requireLangPack(); - -var defaultFonts = "" + - "Arial, Helvetica, sans-serif=Arial, Helvetica, sans-serif;" + - "Times New Roman, Times, serif=Times New Roman, Times, serif;" + - "Courier New, Courier, mono=Courier New, Courier, mono;" + - "Times New Roman, Times, serif=Times New Roman, Times, serif;" + - "Georgia, Times New Roman, Times, serif=Georgia, Times New Roman, Times, serif;" + - "Verdana, Arial, Helvetica, sans-serif=Verdana, Arial, Helvetica, sans-serif;" + - "Geneva, Arial, Helvetica, sans-serif=Geneva, Arial, Helvetica, sans-serif"; - -var defaultSizes = "9;10;12;14;16;18;24;xx-small;x-small;small;medium;large;x-large;xx-large;smaller;larger"; -var defaultMeasurement = "+pixels=px;points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;ems=em;exs=ex;%"; -var defaultSpacingMeasurement = "pixels=px;points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;+ems=em;exs=ex;%"; -var defaultIndentMeasurement = "pixels=px;+points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;ems=em;exs=ex;%"; -var defaultWeight = "normal;bold;bolder;lighter;100;200;300;400;500;600;700;800;900"; -var defaultTextStyle = "normal;italic;oblique"; -var defaultVariant = "normal;small-caps"; -var defaultLineHeight = "normal"; -var defaultAttachment = "fixed;scroll"; -var defaultRepeat = "no-repeat;repeat;repeat-x;repeat-y"; -var defaultPosH = "left;center;right"; -var defaultPosV = "top;center;bottom"; -var defaultVAlign = "baseline;sub;super;top;text-top;middle;bottom;text-bottom"; -var defaultDisplay = "inline;block;list-item;run-in;compact;marker;table;inline-table;table-row-group;table-header-group;table-footer-group;table-row;table-column-group;table-column;table-cell;table-caption;none"; -var defaultBorderStyle = "none;solid;dashed;dotted;double;groove;ridge;inset;outset"; -var defaultBorderWidth = "thin;medium;thick"; -var defaultListType = "disc;circle;square;decimal;lower-roman;upper-roman;lower-alpha;upper-alpha;none"; - -function aggregateStyles(allStyles) { - var mergedStyles = {}; - - tinymce.each(allStyles, function(style) { - if (style !== '') { - var parsedStyles = tinyMCEPopup.editor.dom.parseStyle(style); - for (var name in parsedStyles) { - if (parsedStyles.hasOwnProperty(name)) { - if (mergedStyles[name] === undefined) { - mergedStyles[name] = parsedStyles[name]; - } - else if (name === 'text-decoration') { - if (mergedStyles[name].indexOf(parsedStyles[name]) === -1) { - mergedStyles[name] = mergedStyles[name] +' '+ parsedStyles[name]; - } - } - } - } - } - }); - - return mergedStyles; -} - -var applyActionIsInsert; -var existingStyles; - -function init(ed) { - var ce = document.getElementById('container'), h; - - existingStyles = aggregateStyles(tinyMCEPopup.getWindowArg('styles')); - ce.style.cssText = tinyMCEPopup.editor.dom.serializeStyle(existingStyles); - - applyActionIsInsert = ed.getParam("edit_css_style_insert_span", false); - document.getElementById('toggle_insert_span').checked = applyActionIsInsert; - - h = getBrowserHTML('background_image_browser','background_image','image','advimage'); - document.getElementById("background_image_browser").innerHTML = h; - - document.getElementById('text_color_pickcontainer').innerHTML = getColorPickerHTML('text_color_pick','text_color'); - document.getElementById('background_color_pickcontainer').innerHTML = getColorPickerHTML('background_color_pick','background_color'); - document.getElementById('border_color_top_pickcontainer').innerHTML = getColorPickerHTML('border_color_top_pick','border_color_top'); - document.getElementById('border_color_right_pickcontainer').innerHTML = getColorPickerHTML('border_color_right_pick','border_color_right'); - document.getElementById('border_color_bottom_pickcontainer').innerHTML = getColorPickerHTML('border_color_bottom_pick','border_color_bottom'); - document.getElementById('border_color_left_pickcontainer').innerHTML = getColorPickerHTML('border_color_left_pick','border_color_left'); - - fillSelect(0, 'text_font', 'style_font', defaultFonts, ';', true); - fillSelect(0, 'text_size', 'style_font_size', defaultSizes, ';', true); - fillSelect(0, 'text_size_measurement', 'style_font_size_measurement', defaultMeasurement, ';', true); - fillSelect(0, 'text_case', 'style_text_case', "capitalize;uppercase;lowercase", ';', true); - fillSelect(0, 'text_weight', 'style_font_weight', defaultWeight, ';', true); - fillSelect(0, 'text_style', 'style_font_style', defaultTextStyle, ';', true); - fillSelect(0, 'text_variant', 'style_font_variant', defaultVariant, ';', true); - fillSelect(0, 'text_lineheight', 'style_font_line_height', defaultLineHeight, ';', true); - fillSelect(0, 'text_lineheight_measurement', 'style_font_line_height_measurement', defaultMeasurement, ';', true); - - fillSelect(0, 'background_attachment', 'style_background_attachment', defaultAttachment, ';', true); - fillSelect(0, 'background_repeat', 'style_background_repeat', defaultRepeat, ';', true); - - fillSelect(0, 'background_hpos_measurement', 'style_background_hpos_measurement', defaultMeasurement, ';', true); - fillSelect(0, 'background_vpos_measurement', 'style_background_vpos_measurement', defaultMeasurement, ';', true); - - fillSelect(0, 'background_hpos', 'style_background_hpos', defaultPosH, ';', true); - fillSelect(0, 'background_vpos', 'style_background_vpos', defaultPosV, ';', true); - - fillSelect(0, 'block_wordspacing', 'style_wordspacing', 'normal', ';', true); - fillSelect(0, 'block_wordspacing_measurement', 'style_wordspacing_measurement', defaultSpacingMeasurement, ';', true); - fillSelect(0, 'block_letterspacing', 'style_letterspacing', 'normal', ';', true); - fillSelect(0, 'block_letterspacing_measurement', 'style_letterspacing_measurement', defaultSpacingMeasurement, ';', true); - fillSelect(0, 'block_vertical_alignment', 'style_vertical_alignment', defaultVAlign, ';', true); - fillSelect(0, 'block_text_align', 'style_text_align', "left;right;center;justify", ';', true); - fillSelect(0, 'block_whitespace', 'style_whitespace', "normal;pre;nowrap", ';', true); - fillSelect(0, 'block_display', 'style_display', defaultDisplay, ';', true); - fillSelect(0, 'block_text_indent_measurement', 'style_text_indent_measurement', defaultIndentMeasurement, ';', true); - - fillSelect(0, 'box_width_measurement', 'style_box_width_measurement', defaultMeasurement, ';', true); - fillSelect(0, 'box_height_measurement', 'style_box_height_measurement', defaultMeasurement, ';', true); - fillSelect(0, 'box_float', 'style_float', 'left;right;none', ';', true); - fillSelect(0, 'box_clear', 'style_clear', 'left;right;both;none', ';', true); - fillSelect(0, 'box_padding_left_measurement', 'style_padding_left_measurement', defaultMeasurement, ';', true); - fillSelect(0, 'box_padding_top_measurement', 'style_padding_top_measurement', defaultMeasurement, ';', true); - fillSelect(0, 'box_padding_bottom_measurement', 'style_padding_bottom_measurement', defaultMeasurement, ';', true); - fillSelect(0, 'box_padding_right_measurement', 'style_padding_right_measurement', defaultMeasurement, ';', true); - fillSelect(0, 'box_margin_left_measurement', 'style_margin_left_measurement', defaultMeasurement, ';', true); - fillSelect(0, 'box_margin_top_measurement', 'style_margin_top_measurement', defaultMeasurement, ';', true); - fillSelect(0, 'box_margin_bottom_measurement', 'style_margin_bottom_measurement', defaultMeasurement, ';', true); - fillSelect(0, 'box_margin_right_measurement', 'style_margin_right_measurement', defaultMeasurement, ';', true); - - fillSelect(0, 'border_style_top', 'style_border_style_top', defaultBorderStyle, ';', true); - fillSelect(0, 'border_style_right', 'style_border_style_right', defaultBorderStyle, ';', true); - fillSelect(0, 'border_style_bottom', 'style_border_style_bottom', defaultBorderStyle, ';', true); - fillSelect(0, 'border_style_left', 'style_border_style_left', defaultBorderStyle, ';', true); - - fillSelect(0, 'border_width_top', 'style_border_width_top', defaultBorderWidth, ';', true); - fillSelect(0, 'border_width_right', 'style_border_width_right', defaultBorderWidth, ';', true); - fillSelect(0, 'border_width_bottom', 'style_border_width_bottom', defaultBorderWidth, ';', true); - fillSelect(0, 'border_width_left', 'style_border_width_left', defaultBorderWidth, ';', true); - - fillSelect(0, 'border_width_top_measurement', 'style_border_width_top_measurement', defaultMeasurement, ';', true); - fillSelect(0, 'border_width_right_measurement', 'style_border_width_right_measurement', defaultMeasurement, ';', true); - fillSelect(0, 'border_width_bottom_measurement', 'style_border_width_bottom_measurement', defaultMeasurement, ';', true); - fillSelect(0, 'border_width_left_measurement', 'style_border_width_left_measurement', defaultMeasurement, ';', true); - - fillSelect(0, 'list_type', 'style_list_type', defaultListType, ';', true); - fillSelect(0, 'list_position', 'style_list_position', "inside;outside", ';', true); - - fillSelect(0, 'positioning_type', 'style_positioning_type', "absolute;relative;static", ';', true); - fillSelect(0, 'positioning_visibility', 'style_positioning_visibility', "inherit;visible;hidden", ';', true); - - fillSelect(0, 'positioning_width_measurement', 'style_positioning_width_measurement', defaultMeasurement, ';', true); - fillSelect(0, 'positioning_height_measurement', 'style_positioning_height_measurement', defaultMeasurement, ';', true); - fillSelect(0, 'positioning_overflow', 'style_positioning_overflow', "visible;hidden;scroll;auto", ';', true); - - fillSelect(0, 'positioning_placement_top_measurement', 'style_positioning_placement_top_measurement', defaultMeasurement, ';', true); - fillSelect(0, 'positioning_placement_right_measurement', 'style_positioning_placement_right_measurement', defaultMeasurement, ';', true); - fillSelect(0, 'positioning_placement_bottom_measurement', 'style_positioning_placement_bottom_measurement', defaultMeasurement, ';', true); - fillSelect(0, 'positioning_placement_left_measurement', 'style_positioning_placement_left_measurement', defaultMeasurement, ';', true); - - fillSelect(0, 'positioning_clip_top_measurement', 'style_positioning_clip_top_measurement', defaultMeasurement, ';', true); - fillSelect(0, 'positioning_clip_right_measurement', 'style_positioning_clip_right_measurement', defaultMeasurement, ';', true); - fillSelect(0, 'positioning_clip_bottom_measurement', 'style_positioning_clip_bottom_measurement', defaultMeasurement, ';', true); - fillSelect(0, 'positioning_clip_left_measurement', 'style_positioning_clip_left_measurement', defaultMeasurement, ';', true); - - TinyMCE_EditableSelects.init(); - setupFormData(); - showDisabledControls(); -} - -function setupFormData() { - var ce = document.getElementById('container'), f = document.forms[0], s, b, i; - - // Setup text fields - - selectByValue(f, 'text_font', ce.style.fontFamily, true, true); - selectByValue(f, 'text_size', getNum(ce.style.fontSize), true, true); - selectByValue(f, 'text_size_measurement', getMeasurement(ce.style.fontSize)); - selectByValue(f, 'text_weight', ce.style.fontWeight, true, true); - selectByValue(f, 'text_style', ce.style.fontStyle, true, true); - selectByValue(f, 'text_lineheight', getNum(ce.style.lineHeight), true, true); - selectByValue(f, 'text_lineheight_measurement', getMeasurement(ce.style.lineHeight)); - selectByValue(f, 'text_case', ce.style.textTransform, true, true); - selectByValue(f, 'text_variant', ce.style.fontVariant, true, true); - f.text_color.value = tinyMCEPopup.editor.dom.toHex(ce.style.color); - updateColor('text_color_pick', 'text_color'); - f.text_underline.checked = inStr(ce.style.textDecoration, 'underline'); - f.text_overline.checked = inStr(ce.style.textDecoration, 'overline'); - f.text_linethrough.checked = inStr(ce.style.textDecoration, 'line-through'); - f.text_blink.checked = inStr(ce.style.textDecoration, 'blink'); - f.text_none.checked = inStr(ce.style.textDecoration, 'none'); - updateTextDecorations(); - - // Setup background fields - - f.background_color.value = tinyMCEPopup.editor.dom.toHex(ce.style.backgroundColor); - updateColor('background_color_pick', 'background_color'); - f.background_image.value = ce.style.backgroundImage.replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1"); - selectByValue(f, 'background_repeat', ce.style.backgroundRepeat, true, true); - selectByValue(f, 'background_attachment', ce.style.backgroundAttachment, true, true); - selectByValue(f, 'background_hpos', getNum(getVal(ce.style.backgroundPosition, 0)), true, true); - selectByValue(f, 'background_hpos_measurement', getMeasurement(getVal(ce.style.backgroundPosition, 0))); - selectByValue(f, 'background_vpos', getNum(getVal(ce.style.backgroundPosition, 1)), true, true); - selectByValue(f, 'background_vpos_measurement', getMeasurement(getVal(ce.style.backgroundPosition, 1))); - - // Setup block fields - - selectByValue(f, 'block_wordspacing', getNum(ce.style.wordSpacing), true, true); - selectByValue(f, 'block_wordspacing_measurement', getMeasurement(ce.style.wordSpacing)); - selectByValue(f, 'block_letterspacing', getNum(ce.style.letterSpacing), true, true); - selectByValue(f, 'block_letterspacing_measurement', getMeasurement(ce.style.letterSpacing)); - selectByValue(f, 'block_vertical_alignment', ce.style.verticalAlign, true, true); - selectByValue(f, 'block_text_align', ce.style.textAlign, true, true); - f.block_text_indent.value = getNum(ce.style.textIndent); - selectByValue(f, 'block_text_indent_measurement', getMeasurement(ce.style.textIndent)); - selectByValue(f, 'block_whitespace', ce.style.whiteSpace, true, true); - selectByValue(f, 'block_display', ce.style.display, true, true); - - // Setup box fields - - f.box_width.value = getNum(ce.style.width); - selectByValue(f, 'box_width_measurement', getMeasurement(ce.style.width)); - - f.box_height.value = getNum(ce.style.height); - selectByValue(f, 'box_height_measurement', getMeasurement(ce.style.height)); - selectByValue(f, 'box_float', ce.style.cssFloat || ce.style.styleFloat, true, true); - - selectByValue(f, 'box_clear', ce.style.clear, true, true); - - setupBox(f, ce, 'box_padding', 'padding', ''); - setupBox(f, ce, 'box_margin', 'margin', ''); - - // Setup border fields - - setupBox(f, ce, 'border_style', 'border', 'Style'); - setupBox(f, ce, 'border_width', 'border', 'Width'); - setupBox(f, ce, 'border_color', 'border', 'Color'); - - updateColor('border_color_top_pick', 'border_color_top'); - updateColor('border_color_right_pick', 'border_color_right'); - updateColor('border_color_bottom_pick', 'border_color_bottom'); - updateColor('border_color_left_pick', 'border_color_left'); - - f.elements.border_color_top.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_top.value); - f.elements.border_color_right.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_right.value); - f.elements.border_color_bottom.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_bottom.value); - f.elements.border_color_left.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_left.value); - - // Setup list fields - - selectByValue(f, 'list_type', ce.style.listStyleType, true, true); - selectByValue(f, 'list_position', ce.style.listStylePosition, true, true); - f.list_bullet_image.value = ce.style.listStyleImage.replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1"); - - // Setup box fields - - selectByValue(f, 'positioning_type', ce.style.position, true, true); - selectByValue(f, 'positioning_visibility', ce.style.visibility, true, true); - selectByValue(f, 'positioning_overflow', ce.style.overflow, true, true); - f.positioning_zindex.value = ce.style.zIndex ? ce.style.zIndex : ""; - - f.positioning_width.value = getNum(ce.style.width); - selectByValue(f, 'positioning_width_measurement', getMeasurement(ce.style.width)); - - f.positioning_height.value = getNum(ce.style.height); - selectByValue(f, 'positioning_height_measurement', getMeasurement(ce.style.height)); - - setupBox(f, ce, 'positioning_placement', '', '', ['top', 'right', 'bottom', 'left']); - - s = ce.style.clip.replace(new RegExp("rect\\('?([^']*)'?\\)", 'gi'), "$1"); - s = s.replace(/,/g, ' '); - - if (!hasEqualValues([getVal(s, 0), getVal(s, 1), getVal(s, 2), getVal(s, 3)])) { - f.positioning_clip_top.value = getNum(getVal(s, 0)); - selectByValue(f, 'positioning_clip_top_measurement', getMeasurement(getVal(s, 0))); - f.positioning_clip_right.value = getNum(getVal(s, 1)); - selectByValue(f, 'positioning_clip_right_measurement', getMeasurement(getVal(s, 1))); - f.positioning_clip_bottom.value = getNum(getVal(s, 2)); - selectByValue(f, 'positioning_clip_bottom_measurement', getMeasurement(getVal(s, 2))); - f.positioning_clip_left.value = getNum(getVal(s, 3)); - selectByValue(f, 'positioning_clip_left_measurement', getMeasurement(getVal(s, 3))); - } else { - f.positioning_clip_top.value = getNum(getVal(s, 0)); - selectByValue(f, 'positioning_clip_top_measurement', getMeasurement(getVal(s, 0))); - f.positioning_clip_right.value = f.positioning_clip_bottom.value = f.positioning_clip_left.value; - } - -// setupBox(f, ce, '', 'border', 'Color'); -} - -function getMeasurement(s) { - return s.replace(/^([0-9.]+)(.*)$/, "$2"); -} - -function getNum(s) { - if (new RegExp('^(?:[0-9.]+)(?:[a-z%]+)$', 'gi').test(s)) - return s.replace(/[^0-9.]/g, ''); - - return s; -} - -function inStr(s, n) { - return new RegExp(n, 'gi').test(s); -} - -function getVal(s, i) { - var a = s.split(' '); - - if (a.length > 1) - return a[i]; - - return ""; -} - -function setValue(f, n, v) { - if (f.elements[n].type == "text") - f.elements[n].value = v; - else - selectByValue(f, n, v, true, true); -} - -function setupBox(f, ce, fp, pr, sf, b) { - if (typeof(b) == "undefined") - b = ['Top', 'Right', 'Bottom', 'Left']; - - if (isSame(ce, pr, sf, b)) { - f.elements[fp + "_same"].checked = true; - - setValue(f, fp + "_top", getNum(ce.style[pr + b[0] + sf])); - f.elements[fp + "_top"].disabled = false; - - f.elements[fp + "_right"].value = ""; - f.elements[fp + "_right"].disabled = true; - f.elements[fp + "_bottom"].value = ""; - f.elements[fp + "_bottom"].disabled = true; - f.elements[fp + "_left"].value = ""; - f.elements[fp + "_left"].disabled = true; - - if (f.elements[fp + "_top_measurement"]) { - selectByValue(f, fp + '_top_measurement', getMeasurement(ce.style[pr + b[0] + sf])); - f.elements[fp + "_left_measurement"].disabled = true; - f.elements[fp + "_bottom_measurement"].disabled = true; - f.elements[fp + "_right_measurement"].disabled = true; - } - } else { - f.elements[fp + "_same"].checked = false; - - setValue(f, fp + "_top", getNum(ce.style[pr + b[0] + sf])); - f.elements[fp + "_top"].disabled = false; - - setValue(f, fp + "_right", getNum(ce.style[pr + b[1] + sf])); - f.elements[fp + "_right"].disabled = false; - - setValue(f, fp + "_bottom", getNum(ce.style[pr + b[2] + sf])); - f.elements[fp + "_bottom"].disabled = false; - - setValue(f, fp + "_left", getNum(ce.style[pr + b[3] + sf])); - f.elements[fp + "_left"].disabled = false; - - if (f.elements[fp + "_top_measurement"]) { - selectByValue(f, fp + '_top_measurement', getMeasurement(ce.style[pr + b[0] + sf])); - selectByValue(f, fp + '_right_measurement', getMeasurement(ce.style[pr + b[1] + sf])); - selectByValue(f, fp + '_bottom_measurement', getMeasurement(ce.style[pr + b[2] + sf])); - selectByValue(f, fp + '_left_measurement', getMeasurement(ce.style[pr + b[3] + sf])); - f.elements[fp + "_left_measurement"].disabled = false; - f.elements[fp + "_bottom_measurement"].disabled = false; - f.elements[fp + "_right_measurement"].disabled = false; - } - } -} - -function isSame(e, pr, sf, b) { - var a = [], i, x; - - if (typeof(b) == "undefined") - b = ['Top', 'Right', 'Bottom', 'Left']; - - if (typeof(sf) == "undefined" || sf == null) - sf = ""; - - a[0] = e.style[pr + b[0] + sf]; - a[1] = e.style[pr + b[1] + sf]; - a[2] = e.style[pr + b[2] + sf]; - a[3] = e.style[pr + b[3] + sf]; - - for (i=0; i 0 ? s.substring(1) : s; - - if (f.text_none.checked) - s = "none"; - - ce.style.textDecoration = s; - - // Build background styles - - ce.style.backgroundColor = f.background_color.value; - ce.style.backgroundImage = f.background_image.value != "" ? "url(" + f.background_image.value + ")" : ""; - ce.style.backgroundRepeat = f.background_repeat.value; - ce.style.backgroundAttachment = f.background_attachment.value; - - if (f.background_hpos.value != "") { - s = ""; - s += f.background_hpos.value + (isNum(f.background_hpos.value) ? f.background_hpos_measurement.value : "") + " "; - s += f.background_vpos.value + (isNum(f.background_vpos.value) ? f.background_vpos_measurement.value : ""); - ce.style.backgroundPosition = s; - } - - // Build block styles - - ce.style.wordSpacing = f.block_wordspacing.value + (isNum(f.block_wordspacing.value) ? f.block_wordspacing_measurement.value : ""); - ce.style.letterSpacing = f.block_letterspacing.value + (isNum(f.block_letterspacing.value) ? f.block_letterspacing_measurement.value : ""); - ce.style.verticalAlign = f.block_vertical_alignment.value; - ce.style.textAlign = f.block_text_align.value; - ce.style.textIndent = f.block_text_indent.value + (isNum(f.block_text_indent.value) ? f.block_text_indent_measurement.value : ""); - ce.style.whiteSpace = f.block_whitespace.value; - ce.style.display = f.block_display.value; - - // Build box styles - - ce.style.width = f.box_width.value + (isNum(f.box_width.value) ? f.box_width_measurement.value : ""); - ce.style.height = f.box_height.value + (isNum(f.box_height.value) ? f.box_height_measurement.value : ""); - ce.style.styleFloat = f.box_float.value; - ce.style.cssFloat = f.box_float.value; - - ce.style.clear = f.box_clear.value; - - if (!f.box_padding_same.checked) { - ce.style.paddingTop = f.box_padding_top.value + (isNum(f.box_padding_top.value) ? f.box_padding_top_measurement.value : ""); - ce.style.paddingRight = f.box_padding_right.value + (isNum(f.box_padding_right.value) ? f.box_padding_right_measurement.value : ""); - ce.style.paddingBottom = f.box_padding_bottom.value + (isNum(f.box_padding_bottom.value) ? f.box_padding_bottom_measurement.value : ""); - ce.style.paddingLeft = f.box_padding_left.value + (isNum(f.box_padding_left.value) ? f.box_padding_left_measurement.value : ""); - } else - ce.style.padding = f.box_padding_top.value + (isNum(f.box_padding_top.value) ? f.box_padding_top_measurement.value : ""); - - if (!f.box_margin_same.checked) { - ce.style.marginTop = f.box_margin_top.value + (isNum(f.box_margin_top.value) ? f.box_margin_top_measurement.value : ""); - ce.style.marginRight = f.box_margin_right.value + (isNum(f.box_margin_right.value) ? f.box_margin_right_measurement.value : ""); - ce.style.marginBottom = f.box_margin_bottom.value + (isNum(f.box_margin_bottom.value) ? f.box_margin_bottom_measurement.value : ""); - ce.style.marginLeft = f.box_margin_left.value + (isNum(f.box_margin_left.value) ? f.box_margin_left_measurement.value : ""); - } else - ce.style.margin = f.box_margin_top.value + (isNum(f.box_margin_top.value) ? f.box_margin_top_measurement.value : ""); - - // Build border styles - - if (!f.border_style_same.checked) { - ce.style.borderTopStyle = f.border_style_top.value; - ce.style.borderRightStyle = f.border_style_right.value; - ce.style.borderBottomStyle = f.border_style_bottom.value; - ce.style.borderLeftStyle = f.border_style_left.value; - } else - ce.style.borderStyle = f.border_style_top.value; - - if (!f.border_width_same.checked) { - ce.style.borderTopWidth = f.border_width_top.value + (isNum(f.border_width_top.value) ? f.border_width_top_measurement.value : ""); - ce.style.borderRightWidth = f.border_width_right.value + (isNum(f.border_width_right.value) ? f.border_width_right_measurement.value : ""); - ce.style.borderBottomWidth = f.border_width_bottom.value + (isNum(f.border_width_bottom.value) ? f.border_width_bottom_measurement.value : ""); - ce.style.borderLeftWidth = f.border_width_left.value + (isNum(f.border_width_left.value) ? f.border_width_left_measurement.value : ""); - } else - ce.style.borderWidth = f.border_width_top.value + (isNum(f.border_width_top.value) ? f.border_width_top_measurement.value : ""); - - if (!f.border_color_same.checked) { - ce.style.borderTopColor = f.border_color_top.value; - ce.style.borderRightColor = f.border_color_right.value; - ce.style.borderBottomColor = f.border_color_bottom.value; - ce.style.borderLeftColor = f.border_color_left.value; - } else - ce.style.borderColor = f.border_color_top.value; - - // Build list styles - - ce.style.listStyleType = f.list_type.value; - ce.style.listStylePosition = f.list_position.value; - ce.style.listStyleImage = f.list_bullet_image.value != "" ? "url(" + f.list_bullet_image.value + ")" : ""; - - // Build positioning styles - - ce.style.position = f.positioning_type.value; - ce.style.visibility = f.positioning_visibility.value; - - if (ce.style.width == "") - ce.style.width = f.positioning_width.value + (isNum(f.positioning_width.value) ? f.positioning_width_measurement.value : ""); - - if (ce.style.height == "") - ce.style.height = f.positioning_height.value + (isNum(f.positioning_height.value) ? f.positioning_height_measurement.value : ""); - - ce.style.zIndex = f.positioning_zindex.value; - ce.style.overflow = f.positioning_overflow.value; - - if (!f.positioning_placement_same.checked) { - ce.style.top = f.positioning_placement_top.value + (isNum(f.positioning_placement_top.value) ? f.positioning_placement_top_measurement.value : ""); - ce.style.right = f.positioning_placement_right.value + (isNum(f.positioning_placement_right.value) ? f.positioning_placement_right_measurement.value : ""); - ce.style.bottom = f.positioning_placement_bottom.value + (isNum(f.positioning_placement_bottom.value) ? f.positioning_placement_bottom_measurement.value : ""); - ce.style.left = f.positioning_placement_left.value + (isNum(f.positioning_placement_left.value) ? f.positioning_placement_left_measurement.value : ""); - } else { - s = f.positioning_placement_top.value + (isNum(f.positioning_placement_top.value) ? f.positioning_placement_top_measurement.value : ""); - ce.style.top = s; - ce.style.right = s; - ce.style.bottom = s; - ce.style.left = s; - } - - if (!f.positioning_clip_same.checked) { - s = "rect("; - s += (isNum(f.positioning_clip_top.value) ? f.positioning_clip_top.value + f.positioning_clip_top_measurement.value : "auto") + " "; - s += (isNum(f.positioning_clip_right.value) ? f.positioning_clip_right.value + f.positioning_clip_right_measurement.value : "auto") + " "; - s += (isNum(f.positioning_clip_bottom.value) ? f.positioning_clip_bottom.value + f.positioning_clip_bottom_measurement.value : "auto") + " "; - s += (isNum(f.positioning_clip_left.value) ? f.positioning_clip_left.value + f.positioning_clip_left_measurement.value : "auto"); - s += ")"; - - if (s != "rect(auto auto auto auto)") - ce.style.clip = s; - } else { - s = "rect("; - t = isNum(f.positioning_clip_top.value) ? f.positioning_clip_top.value + f.positioning_clip_top_measurement.value : "auto"; - s += t + " "; - s += t + " "; - s += t + " "; - s += t + ")"; - - if (s != "rect(auto auto auto auto)") - ce.style.clip = s; - } - - ce.style.cssText = ce.style.cssText; -} - -function isNum(s) { - return new RegExp('[0-9]+', 'g').test(s); -} - -function showDisabledControls() { - var f = document.forms, i, a; - - for (i=0; i 1) { - addSelectValue(f, s, p[0], p[1]); - - if (se) - selectByValue(f, s, p[1]); - } else { - addSelectValue(f, s, p[0], p[0]); - - if (se) - selectByValue(f, s, p[0]); - } - } -} - -function toggleSame(ce, pre) { - var el = document.forms[0].elements, i; - - if (ce.checked) { - el[pre + "_top"].disabled = false; - el[pre + "_right"].disabled = true; - el[pre + "_bottom"].disabled = true; - el[pre + "_left"].disabled = true; - - if (el[pre + "_top_measurement"]) { - el[pre + "_top_measurement"].disabled = false; - el[pre + "_right_measurement"].disabled = true; - el[pre + "_bottom_measurement"].disabled = true; - el[pre + "_left_measurement"].disabled = true; - } - } else { - el[pre + "_top"].disabled = false; - el[pre + "_right"].disabled = false; - el[pre + "_bottom"].disabled = false; - el[pre + "_left"].disabled = false; - - if (el[pre + "_top_measurement"]) { - el[pre + "_top_measurement"].disabled = false; - el[pre + "_right_measurement"].disabled = false; - el[pre + "_bottom_measurement"].disabled = false; - el[pre + "_left_measurement"].disabled = false; - } - } - - showDisabledControls(); -} - -function synch(fr, to) { - var f = document.forms[0]; - - f.elements[to].value = f.elements[fr].value; - - if (f.elements[fr + "_measurement"]) - selectByValue(f, to + "_measurement", f.elements[fr + "_measurement"].value); -} - -function updateTextDecorations(){ - var el = document.forms[0].elements; - - var textDecorations = ["text_underline", "text_overline", "text_linethrough", "text_blink"]; - var noneChecked = el["text_none"].checked; - tinymce.each(textDecorations, function(id) { - el[id].disabled = noneChecked; - if (noneChecked) { - el[id].checked = false; - } - }); -} - -tinyMCEPopup.onInit.add(init); diff --git a/common/static/js/vendor/tiny_mce/plugins/style/langs/en_dlg.js b/common/static/js/vendor/tiny_mce/plugins/style/langs/en_dlg.js deleted file mode 100644 index 35881b3aca..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/style/langs/en_dlg.js +++ /dev/null @@ -1 +0,0 @@ -tinyMCE.addI18n('en.style_dlg',{"text_lineheight":"Line Height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",toggle_insert_span:"Insert span at selection",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet Image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for All",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text Indent","block_text_align":"Text Align","block_vertical_alignment":"Vertical Alignment","block_letterspacing":"Letter Spacing","block_wordspacing":"Word Spacing","background_vpos":"Vertical Position","background_hpos":"Horizontal Position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background Image","background_color":"Background Color","text_none":"None","text_blink":"Blink","text_case":"Case","text_striketrough":"Strikethrough","text_underline":"Underline","text_overline":"Overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); diff --git a/common/static/js/vendor/tiny_mce/plugins/style/props.htm b/common/static/js/vendor/tiny_mce/plugins/style/props.htm deleted file mode 100644 index 7dc087a307..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/style/props.htm +++ /dev/null @@ -1,845 +0,0 @@ - - - - {#style_dlg.title} - - - - - - - - - - -
- - -
-
-
- {#style_dlg.text} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - - - -
  - - -
-
- -
- - - -
- - - - - - -
- -   - - -
-
- -
- - - - - -
 
-
{#style_dlg.text_decoration} - - - - - - - - - - - - - - - - - - - - - -
-
-
-
- -
-
- {#style_dlg.background} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - -
 
-
- - - - -
 
-
- - - - - - -
  - - -
-
- - - - - - -
  - - -
-
-
-
- -
-
- {#style_dlg.block} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - -
  - - -
-
- - - - - - -
  - - -
-
- - - - - - -
  - - - -
-
-
-
- -
-
- {#style_dlg.box} - - - - - - - - - - - - - - -
- - - - - - -
  - - -
-
   
- - - - - - -
  - - -
-
   
-
- -
-
- {#style_dlg.padding} - - - - - - - - - - - - - - - - - - - - - - -
 
- - - - - - -
  - - -
-
- - - - - - -
  - - -
-
- - - - - - -
  - - -
-
- - - - - - -
  - - -
-
-
-
- -
-
- {#style_dlg.margin} - - - - - - - - - - - - - - - - - - - - - - -
 
- - - - - - -
  - - -
-
- - - - - - -
  - - -
-
- - - - - - -
  - - -
-
- - - - - - -
  - - -
-
-
-
-
-
- -
-
- {#style_dlg.border} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  {#style_dlg.style} {#style_dlg.width} {#style_dlg.color}
      
{#style_dlg.top}   - - - - - - -
  - - -
-
  - - - - - -
 
-
{#style_dlg.right}   - - - - - - -
  - - -
-
  - - - - - -
 
-
{#style_dlg.bottom}   - - - - - - -
  - - -
-
  - - - - - -
 
-
{#style_dlg.left}   - - - - - - -
  - - -
-
  - - - - - -
 
-
-
-
- -
-
- {#style_dlg.list} - - - - - - - - - - - - - - - -
-
-
- -
-
- {#style_dlg.position} - - - - - - - - - - - - - - - - - - - - - -
   
- - - - - - -
  - - -
-
   
- - - - - - -
  - - -
-
   
-
- -
-
- {#style_dlg.placement} - - - - - - - - - - - - - - - - - - - - - - -
 
{#style_dlg.top} - - - - - - -
  - - -
-
{#style_dlg.right} - - - - - - -
  - - -
-
{#style_dlg.bottom} - - - - - - -
  - - -
-
{#style_dlg.left} - - - - - - -
  - - -
-
-
-
- -
-
- {#style_dlg.clip} - - - - - - - - - - - - - - - - - - - - - - -
 
{#style_dlg.top} - - - - - - -
  - - -
-
{#style_dlg.right} - - - - - - -
  - - -
-
{#style_dlg.bottom} - - - - - - -
  - - -
-
{#style_dlg.left} - - - - - - -
  - - -
-
-
-
-
-
-
- -
- - -
- -
- - - -
-
- -
-
-
- - - diff --git a/common/static/js/vendor/tiny_mce/plugins/style/readme.txt b/common/static/js/vendor/tiny_mce/plugins/style/readme.txt deleted file mode 100644 index 5bac30202e..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/style/readme.txt +++ /dev/null @@ -1,19 +0,0 @@ -Edit CSS Style plug-in notes -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Unlike WYSIWYG editor functionality that operates only on the selected text, -typically by inserting new HTML elements with the specified styles. -This plug-in operates on the HTML blocks surrounding the selected text. -No new HTML elements are created. - -This plug-in only operates on the surrounding blocks and not the nearest -parent node. This means that if a block encapsulates a node, -e.g

text

, then only the styles in the block are -recognized, not those in the span. - -When selecting text that includes multiple blocks at the same level (peers), -this plug-in accumulates the specified styles in all of the surrounding blocks -and populates the dialogue checkboxes accordingly. There is no differentiation -between styles set in all the blocks versus styles set in some of the blocks. - -When the [Update] or [Apply] buttons are pressed, the styles selected in the -checkboxes are applied to all blocks that surround the selected text. diff --git a/common/static/js/vendor/tiny_mce/plugins/tabfocus/editor_plugin.js b/common/static/js/vendor/tiny_mce/plugins/tabfocus/editor_plugin.js deleted file mode 100644 index 2c51291615..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/tabfocus/editor_plugin.js +++ /dev/null @@ -1 +0,0 @@ -(function(){var c=tinymce.DOM,a=tinymce.dom.Event,d=tinymce.each,b=tinymce.explode;tinymce.create("tinymce.plugins.TabFocusPlugin",{init:function(f,g){function e(i,j){if(j.keyCode===9){return a.cancel(j)}}function h(l,p){var j,m,o,n,k;function q(t){n=c.select(":input:enabled,*[tabindex]:not(iframe)");function s(v){return v.nodeName==="BODY"||(v.type!="hidden"&&!(v.style.display=="none")&&!(v.style.visibility=="hidden")&&s(v.parentNode))}function i(v){return v.attributes.tabIndex.specified||v.nodeName=="INPUT"||v.nodeName=="TEXTAREA"}function u(){return tinymce.isIE6||tinymce.isIE7}function r(v){return((!u()||i(v)))&&v.getAttribute("tabindex")!="-1"&&s(v)}d(n,function(w,v){if(w.id==l.id){j=v;return false}});if(t>0){for(m=j+1;m=0;m--){if(r(n[m])){return n[m]}}}return null}if(p.keyCode===9){k=b(l.getParam("tab_focus",l.getParam("tabfocus_elements",":prev,:next")));if(k.length==1){k[1]=k[0];k[0]=":prev"}if(p.shiftKey){if(k[0]==":prev"){n=q(-1)}else{n=c.get(k[0])}}else{if(k[1]==":next"){n=q(1)}else{n=c.get(k[1])}}if(n){if(n.id&&(l=tinymce.get(n.id||n.name))){l.focus()}else{window.setTimeout(function(){if(!tinymce.isWebKit){window.focus()}n.focus()},10)}return a.cancel(p)}}}f.onKeyUp.add(e);if(tinymce.isGecko){f.onKeyPress.add(h);f.onKeyDown.add(e)}else{f.onKeyDown.add(h)}},getInfo:function(){return{longname:"Tabfocus",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/tabfocus",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("tabfocus",tinymce.plugins.TabFocusPlugin)})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/tabfocus/editor_plugin_src.js b/common/static/js/vendor/tiny_mce/plugins/tabfocus/editor_plugin_src.js deleted file mode 100644 index 94f45320d6..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/tabfocus/editor_plugin_src.js +++ /dev/null @@ -1,122 +0,0 @@ -/** - * editor_plugin_src.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -(function() { - var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, explode = tinymce.explode; - - tinymce.create('tinymce.plugins.TabFocusPlugin', { - init : function(ed, url) { - function tabCancel(ed, e) { - if (e.keyCode === 9) - return Event.cancel(e); - } - - function tabHandler(ed, e) { - var x, i, f, el, v; - - function find(d) { - el = DOM.select(':input:enabled,*[tabindex]:not(iframe)'); - - function canSelectRecursive(e) { - return e.nodeName==="BODY" || (e.type != 'hidden' && - !(e.style.display == "none") && - !(e.style.visibility == "hidden") && canSelectRecursive(e.parentNode)); - } - function canSelectInOldIe(el) { - return el.attributes["tabIndex"].specified || el.nodeName == "INPUT" || el.nodeName == "TEXTAREA"; - } - function isOldIe() { - return tinymce.isIE6 || tinymce.isIE7; - } - function canSelect(el) { - return ((!isOldIe() || canSelectInOldIe(el))) && el.getAttribute("tabindex") != '-1' && canSelectRecursive(el); - } - - each(el, function(e, i) { - if (e.id == ed.id) { - x = i; - return false; - } - }); - if (d > 0) { - for (i = x + 1; i < el.length; i++) { - if (canSelect(el[i])) - return el[i]; - } - } else { - for (i = x - 1; i >= 0; i--) { - if (canSelect(el[i])) - return el[i]; - } - } - - return null; - } - - if (e.keyCode === 9) { - v = explode(ed.getParam('tab_focus', ed.getParam('tabfocus_elements', ':prev,:next'))); - - if (v.length == 1) { - v[1] = v[0]; - v[0] = ':prev'; - } - - // Find element to focus - if (e.shiftKey) { - if (v[0] == ':prev') - el = find(-1); - else - el = DOM.get(v[0]); - } else { - if (v[1] == ':next') - el = find(1); - else - el = DOM.get(v[1]); - } - - if (el) { - if (el.id && (ed = tinymce.get(el.id || el.name))) - ed.focus(); - else - window.setTimeout(function() { - if (!tinymce.isWebKit) - window.focus(); - el.focus(); - }, 10); - - return Event.cancel(e); - } - } - } - - ed.onKeyUp.add(tabCancel); - - if (tinymce.isGecko) { - ed.onKeyPress.add(tabHandler); - ed.onKeyDown.add(tabCancel); - } else - ed.onKeyDown.add(tabHandler); - - }, - - getInfo : function() { - return { - longname : 'Tabfocus', - author : 'Moxiecode Systems AB', - authorurl : 'http://tinymce.moxiecode.com', - infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/tabfocus', - version : tinymce.majorVersion + "." + tinymce.minorVersion - }; - } - }); - - // Register plugin - tinymce.PluginManager.add('tabfocus', tinymce.plugins.TabFocusPlugin); -})(); diff --git a/common/static/js/vendor/tiny_mce/plugins/tabfocus/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/tabfocus/plugin.min.js new file mode 100644 index 0000000000..68fe35e35a --- /dev/null +++ b/common/static/js/vendor/tiny_mce/plugins/tabfocus/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("tabfocus",function(e){function n(e){9!==e.keyCode||e.ctrlKey||e.altKey||e.metaKey||e.preventDefault()}function t(n){function t(n){function t(e){return"BODY"===e.nodeName||"hidden"!=e.type&&"none"!=e.style.display&&"hidden"!=e.style.visibility&&t(e.parentNode)}function r(e){return e.tabIndex||"INPUT"==e.nodeName||"TEXTAREA"==e.nodeName}function c(e){return!r(e)&&"-1"!=e.getAttribute("tabindex")&&t(e)}if(u=i.select(":input:enabled,*[tabindex]:not(iframe)"),o(u,function(n,t){return n.id==e.id?(a=t,!1):void 0}),n>0){for(d=a+1;d=0;d--)if(c(u[d]))return u[d];return null}var a,u,c,d;if(!(9!==n.keyCode||n.ctrlKey||n.altKey||n.metaKey)&&(c=r(e.getParam("tab_focus",e.getParam("tabfocus_elements",":prev,:next"))),1==c.length&&(c[1]=c[0],c[0]=":prev"),u=n.shiftKey?":prev"==c[0]?t(-1):i.get(c[0]):":next"==c[1]?t(1):i.get(c[1]))){var y=tinymce.get(u.id||u.name);u.id&&y?y.focus():window.setTimeout(function(){tinymce.Env.webkit||window.focus(),u.focus()},10),n.preventDefault()}}var i=tinymce.DOM,o=tinymce.each,r=tinymce.explode;e.on("init",function(){e.inline&&tinymce.DOM.setAttrib(e.getBody(),"tabIndex",null)}),e.on("keyup",n),tinymce.Env.gecko?e.on("keypress keydown",t):e.on("keydown",t)}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/table/cell.htm b/common/static/js/vendor/tiny_mce/plugins/table/cell.htm deleted file mode 100644 index 2922f7a2dd..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/table/cell.htm +++ /dev/null @@ -1,180 +0,0 @@ - - - - {#table_dlg.cell_title} - - - - - - - - - -
- - -
-
-
- {#table_dlg.general_props} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - -
- -
-
-
- -
-
- {#table_dlg.advanced_props} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
- - - - - -
 
-
- - - - - -
 
-
- - - - - -
 
-
-
-
-
- -
-
- -
- - - -
-
- - diff --git a/common/static/js/vendor/tiny_mce/plugins/table/css/cell.css b/common/static/js/vendor/tiny_mce/plugins/table/css/cell.css deleted file mode 100644 index a47cc1a1ef..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/table/css/cell.css +++ /dev/null @@ -1,17 +0,0 @@ -/* CSS file for cell dialog in the table plugin */ - -.panel_wrapper div.current { - height: 200px; -} - -.advfield { - width: 200px; -} - -#action { - margin-bottom: 3px; -} - -#class { - width: 150px; -} \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/table/css/row.css b/common/static/js/vendor/tiny_mce/plugins/table/css/row.css deleted file mode 100644 index 0e397db3e2..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/table/css/row.css +++ /dev/null @@ -1,25 +0,0 @@ -/* CSS file for row dialog in the table plugin */ - -.panel_wrapper div.current { - height: 200px; -} - -.advfield { - width: 200px; -} - -#action { - margin-bottom: 3px; -} - -#rowtype,#align,#valign,#class,#height { - width: 150px; -} - -#height { - width: 50px; -} - -.col2 { - padding-left: 20px; -} diff --git a/common/static/js/vendor/tiny_mce/plugins/table/css/table.css b/common/static/js/vendor/tiny_mce/plugins/table/css/table.css deleted file mode 100644 index 8f107831ef..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/table/css/table.css +++ /dev/null @@ -1,13 +0,0 @@ -/* CSS file for table dialog in the table plugin */ - -.panel_wrapper div.current { - height: 245px; -} - -.advfield { - width: 200px; -} - -#class { - width: 150px; -} diff --git a/common/static/js/vendor/tiny_mce/plugins/table/editor_plugin.js b/common/static/js/vendor/tiny_mce/plugins/table/editor_plugin.js deleted file mode 100644 index 4a35a5ef93..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/table/editor_plugin.js +++ /dev/null @@ -1 +0,0 @@ -(function(d){var e=d.each;function c(g,h){var j=h.ownerDocument,f=j.createRange(),k;f.setStartBefore(h);f.setEnd(g.endContainer,g.endOffset);k=j.createElement("body");k.appendChild(f.cloneContents());return k.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi,"-").replace(/<[^>]+>/g,"").length==0}function a(g,f){return parseInt(g.getAttribute(f)||1)}function b(H,G,K){var g,L,D,o;t();o=G.getParent(K.getStart(),"th,td");if(o){L=F(o);D=I();o=z(L.x,L.y)}function A(N,M){N=N.cloneNode(M);N.removeAttribute("id");return N}function t(){var M=0;g=[];e(["thead","tbody","tfoot"],function(N){var O=G.select("> "+N+" tr",H);e(O,function(P,Q){Q+=M;e(G.select("> td, > th",P),function(W,R){var S,T,U,V;if(g[Q]){while(g[Q][R]){R++}}U=a(W,"rowspan");V=a(W,"colspan");for(T=Q;T'}return false}},"childNodes");M=A(M,false);s(M,"rowSpan",1);s(M,"colSpan",1);if(N){M.appendChild(N)}else{if(!d.isIE){M.innerHTML='
'}}return M}function q(){var M=G.createRng();e(G.select("tr",H),function(N){if(N.cells.length==0){G.remove(N)}});if(G.select("tr",H).length==0){M.setStartAfter(H);M.setEndAfter(H);K.setRng(M);G.remove(H);return}e(G.select("thead,tbody,tfoot",H),function(N){if(N.rows.length==0){G.remove(N)}});t();row=g[Math.min(g.length-1,L.y)];if(row){K.select(row[Math.min(row.length-1,L.x)].elm,true);K.collapse(true)}}function u(S,Q,U,R){var P,N,M,O,T;P=g[Q][S].elm.parentNode;for(M=1;M<=U;M++){P=G.getNext(P,"tr");if(P){for(N=S;N>=0;N--){T=g[Q+M][N].elm;if(T.parentNode==P){for(O=1;O<=R;O++){G.insertAfter(f(T),T)}break}}if(N==-1){for(O=1;O<=R;O++){P.insertBefore(f(P.cells[0]),P.cells[0])}}}}}function C(){e(g,function(M,N){e(M,function(P,O){var S,R,T,Q;if(j(P)){P=P.elm;S=a(P,"colspan");R=a(P,"rowspan");if(S>1||R>1){s(P,"rowSpan",1);s(P,"colSpan",1);for(Q=0;Q1){s(S,"rowSpan",O+1);continue}}else{if(M>0&&g[M-1][R]){V=g[M-1][R].elm;O=a(V,"rowSpan");if(O>1){s(V,"rowSpan",O+1);continue}}}N=f(S);s(N,"colSpan",S.colSpan);U.appendChild(N);P=S}}if(U.hasChildNodes()){if(!Q){G.insertAfter(U,T)}else{T.parentNode.insertBefore(U,T)}}}function h(N){var O,M;e(g,function(P,Q){e(P,function(S,R){if(j(S)){O=R;if(N){return false}}});if(N){return !O}});e(g,function(S,T){var P,Q,R;if(!S[O]){return}P=S[O].elm;if(P!=M){R=a(P,"colspan");Q=a(P,"rowspan");if(R==1){if(!N){G.insertAfter(f(P),P);u(O,T,Q-1,R)}else{P.parentNode.insertBefore(f(P),P);u(O,T,Q-1,R)}}else{s(P,"colSpan",P.colSpan+1)}M=P}})}function n(){var M=[];e(g,function(N,O){e(N,function(Q,P){if(j(Q)&&d.inArray(M,P)===-1){e(g,function(T){var R=T[P].elm,S;S=a(R,"colSpan");if(S>1){s(R,"colSpan",S-1)}else{G.remove(R)}});M.push(P)}})});q()}function m(){var N;function M(Q){var P,R,O;P=G.getNext(Q,"tr");e(Q.cells,function(S){var T=a(S,"rowSpan");if(T>1){s(S,"rowSpan",T-1);R=F(S);u(R.x,R.y,1,1)}});R=F(Q.cells[0]);e(g[R.y],function(S){var T;S=S.elm;if(S!=O){T=a(S,"rowSpan");if(T<=1){G.remove(S)}else{s(S,"rowSpan",T-1)}O=S}})}N=k();e(N.reverse(),function(O){M(O)});q()}function E(){var M=k();G.remove(M);q();return M}function J(){var M=k();e(M,function(O,N){M[N]=A(O,true)});return M}function B(O,N){if(!O){return}var P=k(),M=P[N?0:P.length-1],Q=M.cells.length;e(g,function(S){var R;Q=0;e(S,function(U,T){if(U.real){Q+=U.colspan}if(U.elm.parentNode==M){R=1}});if(R){return false}});if(!N){O.reverse()}e(O,function(T){var S=T.cells.length,R;for(i=0;iN){N=R}if(Q>M){M=Q}if(S.real){U=S.colspan-1;T=S.rowspan-1;if(U){if(R+U>N){N=R+U}}if(T){if(Q+T>M){M=Q+T}}}}})});return{x:N,y:M}}function v(S){var P,O,U,T,N,M,Q,R;D=F(S);if(L&&D){P=Math.min(L.x,D.x);O=Math.min(L.y,D.y);U=Math.max(L.x,D.x);T=Math.max(L.y,D.y);N=U;M=T;for(y=O;y<=M;y++){S=g[y][P];if(!S.real){if(P-(S.colspan-1)N){N=x+Q}}if(R){if(y+R>M){M=y+R}}}}}G.removeClass(G.select("td.mceSelected,th.mceSelected"),"mceSelected");for(y=O;y<=M;y++){for(x=P;x<=N;x++){if(g[y][x]){G.addClass(g[y][x].elm,"mceSelected")}}}}}d.extend(this,{deleteTable:r,split:C,merge:p,insertRow:l,insertCol:h,deleteCols:n,deleteRows:m,cutRows:E,copyRows:J,pasteRows:B,getPos:F,setStartCell:w,setEndCell:v})}d.create("tinymce.plugins.TablePlugin",{init:function(g,h){var f,m,j=true;function l(p){var o=g.selection,n=g.dom.getParent(p||o.getNode(),"table");if(n){return new b(n,g.dom,o)}}function k(){g.getBody().style.webkitUserSelect="";if(j){g.dom.removeClass(g.dom.select("td.mceSelected,th.mceSelected"),"mceSelected");j=false}}e([["table","table.desc","mceInsertTable",true],["delete_table","table.del","mceTableDelete"],["delete_col","table.delete_col_desc","mceTableDeleteCol"],["delete_row","table.delete_row_desc","mceTableDeleteRow"],["col_after","table.col_after_desc","mceTableInsertColAfter"],["col_before","table.col_before_desc","mceTableInsertColBefore"],["row_after","table.row_after_desc","mceTableInsertRowAfter"],["row_before","table.row_before_desc","mceTableInsertRowBefore"],["row_props","table.row_desc","mceTableRowProps",true],["cell_props","table.cell_desc","mceTableCellProps",true],["split_cells","table.split_cells_desc","mceTableSplitCells",true],["merge_cells","table.merge_cells_desc","mceTableMergeCells",true]],function(n){g.addButton(n[0],{title:n[1],cmd:n[2],ui:n[3]})});if(!d.isIE){g.onClick.add(function(n,o){o=o.target;if(o.nodeName==="TABLE"){n.selection.select(o);n.nodeChanged()}})}g.onPreProcess.add(function(o,p){var n,q,r,t=o.dom,s;n=t.select("table",p.node);q=n.length;while(q--){r=n[q];t.setAttrib(r,"data-mce-style","");if((s=t.getAttrib(r,"width"))){t.setStyle(r,"width",s);t.setAttrib(r,"width","")}if((s=t.getAttrib(r,"height"))){t.setStyle(r,"height",s);t.setAttrib(r,"height","")}}});g.onNodeChange.add(function(q,o,s){var r;s=q.selection.getStart();r=q.dom.getParent(s,"td,th,caption");o.setActive("table",s.nodeName==="TABLE"||!!r);if(r&&r.nodeName==="CAPTION"){r=0}o.setDisabled("delete_table",!r);o.setDisabled("delete_col",!r);o.setDisabled("delete_table",!r);o.setDisabled("delete_row",!r);o.setDisabled("col_after",!r);o.setDisabled("col_before",!r);o.setDisabled("row_after",!r);o.setDisabled("row_before",!r);o.setDisabled("row_props",!r);o.setDisabled("cell_props",!r);o.setDisabled("split_cells",!r);o.setDisabled("merge_cells",!r)});g.onInit.add(function(r){var p,t,q=r.dom,u;f=r.windowManager;r.onMouseDown.add(function(w,z){if(z.button!=2){k();t=q.getParent(z.target,"td,th");p=q.getParent(t,"table")}});q.bind(r.getDoc(),"mouseover",function(C){var A,z,B=C.target;if(t&&(u||B!=t)&&(B.nodeName=="TD"||B.nodeName=="TH")){z=q.getParent(B,"table");if(z==p){if(!u){u=l(z);u.setStartCell(t);r.getBody().style.webkitUserSelect="none"}u.setEndCell(B);j=true}A=r.selection.getSel();try{if(A.removeAllRanges){A.removeAllRanges()}else{A.empty()}}catch(w){}C.preventDefault()}});r.onMouseUp.add(function(F,G){var z,B=F.selection,H,I=B.getSel(),w,C,A,E;if(t){if(u){F.getBody().style.webkitUserSelect=""}function D(J,L){var K=new d.dom.TreeWalker(J,J);do{if(J.nodeType==3&&d.trim(J.nodeValue).length!=0){if(L){z.setStart(J,0)}else{z.setEnd(J,J.nodeValue.length)}return}if(J.nodeName=="BR"){if(L){z.setStartBefore(J)}else{z.setEndBefore(J)}return}}while(J=(L?K.next():K.prev()))}H=q.select("td.mceSelected,th.mceSelected");if(H.length>0){z=q.createRng();C=H[0];E=H[H.length-1];z.setStartBefore(C);z.setEndAfter(C);D(C,1);w=new d.dom.TreeWalker(C,q.getParent(H[0],"table"));do{if(C.nodeName=="TD"||C.nodeName=="TH"){if(!q.hasClass(C,"mceSelected")){break}A=C}}while(C=w.next());D(A);B.setRng(z)}F.nodeChanged();t=u=p=null}});r.onKeyUp.add(function(w,z){k()});r.onKeyDown.add(function(w,z){n(w)});r.onMouseDown.add(function(w,z){if(z.button!=2){n(w)}});function o(D,z,A,F){var B=3,G=D.dom.getParent(z.startContainer,"TABLE"),C,w,E;if(G){C=G.parentNode}w=z.startContainer.nodeType==B&&z.startOffset==0&&z.endOffset==0&&F&&(A.nodeName=="TR"||A==C);E=(A.nodeName=="TD"||A.nodeName=="TH")&&!F;return w||E}function n(A){if(!d.isWebKit){return}var z=A.selection.getRng();var C=A.selection.getNode();var B=A.dom.getParent(z.startContainer,"TD,TH");if(!o(A,z,C,B)){return}if(!B){B=C}var w=B.lastChild;while(w.lastChild){w=w.lastChild}z.setEnd(w,w.nodeValue.length);A.selection.setRng(z)}r.plugins.table.fixTableCellSelection=n;if(r&&r.plugins.contextmenu){r.plugins.contextmenu.onContextMenu.add(function(A,w,C){var D,B=r.selection,z=B.getNode()||r.getBody();if(r.dom.getParent(C,"td")||r.dom.getParent(C,"th")||r.dom.select("td.mceSelected,th.mceSelected").length){w.removeAll();if(z.nodeName=="A"&&!r.dom.getAttrib(z,"name")){w.add({title:"advanced.link_desc",icon:"link",cmd:r.plugins.advlink?"mceAdvLink":"mceLink",ui:true});w.add({title:"advanced.unlink_desc",icon:"unlink",cmd:"UnLink"});w.addSeparator()}if(z.nodeName=="IMG"&&z.className.indexOf("mceItem")==-1){w.add({title:"advanced.image_desc",icon:"image",cmd:r.plugins.advimage?"mceAdvImage":"mceImage",ui:true});w.addSeparator()}w.add({title:"table.desc",icon:"table",cmd:"mceInsertTable",value:{action:"insert"}});w.add({title:"table.props_desc",icon:"table_props",cmd:"mceInsertTable"});w.add({title:"table.del",icon:"delete_table",cmd:"mceTableDelete"});w.addSeparator();D=w.addMenu({title:"table.cell"});D.add({title:"table.cell_desc",icon:"cell_props",cmd:"mceTableCellProps"});D.add({title:"table.split_cells_desc",icon:"split_cells",cmd:"mceTableSplitCells"});D.add({title:"table.merge_cells_desc",icon:"merge_cells",cmd:"mceTableMergeCells"});D=w.addMenu({title:"table.row"});D.add({title:"table.row_desc",icon:"row_props",cmd:"mceTableRowProps"});D.add({title:"table.row_before_desc",icon:"row_before",cmd:"mceTableInsertRowBefore"});D.add({title:"table.row_after_desc",icon:"row_after",cmd:"mceTableInsertRowAfter"});D.add({title:"table.delete_row_desc",icon:"delete_row",cmd:"mceTableDeleteRow"});D.addSeparator();D.add({title:"table.cut_row_desc",icon:"cut",cmd:"mceTableCutRow"});D.add({title:"table.copy_row_desc",icon:"copy",cmd:"mceTableCopyRow"});D.add({title:"table.paste_row_before_desc",icon:"paste",cmd:"mceTablePasteRowBefore"}).setDisabled(!m);D.add({title:"table.paste_row_after_desc",icon:"paste",cmd:"mceTablePasteRowAfter"}).setDisabled(!m);D=w.addMenu({title:"table.col"});D.add({title:"table.col_before_desc",icon:"col_before",cmd:"mceTableInsertColBefore"});D.add({title:"table.col_after_desc",icon:"col_after",cmd:"mceTableInsertColAfter"});D.add({title:"table.delete_col_desc",icon:"delete_col",cmd:"mceTableDeleteCol"})}else{w.add({title:"table.desc",icon:"table",cmd:"mceInsertTable"})}})}if(d.isWebKit){function v(C,N){var L=d.VK;var Q=N.keyCode;function O(Y,U,S){var T=Y?"previousSibling":"nextSibling";var Z=C.dom.getParent(U,"tr");var X=Z[T];if(X){z(C,U,X,Y);d.dom.Event.cancel(S);return true}else{var aa=C.dom.getParent(Z,"table");var W=Z.parentNode;var R=W.nodeName.toLowerCase();if(R==="tbody"||R===(Y?"tfoot":"thead")){var V=w(Y,aa,W,"tbody");if(V!==null){return K(Y,V,U,S)}}return M(Y,Z,T,aa,S)}}function w(V,T,U,X){var S=C.dom.select(">"+X,T);var R=S.indexOf(U);if(V&&R===0||!V&&R===S.length-1){return B(V,T)}else{if(R===-1){var W=U.tagName.toLowerCase()==="thead"?0:S.length-1;return S[W]}else{return S[R+(V?-1:1)]}}}function B(U,T){var S=U?"thead":"tfoot";var R=C.dom.select(">"+S,T);return R.length!==0?R[0]:null}function K(V,T,S,U){var R=J(T,V);R&&z(C,S,R,V);d.dom.Event.cancel(U);return true}function M(Y,U,R,X,W){var S=X[R];if(S){F(S);return true}else{var V=C.dom.getParent(X,"td,th");if(V){return O(Y,V,W)}else{var T=J(U,!Y);F(T);return d.dom.Event.cancel(W)}}}function J(S,R){var T=S&&S[R?"lastChild":"firstChild"];return T&&T.nodeName==="BR"?C.dom.getParent(T,"td,th"):T}function F(R){C.selection.setCursorLocation(R,0)}function A(){return Q==L.UP||Q==L.DOWN}function D(R){var T=R.selection.getNode();var S=R.dom.getParent(T,"tr");return S!==null}function P(S){var R=0;var T=S;while(T.previousSibling){T=T.previousSibling;R=R+a(T,"colspan")}return R}function E(T,R){var U=0;var S=0;e(T.children,function(V,W){U=U+a(V,"colspan");S=W;if(U>R){return false}});return S}function z(T,W,Y,V){var X=P(T.dom.getParent(W,"td,th"));var S=E(Y,X);var R=Y.childNodes[S];var U=J(R,V);F(U||R)}function H(R){var T=C.selection.getNode();var U=C.dom.getParent(T,"td,th");var S=C.dom.getParent(R,"td,th");return U&&U!==S&&I(U,S)}function I(S,R){return C.dom.getParent(S,"TABLE")===C.dom.getParent(R,"TABLE")}if(A()&&D(C)){var G=C.selection.getNode();setTimeout(function(){if(H(G)){O(!N.shiftKey&&Q===L.UP,G,N)}},0)}}r.onKeyDown.add(v)}function s(){var w;for(w=r.getBody().lastChild;w&&w.nodeType==3&&!w.nodeValue.length;w=w.previousSibling){}if(w&&w.nodeName=="TABLE"){if(r.settings.forced_root_block){r.dom.add(r.getBody(),r.settings.forced_root_block,null,d.isIE?" ":'
')}else{r.dom.add(r.getBody(),"br",{"data-mce-bogus":"1"})}}}if(d.isGecko){r.onKeyDown.add(function(z,B){var w,A,C=z.dom;if(B.keyCode==37||B.keyCode==38){w=z.selection.getRng();A=C.getParent(w.startContainer,"table");if(A&&z.getBody().firstChild==A){if(c(w,A)){w=C.createRng();w.setStartBefore(A);w.setEndBefore(A);z.selection.setRng(w);B.preventDefault()}}}})}r.onKeyUp.add(s);r.onSetContent.add(s);r.onVisualAid.add(s);r.onPreProcess.add(function(w,A){var z=A.node.lastChild;if(z&&(z.nodeName=="BR"||(z.childNodes.length==1&&(z.firstChild.nodeName=="BR"||z.firstChild.nodeValue=="\u00a0")))&&z.previousSibling&&z.previousSibling.nodeName=="TABLE"){w.dom.remove(z)}});s();r.startContent=r.getContent({format:"raw"})});e({mceTableSplitCells:function(n){n.split()},mceTableMergeCells:function(o){var p,q,n;n=g.dom.getParent(g.selection.getNode(),"th,td");if(n){p=n.rowSpan;q=n.colSpan}if(!g.dom.select("td.mceSelected,th.mceSelected").length){f.open({url:h+"/merge_cells.htm",width:240+parseInt(g.getLang("table.merge_cells_delta_width",0)),height:110+parseInt(g.getLang("table.merge_cells_delta_height",0)),inline:1},{rows:p,cols:q,onaction:function(r){o.merge(n,r.cols,r.rows)},plugin_url:h})}else{o.merge()}},mceTableInsertRowBefore:function(n){n.insertRow(true)},mceTableInsertRowAfter:function(n){n.insertRow()},mceTableInsertColBefore:function(n){n.insertCol(true)},mceTableInsertColAfter:function(n){n.insertCol()},mceTableDeleteCol:function(n){n.deleteCols()},mceTableDeleteRow:function(n){n.deleteRows()},mceTableCutRow:function(n){m=n.cutRows()},mceTableCopyRow:function(n){m=n.copyRows()},mceTablePasteRowBefore:function(n){n.pasteRows(m,true)},mceTablePasteRowAfter:function(n){n.pasteRows(m)},mceTableDelete:function(n){n.deleteTable()}},function(o,n){g.addCommand(n,function(){var p=l();if(p){o(p);g.execCommand("mceRepaint");k()}})});e({mceInsertTable:function(n){f.open({url:h+"/table.htm",width:400+parseInt(g.getLang("table.table_delta_width",0)),height:320+parseInt(g.getLang("table.table_delta_height",0)),inline:1},{plugin_url:h,action:n?n.action:0})},mceTableRowProps:function(){f.open({url:h+"/row.htm",width:400+parseInt(g.getLang("table.rowprops_delta_width",0)),height:295+parseInt(g.getLang("table.rowprops_delta_height",0)),inline:1},{plugin_url:h})},mceTableCellProps:function(){f.open({url:h+"/cell.htm",width:400+parseInt(g.getLang("table.cellprops_delta_width",0)),height:295+parseInt(g.getLang("table.cellprops_delta_height",0)),inline:1},{plugin_url:h})}},function(o,n){g.addCommand(n,function(p,q){o(q)})})}});d.PluginManager.add("table",d.plugins.TablePlugin)})(tinymce); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/table/editor_plugin_src.js b/common/static/js/vendor/tiny_mce/plugins/table/editor_plugin_src.js deleted file mode 100644 index 532b79c6fa..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/table/editor_plugin_src.js +++ /dev/null @@ -1,1456 +0,0 @@ -/** - * editor_plugin_src.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -(function(tinymce) { - var each = tinymce.each; - - // Checks if the selection/caret is at the start of the specified block element - function isAtStart(rng, par) { - var doc = par.ownerDocument, rng2 = doc.createRange(), elm; - - rng2.setStartBefore(par); - rng2.setEnd(rng.endContainer, rng.endOffset); - - elm = doc.createElement('body'); - elm.appendChild(rng2.cloneContents()); - - // Check for text characters of other elements that should be treated as content - return elm.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi, '-').replace(/<[^>]+>/g, '').length == 0; - }; - - function getSpanVal(td, name) { - return parseInt(td.getAttribute(name) || 1); - } - - /** - * Table Grid class. - */ - function TableGrid(table, dom, selection) { - var grid, startPos, endPos, selectedCell; - - buildGrid(); - selectedCell = dom.getParent(selection.getStart(), 'th,td'); - if (selectedCell) { - startPos = getPos(selectedCell); - endPos = findEndPos(); - selectedCell = getCell(startPos.x, startPos.y); - } - - function cloneNode(node, children) { - node = node.cloneNode(children); - node.removeAttribute('id'); - - return node; - } - - function buildGrid() { - var startY = 0; - - grid = []; - - each(['thead', 'tbody', 'tfoot'], function(part) { - var rows = dom.select('> ' + part + ' tr', table); - - each(rows, function(tr, y) { - y += startY; - - each(dom.select('> td, > th', tr), function(td, x) { - var x2, y2, rowspan, colspan; - - // Skip over existing cells produced by rowspan - if (grid[y]) { - while (grid[y][x]) - x++; - } - - // Get col/rowspan from cell - rowspan = getSpanVal(td, 'rowspan'); - colspan = getSpanVal(td, 'colspan'); - - // Fill out rowspan/colspan right and down - for (y2 = y; y2 < y + rowspan; y2++) { - if (!grid[y2]) - grid[y2] = []; - - for (x2 = x; x2 < x + colspan; x2++) { - grid[y2][x2] = { - part : part, - real : y2 == y && x2 == x, - elm : td, - rowspan : rowspan, - colspan : colspan - }; - } - } - }); - }); - - startY += rows.length; - }); - }; - - function getCell(x, y) { - var row; - - row = grid[y]; - if (row) - return row[x]; - }; - - function setSpanVal(td, name, val) { - if (td) { - val = parseInt(val); - - if (val === 1) - td.removeAttribute(name, 1); - else - td.setAttribute(name, val, 1); - } - } - - function isCellSelected(cell) { - return cell && (dom.hasClass(cell.elm, 'mceSelected') || cell == selectedCell); - }; - - function getSelectedRows() { - var rows = []; - - each(table.rows, function(row) { - each(row.cells, function(cell) { - if (dom.hasClass(cell, 'mceSelected') || cell == selectedCell.elm) { - rows.push(row); - return false; - } - }); - }); - - return rows; - }; - - function deleteTable() { - var rng = dom.createRng(); - - rng.setStartAfter(table); - rng.setEndAfter(table); - - selection.setRng(rng); - - dom.remove(table); - }; - - function cloneCell(cell) { - var formatNode; - - // Clone formats - tinymce.walk(cell, function(node) { - var curNode; - - if (node.nodeType == 3) { - each(dom.getParents(node.parentNode, null, cell).reverse(), function(node) { - node = cloneNode(node, false); - - if (!formatNode) - formatNode = curNode = node; - else if (curNode) - curNode.appendChild(node); - - curNode = node; - }); - - // Add something to the inner node - if (curNode) - curNode.innerHTML = tinymce.isIE ? ' ' : '
'; - - return false; - } - }, 'childNodes'); - - cell = cloneNode(cell, false); - setSpanVal(cell, 'rowSpan', 1); - setSpanVal(cell, 'colSpan', 1); - - if (formatNode) { - cell.appendChild(formatNode); - } else { - if (!tinymce.isIE) - cell.innerHTML = '
'; - } - - return cell; - }; - - function cleanup() { - var rng = dom.createRng(); - - // Empty rows - each(dom.select('tr', table), function(tr) { - if (tr.cells.length == 0) - dom.remove(tr); - }); - - // Empty table - if (dom.select('tr', table).length == 0) { - rng.setStartAfter(table); - rng.setEndAfter(table); - selection.setRng(rng); - dom.remove(table); - return; - } - - // Empty header/body/footer - each(dom.select('thead,tbody,tfoot', table), function(part) { - if (part.rows.length == 0) - dom.remove(part); - }); - - // Restore selection to start position if it still exists - buildGrid(); - - // Restore the selection to the closest table position - row = grid[Math.min(grid.length - 1, startPos.y)]; - if (row) { - selection.select(row[Math.min(row.length - 1, startPos.x)].elm, true); - selection.collapse(true); - } - }; - - function fillLeftDown(x, y, rows, cols) { - var tr, x2, r, c, cell; - - tr = grid[y][x].elm.parentNode; - for (r = 1; r <= rows; r++) { - tr = dom.getNext(tr, 'tr'); - - if (tr) { - // Loop left to find real cell - for (x2 = x; x2 >= 0; x2--) { - cell = grid[y + r][x2].elm; - - if (cell.parentNode == tr) { - // Append clones after - for (c = 1; c <= cols; c++) - dom.insertAfter(cloneCell(cell), cell); - - break; - } - } - - if (x2 == -1) { - // Insert nodes before first cell - for (c = 1; c <= cols; c++) - tr.insertBefore(cloneCell(tr.cells[0]), tr.cells[0]); - } - } - } - }; - - function split() { - each(grid, function(row, y) { - each(row, function(cell, x) { - var colSpan, rowSpan, newCell, i; - - if (isCellSelected(cell)) { - cell = cell.elm; - colSpan = getSpanVal(cell, 'colspan'); - rowSpan = getSpanVal(cell, 'rowspan'); - - if (colSpan > 1 || rowSpan > 1) { - setSpanVal(cell, 'rowSpan', 1); - setSpanVal(cell, 'colSpan', 1); - - // Insert cells right - for (i = 0; i < colSpan - 1; i++) - dom.insertAfter(cloneCell(cell), cell); - - fillLeftDown(x, y, rowSpan - 1, colSpan); - } - } - }); - }); - }; - - function merge(cell, cols, rows) { - var startX, startY, endX, endY, x, y, startCell, endCell, cell, children, count; - - // Use specified cell and cols/rows - if (cell) { - pos = getPos(cell); - startX = pos.x; - startY = pos.y; - endX = startX + (cols - 1); - endY = startY + (rows - 1); - } else { - startPos = endPos = null; - - // Calculate start/end pos by checking for selected cells in grid works better with context menu - each(grid, function(row, y) { - each(row, function(cell, x) { - if (isCellSelected(cell)) { - if (!startPos) { - startPos = {x: x, y: y}; - } - - endPos = {x: x, y: y}; - } - }); - }); - - // Use selection - startX = startPos.x; - startY = startPos.y; - endX = endPos.x; - endY = endPos.y; - } - - // Find start/end cells - startCell = getCell(startX, startY); - endCell = getCell(endX, endY); - - // Check if the cells exists and if they are of the same part for example tbody = tbody - if (startCell && endCell && startCell.part == endCell.part) { - // Split and rebuild grid - split(); - buildGrid(); - - // Set row/col span to start cell - startCell = getCell(startX, startY).elm; - setSpanVal(startCell, 'colSpan', (endX - startX) + 1); - setSpanVal(startCell, 'rowSpan', (endY - startY) + 1); - - // Remove other cells and add it's contents to the start cell - for (y = startY; y <= endY; y++) { - for (x = startX; x <= endX; x++) { - if (!grid[y] || !grid[y][x]) - continue; - - cell = grid[y][x].elm; - - if (cell != startCell) { - // Move children to startCell - children = tinymce.grep(cell.childNodes); - each(children, function(node) { - startCell.appendChild(node); - }); - - // Remove bogus nodes if there is children in the target cell - if (children.length) { - children = tinymce.grep(startCell.childNodes); - count = 0; - each(children, function(node) { - if (node.nodeName == 'BR' && dom.getAttrib(node, 'data-mce-bogus') && count++ < children.length - 1) - startCell.removeChild(node); - }); - } - - // Remove cell - dom.remove(cell); - } - } - } - - // Remove empty rows etc and restore caret location - cleanup(); - } - }; - - function insertRow(before) { - var posY, cell, lastCell, x, rowElm, newRow, newCell, otherCell, rowSpan; - - // Find first/last row - each(grid, function(row, y) { - each(row, function(cell, x) { - if (isCellSelected(cell)) { - cell = cell.elm; - rowElm = cell.parentNode; - newRow = cloneNode(rowElm, false); - posY = y; - - if (before) - return false; - } - }); - - if (before) - return !posY; - }); - - for (x = 0; x < grid[0].length; x++) { - // Cell not found could be because of an invalid table structure - if (!grid[posY][x]) - continue; - - cell = grid[posY][x].elm; - - if (cell != lastCell) { - if (!before) { - rowSpan = getSpanVal(cell, 'rowspan'); - if (rowSpan > 1) { - setSpanVal(cell, 'rowSpan', rowSpan + 1); - continue; - } - } else { - // Check if cell above can be expanded - if (posY > 0 && grid[posY - 1][x]) { - otherCell = grid[posY - 1][x].elm; - rowSpan = getSpanVal(otherCell, 'rowSpan'); - if (rowSpan > 1) { - setSpanVal(otherCell, 'rowSpan', rowSpan + 1); - continue; - } - } - } - - // Insert new cell into new row - newCell = cloneCell(cell); - setSpanVal(newCell, 'colSpan', cell.colSpan); - - newRow.appendChild(newCell); - - lastCell = cell; - } - } - - if (newRow.hasChildNodes()) { - if (!before) - dom.insertAfter(newRow, rowElm); - else - rowElm.parentNode.insertBefore(newRow, rowElm); - } - }; - - function insertCol(before) { - var posX, lastCell; - - // Find first/last column - each(grid, function(row, y) { - each(row, function(cell, x) { - if (isCellSelected(cell)) { - posX = x; - - if (before) - return false; - } - }); - - if (before) - return !posX; - }); - - each(grid, function(row, y) { - var cell, rowSpan, colSpan; - - if (!row[posX]) - return; - - cell = row[posX].elm; - if (cell != lastCell) { - colSpan = getSpanVal(cell, 'colspan'); - rowSpan = getSpanVal(cell, 'rowspan'); - - if (colSpan == 1) { - if (!before) { - dom.insertAfter(cloneCell(cell), cell); - fillLeftDown(posX, y, rowSpan - 1, colSpan); - } else { - cell.parentNode.insertBefore(cloneCell(cell), cell); - fillLeftDown(posX, y, rowSpan - 1, colSpan); - } - } else - setSpanVal(cell, 'colSpan', cell.colSpan + 1); - - lastCell = cell; - } - }); - }; - - function deleteCols() { - var cols = []; - - // Get selected column indexes - each(grid, function(row, y) { - each(row, function(cell, x) { - if (isCellSelected(cell) && tinymce.inArray(cols, x) === -1) { - each(grid, function(row) { - var cell = row[x].elm, colSpan; - - colSpan = getSpanVal(cell, 'colSpan'); - - if (colSpan > 1) - setSpanVal(cell, 'colSpan', colSpan - 1); - else - dom.remove(cell); - }); - - cols.push(x); - } - }); - }); - - cleanup(); - }; - - function deleteRows() { - var rows; - - function deleteRow(tr) { - var nextTr, pos, lastCell; - - nextTr = dom.getNext(tr, 'tr'); - - // Move down row spanned cells - each(tr.cells, function(cell) { - var rowSpan = getSpanVal(cell, 'rowSpan'); - - if (rowSpan > 1) { - setSpanVal(cell, 'rowSpan', rowSpan - 1); - pos = getPos(cell); - fillLeftDown(pos.x, pos.y, 1, 1); - } - }); - - // Delete cells - pos = getPos(tr.cells[0]); - each(grid[pos.y], function(cell) { - var rowSpan; - - cell = cell.elm; - - if (cell != lastCell) { - rowSpan = getSpanVal(cell, 'rowSpan'); - - if (rowSpan <= 1) - dom.remove(cell); - else - setSpanVal(cell, 'rowSpan', rowSpan - 1); - - lastCell = cell; - } - }); - }; - - // Get selected rows and move selection out of scope - rows = getSelectedRows(); - - // Delete all selected rows - each(rows.reverse(), function(tr) { - deleteRow(tr); - }); - - cleanup(); - }; - - function cutRows() { - var rows = getSelectedRows(); - - dom.remove(rows); - cleanup(); - - return rows; - }; - - function copyRows() { - var rows = getSelectedRows(); - - each(rows, function(row, i) { - rows[i] = cloneNode(row, true); - }); - - return rows; - }; - - function pasteRows(rows, before) { - // If we don't have any rows in the clipboard, return immediately - if(!rows) - return; - - var selectedRows = getSelectedRows(), - targetRow = selectedRows[before ? 0 : selectedRows.length - 1], - targetCellCount = targetRow.cells.length; - - // Calc target cell count - each(grid, function(row) { - var match; - - targetCellCount = 0; - each(row, function(cell, x) { - if (cell.real) - targetCellCount += cell.colspan; - - if (cell.elm.parentNode == targetRow) - match = 1; - }); - - if (match) - return false; - }); - - if (!before) - rows.reverse(); - - each(rows, function(row) { - var cellCount = row.cells.length, cell; - - // Remove col/rowspans - for (i = 0; i < cellCount; i++) { - cell = row.cells[i]; - setSpanVal(cell, 'colSpan', 1); - setSpanVal(cell, 'rowSpan', 1); - } - - // Needs more cells - for (i = cellCount; i < targetCellCount; i++) - row.appendChild(cloneCell(row.cells[cellCount - 1])); - - // Needs less cells - for (i = targetCellCount; i < cellCount; i++) - dom.remove(row.cells[i]); - - // Add before/after - if (before) - targetRow.parentNode.insertBefore(row, targetRow); - else - dom.insertAfter(row, targetRow); - }); - - // Remove current selection - dom.removeClass(dom.select('td.mceSelected,th.mceSelected'), 'mceSelected'); - }; - - function getPos(target) { - var pos; - - each(grid, function(row, y) { - each(row, function(cell, x) { - if (cell.elm == target) { - pos = {x : x, y : y}; - return false; - } - }); - - return !pos; - }); - - return pos; - }; - - function setStartCell(cell) { - startPos = getPos(cell); - }; - - function findEndPos() { - var pos, maxX, maxY; - - maxX = maxY = 0; - - each(grid, function(row, y) { - each(row, function(cell, x) { - var colSpan, rowSpan; - - if (isCellSelected(cell)) { - cell = grid[y][x]; - - if (x > maxX) - maxX = x; - - if (y > maxY) - maxY = y; - - if (cell.real) { - colSpan = cell.colspan - 1; - rowSpan = cell.rowspan - 1; - - if (colSpan) { - if (x + colSpan > maxX) - maxX = x + colSpan; - } - - if (rowSpan) { - if (y + rowSpan > maxY) - maxY = y + rowSpan; - } - } - } - }); - }); - - return {x : maxX, y : maxY}; - }; - - function setEndCell(cell) { - var startX, startY, endX, endY, maxX, maxY, colSpan, rowSpan; - - endPos = getPos(cell); - - if (startPos && endPos) { - // Get start/end positions - startX = Math.min(startPos.x, endPos.x); - startY = Math.min(startPos.y, endPos.y); - endX = Math.max(startPos.x, endPos.x); - endY = Math.max(startPos.y, endPos.y); - - // Expand end positon to include spans - maxX = endX; - maxY = endY; - - // Expand startX - for (y = startY; y <= maxY; y++) { - cell = grid[y][startX]; - - if (!cell.real) { - if (startX - (cell.colspan - 1) < startX) - startX -= cell.colspan - 1; - } - } - - // Expand startY - for (x = startX; x <= maxX; x++) { - cell = grid[startY][x]; - - if (!cell.real) { - if (startY - (cell.rowspan - 1) < startY) - startY -= cell.rowspan - 1; - } - } - - // Find max X, Y - for (y = startY; y <= endY; y++) { - for (x = startX; x <= endX; x++) { - cell = grid[y][x]; - - if (cell.real) { - colSpan = cell.colspan - 1; - rowSpan = cell.rowspan - 1; - - if (colSpan) { - if (x + colSpan > maxX) - maxX = x + colSpan; - } - - if (rowSpan) { - if (y + rowSpan > maxY) - maxY = y + rowSpan; - } - } - } - } - - // Remove current selection - dom.removeClass(dom.select('td.mceSelected,th.mceSelected'), 'mceSelected'); - - // Add new selection - for (y = startY; y <= maxY; y++) { - for (x = startX; x <= maxX; x++) { - if (grid[y][x]) - dom.addClass(grid[y][x].elm, 'mceSelected'); - } - } - } - }; - - // Expose to public - tinymce.extend(this, { - deleteTable : deleteTable, - split : split, - merge : merge, - insertRow : insertRow, - insertCol : insertCol, - deleteCols : deleteCols, - deleteRows : deleteRows, - cutRows : cutRows, - copyRows : copyRows, - pasteRows : pasteRows, - getPos : getPos, - setStartCell : setStartCell, - setEndCell : setEndCell - }); - }; - - tinymce.create('tinymce.plugins.TablePlugin', { - init : function(ed, url) { - var winMan, clipboardRows, hasCellSelection = true; // Might be selected cells on reload - - function createTableGrid(node) { - var selection = ed.selection, tblElm = ed.dom.getParent(node || selection.getNode(), 'table'); - - if (tblElm) - return new TableGrid(tblElm, ed.dom, selection); - }; - - function cleanup() { - // Restore selection possibilities - ed.getBody().style.webkitUserSelect = ''; - - if (hasCellSelection) { - ed.dom.removeClass(ed.dom.select('td.mceSelected,th.mceSelected'), 'mceSelected'); - hasCellSelection = false; - } - }; - - // Register buttons - each([ - ['table', 'table.desc', 'mceInsertTable', true], - ['delete_table', 'table.del', 'mceTableDelete'], - ['delete_col', 'table.delete_col_desc', 'mceTableDeleteCol'], - ['delete_row', 'table.delete_row_desc', 'mceTableDeleteRow'], - ['col_after', 'table.col_after_desc', 'mceTableInsertColAfter'], - ['col_before', 'table.col_before_desc', 'mceTableInsertColBefore'], - ['row_after', 'table.row_after_desc', 'mceTableInsertRowAfter'], - ['row_before', 'table.row_before_desc', 'mceTableInsertRowBefore'], - ['row_props', 'table.row_desc', 'mceTableRowProps', true], - ['cell_props', 'table.cell_desc', 'mceTableCellProps', true], - ['split_cells', 'table.split_cells_desc', 'mceTableSplitCells', true], - ['merge_cells', 'table.merge_cells_desc', 'mceTableMergeCells', true] - ], function(c) { - ed.addButton(c[0], {title : c[1], cmd : c[2], ui : c[3]}); - }); - - // Select whole table is a table border is clicked - if (!tinymce.isIE) { - ed.onClick.add(function(ed, e) { - e = e.target; - - if (e.nodeName === 'TABLE') { - ed.selection.select(e); - ed.nodeChanged(); - } - }); - } - - ed.onPreProcess.add(function(ed, args) { - var nodes, i, node, dom = ed.dom, value; - - nodes = dom.select('table', args.node); - i = nodes.length; - while (i--) { - node = nodes[i]; - dom.setAttrib(node, 'data-mce-style', ''); - - if ((value = dom.getAttrib(node, 'width'))) { - dom.setStyle(node, 'width', value); - dom.setAttrib(node, 'width', ''); - } - - if ((value = dom.getAttrib(node, 'height'))) { - dom.setStyle(node, 'height', value); - dom.setAttrib(node, 'height', ''); - } - } - }); - - // Handle node change updates - ed.onNodeChange.add(function(ed, cm, n) { - var p; - - n = ed.selection.getStart(); - p = ed.dom.getParent(n, 'td,th,caption'); - cm.setActive('table', n.nodeName === 'TABLE' || !!p); - - // Disable table tools if we are in caption - if (p && p.nodeName === 'CAPTION') - p = 0; - - cm.setDisabled('delete_table', !p); - cm.setDisabled('delete_col', !p); - cm.setDisabled('delete_table', !p); - cm.setDisabled('delete_row', !p); - cm.setDisabled('col_after', !p); - cm.setDisabled('col_before', !p); - cm.setDisabled('row_after', !p); - cm.setDisabled('row_before', !p); - cm.setDisabled('row_props', !p); - cm.setDisabled('cell_props', !p); - cm.setDisabled('split_cells', !p); - cm.setDisabled('merge_cells', !p); - }); - - ed.onInit.add(function(ed) { - var startTable, startCell, dom = ed.dom, tableGrid; - - winMan = ed.windowManager; - - // Add cell selection logic - ed.onMouseDown.add(function(ed, e) { - if (e.button != 2) { - cleanup(); - - startCell = dom.getParent(e.target, 'td,th'); - startTable = dom.getParent(startCell, 'table'); - } - }); - - dom.bind(ed.getDoc(), 'mouseover', function(e) { - var sel, table, target = e.target; - - if (startCell && (tableGrid || target != startCell) && (target.nodeName == 'TD' || target.nodeName == 'TH')) { - table = dom.getParent(target, 'table'); - if (table == startTable) { - if (!tableGrid) { - tableGrid = createTableGrid(table); - tableGrid.setStartCell(startCell); - - ed.getBody().style.webkitUserSelect = 'none'; - } - - tableGrid.setEndCell(target); - hasCellSelection = true; - } - - // Remove current selection - sel = ed.selection.getSel(); - - try { - if (sel.removeAllRanges) - sel.removeAllRanges(); - else - sel.empty(); - } catch (ex) { - // IE9 might throw errors here - } - - e.preventDefault(); - } - }); - - ed.onMouseUp.add(function(ed, e) { - var rng, sel = ed.selection, selectedCells, nativeSel = sel.getSel(), walker, node, lastNode, endNode; - - // Move selection to startCell - if (startCell) { - if (tableGrid) - ed.getBody().style.webkitUserSelect = ''; - - function setPoint(node, start) { - var walker = new tinymce.dom.TreeWalker(node, node); - - do { - // Text node - if (node.nodeType == 3 && tinymce.trim(node.nodeValue).length != 0) { - if (start) - rng.setStart(node, 0); - else - rng.setEnd(node, node.nodeValue.length); - - return; - } - - // BR element - if (node.nodeName == 'BR') { - if (start) - rng.setStartBefore(node); - else - rng.setEndBefore(node); - - return; - } - } while (node = (start ? walker.next() : walker.prev())); - } - - // Try to expand text selection as much as we can only Gecko supports cell selection - selectedCells = dom.select('td.mceSelected,th.mceSelected'); - if (selectedCells.length > 0) { - rng = dom.createRng(); - node = selectedCells[0]; - endNode = selectedCells[selectedCells.length - 1]; - rng.setStartBefore(node); - rng.setEndAfter(node); - - setPoint(node, 1); - walker = new tinymce.dom.TreeWalker(node, dom.getParent(selectedCells[0], 'table')); - - do { - if (node.nodeName == 'TD' || node.nodeName == 'TH') { - if (!dom.hasClass(node, 'mceSelected')) - break; - - lastNode = node; - } - } while (node = walker.next()); - - setPoint(lastNode); - - sel.setRng(rng); - } - - ed.nodeChanged(); - startCell = tableGrid = startTable = null; - } - }); - - ed.onKeyUp.add(function(ed, e) { - cleanup(); - }); - - ed.onKeyDown.add(function (ed, e) { - fixTableCellSelection(ed); - }); - - ed.onMouseDown.add(function (ed, e) { - if (e.button != 2) { - fixTableCellSelection(ed); - } - }); - function tableCellSelected(ed, rng, n, currentCell) { - // The decision of when a table cell is selected is somewhat involved. The fact that this code is - // required is actually a pointer to the root cause of this bug. A cell is selected when the start - // and end offsets are 0, the start container is a text, and the selection node is either a TR (most cases) - // or the parent of the table (in the case of the selection containing the last cell of a table). - var TEXT_NODE = 3, table = ed.dom.getParent(rng.startContainer, 'TABLE'), - tableParent, allOfCellSelected, tableCellSelection; - if (table) - tableParent = table.parentNode; - allOfCellSelected =rng.startContainer.nodeType == TEXT_NODE && - rng.startOffset == 0 && - rng.endOffset == 0 && - currentCell && - (n.nodeName=="TR" || n==tableParent); - tableCellSelection = (n.nodeName=="TD"||n.nodeName=="TH")&& !currentCell; - return allOfCellSelected || tableCellSelection; - // return false; - } - - // this nasty hack is here to work around some WebKit selection bugs. - function fixTableCellSelection(ed) { - if (!tinymce.isWebKit) - return; - - var rng = ed.selection.getRng(); - var n = ed.selection.getNode(); - var currentCell = ed.dom.getParent(rng.startContainer, 'TD,TH'); - - if (!tableCellSelected(ed, rng, n, currentCell)) - return; - if (!currentCell) { - currentCell=n; - } - - // Get the very last node inside the table cell - var end = currentCell.lastChild; - while (end.lastChild) - end = end.lastChild; - - // Select the entire table cell. Nothing outside of the table cell should be selected. - rng.setEnd(end, end.nodeValue.length); - ed.selection.setRng(rng); - } - ed.plugins.table.fixTableCellSelection=fixTableCellSelection; - - // Add context menu - if (ed && ed.plugins.contextmenu) { - ed.plugins.contextmenu.onContextMenu.add(function(th, m, e) { - var sm, se = ed.selection, el = se.getNode() || ed.getBody(); - - if (ed.dom.getParent(e, 'td') || ed.dom.getParent(e, 'th') || ed.dom.select('td.mceSelected,th.mceSelected').length) { - m.removeAll(); - - if (el.nodeName == 'A' && !ed.dom.getAttrib(el, 'name')) { - m.add({title : 'advanced.link_desc', icon : 'link', cmd : ed.plugins.advlink ? 'mceAdvLink' : 'mceLink', ui : true}); - m.add({title : 'advanced.unlink_desc', icon : 'unlink', cmd : 'UnLink'}); - m.addSeparator(); - } - - if (el.nodeName == 'IMG' && el.className.indexOf('mceItem') == -1) { - m.add({title : 'advanced.image_desc', icon : 'image', cmd : ed.plugins.advimage ? 'mceAdvImage' : 'mceImage', ui : true}); - m.addSeparator(); - } - - m.add({title : 'table.desc', icon : 'table', cmd : 'mceInsertTable', value : {action : 'insert'}}); - m.add({title : 'table.props_desc', icon : 'table_props', cmd : 'mceInsertTable'}); - m.add({title : 'table.del', icon : 'delete_table', cmd : 'mceTableDelete'}); - m.addSeparator(); - - // Cell menu - sm = m.addMenu({title : 'table.cell'}); - sm.add({title : 'table.cell_desc', icon : 'cell_props', cmd : 'mceTableCellProps'}); - sm.add({title : 'table.split_cells_desc', icon : 'split_cells', cmd : 'mceTableSplitCells'}); - sm.add({title : 'table.merge_cells_desc', icon : 'merge_cells', cmd : 'mceTableMergeCells'}); - - // Row menu - sm = m.addMenu({title : 'table.row'}); - sm.add({title : 'table.row_desc', icon : 'row_props', cmd : 'mceTableRowProps'}); - sm.add({title : 'table.row_before_desc', icon : 'row_before', cmd : 'mceTableInsertRowBefore'}); - sm.add({title : 'table.row_after_desc', icon : 'row_after', cmd : 'mceTableInsertRowAfter'}); - sm.add({title : 'table.delete_row_desc', icon : 'delete_row', cmd : 'mceTableDeleteRow'}); - sm.addSeparator(); - sm.add({title : 'table.cut_row_desc', icon : 'cut', cmd : 'mceTableCutRow'}); - sm.add({title : 'table.copy_row_desc', icon : 'copy', cmd : 'mceTableCopyRow'}); - sm.add({title : 'table.paste_row_before_desc', icon : 'paste', cmd : 'mceTablePasteRowBefore'}).setDisabled(!clipboardRows); - sm.add({title : 'table.paste_row_after_desc', icon : 'paste', cmd : 'mceTablePasteRowAfter'}).setDisabled(!clipboardRows); - - // Column menu - sm = m.addMenu({title : 'table.col'}); - sm.add({title : 'table.col_before_desc', icon : 'col_before', cmd : 'mceTableInsertColBefore'}); - sm.add({title : 'table.col_after_desc', icon : 'col_after', cmd : 'mceTableInsertColAfter'}); - sm.add({title : 'table.delete_col_desc', icon : 'delete_col', cmd : 'mceTableDeleteCol'}); - } else - m.add({title : 'table.desc', icon : 'table', cmd : 'mceInsertTable'}); - }); - } - - // Fix to allow navigating up and down in a table in WebKit browsers. - if (tinymce.isWebKit) { - function moveSelection(ed, e) { - var VK = tinymce.VK; - var key = e.keyCode; - - function handle(upBool, sourceNode, event) { - var siblingDirection = upBool ? 'previousSibling' : 'nextSibling'; - var currentRow = ed.dom.getParent(sourceNode, 'tr'); - var siblingRow = currentRow[siblingDirection]; - - if (siblingRow) { - moveCursorToRow(ed, sourceNode, siblingRow, upBool); - tinymce.dom.Event.cancel(event); - return true; - } else { - var tableNode = ed.dom.getParent(currentRow, 'table'); - var middleNode = currentRow.parentNode; - var parentNodeName = middleNode.nodeName.toLowerCase(); - if (parentNodeName === 'tbody' || parentNodeName === (upBool ? 'tfoot' : 'thead')) { - var targetParent = getTargetParent(upBool, tableNode, middleNode, 'tbody'); - if (targetParent !== null) { - return moveToRowInTarget(upBool, targetParent, sourceNode, event); - } - } - return escapeTable(upBool, currentRow, siblingDirection, tableNode, event); - } - } - - function getTargetParent(upBool, topNode, secondNode, nodeName) { - var tbodies = ed.dom.select('>' + nodeName, topNode); - var position = tbodies.indexOf(secondNode); - if (upBool && position === 0 || !upBool && position === tbodies.length - 1) { - return getFirstHeadOrFoot(upBool, topNode); - } else if (position === -1) { - var topOrBottom = secondNode.tagName.toLowerCase() === 'thead' ? 0 : tbodies.length - 1; - return tbodies[topOrBottom]; - } else { - return tbodies[position + (upBool ? -1 : 1)]; - } - } - - function getFirstHeadOrFoot(upBool, parent) { - var tagName = upBool ? 'thead' : 'tfoot'; - var headOrFoot = ed.dom.select('>' + tagName, parent); - return headOrFoot.length !== 0 ? headOrFoot[0] : null; - } - - function moveToRowInTarget(upBool, targetParent, sourceNode, event) { - var targetRow = getChildForDirection(targetParent, upBool); - targetRow && moveCursorToRow(ed, sourceNode, targetRow, upBool); - tinymce.dom.Event.cancel(event); - return true; - } - - function escapeTable(upBool, currentRow, siblingDirection, table, event) { - var tableSibling = table[siblingDirection]; - if (tableSibling) { - moveCursorToStartOfElement(tableSibling); - return true; - } else { - var parentCell = ed.dom.getParent(table, 'td,th'); - if (parentCell) { - return handle(upBool, parentCell, event); - } else { - var backUpSibling = getChildForDirection(currentRow, !upBool); - moveCursorToStartOfElement(backUpSibling); - return tinymce.dom.Event.cancel(event); - } - } - } - - function getChildForDirection(parent, up) { - var child = parent && parent[up ? 'lastChild' : 'firstChild']; - // BR is not a valid table child to return in this case we return the table cell - return child && child.nodeName === 'BR' ? ed.dom.getParent(child, 'td,th') : child; - } - - function moveCursorToStartOfElement(n) { - ed.selection.setCursorLocation(n, 0); - } - - function isVerticalMovement() { - return key == VK.UP || key == VK.DOWN; - } - - function isInTable(ed) { - var node = ed.selection.getNode(); - var currentRow = ed.dom.getParent(node, 'tr'); - return currentRow !== null; - } - - function columnIndex(column) { - var colIndex = 0; - var c = column; - while (c.previousSibling) { - c = c.previousSibling; - colIndex = colIndex + getSpanVal(c, "colspan"); - } - return colIndex; - } - - function findColumn(rowElement, columnIndex) { - var c = 0; - var r = 0; - each(rowElement.children, function(cell, i) { - c = c + getSpanVal(cell, "colspan"); - r = i; - if (c > columnIndex) - return false; - }); - return r; - } - - function moveCursorToRow(ed, node, row, upBool) { - var srcColumnIndex = columnIndex(ed.dom.getParent(node, 'td,th')); - var tgtColumnIndex = findColumn(row, srcColumnIndex); - var tgtNode = row.childNodes[tgtColumnIndex]; - var rowCellTarget = getChildForDirection(tgtNode, upBool); - moveCursorToStartOfElement(rowCellTarget || tgtNode); - } - - function shouldFixCaret(preBrowserNode) { - var newNode = ed.selection.getNode(); - var newParent = ed.dom.getParent(newNode, 'td,th'); - var oldParent = ed.dom.getParent(preBrowserNode, 'td,th'); - return newParent && newParent !== oldParent && checkSameParentTable(newParent, oldParent) - } - - function checkSameParentTable(nodeOne, NodeTwo) { - return ed.dom.getParent(nodeOne, 'TABLE') === ed.dom.getParent(NodeTwo, 'TABLE'); - } - - if (isVerticalMovement() && isInTable(ed)) { - var preBrowserNode = ed.selection.getNode(); - setTimeout(function() { - if (shouldFixCaret(preBrowserNode)) { - handle(!e.shiftKey && key === VK.UP, preBrowserNode, e); - } - }, 0); - } - } - - ed.onKeyDown.add(moveSelection); - } - - // Fixes an issue on Gecko where it's impossible to place the caret behind a table - // This fix will force a paragraph element after the table but only when the forced_root_block setting is enabled - function fixTableCaretPos() { - var last; - - // Skip empty text nodes form the end - for (last = ed.getBody().lastChild; last && last.nodeType == 3 && !last.nodeValue.length; last = last.previousSibling) ; - - if (last && last.nodeName == 'TABLE') { - if (ed.settings.forced_root_block) - ed.dom.add(ed.getBody(), ed.settings.forced_root_block, null, tinymce.isIE ? ' ' : '
'); - else - ed.dom.add(ed.getBody(), 'br', {'data-mce-bogus': '1'}); - } - }; - - // Fixes an bug where it's impossible to place the caret before a table in Gecko - // this fix solves it by detecting when the caret is at the beginning of such a table - // and then manually moves the caret infront of the table - if (tinymce.isGecko) { - ed.onKeyDown.add(function(ed, e) { - var rng, table, dom = ed.dom; - - // On gecko it's not possible to place the caret before a table - if (e.keyCode == 37 || e.keyCode == 38) { - rng = ed.selection.getRng(); - table = dom.getParent(rng.startContainer, 'table'); - - if (table && ed.getBody().firstChild == table) { - if (isAtStart(rng, table)) { - rng = dom.createRng(); - - rng.setStartBefore(table); - rng.setEndBefore(table); - - ed.selection.setRng(rng); - - e.preventDefault(); - } - } - } - }); - } - - ed.onKeyUp.add(fixTableCaretPos); - ed.onSetContent.add(fixTableCaretPos); - ed.onVisualAid.add(fixTableCaretPos); - - ed.onPreProcess.add(function(ed, o) { - var last = o.node.lastChild; - - if (last && (last.nodeName == "BR" || (last.childNodes.length == 1 && (last.firstChild.nodeName == 'BR' || last.firstChild.nodeValue == '\u00a0'))) && last.previousSibling && last.previousSibling.nodeName == "TABLE") { - ed.dom.remove(last); - } - }); - - - /** - * Fixes bug in Gecko where shift-enter in table cell does not place caret on new line - * - * Removed: Since the new enter logic seems to fix this one. - */ - /* - if (tinymce.isGecko) { - ed.onKeyDown.add(function(ed, e) { - if (e.keyCode === tinymce.VK.ENTER && e.shiftKey) { - var node = ed.selection.getRng().startContainer; - var tableCell = dom.getParent(node, 'td,th'); - if (tableCell) { - var zeroSizedNbsp = ed.getDoc().createTextNode("\uFEFF"); - dom.insertAfter(zeroSizedNbsp, node); - } - } - }); - } - */ - - fixTableCaretPos(); - ed.startContent = ed.getContent({format : 'raw'}); - }); - - // Register action commands - each({ - mceTableSplitCells : function(grid) { - grid.split(); - }, - - mceTableMergeCells : function(grid) { - var rowSpan, colSpan, cell; - - cell = ed.dom.getParent(ed.selection.getNode(), 'th,td'); - if (cell) { - rowSpan = cell.rowSpan; - colSpan = cell.colSpan; - } - - if (!ed.dom.select('td.mceSelected,th.mceSelected').length) { - winMan.open({ - url : url + '/merge_cells.htm', - width : 240 + parseInt(ed.getLang('table.merge_cells_delta_width', 0)), - height : 110 + parseInt(ed.getLang('table.merge_cells_delta_height', 0)), - inline : 1 - }, { - rows : rowSpan, - cols : colSpan, - onaction : function(data) { - grid.merge(cell, data.cols, data.rows); - }, - plugin_url : url - }); - } else - grid.merge(); - }, - - mceTableInsertRowBefore : function(grid) { - grid.insertRow(true); - }, - - mceTableInsertRowAfter : function(grid) { - grid.insertRow(); - }, - - mceTableInsertColBefore : function(grid) { - grid.insertCol(true); - }, - - mceTableInsertColAfter : function(grid) { - grid.insertCol(); - }, - - mceTableDeleteCol : function(grid) { - grid.deleteCols(); - }, - - mceTableDeleteRow : function(grid) { - grid.deleteRows(); - }, - - mceTableCutRow : function(grid) { - clipboardRows = grid.cutRows(); - }, - - mceTableCopyRow : function(grid) { - clipboardRows = grid.copyRows(); - }, - - mceTablePasteRowBefore : function(grid) { - grid.pasteRows(clipboardRows, true); - }, - - mceTablePasteRowAfter : function(grid) { - grid.pasteRows(clipboardRows); - }, - - mceTableDelete : function(grid) { - grid.deleteTable(); - } - }, function(func, name) { - ed.addCommand(name, function() { - var grid = createTableGrid(); - - if (grid) { - func(grid); - ed.execCommand('mceRepaint'); - cleanup(); - } - }); - }); - - // Register dialog commands - each({ - mceInsertTable : function(val) { - winMan.open({ - url : url + '/table.htm', - width : 400 + parseInt(ed.getLang('table.table_delta_width', 0)), - height : 320 + parseInt(ed.getLang('table.table_delta_height', 0)), - inline : 1 - }, { - plugin_url : url, - action : val ? val.action : 0 - }); - }, - - mceTableRowProps : function() { - winMan.open({ - url : url + '/row.htm', - width : 400 + parseInt(ed.getLang('table.rowprops_delta_width', 0)), - height : 295 + parseInt(ed.getLang('table.rowprops_delta_height', 0)), - inline : 1 - }, { - plugin_url : url - }); - }, - - mceTableCellProps : function() { - winMan.open({ - url : url + '/cell.htm', - width : 400 + parseInt(ed.getLang('table.cellprops_delta_width', 0)), - height : 295 + parseInt(ed.getLang('table.cellprops_delta_height', 0)), - inline : 1 - }, { - plugin_url : url - }); - } - }, function(func, name) { - ed.addCommand(name, function(ui, val) { - func(val); - }); - }); - } - }); - - // Register plugin - tinymce.PluginManager.add('table', tinymce.plugins.TablePlugin); -})(tinymce); diff --git a/common/static/js/vendor/tiny_mce/plugins/table/js/cell.js b/common/static/js/vendor/tiny_mce/plugins/table/js/cell.js deleted file mode 100644 index 6f77e67072..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/table/js/cell.js +++ /dev/null @@ -1,319 +0,0 @@ -tinyMCEPopup.requireLangPack(); - -var ed; - -function init() { - ed = tinyMCEPopup.editor; - tinyMCEPopup.resizeToInnerSize(); - - document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table'); - document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor'); - document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor') - - var inst = ed; - var tdElm = ed.dom.getParent(ed.selection.getStart(), "td,th"); - var formObj = document.forms[0]; - var st = ed.dom.parseStyle(ed.dom.getAttrib(tdElm, "style")); - - // Get table cell data - var celltype = tdElm.nodeName.toLowerCase(); - var align = ed.dom.getAttrib(tdElm, 'align'); - var valign = ed.dom.getAttrib(tdElm, 'valign'); - var width = trimSize(getStyle(tdElm, 'width', 'width')); - var height = trimSize(getStyle(tdElm, 'height', 'height')); - var bordercolor = convertRGBToHex(getStyle(tdElm, 'bordercolor', 'borderLeftColor')); - var bgcolor = convertRGBToHex(getStyle(tdElm, 'bgcolor', 'backgroundColor')); - var className = ed.dom.getAttrib(tdElm, 'class'); - var backgroundimage = getStyle(tdElm, 'background', 'backgroundImage').replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1"); - var id = ed.dom.getAttrib(tdElm, 'id'); - var lang = ed.dom.getAttrib(tdElm, 'lang'); - var dir = ed.dom.getAttrib(tdElm, 'dir'); - var scope = ed.dom.getAttrib(tdElm, 'scope'); - - // Setup form - addClassesToList('class', 'table_cell_styles'); - TinyMCE_EditableSelects.init(); - - if (!ed.dom.hasClass(tdElm, 'mceSelected')) { - formObj.bordercolor.value = bordercolor; - formObj.bgcolor.value = bgcolor; - formObj.backgroundimage.value = backgroundimage; - formObj.width.value = width; - formObj.height.value = height; - formObj.id.value = id; - formObj.lang.value = lang; - formObj.style.value = ed.dom.serializeStyle(st); - selectByValue(formObj, 'align', align); - selectByValue(formObj, 'valign', valign); - selectByValue(formObj, 'class', className, true, true); - selectByValue(formObj, 'celltype', celltype); - selectByValue(formObj, 'dir', dir); - selectByValue(formObj, 'scope', scope); - - // Resize some elements - if (isVisible('backgroundimagebrowser')) - document.getElementById('backgroundimage').style.width = '180px'; - - updateColor('bordercolor_pick', 'bordercolor'); - updateColor('bgcolor_pick', 'bgcolor'); - } else - tinyMCEPopup.dom.hide('action'); -} - -function updateAction() { - var el, inst = ed, tdElm, trElm, tableElm, formObj = document.forms[0]; - - if (!AutoValidator.validate(formObj)) { - tinyMCEPopup.alert(AutoValidator.getErrorMessages(formObj).join('. ') + '.'); - return false; - } - - tinyMCEPopup.restoreSelection(); - el = ed.selection.getStart(); - tdElm = ed.dom.getParent(el, "td,th"); - trElm = ed.dom.getParent(el, "tr"); - tableElm = ed.dom.getParent(el, "table"); - - // Cell is selected - if (ed.dom.hasClass(tdElm, 'mceSelected')) { - // Update all selected sells - tinymce.each(ed.dom.select('td.mceSelected,th.mceSelected'), function(td) { - updateCell(td); - }); - - ed.addVisual(); - ed.nodeChanged(); - inst.execCommand('mceEndUndoLevel'); - tinyMCEPopup.close(); - return; - } - - switch (getSelectValue(formObj, 'action')) { - case "cell": - var celltype = getSelectValue(formObj, 'celltype'); - var scope = getSelectValue(formObj, 'scope'); - - function doUpdate(s) { - if (s) { - updateCell(tdElm); - - ed.addVisual(); - ed.nodeChanged(); - inst.execCommand('mceEndUndoLevel'); - tinyMCEPopup.close(); - } - }; - - if (ed.getParam("accessibility_warnings", 1)) { - if (celltype == "th" && scope == "") - tinyMCEPopup.confirm(ed.getLang('table_dlg.missing_scope', '', true), doUpdate); - else - doUpdate(1); - - return; - } - - updateCell(tdElm); - break; - - case "row": - var cell = trElm.firstChild; - - if (cell.nodeName != "TD" && cell.nodeName != "TH") - cell = nextCell(cell); - - do { - cell = updateCell(cell, true); - } while ((cell = nextCell(cell)) != null); - - break; - - case "col": - var curr, col = 0, cell = trElm.firstChild, rows = tableElm.getElementsByTagName("tr"); - - if (cell.nodeName != "TD" && cell.nodeName != "TH") - cell = nextCell(cell); - - do { - if (cell == tdElm) - break; - col += cell.getAttribute("colspan")?cell.getAttribute("colspan"):1; - } while ((cell = nextCell(cell)) != null); - - for (var i=0; i 0) { - tinymce.each(tableElm.rows, function(tr) { - var i; - - for (i = 0; i < tr.cells.length; i++) { - if (dom.hasClass(tr.cells[i], 'mceSelected')) { - updateRow(tr, true); - return; - } - } - }); - - inst.addVisual(); - inst.nodeChanged(); - inst.execCommand('mceEndUndoLevel'); - tinyMCEPopup.close(); - return; - } - - switch (action) { - case "row": - updateRow(trElm); - break; - - case "all": - var rows = tableElm.getElementsByTagName("tr"); - - for (var i=0; i colLimit) { - tinyMCEPopup.alert(inst.getLang('table_dlg.col_limit').replace(/\{\$cols\}/g, colLimit)); - return false; - } else if (rowLimit && rows > rowLimit) { - tinyMCEPopup.alert(inst.getLang('table_dlg.row_limit').replace(/\{\$rows\}/g, rowLimit)); - return false; - } else if (cellLimit && cols * rows > cellLimit) { - tinyMCEPopup.alert(inst.getLang('table_dlg.cell_limit').replace(/\{\$cells\}/g, cellLimit)); - return false; - } - - // Update table - if (action == "update") { - dom.setAttrib(elm, 'cellPadding', cellpadding, true); - dom.setAttrib(elm, 'cellSpacing', cellspacing, true); - - if (!isCssSize(border)) { - dom.setAttrib(elm, 'border', border); - } else { - dom.setAttrib(elm, 'border', ''); - } - - if (border == '') { - dom.setStyle(elm, 'border-width', ''); - dom.setStyle(elm, 'border', ''); - dom.setAttrib(elm, 'border', ''); - } - - dom.setAttrib(elm, 'align', align); - dom.setAttrib(elm, 'frame', frame); - dom.setAttrib(elm, 'rules', rules); - dom.setAttrib(elm, 'class', className); - dom.setAttrib(elm, 'style', style); - dom.setAttrib(elm, 'id', id); - dom.setAttrib(elm, 'summary', summary); - dom.setAttrib(elm, 'dir', dir); - dom.setAttrib(elm, 'lang', lang); - - capEl = inst.dom.select('caption', elm)[0]; - - if (capEl && !caption) - capEl.parentNode.removeChild(capEl); - - if (!capEl && caption) { - capEl = elm.ownerDocument.createElement('caption'); - - if (!tinymce.isIE) - capEl.innerHTML = '
'; - - elm.insertBefore(capEl, elm.firstChild); - } - - if (width && inst.settings.inline_styles) { - dom.setStyle(elm, 'width', width); - dom.setAttrib(elm, 'width', ''); - } else { - dom.setAttrib(elm, 'width', width, true); - dom.setStyle(elm, 'width', ''); - } - - // Remove these since they are not valid XHTML - dom.setAttrib(elm, 'borderColor', ''); - dom.setAttrib(elm, 'bgColor', ''); - dom.setAttrib(elm, 'background', ''); - - if (height && inst.settings.inline_styles) { - dom.setStyle(elm, 'height', height); - dom.setAttrib(elm, 'height', ''); - } else { - dom.setAttrib(elm, 'height', height, true); - dom.setStyle(elm, 'height', ''); - } - - if (background != '') - elm.style.backgroundImage = "url('" + background + "')"; - else - elm.style.backgroundImage = ''; - -/* if (tinyMCEPopup.getParam("inline_styles")) { - if (width != '') - elm.style.width = getCSSSize(width); - }*/ - - if (bordercolor != "") { - elm.style.borderColor = bordercolor; - elm.style.borderStyle = elm.style.borderStyle == "" ? "solid" : elm.style.borderStyle; - elm.style.borderWidth = cssSize(border); - } else - elm.style.borderColor = ''; - - elm.style.backgroundColor = bgcolor; - elm.style.height = getCSSSize(height); - - inst.addVisual(); - - // Fix for stange MSIE align bug - //elm.outerHTML = elm.outerHTML; - - inst.nodeChanged(); - inst.execCommand('mceEndUndoLevel', false, {}, {skip_undo: true}); - - // Repaint if dimensions changed - if (formObj.width.value != orgTableWidth || formObj.height.value != orgTableHeight) - inst.execCommand('mceRepaint'); - - tinyMCEPopup.close(); - return true; - } - - // Create new table - html += ''); - - tinymce.each('h1,h2,h3,h4,h5,h6,p'.split(','), function(n) { - if (patt) - patt += ','; - - patt += n + ' ._mce_marker'; - }); - - tinymce.each(inst.dom.select(patt), function(n) { - inst.dom.split(inst.dom.getParent(n, 'h1,h2,h3,h4,h5,h6,p'), n); - }); - - dom.setOuterHTML(dom.select('br._mce_marker')[0], html); - } else - inst.execCommand('mceInsertContent', false, html); - - tinymce.each(dom.select('table[data-mce-new]'), function(node) { - var tdorth = dom.select('td,th', node); - - // Fixes a bug in IE where the caret cannot be placed after the table if the table is at the end of the document - if (tinymce.isIE && node.nextSibling == null) { - if (inst.settings.forced_root_block) - dom.insertAfter(dom.create(inst.settings.forced_root_block), node); - else - dom.insertAfter(dom.create('br', {'data-mce-bogus': '1'}), node); - } - - try { - // IE9 might fail to do this selection - inst.selection.setCursorLocation(tdorth[0], 0); - } catch (ex) { - // Ignore - } - - dom.setAttrib(node, 'data-mce-new', ''); - }); - - inst.addVisual(); - inst.execCommand('mceEndUndoLevel', false, {}, {skip_undo: true}); - - tinyMCEPopup.close(); -} - -function makeAttrib(attrib, value) { - var formObj = document.forms[0]; - var valueElm = formObj.elements[attrib]; - - if (typeof(value) == "undefined" || value == null) { - value = ""; - - if (valueElm) - value = valueElm.value; - } - - if (value == "") - return ""; - - // XML encode it - value = value.replace(/&/g, '&'); - value = value.replace(/\"/g, '"'); - value = value.replace(//g, '>'); - - return ' ' + attrib + '="' + value + '"'; -} - -function init() { - tinyMCEPopup.resizeToInnerSize(); - - document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table'); - document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table'); - document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor'); - document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor'); - - var cols = 2, rows = 2, border = tinyMCEPopup.getParam('table_default_border', '0'), cellpadding = tinyMCEPopup.getParam('table_default_cellpadding', ''), cellspacing = tinyMCEPopup.getParam('table_default_cellspacing', ''); - var align = "", width = "", height = "", bordercolor = "", bgcolor = "", className = ""; - var id = "", summary = "", style = "", dir = "", lang = "", background = "", bgcolor = "", bordercolor = "", rules = "", frame = ""; - var inst = tinyMCEPopup.editor, dom = inst.dom; - var formObj = document.forms[0]; - var elm = dom.getParent(inst.selection.getNode(), "table"); - - // Hide advanced fields that isn't available in the schema - tinymce.each("summary id rules dir style frame".split(" "), function(name) { - var tr = tinyMCEPopup.dom.getParent(name, "tr") || tinyMCEPopup.dom.getParent("t" + name, "tr"); - - if (tr && !tinyMCEPopup.editor.schema.isValid("table", name)) { - tr.style.display = 'none'; - } - }); - - action = tinyMCEPopup.getWindowArg('action'); - - if (!action) - action = elm ? "update" : "insert"; - - if (elm && action != "insert") { - var rowsAr = elm.rows; - var cols = 0; - for (var i=0; i cols) - cols = rowsAr[i].cells.length; - - cols = cols; - rows = rowsAr.length; - - st = dom.parseStyle(dom.getAttrib(elm, "style")); - border = trimSize(getStyle(elm, 'border', 'borderWidth')); - cellpadding = dom.getAttrib(elm, 'cellpadding', ""); - cellspacing = dom.getAttrib(elm, 'cellspacing', ""); - width = trimSize(getStyle(elm, 'width', 'width')); - height = trimSize(getStyle(elm, 'height', 'height')); - bordercolor = convertRGBToHex(getStyle(elm, 'bordercolor', 'borderLeftColor')); - bgcolor = convertRGBToHex(getStyle(elm, 'bgcolor', 'backgroundColor')); - align = dom.getAttrib(elm, 'align', align); - frame = dom.getAttrib(elm, 'frame'); - rules = dom.getAttrib(elm, 'rules'); - className = tinymce.trim(dom.getAttrib(elm, 'class').replace(/mceItem.+/g, '')); - id = dom.getAttrib(elm, 'id'); - summary = dom.getAttrib(elm, 'summary'); - style = dom.serializeStyle(st); - dir = dom.getAttrib(elm, 'dir'); - lang = dom.getAttrib(elm, 'lang'); - background = getStyle(elm, 'background', 'backgroundImage').replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1"); - formObj.caption.checked = elm.getElementsByTagName('caption').length > 0; - - orgTableWidth = width; - orgTableHeight = height; - - action = "update"; - formObj.insert.value = inst.getLang('update'); - } - - addClassesToList('class', "table_styles"); - TinyMCE_EditableSelects.init(); - - // Update form - selectByValue(formObj, 'align', align); - selectByValue(formObj, 'tframe', frame); - selectByValue(formObj, 'rules', rules); - selectByValue(formObj, 'class', className, true, true); - formObj.cols.value = cols; - formObj.rows.value = rows; - formObj.border.value = border; - formObj.cellpadding.value = cellpadding; - formObj.cellspacing.value = cellspacing; - formObj.width.value = width; - formObj.height.value = height; - formObj.bordercolor.value = bordercolor; - formObj.bgcolor.value = bgcolor; - formObj.id.value = id; - formObj.summary.value = summary; - formObj.style.value = style; - formObj.dir.value = dir; - formObj.lang.value = lang; - formObj.backgroundimage.value = background; - - updateColor('bordercolor_pick', 'bordercolor'); - updateColor('bgcolor_pick', 'bgcolor'); - - // Resize some elements - if (isVisible('backgroundimagebrowser')) - document.getElementById('backgroundimage').style.width = '180px'; - - // Disable some fields in update mode - if (action == "update") { - formObj.cols.disabled = true; - formObj.rows.disabled = true; - } -} - -function changedSize() { - var formObj = document.forms[0]; - var st = dom.parseStyle(formObj.style.value); - -/* var width = formObj.width.value; - if (width != "") - st['width'] = tinyMCEPopup.getParam("inline_styles") ? getCSSSize(width) : ""; - else - st['width'] = "";*/ - - var height = formObj.height.value; - if (height != "") - st['height'] = getCSSSize(height); - else - st['height'] = ""; - - formObj.style.value = dom.serializeStyle(st); -} - -function isCssSize(value) { - return /^[0-9.]+(%|in|cm|mm|em|ex|pt|pc|px)$/.test(value); -} - -function cssSize(value, def) { - value = tinymce.trim(value || def); - - if (!isCssSize(value)) { - return parseInt(value, 10) + 'px'; - } - - return value; -} - -function changedBackgroundImage() { - var formObj = document.forms[0]; - var st = dom.parseStyle(formObj.style.value); - - st['background-image'] = "url('" + formObj.backgroundimage.value + "')"; - - formObj.style.value = dom.serializeStyle(st); -} - -function changedBorder() { - var formObj = document.forms[0]; - var st = dom.parseStyle(formObj.style.value); - - // Update border width if the element has a color - if (formObj.border.value != "" && (isCssSize(formObj.border.value) || formObj.bordercolor.value != "")) - st['border-width'] = cssSize(formObj.border.value); - else { - if (!formObj.border.value) { - st['border'] = ''; - st['border-width'] = ''; - } - } - - formObj.style.value = dom.serializeStyle(st); -} - -function changedColor() { - var formObj = document.forms[0]; - var st = dom.parseStyle(formObj.style.value); - - st['background-color'] = formObj.bgcolor.value; - - if (formObj.bordercolor.value != "") { - st['border-color'] = formObj.bordercolor.value; - - // Add border-width if it's missing - if (!st['border-width']) - st['border-width'] = cssSize(formObj.border.value, 1); - } - - formObj.style.value = dom.serializeStyle(st); -} - -function changedStyle() { - var formObj = document.forms[0]; - var st = dom.parseStyle(formObj.style.value); - - if (st['background-image']) - formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1"); - else - formObj.backgroundimage.value = ''; - - if (st['width']) - formObj.width.value = trimSize(st['width']); - - if (st['height']) - formObj.height.value = trimSize(st['height']); - - if (st['background-color']) { - formObj.bgcolor.value = st['background-color']; - updateColor('bgcolor_pick','bgcolor'); - } - - if (st['border-color']) { - formObj.bordercolor.value = st['border-color']; - updateColor('bordercolor_pick','bordercolor'); - } -} - -tinyMCEPopup.onInit.add(init); diff --git a/common/static/js/vendor/tiny_mce/plugins/table/langs/en_dlg.js b/common/static/js/vendor/tiny_mce/plugins/table/langs/en_dlg.js deleted file mode 100644 index 463e09ee1b..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/table/langs/en_dlg.js +++ /dev/null @@ -1 +0,0 @@ -tinyMCE.addI18n('en.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table Caption","missing_scope":"Are you sure you want to continue without specifying a scope for this table header cell. Without it, it may be difficult for some users with disabilities to understand the content or data displayed of the table.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Footer",tbody:"Body",thead:"Header","row_all":"Update All Rows in Table","row_even":"Update Even Rows in Table","row_odd":"Update Odd Rows in Table","row_row":"Update Current Row","cell_all":"Update All Cells in Table","cell_row":"Update All Cells in Row","cell_cell":"Update Current Cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Background Image",rtl:"Right to Left",ltr:"Left to Right",mime:"Target MIME Type",langcode:"Language Code",langdir:"Language Direction",style:"Style",id:"ID","merge_cells_title":"Merge Table Cells",bgcolor:"Background Color",bordercolor:"Border Color","align_bottom":"Bottom","align_top":"Top",valign:"Vertical Alignment","cell_type":"Cell Type","cell_title":"Table Cell Properties","row_title":"Table Row Properties","align_middle":"Center","align_right":"Right","align_left":"Left","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cell Padding",cellspacing:"Cell Spacing",rows:"Rows",cols:"Columns",height:"Height",width:"Width",title:"Insert/Edit Table",rowtype:"Row Type","advanced_props":"Advanced Properties","general_props":"General Properties","advanced_tab":"Advanced","general_tab":"General","cell_col":"Update all cells in column"}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/table/merge_cells.htm b/common/static/js/vendor/tiny_mce/plugins/table/merge_cells.htm deleted file mode 100644 index 788acf68ed..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/table/merge_cells.htm +++ /dev/null @@ -1,32 +0,0 @@ - - - - {#table_dlg.merge_cells_title} - - - - - - -
-
- {#table_dlg.merge_cells_title} - - - - - - - - - -
:
:
-
- -
- - -
-
- - diff --git a/common/static/js/vendor/tiny_mce/plugins/table/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/table/plugin.min.js new file mode 100644 index 0000000000..d041caeabf --- /dev/null +++ b/common/static/js/vendor/tiny_mce/plugins/table/plugin.min.js @@ -0,0 +1 @@ +!function(e,t){"use strict";function n(e,t){for(var n,r=[],i=0;i "+t+" tr",o);r(i,function(i,o){o+=e,r(H.select("> td, > th",i),function(e,r){var i,a,s,l;if(R[o])for(;R[o][r];)r++;for(s=n(e,"rowspan"),l=n(e,"colspan"),a=o;o+s>a;a++)for(R[a]||(R[a]=[]),i=r;r+l>i;i++)R[a][i]={part:t,real:a==o&&i==r,elm:e,rowspan:s,colspan:l}})}),e+=i.length})}function s(e,t){return e=e.cloneNode(t),e.removeAttribute("id"),e}function l(e,t){var n;return n=R[t],n?n[e]:void 0}function c(e,t,n){e&&(n=parseInt(n,10),1===n?e.removeAttribute(t,1):e.setAttribute(t,n,1))}function d(e){return e&&(H.hasClass(e.elm,"mce-item-selected")||e==L)}function u(){var e=[];return r(o.rows,function(t){r(t.cells,function(n){return H.hasClass(n,"mce-item-selected")||n==L.elm?(e.push(t),!1):void 0})}),e}function f(){var e=H.createRng();e.setStartAfter(o),e.setEndAfter(o),D.setRng(e),H.remove(o)}function p(n){var o,a={};return i.settings.table_clone_elements!==!1&&(a=e.makeMap((i.settings.table_clone_elements||"strong em b i span font h1 h2 h3 h4 h5 h6 p div").toUpperCase(),/[ ,]/)),e.walk(n,function(e){var i;return 3==e.nodeType?(r(H.getParents(e.parentNode,null,n).reverse(),function(e){a[e.nodeName]&&(e=s(e,!1),o?i&&i.appendChild(e):o=i=e,i=e)}),i&&(i.innerHTML=t.ie?" ":'
'),!1):void 0},"childNodes"),n=s(n,!1),c(n,"rowSpan",1),c(n,"colSpan",1),o?n.appendChild(o):t.ie||(n.innerHTML='
'),n}function m(){var e=H.createRng(),t;return r(H.select("tr",o),function(e){0===e.cells.length&&H.remove(e)}),0===H.select("tr",o).length?(e.setStartBefore(o),e.setEndBefore(o),D.setRng(e),H.remove(o),void 0):(r(H.select("thead,tbody,tfoot",o),function(e){0===e.rows.length&&H.remove(e)}),a(),t=R[Math.min(R.length-1,A.y)],t&&(D.select(t[Math.min(t.length-1,A.x)].elm,!0),D.collapse(!0)),void 0)}function h(e,t,n,r){var i,o,a,s,l;for(i=R[t][e].elm.parentNode,a=1;n>=a;a++)if(i=H.getNext(i,"tr")){for(o=e;o>=0;o--)if(l=R[t+a][o].elm,l.parentNode==i){for(s=1;r>=s;s++)H.insertAfter(p(l),l);break}if(-1==o)for(s=1;r>=s;s++)i.insertBefore(p(i.cells[0]),i.cells[0])}}function g(){r(R,function(e,t){r(e,function(e,r){var i,o,a;if(d(e)&&(e=e.elm,i=n(e,"colspan"),o=n(e,"rowspan"),i>1||o>1)){for(c(e,"rowSpan",1),c(e,"colSpan",1),a=0;i-1>a;a++)H.insertAfter(p(e),e);h(r,t,o-1,i)}})})}function v(t,n,i){var o,s,u,f,p,h,v,y,b,C,x;if(t?(o=E(t),s=o.x,u=o.y,f=s+(n-1),p=u+(i-1)):(A=B=null,r(R,function(e,t){r(e,function(e,n){d(e)&&(A||(A={x:n,y:t}),B={x:n,y:t})})}),s=A.x,u=A.y,f=B.x,p=B.y),y=l(s,u),b=l(f,p),y&&b&&y.part==b.part){for(g(),a(),y=l(s,u).elm,c(y,"colSpan",f-s+1),c(y,"rowSpan",p-u+1),v=u;p>=v;v++)for(h=s;f>=h;h++)R[v]&&R[v][h]&&(t=R[v][h].elm,t!=y&&(C=e.grep(t.childNodes),r(C,function(e){y.appendChild(e)}),C.length&&(C=e.grep(y.childNodes),x=0,r(C,function(e){"BR"==e.nodeName&&H.getAttrib(e,"data-mce-bogus")&&x++0&&R[t-1][a]&&(m=R[t-1][a].elm,h=n(m,"rowSpan"),h>1)){c(m,"rowSpan",h+1);continue}}else if(h=n(i,"rowspan"),h>1){c(i,"rowSpan",h+1);continue}f=p(i),c(f,"colSpan",i.colSpan),u.appendChild(f),o=i}u.hasChildNodes()&&(e?l.parentNode.insertBefore(u,l):H.insertAfter(u,l))}function b(e){var t,i;r(R,function(n){return r(n,function(n,r){return d(n)&&(t=r,e)?!1:void 0}),e?!t:void 0}),r(R,function(r,o){var a,s,l;r[t]&&(a=r[t].elm,a!=i&&(l=n(a,"colspan"),s=n(a,"rowspan"),1==l?e?(a.parentNode.insertBefore(p(a),a),h(t,o,s-1,l)):(H.insertAfter(p(a),a),h(t,o,s-1,l)):c(a,"colSpan",a.colSpan+1),i=a))})}function C(){var t=[];r(R,function(i){r(i,function(i,o){d(i)&&-1===e.inArray(t,o)&&(r(R,function(e){var t=e[o].elm,r;r=n(t,"colSpan"),r>1?c(t,"colSpan",r-1):H.remove(t)}),t.push(o))})}),m()}function x(){function e(e){var t,i,o;t=H.getNext(e,"tr"),r(e.cells,function(e){var t=n(e,"rowSpan");t>1&&(c(e,"rowSpan",t-1),i=E(e),h(i.x,i.y,1,1))}),i=E(e.cells[0]),r(R[i.y],function(e){var t;e=e.elm,e!=o&&(t=n(e,"rowSpan"),1>=t?H.remove(e):c(e,"rowSpan",t-1),o=e)})}var t;t=u(),r(t.reverse(),function(t){e(t)}),m()}function w(){var e=u();return H.remove(e),m(),e}function _(){var e=u();return r(e,function(t,n){e[n]=s(t,!0)}),e}function N(e,t){var n=u(),i=n[t?0:n.length-1],o=i.cells.length;e&&(r(R,function(e){var t;return o=0,r(e,function(e){e.real&&(o+=e.colspan),e.elm.parentNode==i&&(t=1)}),t?!1:void 0}),t||e.reverse(),r(e,function(e){var n,r=e.cells.length,a;for(n=0;r>n;n++)a=e.cells[n],c(a,"colSpan",1),c(a,"rowSpan",1);for(n=r;o>n;n++)e.appendChild(p(e.cells[r-1]));for(n=o;r>n;n++)H.remove(e.cells[n]);t?i.parentNode.insertBefore(e,i):H.insertAfter(e,i)}),H.removeClass(H.select("td.mce-item-selected,th.mce-item-selected"),"mce-item-selected"))}function E(e){var t;return r(R,function(n,i){return r(n,function(n,r){return n.elm==e?(t={x:r,y:i},!1):void 0}),!t}),t}function k(e){A=E(e)}function S(){var e,t;return e=t=0,r(R,function(n,i){r(n,function(n,r){var o,a;d(n)&&(n=R[i][r],r>e&&(e=r),i>t&&(t=i),n.real&&(o=n.colspan-1,a=n.rowspan-1,o&&r+o>e&&(e=r+o),a&&i+a>t&&(t=i+a)))})}),{x:e,y:t}}function T(e){var t,n,r,i,o,a,s,l,c,d;if(B=E(e),A&&B){for(t=Math.min(A.x,B.x),n=Math.min(A.y,B.y),r=Math.max(A.x,B.x),i=Math.max(A.y,B.y),o=r,a=i,d=n;a>=d;d++)e=R[d][t],e.real||t-(e.colspan-1)=c;c++)e=R[n][c],e.real||n-(e.rowspan-1)=d;d++)for(c=t;r>=c;c++)e=R[d][c],e.real&&(s=e.colspan-1,l=e.rowspan-1,s&&c+s>o&&(o=c+s),l&&d+l>a&&(a=d+l));for(H.removeClass(H.select("td.mce-item-selected,th.mce-item-selected"),"mce-item-selected"),d=n;a>=d;d++)for(c=t;o>=c;c++)R[d][c]&&H.addClass(R[d][c].elm,"mce-item-selected")}}var R,A,B,L,D=i.selection,H=D.dom;o=o||H.getParent(D.getStart(),"table"),a(),L=H.getParent(D.getStart(),"th,td"),L&&(A=E(L),B=S(),L=l(A.x,A.y)),e.extend(this,{deleteTable:f,split:g,merge:v,insertRow:y,insertCol:b,deleteCols:C,deleteRows:x,cutRows:w,copyRows:_,pasteRows:N,getPos:E,setStartCell:k,setEndCell:T})}}),r(u,[f,d,c],function(e,t,n){function r(e,t){return parseInt(e.getAttribute(t)||1,10)}var i=n.each;return function(n){function o(){function t(t){function o(e,r){var i=e?"previousSibling":"nextSibling",o=n.dom.getParent(r,"tr"),s=o[i];if(s)return g(n,r,s,e),t.preventDefault(),!0;var d=n.dom.getParent(o,"table"),u=o.parentNode,f=u.nodeName.toLowerCase();if("tbody"===f||f===(e?"tfoot":"thead")){var p=a(e,d,u,"tbody");if(null!==p)return l(e,p,r)}return c(e,o,i,d)}function a(e,t,r,i){var o=n.dom.select(">"+i,t),a=o.indexOf(r);if(e&&0===a||!e&&a===o.length-1)return s(e,t);if(-1===a){var l="thead"===r.tagName.toLowerCase()?0:o.length-1;return o[l]}return o[a+(e?-1:1)]}function s(e,t){var r=e?"thead":"tfoot",i=n.dom.select(">"+r,t);return 0!==i.length?i[0]:null}function l(e,r,i){var o=d(r,e);return o&&g(n,i,o,e),t.preventDefault(),!0}function c(e,r,i,a){var s=a[i];if(s)return u(s),!0;var l=n.dom.getParent(a,"td,th");if(l)return o(e,l,t);var c=d(r,!e);return u(c),t.preventDefault(),!1}function d(e,t){var r=e&&e[t?"lastChild":"firstChild"];return r&&"BR"===r.nodeName?n.dom.getParent(r,"td,th"):r}function u(e){n.selection.setCursorLocation(e,0)}function f(){return b==e.UP||b==e.DOWN}function p(e){var t=e.selection.getNode(),n=e.dom.getParent(t,"tr");return null!==n}function m(e){for(var t=0,n=e;n.previousSibling;)n=n.previousSibling,t+=r(n,"colspan");return t}function h(e,t){var n=0,o=0;return i(e.children,function(e,i){return n+=r(e,"colspan"),o=i,n>t?!1:void 0}),o}function g(e,t,r,i){var o=m(n.dom.getParent(t,"td,th")),a=h(r,o),s=r.childNodes[a],l=d(s,i);u(l||s)}function v(e){var t=n.selection.getNode(),r=n.dom.getParent(t,"td,th"),i=n.dom.getParent(e,"td,th");return r&&r!==i&&y(r,i)}function y(e,t){return n.dom.getParent(e,"TABLE")===n.dom.getParent(t,"TABLE")}var b=t.keyCode;if(f()&&p(n)){var C=n.selection.getNode();setTimeout(function(){v(C)&&o(!t.shiftKey&&b===e.UP,C,t)},0)}}n.on("KeyDown",function(e){t(e)})}function a(){function e(e,t){var n=t.ownerDocument,r=n.createRange(),i;return r.setStartBefore(t),r.setEnd(e.endContainer,e.endOffset),i=n.createElement("body"),i.appendChild(r.cloneContents()),0===i.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi,"-").replace(/<[^>]+>/g,"").length}n.on("KeyDown",function(t){var r,i,o=n.dom;(37==t.keyCode||38==t.keyCode)&&(r=n.selection.getRng(),i=o.getParent(r.startContainer,"table"),i&&n.getBody().firstChild==i&&e(r,i)&&(r=o.createRng(),r.setStartBefore(i),r.setEndBefore(i),n.selection.setRng(r),t.preventDefault()))})}function s(){n.on("KeyDown SetContent VisualAid",function(){var e;for(e=n.getBody().lastChild;e;e=e.previousSibling)if(3==e.nodeType){if(e.nodeValue.length>0)break}else if(1==e.nodeType&&!e.getAttribute("data-mce-bogus"))break;e&&"TABLE"==e.nodeName&&(n.settings.forced_root_block?n.dom.add(n.getBody(),n.settings.forced_root_block,n.settings.forced_root_block_attrs,t.ie&&t.ie<11?" ":'
'):n.dom.add(n.getBody(),"br",{"data-mce-bogus":"1"}))}),n.on("PreProcess",function(e){var t=e.node.lastChild;t&&("BR"==t.nodeName||1==t.childNodes.length&&("BR"==t.firstChild.nodeName||"\xa0"==t.firstChild.nodeValue))&&t.previousSibling&&"TABLE"==t.previousSibling.nodeName&&n.dom.remove(t)})}function l(){function e(e,t,n,r){var i=3,o=e.dom.getParent(t.startContainer,"TABLE"),a,s,l;return o&&(a=o.parentNode),s=t.startContainer.nodeType==i&&0===t.startOffset&&0===t.endOffset&&r&&("TR"==n.nodeName||n==a),l=("TD"==n.nodeName||"TH"==n.nodeName)&&!r,s||l}function t(){var t=n.selection.getRng(),r=n.selection.getNode(),i=n.dom.getParent(t.startContainer,"TD,TH");if(e(n,t,r,i)){i||(i=r);for(var o=i.lastChild;o.lastChild;)o=o.lastChild;t.setEnd(o,o.nodeValue.length),n.selection.setRng(t)}}n.on("KeyDown",function(){t()}),n.on("MouseDown",function(e){2!=e.button&&t()})}function c(){n.on("keydown",function(t){if((t.keyCode==e.DELETE||t.keyCode==e.BACKSPACE)&&!t.isDefaultPrevented()){var r=n.dom.getParent(n.selection.getStart(),"table");if(r){for(var i=n.dom.select("td,th",r),o=i.length;o--;)if(!n.dom.hasClass(i[o],"mce-item-selected"))return;t.preventDefault(),n.execCommand("mceTableDelete")}}})}c(),t.webkit&&(o(),l()),t.gecko&&(a(),s()),t.ie>10&&(a(),s())}}),r(p,[l,m,c],function(e,t,n){return function(r){function i(){r.getBody().style.webkitUserSelect="",d&&(r.dom.removeClass(r.dom.select("td.mce-item-selected,th.mce-item-selected"),"mce-item-selected"),d=!1)}function o(t){var n,i,o=t.target;if(l&&(s||o!=l)&&("TD"==o.nodeName||"TH"==o.nodeName)){i=a.getParent(o,"table"),i==c&&(s||(s=new e(r,i),s.setStartCell(l),r.getBody().style.webkitUserSelect="none"),s.setEndCell(o),d=!0),n=r.selection.getSel();try{n.removeAllRanges?n.removeAllRanges():n.empty()}catch(u){}t.preventDefault()}}var a=r.dom,s,l,c,d=!0;return r.on("MouseDown",function(e){2!=e.button&&(i(),l=a.getParent(e.target,"td,th"),c=a.getParent(l,"table"))}),a.bind(r.getDoc(),"mouseover",o),r.on("remove",function(){a.unbind(r.getDoc(),"mouseover",o)}),r.on("MouseUp",function(){function e(e,r){var o=new t(e,e);do{if(3==e.nodeType&&0!==n.trim(e.nodeValue).length)return r?i.setStart(e,0):i.setEnd(e,e.nodeValue.length),void 0;if("BR"==e.nodeName)return r?i.setStartBefore(e):i.setEndBefore(e),void 0}while(e=r?o.next():o.prev())}var i,o=r.selection,d,u,f,p,m;if(l){if(s&&(r.getBody().style.webkitUserSelect=""),d=a.select("td.mce-item-selected,th.mce-item-selected"),d.length>0){i=a.createRng(),f=d[0],m=d[d.length-1],i.setStartBefore(f),i.setEndAfter(f),e(f,1),u=new t(f,a.getParent(d[0],"table"));do if("TD"==f.nodeName||"TH"==f.nodeName){if(!a.hasClass(f,"mce-item-selected"))break;p=f}while(f=u.next());e(p),o.setRng(i)}r.nodeChanged(),l=s=c=null}}),r.on("KeyUp",function(){i()}),{clear:i}}}),r(h,[l,u,p,c,m,d,g],function(e,t,n,r,i,o,a){function s(r){function i(e){return e?e.replace(/px$/,""):""}function a(e){return/^[0-9]+$/.test(e)&&(e+="px"),e}function s(e){l("left center right".split(" "),function(t){r.formatter.remove("align"+t,{},e)})}function c(){var e=r.dom,t,n;t=e.getParent(r.selection.getStart(),"table"),n={width:i(e.getStyle(t,"width")||e.getAttrib(t,"width")),height:i(e.getStyle(t,"height")||e.getAttrib(t,"height")),cellspacing:e.getAttrib(t,"cellspacing"),cellpadding:e.getAttrib(t,"cellpadding"),border:e.getAttrib(t,"border"),caption:!!e.select("caption",t)[0]},l("left center right".split(" "),function(e){r.formatter.matchNode(t,"align"+e)&&(n.align=e)}),r.windowManager.open({title:"Table properties",items:{type:"form",layout:"grid",columns:2,data:n,defaults:{type:"textbox",maxWidth:50},items:[{label:"Width",name:"width"},{label:"Height",name:"height"},{label:"Cell spacing",name:"cellspacing"},{label:"Cell padding",name:"cellpadding"},{label:"Border",name:"border"},{label:"Caption",name:"caption",type:"checkbox"},{label:"Alignment",minWidth:90,name:"align",type:"listbox",text:"None",maxWidth:null,values:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]}]},onsubmit:function(){var n=this.toJSON(),i;r.undoManager.transact(function(){r.dom.setAttribs(t,{cellspacing:n.cellspacing,cellpadding:n.cellpadding,border:n.border}),r.dom.setStyles(t,{width:a(n.width),height:a(n.height)}),i=e.select("caption",t)[0],i&&!n.caption&&e.remove(i),!i&&n.caption&&(i=e.create("caption"),i.innerHTML=o.ie?"\xa0":'
',t.insertBefore(i,t.firstChild)),s(t),n.align&&r.formatter.apply("align"+n.align,{},t),r.focus(),r.addVisual()})}})}function d(e,t){r.windowManager.open({title:"Merge cells",body:[{label:"Cols",name:"cols",type:"textbox",size:10},{label:"Rows",name:"rows",type:"textbox",size:10}],onsubmit:function(){var n=this.toJSON();r.undoManager.transact(function(){e.merge(t,n.cols,n.rows)})}})}function u(){var e=r.dom,t,n,o=[];o=r.dom.select("td.mce-item-selected,th.mce-item-selected"),t=r.dom.getParent(r.selection.getStart(),"td,th"),!o.length&&t&&o.push(t),t=t||o[0],n={width:i(e.getStyle(t,"width")||e.getAttrib(t,"width")),height:i(e.getStyle(t,"height")||e.getAttrib(t,"height")),scope:e.getAttrib(t,"scope")},n.type=t.nodeName.toLowerCase(),l("left center right".split(" "),function(e){r.formatter.matchNode(t,"align"+e)&&(n.align=e)}),r.windowManager.open({title:"Cell properties",items:{type:"form",data:n,layout:"grid",columns:2,defaults:{type:"textbox",maxWidth:50},items:[{label:"Width",name:"width"},{label:"Height",name:"height"},{label:"Cell type",name:"type",type:"listbox",text:"None",minWidth:90,maxWidth:null,menu:[{text:"Cell",value:"td"},{text:"Header cell",value:"th"}]},{label:"Scope",name:"scope",type:"listbox",text:"None",minWidth:90,maxWidth:null,menu:[{text:"None",value:""},{text:"Row",value:"row"},{text:"Column",value:"col"},{text:"Row group",value:"rowgroup"},{text:"Column group",value:"colgroup"}]},{label:"Alignment",name:"align",type:"listbox",text:"None",minWidth:90,maxWidth:null,values:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]}]},onsubmit:function(){var t=this.toJSON();r.undoManager.transact(function(){l(o,function(n){r.dom.setAttrib(n,"scope",t.scope),r.dom.setStyles(n,{width:a(t.width),height:a(t.height)}),t.type&&n.nodeName.toLowerCase()!=t.type&&(n=e.rename(n,t.type)),s(n),t.align&&r.formatter.apply("align"+t.align,{},n)}),r.focus()})}})}function f(){var e=r.dom,t,n,o,c,d=[];t=r.dom.getParent(r.selection.getStart(),"table"),n=r.dom.getParent(r.selection.getStart(),"td,th"),l(t.rows,function(t){l(t.cells,function(r){return e.hasClass(r,"mce-item-selected")||r==n?(d.push(t),!1):void 0})}),o=d[0],c={height:i(e.getStyle(o,"height")||e.getAttrib(o,"height")),scope:e.getAttrib(o,"scope")},c.type=o.parentNode.nodeName.toLowerCase(),l("left center right".split(" "),function(e){r.formatter.matchNode(o,"align"+e)&&(c.align=e)}),r.windowManager.open({title:"Row properties",items:{type:"form",data:c,columns:2,defaults:{type:"textbox"},items:[{type:"listbox",name:"type",label:"Row type",text:"None",maxWidth:null,menu:[{text:"Header",value:"thead"},{text:"Body",value:"tbody"},{text:"Footer",value:"tfoot"}]},{type:"listbox",name:"align",label:"Alignment",text:"None",maxWidth:null,menu:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]},{label:"Height",name:"height"}]},onsubmit:function(){var t=this.toJSON(),n,i,o;r.undoManager.transact(function(){var c=t.type;l(d,function(l){r.dom.setAttrib(l,"scope",t.scope),r.dom.setStyles(l,{height:a(t.height)}),c!=l.parentNode.nodeName.toLowerCase()&&(n=e.getParent(l,"table"),i=l.parentNode,o=e.select(c,n)[0],o||(o=e.create(c),n.firstChild?n.insertBefore(o,n.firstChild):n.appendChild(o)),o.appendChild(l),i.hasChildNodes()||e.remove(i)),s(l),t.align&&r.formatter.apply("align"+t.align,{},l)}),r.focus()})}})}function p(e){return function(){r.execCommand(e)}}function m(e,t){var n,i,a;for(a="",n=0;t>n;n++){for(a+="",i=0;e>i;i++)a+="";a+=""}a+="
"+(o.ie?" ":"
")+"
",r.insertContent(a)}function h(e,t){function n(){e.disabled(!r.dom.getParent(r.selection.getStart(),t)),r.selection.selectorChanged(t,function(t){e.disabled(!t)})}r.initialized?n():r.on("init",n)}function g(){h(this,"table")}function v(){h(this,"td,th")}function y(){var e="";e='';for(var t=0;10>t;t++){e+="";for(var n=0;10>n;n++)e+='';e+=""}return e+="",e+='
0 x 0
'}var b,C,x=this;r.addMenuItem("inserttable",{text:"Insert table",icon:"table",context:"table",onhide:function(){r.dom.removeClass(this.menu.items()[0].getEl().getElementsByTagName("a"),"mce-active")},menu:[{type:"container",html:y(),onmousemove:function(e){var t,n,i=e.target;if("A"==i.nodeName){var o=r.dom.getParent(i,"table"),a=i.getAttribute("data-mce-index"),s=e.control.parent().rel;if(a!=this.lastPos){if(a=a.split(","),a[0]=parseInt(a[0],10),a[1]=parseInt(a[1],10),e.control.isRtl()||"tl-tr"==s){for(n=9;n>=0;n--)for(t=0;10>t;t++)r.dom.toggleClass(o.rows[n].childNodes[t].firstChild,"mce-active",t>=a[0]&&n<=a[1]);a[0]=9-a[0],o.nextSibling.innerHTML=a[0]+" x "+(a[1]+1)}else{for(n=0;10>n;n++)for(t=0;10>t;t++)r.dom.toggleClass(o.rows[n].childNodes[t].firstChild,"mce-active",t<=a[0]&&n<=a[1]);o.nextSibling.innerHTML=a[0]+1+" x "+(a[1]+1)}this.lastPos=a}}},onclick:function(e){"A"==e.target.nodeName&&this.lastPos&&(e.preventDefault(),m(this.lastPos[0]+1,this.lastPos[1]+1),this.parent().cancel())}}]}),r.addMenuItem("tableprops",{text:"Table properties",context:"table",onPostRender:g,onclick:c}),r.addMenuItem("deletetable",{text:"Delete table",context:"table",onPostRender:g,cmd:"mceTableDelete"}),r.addMenuItem("cell",{separator:"before",text:"Cell",context:"table",menu:[{text:"Cell properties",onclick:p("mceTableCellProps"),onPostRender:v},{text:"Merge cells",onclick:p("mceTableMergeCells"),onPostRender:v},{text:"Split cell",onclick:p("mceTableSplitCells"),onPostRender:v}]}),r.addMenuItem("row",{text:"Row",context:"table",menu:[{text:"Insert row before",onclick:p("mceTableInsertRowBefore"),onPostRender:v},{text:"Insert row after",onclick:p("mceTableInsertRowAfter"),onPostRender:v},{text:"Delete row",onclick:p("mceTableDeleteRow"),onPostRender:v},{text:"Row properties",onclick:p("mceTableRowProps"),onPostRender:v},{text:"-"},{text:"Cut row",onclick:p("mceTableCutRow"),onPostRender:v},{text:"Copy row",onclick:p("mceTableCopyRow"),onPostRender:v},{text:"Paste row before",onclick:p("mceTablePasteRowBefore"),onPostRender:v},{text:"Paste row after",onclick:p("mceTablePasteRowAfter"),onPostRender:v}]}),r.addMenuItem("column",{text:"Column",context:"table",menu:[{text:"Insert column before",onclick:p("mceTableInsertColBefore"),onPostRender:v},{text:"Insert column after",onclick:p("mceTableInsertColAfter"),onPostRender:v},{text:"Delete column",onclick:p("mceTableDeleteCol"),onPostRender:v}]});var w=[];l("inserttable tableprops deletetable | cell row column".split(" "),function(e){"|"==e?w.push({text:"-"}):w.push(r.menuItems[e])}),r.addButton("table",{type:"menubutton",title:"Table",menu:w}),o.isIE||r.on("click",function(e){e=e.target,"TABLE"===e.nodeName&&(r.selection.select(e),r.nodeChanged())}),x.quirks=new t(r),r.on("Init",function(){b=r.windowManager,x.cellSelection=new n(r)}),l({mceTableSplitCells:function(e){e.split()},mceTableMergeCells:function(e){var t,n,i;i=r.dom.getParent(r.selection.getStart(),"th,td"),i&&(t=i.rowSpan,n=i.colSpan),r.dom.select("td.mce-item-selected,th.mce-item-selected").length?e.merge():d(e,i)},mceTableInsertRowBefore:function(e){e.insertRow(!0)},mceTableInsertRowAfter:function(e){e.insertRow()},mceTableInsertColBefore:function(e){e.insertCol(!0)},mceTableInsertColAfter:function(e){e.insertCol()},mceTableDeleteCol:function(e){e.deleteCols()},mceTableDeleteRow:function(e){e.deleteRows()},mceTableCutRow:function(e){C=e.cutRows()},mceTableCopyRow:function(e){C=e.copyRows()},mceTablePasteRowBefore:function(e){e.pasteRows(C,!0)},mceTablePasteRowAfter:function(e){e.pasteRows(C)},mceTableDelete:function(e){e.deleteTable()}},function(t,n){r.addCommand(n,function(){var n=new e(r);n&&(t(n),r.execCommand("mceRepaint"),x.cellSelection.clear())})}),l({mceInsertTable:function(){c()},mceTableRowProps:f,mceTableCellProps:u},function(e,t){r.addCommand(t,function(t,n){e(n)})})}var l=r.each;a.add("table",s)}),a([l,u,p,h])}(this); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/table/row.htm b/common/static/js/vendor/tiny_mce/plugins/table/row.htm deleted file mode 100644 index 7b4613700f..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/table/row.htm +++ /dev/null @@ -1,158 +0,0 @@ - - - - {#table_dlg.row_title} - - - - - - - - - -
- - -
-
-
- {#table_dlg.general_props} - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
- -
- -
-
-
- -
-
- {#table_dlg.advanced_props} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
- - - - - -
 
-
- - - - - - -
 
-
-
-
-
-
- -
-
- -
- - - -
-
- - diff --git a/common/static/js/vendor/tiny_mce/plugins/table/table.htm b/common/static/js/vendor/tiny_mce/plugins/table/table.htm deleted file mode 100644 index 52e6bf28f9..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/table/table.htm +++ /dev/null @@ -1,188 +0,0 @@ - - - - {#table_dlg.title} - - - - - - - - - - -
- - -
-
-
- {#table_dlg.general_props} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
- -
-
- {#table_dlg.advanced_props} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - - -
 
-
- -
- -
- -
- - - - - -
 
-
- - - - - -
 
-
-
-
-
- -
- - -
-
- - diff --git a/common/static/js/vendor/tiny_mce/plugins/template/blank.htm b/common/static/js/vendor/tiny_mce/plugins/template/blank.htm deleted file mode 100644 index 538a3b12c9..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/template/blank.htm +++ /dev/null @@ -1,12 +0,0 @@ - - - blank_page - - - - - - - diff --git a/common/static/js/vendor/tiny_mce/plugins/template/css/template.css b/common/static/js/vendor/tiny_mce/plugins/template/css/template.css deleted file mode 100644 index 0a03f2e5c0..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/template/css/template.css +++ /dev/null @@ -1,23 +0,0 @@ -#frmbody { - padding: 10px; - background-color: #FFF; - border: 1px solid #CCC; -} - -.frmRow { - margin-bottom: 10px; -} - -#templatesrc { - border: none; - width: 320px; - height: 240px; -} - -.title { - padding-bottom: 5px; -} - -.mceActionPanel { - padding-top: 5px; -} diff --git a/common/static/js/vendor/tiny_mce/plugins/template/editor_plugin.js b/common/static/js/vendor/tiny_mce/plugins/template/editor_plugin.js deleted file mode 100644 index ebe3c27d78..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/template/editor_plugin.js +++ /dev/null @@ -1 +0,0 @@ -(function(){var a=tinymce.each;tinymce.create("tinymce.plugins.TemplatePlugin",{init:function(b,c){var d=this;d.editor=b;b.addCommand("mceTemplate",function(e){b.windowManager.open({file:c+"/template.htm",width:b.getParam("template_popup_width",750),height:b.getParam("template_popup_height",600),inline:1},{plugin_url:c})});b.addCommand("mceInsertTemplate",d._insertTemplate,d);b.addButton("template",{title:"template.desc",cmd:"mceTemplate"});b.onPreProcess.add(function(e,g){var f=e.dom;a(f.select("div",g.node),function(h){if(f.hasClass(h,"mceTmpl")){a(f.select("*",h),function(i){if(f.hasClass(i,e.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))){i.innerHTML=d._getDateTime(new Date(),e.getParam("template_mdate_format",e.getLang("template.mdate_format")))}});d._replaceVals(h)}})})},getInfo:function(){return{longname:"Template plugin",author:"Moxiecode Systems AB",authorurl:"http://www.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/template",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_insertTemplate:function(i,j){var k=this,g=k.editor,f,c,d=g.dom,b=g.selection.getContent();f=j.content;a(k.editor.getParam("template_replace_values"),function(l,h){if(typeof(l)!="function"){f=f.replace(new RegExp("\\{\\$"+h+"\\}","g"),l)}});c=d.create("div",null,f);n=d.select(".mceTmpl",c);if(n&&n.length>0){c=d.create("div",null);c.appendChild(n[0].cloneNode(true))}function e(l,h){return new RegExp("\\b"+h+"\\b","g").test(l.className)}a(d.select("*",c),function(h){if(e(h,g.getParam("template_cdate_classes","cdate").replace(/\s+/g,"|"))){h.innerHTML=k._getDateTime(new Date(),g.getParam("template_cdate_format",g.getLang("template.cdate_format")))}if(e(h,g.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))){h.innerHTML=k._getDateTime(new Date(),g.getParam("template_mdate_format",g.getLang("template.mdate_format")))}if(e(h,g.getParam("template_selected_content_classes","selcontent").replace(/\s+/g,"|"))){h.innerHTML=b}});k._replaceVals(c);g.execCommand("mceInsertContent",false,c.innerHTML);g.addVisual()},_replaceVals:function(c){var d=this.editor.dom,b=this.editor.getParam("template_replace_values");a(d.select("*",c),function(f){a(b,function(g,e){if(d.hasClass(f,e)){if(typeof(b[e])=="function"){b[e](f)}}})})},_getDateTime:function(e,b){if(!b){return""}function c(g,d){var f;g=""+g;if(g.length 0) { - el = dom.create('div', null); - el.appendChild(n[0].cloneNode(true)); - } - - function hasClass(n, c) { - return new RegExp('\\b' + c + '\\b', 'g').test(n.className); - }; - - each(dom.select('*', el), function(n) { - // Replace cdate - if (hasClass(n, ed.getParam('template_cdate_classes', 'cdate').replace(/\s+/g, '|'))) - n.innerHTML = t._getDateTime(new Date(), ed.getParam("template_cdate_format", ed.getLang("template.cdate_format"))); - - // Replace mdate - if (hasClass(n, ed.getParam('template_mdate_classes', 'mdate').replace(/\s+/g, '|'))) - n.innerHTML = t._getDateTime(new Date(), ed.getParam("template_mdate_format", ed.getLang("template.mdate_format"))); - - // Replace selection - if (hasClass(n, ed.getParam('template_selected_content_classes', 'selcontent').replace(/\s+/g, '|'))) - n.innerHTML = sel; - }); - - t._replaceVals(el); - - ed.execCommand('mceInsertContent', false, el.innerHTML); - ed.addVisual(); - }, - - _replaceVals : function(e) { - var dom = this.editor.dom, vl = this.editor.getParam('template_replace_values'); - - each(dom.select('*', e), function(e) { - each(vl, function(v, k) { - if (dom.hasClass(e, k)) { - if (typeof(vl[k]) == 'function') - vl[k](e); - } - }); - }); - }, - - _getDateTime : function(d, fmt) { - if (!fmt) - return ""; - - function addZeros(value, len) { - var i; - - value = "" + value; - - if (value.length < len) { - for (i=0; i<(len-value.length); i++) - value = "0" + value; - } - - return value; - } - - fmt = fmt.replace("%D", "%m/%d/%y"); - fmt = fmt.replace("%r", "%I:%M:%S %p"); - fmt = fmt.replace("%Y", "" + d.getFullYear()); - fmt = fmt.replace("%y", "" + d.getYear()); - fmt = fmt.replace("%m", addZeros(d.getMonth()+1, 2)); - fmt = fmt.replace("%d", addZeros(d.getDate(), 2)); - fmt = fmt.replace("%H", "" + addZeros(d.getHours(), 2)); - fmt = fmt.replace("%M", "" + addZeros(d.getMinutes(), 2)); - fmt = fmt.replace("%S", "" + addZeros(d.getSeconds(), 2)); - fmt = fmt.replace("%I", "" + ((d.getHours() + 11) % 12 + 1)); - fmt = fmt.replace("%p", "" + (d.getHours() < 12 ? "AM" : "PM")); - fmt = fmt.replace("%B", "" + this.editor.getLang("template_months_long").split(',')[d.getMonth()]); - fmt = fmt.replace("%b", "" + this.editor.getLang("template_months_short").split(',')[d.getMonth()]); - fmt = fmt.replace("%A", "" + this.editor.getLang("template_day_long").split(',')[d.getDay()]); - fmt = fmt.replace("%a", "" + this.editor.getLang("template_day_short").split(',')[d.getDay()]); - fmt = fmt.replace("%%", "%"); - - return fmt; - } - }); - - // Register plugin - tinymce.PluginManager.add('template', tinymce.plugins.TemplatePlugin); -})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/template/js/template.js b/common/static/js/vendor/tiny_mce/plugins/template/js/template.js deleted file mode 100644 index 673395a9c7..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/template/js/template.js +++ /dev/null @@ -1,106 +0,0 @@ -tinyMCEPopup.requireLangPack(); - -var TemplateDialog = { - preInit : function() { - var url = tinyMCEPopup.getParam("template_external_list_url"); - - if (url != null) - document.write(''); - }, - - init : function() { - var ed = tinyMCEPopup.editor, tsrc, sel, x, u; - - tsrc = ed.getParam("template_templates", false); - sel = document.getElementById('tpath'); - - // Setup external template list - if (!tsrc && typeof(tinyMCETemplateList) != 'undefined') { - for (x=0, tsrc = []; x'); - }); - }, - - selectTemplate : function(u, ti) { - var d = window.frames['templatesrc'].document, x, tsrc = this.tsrc; - - if (!u) - return; - - d.body.innerHTML = this.templateHTML = this.getFileContents(u); - - for (x=0; x")){var a="";tinymce.each(e.contentCSS,function(t){a+=''}),t=""+a+""+""+t+""+""}t=r(t,"template_preview_replace_values");var l=n.find("iframe")[0].getEl().contentWindow.document;l.open(),l.write(t),l.close()}var c=t.control.value();c.url?tinymce.util.XHR.send({url:c.url,success:function(e){l=e,a(l)}}):(l=c.content,a(l)),n.find("#description")[0].text(t.control.value().description)}var n,l,i=[];return t&&0!==t.length?(tinymce.each(t,function(e){i.push({selected:!i.length,text:e.title,value:{url:e.url,content:e.content,description:e.description}})}),n=e.windowManager.open({title:"Insert template",layout:"flex",direction:"column",align:"stretch",padding:15,spacing:10,items:[{type:"form",flex:0,padding:0,items:[{type:"container",label:"Templates",items:{type:"listbox",label:"Templates",name:"template",values:i,onselect:a}}]},{type:"label",name:"description",label:"Description",text:" "},{type:"iframe",flex:1,border:1}],onsubmit:function(){c(!1,l)},width:e.getParam("template_popup_width",600),height:e.getParam("template_popup_height",500)}),n.find("listbox")[0].fire("select"),void 0):(e.windowManager.alert("No templates defined"),void 0)}function n(t,a){function n(e,t){if(e=""+e,e.length0&&(o=p.create("div",null),o.appendChild(s[0].cloneNode(!0))),i(p.select("*",o),function(t){c(t,e.getParam("template_cdate_classes","cdate").replace(/\s+/g,"|"))&&(t.innerHTML=n(e.getParam("template_cdate_format",e.getLang("template.cdate_format")))),c(t,e.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))&&(t.innerHTML=n(e.getParam("template_mdate_format",e.getLang("template.mdate_format")))),c(t,e.getParam("template_selected_content_classes","selcontent").replace(/\s+/g,"|"))&&(t.innerHTML=m)}),l(o),e.execCommand("mceInsertContent",!1,o.innerHTML),e.addVisual()}var i=tinymce.each;e.addCommand("mceInsertTemplate",c),e.addButton("template",{title:"Insert template",onclick:t(a)}),e.addMenuItem("template",{text:"Insert template",onclick:t(a),context:"insert"}),e.on("PreProcess",function(t){var a=e.dom;i(a.select("div",t.node),function(t){a.hasClass(t,"mceTmpl")&&(i(a.select("*",t),function(t){a.hasClass(t,e.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))&&(t.innerHTML=n(e.getParam("template_mdate_format",e.getLang("template.mdate_format"))))}),l(t))})})}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/template/template.htm b/common/static/js/vendor/tiny_mce/plugins/template/template.htm deleted file mode 100644 index 59b7cdc09e..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/template/template.htm +++ /dev/null @@ -1,31 +0,0 @@ - - - {#template_dlg.title} - - - - - -
-
-
{#template_dlg.desc}
-
- -
-
-
-
- {#template_dlg.preview} - -
-
- -
- - -
-
- - diff --git a/common/static/js/vendor/tiny_mce/plugins/textcolor/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/textcolor/plugin.min.js new file mode 100644 index 0000000000..ee943e497f --- /dev/null +++ b/common/static/js/vendor/tiny_mce/plugins/textcolor/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("textcolor",function(e){function o(){var o,t,r=[];for(t=e.settings.textcolor_map||["000000","Black","993300","Burnt orange","333300","Dark olive","003300","Dark green","003366","Dark azure","000080","Navy Blue","333399","Indigo","333333","Very dark gray","800000","Maroon","FF6600","Orange","808000","Olive","008000","Green","008080","Teal","0000FF","Blue","666699","Grayish blue","808080","Gray","FF0000","Red","FF9900","Amber","99CC00","Yellow green","339966","Sea green","33CCCC","Turquoise","3366FF","Royal blue","800080","Purple","999999","Medium gray","FF00FF","Magenta","FFCC00","Gold","FFFF00","Yellow","00FF00","Lime","00FFFF","Aqua","00CCFF","Sky blue","993366","Brown","C0C0C0","Silver","FF99CC","Pink","FFCC99","Peach","FFFF99","Light yellow","CCFFCC","Pale green","CCFFFF","Pale cyan","99CCFF","Light sky blue","CC99FF","Plum","FFFFFF","White"],o=0;o',c=t.length-1,n=e.settings.textcolor_rows||5,a=e.settings.textcolor_cols||8,i=0;n>i;i++){for(l+="",F=0;a>F;F++)d=i*a+F,d>c?l+="":(r=t[d],l+='
'+"
"+"");l+=""}return l+=""}function r(o){var t,r=this.parent();(t=o.target.getAttribute("data-mce-color"))&&(r.hidePanel(),t="#"+t,r.color(t),e.execCommand(r.settings.selectcmd,!1,t))}function l(){var o=this;o._color&&e.execCommand(o.settings.selectcmd,!1,o._color)}e.addButton("forecolor",{type:"colorbutton",tooltip:"Text color",selectcmd:"ForeColor",panel:{html:t,onclick:r},onclick:l}),e.addButton("backcolor",{type:"colorbutton",tooltip:"Background color",selectcmd:"HiliteColor",panel:{html:t,onclick:r},onclick:l})}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/visualblocks/css/visualblocks.css b/common/static/js/vendor/tiny_mce/plugins/visualblocks/css/visualblocks.css index 681b588e13..fe6fa930a4 100644 --- a/common/static/js/vendor/tiny_mce/plugins/visualblocks/css/visualblocks.css +++ b/common/static/js/vendor/tiny_mce/plugins/visualblocks/css/visualblocks.css @@ -1,21 +1,128 @@ -p, h1, h2, h3, h4, h5, h6, hgroup, aside, div, section, article, blockquote, address, pre, figure {display: block; padding-top: 10px; border: 1px dashed #BBB; background: transparent no-repeat} -p, h1, h2, h3, h4, h5, h6, hgroup, aside, div, section, article, address, pre, figure {margin-left: 3px} -section, article, address, hgroup, aside, figure {margin: 0 0 1em 3px} +.mce-visualblocks p { + padding-top: 10px; + border: 1px dashed #BBB; + margin-left: 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7); +} -p {background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)} -h1 {background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)} -h2 {background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)} -h3 {background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)} -h4 {background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)} -h5 {background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)} -h6 {background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)} -div {background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)} -section {background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)} -article {background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)} -blockquote {background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)} -address {background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)} -pre {background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)} -hgroup {background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)} -aside {background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)} -figure {background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)} -figcaption {border: 1px dashed #BBB} +.mce-visualblocks h1 { + padding-top: 10px; + border: 1px dashed #BBB; + margin-left: 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==); +} + +.mce-visualblocks h2 { + padding-top: 10px; + border: 1px dashed #BBB; + margin-left: 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==); +} + +.mce-visualblocks h3 { + padding-top: 10px; + border: 1px dashed #BBB; + margin-left: 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7); +} + +.mce-visualblocks h4 { + padding-top: 10px; + border: 1px dashed #BBB; + margin-left: 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==); +} + +.mce-visualblocks h5 { + padding-top: 10px; + border: 1px dashed #BBB; + margin-left: 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==); +} + +.mce-visualblocks h6 { + padding-top: 10px; + border: 1px dashed #BBB; + margin-left: 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==); +} + +.mce-visualblocks div { + padding-top: 10px; + border: 1px dashed #BBB; + margin-left: 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7); +} + +.mce-visualblocks section { + padding-top: 10px; + border: 1px dashed #BBB; + margin: 0 0 1em 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=); +} + +.mce-visualblocks article { + padding-top: 10px; + border: 1px dashed #BBB; + margin: 0 0 1em 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7); +} + +.mce-visualblocks blockquote { + padding-top: 10px; + border: 1px dashed #BBB; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7); +} + +.mce-visualblocks address { + padding-top: 10px; + border: 1px dashed #BBB; + margin: 0 0 1em 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=); +} + +.mce-visualblocks pre { + padding-top: 10px; + border: 1px dashed #BBB; + margin-left: 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==); +} + +.mce-visualblocks figure { + padding-top: 10px; + border: 1px dashed #BBB; + margin: 0 0 1em 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7); +} + +.mce-visualblocks hgroup { + padding-top: 10px; + border: 1px dashed #BBB; + margin: 0 0 1em 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7); +} + +.mce-visualblocks aside { + padding-top: 10px; + border: 1px dashed #BBB; + margin: 0 0 1em 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=); +} + +.mce-visualblocks figcaption { + border: 1px dashed #BBB; +} + +.mce-visualblocks ul { + padding-top: 10px; + border: 1px dashed #BBB; + margin: 0 0 1em 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==) +} + +.mce-visualblocks ol { + padding-top: 10px; + border: 1px dashed #BBB; + margin: 0 0 1em 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==); +} diff --git a/common/static/js/vendor/tiny_mce/plugins/visualblocks/editor_plugin.js b/common/static/js/vendor/tiny_mce/plugins/visualblocks/editor_plugin.js deleted file mode 100644 index c65eaf2b4c..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/visualblocks/editor_plugin.js +++ /dev/null @@ -1 +0,0 @@ -(function(){tinymce.create("tinymce.plugins.VisualBlocks",{init:function(a,b){var c;if(!window.NodeList){return}a.addCommand("mceVisualBlocks",function(){var e=a.dom,d;if(!c){c=e.uniqueId();d=e.create("link",{id:c,rel:"stylesheet",href:b+"/css/visualblocks.css"});a.getDoc().getElementsByTagName("head")[0].appendChild(d)}else{d=e.get(c);d.disabled=!d.disabled}a.controlManager.setActive("visualblocks",!d.disabled)});a.addButton("visualblocks",{title:"visualblocks.desc",cmd:"mceVisualBlocks"});a.onInit.add(function(){if(a.settings.visualblocks_default_state){a.execCommand("mceVisualBlocks",false,null,{skip_focus:true})}})},getInfo:function(){return{longname:"Visual blocks",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualblocks",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("visualblocks",tinymce.plugins.VisualBlocks)})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/visualblocks/editor_plugin_src.js b/common/static/js/vendor/tiny_mce/plugins/visualblocks/editor_plugin_src.js deleted file mode 100644 index 51f8a613d2..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/visualblocks/editor_plugin_src.js +++ /dev/null @@ -1,63 +0,0 @@ -/** - * editor_plugin_src.js - * - * Copyright 2012, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -(function() { - tinymce.create('tinymce.plugins.VisualBlocks', { - init : function(ed, url) { - var cssId; - - // We don't support older browsers like IE6/7 and they don't provide prototypes for DOM objects - if (!window.NodeList) { - return; - } - - ed.addCommand('mceVisualBlocks', function() { - var dom = ed.dom, linkElm; - - if (!cssId) { - cssId = dom.uniqueId(); - linkElm = dom.create('link', { - id: cssId, - rel : 'stylesheet', - href : url + '/css/visualblocks.css' - }); - - ed.getDoc().getElementsByTagName('head')[0].appendChild(linkElm); - } else { - linkElm = dom.get(cssId); - linkElm.disabled = !linkElm.disabled; - } - - ed.controlManager.setActive('visualblocks', !linkElm.disabled); - }); - - ed.addButton('visualblocks', {title : 'visualblocks.desc', cmd : 'mceVisualBlocks'}); - - ed.onInit.add(function() { - if (ed.settings.visualblocks_default_state) { - ed.execCommand('mceVisualBlocks', false, null, {skip_focus : true}); - } - }); - }, - - getInfo : function() { - return { - longname : 'Visual blocks', - author : 'Moxiecode Systems AB', - authorurl : 'http://tinymce.moxiecode.com', - infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualblocks', - version : tinymce.majorVersion + "." + tinymce.minorVersion - }; - } - }); - - // Register plugin - tinymce.PluginManager.add('visualblocks', tinymce.plugins.VisualBlocks); -})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/visualblocks/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/visualblocks/plugin.min.js new file mode 100644 index 0000000000..cafa418736 --- /dev/null +++ b/common/static/js/vendor/tiny_mce/plugins/visualblocks/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("visualblocks",function(e,t){function n(){var t=this;t.active(r),e.on("VisualBlocks",function(){t.active(e.dom.hasClass(e.getBody(),"mce-visualblocks"))})}var i,a,r;window.NodeList&&(e.addCommand("mceVisualBlocks",function(){var n,o=e.dom;i||(i=o.uniqueId(),n=o.create("link",{id:i,rel:"stylesheet",href:t+"/css/visualblocks.css"}),e.getDoc().getElementsByTagName("head")[0].appendChild(n)),e.on("PreviewFormats AfterPreviewFormats",function(t){r&&o.toggleClass(e.getBody(),"mce-visualblocks","afterpreviewformats"==t.type)}),o.toggleClass(e.getBody(),"mce-visualblocks"),r=e.dom.hasClass(e.getBody(),"mce-visualblocks"),a&&a.active(o.hasClass(e.getBody(),"mce-visualblocks")),e.fire("VisualBlocks")}),e.addButton("visualblocks",{title:"Show blocks",cmd:"mceVisualBlocks",onPostRender:n}),e.addMenuItem("visualblocks",{text:"Show blocks",cmd:"mceVisualBlocks",onPostRender:n,selectable:!0,context:"view",prependToContext:!0}),e.on("init",function(){e.settings.visualblocks_default_state&&e.execCommand("mceVisualBlocks",!1,null,{skip_focus:!0})}),e.on("remove",function(){e.dom.removeClass(e.getBody(),"mce-visualblocks")}))}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/visualchars/editor_plugin.js b/common/static/js/vendor/tiny_mce/plugins/visualchars/editor_plugin.js deleted file mode 100644 index 1a148e8b4f..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/visualchars/editor_plugin.js +++ /dev/null @@ -1 +0,0 @@ -(function(){tinymce.create("tinymce.plugins.VisualChars",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceVisualChars",c._toggleVisualChars,c);a.addButton("visualchars",{title:"visualchars.desc",cmd:"mceVisualChars"});a.onBeforeGetContent.add(function(d,e){if(c.state&&e.format!="raw"&&!e.draft){c.state=true;c._toggleVisualChars(false)}})},getInfo:function(){return{longname:"Visual characters",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualchars",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_toggleVisualChars:function(m){var p=this,k=p.editor,a,g,j,n=k.getDoc(),o=k.getBody(),l,q=k.selection,e,c,f;p.state=!p.state;k.controlManager.setActive("visualchars",p.state);if(m){f=q.getBookmark()}if(p.state){a=[];tinymce.walk(o,function(b){if(b.nodeType==3&&b.nodeValue&&b.nodeValue.indexOf("\u00a0")!=-1){a.push(b)}},"childNodes");for(g=0;g$1');c=k.dom.create("div",null,l);while(node=c.lastChild){k.dom.insertAfter(node,a[g])}k.dom.remove(a[g])}}else{a=k.dom.select("span.mceItemNbsp",o);for(g=a.length-1;g>=0;g--){k.dom.remove(a[g],1)}}q.moveToBookmark(f)}});tinymce.PluginManager.add("visualchars",tinymce.plugins.VisualChars)})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/visualchars/editor_plugin_src.js b/common/static/js/vendor/tiny_mce/plugins/visualchars/editor_plugin_src.js deleted file mode 100644 index 0e3572e6eb..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/visualchars/editor_plugin_src.js +++ /dev/null @@ -1,83 +0,0 @@ -/** - * editor_plugin_src.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -(function() { - tinymce.create('tinymce.plugins.VisualChars', { - init : function(ed, url) { - var t = this; - - t.editor = ed; - - // Register commands - ed.addCommand('mceVisualChars', t._toggleVisualChars, t); - - // Register buttons - ed.addButton('visualchars', {title : 'visualchars.desc', cmd : 'mceVisualChars'}); - - ed.onBeforeGetContent.add(function(ed, o) { - if (t.state && o.format != 'raw' && !o.draft) { - t.state = true; - t._toggleVisualChars(false); - } - }); - }, - - getInfo : function() { - return { - longname : 'Visual characters', - author : 'Moxiecode Systems AB', - authorurl : 'http://tinymce.moxiecode.com', - infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualchars', - version : tinymce.majorVersion + "." + tinymce.minorVersion - }; - }, - - // Private methods - - _toggleVisualChars : function(bookmark) { - var t = this, ed = t.editor, nl, i, h, d = ed.getDoc(), b = ed.getBody(), nv, s = ed.selection, bo, div, bm; - - t.state = !t.state; - ed.controlManager.setActive('visualchars', t.state); - - if (bookmark) - bm = s.getBookmark(); - - if (t.state) { - nl = []; - tinymce.walk(b, function(n) { - if (n.nodeType == 3 && n.nodeValue && n.nodeValue.indexOf('\u00a0') != -1) - nl.push(n); - }, 'childNodes'); - - for (i = 0; i < nl.length; i++) { - nv = nl[i].nodeValue; - nv = nv.replace(/(\u00a0)/g, '$1'); - - div = ed.dom.create('div', null, nv); - while (node = div.lastChild) - ed.dom.insertAfter(node, nl[i]); - - ed.dom.remove(nl[i]); - } - } else { - nl = ed.dom.select('span.mceItemNbsp', b); - - for (i = nl.length - 1; i >= 0; i--) - ed.dom.remove(nl[i], 1); - } - - s.moveToBookmark(bm); - } - }); - - // Register plugin - tinymce.PluginManager.add('visualchars', tinymce.plugins.VisualChars); -})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/visualchars/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/visualchars/plugin.min.js new file mode 100644 index 0000000000..447423884e --- /dev/null +++ b/common/static/js/vendor/tiny_mce/plugins/visualchars/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("visualchars",function(e){function t(t){var n,a,r,o,l,s,c=e.getBody(),d=e.selection;if(i=!i,e.fire("VisualChars",{state:i}),t&&(s=d.getBookmark()),i)for(a=[],tinymce.walk(c,function(e){3==e.nodeType&&e.nodeValue&&-1!=e.nodeValue.indexOf(" ")&&a.push(e)},"childNodes"),r=0;r$1'),l=e.dom.create("div",null,o);n=l.lastChild;)e.dom.insertAfter(n,a[r]);e.dom.remove(a[r])}else for(a=e.dom.select("span.mce-nbsp",c),r=a.length-1;r>=0;r--)e.dom.remove(a[r],1);d.moveToBookmark(s)}function n(){var t=this;e.on("VisualChars",function(e){t.active(e.state)})}var i;e.addCommand("mceVisualChars",t),e.addButton("visualchars",{title:"Show invisible characters",cmd:"mceVisualChars",onPostRender:n}),e.addMenuItem("visualchars",{text:"Show invisible characters",cmd:"mceVisualChars",onPostRender:n,selectable:!0,context:"view",prependToContext:!0}),e.on("beforegetcontent",function(e){i&&"raw"!=e.format&&!e.draft&&(i=!0,t(!1))})}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/wordcount/editor_plugin.js b/common/static/js/vendor/tiny_mce/plugins/wordcount/editor_plugin.js deleted file mode 100644 index 42ece2092f..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/wordcount/editor_plugin.js +++ /dev/null @@ -1 +0,0 @@ -(function(){tinymce.create("tinymce.plugins.WordCount",{block:0,id:null,countre:null,cleanre:null,init:function(c,d){var e=this,f=0,g=tinymce.VK;e.countre=c.getParam("wordcount_countregex",/[\w\u2019\'-]+/g);e.cleanre=c.getParam("wordcount_cleanregex",/[0-9.(),;:!?%#$?\'\"_+=\\\/-]*/g);e.update_rate=c.getParam("wordcount_update_rate",2000);e.update_on_delete=c.getParam("wordcount_update_on_delete",false);e.id=c.id+"-word-count";c.onPostRender.add(function(i,h){var j,k;k=i.getParam("wordcount_target_id");if(!k){j=tinymce.DOM.get(i.id+"_path_row");if(j){tinymce.DOM.add(j.parentNode,"div",{style:"float: right"},i.getLang("wordcount.words","Words: ")+'0')}}else{tinymce.DOM.add(k,"span",{},'0')}});c.onInit.add(function(h){h.selection.onSetContent.add(function(){e._count(h)});e._count(h)});c.onSetContent.add(function(h){e._count(h)});function b(h){return h!==f&&(h===g.ENTER||f===g.SPACEBAR||a(f))}function a(h){return h===g.DELETE||h===g.BACKSPACE}c.onKeyUp.add(function(h,i){if(b(i.keyCode)||e.update_on_delete&&a(i.keyCode)){e._count(h)}f=i.keyCode})},_getCount:function(c){var a=0;var b=c.getContent({format:"raw"});if(b){b=b.replace(/\.\.\./g," ");b=b.replace(/<.[^<>]*?>/g," ").replace(/ | /gi," ");b=b.replace(/(\w+)(&.+?;)+(\w+)/,"$1$3").replace(/&.+?;/g," ");b=b.replace(this.cleanre,"");var d=b.match(this.countre);if(d){a=d.length}}return a},_count:function(a){var b=this;if(b.block){return}b.block=1;setTimeout(function(){if(!a.destroyed){var c=b._getCount(a);tinymce.DOM.setHTML(b.id,c.toString());setTimeout(function(){b.block=0},b.update_rate)}},1)},getInfo:function(){return{longname:"Word Count plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/wordcount",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("wordcount",tinymce.plugins.WordCount)})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/wordcount/editor_plugin_src.js b/common/static/js/vendor/tiny_mce/plugins/wordcount/editor_plugin_src.js deleted file mode 100644 index 3fb8fffa0e..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/wordcount/editor_plugin_src.js +++ /dev/null @@ -1,122 +0,0 @@ -/** - * editor_plugin_src.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -(function() { - tinymce.create('tinymce.plugins.WordCount', { - block : 0, - id : null, - countre : null, - cleanre : null, - - init : function(ed, url) { - var t = this, last = 0, VK = tinymce.VK; - - t.countre = ed.getParam('wordcount_countregex', /[\w\u2019\'-]+/g); // u2019 == ’ - t.cleanre = ed.getParam('wordcount_cleanregex', /[0-9.(),;:!?%#$?\'\"_+=\\\/-]*/g); - t.update_rate = ed.getParam('wordcount_update_rate', 2000); - t.update_on_delete = ed.getParam('wordcount_update_on_delete', false); - t.id = ed.id + '-word-count'; - - ed.onPostRender.add(function(ed, cm) { - var row, id; - - // Add it to the specified id or the theme advanced path - id = ed.getParam('wordcount_target_id'); - if (!id) { - row = tinymce.DOM.get(ed.id + '_path_row'); - - if (row) - tinymce.DOM.add(row.parentNode, 'div', {'style': 'float: right'}, ed.getLang('wordcount.words', 'Words: ') + '0'); - } else { - tinymce.DOM.add(id, 'span', {}, '0'); - } - }); - - ed.onInit.add(function(ed) { - ed.selection.onSetContent.add(function() { - t._count(ed); - }); - - t._count(ed); - }); - - ed.onSetContent.add(function(ed) { - t._count(ed); - }); - - function checkKeys(key) { - return key !== last && (key === VK.ENTER || last === VK.SPACEBAR || checkDelOrBksp(last)); - } - - function checkDelOrBksp(key) { - return key === VK.DELETE || key === VK.BACKSPACE; - } - - ed.onKeyUp.add(function(ed, e) { - if (checkKeys(e.keyCode) || t.update_on_delete && checkDelOrBksp(e.keyCode)) { - t._count(ed); - } - - last = e.keyCode; - }); - }, - - _getCount : function(ed) { - var tc = 0; - var tx = ed.getContent({ format: 'raw' }); - - if (tx) { - tx = tx.replace(/\.\.\./g, ' '); // convert ellipses to spaces - tx = tx.replace(/<.[^<>]*?>/g, ' ').replace(/ | /gi, ' '); // remove html tags and space chars - - // deal with html entities - tx = tx.replace(/(\w+)(&.+?;)+(\w+)/, "$1$3").replace(/&.+?;/g, ' '); - tx = tx.replace(this.cleanre, ''); // remove numbers and punctuation - - var wordArray = tx.match(this.countre); - if (wordArray) { - tc = wordArray.length; - } - } - - return tc; - }, - - _count : function(ed) { - var t = this; - - // Keep multiple calls from happening at the same time - if (t.block) - return; - - t.block = 1; - - setTimeout(function() { - if (!ed.destroyed) { - var tc = t._getCount(ed); - tinymce.DOM.setHTML(t.id, tc.toString()); - setTimeout(function() {t.block = 0;}, t.update_rate); - } - }, 1); - }, - - getInfo: function() { - return { - longname : 'Word Count plugin', - author : 'Moxiecode Systems AB', - authorurl : 'http://tinymce.moxiecode.com', - infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/wordcount', - version : tinymce.majorVersion + "." + tinymce.minorVersion - }; - } - }); - - tinymce.PluginManager.add('wordcount', tinymce.plugins.WordCount); -})(); diff --git a/common/static/js/vendor/tiny_mce/plugins/wordcount/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/wordcount/plugin.min.js new file mode 100644 index 0000000000..acda5d044c --- /dev/null +++ b/common/static/js/vendor/tiny_mce/plugins/wordcount/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("wordcount",function(e){function t(){e.theme.panel.find("#wordcount").text(["Words: {0}",a.getCount()])}var n,o,a=this;n=e.getParam("wordcount_countregex",/[\w\u2019\x27\-\u0600-\u06FF]+/g),o=e.getParam("wordcount_cleanregex",/[0-9.(),;:!?%#$?\x27\x22_+=\\\/\-]*/g),e.on("init",function(){var n=e.theme.panel&&e.theme.panel.find("#statusbar")[0];n&&window.setTimeout(function(){n.insert({type:"label",name:"wordcount",text:["Words: {0}",a.getCount()],classes:"wordcount",disabled:e.settings.readonly},0),e.on("setcontent beforeaddundo",t),e.on("keyup",function(e){32==e.keyCode&&t()})},0)}),a.getCount=function(){var t=e.getContent({format:"raw"}),a=0;if(t){t=t.replace(/\.\.\./g," "),t=t.replace(/<.[^<>]*?>/g," ").replace(/ | /gi," "),t=t.replace(/(\w+)(&.+?;)+(\w+)/,"$1$3").replace(/&.+?;/g," "),t=t.replace(o,"");var r=t.match(n);r&&(a=r.length)}return a}}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/abbr.htm b/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/abbr.htm deleted file mode 100644 index d41021802b..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/abbr.htm +++ /dev/null @@ -1,142 +0,0 @@ - - - - {#xhtmlxtras_dlg.title_abbr_element} - - - - - - - - - - -
- - -
-
-
- {#xhtmlxtras_dlg.fieldset_attrib_tab} - - - - - - - - - - - - - - - - - - - - - - - - - -
:
:
: - -
:
: - -
: - -
-
-
-
-
- {#xhtmlxtras_dlg.fieldset_events_tab} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
:
:
:
:
:
:
:
:
:
:
:
:
-
-
-
-
- - - -
-
- - diff --git a/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/acronym.htm b/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/acronym.htm deleted file mode 100644 index 12b189b435..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/acronym.htm +++ /dev/null @@ -1,142 +0,0 @@ - - - - {#xhtmlxtras_dlg.title_acronym_element} - - - - - - - - - - -
- - -
-
-
- {#xhtmlxtras_dlg.fieldset_attrib_tab} - - - - - - - - - - - - - - - - - - - - - - - - - -
:
:
: - -
:
: - -
: - -
-
-
-
-
- {#xhtmlxtras_dlg.fieldset_events_tab} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
:
:
:
:
:
:
:
:
:
:
:
:
-
-
-
-
- - - -
-
- - diff --git a/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/attributes.htm b/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/attributes.htm deleted file mode 100644 index d84f378bf3..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/attributes.htm +++ /dev/null @@ -1,149 +0,0 @@ - - - - {#xhtmlxtras_dlg.attribs_title} - - - - - - - - - -
- - -
-
-
- {#xhtmlxtras_dlg.attribute_attrib_tab} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
:
:
- -
:
: - -
: - -
-
-
-
-
- {#xhtmlxtras_dlg.attribute_events_tab} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
:
:
:
:
:
:
:
:
:
:
:
:
-
-
-
-
- - -
-
- - diff --git a/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/cite.htm b/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/cite.htm deleted file mode 100644 index ab61b330c6..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/cite.htm +++ /dev/null @@ -1,142 +0,0 @@ - - - - {#xhtmlxtras_dlg.title_cite_element} - - - - - - - - - - -
- - -
-
-
- {#xhtmlxtras_dlg.fieldset_attrib_tab} - - - - - - - - - - - - - - - - - - - - - - - - - -
:
:
: - -
:
: - -
: - -
-
-
-
-
- {#xhtmlxtras_dlg.fieldset_events_tab} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
:
:
:
:
:
:
:
:
:
:
:
:
-
-
-
-
- - - -
-
- - diff --git a/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/css/attributes.css b/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/css/attributes.css deleted file mode 100644 index 85b1b376de..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/css/attributes.css +++ /dev/null @@ -1,11 +0,0 @@ -.panel_wrapper div.current { - height: 290px; -} - -#id, #style, #title, #dir, #hreflang, #lang, #classlist, #tabindex, #accesskey { - width: 200px; -} - -#events_panel input { - width: 200px; -} diff --git a/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/css/popup.css b/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/css/popup.css deleted file mode 100644 index 034b985272..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/css/popup.css +++ /dev/null @@ -1,9 +0,0 @@ -input.field, select.field {width:200px;} -input.picker {width:179px; margin-left: 5px;} -input.disabled {border-color:#F2F2F2;} -img.picker {vertical-align:text-bottom; cursor:pointer;} -h1 {padding: 0 0 5px 0;} -.panel_wrapper div.current {height:160px;} -#xhtmlxtrasdel .panel_wrapper div.current, #xhtmlxtrasins .panel_wrapper div.current {height: 230px;} -a.browse span {display:block; width:20px; height:20px; background:url('../../../themes/advanced/img/icons.gif') -140px -20px;} -#datetime {width:180px;} diff --git a/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/del.htm b/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/del.htm deleted file mode 100644 index e3f34c7df9..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/del.htm +++ /dev/null @@ -1,162 +0,0 @@ - - - - {#xhtmlxtras_dlg.title_del_element} - - - - - - - - - - -
- - -
-
-
- {#xhtmlxtras_dlg.fieldset_general_tab} - - - - - - - - - -
: - - - - - -
-
:
-
-
- {#xhtmlxtras_dlg.fieldset_attrib_tab} - - - - - - - - - - - - - - - - - - - - - - - - - -
:
:
: - -
:
: - -
: - -
-
-
-
-
- {#xhtmlxtras_dlg.fieldset_events_tab} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
:
:
:
:
:
:
:
:
:
:
:
:
-
-
-
-
- - - -
-
- - diff --git a/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/editor_plugin.js b/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/editor_plugin.js deleted file mode 100644 index 9b98a5154b..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/editor_plugin.js +++ /dev/null @@ -1 +0,0 @@ -(function(){tinymce.create("tinymce.plugins.XHTMLXtrasPlugin",{init:function(a,b){a.addCommand("mceCite",function(){a.windowManager.open({file:b+"/cite.htm",width:350+parseInt(a.getLang("xhtmlxtras.cite_delta_width",0)),height:250+parseInt(a.getLang("xhtmlxtras.cite_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceAcronym",function(){a.windowManager.open({file:b+"/acronym.htm",width:350+parseInt(a.getLang("xhtmlxtras.acronym_delta_width",0)),height:250+parseInt(a.getLang("xhtmlxtras.acronym_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceAbbr",function(){a.windowManager.open({file:b+"/abbr.htm",width:350+parseInt(a.getLang("xhtmlxtras.abbr_delta_width",0)),height:250+parseInt(a.getLang("xhtmlxtras.abbr_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceDel",function(){a.windowManager.open({file:b+"/del.htm",width:340+parseInt(a.getLang("xhtmlxtras.del_delta_width",0)),height:310+parseInt(a.getLang("xhtmlxtras.del_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceIns",function(){a.windowManager.open({file:b+"/ins.htm",width:340+parseInt(a.getLang("xhtmlxtras.ins_delta_width",0)),height:310+parseInt(a.getLang("xhtmlxtras.ins_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceAttributes",function(){a.windowManager.open({file:b+"/attributes.htm",width:380+parseInt(a.getLang("xhtmlxtras.attr_delta_width",0)),height:370+parseInt(a.getLang("xhtmlxtras.attr_delta_height",0)),inline:1},{plugin_url:b})});a.addButton("cite",{title:"xhtmlxtras.cite_desc",cmd:"mceCite"});a.addButton("acronym",{title:"xhtmlxtras.acronym_desc",cmd:"mceAcronym"});a.addButton("abbr",{title:"xhtmlxtras.abbr_desc",cmd:"mceAbbr"});a.addButton("del",{title:"xhtmlxtras.del_desc",cmd:"mceDel"});a.addButton("ins",{title:"xhtmlxtras.ins_desc",cmd:"mceIns"});a.addButton("attribs",{title:"xhtmlxtras.attribs_desc",cmd:"mceAttributes"});a.onNodeChange.add(function(d,c,f,e){f=d.dom.getParent(f,"CITE,ACRONYM,ABBR,DEL,INS");c.setDisabled("cite",e);c.setDisabled("acronym",e);c.setDisabled("abbr",e);c.setDisabled("del",e);c.setDisabled("ins",e);c.setDisabled("attribs",f&&f.nodeName=="BODY");c.setActive("cite",0);c.setActive("acronym",0);c.setActive("abbr",0);c.setActive("del",0);c.setActive("ins",0);if(f){do{c.setDisabled(f.nodeName.toLowerCase(),0);c.setActive(f.nodeName.toLowerCase(),1)}while(f=f.parentNode)}});a.onPreInit.add(function(){a.dom.create("abbr")})},getInfo:function(){return{longname:"XHTML Xtras Plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/xhtmlxtras",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("xhtmlxtras",tinymce.plugins.XHTMLXtrasPlugin)})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js b/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js deleted file mode 100644 index a9c12ef3ac..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js +++ /dev/null @@ -1,132 +0,0 @@ -/** - * editor_plugin_src.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -(function() { - tinymce.create('tinymce.plugins.XHTMLXtrasPlugin', { - init : function(ed, url) { - // Register commands - ed.addCommand('mceCite', function() { - ed.windowManager.open({ - file : url + '/cite.htm', - width : 350 + parseInt(ed.getLang('xhtmlxtras.cite_delta_width', 0)), - height : 250 + parseInt(ed.getLang('xhtmlxtras.cite_delta_height', 0)), - inline : 1 - }, { - plugin_url : url - }); - }); - - ed.addCommand('mceAcronym', function() { - ed.windowManager.open({ - file : url + '/acronym.htm', - width : 350 + parseInt(ed.getLang('xhtmlxtras.acronym_delta_width', 0)), - height : 250 + parseInt(ed.getLang('xhtmlxtras.acronym_delta_height', 0)), - inline : 1 - }, { - plugin_url : url - }); - }); - - ed.addCommand('mceAbbr', function() { - ed.windowManager.open({ - file : url + '/abbr.htm', - width : 350 + parseInt(ed.getLang('xhtmlxtras.abbr_delta_width', 0)), - height : 250 + parseInt(ed.getLang('xhtmlxtras.abbr_delta_height', 0)), - inline : 1 - }, { - plugin_url : url - }); - }); - - ed.addCommand('mceDel', function() { - ed.windowManager.open({ - file : url + '/del.htm', - width : 340 + parseInt(ed.getLang('xhtmlxtras.del_delta_width', 0)), - height : 310 + parseInt(ed.getLang('xhtmlxtras.del_delta_height', 0)), - inline : 1 - }, { - plugin_url : url - }); - }); - - ed.addCommand('mceIns', function() { - ed.windowManager.open({ - file : url + '/ins.htm', - width : 340 + parseInt(ed.getLang('xhtmlxtras.ins_delta_width', 0)), - height : 310 + parseInt(ed.getLang('xhtmlxtras.ins_delta_height', 0)), - inline : 1 - }, { - plugin_url : url - }); - }); - - ed.addCommand('mceAttributes', function() { - ed.windowManager.open({ - file : url + '/attributes.htm', - width : 380 + parseInt(ed.getLang('xhtmlxtras.attr_delta_width', 0)), - height : 370 + parseInt(ed.getLang('xhtmlxtras.attr_delta_height', 0)), - inline : 1 - }, { - plugin_url : url - }); - }); - - // Register buttons - ed.addButton('cite', {title : 'xhtmlxtras.cite_desc', cmd : 'mceCite'}); - ed.addButton('acronym', {title : 'xhtmlxtras.acronym_desc', cmd : 'mceAcronym'}); - ed.addButton('abbr', {title : 'xhtmlxtras.abbr_desc', cmd : 'mceAbbr'}); - ed.addButton('del', {title : 'xhtmlxtras.del_desc', cmd : 'mceDel'}); - ed.addButton('ins', {title : 'xhtmlxtras.ins_desc', cmd : 'mceIns'}); - ed.addButton('attribs', {title : 'xhtmlxtras.attribs_desc', cmd : 'mceAttributes'}); - - ed.onNodeChange.add(function(ed, cm, n, co) { - n = ed.dom.getParent(n, 'CITE,ACRONYM,ABBR,DEL,INS'); - - cm.setDisabled('cite', co); - cm.setDisabled('acronym', co); - cm.setDisabled('abbr', co); - cm.setDisabled('del', co); - cm.setDisabled('ins', co); - cm.setDisabled('attribs', n && n.nodeName == 'BODY'); - cm.setActive('cite', 0); - cm.setActive('acronym', 0); - cm.setActive('abbr', 0); - cm.setActive('del', 0); - cm.setActive('ins', 0); - - // Activate all - if (n) { - do { - cm.setDisabled(n.nodeName.toLowerCase(), 0); - cm.setActive(n.nodeName.toLowerCase(), 1); - } while (n = n.parentNode); - } - }); - - ed.onPreInit.add(function() { - // Fixed IE issue where it can't handle these elements correctly - ed.dom.create('abbr'); - }); - }, - - getInfo : function() { - return { - longname : 'XHTML Xtras Plugin', - author : 'Moxiecode Systems AB', - authorurl : 'http://tinymce.moxiecode.com', - infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/xhtmlxtras', - version : tinymce.majorVersion + "." + tinymce.minorVersion - }; - } - }); - - // Register plugin - tinymce.PluginManager.add('xhtmlxtras', tinymce.plugins.XHTMLXtrasPlugin); -})(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/ins.htm b/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/ins.htm deleted file mode 100644 index 226e605320..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/ins.htm +++ /dev/null @@ -1,162 +0,0 @@ - - - - {#xhtmlxtras_dlg.title_ins_element} - - - - - - - - - - -
- - -
-
-
- {#xhtmlxtras_dlg.fieldset_general_tab} - - - - - - - - - -
: - - - - - -
-
:
-
-
- {#xhtmlxtras_dlg.fieldset_attrib_tab} - - - - - - - - - - - - - - - - - - - - - - - - - -
:
:
: - -
:
: - -
: - -
-
-
-
-
- {#xhtmlxtras_dlg.fieldset_events_tab} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
:
:
:
:
:
:
:
:
:
:
:
:
-
-
-
-
- - - -
-
- - diff --git a/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/js/abbr.js b/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/js/abbr.js deleted file mode 100644 index 1790e83d35..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/js/abbr.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * abbr.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -function init() { - SXE.initElementDialog('abbr'); - if (SXE.currentAction == "update") { - SXE.showRemoveButton(); - } -} - -function insertAbbr() { - SXE.insertElement('abbr'); - tinyMCEPopup.close(); -} - -function removeAbbr() { - SXE.removeElement('abbr'); - tinyMCEPopup.close(); -} - -tinyMCEPopup.onInit.add(init); diff --git a/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/js/acronym.js b/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/js/acronym.js deleted file mode 100644 index 93b8d259a8..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/js/acronym.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * acronym.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -function init() { - SXE.initElementDialog('acronym'); - if (SXE.currentAction == "update") { - SXE.showRemoveButton(); - } -} - -function insertAcronym() { - SXE.insertElement('acronym'); - tinyMCEPopup.close(); -} - -function removeAcronym() { - SXE.removeElement('acronym'); - tinyMCEPopup.close(); -} - -tinyMCEPopup.onInit.add(init); diff --git a/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/js/attributes.js b/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/js/attributes.js deleted file mode 100644 index 9e9b07e6da..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/js/attributes.js +++ /dev/null @@ -1,111 +0,0 @@ -/** - * attributes.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -function init() { - tinyMCEPopup.resizeToInnerSize(); - var inst = tinyMCEPopup.editor; - var dom = inst.dom; - var elm = inst.selection.getNode(); - var f = document.forms[0]; - var onclick = dom.getAttrib(elm, 'onclick'); - - setFormValue('title', dom.getAttrib(elm, 'title')); - setFormValue('id', dom.getAttrib(elm, 'id')); - setFormValue('style', dom.getAttrib(elm, "style")); - setFormValue('dir', dom.getAttrib(elm, 'dir')); - setFormValue('lang', dom.getAttrib(elm, 'lang')); - setFormValue('tabindex', dom.getAttrib(elm, 'tabindex', typeof(elm.tabindex) != "undefined" ? elm.tabindex : "")); - setFormValue('accesskey', dom.getAttrib(elm, 'accesskey', typeof(elm.accesskey) != "undefined" ? elm.accesskey : "")); - setFormValue('onfocus', dom.getAttrib(elm, 'onfocus')); - setFormValue('onblur', dom.getAttrib(elm, 'onblur')); - setFormValue('onclick', onclick); - setFormValue('ondblclick', dom.getAttrib(elm, 'ondblclick')); - setFormValue('onmousedown', dom.getAttrib(elm, 'onmousedown')); - setFormValue('onmouseup', dom.getAttrib(elm, 'onmouseup')); - setFormValue('onmouseover', dom.getAttrib(elm, 'onmouseover')); - setFormValue('onmousemove', dom.getAttrib(elm, 'onmousemove')); - setFormValue('onmouseout', dom.getAttrib(elm, 'onmouseout')); - setFormValue('onkeypress', dom.getAttrib(elm, 'onkeypress')); - setFormValue('onkeydown', dom.getAttrib(elm, 'onkeydown')); - setFormValue('onkeyup', dom.getAttrib(elm, 'onkeyup')); - className = dom.getAttrib(elm, 'class'); - - addClassesToList('classlist', 'advlink_styles'); - selectByValue(f, 'classlist', className, true); - - TinyMCE_EditableSelects.init(); -} - -function setFormValue(name, value) { - if(value && document.forms[0].elements[name]){ - document.forms[0].elements[name].value = value; - } -} - -function insertAction() { - var inst = tinyMCEPopup.editor; - var elm = inst.selection.getNode(); - - setAllAttribs(elm); - tinyMCEPopup.execCommand("mceEndUndoLevel"); - tinyMCEPopup.close(); -} - -function setAttrib(elm, attrib, value) { - var formObj = document.forms[0]; - var valueElm = formObj.elements[attrib.toLowerCase()]; - var inst = tinyMCEPopup.editor; - var dom = inst.dom; - - if (typeof(value) == "undefined" || value == null) { - value = ""; - - if (valueElm) - value = valueElm.value; - } - - dom.setAttrib(elm, attrib.toLowerCase(), value); -} - -function setAllAttribs(elm) { - var f = document.forms[0]; - - setAttrib(elm, 'title'); - setAttrib(elm, 'id'); - setAttrib(elm, 'style'); - setAttrib(elm, 'class', getSelectValue(f, 'classlist')); - setAttrib(elm, 'dir'); - setAttrib(elm, 'lang'); - setAttrib(elm, 'tabindex'); - setAttrib(elm, 'accesskey'); - setAttrib(elm, 'onfocus'); - setAttrib(elm, 'onblur'); - setAttrib(elm, 'onclick'); - setAttrib(elm, 'ondblclick'); - setAttrib(elm, 'onmousedown'); - setAttrib(elm, 'onmouseup'); - setAttrib(elm, 'onmouseover'); - setAttrib(elm, 'onmousemove'); - setAttrib(elm, 'onmouseout'); - setAttrib(elm, 'onkeypress'); - setAttrib(elm, 'onkeydown'); - setAttrib(elm, 'onkeyup'); - - // Refresh in old MSIE -// if (tinyMCE.isMSIE5) -// elm.outerHTML = elm.outerHTML; -} - -function insertAttribute() { - tinyMCEPopup.close(); -} - -tinyMCEPopup.onInit.add(init); -tinyMCEPopup.requireLangPack(); diff --git a/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/js/cite.js b/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/js/cite.js deleted file mode 100644 index b73ef47355..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/js/cite.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * cite.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -function init() { - SXE.initElementDialog('cite'); - if (SXE.currentAction == "update") { - SXE.showRemoveButton(); - } -} - -function insertCite() { - SXE.insertElement('cite'); - tinyMCEPopup.close(); -} - -function removeCite() { - SXE.removeElement('cite'); - tinyMCEPopup.close(); -} - -tinyMCEPopup.onInit.add(init); diff --git a/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/js/del.js b/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/js/del.js deleted file mode 100644 index a5397f7e6f..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/js/del.js +++ /dev/null @@ -1,53 +0,0 @@ -/** - * del.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -function init() { - SXE.initElementDialog('del'); - if (SXE.currentAction == "update") { - setFormValue('datetime', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'datetime')); - setFormValue('cite', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'cite')); - SXE.showRemoveButton(); - } -} - -function setElementAttribs(elm) { - setAllCommonAttribs(elm); - setAttrib(elm, 'datetime'); - setAttrib(elm, 'cite'); - elm.removeAttribute('data-mce-new'); -} - -function insertDel() { - var elm = tinyMCEPopup.editor.dom.getParent(SXE.focusElement, 'DEL'); - - if (elm == null) { - var s = SXE.inst.selection.getContent(); - if(s.length > 0) { - insertInlineElement('del'); - var elementArray = SXE.inst.dom.select('del[data-mce-new]'); - for (var i=0; i 0) { - tagName = element_name; - - insertInlineElement(element_name); - var elementArray = tinymce.grep(SXE.inst.dom.select(element_name)); - for (var i=0; i -1) ? true : false; -} - -SXE.removeClass = function(elm,cl) { - if(elm.className == null || elm.className == "" || !SXE.containsClass(elm,cl)) { - return true; - } - var classNames = elm.className.split(" "); - var newClassNames = ""; - for (var x = 0, cnl = classNames.length; x < cnl; x++) { - if (classNames[x] != cl) { - newClassNames += (classNames[x] + " "); - } - } - elm.className = newClassNames.substring(0,newClassNames.length-1); //removes extra space at the end -} - -SXE.addClass = function(elm,cl) { - if(!SXE.containsClass(elm,cl)) elm.className ? elm.className += " " + cl : elm.className = cl; - return true; -} - -function insertInlineElement(en) { - var ed = tinyMCEPopup.editor, dom = ed.dom; - - ed.getDoc().execCommand('FontName', false, 'mceinline'); - tinymce.each(dom.select('span,font'), function(n) { - if (n.style.fontFamily == 'mceinline' || n.face == 'mceinline') - dom.replace(dom.create(en, {'data-mce-new' : 1}), n, 1); - }); -} diff --git a/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/js/ins.js b/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/js/ins.js deleted file mode 100644 index 71a8a261ff..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/xhtmlxtras/js/ins.js +++ /dev/null @@ -1,53 +0,0 @@ -/** - * ins.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -function init() { - SXE.initElementDialog('ins'); - if (SXE.currentAction == "update") { - setFormValue('datetime', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'datetime')); - setFormValue('cite', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'cite')); - SXE.showRemoveButton(); - } -} - -function setElementAttribs(elm) { - setAllCommonAttribs(elm); - setAttrib(elm, 'datetime'); - setAttrib(elm, 'cite'); - elm.removeAttribute('data-mce-new'); -} - -function insertIns() { - var elm = tinyMCEPopup.editor.dom.getParent(SXE.focusElement, 'INS'); - - if (elm == null) { - var s = SXE.inst.selection.getContent(); - if(s.length > 0) { - insertInlineElement('ins'); - var elementArray = SXE.inst.dom.select('ins[data-mce-new]'); - for (var i=0; iyHbdsjtfB|BKV1jcvKYtxj|g|)Jjkn z*)T_oaJhUwC9d>f_w!+KRa_Kn;x(}zTh>+8TI#yzwrF1+&Ei|?&c6geOsxM4#uiYYd};OSwZ!*ge~0>esK5TorRUFi;ugk7{|oiYtLLt@ z#n;4JXkS2GuAN&wfBem#?Gms8djF=S6 z4to%=-Vkw-pij|@fE@|*pNk>!<<0WJ{WnAc<&_r?zaZ?6xEIm@+N8TdL9haJ`vbgq zP?y5RE5&iqQn?g1ehiTifgtD90o2`S>A_dF^y>Am0{VsZdzc`NUoZnt$1=_Dh#;4?r_ow;6(A=zMDpLkAup6kG{T{J{V6hu+v z#UNOc!OSVq51f4>3A{QaF)nsN5vIjs5bs&6ZWOeY#hkD(|CpE%<6=te6jfnD0fxcp zZNd;0F)4P4oR|lHnqZ{1!AyZoQY=&y^pap@z1sixJPnC>mL|y~pZ+mYh%82&$UBk0 zi7rI1MQ_K3V~erpVz0+;#X9j=d?bD%{?+&ow1jq4yQY0bdtdtxUDK=jvi@!Tr-}K* zsl?^P&BPCrrR3Sh0yS+trn0L(W^#e$}zrjxU{eEoy#%ZrZmsJzi18>I#S za~U#9g#c8Y3woeyI4J01me9Y7WnpkZo2c$5Ug9VfT9pZa_fiAk$*?u($*n<8-Qw11 z;+}N(V0Je9bT&&9q-jq_^vJ<@oU_P8L^b?yf+7(G53(LS8;-l4joVs3C$FTF$#n9D zttXQ@C*8L`wux2`W-;k(7TDsLHF8kHq!G}dz~7mOfC2^wSr3jm)u>lBJD%<5H|Ii#u=M{>;mxQ={Vxa;li2OSf;YM)!a24d{*(HuTel zC9ObrSoi{owTct40`ujEAnw${!l(B@8>bRlg7hu5fqf_U?RzZ!ncrBPP9!5+Dgsts z3aRFb3LPFG1Aid$pPpXT?I1sffd=Bl*GZf&+<#wIxZ`H1Aj zdU7OFEM~4{indCN-JhJ+`}=iHJ}cS$aPrL!7-5Wb`7LIC#3SE*ms1qiMPN1jEg9Cr zawOo_eDH1@+^ZsbfZohir-Ou-QGt`m@d}DotGNSf)SFf@-?Um4UM|!^U&*KJRDOji zYWq&NgPrqjE9JNyl7PxoKA)0FeO>5D_z;(OxBH)#bUMNOhy#6in*m615%CIh)2!qy z2(oEZ_-`?1$O8_aq+?mWWqGax3BZgF+0yBHPRFwDShnLkw(sy>)qw9VqU8!= zr$uoLp0lc(tpm}jshe<45jf{GmF8RXX3NlwF`BQ&HC?Mrm{q{6hEbYl_W{i{6ws_H z=ory^le?r7)w8jILC+gWryaR#azvj!HZmEPGCnzSY*z37b0j-h?AH_VOs+VfB|fVp z>2e0wH91oHeb<694ocSx)Y_1;Gid&m}T%>U4MZ$r(0 zsqqifA6l{v69)PzoZmydD|Sp%RjCquzhPAoPUu>}C>hgKERPXlBQ%&h@Dhk2t&ld~2265U?71#l`2M#l#Q{1+^t!SUTcGAWGe_Os-%y0Ak<`Yje zeO{9dJRb1$qf)Fym1)UWn&cgIk9P2qC%e9ska|oD3+RUPrV!D?3huz_pu{<=!3DDy zDoqm`8ki(@MYP9UnrYvdS(>_;?wiP#O4-E|i+$-6DE-@bZF+y#-9KHPd$}(?GBx6* z`;H{?oB|_f2wLOvbV$VB>w9b8@f_yRovIS-w9PGX^tR zczM0bUSZ0f!8NGU?*1re7&&U^4DieLeOu;Jekw1Kd8xcTMN@4f*S&#GbkXU!t|G-H z+hLMUJ&v=L1aCX=>pfqa$C)XxmnQs8uAGZEtF}+3^2q5UNxFp&tG9j+?bkoZZgPXSXLs%03s-QT z{~C6nfK`jU3B%tqtd`NN7<$pran>*^I!+*F>z-r3XFIM+Hx;p5hHrwXBKDVc*T?!; zf|b=^HrXuw3}L?C!`?@s1xBDvREbug2IV}=cMB%FWpH4^M#)(_y>z-w^7!MAkN5tF z9vrq;cGu~F&<5PRF5XiQxOp$3F&sC016Ym?;BBy>$e`aZEhIgO5rPE6u z*ko^Zo;Z)V>4eUAy#5NCR(ZYD#Rj4(7)OhgC>y3YKxR23%uOUO- z3*?^lZwUUmg8PHrxIJizz2Xz-0Rd-$Z}H2;W(6f3FQi@_Os%HD(NSdwG$mTjmE-7R zHMu`Ldj(v?gXKHY?x+G+rH>bk@MYI!4M9+&G=mWQNmoh-i7h+Qby0F1Pq{UR+z#r# zl%QPb8}zg8+}Bw_M!99-C9|wo@G=#O`b|0AOmzK3HbElM?Ig%Xaa|;yRWvxglziX! zFtz8oZU>VF52hB{#@sm-S2b|AvIt%^5llhA4Bga?7RSADYr}4VDJEEEH0LS}7Cg8t zh#(Wk?4=IuQR3#2o$b3eWEzqN;gevMUn=EO4jMrg%MhEjf#jDyS-H`Xp6{~}^TAr% zsYzK&_TRE^& z@KVr5EGn-GFb{&AmbU_jE#ZAn|uTNAzWVI`l8%B0KmEcCESooos~93#)V%S znIaEfNO6l@RM+$D8~4cG$4&5h$&gpx7D+O3&o=Y$oWW@TA`Xt`5y-+`sWR8&#nu)Y zx_1;)?T+s|L1`Vg;SbQF8rUjy{h*KUfRAxR>w^A)?kN7V4V#9QFy>pP)`I(ORin5& zQCC8vguqtU21C9EwyabzcbZ2s&-{1hh`FCUzYQJ@iL%%OnLrGU5ZY)4 zftU`Dr7PD|)k2GEaA;(rTZ?b9I9M?eoEe&&m_GdO;pvH??Z^M*`1T>1{OYTw`6?%W zraahhS(hzyY|QNIODwD`B>MVL`9*bTYHFyux0s!s%@&h~_wGH6H?7>-8)IXoYPF=r z^97u;rwaMFhB{>U3&Nq_g>O$megp-9Ool8N2>7!Dw3p_`iI)2^qjEIUcXZFl<&iyi z@{wdLnu_P?giL43_Z-JNq$eV|L(nO{5snD>tO8;qp{}PYO?3vv4S)qxbAWJN2jwDp z=KA$B$1YrW+cNvkwA&{Je)D|@xDUCmU3mM#Ty@@cPptX2$6F1QBD@zgRg~KV)1YqE zS*idp^iIoA5qyL0mBvB+JUk<~YQnz3&>9i3qV>-$*aai8k}wMP!d$<$@)4jwy1x6! zKD}XC)mhP&1`mDQ!YeNgtAz!!9^;IUxBx){Vg<`Y$nL-jtsOdh_K@qUlwKQ>$Hwrs z&YpE$yjW*?y#riqli=}pY{C_NG_Ii#747Wdx_`DERyW^O*x-*p+m>@1M_W*i%L%qh za8#(kdp&r{

_@_uWp%&t~Pem2DDNiw_-kNqH%b_F=OeiN7tN9j<_##u`5=o}9-1 zTFSR7&&qz3nZR$)74-a758i8Ic<&`wVoLR>42iF5NKoGRlLG)hj!He1-cMNeVjK24 z4ym3}C+Z3!zH-!RmGjodwXWJ|9Gmg(q2g& zOha`SrnVcc#Beg2{L0+q?uKWg&gAAH9YxbehB$ zI6MR59YLx@(BF};j1P<0=>Q(ZcaXQkatwX`J}k4x;=qs}M7CsNFDRA-1X>%GBZ&MT z3(HY)QtS)MG4%N`EXQFr{xvLXVwn0L^-1#T#kJQ~pFh9*%IdjS@VRf($I1}0tUgU% z6`Wrd7w~0K;?{ycQ%Xb+@)5X$_By`vaAa0P+CW-|B#GrqYgd;qUA}N$HfCyaQEs6E z_4?fIdTn>3R!84Qd{5mn44*bZ+(&#(J$3%_m5Z0wWPJwrF26iB=>4Og1vKNsF-0g! zF^c0hR;L6dsgL?;fKrsE3}q=tgOsNN6{$o9ZKEL?rtLIBqcle2B&m!G_6ok_?4T-{ zG(|hJE_k{UEkXs?XS}TMrIu6%rb78$1<{=%85N{)#rxD_B^zira_2}=l zhww&kJ>mFz4_~;xM!1efxGt;5kC3iLNM|FYuMyH$58?H&Up;KE_u9kt*2DGJLwXw_ zyw>AyIBz|q14m7@A6D3I1$Kb&4HZroGJ?|;?mzh9dK7k)V84|AM9MwH_rG?j&iUqV G-2V#}OT3@} literal 0 HcmV?d00001 diff --git a/common/static/js/vendor/tiny_mce/skins/lightgray/fonts/tinymce-small.svg b/common/static/js/vendor/tiny_mce/skins/lightgray/fonts/tinymce-small.svg new file mode 100644 index 0000000000..fd5e3ff4d2 --- /dev/null +++ b/common/static/js/vendor/tiny_mce/skins/lightgray/fonts/tinymce-small.svg @@ -0,0 +1,175 @@ + + + + +This is a custom SVG font generated by IcoMoon. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/skins/lightgray/fonts/tinymce-small.ttf b/common/static/js/vendor/tiny_mce/skins/lightgray/fonts/tinymce-small.ttf new file mode 100644 index 0000000000000000000000000000000000000000..7b50bfdae94f6efce635dcc26469ffb77c123a97 GIT binary patch literal 8164 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 literal 0 HcmV?d00001 diff --git a/common/static/js/vendor/tiny_mce/skins/lightgray/fonts/tinymce-small.woff b/common/static/js/vendor/tiny_mce/skins/lightgray/fonts/tinymce-small.woff new file mode 100644 index 0000000000000000000000000000000000000000..725aaf19e21fef9e2510c6934bde9f52f042afe3 GIT binary patch literal 8340 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 L?FR&Z0OJ1xJUq%= literal 0 HcmV?d00001 diff --git a/common/static/js/vendor/tiny_mce/skins/lightgray/fonts/tinymce.eot b/common/static/js/vendor/tiny_mce/skins/lightgray/fonts/tinymce.eot new file mode 100644 index 0000000000000000000000000000000000000000..b769c2c6611cc18f5cc9ec35528d9924f3a5541e GIT binary patch literal 8276 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 QJ?PKAbfGBe`tQ~M1DmY + + + +This is a custom SVG font generated by IcoMoon. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/skins/lightgray/fonts/tinymce.ttf b/common/static/js/vendor/tiny_mce/skins/lightgray/fonts/tinymce.ttf new file mode 100644 index 0000000000000000000000000000000000000000..a31b584c2bc361084bfd1745ccaee5b70181e4ed GIT binary patch literal 8112 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


geWSell!|GRp<_hLGWxI@5bh$gS##zwF$Wj> zT`njhmGfLBJ+1Z!;Xs~(UebC{QVjE}UlutJ3`{Mn3MwAU zb8W1%8W4delcA8?Mim+V}smbf^0vdWtifqduifdt>{t zHo%c>!kR1)?*VOpW5aDZ_7Am+C(844SJik8!#m&}yn8d<@b{Am(N`YC&KrJ@-!Wpd zHU^1aO;IFwe985bJb$!*2*Hj@ivWQi(BFrm)i

^0jpb9P<1G1GFXVz|iN5e_&@f zat$p^V4BKRbNy#A8ZK_FOa6Y>-sUU4Wn%y7%FJ8SyLQQB7bEs=>LVV3G zhov)?>sI_qG7cKHp!`F;^u^f6^@=8}&~Mj{*0)2!*26Wx4d+*3H-3a$7_RUHS6{Ph z`C#t!KdPvswye$X@A>by0-=V2@$r^CXAcC3S9;u;##EN>EEI+uN&(3=FNOE{HQkZi zc^8wBwdBi8rQfjTyufE`Sa52@Go@lD3dmODwxY$9U9vQVpOch01(7rfCR?WY)p$ld zBhnRRPq?Vcp7%?``5ZqivFm`p>@AX2M{jVzB$a)RhYy;yS$qS%S#yg#436o%>QsJE9lXk@hdu92i3CzxVjy##S;ESx@g?Kxs z3o#y7?cXoJ1vgZ`Eh;GlB-7?5)s=oq*9Ca5>x z!)tFwgNb(TH!Ds(O{_+SXz6k5NPWqZK@KbPpcH3K_)7Ay10Ip!Nyi^;Y#eWr z-H%u1Ig=-q$l(dzddvi3VL}E(eM=(!qhUt2xQ>P7*|kC7Wiqe0+8~V__#(ez>7#7c z#>}@~R1x(rN(i6%U9D;`zOkosXtXUZi)-X6T1J?Bp^!4-E8D&Mb}*!<8J5KKr`+vv zt|0eMFTD2;Z*d%cN?uVN1i4ap>`kocTdiNmYlJP+Dze1k#mdvP0y!Izp$qTw;hBnh z@?h5h>9m)G&}!InP`pBz9TnDa%Zi*AYsuwWh#X2!d37Z`;<7kCdsyg3b{c`R!rrnK zJD9T5`&_6y`?{d83!1$RCFR2mCzaBTz=Bk+K z3jmIxQQzoQd==d-w=dWlGyB0&xh)%2=>OcLCg=yFfX_1_{Xpp~oQ z*qNn3F&`&0u5o0d<%9pi^AARL!)Q;gUmZ>#!vv8--_Z6&(XV|wW`EM+@SCafj_NvC z4$5O7&&G}Nv+iOK;i^Rly+@po{3g#77>V+848<*!&f}QBB=mH3M#YZ zEUt5wd6z^XbFEUCss3slB(c~~tl163M_l~plWgX{{P_6wUatpyi zosztl@}x#S4dc$RXY`7tEbz0id_}9bE=GN-9+9dnM!SHdvrc{*92VY!+gV?iB1pi4 z@2Q+9K`$2XytOnR@?qFm-flZ;yETq9KX!*cgn=wei1zreliY`vyE_unslFzyQ@CKWcD{m+N<0seiV|8 z35gmjTcqG_83l{|E6X>`2T!rgHoFFxO~+N2HP7kmYOM+U<&xcGFUm z#aMHH`~E91+t%Yeqv{v!DF*gMzO9ktvhslP-4ETlxS+&C$)yz0srb15&cFYq)c)|6 z>cB4P70Q%Zj0qAvrjdyethg)C0_uhk0AB>K`9IfMm>6Yr zb`E!T9rmR3cXn=~gFDz|*=t!@S=lPtIXZ&?!9$qw`)S>qmw{U_Fgqb17=*Wk2X20H!!9Ibt7Gs;FHWT`;B3_5r-$(;I5w-GtYhl z!W&-*DOwAn=j5`|h%_nmT0=05t%yYSiG0)Rv!Qq@^m$#k2ZMwJ>g{xDOooE_I0_#X z2sum!MahJk-K=KvA&n0ww z__&<)9*QNOfO&7g+h&E+}5;RT%u?*QUe_JA39lXf=a#EbqU?V4qYYHf z+Kj~->h8(fqBpI}yt4hlShTij9db{St|+DVt=D@O$xnFTLcXNtkC!*=Ah@tR?J`^# zWt-W$o|2Q3!; Q|9KxRIw6}F`~k543putNr2qf` literal 0 HcmV?d00001 diff --git a/common/static/js/vendor/tiny_mce/skins/lightgray/img/anchor.gif b/common/static/js/vendor/tiny_mce/skins/lightgray/img/anchor.gif new file mode 100644 index 0000000000000000000000000000000000000000..606348c7f53dba169a9aca7279a2a973f4b07bdb GIT binary patch literal 53 zcmZ?wbhEHbWM^P!XkcUjg8%>jEB<5wG8q|kKzxu40~1eAV&{y5e`l1KFoiKNSOWkz C+YCGa literal 0 HcmV?d00001 diff --git a/common/static/js/vendor/tiny_mce/skins/lightgray/img/loader.gif b/common/static/js/vendor/tiny_mce/skins/lightgray/img/loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..c69e937232b24ea30f01c68bbd2ebc798dcecfcb GIT binary patch literal 2608 zcmdVcdr(tX9tZGC9yiG~=H_*Q-0%n(kWqP*D#hw{AQu8;1%gl-Hrf&{2?48KX;hHy z3Ze*zEz4t3XdUFyLbNPUYlA`|B}P=N1fqtL1*}S;87#|-W9v<#G;ul(e%d3)N(^9c$d2Dz{7}?ErjNd;{EMKkCsk21~b9Gvg zDo<7L=3Z5HNbVlZUcm1eg#o#CZCJU`3IYHwM->zCd?uYrF3vKFeM}v?f+%s?E>ly|3W25ry9#NNbTx-}0ON58dTrs^ix{_1O0Wh~SVSBlH)Ajn zPn^Gbjz}PCtN@#keR&hK&Dhl-b$kZ8^S)x#dh0{7X=X%CCJk7P1PSO>T&S8I4{#Lg zb5#)o=;!ZP*1nM{cI4@(x7o27*SA()NHmrn67aN@Pmi~(i_SnrjYnwh36aG%!@i0d zqbvfa44f|?OG4ntP|nbjhEl1)Yp6ZN@yjy zy4==QmLy%t;ps3R?~f2KfTTI|2?q8dFd6^z5GF+Xa&Y)sjG)hxit80pPcOP zJ z*LW{SyGHD%hUotV+W%I}fBLAIx!8|7#}$;clKQ+{&FjDqGQ2ZNx(lYM3*%~}ILnao zM`aui55~ZFJlu^!5rdA9Q_7H68H_;##u{x(Yn-vSfIRCb^Nqsg zGRS!Egm>h+o<}LeV4&CLReo9FrDjDvs}8?JwC)#Qs|ie=r?~xUh)&*d`Fx>FG}%X# zNdtDHBKhLPC0wpooFDAQKL%*6T|ULH$=wX!NhcasgD3d;-d$I6yRK3yN+E~C1335_iLOt+*9uvSZ`>*KA}vm}08wRq=>5l|t*Na&jR z-C1&C`nkEk#sB|@yyt-#fXngP04My zm7u$Q%EJbHp`>~`5W&L{W!6`y&}LMS;jfUpgO~7TLVMRZ9IC)IZp0A${`yp0{&wco z#1nx@XMkhqeK%7?RE7JdLr1^nwFfaJ0Q&Lv?WNJ%9}VSJsNY2+UYs2%EU0J~ayFXv zi*?7KCXQHkD)O6!0Q%4N+HTODHxJ{kQSuQX$l-rSwkwh(zMkdfzxyGwl@yHC)C4p< z&n2%8#M?)Q@mgHL1ot8`SFdSEj9ye|jHy+U8#@HoUExG=@AVkRAe_qYm4EpzK6L*& zh`)26?V#f4#_h^P9G^%>h2-H3)$QP zQovu6J9qDvsxqweDdNNa!Lb?L4_UF{tLX_nN7r0U_vF14YKcGR-*Gl} zx3oG)bzf|65dBxD-;2ZCp??K;+TuQ9onnK?==5hzbkb^r_g>z4#D8mcv8(+XdoszA zCx-qhdgxMNMotj}SiL_6V(tLcsK7(M(r(%u<}QrVfOvyK6_;~NOTlPGfX@M7S5YQF z&*$(ylJMHJt^_aQeu{C6NaTE$G3HNN@_SnN8YcaKn%`)F@~L1x+ah7-gEJPpc6w%3 zyX}r+Qk$4RHZzfH){e~F*qJ{d*L8a6n4;U?+{de0-t)mal#TVxe)3F}^UBh+zd T)6_**#cgp_+?JL9(ew3BlNF>u literal 0 HcmV?d00001 diff --git a/common/static/js/vendor/tiny_mce/skins/lightgray/img/object.gif b/common/static/js/vendor/tiny_mce/skins/lightgray/img/object.gif new file mode 100644 index 0000000000000000000000000000000000000000..cccd7f023fb80908cb33bb7d9604236cd21b7ae7 GIT binary patch literal 152 zcmV;J0B8S4Nk%w1VG#fg0J9GO<>lo+KR<78Z?v?uS65g4{r%Y3*xlXT%F4>`@9+2b z_ww@cot>Tk|Nk>HGXMYpA^8LW000jFEC2ui01*HU000C<(8)=wd#<&tyXIMjHBV`d zBSi|xsj3(;nD0kQ0aJq8eLH~x02P|t2!_J&Wqb%0io?#xD.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#9e9e9e;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;background:#fff;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#fff;position:fixed;top:0;left:0;opacity:0;-webkit-transition:opacity 150ms ease-in;transition:opacity 150ms ease-in}.mce-window.mce-in{opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #c5c5c5;position:relative}.mce-window-head .mce-close{position:absolute;right:15px;top:9px;font-size:20px;font-weight:bold;line-height:20px;color:#858585;cursor:pointer;height:20px;overflow:hidden}.mce-close:hover{color:#adadad}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:10px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#fff;border-top:1px solid #c5c5c5;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window.mce-fullscreen,.mce-window.mce-fullscreen .mce-foot{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:15px}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:#fff;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-inner{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-tooltip-inner{-webkit-box-shadow:0 0 5px #000000;-moz-box-shadow:0 0 5px #000000;box-shadow:0 0 5px #000000}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-n .mce-tooltip-arrow{top:0px;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-btn{border:1px solid #b1b1b1;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25) rgba(0,0,0,0.25);position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fff, #d9d9d9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#d9d9d9));background-image:-webkit-linear-gradient(top, #fff, #d9d9d9);background-image:-o-linear-gradient(top, #fff, #d9d9d9);background-image:linear-gradient(to bottom, #fff, #d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffd9d9d9', GradientType=0);zoom:1}.mce-btn:hover,.mce-btn:focus{color:#333;background-color:#e3e3e3;background-image:-moz-linear-gradient(top, #f2f2f2, #ccc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#ccc));background-image:-webkit-linear-gradient(top, #f2f2f2, #ccc);background-image:-o-linear-gradient(top, #f2f2f2, #ccc);background-image:linear-gradient(to bottom, #f2f2f2, #ccc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffcccccc', GradientType=0);zoom:1}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{background-color:#d6d6d6;background-image:-moz-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#e6e6e6), to(#c0c0c0));background-image:-webkit-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-o-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:linear-gradient(to bottom, #e6e6e6, #c0c0c0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6', endColorstr='#ffc0c0c0', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn:not(.mce-disabled):active{background-color:#d6d6d6;background-image:-moz-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#e6e6e6), to(#c0c0c0));background-image:-webkit-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-o-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:linear-gradient(to bottom, #e6e6e6, #c0c0c0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6', endColorstr='#ffc0c0c0', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn button{padding:4px 10px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#333;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px #fff}.mce-primary{min-width:50px;color:#fff;border:1px solid #b1b1b1;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25) rgba(0,0,0,0.25);background-color:#006dcc;background-image:-moz-linear-gradient(top, #08c, #04c);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#04c));background-image:-webkit-linear-gradient(top, #08c, #04c);background-image:-o-linear-gradient(top, #08c, #04c);background-image:linear-gradient(to bottom, #08c, #04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);zoom:1}.mce-primary:hover,.mce-primary:focus{background-color:#005fb3;background-image:-moz-linear-gradient(top, #0077b3, #003cb3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0077b3), to(#003cb3));background-image:-webkit-linear-gradient(top, #0077b3, #003cb3);background-image:-o-linear-gradient(top, #0077b3, #003cb3);background-image:linear-gradient(to bottom, #0077b3, #003cb3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0077b3', endColorstr='#ff003cb3', GradientType=0);zoom:1}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#005299;background-image:-moz-linear-gradient(top, #069, #039);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#069), to(#039));background-image:-webkit-linear-gradient(top, #069, #039);background-image:-o-linear-gradient(top, #069, #039);background-image:linear-gradient(to bottom, #069, #039);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff006699', endColorstr='#ff003399', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-primary button,.mce-primary button i{color:#fff;text-shadow:1px 1px #333}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:1px 5px;font-size:12px;*padding-bottom:2px}.mce-btn-small i{line-height:20px;vertical-align:top;*line-height:18px}.mce-btn .mce-caret{margin-top:8px;margin-left:0}.mce-btn-small .mce-caret{margin-top:8px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #333;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #333;border-top:0}.mce-rtl .mce-btn button{direction:rtl}.mce-btn-group .mce-btn{border-width:1px 0 1px 0;margin:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-btn-group .mce-first{border-left:1px solid #b1b1b1;border-left:1px solid rgba(0,0,0,0.25);-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.mce-btn-group .mce-last{border-right:1px solid #b1b1b1;border-right:1px solid rgba(0,0,0,0.1);-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.mce-btn-group .mce-first.mce-last{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fff, #d9d9d9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#d9d9d9));background-image:-webkit-linear-gradient(top, #fff, #d9d9d9);background-image:-o-linear-gradient(top, #fff, #d9d9d9);background-image:linear-gradient(to bottom, #fff, #d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffd9d9d9', GradientType=0);zoom:1;text-indent:-10em;*font-size:0;*line-height:0;*text-indent:0;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#333;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65)}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#acacac}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-colorbutton button{padding-right:4px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-14px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-16px;padding-right:0;width:16px}.mce-colorbutton .mce-open{padding-left:4px;border-left:1px solid transparent;border-right:1px solid transparent}.mce-colorbutton:hover .mce-open{border-left-color:#bdbdbd;border-right-color:#bdbdbd}.mce-colorbutton.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:4px;margin-right:-14px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;margin-right:-17px;padding-left:0}.mce-rtl .mce-colorbutton button{padding-right:10px;padding-left:10px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px}.mce-combobox{display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#adadad}.mce-combobox.mce-has-open input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.mce-combobox .mce-btn{border-left:0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#333}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#666;color:#fff}.mce-path .mce-divider{display:inline}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9E9E9E;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid #9e9e9e;width:100%;height:100%}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);border:0;overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-menubar{border:1px solid #c4c4c4}.mce-menubar .mce-menubtn button span{color:#333}.mce-menubar .mce-caret{border-top-color:#333}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:transparent;background:#e6e6e6;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-menubtn.mce-disabled span{color:#aaa}.mce-menubtn span{color:#333;margin-right:2px;line-height:20px;*line-height:16px}.mce-menubtn.mce-btn-small span{font-size:12px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-menubtn .mce-caret{*margin-top:6px}.mce-rtl .mce-menubtn button{direction:rtl;text-align:right}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-menu-item{display:block;padding:6px 15px 6px 12px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-ico,.mce-menu-item .mce-text{color:#333}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled .mce-ico{color:#adadad}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text{color:#fff}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:#fff}.mce-menu-item.mce-disabled:hover{background:#ccc}.mce-menu-shortcut{display:inline-block;color:#adadad}.mce-menu-shortcut{display:inline-block;*display:inline;*zoom:1;padding:0 15px 0 20px}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item.mce-selected .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:#fff}.mce-menu-item .mce-caret{margin-top:4px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #333}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret,.mce-menu-item:hover .mce-caret{border-left-color:#fff}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item-normal.mce-active{background-color:#c8def4}.mce-menu-item-preview.mce-active{border-left:5px solid #aaa}.mce-menu-item-normal.mce-active .mce-text{color:#333}.mce-menu-item-normal.mce-active:hover .mce-text,.mce-menu-item-normal.mce-active:hover .mce-ico{color:#fff}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:#fff;background-color:#0081c2;background-image:-moz-linear-gradient(top, #08c, #0077b3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#0077b3));background-image:-webkit-linear-gradient(top, #08c, #0077b3);background-image:-o-linear-gradient(top, #08c, #0077b3);background-image:linear-gradient(to bottom, #08c, #0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);zoom:1}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:#cbcbcb;border-bottom:1px solid #fff;cursor:default;filter:none}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-menu-align.mce-rtl .mce-menu-shortcut,.mce-menu-align.mce-rtl .mce-caret{right:auto;left:0}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #333;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:#fff}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:2px 0 0;min-width:160px;background:#fff;border:1px solid #989898;border:1px solid rgba(0,0,0,0.2);z-index:1002;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;*display:inline}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#333}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent;border-right:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#bdbdbd;border-right-color:#bdbdbd}.mce-splitbtn button{padding-right:4px}.mce-splitbtn .mce-open{padding-left:4px}.mce-splitbtn .mce-open.mce-active{-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-splitbtn.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:10px;padding-left:10px}.mce-rtl .mce-splitbtn .mce-open{padding-left:4px;padding-right:4px}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#e3e3e3;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#fdfdfd}.mce-tab.mce-active{background:#fdfdfd;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);display:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#333}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65)}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px}.mce-textbox.mce-disabled{color:#adadad}.mce-rtl .mce-textbox{text-align:right;direction:rtl}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}@font-face{font-family:'tinymce';src:url('fonts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce';font-style:normal;font-weight:normal;font-size:16px;line-height:16px;vertical-align:text-top;-webkit-font-smoothing:antialiased;display:inline-block;background:transparent center center;width:16px;height:16px;color:#333;-ie7-icon:' '}.mce-btn-small .mce-ico{font-family:'tinymce-small'}.mce-ico,i.mce-i-checkbox{zoom:expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = this.currentStyle['-ie7-icon'].substr(1, 1) + ' ')}.mce-i-save{-ie7-icon:"\e000"}.mce-i-newdocument{-ie7-icon:"\e001"}.mce-i-fullpage{-ie7-icon:"\e002"}.mce-i-alignleft{-ie7-icon:"\e003"}.mce-i-aligncenter{-ie7-icon:"\e004"}.mce-i-alignright{-ie7-icon:"\e005"}.mce-i-alignjustify{-ie7-icon:"\e006"}.mce-i-cut{-ie7-icon:"\e007"}.mce-i-paste{-ie7-icon:"\e008"}.mce-i-searchreplace{-ie7-icon:"\e009"}.mce-i-bullist{-ie7-icon:"\e00a"}.mce-i-numlist{-ie7-icon:"\e00b"}.mce-i-indent{-ie7-icon:"\e00c"}.mce-i-outdent{-ie7-icon:"\e00d"}.mce-i-blockquote{-ie7-icon:"\e00e"}.mce-i-undo{-ie7-icon:"\e00f"}.mce-i-redo{-ie7-icon:"\e010"}.mce-i-link{-ie7-icon:"\e011"}.mce-i-unlink{-ie7-icon:"\e012"}.mce-i-anchor{-ie7-icon:"\e013"}.mce-i-image{-ie7-icon:"\e014"}.mce-i-media{-ie7-icon:"\e015"}.mce-i-help{-ie7-icon:"\e016"}.mce-i-code{-ie7-icon:"\e017"}.mce-i-inserttime{-ie7-icon:"\e018"}.mce-i-preview{-ie7-icon:"\e019"}.mce-i-forecolor{-ie7-icon:"\e01a"}.mce-i-backcolor{-ie7-icon:"\e01a"}.mce-i-table{-ie7-icon:"\e01b"}.mce-i-hr{-ie7-icon:"\e01c"}.mce-i-removeformat{-ie7-icon:"\e01d"}.mce-i-subscript{-ie7-icon:"\e01e"}.mce-i-superscript{-ie7-icon:"\e01f"}.mce-i-charmap{-ie7-icon:"\e020"}.mce-i-emoticons{-ie7-icon:"\e021"}.mce-i-print{-ie7-icon:"\e022"}.mce-i-fullscreen{-ie7-icon:"\e023"}.mce-i-spellchecker{-ie7-icon:"\e024"}.mce-i-nonbreaking{-ie7-icon:"\e025"}.mce-i-template{-ie7-icon:"\e026"}.mce-i-pagebreak{-ie7-icon:"\e027"}.mce-i-restoredraft{-ie7-icon:"\e028"}.mce-i-untitled{-ie7-icon:"\e029"}.mce-i-bold{-ie7-icon:"\e02a"}.mce-i-italic{-ie7-icon:"\e02b"}.mce-i-underline{-ie7-icon:"\e02c"}.mce-i-strikethrough{-ie7-icon:"\e02d"}.mce-i-visualchars{-ie7-icon:"\e02e"}.mce-i-ltr{-ie7-icon:"\e02f"}.mce-i-rtl{-ie7-icon:"\e030"}.mce-i-copy{-ie7-icon:"\e031"}.mce-i-resize{-ie7-icon:"\e032"}.mce-i-browse{-ie7-icon:"\e034"}.mce-i-pastetext{-ie7-icon:"\e035"}.mce-i-checkbox,.mce-i-selected{-ie7-icon:"\e033"}.mce-i-selected{visibility:hidden}.mce-i-backcolor{background:#BBB} \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/skins/lightgray/skin.min.css b/common/static/js/vendor/tiny_mce/skins/lightgray/skin.min.css new file mode 100644 index 0000000000..86c4eac719 --- /dev/null +++ b/common/static/js/vendor/tiny_mce/skins/lightgray/skin.min.css @@ -0,0 +1 @@ +.mce-container,.mce-container *,.mce-widget,.mce-widget *{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:#333;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;-webkit-tap-highlight-color:transparent;line-height:normal;font-weight:normal;text-align:left;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr}.mce-widget button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.mce-container *[unselectable]{-moz-user-select:none;-webkit-user-select:none;-o-user-select:none;user-select:none}.mce-fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.mce-fade.mce-in{opacity:1}.mce-tinymce{visibility:visible !important;position:relative}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%;z-index:100}div.mce-fullscreen{position:fixed;top:0;left:0;width:100%;height:auto}.mce-tinymce{display:block;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mce-wordcount{position:absolute;top:0;right:0;padding:8px}div.mce-edit-area{background:#FFF;filter:none}.mce-statusbar{position:relative}.mce-statusbar .mce-container-body{position:relative}.mce-fullscreen .mce-resizehandle{display:none}.mce-charmap{border-collapse:collapse}.mce-charmap td{cursor:default;border:1px solid #9e9e9e;width:20px;height:20px;line-height:20px;text-align:center;vertical-align:middle;padding:2px}.mce-charmap td div{text-align:center}.mce-charmap td:hover{background:#d9d9d9}.mce-grid td div{border:1px solid #d6d6d6;width:12px;height:12px;margin:2px;cursor:pointer}.mce-grid{border-spacing:2px;border-collapse:separate}.mce-grid a{display:block;border:1px solid transparent}.mce-grid a:hover{border-color:#a1a1a1}.mce-grid-border{margin:0 4px 0 4px}.mce-grid-border a{border-color:#d6d6d6;width:13px;height:13px}.mce-grid-border a:hover,.mce-grid-border a.mce-active{border-color:#a1a1a1;background:#c8def4}.mce-text-center{text-align:center}div.mce-tinymce-inline{width:100%;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-toolbar-grp{padding-bottom:2px}.mce-toolbar-grp .mce-flow-layout-item{margin-bottom:0}.mce-rtl .mce-wordcount{left:0;right:auto}.mce-container,.mce-container-body{display:block}.mce-autoscroll{overflow:hidden}.mce-scrollbar{position:absolute;width:7px;height:100%;top:2px;right:2px;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-scrollbar-h{top:auto;right:auto;left:2px;bottom:2px;width:100%;height:7px}.mce-scrollbar-thumb{position:absolute;background-color:#000;border:1px solid #888;border-color:rgba(85,85,85,0.6);width:5px;height:100%;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scrollbar-h .mce-scrollbar-thumb{width:100%;height:5px}.mce-scrollbar:hover,.mce-scrollbar.mce-active{background-color:#AAA;opacity:.6;filter:alpha(opacity=60);zoom:1;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scroll{position:relative}.mce-panel{border:0 solid #9e9e9e;background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fdfdfd, #ddd);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fdfdfd), to(#ddd));background-image:-webkit-linear-gradient(top, #fdfdfd, #ddd);background-image:-o-linear-gradient(top, #fdfdfd, #ddd);background-image:linear-gradient(to bottom, #fdfdfd, #ddd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffdfdfd', endColorstr='#ffdddddd', GradientType=0);zoom:1}.mce-floatpanel{position:absolute;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2)}.mce-floatpanel.mce-fixed{position:fixed}.mce-floatpanel .mce-arrow,.mce-floatpanel .mce-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.mce-floatpanel .mce-arrow{border-width:11px}.mce-floatpanel .mce-arrow:after{border-width:10px;content:""}.mce-floatpanel.mce-popover{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);top:0;left:0;background:#fff;border:1px solid #9e9e9e;border:1px solid rgba(0,0,0,0.25)}.mce-floatpanel.mce-popover.mce-bottom{margin-top:10px;*margin-top:0}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#9e9e9e;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;background:#fff;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#fff;position:fixed;top:0;left:0;opacity:0;-webkit-transition:opacity 150ms ease-in;transition:opacity 150ms ease-in}.mce-window.mce-in{opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #c5c5c5;position:relative}.mce-window-head .mce-close{position:absolute;right:15px;top:9px;font-size:20px;font-weight:bold;line-height:20px;color:#858585;cursor:pointer;height:20px;overflow:hidden}.mce-close:hover{color:#adadad}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:10px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#fff;border-top:1px solid #c5c5c5;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window.mce-fullscreen,.mce-window.mce-fullscreen .mce-foot{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:15px}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:#fff;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-inner{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-tooltip-inner{-webkit-box-shadow:0 0 5px #000000;-moz-box-shadow:0 0 5px #000000;box-shadow:0 0 5px #000000}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-n .mce-tooltip-arrow{top:0px;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-btn{border:1px solid #b1b1b1;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25) rgba(0,0,0,0.25);position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fff, #d9d9d9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#d9d9d9));background-image:-webkit-linear-gradient(top, #fff, #d9d9d9);background-image:-o-linear-gradient(top, #fff, #d9d9d9);background-image:linear-gradient(to bottom, #fff, #d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffd9d9d9', GradientType=0);zoom:1}.mce-btn:hover,.mce-btn:focus{color:#333;background-color:#e3e3e3;background-image:-moz-linear-gradient(top, #f2f2f2, #ccc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#ccc));background-image:-webkit-linear-gradient(top, #f2f2f2, #ccc);background-image:-o-linear-gradient(top, #f2f2f2, #ccc);background-image:linear-gradient(to bottom, #f2f2f2, #ccc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffcccccc', GradientType=0);zoom:1}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{background-color:#d6d6d6;background-image:-moz-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#e6e6e6), to(#c0c0c0));background-image:-webkit-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-o-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:linear-gradient(to bottom, #e6e6e6, #c0c0c0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6', endColorstr='#ffc0c0c0', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn:not(.mce-disabled):active{background-color:#d6d6d6;background-image:-moz-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#e6e6e6), to(#c0c0c0));background-image:-webkit-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-o-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:linear-gradient(to bottom, #e6e6e6, #c0c0c0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6', endColorstr='#ffc0c0c0', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn button{padding:4px 10px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#333;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px #fff}.mce-primary{min-width:50px;color:#fff;border:1px solid #b1b1b1;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25) rgba(0,0,0,0.25);background-color:#006dcc;background-image:-moz-linear-gradient(top, #08c, #04c);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#04c));background-image:-webkit-linear-gradient(top, #08c, #04c);background-image:-o-linear-gradient(top, #08c, #04c);background-image:linear-gradient(to bottom, #08c, #04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);zoom:1}.mce-primary:hover,.mce-primary:focus{background-color:#005fb3;background-image:-moz-linear-gradient(top, #0077b3, #003cb3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0077b3), to(#003cb3));background-image:-webkit-linear-gradient(top, #0077b3, #003cb3);background-image:-o-linear-gradient(top, #0077b3, #003cb3);background-image:linear-gradient(to bottom, #0077b3, #003cb3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0077b3', endColorstr='#ff003cb3', GradientType=0);zoom:1}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#005299;background-image:-moz-linear-gradient(top, #069, #039);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#069), to(#039));background-image:-webkit-linear-gradient(top, #069, #039);background-image:-o-linear-gradient(top, #069, #039);background-image:linear-gradient(to bottom, #069, #039);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff006699', endColorstr='#ff003399', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-primary button,.mce-primary button i{color:#fff;text-shadow:1px 1px #333}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:1px 5px;font-size:12px;*padding-bottom:2px}.mce-btn-small i{line-height:20px;vertical-align:top;*line-height:18px}.mce-btn .mce-caret{margin-top:8px;margin-left:0}.mce-btn-small .mce-caret{margin-top:8px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #333;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #333;border-top:0}.mce-rtl .mce-btn button{direction:rtl}.mce-btn-group .mce-btn{border-width:1px 0 1px 0;margin:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-btn-group .mce-first{border-left:1px solid #b1b1b1;border-left:1px solid rgba(0,0,0,0.25);-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.mce-btn-group .mce-last{border-right:1px solid #b1b1b1;border-right:1px solid rgba(0,0,0,0.1);-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.mce-btn-group .mce-first.mce-last{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fff, #d9d9d9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#d9d9d9));background-image:-webkit-linear-gradient(top, #fff, #d9d9d9);background-image:-o-linear-gradient(top, #fff, #d9d9d9);background-image:linear-gradient(to bottom, #fff, #d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffd9d9d9', GradientType=0);zoom:1;text-indent:-10em;*font-size:0;*line-height:0;*text-indent:0;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#333;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65)}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#acacac}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-colorbutton button{padding-right:4px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-14px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-16px;padding-right:0;width:16px}.mce-colorbutton .mce-open{padding-left:4px;border-left:1px solid transparent;border-right:1px solid transparent}.mce-colorbutton:hover .mce-open{border-left-color:#bdbdbd;border-right-color:#bdbdbd}.mce-colorbutton.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:4px;margin-right:-14px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;margin-right:-17px;padding-left:0}.mce-rtl .mce-colorbutton button{padding-right:10px;padding-left:10px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px}.mce-combobox{display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#adadad}.mce-combobox.mce-has-open input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.mce-combobox .mce-btn{border-left:0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#333}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#666;color:#fff}.mce-path .mce-divider{display:inline}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9E9E9E;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid #9e9e9e;width:100%;height:100%}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);border:0;overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-menubar{border:1px solid #c4c4c4}.mce-menubar .mce-menubtn button span{color:#333}.mce-menubar .mce-caret{border-top-color:#333}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:transparent;background:#e6e6e6;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-menubtn.mce-disabled span{color:#aaa}.mce-menubtn span{color:#333;margin-right:2px;line-height:20px;*line-height:16px}.mce-menubtn.mce-btn-small span{font-size:12px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-menubtn .mce-caret{*margin-top:6px}.mce-rtl .mce-menubtn button{direction:rtl;text-align:right}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-menu-item{display:block;padding:6px 15px 6px 12px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-ico,.mce-menu-item .mce-text{color:#333}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled .mce-ico{color:#adadad}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text{color:#fff}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:#fff}.mce-menu-item.mce-disabled:hover{background:#ccc}.mce-menu-shortcut{display:inline-block;color:#adadad}.mce-menu-shortcut{display:inline-block;*display:inline;*zoom:1;padding:0 15px 0 20px}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item.mce-selected .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:#fff}.mce-menu-item .mce-caret{margin-top:4px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #333}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret,.mce-menu-item:hover .mce-caret{border-left-color:#fff}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item-normal.mce-active{background-color:#c8def4}.mce-menu-item-preview.mce-active{border-left:5px solid #aaa}.mce-menu-item-normal.mce-active .mce-text{color:#333}.mce-menu-item-normal.mce-active:hover .mce-text,.mce-menu-item-normal.mce-active:hover .mce-ico{color:#fff}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:#fff;background-color:#0081c2;background-image:-moz-linear-gradient(top, #08c, #0077b3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#0077b3));background-image:-webkit-linear-gradient(top, #08c, #0077b3);background-image:-o-linear-gradient(top, #08c, #0077b3);background-image:linear-gradient(to bottom, #08c, #0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);zoom:1}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:#cbcbcb;border-bottom:1px solid #fff;cursor:default;filter:none}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-menu-align.mce-rtl .mce-menu-shortcut,.mce-menu-align.mce-rtl .mce-caret{right:auto;left:0}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #333;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:#fff}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:2px 0 0;min-width:160px;background:#fff;border:1px solid #989898;border:1px solid rgba(0,0,0,0.2);z-index:1002;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;*display:inline}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#333}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent;border-right:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#bdbdbd;border-right-color:#bdbdbd}.mce-splitbtn button{padding-right:4px}.mce-splitbtn .mce-open{padding-left:4px}.mce-splitbtn .mce-open.mce-active{-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-splitbtn.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:10px;padding-left:10px}.mce-rtl .mce-splitbtn .mce-open{padding-left:4px;padding-right:4px}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#e3e3e3;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#fdfdfd}.mce-tab.mce-active{background:#fdfdfd;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);display:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#333}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65)}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px}.mce-textbox.mce-disabled{color:#adadad}.mce-rtl .mce-textbox{text-align:right;direction:rtl}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}@font-face{font-family:'tinymce';src:url('fonts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce',Arial;font-style:normal;font-weight:normal;font-size:16px;line-height:16px;vertical-align:text-top;-webkit-font-smoothing:antialiased;display:inline-block;background:transparent center center;width:16px;height:16px;color:#333}.mce-btn-small .mce-ico{font-family:'tinymce-small',Arial}.mce-i-save:before{content:"\e000"}.mce-i-newdocument:before{content:"\e001"}.mce-i-fullpage:before{content:"\e002"}.mce-i-alignleft:before{content:"\e003"}.mce-i-aligncenter:before{content:"\e004"}.mce-i-alignright:before{content:"\e005"}.mce-i-alignjustify:before{content:"\e006"}.mce-i-cut:before{content:"\e007"}.mce-i-paste:before{content:"\e008"}.mce-i-searchreplace:before{content:"\e009"}.mce-i-bullist:before{content:"\e00a"}.mce-i-numlist:before{content:"\e00b"}.mce-i-indent:before{content:"\e00c"}.mce-i-outdent:before{content:"\e00d"}.mce-i-blockquote:before{content:"\e00e"}.mce-i-undo:before{content:"\e00f"}.mce-i-redo:before{content:"\e010"}.mce-i-link:before{content:"\e011"}.mce-i-unlink:before{content:"\e012"}.mce-i-anchor:before{content:"\e013"}.mce-i-image:before{content:"\e014"}.mce-i-media:before{content:"\e015"}.mce-i-help:before{content:"\e016"}.mce-i-code:before{content:"\e017"}.mce-i-inserttime:before{content:"\e018"}.mce-i-preview:before{content:"\e019"}.mce-i-forecolor:before{content:"\e01a"}.mce-i-backcolor:before{content:"\e01a"}.mce-i-table:before{content:"\e01b"}.mce-i-hr:before{content:"\e01c"}.mce-i-removeformat:before{content:"\e01d"}.mce-i-subscript:before{content:"\e01e"}.mce-i-superscript:before{content:"\e01f"}.mce-i-charmap:before{content:"\e020"}.mce-i-emoticons:before{content:"\e021"}.mce-i-print:before{content:"\e022"}.mce-i-fullscreen:before{content:"\e023"}.mce-i-spellchecker:before{content:"\e024"}.mce-i-nonbreaking:before{content:"\e025"}.mce-i-template:before{content:"\e026"}.mce-i-pagebreak:before{content:"\e027"}.mce-i-restoredraft:before{content:"\e028"}.mce-i-untitled:before{content:"\e029"}.mce-i-bold:before{content:"\e02a"}.mce-i-italic:before{content:"\e02b"}.mce-i-underline:before{content:"\e02c"}.mce-i-strikethrough:before{content:"\e02d"}.mce-i-visualchars:before{content:"\e02e"}.mce-i-visualblocks:before{content:"\e02e"}.mce-i-ltr:before{content:"\e02f"}.mce-i-rtl:before{content:"\e030"}.mce-i-copy:before{content:"\e031"}.mce-i-resize:before{content:"\e032"}.mce-i-browse:before{content:"\e034"}.mce-i-pastetext:before{content:"\e035"}.mce-i-checkbox:before,.mce-i-selected:before{content:"\e033"}.mce-i-selected{visibility:hidden}i.mce-i-backcolor{text-shadow:none;background:#bbb} \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/skins/studio-tmce4/content.inline.min.css b/common/static/js/vendor/tiny_mce/skins/studio-tmce4/content.inline.min.css new file mode 100755 index 0000000000..8ff8ee266f --- /dev/null +++ b/common/static/js/vendor/tiny_mce/skins/studio-tmce4/content.inline.min.css @@ -0,0 +1 @@ +.mce-object{border:1px dotted #3a3a3a;background:#d5d5d5 url(img/object.gif) no-repeat center}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px!important;height:9px!important;border:1px dotted #3a3a3a;background:#d5d5d5 url(img/anchor.gif) no-repeat center}.mce-nbsp{background:#AAA}hr{cursor:default}.mce-match-marker{background:#AAA;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-spellchecker-word{background:url(img/wline.gif) repeat-x bottom left;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td.mce-item-selected,th.mce-item-selected{background-color:#39f!important}.mce-edit-focus{outline:1px dotted #333} \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/skins/studio-tmce4/content.min.css b/common/static/js/vendor/tiny_mce/skins/studio-tmce4/content.min.css new file mode 100755 index 0000000000..1f057287b9 --- /dev/null +++ b/common/static/js/vendor/tiny_mce/skins/studio-tmce4/content.min.css @@ -0,0 +1 @@ +body{background-color:#fff;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px;scrollbar-3dlight-color:#f0f0ee;scrollbar-arrow-color:#676662;scrollbar-base-color:#f0f0ee;scrollbar-darkshadow-color:#ddd;scrollbar-face-color:#e0e0dd;scrollbar-highlight-color:#f0f0ee;scrollbar-shadow-color:#f0f0ee;scrollbar-track-color:#f5f5f5}td,th{font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px}.mce-object{border:1px dotted #3a3a3a;background:#d5d5d5 url(img/object.gif) no-repeat center}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px!important;height:9px!important;border:1px dotted #3a3a3a;background:#d5d5d5 url(img/anchor.gif) no-repeat center}.mce-nbsp{background:#AAA}hr{cursor:default}.mce-match-marker{background:#AAA;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-spellchecker-word{background:url(img/wline.gif) repeat-x bottom left;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td.mce-item-selected,th.mce-item-selected{background-color:#39f!important}.mce-edit-focus{outline:1px dotted #333} \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon-small.eot b/common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon-small.eot new file mode 100755 index 0000000000000000000000000000000000000000..43a30f992596498938e08ba09fd157d744cfe413 GIT binary patch literal 8344 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 literal 0 HcmV?d00001 diff --git a/common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon-small.svg b/common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon-small.svg new file mode 100755 index 0000000000..d338114f07 --- /dev/null +++ b/common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon-small.svg @@ -0,0 +1,175 @@ + + + + +This is a custom SVG font generated by IcoMoon. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon-small.ttf b/common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon-small.ttf new file mode 100755 index 0000000000000000000000000000000000000000..841c79c182342d92dc995a5cc1349a9451edede6 GIT binary patch literal 8160 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 literal 0 HcmV?d00001 diff --git a/common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon-small.woff b/common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon-small.woff new file mode 100755 index 0000000000000000000000000000000000000000..ad14a2406e7887c3ed22440d42d726f0ff176119 GIT binary patch literal 8336 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 literal 0 HcmV?d00001 diff --git a/common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon.eot b/common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon.eot new file mode 100755 index 0000000000000000000000000000000000000000..eed4f8149a44a99566fe9d3778dd21d0950a7ff8 GIT binary patch literal 8268 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 L6eV5%o%(+O+no0t literal 0 HcmV?d00001 diff --git a/common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon.svg b/common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon.svg new file mode 100755 index 0000000000..727f61af13 --- /dev/null +++ b/common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon.svg @@ -0,0 +1,153 @@ + + + + +This is a custom SVG font generated by IcoMoon. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon.ttf b/common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon.ttf new file mode 100755 index 0000000000000000000000000000000000000000..dea6e458f9db36c0cc4ad7dcbe579aed13213126 GIT binary patch literal 8104 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 AmjD0& literal 0 HcmV?d00001 diff --git a/common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon.woff b/common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon.woff new file mode 100755 index 0000000000000000000000000000000000000000..f17657986c6ab0ee65c0405db24b01ee22450025 GIT binary patch literal 8400 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 C+YCGa literal 0 HcmV?d00001 diff --git a/common/static/js/vendor/tiny_mce/skins/studio-tmce4/img/loader.gif b/common/static/js/vendor/tiny_mce/skins/studio-tmce4/img/loader.gif new file mode 100755 index 0000000000000000000000000000000000000000..c69e937232b24ea30f01c68bbd2ebc798dcecfcb GIT binary patch literal 2608 zcmdVcdr(tX9tZGC9yiG~=H_*Q-0%n(kWqP*D#hw{AQu8;1%gl-Hrf&{2?48KX;hHy z3Ze*zEz4t3XdUFyLbNPUYlA`|B}P=N1fqtL1*}S;87#|-W9v<#G;ul(e%d3)N(^9c$d2Dz{7}?ErjNd;{EMKkCsk21~b9Gvg zDo<7L=3Z5HNbVlZUcm1eg#o#CZCJU`3IYHwM->zCd?uYrF3vKFeM}v?f+%s?E>ly|3W25ry9#NNbTx-}0ON58dTrs^ix{_1O0Wh~SVSBlH)Ajn zPn^Gbjz}PCtN@#keR&hK&Dhl-b$kZ8^S)x#dh0{7X=X%CCJk7P1PSO>T&S8I4{#Lg zb5#)o=;!ZP*1nM{cI4@(x7o27*SA()NHmrn67aN@Pmi~(i_SnrjYnwh36aG%!@i0d zqbvfa44f|?OG4ntP|nbjhEl1)Yp6ZN@yjy zy4==QmLy%t;ps3R?~f2KfTTI|2?q8dFd6^z5GF+Xa&Y)sjG)hxit80pPcOP zJ z*LW{SyGHD%hUotV+W%I}fBLAIx!8|7#}$;clKQ+{&FjDqGQ2ZNx(lYM3*%~}ILnao zM`aui55~ZFJlu^!5rdA9Q_7H68H_;##u{x(Yn-vSfIRCb^Nqsg zGRS!Egm>h+o<}LeV4&CLReo9FrDjDvs}8?JwC)#Qs|ie=r?~xUh)&*d`Fx>FG}%X# zNdtDHBKhLPC0wpooFDAQKL%*6T|ULH$=wX!NhcasgD3d;-d$I6yRK3yN+E~C1335_iLOt+*9uvSZ`>*KA}vm}08wRq=>5l|t*Na&jR z-C1&C`nkEk#sB|@yyt-#fXngP04My zm7u$Q%EJbHp`>~`5W&L{W!6`y&}LMS;jfUpgO~7TLVMRZ9IC)IZp0A${`yp0{&wco z#1nx@XMkhqeK%7?RE7JdLr1^nwFfaJ0Q&Lv?WNJ%9}VSJsNY2+UYs2%EU0J~ayFXv zi*?7KCXQHkD)O6!0Q%4N+HTODHxJ{kQSuQX$l-rSwkwh(zMkdfzxyGwl@yHC)C4p< z&n2%8#M?)Q@mgHL1ot8`SFdSEj9ye|jHy+U8#@HoUExG=@AVkRAe_qYm4EpzK6L*& zh`)26?V#f4#_h^P9G^%>h2-H3)$QP zQovu6J9qDvsxqweDdNNa!Lb?L4_UF{tLX_nN7r0U_vF14YKcGR-*Gl} zx3oG)bzf|65dBxD-;2ZCp??K;+TuQ9onnK?==5hzbkb^r_g>z4#D8mcv8(+XdoszA zCx-qhdgxMNMotj}SiL_6V(tLcsK7(M(r(%u<}QrVfOvyK6_;~NOTlPGfX@M7S5YQF z&*$(ylJMHJt^_aQeu{C6NaTE$G3HNN@_SnN8YcaKn%`)F@~L1x+ah7-gEJPpc6w%3 zyX}r+Qk$4RHZzfH){e~F*qJ{d*L8a6n4;U?+{de0-t)mal#TVxe)3F}^UBh+zd T)6_**#cgp_+?JL9(ew3BlNF>u literal 0 HcmV?d00001 diff --git a/common/static/js/vendor/tiny_mce/skins/studio-tmce4/img/object.gif b/common/static/js/vendor/tiny_mce/skins/studio-tmce4/img/object.gif new file mode 100755 index 0000000000000000000000000000000000000000..cccd7f023fb80908cb33bb7d9604236cd21b7ae7 GIT binary patch literal 152 zcmV;J0B8S4Nk%w1VG#fg0J9GO<>lo+KR<78Z?v?uS65g4{r%Y3*xlXT%F4>`@9+2b z_ww@cot>Tk|Nk>HGXMYpA^8LW000jFEC2ui01*HU000C<(8)=wd#<&tyXIMjHBV`d zBSi|xsj3(;nD0kQ0aJq8eLH~x02P|t2!_J&Wqb%0io?#xD.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#9e9e9e;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;background:#fff;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#fff;position:fixed;top:0;left:0;opacity:0;-webkit-transition:opacity 150ms ease-in;transition:opacity 150ms ease-in}.mce-window.mce-in{opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #ddd;position:relative}.mce-window-head .mce-close{position:absolute;right:15px;top:9px;font-size:20px;font-weight:bold;line-height:20px;color:#999;cursor:pointer;height:20px;overflow:hidden}.mce-close:hover{color:#bbb}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:10px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#fff;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window.mce-fullscreen,.mce-window.mce-fullscreen .mce-foot{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:15px}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:#fff;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-inner{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-tooltip-inner{-webkit-box-shadow:0 0 5px #000000;-moz-box-shadow:0 0 5px #000000;box-shadow:0 0 5px #000000}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-n .mce-tooltip-arrow{top:0px;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-btn{border:1px solid #eef1f5;border-color:#cad6e3 #cad6e3 #cad6e3 #cad6e3;position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#d0d7df}.mce-btn:hover,.mce-btn:focus{color:#626b73;background-color:#c1cad5}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{background-color:#b2beca;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn:not(.mce-disabled):active{background-color:#b2beca;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn button{padding:4px 10px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#626b73;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px #eee}.mce-primary{min-width:50px;color:#fff;border:1px solid #eef1f5;border-color:#cad6e3 #cad6e3 #cad6e3 #cad6e3;background-color:#0499dc}.mce-primary:hover,.mce-primary:focus{background-color:#0388c3}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#0376a9;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-primary button,.mce-primary button i{color:#fff;text-shadow:1px 1px #333}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:3px 5px;font-size:12px;line-height:15px}.mce-btn-small i{margin-top:0}.mce-btn .mce-caret{margin-top:8px;*margin-top:6px;margin-left:0}.mce-btn-small .mce-caret{margin-top:6px;*margin-top:4px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #626b73;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #626b73;border-top:0}.mce-rtl .mce-btn button{direction:rtl}.mce-btn-group .mce-btn{border-width:1px 0 1px 0;margin:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-btn-group .mce-first{border-left:1px solid #eef1f5;border-left:1px solid #cad6e3;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.mce-btn-group .mce-last{border-right:1px solid #eef1f5;border-right:1px solid #cad6e3;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.mce-btn-group .mce-first.mce-last{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#d0d7df;text-indent:-10em;*font-size:0;*line-height:0;*text-indent:0;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#626b73;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid #59a5e1;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(89, 165, 225, 0.85);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(89, 165, 225, 0.85);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(89, 165, 225, 0.85)}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#bababa}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-colorbutton button{padding-right:4px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-14px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-17px;padding-right:0;width:16px}.mce-colorbutton .mce-open{padding-left:4px;border-left:1px solid transparent;border-right:1px solid transparent}.mce-colorbutton:hover .mce-open{border-left-color:#cad6e3;border-right-color:#cad6e3}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:3px;margin-right:-14px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;margin-right:-17px;padding-left:0}.mce-rtl .mce-colorbutton button{padding-right:10px;padding-left:10px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px}.mce-combobox{display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#bbb}.mce-combobox.mce-has-open input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.mce-combobox .mce-btn{border-left:0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#555}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#666;color:#fff}.mce-path .mce-divider{display:inline}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9E9E9E;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid #9e9e9e;width:100%;height:100%}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);border:0;overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-menubar{border:1px solid #c4c4c4}.mce-menubar .mce-menubtn button span{color:#555}.mce-menubar .mce-caret{border-top-color:#555}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:transparent;background:#a9bcd1;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-menubtn.mce-disabled span{color:#aaa}.mce-menubtn span{color:#626b73;margin-right:2px;line-height:20px;*line-height:16px}.mce-menubtn.mce-btn-small span{font-size:12px;line-height:15px;*line-height:16px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-rtl .mce-menubtn button{direction:rtl;text-align:right}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-menu-item{display:block;padding:6px 15px 6px 12px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-ico,.mce-menu-item .mce-text{color:#333}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled .mce-ico{color:#adadad}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text{color:#fff}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:#fff}.mce-menu-item.mce-disabled:hover{background:#ccc}.mce-menu-shortcut{display:inline-block;color:#adadad}.mce-menu-shortcut{display:inline-block;*display:inline;*zoom:1;padding:0 15px 0 20px}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item.mce-selected .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:#fff}.mce-menu-item .mce-caret{margin-top:4px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #333}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret,.mce-menu-item:hover .mce-caret{border-left-color:#fff}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item-normal.mce-active{background-color:#c8def4}.mce-menu-item-preview.mce-active{border-left:5px solid #aaa}.mce-menu-item-normal.mce-active .mce-text{color:#333}.mce-menu-item-normal.mce-active:hover .mce-text,.mce-menu-item-normal.mce-active:hover .mce-ico{color:#fff}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:#fff;background-color:#0081c2}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:#cbcbcb;border-bottom:1px solid #fff;cursor:default;filter:none}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-menu-align.mce-rtl .mce-menu-shortcut,.mce-menu-align.mce-rtl .mce-caret{right:auto;left:0}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #333;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:#fff}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:2px 0 0;min-width:160px;background:#fff;border:1px solid #989898;border:1px solid rgba(0,0,0,0.2);z-index:1002;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;*display:inline}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#555}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent;border-right:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#cad6e3;border-right-color:#cad6e3}.mce-splitbtn button{padding-right:4px}.mce-splitbtn .mce-open{padding-left:4px}.mce-splitbtn .mce-open.mce-active{-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:10px;padding-left:10px}.mce-rtl .mce-splitbtn .mce-open{padding-left:4px;padding-right:4px}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#e5ecf3;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#fdfdfd}.mce-tab.mce-active{background:#fdfdfd;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);display:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#555}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:#59a5e1;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(89, 165, 225, 0.85);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(89, 165, 225, 0.85);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(89, 165, 225, 0.85)}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px}.mce-textbox.mce-disabled{color:#bbb}.mce-rtl .mce-textbox{text-align:right;direction:rtl}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}@font-face{font-family:'icomoon';src:url('fonts/icomoon.eot');src:url('fonts/icomoon.eot?#iefix') format('embedded-opentype'),url('fonts/icomoon.svg#icomoon') format('svg'),url('fonts/icomoon.woff') format('woff'),url('fonts/icomoon.ttf') format('truetype');font-weight:normal;font-style:normal}@font-face{font-family:'icomoon-small';src:url('fonts/icomoon-small.eot');src:url('fonts/icomoon-small.eot?#iefix') format('embedded-opentype'),url('fonts/icomoon-small.svg#icomoon') format('svg'),url('fonts/icomoon-small.woff') format('woff'),url('fonts/icomoon-small.ttf') format('truetype');font-weight:normal;font-style:normal}.mce-ico{font-family:'icomoon';font-style:normal;font-weight:normal;font-size:16px;line-height:16px;vertical-align:text-top;-webkit-font-smoothing:antialiased;display:inline-block;background:transparent center center;width:16px;height:16px;color:#626b73;-ie7-icon:' '}.mce-btn-small .mce-ico{font-family:'icomoon-small'}.mce-ico,i.mce-i-checkbox{zoom:expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = this.currentStyle['-ie7-icon'].substr(1, 1) + ' ')}.mce-i-save{-ie7-icon:"\e000"}.mce-i-newdocument{-ie7-icon:"\e001"}.mce-i-fullpage{-ie7-icon:"\e002"}.mce-i-alignleft{-ie7-icon:"\e003"}.mce-i-aligncenter{-ie7-icon:"\e004"}.mce-i-alignright{-ie7-icon:"\e005"}.mce-i-alignjustify{-ie7-icon:"\e006"}.mce-i-cut{-ie7-icon:"\e007"}.mce-i-paste{-ie7-icon:"\e008"}.mce-i-searchreplace{-ie7-icon:"\e009"}.mce-i-bullist{-ie7-icon:"\e00a"}.mce-i-numlist{-ie7-icon:"\e00b"}.mce-i-indent{-ie7-icon:"\e00c"}.mce-i-outdent{-ie7-icon:"\e00d"}.mce-i-blockquote{-ie7-icon:"\e00e"}.mce-i-undo{-ie7-icon:"\e00f"}.mce-i-redo{-ie7-icon:"\e010"}.mce-i-link{-ie7-icon:"\e011"}.mce-i-unlink{-ie7-icon:"\e012"}.mce-i-anchor{-ie7-icon:"\e013"}.mce-i-image{-ie7-icon:"\e014"}.mce-i-media{-ie7-icon:"\e015"}.mce-i-help{-ie7-icon:"\e016"}.mce-i-code{-ie7-icon:"\e017"}.mce-i-inserttime{-ie7-icon:"\e018"}.mce-i-preview{-ie7-icon:"\e019"}.mce-i-forecolor{-ie7-icon:"\e01a"}.mce-i-backcolor{-ie7-icon:"\e01a"}.mce-i-table{-ie7-icon:"\e01b"}.mce-i-hr{-ie7-icon:"\e01c"}.mce-i-removeformat{-ie7-icon:"\e01d"}.mce-i-subscript{-ie7-icon:"\e01e"}.mce-i-superscript{-ie7-icon:"\e01f"}.mce-i-charmap{-ie7-icon:"\e020"}.mce-i-emoticons{-ie7-icon:"\e021"}.mce-i-print{-ie7-icon:"\e022"}.mce-i-fullscreen{-ie7-icon:"\e023"}.mce-i-spellchecker{-ie7-icon:"\e024"}.mce-i-nonbreaking{-ie7-icon:"\e025"}.mce-i-template{-ie7-icon:"\e026"}.mce-i-pagebreak{-ie7-icon:"\e027"}.mce-i-restoredraft{-ie7-icon:"\e028"}.mce-i-untitled{-ie7-icon:"\e029"}.mce-i-bold{-ie7-icon:"\e02a"}.mce-i-italic{-ie7-icon:"\e02b"}.mce-i-underline{-ie7-icon:"\e02c"}.mce-i-strikethrough{-ie7-icon:"\e02d"}.mce-i-visualchars{-ie7-icon:"\e02e"}.mce-i-ltr{-ie7-icon:"\e02f"}.mce-i-rtl{-ie7-icon:"\e030"}.mce-i-copy{-ie7-icon:"\e031"}.mce-i-resize{-ie7-icon:"\e032"}.mce-i-browse{-ie7-icon:"\e034"}.mce-i-checkbox,.mce-i-selected{-ie7-icon:"\e033"}.mce-i-selected{visibility:hidden}.mce-i-backcolor{background:#BBB} \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/skins/studio-tmce4/skin.json b/common/static/js/vendor/tiny_mce/skins/studio-tmce4/skin.json new file mode 100755 index 0000000000..7791591854 --- /dev/null +++ b/common/static/js/vendor/tiny_mce/skins/studio-tmce4/skin.json @@ -0,0 +1,51 @@ +{ + "skin-name": "studio-tmce4", + "preview-bg": "#eeeeee", + "text": "#555555", + "text-inverse": "#ffffff", + "text-disabled": "#aaaaaa", + "has-gradients": false, + "has-radius": true, + "has-boxshadow": true, + "btn-text": "#626b73", + "btn-text-shadow": "#eeeeee", + "btn-bg": "#cad6e3", + "btn-bg-hlight": "#d9d9d9", + "btn-border-top": "#cad6e3", + "btn-border-right": "#cad6e3", + "btn-border-bottom": "rgba(202,214,227,1)", + "btn-border-left": "#cad6e3", + "btn-split-border": "#cad6e3", + "btn-primary-text": "#ffffff", + "btn-primary-text-shadow": "#333333", + "btn-primary-bg": "#009fe6", + "btn-primary-bg-hlight": "#0990cc", + "menu-bg": "#ffffff", + "menu-border": "rgba(0,0,0,0.2)", + "menuitem-text": "#333333", + "menuitem-bg-selected": "#0088cc", + "menuitem-bg-selected-hlight": "#0077b3", + "menuitem-separator-top": "#cbcbcb", + "menuitem-separator-bottom": "#ffffff", + "menuitem-text-inverse": "#ffffff", + "menuitem-bg-active": "#c8def4", + "menuitem-text-active": "#333333", + "menuitem-preview-border-active": "#aaaaaa", + "checkbox-border": "#c5c5c5", + "checkbox-border-focus": "#59a5e1", + "panel-border": "#9e9e9e", + "panel-bg": "#fdfdfd", + "panel-bg-hlight": "#dddddd", + "textbox-bg": "#ffffff", + "textbox-border": "#c5c5c5", + "textbox-border-focus": "#59a5e1", + "window-bg": "#ffffff", + "window-border": "#dddddd", + "tab-bg": "#e5ecf3", + "tab-bg-hover": "#fdfdfd", + "tab-bg-active": "#fdfdfd", + "tab-border": "#c5c5c5", + "colorbtn-backcolor-bg": "#bbbbbb", + "grid-border": "#d6d6d6", + "grid-border-active": "#a1a1a1" +} \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/skins/studio-tmce4/skin.min.css b/common/static/js/vendor/tiny_mce/skins/studio-tmce4/skin.min.css new file mode 100755 index 0000000000..b1abc5b436 --- /dev/null +++ b/common/static/js/vendor/tiny_mce/skins/studio-tmce4/skin.min.css @@ -0,0 +1 @@ +.mce-container,.mce-container *,.mce-widget,.mce-widget *{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:#555;font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;-webkit-tap-highlight-color:transparent;line-height:normal;font-weight:normal;text-align:left;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr}.mce-widget button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.mce-container *[unselectable]{-moz-user-select:none;-webkit-user-select:none;-o-user-select:none;user-select:none}.mce-container ::-webkit-scrollbar{width:8px;height:8px;-webkit-border-radius:4px}.mce-container ::-webkit-scrollbar-track,.mce-container ::-webkit-scrollbar-track-piece{background-color:transparent}.mce-container ::-webkit-scrollbar-thumb{background-color:rgba(53,57,71,0.3);width:6px;height:6px;-webkit-border-radius:4px}.mce-fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.mce-fade.mce-in{opacity:1}.mce-tinymce{visibility:visible !important;position:relative}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%;z-index:100}div.mce-fullscreen{position:fixed;top:0;left:0;width:100%;height:auto}.mce-tinymce{display:block;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mce-wordcount{position:absolute;top:0;right:0;padding:8px}div.mce-edit-area{background:#FFF;filter:none}.mce-statusbar{position:relative}.mce-statusbar .mce-container-body{position:relative}.mce-fullscreen .mce-resizehandle{display:none}.mce-charmap{border-collapse:collapse}.mce-charmap td{cursor:default;border:1px solid #9e9e9e;width:20px;height:20px;line-height:20px;text-align:center;vertical-align:middle;padding:2px}.mce-charmap td div{text-align:center}.mce-charmap td:hover{background:#d9d9d9}.mce-grid td div{border:1px solid #d6d6d6;width:12px;height:12px;margin:2px;cursor:pointer}.mce-grid{border-spacing:2px;border-collapse:separate}.mce-grid a{display:block;border:1px solid transparent}.mce-grid a:hover{border-color:#a1a1a1}.mce-grid-border{margin:0 4px 0 4px}.mce-grid-border a{border-color:#d6d6d6;width:13px;height:13px}.mce-grid-border a:hover,.mce-grid-border a.mce-active{border-color:#a1a1a1;background:#c8def4}.mce-text-center{text-align:center}div.mce-tinymce-inline{width:100%;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-rtl .mce-wordcount{left:0;right:auto}.mce-container,.mce-container-body{display:block}.mce-autoscroll{overflow:hidden}.mce-scrollbar{position:absolute;width:7px;height:100%;top:2px;right:2px;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-scrollbar-h{top:auto;right:auto;left:2px;bottom:2px;width:100%;height:7px}.mce-scrollbar-thumb{position:absolute;background-color:#000;border:1px solid #888;border-color:rgba(85,85,85,0.6);width:5px;height:100%;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scrollbar-h .mce-scrollbar-thumb{width:100%;height:5px}.mce-scrollbar:hover,.mce-scrollbar.mce-active{background-color:#AAA;opacity:.6;filter:alpha(opacity=60);zoom:1;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scroll{position:relative}.mce-panel{border:0 solid #9e9e9e;background-color:#f0f0f0}.mce-floatpanel{position:absolute;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2)}.mce-floatpanel.mce-fixed{position:fixed}.mce-floatpanel .mce-arrow,.mce-floatpanel .mce-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.mce-floatpanel .mce-arrow{border-width:11px}.mce-floatpanel .mce-arrow:after{border-width:10px;content:""}.mce-floatpanel.mce-popover{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);top:0;left:0;background:#fff;border:1px solid #9e9e9e;border:1px solid rgba(0,0,0,0.25)}.mce-floatpanel.mce-popover.mce-bottom{margin-top:10px;*margin-top:0}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#9e9e9e;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;background:#fff;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#fff;position:fixed;top:0;left:0;opacity:0;-webkit-transition:opacity 150ms ease-in;transition:opacity 150ms ease-in}.mce-window.mce-in{opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #ddd;position:relative}.mce-window-head .mce-close{position:absolute;right:15px;top:9px;font-size:20px;font-weight:bold;line-height:20px;color:#999;cursor:pointer;height:20px;overflow:hidden}.mce-close:hover{color:#bbb}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:10px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#fff;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window.mce-fullscreen,.mce-window.mce-fullscreen .mce-foot{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:15px}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:#fff;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-inner{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-tooltip-inner{-webkit-box-shadow:0 0 5px #000000;-moz-box-shadow:0 0 5px #000000;box-shadow:0 0 5px #000000}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-n .mce-tooltip-arrow{top:0px;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-btn{border:0;position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;background-color:transparent}.mce-btn:hover,.mce-btn:focus{color:#626b73;background-color:#c1cad5}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{background-color:#b2beca;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn:not(.mce-disabled):active{background-color:#b2beca;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn button{padding:4px 8px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#626b73;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px #eee;font-size:.9em;text-align:center}.mce-primary{min-width:50px;color:#fff;border:1px solid #007FB8;background-color:#009FE6;background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.3), rgba(255, 255, 255, 0));}.mce-primary:hover,.mce-primary:focus{background-color:#0388c3}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#0376a9;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-primary button,.mce-primary button i{color:#fff;text-transform:uppercase;}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:3px 5px;font-size:12px;line-height:15px}.mce-btn-small i{margin-top:0}.mce-btn .mce-caret{margin-top:8px;*margin-top:6px;margin-left:0}.mce-btn-small .mce-caret{margin-top:6px;*margin-top:4px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #626b73;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #626b73;border-top:0}.mce-rtl .mce-btn button{direction:rtl}.mce-btn-group .mce-btn{border-width:0;margin:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-btn-group .mce-first{border-left:1px solid #eef1f5;border-left:0;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.mce-btn-group .mce-last{border-right:0;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.mce-btn-group .mce-first.mce-last{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#d0d7df;text-indent:-10em;*font-size:0;*line-height:0;*text-indent:0;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#626b73;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid #59a5e1;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(89, 165, 225, 0.85);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(89, 165, 225, 0.85);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(89, 165, 225, 0.85)}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#bababa}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-colorbutton button{padding-right:4px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-14px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-17px;padding-right:0;width:16px}.mce-colorbutton .mce-open{padding-left:4px;border-left:1px solid transparent;border-right:1px solid transparent}.mce-colorbutton:hover .mce-open{border-left-color:#cad6e3;border-right-color:#cad6e3}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:3px;margin-right:-14px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;margin-right:-17px;padding-left:0}.mce-rtl .mce-colorbutton button{padding-right:10px;padding-left:10px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px}.mce-combobox{display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#bbb}.mce-combobox.mce-has-open input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.mce-combobox .mce-btn{border-left:0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#555}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#666;color:#fff}.mce-path .mce-divider{display:inline}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9E9E9E;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid #9e9e9e;width:100%;height:100%}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);border:0;overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-menubar{border:1px solid #c4c4c4}.mce-menubar .mce-menubtn button span{color:#555}.mce-menubar .mce-caret{border-top-color:#555}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:transparent;background:#a9bcd1;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-menubtn.mce-disabled span{color:#aaa}.mce-menubtn span{color:#626b73;margin-right:2px;line-height:20px;*line-height:16px}.mce-menubtn.mce-btn-small span{font-size:12px;line-height:15px;*line-height:16px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-rtl .mce-menubtn button{direction:rtl;text-align:right}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-menu-item{display:block;padding:6px 15px 6px 12px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-ico,.mce-menu-item .mce-text{color:#333}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled .mce-ico{color:#adadad}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text{color:#fff}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:#fff}.mce-menu-item.mce-disabled:hover{background:#ccc}.mce-menu-shortcut{display:inline-block;color:#adadad}.mce-menu-shortcut{display:inline-block;*display:inline;*zoom:1;padding:0 15px 0 20px}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item.mce-selected .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:#fff}.mce-menu-item .mce-caret{margin-top:4px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #333}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret,.mce-menu-item:hover .mce-caret{border-left-color:#fff}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item-normal.mce-active{background-color:#c8def4}.mce-menu-item-preview.mce-active{border-left:5px solid #aaa}.mce-menu-item-normal.mce-active .mce-text{color:#333}.mce-menu-item-normal.mce-active:hover .mce-text,.mce-menu-item-normal.mce-active:hover .mce-ico{color:#fff}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:#fff;background-color:#0081c2}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:#cbcbcb;border-bottom:1px solid #fff;cursor:default;filter:none}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-menu-align.mce-rtl .mce-menu-shortcut,.mce-menu-align.mce-rtl .mce-caret{right:auto;left:0}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #333;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:#fff}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:2px 0 0;min-width:160px;background:#fff;border:1px solid #989898;border:1px solid rgba(0,0,0,0.2);z-index:1002;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;*display:inline}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#555}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent;border-right:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#cad6e3;border-right-color:#cad6e3}.mce-splitbtn button{padding-right:4px}.mce-splitbtn .mce-open{padding-left:4px}.mce-splitbtn .mce-open.mce-active{-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:10px;padding-left:10px}.mce-rtl .mce-splitbtn .mce-open{padding-left:4px;padding-right:4px}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#e5ecf3;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#fdfdfd}.mce-tab.mce-active{background:#fdfdfd;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);display:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#555}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:#59a5e1;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(89, 165, 225, 0.85);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(89, 165, 225, 0.85);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(89, 165, 225, 0.85)}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px}.mce-textbox.mce-disabled{color:#bbb}.mce-rtl .mce-textbox{text-align:right;direction:rtl}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}@font-face{font-family:'tinymce';src:url('fonts/icomoon.eot');src:url('fonts/icomoon.eot?#iefix') format('embedded-opentype'),url('fonts/icomoon.svg#icomoon') format('svg'),url('fonts/icomoon.woff') format('woff'),url('fonts/icomoon.ttf') format('truetype');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/icomoon-small.eot');src:url('fonts/icomoon-small.eot?#iefix') format('embedded-opentype'),url('fonts/icomoon-small.svg#icomoon') format('svg'),url('fonts/icomoon-small.woff') format('woff'),url('fonts/icomoon-small.ttf') format('truetype');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce',Arial;font-style:normal;font-weight:normal;font-size:16px;line-height:16px;vertical-align:middle;-webkit-font-smoothing:antialiased;display:inline-block;background:transparent center center;width:16px;height:16px;color:#626b73}.mce-btn-small .mce-ico{font-family:'tinymce-small',Arial}.mce-i-save:before{content:"\e000"}.mce-i-newdocument:before{content:"\e001"}.mce-i-fullpage:before{content:"\e002"}.mce-i-alignleft:before{content:"\e003"}.mce-i-aligncenter:before{content:"\e004"}.mce-i-alignright:before{content:"\e005"}.mce-i-alignjustify:before{content:"\e006"}.mce-i-cut:before{content:"\e007"}.mce-i-paste:before{content:"\e008"}.mce-i-searchreplace:before{content:"\e009"}.mce-i-bullist:before{content:"\e00a"}.mce-i-numlist:before{content:"\e00b"}.mce-i-indent:before{content:"\e00c"}.mce-i-outdent:before{content:"\e00d"}.mce-i-blockquote:before{content:"\e00e"}.mce-i-undo:before{content:"\e00f"}.mce-i-redo:before{content:"\e010"}.mce-i-link:before{content:"\e011"}.mce-i-unlink:before{content:"\e012"}.mce-i-anchor:before{content:"\e013"}.mce-i-image:before{content:"\e014"}.mce-i-media:before{content:"\e015"}.mce-i-help:before{content:"\e016"}.mce-i-code:before{content:"\e017"}.mce-i-inserttime:before{content:"\e018"}.mce-i-preview:before{content:"\e019"}.mce-i-forecolor:before{content:"\e01a"}.mce-i-backcolor:before{content:"\e01a"}.mce-i-table:before{content:"\e01b"}.mce-i-hr:before{content:"\e01c"}.mce-i-removeformat:before{content:"\e01d"}.mce-i-subscript:before{content:"\e01e"}.mce-i-superscript:before{content:"\e01f"}.mce-i-charmap:before{content:"\e020"}.mce-i-emoticons:before{content:"\e021"}.mce-i-print:before{content:"\e022"}.mce-i-fullscreen:before{content:"\e023"}.mce-i-spellchecker:before{content:"\e024"}.mce-i-nonbreaking:before{content:"\e025"}.mce-i-template:before{content:"\e026"}.mce-i-pagebreak:before{content:"\e027"}.mce-i-restoredraft:before{content:"\e028"}.mce-i-untitled:before{content:"\e029"}.mce-i-bold:before{content:"\e02a"}.mce-i-italic:before{content:"\e02b"}.mce-i-underline:before{content:"\e02c"}.mce-i-strikethrough:before{content:"\e02d"}.mce-i-visualchars:before{content:"\e02e"}.mce-i-visualblocks:before{content:"\e02e"}.mce-i-ltr:before{content:"\e02f"}.mce-i-rtl:before{content:"\e030"}.mce-i-copy:before{content:"\e031"}.mce-i-resize:before{content:"\e032"}.mce-i-browse:before{content:"\e034"}.mce-i-pastetext:before{content:"\e035"}.mce-i-checkbox:before,.mce-i-selected:before{content:"\e033"}.mce-i-selected{visibility:hidden}i.mce-i-backcolor{text-shadow:none;background:#bbb} diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/about.htm b/common/static/js/vendor/tiny_mce/themes/advanced/about.htm deleted file mode 100644 index fe3660371e..0000000000 --- a/common/static/js/vendor/tiny_mce/themes/advanced/about.htm +++ /dev/null @@ -1,52 +0,0 @@ - - - - {#advanced_dlg.about_title} - - - - - -

- -
-
-

{#advanced_dlg.about_title}

-

Version: ()

-

TinyMCE is a platform independent web based Javascript HTML WYSIWYG editor control released as Open Source under LGPL - by Moxiecode Systems AB. It has the ability to convert HTML TEXTAREA fields or other HTML elements to editor instances.

-

Copyright © 2003-2008, Moxiecode Systems AB, All rights reserved.

-

For more information about this software visit the TinyMCE website.

- -
- Got Moxie? -
-
- -
-
-

{#advanced_dlg.about_loaded}

- -
-
- -

 

-
-
- -
-
-
-
- -
- -
- - diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/anchor.htm b/common/static/js/vendor/tiny_mce/themes/advanced/anchor.htm deleted file mode 100644 index dc53312d95..0000000000 --- a/common/static/js/vendor/tiny_mce/themes/advanced/anchor.htm +++ /dev/null @@ -1,26 +0,0 @@ - - - - {#advanced_dlg.anchor_title} - - - - -
- - - - - - - - -
{#advanced_dlg.anchor_title}
- -
- - -
-
- - diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/charmap.htm b/common/static/js/vendor/tiny_mce/themes/advanced/charmap.htm deleted file mode 100644 index 12acfe18a9..0000000000 --- a/common/static/js/vendor/tiny_mce/themes/advanced/charmap.htm +++ /dev/null @@ -1,55 +0,0 @@ - - - - {#advanced_dlg.charmap_title} - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - -
 
 
-
- - - - - - - - - - - - - - - - -
 
 
 
-
{#advanced_dlg.charmap_usage}
- - diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/color_picker.htm b/common/static/js/vendor/tiny_mce/themes/advanced/color_picker.htm deleted file mode 100644 index 66633d0c88..0000000000 --- a/common/static/js/vendor/tiny_mce/themes/advanced/color_picker.htm +++ /dev/null @@ -1,70 +0,0 @@ - - - - {#advanced_dlg.colorpicker_title} - - - - - - -
- - -
-
-
- {#advanced_dlg.colorpicker_picker_title} -
- - -
- -
- -
-
-
-
- -
-
- {#advanced_dlg.colorpicker_palette_title} -
- -
- -
-
-
- -
-
- {#advanced_dlg.colorpicker_named_title} -
- -
- -
- -
- {#advanced_dlg.colorpicker_name} -
-
-
-
- -
- - -
-
-
- - diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/editor_template.js b/common/static/js/vendor/tiny_mce/themes/advanced/editor_template.js deleted file mode 100644 index 4b8d563757..0000000000 --- a/common/static/js/vendor/tiny_mce/themes/advanced/editor_template.js +++ /dev/null @@ -1 +0,0 @@ -(function(h){var i=h.DOM,g=h.dom.Event,c=h.extend,f=h.each,a=h.util.Cookie,e,d=h.explode;function b(p,m){var k,l,o=p.dom,j="",n,r;previewStyles=p.settings.preview_styles;if(previewStyles===false){return""}if(!previewStyles){previewStyles="font-family font-size font-weight text-decoration text-transform color background-color"}function q(s){return s.replace(/%(\w+)/g,"")}k=m.block||m.inline||"span";l=o.create(k);f(m.styles,function(t,s){t=q(t);if(t){o.setStyle(l,s,t)}});f(m.attributes,function(t,s){t=q(t);if(t){o.setAttrib(l,s,t)}});f(m.classes,function(s){s=q(s);if(!o.hasClass(l,s)){o.addClass(l,s)}});o.setStyles(l,{position:"absolute",left:-65535});p.getBody().appendChild(l);n=o.getStyle(p.getBody(),"fontSize",true);n=/px$/.test(n)?parseInt(n,10):0;f(previewStyles.split(" "),function(s){var t=o.getStyle(l,s,true);if(s=="background-color"&&/transparent|rgba\s*\([^)]+,\s*0\)/.test(t)){t=o.getStyle(p.getBody(),s,true);if(o.toHex(t).toLowerCase()=="#ffffff"){return}}if(s=="font-size"){if(/em|%$/.test(t)){if(n===0){return}t=parseFloat(t,10)/(/%$/.test(t)?100:1);t=(t*n)+"px"}}j+=s+":"+t+";"});o.remove(l);return j}h.ThemeManager.requireLangPack("advanced");h.create("tinymce.themes.AdvancedTheme",{sizes:[8,10,12,14,18,24,36],controls:{bold:["bold_desc","Bold"],italic:["italic_desc","Italic"],underline:["underline_desc","Underline"],strikethrough:["striketrough_desc","Strikethrough"],justifyleft:["justifyleft_desc","JustifyLeft"],justifycenter:["justifycenter_desc","JustifyCenter"],justifyright:["justifyright_desc","JustifyRight"],justifyfull:["justifyfull_desc","JustifyFull"],bullist:["bullist_desc","InsertUnorderedList"],numlist:["numlist_desc","InsertOrderedList"],outdent:["outdent_desc","Outdent"],indent:["indent_desc","Indent"],cut:["cut_desc","Cut"],copy:["copy_desc","Copy"],paste:["paste_desc","Paste"],undo:["undo_desc","Undo"],redo:["redo_desc","Redo"],link:["link_desc","mceLink"],unlink:["unlink_desc","unlink"],image:["image_desc","mceImage"],cleanup:["cleanup_desc","mceCleanup"],help:["help_desc","mceHelp"],code:["code_desc","mceCodeEditor"],hr:["hr_desc","InsertHorizontalRule"],removeformat:["removeformat_desc","RemoveFormat"],sub:["sub_desc","subscript"],sup:["sup_desc","superscript"],forecolor:["forecolor_desc","ForeColor"],forecolorpicker:["forecolor_desc","mceForeColor"],backcolor:["backcolor_desc","HiliteColor"],backcolorpicker:["backcolor_desc","mceBackColor"],charmap:["charmap_desc","mceCharMap"],visualaid:["visualaid_desc","mceToggleVisualAid"],anchor:["anchor_desc","mceInsertAnchor"],newdocument:["newdocument_desc","mceNewDocument"],blockquote:["blockquote_desc","mceBlockQuote"]},stateControls:["bold","italic","underline","strikethrough","bullist","numlist","justifyleft","justifycenter","justifyright","justifyfull","sub","sup","blockquote"],init:function(k,l){var m=this,n,j,p;m.editor=k;m.url=l;m.onResolveName=new h.util.Dispatcher(this);n=k.settings;k.forcedHighContrastMode=k.settings.detect_highcontrast&&m._isHighContrast();k.settings.skin=k.forcedHighContrastMode?"highcontrast":k.settings.skin;if(!n.theme_advanced_buttons1){n=c({theme_advanced_buttons1:"bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect",theme_advanced_buttons2:"bullist,numlist,|,outdent,indent,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code",theme_advanced_buttons3:"hr,removeformat,visualaid,|,sub,sup,|,charmap"},n)}m.settings=n=c({theme_advanced_path:true,theme_advanced_toolbar_location:"top",theme_advanced_blockformats:"p,address,pre,h1,h2,h3,h4,h5,h6",theme_advanced_toolbar_align:"left",theme_advanced_statusbar_location:"bottom",theme_advanced_fonts:"Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats",theme_advanced_more_colors:1,theme_advanced_row_height:23,theme_advanced_resize_horizontal:1,theme_advanced_resizing_use_cookie:1,theme_advanced_font_sizes:"1,2,3,4,5,6,7",theme_advanced_font_selector:"span",theme_advanced_show_current_color:0,readonly:k.settings.readonly},n);if(!n.font_size_style_values){n.font_size_style_values="8pt,10pt,12pt,14pt,18pt,24pt,36pt"}if(h.is(n.theme_advanced_font_sizes,"string")){n.font_size_style_values=h.explode(n.font_size_style_values);n.font_size_classes=h.explode(n.font_size_classes||"");p={};k.settings.theme_advanced_font_sizes=n.theme_advanced_font_sizes;f(k.getParam("theme_advanced_font_sizes","","hash"),function(r,q){var o;if(q==r&&r>=1&&r<=7){q=r+" ("+m.sizes[r-1]+"pt)";o=n.font_size_classes[r-1];r=n.font_size_style_values[r-1]||(m.sizes[r-1]+"pt")}if(/^\s*\./.test(r)){o=r.replace(/\./g,"")}p[q]=o?{"class":o}:{fontSize:r}});n.theme_advanced_font_sizes=p}if((j=n.theme_advanced_path_location)&&j!="none"){n.theme_advanced_statusbar_location=n.theme_advanced_path_location}if(n.theme_advanced_statusbar_location=="none"){n.theme_advanced_statusbar_location=0}if(k.settings.content_css!==false){k.contentCSS.push(k.baseURI.toAbsolute(l+"/skins/"+k.settings.skin+"/content.css"))}k.onInit.add(function(){if(!k.settings.readonly){k.onNodeChange.add(m._nodeChanged,m);k.onKeyUp.add(m._updateUndoStatus,m);k.onMouseUp.add(m._updateUndoStatus,m);k.dom.bind(k.dom.getRoot(),"dragend",function(){m._updateUndoStatus(k)})}});k.onSetProgressState.add(function(r,o,s){var t,u=r.id,q;if(o){m.progressTimer=setTimeout(function(){t=r.getContainer();t=t.insertBefore(i.create("DIV",{style:"position:relative"}),t.firstChild);q=i.get(r.id+"_tbl");i.add(t,"div",{id:u+"_blocker","class":"mceBlocker",style:{width:q.clientWidth+2,height:q.clientHeight+2}});i.add(t,"div",{id:u+"_progress","class":"mceProgress",style:{left:q.clientWidth/2,top:q.clientHeight/2}})},s||0)}else{i.remove(u+"_blocker");i.remove(u+"_progress");clearTimeout(m.progressTimer)}});i.loadCSS(n.editor_css?k.documentBaseURI.toAbsolute(n.editor_css):l+"/skins/"+k.settings.skin+"/ui.css");if(n.skin_variant){i.loadCSS(l+"/skins/"+k.settings.skin+"/ui_"+n.skin_variant+".css")}},_isHighContrast:function(){var j,k=i.add(i.getRoot(),"div",{style:"background-color: rgb(171,239,86);"});j=(i.getStyle(k,"background-color",true)+"").toLowerCase().replace(/ /g,"");i.remove(k);return j!="rgb(171,239,86)"&&j!="#abef56"},createControl:function(m,j){var k,l;if(l=j.createControl(m)){return l}switch(m){case"styleselect":return this._createStyleSelect();case"formatselect":return this._createBlockFormats();case"fontselect":return this._createFontSelect();case"fontsizeselect":return this._createFontSizeSelect();case"forecolor":return this._createForeColorMenu();case"backcolor":return this._createBackColorMenu()}if((k=this.controls[m])){return j.createButton(m,{title:"advanced."+k[0],cmd:k[1],ui:k[2],value:k[3]})}},execCommand:function(l,k,m){var j=this["_"+l];if(j){j.call(this,k,m);return true}return false},_importClasses:function(l){var j=this.editor,k=j.controlManager.get("styleselect");if(k.getLength()==0){f(j.dom.getClasses(),function(q,m){var p="style_"+m,n;n={inline:"span",attributes:{"class":q["class"]},selector:"*"};j.formatter.register(p,n);k.add(q["class"],p,{style:function(){return b(j,n)}})})}},_createStyleSelect:function(o){var l=this,j=l.editor,k=j.controlManager,m;m=k.createListBox("styleselect",{title:"advanced.style_select",onselect:function(q){var r,n=[],p;f(m.items,function(s){n.push(s.value)});j.focus();j.undoManager.add();r=j.formatter.matchAll(n);h.each(r,function(s){if(!q||s==q){if(s){j.formatter.remove(s)}p=true}});if(!p){j.formatter.apply(q)}j.undoManager.add();j.nodeChanged();return false}});j.onPreInit.add(function(){var p=0,n=j.getParam("style_formats");if(n){f(n,function(q){var r,s=0;f(q,function(){s++});if(s>1){r=q.name=q.name||"style_"+(p++);j.formatter.register(r,q);m.add(q.title,r,{style:function(){return b(j,q)}})}else{m.add(q.title)}})}else{f(j.getParam("theme_advanced_styles","","hash"),function(t,s){var r,q;if(t){r="style_"+(p++);q={inline:"span",classes:t,selector:"*"};j.formatter.register(r,q);m.add(l.editor.translate(s),r,{style:function(){return b(j,q)}})}})}});if(m.getLength()==0){m.onPostRender.add(function(p,q){if(!m.NativeListBox){g.add(q.id+"_text","focus",l._importClasses,l);g.add(q.id+"_text","mousedown",l._importClasses,l);g.add(q.id+"_open","focus",l._importClasses,l);g.add(q.id+"_open","mousedown",l._importClasses,l)}else{g.add(q.id,"focus",l._importClasses,l)}})}return m},_createFontSelect:function(){var l,k=this,j=k.editor;l=j.controlManager.createListBox("fontselect",{title:"advanced.fontdefault",onselect:function(m){var n=l.items[l.selectedIndex];if(!m&&n){j.execCommand("FontName",false,n.value);return}j.execCommand("FontName",false,m);l.select(function(o){return m==o});if(n&&n.value==m){l.select(null)}return false}});if(l){f(j.getParam("theme_advanced_fonts",k.settings.theme_advanced_fonts,"hash"),function(n,m){l.add(j.translate(m),n,{style:n.indexOf("dings")==-1?"font-family:"+n:""})})}return l},_createFontSizeSelect:function(){var m=this,k=m.editor,n,l=0,j=[];n=k.controlManager.createListBox("fontsizeselect",{title:"advanced.font_size",onselect:function(o){var p=n.items[n.selectedIndex];if(!o&&p){p=p.value;if(p["class"]){k.formatter.toggle("fontsize_class",{value:p["class"]});k.undoManager.add();k.nodeChanged()}else{k.execCommand("FontSize",false,p.fontSize)}return}if(o["class"]){k.focus();k.undoManager.add();k.formatter.toggle("fontsize_class",{value:o["class"]});k.undoManager.add();k.nodeChanged()}else{k.execCommand("FontSize",false,o.fontSize)}n.select(function(q){return o==q});if(p&&(p.value.fontSize==o.fontSize||p.value["class"]&&p.value["class"]==o["class"])){n.select(null)}return false}});if(n){f(m.settings.theme_advanced_font_sizes,function(p,o){var q=p.fontSize;if(q>=1&&q<=7){q=m.sizes[parseInt(q)-1]+"pt"}n.add(o,p,{style:"font-size:"+q,"class":"mceFontSize"+(l++)+(" "+(p["class"]||""))})})}return n},_createBlockFormats:function(){var l,j={p:"advanced.paragraph",address:"advanced.address",pre:"advanced.pre",h1:"advanced.h1",h2:"advanced.h2",h3:"advanced.h3",h4:"advanced.h4",h5:"advanced.h5",h6:"advanced.h6",div:"advanced.div",blockquote:"advanced.blockquote",code:"advanced.code",dt:"advanced.dt",dd:"advanced.dd",samp:"advanced.samp"},k=this;l=k.editor.controlManager.createListBox("formatselect",{title:"advanced.block",onselect:function(m){k.editor.execCommand("FormatBlock",false,m);return false}});if(l){f(k.editor.getParam("theme_advanced_blockformats",k.settings.theme_advanced_blockformats,"hash"),function(n,m){l.add(k.editor.translate(m!=n?m:j[n]),n,{"class":"mce_formatPreview mce_"+n,style:function(){return b(k.editor,{block:n})}})})}return l},_createForeColorMenu:function(){var n,k=this,l=k.settings,m={},j;if(l.theme_advanced_more_colors){m.more_colors_func=function(){k._mceColorPicker(0,{color:n.value,func:function(o){n.setColor(o)}})}}if(j=l.theme_advanced_text_colors){m.colors=j}if(l.theme_advanced_default_foreground_color){m.default_color=l.theme_advanced_default_foreground_color}m.title="advanced.forecolor_desc";m.cmd="ForeColor";m.scope=this;n=k.editor.controlManager.createColorSplitButton("forecolor",m);return n},_createBackColorMenu:function(){var n,k=this,l=k.settings,m={},j;if(l.theme_advanced_more_colors){m.more_colors_func=function(){k._mceColorPicker(0,{color:n.value,func:function(o){n.setColor(o)}})}}if(j=l.theme_advanced_background_colors){m.colors=j}if(l.theme_advanced_default_background_color){m.default_color=l.theme_advanced_default_background_color}m.title="advanced.backcolor_desc";m.cmd="HiliteColor";m.scope=this;n=k.editor.controlManager.createColorSplitButton("backcolor",m);return n},renderUI:function(l){var q,m,r,w=this,u=w.editor,x=w.settings,v,k,j;if(u.settings){u.settings.aria_label=x.aria_label+u.getLang("advanced.help_shortcut")}q=k=i.create("span",{role:"application","aria-labelledby":u.id+"_voice",id:u.id+"_parent","class":"mceEditor "+u.settings.skin+"Skin"+(x.skin_variant?" "+u.settings.skin+"Skin"+w._ufirst(x.skin_variant):"")+(u.settings.directionality=="rtl"?" mceRtl":"")});i.add(q,"span",{"class":"mceVoiceLabel",style:"display:none;",id:u.id+"_voice"},x.aria_label);if(!i.boxModel){q=i.add(q,"div",{"class":"mceOldBoxModel"})}q=v=i.add(q,"table",{role:"presentation",id:u.id+"_tbl","class":"mceLayout",cellSpacing:0,cellPadding:0});q=r=i.add(q,"tbody");switch((x.theme_advanced_layout_manager||"").toLowerCase()){case"rowlayout":m=w._rowLayout(x,r,l);break;case"customlayout":m=u.execCallback("theme_advanced_custom_layout",x,r,l,k);break;default:m=w._simpleLayout(x,r,l,k)}q=l.targetNode;j=v.rows;i.addClass(j[0],"mceFirst");i.addClass(j[j.length-1],"mceLast");f(i.select("tr",r),function(o){i.addClass(o.firstChild,"mceFirst");i.addClass(o.childNodes[o.childNodes.length-1],"mceLast")});if(i.get(x.theme_advanced_toolbar_container)){i.get(x.theme_advanced_toolbar_container).appendChild(k)}else{i.insertAfter(k,q)}g.add(u.id+"_path_row","click",function(n){n=n.target;if(n.nodeName=="A"){w._sel(n.className.replace(/^.*mcePath_([0-9]+).*$/,"$1"));return false}});if(!u.getParam("accessibility_focus")){g.add(i.add(k,"a",{href:"#"},""),"focus",function(){tinyMCE.get(u.id).focus()})}if(x.theme_advanced_toolbar_location=="external"){l.deltaHeight=0}w.deltaHeight=l.deltaHeight;l.targetNode=null;u.onKeyDown.add(function(p,n){var s=121,o=122;if(n.altKey){if(n.keyCode===s){if(h.isWebKit){window.focus()}w.toolbarGroup.focus();return g.cancel(n)}else{if(n.keyCode===o){i.get(p.id+"_path_row").focus();return g.cancel(n)}}}});u.addShortcut("alt+0","","mceShortcuts",w);return{iframeContainer:m,editorContainer:u.id+"_parent",sizeContainer:v,deltaHeight:l.deltaHeight}},getInfo:function(){return{longname:"Advanced theme",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",version:h.majorVersion+"."+h.minorVersion}},resizeBy:function(j,k){var l=i.get(this.editor.id+"_ifr");this.resizeTo(l.clientWidth+j,l.clientHeight+k)},resizeTo:function(j,n,l){var k=this.editor,m=this.settings,o=i.get(k.id+"_tbl"),p=i.get(k.id+"_ifr");j=Math.max(m.theme_advanced_resizing_min_width||100,j);n=Math.max(m.theme_advanced_resizing_min_height||100,n);j=Math.min(m.theme_advanced_resizing_max_width||65535,j);n=Math.min(m.theme_advanced_resizing_max_height||65535,n);i.setStyle(o,"height","");i.setStyle(p,"height",n);if(m.theme_advanced_resize_horizontal){i.setStyle(o,"width","");i.setStyle(p,"width",j);if(j"));i.setHTML(l,r.join(""))},_addStatusBar:function(p,k){var l,w=this,q=w.editor,x=w.settings,j,u,v,m;l=i.add(p,"tr");l=m=i.add(l,"td",{"class":"mceStatusbar"});l=i.add(l,"div",{id:q.id+"_path_row",role:"group","aria-labelledby":q.id+"_path_voice"});if(x.theme_advanced_path){i.add(l,"span",{id:q.id+"_path_voice"},q.translate("advanced.path"));i.add(l,"span",{},": ")}else{i.add(l,"span",{}," ")}if(x.theme_advanced_resizing){i.add(m,"a",{id:q.id+"_resize",href:"javascript:;",onclick:"return false;","class":"mceResize",tabIndex:"-1"});if(x.theme_advanced_resizing_use_cookie){q.onPostRender.add(function(){var n=a.getHash("TinyMCE_"+q.id+"_size"),r=i.get(q.id+"_tbl");if(!n){return}w.resizeTo(n.cw,n.ch)})}q.onPostRender.add(function(){g.add(q.id+"_resize","click",function(n){n.preventDefault()});g.add(q.id+"_resize","mousedown",function(E){var t,r,s,o,D,A,B,G,n,F,y;function z(H){H.preventDefault();n=B+(H.screenX-D);F=G+(H.screenY-A);w.resizeTo(n,F)}function C(H){g.remove(i.doc,"mousemove",t);g.remove(q.getDoc(),"mousemove",r);g.remove(i.doc,"mouseup",s);g.remove(q.getDoc(),"mouseup",o);n=B+(H.screenX-D);F=G+(H.screenY-A);w.resizeTo(n,F,true);q.nodeChanged()}E.preventDefault();D=E.screenX;A=E.screenY;y=i.get(w.editor.id+"_ifr");B=n=y.clientWidth;G=F=y.clientHeight;t=g.add(i.doc,"mousemove",z);r=g.add(q.getDoc(),"mousemove",z);s=g.add(i.doc,"mouseup",C);o=g.add(q.getDoc(),"mouseup",C)})})}k.deltaHeight-=21;l=p=null},_updateUndoStatus:function(k){var j=k.controlManager,l=k.undoManager;j.setDisabled("undo",!l.hasUndo()&&!l.typing);j.setDisabled("redo",!l.hasRedo())},_nodeChanged:function(o,u,E,r,F){var z=this,D,G=0,y,H,A=z.settings,x,l,w,C,m,k,j;h.each(z.stateControls,function(n){u.setActive(n,o.queryCommandState(z.controls[n][1]))});function q(p){var s,n=F.parents,t=p;if(typeof(p)=="string"){t=function(v){return v.nodeName==p}}for(s=0;s0){H.mark(p)}})}if(H=u.get("formatselect")){D=q(o.dom.isBlock);if(D){H.select(D.nodeName.toLowerCase())}}q(function(p){if(p.nodeName==="SPAN"){if(!x&&p.className){x=p.className}}if(o.dom.is(p,A.theme_advanced_font_selector)){if(!l&&p.style.fontSize){l=p.style.fontSize}if(!w&&p.style.fontFamily){w=p.style.fontFamily.replace(/[\"\']+/g,"").replace(/^([^,]+).*/,"$1").toLowerCase()}if(!C&&p.style.color){C=p.style.color}if(!m&&p.style.backgroundColor){m=p.style.backgroundColor}}return false});if(H=u.get("fontselect")){H.select(function(n){return n.replace(/^([^,]+).*/,"$1").toLowerCase()==w})}if(H=u.get("fontsizeselect")){if(A.theme_advanced_runtime_fontsize&&!l&&!x){l=o.dom.getStyle(E,"fontSize",true)}H.select(function(n){if(n.fontSize&&n.fontSize===l){return true}if(n["class"]&&n["class"]===x){return true}})}if(A.theme_advanced_show_current_color){function B(p,n){if(H=u.get(p)){if(!n){n=H.settings.default_color}if(n!==H.value){H.displayColor(n)}}}B("forecolor",C);B("backcolor",m)}if(A.theme_advanced_show_current_color){function B(p,n){if(H=u.get(p)){if(!n){n=H.settings.default_color}if(n!==H.value){H.displayColor(n)}}}B("forecolor",C);B("backcolor",m)}if(A.theme_advanced_path&&A.theme_advanced_statusbar_location){D=i.get(o.id+"_path")||i.add(o.id+"_path_row","span",{id:o.id+"_path"});if(z.statusKeyboardNavigation){z.statusKeyboardNavigation.destroy();z.statusKeyboardNavigation=null}i.setHTML(D,"");q(function(I){var p=I.nodeName.toLowerCase(),s,v,t="";if(I.nodeType!=1||p==="br"||I.getAttribute("data-mce-bogus")||i.hasClass(I,"mceItemHidden")||i.hasClass(I,"mceItemRemoved")){return}if(h.isIE&&I.scopeName!=="HTML"&&I.scopeName){p=I.scopeName+":"+p}p=p.replace(/mce\:/g,"");switch(p){case"b":p="strong";break;case"i":p="em";break;case"img":if(y=i.getAttrib(I,"src")){t+="src: "+y+" "}break;case"a":if(y=i.getAttrib(I,"name")){t+="name: "+y+" ";p+="#"+y}if(y=i.getAttrib(I,"href")){t+="href: "+y+" "}break;case"font":if(y=i.getAttrib(I,"face")){t+="font: "+y+" "}if(y=i.getAttrib(I,"size")){t+="size: "+y+" "}if(y=i.getAttrib(I,"color")){t+="color: "+y+" "}break;case"span":if(y=i.getAttrib(I,"style")){t+="style: "+y+" "}break}if(y=i.getAttrib(I,"id")){t+="id: "+y+" "}if(y=I.className){y=y.replace(/\b\s*(webkit|mce|Apple-)\w+\s*\b/g,"");if(y){t+="class: "+y+" ";if(o.dom.isBlock(I)||p=="img"||p=="span"){p+="."+y}}}p=p.replace(/(html:)/g,"");p={name:p,node:I,title:t};z.onResolveName.dispatch(z,p);t=p.title;p=p.name;v=i.create("a",{href:"javascript:;",role:"button",onmousedown:"return false;",title:t,"class":"mcePath_"+(G++)},p);if(D.hasChildNodes()){D.insertBefore(i.create("span",{"aria-hidden":"true"},"\u00a0\u00bb "),D.firstChild);D.insertBefore(v,D.firstChild)}else{D.appendChild(v)}},o.getBody());if(i.select("a",D).length>0){z.statusKeyboardNavigation=new h.ui.KeyboardNavigation({root:o.id+"_path_row",items:i.select("a",D),excludeFromTabOrder:true,onCancel:function(){o.focus()}},i)}}},_sel:function(j){this.editor.execCommand("mceSelectNodeDepth",false,j)},_mceInsertAnchor:function(l,k){var j=this.editor;j.windowManager.open({url:this.url+"/anchor.htm",width:320+parseInt(j.getLang("advanced.anchor_delta_width",0)),height:90+parseInt(j.getLang("advanced.anchor_delta_height",0)),inline:true},{theme_url:this.url})},_mceCharMap:function(){var j=this.editor;j.windowManager.open({url:this.url+"/charmap.htm",width:550+parseInt(j.getLang("advanced.charmap_delta_width",0)),height:265+parseInt(j.getLang("advanced.charmap_delta_height",0)),inline:true},{theme_url:this.url})},_mceHelp:function(){var j=this.editor;j.windowManager.open({url:this.url+"/about.htm",width:480,height:380,inline:true},{theme_url:this.url})},_mceShortcuts:function(){var j=this.editor;j.windowManager.open({url:this.url+"/shortcuts.htm",width:480,height:380,inline:true},{theme_url:this.url})},_mceColorPicker:function(l,k){var j=this.editor;k=k||{};j.windowManager.open({url:this.url+"/color_picker.htm",width:375+parseInt(j.getLang("advanced.colorpicker_delta_width",0)),height:250+parseInt(j.getLang("advanced.colorpicker_delta_height",0)),close_previous:false,inline:true},{input_color:k.color,func:k.func,theme_url:this.url})},_mceCodeEditor:function(k,l){var j=this.editor;j.windowManager.open({url:this.url+"/source_editor.htm",width:parseInt(j.getParam("theme_advanced_source_editor_width",720)),height:parseInt(j.getParam("theme_advanced_source_editor_height",580)),inline:true,resizable:true,maximizable:true},{theme_url:this.url})},_mceImage:function(k,l){var j=this.editor;if(j.dom.getAttrib(j.selection.getNode(),"class","").indexOf("mceItem")!=-1){return}j.windowManager.open({url:this.url+"/image.htm",width:355+parseInt(j.getLang("advanced.image_delta_width",0)),height:275+parseInt(j.getLang("advanced.image_delta_height",0)),inline:true},{theme_url:this.url})},_mceLink:function(k,l){var j=this.editor;j.windowManager.open({url:this.url+"/link.htm",width:310+parseInt(j.getLang("advanced.link_delta_width",0)),height:200+parseInt(j.getLang("advanced.link_delta_height",0)),inline:true},{theme_url:this.url})},_mceNewDocument:function(){var j=this.editor;j.windowManager.confirm("advanced.newdocument",function(k){if(k){j.execCommand("mceSetContent",false,"")}})},_mceForeColor:function(){var j=this;this._mceColorPicker(0,{color:j.fgColor,func:function(k){j.fgColor=k;j.editor.execCommand("ForeColor",false,k)}})},_mceBackColor:function(){var j=this;this._mceColorPicker(0,{color:j.bgColor,func:function(k){j.bgColor=k;j.editor.execCommand("HiliteColor",false,k)}})},_ufirst:function(j){return j.substring(0,1).toUpperCase()+j.substring(1)}});h.ThemeManager.add("advanced",h.themes.AdvancedTheme)}(tinymce)); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/editor_template_src.js b/common/static/js/vendor/tiny_mce/themes/advanced/editor_template_src.js deleted file mode 100644 index 84039ce2ac..0000000000 --- a/common/static/js/vendor/tiny_mce/themes/advanced/editor_template_src.js +++ /dev/null @@ -1,1490 +0,0 @@ -/** - * editor_template_src.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -(function(tinymce) { - var DOM = tinymce.DOM, Event = tinymce.dom.Event, extend = tinymce.extend, each = tinymce.each, Cookie = tinymce.util.Cookie, lastExtID, explode = tinymce.explode; - - // Generates a preview for a format - function getPreviewCss(ed, fmt) { - var name, previewElm, dom = ed.dom, previewCss = '', parentFontSize, previewStylesName; - - previewStyles = ed.settings.preview_styles; - - // No preview forced - if (previewStyles === false) - return ''; - - // Default preview - if (!previewStyles) - previewStyles = 'font-family font-size font-weight text-decoration text-transform color background-color'; - - // Removes any variables since these can't be previewed - function removeVars(val) { - return val.replace(/%(\w+)/g, ''); - }; - - // Create block/inline element to use for preview - name = fmt.block || fmt.inline || 'span'; - previewElm = dom.create(name); - - // Add format styles to preview element - each(fmt.styles, function(value, name) { - value = removeVars(value); - - if (value) - dom.setStyle(previewElm, name, value); - }); - - // Add attributes to preview element - each(fmt.attributes, function(value, name) { - value = removeVars(value); - - if (value) - dom.setAttrib(previewElm, name, value); - }); - - // Add classes to preview element - each(fmt.classes, function(value) { - value = removeVars(value); - - if (!dom.hasClass(previewElm, value)) - dom.addClass(previewElm, value); - }); - - // Add the previewElm outside the visual area - dom.setStyles(previewElm, {position: 'absolute', left: -0xFFFF}); - ed.getBody().appendChild(previewElm); - - // Get parent container font size so we can compute px values out of em/% for older IE:s - parentFontSize = dom.getStyle(ed.getBody(), 'fontSize', true); - parentFontSize = /px$/.test(parentFontSize) ? parseInt(parentFontSize, 10) : 0; - - each(previewStyles.split(' '), function(name) { - var value = dom.getStyle(previewElm, name, true); - - // If background is transparent then check if the body has a background color we can use - if (name == 'background-color' && /transparent|rgba\s*\([^)]+,\s*0\)/.test(value)) { - value = dom.getStyle(ed.getBody(), name, true); - - // Ignore white since it's the default color, not the nicest fix - if (dom.toHex(value).toLowerCase() == '#ffffff') { - return; - } - } - - // Old IE won't calculate the font size so we need to do that manually - if (name == 'font-size') { - if (/em|%$/.test(value)) { - if (parentFontSize === 0) { - return; - } - - // Convert font size from em/% to px - value = parseFloat(value, 10) / (/%$/.test(value) ? 100 : 1); - value = (value * parentFontSize) + 'px'; - } - } - - previewCss += name + ':' + value + ';'; - }); - - dom.remove(previewElm); - - return previewCss; - }; - - // Tell it to load theme specific language pack(s) - tinymce.ThemeManager.requireLangPack('advanced'); - - tinymce.create('tinymce.themes.AdvancedTheme', { - sizes : [8, 10, 12, 14, 18, 24, 36], - - // Control name lookup, format: title, command - controls : { - bold : ['bold_desc', 'Bold'], - italic : ['italic_desc', 'Italic'], - underline : ['underline_desc', 'Underline'], - strikethrough : ['striketrough_desc', 'Strikethrough'], - justifyleft : ['justifyleft_desc', 'JustifyLeft'], - justifycenter : ['justifycenter_desc', 'JustifyCenter'], - justifyright : ['justifyright_desc', 'JustifyRight'], - justifyfull : ['justifyfull_desc', 'JustifyFull'], - bullist : ['bullist_desc', 'InsertUnorderedList'], - numlist : ['numlist_desc', 'InsertOrderedList'], - outdent : ['outdent_desc', 'Outdent'], - indent : ['indent_desc', 'Indent'], - cut : ['cut_desc', 'Cut'], - copy : ['copy_desc', 'Copy'], - paste : ['paste_desc', 'Paste'], - undo : ['undo_desc', 'Undo'], - redo : ['redo_desc', 'Redo'], - link : ['link_desc', 'mceLink'], - unlink : ['unlink_desc', 'unlink'], - image : ['image_desc', 'mceImage'], - cleanup : ['cleanup_desc', 'mceCleanup'], - help : ['help_desc', 'mceHelp'], - code : ['code_desc', 'mceCodeEditor'], - hr : ['hr_desc', 'InsertHorizontalRule'], - removeformat : ['removeformat_desc', 'RemoveFormat'], - sub : ['sub_desc', 'subscript'], - sup : ['sup_desc', 'superscript'], - forecolor : ['forecolor_desc', 'ForeColor'], - forecolorpicker : ['forecolor_desc', 'mceForeColor'], - backcolor : ['backcolor_desc', 'HiliteColor'], - backcolorpicker : ['backcolor_desc', 'mceBackColor'], - charmap : ['charmap_desc', 'mceCharMap'], - visualaid : ['visualaid_desc', 'mceToggleVisualAid'], - anchor : ['anchor_desc', 'mceInsertAnchor'], - newdocument : ['newdocument_desc', 'mceNewDocument'], - blockquote : ['blockquote_desc', 'mceBlockQuote'] - }, - - stateControls : ['bold', 'italic', 'underline', 'strikethrough', 'bullist', 'numlist', 'justifyleft', 'justifycenter', 'justifyright', 'justifyfull', 'sub', 'sup', 'blockquote'], - - init : function(ed, url) { - var t = this, s, v, o; - - t.editor = ed; - t.url = url; - t.onResolveName = new tinymce.util.Dispatcher(this); - s = ed.settings; - - ed.forcedHighContrastMode = ed.settings.detect_highcontrast && t._isHighContrast(); - ed.settings.skin = ed.forcedHighContrastMode ? 'highcontrast' : ed.settings.skin; - - // Setup default buttons - if (!s.theme_advanced_buttons1) { - s = extend({ - theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect", - theme_advanced_buttons2 : "bullist,numlist,|,outdent,indent,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code", - theme_advanced_buttons3 : "hr,removeformat,visualaid,|,sub,sup,|,charmap" - }, s); - } - - // Default settings - t.settings = s = extend({ - theme_advanced_path : true, - theme_advanced_toolbar_location : 'top', - theme_advanced_blockformats : "p,address,pre,h1,h2,h3,h4,h5,h6", - theme_advanced_toolbar_align : "left", - theme_advanced_statusbar_location : "bottom", - theme_advanced_fonts : "Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats", - theme_advanced_more_colors : 1, - theme_advanced_row_height : 23, - theme_advanced_resize_horizontal : 1, - theme_advanced_resizing_use_cookie : 1, - theme_advanced_font_sizes : "1,2,3,4,5,6,7", - theme_advanced_font_selector : "span", - theme_advanced_show_current_color: 0, - readonly : ed.settings.readonly - }, s); - - // Setup default font_size_style_values - if (!s.font_size_style_values) - s.font_size_style_values = "8pt,10pt,12pt,14pt,18pt,24pt,36pt"; - - if (tinymce.is(s.theme_advanced_font_sizes, 'string')) { - s.font_size_style_values = tinymce.explode(s.font_size_style_values); - s.font_size_classes = tinymce.explode(s.font_size_classes || ''); - - // Parse string value - o = {}; - ed.settings.theme_advanced_font_sizes = s.theme_advanced_font_sizes; - each(ed.getParam('theme_advanced_font_sizes', '', 'hash'), function(v, k) { - var cl; - - if (k == v && v >= 1 && v <= 7) { - k = v + ' (' + t.sizes[v - 1] + 'pt)'; - cl = s.font_size_classes[v - 1]; - v = s.font_size_style_values[v - 1] || (t.sizes[v - 1] + 'pt'); - } - - if (/^\s*\./.test(v)) - cl = v.replace(/\./g, ''); - - o[k] = cl ? {'class' : cl} : {fontSize : v}; - }); - - s.theme_advanced_font_sizes = o; - } - - if ((v = s.theme_advanced_path_location) && v != 'none') - s.theme_advanced_statusbar_location = s.theme_advanced_path_location; - - if (s.theme_advanced_statusbar_location == 'none') - s.theme_advanced_statusbar_location = 0; - - if (ed.settings.content_css !== false) - ed.contentCSS.push(ed.baseURI.toAbsolute(url + "/skins/" + ed.settings.skin + "/content.css")); - - // Init editor - ed.onInit.add(function() { - if (!ed.settings.readonly) { - ed.onNodeChange.add(t._nodeChanged, t); - ed.onKeyUp.add(t._updateUndoStatus, t); - ed.onMouseUp.add(t._updateUndoStatus, t); - ed.dom.bind(ed.dom.getRoot(), 'dragend', function() { - t._updateUndoStatus(ed); - }); - } - }); - - ed.onSetProgressState.add(function(ed, b, ti) { - var co, id = ed.id, tb; - - if (b) { - t.progressTimer = setTimeout(function() { - co = ed.getContainer(); - co = co.insertBefore(DOM.create('DIV', {style : 'position:relative'}), co.firstChild); - tb = DOM.get(ed.id + '_tbl'); - - DOM.add(co, 'div', {id : id + '_blocker', 'class' : 'mceBlocker', style : {width : tb.clientWidth + 2, height : tb.clientHeight + 2}}); - DOM.add(co, 'div', {id : id + '_progress', 'class' : 'mceProgress', style : {left : tb.clientWidth / 2, top : tb.clientHeight / 2}}); - }, ti || 0); - } else { - DOM.remove(id + '_blocker'); - DOM.remove(id + '_progress'); - clearTimeout(t.progressTimer); - } - }); - - DOM.loadCSS(s.editor_css ? ed.documentBaseURI.toAbsolute(s.editor_css) : url + "/skins/" + ed.settings.skin + "/ui.css"); - - if (s.skin_variant) - DOM.loadCSS(url + "/skins/" + ed.settings.skin + "/ui_" + s.skin_variant + ".css"); - }, - - _isHighContrast : function() { - var actualColor, div = DOM.add(DOM.getRoot(), 'div', {'style': 'background-color: rgb(171,239,86);'}); - - actualColor = (DOM.getStyle(div, 'background-color', true) + '').toLowerCase().replace(/ /g, ''); - DOM.remove(div); - - return actualColor != 'rgb(171,239,86)' && actualColor != '#abef56'; - }, - - createControl : function(n, cf) { - var cd, c; - - if (c = cf.createControl(n)) - return c; - - switch (n) { - case "styleselect": - return this._createStyleSelect(); - - case "formatselect": - return this._createBlockFormats(); - - case "fontselect": - return this._createFontSelect(); - - case "fontsizeselect": - return this._createFontSizeSelect(); - - case "forecolor": - return this._createForeColorMenu(); - - case "backcolor": - return this._createBackColorMenu(); - } - - if ((cd = this.controls[n])) - return cf.createButton(n, {title : "advanced." + cd[0], cmd : cd[1], ui : cd[2], value : cd[3]}); - }, - - execCommand : function(cmd, ui, val) { - var f = this['_' + cmd]; - - if (f) { - f.call(this, ui, val); - return true; - } - - return false; - }, - - _importClasses : function(e) { - var ed = this.editor, ctrl = ed.controlManager.get('styleselect'); - - if (ctrl.getLength() == 0) { - each(ed.dom.getClasses(), function(o, idx) { - var name = 'style_' + idx, fmt; - - fmt = { - inline : 'span', - attributes : {'class' : o['class']}, - selector : '*' - }; - - ed.formatter.register(name, fmt); - - ctrl.add(o['class'], name, { - style: function() { - return getPreviewCss(ed, fmt); - } - }); - }); - } - }, - - _createStyleSelect : function(n) { - var t = this, ed = t.editor, ctrlMan = ed.controlManager, ctrl; - - // Setup style select box - ctrl = ctrlMan.createListBox('styleselect', { - title : 'advanced.style_select', - onselect : function(name) { - var matches, formatNames = [], removedFormat; - - each(ctrl.items, function(item) { - formatNames.push(item.value); - }); - - ed.focus(); - ed.undoManager.add(); - - // Toggle off the current format(s) - matches = ed.formatter.matchAll(formatNames); - tinymce.each(matches, function(match) { - if (!name || match == name) { - if (match) - ed.formatter.remove(match); - - removedFormat = true; - } - }); - - if (!removedFormat) - ed.formatter.apply(name); - - ed.undoManager.add(); - ed.nodeChanged(); - - return false; // No auto select - } - }); - - // Handle specified format - ed.onPreInit.add(function() { - var counter = 0, formats = ed.getParam('style_formats'); - - if (formats) { - each(formats, function(fmt) { - var name, keys = 0; - - each(fmt, function() {keys++;}); - - if (keys > 1) { - name = fmt.name = fmt.name || 'style_' + (counter++); - ed.formatter.register(name, fmt); - ctrl.add(fmt.title, name, { - style: function() { - return getPreviewCss(ed, fmt); - } - }); - } else - ctrl.add(fmt.title); - }); - } else { - each(ed.getParam('theme_advanced_styles', '', 'hash'), function(val, key) { - var name, fmt; - - if (val) { - name = 'style_' + (counter++); - fmt = { - inline : 'span', - classes : val, - selector : '*' - }; - - ed.formatter.register(name, fmt); - ctrl.add(t.editor.translate(key), name, { - style: function() { - return getPreviewCss(ed, fmt); - } - }); - } - }); - } - }); - - // Auto import classes if the ctrl box is empty - if (ctrl.getLength() == 0) { - ctrl.onPostRender.add(function(ed, n) { - if (!ctrl.NativeListBox) { - Event.add(n.id + '_text', 'focus', t._importClasses, t); - Event.add(n.id + '_text', 'mousedown', t._importClasses, t); - Event.add(n.id + '_open', 'focus', t._importClasses, t); - Event.add(n.id + '_open', 'mousedown', t._importClasses, t); - } else - Event.add(n.id, 'focus', t._importClasses, t); - }); - } - - return ctrl; - }, - - _createFontSelect : function() { - var c, t = this, ed = t.editor; - - c = ed.controlManager.createListBox('fontselect', { - title : 'advanced.fontdefault', - onselect : function(v) { - var cur = c.items[c.selectedIndex]; - - if (!v && cur) { - ed.execCommand('FontName', false, cur.value); - return; - } - - ed.execCommand('FontName', false, v); - - // Fake selection, execCommand will fire a nodeChange and update the selection - c.select(function(sv) { - return v == sv; - }); - - if (cur && cur.value == v) { - c.select(null); - } - - return false; // No auto select - } - }); - - if (c) { - each(ed.getParam('theme_advanced_fonts', t.settings.theme_advanced_fonts, 'hash'), function(v, k) { - c.add(ed.translate(k), v, {style : v.indexOf('dings') == -1 ? 'font-family:' + v : ''}); - }); - } - - return c; - }, - - _createFontSizeSelect : function() { - var t = this, ed = t.editor, c, i = 0, cl = []; - - c = ed.controlManager.createListBox('fontsizeselect', {title : 'advanced.font_size', onselect : function(v) { - var cur = c.items[c.selectedIndex]; - - if (!v && cur) { - cur = cur.value; - - if (cur['class']) { - ed.formatter.toggle('fontsize_class', {value : cur['class']}); - ed.undoManager.add(); - ed.nodeChanged(); - } else { - ed.execCommand('FontSize', false, cur.fontSize); - } - - return; - } - - if (v['class']) { - ed.focus(); - ed.undoManager.add(); - ed.formatter.toggle('fontsize_class', {value : v['class']}); - ed.undoManager.add(); - ed.nodeChanged(); - } else - ed.execCommand('FontSize', false, v.fontSize); - - // Fake selection, execCommand will fire a nodeChange and update the selection - c.select(function(sv) { - return v == sv; - }); - - if (cur && (cur.value.fontSize == v.fontSize || cur.value['class'] && cur.value['class'] == v['class'])) { - c.select(null); - } - - return false; // No auto select - }}); - - if (c) { - each(t.settings.theme_advanced_font_sizes, function(v, k) { - var fz = v.fontSize; - - if (fz >= 1 && fz <= 7) - fz = t.sizes[parseInt(fz) - 1] + 'pt'; - - c.add(k, v, {'style' : 'font-size:' + fz, 'class' : 'mceFontSize' + (i++) + (' ' + (v['class'] || ''))}); - }); - } - - return c; - }, - - _createBlockFormats : function() { - var c, fmts = { - p : 'advanced.paragraph', - address : 'advanced.address', - pre : 'advanced.pre', - h1 : 'advanced.h1', - h2 : 'advanced.h2', - h3 : 'advanced.h3', - h4 : 'advanced.h4', - h5 : 'advanced.h5', - h6 : 'advanced.h6', - div : 'advanced.div', - blockquote : 'advanced.blockquote', - code : 'advanced.code', - dt : 'advanced.dt', - dd : 'advanced.dd', - samp : 'advanced.samp' - }, t = this; - - c = t.editor.controlManager.createListBox('formatselect', {title : 'advanced.block', onselect : function(v) { - t.editor.execCommand('FormatBlock', false, v); - return false; - }}); - - if (c) { - each(t.editor.getParam('theme_advanced_blockformats', t.settings.theme_advanced_blockformats, 'hash'), function(v, k) { - c.add(t.editor.translate(k != v ? k : fmts[v]), v, {'class' : 'mce_formatPreview mce_' + v, style: function() { - return getPreviewCss(t.editor, {block: v}); - }}); - }); - } - - return c; - }, - - _createForeColorMenu : function() { - var c, t = this, s = t.settings, o = {}, v; - - if (s.theme_advanced_more_colors) { - o.more_colors_func = function() { - t._mceColorPicker(0, { - color : c.value, - func : function(co) { - c.setColor(co); - } - }); - }; - } - - if (v = s.theme_advanced_text_colors) - o.colors = v; - - if (s.theme_advanced_default_foreground_color) - o.default_color = s.theme_advanced_default_foreground_color; - - o.title = 'advanced.forecolor_desc'; - o.cmd = 'ForeColor'; - o.scope = this; - - c = t.editor.controlManager.createColorSplitButton('forecolor', o); - - return c; - }, - - _createBackColorMenu : function() { - var c, t = this, s = t.settings, o = {}, v; - - if (s.theme_advanced_more_colors) { - o.more_colors_func = function() { - t._mceColorPicker(0, { - color : c.value, - func : function(co) { - c.setColor(co); - } - }); - }; - } - - if (v = s.theme_advanced_background_colors) - o.colors = v; - - if (s.theme_advanced_default_background_color) - o.default_color = s.theme_advanced_default_background_color; - - o.title = 'advanced.backcolor_desc'; - o.cmd = 'HiliteColor'; - o.scope = this; - - c = t.editor.controlManager.createColorSplitButton('backcolor', o); - - return c; - }, - - renderUI : function(o) { - var n, ic, tb, t = this, ed = t.editor, s = t.settings, sc, p, nl; - - if (ed.settings) { - ed.settings.aria_label = s.aria_label + ed.getLang('advanced.help_shortcut'); - } - - // TODO: ACC Should have an aria-describedby attribute which is user-configurable to describe what this field is actually for. - // Maybe actually inherit it from the original textara? - n = p = DOM.create('span', {role : 'application', 'aria-labelledby' : ed.id + '_voice', id : ed.id + '_parent', 'class' : 'mceEditor ' + ed.settings.skin + 'Skin' + (s.skin_variant ? ' ' + ed.settings.skin + 'Skin' + t._ufirst(s.skin_variant) : '') + (ed.settings.directionality == "rtl" ? ' mceRtl' : '')}); - DOM.add(n, 'span', {'class': 'mceVoiceLabel', 'style': 'display:none;', id: ed.id + '_voice'}, s.aria_label); - - if (!DOM.boxModel) - n = DOM.add(n, 'div', {'class' : 'mceOldBoxModel'}); - - n = sc = DOM.add(n, 'table', {role : "presentation", id : ed.id + '_tbl', 'class' : 'mceLayout', cellSpacing : 0, cellPadding : 0}); - n = tb = DOM.add(n, 'tbody'); - - switch ((s.theme_advanced_layout_manager || '').toLowerCase()) { - case "rowlayout": - ic = t._rowLayout(s, tb, o); - break; - - case "customlayout": - ic = ed.execCallback("theme_advanced_custom_layout", s, tb, o, p); - break; - - default: - ic = t._simpleLayout(s, tb, o, p); - } - - n = o.targetNode; - - // Add classes to first and last TRs - nl = sc.rows; - DOM.addClass(nl[0], 'mceFirst'); - DOM.addClass(nl[nl.length - 1], 'mceLast'); - - // Add classes to first and last TDs - each(DOM.select('tr', tb), function(n) { - DOM.addClass(n.firstChild, 'mceFirst'); - DOM.addClass(n.childNodes[n.childNodes.length - 1], 'mceLast'); - }); - - if (DOM.get(s.theme_advanced_toolbar_container)) - DOM.get(s.theme_advanced_toolbar_container).appendChild(p); - else - DOM.insertAfter(p, n); - - Event.add(ed.id + '_path_row', 'click', function(e) { - e = e.target; - - if (e.nodeName == 'A') { - t._sel(e.className.replace(/^.*mcePath_([0-9]+).*$/, '$1')); - return false; - } - }); -/* - if (DOM.get(ed.id + '_path_row')) { - Event.add(ed.id + '_tbl', 'mouseover', function(e) { - var re; - - e = e.target; - - if (e.nodeName == 'SPAN' && DOM.hasClass(e.parentNode, 'mceButton')) { - re = DOM.get(ed.id + '_path_row'); - t.lastPath = re.innerHTML; - DOM.setHTML(re, e.parentNode.title); - } - }); - - Event.add(ed.id + '_tbl', 'mouseout', function(e) { - if (t.lastPath) { - DOM.setHTML(ed.id + '_path_row', t.lastPath); - t.lastPath = 0; - } - }); - } -*/ - - if (!ed.getParam('accessibility_focus')) - Event.add(DOM.add(p, 'a', {href : '#'}, ''), 'focus', function() {tinyMCE.get(ed.id).focus();}); - - if (s.theme_advanced_toolbar_location == 'external') - o.deltaHeight = 0; - - t.deltaHeight = o.deltaHeight; - o.targetNode = null; - - ed.onKeyDown.add(function(ed, evt) { - var DOM_VK_F10 = 121, DOM_VK_F11 = 122; - - if (evt.altKey) { - if (evt.keyCode === DOM_VK_F10) { - // Make sure focus is given to toolbar in Safari. - // We can't do this in IE as it prevents giving focus to toolbar when editor is in a frame - if (tinymce.isWebKit) { - window.focus(); - } - t.toolbarGroup.focus(); - return Event.cancel(evt); - } else if (evt.keyCode === DOM_VK_F11) { - DOM.get(ed.id + '_path_row').focus(); - return Event.cancel(evt); - } - } - }); - - // alt+0 is the UK recommended shortcut for accessing the list of access controls. - ed.addShortcut('alt+0', '', 'mceShortcuts', t); - - return { - iframeContainer : ic, - editorContainer : ed.id + '_parent', - sizeContainer : sc, - deltaHeight : o.deltaHeight - }; - }, - - getInfo : function() { - return { - longname : 'Advanced theme', - author : 'Moxiecode Systems AB', - authorurl : 'http://tinymce.moxiecode.com', - version : tinymce.majorVersion + "." + tinymce.minorVersion - } - }, - - resizeBy : function(dw, dh) { - var e = DOM.get(this.editor.id + '_ifr'); - - this.resizeTo(e.clientWidth + dw, e.clientHeight + dh); - }, - - resizeTo : function(w, h, store) { - var ed = this.editor, s = this.settings, e = DOM.get(ed.id + '_tbl'), ifr = DOM.get(ed.id + '_ifr'); - - // Boundery fix box - w = Math.max(s.theme_advanced_resizing_min_width || 100, w); - h = Math.max(s.theme_advanced_resizing_min_height || 100, h); - w = Math.min(s.theme_advanced_resizing_max_width || 0xFFFF, w); - h = Math.min(s.theme_advanced_resizing_max_height || 0xFFFF, h); - - // Resize iframe and container - DOM.setStyle(e, 'height', ''); - DOM.setStyle(ifr, 'height', h); - - if (s.theme_advanced_resize_horizontal) { - DOM.setStyle(e, 'width', ''); - DOM.setStyle(ifr, 'width', w); - - // Make sure that the size is never smaller than the over all ui - if (w < e.clientWidth) { - w = e.clientWidth; - DOM.setStyle(ifr, 'width', e.clientWidth); - } - } - - // Store away the size - if (store && s.theme_advanced_resizing_use_cookie) { - Cookie.setHash("TinyMCE_" + ed.id + "_size", { - cw : w, - ch : h - }); - } - }, - - destroy : function() { - var id = this.editor.id; - - Event.clear(id + '_resize'); - Event.clear(id + '_path_row'); - Event.clear(id + '_external_close'); - }, - - // Internal functions - - _simpleLayout : function(s, tb, o, p) { - var t = this, ed = t.editor, lo = s.theme_advanced_toolbar_location, sl = s.theme_advanced_statusbar_location, n, ic, etb, c; - - if (s.readonly) { - n = DOM.add(tb, 'tr'); - n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'}); - return ic; - } - - // Create toolbar container at top - if (lo == 'top') - t._addToolbars(tb, o); - - // Create external toolbar - if (lo == 'external') { - n = c = DOM.create('div', {style : 'position:relative'}); - n = DOM.add(n, 'div', {id : ed.id + '_external', 'class' : 'mceExternalToolbar'}); - DOM.add(n, 'a', {id : ed.id + '_external_close', href : 'javascript:;', 'class' : 'mceExternalClose'}); - n = DOM.add(n, 'table', {id : ed.id + '_tblext', cellSpacing : 0, cellPadding : 0}); - etb = DOM.add(n, 'tbody'); - - if (p.firstChild.className == 'mceOldBoxModel') - p.firstChild.appendChild(c); - else - p.insertBefore(c, p.firstChild); - - t._addToolbars(etb, o); - - ed.onMouseUp.add(function() { - var e = DOM.get(ed.id + '_external'); - DOM.show(e); - - DOM.hide(lastExtID); - - var f = Event.add(ed.id + '_external_close', 'click', function() { - DOM.hide(ed.id + '_external'); - Event.remove(ed.id + '_external_close', 'click', f); - return false; - }); - - DOM.show(e); - DOM.setStyle(e, 'top', 0 - DOM.getRect(ed.id + '_tblext').h - 1); - - // Fixes IE rendering bug - DOM.hide(e); - DOM.show(e); - e.style.filter = ''; - - lastExtID = ed.id + '_external'; - - e = null; - }); - } - - if (sl == 'top') - t._addStatusBar(tb, o); - - // Create iframe container - if (!s.theme_advanced_toolbar_container) { - n = DOM.add(tb, 'tr'); - n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'}); - } - - // Create toolbar container at bottom - if (lo == 'bottom') - t._addToolbars(tb, o); - - if (sl == 'bottom') - t._addStatusBar(tb, o); - - return ic; - }, - - _rowLayout : function(s, tb, o) { - var t = this, ed = t.editor, dc, da, cf = ed.controlManager, n, ic, to, a; - - dc = s.theme_advanced_containers_default_class || ''; - da = s.theme_advanced_containers_default_align || 'center'; - - each(explode(s.theme_advanced_containers || ''), function(c, i) { - var v = s['theme_advanced_container_' + c] || ''; - - switch (c.toLowerCase()) { - case 'mceeditor': - n = DOM.add(tb, 'tr'); - n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'}); - break; - - case 'mceelementpath': - t._addStatusBar(tb, o); - break; - - default: - a = (s['theme_advanced_container_' + c + '_align'] || da).toLowerCase(); - a = 'mce' + t._ufirst(a); - - n = DOM.add(DOM.add(tb, 'tr'), 'td', { - 'class' : 'mceToolbar ' + (s['theme_advanced_container_' + c + '_class'] || dc) + ' ' + a || da - }); - - to = cf.createToolbar("toolbar" + i); - t._addControls(v, to); - DOM.setHTML(n, to.renderHTML()); - o.deltaHeight -= s.theme_advanced_row_height; - } - }); - - return ic; - }, - - _addControls : function(v, tb) { - var t = this, s = t.settings, di, cf = t.editor.controlManager; - - if (s.theme_advanced_disable && !t._disabled) { - di = {}; - - each(explode(s.theme_advanced_disable), function(v) { - di[v] = 1; - }); - - t._disabled = di; - } else - di = t._disabled; - - each(explode(v), function(n) { - var c; - - if (di && di[n]) - return; - - // Compatiblity with 2.x - if (n == 'tablecontrols') { - each(["table","|","row_props","cell_props","|","row_before","row_after","delete_row","|","col_before","col_after","delete_col","|","split_cells","merge_cells"], function(n) { - n = t.createControl(n, cf); - - if (n) - tb.add(n); - }); - - return; - } - - c = t.createControl(n, cf); - - if (c) - tb.add(c); - }); - }, - - _addToolbars : function(c, o) { - var t = this, i, tb, ed = t.editor, s = t.settings, v, cf = ed.controlManager, di, n, h = [], a, toolbarGroup, toolbarsExist = false; - - toolbarGroup = cf.createToolbarGroup('toolbargroup', { - 'name': ed.getLang('advanced.toolbar'), - 'tab_focus_toolbar':ed.getParam('theme_advanced_tab_focus_toolbar') - }); - - t.toolbarGroup = toolbarGroup; - - a = s.theme_advanced_toolbar_align.toLowerCase(); - a = 'mce' + t._ufirst(a); - - n = DOM.add(DOM.add(c, 'tr', {role: 'presentation'}), 'td', {'class' : 'mceToolbar ' + a, "role":"toolbar"}); - - // Create toolbar and add the controls - for (i=1; (v = s['theme_advanced_buttons' + i]); i++) { - toolbarsExist = true; - tb = cf.createToolbar("toolbar" + i, {'class' : 'mceToolbarRow' + i}); - - if (s['theme_advanced_buttons' + i + '_add']) - v += ',' + s['theme_advanced_buttons' + i + '_add']; - - if (s['theme_advanced_buttons' + i + '_add_before']) - v = s['theme_advanced_buttons' + i + '_add_before'] + ',' + v; - - t._addControls(v, tb); - toolbarGroup.add(tb); - - o.deltaHeight -= s.theme_advanced_row_height; - } - // Handle case when there are no toolbar buttons and ensure editor height is adjusted accordingly - if (!toolbarsExist) - o.deltaHeight -= s.theme_advanced_row_height; - h.push(toolbarGroup.renderHTML()); - h.push(DOM.createHTML('a', {href : '#', accesskey : 'z', title : ed.getLang("advanced.toolbar_focus"), onfocus : 'tinyMCE.getInstanceById(\'' + ed.id + '\').focus();'}, '')); - DOM.setHTML(n, h.join('')); - }, - - _addStatusBar : function(tb, o) { - var n, t = this, ed = t.editor, s = t.settings, r, mf, me, td; - - n = DOM.add(tb, 'tr'); - n = td = DOM.add(n, 'td', {'class' : 'mceStatusbar'}); - n = DOM.add(n, 'div', {id : ed.id + '_path_row', 'role': 'group', 'aria-labelledby': ed.id + '_path_voice'}); - if (s.theme_advanced_path) { - DOM.add(n, 'span', {id: ed.id + '_path_voice'}, ed.translate('advanced.path')); - DOM.add(n, 'span', {}, ': '); - } else { - DOM.add(n, 'span', {}, ' '); - } - - - if (s.theme_advanced_resizing) { - DOM.add(td, 'a', {id : ed.id + '_resize', href : 'javascript:;', onclick : "return false;", 'class' : 'mceResize', tabIndex:"-1"}); - - if (s.theme_advanced_resizing_use_cookie) { - ed.onPostRender.add(function() { - var o = Cookie.getHash("TinyMCE_" + ed.id + "_size"), c = DOM.get(ed.id + '_tbl'); - - if (!o) - return; - - t.resizeTo(o.cw, o.ch); - }); - } - - ed.onPostRender.add(function() { - Event.add(ed.id + '_resize', 'click', function(e) { - e.preventDefault(); - }); - - Event.add(ed.id + '_resize', 'mousedown', function(e) { - var mouseMoveHandler1, mouseMoveHandler2, - mouseUpHandler1, mouseUpHandler2, - startX, startY, startWidth, startHeight, width, height, ifrElm; - - function resizeOnMove(e) { - e.preventDefault(); - - width = startWidth + (e.screenX - startX); - height = startHeight + (e.screenY - startY); - - t.resizeTo(width, height); - }; - - function endResize(e) { - // Stop listening - Event.remove(DOM.doc, 'mousemove', mouseMoveHandler1); - Event.remove(ed.getDoc(), 'mousemove', mouseMoveHandler2); - Event.remove(DOM.doc, 'mouseup', mouseUpHandler1); - Event.remove(ed.getDoc(), 'mouseup', mouseUpHandler2); - - width = startWidth + (e.screenX - startX); - height = startHeight + (e.screenY - startY); - t.resizeTo(width, height, true); - - ed.nodeChanged(); - }; - - e.preventDefault(); - - // Get the current rect size - startX = e.screenX; - startY = e.screenY; - ifrElm = DOM.get(t.editor.id + '_ifr'); - startWidth = width = ifrElm.clientWidth; - startHeight = height = ifrElm.clientHeight; - - // Register envent handlers - mouseMoveHandler1 = Event.add(DOM.doc, 'mousemove', resizeOnMove); - mouseMoveHandler2 = Event.add(ed.getDoc(), 'mousemove', resizeOnMove); - mouseUpHandler1 = Event.add(DOM.doc, 'mouseup', endResize); - mouseUpHandler2 = Event.add(ed.getDoc(), 'mouseup', endResize); - }); - }); - } - - o.deltaHeight -= 21; - n = tb = null; - }, - - _updateUndoStatus : function(ed) { - var cm = ed.controlManager, um = ed.undoManager; - - cm.setDisabled('undo', !um.hasUndo() && !um.typing); - cm.setDisabled('redo', !um.hasRedo()); - }, - - _nodeChanged : function(ed, cm, n, co, ob) { - var t = this, p, de = 0, v, c, s = t.settings, cl, fz, fn, fc, bc, formatNames, matches; - - tinymce.each(t.stateControls, function(c) { - cm.setActive(c, ed.queryCommandState(t.controls[c][1])); - }); - - function getParent(name) { - var i, parents = ob.parents, func = name; - - if (typeof(name) == 'string') { - func = function(node) { - return node.nodeName == name; - }; - } - - for (i = 0; i < parents.length; i++) { - if (func(parents[i])) - return parents[i]; - } - }; - - cm.setActive('visualaid', ed.hasVisual); - t._updateUndoStatus(ed); - cm.setDisabled('outdent', !ed.queryCommandState('Outdent')); - - p = getParent('A'); - if (c = cm.get('link')) { - c.setDisabled((!p && co) || (p && !p.href)); - c.setActive(!!p && (!p.name && !p.id)); - } - - if (c = cm.get('unlink')) { - c.setDisabled(!p && co); - c.setActive(!!p && !p.name && !p.id); - } - - if (c = cm.get('anchor')) { - c.setActive(!co && !!p && (p.name || (p.id && !p.href))); - } - - p = getParent('IMG'); - if (c = cm.get('image')) - c.setActive(!co && !!p && n.className.indexOf('mceItem') == -1); - - if (c = cm.get('styleselect')) { - t._importClasses(); - - formatNames = []; - each(c.items, function(item) { - formatNames.push(item.value); - }); - - matches = ed.formatter.matchAll(formatNames); - c.select(matches[0]); - tinymce.each(matches, function(match, index) { - if (index > 0) { - c.mark(match); - } - }); - } - - if (c = cm.get('formatselect')) { - p = getParent(ed.dom.isBlock); - - if (p) - c.select(p.nodeName.toLowerCase()); - } - - // Find out current fontSize, fontFamily and fontClass - getParent(function(n) { - if (n.nodeName === 'SPAN') { - if (!cl && n.className) - cl = n.className; - } - - if (ed.dom.is(n, s.theme_advanced_font_selector)) { - if (!fz && n.style.fontSize) - fz = n.style.fontSize; - - if (!fn && n.style.fontFamily) - fn = n.style.fontFamily.replace(/[\"\']+/g, '').replace(/^([^,]+).*/, '$1').toLowerCase(); - - if (!fc && n.style.color) - fc = n.style.color; - - if (!bc && n.style.backgroundColor) - bc = n.style.backgroundColor; - } - - return false; - }); - - if (c = cm.get('fontselect')) { - c.select(function(v) { - return v.replace(/^([^,]+).*/, '$1').toLowerCase() == fn; - }); - } - - // Select font size - if (c = cm.get('fontsizeselect')) { - // Use computed style - if (s.theme_advanced_runtime_fontsize && !fz && !cl) - fz = ed.dom.getStyle(n, 'fontSize', true); - - c.select(function(v) { - if (v.fontSize && v.fontSize === fz) - return true; - - if (v['class'] && v['class'] === cl) - return true; - }); - } - - if (s.theme_advanced_show_current_color) { - function updateColor(controlId, color) { - if (c = cm.get(controlId)) { - if (!color) - color = c.settings.default_color; - if (color !== c.value) { - c.displayColor(color); - } - } - } - updateColor('forecolor', fc); - updateColor('backcolor', bc); - } - - if (s.theme_advanced_show_current_color) { - function updateColor(controlId, color) { - if (c = cm.get(controlId)) { - if (!color) - color = c.settings.default_color; - if (color !== c.value) { - c.displayColor(color); - } - } - }; - - updateColor('forecolor', fc); - updateColor('backcolor', bc); - } - - if (s.theme_advanced_path && s.theme_advanced_statusbar_location) { - p = DOM.get(ed.id + '_path') || DOM.add(ed.id + '_path_row', 'span', {id : ed.id + '_path'}); - - if (t.statusKeyboardNavigation) { - t.statusKeyboardNavigation.destroy(); - t.statusKeyboardNavigation = null; - } - - DOM.setHTML(p, ''); - - getParent(function(n) { - var na = n.nodeName.toLowerCase(), u, pi, ti = ''; - - // Ignore non element and bogus/hidden elements - if (n.nodeType != 1 || na === 'br' || n.getAttribute('data-mce-bogus') || DOM.hasClass(n, 'mceItemHidden') || DOM.hasClass(n, 'mceItemRemoved')) - return; - - // Handle prefix - if (tinymce.isIE && n.scopeName !== 'HTML' && n.scopeName) - na = n.scopeName + ':' + na; - - // Remove internal prefix - na = na.replace(/mce\:/g, ''); - - // Handle node name - switch (na) { - case 'b': - na = 'strong'; - break; - - case 'i': - na = 'em'; - break; - - case 'img': - if (v = DOM.getAttrib(n, 'src')) - ti += 'src: ' + v + ' '; - - break; - - case 'a': - if (v = DOM.getAttrib(n, 'name')) { - ti += 'name: ' + v + ' '; - na += '#' + v; - } - - if (v = DOM.getAttrib(n, 'href')) - ti += 'href: ' + v + ' '; - - break; - - case 'font': - if (v = DOM.getAttrib(n, 'face')) - ti += 'font: ' + v + ' '; - - if (v = DOM.getAttrib(n, 'size')) - ti += 'size: ' + v + ' '; - - if (v = DOM.getAttrib(n, 'color')) - ti += 'color: ' + v + ' '; - - break; - - case 'span': - if (v = DOM.getAttrib(n, 'style')) - ti += 'style: ' + v + ' '; - - break; - } - - if (v = DOM.getAttrib(n, 'id')) - ti += 'id: ' + v + ' '; - - if (v = n.className) { - v = v.replace(/\b\s*(webkit|mce|Apple-)\w+\s*\b/g, ''); - - if (v) { - ti += 'class: ' + v + ' '; - - if (ed.dom.isBlock(n) || na == 'img' || na == 'span') - na += '.' + v; - } - } - - na = na.replace(/(html:)/g, ''); - na = {name : na, node : n, title : ti}; - t.onResolveName.dispatch(t, na); - ti = na.title; - na = na.name; - - //u = "javascript:tinymce.EditorManager.get('" + ed.id + "').theme._sel('" + (de++) + "');"; - pi = DOM.create('a', {'href' : "javascript:;", role: 'button', onmousedown : "return false;", title : ti, 'class' : 'mcePath_' + (de++)}, na); - - if (p.hasChildNodes()) { - p.insertBefore(DOM.create('span', {'aria-hidden': 'true'}, '\u00a0\u00bb '), p.firstChild); - p.insertBefore(pi, p.firstChild); - } else - p.appendChild(pi); - }, ed.getBody()); - - if (DOM.select('a', p).length > 0) { - t.statusKeyboardNavigation = new tinymce.ui.KeyboardNavigation({ - root: ed.id + "_path_row", - items: DOM.select('a', p), - excludeFromTabOrder: true, - onCancel: function() { - ed.focus(); - } - }, DOM); - } - } - }, - - // Commands gets called by execCommand - - _sel : function(v) { - this.editor.execCommand('mceSelectNodeDepth', false, v); - }, - - _mceInsertAnchor : function(ui, v) { - var ed = this.editor; - - ed.windowManager.open({ - url : this.url + '/anchor.htm', - width : 320 + parseInt(ed.getLang('advanced.anchor_delta_width', 0)), - height : 90 + parseInt(ed.getLang('advanced.anchor_delta_height', 0)), - inline : true - }, { - theme_url : this.url - }); - }, - - _mceCharMap : function() { - var ed = this.editor; - - ed.windowManager.open({ - url : this.url + '/charmap.htm', - width : 550 + parseInt(ed.getLang('advanced.charmap_delta_width', 0)), - height : 265 + parseInt(ed.getLang('advanced.charmap_delta_height', 0)), - inline : true - }, { - theme_url : this.url - }); - }, - - _mceHelp : function() { - var ed = this.editor; - - ed.windowManager.open({ - url : this.url + '/about.htm', - width : 480, - height : 380, - inline : true - }, { - theme_url : this.url - }); - }, - - _mceShortcuts : function() { - var ed = this.editor; - ed.windowManager.open({ - url: this.url + '/shortcuts.htm', - width: 480, - height: 380, - inline: true - }, { - theme_url: this.url - }); - }, - - _mceColorPicker : function(u, v) { - var ed = this.editor; - - v = v || {}; - - ed.windowManager.open({ - url : this.url + '/color_picker.htm', - width : 375 + parseInt(ed.getLang('advanced.colorpicker_delta_width', 0)), - height : 250 + parseInt(ed.getLang('advanced.colorpicker_delta_height', 0)), - close_previous : false, - inline : true - }, { - input_color : v.color, - func : v.func, - theme_url : this.url - }); - }, - - _mceCodeEditor : function(ui, val) { - var ed = this.editor; - - ed.windowManager.open({ - url : this.url + '/source_editor.htm', - width : parseInt(ed.getParam("theme_advanced_source_editor_width", 720)), - height : parseInt(ed.getParam("theme_advanced_source_editor_height", 580)), - inline : true, - resizable : true, - maximizable : true - }, { - theme_url : this.url - }); - }, - - _mceImage : function(ui, val) { - var ed = this.editor; - - // Internal image object like a flash placeholder - if (ed.dom.getAttrib(ed.selection.getNode(), 'class', '').indexOf('mceItem') != -1) - return; - - ed.windowManager.open({ - url : this.url + '/image.htm', - width : 355 + parseInt(ed.getLang('advanced.image_delta_width', 0)), - height : 275 + parseInt(ed.getLang('advanced.image_delta_height', 0)), - inline : true - }, { - theme_url : this.url - }); - }, - - _mceLink : function(ui, val) { - var ed = this.editor; - - ed.windowManager.open({ - url : this.url + '/link.htm', - width : 310 + parseInt(ed.getLang('advanced.link_delta_width', 0)), - height : 200 + parseInt(ed.getLang('advanced.link_delta_height', 0)), - inline : true - }, { - theme_url : this.url - }); - }, - - _mceNewDocument : function() { - var ed = this.editor; - - ed.windowManager.confirm('advanced.newdocument', function(s) { - if (s) - ed.execCommand('mceSetContent', false, ''); - }); - }, - - _mceForeColor : function() { - var t = this; - - this._mceColorPicker(0, { - color: t.fgColor, - func : function(co) { - t.fgColor = co; - t.editor.execCommand('ForeColor', false, co); - } - }); - }, - - _mceBackColor : function() { - var t = this; - - this._mceColorPicker(0, { - color: t.bgColor, - func : function(co) { - t.bgColor = co; - t.editor.execCommand('HiliteColor', false, co); - } - }); - }, - - _ufirst : function(s) { - return s.substring(0, 1).toUpperCase() + s.substring(1); - } - }); - - tinymce.ThemeManager.add('advanced', tinymce.themes.AdvancedTheme); -}(tinymce)); diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/image.htm b/common/static/js/vendor/tiny_mce/themes/advanced/image.htm deleted file mode 100644 index 884890fbb4..0000000000 --- a/common/static/js/vendor/tiny_mce/themes/advanced/image.htm +++ /dev/null @@ -1,80 +0,0 @@ - - - - {#advanced_dlg.image_title} - - - - - - -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
 
- x -
-
-
- -
- - -
-
- - diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/img/colorpicker.jpg b/common/static/js/vendor/tiny_mce/themes/advanced/img/colorpicker.jpg deleted file mode 100644 index b1a377aba7784d3a0a0fabb4d22b8114cde25ace..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2584 zcmb7Bc{JPk7XQT-ib;b~B!n)ZQYwihloXMus-;?bMO70&%O72KlgJueK-#swASle5Y5YhT*O%%dE zAkc>z8ik-xeL_Q`VvZfo0TzI`m>5`0R2&QjOGtcPyzrU;Ul*Hn2<045)l;>V5-MK0^|t(rvM}*3>DEeQ&X2g z3ksC~i~iFKh=?B5i-83o3#TV^B0=RA*fOi#-=2VN?CKn!VTTmGv17_PGbp~tmc*?G?Q3b)|K!w2vr zE#B_JH@ru}sZ}~Z&Y(BdJ;w0B<_kXtGuOzs3$vq}6fO9@x%kiyX*#pRnd1k|;ZC9lr#>sh{3$yY|bYY6^>YT3sgsjiaZ zt)366^&;$S^TAwvN^I2ac+hLh>*VqIos|eL+aL&+l(KvNwWYDctNE^CZRyy^Hk}Gm zs%JVikvO#Mk)X?@TXY=wD38V@;t?)q3)?k2YvxLQMV|Z{nbR2g{a11;p-%!QgLK)B zOxbfUi(pzhsbuCxGBk6FDP#0RPN626_I($Qo;ZGhzWMfs%mMoI+aSZnc5a0+bG2w> zdwgm4&zp*i7B>D%H%G$4FMfG12)D3b{1}-HBqY<6w=n2s8b{B_D%uFYtH{l(Gjv9e zWpFy-6fULzp*cl~BJ4!l*}~J{8#NXk`;x5Nxc+^GEA?|AACg+K)(M|zxHsxFUr9^W z8>QdvdWEw!My?R7!O*p>?3Vb|(=N3|J09OD{Yf#{7*(=rbThiBH~Pm^1tz8SQ?S_2 zsL7(bX9dJ9E%uV^(+dSB)^w=MsF&jg*N2Yjo41m`+WsE&JM@CatfiOlPhC?QPlCp7 zkjesJENk4=dSaN^0M0u1TG4#qeAKgyC$GLGD7II&*kr2|#1!BvS`Grg^OIWk%YAqd zvOcmz%SU-HCVg&rbnPaNZ@-T>)?IP3SO z`YKP&>q@U~m`o*wvU{S1o};9b|8*hRw?;H&TJo4a*7;m_)Q!aD3a1rnAWdVgkH=Lu zObSl!m}$JlWj5VNXvuO#F5@@cmhB(M4yEbSXe%Ptp_SH5SxG-pk!2PJGzE6Dd$(C0 z@d~vVd*NT)SU<2GYn`hA?4|dNDwAu?ZjXWSO9CasoBO}LQ2uFAj@4t0$2xTLEHxw3 z9KJCkFq|08Vmgmxahm%mjA%=I%Gs1mlNy$Km`%^o|A2`!bMPtTrP9y*c^+0M7OCcy z*j^fh4AjCI;2fso0|cz3p5Ih7h72bSVc6YE5O%+w*;qWtI~3hL4IzfscqG;j3j4$- zGt%o#6n#5{gEJw#3{=edteC(w|C#XBp!T8k; z1)EnwGqJ26>c-cDOJv5}Snt!0vhVoS>u03BZj_q+20phaQo81-&IAo;URjUJNTP{F zJ1=+YL^+~uVv(VHc>guRDB*Gug-NN7$n25zaX5RGugKeb5qMo|<1CcSE4+{PPcxQG zv3ZU;p_ZeurmcbMiK+xooGWRsM@gr+Dhpr7I*ST8obbMa5|CLQW{h63?CM{F=X{nL zs0Exdc{AnwAx@;9BObf9QiL5^p(iN?W^L~%mn5*ee?M2!d$&oxYIK&9bd1oX&-$gA z3T&To>*_6TDnv)9{*of(wm?U7D)X3u^_3;FijXcEo0S{8x^h(v0jeTdW0Q} zOC0Y|wO&b<-xFprPec9-SKwJYz4Pbz|~nyPrCb5|2|%P;^(%>|XHw4OO3JkE+QD zWRIhqlT(0Yu4KKuvUjKlnW`S~l&?fXH-Bf`2d!J=4UHXDv4xLDnvd2_EWTb3hReh6sXpEI(hmlM{1 gF4ie0tgS$y#z=nxNn#Fpd0bt##g=j86Aowo21S>Ot^fc4 diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/img/flash.gif b/common/static/js/vendor/tiny_mce/themes/advanced/img/flash.gif deleted file mode 100644 index dec3f7c7028df98657860529461af29b8793601c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 239 zcmVM~p;I&fgwbZVtlRJPxC7uw?yFxEX;uVr4IeWCJ^(5m4hjYVM>G^+2V)FnXE$mS p86yHh03AmHCKD}bWutOkFce4&0zF5CG_Myp4hRT+ig>^g06S0cRV@Gj diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/img/icons.gif b/common/static/js/vendor/tiny_mce/themes/advanced/img/icons.gif deleted file mode 100644 index ca222490188b939d695f5ff8823c42c0394c65f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11982 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 z z88v$ey7RlYe{UZ;jUz*Wg|cpAuHLT1!tuW)#>V>|xd6P6z|`JW(7o?&avx5(aEH62 zPb3X6rL`)t?tb_PQwW5Vev4;~Nf%R~*Jg;VvFd36B8S$u_PhBIQ=LS*i|GfFDOhVV z7ZHucP5`nLEVA|1*g%u+I3!1djU7f763}uqsGR^GrizwA1EnO9y~)tNK;#|P!1l6% zXB7xeAY{sgnO3xKuYj^yK;u?%(_AQ@i^g!#;J^aEX z#(Y>JX2_TVKS9Pf>BB^cqOoNtL}d@-Pq~L{3;p5|`g#9d(6L zZtmWdb+s$!MVIP=q9kk#r~e?4gw1?`*~)>PS46r42qzYvScKO*23hh@aQ@BXr0(OK zn{Xa#FbZ0WYWdlyid00rFhns}6Jvc73;-k$_c{gMpZwH=!*d2msHZ6pe+6(bld!#9 z^vQAbULMrz0@;w@)9Nro)|jJf-?I6xkA1Muxlkx!)OCUUJ^HbD{G<0ukH4ire?%XD z3c8D-0d`cLodCC$3&T)PfH1TIFqxGt@$J~7X?2h$g*nH81w$BM->$m38iYUr}H*G+`Y6J}+V+M9K4NOwS5P|`O z{zIhu{oQ3G20s)FJuy!)SSP|jssx6FR^r|Ut;DNYP#6_duizdP|`EVo; z;StmuyYE>db>v&pgG5%F9t4t&=n*@I!lH*LWkW*hQ0CtuQT%YM>oBbhC5{_9GXaQ^ z@Ud01NA`|vGY9Qg@I$bQhm3vP4wmk^j6r7Ml59zjL9^H9=!udyDRhIr9R<@iD(XW30$~ zkd=s+OFeEcd%(&Wa0Ss1iQ*yA_Q2jw7gTp3^lAby=8G8fU}7xvQ#fAkxcW*T%uDbX zHM#Ji?1kD*NCvuR%!Nns?!pTevw9YHSuBFhW7^jt&CLaq>yQQY?kbJvO9Xb);JOwN zRRAcEv2=p02MzF`NqCSa;gbsn{$KmGHYNG z5)*CWK3zw2bHtudk?%S1ZUM@TIEQOR`cV7jqYIFe{e&i%`7Stxv`i6_22lE9L$m=q zWw9mz=}6%Vq5Ch5?n9OLAM?)&srRpbIggqII8=#%=9d^s$EAbtSTgKht3?GL)3{rt znF?L~sB-P23Z93Keu?G~n-lV$C0-MaQGSjh0H!;D9KnMS*P&s;Y-BW)DK->Bn-y6Y z&N&D@{W2?opZl!dS-1-lW1)^H;)-92l-?OAyEAZoUrTn=$UyLy|85REW<5t#0#cyW z#)Yr9Iy#Usqu$@8#*fX9G|x|bp67kW7g9uSlb?zd2t+K$zWov(IgUxAqVgc5G#|Z( z2238u?;^egCtt49;2hff70-^tI+0q_$Q62An% z5=mT!jLQ}PYx|%7xPv;z7emc-|J}Ej6L{a5B|)}?3O6M%DxwGi@YJ01KvZupd0{VQ z!59)bNPN^%Q;wNjFsyi^9t=f2{(&oaTpl83V6iv$tNf|Qi*4V2XubM@=wCPfvW^I8 zRXT*h97OD};v?L#uKE}?&XNRI9E9K=G}ujUZ?HImNKm^ z)ai=xq1yfBS}(h}AG{m=Pb7gX@hF@za zUM=Z|XmbE2T5)?KWk3)zC?Thov6b6Oqq8~=)RoPA?p50g%HvMexl7~D#S$Dnx^HQ_ z9d#%>AQrNF>cXAOzNo^GIAMhj$723Qf8|;~`$UiEf6t$Mn8~d6=)edh`fHQd&A8UT zlw{&R2w&x@FD@--OKI1+juwQb{9IY^jh>J?pkRqUIJ>XHt^9>lKYAGQ;ABD=NZgbQ zz?qozv_Enl3*|^}KLG(jbuxRN1hJPVZRK^2WdigEL;4vp8@Ef$K28xL^1)qxdNjr(#l8#F8 zOOwMj9O>BcCP+YQ*Bm=le_a9M^V!ZH#?hCoR45KKQ6goyC@-pzlrBbL8I(pgnIf-e zX3iQq;65b^k4*+|&PGbO$jw&EDnW@C=)rPbTuC+Kq{Y0GxKZ_-QwbCr%wnDtCE|R0 zPF-w_D6>+T|w zZjzkKvPXrJRmeak(=m|jpTH*5dl$klA!bfk!!R*Hybfun)bg*^2$JJM5a zxJzcPnl_E{*AlD7;F*dEv-A`428ng&wUd_$w69aL4RQ^Gvv28}JM&Q&UG7?OVOFO; zRtGO-({#6~^VfG2xTsVvMIbccgSeVCfBhQWGp@I?HH?4h&PBH6waq7d{A`kG?*B=( zK_gSRRM1Xn`1GOaQub$M+1ssZnf3-hfh=UyhW0gkxl&45OlG&57&)D@mr4FXB#0@8 zM}-u+2P^|w3c6`W%xVVQrF!XIipcD*D7lm7VXTnF*a8-iv6j(zg`p)iQ zQh)9)K2|(Q)@3nwildE+)~RecDFIc8n+fajE>xkdGT(~`2=u{aJ`tJ z&GzBdS z5%mE!-p`=k-Ndgt9c{{A{}Di(9Zh048+Ov*ho;H=Ez}u5`aC1exzRLVah`(Qp%Nle zQy79Wvkoz-p`{%dB*5iq$86Tdo(azXyA5sq^mEFg{QC+?=rcutVO3RmUw`#53S5a#!2$(%bgR4@e;aWOCf*0#R!oa0XXKJSO6pRcq zGl3=o4Z{UWkIYh}y>u8dxPGiP1Xm9qft>8dG>WD|^i1Q^q!XhQ{Uhzw=D9SDA&@4T zX4NvUxMP7*pcb%H)k0CnhU~V@eb8f{S}8bW6l{}c81g3Uk^69*&Z2xD=6W8VakJUAc>p#I^G>a{a@pri)NpwIV*6M$ zt&Akp-|e>GF&TQFZ7*-VK(i0H2Kh~B>Rgl7k6cncs#fS@pzMY@^*o_$4dawZ%_0hI z&_{_}73-Kz0&TJ8KJ5h}yz25hqb2H`)7XAtjJWovQyTmdP|Ank6>12Rw>`oXf2x-K zc*RC}lnK0dt;eA?BQ0@M24j1zqu3%3n|Negj<&$Mk0m;HB7g8Twyc) zLAf+l+CGGjJZ(B4gsl!5^ev&AyzoK64BtW;+#->0|9mNJ$g~bs%(l9Am=~DI5FX<4W_*&D%_WwW?L^5P!lzSY_Ra_6X_&awr#X6 z{<(*U9@Wa>m=$*wwWns=6a_6}nT`pgrsG-QovaIK_$-|j%LCCZ9_t`%H|>G(fomU9 zYg zU?PP#E?!lHQ1->QN(iDpd=oW+Nez%LRsmZ60WFq+p#hi@agW8C&Grq@E+{Qi!}iiQ zsh~#53pq3sG9ve?q#|oD`^KR5o*BU71~R1HH%V&W>}q*)f8-zVaN5bA2s^?9JW zDdSl&)^0=NQ7FQZP$QLmr^M7M-?85#&}!Z=-KDA~_Y9~3;EO&XFDqfM?7SP!Isdp6 zyM}eH{4<(K!PWcG+V_r)5uI;3I^SgD-c*Rb(Xq%Rf^8fFfd zpyK2*E}Ti?j#zCN$`!fL$fnks$5#q(b&={a30Brs|2F^CWq#@yUWM;Lb)I=YNr33A zyC@s!>&Kw-AEfea!q>n=4p>W1gPf4xS51&Lo^sRN?Y};Ci!TC97V@>f0`KO)>-h9GS zB+&=q?_39of9#dZcW?Oo4RdU}7C7lFw{5(WiBQ>is=eW(!trite`@$Ur^62b6UVy> z4ga*c1PqK<^IRS&a&3N(|6}&RAG8jyG?h|sbG3k!4BCYPXxB7pLe{V??q6;*YbP2S zCh{r}m0E;28p>%?CluU`0Z9?Gw1e^Fks>e~J=jF@Ewu;?{V zLO~-&rWKayIu#&6K+APE`{+f}RowEq{i=+>nkf2MApIC)`dC};vA*UF&cGe>We^FW zeugm;`SeltKlK(sV*>s8k83LE{pz+70+`H8OxtcA+&hqYW2dvxKLIpLe**=+6Gu2Y6$-$2no5-r^^ z?{Y+?*N6)vB@*LWRL!3A%8AA}QxH1;D1rd3vphSx!SE^0pl>j&&A@{1n3H$*U9y{- zTeusX$as~U9)QHl$@#-A<_hzkHElepz|bkRY@I+LeIGt7AP zIQGkQ7bcC<7*;b2GhwI2H^Y{mWaBuX6J+Ouc>)an`;uokDeMB|!$nZt_O_J)H zjh$<)Z*Oql24=pcQ{E2LzHNfub#8r^w?R|bpdkYYeie7Bxs2n?G-V9hx-VQp5TvF& z1^lI<9B*oh{Wlt)W*^Cr*r3fGk)C_WRJesW8AgkorJtNX=s>vM5JW>!;fP3vsm?1B zg}IA1O;w3}`y8yPc$MP1{K*cdsbj9w#fWJli#xs*uI?W}IWaQYy|B%#Jx67 zr`gcb5$s$Iotk*}D^fO3GAVD6=R%J&-yqKEAHC+J(e+-%0&^uH^jtD%dijmk)9gcA zvx(HZ>MKa-99W~fFiQSV6Z~OOu{7T!L>-eMV;`kW56P#|!N5*+FmLN<2CE$h}>Bx>Wm4Tc6mkhd9xG` zoYnc1T7h`D1lQ{Ej%a+Jiw&%}b8O;iwrT}!uXw&xBpl~w-K;~mrwpbZ$WFfQ+(=Fn znOz>^)9W6vN|xXU9z|ClrB!NLn&%nH1od?G<_1;h;GQU|d>CXFbGisqo4RKXi}X$9^x;VJfJ0 z1TaLM7YFt~OW8jwy}v^1-pqxu%h#jDIzNfmZyg@Vp8tYvCP&o-(;T{Lq3{?*YK)x3 zhsEH9#@kVuT#NU1*`VBR7}uh-dUF;N%L5x0v^-Dz`yZuWynTGz<2!2Qt7D15 zJ0HjH8jk&8u*$u?$~>B`I)cDe&|Ejtgl}p@@f)=1>#@(y9VejU_LRq&nUu~o?#bK$ zUb5pXOiH6RXd7SR%<5*G&tj~~&-*x@vOBb9d(T_1{LKfW)ltr|xs(-|&NcZKQP=tv znHEu5*CjgnvyE!JhhDs=<#!Lgu5_DtpOf*vsqudK@&4uU0WI-?_u_*d#~*whAN)1` zkT9Mikr1Mqa9A%P)G{H=E#b(agz%FI5vd80`3XnM6QUyG`F9ecg@sYC6Ha_hI4Mk^ zN}P^a|51DKqsIFTIm1%F#1`NFd=t6TiTS6`l%Gy&Ih}lOeUt>mSxO#C>@9K3vL?|m z#Tov*hb4aN_=g#yk?SUYw9~_xiKKyfB2C9ztwl7UF1>*yubr0Uh?C$(87x4R{G z9QsYCPR=DKcb-nZaSx<$VAhV3DokV|`^KeV{hC7?zGvu0N0JBhQtn%(3?BNWiD6hf zqQz;ME*#i_4aS{&@EuH~El+bDOtBEq>Si+sCC*N&o}JP=8+--nzk!}{IQ!(#-=`60 zpIS0C{Xn@p3~xS6l7@bng%+yO&_l^!hUG8cZB?F5Tc$0~ExDb0d+3~>9)hw#^Db_5 zAZ++kX3V(i{L?M!X6hE0Q}2Z51QMw$mgl*^Rac^SA9wAtDke) zhn{e~lGDtK`30;NZ2OIul7XBfb3rfW1?Rulz|cmK^S?fS`f0e#t8%!cd;FJCR5k{I z9=h_KP=zS>Apd4WetHv>a((cF^06#50%MB!Wi9dW!pzte!;@eB>{(l$s$ZWO`4tty zINVL0+`T|3M=lQMpX8&gs!fOB?kB%)?)$T``rmX*K9tt-(dQ7n`SM+S#1E_~Aq}aJ lNJz&f`8-6!wr>y^cxO|!j4c6)YMJs;U20j%J+ct6_kWvS@T~v< diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/img/iframe.gif b/common/static/js/vendor/tiny_mce/themes/advanced/img/iframe.gif deleted file mode 100644 index 410c7ad084db698e9f35e3230233aa4040682566..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 600 zcmZ?wbhEHb6krfwcoxm@|NsB$<##6SeDUYszh8g<{{H*-%a7k_-3KZc-T3+YPwBiX zzyAIE^Y`z!U%$Wp{QdX;|FQ*Fw;jIy{pasbUw?o3{yVB>Q_sRgx-G9iegFLZcfrha#d9w;%sU=Zx~6K$tw~$%z4`#O^Y@3Z zKV#~)MpSKh@#b63l#}6=>yq2|{`&JLqwny)|NnC)o%r$l&-Y)yKYjo8?#quSuRaGB zt_&<%`RV)bl#YEr{`~p)?RU|v^Y1_Z`u*?Ux8J`*N>>+5JlMAOZr+qr@y$D{mfVhO z+zt#7208-8pDc_F4ABfaAUi>E!oa?@A-bu#r8Qd6oKeb*Lx9UTz)0QBL@+vxY38ii zvqGa87c5+~h&?)zVa3W-D;=U$88}^qMBJ^ERU|z17!;#97+4%Rd1XcXJq#>t8KR;E z7zr5i6BgH5y=gAD)sAQlGB zh8au?j!n~E(Pks?@!j1fR&j*RWY8GF(-=x H6d0@lT&58X diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/img/pagebreak.gif b/common/static/js/vendor/tiny_mce/themes/advanced/img/pagebreak.gif deleted file mode 100644 index acdf4085f3068c4c0a1d6855f4b80dae8bac3068..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 325 zcmV-L0lNN2Nk%w1VPpUd0J9GO`>v<{=;ru;boX6P{`2zsmyZ3>&HK5t_;hIbi-G;z z+4`cI{KdfcXj}GCLjV8&A^8LW000jFEC2ui0Av6R000E?@X1N5y*TU5yZ>M)j$|1M z4Ouvb$pHu>IW8BZq|n;U0s@T!VM5~w1_+1X!EiVl!&PITYdjT!ffYfpt{jAfv%qvh zA63WUHSlr7LkeyaV4(pM0f50(II?RD4RtMg4-E+tFhdAy5{3c=0}3Bg9Y8`B2To20 zR%SO62L%9}0H+dzoKB$+2TOwzUrwi{XiBM^4V#>63q3!LsU3u93zH8CdwqY%62;1g z0g8ze$k93lWExp`CUe|K4qOWk17ZeJ0|5pDP6+}};{>bI@lOWj=kf}r2sHp7w9-Ie XK%9UG6W(*AX-vY05F<*&5CH%?Gwy&_ diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/img/quicktime.gif b/common/static/js/vendor/tiny_mce/themes/advanced/img/quicktime.gif deleted file mode 100644 index 8f10e7aa6b6ab40ee69a1a41a961c092168d6fda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 301 zcmV+|0n+|QNk%w1VGsZi0Q4UK+~)L6v+~s9^fsC5ZpZP=*zu3F=Jxpf8k_5u%JNv6 z=md-84VLU4w)kSE=yI&-yw>b=v+SqE?+kq47pC+YrR?bJ^yu>Zyvpn;hTp*6^mM!O zu+8!}sO$`q%8%`=C5EEn#1d#z95FHtK5(^#(cp^e+Y!d=4FCrFbY9A3U z4-O0-4kHJPJ2(jk13n5879s!!3Q`V>8VwW`9my3H#|R8ZD+fdx0E-+693cQZ;!k;* diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/img/realmedia.gif b/common/static/js/vendor/tiny_mce/themes/advanced/img/realmedia.gif deleted file mode 100644 index fdfe0b9ac05869ae845fdd828eaad97cc0c69dbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 439 zcmV;o0Z9HwNk%w1VI=?(0K^{vQcz8xz}f&njBB06v9GQ`Jv%NdDHCI&z`wqZw$(Lw zuFTBL!Pe#<92tv>h)9OE1Xh}vnVEHSaeb-GByg#tqM_B*)YRkdSdqTu&}n`s(k;lb>H+`#+Q6|3c{>OLTv23;utm>DSfy zuOD3adm!iUuGar)4FAhzel5=UwZ7*6(K(+k@BP_g{o}}@k7u_2k7W2iGwlom!+#Z( z|Hj5w_4MwTo8QaHxm#EFYX1DUOO|}vvgQBb!_ST${rmj+`+Fep|C$j4HGtwz7FGrZ zO$Hs1VIV&_u+2R%#bJV$RKJIcL*N7vss0Y-EsB{gGlSJaTr>sRLKbLj5HMTpyK;)l zJcfpaMYltBZdEK6Kht6+BPy*VtthFMtIoqFC=#Tu$e^eaDXCC7U0vOYOJjNk(;P!VagC#fQ*?7otVO)-#9rK#nB%ry4`E_DHQ Wm01j~^6E13^D1O7+^=wCum%9s<%z=p diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/img/studio-icons.png b/common/static/js/vendor/tiny_mce/themes/advanced/img/studio-icons.png deleted file mode 100644 index 93e7e9cfe01c47f9699938ef9c6decd3e01c2c9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17470 zcmaI71yo$kvIdH4aQDGo6J&4?g9mqlyUpMPC&8Tn!JXg|+=KfN65N721b29o|D1F0 zd27AACBvC<|M-IB}W%EyLyQ z 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 z zcXc#1^`w(zw8>_*gsZIOCEnFC#YHr?uNk4zIyo{Otx~uQpyq)bW&%w+{e@6VeWvwK zd^^(@v?XE@zc*15TN)`k?T2W+$-%6Mf zISL^(@30E$V5dKGtiKeQl^JUyqO}tfZ?LgLSp-trlhc zH1$r*KD}eT)JmXTZBZdc!!YI-y30+mhk53dr`WgF1 zd|)~9mp+XsGiQW-crCCq+LN1Az~u>rFdigi--KrWF3Hxf`jq|iF_7xU3kK>5i_WSK zNv(XHVElzmw(y2bUwrFf_|&7MH1CxPRc^GSRx!V`}<!={96PmwNdH7uDl9FU$T@_WbGcmrjy zd5vNmk?tRw(7)J1)2dULVE+D4bl`v88-6{l6s6UrWs$kKrM~^G%xgXB&-+SM}c}39LH&>AE_3-#X|We`4&xwEtf!hh2uX zNp5^S><{IliG%r#x?zxwFkj*Z#9~f0xW4*tLgb;$5Zf!TbE11d<9`dPML^ub`6)3Q z!lkAT59h>Gb43F4ZP%{xe;kd!?#CO5jusx8!LOLBB#?-I`Iw4z##!mVq(l$_R4$xXbdSgCgX4?i9-yev}7P$)4 ztv+YiSKXrg8$8@X-Sd9p)L7{GZ^l%BR93W~-XZY!+b}a=_j!GEe~#F~-?2y8JOFUb z8vx@ziJy(^nnuy~eTt5bJ&hMHFR}@)&D)fD_^-~rr^JZ(mItGq3^qLB4NHi(QPb}L zAHZ98KP-l#VU&;vLDLiVc=i--ZUL7C@*6`-TQ7vleKt_;?IDdhEUEQThwOi~C7$LP zOf@n{xCL!5&nwJb>qB-xN`9pj&O~$WhqT?$gpq z+j(}({8_6zZD5agvw!&xbIWZ_ymMjbzu07?cPPk*)VhZF3wM|=KWuYxw<)jdvSD^W zNeb9F!}^Cz^rJwoDDzkl?fmroM(pH-wHYe5poH%!`1NeJyyD^bMvP-p zti4sJV&TjA?G^lKM`kRvd^Bz@Chf~C_rXephi$=37X+ABPK7d;A zJK*d^Z_c9?M$fUXS_7E)9y|HCTpIt)L^gEZ+t3qFgec;oIxe)SBwfPzv=MII$~*i& z{`)bNo-OaG(e=&9++(p$=R9qIFJ zPMM-8Al*91?)S|F$PQz|Q*5RHau$H0uv$cH)^`au4WA1xb$-Tx50d< z-H0#yu-S3jf&e-PFjunGgUy<&og0^$YN`FAHZK8W%mGU(D_a?Rece>7JDhqEV=@CV zUZ;y7rm##HDaG9(d>gjEy!i~vSAqp^rIXy_8HBJGcrzT*uXV?FajQ z9AS=qEQ((Q%x}JOS8Z=HKd~{r2*@S5OMv5we<`N1F|z5Fw=T47W-eO> zl(X}>eEEy2&G|ofd`pF diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/img/video.gif b/common/static/js/vendor/tiny_mce/themes/advanced/img/video.gif deleted file mode 100644 index 3570104077a3b3585f11403c8d4c3fc9351f35d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 597 zcmZ?wbhEHb6krfwc$UTx9v<%P?Ok48Ze?YanwpxCkzrwBk(ZYzB_&l;Qw!gmM(Ep^QBwbzIoSdAh>*2n> zz9l6k0Xw#(?);y5^ls9w|LObxXI*si^YfcEYu3*P8J(S-PEJlaNB-yTd}C^Ax@_69 zzP`Ryt5)S5`=P3;TDk9SbaeFk_3NiTjGA~aFd-pf@}tlxQ>GLb7jM|Gp`oFHlaq7F zk|nvhxjsHV=g+oST3Rl6T(N1>rn0iK*Ed>3MMVn>3vF#}**q!otE>Sy|^jDoRUBoBANRc=wyaJged$+}u3x zK}ld>puWET{||NozXdO-0f3nK$V8iNkVNKl+Guy1NeYie$3 zZB}=&Zex!RYq8YfVwgNdMpdFkN|rU!Fha}0m66q>CDxczOhH^pM9qvxw1p`;Rftzu zQJ&9}g>iErlc2ORw;aC_=l*6UJ=st%r*ISVV2jgDT<)w>rXHGL<21Kdo z#uyug^O^t z0hZGrt*x!>$1C!zn`W5@`ts6_uMW)2%<0NUEKIo?SIPPE=}U0}7Z(?JcX!y=*;bF< zCWz-=h7+2ao9)(dOHM;+X=xs9)%!~xc&ICMZdRYdUQ2$^@9y(6X3NCIz{cM7f^Z=Q z1_tQ95kgl8b%R%OiYTIo7LSdE^@}A^8LW002J#EC2ui01p5U000KOz@O0K01zUifeIyT9%!RzMDgehG|mwLz+Eh; z7Z~iE zrX?OfJ^>XeDJK)xJuWOB3_l1N0Ra>g4Gk^=ED0V6LI?>4;Q|6OB{LplLMRLg8U5-E J?0y6R06W6!pgRBn diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/js/about.js b/common/static/js/vendor/tiny_mce/themes/advanced/js/about.js deleted file mode 100644 index daf4909ad2..0000000000 --- a/common/static/js/vendor/tiny_mce/themes/advanced/js/about.js +++ /dev/null @@ -1,73 +0,0 @@ -tinyMCEPopup.requireLangPack(); - -function init() { - var ed, tcont; - - tinyMCEPopup.resizeToInnerSize(); - ed = tinyMCEPopup.editor; - - // Give FF some time - window.setTimeout(insertHelpIFrame, 10); - - tcont = document.getElementById('plugintablecontainer'); - document.getElementById('plugins_tab').style.display = 'none'; - - var html = ""; - html += ''; - html += ''; - html += ''; - html += ''; - html += ''; - html += ''; - html += ''; - html += ''; - html += ''; - - tinymce.each(ed.plugins, function(p, n) { - var info; - - if (!p.getInfo) - return; - - html += ''; - - info = p.getInfo(); - - if (info.infourl != null && info.infourl != '') - html += ''; - else - html += ''; - - if (info.authorurl != null && info.authorurl != '') - html += ''; - else - html += ''; - - html += ''; - html += ''; - - document.getElementById('plugins_tab').style.display = ''; - - }); - - html += ''; - html += '
' + ed.getLang('advanced_dlg.about_plugin') + '' + ed.getLang('advanced_dlg.about_author') + '' + ed.getLang('advanced_dlg.about_version') + '
' + info.longname + '' + info.longname + '' + info.author + '' + info.author + '' + info.version + '
'; - - tcont.innerHTML = html; - - tinyMCEPopup.dom.get('version').innerHTML = tinymce.majorVersion + "." + tinymce.minorVersion; - tinyMCEPopup.dom.get('date').innerHTML = tinymce.releaseDate; -} - -function insertHelpIFrame() { - var html; - - if (tinyMCEPopup.getParam('docs_url')) { - html = ''; - document.getElementById('iframecontainer').innerHTML = html; - document.getElementById('help_tab').style.display = 'block'; - document.getElementById('help_tab').setAttribute("aria-hidden", "false"); - } -} - -tinyMCEPopup.onInit.add(init); diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/js/anchor.js b/common/static/js/vendor/tiny_mce/themes/advanced/js/anchor.js deleted file mode 100644 index a3a018635b..0000000000 --- a/common/static/js/vendor/tiny_mce/themes/advanced/js/anchor.js +++ /dev/null @@ -1,56 +0,0 @@ -tinyMCEPopup.requireLangPack(); - -var AnchorDialog = { - init : function(ed) { - var action, elm, f = document.forms[0]; - - this.editor = ed; - elm = ed.dom.getParent(ed.selection.getNode(), 'A'); - v = ed.dom.getAttrib(elm, 'name') || ed.dom.getAttrib(elm, 'id'); - - if (v) { - this.action = 'update'; - f.anchorName.value = v; - } - - f.insert.value = ed.getLang(elm ? 'update' : 'insert'); - }, - - update : function() { - var ed = this.editor, elm, name = document.forms[0].anchorName.value, attribName; - - if (!name || !/^[a-z][a-z0-9\-\_:\.]*$/i.test(name)) { - tinyMCEPopup.alert('advanced_dlg.anchor_invalid'); - return; - } - - tinyMCEPopup.restoreSelection(); - - if (this.action != 'update') - ed.selection.collapse(1); - - var aRule = ed.schema.getElementRule('a'); - if (!aRule || aRule.attributes.name) { - attribName = 'name'; - } else { - attribName = 'id'; - } - - elm = ed.dom.getParent(ed.selection.getNode(), 'A'); - if (elm) { - elm.setAttribute(attribName, name); - elm[attribName] = name; - ed.undoManager.add(); - } else { - // create with zero-sized nbsp so that in Webkit where anchor is on last line by itself caret cannot be placed after it - var attrs = {'class' : 'mceItemAnchor'}; - attrs[attribName] = name; - ed.execCommand('mceInsertContent', 0, ed.dom.createHTML('a', attrs, '\uFEFF')); - ed.nodeChanged(); - } - - tinyMCEPopup.close(); - } -}; - -tinyMCEPopup.onInit.add(AnchorDialog.init, AnchorDialog); diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/js/charmap.js b/common/static/js/vendor/tiny_mce/themes/advanced/js/charmap.js deleted file mode 100644 index cbb4172bac..0000000000 --- a/common/static/js/vendor/tiny_mce/themes/advanced/js/charmap.js +++ /dev/null @@ -1,363 +0,0 @@ -/** - * charmap.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -tinyMCEPopup.requireLangPack(); - -var charmap = [ - [' ', ' ', true, 'no-break space'], - ['&', '&', true, 'ampersand'], - ['"', '"', true, 'quotation mark'], -// finance - ['¢', '¢', true, 'cent sign'], - ['€', '€', true, 'euro sign'], - ['£', '£', true, 'pound sign'], - ['¥', '¥', true, 'yen sign'], -// signs - ['©', '©', true, 'copyright sign'], - ['®', '®', true, 'registered sign'], - ['™', '™', true, 'trade mark sign'], - ['‰', '‰', true, 'per mille sign'], - ['µ', 'µ', true, 'micro sign'], - ['·', '·', true, 'middle dot'], - ['•', '•', true, 'bullet'], - ['…', '…', true, 'three dot leader'], - ['′', '′', true, 'minutes / feet'], - ['″', '″', true, 'seconds / inches'], - ['§', '§', true, 'section sign'], - ['¶', '¶', true, 'paragraph sign'], - ['ß', 'ß', true, 'sharp s / ess-zed'], -// quotations - ['‹', '‹', true, 'single left-pointing angle quotation mark'], - ['›', '›', true, 'single right-pointing angle quotation mark'], - ['«', '«', true, 'left pointing guillemet'], - ['»', '»', true, 'right pointing guillemet'], - ['‘', '‘', true, 'left single quotation mark'], - ['’', '’', true, 'right single quotation mark'], - ['“', '“', true, 'left double quotation mark'], - ['”', '”', true, 'right double quotation mark'], - ['‚', '‚', true, 'single low-9 quotation mark'], - ['„', '„', true, 'double low-9 quotation mark'], - ['<', '<', true, 'less-than sign'], - ['>', '>', true, 'greater-than sign'], - ['≤', '≤', true, 'less-than or equal to'], - ['≥', '≥', true, 'greater-than or equal to'], - ['–', '–', true, 'en dash'], - ['—', '—', true, 'em dash'], - ['¯', '¯', true, 'macron'], - ['‾', '‾', true, 'overline'], - ['¤', '¤', true, 'currency sign'], - ['¦', '¦', true, 'broken bar'], - ['¨', '¨', true, 'diaeresis'], - ['¡', '¡', true, 'inverted exclamation mark'], - ['¿', '¿', true, 'turned question mark'], - ['ˆ', 'ˆ', true, 'circumflex accent'], - ['˜', '˜', true, 'small tilde'], - ['°', '°', true, 'degree sign'], - ['−', '−', true, 'minus sign'], - ['±', '±', true, 'plus-minus sign'], - ['÷', '÷', true, 'division sign'], - ['⁄', '⁄', true, 'fraction slash'], - ['×', '×', true, 'multiplication sign'], - ['¹', '¹', true, 'superscript one'], - ['²', '²', true, 'superscript two'], - ['³', '³', true, 'superscript three'], - ['¼', '¼', true, 'fraction one quarter'], - ['½', '½', true, 'fraction one half'], - ['¾', '¾', true, 'fraction three quarters'], -// math / logical - ['ƒ', 'ƒ', true, 'function / florin'], - ['∫', '∫', true, 'integral'], - ['∑', '∑', true, 'n-ary sumation'], - ['∞', '∞', true, 'infinity'], - ['√', '√', true, 'square root'], - ['∼', '∼', false,'similar to'], - ['≅', '≅', false,'approximately equal to'], - ['≈', '≈', true, 'almost equal to'], - ['≠', '≠', true, 'not equal to'], - ['≡', '≡', true, 'identical to'], - ['∈', '∈', false,'element of'], - ['∉', '∉', false,'not an element of'], - ['∋', '∋', false,'contains as member'], - ['∏', '∏', true, 'n-ary product'], - ['∧', '∧', false,'logical and'], - ['∨', '∨', false,'logical or'], - ['¬', '¬', true, 'not sign'], - ['∩', '∩', true, 'intersection'], - ['∪', '∪', false,'union'], - ['∂', '∂', true, 'partial differential'], - ['∀', '∀', false,'for all'], - ['∃', '∃', false,'there exists'], - ['∅', '∅', false,'diameter'], - ['∇', '∇', false,'backward difference'], - ['∗', '∗', false,'asterisk operator'], - ['∝', '∝', false,'proportional to'], - ['∠', '∠', false,'angle'], -// undefined - ['´', '´', true, 'acute accent'], - ['¸', '¸', true, 'cedilla'], - ['ª', 'ª', true, 'feminine ordinal indicator'], - ['º', 'º', true, 'masculine ordinal indicator'], - ['†', '†', true, 'dagger'], - ['‡', '‡', true, 'double dagger'], -// alphabetical special chars - ['À', 'À', true, 'A - grave'], - ['Á', 'Á', true, 'A - acute'], - ['Â', 'Â', true, 'A - circumflex'], - ['Ã', 'Ã', true, 'A - tilde'], - ['Ä', 'Ä', true, 'A - diaeresis'], - ['Å', 'Å', true, 'A - ring above'], - ['Æ', 'Æ', true, 'ligature AE'], - ['Ç', 'Ç', true, 'C - cedilla'], - ['È', 'È', true, 'E - grave'], - ['É', 'É', true, 'E - acute'], - ['Ê', 'Ê', true, 'E - circumflex'], - ['Ë', 'Ë', true, 'E - diaeresis'], - ['Ì', 'Ì', true, 'I - grave'], - ['Í', 'Í', true, 'I - acute'], - ['Î', 'Î', true, 'I - circumflex'], - ['Ï', 'Ï', true, 'I - diaeresis'], - ['Ð', 'Ð', true, 'ETH'], - ['Ñ', 'Ñ', true, 'N - tilde'], - ['Ò', 'Ò', true, 'O - grave'], - ['Ó', 'Ó', true, 'O - acute'], - ['Ô', 'Ô', true, 'O - circumflex'], - ['Õ', 'Õ', true, 'O - tilde'], - ['Ö', 'Ö', true, 'O - diaeresis'], - ['Ø', 'Ø', true, 'O - slash'], - ['Œ', 'Œ', true, 'ligature OE'], - ['Š', 'Š', true, 'S - caron'], - ['Ù', 'Ù', true, 'U - grave'], - ['Ú', 'Ú', true, 'U - acute'], - ['Û', 'Û', true, 'U - circumflex'], - ['Ü', 'Ü', true, 'U - diaeresis'], - ['Ý', 'Ý', true, 'Y - acute'], - ['Ÿ', 'Ÿ', true, 'Y - diaeresis'], - ['Þ', 'Þ', true, 'THORN'], - ['à', 'à', true, 'a - grave'], - ['á', 'á', true, 'a - acute'], - ['â', 'â', true, 'a - circumflex'], - ['ã', 'ã', true, 'a - tilde'], - ['ä', 'ä', true, 'a - diaeresis'], - ['å', 'å', true, 'a - ring above'], - ['æ', 'æ', true, 'ligature ae'], - ['ç', 'ç', true, 'c - cedilla'], - ['è', 'è', true, 'e - grave'], - ['é', 'é', true, 'e - acute'], - ['ê', 'ê', true, 'e - circumflex'], - ['ë', 'ë', true, 'e - diaeresis'], - ['ì', 'ì', true, 'i - grave'], - ['í', 'í', true, 'i - acute'], - ['î', 'î', true, 'i - circumflex'], - ['ï', 'ï', true, 'i - diaeresis'], - ['ð', 'ð', true, 'eth'], - ['ñ', 'ñ', true, 'n - tilde'], - ['ò', 'ò', true, 'o - grave'], - ['ó', 'ó', true, 'o - acute'], - ['ô', 'ô', true, 'o - circumflex'], - ['õ', 'õ', true, 'o - tilde'], - ['ö', 'ö', true, 'o - diaeresis'], - ['ø', 'ø', true, 'o slash'], - ['œ', 'œ', true, 'ligature oe'], - ['š', 'š', true, 's - caron'], - ['ù', 'ù', true, 'u - grave'], - ['ú', 'ú', true, 'u - acute'], - ['û', 'û', true, 'u - circumflex'], - ['ü', 'ü', true, 'u - diaeresis'], - ['ý', 'ý', true, 'y - acute'], - ['þ', 'þ', true, 'thorn'], - ['ÿ', 'ÿ', true, 'y - diaeresis'], - ['Α', 'Α', true, 'Alpha'], - ['Β', 'Β', true, 'Beta'], - ['Γ', 'Γ', true, 'Gamma'], - ['Δ', 'Δ', true, 'Delta'], - ['Ε', 'Ε', true, 'Epsilon'], - ['Ζ', 'Ζ', true, 'Zeta'], - ['Η', 'Η', true, 'Eta'], - ['Θ', 'Θ', true, 'Theta'], - ['Ι', 'Ι', true, 'Iota'], - ['Κ', 'Κ', true, 'Kappa'], - ['Λ', 'Λ', true, 'Lambda'], - ['Μ', 'Μ', true, 'Mu'], - ['Ν', 'Ν', true, 'Nu'], - ['Ξ', 'Ξ', true, 'Xi'], - ['Ο', 'Ο', true, 'Omicron'], - ['Π', 'Π', true, 'Pi'], - ['Ρ', 'Ρ', true, 'Rho'], - ['Σ', 'Σ', true, 'Sigma'], - ['Τ', 'Τ', true, 'Tau'], - ['Υ', 'Υ', true, 'Upsilon'], - ['Φ', 'Φ', true, 'Phi'], - ['Χ', 'Χ', true, 'Chi'], - ['Ψ', 'Ψ', true, 'Psi'], - ['Ω', 'Ω', true, 'Omega'], - ['α', 'α', true, 'alpha'], - ['β', 'β', true, 'beta'], - ['γ', 'γ', true, 'gamma'], - ['δ', 'δ', true, 'delta'], - ['ε', 'ε', true, 'epsilon'], - ['ζ', 'ζ', true, 'zeta'], - ['η', 'η', true, 'eta'], - ['θ', 'θ', true, 'theta'], - ['ι', 'ι', true, 'iota'], - ['κ', 'κ', true, 'kappa'], - ['λ', 'λ', true, 'lambda'], - ['μ', 'μ', true, 'mu'], - ['ν', 'ν', true, 'nu'], - ['ξ', 'ξ', true, 'xi'], - ['ο', 'ο', true, 'omicron'], - ['π', 'π', true, 'pi'], - ['ρ', 'ρ', true, 'rho'], - ['ς', 'ς', true, 'final sigma'], - ['σ', 'σ', true, 'sigma'], - ['τ', 'τ', true, 'tau'], - ['υ', 'υ', true, 'upsilon'], - ['φ', 'φ', true, 'phi'], - ['χ', 'χ', true, 'chi'], - ['ψ', 'ψ', true, 'psi'], - ['ω', 'ω', true, 'omega'], -// symbols - ['ℵ', 'ℵ', false,'alef symbol'], - ['ϖ', 'ϖ', false,'pi symbol'], - ['ℜ', 'ℜ', false,'real part symbol'], - ['ϑ','ϑ', false,'theta symbol'], - ['ϒ', 'ϒ', false,'upsilon - hook symbol'], - ['℘', '℘', false,'Weierstrass p'], - ['ℑ', 'ℑ', false,'imaginary part'], -// arrows - ['←', '←', true, 'leftwards arrow'], - ['↑', '↑', true, 'upwards arrow'], - ['→', '→', true, 'rightwards arrow'], - ['↓', '↓', true, 'downwards arrow'], - ['↔', '↔', true, 'left right arrow'], - ['↵', '↵', false,'carriage return'], - ['⇐', '⇐', false,'leftwards double arrow'], - ['⇑', '⇑', false,'upwards double arrow'], - ['⇒', '⇒', false,'rightwards double arrow'], - ['⇓', '⇓', false,'downwards double arrow'], - ['⇔', '⇔', false,'left right double arrow'], - ['∴', '∴', false,'therefore'], - ['⊂', '⊂', false,'subset of'], - ['⊃', '⊃', false,'superset of'], - ['⊄', '⊄', false,'not a subset of'], - ['⊆', '⊆', false,'subset of or equal to'], - ['⊇', '⊇', false,'superset of or equal to'], - ['⊕', '⊕', false,'circled plus'], - ['⊗', '⊗', false,'circled times'], - ['⊥', '⊥', false,'perpendicular'], - ['⋅', '⋅', false,'dot operator'], - ['⌈', '⌈', false,'left ceiling'], - ['⌉', '⌉', false,'right ceiling'], - ['⌊', '⌊', false,'left floor'], - ['⌋', '⌋', false,'right floor'], - ['⟨', '〈', false,'left-pointing angle bracket'], - ['⟩', '〉', false,'right-pointing angle bracket'], - ['◊', '◊', true, 'lozenge'], - ['♠', '♠', true, 'black spade suit'], - ['♣', '♣', true, 'black club suit'], - ['♥', '♥', true, 'black heart suit'], - ['♦', '♦', true, 'black diamond suit'], - [' ', ' ', false,'en space'], - [' ', ' ', false,'em space'], - [' ', ' ', false,'thin space'], - ['‌', '‌', false,'zero width non-joiner'], - ['‍', '‍', false,'zero width joiner'], - ['‎', '‎', false,'left-to-right mark'], - ['‏', '‏', false,'right-to-left mark'], - ['­', '­', false,'soft hyphen'] -]; - -tinyMCEPopup.onInit.add(function() { - tinyMCEPopup.dom.setHTML('charmapView', renderCharMapHTML()); - addKeyboardNavigation(); -}); - -function addKeyboardNavigation(){ - var tableElm, cells, settings; - - cells = tinyMCEPopup.dom.select("a.charmaplink", "charmapgroup"); - - settings ={ - root: "charmapgroup", - items: cells - }; - cells[0].tabindex=0; - tinyMCEPopup.dom.addClass(cells[0], "mceFocus"); - if (tinymce.isGecko) { - cells[0].focus(); - } else { - setTimeout(function(){ - cells[0].focus(); - }, 100); - } - tinyMCEPopup.editor.windowManager.createInstance('tinymce.ui.KeyboardNavigation', settings, tinyMCEPopup.dom); -} - -function renderCharMapHTML() { - var charsPerRow = 20, tdWidth=20, tdHeight=20, i; - var html = '
'+ - ''; - var cols=-1; - - for (i=0; i' - + '' - + charmap[i][1] - + ''; - if ((cols+1) % charsPerRow == 0) - html += ''; - } - } - - if (cols % charsPerRow > 0) { - var padd = charsPerRow - (cols % charsPerRow); - for (var i=0; i '; - } - - html += '
'; - html = html.replace(/<\/tr>/g, ''); - - return html; -} - -function insertChar(chr) { - tinyMCEPopup.execCommand('mceInsertContent', false, '&#' + chr + ';'); - - // Refocus in window - if (tinyMCEPopup.isWindow) - window.focus(); - - tinyMCEPopup.editor.focus(); - tinyMCEPopup.close(); -} - -function previewChar(codeA, codeB, codeN) { - var elmA = document.getElementById('codeA'); - var elmB = document.getElementById('codeB'); - var elmV = document.getElementById('codeV'); - var elmN = document.getElementById('codeN'); - - if (codeA=='#160;') { - elmV.innerHTML = '__'; - } else { - elmV.innerHTML = '&' + codeA; - } - - elmB.innerHTML = '&' + codeA; - elmA.innerHTML = '&' + codeB; - elmN.innerHTML = codeN; -} diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/js/color_picker.js b/common/static/js/vendor/tiny_mce/themes/advanced/js/color_picker.js deleted file mode 100644 index cc891c1711..0000000000 --- a/common/static/js/vendor/tiny_mce/themes/advanced/js/color_picker.js +++ /dev/null @@ -1,345 +0,0 @@ -tinyMCEPopup.requireLangPack(); - -var detail = 50, strhex = "0123456789abcdef", i, isMouseDown = false, isMouseOver = false; - -var colors = [ - "#000000","#000033","#000066","#000099","#0000cc","#0000ff","#330000","#330033", - "#330066","#330099","#3300cc","#3300ff","#660000","#660033","#660066","#660099", - "#6600cc","#6600ff","#990000","#990033","#990066","#990099","#9900cc","#9900ff", - "#cc0000","#cc0033","#cc0066","#cc0099","#cc00cc","#cc00ff","#ff0000","#ff0033", - "#ff0066","#ff0099","#ff00cc","#ff00ff","#003300","#003333","#003366","#003399", - "#0033cc","#0033ff","#333300","#333333","#333366","#333399","#3333cc","#3333ff", - "#663300","#663333","#663366","#663399","#6633cc","#6633ff","#993300","#993333", - "#993366","#993399","#9933cc","#9933ff","#cc3300","#cc3333","#cc3366","#cc3399", - "#cc33cc","#cc33ff","#ff3300","#ff3333","#ff3366","#ff3399","#ff33cc","#ff33ff", - "#006600","#006633","#006666","#006699","#0066cc","#0066ff","#336600","#336633", - "#336666","#336699","#3366cc","#3366ff","#666600","#666633","#666666","#666699", - "#6666cc","#6666ff","#996600","#996633","#996666","#996699","#9966cc","#9966ff", - "#cc6600","#cc6633","#cc6666","#cc6699","#cc66cc","#cc66ff","#ff6600","#ff6633", - "#ff6666","#ff6699","#ff66cc","#ff66ff","#009900","#009933","#009966","#009999", - "#0099cc","#0099ff","#339900","#339933","#339966","#339999","#3399cc","#3399ff", - "#669900","#669933","#669966","#669999","#6699cc","#6699ff","#999900","#999933", - "#999966","#999999","#9999cc","#9999ff","#cc9900","#cc9933","#cc9966","#cc9999", - "#cc99cc","#cc99ff","#ff9900","#ff9933","#ff9966","#ff9999","#ff99cc","#ff99ff", - "#00cc00","#00cc33","#00cc66","#00cc99","#00cccc","#00ccff","#33cc00","#33cc33", - "#33cc66","#33cc99","#33cccc","#33ccff","#66cc00","#66cc33","#66cc66","#66cc99", - "#66cccc","#66ccff","#99cc00","#99cc33","#99cc66","#99cc99","#99cccc","#99ccff", - "#cccc00","#cccc33","#cccc66","#cccc99","#cccccc","#ccccff","#ffcc00","#ffcc33", - "#ffcc66","#ffcc99","#ffcccc","#ffccff","#00ff00","#00ff33","#00ff66","#00ff99", - "#00ffcc","#00ffff","#33ff00","#33ff33","#33ff66","#33ff99","#33ffcc","#33ffff", - "#66ff00","#66ff33","#66ff66","#66ff99","#66ffcc","#66ffff","#99ff00","#99ff33", - "#99ff66","#99ff99","#99ffcc","#99ffff","#ccff00","#ccff33","#ccff66","#ccff99", - "#ccffcc","#ccffff","#ffff00","#ffff33","#ffff66","#ffff99","#ffffcc","#ffffff" -]; - -var named = { - '#F0F8FF':'Alice Blue','#FAEBD7':'Antique White','#00FFFF':'Aqua','#7FFFD4':'Aquamarine','#F0FFFF':'Azure','#F5F5DC':'Beige', - '#FFE4C4':'Bisque','#000000':'Black','#FFEBCD':'Blanched Almond','#0000FF':'Blue','#8A2BE2':'Blue Violet','#A52A2A':'Brown', - '#DEB887':'Burly Wood','#5F9EA0':'Cadet Blue','#7FFF00':'Chartreuse','#D2691E':'Chocolate','#FF7F50':'Coral','#6495ED':'Cornflower Blue', - '#FFF8DC':'Cornsilk','#DC143C':'Crimson','#00FFFF':'Cyan','#00008B':'Dark Blue','#008B8B':'Dark Cyan','#B8860B':'Dark Golden Rod', - '#A9A9A9':'Dark Gray','#A9A9A9':'Dark Grey','#006400':'Dark Green','#BDB76B':'Dark Khaki','#8B008B':'Dark Magenta','#556B2F':'Dark Olive Green', - '#FF8C00':'Darkorange','#9932CC':'Dark Orchid','#8B0000':'Dark Red','#E9967A':'Dark Salmon','#8FBC8F':'Dark Sea Green','#483D8B':'Dark Slate Blue', - '#2F4F4F':'Dark Slate Gray','#2F4F4F':'Dark Slate Grey','#00CED1':'Dark Turquoise','#9400D3':'Dark Violet','#FF1493':'Deep Pink','#00BFFF':'Deep Sky Blue', - '#696969':'Dim Gray','#696969':'Dim Grey','#1E90FF':'Dodger Blue','#B22222':'Fire Brick','#FFFAF0':'Floral White','#228B22':'Forest Green', - '#FF00FF':'Fuchsia','#DCDCDC':'Gainsboro','#F8F8FF':'Ghost White','#FFD700':'Gold','#DAA520':'Golden Rod','#808080':'Gray','#808080':'Grey', - '#008000':'Green','#ADFF2F':'Green Yellow','#F0FFF0':'Honey Dew','#FF69B4':'Hot Pink','#CD5C5C':'Indian Red','#4B0082':'Indigo','#FFFFF0':'Ivory', - '#F0E68C':'Khaki','#E6E6FA':'Lavender','#FFF0F5':'Lavender Blush','#7CFC00':'Lawn Green','#FFFACD':'Lemon Chiffon','#ADD8E6':'Light Blue', - '#F08080':'Light Coral','#E0FFFF':'Light Cyan','#FAFAD2':'Light Golden Rod Yellow','#D3D3D3':'Light Gray','#D3D3D3':'Light Grey','#90EE90':'Light Green', - '#FFB6C1':'Light Pink','#FFA07A':'Light Salmon','#20B2AA':'Light Sea Green','#87CEFA':'Light Sky Blue','#778899':'Light Slate Gray','#778899':'Light Slate Grey', - '#B0C4DE':'Light Steel Blue','#FFFFE0':'Light Yellow','#00FF00':'Lime','#32CD32':'Lime Green','#FAF0E6':'Linen','#FF00FF':'Magenta','#800000':'Maroon', - '#66CDAA':'Medium Aqua Marine','#0000CD':'Medium Blue','#BA55D3':'Medium Orchid','#9370D8':'Medium Purple','#3CB371':'Medium Sea Green','#7B68EE':'Medium Slate Blue', - '#00FA9A':'Medium Spring Green','#48D1CC':'Medium Turquoise','#C71585':'Medium Violet Red','#191970':'Midnight Blue','#F5FFFA':'Mint Cream','#FFE4E1':'Misty Rose','#FFE4B5':'Moccasin', - '#FFDEAD':'Navajo White','#000080':'Navy','#FDF5E6':'Old Lace','#808000':'Olive','#6B8E23':'Olive Drab','#FFA500':'Orange','#FF4500':'Orange Red','#DA70D6':'Orchid', - '#EEE8AA':'Pale Golden Rod','#98FB98':'Pale Green','#AFEEEE':'Pale Turquoise','#D87093':'Pale Violet Red','#FFEFD5':'Papaya Whip','#FFDAB9':'Peach Puff', - '#CD853F':'Peru','#FFC0CB':'Pink','#DDA0DD':'Plum','#B0E0E6':'Powder Blue','#800080':'Purple','#FF0000':'Red','#BC8F8F':'Rosy Brown','#4169E1':'Royal Blue', - '#8B4513':'Saddle Brown','#FA8072':'Salmon','#F4A460':'Sandy Brown','#2E8B57':'Sea Green','#FFF5EE':'Sea Shell','#A0522D':'Sienna','#C0C0C0':'Silver', - '#87CEEB':'Sky Blue','#6A5ACD':'Slate Blue','#708090':'Slate Gray','#708090':'Slate Grey','#FFFAFA':'Snow','#00FF7F':'Spring Green', - '#4682B4':'Steel Blue','#D2B48C':'Tan','#008080':'Teal','#D8BFD8':'Thistle','#FF6347':'Tomato','#40E0D0':'Turquoise','#EE82EE':'Violet', - '#F5DEB3':'Wheat','#FFFFFF':'White','#F5F5F5':'White Smoke','#FFFF00':'Yellow','#9ACD32':'Yellow Green' -}; - -var namedLookup = {}; - -function init() { - var inputColor = convertRGBToHex(tinyMCEPopup.getWindowArg('input_color')), key, value; - - tinyMCEPopup.resizeToInnerSize(); - - generatePicker(); - generateWebColors(); - generateNamedColors(); - - if (inputColor) { - changeFinalColor(inputColor); - - col = convertHexToRGB(inputColor); - - if (col) - updateLight(col.r, col.g, col.b); - } - - for (key in named) { - value = named[key]; - namedLookup[value.replace(/\s+/, '').toLowerCase()] = key.replace(/#/, '').toLowerCase(); - } -} - -function toHexColor(color) { - var matches, red, green, blue, toInt = parseInt; - - function hex(value) { - value = parseInt(value).toString(16); - - return value.length > 1 ? value : '0' + value; // Padd with leading zero - }; - - color = tinymce.trim(color); - color = color.replace(/^[#]/, '').toLowerCase(); // remove leading '#' - color = namedLookup[color] || color; - - matches = /^rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)$/.exec(color); - - if (matches) { - red = toInt(matches[1]); - green = toInt(matches[2]); - blue = toInt(matches[3]); - } else { - matches = /^([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/.exec(color); - - if (matches) { - red = toInt(matches[1], 16); - green = toInt(matches[2], 16); - blue = toInt(matches[3], 16); - } else { - matches = /^([0-9a-f])([0-9a-f])([0-9a-f])$/.exec(color); - - if (matches) { - red = toInt(matches[1] + matches[1], 16); - green = toInt(matches[2] + matches[2], 16); - blue = toInt(matches[3] + matches[3], 16); - } else { - return ''; - } - } - } - - return '#' + hex(red) + hex(green) + hex(blue); -} - -function insertAction() { - var color = document.getElementById("color").value, f = tinyMCEPopup.getWindowArg('func'); - - var hexColor = toHexColor(color); - - if (hexColor === '') { - var text = tinyMCEPopup.editor.getLang('advanced_dlg.invalid_color_value'); - tinyMCEPopup.alert(text + ': ' + color); - } - else { - tinyMCEPopup.restoreSelection(); - - if (f) - f(hexColor); - - tinyMCEPopup.close(); - } -} - -function showColor(color, name) { - if (name) - document.getElementById("colorname").innerHTML = name; - - document.getElementById("preview").style.backgroundColor = color; - document.getElementById("color").value = color.toUpperCase(); -} - -function convertRGBToHex(col) { - var re = new RegExp("rgb\\s*\\(\\s*([0-9]+).*,\\s*([0-9]+).*,\\s*([0-9]+).*\\)", "gi"); - - if (!col) - return col; - - var rgb = col.replace(re, "$1,$2,$3").split(','); - if (rgb.length == 3) { - r = parseInt(rgb[0]).toString(16); - g = parseInt(rgb[1]).toString(16); - b = parseInt(rgb[2]).toString(16); - - r = r.length == 1 ? '0' + r : r; - g = g.length == 1 ? '0' + g : g; - b = b.length == 1 ? '0' + b : b; - - return "#" + r + g + b; - } - - return col; -} - -function convertHexToRGB(col) { - if (col.indexOf('#') != -1) { - col = col.replace(new RegExp('[^0-9A-F]', 'gi'), ''); - - r = parseInt(col.substring(0, 2), 16); - g = parseInt(col.substring(2, 4), 16); - b = parseInt(col.substring(4, 6), 16); - - return {r : r, g : g, b : b}; - } - - return null; -} - -function generatePicker() { - var el = document.getElementById('light'), h = '', i; - - for (i = 0; i < detail; i++){ - h += '
'; - } - - el.innerHTML = h; -} - -function generateWebColors() { - var el = document.getElementById('webcolors'), h = '', i; - - if (el.className == 'generated') - return; - - // TODO: VoiceOver doesn't seem to support legend as a label referenced by labelledby. - h += '
' - + ''; - - for (i=0; i' - + ''; - if (tinyMCEPopup.editor.forcedHighContrastMode) { - h += ''; - } - h += ''; - h += ''; - if ((i+1) % 18 == 0) - h += ''; - } - - h += '
'; - - el.innerHTML = h; - el.className = 'generated'; - - paintCanvas(el); - enableKeyboardNavigation(el.firstChild); -} - -function paintCanvas(el) { - tinyMCEPopup.getWin().tinymce.each(tinyMCEPopup.dom.select('canvas.mceColorSwatch', el), function(canvas) { - var context; - if (canvas.getContext && (context = canvas.getContext("2d"))) { - context.fillStyle = canvas.getAttribute('data-color'); - context.fillRect(0, 0, 10, 10); - } - }); -} -function generateNamedColors() { - var el = document.getElementById('namedcolors'), h = '', n, v, i = 0; - - if (el.className == 'generated') - return; - - for (n in named) { - v = named[n]; - h += ''; - if (tinyMCEPopup.editor.forcedHighContrastMode) { - h += ''; - } - h += ''; - h += ''; - i++; - } - - el.innerHTML = h; - el.className = 'generated'; - - paintCanvas(el); - enableKeyboardNavigation(el); -} - -function enableKeyboardNavigation(el) { - tinyMCEPopup.editor.windowManager.createInstance('tinymce.ui.KeyboardNavigation', { - root: el, - items: tinyMCEPopup.dom.select('a', el) - }, tinyMCEPopup.dom); -} - -function dechex(n) { - return strhex.charAt(Math.floor(n / 16)) + strhex.charAt(n % 16); -} - -function computeColor(e) { - var x, y, partWidth, partDetail, imHeight, r, g, b, coef, i, finalCoef, finalR, finalG, finalB, pos = tinyMCEPopup.dom.getPos(e.target); - - x = e.offsetX ? e.offsetX : (e.target ? e.clientX - pos.x : 0); - y = e.offsetY ? e.offsetY : (e.target ? e.clientY - pos.y : 0); - - partWidth = document.getElementById('colors').width / 6; - partDetail = detail / 2; - imHeight = document.getElementById('colors').height; - - r = (x >= 0)*(x < partWidth)*255 + (x >= partWidth)*(x < 2*partWidth)*(2*255 - x * 255 / partWidth) + (x >= 4*partWidth)*(x < 5*partWidth)*(-4*255 + x * 255 / partWidth) + (x >= 5*partWidth)*(x < 6*partWidth)*255; - g = (x >= 0)*(x < partWidth)*(x * 255 / partWidth) + (x >= partWidth)*(x < 3*partWidth)*255 + (x >= 3*partWidth)*(x < 4*partWidth)*(4*255 - x * 255 / partWidth); - b = (x >= 2*partWidth)*(x < 3*partWidth)*(-2*255 + x * 255 / partWidth) + (x >= 3*partWidth)*(x < 5*partWidth)*255 + (x >= 5*partWidth)*(x < 6*partWidth)*(6*255 - x * 255 / partWidth); - - coef = (imHeight - y) / imHeight; - r = 128 + (r - 128) * coef; - g = 128 + (g - 128) * coef; - b = 128 + (b - 128) * coef; - - changeFinalColor('#' + dechex(r) + dechex(g) + dechex(b)); - updateLight(r, g, b); -} - -function updateLight(r, g, b) { - var i, partDetail = detail / 2, finalCoef, finalR, finalG, finalB, color; - - for (i=0; i=0) && (i'); - }, - - init : function() { - var f = document.forms[0], ed = tinyMCEPopup.editor; - - // Setup browse button - document.getElementById('srcbrowsercontainer').innerHTML = getBrowserHTML('srcbrowser','src','image','theme_advanced_image'); - if (isVisible('srcbrowser')) - document.getElementById('src').style.width = '180px'; - - e = ed.selection.getNode(); - - this.fillFileList('image_list', tinyMCEPopup.getParam('external_image_list', 'tinyMCEImageList')); - - if (e.nodeName == 'IMG') { - f.src.value = ed.dom.getAttrib(e, 'src'); - f.alt.value = ed.dom.getAttrib(e, 'alt'); - f.border.value = this.getAttrib(e, 'border'); - f.vspace.value = this.getAttrib(e, 'vspace'); - f.hspace.value = this.getAttrib(e, 'hspace'); - f.width.value = ed.dom.getAttrib(e, 'width'); - f.height.value = ed.dom.getAttrib(e, 'height'); - f.insert.value = ed.getLang('update'); - this.styleVal = ed.dom.getAttrib(e, 'style'); - selectByValue(f, 'image_list', f.src.value); - selectByValue(f, 'align', this.getAttrib(e, 'align')); - this.updateStyle(); - } - }, - - fillFileList : function(id, l) { - var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl; - - l = typeof(l) === 'function' ? l() : window[l]; - - if (l && l.length > 0) { - lst.options[lst.options.length] = new Option('', ''); - - tinymce.each(l, function(o) { - lst.options[lst.options.length] = new Option(o[0], o[1]); - }); - } else - dom.remove(dom.getParent(id, 'tr')); - }, - - update : function() { - var f = document.forms[0], nl = f.elements, ed = tinyMCEPopup.editor, args = {}, el; - - tinyMCEPopup.restoreSelection(); - - if (f.src.value === '') { - if (ed.selection.getNode().nodeName == 'IMG') { - ed.dom.remove(ed.selection.getNode()); - ed.execCommand('mceRepaint'); - } - - tinyMCEPopup.close(); - return; - } - - if (!ed.settings.inline_styles) { - args = tinymce.extend(args, { - vspace : nl.vspace.value, - hspace : nl.hspace.value, - border : nl.border.value, - align : getSelectValue(f, 'align') - }); - } else - args.style = this.styleVal; - - tinymce.extend(args, { - src : f.src.value.replace(/ /g, '%20'), - alt : f.alt.value, - width : f.width.value, - height : f.height.value - }); - - el = ed.selection.getNode(); - - if (el && el.nodeName == 'IMG') { - ed.dom.setAttribs(el, args); - tinyMCEPopup.editor.execCommand('mceRepaint'); - tinyMCEPopup.editor.focus(); - } else { - tinymce.each(args, function(value, name) { - if (value === "") { - delete args[name]; - } - }); - - ed.execCommand('mceInsertContent', false, tinyMCEPopup.editor.dom.createHTML('img', args), {skip_undo : 1}); - ed.undoManager.add(); - } - - tinyMCEPopup.close(); - }, - - updateStyle : function() { - var dom = tinyMCEPopup.dom, st = {}, v, f = document.forms[0]; - - if (tinyMCEPopup.editor.settings.inline_styles) { - tinymce.each(tinyMCEPopup.dom.parseStyle(this.styleVal), function(value, key) { - st[key] = value; - }); - - // Handle align - v = getSelectValue(f, 'align'); - if (v) { - if (v == 'left' || v == 'right') { - st['float'] = v; - delete st['vertical-align']; - } else { - st['vertical-align'] = v; - delete st['float']; - } - } else { - delete st['float']; - delete st['vertical-align']; - } - - // Handle border - v = f.border.value; - if (v || v == '0') { - if (v == '0') - st['border'] = '0'; - else - st['border'] = v + 'px solid black'; - } else - delete st['border']; - - // Handle hspace - v = f.hspace.value; - if (v) { - delete st['margin']; - st['margin-left'] = v + 'px'; - st['margin-right'] = v + 'px'; - } else { - delete st['margin-left']; - delete st['margin-right']; - } - - // Handle vspace - v = f.vspace.value; - if (v) { - delete st['margin']; - st['margin-top'] = v + 'px'; - st['margin-bottom'] = v + 'px'; - } else { - delete st['margin-top']; - delete st['margin-bottom']; - } - - // Merge - st = tinyMCEPopup.dom.parseStyle(dom.serializeStyle(st), 'img'); - this.styleVal = dom.serializeStyle(st, 'img'); - } - }, - - getAttrib : function(e, at) { - var ed = tinyMCEPopup.editor, dom = ed.dom, v, v2; - - if (ed.settings.inline_styles) { - switch (at) { - case 'align': - if (v = dom.getStyle(e, 'float')) - return v; - - if (v = dom.getStyle(e, 'vertical-align')) - return v; - - break; - - case 'hspace': - v = dom.getStyle(e, 'margin-left') - v2 = dom.getStyle(e, 'margin-right'); - if (v && v == v2) - return parseInt(v.replace(/[^0-9]/g, '')); - - break; - - case 'vspace': - v = dom.getStyle(e, 'margin-top') - v2 = dom.getStyle(e, 'margin-bottom'); - if (v && v == v2) - return parseInt(v.replace(/[^0-9]/g, '')); - - break; - - case 'border': - v = 0; - - tinymce.each(['top', 'right', 'bottom', 'left'], function(sv) { - sv = dom.getStyle(e, 'border-' + sv + '-width'); - - // False or not the same as prev - if (!sv || (sv != v && v !== 0)) { - v = 0; - return false; - } - - if (sv) - v = sv; - }); - - if (v) - return parseInt(v.replace(/[^0-9]/g, '')); - - break; - } - } - - if (v = dom.getAttrib(e, at)) - return v; - - return ''; - }, - - resetImageData : function() { - var f = document.forms[0]; - - f.width.value = f.height.value = ""; - }, - - updateImageData : function() { - var f = document.forms[0], t = ImageDialog; - - if (f.width.value == "") - f.width.value = t.preloadImg.width; - - if (f.height.value == "") - f.height.value = t.preloadImg.height; - }, - - getImageData : function() { - var f = document.forms[0]; - - this.preloadImg = new Image(); - this.preloadImg.onload = this.updateImageData; - this.preloadImg.onerror = this.resetImageData; - this.preloadImg.src = tinyMCEPopup.editor.documentBaseURI.toAbsolute(f.src.value); - } -}; - -ImageDialog.preInit(); -tinyMCEPopup.onInit.add(ImageDialog.init, ImageDialog); diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/js/link.js b/common/static/js/vendor/tiny_mce/themes/advanced/js/link.js deleted file mode 100644 index b08b2ba9c2..0000000000 --- a/common/static/js/vendor/tiny_mce/themes/advanced/js/link.js +++ /dev/null @@ -1,159 +0,0 @@ -tinyMCEPopup.requireLangPack(); - -var LinkDialog = { - preInit : function() { - var url; - - if (url = tinyMCEPopup.getParam("external_link_list_url")) - document.write(''); - }, - - init : function() { - var f = document.forms[0], ed = tinyMCEPopup.editor; - - // Setup browse button - document.getElementById('hrefbrowsercontainer').innerHTML = getBrowserHTML('hrefbrowser', 'href', 'file', 'theme_advanced_link'); - if (isVisible('hrefbrowser')) - document.getElementById('href').style.width = '180px'; - - this.fillClassList('class_list'); - this.fillFileList('link_list', 'tinyMCELinkList'); - this.fillTargetList('target_list'); - - if (e = ed.dom.getParent(ed.selection.getNode(), 'A')) { - f.href.value = ed.dom.getAttrib(e, 'href'); - f.linktitle.value = ed.dom.getAttrib(e, 'title'); - f.insert.value = ed.getLang('update'); - selectByValue(f, 'link_list', f.href.value); - selectByValue(f, 'target_list', ed.dom.getAttrib(e, 'target')); - selectByValue(f, 'class_list', ed.dom.getAttrib(e, 'class')); - } - }, - - update : function() { - var f = document.forms[0], ed = tinyMCEPopup.editor, e, b, href = f.href.value.replace(/ /g, '%20'); - - tinyMCEPopup.restoreSelection(); - e = ed.dom.getParent(ed.selection.getNode(), 'A'); - - // Remove element if there is no href - if (!f.href.value) { - if (e) { - b = ed.selection.getBookmark(); - ed.dom.remove(e, 1); - ed.selection.moveToBookmark(b); - tinyMCEPopup.execCommand("mceEndUndoLevel"); - tinyMCEPopup.close(); - return; - } - } - - // Create new anchor elements - if (e == null) { - ed.getDoc().execCommand("unlink", false, null); - tinyMCEPopup.execCommand("mceInsertLink", false, "#mce_temp_url#", {skip_undo : 1}); - - tinymce.each(ed.dom.select("a"), function(n) { - if (ed.dom.getAttrib(n, 'href') == '#mce_temp_url#') { - e = n; - - ed.dom.setAttribs(e, { - href : href, - title : f.linktitle.value, - target : f.target_list ? getSelectValue(f, "target_list") : null, - 'class' : f.class_list ? getSelectValue(f, "class_list") : null - }); - } - }); - } else { - ed.dom.setAttribs(e, { - href : href, - title : f.linktitle.value - }); - - if (f.target_list) { - ed.dom.setAttrib(e, 'target', getSelectValue(f, "target_list")); - } - - if (f.class_list) { - ed.dom.setAttrib(e, 'class', getSelectValue(f, "class_list")); - } - } - - // Don't move caret if selection was image - if (e.childNodes.length != 1 || e.firstChild.nodeName != 'IMG') { - ed.focus(); - ed.selection.select(e); - ed.selection.collapse(0); - tinyMCEPopup.storeSelection(); - } - - tinyMCEPopup.execCommand("mceEndUndoLevel"); - tinyMCEPopup.close(); - }, - - checkPrefix : function(n) { - if (n.value && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_email'))) - n.value = 'mailto:' + n.value; - - if (/^\s*www\./i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_external'))) - n.value = 'http://' + n.value; - }, - - fillFileList : function(id, l) { - var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl; - - l = window[l]; - - if (l && l.length > 0) { - lst.options[lst.options.length] = new Option('', ''); - - tinymce.each(l, function(o) { - lst.options[lst.options.length] = new Option(o[0], o[1]); - }); - } else - dom.remove(dom.getParent(id, 'tr')); - }, - - fillClassList : function(id) { - var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl; - - if (v = tinyMCEPopup.getParam('theme_advanced_styles')) { - cl = []; - - tinymce.each(v.split(';'), function(v) { - var p = v.split('='); - - cl.push({'title' : p[0], 'class' : p[1]}); - }); - } else - cl = tinyMCEPopup.editor.dom.getClasses(); - - if (cl.length > 0) { - lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), ''); - - tinymce.each(cl, function(o) { - lst.options[lst.options.length] = new Option(o.title || o['class'], o['class']); - }); - } else - dom.remove(dom.getParent(id, 'tr')); - }, - - fillTargetList : function(id) { - var dom = tinyMCEPopup.dom, lst = dom.get(id), v; - - lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), ''); - lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('advanced_dlg.link_target_same'), '_self'); - lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('advanced_dlg.link_target_blank'), '_blank'); - - if (v = tinyMCEPopup.getParam('theme_advanced_link_targets')) { - tinymce.each(v.split(','), function(v) { - v = v.split('='); - lst.options[lst.options.length] = new Option(v[0], v[1]); - }); - } - } -}; - -LinkDialog.preInit(); -tinyMCEPopup.onInit.add(LinkDialog.init, LinkDialog); diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/js/source_editor.js b/common/static/js/vendor/tiny_mce/themes/advanced/js/source_editor.js deleted file mode 100644 index d4179371a0..0000000000 --- a/common/static/js/vendor/tiny_mce/themes/advanced/js/source_editor.js +++ /dev/null @@ -1,78 +0,0 @@ -tinyMCEPopup.requireLangPack(); -tinyMCEPopup.onInit.add(onLoadInit); - -function saveContent() { - tinyMCEPopup.editor.setContent(document.getElementById('htmlSource').value, {source_view : true}); - tinyMCEPopup.close(); -} - -function onLoadInit() { - tinyMCEPopup.resizeToInnerSize(); - - // Remove Gecko spellchecking - if (tinymce.isGecko) - document.body.spellcheck = tinyMCEPopup.editor.getParam("gecko_spellcheck"); - - document.getElementById('htmlSource').value = tinyMCEPopup.editor.getContent({source_view : true}); - - if (tinyMCEPopup.editor.getParam("theme_advanced_source_editor_wrap", true)) { - turnWrapOn(); - document.getElementById('wraped').checked = true; - } - - resizeInputs(); -} - -function setWrap(val) { - var v, n, s = document.getElementById('htmlSource'); - - s.wrap = val; - - if (!tinymce.isIE) { - v = s.value; - n = s.cloneNode(false); - n.setAttribute("wrap", val); - s.parentNode.replaceChild(n, s); - n.value = v; - } -} - -function setWhiteSpaceCss(value) { - var el = document.getElementById('htmlSource'); - tinymce.DOM.setStyle(el, 'white-space', value); -} - -function turnWrapOff() { - if (tinymce.isWebKit) { - setWhiteSpaceCss('pre'); - } else { - setWrap('off'); - } -} - -function turnWrapOn() { - if (tinymce.isWebKit) { - setWhiteSpaceCss('pre-wrap'); - } else { - setWrap('soft'); - } -} - -function toggleWordWrap(elm) { - if (elm.checked) { - turnWrapOn(); - } else { - turnWrapOff(); - } -} - -function resizeInputs() { - var vp = tinyMCEPopup.dom.getViewPort(window), el; - - el = document.getElementById('htmlSource'); - - if (el) { - el.style.width = (vp.w - 20) + 'px'; - el.style.height = (vp.h - 65) + 'px'; - } -} diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/langs/en.js b/common/static/js/vendor/tiny_mce/themes/advanced/langs/en.js deleted file mode 100644 index 6e58481874..0000000000 --- a/common/static/js/vendor/tiny_mce/themes/advanced/langs/en.js +++ /dev/null @@ -1 +0,0 @@ -tinyMCE.addI18n('en.advanced',{"underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)",dd:"Definition Description",dt:"Definition Term ",samp:"Code Sample",code:"Code",blockquote:"Block Quote",h6:"Heading 6",h5:"Heading 5",h4:"Heading 4",h3:"Heading 3",h2:"Heading 2",h1:"Heading 1",pre:"Preformatted",address:"Address",div:"DIV",paragraph:"Paragraph",block:"Format",fontdefault:"Font Family","font_size":"Font Size","style_select":"Styles","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","more_colors":"More Colors...","toolbar_focus":"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",newdocument:"Are you sure you want clear all contents?",path:"Path","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","blockquote_desc":"Block Quote","help_desc":"Help","newdocument_desc":"New Document","image_props_desc":"Image Properties","paste_desc":"Paste (Ctrl+V)","copy_desc":"Copy (Ctrl+C)","cut_desc":"Cut (Ctrl+X)","anchor_desc":"Insert/Edit Anchor","visualaid_desc":"show/Hide Guidelines/Invisible Elements","charmap_desc":"Insert Special Character","backcolor_desc":"Select Background Color","forecolor_desc":"Select Text Color","custom1_desc":"Your Custom Description Here","removeformat_desc":"Remove Formatting","hr_desc":"Insert Horizontal Line","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Edit HTML Source","cleanup_desc":"Cleanup Messy Code","image_desc":"Insert/Edit Image","unlink_desc":"Unlink","link_desc":"Insert/Edit Link","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","indent_desc":"Increase Indent","outdent_desc":"Decrease Indent","numlist_desc":"Insert/Remove Numbered List","bullist_desc":"Insert/Remove Bulleted List","justifyfull_desc":"Align Full","justifyright_desc":"Align Right","justifycenter_desc":"Align Center","justifyleft_desc":"Align Left","striketrough_desc":"Strikethrough","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/langs/en_dlg.js b/common/static/js/vendor/tiny_mce/themes/advanced/langs/en_dlg.js deleted file mode 100644 index 50cd87e3d0..0000000000 --- a/common/static/js/vendor/tiny_mce/themes/advanced/langs/en_dlg.js +++ /dev/null @@ -1 +0,0 @@ -tinyMCE.addI18n('en.advanced_dlg', {"link_list":"Link List","link_is_external":"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?","link_is_email":"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?","link_titlefield":"Title","link_target_blank":"Open Link in a New Window","link_target_same":"Open Link in the Same Window","link_target":"Target","link_url":"Link URL","link_title":"Insert/Edit Link","image_align_right":"Right","image_align_left":"Left","image_align_textbottom":"Text Bottom","image_align_texttop":"Text Top","image_align_bottom":"Bottom","image_align_middle":"Middle","image_align_top":"Top","image_align_baseline":"Baseline","image_align":"Alignment","image_hspace":"Horizontal Space","image_vspace":"Vertical Space","image_dimensions":"Dimensions","image_alt":"Image Description","image_list":"Image List","image_border":"Border","image_src":"Image URL","image_title":"Insert/Edit Image","charmap_title":"Select Special Character", "charmap_usage":"Use left and right arrows to navigate.","colorpicker_name":"Name:","colorpicker_color":"Color:","colorpicker_named_title":"Named Colors","colorpicker_named_tab":"Named","colorpicker_palette_title":"Palette Colors","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Color Picker","colorpicker_picker_tab":"Picker","colorpicker_title":"Select a Color","code_wordwrap":"Word Wrap","code_title":"HTML Source Editor","anchor_name":"Anchor Name","anchor_title":"Insert/Edit Anchor","about_loaded":"Loaded Plugins","about_version":"Version","about_author":"Author","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"License","about_help":"Help","about_general":"About","about_title":"About TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage","invalid_color_value":"Invalid color value","":""}); diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/link.htm b/common/static/js/vendor/tiny_mce/themes/advanced/link.htm deleted file mode 100644 index 4a2459f8a5..0000000000 --- a/common/static/js/vendor/tiny_mce/themes/advanced/link.htm +++ /dev/null @@ -1,57 +0,0 @@ - - - - {#advanced_dlg.link_title} - - - - - - - -
- - -
-
- - - - - - - - - - - - - - - - - - - - - -
- - - - -
 
-
-
- -
- - -
-
- - diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/shortcuts.htm b/common/static/js/vendor/tiny_mce/themes/advanced/shortcuts.htm deleted file mode 100644 index 436091f145..0000000000 --- a/common/static/js/vendor/tiny_mce/themes/advanced/shortcuts.htm +++ /dev/null @@ -1,47 +0,0 @@ - - - - {#advanced_dlg.accessibility_help} - - - - -

{#advanced_dlg.accessibility_usage_title}

-

Toolbars

-

Press ALT-F10 to move focus to the toolbars. Navigate through the buttons using the arrow keys. - Press enter to activate a button and return focus to the editor. - Press escape to return focus to the editor without performing any actions.

- -

Status Bar

-

To access the editor status bar, press ALT-F11. Use the left and right arrow keys to navigate between elements in the path. - Press enter or space to select an element. Press escape to return focus to the editor without changing the selection.

- -

Context Menu

-

Press shift-F10 to activate the context menu. Use the up and down arrow keys to move between menu items. To open sub-menus press the right arrow key. - To close submenus press the left arrow key. Press escape to close the context menu.

- -

Keyboard Shortcuts

- - - - - - - - - - - - - - - - - - - - - -
KeystrokeFunction
Control-BBold
Control-IItalic
Control-ZUndo
Control-YRedo
- - diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/skins/default/content.css b/common/static/js/vendor/tiny_mce/themes/advanced/skins/default/content.css deleted file mode 100644 index 4d63ca9810..0000000000 --- a/common/static/js/vendor/tiny_mce/themes/advanced/skins/default/content.css +++ /dev/null @@ -1,50 +0,0 @@ -body, td, pre {color:#000; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px; margin:8px;} -body {background:#FFF;} -body.mceForceColors {background:#FFF; color:#000;} -body.mceBrowserDefaults {background:transparent; color:inherit; font-size:inherit; font-family:inherit;} -h1 {font-size: 2em} -h2 {font-size: 1.5em} -h3 {font-size: 1.17em} -h4 {font-size: 1em} -h5 {font-size: .83em} -h6 {font-size: .75em} -.mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceItemVisualAid {border: 1px dashed #BBB;} -a.mceItemAnchor {display:inline-block; -webkit-user-select:all; -webkit-user-modify:read-only; -moz-user-select:all; -moz-user-modify:read-only; width:11px !important; height:11px !important; background:url(img/items.gif) no-repeat center center} -span.mceItemNbsp {background: #DDD} -td.mceSelected, th.mceSelected {background-color:#3399ff !important} -img {border:0;} -table, img, hr, .mceItemAnchor {cursor:default} -table td, table th {cursor:text} -ins {border-bottom:1px solid green; text-decoration: none; color:green} -del {color:red; text-decoration:line-through} -cite {border-bottom:1px dashed blue} -acronym {border-bottom:1px dotted #CCC; cursor:help} -abbr {border-bottom:1px dashed #CCC; cursor:help} - -/* IE */ -* html body { -scrollbar-3dlight-color:#F0F0EE; -scrollbar-arrow-color:#676662; -scrollbar-base-color:#F0F0EE; -scrollbar-darkshadow-color:#DDD; -scrollbar-face-color:#E0E0DD; -scrollbar-highlight-color:#F0F0EE; -scrollbar-shadow-color:#F0F0EE; -scrollbar-track-color:#F5F5F5; -} - -img:-moz-broken {-moz-force-broken-image-icon:1; width:24px; height:24px} -font[face=mceinline] {font-family:inherit !important} -*[contentEditable]:focus {outline:0} - -.mceItemMedia {border:1px dotted #cc0000; background-position:center; background-repeat:no-repeat; background-color:#ffffcc} -.mceItemShockWave {background-image:url(../../img/shockwave.gif)} -.mceItemFlash {background-image:url(../../img/flash.gif)} -.mceItemQuickTime {background-image:url(../../img/quicktime.gif)} -.mceItemWindowsMedia {background-image:url(../../img/windowsmedia.gif)} -.mceItemRealMedia {background-image:url(../../img/realmedia.gif)} -.mceItemVideo {background-image:url(../../img/video.gif)} -.mceItemAudio {background-image:url(../../img/video.gif)} -.mceItemEmbeddedAudio {background-image:url(../../img/video.gif)} -.mceItemIframe {background-image:url(../../img/iframe.gif)} -.mcePageBreak {display:block;border:0;width:100%;height:12px;border-top:1px dotted #ccc;margin-top:15px;background:#fff url(../../img/pagebreak.gif) no-repeat center top;} diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/skins/default/dialog.css b/common/static/js/vendor/tiny_mce/themes/advanced/skins/default/dialog.css deleted file mode 100644 index 8950ba3851..0000000000 --- a/common/static/js/vendor/tiny_mce/themes/advanced/skins/default/dialog.css +++ /dev/null @@ -1,118 +0,0 @@ -/* Generic */ -body { -font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px; -scrollbar-3dlight-color:#F0F0EE; -scrollbar-arrow-color:#676662; -scrollbar-base-color:#F0F0EE; -scrollbar-darkshadow-color:#DDDDDD; -scrollbar-face-color:#E0E0DD; -scrollbar-highlight-color:#F0F0EE; -scrollbar-shadow-color:#F0F0EE; -scrollbar-track-color:#F5F5F5; -background:#F0F0EE; -padding:0; -margin:8px 8px 0 8px; -} - -html {background:#F0F0EE;} -td {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;} -textarea {resize:none;outline:none;} -a:link, a:visited {color:black;} -a:hover {color:#2B6FB6;} -.nowrap {white-space: nowrap} - -/* Forms */ -fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;} -legend {color:#2B6FB6; font-weight:bold;} -label.msg {display:none;} -label.invalid {color:#EE0000; display:inline;} -input.invalid {border:1px solid #EE0000;} -input {background:#FFF; border:1px solid #CCC;} -input, select, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;} -input, select, textarea {border:1px solid #808080;} -input.radio {border:1px none #000000; background:transparent; vertical-align:middle;} -input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;} -.input_noborder {border:0;} - -/* Buttons */ -#insert, #cancel, input.button, .updateButton { -border:0; margin:0; padding:0; -font-weight:bold; -width:94px; height:26px; -background:url(img/buttons.png) 0 -26px; -cursor:pointer; -padding-bottom:2px; -float:left; -} - -#insert {background:url(img/buttons.png) 0 -52px} -#cancel {background:url(img/buttons.png) 0 0; float:right} - -/* Browse */ -a.pickcolor, a.browse {text-decoration:none} -a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;} -.mceOldBoxModel a.browse span {width:22px; height:20px;} -a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;} -a.browse span.disabled {border:1px solid white; opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} -a.browse:hover span.disabled {border:1px solid white; background-color:transparent;} -a.pickcolor span {display:block; width:20px; height:16px; background:url(../../img/icons.gif) -840px 0; margin-left:2px;} -.mceOldBoxModel a.pickcolor span {width:21px; height:17px;} -a.pickcolor:hover span {background-color:#B2BBD0;} -a.pickcolor:hover span.disabled {} - -/* Charmap */ -table.charmap {border:1px solid #AAA; text-align:center} -td.charmap, #charmap a {width:18px; height:18px; color:#000; border:1px solid #AAA; text-align:center; font-size:12px; vertical-align:middle; line-height: 18px;} -#charmap a {display:block; color:#000; text-decoration:none; border:0} -#charmap a:hover {background:#CCC;color:#2B6FB6} -#charmap #codeN {font-size:10px; font-family:Arial,Helvetica,sans-serif; text-align:center} -#charmap #codeV {font-size:40px; height:80px; border:1px solid #AAA; text-align:center} - -/* Source */ -.wordWrapCode {vertical-align:middle; border:1px none #000000; background:transparent;} -.mceActionPanel {margin-top:5px;} - -/* Tabs classes */ -.tabs {width:100%; height:18px; line-height:normal; background:url(img/tabs.gif) repeat-x 0 -72px;} -.tabs ul {margin:0; padding:0; list-style:none;} -.tabs li {float:left; background:url(img/tabs.gif) no-repeat 0 0; margin:0 2px 0 0; padding:0 0 0 10px; line-height:17px; height:18px; display:block;} -.tabs li.current {background:url(img/tabs.gif) no-repeat 0 -18px; margin-right:2px;} -.tabs span {float:left; display:block; background:url(img/tabs.gif) no-repeat right -36px; padding:0px 10px 0 0;} -.tabs .current span {background:url(img/tabs.gif) no-repeat right -54px;} -.tabs a {text-decoration:none; font-family:Verdana, Arial; font-size:10px;} -.tabs a:link, .tabs a:visited, .tabs a:hover {color:black;} - -/* Panels */ -.panel_wrapper div.panel {display:none;} -.panel_wrapper div.current {display:block; width:100%; height:300px; overflow:visible;} -.panel_wrapper {border:1px solid #919B9C; border-top:0px; padding:10px; padding-top:5px; clear:both; background:white;} - -/* Columns */ -.column {float:left;} -.properties {width:100%;} -.properties .column1 {} -.properties .column2 {text-align:left;} - -/* Titles */ -h1, h2, h3, h4 {color:#2B6FB6; margin:0; padding:0; padding-top:5px;} -h3 {font-size:14px;} -.title {font-size:12px; font-weight:bold; color:#2B6FB6;} - -/* Dialog specific */ -#link .panel_wrapper, #link div.current {height:125px;} -#image .panel_wrapper, #image div.current {height:200px;} -#plugintable thead {font-weight:bold; background:#DDD;} -#plugintable, #about #plugintable td {border:1px solid #919B9C;} -#plugintable {width:96%; margin-top:10px;} -#pluginscontainer {height:290px; overflow:auto;} -#colorpicker #preview {display:inline-block; padding-left:40px; height:14px; border:1px solid black; margin-left:5px; margin-right: 5px} -#colorpicker #previewblock {position: relative; top: -3px; padding-left:5px; padding-top: 0px; display:inline} -#colorpicker #preview_wrapper { text-align:center; padding-top:4px; white-space: nowrap} -#colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;} -#colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;} -#colorpicker #light div {overflow:hidden;} -#colorpicker .panel_wrapper div.current {height:175px;} -#colorpicker #namedcolors {width:150px;} -#colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;} -#colorpicker #colornamecontainer {margin-top:5px;} -#colorpicker #picker_panel fieldset {margin:auto;width:325px;} diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/skins/default/img/buttons.png b/common/static/js/vendor/tiny_mce/themes/advanced/skins/default/img/buttons.png deleted file mode 100644 index 1e53560e0aa7bb1b9a0373fc2f330acab7d1d51f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3133 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 XtZb~ra4Vor00000NkvXXu0mjf(5kL( diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/skins/default/img/items.gif b/common/static/js/vendor/tiny_mce/themes/advanced/skins/default/img/items.gif deleted file mode 100644 index d2f93671ca3090b277e16a67b1aa6cfb6ac4915f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64 zcmZ?wbhEHbjEB<5wG8q|kKzxu41Cw-5|H{*E`4`XOxxoD9Y}F^Z SLTQbO*E^TJI;F+RU=09Vu@yA{ diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/skins/default/img/menu_check.gif b/common/static/js/vendor/tiny_mce/themes/advanced/skins/default/img/menu_check.gif deleted file mode 100644 index adfdddccd7cac62a17d68873fa53c248bff8351a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70 zcmZ?wbhEHb6k!lyXkcUjg8%>jEB<5wG8q|kKzxu41Cwk||H{*E`4`XG(j;}D)%x|1 U%)82UlRJ8EoZ9xTT7&iJhvXcHF*h)T1OnEW1i^?zgDfop1p?usL*#PMGT;HQkSO{q6FlJyb$PWkPf|h*eTST}7h8z$}MF(XD(aQ)ZLZ zM?v0rT<1C4XHn<6PbNA{XL@>1^)apdD_@tcYDrW#m`k#MmslI7p^P;Az74wGs`!SI zLs$GEZHsafXsu1i-WleMzAL(yw$-LK{0hv;6hrx8kx!!4$``dAyBnY9Jz&DqJo2$A z!(L$H=KqBeY~CF_viHPz^tTglc?D97CqEBjzUwH}7GI zapg8YZM~>2Wk%E$d&r@9ly9b4Q zJpM7T@}r63I(OExUlG%Xcjz3MU+9U^r!SkpjNThDtaP)7>j6L5z%o5|^hlVOyI*uY zt^UU6NTuY?(Lb4ZIU2Zb5Vz}Pb7KF%ivf&j^CL>$cDz?rMNTQQ|NqDVD7mhghUp%h zhIA{gi{S8y9YhIIbSv$`B!JiPi!0#4#Jge0)p&YVPHchWcyAn zQhvb8ggXGXs9;k`u9Uq*YB>O+Q3Rq=2hlLFcG{Q3ORH_}JnY8C+r%@}6|%ySP%bWG zV~mA;?P`Q2L_Ss})nrJ{$TmeA9Tt*4=}X5x%RioM@_?ZsKSEST-f+GBv~Ya)xX3O{ z8!d=YthI-13OI;RN~`>|6u5L{z20oBp%9MIj)n$!Aw{Wpq&Rtr4~*_74Gjo@3el>B zz(Rk;;>2lp73<2;d=r*8z%WkdsG=vRuG_fvxO#uN^El|+5Qoz^X!2MfxJ3m}vyi?> zMLLDi8+${Z6YbUg?8GNR>-+SwHKdFyr%HqWcs|X_l*-DAC^bG&KCqWg7-_`UlwQ`EdOp_LJkr`L$mHHs75uP?fSgVfsDjuE#ft2b8HDt0yFt!+;C zEgL=)G9ZFt4wa+N3Xg7FGc0~`&EEt6_%7tyzmnb9B_h1~7~GD4V-Bhx7~QKRkF>&aT>(-!Us@aJxAY@8E?HW$G8g zSz@7Jcp>iCp;lU1ieF6n7!oAa-1E!rS0 zF1lBFVS%G#ZO}b@*+bIk+7@Q|iG60vIDVpV%4tW8rKyzwRo_<25;8*Ky@n z-sX>W*b;M){5lB_Edc@m1`VHy0@dg$PTR9uE$O2&a?KAe?xRlCj&Z$iZYw{QLU)`S|$v@$cX6?dI$1gD3v=j7e% z=;7w$-Rb7w=;hz@@$UBY^8Wt*`uh6+|Nj60000000000000000000000000000000 z00000A^8La001@sEC2ui04xDo06+%+K$1gIC>oE*q;kn@I-k&}bV{vSuh^_MTj5x~ z;IMd1E}PHjw0g~MyWjA*d`_1aD382;&+q&HfPsR8goTEOh>41ejE#C>oB7x?gDgX`C@W6PdRySDAy zxO3~?&AYen-@tu z`Sa-0t6$H)z5Dm@LOZmO%>O00UfxnIvLj zmiZW&W~QkanrgNg7@Ka!Dd(JY)@kRRc;=aq0|XcV`m}aW!rkr-_>81sY;K8V*mTKy$sHUpws;su^>Z`EED(kGY)@tjm zxZYZTYZdhB>#x8DE9|hu7HjOW$R?}ovdlK??6c5DD=oAId~w{h*k-Hkw%m5>?YH2D zEAF`DmTT_0=%%ax?z-w0009Ik#VhZ;^ww+dz4+#<@4o!@>+in+2Q2Ww1Q$$j0U2bV z!NLqT?C`@7M=bHg6jyBV#TaL-@x~l??D5ASdtAVH6qIc8$tb6+^2#i??DESn$1L;A zG}mnN%{b?*GtOJ|?DNk+2QBo_L>Daue_181^wLZ>?ex=7N9~l1I}U2~)mXDawT@YL z?e*83Y@H+6WS1?d*f^T4_Sz?+eIwg&$E~5;Hp*@H-M-LWBi?-X{fgc`1}^yEgcol3 z;X3N6_(2E|;K1UL57dDST1Ia9J29Y8`Q@Cev*hNThaS!eb%|~|J5qvv`s&nRsXFVh zKVw2)vDa=#`|SV?;3e+7Ljz~;z#H>>@Wcl*eDTB|k38_oFVB1P&fgAw^tDe<{q@*q gul@Gickli8;D;~%_~eUY^!ezgum1Y%w;u!mJFYAXt^fc4 diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/skins/default/ui.css b/common/static/js/vendor/tiny_mce/themes/advanced/skins/default/ui.css deleted file mode 100644 index 2e8c658891..0000000000 --- a/common/static/js/vendor/tiny_mce/themes/advanced/skins/default/ui.css +++ /dev/null @@ -1,219 +0,0 @@ -/* Reset */ -.defaultSkin table, .defaultSkin tbody, .defaultSkin a, .defaultSkin img, .defaultSkin tr, .defaultSkin div, .defaultSkin td, .defaultSkin iframe, .defaultSkin span, .defaultSkin *, .defaultSkin .mceText {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000; vertical-align:baseline; width:auto; border-collapse:separate; text-align:left} -.defaultSkin a:hover, .defaultSkin a:link, .defaultSkin a:visited, .defaultSkin a:active {text-decoration:none; font-weight:normal; cursor:default; color:#000} -.defaultSkin table td {vertical-align:middle} - -/* Containers */ -.defaultSkin table {direction:ltr;background:transparent} -.defaultSkin iframe {display:block;} -.defaultSkin .mceToolbar {height:26px} -.defaultSkin .mceLeft {text-align:left} -.defaultSkin .mceRight {text-align:right} - -/* External */ -.defaultSkin .mceExternalToolbar {position:absolute; border:1px solid #CCC; border-bottom:0; display:none;} -.defaultSkin .mceExternalToolbar td.mceToolbar {padding-right:13px;} -.defaultSkin .mceExternalClose {position:absolute; top:3px; right:3px; width:7px; height:7px; background:url(../../img/icons.gif) -820px 0} - -/* Layout */ -.defaultSkin table.mceLayout {border:0; border-left:1px solid #CCC; border-right:1px solid #CCC} -.defaultSkin table.mceLayout tr.mceFirst td {border-top:1px solid #CCC} -.defaultSkin table.mceLayout tr.mceLast td {border-bottom:1px solid #CCC} -.defaultSkin table.mceToolbar, .defaultSkin tr.mceFirst .mceToolbar tr td, .defaultSkin tr.mceLast .mceToolbar tr td {border:0; margin:0; padding:0;} -.defaultSkin td.mceToolbar {background:#F0F0EE; padding-top:1px; vertical-align:top} -.defaultSkin .mceIframeContainer {border-top:1px solid #CCC; border-bottom:1px solid #CCC} -.defaultSkin .mceStatusbar {background:#F0F0EE; font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:9pt; line-height:16px; overflow:visible; color:#000; display:block; height:20px} -.defaultSkin .mceStatusbar div {float:left; margin:2px} -.defaultSkin .mceStatusbar a.mceResize {display:block; float:right; background:url(../../img/icons.gif) -800px 0; width:20px; height:20px; cursor:se-resize; outline:0} -.defaultSkin .mceStatusbar a:hover {text-decoration:underline} -.defaultSkin table.mceToolbar {margin-left:3px} -.defaultSkin span.mceIcon, .defaultSkin img.mceIcon {display:block; width:20px; height:20px} -.defaultSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px} -.defaultSkin td.mceCenter {text-align:center;} -.defaultSkin td.mceCenter table {margin:0 auto; text-align:left;} -.defaultSkin td.mceRight table {margin:0 0 0 auto;} - -/* Button */ -.defaultSkin .mceButton {display:block; border:1px solid #F0F0EE; width:20px; height:20px; margin-right:1px} -.defaultSkin a.mceButtonEnabled:hover {border:1px solid #0A246A; background-color:#B2BBD0} -.defaultSkin a.mceButtonActive, .defaultSkin a.mceButtonSelected {border:1px solid #0A246A; background-color:#C2CBE0} -.defaultSkin .mceButtonDisabled .mceIcon {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} -.defaultSkin .mceButtonLabeled {width:auto} -.defaultSkin .mceButtonLabeled span.mceIcon {float:left} -.defaultSkin span.mceButtonLabel {display:block; font-size:10px; padding:4px 6px 0 22px; font-family:Tahoma,Verdana,Arial,Helvetica} -.defaultSkin .mceButtonDisabled .mceButtonLabel {color:#888} - -/* Separator */ -.defaultSkin .mceSeparator {display:block; background:url(../../img/icons.gif) -180px 0; width:2px; height:20px; margin:2px 2px 0 4px} - -/* ListBox */ -.defaultSkin .mceListBox, .defaultSkin .mceListBox a {display:block} -.defaultSkin .mceListBox .mceText {padding-left:4px; width:70px; text-align:left; border:1px solid #CCC; border-right:0; background:#FFF; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; height:20px; line-height:20px; overflow:hidden} -.defaultSkin .mceListBox .mceOpen {width:9px; height:20px; background:url(../../img/icons.gif) -741px 0; margin-right:2px; border:1px solid #CCC;} -.defaultSkin table.mceListBoxEnabled:hover .mceText, .defaultSkin .mceListBoxHover .mceText, .defaultSkin .mceListBoxSelected .mceText {border:1px solid #A2ABC0; border-right:0; background:#FFF} -.defaultSkin table.mceListBoxEnabled:hover .mceOpen, .defaultSkin .mceListBoxHover .mceOpen, .defaultSkin .mceListBoxSelected .mceOpen {background-color:#FFF; border:1px solid #A2ABC0} -.defaultSkin .mceListBoxDisabled a.mceText {color:gray; background-color:transparent;} -.defaultSkin .mceListBoxMenu {overflow:auto; overflow-x:hidden} -.defaultSkin .mceOldBoxModel .mceListBox .mceText {height:22px} -.defaultSkin .mceOldBoxModel .mceListBox .mceOpen {width:11px; height:22px;} -.defaultSkin select.mceNativeListBox {font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:7pt; background:#F0F0EE; border:1px solid gray; margin-right:2px;} - -/* SplitButton */ -.defaultSkin .mceSplitButton {width:32px; height:20px; direction:ltr} -.defaultSkin .mceSplitButton a, .defaultSkin .mceSplitButton span {height:20px; display:block} -.defaultSkin .mceSplitButton a.mceAction {width:20px; border:1px solid #F0F0EE; border-right:0;} -.defaultSkin .mceSplitButton span.mceAction {width:20px; background-image:url(../../img/icons.gif);} -.defaultSkin .mceSplitButton a.mceOpen {width:9px; background:url(../../img/icons.gif) -741px 0; border:1px solid #F0F0EE;} -.defaultSkin .mceSplitButton span.mceOpen {display:none} -.defaultSkin table.mceSplitButtonEnabled:hover a.mceAction, .defaultSkin .mceSplitButtonHover a.mceAction, .defaultSkin .mceSplitButtonSelected a.mceAction {border:1px solid #0A246A; border-right:0; background-color:#B2BBD0} -.defaultSkin table.mceSplitButtonEnabled:hover a.mceOpen, .defaultSkin .mceSplitButtonHover a.mceOpen, .defaultSkin .mceSplitButtonSelected a.mceOpen {background-color:#B2BBD0; border:1px solid #0A246A;} -.defaultSkin .mceSplitButtonDisabled .mceAction, .defaultSkin .mceSplitButtonDisabled a.mceOpen {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} -.defaultSkin .mceSplitButtonActive a.mceAction {border:1px solid #0A246A; background-color:#C2CBE0} -.defaultSkin .mceSplitButtonActive a.mceOpen {border-left:0;} - -/* ColorSplitButton */ -.defaultSkin div.mceColorSplitMenu table {background:#FFF; border:1px solid gray} -.defaultSkin .mceColorSplitMenu td {padding:2px} -.defaultSkin .mceColorSplitMenu a {display:block; width:9px; height:9px; overflow:hidden; border:1px solid #808080} -.defaultSkin .mceColorSplitMenu td.mceMoreColors {padding:1px 3px 1px 1px} -.defaultSkin .mceColorSplitMenu a.mceMoreColors {width:100%; height:auto; text-align:center; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; line-height:20px; border:1px solid #FFF} -.defaultSkin .mceColorSplitMenu a.mceMoreColors:hover {border:1px solid #0A246A; background-color:#B6BDD2} -.defaultSkin a.mceMoreColors:hover {border:1px solid #0A246A} -.defaultSkin .mceColorPreview {margin-left:2px; width:16px; height:4px; overflow:hidden; background:#9a9b9a} -.defaultSkin .mce_forecolor span.mceAction, .defaultSkin .mce_backcolor span.mceAction {overflow:hidden; height:16px} - -/* Menu */ -.defaultSkin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid #D4D0C8; direction:ltr} -.defaultSkin .mceNoIcons span.mceIcon {width:0;} -.defaultSkin .mceNoIcons a .mceText {padding-left:10px} -.defaultSkin .mceMenu table {background:#FFF} -.defaultSkin .mceMenu a, .defaultSkin .mceMenu span, .defaultSkin .mceMenu {display:block} -.defaultSkin .mceMenu td {height:20px} -.defaultSkin .mceMenu a {position:relative;padding:3px 0 4px 0} -.defaultSkin .mceMenu .mceText {position:relative; display:block; font-family:Tahoma,Verdana,Arial,Helvetica; color:#000; cursor:default; margin:0; padding:0 25px 0 25px; display:block} -.defaultSkin .mceMenu span.mceText, .defaultSkin .mceMenu .mcePreview {font-size:11px} -.defaultSkin .mceMenu pre.mceText {font-family:Monospace} -.defaultSkin .mceMenu .mceIcon {position:absolute; top:0; left:0; width:22px;} -.defaultSkin .mceMenu .mceMenuItemEnabled a:hover, .defaultSkin .mceMenu .mceMenuItemActive {background-color:#dbecf3} -.defaultSkin td.mceMenuItemSeparator {background:#DDD; height:1px} -.defaultSkin .mceMenuItemTitle a {border:0; background:#EEE; border-bottom:1px solid #DDD} -.defaultSkin .mceMenuItemTitle span.mceText {color:#000; font-weight:bold; padding-left:4px} -.defaultSkin .mceMenuItemDisabled .mceText {color:#888} -.defaultSkin .mceMenuItemSelected .mceIcon {background:url(img/menu_check.gif)} -.defaultSkin .mceNoIcons .mceMenuItemSelected a {background:url(img/menu_arrow.gif) no-repeat -6px center} -.defaultSkin .mceMenu span.mceMenuLine {display:none} -.defaultSkin .mceMenuItemSub a {background:url(img/menu_arrow.gif) no-repeat top right;} -.defaultSkin .mceMenuItem td, .defaultSkin .mceMenuItem th {line-height: normal} - -/* Progress,Resize */ -.defaultSkin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; -ms-filter:'alpha(opacity=50)'; filter:alpha(opacity=50); background:#FFF} -.defaultSkin .mceProgress {position:absolute; left:0; top:0; z-index:1001; background:url(img/progress.gif) no-repeat; width:32px; height:32px; margin:-16px 0 0 -16px} - -/* Rtl */ -.mceRtl .mceListBox .mceText {text-align: right; padding: 0 4px 0 0} -.mceRtl .mceMenuItem .mceText {text-align: right} - -/* Formats */ -.defaultSkin .mce_formatPreview a {font-size:10px} -.defaultSkin .mce_p span.mceText {} -.defaultSkin .mce_address span.mceText {font-style:italic} -.defaultSkin .mce_pre span.mceText {font-family:monospace} -.defaultSkin .mce_h1 span.mceText {font-weight:bolder; font-size: 2em} -.defaultSkin .mce_h2 span.mceText {font-weight:bolder; font-size: 1.5em} -.defaultSkin .mce_h3 span.mceText {font-weight:bolder; font-size: 1.17em} -.defaultSkin .mce_h4 span.mceText {font-weight:bolder; font-size: 1em} -.defaultSkin .mce_h5 span.mceText {font-weight:bolder; font-size: .83em} -.defaultSkin .mce_h6 span.mceText {font-weight:bolder; font-size: .75em} - -/* Theme */ -.defaultSkin span.mce_bold {background-position:0 0} -.defaultSkin span.mce_italic {background-position:-60px 0} -.defaultSkin span.mce_underline {background-position:-140px 0} -.defaultSkin span.mce_strikethrough {background-position:-120px 0} -.defaultSkin span.mce_undo {background-position:-160px 0} -.defaultSkin span.mce_redo {background-position:-100px 0} -.defaultSkin span.mce_cleanup {background-position:-40px 0} -.defaultSkin span.mce_bullist {background-position:-20px 0} -.defaultSkin span.mce_numlist {background-position:-80px 0} -.defaultSkin span.mce_justifyleft {background-position:-460px 0} -.defaultSkin span.mce_justifyright {background-position:-480px 0} -.defaultSkin span.mce_justifycenter {background-position:-420px 0} -.defaultSkin span.mce_justifyfull {background-position:-440px 0} -.defaultSkin span.mce_anchor {background-position:-200px 0} -.defaultSkin span.mce_indent {background-position:-400px 0} -.defaultSkin span.mce_outdent {background-position:-540px 0} -.defaultSkin span.mce_link {background-position:-500px 0} -.defaultSkin span.mce_unlink {background-position:-640px 0} -.defaultSkin span.mce_sub {background-position:-600px 0} -.defaultSkin span.mce_sup {background-position:-620px 0} -.defaultSkin span.mce_removeformat {background-position:-580px 0} -.defaultSkin span.mce_newdocument {background-position:-520px 0} -.defaultSkin span.mce_image {background-position:-380px 0} -.defaultSkin span.mce_help {background-position:-340px 0} -.defaultSkin span.mce_code {background-position:-260px 0} -.defaultSkin span.mce_hr {background-position:-360px 0} -.defaultSkin span.mce_visualaid {background-position:-660px 0} -.defaultSkin span.mce_charmap {background-position:-240px 0} -.defaultSkin span.mce_paste {background-position:-560px 0} -.defaultSkin span.mce_copy {background-position:-700px 0} -.defaultSkin span.mce_cut {background-position:-680px 0} -.defaultSkin span.mce_blockquote {background-position:-220px 0} -.defaultSkin .mce_forecolor span.mceAction {background-position:-720px 0} -.defaultSkin .mce_backcolor span.mceAction {background-position:-760px 0} -.defaultSkin span.mce_forecolorpicker {background-position:-720px 0} -.defaultSkin span.mce_backcolorpicker {background-position:-760px 0} - -/* Plugins */ -.defaultSkin span.mce_advhr {background-position:-0px -20px} -.defaultSkin span.mce_ltr {background-position:-20px -20px} -.defaultSkin span.mce_rtl {background-position:-40px -20px} -.defaultSkin span.mce_emotions {background-position:-60px -20px} -.defaultSkin span.mce_fullpage {background-position:-80px -20px} -.defaultSkin span.mce_fullscreen {background-position:-100px -20px} -.defaultSkin span.mce_iespell {background-position:-120px -20px} -.defaultSkin span.mce_insertdate {background-position:-140px -20px} -.defaultSkin span.mce_inserttime {background-position:-160px -20px} -.defaultSkin span.mce_absolute {background-position:-180px -20px} -.defaultSkin span.mce_backward {background-position:-200px -20px} -.defaultSkin span.mce_forward {background-position:-220px -20px} -.defaultSkin span.mce_insert_layer {background-position:-240px -20px} -.defaultSkin span.mce_insertlayer {background-position:-260px -20px} -.defaultSkin span.mce_movebackward {background-position:-280px -20px} -.defaultSkin span.mce_moveforward {background-position:-300px -20px} -.defaultSkin span.mce_media {background-position:-320px -20px} -.defaultSkin span.mce_nonbreaking {background-position:-340px -20px} -.defaultSkin span.mce_pastetext {background-position:-360px -20px} -.defaultSkin span.mce_pasteword {background-position:-380px -20px} -.defaultSkin span.mce_selectall {background-position:-400px -20px} -.defaultSkin span.mce_preview {background-position:-420px -20px} -.defaultSkin span.mce_print {background-position:-440px -20px} -.defaultSkin span.mce_cancel {background-position:-460px -20px} -.defaultSkin span.mce_save {background-position:-480px -20px} -.defaultSkin span.mce_replace {background-position:-500px -20px} -.defaultSkin span.mce_search {background-position:-520px -20px} -.defaultSkin span.mce_styleprops {background-position:-560px -20px} -.defaultSkin span.mce_table {background-position:-580px -20px} -.defaultSkin span.mce_cell_props {background-position:-600px -20px} -.defaultSkin span.mce_delete_table {background-position:-620px -20px} -.defaultSkin span.mce_delete_col {background-position:-640px -20px} -.defaultSkin span.mce_delete_row {background-position:-660px -20px} -.defaultSkin span.mce_col_after {background-position:-680px -20px} -.defaultSkin span.mce_col_before {background-position:-700px -20px} -.defaultSkin span.mce_row_after {background-position:-720px -20px} -.defaultSkin span.mce_row_before {background-position:-740px -20px} -.defaultSkin span.mce_merge_cells {background-position:-760px -20px} -.defaultSkin span.mce_table_props {background-position:-980px -20px} -.defaultSkin span.mce_row_props {background-position:-780px -20px} -.defaultSkin span.mce_split_cells {background-position:-800px -20px} -.defaultSkin span.mce_template {background-position:-820px -20px} -.defaultSkin span.mce_visualchars {background-position:-840px -20px} -.defaultSkin span.mce_abbr {background-position:-860px -20px} -.defaultSkin span.mce_acronym {background-position:-880px -20px} -.defaultSkin span.mce_attribs {background-position:-900px -20px} -.defaultSkin span.mce_cite {background-position:-920px -20px} -.defaultSkin span.mce_del {background-position:-940px -20px} -.defaultSkin span.mce_ins {background-position:-960px -20px} -.defaultSkin span.mce_pagebreak {background-position:0 -40px} -.defaultSkin span.mce_restoredraft {background-position:-20px -40px} -.defaultSkin span.mce_spellchecker {background-position:-540px -20px} -.defaultSkin span.mce_visualblocks {background-position: -40px -40px} diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/skins/highcontrast/content.css b/common/static/js/vendor/tiny_mce/themes/advanced/skins/highcontrast/content.css deleted file mode 100644 index ee3d369d02..0000000000 --- a/common/static/js/vendor/tiny_mce/themes/advanced/skins/highcontrast/content.css +++ /dev/null @@ -1,24 +0,0 @@ -body, td, pre { margin:8px;} -body.mceForceColors {background:#FFF; color:#000;} -h1 {font-size: 2em} -h2 {font-size: 1.5em} -h3 {font-size: 1.17em} -h4 {font-size: 1em} -h5 {font-size: .83em} -h6 {font-size: .75em} -.mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceItemVisualAid {border: 1px dashed #BBB;} -a.mceItemAnchor {display:inline-block; width:11px !important; height:11px !important; background:url(../default/img/items.gif) no-repeat 0 0;} -span.mceItemNbsp {background: #DDD} -td.mceSelected, th.mceSelected {background-color:#3399ff !important} -img {border:0;} -table, img, hr, .mceItemAnchor {cursor:default} -table td, table th {cursor:text} -ins {border-bottom:1px solid green; text-decoration: none; color:green} -del {color:red; text-decoration:line-through} -cite {border-bottom:1px dashed blue} -acronym {border-bottom:1px dotted #CCC; cursor:help} -abbr {border-bottom:1px dashed #CCC; cursor:help} - -img:-moz-broken {-moz-force-broken-image-icon:1; width:24px; height:24px} -font[face=mceinline] {font-family:inherit !important} -*[contentEditable]:focus {outline:0} diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/skins/highcontrast/dialog.css b/common/static/js/vendor/tiny_mce/themes/advanced/skins/highcontrast/dialog.css deleted file mode 100644 index fa3c31a05d..0000000000 --- a/common/static/js/vendor/tiny_mce/themes/advanced/skins/highcontrast/dialog.css +++ /dev/null @@ -1,106 +0,0 @@ -/* Generic */ -body { -font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px; -background:#F0F0EE; -color: black; -padding:0; -margin:8px 8px 0 8px; -} - -html {background:#F0F0EE; color:#000;} -td {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;} -textarea {resize:none;outline:none;} -a:link, a:visited {color:black;background-color:transparent;} -a:hover {color:#2B6FB6;background-color:transparent;} -.nowrap {white-space: nowrap} - -/* Forms */ -fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;} -legend {color:#2B6FB6; font-weight:bold;} -label.msg {display:none;} -label.invalid {color:#EE0000; display:inline;background-color:transparent;} -input.invalid {border:1px solid #EE0000;background-color:transparent;} -input {background:#FFF; border:1px solid #CCC;color:black;} -input, select, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;} -input, select, textarea {border:1px solid #808080;} -input.radio {border:1px none #000000; background:transparent; vertical-align:middle;} -input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;} -.input_noborder {border:0;} - -/* Buttons */ -#insert, #cancel, input.button, .updateButton { -font-weight:bold; -width:94px; height:23px; -cursor:pointer; -padding-bottom:2px; -float:left; -} - -#cancel {float:right} - -/* Browse */ -a.pickcolor, a.browse {text-decoration:none} -a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;} -.mceOldBoxModel a.browse span {width:22px; height:20px;} -a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;} -a.browse span.disabled {border:1px solid white; opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} -a.browse:hover span.disabled {border:1px solid white; background-color:transparent;} -a.pickcolor span {display:block; width:20px; height:16px; background:url(../../img/icons.gif) -840px 0; margin-left:2px;} -.mceOldBoxModel a.pickcolor span {width:21px; height:17px;} -a.pickcolor:hover span {background-color:#B2BBD0;} -a.pickcolor:hover span.disabled {} - -/* Charmap */ -table.charmap {border:1px solid #AAA; text-align:center} -td.charmap, #charmap a {width:18px; height:18px; color:#000; border:1px solid #AAA; text-align:center; font-size:12px; vertical-align:middle; line-height: 18px;} -#charmap a {display:block; color:#000; text-decoration:none; border:0} -#charmap a:hover {background:#CCC;color:#2B6FB6} -#charmap #codeN {font-size:10px; font-family:Arial,Helvetica,sans-serif; text-align:center} -#charmap #codeV {font-size:40px; height:80px; border:1px solid #AAA; text-align:center} - -/* Source */ -.wordWrapCode {vertical-align:middle; border:1px none #000000; background:transparent;} -.mceActionPanel {margin-top:5px;} - -/* Tabs classes */ -.tabs {width:100%; height:18px; line-height:normal;} -.tabs ul {margin:0; padding:0; list-style:none;} -.tabs li {float:left; border: 1px solid black; border-bottom:0; margin:0 2px 0 0; padding:0 0 0 10px; line-height:17px; height:18px; display:block; cursor:pointer;} -.tabs li.current {font-weight: bold; margin-right:2px;} -.tabs span {float:left; display:block; padding:0px 10px 0 0;} -.tabs a {text-decoration:none; font-family:Verdana, Arial; font-size:10px;} -.tabs a:link, .tabs a:visited, .tabs a:hover {color:black;} - -/* Panels */ -.panel_wrapper div.panel {display:none;} -.panel_wrapper div.current {display:block; width:100%; height:300px; overflow:visible;} -.panel_wrapper {border:1px solid #919B9C; padding:10px; padding-top:5px; clear:both; background:white;} - -/* Columns */ -.column {float:left;} -.properties {width:100%;} -.properties .column1 {} -.properties .column2 {text-align:left;} - -/* Titles */ -h1, h2, h3, h4 {color:#2B6FB6; margin:0; padding:0; padding-top:5px;} -h3 {font-size:14px;} -.title {font-size:12px; font-weight:bold; color:#2B6FB6;} - -/* Dialog specific */ -#link .panel_wrapper, #link div.current {height:125px;} -#image .panel_wrapper, #image div.current {height:200px;} -#plugintable thead {font-weight:bold; background:#DDD;} -#plugintable, #about #plugintable td {border:1px solid #919B9C;} -#plugintable {width:96%; margin-top:10px;} -#pluginscontainer {height:290px; overflow:auto;} -#colorpicker #preview {display:inline-block; padding-left:40px; height:14px; border:1px solid black; margin-left:5px; margin-right: 5px} -#colorpicker #previewblock {position: relative; top: -3px; padding-left:5px; padding-top: 0px; display:inline} -#colorpicker #preview_wrapper { text-align:center; padding-top:4px; white-space: nowrap} -#colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;} -#colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;} -#colorpicker #light div {overflow:hidden;} -#colorpicker .panel_wrapper div.current {height:175px;} -#colorpicker #namedcolors {width:150px;} -#colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;} -#colorpicker #colornamecontainer {margin-top:5px;} diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/skins/highcontrast/ui.css b/common/static/js/vendor/tiny_mce/themes/advanced/skins/highcontrast/ui.css deleted file mode 100644 index 86829c59c1..0000000000 --- a/common/static/js/vendor/tiny_mce/themes/advanced/skins/highcontrast/ui.css +++ /dev/null @@ -1,106 +0,0 @@ -/* Reset */ -.highcontrastSkin table, .highcontrastSkin tbody, .highcontrastSkin a, .highcontrastSkin img, .highcontrastSkin tr, .highcontrastSkin div, .highcontrastSkin td, .highcontrastSkin iframe, .highcontrastSkin span, .highcontrastSkin *, .highcontrastSkin .mceText {border:0; margin:0; padding:0; vertical-align:baseline; border-collapse:separate;} -.highcontrastSkin a:hover, .highcontrastSkin a:link, .highcontrastSkin a:visited, .highcontrastSkin a:active {text-decoration:none; font-weight:normal; cursor:default;} -.highcontrastSkin table td {vertical-align:middle} - -.highcontrastSkin .mceIconOnly {display: block !important;} - -/* External */ -.highcontrastSkin .mceExternalToolbar {position:absolute; border:1px solid; border-bottom:0; display:none; background-color: white;} -.highcontrastSkin .mceExternalToolbar td.mceToolbar {padding-right:13px;} -.highcontrastSkin .mceExternalClose {position:absolute; top:3px; right:3px; width:7px; height:7px;} - -/* Layout */ -.highcontrastSkin table.mceLayout {border: 1px solid;} -.highcontrastSkin .mceIframeContainer {border-top:1px solid; border-bottom:1px solid} -.highcontrastSkin .mceStatusbar a:hover {text-decoration:underline} -.highcontrastSkin .mceStatusbar {display:block; line-height:1.5em; overflow:visible;} -.highcontrastSkin .mceStatusbar div {float:left} -.highcontrastSkin .mceStatusbar a.mceResize {display:block; float:right; width:20px; height:20px; cursor:se-resize; outline:0} - -.highcontrastSkin .mceToolbar td { display: inline-block; float: left;} -.highcontrastSkin .mceToolbar tr { display: block;} -.highcontrastSkin .mceToolbar table { display: block; } - -/* Button */ - -.highcontrastSkin .mceButton { display:block; margin: 2px; padding: 5px 10px;border: 1px solid; border-radius: 3px; -moz-border-radius: 3px; -webkit-border-radius: 3px; -ms-border-radius: 3px; height: 2em;} -.highcontrastSkin .mceButton .mceVoiceLabel { height: 100%; vertical-align: center; line-height: 2em} -.highcontrastSkin .mceButtonDisabled .mceVoiceLabel { opacity:0.6; -ms-filter:'alpha(opacity=60)'; filter:alpha(opacity=60);} -.highcontrastSkin .mceButtonActive, .highcontrastSkin .mceButton:focus, .highcontrastSkin .mceButton:active { border: 5px solid; padding: 1px 6px;-webkit-focus-ring-color:none;outline:none;} - -/* Separator */ -.highcontrastSkin .mceSeparator {display:block; width:16px; height:26px;} - -/* ListBox */ -.highcontrastSkin .mceListBox { display: block; margin:2px;-webkit-focus-ring-color:none;outline:none;} -.highcontrastSkin .mceListBox .mceText {padding: 5px 6px; line-height: 2em; width: 15ex; overflow: hidden;} -.highcontrastSkin .mceListBoxDisabled .mceText { opacity:0.6; -ms-filter:'alpha(opacity=60)'; filter:alpha(opacity=60);} -.highcontrastSkin .mceListBox a.mceText { padding: 5px 10px; display: block; height: 2em; line-height: 2em; border: 1px solid; border-right: 0; border-radius: 3px 0px 0px 3px; -moz-border-radius: 3px 0px 0px 3px; -webkit-border-radius: 3px 0px 0px 3px; -ms-border-radius: 3px 0px 0px 3px;} -.highcontrastSkin .mceListBox a.mceOpen { padding: 5px 4px; display: block; height: 2em; line-height: 2em; border: 1px solid; border-left: 0; border-radius: 0px 3px 3px 0px; -moz-border-radius: 0px 3px 3px 0px; -webkit-border-radius: 0px 3px 3px 0px; -ms-border-radius: 0px 3px 3px 0px;} -.highcontrastSkin .mceListBox:focus a.mceText, .highcontrastSkin .mceListBox:active a.mceText { border-width: 5px; padding: 1px 10px 1px 6px;} -.highcontrastSkin .mceListBox:focus a.mceOpen, .highcontrastSkin .mceListBox:active a.mceOpen { border-width: 5px; padding: 1px 0px 1px 4px;} - -.highcontrastSkin .mceListBoxMenu {overflow-y:auto} - -/* SplitButton */ -.highcontrastSkin .mceSplitButtonDisabled .mceAction {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} - -.highcontrastSkin .mceSplitButton { border-collapse: collapse; margin: 2px; height: 2em; line-height: 2em;-webkit-focus-ring-color:none;outline:none;} -.highcontrastSkin .mceSplitButton td { display: table-cell; float: none; margin: 0; padding: 0; height: 2em;} -.highcontrastSkin .mceSplitButton tr { display: table-row; } -.highcontrastSkin table.mceSplitButton { display: table; } -.highcontrastSkin .mceSplitButton a.mceAction { padding: 5px 10px; display: block; height: 2em; line-height: 2em; overflow: hidden; border: 1px solid; border-right: 0; border-radius: 3px 0px 0px 3px; -moz-border-radius: 3px 0px 0px 3px; -webkit-border-radius: 3px 0px 0px 3px; -ms-border-radius: 3px 0px 0px 3px;} -.highcontrastSkin .mceSplitButton a.mceOpen { padding: 5px 4px; display: block; height: 2em; line-height: 2em; border: 1px solid; border-radius: 0px 3px 3px 0px; -moz-border-radius: 0px 3px 3px 0px; -webkit-border-radius: 0px 3px 3px 0px; -ms-border-radius: 0px 3px 3px 0px;} -.highcontrastSkin .mceSplitButton .mceVoiceLabel { height: 2em; vertical-align: center; line-height: 2em; } -.highcontrastSkin .mceSplitButton:focus a.mceAction, .highcontrastSkin .mceSplitButton:active a.mceAction { border-width: 5px; border-right-width: 1px; padding: 1px 10px 1px 6px;-webkit-focus-ring-color:none;outline:none;} -.highcontrastSkin .mceSplitButton:focus a.mceOpen, .highcontrastSkin .mceSplitButton:active a.mceOpen { border-width: 5px; border-left-width: 1px; padding: 1px 0px 1px 4px;-webkit-focus-ring-color:none;outline:none;} - -/* Menu */ -.highcontrastSkin .mceNoIcons span.mceIcon {width:0;} -.highcontrastSkin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid; direction:ltr} -.highcontrastSkin .mceMenu table {background:white; color: black} -.highcontrastSkin .mceNoIcons a .mceText {padding-left:10px} -.highcontrastSkin .mceMenu a, .highcontrastSkin .mceMenu span, .highcontrastSkin .mceMenu {display:block;background:white; color: black} -.highcontrastSkin .mceMenu td {height:2em} -.highcontrastSkin .mceMenu a {position:relative;padding:3px 0 4px 0; display: block;} -.highcontrastSkin .mceMenu .mceText {position:relative; display:block; cursor:default; margin:0; padding:0 25px 0 25px;} -.highcontrastSkin .mceMenu pre.mceText {font-family:Monospace} -.highcontrastSkin .mceMenu .mceIcon {position:absolute; top:0; left:0; width:26px;} -.highcontrastSkin td.mceMenuItemSeparator {border-top:1px solid; height:1px} -.highcontrastSkin .mceMenuItemTitle a {border:0; border-bottom:1px solid} -.highcontrastSkin .mceMenuItemTitle span.mceText {font-weight:bold; padding-left:4px} -.highcontrastSkin .mceNoIcons .mceMenuItemSelected span.mceText:before {content: "\2713\A0";} -.highcontrastSkin .mceMenu span.mceMenuLine {display:none} -.highcontrastSkin .mceMenuItemSub a .mceText:after {content: "\A0\25B8"} -.highcontrastSkin .mceMenuItem td, .highcontrastSkin .mceMenuItem th {line-height: normal} - -/* ColorSplitButton */ -.highcontrastSkin div.mceColorSplitMenu table {background:#FFF; border:1px solid; color: #000} -.highcontrastSkin .mceColorSplitMenu td {padding:2px} -.highcontrastSkin .mceColorSplitMenu a {display:block; width:16px; height:16px; overflow:hidden; color:#000; margin: 0; padding: 0;} -.highcontrastSkin .mceColorSplitMenu td.mceMoreColors {padding:1px 3px 1px 1px} -.highcontrastSkin .mceColorSplitMenu a.mceMoreColors {width:100%; height:auto; text-align:center; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; line-height:20px; border:1px solid #FFF} -.highcontrastSkin .mceColorSplitMenu a.mceMoreColors:hover {border:1px solid; background-color:#B6BDD2} -.highcontrastSkin a.mceMoreColors:hover {border:1px solid #0A246A; color: #000;} -.highcontrastSkin .mceColorPreview {display:none;} -.highcontrastSkin .mce_forecolor span.mceAction, .highcontrastSkin .mce_backcolor span.mceAction {height:17px;overflow:hidden} - -/* Progress,Resize */ -.highcontrastSkin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=50); background:#FFF} -.highcontrastSkin .mceProgress {position:absolute; left:0; top:0; z-index:1001; background:url(../default/img/progress.gif) no-repeat; width:32px; height:32px; margin:-16px 0 0 -16px} - -/* Rtl */ -.mceRtl .mceListBox .mceText {text-align: right; padding: 0 4px 0 0} -.mceRtl .mceMenuItem .mceText {text-align: right} - -/* Formats */ -.highcontrastSkin .mce_p span.mceText {} -.highcontrastSkin .mce_address span.mceText {font-style:italic} -.highcontrastSkin .mce_pre span.mceText {font-family:monospace} -.highcontrastSkin .mce_h1 span.mceText {font-weight:bolder; font-size: 2em} -.highcontrastSkin .mce_h2 span.mceText {font-weight:bolder; font-size: 1.5em} -.highcontrastSkin .mce_h3 span.mceText {font-weight:bolder; font-size: 1.17em} -.highcontrastSkin .mce_h4 span.mceText {font-weight:bolder; font-size: 1em} -.highcontrastSkin .mce_h5 span.mceText {font-weight:bolder; font-size: .83em} -.highcontrastSkin .mce_h6 span.mceText {font-weight:bolder; font-size: .75em} diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/skins/o2k7/content.css b/common/static/js/vendor/tiny_mce/themes/advanced/skins/o2k7/content.css deleted file mode 100644 index 631fa0ec87..0000000000 --- a/common/static/js/vendor/tiny_mce/themes/advanced/skins/o2k7/content.css +++ /dev/null @@ -1,48 +0,0 @@ -body, td, pre {color:#000; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px; margin:8px;} -body {background:#FFF;} -body.mceForceColors {background:#FFF; color:#000;} -h1 {font-size: 2em} -h2 {font-size: 1.5em} -h3 {font-size: 1.17em} -h4 {font-size: 1em} -h5 {font-size: .83em} -h6 {font-size: .75em} -.mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceItemVisualAid {border: 1px dashed #BBB;} -a.mceItemAnchor {display:inline-block; width:11px !important; height:11px !important; background:url(../default/img/items.gif) no-repeat 0 0;} -span.mceItemNbsp {background: #DDD} -td.mceSelected, th.mceSelected {background-color:#3399ff !important} -img {border:0;} -table, img, hr, .mceItemAnchor {cursor:default} -table td, table th {cursor:text} -ins {border-bottom:1px solid green; text-decoration: none; color:green} -del {color:red; text-decoration:line-through} -cite {border-bottom:1px dashed blue} -acronym {border-bottom:1px dotted #CCC; cursor:help} -abbr {border-bottom:1px dashed #CCC; cursor:help} - -/* IE */ -* html body { -scrollbar-3dlight-color:#F0F0EE; -scrollbar-arrow-color:#676662; -scrollbar-base-color:#F0F0EE; -scrollbar-darkshadow-color:#DDD; -scrollbar-face-color:#E0E0DD; -scrollbar-highlight-color:#F0F0EE; -scrollbar-shadow-color:#F0F0EE; -scrollbar-track-color:#F5F5F5; -} - -img:-moz-broken {-moz-force-broken-image-icon:1; width:24px; height:24px} -font[face=mceinline] {font-family:inherit !important} -*[contentEditable]:focus {outline:0} - -.mceItemMedia {border:1px dotted #cc0000; background-position:center; background-repeat:no-repeat; background-color:#ffffcc} -.mceItemShockWave {background-image:url(../../img/shockwave.gif)} -.mceItemFlash {background-image:url(../../img/flash.gif)} -.mceItemQuickTime {background-image:url(../../img/quicktime.gif)} -.mceItemWindowsMedia {background-image:url(../../img/windowsmedia.gif)} -.mceItemRealMedia {background-image:url(../../img/realmedia.gif)} -.mceItemVideo {background-image:url(../../img/video.gif)} -.mceItemAudio {background-image:url(../../img/video.gif)} -.mceItemIframe {background-image:url(../../img/iframe.gif)} -.mcePageBreak {display:block;border:0;width:100%;height:12px;border-top:1px dotted #ccc;margin-top:15px;background:#fff url(../../img/pagebreak.gif) no-repeat center top;} diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/skins/o2k7/dialog.css b/common/static/js/vendor/tiny_mce/themes/advanced/skins/o2k7/dialog.css deleted file mode 100644 index 84d2fe9722..0000000000 --- a/common/static/js/vendor/tiny_mce/themes/advanced/skins/o2k7/dialog.css +++ /dev/null @@ -1,118 +0,0 @@ -/* Generic */ -body { -font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px; -scrollbar-3dlight-color:#F0F0EE; -scrollbar-arrow-color:#676662; -scrollbar-base-color:#F0F0EE; -scrollbar-darkshadow-color:#DDDDDD; -scrollbar-face-color:#E0E0DD; -scrollbar-highlight-color:#F0F0EE; -scrollbar-shadow-color:#F0F0EE; -scrollbar-track-color:#F5F5F5; -background:#F0F0EE; -padding:0; -margin:8px 8px 0 8px; -} - -html {background:#F0F0EE;} -td {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;} -textarea {resize:none;outline:none;} -a:link, a:visited {color:black;} -a:hover {color:#2B6FB6;} -.nowrap {white-space: nowrap} - -/* Forms */ -fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;} -legend {color:#2B6FB6; font-weight:bold;} -label.msg {display:none;} -label.invalid {color:#EE0000; display:inline;} -input.invalid {border:1px solid #EE0000;} -input {background:#FFF; border:1px solid #CCC;} -input, select, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;} -input, select, textarea {border:1px solid #808080;} -input.radio {border:1px none #000000; background:transparent; vertical-align:middle;} -input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;} -.input_noborder {border:0;} - -/* Buttons */ -#insert, #cancel, input.button, .updateButton { -border:0; margin:0; padding:0; -font-weight:bold; -width:94px; height:26px; -background:url(../default/img/buttons.png) 0 -26px; -cursor:pointer; -padding-bottom:2px; -float:left; -} - -#insert {background:url(../default/img/buttons.png) 0 -52px} -#cancel {background:url(../default/img/buttons.png) 0 0; float:right} - -/* Browse */ -a.pickcolor, a.browse {text-decoration:none} -a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;} -.mceOldBoxModel a.browse span {width:22px; height:20px;} -a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;} -a.browse span.disabled {border:1px solid white; opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} -a.browse:hover span.disabled {border:1px solid white; background-color:transparent;} -a.pickcolor span {display:block; width:20px; height:16px; background:url(../../img/icons.gif) -840px 0; margin-left:2px;} -.mceOldBoxModel a.pickcolor span {width:21px; height:17px;} -a.pickcolor:hover span {background-color:#B2BBD0;} -a.pickcolor:hover span.disabled {} - -/* Charmap */ -table.charmap {border:1px solid #AAA; text-align:center} -td.charmap, #charmap a {width:18px; height:18px; color:#000; border:1px solid #AAA; text-align:center; font-size:12px; vertical-align:middle; line-height: 18px;} -#charmap a {display:block; color:#000; text-decoration:none; border:0} -#charmap a:hover {background:#CCC;color:#2B6FB6} -#charmap #codeN {font-size:10px; font-family:Arial,Helvetica,sans-serif; text-align:center} -#charmap #codeV {font-size:40px; height:80px; border:1px solid #AAA; text-align:center} - -/* Source */ -.wordWrapCode {vertical-align:middle; border:1px none #000000; background:transparent;} -.mceActionPanel {margin-top:5px;} - -/* Tabs classes */ -.tabs {width:100%; height:18px; line-height:normal; background:url(../default/img/tabs.gif) repeat-x 0 -72px;} -.tabs ul {margin:0; padding:0; list-style:none;} -.tabs li {float:left; background:url(../default/img/tabs.gif) no-repeat 0 0; margin:0 2px 0 0; padding:0 0 0 10px; line-height:17px; height:18px; display:block;} -.tabs li.current {background:url(../default/img/tabs.gif) no-repeat 0 -18px; margin-right:2px;} -.tabs span {float:left; display:block; background:url(../default/img/tabs.gif) no-repeat right -36px; padding:0px 10px 0 0;} -.tabs .current span {background:url(../default/img/tabs.gif) no-repeat right -54px;} -.tabs a {text-decoration:none; font-family:Verdana, Arial; font-size:10px;} -.tabs a:link, .tabs a:visited, .tabs a:hover {color:black;} - -/* Panels */ -.panel_wrapper div.panel {display:none;} -.panel_wrapper div.current {display:block; width:100%; height:300px; overflow:visible;} -.panel_wrapper {border:1px solid #919B9C; border-top:0px; padding:10px; padding-top:5px; clear:both; background:white;} - -/* Columns */ -.column {float:left;} -.properties {width:100%;} -.properties .column1 {} -.properties .column2 {text-align:left;} - -/* Titles */ -h1, h2, h3, h4 {color:#2B6FB6; margin:0; padding:0; padding-top:5px;} -h3 {font-size:14px;} -.title {font-size:12px; font-weight:bold; color:#2B6FB6;} - -/* Dialog specific */ -#link .panel_wrapper, #link div.current {height:125px;} -#image .panel_wrapper, #image div.current {height:200px;} -#plugintable thead {font-weight:bold; background:#DDD;} -#plugintable, #about #plugintable td {border:1px solid #919B9C;} -#plugintable {width:96%; margin-top:10px;} -#pluginscontainer {height:290px; overflow:auto;} -#colorpicker #preview {display:inline-block; padding-left:40px; height:14px; border:1px solid black; margin-left:5px; margin-right: 5px} -#colorpicker #previewblock {position: relative; top: -3px; padding-left:5px; padding-top: 0px; display:inline} -#colorpicker #preview_wrapper { text-align:center; padding-top:4px; white-space: nowrap} -#colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;} -#colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;} -#colorpicker #light div {overflow:hidden;} -#colorpicker .panel_wrapper div.current {height:175px;} -#colorpicker #namedcolors {width:150px;} -#colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;} -#colorpicker #colornamecontainer {margin-top:5px;} -#colorpicker #picker_panel fieldset {margin:auto;width:325px;} diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png b/common/static/js/vendor/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png deleted file mode 100644 index 13a5cb03097c004f7b37658654a9250748cf073c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2766 zcmd^B`#;nBAK!9c(dCSc_`04XBu+J597MXvt(oeZlcJpHIOSO7atc#AMWG$3$V7)q zNx38nEwRmIE*oapX3E%2Y_rQ}@3ZgU@qIsD@7L?`e7_#g=kxt|zu!N+{|XHbG)7n; zU@(~Rf&KpB+Imzw{S0-qnWxWD!C*SD&>&2J76Jgq`yNnO3$>r8@B|Y69x0pfIh#Ow z)WjyX^8T)+6I-}NwZreI-$r>-HeZJQv#zX#Th_uMwsMIrlO4mNj{|cbX#CdxSrSA1 zi7x6G7Jj7hJB9?EBN7TrO5@0TC%zA`m*~?n<~POISNRA}Ix(kW@s(5astLYgTBw@h z%VrlKo=`C@ST1R1m9LYgOf7Md z%vzvMe5Z_y2DwWEoJHD{xNkz(%My(67Mb6qJc(v%ez|*GL}7^sxZ0gBO!Bo{;Q&WM zV~hKzM04L20BA!600h)@pk@MPCs0oSH5X{4K+yx#GXN3-jT}guz%o@MqX6}sMoQL5 zDbQRgH1}A|FIDkNfw)Q|r2+XcBpuQyW`K$hDQ1Cc9;n4YEdkIH;ALod*EG}Dz-$rp zodRS-8tD*F2^9QBm7ql>XjO|zDiH~iGQlzzD86d`M;8Iw0Wf$N3>*f7!C)X53}FF1 zT0@Toj5C077L3FL<|Sw<4{-A#&RxJIKpX-MAm?_cBlxb#&;M-FLuSz*n4d&h` zXWyvinw0!TAZh`kHX!Z*ViJ&afdz_MOab5f!Qzm5fd-Zs&>|hkCV+ej$T>j02*z+= z>_u@$tA>DwJ(UpDP?lurK+A9mzvO(D-+gFH)8MEW*O2c>3^gu}@HCz3w3$-%Bg0iD72j)nmts zO~01P6^cappH!;k{M1!%*t$nQ=-$~$cX+fEkj^3P+$d^La54PkS=(gpNkdn~8?D*hW^hb50#Qbv(Vr z7mux=@03*OzkBFr1euY0!)>k{MMqGw8F#U zRe``TW;?0PDm5oCUDqnyR2D|VTUKrljh??&VAFx_Y8>n0){SLYN4rN@58&~EY<8F( z0{QSBO|7FRtIxB?ykG0dfo2c-Y&e&zlYMnqkV9vq+=EwnBv2HB%MeBD4xS7LeKIpT_! z`x2_k`zl`LzeQ$W8QpB(KQ+0LVyEJr9M?0CO4qCq-VU);<`uj}<}S1&Q7xSe=5T(8 ziLmqu&AMuP>etg&fo)XY<9~c4ufJu@Ux>Osj0^B-);#sZ?RMt%g}dL*c}ZebdsbpF zCGfuwrDfcoU0*mJ)RD4V;PPr$+Lrfm`b7p-cJd8)xqdLm^ZH#<*JQfYJ~PoB*LK5| zH$C3CzsVSRfseg&M51H8?1)k+yOYwqQqn)B#!aMev)#63aXG;9DDJn_0c)Gxymon< zymu+j@mLckYTb1Up+$oES-Qj(fgx}5+7lCfvmr6-7IAsgPaDgPES=EUr(Q2%O-m}?RmP5S6{I{NuN(T6$1*`X7IJXi>l zhX)mey1{@?Zefvr;ZbWC>l|x544h)bavSVvqawV&>mHYcaIE7arJsyhy0aAZ28%Ea^Z`=aTvh4miaaN0)5vL*wCb?j}Dsf4O@AD!~!zsLr>lt6x7K z3`4aaD)%xv?5(p|tKkpFdnS6dqgrLbo&zQ4gEPu=g5tj(#rWP>nDR~6@jTSz^oix< mOkD9tMJf;J-L)*xtX8`HcJ}PmJwolr6m}pW*#DJZbk@H_2$Vel diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png b/common/static/js/vendor/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png deleted file mode 100644 index 7fc57f2bc2d63a3ad6fbf98b663f336539f011ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 651 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 O0000gng~>+0yq!tBh% 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 XtZb~ra4Vor00000NkvXXu0mjf(5kL( diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/skins/studio/img/items.gif b/common/static/js/vendor/tiny_mce/themes/advanced/skins/studio/img/items.gif deleted file mode 100644 index d2f93671ca3090b277e16a67b1aa6cfb6ac4915f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64 zcmZ?wbhEHbjEB<5wG8q|kKzxu41Cw-5|H{*E`4`XOxxoD9Y}F^Z SLTQbO*E^TJI;F+RU=09Vu@yA{ diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/skins/studio/img/menu_check.gif b/common/static/js/vendor/tiny_mce/themes/advanced/skins/studio/img/menu_check.gif deleted file mode 100644 index adfdddccd7cac62a17d68873fa53c248bff8351a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70 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 diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/skins/studio/ui.css b/common/static/js/vendor/tiny_mce/themes/advanced/skins/studio/ui.css deleted file mode 100644 index fc97eb6450..0000000000 --- a/common/static/js/vendor/tiny_mce/themes/advanced/skins/studio/ui.css +++ /dev/null @@ -1,259 +0,0 @@ -.studioSkin * { - -webkit-transition: none; - -moz-transition: none; - -ms-transition: none; - -o-transition: none; - transition: none; -} - -/* Reset */ -.studioSkin table, .studioSkin tbody, .studioSkin a, .studioSkin img, .studioSkin tr, .studioSkin div, .studioSkin td, .studioSkin iframe, .studioSkin span, .studioSkin *, .studioSkin .mceText {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000; vertical-align:baseline; width:auto; border-collapse:separate; text-align:left} -.studioSkin a:hover, .studioSkin a:link, .studioSkin a:visited, .studioSkin a:active {text-decoration:none; font-weight:normal; cursor:default; color:#000} -.studioSkin table td {vertical-align:middle} - -/* Containers */ -.studioSkin table {direction:ltr;background:transparent} -.studioSkin iframe {display:block;} -.studioSkin .mceToolbar {height:26px} -.studioSkin .mceLeft {text-align:left} -.studioSkin .mceRight {text-align:right} - -/* External */ -.studioSkin .mceExternalToolbar {position:absolute; border:1px solid #CCC; border-bottom:0; display:none;} -.studioSkin .mceExternalToolbar td.mceToolbar {padding-right:13px;} -.studioSkin .mceExternalClose {position:absolute; top:3px; right:3px; width:7px; height:7px; background:url(../../img/studio-icons.png) -820px 0} - -/* Layout */ -.studioSkin table.mceLayout {border:0;} -.studioSkin table.mceLayout tr.mceFirst td {border-top: 1px solid #D1DCE6; border-left: none; border-right:none;} -.studioSkin table.mceLayout tr.mceLast td {border-bottom:none;} -.studioSkin table.mceToolbar, .studioSkin tr.mceFirst .mceToolbar tr td, .studioSkin tr.mceLast .mceToolbar tr td {border:0; margin:0; padding:0;} -.studioSkin td.mceToolbar { - background: -webkit-linear-gradient(top, #d4dee8, #c9d5e2); - background: -moz-linear-gradient(top, #d4dee8, #c9d5e2); - background: -ms-linear-gradient(top, #d4dee8, #c9d5e2); - background: -o-linear-gradient(top, #d4dee8, #c9d5e2); - background: linear-gradient(top, #d4dee8, #c9d5e2); - border: 1px solid #3c3c3c; - border-bottom-color: #a5aaaf; - border-radius: 0; - padding: 10px 10px 9px; - vertical-align: top; -} -.studioSkin .mceIframeContainer {border: 1px solid white; border-top: none;} -.studioSkin .mceStatusbar {background:#F0F0EE; font-size:9pt; line-height:16px; overflow:visible; color:#000; display:block; height:20px} -.studioSkin .mceStatusbar div {float:left; margin:2px} -.studioSkin .mceStatusbar a.mceResize {display:block; float:right; background:url(../../img/studio-icons.png) -800px 0; width:20px; height:20px; cursor:se-resize; outline:0} -.studioSkin .mceStatusbar a:hover {text-decoration:underline} -.studioSkin table.mceToolbar {margin-left:3px} -.studioSkin span.mceIcon, .studioSkin img.mceIcon {display:block; width:20px; height:20px} -.studioSkin .mceIcon {background:url(../../img/studio-icons.png) no-repeat 20px 20px} -.studioSkin td.mceCenter {text-align:center;} -.studioSkin td.mceCenter table {margin:0 auto; text-align:left;} -.studioSkin td.mceRight table {margin:0 0 0 auto;} - -/* Button */ -.studioSkin .mceButton {display:block; border-radius: 2px; width:20px; height:20px; padding: 3px; margin-right:4px;} -.studioSkin a.mceButtonEnabled:hover {background: rgba(255, 255, 255, .5);} -.studioSkin a.mceButtonActive, .studioSkin a.mceButtonSelected { - /*background-color: #C2CBE0;*/ - background-color: #b6d1fa; - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.4) inset, 0 1px 0 rgba(255, 255, 255, 0.4), 0 0 0 1px rgba(0, 0, 0, 0.1) inset; -} -.studioSkin .mceButtonDisabled .mceIcon {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} -.studioSkin .mceButtonLabeled {width:auto} -.studioSkin .mceButtonLabeled span.mceIcon {float:left} -.studioSkin span.mceButtonLabel {display:block; font-size:10px; padding:4px 6px 0 22px; } -.studioSkin .mceButtonDisabled .mceButtonLabel {color:#888} - -/* Separator */ -.studioSkin .mceSeparator {display:block; background:url(../../img/studio-icons.png) -180px 0; width:2px; height:20px; margin: 2px 3px 0 5px;} - -/* ListBox */ -.studioSkin .mceListBox { - background: -webkit-linear-gradient(top, #dbe5ef, #cfdce9); - background: -moz-linear-gradient(top, #dbe5ef, #cfdce9); - background: -ms-linear-gradient(top, #dbe5ef, #cfdce9); - background: -o-linear-gradient(top, #dbe5ef, #cfdce9); - background: linear-gradient(top, #dbe5ef, #cfdce9); - box-shadow: 0 1px 0 rgba(255, 255, 255, 0.4) inset, 0 0 0 1px rgba(0, 0, 0, 0.2); - border-radius: 2px; - padding: 3px; - margin-right: 4px; -} -.studioSkin .mceListBox:hover { - background: -webkit-linear-gradient(top, #e6eff8, #d9e8f6); - background: -moz-linear-gradient(top, #e6eff8, #d9e8f6); - background: -ms-linear-gradient(top, #e6eff8, #d9e8f6); - background: -o-linear-gradient(top, #e6eff8, #d9e8f6); - background: linear-gradient(top, #e6eff8, #d9e8f6); -} -.studioSkin .mceListBox, .studioSkin .mceListBox a {display:block} -.studioSkin .mceListBox .mceText {padding-left:4px; width:70px; text-align:left; font-size:11px; height:20px; line-height:20px; overflow:hidden} -.studioSkin .mceListBox .mceOpen {width:9px; height:20px; background:url(../../img/studio-icons.png) -741px 0; margin-right:2px;} -.studioSkin .mceListBoxDisabled a.mceText {color:gray; background-color:transparent;} -.studioSkin .mceListBoxMenu {overflow:auto; overflow-x:hidden} -.studioSkin .mceOldBoxModel .mceListBox .mceText {height:22px} -.studioSkin .mceOldBoxModel .mceListBox .mceOpen {width:11px; height:22px;} -.studioSkin select.mceNativeListBox {font-size:7pt; background:#F0F0EE; border:1px solid gray; margin-right:2px;} - -/* SplitButton */ -.studioSkin .mceSplitButton {width:30px; height:20px; direction:ltr; border-radius: 2px; padding: 3px; margin-right:4px;} -.studioSkin .mceSplitButton:hover { background-color: rgba(255, 255, 255, .5); } -.studioSkin .mceSplitButton a, .studioSkin .mceSplitButton span {height:20px; display:block} -.studioSkin .mceSplitButton a.mceAction {width:20px; border-right:0;} -.studioSkin .mceSplitButton span.mceAction {width:20px; background-image:url(../../img/studio-icons.png);} -.studioSkin .mceSplitButton a.mceOpen {width:9px; background:url(../../img/studio-icons.png) -741px 0;} -.studioSkin .mceSplitButton span.mceOpen {display:none} -/*.studioSkin table.mceSplitButtonEnabled:hover a.mceAction, .studioSkin .mceSplitButtonHover a.mceAction, .studioSkin .mceSplitButtonSelected a.mceAction {background: rgba(255, 255, 255, .5);} -.studioSkin table.mceSplitButtonEnabled:hover a.mceOpen, .studioSkin .mceSplitButtonHover a.mceOpen, .studioSkin .mceSplitButtonSelected a.mceOpen {background-color: rgba(255, 255, 255, .5);}*/ -.studioSkin .mceSplitButtonDisabled .mceAction, .studioSkin .mceSplitButtonDisabled a.mceOpen {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} -.studioSkin .mceSplitButtonActive a.mceAction {border:1px solid #0A246A; background-color:#C2CBE0} -.studioSkin .mceSplitButtonActive a.mceOpen {border-left:0;} - -/* ColorSplitButton */ -.studioSkin div.mceColorSplitMenu table {background:#FFF; border:1px solid gray} -.studioSkin .mceColorSplitMenu td {padding:2px} -.studioSkin .mceColorSplitMenu a {display:block; width:9px; height:9px; overflow:hidden; border:1px solid #808080} -.studioSkin .mceColorSplitMenu td.mceMoreColors {padding:1px 3px 1px 1px} -.studioSkin .mceColorSplitMenu a.mceMoreColors {width:100%; height:auto; text-align:center; font-size:11px; line-height:20px; border:1px solid #FFF} -.studioSkin .mceColorSplitMenu a.mceMoreColors:hover {border:1px solid #0A246A; background-color:#B6BDD2} -.studioSkin a.mceMoreColors:hover {border:1px solid #0A246A} -.studioSkin .mceColorPreview {margin-left:2px; width:16px; height:4px; overflow:hidden; background:#9a9b9a} -.studioSkin .mce_forecolor span.mceAction, .studioSkin .mce_backcolor span.mceAction {overflow:hidden; height:16px} - -/* Menu */ -.studioSkin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid #D4D0C8; direction:ltr} -.studioSkin .mceNoIcons span.mceIcon {width:0;} -.studioSkin .mceNoIcons a .mceText {padding-left:10px} -.studioSkin .mceMenu table {background:#FFF} -.studioSkin .mceMenu a, .studioSkin .mceMenu span, .studioSkin .mceMenu {display:block} -.studioSkin .mceMenu td {height:20px} -.studioSkin .mceMenu a {position:relative;padding:3px 0 4px 0} -.studioSkin .mceMenu .mceText {position:relative; display:block; cursor:default; margin:0; padding:0 25px 0 25px; display:block} -.studioSkin .mceMenu span.mceText, .studioSkin .mceMenu .mcePreview {font-size:11px} -.studioSkin .mceMenu pre.mceText {font-family:Monospace} -.studioSkin .mceMenu .mceIcon {position:absolute; top:0; left:0; width:22px;} -.studioSkin .mceMenu .mceMenuItemEnabled a:hover, .studioSkin .mceMenu .mceMenuItemActive {background-color:#dbecf3} -.studioSkin td.mceMenuItemSeparator {background:#DDD; height:1px} -.studioSkin .mceMenuItemTitle a {border:0; background:#EEE; border-bottom:1px solid #DDD} -.studioSkin .mceMenuItemTitle span.mceText {color:#000; font-weight:bold; padding-left:4px} -.studioSkin .mceMenuItemDisabled .mceText {color:#888} -.studioSkin .mceMenuItemSelected .mceIcon {background:url(img/menu_check.gif)} -.studioSkin .mceNoIcons .mceMenuItemSelected a {background:url(img/menu_arrow.gif) no-repeat -6px center} -.studioSkin .mceMenu span.mceMenuLine {display:none} -.studioSkin .mceMenuItemSub a {background:url(img/menu_arrow.gif) no-repeat top right;} -.studioSkin .mceMenuItem td, .studioSkin .mceMenuItem th {line-height: normal} - -/* Progress,Resize */ -.studioSkin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; -ms-filter:'alpha(opacity=50)'; filter:alpha(opacity=50); background:#FFF} -.studioSkin .mceProgress {position:absolute; left:0; top:0; z-index:1001; background:url(img/progress.gif) no-repeat; width:32px; height:32px; margin:-16px 0 0 -16px} - -/* Rtl */ -.mceRtl .mceListBox .mceText {text-align: right; padding: 0 4px 0 0} -.mceRtl .mceMenuItem .mceText {text-align: right} - -/* Formats */ -.studioSkin .mce_formatPreview a {font-size:10px} -.studioSkin .mce_p span.mceText {} -.studioSkin .mce_address span.mceText {font-style:italic} -.studioSkin .mce_pre span.mceText {font-family:monospace} -.studioSkin .mce_h1 span.mceText {font-weight:bolder; font-size: 2em} -.studioSkin .mce_h2 span.mceText {font-weight:bolder; font-size: 1.5em} -.studioSkin .mce_h3 span.mceText {font-weight:bolder; font-size: 1.17em} -.studioSkin .mce_h4 span.mceText {font-weight:bolder; font-size: 1em} -.studioSkin .mce_h5 span.mceText {font-weight:bolder; font-size: .83em} -.studioSkin .mce_h6 span.mceText {font-weight:bolder; font-size: .75em} - -/* Theme */ -.studioSkin span.mce_bold {background-position:0 0} -.studioSkin span.mce_italic {background-position:-60px 0} -.studioSkin span.mce_underline {background-position:-140px 0} -.studioSkin span.mce_strikethrough {background-position:-120px 0} -.studioSkin span.mce_undo {background-position:-160px 0} -.studioSkin span.mce_redo {background-position:-100px 0} -.studioSkin span.mce_cleanup {background-position:-40px 0} -.studioSkin span.mce_bullist {background-position:-20px 0} -.studioSkin span.mce_numlist {background-position:-80px 0} -.studioSkin span.mce_justifyleft {background-position:-460px 0} -.studioSkin span.mce_justifyright {background-position:-480px 0} -.studioSkin span.mce_justifycenter {background-position:-420px 0} -.studioSkin span.mce_justifyfull {background-position:-440px 0} -.studioSkin span.mce_anchor {background-position:-200px 0} -.studioSkin span.mce_indent {background-position:-400px 0} -.studioSkin span.mce_outdent {background-position:-540px 0} -.studioSkin span.mce_link {background-position:-500px 0} -.studioSkin span.mce_unlink {background-position:-640px 0} -.studioSkin span.mce_sub {background-position:-600px 0} -.studioSkin span.mce_sup {background-position:-620px 0} -.studioSkin span.mce_removeformat {background-position:-580px 0} -.studioSkin span.mce_newdocument {background-position:-520px 0} -.studioSkin span.mce_image {background-position:-380px 0} -.studioSkin span.mce_help {background-position:-340px 0} -.studioSkin span.mce_code {background-position:-260px 0} -.studioSkin span.mce_hr {background-position:-360px 0} -.studioSkin span.mce_visualaid {background-position:-660px 0} -.studioSkin span.mce_charmap {background-position:-240px 0} -.studioSkin span.mce_paste {background-position:-560px 0} -.studioSkin span.mce_copy {background-position:-700px 0} -.studioSkin span.mce_cut {background-position:-680px 0} -.studioSkin span.mce_blockquote {background-position:-220px 0} -.studioSkin .mce_forecolor span.mceAction {background-position:-720px 0} -.studioSkin .mce_backcolor span.mceAction {background-position:-760px 0} -.studioSkin span.mce_forecolorpicker {background-position:-720px 0} -.studioSkin span.mce_backcolorpicker {background-position:-760px 0} - -/* Plugins */ -.studioSkin span.mce_advhr {background-position:-0px -20px} -.studioSkin span.mce_ltr {background-position:-20px -20px} -.studioSkin span.mce_rtl {background-position:-40px -20px} -.studioSkin span.mce_emotions {background-position:-60px -20px} -.studioSkin span.mce_fullpage {background-position:-80px -20px} -.studioSkin span.mce_fullscreen {background-position:-100px -20px} -.studioSkin span.mce_iespell {background-position:-120px -20px} -.studioSkin span.mce_insertdate {background-position:-140px -20px} -.studioSkin span.mce_inserttime {background-position:-160px -20px} -.studioSkin span.mce_absolute {background-position:-180px -20px} -.studioSkin span.mce_backward {background-position:-200px -20px} -.studioSkin span.mce_forward {background-position:-220px -20px} -.studioSkin span.mce_insert_layer {background-position:-240px -20px} -.studioSkin span.mce_insertlayer {background-position:-260px -20px} -.studioSkin span.mce_movebackward {background-position:-280px -20px} -.studioSkin span.mce_moveforward {background-position:-300px -20px} -.studioSkin span.mce_media {background-position:-320px -20px} -.studioSkin span.mce_nonbreaking {background-position:-340px -20px} -.studioSkin span.mce_pastetext {background-position:-360px -20px} -.studioSkin span.mce_pasteword {background-position:-380px -20px} -.studioSkin span.mce_selectall {background-position:-400px -20px} -.studioSkin span.mce_preview {background-position:-420px -20px} -.studioSkin span.mce_print {background-position:-440px -20px} -.studioSkin span.mce_cancel {background-position:-460px -20px} -.studioSkin span.mce_save {background-position:-480px -20px} -.studioSkin span.mce_replace {background-position:-500px -20px} -.studioSkin span.mce_search {background-position:-520px -20px} -.studioSkin span.mce_styleprops {background-position:-560px -20px} -.studioSkin span.mce_table {background-position:-580px -20px} -.studioSkin span.mce_cell_props {background-position:-600px -20px} -.studioSkin span.mce_delete_table {background-position:-620px -20px} -.studioSkin span.mce_delete_col {background-position:-640px -20px} -.studioSkin span.mce_delete_row {background-position:-660px -20px} -.studioSkin span.mce_col_after {background-position:-680px -20px} -.studioSkin span.mce_col_before {background-position:-700px -20px} -.studioSkin span.mce_row_after {background-position:-720px -20px} -.studioSkin span.mce_row_before {background-position:-740px -20px} -.studioSkin span.mce_merge_cells {background-position:-760px -20px} -.studioSkin span.mce_table_props {background-position:-980px -20px} -.studioSkin span.mce_row_props {background-position:-780px -20px} -.studioSkin span.mce_split_cells {background-position:-800px -20px} -.studioSkin span.mce_template {background-position:-820px -20px} -.studioSkin span.mce_visualchars {background-position:-840px -20px} -.studioSkin span.mce_abbr {background-position:-860px -20px} -.studioSkin span.mce_acronym {background-position:-880px -20px} -.studioSkin span.mce_attribs {background-position:-900px -20px} -.studioSkin span.mce_cite {background-position:-920px -20px} -.studioSkin span.mce_del {background-position:-940px -20px} -.studioSkin span.mce_ins {background-position:-960px -20px} -.studioSkin span.mce_pagebreak {background-position:0 -40px} -.studioSkin span.mce_restoredraft {background-position:-20px -40px} -.studioSkin span.mce_spellchecker {background-position:-540px -20px} -.studioSkin span.mce_visualblocks {background-position: -40px -40px} diff --git a/common/static/js/vendor/tiny_mce/themes/advanced/source_editor.htm b/common/static/js/vendor/tiny_mce/themes/advanced/source_editor.htm deleted file mode 100644 index 2861e05698..0000000000 --- a/common/static/js/vendor/tiny_mce/themes/advanced/source_editor.htm +++ /dev/null @@ -1,25 +0,0 @@ - - - {#advanced_dlg.code_title} - - - - -
-
- -
- -
- -
- - - -
- - -
-
- - diff --git a/common/static/js/vendor/tiny_mce/themes/modern/theme.min.js b/common/static/js/vendor/tiny_mce/themes/modern/theme.min.js new file mode 100644 index 0000000000..ced2ffc763 --- /dev/null +++ b/common/static/js/vendor/tiny_mce/themes/modern/theme.min.js @@ -0,0 +1 @@ +tinymce.ThemeManager.add("modern",function(e){function t(){function t(t){var i,o=[];if(t)return d(t.split(/[ ,]/),function(t){function n(){var n=e.selection;"bullist"==r&&n.selectorChanged("ul > li",function(e,n){for(var i,o=n.parents.length;o--&&(i=n.parents[o].nodeName,"OL"!=i&&"UL"!=i););t.active(e&&"UL"==i)}),"numlist"==r&&n.selectorChanged("ol > li",function(e,n){for(var i,o=n.parents.length;o--&&(i=n.parents[o].nodeName,"OL"!=i&&"UL"!=i););t.active(e&&"OL"==i)}),t.settings.stateSelector&&n.selectorChanged(t.settings.stateSelector,function(e){t.active(e)},!0),t.settings.disabledStateSelector&&n.selectorChanged(t.settings.disabledStateSelector,function(e){t.disabled(e)})}var r;"|"==t?i=null:c.has(t)?(t={type:t},u.toolbar_items_size&&(t.size=u.toolbar_items_size),o.push(t),i=null):(i||(i={type:"buttongroup",items:[]},o.push(i)),e.buttons[t]&&(r=t,t=e.buttons[r],"function"==typeof t&&(t=t()),t.type=t.type||"button",u.toolbar_items_size&&(t.size=u.toolbar_items_size),t=c.create(t),i.items.push(t),e.initialized?n():e.on("init",n)))}),n.push({type:"toolbar",layout:"flow",items:o}),!0}for(var n=[],i=1;10>i&&t(u["toolbar"+i]);i++);return n.length||t(u.toolbar||f),n}function n(){function t(t){var n;return"|"==t?{text:"|"}:n=e.menuItems[t]}function n(n){var i,o,r,s,a;if(a=tinymce.makeMap((u.removed_menuitems||"").split(/[ ,]/)),u.menu?(o=u.menu[n],s=!0):o=h[n],o){i={text:o.title},r=[],d((o.items||"").split(/[ ,]/),function(e){var n=t(e);n&&!a[e]&&r.push(t(e))}),s||d(e.menuItems,function(e){e.context==n&&("before"==e.separator&&r.push({text:"|"}),e.prependToContext?r.unshift(e):r.push(e),"after"==e.separator&&r.push({text:"|"}))});for(var l=0;lkQU|4+kcV*u?6Yu2z|Nk2X_I-c9E~4fBsnb_x z&7Ngzq1inB@Woqi-rnfiGF7yw9zM z^p;~=3MY4TT)2AY!iC=7fBwej_wPS(UDm1P!}|}9?`#au+qhx#R?Fl=KuakHia%Lc z85lGfbU;Rd{N%v)|G<<24;`ug6HAIt=2*?Yu%d)ZG@><(acbwmDSj%f4MMZ#%vkt3 z%+g~)i8kP^LLB_(WJHBo z)4eilyozQ8a&qqSt%<6xpa0;xA7k;M?mchbzI*>+`RnL~M?L!{MDwZt;o_B2F2$0=pQSpQ!u@RcUGT{(44KaY91N#ws_nDH9G%Qf=ZF z5o_THWH`G~`GwyilS^z$ZvV~I`dh4Lx_8c>?R@8gr-07UIgFjp0y#A&c{B)cE>2kS zL5I1;i$zoEA)6qV`HGJvVWE!{8MZ6ST|PC}d%Kid7{KiD{l18xziSGKuWtj9AkWy-*`}#c~0`Lrjq> z-;O-o=3A#@&dst%_SasuJq0xZW;OwR3vM!diY%Es?;J~Pp}LYununP(i|XxU>#u=* zSvNC^0?cJ=S?=UK4&2DdcCO^BsHxjWc4vR-Z64x&8r#>V9!JMd4O!Z*d@mNrgX=jUy;0|T>ZntHjDU$=-I8y`|tN~Y9 diff --git a/common/static/js/vendor/tiny_mce/themes/simple/langs/en.js b/common/static/js/vendor/tiny_mce/themes/simple/langs/en.js deleted file mode 100644 index 088ed0fcbe..0000000000 --- a/common/static/js/vendor/tiny_mce/themes/simple/langs/en.js +++ /dev/null @@ -1 +0,0 @@ -tinyMCE.addI18n('en.simple',{"cleanup_desc":"Cleanup Messy Code","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","numlist_desc":"Insert/Remove Numbered List","bullist_desc":"Insert/Remove Bulleted List","striketrough_desc":"Strikethrough","underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)"}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/themes/simple/skins/default/content.css b/common/static/js/vendor/tiny_mce/themes/simple/skins/default/content.css deleted file mode 100644 index 783b170f70..0000000000 --- a/common/static/js/vendor/tiny_mce/themes/simple/skins/default/content.css +++ /dev/null @@ -1,25 +0,0 @@ -body, td, pre { - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 10px; -} - -body { - background-color: #FFFFFF; -} - -.mceVisualAid { - border: 1px dashed #BBBBBB; -} - -/* MSIE specific */ - -* html body { - scrollbar-3dlight-color: #F0F0EE; - scrollbar-arrow-color: #676662; - scrollbar-base-color: #F0F0EE; - scrollbar-darkshadow-color: #DDDDDD; - scrollbar-face-color: #E0E0DD; - scrollbar-highlight-color: #F0F0EE; - scrollbar-shadow-color: #F0F0EE; - scrollbar-track-color: #F5F5F5; -} diff --git a/common/static/js/vendor/tiny_mce/themes/simple/skins/default/ui.css b/common/static/js/vendor/tiny_mce/themes/simple/skins/default/ui.css deleted file mode 100644 index 32feae628d..0000000000 --- a/common/static/js/vendor/tiny_mce/themes/simple/skins/default/ui.css +++ /dev/null @@ -1,32 +0,0 @@ -/* Reset */ -.defaultSimpleSkin table, .defaultSimpleSkin tbody, .defaultSimpleSkin a, .defaultSimpleSkin img, .defaultSimpleSkin tr, .defaultSimpleSkin div, .defaultSimpleSkin td, .defaultSimpleSkin iframe, .defaultSimpleSkin span, .defaultSimpleSkin * {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000} - -/* Containers */ -.defaultSimpleSkin {position:relative} -.defaultSimpleSkin table.mceLayout {background:#F0F0EE; border:1px solid #CCC;} -.defaultSimpleSkin iframe {display:block; background:#FFF; border-bottom:1px solid #CCC;} -.defaultSimpleSkin .mceToolbar {height:24px;} - -/* Layout */ -.defaultSimpleSkin span.mceIcon, .defaultSimpleSkin img.mceIcon {display:block; width:20px; height:20px} -.defaultSimpleSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px} - -/* Button */ -.defaultSimpleSkin .mceButton {display:block; border:1px solid #F0F0EE; width:20px; height:20px} -.defaultSimpleSkin a.mceButtonEnabled:hover {border:1px solid #0A246A; background-color:#B2BBD0} -.defaultSimpleSkin a.mceButtonActive {border:1px solid #0A246A; background-color:#C2CBE0} -.defaultSimpleSkin .mceButtonDisabled span {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} - -/* Separator */ -.defaultSimpleSkin .mceSeparator {display:block; background:url(../../img/icons.gif) -180px 0; width:2px; height:20px; margin:0 2px 0 4px} - -/* Theme */ -.defaultSimpleSkin span.mce_bold {background-position:0 0} -.defaultSimpleSkin span.mce_italic {background-position:-60px 0} -.defaultSimpleSkin span.mce_underline {background-position:-140px 0} -.defaultSimpleSkin span.mce_strikethrough {background-position:-120px 0} -.defaultSimpleSkin span.mce_undo {background-position:-160px 0} -.defaultSimpleSkin span.mce_redo {background-position:-100px 0} -.defaultSimpleSkin span.mce_cleanup {background-position:-40px 0} -.defaultSimpleSkin span.mce_insertunorderedlist {background-position:-20px 0} -.defaultSimpleSkin span.mce_insertorderedlist {background-position:-80px 0} diff --git a/common/static/js/vendor/tiny_mce/themes/simple/skins/o2k7/content.css b/common/static/js/vendor/tiny_mce/themes/simple/skins/o2k7/content.css deleted file mode 100644 index e10558f9d4..0000000000 --- a/common/static/js/vendor/tiny_mce/themes/simple/skins/o2k7/content.css +++ /dev/null @@ -1,17 +0,0 @@ -body, td, pre {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;} - -body {background: #FFF;} -.mceVisualAid {border: 1px dashed #BBB;} - -/* IE */ - -* html body { -scrollbar-3dlight-color: #F0F0EE; -scrollbar-arrow-color: #676662; -scrollbar-base-color: #F0F0EE; -scrollbar-darkshadow-color: #DDDDDD; -scrollbar-face-color: #E0E0DD; -scrollbar-highlight-color: #F0F0EE; -scrollbar-shadow-color: #F0F0EE; -scrollbar-track-color: #F5F5F5; -} diff --git a/common/static/js/vendor/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png b/common/static/js/vendor/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png deleted file mode 100644 index 527e3495a653e57d76bf7e55316793d17dda497a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5102 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 VmjT$ODWe$zObpERYjs_s{s;8{A&me4 diff --git a/common/static/js/vendor/tiny_mce/themes/simple/skins/o2k7/ui.css b/common/static/js/vendor/tiny_mce/themes/simple/skins/o2k7/ui.css deleted file mode 100644 index 021d650f7d..0000000000 --- a/common/static/js/vendor/tiny_mce/themes/simple/skins/o2k7/ui.css +++ /dev/null @@ -1,35 +0,0 @@ -/* Reset */ -.o2k7SimpleSkin table, .o2k7SimpleSkin tbody, .o2k7SimpleSkin a, .o2k7SimpleSkin img, .o2k7SimpleSkin tr, .o2k7SimpleSkin div, .o2k7SimpleSkin td, .o2k7SimpleSkin iframe, .o2k7SimpleSkin span, .o2k7SimpleSkin * {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000} - -/* Containers */ -.o2k7SimpleSkin {position:relative} -.o2k7SimpleSkin table.mceLayout {background:#E5EFFD; border:1px solid #ABC6DD;} -.o2k7SimpleSkin iframe {display:block; background:#FFF; border-bottom:1px solid #ABC6DD;} -.o2k7SimpleSkin .mceToolbar {height:26px;} - -/* Layout */ -.o2k7SimpleSkin .mceToolbar .mceToolbarStart span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px; } -.o2k7SimpleSkin .mceToolbar .mceToolbarEnd span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px} -.o2k7SimpleSkin span.mceIcon, .o2k7SimpleSkin img.mceIcon {display:block; width:20px; height:20px} -.o2k7SimpleSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px} - -/* Button */ -.o2k7SimpleSkin .mceButton {display:block; background:url(img/button_bg.png); width:22px; height:22px} -.o2k7SimpleSkin a.mceButton span, .o2k7SimpleSkin a.mceButton img {margin:1px 0 0 1px} -.o2k7SimpleSkin a.mceButtonEnabled:hover {background-color:#B2BBD0; background-position:0 -22px} -.o2k7SimpleSkin a.mceButtonActive {background-position:0 -44px} -.o2k7SimpleSkin .mceButtonDisabled span {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} - -/* Separator */ -.o2k7SimpleSkin .mceSeparator {display:block; background:url(img/button_bg.png) -22px 0; width:5px; height:22px} - -/* Theme */ -.o2k7SimpleSkin span.mce_bold {background-position:0 0} -.o2k7SimpleSkin span.mce_italic {background-position:-60px 0} -.o2k7SimpleSkin span.mce_underline {background-position:-140px 0} -.o2k7SimpleSkin span.mce_strikethrough {background-position:-120px 0} -.o2k7SimpleSkin span.mce_undo {background-position:-160px 0} -.o2k7SimpleSkin span.mce_redo {background-position:-100px 0} -.o2k7SimpleSkin span.mce_cleanup {background-position:-40px 0} -.o2k7SimpleSkin span.mce_insertunorderedlist {background-position:-20px 0} -.o2k7SimpleSkin span.mce_insertorderedlist {background-position:-80px 0} diff --git a/common/static/js/vendor/tiny_mce/tiny_mce.js b/common/static/js/vendor/tiny_mce/tiny_mce.js deleted file mode 100644 index 4387febff9..0000000000 --- a/common/static/js/vendor/tiny_mce/tiny_mce.js +++ /dev/null @@ -1 +0,0 @@ -(function(e){var a=/^\s*|\s*$/g,b,d="B".replace(/A(.)|B/,"$1")==="$1";var c={majorVersion:"3",minorVersion:"5.8",releaseDate:"2012-11-20",_init:function(){var s=this,q=document,o=navigator,g=o.userAgent,m,f,l,k,j,r;s.isOpera=e.opera&&opera.buildNumber;s.isWebKit=/WebKit/.test(g);s.isIE=!s.isWebKit&&!s.isOpera&&(/MSIE/gi).test(g)&&(/Explorer/gi).test(o.appName);s.isIE6=s.isIE&&/MSIE [56]/.test(g);s.isIE7=s.isIE&&/MSIE [7]/.test(g);s.isIE8=s.isIE&&/MSIE [8]/.test(g);s.isIE9=s.isIE&&/MSIE [9]/.test(g);s.isGecko=!s.isWebKit&&/Gecko/.test(g);s.isMac=g.indexOf("Mac")!=-1;s.isAir=/adobeair/i.test(g);s.isIDevice=/(iPad|iPhone)/.test(g);s.isIOS5=s.isIDevice&&g.match(/AppleWebKit\/(\d*)/)[1]>=534;if(e.tinyMCEPreInit){s.suffix=tinyMCEPreInit.suffix;s.baseURL=tinyMCEPreInit.base;s.query=tinyMCEPreInit.query;return}s.suffix="";f=q.getElementsByTagName("base");for(m=0;m0?b:[f.scope]);if(e===false){break}}a.inDispatch=false;return e}});(function(){var a=tinymce.each;tinymce.create("tinymce.util.URI",{URI:function(e,g){var f=this,i,d,c,h;e=tinymce.trim(e);g=f.settings=g||{};if(/^([\w\-]+):([^\/]{2})/i.test(e)||/^\s*#/.test(e)){f.source=e;return}if(e.indexOf("/")===0&&e.indexOf("//")!==0){e=(g.base_uri?g.base_uri.protocol||"http":"http")+"://mce_host"+e}if(!/^[\w\-]*:?\/\//.test(e)){h=g.base_uri?g.base_uri.path:new tinymce.util.URI(location.href).directory;e=((g.base_uri&&g.base_uri.protocol)||"http")+"://mce_host"+f.toAbsPath(h,e)}e=e.replace(/@@/g,"(mce_at)");e=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(e);a(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],function(b,j){var k=e[j];if(k){k=k.replace(/\(mce_at\)/g,"@@")}f[b]=k});c=g.base_uri;if(c){if(!f.protocol){f.protocol=c.protocol}if(!f.userInfo){f.userInfo=c.userInfo}if(!f.port&&f.host==="mce_host"){f.port=c.port}if(!f.host||f.host==="mce_host"){f.host=c.host}f.source=""}},setPath:function(c){var b=this;c=/^(.*?)\/?(\w+)?$/.exec(c);b.path=c[0];b.directory=c[1];b.file=c[2];b.source="";b.getURI()},toRelative:function(b){var d=this,f;if(b==="./"){return b}b=new tinymce.util.URI(b,{base_uri:d});if((b.host!="mce_host"&&d.host!=b.host&&b.host)||d.port!=b.port||d.protocol!=b.protocol){return b.getURI()}var c=d.getURI(),e=b.getURI();if(c==e||(c.charAt(c.length-1)=="/"&&c.substr(0,c.length-1)==e)){return c}f=d.toRelPath(d.path,b.path);if(b.query){f+="?"+b.query}if(b.anchor){f+="#"+b.anchor}return f},toAbsolute:function(b,c){b=new tinymce.util.URI(b,{base_uri:this});return b.getURI(this.host==b.host&&this.protocol==b.protocol?c:0)},toRelPath:function(g,h){var c,f=0,d="",e,b;g=g.substring(0,g.lastIndexOf("/"));g=g.split("/");c=h.split("/");if(g.length>=c.length){for(e=0,b=g.length;e=c.length||g[e]!=c[e]){f=e+1;break}}}if(g.length=g.length||g[e]!=c[e]){f=e+1;break}}}if(f===1){return h}for(e=0,b=g.length-(f-1);e=0;c--){if(f[c].length===0||f[c]==="."){continue}if(f[c]===".."){b++;continue}if(b>0){b--;continue}h.push(f[c])}c=e.length-b;if(c<=0){g=h.reverse().join("/")}else{g=e.slice(0,c).join("/")+"/"+h.reverse().join("/")}if(g.indexOf("/")!==0){g="/"+g}if(d&&g.lastIndexOf("/")!==g.length-1){g+=d}return g},getURI:function(d){var c,b=this;if(!b.source||d){c="";if(!d){if(b.protocol){c+=b.protocol+"://"}if(b.userInfo){c+=b.userInfo+"@"}if(b.host){c+=b.host}if(b.port){c+=":"+b.port}}if(b.path){c+=b.path}if(b.query){c+="?"+b.query}if(b.anchor){c+="#"+b.anchor}b.source=c}return b.source}})})();(function(){var a=tinymce.each;tinymce.create("static tinymce.util.Cookie",{getHash:function(d){var b=this.get(d),c;if(b){a(b.split("&"),function(e){e=e.split("=");c=c||{};c[unescape(e[0])]=unescape(e[1])})}return c},setHash:function(j,b,g,f,i,c){var h="";a(b,function(e,d){h+=(!h?"":"&")+escape(d)+"="+escape(e)});this.set(j,h,g,f,i,c)},get:function(i){var h=document.cookie,g,f=i+"=",d;if(!h){return}d=h.indexOf("; "+f);if(d==-1){d=h.indexOf(f);if(d!==0){return null}}else{d+=2}g=h.indexOf(";",d);if(g==-1){g=h.length}return unescape(h.substring(d+f.length,g))},set:function(i,b,g,f,h,c){document.cookie=i+"="+escape(b)+((g)?"; expires="+g.toGMTString():"")+((f)?"; path="+escape(f):"")+((h)?"; domain="+h:"")+((c)?"; secure":"")},remove:function(c,e,d){var b=new Date();b.setTime(b.getTime()-1000);this.set(c,"",b,e,d)}})})();(function(){function serialize(o,quote){var i,v,t,name;quote=quote||'"';if(o==null){return"null"}t=typeof o;if(t=="string"){v="\bb\tt\nn\ff\rr\"\"''\\\\";return quote+o.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g,function(a,b){if(quote==='"'&&a==="'"){return a}i=v.indexOf(b);if(i+1){return"\\"+v.charAt(i+1)}a=b.charCodeAt().toString(16);return"\\u"+"0000".substring(a.length)+a})+quote}if(t=="object"){if(o.hasOwnProperty&&Object.prototype.toString.call(o)==="[object Array]"){for(i=0,v="[";i0?",":"")+serialize(o[i],quote)}return v+"]"}v="{";for(name in o){if(o.hasOwnProperty(name)){v+=typeof o[name]!="function"?(v.length>1?","+quote:quote)+name+quote+":"+serialize(o[name],quote):""}}return v+"}"}return""+o}tinymce.util.JSON={serialize:serialize,parse:function(s){try{return eval("("+s+")")}catch(ex){}}}})();tinymce.create("static tinymce.util.XHR",{send:function(g){var a,e,b=window,h=0;function f(){if(!g.async||a.readyState==4||h++>10000){if(g.success&&h<10000&&a.status==200){g.success.call(g.success_scope,""+a.responseText,a,g)}else{if(g.error){g.error.call(g.error_scope,h>10000?"TIMED_OUT":"GENERAL",a,g)}}a=null}else{b.setTimeout(f,10)}}g.scope=g.scope||this;g.success_scope=g.success_scope||g.scope;g.error_scope=g.error_scope||g.scope;g.async=g.async===false?false:true;g.data=g.data||"";function d(i){a=0;try{a=new ActiveXObject(i)}catch(c){}return a}a=b.XMLHttpRequest?new XMLHttpRequest():d("Microsoft.XMLHTTP")||d("Msxml2.XMLHTTP");if(a){if(a.overrideMimeType){a.overrideMimeType(g.content_type)}a.open(g.type||(g.data?"POST":"GET"),g.url,g.async);if(g.content_type){a.setRequestHeader("Content-Type",g.content_type)}a.setRequestHeader("X-Requested-With","XMLHttpRequest");a.send(g.data);if(!g.async){return f()}e=b.setTimeout(f,10)}}});(function(){var c=tinymce.extend,b=tinymce.util.JSON,a=tinymce.util.XHR;tinymce.create("tinymce.util.JSONRequest",{JSONRequest:function(d){this.settings=c({},d);this.count=0},send:function(f){var e=f.error,d=f.success;f=c(this.settings,f);f.success=function(h,g){h=b.parse(h);if(typeof(h)=="undefined"){h={error:"JSON Parse error."}}if(h.error){e.call(f.error_scope||f.scope,h.error,g)}else{d.call(f.success_scope||f.scope,h.result)}};f.error=function(h,g){if(e){e.call(f.error_scope||f.scope,h,g)}};f.data=b.serialize({id:f.id||"c"+(this.count++),method:f.method,params:f.params});f.content_type="application/json";a.send(f)},"static":{sendRPC:function(d){return new tinymce.util.JSONRequest().send(d)}}})}());(function(a){a.VK={BACKSPACE:8,DELETE:46,DOWN:40,ENTER:13,LEFT:37,RIGHT:39,SPACEBAR:32,TAB:9,UP:38,modifierPressed:function(b){return b.shiftKey||b.ctrlKey||b.altKey},metaKeyPressed:function(b){return a.isMac?b.metaKey:b.ctrlKey&&!b.altKey}}})(tinymce);tinymce.util.Quirks=function(a){var j=tinymce.VK,f=j.BACKSPACE,k=j.DELETE,e=a.dom,l=a.selection,H=a.settings,v=a.parser,o=a.serializer,E=tinymce.each;function A(N,M){try{a.getDoc().execCommand(N,false,M)}catch(L){}}function n(){var L=a.getDoc().documentMode;return L?L:6}function z(L){return L.isDefaultPrevented()}function J(){function L(O){var M,Q,N,P;M=l.getRng();Q=e.getParent(M.startContainer,e.isBlock);if(O){Q=e.getNext(Q,e.isBlock)}if(Q){N=Q.firstChild;while(N&&N.nodeType==3&&N.nodeValue.length===0){N=N.nextSibling}if(N&&N.nodeName==="SPAN"){P=N.cloneNode(false)}}E(e.select("span",Q),function(R){R.setAttribute("data-mce-mark","1")});a.getDoc().execCommand(O?"ForwardDelete":"Delete",false,null);Q=e.getParent(M.startContainer,e.isBlock);E(e.select("span",Q),function(R){var S=l.getBookmark();if(P){e.replace(P.cloneNode(false),R,true)}else{if(!R.getAttribute("data-mce-mark")){e.remove(R,true)}else{R.removeAttribute("data-mce-mark")}}l.moveToBookmark(S)})}a.onKeyDown.add(function(M,O){var N;N=O.keyCode==k;if(!z(O)&&(N||O.keyCode==f)&&!j.modifierPressed(O)){O.preventDefault();L(N)}});a.addCommand("Delete",function(){L()})}function q(){function L(O){var N=e.create("body");var P=O.cloneContents();N.appendChild(P);return l.serializer.serialize(N,{format:"html"})}function M(N){var P=L(N);var Q=e.createRng();Q.selectNode(a.getBody());var O=L(Q);return P===O}a.onKeyDown.add(function(O,Q){var P=Q.keyCode,N;if(!z(Q)&&(P==k||P==f)){N=O.selection.isCollapsed();if(N&&!e.isEmpty(O.getBody())){return}if(tinymce.isIE&&!N){return}if(!N&&!M(O.selection.getRng())){return}O.setContent("");O.selection.setCursorLocation(O.getBody(),0);O.nodeChanged()}})}function I(){a.onKeyDown.add(function(L,M){if(!z(M)&&M.keyCode==65&&j.metaKeyPressed(M)){M.preventDefault();L.execCommand("SelectAll")}})}function K(){if(!a.settings.content_editable){e.bind(a.getDoc(),"focusin",function(L){l.setRng(l.getRng())});e.bind(a.getDoc(),"mousedown",function(L){if(L.target==a.getDoc().documentElement){a.getWin().focus();l.setRng(l.getRng())}})}}function B(){a.onKeyDown.add(function(L,O){if(!z(O)&&O.keyCode===f){if(l.isCollapsed()&&l.getRng(true).startOffset===0){var N=l.getNode();var M=N.previousSibling;if(M&&M.nodeName&&M.nodeName.toLowerCase()==="hr"){e.remove(M);tinymce.dom.Event.cancel(O)}}}})}function y(){if(!Range.prototype.getClientRects){a.onMouseDown.add(function(M,N){if(!z(N)&&N.target.nodeName==="HTML"){var L=M.getBody();L.blur();setTimeout(function(){L.focus()},0)}})}}function h(){a.onClick.add(function(L,M){M=M.target;if(/^(IMG|HR)$/.test(M.nodeName)){l.getSel().setBaseAndExtent(M,0,M,1)}if(M.nodeName=="A"&&e.hasClass(M,"mceItemAnchor")){l.select(M)}L.nodeChanged()})}function c(){function M(){var O=e.getAttribs(l.getStart().cloneNode(false));return function(){var P=l.getStart();if(P!==a.getBody()){e.setAttrib(P,"style",null);E(O,function(Q){P.setAttributeNode(Q.cloneNode(true))})}}}function L(){return !l.isCollapsed()&&e.getParent(l.getStart(),e.isBlock)!=e.getParent(l.getEnd(),e.isBlock)}function N(O,P){P.preventDefault();return false}a.onKeyPress.add(function(O,Q){var P;if(!z(Q)&&(Q.keyCode==8||Q.keyCode==46)&&L()){P=M();O.getDoc().execCommand("delete",false,null);P();Q.preventDefault();return false}});e.bind(a.getDoc(),"cut",function(P){var O;if(!z(P)&&L()){O=M();a.onKeyUp.addToTop(N);setTimeout(function(){O();a.onKeyUp.remove(N)},0)}})}function b(){var M,L;e.bind(a.getDoc(),"selectionchange",function(){if(L){clearTimeout(L);L=0}L=window.setTimeout(function(){var N=l.getRng();if(!M||!tinymce.dom.RangeUtils.compareRanges(N,M)){a.nodeChanged();M=N}},50)})}function x(){document.body.setAttribute("role","application")}function t(){a.onKeyDown.add(function(L,N){if(!z(N)&&N.keyCode===f){if(l.isCollapsed()&&l.getRng(true).startOffset===0){var M=l.getNode().previousSibling;if(M&&M.nodeName&&M.nodeName.toLowerCase()==="table"){return tinymce.dom.Event.cancel(N)}}}})}function C(){if(n()>7){return}A("RespectVisibilityInDesign",true);a.contentStyles.push(".mceHideBrInPre pre br {display: none}");e.addClass(a.getBody(),"mceHideBrInPre");v.addNodeFilter("pre",function(L,N){var O=L.length,Q,M,R,P;while(O--){Q=L[O].getAll("br");M=Q.length;while(M--){R=Q[M];P=R.prev;if(P&&P.type===3&&P.value.charAt(P.value-1)!="\n"){P.value+="\n"}else{R.parent.insert(new tinymce.html.Node("#text",3),R,true).value="\n"}}}});o.addNodeFilter("pre",function(L,N){var O=L.length,Q,M,R,P;while(O--){Q=L[O].getAll("br");M=Q.length;while(M--){R=Q[M];P=R.prev;if(P&&P.type==3){P.value=P.value.replace(/\r?\n$/,"")}}}})}function g(){e.bind(a.getBody(),"mouseup",function(N){var M,L=l.getNode();if(L.nodeName=="IMG"){if(M=e.getStyle(L,"width")){e.setAttrib(L,"width",M.replace(/[^0-9%]+/g,""));e.setStyle(L,"width","")}if(M=e.getStyle(L,"height")){e.setAttrib(L,"height",M.replace(/[^0-9%]+/g,""));e.setStyle(L,"height","")}}})}function d(){a.onKeyDown.add(function(R,S){var Q,L,M,O,P,T,N;Q=S.keyCode==k;if(!z(S)&&(Q||S.keyCode==f)&&!j.modifierPressed(S)){L=l.getRng();M=L.startContainer;O=L.startOffset;N=L.collapsed;if(M.nodeType==3&&M.nodeValue.length>0&&((O===0&&!N)||(N&&O===(Q?0:1)))){nonEmptyElements=R.schema.getNonEmptyElements();S.preventDefault();P=e.create("br",{id:"__tmp"});M.parentNode.insertBefore(P,M);R.getDoc().execCommand(Q?"ForwardDelete":"Delete",false,null);M=l.getRng().startContainer;T=M.previousSibling;if(T&&T.nodeType==1&&!e.isBlock(T)&&e.isEmpty(T)&&!nonEmptyElements[T.nodeName.toLowerCase()]){e.remove(T)}e.remove("__tmp")}}})}function G(){a.onKeyDown.add(function(P,Q){var N,M,R,L,O;if(z(Q)||Q.keyCode!=j.BACKSPACE){return}N=l.getRng();M=N.startContainer;R=N.startOffset;L=e.getRoot();O=M;if(!N.collapsed||R!==0){return}while(O&&O.parentNode&&O.parentNode.firstChild==O&&O.parentNode!=L){O=O.parentNode}if(O.tagName==="BLOCKQUOTE"){P.formatter.toggle("blockquote",null,O);N=e.createRng();N.setStart(M,0);N.setEnd(M,0);l.setRng(N)}})}function F(){function L(){a._refreshContentEditable();A("StyleWithCSS",false);A("enableInlineTableEditing",false);if(!H.object_resizing){A("enableObjectResizing",false)}}if(!H.readonly){a.onBeforeExecCommand.add(L);a.onMouseDown.add(L)}}function s(){function L(M,N){E(e.select("a"),function(Q){var O=Q.parentNode,P=e.getRoot();if(O.lastChild===Q){while(O&&!e.isBlock(O)){if(O.parentNode.lastChild!==O||O===P){return}O=O.parentNode}e.add(O,"br",{"data-mce-bogus":1})}})}a.onExecCommand.add(function(M,N){if(N==="CreateLink"){L(M)}});a.onSetContent.add(l.onSetContent.add(L))}function m(){if(H.forced_root_block){a.onInit.add(function(){A("DefaultParagraphSeparator",H.forced_root_block)})}}function p(){function L(N,M){if(!N||!M.initial){a.execCommand("mceRepaint")}}a.onUndo.add(L);a.onRedo.add(L);a.onSetContent.add(L)}function i(){a.onKeyDown.add(function(M,N){var L;if(!z(N)&&N.keyCode==f){L=M.getDoc().selection.createRange();if(L&&L.item){N.preventDefault();M.undoManager.beforeChange();e.remove(L.item(0));M.undoManager.add()}}})}function r(){var L;if(n()>=10){L="";E("p div h1 h2 h3 h4 h5 h6".split(" "),function(M,N){L+=(N>0?",":"")+M+":empty"});a.contentStyles.push(L+"{padding-right: 1px !important}")}}function u(){var N,M,ad,L,Y,ab,Z,ac,O,P,aa,W,V,X=document,T=a.getDoc();if(!H.object_resizing||H.webkit_fake_resize===false){return}A("enableObjectResizing",false);aa={n:[0.5,0,0,-1],e:[1,0.5,1,0],s:[0.5,1,0,1],w:[0,0.5,-1,0],nw:[0,0,-1,-1],ne:[1,0,1,-1],se:[1,1,1,1],sw:[0,1,-1,1]};function R(ah){var ag,af;ag=ah.screenX-ab;af=ah.screenY-Z;W=ag*Y[2]+ac;V=af*Y[3]+O;W=W<5?5:W;V=V<5?5:V;if(j.modifierPressed(ah)||(ad.nodeName=="IMG"&&Y[2]*Y[3]!==0)){W=Math.round(V/P);V=Math.round(W*P)}e.setStyles(L,{width:W,height:V});if(Y[2]<0&&L.clientWidth<=W){e.setStyle(L,"left",N+(ac-W))}if(Y[3]<0&&L.clientHeight<=V){e.setStyle(L,"top",M+(O-V))}}function ae(){function af(ag,ah){if(ah){if(ad.style[ag]||!a.schema.isValid(ad.nodeName.toLowerCase(),ag)){e.setStyle(ad,ag,ah)}else{e.setAttrib(ad,ag,ah)}}}af("width",W);af("height",V);e.unbind(T,"mousemove",R);e.unbind(T,"mouseup",ae);if(X!=T){e.unbind(X,"mousemove",R);e.unbind(X,"mouseup",ae)}e.remove(L);Q(ad)}function Q(ai){var ag,ah,af;S();ag=e.getPos(ai);N=ag.x;M=ag.y;ah=ai.offsetWidth;af=ai.offsetHeight;if(ad!=ai){ad=ai;W=V=0}E(aa,function(al,aj){var ak;ak=e.get("mceResizeHandle"+aj);if(!ak){ak=e.add(T.documentElement,"div",{id:"mceResizeHandle"+aj,"class":"mceResizeHandle",style:"cursor:"+aj+"-resize; margin:0; padding:0"});e.bind(ak,"mousedown",function(am){am.preventDefault();ae();ab=am.screenX;Z=am.screenY;ac=ad.clientWidth;O=ad.clientHeight;P=O/ac;Y=al;L=ad.cloneNode(true);e.addClass(L,"mceClonedResizable");e.setStyles(L,{left:N,top:M,margin:0});T.documentElement.appendChild(L);e.bind(T,"mousemove",R);e.bind(T,"mouseup",ae);if(X!=T){e.bind(X,"mousemove",R);e.bind(X,"mouseup",ae)}})}else{e.show(ak)}e.setStyles(ak,{left:(ah*al[0]+N)-(ak.offsetWidth/2),top:(af*al[1]+M)-(ak.offsetHeight/2)})});if(!tinymce.isOpera&&ad.nodeName=="IMG"){ad.setAttribute("data-mce-selected","1")}}function S(){if(ad){ad.removeAttribute("data-mce-selected")}for(var af in aa){e.hide("mceResizeHandle"+af)}}a.contentStyles.push(".mceResizeHandle {position: absolute;border: 1px solid black;background: #FFF;width: 5px;height: 5px;z-index: 10000}.mceResizeHandle:hover {background: #000}img[data-mce-selected] {outline: 1px solid black}img.mceClonedResizable, table.mceClonedResizable {position: absolute;outline: 1px dashed black;opacity: .5;z-index: 10000}");function U(){var af=e.getParent(l.getNode(),"table,img");E(e.select("img[data-mce-selected]"),function(ag){ag.removeAttribute("data-mce-selected")});if(af){Q(af)}else{S()}}a.onNodeChange.add(U);e.bind(T,"selectionchange",U);a.serializer.addAttributeFilter("data-mce-selected",function(af,ag){var ah=af.length;while(ah--){af[ah].attr(ag,null)}})}function D(){if(n()<9){v.addNodeFilter("noscript",function(L){var M=L.length,N,O;while(M--){N=L[M];O=N.firstChild;if(O){N.attr("data-mce-innertext",O.value)}}});o.addNodeFilter("noscript",function(L){var M=L.length,N,P,O;while(M--){N=L[M];P=L[M].firstChild;if(P){P.value=tinymce.html.Entities.decode(P.value)}else{O=N.attributes.map["data-mce-innertext"];if(O){N.attr("data-mce-innertext",null);P=new tinymce.html.Node("#text",3);P.value=O;P.raw=true;N.append(P)}}}})}}t();G();q();if(tinymce.isWebKit){d();J();K();h();m();if(tinymce.isIDevice){b()}else{u();I()}}if(tinymce.isIE){B();x();C();g();i();r();D()}if(tinymce.isGecko){B();y();c();F();s();p()}if(tinymce.isOpera){u()}};(function(j){var a,g,d,k=/[&<>\"\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,b=/[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,f=/[<>&\"\']/g,c=/&(#x|#)?([\w]+);/g,i={128:"\u20AC",130:"\u201A",131:"\u0192",132:"\u201E",133:"\u2026",134:"\u2020",135:"\u2021",136:"\u02C6",137:"\u2030",138:"\u0160",139:"\u2039",140:"\u0152",142:"\u017D",145:"\u2018",146:"\u2019",147:"\u201C",148:"\u201D",149:"\u2022",150:"\u2013",151:"\u2014",152:"\u02DC",153:"\u2122",154:"\u0161",155:"\u203A",156:"\u0153",158:"\u017E",159:"\u0178"};g={'"':""","'":"'","<":"<",">":">","&":"&"};d={"<":"<",">":">","&":"&",""":'"',"'":"'"};function h(l){var m;m=document.createElement("div");m.innerHTML=l;return m.textContent||m.innerText||l}function e(m,p){var n,o,l,q={};if(m){m=m.split(",");p=p||10;for(n=0;n1){return"&#"+(((n.charCodeAt(0)-55296)*1024)+(n.charCodeAt(1)-56320)+65536)+";"}return g[n]||"&#"+n.charCodeAt(0)+";"})},encodeNamed:function(n,l,m){m=m||a;return n.replace(l?k:b,function(o){return g[o]||m[o]||o})},getEncodeFunc:function(l,o){var p=j.html.Entities;o=e(o)||a;function m(r,q){return r.replace(q?k:b,function(s){return g[s]||o[s]||"&#"+s.charCodeAt(0)+";"||s})}function n(r,q){return p.encodeNamed(r,q,o)}l=j.makeMap(l.replace(/\+/g,","));if(l.named&&l.numeric){return m}if(l.named){if(o){return n}return p.encodeNamed}if(l.numeric){return p.encodeNumeric}return p.encodeRaw},decode:function(l){return l.replace(c,function(n,m,o){if(m){o=parseInt(o,m.length===2?16:10);if(o>65535){o-=65536;return String.fromCharCode(55296+(o>>10),56320+(o&1023))}else{return i[o]||String.fromCharCode(o)}}return d[n]||a[n]||h(n)})}}})(tinymce);tinymce.html.Styles=function(d,f){var k=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,h=/(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,b=/\s*([^:]+):\s*([^;]+);?/g,l=/\s+$/,m=/rgb/,e,g,a={},j;d=d||{};j="\\\" \\' \\; \\: ; : \uFEFF".split(" ");for(g=0;g1?r:"0"+r}return"#"+o(q)+o(p)+o(i)}return{toHex:function(i){return i.replace(k,c)},parse:function(s){var z={},q,n,x,r,v=d.url_converter,y=d.url_converter_scope||this;function p(D,G){var F,C,B,E;F=z[D+"-top"+G];if(!F){return}C=z[D+"-right"+G];if(F!=C){return}B=z[D+"-bottom"+G];if(C!=B){return}E=z[D+"-left"+G];if(B!=E){return}z[D+G]=E;delete z[D+"-top"+G];delete z[D+"-right"+G];delete z[D+"-bottom"+G];delete z[D+"-left"+G]}function u(C){var D=z[C],B;if(!D||D.indexOf(" ")<0){return}D=D.split(" ");B=D.length;while(B--){if(D[B]!==D[0]){return false}}z[C]=D[0];return true}function A(D,C,B,E){if(!u(C)){return}if(!u(B)){return}if(!u(E)){return}z[D]=z[C]+" "+z[B]+" "+z[E];delete z[C];delete z[B];delete z[E]}function t(B){r=true;return a[B]}function i(C,B){if(r){C=C.replace(/\uFEFF[0-9]/g,function(D){return a[D]})}if(!B){C=C.replace(/\\([\'\";:])/g,"$1")}return C}function o(C,B,F,E,G,D){G=G||D;if(G){G=i(G);return"'"+G.replace(/\'/g,"\\'")+"'"}B=i(B||F||E);if(v){B=v.call(y,B,"style")}return"url('"+B.replace(/\'/g,"\\'")+"')"}if(s){s=s.replace(/\\[\"\';:\uFEFF]/g,t).replace(/\"[^\"]+\"|\'[^\']+\'/g,function(B){return B.replace(/[;:]/g,t)});while(q=b.exec(s)){n=q[1].replace(l,"").toLowerCase();x=q[2].replace(l,"");if(n&&x.length>0){if(n==="font-weight"&&x==="700"){x="bold"}else{if(n==="color"||n==="background-color"){x=x.toLowerCase()}}x=x.replace(k,c);x=x.replace(h,o);z[n]=r?i(x,true):x}b.lastIndex=q.index+q[0].length}p("border","");p("border","-width");p("border","-color");p("border","-style");p("padding","");p("margin","");A("border","border-width","border-style","border-color");if(z.border==="medium none"){delete z.border}}return z},serialize:function(p,r){var o="",n,q;function i(t){var x,u,s,v;x=f.styles[t];if(x){for(u=0,s=x.length;u0){o+=(o.length>0?" ":"")+t+": "+v+";"}}}}if(r&&f&&f.styles){i("*");i(r)}else{for(n in p){q=p[n];if(q!==e&&q.length>0){o+=(o.length>0?" ":"")+n+": "+q+";"}}}return o}}};(function(f){var a={},e=f.makeMap,g=f.each;function d(j,i){return j.split(i||",")}function h(m,l){var j,k={};function i(n){return n.replace(/[A-Z]+/g,function(o){return i(m[o])})}for(j in m){if(m.hasOwnProperty(j)){m[j]=i(m[j])}}i(l).replace(/#/g,"#text").replace(/(\w+)\[([^\]]+)\]\[([^\]]*)\]/g,function(q,o,n,p){n=d(n,"|");k[o]={attributes:e(n),attributesOrder:n,children:e(p,"|",{"#comment":{}})}});return k}function b(){var i=a.html5;if(!i){i=a.html5=h({A:"id|accesskey|class|dir|draggable|item|hidden|itemprop|role|spellcheck|style|subject|title|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup",B:"#|a|abbr|area|audio|b|bdo|br|button|canvas|cite|code|command|datalist|del|dfn|em|embed|i|iframe|img|input|ins|kbd|keygen|label|link|map|mark|meta|meter|noscript|object|output|progress|q|ruby|samp|script|select|small|span|strong|sub|sup|svg|textarea|time|var|video|wbr",C:"#|a|abbr|area|address|article|aside|audio|b|bdo|blockquote|br|button|canvas|cite|code|command|datalist|del|details|dfn|dialog|div|dl|em|embed|fieldset|figure|footer|form|h1|h2|h3|h4|h5|h6|header|hgroup|hr|i|iframe|img|input|ins|kbd|keygen|label|link|map|mark|menu|meta|meter|nav|noscript|ol|object|output|p|pre|progress|q|ruby|samp|script|section|select|small|span|strong|style|sub|sup|svg|table|textarea|time|ul|var|video"},"html[A|manifest][body|head]head[A][base|command|link|meta|noscript|script|style|title]title[A][#]base[A|href|target][]link[A|href|rel|media|type|sizes][]meta[A|http-equiv|name|content|charset][]style[A|type|media|scoped][#]script[A|charset|type|src|defer|async][#]noscript[A][C]body[A][C]section[A][C]nav[A][C]article[A][C]aside[A][C]h1[A][B]h2[A][B]h3[A][B]h4[A][B]h5[A][B]h6[A][B]hgroup[A][h1|h2|h3|h4|h5|h6]header[A][C]footer[A][C]address[A][C]p[A][B]br[A][]pre[A][B]dialog[A][dd|dt]blockquote[A|cite][C]ol[A|start|reversed][li]ul[A][li]li[A|value][C]dl[A][dd|dt]dt[A][B]dd[A][C]a[A|href|target|ping|rel|media|type][B]em[A][B]strong[A][B]small[A][B]cite[A][B]q[A|cite][B]dfn[A][B]abbr[A][B]code[A][B]var[A][B]samp[A][B]kbd[A][B]sub[A][B]sup[A][B]i[A][B]b[A][B]mark[A][B]progress[A|value|max][B]meter[A|value|min|max|low|high|optimum][B]time[A|datetime][B]ruby[A][B|rt|rp]rt[A][B]rp[A][B]bdo[A][B]span[A][B]ins[A|cite|datetime][B]del[A|cite|datetime][B]figure[A][C|legend|figcaption]figcaption[A][C]img[A|alt|src|height|width|usemap|ismap][]iframe[A|name|src|height|width|sandbox|seamless][]embed[A|src|height|width|type][]object[A|data|type|height|width|usemap|name|form|classid][param]param[A|name|value][]details[A|open][C|legend]command[A|type|label|icon|disabled|checked|radiogroup][]menu[A|type|label][C|li]legend[A][C|B]div[A][C]source[A|src|type|media][]audio[A|src|autobuffer|autoplay|loop|controls][source]video[A|src|autobuffer|autoplay|loop|controls|width|height|poster][source]hr[A][]form[A|accept-charset|action|autocomplete|enctype|method|name|novalidate|target][C]fieldset[A|disabled|form|name][C|legend]label[A|form|for][B]input[A|type|accept|alt|autocomplete|autofocus|checked|disabled|form|formaction|formenctype|formmethod|formnovalidate|formtarget|height|list|max|maxlength|min|multiple|pattern|placeholder|readonly|required|size|src|step|width|files|value|name][]button[A|autofocus|disabled|form|formaction|formenctype|formmethod|formnovalidate|formtarget|name|value|type][B]select[A|autofocus|disabled|form|multiple|name|size][option|optgroup]datalist[A][B|option]optgroup[A|disabled|label][option]option[A|disabled|selected|label|value][]textarea[A|autofocus|disabled|form|maxlength|name|placeholder|readonly|required|rows|cols|wrap][]keygen[A|autofocus|challenge|disabled|form|keytype|name][]output[A|for|form|name][B]canvas[A|width|height][]map[A|name][B|C]area[A|shape|coords|href|alt|target|media|rel|ping|type][]mathml[A][]svg[A][]table[A|border][caption|colgroup|thead|tfoot|tbody|tr]caption[A][C]colgroup[A|span][col]col[A|span][]thead[A][tr]tfoot[A][tr]tbody[A][tr]tr[A][th|td]th[A|headers|rowspan|colspan|scope][B]td[A|headers|rowspan|colspan][C]wbr[A][]")}return i}function c(){var i=a.html4;if(!i){i=a.html4=h({Z:"H|K|N|O|P",Y:"X|form|R|Q",ZG:"E|span|width|align|char|charoff|valign",X:"p|T|div|U|W|isindex|fieldset|table",ZF:"E|align|char|charoff|valign",W:"pre|hr|blockquote|address|center|noframes",ZE:"abbr|axis|headers|scope|rowspan|colspan|align|char|charoff|valign|nowrap|bgcolor|width|height",ZD:"[E][S]",U:"ul|ol|dl|menu|dir",ZC:"p|Y|div|U|W|table|br|span|bdo|object|applet|img|map|K|N|Q",T:"h1|h2|h3|h4|h5|h6",ZB:"X|S|Q",S:"R|P",ZA:"a|G|J|M|O|P",R:"a|H|K|N|O",Q:"noscript|P",P:"ins|del|script",O:"input|select|textarea|label|button",N:"M|L",M:"em|strong|dfn|code|q|samp|kbd|var|cite|abbr|acronym",L:"sub|sup",K:"J|I",J:"tt|i|b|u|s|strike",I:"big|small|font|basefont",H:"G|F",G:"br|span|bdo",F:"object|applet|img|map|iframe",E:"A|B|C",D:"accesskey|tabindex|onfocus|onblur",C:"onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup",B:"lang|xml:lang|dir",A:"id|class|style|title"},"script[id|charset|type|language|src|defer|xml:space][]style[B|id|type|media|title|xml:space][]object[E|declare|classid|codebase|data|type|codetype|archive|standby|width|height|usemap|name|tabindex|align|border|hspace|vspace][#|param|Y]param[id|name|value|valuetype|type][]p[E|align][#|S]a[E|D|charset|type|name|href|hreflang|rel|rev|shape|coords|target][#|Z]br[A|clear][]span[E][#|S]bdo[A|C|B][#|S]applet[A|codebase|archive|code|object|alt|name|width|height|align|hspace|vspace][#|param|Y]h1[E|align][#|S]img[E|src|alt|name|longdesc|width|height|usemap|ismap|align|border|hspace|vspace][]map[B|C|A|name][X|form|Q|area]h2[E|align][#|S]iframe[A|longdesc|name|src|frameborder|marginwidth|marginheight|scrolling|align|width|height][#|Y]h3[E|align][#|S]tt[E][#|S]i[E][#|S]b[E][#|S]u[E][#|S]s[E][#|S]strike[E][#|S]big[E][#|S]small[E][#|S]font[A|B|size|color|face][#|S]basefont[id|size|color|face][]em[E][#|S]strong[E][#|S]dfn[E][#|S]code[E][#|S]q[E|cite][#|S]samp[E][#|S]kbd[E][#|S]var[E][#|S]cite[E][#|S]abbr[E][#|S]acronym[E][#|S]sub[E][#|S]sup[E][#|S]input[E|D|type|name|value|checked|disabled|readonly|size|maxlength|src|alt|usemap|onselect|onchange|accept|align][]select[E|name|size|multiple|disabled|tabindex|onfocus|onblur|onchange][optgroup|option]optgroup[E|disabled|label][option]option[E|selected|disabled|label|value][]textarea[E|D|name|rows|cols|disabled|readonly|onselect|onchange][]label[E|for|accesskey|onfocus|onblur][#|S]button[E|D|name|value|type|disabled][#|p|T|div|U|W|table|G|object|applet|img|map|K|N|Q]h4[E|align][#|S]ins[E|cite|datetime][#|Y]h5[E|align][#|S]del[E|cite|datetime][#|Y]h6[E|align][#|S]div[E|align][#|Y]ul[E|type|compact][li]li[E|type|value][#|Y]ol[E|type|compact|start][li]dl[E|compact][dt|dd]dt[E][#|S]dd[E][#|Y]menu[E|compact][li]dir[E|compact][li]pre[E|width|xml:space][#|ZA]hr[E|align|noshade|size|width][]blockquote[E|cite][#|Y]address[E][#|S|p]center[E][#|Y]noframes[E][#|Y]isindex[A|B|prompt][]fieldset[E][#|legend|Y]legend[E|accesskey|align][#|S]table[E|summary|width|border|frame|rules|cellspacing|cellpadding|align|bgcolor][caption|col|colgroup|thead|tfoot|tbody|tr]caption[E|align][#|S]col[ZG][]colgroup[ZG][col]thead[ZF][tr]tr[ZF|bgcolor][th|td]th[E|ZE][#|Y]form[E|action|method|name|enctype|onsubmit|onreset|accept|accept-charset|target][#|X|R|Q]noscript[E][#|Y]td[E|ZE][#|Y]tfoot[ZF][tr]tbody[ZF][tr]area[E|D|shape|coords|href|nohref|alt|target][]base[id|href|target][]body[E|onload|onunload|background|bgcolor|text|link|vlink|alink][#|Y]")}return i}f.html.Schema=function(A){var u=this,s={},k={},j=[],D,y;var o,q,z,r,v,n,p={};function m(F,E,H){var G=A[F];if(!G){G=a[F];if(!G){G=e(E," ",e(E.toUpperCase()," "));G=f.extend(G,H);a[F]=G}}else{G=e(G,",",e(G.toUpperCase()," "))}return G}A=A||{};y=A.schema=="html5"?b():c();if(A.verify_html===false){A.valid_elements="*[*]"}if(A.valid_styles){D={};g(A.valid_styles,function(F,E){D[E]=f.explode(F)})}o=m("whitespace_elements","pre script noscript style textarea");q=m("self_closing_elements","colgroup dd dt li option p td tfoot th thead tr");z=m("short_ended_elements","area base basefont br col frame hr img input isindex link meta param embed source wbr");r=m("boolean_attributes","checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls");n=m("non_empty_elements","td th iframe video audio object",z);textBlockElementsMap=m("text_block_elements","h1 h2 h3 h4 h5 h6 p div address pre form blockquote center dir fieldset header footer article section hgroup aside nav figure");v=m("block_elements","hr table tbody thead tfoot th tr td li ol ul caption dl dt dd noscript menu isindex samp option datalist select optgroup",textBlockElementsMap);function i(E){return new RegExp("^"+E.replace(/([?+*])/g,".$1")+"$")}function C(L){var K,G,Z,V,aa,F,I,U,X,Q,Y,ac,O,J,W,E,S,H,ab,ad,P,T,N=/^([#+\-])?([^\[\/]+)(?:\/([^\[]+))?(?:\[([^\]]+)\])?$/,R=/^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/,M=/[*?+]/;if(L){L=d(L);if(s["@"]){S=s["@"].attributes;H=s["@"].attributesOrder}for(K=0,G=L.length;K=0){for(U=A.length-1;U>=V;U--){T=A[U];if(T.valid){n.end(T.name)}}A.length=V}}function p(U,T,Y,X,W){var Z,V;T=T.toLowerCase();Y=T in H?T:j(Y||X||W||"");if(v&&!z&&T.indexOf("data-")!==0){Z=P[T];if(!Z&&F){V=F.length;while(V--){Z=F[V];if(Z.pattern.test(T)){break}}if(V===-1){Z=null}}if(!Z){return}if(Z.validValues&&!(Y in Z.validValues)){return}}N.map[T]=Y;N.push({name:T,value:Y})}l=new RegExp("<(?:(?:!--([\\w\\W]*?)-->)|(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|(?:!DOCTYPE([\\w\\W]*?)>)|(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|(?:\\/([^>]+)>)|(?:([A-Za-z0-9\\-\\:\\.]+)((?:\\s+[^\"'>]+(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>]*))*|\\/|\\s+)>))","g");D=/([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g;K={script:/<\/script[^>]*>/gi,style:/<\/style[^>]*>/gi,noscript:/<\/noscript[^>]*>/gi};M=e.getShortEndedElements();J=c.self_closing_elements||e.getSelfClosingElements();H=e.getBoolAttrs();v=c.validate;s=c.remove_internals;y=c.fix_self_closing;q=a.isIE;o=/^:/;while(g=l.exec(E)){if(G0&&A[A.length-1].name===I){u(I)}if(!v||(m=e.getElementRule(I))){k=true;if(v){P=m.attributes;F=m.attributePatterns}if(R=g[8]){z=R.indexOf("data-mce-type")!==-1;if(z&&s){k=false}N=[];N.map={};R.replace(D,p)}else{N=[];N.map={}}if(v&&!z){S=m.attributesRequired;L=m.attributesDefault;f=m.attributesForced;if(f){Q=f.length;while(Q--){t=f[Q];r=t.name;h=t.value;if(h==="{$uid}"){h="mce_"+x++}N.map[r]=h;N.push({name:r,value:h})}}if(L){Q=L.length;while(Q--){t=L[Q];r=t.name;if(!(r in N.map)){h=t.value;if(h==="{$uid}"){h="mce_"+x++}N.map[r]=h;N.push({name:r,value:h})}}}if(S){Q=S.length;while(Q--){if(S[Q] in N.map){break}}if(Q===-1){k=false}}if(N.map["data-mce-bogus"]){k=false}}if(k){n.start(I,N,O)}}else{k=false}if(B=K[I]){B.lastIndex=G=g.index+g[0].length;if(g=B.exec(E)){if(k){C=E.substr(G,g.index-G)}G=g.index+g[0].length}else{C=E.substr(G);G=E.length}if(k&&C.length>0){n.text(C,true)}if(k){n.end(I)}l.lastIndex=G;continue}if(!O){if(!R||R.indexOf("/")!=R.length-1){A.push({name:I,valid:k})}else{if(k){n.end(I)}}}}else{if(I=g[1]){n.comment(I)}else{if(I=g[2]){n.cdata(I)}else{if(I=g[3]){n.doctype(I)}else{if(I=g[4]){n.pi(I,g[5])}}}}}}G=g.index+g[0].length}if(G=0;Q--){I=A[Q];if(I.valid){n.end(I.name)}}}}})(tinymce);(function(d){var c=/^[ \t\r\n]*$/,e={"#text":3,"#comment":8,"#cdata":4,"#pi":7,"#doctype":10,"#document-fragment":11};function a(k,l,j){var i,h,f=j?"lastChild":"firstChild",g=j?"prev":"next";if(k[f]){return k[f]}if(k!==l){i=k[g];if(i){return i}for(h=k.parent;h&&h!==l;h=h.parent){i=h[g];if(i){return i}}}}function b(f,g){this.name=f;this.type=g;if(g===1){this.attributes=[];this.attributes.map={}}}d.extend(b.prototype,{replace:function(g){var f=this;if(g.parent){g.remove()}f.insert(g,f);f.remove();return f},attr:function(h,l){var f=this,g,j,k;if(typeof h!=="string"){for(j in h){f.attr(j,h[j])}return f}if(g=f.attributes){if(l!==k){if(l===null){if(h in g.map){delete g.map[h];j=g.length;while(j--){if(g[j].name===h){g=g.splice(j,1);return f}}}return f}if(h in g.map){j=g.length;while(j--){if(g[j].name===h){g[j].value=l;break}}}else{g.push({name:h,value:l})}g.map[h]=l;return f}else{return g.map[h]}}},clone:function(){var g=this,n=new b(g.name,g.type),h,f,m,j,k;if(m=g.attributes){k=[];k.map={};for(h=0,f=m.length;h1){x.reverse();A=o=f.filterNode(x[0].clone());for(u=0;u0){Q.value=l;Q=Q.prev}else{O=Q.prev;Q.remove();Q=O}}}function H(O){var P,l={};for(P in O){if(P!=="li"&&P!="p"){l[P]=O[P]}}return l}n=new b.html.SaxParser({validate:z,self_closing_elements:H(h.getSelfClosingElements()),cdata:function(l){B.append(K("#cdata",4)).value=l},text:function(P,l){var O;if(!L){P=P.replace(k," ");if(B.lastChild&&o[B.lastChild.name]){P=P.replace(E,"")}}if(P.length!==0){O=K("#text",3);O.raw=!!l;B.append(O).value=P}},comment:function(l){B.append(K("#comment",8)).value=l},pi:function(l,O){B.append(K(l,7)).value=O;I(B)},doctype:function(O){var l;l=B.append(K("#doctype",10));l.value=O;I(B)},start:function(l,W,P){var U,R,Q,O,S,X,V,T;Q=z?h.getElementRule(l):{};if(Q){U=K(Q.outputName||l,1);U.attributes=W;U.shortEnded=P;B.append(U);T=p[B.name];if(T&&p[U.name]&&!T[U.name]){M.push(U)}R=d.length;while(R--){S=d[R].name;if(S in W.map){F=c[S];if(F){F.push(U)}else{c[S]=[U]}}}if(o[l]){I(U)}if(!P){B=U}if(!L&&s[l]){L=true}}},end:function(l){var S,P,R,O,Q;P=z?h.getElementRule(l):{};if(P){if(o[l]){if(!L){S=B.firstChild;if(S&&S.type===3){R=S.value.replace(E,"");if(R.length>0){S.value=R;S=S.next}else{O=S.next;S.remove();S=O}while(S&&S.type===3){R=S.value;O=S.next;if(R.length===0||y.test(R)){S.remove();S=O}S=O}}S=B.lastChild;if(S&&S.type===3){R=S.value.replace(t,"");if(R.length>0){S.value=R;S=S.prev}else{O=S.prev;S.remove();S=O}while(S&&S.type===3){R=S.value;O=S.prev;if(R.length===0||y.test(R)){S.remove();S=O}S=O}}}}if(L&&s[l]){L=false}if(P.removeEmpty||P.paddEmpty){if(B.isEmpty(u)){if(P.paddEmpty){B.empty().append(new a("#text","3")).value="\u00a0"}else{if(!B.attributes.map.name&&!B.attributes.map.id){Q=B.parent;B.empty().remove();B=Q;return}}}}B=B.parent}}},h);J=B=new a(m.context||g.root_name,11);n.parse(v);if(z&&M.length){if(!m.context){j(M)}else{m.invalid=true}}if(q&&J.name=="body"){G()}if(!m.invalid){for(N in i){F=e[N];A=i[N];x=A.length;while(x--){if(!A[x].parent){A.splice(x,1)}}for(D=0,C=F.length;D0){o=c[c.length-1];if(o.length>0&&o!=="\n"){c.push("\n")}}c.push("<",m);if(k){for(n=0,j=k.length;n0){o=c[c.length-1];if(o.length>0&&o!=="\n"){c.push("\n")}}},end:function(h){var i;c.push("");if(a&&d[h]&&c.length>0){i=c[c.length-1];if(i.length>0&&i!=="\n"){c.push("\n")}}},text:function(i,h){if(i.length>0){c[c.length]=h?i:f(i)}},cdata:function(h){c.push("")},comment:function(h){c.push("")},pi:function(h,i){if(i){c.push("")}else{c.push("")}if(a){c.push("\n")}},doctype:function(h){c.push("",a?"\n":"")},reset:function(){c.length=0},getContent:function(){return c.join("").replace(/\n$/,"")}}};(function(a){a.html.Serializer=function(c,d){var b=this,e=new a.html.Writer(c);c=c||{};c.validate="validate" in c?c.validate:true;b.schema=d=d||new a.html.Schema();b.writer=e;b.serialize=function(h){var g,i;i=c.validate;g={3:function(k,j){e.text(k.value,k.raw)},8:function(j){e.comment(j.value)},7:function(j){e.pi(j.name,j.value)},10:function(j){e.doctype(j.value)},4:function(j){e.cdata(j.value)},11:function(j){if((j=j.firstChild)){do{f(j)}while(j=j.next)}}};e.reset();function f(k){var t=g[k.type],j,o,s,r,p,u,n,m,q;if(!t){j=k.name;o=k.shortEnded;s=k.attributes;if(i&&s&&s.length>1){u=[];u.map={};q=d.getElementRule(k.name);for(n=0,m=q.attributesOrder.length;n=8;k.boxModel=!e.isIE||o.compatMode=="CSS1Compat"||k.stdMode;k.hasOuterHTML="outerHTML" in o.createElement("a");k.settings=l=e.extend({keep_values:false,hex_colors:1},l);k.schema=l.schema;k.styles=new e.html.Styles({url_converter:l.url_converter,url_converter_scope:l.url_converter_scope},l.schema);if(e.isIE6){try{o.execCommand("BackgroundImageCache",false,true)}catch(m){k.cssFlicker=true}}k.fixDoc(o);k.events=l.ownEvents?new e.dom.EventUtils(l.proxy):e.dom.Event;e.addUnload(k.destroy,k);n=l.schema?l.schema.getBlockElements():{};k.isBlock=function(q){if(!q){return false}var p=q.nodeType;if(p){return !!(p===1&&n[q.nodeName])}return !!n[q]}},fixDoc:function(k){var j=this.settings,i;if(b&&j.schema){("abbr article aside audio canvas details figcaption figure footer header hgroup mark menu meter nav output progress section summary time video").replace(/\w+/g,function(l){k.createElement(l)});for(i in j.schema.getCustomElements()){k.createElement(i)}}},clone:function(k,i){var j=this,m,l;if(!b||k.nodeType!==1||i){return k.cloneNode(i)}l=j.doc;if(!i){m=l.createElement(k.nodeName);g(j.getAttribs(k),function(n){j.setAttrib(m,n.nodeName,j.getAttrib(k,n.nodeName))});return m}return m.firstChild},getRoot:function(){var i=this,j=i.settings;return(j&&i.get(j.root_element))||i.doc.body},getViewPort:function(j){var k,i;j=!j?this.win:j;k=j.document;i=this.boxModel?k.documentElement:k.body;return{x:j.pageXOffset||i.scrollLeft,y:j.pageYOffset||i.scrollTop,w:j.innerWidth||i.clientWidth,h:j.innerHeight||i.clientHeight}},getRect:function(l){var k,i=this,j;l=i.get(l);k=i.getPos(l);j=i.getSize(l);return{x:k.x,y:k.y,w:j.w,h:j.h}},getSize:function(l){var j=this,i,k;l=j.get(l);i=j.getStyle(l,"width");k=j.getStyle(l,"height");if(i.indexOf("px")===-1){i=0}if(k.indexOf("px")===-1){k=0}return{w:parseInt(i,10)||l.offsetWidth||l.clientWidth,h:parseInt(k,10)||l.offsetHeight||l.clientHeight}},getParent:function(k,j,i){return this.getParents(k,j,i,false)},getParents:function(s,m,k,q){var j=this,i,l=j.settings,p=[];s=j.get(s);q=q===undefined;if(l.strict_root){k=k||j.getRoot()}if(d(m,"string")){i=m;if(m==="*"){m=function(o){return o.nodeType==1}}else{m=function(o){return j.is(o,i)}}}while(s){if(s==k||!s.nodeType||s.nodeType===9){break}if(!m||m(s)){if(q){p.push(s)}else{return s}}s=s.parentNode}return q?p:null},get:function(i){var j;if(i&&this.doc&&typeof(i)=="string"){j=i;i=this.doc.getElementById(i);if(i&&i.id!==j){return this.doc.getElementsByName(j)[1]}}return i},getNext:function(j,i){return this._findSib(j,i,"nextSibling")},getPrev:function(j,i){return this._findSib(j,i,"previousSibling")},add:function(l,o,i,k,m){var j=this;return this.run(l,function(r){var q,n;q=d(o,"string")?j.doc.createElement(o):o;j.setAttribs(q,i);if(k){if(k.nodeType){q.appendChild(k)}else{j.setHTML(q,k)}}return !m?r.appendChild(q):q})},create:function(k,i,j){return this.add(this.doc.createElement(k),k,i,j,1)},createHTML:function(q,i,m){var p="",l=this,j;p+="<"+q;for(j in i){if(i.hasOwnProperty(j)){p+=" "+j+'="'+l.encode(i[j])+'"'}}if(typeof(m)!="undefined"){return p+">"+m+""}return p+" />"},remove:function(i,j){return this.run(i,function(l){var m,k=l.parentNode;if(!k){return null}if(j){while(m=l.firstChild){if(!e.isIE||m.nodeType!==3||m.nodeValue){k.insertBefore(m,l)}else{l.removeChild(m)}}}return k.removeChild(l)})},setStyle:function(l,i,j){var k=this;return k.run(l,function(o){var n,m;n=o.style;i=i.replace(/-(\D)/g,function(q,p){return p.toUpperCase()});if(k.pixelStyles.test(i)&&(e.is(j,"number")||/^[\-0-9\.]+$/.test(j))){j+="px"}switch(i){case"opacity":if(b){n.filter=j===""?"":"alpha(opacity="+(j*100)+")";if(!l.currentStyle||!l.currentStyle.hasLayout){n.display="inline-block"}}n[i]=n["-moz-opacity"]=n["-khtml-opacity"]=j||"";break;case"float":b?n.styleFloat=j:n.cssFloat=j;break;default:n[i]=j||""}if(k.settings.update_styles){k.setAttrib(o,"data-mce-style")}})},getStyle:function(l,i,k){l=this.get(l);if(!l){return}if(this.doc.defaultView&&k){i=i.replace(/[A-Z]/g,function(m){return"-"+m});try{return this.doc.defaultView.getComputedStyle(l,null).getPropertyValue(i)}catch(j){return null}}i=i.replace(/-(\D)/g,function(n,m){return m.toUpperCase()});if(i=="float"){i=b?"styleFloat":"cssFloat"}if(l.currentStyle&&k){return l.currentStyle[i]}return l.style?l.style[i]:undefined},setStyles:function(l,m){var j=this,k=j.settings,i;i=k.update_styles;k.update_styles=0;g(m,function(o,p){j.setStyle(l,p,o)});k.update_styles=i;if(k.update_styles){j.setAttrib(l,k.cssText)}},removeAllAttribs:function(i){return this.run(i,function(l){var k,j=l.attributes;for(k=j.length-1;k>=0;k--){l.removeAttributeNode(j.item(k))}})},setAttrib:function(k,l,i){var j=this;if(!k||!l){return}if(j.settings.strict){l=l.toLowerCase()}return this.run(k,function(p){var o=j.settings;var m=p.getAttribute(l);if(i!==null){switch(l){case"style":if(!d(i,"string")){g(i,function(q,r){j.setStyle(p,r,q)});return}if(o.keep_values){if(i&&!j._isRes(i)){p.setAttribute("data-mce-style",i,2)}else{p.removeAttribute("data-mce-style",2)}}p.style.cssText=i;break;case"class":p.className=i||"";break;case"src":case"href":if(o.keep_values){if(o.url_converter){i=o.url_converter.call(o.url_converter_scope||j,i,l,p)}j.setAttrib(p,"data-mce-"+l,i,2)}break;case"shape":p.setAttribute("data-mce-style",i);break}}if(d(i)&&i!==null&&i.length!==0){p.setAttribute(l,""+i,2)}else{p.removeAttribute(l,2)}if(tinyMCE.activeEditor&&m!=i){var n=tinyMCE.activeEditor;n.onSetAttrib.dispatch(n,p,l,i)}})},setAttribs:function(j,k){var i=this;return this.run(j,function(l){g(k,function(m,o){i.setAttrib(l,o,m)})})},getAttrib:function(m,o,k){var i,j=this,l;m=j.get(m);if(!m||m.nodeType!==1){return k===l?false:k}if(!d(k)){k=""}if(/^(src|href|style|coords|shape)$/.test(o)){i=m.getAttribute("data-mce-"+o);if(i){return i}}if(b&&j.props[o]){i=m[j.props[o]];i=i&&i.nodeValue?i.nodeValue:i}if(!i){i=m.getAttribute(o,2)}if(/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(o)){if(m[j.props[o]]===true&&i===""){return o}return i?o:""}if(m.nodeName==="FORM"&&m.getAttributeNode(o)){return m.getAttributeNode(o).nodeValue}if(o==="style"){i=i||m.style.cssText;if(i){i=j.serializeStyle(j.parseStyle(i),m.nodeName);if(j.settings.keep_values&&!j._isRes(i)){m.setAttribute("data-mce-style",i)}}}if(f&&o==="class"&&i){i=i.replace(/(apple|webkit)\-[a-z\-]+/gi,"")}if(b){switch(o){case"rowspan":case"colspan":if(i===1){i=""}break;case"size":if(i==="+0"||i===20||i===0){i=""}break;case"width":case"height":case"vspace":case"checked":case"disabled":case"readonly":if(i===0){i=""}break;case"hspace":if(i===-1){i=""}break;case"maxlength":case"tabindex":if(i===32768||i===2147483647||i==="32768"){i=""}break;case"multiple":case"compact":case"noshade":case"nowrap":if(i===65535){return o}return k;case"shape":i=i.toLowerCase();break;default:if(o.indexOf("on")===0&&i){i=e._replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/,"$1",""+i)}}}return(i!==l&&i!==null&&i!=="")?""+i:k},getPos:function(q,l){var j=this,i=0,p=0,m,o=j.doc,k;q=j.get(q);l=l||o.body;if(q){if(q.getBoundingClientRect){q=q.getBoundingClientRect();m=j.boxModel?o.documentElement:o.body;i=q.left+(o.documentElement.scrollLeft||o.body.scrollLeft)-m.clientTop;p=q.top+(o.documentElement.scrollTop||o.body.scrollTop)-m.clientLeft;return{x:i,y:p}}k=q;while(k&&k!=l&&k.nodeType){i+=k.offsetLeft||0;p+=k.offsetTop||0;k=k.offsetParent}k=q.parentNode;while(k&&k!=l&&k.nodeType){i-=k.scrollLeft||0;p-=k.scrollTop||0;k=k.parentNode}}return{x:i,y:p}},parseStyle:function(i){return this.styles.parse(i)},serializeStyle:function(j,i){return this.styles.serialize(j,i)},addStyle:function(j){var k=this.doc,i;styleElm=k.getElementById("mceDefaultStyles");if(!styleElm){styleElm=k.createElement("style"),styleElm.id="mceDefaultStyles";styleElm.type="text/css";i=k.getElementsByTagName("head")[0];if(i.firstChild){i.insertBefore(styleElm,i.firstChild)}else{i.appendChild(styleElm)}}if(styleElm.styleSheet){styleElm.styleSheet.cssText+=j}else{styleElm.appendChild(k.createTextNode(j))}},loadCSS:function(i){var k=this,l=k.doc,j;if(!i){i=""}j=l.getElementsByTagName("head")[0];g(i.split(","),function(m){var n;if(k.files[m]){return}k.files[m]=true;n=k.create("link",{rel:"stylesheet",href:e._addVer(m)});if(b&&l.documentMode&&l.recalc){n.onload=function(){if(l.recalc){l.recalc()}n.onload=null}}j.appendChild(n)})},addClass:function(i,j){return this.run(i,function(k){var l;if(!j){return 0}if(this.hasClass(k,j)){return k.className}l=this.removeClass(k,j);return k.className=(l!=""?(l+" "):"")+j})},removeClass:function(k,l){var i=this,j;return i.run(k,function(n){var m;if(i.hasClass(n,l)){if(!j){j=new RegExp("(^|\\s+)"+l+"(\\s+|$)","g")}m=n.className.replace(j," ");m=e.trim(m!=" "?m:"");n.className=m;if(!m){n.removeAttribute("class");n.removeAttribute("className")}return m}return n.className})},hasClass:function(j,i){j=this.get(j);if(!j||!i){return false}return(" "+j.className+" ").indexOf(" "+i+" ")!==-1},show:function(i){return this.setStyle(i,"display","block")},hide:function(i){return this.setStyle(i,"display","none")},isHidden:function(i){i=this.get(i);return !i||i.style.display=="none"||this.getStyle(i,"display")=="none"},uniqueId:function(i){return(!i?"mce_":i)+(this.counter++)},setHTML:function(k,j){var i=this;return i.run(k,function(m){if(b){while(m.firstChild){m.removeChild(m.firstChild)}try{m.innerHTML="
"+j;m.removeChild(m.firstChild)}catch(l){var n=i.create("div");n.innerHTML="
"+j;g(e.grep(n.childNodes),function(p,o){if(o&&m.canHaveHTML){m.appendChild(p)}})}}else{m.innerHTML=j}return j})},getOuterHTML:function(k){var j,i=this;k=i.get(k);if(!k){return null}if(k.nodeType===1&&i.hasOuterHTML){return k.outerHTML}j=(k.ownerDocument||i.doc).createElement("body");j.appendChild(k.cloneNode(true));return j.innerHTML},setOuterHTML:function(l,j,m){var i=this;function k(p,o,r){var s,q;q=r.createElement("body");q.innerHTML=o;s=q.lastChild;while(s){i.insertAfter(s.cloneNode(true),p);s=s.previousSibling}i.remove(p)}return this.run(l,function(o){o=i.get(o);if(o.nodeType==1){m=m||o.ownerDocument||i.doc;if(b){try{if(b&&o.nodeType==1){o.outerHTML=j}else{k(o,j,m)}}catch(n){k(o,j,m)}}else{k(o,j,m)}}})},decode:h.decode,encode:h.encodeAllRaw,insertAfter:function(i,j){j=this.get(j);return this.run(i,function(l){var k,m;k=j.parentNode;m=j.nextSibling;if(m){k.insertBefore(l,m)}else{k.appendChild(l)}return l})},replace:function(m,l,i){var j=this;if(d(l,"array")){m=m.cloneNode(true)}return j.run(l,function(k){if(i){g(e.grep(k.childNodes),function(n){m.appendChild(n)})}return k.parentNode.replaceChild(m,k)})},rename:function(l,i){var k=this,j;if(l.nodeName!=i.toUpperCase()){j=k.create(i);g(k.getAttribs(l),function(m){k.setAttrib(j,m.nodeName,k.getAttrib(l,m.nodeName))});k.replace(j,l,1)}return j||l},findCommonAncestor:function(k,i){var l=k,j;while(l){j=i;while(j&&l!=j){j=j.parentNode}if(l==j){break}l=l.parentNode}if(!l&&k.ownerDocument){return k.ownerDocument.documentElement}return l},toHex:function(i){var k=/^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(i);function j(l){l=parseInt(l,10).toString(16);return l.length>1?l:"0"+l}if(k){i="#"+j(k[1])+j(k[2])+j(k[3]);return i}return i},getClasses:function(){var n=this,j=[],m,o={},p=n.settings.class_filter,l;if(n.classes){return n.classes}function q(i){g(i.imports,function(s){q(s)});g(i.cssRules||i.rules,function(s){switch(s.type||1){case 1:if(s.selectorText){g(s.selectorText.split(","),function(r){r=r.replace(/^\s*|\s*$|^\s\./g,"");if(/\.mce/.test(r)||!/\.[\w\-]+$/.test(r)){return}l=r;r=e._replace(/.*\.([a-z0-9_\-]+).*/i,"$1",r);if(p&&!(r=p(r,l))){return}if(!o[r]){j.push({"class":r});o[r]=1}})}break;case 3:q(s.styleSheet);break}})}try{g(n.doc.styleSheets,q)}catch(k){}if(j.length>0){n.classes=j}return j},run:function(l,k,j){var i=this,m;if(i.doc&&typeof(l)==="string"){l=i.get(l)}if(!l){return false}j=j||this;if(!l.nodeType&&(l.length||l.length===0)){m=[];g(l,function(o,n){if(o){if(typeof(o)=="string"){o=i.doc.getElementById(o)}m.push(k.call(j,o,n))}});return m}return k.call(j,l)},getAttribs:function(j){var i;j=this.get(j);if(!j){return[]}if(b){i=[];if(j.nodeName=="OBJECT"){return j.attributes}if(j.nodeName==="OPTION"&&this.getAttrib(j,"selected")){i.push({specified:1,nodeName:"selected"})}j.cloneNode(false).outerHTML.replace(/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi,"").replace(/[\w:\-]+/gi,function(k){i.push({specified:1,nodeName:k})});return i}return j.attributes},isEmpty:function(m,k){var r=this,o,n,q,j,l,p=0;m=m.firstChild;if(m){j=new e.dom.TreeWalker(m,m.parentNode);k=k||r.schema?r.schema.getNonEmptyElements():null;do{q=m.nodeType;if(q===1){if(m.getAttribute("data-mce-bogus")){continue}l=m.nodeName.toLowerCase();if(k&&k[l]){if(l==="br"){p++;continue}return false}n=r.getAttribs(m);o=m.attributes.length;while(o--){l=m.attributes[o].nodeName;if(l==="name"||l==="data-mce-bookmark"){return false}}}if(q==8){return false}if((q===3&&!a.test(m.nodeValue))){return false}}while(m=j.next())}return p<=1},destroy:function(j){var i=this;i.win=i.doc=i.root=i.events=i.frag=null;if(!j){e.removeUnload(i.destroy)}},createRng:function(){var i=this.doc;return i.createRange?i.createRange():new e.dom.Range(this)},nodeIndex:function(m,n){var i=0,k,l,j;if(m){for(k=m.nodeType,m=m.previousSibling,l=m;m;m=m.previousSibling){j=m.nodeType;if(n&&j==3){if(j==k||!m.nodeValue.length){continue}}i++;k=j}}return i},split:function(m,l,p){var q=this,i=q.createRng(),n,k,o;function j(v){var t,s=v.childNodes,u=v.nodeType;function x(A){var z=A.previousSibling&&A.previousSibling.nodeName=="SPAN";var y=A.nextSibling&&A.nextSibling.nodeName=="SPAN";return z&&y}if(u==1&&v.getAttribute("data-mce-type")=="bookmark"){return}for(t=s.length-1;t>=0;t--){j(s[t])}if(u!=9){if(u==3&&v.nodeValue.length>0){var r=e.trim(v.nodeValue).length;if(!q.isBlock(v.parentNode)||r>0||r===0&&x(v)){return}}else{if(u==1){s=v.childNodes;if(s.length==1&&s[0]&&s[0].nodeType==1&&s[0].getAttribute("data-mce-type")=="bookmark"){v.parentNode.insertBefore(s[0],v)}if(s.length||/^(br|hr|input|img)$/i.test(v.nodeName)){return}}}q.remove(v)}return v}if(m&&l){i.setStart(m.parentNode,q.nodeIndex(m));i.setEnd(l.parentNode,q.nodeIndex(l));n=i.extractContents();i=q.createRng();i.setStart(l.parentNode,q.nodeIndex(l)+1);i.setEnd(m.parentNode,q.nodeIndex(m)+1);k=i.extractContents();o=m.parentNode;o.insertBefore(j(n),m);if(p){o.replaceChild(p,l)}else{o.insertBefore(l,m)}o.insertBefore(j(k),m);q.remove(m);return p||l}},bind:function(l,i,k,j){return this.events.add(l,i,k,j||this)},unbind:function(k,i,j){return this.events.remove(k,i,j)},fire:function(k,j,i){return this.events.fire(k,j,i)},getContentEditable:function(j){var i;if(j.nodeType!=1){return null}i=j.getAttribute("data-mce-contenteditable");if(i&&i!=="inherit"){return i}return j.contentEditable!=="inherit"?j.contentEditable:null},_findSib:function(l,i,j){var k=this,m=i;if(l){if(d(m,"string")){m=function(n){return k.is(n,i)}}for(l=l[j];l;l=l[j]){if(m(l)){return l}}}return null},_isRes:function(i){return/^(top|left|bottom|right|width|height)/i.test(i)||/;\s*(top|left|bottom|right|width|height)/i.test(i)}});e.DOM=new e.dom.DOMUtils(document,{process_html:0})})(tinymce);(function(a){function b(c){var O=this,e=c.doc,U=0,F=1,j=2,E=true,S=false,W="startOffset",h="startContainer",Q="endContainer",A="endOffset",k=tinymce.extend,n=c.nodeIndex;k(O,{startContainer:e,startOffset:0,endContainer:e,endOffset:0,collapsed:E,commonAncestorContainer:e,START_TO_START:0,START_TO_END:1,END_TO_END:2,END_TO_START:3,setStart:q,setEnd:s,setStartBefore:g,setStartAfter:J,setEndBefore:K,setEndAfter:u,collapse:B,selectNode:y,selectNodeContents:G,compareBoundaryPoints:v,deleteContents:p,extractContents:I,cloneContents:d,insertNode:D,surroundContents:N,cloneRange:L,toStringIE:T});function x(){return e.createDocumentFragment()}function q(X,t){C(E,X,t)}function s(X,t){C(S,X,t)}function g(t){q(t.parentNode,n(t))}function J(t){q(t.parentNode,n(t)+1)}function K(t){s(t.parentNode,n(t))}function u(t){s(t.parentNode,n(t)+1)}function B(t){if(t){O[Q]=O[h];O[A]=O[W]}else{O[h]=O[Q];O[W]=O[A]}O.collapsed=E}function y(t){g(t);u(t)}function G(t){q(t,0);s(t,t.nodeType===1?t.childNodes.length:t.nodeValue.length)}function v(aa,t){var ad=O[h],Y=O[W],ac=O[Q],X=O[A],ab=t.startContainer,af=t.startOffset,Z=t.endContainer,ae=t.endOffset;if(aa===0){return H(ad,Y,ab,af)}if(aa===1){return H(ac,X,ab,af)}if(aa===2){return H(ac,X,Z,ae)}if(aa===3){return H(ad,Y,Z,ae)}}function p(){l(j)}function I(){return l(U)}function d(){return l(F)}function D(aa){var X=this[h],t=this[W],Z,Y;if((X.nodeType===3||X.nodeType===4)&&X.nodeValue){if(!t){X.parentNode.insertBefore(aa,X)}else{if(t>=X.nodeValue.length){c.insertAfter(aa,X)}else{Z=X.splitText(t);X.parentNode.insertBefore(aa,Z)}}}else{if(X.childNodes.length>0){Y=X.childNodes[t]}if(Y){X.insertBefore(aa,Y)}else{X.appendChild(aa)}}}function N(X){var t=O.extractContents();O.insertNode(X);X.appendChild(t);O.selectNode(X)}function L(){return k(new b(c),{startContainer:O[h],startOffset:O[W],endContainer:O[Q],endOffset:O[A],collapsed:O.collapsed,commonAncestorContainer:O.commonAncestorContainer})}function P(t,X){var Y;if(t.nodeType==3){return t}if(X<0){return t}Y=t.firstChild;while(Y&&X>0){--X;Y=Y.nextSibling}if(Y){return Y}return t}function m(){return(O[h]==O[Q]&&O[W]==O[A])}function H(Z,ab,X,aa){var ac,Y,t,ad,af,ae;if(Z==X){if(ab==aa){return 0}if(ab0){O.collapse(X)}}else{O.collapse(X)}O.collapsed=m();O.commonAncestorContainer=c.findCommonAncestor(O[h],O[Q])}function l(ad){var ac,Z=0,af=0,X,ab,Y,aa,t,ae;if(O[h]==O[Q]){return f(ad)}for(ac=O[Q],X=ac.parentNode;X;ac=X,X=X.parentNode){if(X==O[h]){return r(ac,ad)}++Z}for(ac=O[h],X=ac.parentNode;X;ac=X,X=X.parentNode){if(X==O[Q]){return V(ac,ad)}++af}ab=af-Z;Y=O[h];while(ab>0){Y=Y.parentNode;ab--}aa=O[Q];while(ab<0){aa=aa.parentNode;ab++}for(t=Y.parentNode,ae=aa.parentNode;t!=ae;t=t.parentNode,ae=ae.parentNode){Y=t;aa=ae}return o(Y,aa,ad)}function f(ac){var ae,af,t,Y,Z,ad,aa,X,ab;if(ac!=j){ae=x()}if(O[W]==O[A]){return ae}if(O[h].nodeType==3){af=O[h].nodeValue;t=af.substring(O[W],O[A]);if(ac!=F){Y=O[h];X=O[W];ab=O[A]-O[W];if(X===0&&ab>=Y.nodeValue.length-1){Y.parentNode.removeChild(Y)}else{Y.deleteData(X,ab)}O.collapse(E)}if(ac==j){return}if(t.length>0){ae.appendChild(e.createTextNode(t))}return ae}Y=P(O[h],O[W]);Z=O[A]-O[W];while(Y&&Z>0){ad=Y.nextSibling;aa=z(Y,ac);if(ae){ae.appendChild(aa)}--Z;Y=ad}if(ac!=F){O.collapse(E)}return ae}function r(ad,aa){var ac,ab,X,t,Z,Y;if(aa!=j){ac=x()}ab=i(ad,aa);if(ac){ac.appendChild(ab)}X=n(ad);t=X-O[W];if(t<=0){if(aa!=F){O.setEndBefore(ad);O.collapse(S)}return ac}ab=ad.previousSibling;while(t>0){Z=ab.previousSibling;Y=z(ab,aa);if(ac){ac.insertBefore(Y,ac.firstChild)}--t;ab=Z}if(aa!=F){O.setEndBefore(ad);O.collapse(S)}return ac}function V(ab,aa){var ad,X,ac,t,Z,Y;if(aa!=j){ad=x()}ac=R(ab,aa);if(ad){ad.appendChild(ac)}X=n(ab);++X;t=O[A]-X;ac=ab.nextSibling;while(ac&&t>0){Z=ac.nextSibling;Y=z(ac,aa);if(ad){ad.appendChild(Y)}--t;ac=Z}if(aa!=F){O.setStartAfter(ab);O.collapse(E)}return ad}function o(ab,t,ae){var Y,ag,aa,ac,ad,X,af,Z;if(ae!=j){ag=x()}Y=R(ab,ae);if(ag){ag.appendChild(Y)}aa=ab.parentNode;ac=n(ab);ad=n(t);++ac;X=ad-ac;af=ab.nextSibling;while(X>0){Z=af.nextSibling;Y=z(af,ae);if(ag){ag.appendChild(Y)}af=Z;--X}Y=i(t,ae);if(ag){ag.appendChild(Y)}if(ae!=F){O.setStartAfter(ab);O.collapse(E)}return ag}function i(ac,ad){var Y=P(O[Q],O[A]-1),ae,ab,aa,t,X,Z=Y!=O[Q];if(Y==ac){return M(Y,Z,S,ad)}ae=Y.parentNode;ab=M(ae,S,S,ad);while(ae){while(Y){aa=Y.previousSibling;t=M(Y,Z,S,ad);if(ad!=j){ab.insertBefore(t,ab.firstChild)}Z=E;Y=aa}if(ae==ac){return ab}Y=ae.previousSibling;ae=ae.parentNode;X=M(ae,S,S,ad);if(ad!=j){X.appendChild(ab)}ab=X}}function R(ac,ad){var Z=P(O[h],O[W]),aa=Z!=O[h],ae,ab,Y,t,X;if(Z==ac){return M(Z,aa,E,ad)}ae=Z.parentNode;ab=M(ae,S,E,ad);while(ae){while(Z){Y=Z.nextSibling;t=M(Z,aa,E,ad);if(ad!=j){ab.appendChild(t)}aa=E;Z=Y}if(ae==ac){return ab}Z=ae.nextSibling;ae=ae.parentNode;X=M(ae,S,E,ad);if(ad!=j){X.appendChild(ab)}ab=X}}function M(t,aa,ad,ae){var Z,Y,ab,X,ac;if(aa){return z(t,ae)}if(t.nodeType==3){Z=t.nodeValue;if(ad){X=O[W];Y=Z.substring(X);ab=Z.substring(0,X)}else{X=O[A];Y=Z.substring(0,X);ab=Z.substring(X)}if(ae!=F){t.nodeValue=ab}if(ae==j){return}ac=c.clone(t,S);ac.nodeValue=Y;return ac}if(ae==j){return}return c.clone(t,S)}function z(X,t){if(t!=j){return t==F?c.clone(X,E):X}X.parentNode.removeChild(X)}function T(){return c.create("body",null,d()).outerText}return O}a.Range=b;b.prototype.toString=function(){return this.toStringIE()}})(tinymce.dom);(function(){function a(d){var b=this,h=d.dom,c=true,f=false;function e(i,j){var k,t=0,q,n,m,l,o,r,p=-1,s;k=i.duplicate();k.collapse(j);s=k.parentElement();if(s.ownerDocument!==d.dom.doc){return}while(s.contentEditable==="false"){s=s.parentNode}if(!s.hasChildNodes()){return{node:s,inside:1}}m=s.children;q=m.length-1;while(t<=q){r=Math.floor((t+q)/2);l=m[r];k.moveToElementText(l);p=k.compareEndPoints(j?"StartToStart":"EndToEnd",i);if(p>0){q=r-1}else{if(p<0){t=r+1}else{return{node:l}}}}if(p<0){if(!l){k.moveToElementText(s);k.collapse(true);l=s;n=true}else{k.collapse(false)}o=0;while(k.compareEndPoints(j?"StartToStart":"StartToEnd",i)!==0){if(k.move("character",1)===0||s!=k.parentElement()){break}o++}}else{k.collapse(true);o=0;while(k.compareEndPoints(j?"StartToStart":"StartToEnd",i)!==0){if(k.move("character",-1)===0||s!=k.parentElement()){break}o++}}return{node:l,position:p,offset:o,inside:n}}function g(){var i=d.getRng(),r=h.createRng(),l,k,p,q,m,j;l=i.item?i.item(0):i.parentElement();if(l.ownerDocument!=h.doc){return r}k=d.isCollapsed();if(i.item){r.setStart(l.parentNode,h.nodeIndex(l));r.setEnd(r.startContainer,r.startOffset+1);return r}function o(A){var u=e(i,A),s,y,z=0,x,v,t;s=u.node;y=u.offset;if(u.inside&&!s.hasChildNodes()){r[A?"setStart":"setEnd"](s,0);return}if(y===v){r[A?"setStartBefore":"setEndAfter"](s);return}if(u.position<0){x=u.inside?s.firstChild:s.nextSibling;if(!x){r[A?"setStartAfter":"setEndAfter"](s);return}if(!y){if(x.nodeType==3){r[A?"setStart":"setEnd"](x,0)}else{r[A?"setStartBefore":"setEndBefore"](x)}return}while(x){t=x.nodeValue;z+=t.length;if(z>=y){s=x;z-=y;z=t.length-z;break}x=x.nextSibling}}else{x=s.previousSibling;if(!x){return r[A?"setStartBefore":"setEndBefore"](s)}if(!y){if(s.nodeType==3){r[A?"setStart":"setEnd"](x,s.nodeValue.length)}else{r[A?"setStartAfter":"setEndAfter"](x)}return}while(x){z+=x.nodeValue.length;if(z>=y){s=x;z-=y;break}x=x.previousSibling}}r[A?"setStart":"setEnd"](s,z)}try{o(true);if(!k){o()}}catch(n){if(n.number==-2147024809){m=b.getBookmark(2);p=i.duplicate();p.collapse(true);l=p.parentElement();if(!k){p=i.duplicate();p.collapse(false);q=p.parentElement();q.innerHTML=q.innerHTML}l.innerHTML=l.innerHTML;b.moveToBookmark(m);i=d.getRng();o(true);if(!k){o()}}else{throw n}}return r}this.getBookmark=function(m){var j=d.getRng(),o,i,l={};function n(u){var t,p,s,r,q=[];t=u.parentNode;p=h.getRoot().parentNode;while(t!=p&&t.nodeType!==9){s=t.children;r=s.length;while(r--){if(u===s[r]){q.push(r);break}}u=t;t=t.parentNode}return q}function k(q){var p;p=e(j,q);if(p){return{position:p.position,offset:p.offset,indexes:n(p.node),inside:p.inside}}}if(m===2){if(!j.item){l.start=k(true);if(!d.isCollapsed()){l.end=k()}}else{l.start={ctrl:true,indexes:n(j.item(0))}}}return l};this.moveToBookmark=function(k){var j,i=h.doc.body;function m(o){var r,q,n,p;r=h.getRoot();for(q=o.length-1;q>=0;q--){p=r.children;n=o[q];if(n<=p.length-1){r=p[n]}}return r}function l(r){var n=k[r?"start":"end"],q,p,o;if(n){q=n.position>0;p=i.createTextRange();p.moveToElementText(m(n.indexes));offset=n.offset;if(offset!==o){p.collapse(n.inside||q);p.moveStart("character",q?-offset:offset)}else{p.collapse(r)}j.setEndPoint(r?"StartToStart":"EndToStart",p);if(r){j.collapse(true)}}}if(k.start){if(k.start.ctrl){j=i.createControlRange();j.addElement(m(k.start.indexes));j.select()}else{j=i.createTextRange();l(true);l();j.select()}}};this.addRange=function(i){var n,l,k,p,v,q,t,s=d.dom.doc,m=s.body,r,u;function j(C){var y,B,x,A,z;x=h.create("a");y=C?k:v;B=C?p:q;A=n.duplicate();if(y==s||y==s.documentElement){y=m;B=0}if(y.nodeType==3){y.parentNode.insertBefore(x,y);A.moveToElementText(x);A.moveStart("character",B);h.remove(x);n.setEndPoint(C?"StartToStart":"EndToEnd",A)}else{z=y.childNodes;if(z.length){if(B>=z.length){h.insertAfter(x,z[z.length-1])}else{y.insertBefore(x,z[B])}A.moveToElementText(x)}else{if(y.canHaveHTML){y.innerHTML="\uFEFF";x=y.firstChild;A.moveToElementText(x);A.collapse(f)}}n.setEndPoint(C?"StartToStart":"EndToEnd",A);h.remove(x)}}k=i.startContainer;p=i.startOffset;v=i.endContainer;q=i.endOffset;n=m.createTextRange();if(k==v&&k.nodeType==1){if(p==q&&!k.hasChildNodes()){if(k.canHaveHTML){t=k.previousSibling;if(t&&!t.hasChildNodes()&&h.isBlock(t)){t.innerHTML="\uFEFF"}else{t=null}k.innerHTML="\uFEFF\uFEFF";n.moveToElementText(k.lastChild);n.select();h.doc.selection.clear();k.innerHTML="";if(t){t.innerHTML=""}return}else{p=h.nodeIndex(k);k=k.parentNode}}if(p==q-1){try{u=k.childNodes[p];l=m.createControlRange();l.addElement(u);l.select();r=d.getRng();if(r.item&&u===r.item(0)){return}}catch(o){}}}j(true);j();n.select()};this.getRangeAt=g}tinymce.dom.TridentSelection=a})();(function(a){a.dom.Element=function(f,d){var b=this,e,c;b.settings=d=d||{};b.id=f;b.dom=e=d.dom||a.DOM;if(!a.isIE){c=e.get(b.id)}a.each(("getPos,getRect,getParent,add,setStyle,getStyle,setStyles,setAttrib,setAttribs,getAttrib,addClass,removeClass,hasClass,getOuterHTML,setOuterHTML,remove,show,hide,isHidden,setHTML,get").split(/,/),function(g){b[g]=function(){var h=[f],j;for(j=0;j"+(i.item?i.item(0).outerHTML:i.htmlText);m.removeChild(m.firstChild)}else{m.innerHTML=i.toString()}}if(/^\s/.test(m.innerHTML)){j=" "}if(/\s+$/.test(m.innerHTML)){l=" "}h.getInner=true;h.content=g.isCollapsed()?"":j+g.serializer.serialize(m,h)+l;g.onGetContent.dispatch(g,h);return h.content},setContent:function(h,j){var o=this,g=o.getRng(),k,l=o.win.document,n,m;j=j||{format:"html"};j.set=true;h=j.content=h;if(!j.no_events){o.onBeforeSetContent.dispatch(o,j)}h=j.content;if(g.insertNode){h+='_';if(g.startContainer==l&&g.endContainer==l){l.body.innerHTML=h}else{g.deleteContents();if(l.body.childNodes.length===0){l.body.innerHTML=h}else{if(g.createContextualFragment){g.insertNode(g.createContextualFragment(h))}else{n=l.createDocumentFragment();m=l.createElement("div");n.appendChild(m);m.outerHTML=h;g.insertNode(n)}}}k=o.dom.get("__caret");g=l.createRange();g.setStartBefore(k);g.setEndBefore(k);o.setRng(g);o.dom.remove("__caret");try{o.setRng(g)}catch(i){}}else{if(g.item){l.execCommand("Delete",false,null);g=o.getRng()}if(/^\s+/.test(h)){g.pasteHTML('_'+h);o.dom.remove("__mce_tmp")}else{g.pasteHTML(h)}}if(!j.no_events){o.onSetContent.dispatch(o,j)}},getStart:function(){var i=this,h=i.getRng(),j,g,l,k;if(h.duplicate||h.item){if(h.item){return h.item(0)}l=h.duplicate();l.collapse(1);j=l.parentElement();if(j.ownerDocument!==i.dom.doc){j=i.dom.getRoot()}g=k=h.parentElement();while(k=k.parentNode){if(k==j){j=g;break}}return j}else{j=h.startContainer;if(j.nodeType==1&&j.hasChildNodes()){j=j.childNodes[Math.min(j.childNodes.length-1,h.startOffset)]}if(j&&j.nodeType==3){return j.parentNode}return j}},getEnd:function(){var h=this,g=h.getRng(),j,i;if(g.duplicate||g.item){if(g.item){return g.item(0)}g=g.duplicate();g.collapse(0);j=g.parentElement();if(j.ownerDocument!==h.dom.doc){j=h.dom.getRoot()}if(j&&j.nodeName=="BODY"){return j.lastChild||j}return j}else{j=g.endContainer;i=g.endOffset;if(j.nodeType==1&&j.hasChildNodes()){j=j.childNodes[i>0?i-1:i]}if(j&&j.nodeType==3){return j.parentNode}return j}},getBookmark:function(s,v){var y=this,n=y.dom,h,k,j,o,i,p,q,m="\uFEFF",x;function g(z,A){var t=0;e(n.select(z),function(C,B){if(C==A){t=B}});return t}function u(t){function z(E){var A,D,C,B=E?"start":"end";A=t[B+"Container"];D=t[B+"Offset"];if(A.nodeType==1&&A.nodeName=="TR"){C=A.childNodes;A=C[Math.min(E?D:D-1,C.length-1)];if(A){D=E?0:A.childNodes.length;t["set"+(E?"Start":"End")](A,D)}}}z(true);z();return t}function l(){var z=y.getRng(true),t=n.getRoot(),A={};function B(E,J){var D=E[J?"startContainer":"endContainer"],I=E[J?"startOffset":"endOffset"],C=[],F,H,G=0;if(D.nodeType==3){if(v){for(F=D.previousSibling;F&&F.nodeType==3;F=F.previousSibling){I+=F.nodeValue.length}}C.push(I)}else{H=D.childNodes;if(I>=H.length&&H.length){G=1;I=Math.max(0,H.length-1)}C.push(y.dom.nodeIndex(H[I],v)+G)}for(;D&&D!=t;D=D.parentNode){C.push(y.dom.nodeIndex(D,v))}return C}A.start=B(z,true);if(!y.isCollapsed()){A.end=B(z)}return A}if(s==2){if(y.tridentSel){return y.tridentSel.getBookmark(s)}return l()}if(s){return{rng:y.getRng()}}h=y.getRng();j=n.uniqueId();o=tinyMCE.activeEditor.selection.isCollapsed();x="overflow:hidden;line-height:0px";if(h.duplicate||h.item){if(!h.item){k=h.duplicate();try{h.collapse();h.pasteHTML(''+m+"");if(!o){k.collapse(false);h.moveToElementText(k.parentElement());if(h.compareEndPoints("StartToEnd",k)===0){k.move("character",-1)}k.pasteHTML(''+m+"")}}catch(r){return null}}else{p=h.item(0);i=p.nodeName;return{name:i,index:g(i,p)}}}else{p=y.getNode();i=p.nodeName;if(i=="IMG"){return{name:i,index:g(i,p)}}k=u(h.cloneRange());if(!o){k.collapse(false);k.insertNode(n.create("span",{"data-mce-type":"bookmark",id:j+"_end",style:x},m))}h=u(h);h.collapse(true);h.insertNode(n.create("span",{"data-mce-type":"bookmark",id:j+"_start",style:x},m))}y.moveToBookmark({id:j,keep:1});return{id:j}},moveToBookmark:function(o){var s=this,m=s.dom,j,i,g,r,k,u,p,q;function h(A){var t=o[A?"start":"end"],x,y,z,v;if(t){z=t[0];for(y=r,x=t.length-1;x>=1;x--){v=y.childNodes;if(t[x]>v.length-1){return}y=v[t[x]]}if(y.nodeType===3){z=Math.min(t[0],y.nodeValue.length)}if(y.nodeType===1){z=Math.min(t[0],y.childNodes.length)}if(A){g.setStart(y,z)}else{g.setEnd(y,z)}}return true}function l(B){var v=m.get(o.id+"_"+B),A,t,y,z,x=o.keep;if(v){A=v.parentNode;if(B=="start"){if(!x){t=m.nodeIndex(v)}else{A=v.firstChild;t=1}k=u=A;p=q=t}else{if(!x){t=m.nodeIndex(v)}else{A=v.firstChild;t=1}u=A;q=t}if(!x){z=v.previousSibling;y=v.nextSibling;e(d.grep(v.childNodes),function(C){if(C.nodeType==3){C.nodeValue=C.nodeValue.replace(/\uFEFF/g,"")}});while(v=m.get(o.id+"_"+B)){m.remove(v,1)}if(z&&y&&z.nodeType==y.nodeType&&z.nodeType==3&&!d.isOpera){t=z.nodeValue.length;z.appendData(y.nodeValue);m.remove(y);if(B=="start"){k=u=z;p=q=t}else{u=z;q=t}}}}}function n(t){if(m.isBlock(t)&&!t.innerHTML&&!b){t.innerHTML='
'}return t}if(o){if(o.start){g=m.createRng();r=m.getRoot();if(s.tridentSel){return s.tridentSel.moveToBookmark(o)}if(h(true)&&h()){s.setRng(g)}}else{if(o.id){l("start");l("end");if(k){g=m.createRng();g.setStart(n(k),p);g.setEnd(n(u),q);s.setRng(g)}}else{if(o.name){s.select(m.select(o.name)[o.index])}else{if(o.rng){s.setRng(o.rng)}}}}}},select:function(l,k){var j=this,m=j.dom,h=m.createRng(),g;function i(n,p){var o=new a(n,n);do{if(n.nodeType==3&&d.trim(n.nodeValue).length!==0){if(p){h.setStart(n,0)}else{h.setEnd(n,n.nodeValue.length)}return}if(n.nodeName=="BR"){if(p){h.setStartBefore(n)}else{h.setEndBefore(n)}return}}while(n=(p?o.next():o.prev()))}if(l){g=m.nodeIndex(l);h.setStart(l.parentNode,g);h.setEnd(l.parentNode,g+1);if(k){i(l,1);i(l)}j.setRng(h)}return l},isCollapsed:function(){var g=this,i=g.getRng(),h=g.getSel();if(!i||i.item){return false}if(i.compareEndPoints){return i.compareEndPoints("StartToEnd",i)===0}return !h||i.collapsed},collapse:function(g){var i=this,h=i.getRng(),j;if(h.item){j=h.item(0);h=i.win.document.body.createTextRange();h.moveToElementText(j)}h.collapse(!!g);i.setRng(h)},getSel:function(){var h=this,g=this.win;return g.getSelection?g.getSelection():g.document.selection},getRng:function(m){var h=this,j,g,l,k=h.win.document;if(m&&h.tridentSel){return h.tridentSel.getRangeAt(0)}try{if(j=h.getSel()){g=j.rangeCount>0?j.getRangeAt(0):(j.createRange?j.createRange():k.createRange())}}catch(i){}if(d.isIE&&g&&g.setStart&&k.selection.createRange().item){l=k.selection.createRange().item(0);g=k.createRange();g.setStartBefore(l);g.setEndAfter(l)}if(!g){g=k.createRange?k.createRange():k.body.createTextRange()}if(g.setStart&&g.startContainer.nodeType===9&&g.collapsed){l=h.dom.getRoot();g.setStart(l,0);g.setEnd(l,0)}if(h.selectedRange&&h.explicitRange){if(g.compareBoundaryPoints(g.START_TO_START,h.selectedRange)===0&&g.compareBoundaryPoints(g.END_TO_END,h.selectedRange)===0){g=h.explicitRange}else{h.selectedRange=null;h.explicitRange=null}}return g},setRng:function(k,g){var j,i=this;if(!i.tridentSel){j=i.getSel();if(j){i.explicitRange=k;try{j.removeAllRanges()}catch(h){}j.addRange(k);if(g===false&&j.extend){j.collapse(k.endContainer,k.endOffset);j.extend(k.startContainer,k.startOffset)}i.selectedRange=j.rangeCount>0?j.getRangeAt(0):null}}else{if(k.cloneRange){try{i.tridentSel.addRange(k);return}catch(h){}}try{k.select()}catch(h){}}},setNode:function(h){var g=this;g.setContent(g.dom.getOuterHTML(h));return h},getNode:function(){var i=this,h=i.getRng(),j=i.getSel(),m,l=h.startContainer,g=h.endContainer;function k(q,o){var p=q;while(q&&q.nodeType===3&&q.length===0){q=o?q.nextSibling:q.previousSibling}return q||p}if(!h){return i.dom.getRoot()}if(h.setStart){m=h.commonAncestorContainer;if(!h.collapsed){if(h.startContainer==h.endContainer){if(h.endOffset-h.startOffset<2){if(h.startContainer.hasChildNodes()){m=h.startContainer.childNodes[h.startOffset]}}}if(l.nodeType===3&&g.nodeType===3){if(l.length===h.startOffset){l=k(l.nextSibling,true)}else{l=l.parentNode}if(h.endOffset===0){g=k(g.previousSibling,false)}else{g=g.parentNode}if(l&&l===g){return l}}}if(m&&m.nodeType==3){return m.parentNode}return m}return h.item?h.item(0):h.parentElement()},getSelectedBlocks:function(p,h){var o=this,k=o.dom,m,l,i,j=[];m=k.getParent(p||o.getStart(),k.isBlock);l=k.getParent(h||o.getEnd(),k.isBlock);if(m){j.push(m)}if(m&&l&&m!=l){i=m;var g=new a(m,k.getRoot());while((i=g.next())&&i!=l){if(k.isBlock(i)){j.push(i)}}}if(l&&m!=l){j.push(l)}return j},isForward:function(){var i=this.dom,g=this.getSel(),j,h;if(!g||g.anchorNode==null||g.focusNode==null){return true}j=i.createRng();j.setStart(g.anchorNode,g.anchorOffset);j.collapse(true);h=i.createRng();h.setStart(g.focusNode,g.focusOffset);h.collapse(true);return j.compareBoundaryPoints(j.START_TO_START,h)<=0},normalize:function(){var h=this,g,m,l,j,i;function k(p){var o,r,n,s=h.dom,u=s.getRoot(),q,t,v;function y(z,A){var B=new a(z,s.getParent(z.parentNode,s.isBlock)||u);while(z=B[A?"prev":"next"]()){if(z.nodeName==="BR"){return true}}}function x(B,z){var C,A;z=z||o;C=new a(z,s.getParent(z.parentNode,s.isBlock)||u);while(q=C[B?"prev":"next"]()){if(q.nodeType===3&&q.nodeValue.length>0){o=q;r=B?q.nodeValue.length:0;m=true;return}if(s.isBlock(q)||t[q.nodeName.toLowerCase()]){return}A=q}if(l&&A){o=A;m=true;r=0}}o=g[(p?"start":"end")+"Container"];r=g[(p?"start":"end")+"Offset"];t=s.schema.getNonEmptyElements();if(o.nodeType===9){o=s.getRoot();r=0}if(o===u){if(p){q=o.childNodes[r>0?r-1:0];if(q){v=q.nodeName.toLowerCase();if(t[q.nodeName]||q.nodeName=="TABLE"){return}}}if(o.hasChildNodes()){o=o.childNodes[Math.min(!p&&r>0?r-1:r,o.childNodes.length-1)];r=0;if(o.hasChildNodes()&&!/TABLE/.test(o.nodeName)){q=o;n=new a(o,u);do{if(q.nodeType===3&&q.nodeValue.length>0){r=p?0:q.nodeValue.length;o=q;m=true;break}if(t[q.nodeName.toLowerCase()]){r=s.nodeIndex(q);o=q.parentNode;if(q.nodeName=="IMG"&&!p){r++}m=true;break}}while(q=(p?n.next():n.prev()))}}}if(l){if(o.nodeType===3&&r===0){x(true)}if(o.nodeType===1){q=o.childNodes[r];if(q&&q.nodeName==="BR"&&!y(q)&&!y(q,true)){x(true,o.childNodes[r])}}}if(p&&!l&&o.nodeType===3&&r===o.nodeValue.length){x(false)}if(m){g["set"+(p?"Start":"End")](o,r)}}if(d.isIE){return}g=h.getRng();l=g.collapsed;k(true);if(!l){k()}if(m){if(l){g.collapse(true)}h.setRng(g,h.isForward())}},selectorChanged:function(g,j){var h=this,i;if(!h.selectorChangedData){h.selectorChangedData={};i={};h.editor.onNodeChange.addToTop(function(l,k,o){var p=h.dom,m=p.getParents(o,null,p.getRoot()),n={};e(h.selectorChangedData,function(r,q){e(m,function(s){if(p.is(s,q)){if(!i[q]){e(r,function(t){t(true,{node:s,selector:q,parents:m})});i[q]=r}n[q]=r;return false}})});e(i,function(r,q){if(!n[q]){delete i[q];e(r,function(s){s(false,{node:o,selector:q,parents:m})})}})})}if(!h.selectorChangedData[g]){h.selectorChangedData[g]=[]}h.selectorChangedData[g].push(j);return h},scrollIntoView:function(k){var j,h,g=this,i=g.dom;h=i.getViewPort(g.editor.getWin());j=i.getPos(k).y;if(jh.y+h.h){g.editor.getWin().scrollTo(0,j0){p.setEndPoint("StartToStart",o)}else{p.setEndPoint("EndToEnd",o)}p.select()}}else{l()}}function l(){var p=n.selection.createRange();if(o&&!p.item&&p.compareEndPoints("StartToEnd",p)===0){o.select()}h.unbind(n,"mouseup",l);h.unbind(n,"mousemove",m);o=k=0}n.documentElement.unselectable=true;h.bind(n,["mousedown","contextmenu"],function(p){if(p.target.nodeName==="HTML"){if(k){l()}g=n.documentElement;if(g.scrollHeight>g.clientHeight){return}k=1;o=j(p.x,p.y);if(o){h.bind(n,"mouseup",l);h.bind(n,"mousemove",m);h.win.focus();o.select()}}})}})})(tinymce);(function(a){a.dom.Serializer=function(e,i,f){var h,b,d=a.isIE,g=a.each,c;if(!e.apply_source_formatting){e.indent=false}i=i||a.DOM;f=f||new a.html.Schema(e);e.entity_encoding=e.entity_encoding||"named";e.remove_trailing_brs="remove_trailing_brs" in e?e.remove_trailing_brs:true;h=new a.util.Dispatcher(self);b=new a.util.Dispatcher(self);c=new a.html.DomParser(e,f);c.addAttributeFilter("src,href,style",function(k,j){var o=k.length,l,q,n="data-mce-"+j,p=e.url_converter,r=e.url_converter_scope,m;while(o--){l=k[o];q=l.attributes.map[n];if(q!==m){l.attr(j,q.length>0?q:null);l.attr(n,null)}else{q=l.attributes.map[j];if(j==="style"){q=i.serializeStyle(i.parseStyle(q),l.name)}else{if(p){q=p.call(r,q,j,l.name)}}l.attr(j,q.length>0?q:null)}}});c.addAttributeFilter("class",function(j,k){var l=j.length,m,n;while(l--){m=j[l];n=m.attr("class").replace(/(?:^|\s)mce(Item\w+|Selected)(?!\S)/g,"");m.attr("class",n.length>0?n:null)}});c.addAttributeFilter("data-mce-type",function(j,l,k){var m=j.length,n;while(m--){n=j[m];if(n.attributes.map["data-mce-type"]==="bookmark"&&!k.cleanup){n.remove()}}});c.addAttributeFilter("data-mce-expando",function(j,l,k){var m=j.length;while(m--){j[m].attr(l,null)}});c.addNodeFilter("noscript",function(j){var k=j.length,l;while(k--){l=j[k].firstChild;if(l){l.value=a.html.Entities.decode(l.value)}}});c.addNodeFilter("script,style",function(k,l){var m=k.length,n,o;function j(p){return p.replace(/()/g,"\n").replace(/^[\r\n]*|[\r\n]*$/g,"").replace(/^\s*(()?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g,"")}while(m--){n=k[m];o=n.firstChild?n.firstChild.value:"";if(l==="script"){n.attr("type",(n.attr("type")||"text/javascript").replace(/^mce\-/,""));if(o.length>0){n.firstChild.value="// "}}else{if(o.length>0){n.firstChild.value=""}}}});c.addNodeFilter("#comment",function(j,k){var l=j.length,m;while(l--){m=j[l];if(m.value.indexOf("[CDATA[")===0){m.name="#cdata";m.type=4;m.value=m.value.replace(/^\[CDATA\[|\]\]$/g,"")}else{if(m.value.indexOf("mce:protected ")===0){m.name="#text";m.type=3;m.raw=true;m.value=unescape(m.value).substr(14)}}}});c.addNodeFilter("xml:namespace,input",function(j,k){var l=j.length,m;while(l--){m=j[l];if(m.type===7){m.remove()}else{if(m.type===1){if(k==="input"&&!("type" in m.attributes.map)){m.attr("type","text")}}}}});if(e.fix_list_elements){c.addNodeFilter("ul,ol",function(k,l){var m=k.length,n,j;while(m--){n=k[m];j=n.parent;if(j.name==="ul"||j.name==="ol"){if(n.prev&&n.prev.name==="li"){n.prev.append(n)}}}})}c.addAttributeFilter("data-mce-src,data-mce-href,data-mce-style",function(j,k){var l=j.length;while(l--){j[l].attr(k,null)}});return{schema:f,addNodeFilter:c.addNodeFilter,addAttributeFilter:c.addAttributeFilter,onPreProcess:h,onPostProcess:b,serialize:function(o,m){var l,p,k,j,n;if(d&&i.select("script,style,select,map").length>0){n=o.innerHTML;o=o.cloneNode(false);i.setHTML(o,n)}else{o=o.cloneNode(true)}l=o.ownerDocument.implementation;if(l.createHTMLDocument){p=l.createHTMLDocument("");g(o.nodeName=="BODY"?o.childNodes:[o],function(q){p.body.appendChild(p.importNode(q,true))});if(o.nodeName!="BODY"){o=p.body.firstChild}else{o=p.body}k=i.doc;i.doc=p}m=m||{};m.format=m.format||"html";if(!m.no_events){m.node=o;h.dispatch(self,m)}j=new a.html.Serializer(e,f);m.content=j.serialize(c.parse(a.trim(m.getInner?o.innerHTML:i.getOuterHTML(o)),m));if(!m.cleanup){m.content=m.content.replace(/\uFEFF/g,"")}if(!m.no_events){b.dispatch(self,m)}if(k){i.doc=k}m.node=null;return m.content},addRules:function(j){f.addValidElements(j)},setRules:function(j){f.setValidElements(j)}}}})(tinymce);(function(a){a.dom.ScriptLoader=function(h){var c=0,k=1,i=2,l={},j=[],e={},d=[],g=0,f;function b(m,v){var x=this,q=a.DOM,s,o,r,n;function p(){q.remove(n);if(s){s.onreadystatechange=s.onload=s=null}v()}function u(){if(typeof(console)!=="undefined"&&console.log){console.log("Failed to load: "+m)}}n=q.uniqueId();if(a.isIE6){o=new a.util.URI(m);r=location;if(o.host==r.hostname&&o.port==r.port&&(o.protocol+":")==r.protocol&&o.protocol.toLowerCase()!="file"){a.util.XHR.send({url:a._addVer(o.getURI()),success:function(y){var t=q.create("script",{type:"text/javascript"});t.text=y;document.getElementsByTagName("head")[0].appendChild(t);q.remove(t);p()},error:u});return}}s=document.createElement("script");s.id=n;s.type="text/javascript";s.src=a._addVer(m);if(!a.isIE){s.onload=p}s.onerror=u;if(!a.isOpera){s.onreadystatechange=function(){var t=s.readyState;if(t=="complete"||t=="loaded"){p()}}}(document.getElementsByTagName("head")[0]||document.body).appendChild(s)}this.isDone=function(m){return l[m]==i};this.markDone=function(m){l[m]=i};this.add=this.load=function(m,q,n){var o,p=l[m];if(p==f){j.push(m);l[m]=c}if(q){if(!e[m]){e[m]=[]}e[m].push({func:q,scope:n||this})}};this.loadQueue=function(n,m){this.loadScripts(j,n,m)};this.loadScripts=function(m,q,p){var o;function n(r){a.each(e[r],function(s){s.func.call(s.scope)});e[r]=f}d.push({func:q,scope:p||this});o=function(){var r=a.grep(m);m.length=0;a.each(r,function(s){if(l[s]==i){n(s);return}if(l[s]!=k){l[s]=k;g++;b(s,function(){l[s]=i;g--;n(s);o()})}});if(!g){a.each(d,function(s){s.func.call(s.scope)});d.length=0}};o()}};a.ScriptLoader=new a.dom.ScriptLoader()})(tinymce);(function(a){a.dom.RangeUtils=function(c){var b="\uFEFF";this.walk=function(d,s){var i=d.startContainer,l=d.startOffset,t=d.endContainer,m=d.endOffset,j,g,o,h,r,q,e;e=c.select("td.mceSelected,th.mceSelected");if(e.length>0){a.each(e,function(u){s([u])});return}function f(u){var v;v=u[0];if(v.nodeType===3&&v===i&&l>=v.nodeValue.length){u.splice(0,1)}v=u[u.length-1];if(m===0&&u.length>0&&v===t&&v.nodeType===3){u.splice(u.length-1,1)}return u}function p(x,v,u){var y=[];for(;x&&x!=u;x=x[v]){y.push(x)}return y}function n(v,u){do{if(v.parentNode==u){return v}v=v.parentNode}while(v)}function k(x,v,y){var u=y?"nextSibling":"previousSibling";for(h=x,r=h.parentNode;h&&h!=v;h=r){r=h.parentNode;q=p(h==x?h:h[u],u);if(q.length){if(!y){q.reverse()}s(f(q))}}}if(i.nodeType==1&&i.hasChildNodes()){i=i.childNodes[l]}if(t.nodeType==1&&t.hasChildNodes()){t=t.childNodes[Math.min(m-1,t.childNodes.length-1)]}if(i==t){return s(f([i]))}j=c.findCommonAncestor(i,t);for(h=i;h;h=h.parentNode){if(h===t){return k(i,j,true)}if(h===j){break}}for(h=t;h;h=h.parentNode){if(h===i){return k(t,j)}if(h===j){break}}g=n(i,j)||i;o=n(t,j)||t;k(i,g,true);q=p(g==i?g:g.nextSibling,"nextSibling",o==t?o.nextSibling:o);if(q.length){s(f(q))}k(t,o)};this.split=function(e){var h=e.startContainer,d=e.startOffset,i=e.endContainer,g=e.endOffset;function f(j,k){return j.splitText(k)}if(h==i&&h.nodeType==3){if(d>0&&dd){g=g-d;h=i=f(i,g).previousSibling;g=i.nodeValue.length;d=0}else{g=0}}}else{if(h.nodeType==3&&d>0&&d0&&g=m.length){r=0}}t=m[r];f.setAttrib(g,"tabindex","-1");f.setAttrib(t.id,"tabindex","0");f.get(t.id).focus();if(e.actOnFocus){e.onAction(t.id)}if(s){a.cancel(s)}};p=function(z){var v=37,u=39,y=38,A=40,r=27,t=14,s=13,x=32;switch(z.keyCode){case v:if(i){q.moveFocus(-1)}break;case u:if(i){q.moveFocus(1)}break;case y:if(o){q.moveFocus(-1)}break;case A:if(o){q.moveFocus(1)}break;case r:if(e.onCancel){e.onCancel();a.cancel(z)}break;case t:case s:case x:if(e.onAction){e.onAction(g);a.cancel(z)}break}};c(m,function(t,r){var s,u;if(!t.id){t.id=f.uniqueId("_mce_item_")}u=f.get(t.id);if(l){f.bind(u,"blur",h);s="-1"}else{s=(r===0?"0":"-1")}u.setAttribute("tabindex",s);f.bind(u,"focus",k)});if(m[0]){g=m[0].id}f.setAttrib(n,"tabindex","-1");var j=f.get(n);f.bind(j,"focus",d);f.bind(j,"keydown",p)}})})(tinymce);(function(c){var b=c.DOM,a=c.is;c.create("tinymce.ui.Control",{Control:function(f,e,d){this.id=f;this.settings=e=e||{};this.rendered=false;this.onRender=new c.util.Dispatcher(this);this.classPrefix="";this.scope=e.scope||this;this.disabled=0;this.active=0;this.editor=d},setAriaProperty:function(f,e){var d=b.get(this.id+"_aria")||b.get(this.id);if(d){b.setAttrib(d,"aria-"+f,!!e)}},focus:function(){b.get(this.id).focus()},setDisabled:function(d){if(d!=this.disabled){this.setAriaProperty("disabled",d);this.setState("Disabled",d);this.setState("Enabled",!d);this.disabled=d}},isDisabled:function(){return this.disabled},setActive:function(d){if(d!=this.active){this.setState("Active",d);this.active=d;this.setAriaProperty("pressed",d)}},isActive:function(){return this.active},setState:function(f,d){var e=b.get(this.id);f=this.classPrefix+f;if(d){b.addClass(e,f)}else{b.removeClass(e,f)}},isRendered:function(){return this.rendered},renderHTML:function(){},renderTo:function(d){b.setHTML(d,this.renderHTML())},postRender:function(){var e=this,d;if(a(e.disabled)){d=e.disabled;e.disabled=-1;e.setDisabled(d)}if(a(e.active)){d=e.active;e.active=-1;e.setActive(d)}},remove:function(){b.remove(this.id);this.destroy()},destroy:function(){c.dom.Event.clear(this.id)}})})(tinymce);tinymce.create("tinymce.ui.Container:tinymce.ui.Control",{Container:function(c,b,a){this.parent(c,b,a);this.controls=[];this.lookup={}},add:function(a){this.lookup[a.id]=a;this.controls.push(a);return a},get:function(a){return this.lookup[a]}});tinymce.create("tinymce.ui.Separator:tinymce.ui.Control",{Separator:function(b,a){this.parent(b,a);this.classPrefix="mceSeparator";this.setDisabled(true)},renderHTML:function(){return tinymce.DOM.createHTML("span",{"class":this.classPrefix,role:"separator","aria-orientation":"vertical",tabindex:"-1"})}});(function(d){var c=d.is,b=d.DOM,e=d.each,a=d.walk;d.create("tinymce.ui.MenuItem:tinymce.ui.Control",{MenuItem:function(g,f){this.parent(g,f);this.classPrefix="mceMenuItem"},setSelected:function(f){this.setState("Selected",f);this.setAriaProperty("checked",!!f);this.selected=f},isSelected:function(){return this.selected},postRender:function(){var f=this;f.parent();if(c(f.selected)){f.setSelected(f.selected)}}})})(tinymce);(function(d){var c=d.is,b=d.DOM,e=d.each,a=d.walk;d.create("tinymce.ui.Menu:tinymce.ui.MenuItem",{Menu:function(h,g){var f=this;f.parent(h,g);f.items={};f.collapsed=false;f.menuCount=0;f.onAddItem=new d.util.Dispatcher(this)},expand:function(g){var f=this;if(g){a(f,function(h){if(h.expand){h.expand()}},"items",f)}f.collapsed=false},collapse:function(g){var f=this;if(g){a(f,function(h){if(h.collapse){h.collapse()}},"items",f)}f.collapsed=true},isCollapsed:function(){return this.collapsed},add:function(f){if(!f.settings){f=new d.ui.MenuItem(f.id||b.uniqueId(),f)}this.onAddItem.dispatch(this,f);return this.items[f.id]=f},addSeparator:function(){return this.add({separator:true})},addMenu:function(f){if(!f.collapse){f=this.createMenu(f)}this.menuCount++;return this.add(f)},hasMenus:function(){return this.menuCount!==0},remove:function(f){delete this.items[f.id]},removeAll:function(){var f=this;a(f,function(g){if(g.removeAll){g.removeAll()}else{g.remove()}g.destroy()},"items",f);f.items={}},createMenu:function(g){var f=new d.ui.Menu(g.id||b.uniqueId(),g);f.onAddItem.add(this.onAddItem.dispatch,this.onAddItem);return f}})})(tinymce);(function(e){var d=e.is,c=e.DOM,f=e.each,a=e.dom.Event,b=e.dom.Element;e.create("tinymce.ui.DropMenu:tinymce.ui.Menu",{DropMenu:function(h,g){g=g||{};g.container=g.container||c.doc.body;g.offset_x=g.offset_x||0;g.offset_y=g.offset_y||0;g.vp_offset_x=g.vp_offset_x||0;g.vp_offset_y=g.vp_offset_y||0;if(d(g.icons)&&!g.icons){g["class"]+=" mceNoIcons"}this.parent(h,g);this.onShowMenu=new e.util.Dispatcher(this);this.onHideMenu=new e.util.Dispatcher(this);this.classPrefix="mceMenu"},createMenu:function(j){var h=this,i=h.settings,g;j.container=j.container||i.container;j.parent=h;j.constrain=j.constrain||i.constrain;j["class"]=j["class"]||i["class"];j.vp_offset_x=j.vp_offset_x||i.vp_offset_x;j.vp_offset_y=j.vp_offset_y||i.vp_offset_y;j.keyboard_focus=i.keyboard_focus;g=new e.ui.DropMenu(j.id||c.uniqueId(),j);g.onAddItem.add(h.onAddItem.dispatch,h.onAddItem);return g},focus:function(){var g=this;if(g.keyboardNav){g.keyboardNav.focus()}},update:function(){var i=this,j=i.settings,g=c.get("menu_"+i.id+"_tbl"),l=c.get("menu_"+i.id+"_co"),h,k;h=j.max_width?Math.min(g.offsetWidth,j.max_width):g.offsetWidth;k=j.max_height?Math.min(g.offsetHeight,j.max_height):g.offsetHeight;if(!c.boxModel){i.element.setStyles({width:h+2,height:k+2})}else{i.element.setStyles({width:h,height:k})}if(j.max_width){c.setStyle(l,"width",h)}if(j.max_height){c.setStyle(l,"height",k);if(g.clientHeightv){p=r?r-u:Math.max(0,(v-A.vp_offset_x)-u)}if((n+A.vp_offset_y+l)>q){n=Math.max(0,(q-A.vp_offset_y)-l)}}c.setStyles(o,{left:p,top:n});z.element.update();z.isMenuVisible=1;z.mouseClickFunc=a.add(o,"click",function(s){var h;s=s.target;if(s&&(s=c.getParent(s,"tr"))&&!c.hasClass(s,m+"ItemSub")){h=z.items[s.id];if(h.isDisabled()){return}k=z;while(k){if(k.hideMenu){k.hideMenu()}k=k.settings.parent}if(h.settings.onclick){h.settings.onclick(s)}return false}});if(z.hasMenus()){z.mouseOverFunc=a.add(o,"mouseover",function(x){var h,t,s;x=x.target;if(x&&(x=c.getParent(x,"tr"))){h=z.items[x.id];if(z.lastMenu){z.lastMenu.collapse(1)}if(h.isDisabled()){return}if(x&&c.hasClass(x,m+"ItemSub")){t=c.getRect(x);h.showMenu((t.x+t.w-i),t.y-i,t.x);z.lastMenu=h;c.addClass(c.get(h.id).firstChild,m+"ItemActive")}}})}a.add(o,"keydown",z._keyHandler,z);z.onShowMenu.dispatch(z);if(A.keyboard_focus){z._setupKeyboardNav()}},hideMenu:function(j){var g=this,i=c.get("menu_"+g.id),h;if(!g.isMenuVisible){return}if(g.keyboardNav){g.keyboardNav.destroy()}a.remove(i,"mouseover",g.mouseOverFunc);a.remove(i,"click",g.mouseClickFunc);a.remove(i,"keydown",g._keyHandler);c.hide(i);g.isMenuVisible=0;if(!j){g.collapse(1)}if(g.element){g.element.hide()}if(h=c.get(g.id)){c.removeClass(h.firstChild,g.classPrefix+"ItemActive")}g.onHideMenu.dispatch(g)},add:function(i){var g=this,h;i=g.parent(i);if(g.isRendered&&(h=c.get("menu_"+g.id))){g._add(c.select("tbody",h)[0],i)}return i},collapse:function(g){this.parent(g);this.hideMenu(1)},remove:function(g){c.remove(g.id);this.destroy();return this.parent(g)},destroy:function(){var g=this,h=c.get("menu_"+g.id);if(g.keyboardNav){g.keyboardNav.destroy()}a.remove(h,"mouseover",g.mouseOverFunc);a.remove(c.select("a",h),"focus",g.mouseOverFunc);a.remove(h,"click",g.mouseClickFunc);a.remove(h,"keydown",g._keyHandler);if(g.element){g.element.remove()}c.remove(h)},renderNode:function(){var i=this,j=i.settings,l,h,k,g;g=c.create("div",{role:"listbox",id:"menu_"+i.id,"class":j["class"],style:"position:absolute;left:0;top:0;z-index:200000;outline:0"});if(i.settings.parent){c.setAttrib(g,"aria-parent","menu_"+i.settings.parent.id)}k=c.add(g,"div",{role:"presentation",id:"menu_"+i.id+"_co","class":i.classPrefix+(j["class"]?" "+j["class"]:"")});i.element=new b("menu_"+i.id,{blocker:1,container:j.container});if(j.menu_line){c.add(k,"span",{"class":i.classPrefix+"Line"})}l=c.add(k,"table",{role:"presentation",id:"menu_"+i.id+"_tbl",border:0,cellPadding:0,cellSpacing:0});h=c.add(l,"tbody");f(i.items,function(m){i._add(h,m)});i.rendered=true;return g},_setupKeyboardNav:function(){var i,h,g=this;i=c.get("menu_"+g.id);h=c.select("a[role=option]","menu_"+g.id);h.splice(0,0,i);g.keyboardNav=new e.ui.KeyboardNavigation({root:"menu_"+g.id,items:h,onCancel:function(){g.hideMenu()},enableUpDown:true});i.focus()},_keyHandler:function(g){var h=this,i;switch(g.keyCode){case 37:if(h.settings.parent){h.hideMenu();h.settings.parent.focus();a.cancel(g)}break;case 39:if(h.mouseOverFunc){h.mouseOverFunc(g)}break}},_add:function(j,h){var i,q=h.settings,p,l,k,m=this.classPrefix,g;if(q.separator){l=c.add(j,"tr",{id:h.id,"class":m+"ItemSeparator"});c.add(l,"td",{"class":m+"ItemSeparator"});if(i=l.previousSibling){c.addClass(i,"mceLast")}return}i=l=c.add(j,"tr",{id:h.id,"class":m+"Item "+m+"ItemEnabled"});i=k=c.add(i,q.titleItem?"th":"td");i=p=c.add(i,"a",{id:h.id+"_aria",role:q.titleItem?"presentation":"option",href:"javascript:;",onclick:"return false;",onmousedown:"return false;"});if(q.parent){c.setAttrib(p,"aria-haspopup","true");c.setAttrib(p,"aria-owns","menu_"+h.id)}c.addClass(k,q["class"]);g=c.add(i,"span",{"class":"mceIcon"+(q.icon?" mce_"+q.icon:"")});if(q.icon_src){c.add(g,"img",{src:q.icon_src})}i=c.add(i,q.element||"span",{"class":"mceText",title:h.settings.title},h.settings.title);if(h.settings.style){if(typeof h.settings.style=="function"){h.settings.style=h.settings.style()}c.setAttrib(i,"style",h.settings.style)}if(j.childNodes.length==1){c.addClass(l,"mceFirst")}if((i=l.previousSibling)&&c.hasClass(i,m+"ItemSeparator")){c.addClass(l,"mceFirst")}if(h.collapse){c.addClass(l,m+"ItemSub")}if(i=l.previousSibling){c.removeClass(i,"mceLast")}c.addClass(l,"mceLast")}})})(tinymce);(function(b){var a=b.DOM;b.create("tinymce.ui.Button:tinymce.ui.Control",{Button:function(e,d,c){this.parent(e,d,c);this.classPrefix="mceButton"},renderHTML:function(){var f=this.classPrefix,e=this.settings,d,c;c=a.encode(e.label||"");d='';if(e.image&&!(this.editor&&this.editor.forcedHighContrastMode)){d+=''+a.encode(e.title)+''+(c?''+c+"":"")}else{d+=''+(c?''+c+"":"")}d+='";d+="";return d},postRender:function(){var d=this,e=d.settings,c;if(b.isIE&&d.editor){b.dom.Event.add(d.id,"mousedown",function(f){var g=d.editor.selection.getNode().nodeName;c=g==="IMG"?d.editor.selection.getBookmark():null})}b.dom.Event.add(d.id,"click",function(f){if(!d.isDisabled()){if(b.isIE&&d.editor&&c!==null){d.editor.selection.moveToBookmark(c)}return e.onclick.call(e.scope,f)}});b.dom.Event.add(d.id,"keyup",function(f){if(!d.isDisabled()&&f.keyCode==b.VK.SPACEBAR){return e.onclick.call(e.scope,f)}})}})})(tinymce);(function(e){var d=e.DOM,b=e.dom.Event,f=e.each,a=e.util.Dispatcher,c;e.create("tinymce.ui.ListBox:tinymce.ui.Control",{ListBox:function(j,i,g){var h=this;h.parent(j,i,g);h.items=[];h.onChange=new a(h);h.onPostRender=new a(h);h.onAdd=new a(h);h.onRenderMenu=new e.util.Dispatcher(this);h.classPrefix="mceListBox";h.marked={}},select:function(h){var g=this,j,i;g.marked={};if(h==c){return g.selectByIndex(-1)}if(h&&typeof(h)=="function"){i=h}else{i=function(k){return k==h}}if(h!=g.selectedValue){f(g.items,function(l,k){if(i(l.value)){j=1;g.selectByIndex(k);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(g){var i=this,j,k,h;i.marked={};if(g!=i.selectedIndex){j=d.get(i.id+"_text");h=d.get(i.id+"_voiceDesc");k=i.items[g];if(k){i.selectedValue=k.value;i.selectedIndex=g;d.setHTML(j,d.encode(k.title));d.setHTML(h,i.settings.title+" - "+k.title);d.removeClass(j,"mceTitle");d.setAttrib(i.id,"aria-valuenow",k.title)}else{d.setHTML(j,d.encode(i.settings.title));d.setHTML(h,d.encode(i.settings.title));d.addClass(j,"mceTitle");i.selectedValue=i.selectedIndex=null;d.setAttrib(i.id,"aria-valuenow",i.settings.title)}j=0}},mark:function(g){this.marked[g]=true},add:function(j,g,i){var h=this;i=i||{};i=e.extend(i,{title:j,value:g});h.items.push(i);h.onAdd.dispatch(h,i)},getLength:function(){return this.items.length},renderHTML:function(){var j="",g=this,i=g.settings,k=g.classPrefix;j='';j+="";j+="";j+="";return j},showMenu:function(){var h=this,j,i=d.get(this.id),g;if(h.isDisabled()||h.items.length===0){return}if(h.menu&&h.menu.isMenuVisible){return h.hideMenu()}if(!h.isMenuRendered){h.renderMenu();h.isMenuRendered=true}j=d.getPos(i);g=h.menu;g.settings.offset_x=j.x;g.settings.offset_y=j.y;g.settings.keyboard_focus=!e.isOpera;f(h.items,function(k){if(g.items[k.id]){g.items[k.id].setSelected(0)}});f(h.items,function(k){if(g.items[k.id]&&h.marked[k.value]){g.items[k.id].setSelected(1)}if(k.value===h.selectedValue){g.items[k.id].setSelected(1)}});g.showMenu(0,i.clientHeight);b.add(d.doc,"mousedown",h.hideMenu,h);d.addClass(h.id,h.classPrefix+"Selected")},hideMenu:function(h){var g=this;if(g.menu&&g.menu.isMenuVisible){d.removeClass(g.id,g.classPrefix+"Selected");if(h&&h.type=="mousedown"&&(h.target.id==g.id+"_text"||h.target.id==g.id+"_open")){return}if(!h||!d.getParent(h.target,".mceMenu")){d.removeClass(g.id,g.classPrefix+"Selected");b.remove(d.doc,"mousedown",g.hideMenu,g);g.menu.hideMenu()}}},renderMenu:function(){var h=this,g;g=h.settings.control_manager.createDropMenu(h.id+"_menu",{menu_line:1,"class":h.classPrefix+"Menu mceNoIcons",max_width:250,max_height:150});g.onHideMenu.add(function(){h.hideMenu();h.focus()});g.add({title:h.settings.title,"class":"mceMenuItemTitle",onclick:function(){if(h.settings.onselect("")!==false){h.select("")}}});f(h.items,function(i){if(i.value===c){g.add({title:i.title,role:"option","class":"mceMenuItemTitle",onclick:function(){if(h.settings.onselect("")!==false){h.select("")}}})}else{i.id=d.uniqueId();i.role="option";i.onclick=function(){if(h.settings.onselect(i.value)!==false){h.select(i.value)}};g.add(i)}});h.onRenderMenu.dispatch(h,g);h.menu=g},postRender:function(){var g=this,h=g.classPrefix;b.add(g.id,"click",g.showMenu,g);b.add(g.id,"keydown",function(i){if(i.keyCode==32){g.showMenu(i);b.cancel(i)}});b.add(g.id,"focus",function(){if(!g._focused){g.keyDownHandler=b.add(g.id,"keydown",function(i){if(i.keyCode==40){g.showMenu();b.cancel(i)}});g.keyPressHandler=b.add(g.id,"keypress",function(j){var i;if(j.keyCode==13){i=g.selectedValue;g.selectedValue=null;b.cancel(j);g.settings.onselect(i)}})}g._focused=1});b.add(g.id,"blur",function(){b.remove(g.id,"keydown",g.keyDownHandler);b.remove(g.id,"keypress",g.keyPressHandler);g._focused=0});if(e.isIE6||!d.boxModel){b.add(g.id,"mouseover",function(){if(!d.hasClass(g.id,h+"Disabled")){d.addClass(g.id,h+"Hover")}});b.add(g.id,"mouseout",function(){if(!d.hasClass(g.id,h+"Disabled")){d.removeClass(g.id,h+"Hover")}})}g.onPostRender.dispatch(g,d.get(g.id))},destroy:function(){this.parent();b.clear(this.id+"_text");b.clear(this.id+"_open")}})})(tinymce);(function(e){var d=e.DOM,b=e.dom.Event,f=e.each,a=e.util.Dispatcher,c;e.create("tinymce.ui.NativeListBox:tinymce.ui.ListBox",{NativeListBox:function(h,g){this.parent(h,g);this.classPrefix="mceNativeListBox"},setDisabled:function(g){d.get(this.id).disabled=g;this.setAriaProperty("disabled",g)},isDisabled:function(){return d.get(this.id).disabled},select:function(h){var g=this,j,i;if(h==c){return g.selectByIndex(-1)}if(h&&typeof(h)=="function"){i=h}else{i=function(k){return k==h}}if(h!=g.selectedValue){f(g.items,function(l,k){if(i(l.value)){j=1;g.selectByIndex(k);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(g){d.get(this.id).selectedIndex=g+1;this.selectedValue=this.items[g]?this.items[g].value:null},add:function(k,h,g){var j,i=this;g=g||{};g.value=h;if(i.isRendered()){d.add(d.get(this.id),"option",g,k)}j={title:k,value:h,attribs:g};i.items.push(j);i.onAdd.dispatch(i,j)},getLength:function(){return this.items.length},renderHTML:function(){var i,g=this;i=d.createHTML("option",{value:""},"-- "+g.settings.title+" --");f(g.items,function(h){i+=d.createHTML("option",{value:h.value},h.title)});i=d.createHTML("select",{id:g.id,"class":"mceNativeListBox","aria-labelledby":g.id+"_aria"},i);i+=d.createHTML("span",{id:g.id+"_aria",style:"display: none"},g.settings.title);return i},postRender:function(){var h=this,i,j=true;h.rendered=true;function g(l){var k=h.items[l.target.selectedIndex-1];if(k&&(k=k.value)){h.onChange.dispatch(h,k);if(h.settings.onselect){h.settings.onselect(k)}}}b.add(h.id,"change",g);b.add(h.id,"keydown",function(l){var k;b.remove(h.id,"change",i);j=false;k=b.add(h.id,"blur",function(){if(j){return}j=true;b.add(h.id,"change",g);b.remove(h.id,"blur",k)});if(e.isWebKit&&(l.keyCode==37||l.keyCode==39)){return b.prevent(l)}if(l.keyCode==13||l.keyCode==32){g(l);return b.cancel(l)}});h.onPostRender.dispatch(h,d.get(h.id))}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each;c.create("tinymce.ui.MenuButton:tinymce.ui.Button",{MenuButton:function(g,f,e){this.parent(g,f,e);this.onRenderMenu=new c.util.Dispatcher(this);f.menu_container=f.menu_container||b.doc.body},showMenu:function(){var g=this,j,i,h=b.get(g.id),f;if(g.isDisabled()){return}if(!g.isMenuRendered){g.renderMenu();g.isMenuRendered=true}if(g.isMenuVisible){return g.hideMenu()}j=b.getPos(g.settings.menu_container);i=b.getPos(h);f=g.menu;f.settings.offset_x=i.x;f.settings.offset_y=i.y;f.settings.vp_offset_x=i.x;f.settings.vp_offset_y=i.y;f.settings.keyboard_focus=g._focused;f.showMenu(0,h.firstChild.clientHeight);a.add(b.doc,"mousedown",g.hideMenu,g);g.setState("Selected",1);g.isMenuVisible=1},renderMenu:function(){var f=this,e;e=f.settings.control_manager.createDropMenu(f.id+"_menu",{menu_line:1,"class":this.classPrefix+"Menu",icons:f.settings.icons});e.onHideMenu.add(function(){f.hideMenu();f.focus()});f.onRenderMenu.dispatch(f,e);f.menu=e},hideMenu:function(g){var f=this;if(g&&g.type=="mousedown"&&b.getParent(g.target,function(h){return h.id===f.id||h.id===f.id+"_open"})){return}if(!g||!b.getParent(g.target,".mceMenu")){f.setState("Selected",0);a.remove(b.doc,"mousedown",f.hideMenu,f);if(f.menu){f.menu.hideMenu()}}f.isMenuVisible=0},postRender:function(){var e=this,f=e.settings;a.add(e.id,"click",function(){if(!e.isDisabled()){if(f.onclick){f.onclick(e.value)}e.showMenu()}})}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each;c.create("tinymce.ui.SplitButton:tinymce.ui.MenuButton",{SplitButton:function(g,f,e){this.parent(g,f,e);this.classPrefix="mceSplitButton"},renderHTML:function(){var i,f=this,g=f.settings,e;i="";if(g.image){e=b.createHTML("img ",{src:g.image,role:"presentation","class":"mceAction "+g["class"]})}else{e=b.createHTML("span",{"class":"mceAction "+g["class"]},"")}e+=b.createHTML("span",{"class":"mceVoiceLabel mceIconOnly",id:f.id+"_voice",style:"display:none;"},g.title);i+=""+b.createHTML("a",{role:"button",id:f.id+"_action",tabindex:"-1",href:"javascript:;","class":"mceAction "+g["class"],onclick:"return false;",onmousedown:"return false;",title:g.title},e)+"";e=b.createHTML("span",{"class":"mceOpen "+g["class"]},'');i+=""+b.createHTML("a",{role:"button",id:f.id+"_open",tabindex:"-1",href:"javascript:;","class":"mceOpen "+g["class"],onclick:"return false;",onmousedown:"return false;",title:g.title},e)+"";i+="";i=b.createHTML("table",{role:"presentation","class":"mceSplitButton mceSplitButtonEnabled "+g["class"],cellpadding:"0",cellspacing:"0",title:g.title},i);return b.createHTML("div",{id:f.id,role:"button",tabindex:"0","aria-labelledby":f.id+"_voice","aria-haspopup":"true"},i)},postRender:function(){var e=this,g=e.settings,f;if(g.onclick){f=function(h){if(!e.isDisabled()){g.onclick(e.value);a.cancel(h)}};a.add(e.id+"_action","click",f);a.add(e.id,["click","keydown"],function(h){var k=32,m=14,i=13,j=38,l=40;if((h.keyCode===32||h.keyCode===13||h.keyCode===14)&&!h.altKey&&!h.ctrlKey&&!h.metaKey){f();a.cancel(h)}else{if(h.type==="click"||h.keyCode===l){e.showMenu();a.cancel(h)}}})}a.add(e.id+"_open","click",function(h){e.showMenu();a.cancel(h)});a.add([e.id,e.id+"_open"],"focus",function(){e._focused=1});a.add([e.id,e.id+"_open"],"blur",function(){e._focused=0});if(c.isIE6||!b.boxModel){a.add(e.id,"mouseover",function(){if(!b.hasClass(e.id,"mceSplitButtonDisabled")){b.addClass(e.id,"mceSplitButtonHover")}});a.add(e.id,"mouseout",function(){if(!b.hasClass(e.id,"mceSplitButtonDisabled")){b.removeClass(e.id,"mceSplitButtonHover")}})}},destroy:function(){this.parent();a.clear(this.id+"_action");a.clear(this.id+"_open");a.clear(this.id)}})})(tinymce);(function(d){var c=d.DOM,a=d.dom.Event,b=d.is,e=d.each;d.create("tinymce.ui.ColorSplitButton:tinymce.ui.SplitButton",{ColorSplitButton:function(i,h,f){var g=this;g.parent(i,h,f);g.settings=h=d.extend({colors:"000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF",grid_width:8,default_color:"#888888"},g.settings);g.onShowMenu=new d.util.Dispatcher(g);g.onHideMenu=new d.util.Dispatcher(g);g.value=h.default_color},showMenu:function(){var f=this,g,j,i,h;if(f.isDisabled()){return}if(!f.isMenuRendered){f.renderMenu();f.isMenuRendered=true}if(f.isMenuVisible){return f.hideMenu()}i=c.get(f.id);c.show(f.id+"_menu");c.addClass(i,"mceSplitButtonSelected");h=c.getPos(i);c.setStyles(f.id+"_menu",{left:h.x,top:h.y+i.firstChild.clientHeight,zIndex:200000});i=0;a.add(c.doc,"mousedown",f.hideMenu,f);f.onShowMenu.dispatch(f);if(f._focused){f._keyHandler=a.add(f.id+"_menu","keydown",function(k){if(k.keyCode==27){f.hideMenu()}});c.select("a",f.id+"_menu")[0].focus()}f.keyboardNav=new d.ui.KeyboardNavigation({root:f.id+"_menu",items:c.select("a",f.id+"_menu"),onCancel:function(){f.hideMenu();f.focus()}});f.keyboardNav.focus();f.isMenuVisible=1},hideMenu:function(g){var f=this;if(f.isMenuVisible){if(g&&g.type=="mousedown"&&c.getParent(g.target,function(h){return h.id===f.id+"_open"})){return}if(!g||!c.getParent(g.target,".mceSplitButtonMenu")){c.removeClass(f.id,"mceSplitButtonSelected");a.remove(c.doc,"mousedown",f.hideMenu,f);a.remove(f.id+"_menu","keydown",f._keyHandler);c.hide(f.id+"_menu")}f.isMenuVisible=0;f.onHideMenu.dispatch();f.keyboardNav.destroy()}},renderMenu:function(){var p=this,h,k=0,q=p.settings,g,j,l,o,f;o=c.add(q.menu_container,"div",{role:"listbox",id:p.id+"_menu","class":q.menu_class+" "+q["class"],style:"position:absolute;left:0;top:-1000px;"});h=c.add(o,"div",{"class":q["class"]+" mceSplitButtonMenu"});c.add(h,"span",{"class":"mceMenuLine"});g=c.add(h,"table",{role:"presentation","class":"mceColorSplitMenu"});j=c.add(g,"tbody");k=0;e(b(q.colors,"array")?q.colors:q.colors.split(","),function(m){m=m.replace(/^#/,"");if(!k--){l=c.add(j,"tr");k=q.grid_width-1}g=c.add(l,"td");var i={href:"javascript:;",style:{backgroundColor:"#"+m},title:p.editor.getLang("colors."+m,m),"data-mce-color":"#"+m};if(!d.isIE){i.role="option"}g=c.add(g,"a",i);if(p.editor.forcedHighContrastMode){g=c.add(g,"canvas",{width:16,height:16,"aria-hidden":"true"});if(g.getContext&&(f=g.getContext("2d"))){f.fillStyle="#"+m;f.fillRect(0,0,16,16)}else{c.remove(g)}}});if(q.more_colors_func){g=c.add(j,"tr");g=c.add(g,"td",{colspan:q.grid_width,"class":"mceMoreColors"});g=c.add(g,"a",{role:"option",id:p.id+"_more",href:"javascript:;",onclick:"return false;","class":"mceMoreColors"},q.more_colors_title);a.add(g,"click",function(i){q.more_colors_func.call(q.more_colors_scope||this);return a.cancel(i)})}c.addClass(h,"mceColorSplitMenu");a.add(p.id+"_menu","mousedown",function(i){return a.cancel(i)});a.add(p.id+"_menu","click",function(i){var m;i=c.getParent(i.target,"a",j);if(i&&i.nodeName.toLowerCase()=="a"&&(m=i.getAttribute("data-mce-color"))){p.setColor(m)}return false});return o},setColor:function(f){this.displayColor(f);this.hideMenu();this.settings.onselect(f)},displayColor:function(g){var f=this;c.setStyle(f.id+"_preview","backgroundColor",g);f.value=g},postRender:function(){var f=this,g=f.id;f.parent();c.add(g+"_action","div",{id:g+"_preview","class":"mceColorPreview"});c.setStyle(f.id+"_preview","backgroundColor",f.value)},destroy:function(){var f=this;f.parent();a.clear(f.id+"_menu");a.clear(f.id+"_more");c.remove(f.id+"_menu");if(f.keyboardNav){f.keyboardNav.destroy()}}})})(tinymce);(function(b){var d=b.DOM,c=b.each,a=b.dom.Event;b.create("tinymce.ui.ToolbarGroup:tinymce.ui.Container",{renderHTML:function(){var f=this,i=[],e=f.controls,j=b.each,g=f.settings;i.push('
');i.push("");i.push('");j(e,function(h){i.push(h.renderHTML())});i.push("");i.push("
");return i.join("")},focus:function(){var e=this;d.get(e.id).focus()},postRender:function(){var f=this,e=[];c(f.controls,function(g){c(g.controls,function(h){if(h.id){e.push(h)}})});f.keyNav=new b.ui.KeyboardNavigation({root:f.id,items:e,onCancel:function(){if(b.isWebKit){d.get(f.editor.id+"_ifr").focus()}f.editor.focus()},excludeFromTabOrder:!f.settings.tab_focus_toolbar})},destroy:function(){var e=this;e.parent();e.keyNav.destroy();a.clear(e.id)}})})(tinymce);(function(a){var c=a.DOM,b=a.each;a.create("tinymce.ui.Toolbar:tinymce.ui.Container",{renderHTML:function(){var m=this,f="",j,k,n=m.settings,e,d,g,l;l=m.controls;for(e=0;e"))}if(d&&k.ListBox){if(d.Button||d.SplitButton){f+=c.createHTML("td",{"class":"mceToolbarEnd"},c.createHTML("span",null,""))}}if(c.stdMode){f+=''+k.renderHTML()+""}else{f+=""+k.renderHTML()+""}if(g&&k.ListBox){if(g.Button||g.SplitButton){f+=c.createHTML("td",{"class":"mceToolbarStart"},c.createHTML("span",null,""))}}}j="mceToolbarEnd";if(k.Button){j+=" mceToolbarEndButton"}else{if(k.SplitButton){j+=" mceToolbarEndSplitButton"}else{if(k.ListBox){j+=" mceToolbarEndListBox"}}}f+=c.createHTML("td",{"class":j},c.createHTML("span",null,""));return c.createHTML("table",{id:m.id,"class":"mceToolbar"+(n["class"]?" "+n["class"]:""),cellpadding:"0",cellspacing:"0",align:m.settings.align||"",role:"presentation",tabindex:"-1"},""+f+"")}})})(tinymce);(function(b){var a=b.util.Dispatcher,c=b.each;b.create("tinymce.AddOnManager",{AddOnManager:function(){var d=this;d.items=[];d.urls={};d.lookup={};d.onAdd=new a(d)},get:function(d){if(this.lookup[d]){return this.lookup[d].instance}else{return undefined}},dependencies:function(e){var d;if(this.lookup[e]){d=this.lookup[e].dependencies}return d||[]},requireLangPack:function(e){var d=b.settings;if(d&&d.language&&d.language_load!==false){b.ScriptLoader.add(this.urls[e]+"/langs/"+d.language+".js")}},add:function(f,e,d){this.items.push(e);this.lookup[f]={instance:e,dependencies:d};this.onAdd.dispatch(this,f,e);return e},createUrl:function(d,e){if(typeof e==="object"){return e}else{return{prefix:d.prefix,resource:e,suffix:d.suffix}}},addComponents:function(f,d){var e=this.urls[f];b.each(d,function(g){b.ScriptLoader.add(e+"/"+g)})},load:function(j,f,d,h){var g=this,e=f;function i(){var k=g.dependencies(j);b.each(k,function(m){var l=g.createUrl(f,m);g.load(l.resource,l,undefined,undefined)});if(d){if(h){d.call(h)}else{d.call(b.ScriptLoader)}}}if(g.urls[j]){return}if(typeof f==="object"){e=f.prefix+f.resource+f.suffix}if(e.indexOf("/")!==0&&e.indexOf("://")==-1){e=b.baseURL+"/"+e}g.urls[j]=e.substring(0,e.lastIndexOf("/"));if(g.lookup[j]){i()}else{b.ScriptLoader.add(e,i,h)}}});b.PluginManager=new b.AddOnManager();b.ThemeManager=new b.AddOnManager()}(tinymce));(function(j){var g=j.each,d=j.extend,k=j.DOM,i=j.dom.Event,f=j.ThemeManager,b=j.PluginManager,e=j.explode,h=j.util.Dispatcher,a,c=0;j.documentBaseURL=window.location.href.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,"");if(!/[\/\\]$/.test(j.documentBaseURL)){j.documentBaseURL+="/"}j.baseURL=new j.util.URI(j.documentBaseURL).toAbsolute(j.baseURL);j.baseURI=new j.util.URI(j.baseURL);j.onBeforeUnload=new h(j);i.add(window,"beforeunload",function(l){j.onBeforeUnload.dispatch(j,l)});j.onAddEditor=new h(j);j.onRemoveEditor=new h(j);j.EditorManager=d(j,{editors:[],i18n:{},activeEditor:null,init:function(x){var v=this,o,n=j.ScriptLoader,u,l=[],r;function q(t){var s=t.id;if(!s){s=t.name;if(s&&!k.get(s)){s=t.name}else{s=k.uniqueId()}t.setAttribute("id",s)}return s}function m(z,A,t){var y=z[A];if(!y){return}if(j.is(y,"string")){t=y.replace(/\.\w+$/,"");t=t?j.resolve(t):0;y=j.resolve(y)}return y.apply(t||this,Array.prototype.slice.call(arguments,2))}function p(t,s){return s.constructor===RegExp?s.test(t.className):k.hasClass(t,s)}v.settings=x;i.bind(window,"ready",function(){var s,t;m(x,"onpageload");switch(x.mode){case"exact":s=x.elements||"";if(s.length>0){g(e(s),function(y){if(k.get(y)){r=new j.Editor(y,x);l.push(r);r.render(1)}else{g(document.forms,function(z){g(z.elements,function(A){if(A.name===y){y="mce_editor_"+c++;k.setAttrib(A,"id",y);r=new j.Editor(y,x);l.push(r);r.render(1)}})})}})}break;case"textareas":case"specific_textareas":g(k.select("textarea"),function(y){if(x.editor_deselector&&p(y,x.editor_deselector)){return}if(!x.editor_selector||p(y,x.editor_selector)){r=new j.Editor(q(y),x);l.push(r);r.render(1)}});break;default:if(x.types){g(x.types,function(y){g(k.select(y.selector),function(A){var z=new j.Editor(q(A),j.extend({},x,y));l.push(z);z.render(1)})})}else{if(x.selector){g(k.select(x.selector),function(z){var y=new j.Editor(q(z),x);l.push(y);y.render(1)})}}}if(x.oninit){s=t=0;g(l,function(y){t++;if(!y.initialized){y.onInit.add(function(){s++;if(s==t){m(x,"oninit")}})}else{s++}if(s==t){m(x,"oninit")}})}})},get:function(l){if(l===a){return this.editors}if(!this.editors.hasOwnProperty(l)){return a}return this.editors[l]},getInstanceById:function(l){return this.get(l)},add:function(m){var l=this,n=l.editors;n[m.id]=m;n.push(m);l._setActive(m);l.onAddEditor.dispatch(l,m);if(j.adapter){j.adapter.patchEditor(m)}return m},remove:function(n){var m=this,l,o=m.editors;if(!o[n.id]){return null}delete o[n.id];for(l=0;l':"",visual:n,font_size_style_values:"xx-small,x-small,small,medium,large,x-large,xx-large",font_size_legacy_values:"xx-small,small,medium,large,x-large,xx-large,300%",apply_source_formatting:n,directionality:"ltr",forced_root_block:"p",hidden_input:n,padd_empty_editor:n,render_ui:n,indentation:"30px",fix_table_elements:n,inline_styles:n,convert_fonts_to_spans:n,indent:"simple",indent_before:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist",indent_after:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist",validate:n,entity_encoding:"named",url_converter:m.convertURL,url_converter_scope:m,ie7_compat:n},o);m.id=m.editorId=p;m.isNotDirty=false;m.plugins={};m.documentBaseURI=new k.util.URI(o.document_base_url||k.documentBaseURL,{base_uri:tinyMCE.baseURI});m.baseURI=k.baseURI;m.contentCSS=[];m.contentStyles=[];m.setupEvents();m.execCommands={};m.queryStateCommands={};m.queryValueCommands={};m.execCallback("setup",m)},render:function(o){var p=this,q=p.settings,r=p.id,m=k.ScriptLoader;if(!j.domLoaded){j.add(window,"ready",function(){p.render()});return}tinyMCE.settings=q;if(!p.getElement()){return}if(k.isIDevice&&!k.isIOS5){return}if(!/TEXTAREA|INPUT/i.test(p.getElement().nodeName)&&q.hidden_input&&l.getParent(r,"form")){l.insertAfter(l.create("input",{type:"hidden",name:r}),r)}if(!q.content_editable){p.orgVisibility=p.getElement().style.visibility;p.getElement().style.visibility="hidden"}if(k.WindowManager){p.windowManager=new k.WindowManager(p)}if(q.encoding=="xml"){p.onGetContent.add(function(s,t){if(t.save){t.content=l.encode(t.content)}})}if(q.add_form_submit_trigger){p.onSubmit.addToTop(function(){if(p.initialized){p.save();p.isNotDirty=1}})}if(q.add_unload_trigger){p._beforeUnload=tinyMCE.onBeforeUnload.add(function(){if(p.initialized&&!p.destroyed&&!p.isHidden()){p.save({format:"raw",no_events:true})}})}k.addUnload(p.destroy,p);if(q.submit_patch){p.onBeforeRenderUI.add(function(){var s=p.getElement().form;if(!s){return}if(s._mceOldSubmit){return}if(!s.submit.nodeType&&!s.submit.length){p.formElement=s;s._mceOldSubmit=s.submit;s.submit=function(){k.triggerSave();p.isNotDirty=1;return p.formElement._mceOldSubmit(p.formElement)}}s=null})}function n(){if(q.language&&q.language_load!==false){m.add(k.baseURL+"/langs/"+q.language+".js")}if(q.theme&&typeof q.theme!="function"&&q.theme.charAt(0)!="-"&&!h.urls[q.theme]){h.load(q.theme,"themes/"+q.theme+"/editor_template"+k.suffix+".js")}i(g(q.plugins),function(t){if(t&&!c.urls[t]){if(t.charAt(0)=="-"){t=t.substr(1,t.length);var s=c.dependencies(t);i(s,function(v){var u={prefix:"plugins/",resource:v,suffix:"/editor_plugin"+k.suffix+".js"};v=c.createUrl(u,v);c.load(v.resource,v)})}else{if(t=="safari"){return}c.load(t,{prefix:"plugins/",resource:t,suffix:"/editor_plugin"+k.suffix+".js"})}}});m.loadQueue(function(){if(!p.removed){p.init()}})}n()},init:function(){var q,G=this,H=G.settings,D,y,z,C=G.getElement(),p,m,E,v,B,F,x,r=[];k.add(G);H.aria_label=H.aria_label||l.getAttrib(C,"aria-label",G.getLang("aria.rich_text_area"));if(H.theme){if(typeof H.theme!="function"){H.theme=H.theme.replace(/-/,"");p=h.get(H.theme);G.theme=new p();if(G.theme.init){G.theme.init(G,h.urls[H.theme]||k.documentBaseURL.replace(/\/$/,""))}}else{G.theme=H.theme}}function A(s){var t=c.get(s),o=c.urls[s]||k.documentBaseURL.replace(/\/$/,""),n;if(t&&k.inArray(r,s)===-1){i(c.dependencies(s),function(u){A(u)});n=new t(G,o);G.plugins[s]=n;if(n.init){n.init(G,o);r.push(s)}}}i(g(H.plugins.replace(/\-/g,"")),A);if(H.popup_css!==false){if(H.popup_css){H.popup_css=G.documentBaseURI.toAbsolute(H.popup_css)}else{H.popup_css=G.baseURI.toAbsolute("themes/"+H.theme+"/skins/"+H.skin+"/dialog.css")}}if(H.popup_css_add){H.popup_css+=","+G.documentBaseURI.toAbsolute(H.popup_css_add)}G.controlManager=new k.ControlManager(G);G.onBeforeRenderUI.dispatch(G,G.controlManager);if(H.render_ui&&G.theme){G.orgDisplay=C.style.display;if(typeof H.theme!="function"){D=H.width||C.style.width||C.offsetWidth;y=H.height||C.style.height||C.offsetHeight;z=H.min_height||100;F=/^[0-9\.]+(|px)$/i;if(F.test(""+D)){D=Math.max(parseInt(D,10)+(p.deltaWidth||0),100)}if(F.test(""+y)){y=Math.max(parseInt(y,10)+(p.deltaHeight||0),z)}p=G.theme.renderUI({targetNode:C,width:D,height:y,deltaWidth:H.delta_width,deltaHeight:H.delta_height});l.setStyles(p.sizeContainer||p.editorContainer,{width:D,height:y});y=(p.iframeHeight||y)+(typeof(y)=="number"?(p.deltaHeight||0):"");if(y';if(H.document_base_url!=k.documentBaseURL){G.iframeHTML+=''}if(k.isIE8){if(H.ie7_compat){G.iframeHTML+=''}else{G.iframeHTML+=''}}G.iframeHTML+='';for(x=0;x'}G.contentCSS=[];v=H.body_id||"tinymce";if(v.indexOf("=")!=-1){v=G.getParam("body_id","","hash");v=v[G.id]||v}B=H.body_class||"";if(B.indexOf("=")!=-1){B=G.getParam("body_class","","hash");B=B[G.id]||""}G.iframeHTML+='
";if(k.relaxedDomain&&(b||(k.isOpera&&parseFloat(opera.version())<11))){E='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinyMCE.get("'+G.id+'");document.write(ed.iframeHTML);document.close();ed.initContentBody();})()'}q=l.add(p.iframeContainer,"iframe",{id:G.id+"_ifr",src:E||'javascript:""',frameBorder:"0",allowTransparency:"true",title:H.aria_label,style:{width:"100%",height:y,display:"block"}});G.contentAreaContainer=p.iframeContainer;if(p.editorContainer){l.get(p.editorContainer).style.display=G.orgDisplay}C.style.visibility=G.orgVisibility;l.get(G.id).style.display="none";l.setAttrib(G.id,"aria-hidden",true);if(!k.relaxedDomain||!E){G.initContentBody()}C=q=p=null},initContentBody:function(){var n=this,p=n.settings,q=l.get(n.id),r=n.getDoc(),o,m,s;if((!b||!k.relaxedDomain)&&!p.content_editable){r.open();r.write(n.iframeHTML);r.close();if(k.relaxedDomain){r.domain=k.relaxedDomain}}if(p.content_editable){l.addClass(q,"mceContentBody");n.contentDocument=r=p.content_document||document;n.contentWindow=p.content_window||window;n.bodyElement=q;p.content_document=p.content_window=null}m=n.getBody();m.disabled=true;if(!p.readonly){m.contentEditable=n.getParam("content_editable_state",true)}m.disabled=false;n.schema=new k.html.Schema(p);n.dom=new k.dom.DOMUtils(r,{keep_values:true,url_converter:n.convertURL,url_converter_scope:n,hex_colors:p.force_hex_style_colors,class_filter:p.class_filter,update_styles:true,root_element:p.content_editable?n.id:null,schema:n.schema});n.parser=new k.html.DomParser(p,n.schema);n.parser.addAttributeFilter("src,href,style",function(t,u){var v=t.length,y,A=n.dom,z,x;while(v--){y=t[v];z=y.attr(u);x="data-mce-"+u;if(!y.attributes.map[x]){if(u==="style"){y.attr(x,A.serializeStyle(A.parseStyle(z),y.name))}else{y.attr(x,n.convertURL(z,u,y.name))}}}});n.parser.addNodeFilter("script",function(t,u){var v=t.length,x;while(v--){x=t[v];x.attr("type","mce-"+(x.attr("type")||"text/javascript"))}});n.parser.addNodeFilter("#cdata",function(t,u){var v=t.length,x;while(v--){x=t[v];x.type=8;x.name="#comment";x.value="[CDATA["+x.value+"]]"}});n.parser.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div",function(u,v){var x=u.length,y,t=n.schema.getNonEmptyElements();while(x--){y=u[x];if(y.isEmpty(t)){y.empty().append(new k.html.Node("br",1)).shortEnded=true}}});n.serializer=new k.dom.Serializer(p,n.dom,n.schema);n.selection=new k.dom.Selection(n.dom,n.getWin(),n.serializer,n);n.formatter=new k.Formatter(n);n.undoManager=new k.UndoManager(n);n.forceBlocks=new k.ForceBlocks(n);n.enterKey=new k.EnterKey(n);n.editorCommands=new k.EditorCommands(n);n.onExecCommand.add(function(t,u){if(!/^(FontName|FontSize)$/.test(u)){n.nodeChanged()}});n.serializer.onPreProcess.add(function(t,u){return n.onPreProcess.dispatch(n,u,t)});n.serializer.onPostProcess.add(function(t,u){return n.onPostProcess.dispatch(n,u,t)});n.onPreInit.dispatch(n);if(!p.browser_spellcheck&&!p.gecko_spellcheck){r.body.spellcheck=false}if(!p.readonly){n.bindNativeEvents()}n.controlManager.onPostRender.dispatch(n,n.controlManager);n.onPostRender.dispatch(n);n.quirks=k.util.Quirks(n);if(p.directionality){m.dir=p.directionality}if(p.nowrap){m.style.whiteSpace="nowrap"}if(p.protect){n.onBeforeSetContent.add(function(t,u){i(p.protect,function(v){u.content=u.content.replace(v,function(x){return""})})})}n.onSetContent.add(function(){n.addVisual(n.getBody())});if(p.padd_empty_editor){n.onPostProcess.add(function(t,u){u.content=u.content.replace(/^(]*>( | |\s|\u00a0|)<\/p>[\r\n]*|
[\r\n]*)$/,"")})}n.load({initial:true,format:"html"});n.startContent=n.getContent({format:"raw"});n.initialized=true;n.onInit.dispatch(n);n.execCallback("setupcontent_callback",n.id,m,r);n.execCallback("init_instance_callback",n);n.focus(true);n.nodeChanged({initial:true});if(n.contentStyles.length>0){s="";i(n.contentStyles,function(t){s+=t+"\r\n"});n.dom.addStyle(s)}i(n.contentCSS,function(t){n.dom.loadCSS(t)});if(p.auto_focus){setTimeout(function(){var t=k.get(p.auto_focus);t.selection.select(t.getBody(),1);t.selection.collapse(1);t.getBody().focus();t.getWin().focus()},100)}q=r=m=null},focus:function(p){var o,u=this,t=u.selection,q=u.settings.content_editable,n,r,s=u.getDoc(),m;if(!p){if(u.lastIERng){t.setRng(u.lastIERng)}n=t.getRng();if(n.item){r=n.item(0)}u._refreshContentEditable();if(!q){u.getWin().focus()}if(k.isGecko||q){m=u.getBody();if(m.setActive){m.setActive()}else{m.focus()}if(q){t.normalize()}}if(r&&r.ownerDocument==s){n=s.body.createControlRange();n.addElement(r);n.select()}}if(k.activeEditor!=u){if((o=k.activeEditor)!=null){o.onDeactivate.dispatch(o,u)}u.onActivate.dispatch(u,o)}k._setActive(u)},execCallback:function(q){var m=this,p=m.settings[q],o;if(!p){return}if(m.callbackLookup&&(o=m.callbackLookup[q])){p=o.func;o=o.scope}if(d(p,"string")){o=p.replace(/\.\w+$/,"");o=o?k.resolve(o):0;p=k.resolve(p);m.callbackLookup=m.callbackLookup||{};m.callbackLookup[q]={func:p,scope:o}}return p.apply(o||m,Array.prototype.slice.call(arguments,1))},translate:function(m){var o=this.settings.language||"en",n=k.i18n;if(!m){return""}return n[o+"."+m]||m.replace(/\{\#([^\}]+)\}/g,function(q,p){return n[o+"."+p]||"{#"+p+"}"})},getLang:function(o,m){return k.i18n[(this.settings.language||"en")+"."+o]||(d(m)?m:"{#"+o+"}")},getParam:function(t,q,m){var r=k.trim,p=d(this.settings[t])?this.settings[t]:q,s;if(m==="hash"){s={};if(d(p,"string")){i(p.indexOf("=")>0?p.split(/[;,](?![^=;,]*(?:[;,]|$))/):p.split(","),function(n){n=n.split("=");if(n.length>1){s[r(n[0])]=r(n[1])}else{s[r(n[0])]=r(n)}})}else{s=p}return s}return p},nodeChanged:function(q){var m=this,n=m.selection,p;if(m.initialized){q=q||{};p=n.getStart()||m.getBody();p=b&&p.ownerDocument!=m.getDoc()?m.getBody():p;q.parents=[];m.dom.getParent(p,function(o){if(o.nodeName=="BODY"){return true}q.parents.push(o)});m.onNodeChange.dispatch(m,q?q.controlManager||m.controlManager:m.controlManager,p,n.isCollapsed(),q)}},addButton:function(n,o){var m=this;m.buttons=m.buttons||{};m.buttons[n]=o},addCommand:function(m,o,n){this.execCommands[m]={func:o,scope:n||this}},addQueryStateHandler:function(m,o,n){this.queryStateCommands[m]={func:o,scope:n||this}},addQueryValueHandler:function(m,o,n){this.queryValueCommands[m]={func:o,scope:n||this}},addShortcut:function(o,q,m,p){var n=this,r;if(n.settings.custom_shortcuts===false){return false}n.shortcuts=n.shortcuts||{};if(d(m,"string")){r=m;m=function(){n.execCommand(r,false,null)}}if(d(m,"object")){r=m;m=function(){n.execCommand(r[0],r[1],r[2])}}i(g(o),function(s){var t={func:m,scope:p||this,desc:n.translate(q),alt:false,ctrl:false,shift:false};i(g(s,"+"),function(u){switch(u){case"alt":case"ctrl":case"shift":t[u]=true;break;default:t.charCode=u.charCodeAt(0);t.keyCode=u.toUpperCase().charCodeAt(0)}});n.shortcuts[(t.ctrl?"ctrl":"")+","+(t.alt?"alt":"")+","+(t.shift?"shift":"")+","+t.keyCode]=t});return true},execCommand:function(u,r,x,m){var p=this,q=0,v,n;if(!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(u)&&(!m||!m.skip_focus)){p.focus()}m=f({},m);p.onBeforeExecCommand.dispatch(p,u,r,x,m);if(m.terminate){return false}if(p.execCallback("execcommand_callback",p.id,p.selection.getNode(),u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);return true}if(v=p.execCommands[u]){n=v.func.call(v.scope,r,x);if(n!==true){p.onExecCommand.dispatch(p,u,r,x,m);return n}}i(p.plugins,function(o){if(o.execCommand&&o.execCommand(u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);q=1;return false}});if(q){return true}if(p.theme&&p.theme.execCommand&&p.theme.execCommand(u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);return true}if(p.editorCommands.execCommand(u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);return true}p.getDoc().execCommand(u,r,x);p.onExecCommand.dispatch(p,u,r,x,m)},queryCommandState:function(q){var n=this,r,p;if(n._isHidden()){return}if(r=n.queryStateCommands[q]){p=r.func.call(r.scope);if(p!==true){return p}}r=n.editorCommands.queryCommandState(q);if(r!==-1){return r}try{return this.getDoc().queryCommandState(q)}catch(m){}},queryCommandValue:function(r){var n=this,q,p;if(n._isHidden()){return}if(q=n.queryValueCommands[r]){p=q.func.call(q.scope);if(p!==true){return p}}q=n.editorCommands.queryCommandValue(r);if(d(q)){return q}try{return this.getDoc().queryCommandValue(r)}catch(m){}},show:function(){var m=this;l.show(m.getContainer());l.hide(m.id);m.load()},hide:function(){var m=this,n=m.getDoc();if(b&&n){n.execCommand("SelectAll")}m.save();l.hide(m.getContainer());l.setStyle(m.id,"display",m.orgDisplay)},isHidden:function(){return !l.isHidden(this.id)},setProgressState:function(m,n,p){this.onSetProgressState.dispatch(this,m,n,p);return m},load:function(q){var m=this,p=m.getElement(),n;if(p){q=q||{};q.load=true;n=m.setContent(d(p.value)?p.value:p.innerHTML,q);q.element=p;if(!q.no_events){m.onLoadContent.dispatch(m,q)}q.element=p=null;return n}},save:function(r){var m=this,q=m.getElement(),n,p;if(!q||!m.initialized){return}r=r||{};r.save=true;r.element=q;n=r.content=m.getContent(r);if(!r.no_events){m.onSaveContent.dispatch(m,r)}n=r.content;if(!/TEXTAREA|INPUT/i.test(q.nodeName)){q.innerHTML=n;if(p=l.getParent(m.id,"form")){i(p.elements,function(o){if(o.name==m.id){o.value=n;return false}})}}else{q.value=n}r.element=q=null;return n},setContent:function(r,p){var o=this,n,m=o.getBody(),q;p=p||{};p.format=p.format||"html";p.set=true;p.content=r;if(!p.no_events){o.onBeforeSetContent.dispatch(o,p)}r=p.content;if(!k.isIE&&(r.length===0||/^\s+$/.test(r))){q=o.settings.forced_root_block;if(q){r="<"+q+'>
"}else{r='
'}m.innerHTML=r;o.selection.select(m,true);o.selection.collapse(true);return}if(p.format!=="raw"){r=new k.html.Serializer({},o.schema).serialize(o.parser.parse(r))}p.content=k.trim(r);o.dom.setHTML(m,p.content);if(!p.no_events){o.onSetContent.dispatch(o,p)}if(!o.settings.content_editable||document.activeElement===o.getBody()){o.selection.normalize()}return p.content},getContent:function(o){var n=this,p,m=n.getBody();o=o||{};o.format=o.format||"html";o.get=true;o.getInner=true;if(!o.no_events){n.onBeforeGetContent.dispatch(n,o)}if(o.format=="raw"){p=m.innerHTML}else{if(o.format=="text"){p=m.innerText||m.textContent}else{p=n.serializer.serialize(m,o)}}if(o.format!="text"){o.content=k.trim(p)}else{o.content=p}if(!o.no_events){n.onGetContent.dispatch(n,o)}return o.content},isDirty:function(){var m=this;return k.trim(m.startContent)!=k.trim(m.getContent({format:"raw",no_events:1}))&&!m.isNotDirty},getContainer:function(){var m=this;if(!m.container){m.container=l.get(m.editorContainer||m.id+"_parent")}return m.container},getContentAreaContainer:function(){return this.contentAreaContainer},getElement:function(){return l.get(this.settings.content_element||this.id)},getWin:function(){var m=this,n;if(!m.contentWindow){n=l.get(m.id+"_ifr");if(n){m.contentWindow=n.contentWindow}}return m.contentWindow},getDoc:function(){var m=this,n;if(!m.contentDocument){n=m.getWin();if(n){m.contentDocument=n.document}}return m.contentDocument},getBody:function(){return this.bodyElement||this.getDoc().body},convertURL:function(o,n,q){var m=this,p=m.settings;if(p.urlconverter_callback){return m.execCallback("urlconverter_callback",o,q,true,n)}if(!p.convert_urls||(q&&q.nodeName=="LINK")||o.indexOf("file:")===0){return o}if(p.relative_urls){return m.documentBaseURI.toRelative(o)}o=m.documentBaseURI.toAbsolute(o,p.remove_script_host);return o},addVisual:function(q){var n=this,o=n.settings,p=n.dom,m;q=q||n.getBody();if(!d(n.hasVisual)){n.hasVisual=o.visual}i(p.select("table,a",q),function(s){var r;switch(s.nodeName){case"TABLE":m=o.visual_table_class||"mceItemTable";r=p.getAttrib(s,"border");if(!r||r=="0"){if(n.hasVisual){p.addClass(s,m)}else{p.removeClass(s,m)}}return;case"A":if(!p.getAttrib(s,"href",false)){r=p.getAttrib(s,"name")||s.id;m="mceItemAnchor";if(r){if(n.hasVisual){p.addClass(s,m)}else{p.removeClass(s,m)}}}return}});n.onVisualAid.dispatch(n,q,n.hasVisual)},remove:function(){var m=this,o=m.getContainer(),n=m.getDoc();if(!m.removed){m.removed=1;if(b&&n){n.execCommand("SelectAll")}m.save();l.setStyle(m.id,"display",m.orgDisplay);if(!m.settings.content_editable){j.unbind(m.getWin());j.unbind(m.getDoc())}j.unbind(m.getBody());j.clear(o);m.execCallback("remove_instance_callback",m);m.onRemove.dispatch(m);m.onExecCommand.listeners=[];k.remove(m);l.remove(o)}},destroy:function(n){var m=this;if(m.destroyed){return}if(a){j.unbind(m.getDoc());j.unbind(m.getWin());j.unbind(m.getBody())}if(!n){k.removeUnload(m.destroy);tinyMCE.onBeforeUnload.remove(m._beforeUnload);if(m.theme&&m.theme.destroy){m.theme.destroy()}m.controlManager.destroy();m.selection.destroy();m.dom.destroy()}if(m.formElement){m.formElement.submit=m.formElement._mceOldSubmit;m.formElement._mceOldSubmit=null}m.contentAreaContainer=m.formElement=m.container=m.settings.content_element=m.bodyElement=m.contentDocument=m.contentWindow=null;if(m.selection){m.selection=m.selection.win=m.selection.dom=m.selection.dom.doc=null}m.destroyed=1},_refreshContentEditable:function(){var n=this,m,o;if(n._isHidden()){m=n.getBody();o=m.parentNode;o.removeChild(m);o.appendChild(m);m.focus()}},_isHidden:function(){var m;if(!a){return 0}m=this.selection.getSel();return(!m||!m.rangeCount||m.rangeCount===0)}})})(tinymce);(function(a){var b=a.each;a.Editor.prototype.setupEvents=function(){var c=this,d=c.settings;b(["onPreInit","onBeforeRenderUI","onPostRender","onLoad","onInit","onRemove","onActivate","onDeactivate","onClick","onEvent","onMouseUp","onMouseDown","onDblClick","onKeyDown","onKeyUp","onKeyPress","onContextMenu","onSubmit","onReset","onPaste","onPreProcess","onPostProcess","onBeforeSetContent","onBeforeGetContent","onSetContent","onGetContent","onLoadContent","onSaveContent","onNodeChange","onChange","onBeforeExecCommand","onExecCommand","onUndo","onRedo","onVisualAid","onSetProgressState","onSetAttrib"],function(e){c[e]=new a.util.Dispatcher(c)});if(d.cleanup_callback){c.onBeforeSetContent.add(function(e,f){f.content=e.execCallback("cleanup_callback","insert_to_editor",f.content,f)});c.onPreProcess.add(function(e,f){if(f.set){e.execCallback("cleanup_callback","insert_to_editor_dom",f.node,f)}if(f.get){e.execCallback("cleanup_callback","get_from_editor_dom",f.node,f)}});c.onPostProcess.add(function(e,f){if(f.set){f.content=e.execCallback("cleanup_callback","insert_to_editor",f.content,f)}if(f.get){f.content=e.execCallback("cleanup_callback","get_from_editor",f.content,f)}})}if(d.save_callback){c.onGetContent.add(function(e,f){if(f.save){f.content=e.execCallback("save_callback",e.id,f.content,e.getBody())}})}if(d.handle_event_callback){c.onEvent.add(function(f,g,h){if(c.execCallback("handle_event_callback",g,f,h)===false){g.preventDefault();g.stopPropagation()}})}if(d.handle_node_change_callback){c.onNodeChange.add(function(f,e,g){f.execCallback("handle_node_change_callback",f.id,g,-1,-1,true,f.selection.isCollapsed())})}if(d.save_callback){c.onSaveContent.add(function(e,g){var f=e.execCallback("save_callback",e.id,g.content,e.getBody());if(f){g.content=f}})}if(d.onchange_callback){c.onChange.add(function(f,e){f.execCallback("onchange_callback",f,e)})}};a.Editor.prototype.bindNativeEvents=function(){var l=this,f,d=l.settings,e=l.dom,h;h={mouseup:"onMouseUp",mousedown:"onMouseDown",click:"onClick",keyup:"onKeyUp",keydown:"onKeyDown",keypress:"onKeyPress",submit:"onSubmit",reset:"onReset",contextmenu:"onContextMenu",dblclick:"onDblClick",paste:"onPaste"};function c(i,m){var n=i.type;if(l.removed){return}if(l.onEvent.dispatch(l,i,m)!==false){l[h[i.fakeType||i.type]].dispatch(l,i,m)}}function j(i){l.focus(true)}function k(i,m){if(m.keyCode!=65||!a.VK.metaKeyPressed(m)){l.selection.normalize()}l.nodeChanged()}b(h,function(m,n){var i=d.content_editable?l.getBody():l.getDoc();switch(n){case"contextmenu":e.bind(i,n,c);break;case"paste":e.bind(l.getBody(),n,c);break;case"submit":case"reset":e.bind(l.getElement().form||a.DOM.getParent(l.id,"form"),n,c);break;default:e.bind(i,n,c)}});e.bind(d.content_editable?l.getBody():(a.isGecko?l.getDoc():l.getWin()),"focus",function(i){l.focus(true)});if(d.content_editable&&a.isOpera){e.bind(l.getBody(),"click",j);e.bind(l.getBody(),"keydown",j)}l.onMouseUp.add(k);l.onKeyUp.add(function(i,n){var m=n.keyCode;if((m>=33&&m<=36)||(m>=37&&m<=40)||m==13||m==45||m==46||m==8||(a.isMac&&(m==91||m==93))||n.ctrlKey){k(i,n)}});l.onReset.add(function(){l.setContent(l.startContent,{format:"raw"})});function g(m,i){if(m.altKey||m.ctrlKey||m.metaKey){b(l.shortcuts,function(n){var o=a.isMac?m.metaKey:m.ctrlKey;if(n.ctrl!=o||n.alt!=m.altKey||n.shift!=m.shiftKey){return}if(m.keyCode==n.keyCode||(m.charCode&&m.charCode==n.charCode)){m.preventDefault();if(i){n.func.call(n.scope)}return true}})}}l.onKeyUp.add(function(i,m){g(m)});l.onKeyPress.add(function(i,m){g(m)});l.onKeyDown.add(function(i,m){g(m,true)});if(a.isOpera){l.onClick.add(function(i,m){m.preventDefault()})}}})(tinymce);(function(d){var e=d.each,b,a=true,c=false;d.EditorCommands=function(n){var m=n.dom,p=n.selection,j={state:{},exec:{},value:{}},k=n.settings,q=n.formatter,o;function r(z,y,x){var v;z=z.toLowerCase();if(v=j.exec[z]){v(z,y,x);return a}return c}function l(x){var v;x=x.toLowerCase();if(v=j.state[x]){return v(x)}return -1}function h(x){var v;x=x.toLowerCase();if(v=j.value[x]){return v(x)}return c}function u(v,x){x=x||"exec";e(v,function(z,y){e(y.toLowerCase().split(","),function(A){j[x][A]=z})})}d.extend(this,{execCommand:r,queryCommandState:l,queryCommandValue:h,addCommands:u});function f(y,x,v){if(x===b){x=c}if(v===b){v=null}return n.getDoc().execCommand(y,x,v)}function t(v){return q.match(v)}function s(v,x){q.toggle(v,x?{value:x}:b)}function i(v){o=p.getBookmark(v)}function g(){p.moveToBookmark(o)}u({"mceResetDesignMode,mceBeginUndoLevel":function(){},"mceEndUndoLevel,mceAddUndoLevel":function(){n.undoManager.add()},"Cut,Copy,Paste":function(z){var y=n.getDoc(),v;try{f(z)}catch(x){v=a}if(v||!y.queryCommandSupported(z)){if(d.isGecko){n.windowManager.confirm(n.getLang("clipboard_msg"),function(A){if(A){open("http://www.mozilla.org/editor/midasdemo/securityprefs.html","_blank")}})}else{n.windowManager.alert(n.getLang("clipboard_no_support"))}}},unlink:function(v){if(p.isCollapsed()){p.select(p.getNode())}f(v);p.collapse(c)},"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(v){var x=v.substring(7);e("left,center,right,full".split(","),function(y){if(x!=y){q.remove("align"+y)}});s("align"+x);r("mceRepaint")},"InsertUnorderedList,InsertOrderedList":function(y){var v,x;f(y);v=m.getParent(p.getNode(),"ol,ul");if(v){x=v.parentNode;if(/^(H[1-6]|P|ADDRESS|PRE)$/.test(x.nodeName)){i();m.split(x,v);g()}}},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(v){s(v)},"ForeColor,HiliteColor,FontName":function(y,x,v){s(y,v)},FontSize:function(z,y,x){var v,A;if(x>=1&&x<=7){A=d.explode(k.font_size_style_values);v=d.explode(k.font_size_classes);if(v){x=v[x-1]||x}else{x=A[x-1]||x}}s(z,x)},RemoveFormat:function(v){q.remove(v)},mceBlockQuote:function(v){s("blockquote")},FormatBlock:function(y,x,v){return s(v||"p")},mceCleanup:function(){var v=p.getBookmark();n.setContent(n.getContent({cleanup:a}),{cleanup:a});p.moveToBookmark(v)},mceRemoveNode:function(z,y,x){var v=x||p.getNode();if(v!=n.getBody()){i();n.dom.remove(v,a);g()}},mceSelectNodeDepth:function(z,y,x){var v=0;m.getParent(p.getNode(),function(A){if(A.nodeType==1&&v++==x){p.select(A);return c}},n.getBody())},mceSelectNode:function(y,x,v){p.select(v)},mceInsertContent:function(B,I,K){var y,J,E,z,F,G,D,C,L,x,A,M,v,H;y=n.parser;J=new d.html.Serializer({},n.schema);v='\uFEFF';G={content:K,format:"html"};p.onBeforeSetContent.dispatch(p,G);K=G.content;if(K.indexOf("{$caret}")==-1){K+="{$caret}"}K=K.replace(/\{\$caret\}/,v);if(!p.isCollapsed()){n.getDoc().execCommand("Delete",false,null)}E=p.getNode();G={context:E.nodeName.toLowerCase()};F=y.parse(K,G);A=F.lastChild;if(A.attr("id")=="mce_marker"){D=A;for(A=A.prev;A;A=A.walk(true)){if(A.type==3||!m.isBlock(A.name)){A.parent.insert(D,A,A.name==="br");break}}}if(!G.invalid){K=J.serialize(F);A=E.firstChild;M=E.lastChild;if(!A||(A===M&&A.nodeName==="BR")){m.setHTML(E,K)}else{p.setContent(K)}}else{p.setContent(v);E=p.getNode();z=n.getBody();if(E.nodeType==9){E=A=z}else{A=E}while(A!==z){E=A;A=A.parentNode}K=E==z?z.innerHTML:m.getOuterHTML(E);K=J.serialize(y.parse(K.replace(//i,function(){return J.serialize(F)})));if(E==z){m.setHTML(z,K)}else{m.setOuterHTML(E,K)}}D=m.get("mce_marker");C=m.getRect(D);L=m.getViewPort(n.getWin());if((C.y+C.h>L.y+L.h||C.yL.x+L.w||C.x")},mceToggleVisualAid:function(){n.hasVisual=!n.hasVisual;n.addVisual()},mceReplaceContent:function(y,x,v){n.execCommand("mceInsertContent",false,v.replace(/\{\$selection\}/g,p.getContent({format:"text"})))},mceInsertLink:function(z,y,x){var v;if(typeof(x)=="string"){x={href:x}}v=m.getParent(p.getNode(),"a");x.href=x.href.replace(" ","%20");if(!v||!x.href){q.remove("link")}if(x.href){q.apply("link",x,v)}},selectAll:function(){var x=m.getRoot(),v=m.createRng();if(p.getRng().setStart){v.setStart(x,0);v.setEnd(x,x.childNodes.length);p.setRng(v)}else{f("SelectAll")}}});u({"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(z){var x="align"+z.substring(7);var v=p.isCollapsed()?[m.getParent(p.getNode(),m.isBlock)]:p.getSelectedBlocks();var y=d.map(v,function(A){return !!q.matchNode(A,x)});return d.inArray(y,a)!==-1},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(v){return t(v)},mceBlockQuote:function(){return t("blockquote")},Outdent:function(){var v;if(k.inline_styles){if((v=m.getParent(p.getStart(),m.isBlock))&&parseInt(v.style.paddingLeft)>0){return a}if((v=m.getParent(p.getEnd(),m.isBlock))&&parseInt(v.style.paddingLeft)>0){return a}}return l("InsertUnorderedList")||l("InsertOrderedList")||(!k.inline_styles&&!!m.getParent(p.getNode(),"BLOCKQUOTE"))},"InsertUnorderedList,InsertOrderedList":function(x){var v=m.getParent(p.getNode(),"ul,ol");return v&&(x==="insertunorderedlist"&&v.tagName==="UL"||x==="insertorderedlist"&&v.tagName==="OL")}},"state");u({"FontSize,FontName":function(y){var x=0,v;if(v=m.getParent(p.getNode(),"span")){if(y=="fontsize"){x=v.style.fontSize}else{x=v.style.fontFamily.replace(/, /g,",").replace(/[\'\"]/g,"").toLowerCase()}}return x}},"value");u({Undo:function(){n.undoManager.undo()},Redo:function(){n.undoManager.redo()}})}})(tinymce);(function(b){var a=b.util.Dispatcher;b.UndoManager=function(h){var l,i=0,e=[],g,k,j,f;function c(){return b.trim(h.getContent({format:"raw",no_events:1}).replace(/]+data-mce-bogus[^>]+>[\u200B\uFEFF]+<\/span>/g,""))}function d(){l.typing=false;l.add()}onBeforeAdd=new a(l);k=new a(l);j=new a(l);f=new a(l);k.add(function(m,n){if(m.hasUndo()){return h.onChange.dispatch(h,n,m)}});j.add(function(m,n){return h.onUndo.dispatch(h,n,m)});f.add(function(m,n){return h.onRedo.dispatch(h,n,m)});h.onInit.add(function(){l.add()});h.onBeforeExecCommand.add(function(m,p,o,q,n){if(p!="Undo"&&p!="Redo"&&p!="mceRepaint"&&(!n||!n.skip_undo)){l.beforeChange()}});h.onExecCommand.add(function(m,p,o,q,n){if(p!="Undo"&&p!="Redo"&&p!="mceRepaint"&&(!n||!n.skip_undo)){l.add()}});h.onSaveContent.add(d);h.dom.bind(h.dom.getRoot(),"dragend",d);h.dom.bind(h.getBody(),"focusout",function(m){if(!h.removed&&l.typing){d()}});h.onKeyUp.add(function(m,o){var n=o.keyCode;if((n>=33&&n<=36)||(n>=37&&n<=40)||n==45||n==13||o.ctrlKey){d()}});h.onKeyDown.add(function(m,o){var n=o.keyCode;if((n>=33&&n<=36)||(n>=37&&n<=40)||n==45){if(l.typing){d()}return}if((n<16||n>20)&&n!=224&&n!=91&&!l.typing){l.beforeChange();l.typing=true;l.add()}});h.onMouseDown.add(function(m,n){if(l.typing){d()}});h.addShortcut("ctrl+z","undo_desc","Undo");h.addShortcut("ctrl+y","redo_desc","Redo");l={data:e,typing:false,onBeforeAdd:onBeforeAdd,onAdd:k,onUndo:j,onRedo:f,beforeChange:function(){g=h.selection.getBookmark(2,true)},add:function(p){var m,n=h.settings,o;p=p||{};p.content=c();l.onBeforeAdd.dispatch(l,p);o=e[i];if(o&&o.content==p.content){return null}if(e[i]){e[i].beforeBookmark=g}if(n.custom_undo_redo_levels){if(e.length>n.custom_undo_redo_levels){for(m=0;m0){n=e[--i];h.setContent(n.content,{format:"raw"});h.selection.moveToBookmark(n.beforeBookmark);l.onUndo.dispatch(l,n)}return n},redo:function(){var m;if(i0||this.typing},hasRedo:function(){return i0){g.moveEnd("character",q)}g.select()}catch(n){}}}c.nodeChanged()}}if(b.forced_root_block){c.onKeyUp.add(f);c.onNodeChange.add(f)}};(function(c){var b=c.DOM,a=c.dom.Event,d=c.each,e=c.extend;c.create("tinymce.ControlManager",{ControlManager:function(f,j){var h=this,g;j=j||{};h.editor=f;h.controls={};h.onAdd=new c.util.Dispatcher(h);h.onPostRender=new c.util.Dispatcher(h);h.prefix=j.prefix||f.id+"_";h._cls={};h.onPostRender.add(function(){d(h.controls,function(i){i.postRender()})})},get:function(f){return this.controls[this.prefix+f]||this.controls[f]},setActive:function(h,f){var g=null;if(g=this.get(h)){g.setActive(f)}return g},setDisabled:function(h,f){var g=null;if(g=this.get(h)){g.setDisabled(f)}return g},add:function(g){var f=this;if(g){f.controls[g.id]=g;f.onAdd.dispatch(g,f)}return g},createControl:function(j){var o,k,g,h=this,m=h.editor,n,f;if(!h.controlFactories){h.controlFactories=[];d(m.plugins,function(i){if(i.createControl){h.controlFactories.push(i)}})}n=h.controlFactories;for(k=0,g=n.length;k1||ag==ay||ag.tagName=="BR"){return ag}}}var aq=aa.selection.getRng();var av=aq.startContainer;var ap=aq.endContainer;if(av!=ap&&aq.endOffset===0){var au=ar(av,ap);var at=au.nodeType==3?au.length:au.childNodes.length;aq.setEnd(au,at)}return aq}function ad(at,ay,aw,av,aq){var ap=[],ar=-1,ax,aA=-1,au=-1,az;T(at.childNodes,function(aC,aB){if(aC.nodeName==="UL"||aC.nodeName==="OL"){ar=aB;ax=aC;return false}});T(at.childNodes,function(aC,aB){if(aC.nodeName==="SPAN"&&c.getAttrib(aC,"data-mce-type")=="bookmark"){if(aC.id==ay.id+"_start"){aA=aB}else{if(aC.id==ay.id+"_end"){au=aB}}}});if(ar<=0||(aAar)){T(a.grep(at.childNodes),aq);return 0}else{az=c.clone(aw,X);T(a.grep(at.childNodes),function(aC,aB){if((aAar&&aB>ar)){ap.push(aC);aC.parentNode.removeChild(aC)}});if(aAar){at.insertBefore(az,ax.nextSibling)}}av.push(az);T(ap,function(aB){az.appendChild(aB)});return az}}function an(aq,at,aw){var ap=[],av,ar,au=true;av=am.inline||am.block;ar=c.create(av);ab(ar);N.walk(aq,function(ax){var ay;function az(aA){var aF,aD,aB,aC,aE;aE=au;aF=aA.nodeName.toLowerCase();aD=aA.parentNode.nodeName.toLowerCase();if(aA.nodeType===1&&x(aA)){aE=au;au=x(aA)==="true";aC=true}if(g(aF,"br")){ay=0;if(am.block){c.remove(aA)}return}if(am.wrapper&&y(aA,ae,al)){ay=0;return}if(au&&!aC&&am.block&&!am.wrapper&&I(aF)){aA=c.rename(aA,av);ab(aA);ap.push(aA);ay=0;return}if(am.selector){T(ah,function(aG){if("collapsed" in aG&&aG.collapsed!==ai){return}if(c.is(aA,aG.selector)&&!b(aA)){ab(aA,aG);aB=true}});if(!am.inline||aB){ay=0;return}}if(au&&!aC&&d(av,aF)&&d(aD,av)&&!(!aw&&aA.nodeType===3&&aA.nodeValue.length===1&&aA.nodeValue.charCodeAt(0)===65279)&&!b(aA)){if(!ay){ay=c.clone(ar,X);aA.parentNode.insertBefore(ay,aA);ap.push(ay)}ay.appendChild(aA)}else{if(aF=="li"&&at){ay=ad(aA,at,ar,ap,az)}else{ay=0;T(a.grep(aA.childNodes),az);if(aC){au=aE}ay=0}}}T(ax,az)});if(am.wrap_links===false){T(ap,function(ax){function ay(aC){var aB,aA,az;if(aC.nodeName==="A"){aA=c.clone(ar,X);ap.push(aA);az=a.grep(aC.childNodes);for(aB=0;aB1||!H(az))&&ax===0){c.remove(az,1);return}if(am.inline||am.wrapper){if(!am.exact&&ax===1){az=ay(az)}T(ah,function(aB){T(c.select(aB.inline,az),function(aD){var aC;if(aB.wrap_links===false){aC=aD.parentNode;do{if(aC.nodeName==="A"){return}}while(aC=aC.parentNode)}Z(aB,al,aD,aB.exact?aD:null)})});if(y(az.parentNode,ae,al)){c.remove(az,1);az=0;return C}if(am.merge_with_parents){c.getParent(az.parentNode,function(aB){if(y(aB,ae,al)){c.remove(az,1);az=0;return C}})}if(az&&am.merge_siblings!==false){az=u(E(az),az);az=u(az,E(az,C))}}})}if(am){if(ag){if(ag.nodeType){ac=c.createRng();ac.setStartBefore(ag);ac.setEndAfter(ag);an(p(ac,ah),null,true)}else{an(ag,null,true)}}else{if(!ai||!am.inline||c.select("td.mceSelected,th.mceSelected").length){var ao=aa.selection.getNode();if(!m&&ah[0].defaultBlock&&!c.getParent(ao,c.isBlock)){Y(ah[0].defaultBlock)}aa.selection.setRng(af());ak=r.getBookmark();an(p(r.getRng(C),ah),ak);if(am.styles&&(am.styles.color||am.styles.textDecoration)){a.walk(ao,L,"childNodes");L(ao)}r.moveToBookmark(ak);R(r.getRng(C));aa.nodeChanged()}else{U("apply",ae,al)}}}}function B(ad,am,af){var ag=V(ad),ao=ag[0],ak,aj,ac,al=true;function ae(av){var au,at,ar,aq,ax,aw;if(av.nodeType===3){return}if(av.nodeType===1&&x(av)){ax=al;al=x(av)==="true";aw=true}au=a.grep(av.childNodes);if(al&&!aw){for(at=0,ar=ag.length;at=0;ac--){ab=ah[ac].selector;if(!ab){return C}for(ag=ad.length-1;ag>=0;ag--){if(c.is(ad[ag],ab)){return C}}}}return X}function J(ab,ae,ac){var ad;if(!P){P={};ad={};aa.onNodeChange.addToTop(function(ag,af,ai){var ah=n(ai),aj={};T(P,function(ak,al){T(ah,function(am){if(y(am,al,{},ak.similar)){if(!ad[al]){T(ak,function(an){an(true,{node:am,format:al,parents:ah})});ad[al]=ak}aj[al]=ak;return false}})});T(ad,function(ak,al){if(!aj[al]){delete ad[al];T(ak,function(am){am(false,{node:ai,format:al,parents:ah})})}})})}T(ab.split(","),function(af){if(!P[af]){P[af]=[];P[af].similar=ac}P[af].push(ae)});return this}a.extend(this,{get:V,register:l,apply:Y,remove:B,toggle:F,match:k,matchAll:v,matchNode:y,canApply:z,formatChanged:J});j();W();function h(ab,ac){if(g(ab,ac.inline)){return C}if(g(ab,ac.block)){return C}if(ac.selector){return c.is(ab,ac.selector)}}function g(ac,ab){ac=ac||"";ab=ab||"";ac=""+(ac.nodeName||ac);ab=""+(ab.nodeName||ab);return ac.toLowerCase()==ab.toLowerCase()}function O(ac,ab){var ad=c.getStyle(ac,ab);if(ab=="color"||ab=="backgroundColor"){ad=c.toHex(ad)}if(ab=="fontWeight"&&ad==700){ad="bold"}return""+ad}function q(ab,ac){if(typeof(ab)!="string"){ab=ab(ac)}else{if(ac){ab=ab.replace(/%(\w+)/g,function(ae,ad){return ac[ad]||ae})}}return ab}function f(ab){return ab&&ab.nodeType===3&&/^([\t \r\n]+|)$/.test(ab.nodeValue)}function S(ad,ac,ab){var ae=c.create(ac,ab);ad.parentNode.insertBefore(ae,ad);ae.appendChild(ad);return ae}function p(ab,am,ae){var ap,an,ah,al,ad=ab.startContainer,ai=ab.startOffset,ar=ab.endContainer,ak=ab.endOffset;function ao(aA){var au,ax,az,aw,av,at;au=ax=aA?ad:ar;av=aA?"previousSibling":"nextSibling";at=c.getRoot();function ay(aB){return aB.nodeName=="BR"&&aB.getAttribute("data-mce-bogus")&&!aB.nextSibling}if(au.nodeType==3&&!f(au)){if(aA?ai>0:akan?an:ai];if(ad.nodeType==3){ai=0}}if(ar.nodeType==1&&ar.hasChildNodes()){an=ar.childNodes.length-1;ar=ar.childNodes[ak>an?an:ak-1];if(ar.nodeType==3){ak=ar.nodeValue.length}}function aq(au){var at=au;while(at){if(at.nodeType===1&&x(at)){return x(at)==="false"?at:au}at=at.parentNode}return au}function aj(au,ay,aA){var ax,av,az,at;function aw(aC,aE){var aF,aB,aD=aC.nodeValue;if(typeof(aE)=="undefined"){aE=aA?aD.length:0}if(aA){aF=aD.lastIndexOf(" ",aE);aB=aD.lastIndexOf("\u00a0",aE);aF=aF>aB?aF:aB;if(aF!==-1&&!ae){aF++}}else{aF=aD.indexOf(" ",aE);aB=aD.indexOf("\u00a0",aE);aF=aF!==-1&&(aB===-1||aF0&&ah.node.nodeType===3&&ah.node.nodeValue.charAt(ah.offset-1)===" "){if(ah.offset>1){ar=ah.node;ar.splitText(ah.offset-1)}}}}if(am[0].inline||am[0].block_expand){if(!am[0].inline||(ad.nodeType!=3||ai===0)){ad=ao(true)}if(!am[0].inline||(ar.nodeType!=3||ak===ar.nodeValue.length)){ar=ao()}}if(am[0].selector&&am[0].expand!==X&&!am[0].inline){ad=af(ad,"previousSibling");ar=af(ar,"nextSibling")}if(am[0].block||am[0].selector){ad=ac(ad,"previousSibling");ar=ac(ar,"nextSibling");if(am[0].block){if(!H(ad)){ad=ao(true)}if(!H(ar)){ar=ao()}}}if(ad.nodeType==1){ai=s(ad);ad=ad.parentNode}if(ar.nodeType==1){ak=s(ar)+1;ar=ar.parentNode}return{startContainer:ad,startOffset:ai,endContainer:ar,endOffset:ak}}function Z(ah,ag,ae,ab){var ad,ac,af;if(!h(ae,ah)){return X}if(ah.remove!="all"){T(ah.styles,function(aj,ai){aj=q(aj,ag);if(typeof(ai)==="number"){ai=aj;ab=0}if(!ab||g(O(ab,ai),aj)){c.setStyle(ae,ai,"")}af=1});if(af&&c.getAttrib(ae,"style")==""){ae.removeAttribute("style");ae.removeAttribute("data-mce-style")}T(ah.attributes,function(ak,ai){var aj;ak=q(ak,ag);if(typeof(ai)==="number"){ai=ak;ab=0}if(!ab||g(c.getAttrib(ab,ai),ak)){if(ai=="class"){ak=c.getAttrib(ae,ai);if(ak){aj="";T(ak.split(/\s+/),function(al){if(/mce\w+/.test(al)){aj+=(aj?" ":"")+al}});if(aj){c.setAttrib(ae,ai,aj);return}}}if(ai=="class"){ae.removeAttribute("className")}if(e.test(ai)){ae.removeAttribute("data-mce-"+ai)}ae.removeAttribute(ai)}});T(ah.classes,function(ai){ai=q(ai,ag);if(!ab||c.hasClass(ab,ai)){c.removeClass(ae,ai)}});ac=c.getAttribs(ae);for(ad=0;adad?ad:af]}if(ab.nodeType===3&&ag&&af>=ab.nodeValue.length){ab=new t(ab,aa.getBody()).next()||ab}if(ab.nodeType===3&&!ag&&af===0){ab=new t(ab,aa.getBody()).prev()||ab}return ab}function U(ak,ab,ai){var al="_mce_caret",ac=aa.settings.caret_debug;function ad(ap){var ao=c.create("span",{id:al,"data-mce-bogus":true,style:ac?"color:red":""});if(ap){ao.appendChild(aa.getDoc().createTextNode(G))}return ao}function aj(ap,ao){while(ap){if((ap.nodeType===3&&ap.nodeValue!==G)||ap.childNodes.length>1){return false}if(ao&&ap.nodeType===1){ao.push(ap)}ap=ap.firstChild}return true}function ag(ao){while(ao){if(ao.id===al){return ao}ao=ao.parentNode}}function af(ao){var ap;if(ao){ap=new t(ao,ao);for(ao=ap.current();ao;ao=ap.next()){if(ao.nodeType===3){return ao}}}}function ae(aq,ap){var ar,ao;if(!aq){aq=ag(r.getStart());if(!aq){while(aq=c.get(al)){ae(aq,false)}}}else{ao=r.getRng(true);if(aj(aq)){if(ap!==false){ao.setStartBefore(aq);ao.setEndBefore(aq)}c.remove(aq)}else{ar=af(aq);if(ar.nodeValue.charAt(0)===G){ar=ar.deleteData(0,1)}c.remove(aq,1)}r.setRng(ao)}}function ah(){var aq,ao,av,au,ar,ap,at;aq=r.getRng(true);au=aq.startOffset;ap=aq.startContainer;at=ap.nodeValue;ao=ag(r.getStart());if(ao){av=af(ao)}if(at&&au>0&&au=0;at--){aq.appendChild(c.clone(ax[at],false));aq=aq.firstChild}aq.appendChild(c.doc.createTextNode(G));aq=aq.firstChild;c.insertAfter(aw,ay);r.setCursorLocation(aq,1)}}function an(){var ap,ao,aq;ao=ag(r.getStart());if(ao&&!c.isEmpty(ao)){a.walk(ao,function(ar){if(ar.nodeType==1&&ar.id!==al&&!c.isEmpty(ar)){c.setAttrib(ar,"data-mce-bogus",null)}},"childNodes")}}if(!self._hasCaretEvents){aa.onBeforeGetContent.addToTop(function(){var ao=[],ap;if(aj(ag(r.getStart()),ao)){ap=ao.length;while(ap--){c.setAttrib(ao[ap],"data-mce-bogus","1")}}});a.each("onMouseUp onKeyUp".split(" "),function(ao){aa[ao].addToTop(function(){ae();an()})});aa.onKeyDown.addToTop(function(ao,aq){var ap=aq.keyCode;if(ap==8||ap==37||ap==39){ae(ag(r.getStart()))}an()});r.onSetContent.add(an);self._hasCaretEvents=true}if(ak=="apply"){ah()}else{am()}}function R(ac){var ab=ac.startContainer,ai=ac.startOffset,ae,ah,ag,ad,af;if(ab.nodeType==3&&ai>=ab.nodeValue.length){ai=s(ab);ab=ab.parentNode;ae=true}if(ab.nodeType==1){ad=ab.childNodes;ab=ad[Math.min(ai,ad.length-1)];ah=new t(ab,c.getParent(ab,c.isBlock));if(ai>ad.length-1||ae){ah.next()}for(ag=ah.current();ag;ag=ah.next()){if(ag.nodeType==3&&!f(ag)){af=c.create("a",null,G);ag.parentNode.insertBefore(af,ag);ac.setStart(ag,0);r.setRng(ac);c.remove(af);return}}}}}})(tinymce);tinymce.onAddEditor.add(function(e,a){var d,h,g,c=a.settings;function b(j,i){e.each(i,function(l,k){if(l){g.setStyle(j,k,l)}});g.rename(j,"span")}function f(i,j){g=i.dom;if(c.convert_fonts_to_spans){e.each(g.select("font,u,strike",j.node),function(k){d[k.nodeName.toLowerCase()](a.dom,k)})}}if(c.inline_styles){h=e.explode(c.font_size_legacy_values);d={font:function(j,i){b(i,{backgroundColor:i.style.backgroundColor,color:i.color,fontFamily:i.face,fontSize:h[parseInt(i.size,10)-1]})},u:function(j,i){b(i,{textDecoration:"underline"})},strike:function(j,i){b(i,{textDecoration:"line-through"})}};a.onPreProcess.add(f);a.onSetContent.add(f);a.onInit.add(function(){a.selection.onSetContent.add(f)})}});(function(b){var a=b.dom.TreeWalker;b.EnterKey=function(f){var i=f.dom,e=f.selection,d=f.settings,h=f.undoManager,c=f.schema.getNonEmptyElements();function g(A){var v=e.getRng(true),G,j,z,u,p,M,B,o,k,n,t,J,x,C;function E(N){return N&&i.isBlock(N)&&!/^(TD|TH|CAPTION|FORM)$/.test(N.nodeName)&&!/^(fixed|absolute)/i.test(N.style.position)&&i.getContentEditable(N)!=="true"}function F(O){var N;if(b.isIE&&i.isBlock(O)){N=e.getRng();O.appendChild(i.create("span",null,"\u00a0"));e.select(O);O.lastChild.outerHTML="";e.setRng(N)}}function y(P){var O=P,Q=[],N;while(O=O.firstChild){if(i.isBlock(O)){return}if(O.nodeType==1&&!c[O.nodeName.toLowerCase()]){Q.push(O)}}N=Q.length;while(N--){O=Q[N];if(!O.hasChildNodes()||(O.firstChild==O.lastChild&&O.firstChild.nodeValue==="")){i.remove(O)}else{if(O.nodeName=="A"&&(O.innerText||O.textContent)===" "){i.remove(O)}}}}function m(O){var T,R,N,U,S,Q=O,P;N=i.createRng();if(O.hasChildNodes()){T=new a(O,O);while(R=T.current()){if(R.nodeType==3){N.setStart(R,0);N.setEnd(R,0);break}if(c[R.nodeName.toLowerCase()]){N.setStartBefore(R);N.setEndBefore(R);break}Q=R;R=T.next()}if(!R){N.setStart(Q,0);N.setEnd(Q,0)}}else{if(O.nodeName=="BR"){if(O.nextSibling&&i.isBlock(O.nextSibling)){if(!M||M<9){P=i.create("br");O.parentNode.insertBefore(P,O)}N.setStartBefore(O);N.setEndBefore(O)}else{N.setStartAfter(O);N.setEndAfter(O)}}else{N.setStart(O,0);N.setEnd(O,0)}}e.setRng(N);i.remove(P);S=i.getViewPort(f.getWin());U=i.getPos(O).y;if(US.y+S.h){f.getWin().scrollTo(0,U'}return R}function q(Q){var P,O,N;if(z.nodeType==3&&(Q?u>0:u=z.nodeValue.length){if(!b.isIE&&!D()){P=i.create("br");v.insertNode(P);v.setStartAfter(P);v.setEndAfter(P);O=true}}P=i.create("br");v.insertNode(P);if(b.isIE&&t=="PRE"&&(!M||M<8)){P.parentNode.insertBefore(i.doc.createTextNode("\r"),P)}N=i.create("span",{}," ");P.parentNode.insertBefore(N,P);e.scrollIntoView(N);i.remove(N);if(!O){v.setStartAfter(P);v.setEndAfter(P)}else{v.setStartBefore(P);v.setEndBefore(P)}e.setRng(v);h.add()}function s(N){do{if(N.nodeType===3){N.nodeValue=N.nodeValue.replace(/^[\r\n]+/,"")}N=N.firstChild}while(N)}function K(P){var N=i.getRoot(),O,Q;O=P;while(O!==N&&i.getContentEditable(O)!=="false"){if(i.getContentEditable(O)==="true"){Q=O}O=O.parentNode}return O!==N?Q:N}function I(O){var N;if(!b.isIE){O.normalize();N=O.lastChild;if(!N||(/^(left|right)$/gi.test(i.getStyle(N,"float",true)))){i.add(O,"br")}}}if(!v.collapsed){f.execCommand("Delete");return}if(A.isDefaultPrevented()){return}z=v.startContainer;u=v.startOffset;x=(d.force_p_newlines?"p":"")||d.forced_root_block;x=x?x.toUpperCase():"";M=i.doc.documentMode;B=A.shiftKey;if(z.nodeType==1&&z.hasChildNodes()){C=u>z.childNodes.length-1;z=z.childNodes[Math.min(u,z.childNodes.length-1)]||z;if(C&&z.nodeType==3){u=z.nodeValue.length}else{u=0}}j=K(z);if(!j){return}h.beforeChange();if(!i.isBlock(j)&&j!=i.getRoot()){if(!x||B){L()}return}if((x&&!B)||(!x&&B)){z=l(z,u)}p=i.getParent(z,i.isBlock);n=p?i.getParent(p.parentNode,i.isBlock):null;t=p?p.nodeName.toUpperCase():"";J=n?n.nodeName.toUpperCase():"";if(J=="LI"&&!A.ctrlKey){p=n;t=J}if(t=="LI"){if(!x&&B){L();return}if(i.isEmpty(p)){if(/^(UL|OL|LI)$/.test(n.parentNode.nodeName)){return false}H();return}}if(t=="PRE"&&d.br_in_pre!==false){if(!B){L();return}}else{if((!x&&!B&&t!="LI")||(x&&B)){L();return}}x=x||"P";if(q()){if(/^(H[1-6]|PRE)$/.test(t)&&J!="HGROUP"){o=r(x)}else{o=r()}if(d.end_container_on_empty_block&&E(n)&&i.isEmpty(p)){o=i.split(n,p)}else{i.insertAfter(o,p)}m(o)}else{if(q(true)){o=p.parentNode.insertBefore(r(),p);F(o)}else{G=v.cloneRange();G.setEndAfter(p);k=G.extractContents();s(k);o=k.firstChild;i.insertAfter(k,p);y(o);I(p);m(o)}}i.setAttrib(o,"id","");h.add()}f.onKeyDown.add(function(k,j){if(j.keyCode==13){if(g(j)!==false){j.preventDefault()}}})}})(tinymce); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/tiny_mce_src.js b/common/static/js/vendor/tiny_mce/tiny_mce_src.js deleted file mode 100644 index b465d599f0..0000000000 --- a/common/static/js/vendor/tiny_mce/tiny_mce_src.js +++ /dev/null @@ -1,17811 +0,0 @@ -// FILE IS GENERATED BY COMBINING THE SOURCES IN THE "classes" DIRECTORY SO DON'T MODIFY THIS FILE DIRECTLY -(function(win) { - var whiteSpaceRe = /^\s*|\s*$/g, - undef, isRegExpBroken = 'B'.replace(/A(.)|B/, '$1') === '$1'; - - var tinymce = { - majorVersion : '3', - - minorVersion : '5.8', - - releaseDate : '2012-11-20', - - _init : function() { - var t = this, d = document, na = navigator, ua = na.userAgent, i, nl, n, base, p, v; - - t.isOpera = win.opera && opera.buildNumber; - - t.isWebKit = /WebKit/.test(ua); - - t.isIE = !t.isWebKit && !t.isOpera && (/MSIE/gi).test(ua) && (/Explorer/gi).test(na.appName); - - t.isIE6 = t.isIE && /MSIE [56]/.test(ua); - - t.isIE7 = t.isIE && /MSIE [7]/.test(ua); - - t.isIE8 = t.isIE && /MSIE [8]/.test(ua); - - t.isIE9 = t.isIE && /MSIE [9]/.test(ua); - - t.isGecko = !t.isWebKit && /Gecko/.test(ua); - - t.isMac = ua.indexOf('Mac') != -1; - - t.isAir = /adobeair/i.test(ua); - - t.isIDevice = /(iPad|iPhone)/.test(ua); - - t.isIOS5 = t.isIDevice && ua.match(/AppleWebKit\/(\d*)/)[1]>=534; - - // TinyMCE .NET webcontrol might be setting the values for TinyMCE - if (win.tinyMCEPreInit) { - t.suffix = tinyMCEPreInit.suffix; - t.baseURL = tinyMCEPreInit.base; - t.query = tinyMCEPreInit.query; - return; - } - - // Get suffix and base - t.suffix = ''; - - // If base element found, add that infront of baseURL - nl = d.getElementsByTagName('base'); - for (i=0; i : - s = /^((static) )?([\w.]+)(:([\w.]+))?/.exec(s); - cn = s[3].match(/(^|\.)(\w+)$/i)[2]; // Class name - - // Create namespace for new class - ns = t.createNS(s[3].replace(/\.\w+$/, ''), root); - - // Class already exists - if (ns[cn]) - return; - - // Make pure static class - if (s[2] == 'static') { - ns[cn] = p; - - if (this.onCreate) - this.onCreate(s[2], s[3], ns[cn]); - - return; - } - - // Create default constructor - if (!p[cn]) { - p[cn] = function() {}; - de = 1; - } - - // Add constructor and methods - ns[cn] = p[cn]; - t.extend(ns[cn].prototype, p); - - // Extend - if (s[5]) { - sp = t.resolve(s[5]).prototype; - scn = s[5].match(/\.(\w+)$/i)[1]; // Class name - - // Extend constructor - c = ns[cn]; - if (de) { - // Add passthrough constructor - ns[cn] = function() { - return sp[scn].apply(this, arguments); - }; - } else { - // Add inherit constructor - ns[cn] = function() { - this.parent = sp[scn]; - return c.apply(this, arguments); - }; - } - ns[cn].prototype[cn] = ns[cn]; - - // Add super methods - t.each(sp, function(f, n) { - ns[cn].prototype[n] = sp[n]; - }); - - // Add overridden methods - t.each(p, function(f, n) { - // Extend methods if needed - if (sp[n]) { - ns[cn].prototype[n] = function() { - this.parent = sp[n]; - return f.apply(this, arguments); - }; - } else { - if (n != cn) - ns[cn].prototype[n] = f; - } - }); - } - - // Add static methods - t.each(p['static'], function(f, n) { - ns[cn][n] = f; - }); - - if (this.onCreate) - this.onCreate(s[2], s[3], ns[cn].prototype); - }, - - walk : function(o, f, n, s) { - s = s || this; - - if (o) { - if (n) - o = o[n]; - - tinymce.each(o, function(o, i) { - if (f.call(s, o, i, n) === false) - return false; - - tinymce.walk(o, f, n, s); - }); - } - }, - - createNS : function(n, o) { - var i, v; - - o = o || win; - - n = n.split('.'); - for (i=0; i 0 ? args : [listener.scope]); - - if (returnValue === false) - break; - } - - self.inDispatch = false; - - return returnValue; - } - - }); - -(function() { - var each = tinymce.each; - - tinymce.create('tinymce.util.URI', { - URI : function(u, s) { - var t = this, o, a, b, base_url; - - // Trim whitespace - u = tinymce.trim(u); - - // Default settings - s = t.settings = s || {}; - - // Strange app protocol that isn't http/https or local anchor - // For example: mailto,skype,tel etc. - if (/^([\w\-]+):([^\/]{2})/i.test(u) || /^\s*#/.test(u)) { - t.source = u; - return; - } - - // Absolute path with no host, fake host and protocol - if (u.indexOf('/') === 0 && u.indexOf('//') !== 0) - u = (s.base_uri ? s.base_uri.protocol || 'http' : 'http') + '://mce_host' + u; - - // Relative path http:// or protocol relative //path - if (!/^[\w\-]*:?\/\//.test(u)) { - base_url = s.base_uri ? s.base_uri.path : new tinymce.util.URI(location.href).directory; - u = ((s.base_uri && s.base_uri.protocol) || 'http') + '://mce_host' + t.toAbsPath(base_url, u); - } - - // Parse URL (Credits goes to Steave, http://blog.stevenlevithan.com/archives/parseuri) - u = u.replace(/@@/g, '(mce_at)'); // Zope 3 workaround, they use @@something - u = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(u); - each(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"], function(v, i) { - var s = u[i]; - - // Zope 3 workaround, they use @@something - if (s) - s = s.replace(/\(mce_at\)/g, '@@'); - - t[v] = s; - }); - - b = s.base_uri; - if (b) { - if (!t.protocol) - t.protocol = b.protocol; - - if (!t.userInfo) - t.userInfo = b.userInfo; - - if (!t.port && t.host === 'mce_host') - t.port = b.port; - - if (!t.host || t.host === 'mce_host') - t.host = b.host; - - t.source = ''; - } - - //t.path = t.path || '/'; - }, - - setPath : function(p) { - var t = this; - - p = /^(.*?)\/?(\w+)?$/.exec(p); - - // Update path parts - t.path = p[0]; - t.directory = p[1]; - t.file = p[2]; - - // Rebuild source - t.source = ''; - t.getURI(); - }, - - toRelative : function(u) { - var t = this, o; - - if (u === "./") - return u; - - u = new tinymce.util.URI(u, {base_uri : t}); - - // Not on same domain/port or protocol - if ((u.host != 'mce_host' && t.host != u.host && u.host) || t.port != u.port || t.protocol != u.protocol) - return u.getURI(); - - var tu = t.getURI(), uu = u.getURI(); - - // Allow usage of the base_uri when relative_urls = true - if(tu == uu || (tu.charAt(tu.length - 1) == "/" && tu.substr(0, tu.length - 1) == uu)) - return tu; - - o = t.toRelPath(t.path, u.path); - - // Add query - if (u.query) - o += '?' + u.query; - - // Add anchor - if (u.anchor) - o += '#' + u.anchor; - - return o; - }, - - toAbsolute : function(u, nh) { - u = new tinymce.util.URI(u, {base_uri : this}); - - return u.getURI(this.host == u.host && this.protocol == u.protocol ? nh : 0); - }, - - toRelPath : function(base, path) { - var items, bp = 0, out = '', i, l; - - // Split the paths - base = base.substring(0, base.lastIndexOf('/')); - base = base.split('/'); - items = path.split('/'); - - if (base.length >= items.length) { - for (i = 0, l = base.length; i < l; i++) { - if (i >= items.length || base[i] != items[i]) { - bp = i + 1; - break; - } - } - } - - if (base.length < items.length) { - for (i = 0, l = items.length; i < l; i++) { - if (i >= base.length || base[i] != items[i]) { - bp = i + 1; - break; - } - } - } - - if (bp === 1) - return path; - - for (i = 0, l = base.length - (bp - 1); i < l; i++) - out += "../"; - - for (i = bp - 1, l = items.length; i < l; i++) { - if (i != bp - 1) - out += "/" + items[i]; - else - out += items[i]; - } - - return out; - }, - - toAbsPath : function(base, path) { - var i, nb = 0, o = [], tr, outPath; - - // Split paths - tr = /\/$/.test(path) ? '/' : ''; - base = base.split('/'); - path = path.split('/'); - - // Remove empty chunks - each(base, function(k) { - if (k) - o.push(k); - }); - - base = o; - - // Merge relURLParts chunks - for (i = path.length - 1, o = []; i >= 0; i--) { - // Ignore empty or . - if (path[i].length === 0 || path[i] === ".") - continue; - - // Is parent - if (path[i] === '..') { - nb++; - continue; - } - - // Move up - if (nb > 0) { - nb--; - continue; - } - - o.push(path[i]); - } - - i = base.length - nb; - - // If /a/b/c or / - if (i <= 0) - outPath = o.reverse().join('/'); - else - outPath = base.slice(0, i).join('/') + '/' + o.reverse().join('/'); - - // Add front / if it's needed - if (outPath.indexOf('/') !== 0) - outPath = '/' + outPath; - - // Add traling / if it's needed - if (tr && outPath.lastIndexOf('/') !== outPath.length - 1) - outPath += tr; - - return outPath; - }, - - getURI : function(nh) { - var s, t = this; - - // Rebuild source - if (!t.source || nh) { - s = ''; - - if (!nh) { - if (t.protocol) - s += t.protocol + '://'; - - if (t.userInfo) - s += t.userInfo + '@'; - - if (t.host) - s += t.host; - - if (t.port) - s += ':' + t.port; - } - - if (t.path) - s += t.path; - - if (t.query) - s += '?' + t.query; - - if (t.anchor) - s += '#' + t.anchor; - - t.source = s; - } - - return t.source; - } - }); -})(); - -(function() { - var each = tinymce.each; - - tinymce.create('static tinymce.util.Cookie', { - getHash : function(n) { - var v = this.get(n), h; - - if (v) { - each(v.split('&'), function(v) { - v = v.split('='); - h = h || {}; - h[unescape(v[0])] = unescape(v[1]); - }); - } - - return h; - }, - - setHash : function(n, v, e, p, d, s) { - var o = ''; - - each(v, function(v, k) { - o += (!o ? '' : '&') + escape(k) + '=' + escape(v); - }); - - this.set(n, o, e, p, d, s); - }, - - get : function(n) { - var c = document.cookie, e, p = n + "=", b; - - // Strict mode - if (!c) - return; - - b = c.indexOf("; " + p); - - if (b == -1) { - b = c.indexOf(p); - - if (b !== 0) - return null; - } else - b += 2; - - e = c.indexOf(";", b); - - if (e == -1) - e = c.length; - - return unescape(c.substring(b + p.length, e)); - }, - - set : function(n, v, e, p, d, s) { - document.cookie = n + "=" + escape(v) + - ((e) ? "; expires=" + e.toGMTString() : "") + - ((p) ? "; path=" + escape(p) : "") + - ((d) ? "; domain=" + d : "") + - ((s) ? "; secure" : ""); - }, - - remove : function(name, path, domain) { - var date = new Date(); - - date.setTime(date.getTime() - 1000); - - this.set(name, '', date, path, domain); - } - }); -})(); - -(function() { - function serialize(o, quote) { - var i, v, t, name; - - quote = quote || '"'; - - if (o == null) - return 'null'; - - t = typeof o; - - if (t == 'string') { - v = '\bb\tt\nn\ff\rr\""\'\'\\\\'; - - return quote + o.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g, function(a, b) { - // Make sure single quotes never get encoded inside double quotes for JSON compatibility - if (quote === '"' && a === "'") - return a; - - i = v.indexOf(b); - - if (i + 1) - return '\\' + v.charAt(i + 1); - - a = b.charCodeAt().toString(16); - - return '\\u' + '0000'.substring(a.length) + a; - }) + quote; - } - - if (t == 'object') { - if (o.hasOwnProperty && Object.prototype.toString.call(o) === '[object Array]') { - for (i=0, v = '['; i 0 ? ',' : '') + serialize(o[i], quote); - - return v + ']'; - } - - v = '{'; - - for (name in o) { - if (o.hasOwnProperty(name)) { - v += typeof o[name] != 'function' ? (v.length > 1 ? ',' + quote : quote) + name + quote +':' + serialize(o[name], quote) : ''; - } - } - - return v + '}'; - } - - return '' + o; - }; - - tinymce.util.JSON = { - serialize: serialize, - - parse: function(s) { - try { - return eval('(' + s + ')'); - } catch (ex) { - // Ignore - } - } - - }; -})(); - -tinymce.create('static tinymce.util.XHR', { - send : function(o) { - var x, t, w = window, c = 0; - - function ready() { - if (!o.async || x.readyState == 4 || c++ > 10000) { - if (o.success && c < 10000 && x.status == 200) - o.success.call(o.success_scope, '' + x.responseText, x, o); - else if (o.error) - o.error.call(o.error_scope, c > 10000 ? 'TIMED_OUT' : 'GENERAL', x, o); - - x = null; - } else - w.setTimeout(ready, 10); - }; - - // Default settings - o.scope = o.scope || this; - o.success_scope = o.success_scope || o.scope; - o.error_scope = o.error_scope || o.scope; - o.async = o.async === false ? false : true; - o.data = o.data || ''; - - function get(s) { - x = 0; - - try { - x = new ActiveXObject(s); - } catch (ex) { - } - - return x; - }; - - x = w.XMLHttpRequest ? new XMLHttpRequest() : get('Microsoft.XMLHTTP') || get('Msxml2.XMLHTTP'); - - if (x) { - if (x.overrideMimeType) - x.overrideMimeType(o.content_type); - - x.open(o.type || (o.data ? 'POST' : 'GET'), o.url, o.async); - - if (o.content_type) - x.setRequestHeader('Content-Type', o.content_type); - - x.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); - - x.send(o.data); - - // Syncronous request - if (!o.async) - return ready(); - - // Wait for response, onReadyStateChange can not be used since it leaks memory in IE - t = w.setTimeout(ready, 10); - } - } -}); - -(function() { - var extend = tinymce.extend, JSON = tinymce.util.JSON, XHR = tinymce.util.XHR; - - tinymce.create('tinymce.util.JSONRequest', { - JSONRequest : function(s) { - this.settings = extend({ - }, s); - this.count = 0; - }, - - send : function(o) { - var ecb = o.error, scb = o.success; - - o = extend(this.settings, o); - - o.success = function(c, x) { - c = JSON.parse(c); - - if (typeof(c) == 'undefined') { - c = { - error : 'JSON Parse error.' - }; - } - - if (c.error) - ecb.call(o.error_scope || o.scope, c.error, x); - else - scb.call(o.success_scope || o.scope, c.result); - }; - - o.error = function(ty, x) { - if (ecb) - ecb.call(o.error_scope || o.scope, ty, x); - }; - - o.data = JSON.serialize({ - id : o.id || 'c' + (this.count++), - method : o.method, - params : o.params - }); - - // JSON content type for Ruby on rails. Bug: #1883287 - o.content_type = 'application/json'; - - XHR.send(o); - }, - - 'static' : { - sendRPC : function(o) { - return new tinymce.util.JSONRequest().send(o); - } - } - }); -}()); -(function(tinymce){ - tinymce.VK = { - BACKSPACE: 8, - DELETE: 46, - DOWN: 40, - ENTER: 13, - LEFT: 37, - RIGHT: 39, - SPACEBAR: 32, - TAB: 9, - UP: 38, - - modifierPressed: function (e) { - return e.shiftKey || e.ctrlKey || e.altKey; - }, - - metaKeyPressed: function(e) { - // Check if ctrl or meta key is pressed also check if alt is false for Polish users - return tinymce.isMac ? e.metaKey : e.ctrlKey && !e.altKey; - } - }; -})(tinymce); - -tinymce.util.Quirks = function(editor) { - var VK = tinymce.VK, BACKSPACE = VK.BACKSPACE, DELETE = VK.DELETE, dom = editor.dom, selection = editor.selection, - settings = editor.settings, parser = editor.parser, serializer = editor.serializer, each = tinymce.each; - - function setEditorCommandState(cmd, state) { - try { - editor.getDoc().execCommand(cmd, false, state); - } catch (ex) { - // Ignore - } - } - - function getDocumentMode() { - var documentMode = editor.getDoc().documentMode; - - return documentMode ? documentMode : 6; - }; - - function isDefaultPrevented(e) { - return e.isDefaultPrevented(); - }; - - function cleanupStylesWhenDeleting() { - function removeMergedFormatSpans(isDelete) { - var rng, blockElm, node, clonedSpan; - - rng = selection.getRng(); - - // Find root block - blockElm = dom.getParent(rng.startContainer, dom.isBlock); - - // On delete clone the root span of the next block element - if (isDelete) { - blockElm = dom.getNext(blockElm, dom.isBlock); - } - - // Locate root span element and clone it since it would otherwise get merged by the "apple-style-span" on delete/backspace - if (blockElm) { - node = blockElm.firstChild; - - // Ignore empty text nodes - while (node && node.nodeType == 3 && node.nodeValue.length === 0) { - node = node.nextSibling; - } - - if (node && node.nodeName === 'SPAN') { - clonedSpan = node.cloneNode(false); - } - } - - each(dom.select('span', blockElm), function(span) { - span.setAttribute('data-mce-mark', '1'); - }); - - // Do the backspace/delete action - editor.getDoc().execCommand(isDelete ? 'ForwardDelete' : 'Delete', false, null); - - // Find all odd apple-style-spans - blockElm = dom.getParent(rng.startContainer, dom.isBlock); - each(dom.select('span', blockElm), function(span) { - var bm = selection.getBookmark(); - - if (clonedSpan) { - dom.replace(clonedSpan.cloneNode(false), span, true); - } else if (!span.getAttribute('data-mce-mark')) { - dom.remove(span, true); - } else { - span.removeAttribute('data-mce-mark'); - } - - // Restore the selection - selection.moveToBookmark(bm); - }); - } - - editor.onKeyDown.add(function(editor, e) { - var isDelete; - - isDelete = e.keyCode == DELETE; - if (!isDefaultPrevented(e) && (isDelete || e.keyCode == BACKSPACE) && !VK.modifierPressed(e)) { - e.preventDefault(); - removeMergedFormatSpans(isDelete); - } - }); - - editor.addCommand('Delete', function() {removeMergedFormatSpans();}); - }; - - function emptyEditorWhenDeleting() { - function serializeRng(rng) { - var body = dom.create("body"); - var contents = rng.cloneContents(); - body.appendChild(contents); - return selection.serializer.serialize(body, {format: 'html'}); - } - - function allContentsSelected(rng) { - var selection = serializeRng(rng); - - var allRng = dom.createRng(); - allRng.selectNode(editor.getBody()); - - var allSelection = serializeRng(allRng); - return selection === allSelection; - } - - editor.onKeyDown.add(function(editor, e) { - var keyCode = e.keyCode, isCollapsed; - - // Empty the editor if it's needed for example backspace at

|

- if (!isDefaultPrevented(e) && (keyCode == DELETE || keyCode == BACKSPACE)) { - isCollapsed = editor.selection.isCollapsed(); - - // Selection is collapsed but the editor isn't empty - if (isCollapsed && !dom.isEmpty(editor.getBody())) { - return; - } - - // IE deletes all contents correctly when everything is selected - if (tinymce.isIE && !isCollapsed) { - return; - } - - // Selection isn't collapsed but not all the contents is selected - if (!isCollapsed && !allContentsSelected(editor.selection.getRng())) { - return; - } - - // Manually empty the editor - editor.setContent(''); - editor.selection.setCursorLocation(editor.getBody(), 0); - editor.nodeChanged(); - } - }); - }; - - function selectAll() { - editor.onKeyDown.add(function(editor, e) { - if (!isDefaultPrevented(e) && e.keyCode == 65 && VK.metaKeyPressed(e)) { - e.preventDefault(); - editor.execCommand('SelectAll'); - } - }); - }; - - function inputMethodFocus() { - if (!editor.settings.content_editable) { - // Case 1 IME doesn't initialize if you focus the document - dom.bind(editor.getDoc(), 'focusin', function(e) { - selection.setRng(selection.getRng()); - }); - - // Case 2 IME doesn't initialize if you click the documentElement it also doesn't properly fire the focusin event - dom.bind(editor.getDoc(), 'mousedown', function(e) { - if (e.target == editor.getDoc().documentElement) { - editor.getWin().focus(); - selection.setRng(selection.getRng()); - } - }); - } - }; - - function removeHrOnBackspace() { - editor.onKeyDown.add(function(editor, e) { - if (!isDefaultPrevented(e) && e.keyCode === BACKSPACE) { - if (selection.isCollapsed() && selection.getRng(true).startOffset === 0) { - var node = selection.getNode(); - var previousSibling = node.previousSibling; - - if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === "hr") { - dom.remove(previousSibling); - tinymce.dom.Event.cancel(e); - } - } - } - }) - } - - function focusBody() { - // Fix for a focus bug in FF 3.x where the body element - // wouldn't get proper focus if the user clicked on the HTML element - if (!Range.prototype.getClientRects) { // Detect getClientRects got introduced in FF 4 - editor.onMouseDown.add(function(editor, e) { - if (!isDefaultPrevented(e) && e.target.nodeName === "HTML") { - var body = editor.getBody(); - - // Blur the body it's focused but not correctly focused - body.blur(); - - // Refocus the body after a little while - setTimeout(function() { - body.focus(); - }, 0); - } - }); - } - }; - - function selectControlElements() { - editor.onClick.add(function(editor, e) { - e = e.target; - - // Workaround for bug, http://bugs.webkit.org/show_bug.cgi?id=12250 - // WebKit can't even do simple things like selecting an image - // Needs tobe the setBaseAndExtend or it will fail to select floated images - if (/^(IMG|HR)$/.test(e.nodeName)) { - selection.getSel().setBaseAndExtent(e, 0, e, 1); - } - - if (e.nodeName == 'A' && dom.hasClass(e, 'mceItemAnchor')) { - selection.select(e); - } - - editor.nodeChanged(); - }); - }; - - function removeStylesWhenDeletingAccrossBlockElements() { - function getAttributeApplyFunction() { - var template = dom.getAttribs(selection.getStart().cloneNode(false)); - - return function() { - var target = selection.getStart(); - - if (target !== editor.getBody()) { - dom.setAttrib(target, "style", null); - - each(template, function(attr) { - target.setAttributeNode(attr.cloneNode(true)); - }); - } - }; - } - - function isSelectionAcrossElements() { - return !selection.isCollapsed() && dom.getParent(selection.getStart(), dom.isBlock) != dom.getParent(selection.getEnd(), dom.isBlock); - } - - function blockEvent(editor, e) { - e.preventDefault(); - return false; - } - - editor.onKeyPress.add(function(editor, e) { - var applyAttributes; - - if (!isDefaultPrevented(e) && (e.keyCode == 8 || e.keyCode == 46) && isSelectionAcrossElements()) { - applyAttributes = getAttributeApplyFunction(); - editor.getDoc().execCommand('delete', false, null); - applyAttributes(); - e.preventDefault(); - return false; - } - }); - - dom.bind(editor.getDoc(), 'cut', function(e) { - var applyAttributes; - - if (!isDefaultPrevented(e) && isSelectionAcrossElements()) { - applyAttributes = getAttributeApplyFunction(); - editor.onKeyUp.addToTop(blockEvent); - - setTimeout(function() { - applyAttributes(); - editor.onKeyUp.remove(blockEvent); - }, 0); - } - }); - } - - function selectionChangeNodeChanged() { - var lastRng, selectionTimer; - - dom.bind(editor.getDoc(), 'selectionchange', function() { - if (selectionTimer) { - clearTimeout(selectionTimer); - selectionTimer = 0; - } - - selectionTimer = window.setTimeout(function() { - var rng = selection.getRng(); - - // Compare the ranges to see if it was a real change or not - if (!lastRng || !tinymce.dom.RangeUtils.compareRanges(rng, lastRng)) { - editor.nodeChanged(); - lastRng = rng; - } - }, 50); - }); - } - - function ensureBodyHasRoleApplication() { - document.body.setAttribute("role", "application"); - } - - function disableBackspaceIntoATable() { - editor.onKeyDown.add(function(editor, e) { - if (!isDefaultPrevented(e) && e.keyCode === BACKSPACE) { - if (selection.isCollapsed() && selection.getRng(true).startOffset === 0) { - var previousSibling = selection.getNode().previousSibling; - if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === "table") { - return tinymce.dom.Event.cancel(e); - } - } - } - }) - } - - function addNewLinesBeforeBrInPre() { - // IE8+ rendering mode does the right thing with BR in PRE - if (getDocumentMode() > 7) { - return; - } - - // Enable display: none in area and add a specific class that hides all BR elements in PRE to - // avoid the caret from getting stuck at the BR elements while pressing the right arrow key - setEditorCommandState('RespectVisibilityInDesign', true); - editor.contentStyles.push('.mceHideBrInPre pre br {display: none}'); - dom.addClass(editor.getBody(), 'mceHideBrInPre'); - - // Adds a \n before all BR elements in PRE to get them visual - parser.addNodeFilter('pre', function(nodes, name) { - var i = nodes.length, brNodes, j, brElm, sibling; - - while (i--) { - brNodes = nodes[i].getAll('br'); - j = brNodes.length; - while (j--) { - brElm = brNodes[j]; - - // Add \n before BR in PRE elements on older IE:s so the new lines get rendered - sibling = brElm.prev; - if (sibling && sibling.type === 3 && sibling.value.charAt(sibling.value - 1) != '\n') { - sibling.value += '\n'; - } else { - brElm.parent.insert(new tinymce.html.Node('#text', 3), brElm, true).value = '\n'; - } - } - } - }); - - // Removes any \n before BR elements in PRE since other browsers and in contentEditable=false mode they will be visible - serializer.addNodeFilter('pre', function(nodes, name) { - var i = nodes.length, brNodes, j, brElm, sibling; - - while (i--) { - brNodes = nodes[i].getAll('br'); - j = brNodes.length; - while (j--) { - brElm = brNodes[j]; - sibling = brElm.prev; - if (sibling && sibling.type == 3) { - sibling.value = sibling.value.replace(/\r?\n$/, ''); - } - } - } - }); - } - - function removePreSerializedStylesWhenSelectingControls() { - dom.bind(editor.getBody(), 'mouseup', function(e) { - var value, node = selection.getNode(); - - // Moved styles to attributes on IMG eements - if (node.nodeName == 'IMG') { - // Convert style width to width attribute - if (value = dom.getStyle(node, 'width')) { - dom.setAttrib(node, 'width', value.replace(/[^0-9%]+/g, '')); - dom.setStyle(node, 'width', ''); - } - - // Convert style height to height attribute - if (value = dom.getStyle(node, 'height')) { - dom.setAttrib(node, 'height', value.replace(/[^0-9%]+/g, '')); - dom.setStyle(node, 'height', ''); - } - } - }); - } - - function keepInlineElementOnDeleteBackspace() { - editor.onKeyDown.add(function(editor, e) { - var isDelete, rng, container, offset, brElm, sibling, collapsed; - - isDelete = e.keyCode == DELETE; - if (!isDefaultPrevented(e) && (isDelete || e.keyCode == BACKSPACE) && !VK.modifierPressed(e)) { - rng = selection.getRng(); - container = rng.startContainer; - offset = rng.startOffset; - collapsed = rng.collapsed; - - // Override delete if the start container is a text node and is at the beginning of text or - // just before/after the last character to be deleted in collapsed mode - if (container.nodeType == 3 && container.nodeValue.length > 0 && ((offset === 0 && !collapsed) || (collapsed && offset === (isDelete ? 0 : 1)))) { - nonEmptyElements = editor.schema.getNonEmptyElements(); - - // Prevent default logic since it's broken - e.preventDefault(); - - // Insert a BR before the text node this will prevent the containing element from being deleted/converted - brElm = dom.create('br', {id: '__tmp'}); - container.parentNode.insertBefore(brElm, container); - - // Do the browser delete - editor.getDoc().execCommand(isDelete ? 'ForwardDelete' : 'Delete', false, null); - - // Check if the previous sibling is empty after deleting for example:

|

- container = selection.getRng().startContainer; - sibling = container.previousSibling; - if (sibling && sibling.nodeType == 1 && !dom.isBlock(sibling) && dom.isEmpty(sibling) && !nonEmptyElements[sibling.nodeName.toLowerCase()]) { - dom.remove(sibling); - } - - // Remove the temp element we inserted - dom.remove('__tmp'); - } - } - }); - } - - function removeBlockQuoteOnBackSpace() { - // Add block quote deletion handler - editor.onKeyDown.add(function(editor, e) { - var rng, container, offset, root, parent; - - if (isDefaultPrevented(e) || e.keyCode != VK.BACKSPACE) { - return; - } - - rng = selection.getRng(); - container = rng.startContainer; - offset = rng.startOffset; - root = dom.getRoot(); - parent = container; - - if (!rng.collapsed || offset !== 0) { - return; - } - - while (parent && parent.parentNode && parent.parentNode.firstChild == parent && parent.parentNode != root) { - parent = parent.parentNode; - } - - // Is the cursor at the beginning of a blockquote? - if (parent.tagName === 'BLOCKQUOTE') { - // Remove the blockquote - editor.formatter.toggle('blockquote', null, parent); - - // Move the caret to the beginning of container - rng = dom.createRng(); - rng.setStart(container, 0); - rng.setEnd(container, 0); - selection.setRng(rng); - } - }); - }; - - function setGeckoEditingOptions() { - function setOpts() { - editor._refreshContentEditable(); - - setEditorCommandState("StyleWithCSS", false); - setEditorCommandState("enableInlineTableEditing", false); - - if (!settings.object_resizing) { - setEditorCommandState("enableObjectResizing", false); - } - }; - - if (!settings.readonly) { - editor.onBeforeExecCommand.add(setOpts); - editor.onMouseDown.add(setOpts); - } - }; - - function addBrAfterLastLinks() { - function fixLinks(editor, o) { - each(dom.select('a'), function(node) { - var parentNode = node.parentNode, root = dom.getRoot(); - - if (parentNode.lastChild === node) { - while (parentNode && !dom.isBlock(parentNode)) { - if (parentNode.parentNode.lastChild !== parentNode || parentNode === root) { - return; - } - - parentNode = parentNode.parentNode; - } - - dom.add(parentNode, 'br', {'data-mce-bogus' : 1}); - } - }); - }; - - editor.onExecCommand.add(function(editor, cmd) { - if (cmd === 'CreateLink') { - fixLinks(editor); - } - }); - - editor.onSetContent.add(selection.onSetContent.add(fixLinks)); - }; - - function setDefaultBlockType() { - if (settings.forced_root_block) { - editor.onInit.add(function() { - setEditorCommandState('DefaultParagraphSeparator', settings.forced_root_block); - }); - } - } - - function removeGhostSelection() { - function repaint(sender, args) { - if (!sender || !args.initial) { - editor.execCommand('mceRepaint'); - } - }; - - editor.onUndo.add(repaint); - editor.onRedo.add(repaint); - editor.onSetContent.add(repaint); - }; - - function deleteControlItemOnBackSpace() { - editor.onKeyDown.add(function(editor, e) { - var rng; - - if (!isDefaultPrevented(e) && e.keyCode == BACKSPACE) { - rng = editor.getDoc().selection.createRange(); - if (rng && rng.item) { - e.preventDefault(); - editor.undoManager.beforeChange(); - dom.remove(rng.item(0)); - editor.undoManager.add(); - } - } - }); - }; - - function renderEmptyBlocksFix() { - var emptyBlocksCSS; - - // IE10+ - if (getDocumentMode() >= 10) { - emptyBlocksCSS = ''; - each('p div h1 h2 h3 h4 h5 h6'.split(' '), function(name, i) { - emptyBlocksCSS += (i > 0 ? ',' : '') + name + ':empty'; - }); - - editor.contentStyles.push(emptyBlocksCSS + '{padding-right: 1px !important}'); - } - }; - - function fakeImageResize() { - var selectedElmX, selectedElmY, selectedElm, selectedElmGhost, selectedHandle, startX, startY, startW, startH, ratio, - resizeHandles, width, height, rootDocument = document, editableDoc = editor.getDoc(); - - if (!settings.object_resizing || settings.webkit_fake_resize === false) { - return; - } - - // Try disabling object resizing if WebKit implements resizing in the future - setEditorCommandState("enableObjectResizing", false); - - // Details about each resize handle how to scale etc - resizeHandles = { - // Name: x multiplier, y multiplier, delta size x, delta size y - n: [.5, 0, 0, -1], - e: [1, .5, 1, 0], - s: [.5, 1, 0, 1], - w: [0, .5, -1, 0], - nw: [0, 0, -1, -1], - ne: [1, 0, 1, -1], - se: [1, 1, 1, 1], - sw : [0, 1, -1, 1] - }; - - function resizeElement(e) { - var deltaX, deltaY; - - // Calc new width/height - deltaX = e.screenX - startX; - deltaY = e.screenY - startY; - - // Calc new size - width = deltaX * selectedHandle[2] + startW; - height = deltaY * selectedHandle[3] + startH; - - // Never scale down lower than 5 pixels - width = width < 5 ? 5 : width; - height = height < 5 ? 5 : height; - - // Constrain proportions when modifier key is pressed or if the nw, ne, sw, se corners are moved on an image - if (VK.modifierPressed(e) || (selectedElm.nodeName == "IMG" && selectedHandle[2] * selectedHandle[3] !== 0)) { - width = Math.round(height / ratio); - height = Math.round(width * ratio); - } - - // Update ghost size - dom.setStyles(selectedElmGhost, { - width: width, - height: height - }); - - // Update ghost X position if needed - if (selectedHandle[2] < 0 && selectedElmGhost.clientWidth <= width) { - dom.setStyle(selectedElmGhost, 'left', selectedElmX + (startW - width)); - } - - // Update ghost Y position if needed - if (selectedHandle[3] < 0 && selectedElmGhost.clientHeight <= height) { - dom.setStyle(selectedElmGhost, 'top', selectedElmY + (startH - height)); - } - } - - function endResize() { - function setSizeProp(name, value) { - if (value) { - // Resize by using style or attribute - if (selectedElm.style[name] || !editor.schema.isValid(selectedElm.nodeName.toLowerCase(), name)) { - dom.setStyle(selectedElm, name, value); - } else { - dom.setAttrib(selectedElm, name, value); - } - } - } - - // Set width/height properties - setSizeProp('width', width); - setSizeProp('height', height); - - dom.unbind(editableDoc, 'mousemove', resizeElement); - dom.unbind(editableDoc, 'mouseup', endResize); - - if (rootDocument != editableDoc) { - dom.unbind(rootDocument, 'mousemove', resizeElement); - dom.unbind(rootDocument, 'mouseup', endResize); - } - - // Remove ghost and update resize handle positions - dom.remove(selectedElmGhost); - showResizeRect(selectedElm); - } - - function showResizeRect(targetElm) { - var position, targetWidth, targetHeight; - - hideResizeRect(); - - // Get position and size of target - position = dom.getPos(targetElm); - selectedElmX = position.x; - selectedElmY = position.y; - targetWidth = targetElm.offsetWidth; - targetHeight = targetElm.offsetHeight; - - // Reset width/height if user selects a new image/table - if (selectedElm != targetElm) { - selectedElm = targetElm; - width = height = 0; - } - - each(resizeHandles, function(handle, name) { - var handleElm; - - // Get existing or render resize handle - handleElm = dom.get('mceResizeHandle' + name); - if (!handleElm) { - handleElm = dom.add(editableDoc.documentElement, 'div', { - id: 'mceResizeHandle' + name, - 'class': 'mceResizeHandle', - style: 'cursor:' + name + '-resize; margin:0; padding:0' - }); - - dom.bind(handleElm, 'mousedown', function(e) { - e.preventDefault(); - - endResize(); - - startX = e.screenX; - startY = e.screenY; - startW = selectedElm.clientWidth; - startH = selectedElm.clientHeight; - ratio = startH / startW; - selectedHandle = handle; - - selectedElmGhost = selectedElm.cloneNode(true); - dom.addClass(selectedElmGhost, 'mceClonedResizable'); - dom.setStyles(selectedElmGhost, { - left: selectedElmX, - top: selectedElmY, - margin: 0 - }); - - editableDoc.documentElement.appendChild(selectedElmGhost); - - dom.bind(editableDoc, 'mousemove', resizeElement); - dom.bind(editableDoc, 'mouseup', endResize); - - if (rootDocument != editableDoc) { - dom.bind(rootDocument, 'mousemove', resizeElement); - dom.bind(rootDocument, 'mouseup', endResize); - } - }); - } else { - dom.show(handleElm); - } - - // Position element - dom.setStyles(handleElm, { - left: (targetWidth * handle[0] + selectedElmX) - (handleElm.offsetWidth / 2), - top: (targetHeight * handle[1] + selectedElmY) - (handleElm.offsetHeight / 2) - }); - }); - - // Only add resize rectangle on WebKit and only on images - if (!tinymce.isOpera && selectedElm.nodeName == "IMG") { - selectedElm.setAttribute('data-mce-selected', '1'); - } - } - - function hideResizeRect() { - if (selectedElm) { - selectedElm.removeAttribute('data-mce-selected'); - } - - for (var name in resizeHandles) { - dom.hide('mceResizeHandle' + name); - } - } - - // Add CSS for resize handles, cloned element and selected - editor.contentStyles.push( - '.mceResizeHandle {' + - 'position: absolute;' + - 'border: 1px solid black;' + - 'background: #FFF;' + - 'width: 5px;' + - 'height: 5px;' + - 'z-index: 10000' + - '}' + - '.mceResizeHandle:hover {' + - 'background: #000' + - '}' + - 'img[data-mce-selected] {' + - 'outline: 1px solid black' + - '}' + - 'img.mceClonedResizable, table.mceClonedResizable {' + - 'position: absolute;' + - 'outline: 1px dashed black;' + - 'opacity: .5;' + - 'z-index: 10000' + - '}' - ); - - function updateResizeRect() { - var controlElm = dom.getParent(selection.getNode(), 'table,img'); - - // Remove data-mce-selected from all elements since they might have been copied using Ctrl+c/v - each(dom.select('img[data-mce-selected]'), function(img) { - img.removeAttribute('data-mce-selected'); - }); - - if (controlElm) { - showResizeRect(controlElm); - } else { - hideResizeRect(); - } - } - - // Show/hide resize rect when image is selected - editor.onNodeChange.add(updateResizeRect); - - // Fixes WebKit quirk where it returns IMG on getNode if caret is after last image in container - dom.bind(editableDoc, 'selectionchange', updateResizeRect); - - // Remove the internal attribute when serializing the DOM - editor.serializer.addAttributeFilter('data-mce-selected', function(nodes, name) { - var i = nodes.length; - - while (i--) { - nodes[i].attr(name, null); - } - }); - } - - function keepNoScriptContents() { - if (getDocumentMode() < 9) { - parser.addNodeFilter('noscript', function(nodes) { - var i = nodes.length, node, textNode; - - while (i--) { - node = nodes[i]; - textNode = node.firstChild; - - if (textNode) { - node.attr('data-mce-innertext', textNode.value); - } - } - }); - - serializer.addNodeFilter('noscript', function(nodes) { - var i = nodes.length, node, textNode, value; - - while (i--) { - node = nodes[i]; - textNode = nodes[i].firstChild; - - if (textNode) { - textNode.value = tinymce.html.Entities.decode(textNode.value); - } else { - // Old IE can't retain noscript value so an attribute is used to store it - value = node.attributes.map['data-mce-innertext']; - if (value) { - node.attr('data-mce-innertext', null); - textNode = new tinymce.html.Node('#text', 3); - textNode.value = value; - textNode.raw = true; - node.append(textNode); - } - } - } - }); - } - } - - // All browsers - disableBackspaceIntoATable(); - removeBlockQuoteOnBackSpace(); - emptyEditorWhenDeleting(); - - // WebKit - if (tinymce.isWebKit) { - keepInlineElementOnDeleteBackspace(); - cleanupStylesWhenDeleting(); - inputMethodFocus(); - selectControlElements(); - setDefaultBlockType(); - - // iOS - if (tinymce.isIDevice) { - selectionChangeNodeChanged(); - } else { - fakeImageResize(); - selectAll(); - } - } - - // IE - if (tinymce.isIE) { - removeHrOnBackspace(); - ensureBodyHasRoleApplication(); - addNewLinesBeforeBrInPre(); - removePreSerializedStylesWhenSelectingControls(); - deleteControlItemOnBackSpace(); - renderEmptyBlocksFix(); - keepNoScriptContents(); - } - - // Gecko - if (tinymce.isGecko) { - removeHrOnBackspace(); - focusBody(); - removeStylesWhenDeletingAccrossBlockElements(); - setGeckoEditingOptions(); - addBrAfterLastLinks(); - removeGhostSelection(); - } - - // Opera - if (tinymce.isOpera) { - fakeImageResize(); - } -}; -(function(tinymce) { - var namedEntities, baseEntities, reverseEntities, - attrsCharsRegExp = /[&<>\"\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g, - textCharsRegExp = /[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g, - rawCharsRegExp = /[<>&\"\']/g, - entityRegExp = /&(#x|#)?([\w]+);/g, - asciiMap = { - 128 : "\u20AC", 130 : "\u201A", 131 : "\u0192", 132 : "\u201E", 133 : "\u2026", 134 : "\u2020", - 135 : "\u2021", 136 : "\u02C6", 137 : "\u2030", 138 : "\u0160", 139 : "\u2039", 140 : "\u0152", - 142 : "\u017D", 145 : "\u2018", 146 : "\u2019", 147 : "\u201C", 148 : "\u201D", 149 : "\u2022", - 150 : "\u2013", 151 : "\u2014", 152 : "\u02DC", 153 : "\u2122", 154 : "\u0161", 155 : "\u203A", - 156 : "\u0153", 158 : "\u017E", 159 : "\u0178" - }; - - // Raw entities - baseEntities = { - '\"' : '"', // Needs to be escaped since the YUI compressor would otherwise break the code - "'" : ''', - '<' : '<', - '>' : '>', - '&' : '&' - }; - - // Reverse lookup table for raw entities - reverseEntities = { - '<' : '<', - '>' : '>', - '&' : '&', - '"' : '"', - ''' : "'" - }; - - // Decodes text by using the browser - function nativeDecode(text) { - var elm; - - elm = document.createElement("div"); - elm.innerHTML = text; - - return elm.textContent || elm.innerText || text; - }; - - // Build a two way lookup table for the entities - function buildEntitiesLookup(items, radix) { - var i, chr, entity, lookup = {}; - - if (items) { - items = items.split(','); - radix = radix || 10; - - // Build entities lookup table - for (i = 0; i < items.length; i += 2) { - chr = String.fromCharCode(parseInt(items[i], radix)); - - // Only add non base entities - if (!baseEntities[chr]) { - entity = '&' + items[i + 1] + ';'; - lookup[chr] = entity; - lookup[entity] = chr; - } - } - - return lookup; - } - }; - - // Unpack entities lookup where the numbers are in radix 32 to reduce the size - 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); - - tinymce.html = tinymce.html || {}; - - tinymce.html.Entities = { - encodeRaw : function(text, attr) { - return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function(chr) { - return baseEntities[chr] || chr; - }); - }, - - encodeAllRaw : function(text) { - return ('' + text).replace(rawCharsRegExp, function(chr) { - return baseEntities[chr] || chr; - }); - }, - - encodeNumeric : function(text, attr) { - return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function(chr) { - // Multi byte sequence convert it to a single entity - if (chr.length > 1) - return '&#' + (((chr.charCodeAt(0) - 0xD800) * 0x400) + (chr.charCodeAt(1) - 0xDC00) + 0x10000) + ';'; - - return baseEntities[chr] || '&#' + chr.charCodeAt(0) + ';'; - }); - }, - - encodeNamed : function(text, attr, entities) { - entities = entities || namedEntities; - - return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function(chr) { - return baseEntities[chr] || entities[chr] || chr; - }); - }, - - getEncodeFunc : function(name, entities) { - var Entities = tinymce.html.Entities; - - entities = buildEntitiesLookup(entities) || namedEntities; - - function encodeNamedAndNumeric(text, attr) { - return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function(chr) { - return baseEntities[chr] || entities[chr] || '&#' + chr.charCodeAt(0) + ';' || chr; - }); - }; - - function encodeCustomNamed(text, attr) { - return Entities.encodeNamed(text, attr, entities); - }; - - // Replace + with , to be compatible with previous TinyMCE versions - name = tinymce.makeMap(name.replace(/\+/g, ',')); - - // Named and numeric encoder - if (name.named && name.numeric) - return encodeNamedAndNumeric; - - // Named encoder - if (name.named) { - // Custom names - if (entities) - return encodeCustomNamed; - - return Entities.encodeNamed; - } - - // Numeric - if (name.numeric) - return Entities.encodeNumeric; - - // Raw encoder - return Entities.encodeRaw; - }, - - decode : function(text) { - return text.replace(entityRegExp, function(all, numeric, value) { - if (numeric) { - value = parseInt(value, numeric.length === 2 ? 16 : 10); - - // Support upper UTF - if (value > 0xFFFF) { - value -= 0x10000; - - return String.fromCharCode(0xD800 + (value >> 10), 0xDC00 + (value & 0x3FF)); - } else - return asciiMap[value] || String.fromCharCode(value); - } - - return reverseEntities[all] || namedEntities[all] || nativeDecode(all); - }); - } - }; -})(tinymce); - -tinymce.html.Styles = function(settings, schema) { - var rgbRegExp = /rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi, - urlOrStrRegExp = /(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi, - styleRegExp = /\s*([^:]+):\s*([^;]+);?/g, - trimRightRegExp = /\s+$/, - urlColorRegExp = /rgb/, - undef, i, encodingLookup = {}, encodingItems; - - settings = settings || {}; - - encodingItems = '\\" \\\' \\; \\: ; : \uFEFF'.split(' '); - for (i = 0; i < encodingItems.length; i++) { - encodingLookup[encodingItems[i]] = '\uFEFF' + i; - encodingLookup['\uFEFF' + i] = encodingItems[i]; - } - - function toHex(match, r, g, b) { - function hex(val) { - val = parseInt(val).toString(16); - - return val.length > 1 ? val : '0' + val; // 0 -> 00 - }; - - return '#' + hex(r) + hex(g) + hex(b); - }; - - return { - toHex : function(color) { - return color.replace(rgbRegExp, toHex); - }, - - parse : function(css) { - var styles = {}, matches, name, value, isEncoded, urlConverter = settings.url_converter, urlConverterScope = settings.url_converter_scope || this; - - function compress(prefix, suffix) { - var top, right, bottom, left; - - // Get values and check it it needs compressing - top = styles[prefix + '-top' + suffix]; - if (!top) - return; - - right = styles[prefix + '-right' + suffix]; - if (top != right) - return; - - bottom = styles[prefix + '-bottom' + suffix]; - if (right != bottom) - return; - - left = styles[prefix + '-left' + suffix]; - if (bottom != left) - return; - - // Compress - styles[prefix + suffix] = left; - delete styles[prefix + '-top' + suffix]; - delete styles[prefix + '-right' + suffix]; - delete styles[prefix + '-bottom' + suffix]; - delete styles[prefix + '-left' + suffix]; - }; - - function canCompress(key) { - var value = styles[key], i; - - if (!value || value.indexOf(' ') < 0) - return; - - value = value.split(' '); - i = value.length; - while (i--) { - if (value[i] !== value[0]) - return false; - } - - styles[key] = value[0]; - - return true; - }; - - function compress2(target, a, b, c) { - if (!canCompress(a)) - return; - - if (!canCompress(b)) - return; - - if (!canCompress(c)) - return; - - // Compress - styles[target] = styles[a] + ' ' + styles[b] + ' ' + styles[c]; - delete styles[a]; - delete styles[b]; - delete styles[c]; - }; - - // Encodes the specified string by replacing all \" \' ; : with _ - function encode(str) { - isEncoded = true; - - return encodingLookup[str]; - }; - - // Decodes the specified string by replacing all _ with it's original value \" \' etc - // It will also decode the \" \' if keep_slashes is set to fale or omitted - function decode(str, keep_slashes) { - if (isEncoded) { - str = str.replace(/\uFEFF[0-9]/g, function(str) { - return encodingLookup[str]; - }); - } - - if (!keep_slashes) - str = str.replace(/\\([\'\";:])/g, "$1"); - - return str; - }; - - function processUrl(match, url, url2, url3, str, str2) { - str = str || str2; - - if (str) { - str = decode(str); - - // Force strings into single quote format - return "'" + str.replace(/\'/g, "\\'") + "'"; - } - - url = decode(url || url2 || url3); - - // Convert the URL to relative/absolute depending on config - if (urlConverter) - url = urlConverter.call(urlConverterScope, url, 'style'); - - // Output new URL format - return "url('" + url.replace(/\'/g, "\\'") + "')"; - }; - - if (css) { - // Encode \" \' % and ; and : inside strings so they don't interfere with the style parsing - css = css.replace(/\\[\"\';:\uFEFF]/g, encode).replace(/\"[^\"]+\"|\'[^\']+\'/g, function(str) { - return str.replace(/[;:]/g, encode); - }); - - // Parse styles - while (matches = styleRegExp.exec(css)) { - name = matches[1].replace(trimRightRegExp, '').toLowerCase(); - value = matches[2].replace(trimRightRegExp, ''); - - if (name && value.length > 0) { - // Opera will produce 700 instead of bold in their style values - if (name === 'font-weight' && value === '700') - value = 'bold'; - else if (name === 'color' || name === 'background-color') // Lowercase colors like RED - value = value.toLowerCase(); - - // Convert RGB colors to HEX - value = value.replace(rgbRegExp, toHex); - - // Convert URLs and force them into url('value') format - value = value.replace(urlOrStrRegExp, processUrl); - styles[name] = isEncoded ? decode(value, true) : value; - } - - styleRegExp.lastIndex = matches.index + matches[0].length; - } - - // Compress the styles to reduce it's size for example IE will expand styles - compress("border", ""); - compress("border", "-width"); - compress("border", "-color"); - compress("border", "-style"); - compress("padding", ""); - compress("margin", ""); - compress2('border', 'border-width', 'border-style', 'border-color'); - - // Remove pointless border, IE produces these - if (styles.border === 'medium none') - delete styles.border; - } - - return styles; - }, - - serialize : function(styles, element_name) { - var css = '', name, value; - - function serializeStyles(name) { - var styleList, i, l, value; - - styleList = schema.styles[name]; - if (styleList) { - for (i = 0, l = styleList.length; i < l; i++) { - name = styleList[i]; - value = styles[name]; - - if (value !== undef && value.length > 0) - css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';'; - } - } - }; - - // Serialize styles according to schema - if (element_name && schema && schema.styles) { - // Serialize global styles and element specific styles - serializeStyles('*'); - serializeStyles(element_name); - } else { - // Output the styles in the order they are inside the object - for (name in styles) { - value = styles[name]; - - if (value !== undef && value.length > 0) - css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';'; - } - } - - return css; - } - }; -}; - -(function(tinymce) { - var mapCache = {}, makeMap = tinymce.makeMap, each = tinymce.each; - - function split(str, delim) { - return str.split(delim || ','); - }; - - function unpack(lookup, data) { - var key, elements = {}; - - function replace(value) { - return value.replace(/[A-Z]+/g, function(key) { - return replace(lookup[key]); - }); - }; - - // Unpack lookup - for (key in lookup) { - if (lookup.hasOwnProperty(key)) - lookup[key] = replace(lookup[key]); - } - - // Unpack and parse data into object map - replace(data).replace(/#/g, '#text').replace(/(\w+)\[([^\]]+)\]\[([^\]]*)\]/g, function(str, name, attributes, children) { - attributes = split(attributes, '|'); - - elements[name] = { - attributes : makeMap(attributes), - attributesOrder : attributes, - children : makeMap(children, '|', {'#comment' : {}}) - } - }); - - return elements; - }; - - function getHTML5() { - var html5 = mapCache.html5; - - if (!html5) { - html5 = mapCache.html5 = unpack({ - A : 'id|accesskey|class|dir|draggable|item|hidden|itemprop|role|spellcheck|style|subject|title|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup', - B : '#|a|abbr|area|audio|b|bdo|br|button|canvas|cite|code|command|datalist|del|dfn|em|embed|i|iframe|img|input|ins|kbd|keygen|label|link|map|mark|meta|' + - 'meter|noscript|object|output|progress|q|ruby|samp|script|select|small|span|strong|sub|sup|svg|textarea|time|var|video|wbr', - C : '#|a|abbr|area|address|article|aside|audio|b|bdo|blockquote|br|button|canvas|cite|code|command|datalist|del|details|dfn|dialog|div|dl|em|embed|fieldset|' + - 'figure|footer|form|h1|h2|h3|h4|h5|h6|header|hgroup|hr|i|iframe|img|input|ins|kbd|keygen|label|link|map|mark|menu|meta|meter|nav|noscript|ol|object|output|' + - 'p|pre|progress|q|ruby|samp|script|section|select|small|span|strong|style|sub|sup|svg|table|textarea|time|ul|var|video' - }, 'html[A|manifest][body|head]' + - 'head[A][base|command|link|meta|noscript|script|style|title]' + - 'title[A][#]' + - 'base[A|href|target][]' + - 'link[A|href|rel|media|type|sizes][]' + - 'meta[A|http-equiv|name|content|charset][]' + - 'style[A|type|media|scoped][#]' + - 'script[A|charset|type|src|defer|async][#]' + - 'noscript[A][C]' + - 'body[A][C]' + - 'section[A][C]' + - 'nav[A][C]' + - 'article[A][C]' + - 'aside[A][C]' + - 'h1[A][B]' + - 'h2[A][B]' + - 'h3[A][B]' + - 'h4[A][B]' + - 'h5[A][B]' + - 'h6[A][B]' + - 'hgroup[A][h1|h2|h3|h4|h5|h6]' + - 'header[A][C]' + - 'footer[A][C]' + - 'address[A][C]' + - 'p[A][B]' + - 'br[A][]' + - 'pre[A][B]' + - 'dialog[A][dd|dt]' + - 'blockquote[A|cite][C]' + - 'ol[A|start|reversed][li]' + - 'ul[A][li]' + - 'li[A|value][C]' + - 'dl[A][dd|dt]' + - 'dt[A][B]' + - 'dd[A][C]' + - 'a[A|href|target|ping|rel|media|type][B]' + - 'em[A][B]' + - 'strong[A][B]' + - 'small[A][B]' + - 'cite[A][B]' + - 'q[A|cite][B]' + - 'dfn[A][B]' + - 'abbr[A][B]' + - 'code[A][B]' + - 'var[A][B]' + - 'samp[A][B]' + - 'kbd[A][B]' + - 'sub[A][B]' + - 'sup[A][B]' + - 'i[A][B]' + - 'b[A][B]' + - 'mark[A][B]' + - 'progress[A|value|max][B]' + - 'meter[A|value|min|max|low|high|optimum][B]' + - 'time[A|datetime][B]' + - 'ruby[A][B|rt|rp]' + - 'rt[A][B]' + - 'rp[A][B]' + - 'bdo[A][B]' + - 'span[A][B]' + - 'ins[A|cite|datetime][B]' + - 'del[A|cite|datetime][B]' + - 'figure[A][C|legend|figcaption]' + - 'figcaption[A][C]' + - 'img[A|alt|src|height|width|usemap|ismap][]' + - 'iframe[A|name|src|height|width|sandbox|seamless][]' + - 'embed[A|src|height|width|type][]' + - 'object[A|data|type|height|width|usemap|name|form|classid][param]' + - 'param[A|name|value][]' + - 'details[A|open][C|legend]' + - 'command[A|type|label|icon|disabled|checked|radiogroup][]' + - 'menu[A|type|label][C|li]' + - 'legend[A][C|B]' + - 'div[A][C]' + - 'source[A|src|type|media][]' + - 'audio[A|src|autobuffer|autoplay|loop|controls][source]' + - 'video[A|src|autobuffer|autoplay|loop|controls|width|height|poster][source]' + - 'hr[A][]' + - 'form[A|accept-charset|action|autocomplete|enctype|method|name|novalidate|target][C]' + - 'fieldset[A|disabled|form|name][C|legend]' + - 'label[A|form|for][B]' + - 'input[A|type|accept|alt|autocomplete|autofocus|checked|disabled|form|formaction|formenctype|formmethod|formnovalidate|formtarget|height|list|max|maxlength|min|' + - 'multiple|pattern|placeholder|readonly|required|size|src|step|width|files|value|name][]' + - 'button[A|autofocus|disabled|form|formaction|formenctype|formmethod|formnovalidate|formtarget|name|value|type][B]' + - 'select[A|autofocus|disabled|form|multiple|name|size][option|optgroup]' + - 'datalist[A][B|option]' + - 'optgroup[A|disabled|label][option]' + - 'option[A|disabled|selected|label|value][]' + - 'textarea[A|autofocus|disabled|form|maxlength|name|placeholder|readonly|required|rows|cols|wrap][]' + - 'keygen[A|autofocus|challenge|disabled|form|keytype|name][]' + - 'output[A|for|form|name][B]' + - 'canvas[A|width|height][]' + - 'map[A|name][B|C]' + - 'area[A|shape|coords|href|alt|target|media|rel|ping|type][]' + - 'mathml[A][]' + - 'svg[A][]' + - 'table[A|border][caption|colgroup|thead|tfoot|tbody|tr]' + - 'caption[A][C]' + - 'colgroup[A|span][col]' + - 'col[A|span][]' + - 'thead[A][tr]' + - 'tfoot[A][tr]' + - 'tbody[A][tr]' + - 'tr[A][th|td]' + - 'th[A|headers|rowspan|colspan|scope][B]' + - 'td[A|headers|rowspan|colspan][C]' + - 'wbr[A][]' - ); - } - - return html5; - }; - - function getHTML4() { - var html4 = mapCache.html4; - - if (!html4) { - // This is the XHTML 1.0 transitional elements with it's attributes and children packed to reduce it's size - html4 = mapCache.html4 = unpack({ - Z : 'H|K|N|O|P', - Y : 'X|form|R|Q', - ZG : 'E|span|width|align|char|charoff|valign', - X : 'p|T|div|U|W|isindex|fieldset|table', - ZF : 'E|align|char|charoff|valign', - W : 'pre|hr|blockquote|address|center|noframes', - ZE : 'abbr|axis|headers|scope|rowspan|colspan|align|char|charoff|valign|nowrap|bgcolor|width|height', - ZD : '[E][S]', - U : 'ul|ol|dl|menu|dir', - ZC : 'p|Y|div|U|W|table|br|span|bdo|object|applet|img|map|K|N|Q', - T : 'h1|h2|h3|h4|h5|h6', - ZB : 'X|S|Q', - S : 'R|P', - ZA : 'a|G|J|M|O|P', - R : 'a|H|K|N|O', - Q : 'noscript|P', - P : 'ins|del|script', - O : 'input|select|textarea|label|button', - N : 'M|L', - M : 'em|strong|dfn|code|q|samp|kbd|var|cite|abbr|acronym', - L : 'sub|sup', - K : 'J|I', - J : 'tt|i|b|u|s|strike', - I : 'big|small|font|basefont', - H : 'G|F', - G : 'br|span|bdo', - F : 'object|applet|img|map|iframe', - E : 'A|B|C', - D : 'accesskey|tabindex|onfocus|onblur', - C : 'onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup', - B : 'lang|xml:lang|dir', - A : 'id|class|style|title' - }, 'script[id|charset|type|language|src|defer|xml:space][]' + - 'style[B|id|type|media|title|xml:space][]' + - 'object[E|declare|classid|codebase|data|type|codetype|archive|standby|width|height|usemap|name|tabindex|align|border|hspace|vspace][#|param|Y]' + - 'param[id|name|value|valuetype|type][]' + - 'p[E|align][#|S]' + - 'a[E|D|charset|type|name|href|hreflang|rel|rev|shape|coords|target][#|Z]' + - 'br[A|clear][]' + - 'span[E][#|S]' + - 'bdo[A|C|B][#|S]' + - 'applet[A|codebase|archive|code|object|alt|name|width|height|align|hspace|vspace][#|param|Y]' + - 'h1[E|align][#|S]' + - 'img[E|src|alt|name|longdesc|width|height|usemap|ismap|align|border|hspace|vspace][]' + - 'map[B|C|A|name][X|form|Q|area]' + - 'h2[E|align][#|S]' + - 'iframe[A|longdesc|name|src|frameborder|marginwidth|marginheight|scrolling|align|width|height][#|Y]' + - 'h3[E|align][#|S]' + - 'tt[E][#|S]' + - 'i[E][#|S]' + - 'b[E][#|S]' + - 'u[E][#|S]' + - 's[E][#|S]' + - 'strike[E][#|S]' + - 'big[E][#|S]' + - 'small[E][#|S]' + - 'font[A|B|size|color|face][#|S]' + - 'basefont[id|size|color|face][]' + - 'em[E][#|S]' + - 'strong[E][#|S]' + - 'dfn[E][#|S]' + - 'code[E][#|S]' + - 'q[E|cite][#|S]' + - 'samp[E][#|S]' + - 'kbd[E][#|S]' + - 'var[E][#|S]' + - 'cite[E][#|S]' + - 'abbr[E][#|S]' + - 'acronym[E][#|S]' + - 'sub[E][#|S]' + - 'sup[E][#|S]' + - 'input[E|D|type|name|value|checked|disabled|readonly|size|maxlength|src|alt|usemap|onselect|onchange|accept|align][]' + - 'select[E|name|size|multiple|disabled|tabindex|onfocus|onblur|onchange][optgroup|option]' + - 'optgroup[E|disabled|label][option]' + - 'option[E|selected|disabled|label|value][]' + - 'textarea[E|D|name|rows|cols|disabled|readonly|onselect|onchange][]' + - 'label[E|for|accesskey|onfocus|onblur][#|S]' + - 'button[E|D|name|value|type|disabled][#|p|T|div|U|W|table|G|object|applet|img|map|K|N|Q]' + - 'h4[E|align][#|S]' + - 'ins[E|cite|datetime][#|Y]' + - 'h5[E|align][#|S]' + - 'del[E|cite|datetime][#|Y]' + - 'h6[E|align][#|S]' + - 'div[E|align][#|Y]' + - 'ul[E|type|compact][li]' + - 'li[E|type|value][#|Y]' + - 'ol[E|type|compact|start][li]' + - 'dl[E|compact][dt|dd]' + - 'dt[E][#|S]' + - 'dd[E][#|Y]' + - 'menu[E|compact][li]' + - 'dir[E|compact][li]' + - 'pre[E|width|xml:space][#|ZA]' + - 'hr[E|align|noshade|size|width][]' + - 'blockquote[E|cite][#|Y]' + - 'address[E][#|S|p]' + - 'center[E][#|Y]' + - 'noframes[E][#|Y]' + - 'isindex[A|B|prompt][]' + - 'fieldset[E][#|legend|Y]' + - 'legend[E|accesskey|align][#|S]' + - 'table[E|summary|width|border|frame|rules|cellspacing|cellpadding|align|bgcolor][caption|col|colgroup|thead|tfoot|tbody|tr]' + - 'caption[E|align][#|S]' + - 'col[ZG][]' + - 'colgroup[ZG][col]' + - 'thead[ZF][tr]' + - 'tr[ZF|bgcolor][th|td]' + - 'th[E|ZE][#|Y]' + - 'form[E|action|method|name|enctype|onsubmit|onreset|accept|accept-charset|target][#|X|R|Q]' + - 'noscript[E][#|Y]' + - 'td[E|ZE][#|Y]' + - 'tfoot[ZF][tr]' + - 'tbody[ZF][tr]' + - 'area[E|D|shape|coords|href|nohref|alt|target][]' + - 'base[id|href|target][]' + - 'body[E|onload|onunload|background|bgcolor|text|link|vlink|alink][#|Y]' - ); - } - - return html4; - }; - - tinymce.html.Schema = function(settings) { - var self = this, elements = {}, children = {}, patternElements = [], validStyles, schemaItems; - var whiteSpaceElementsMap, selfClosingElementsMap, shortEndedElementsMap, boolAttrMap, blockElementsMap, nonEmptyElementsMap, customElementsMap = {}; - - // Creates an lookup table map object for the specified option or the default value - function createLookupTable(option, default_value, extend) { - var value = settings[option]; - - if (!value) { - // Get cached default map or make it if needed - value = mapCache[option]; - - if (!value) { - value = makeMap(default_value, ' ', makeMap(default_value.toUpperCase(), ' ')); - value = tinymce.extend(value, extend); - - mapCache[option] = value; - } - } else { - // Create custom map - value = makeMap(value, ',', makeMap(value.toUpperCase(), ' ')); - } - - return value; - }; - - settings = settings || {}; - schemaItems = settings.schema == "html5" ? getHTML5() : getHTML4(); - - // Allow all elements and attributes if verify_html is set to false - if (settings.verify_html === false) - settings.valid_elements = '*[*]'; - - // Build styles list - if (settings.valid_styles) { - validStyles = {}; - - // Convert styles into a rule list - each(settings.valid_styles, function(value, key) { - validStyles[key] = tinymce.explode(value); - }); - } - - // Setup map objects - whiteSpaceElementsMap = createLookupTable('whitespace_elements', 'pre script noscript style textarea'); - selfClosingElementsMap = createLookupTable('self_closing_elements', 'colgroup dd dt li option p td tfoot th thead tr'); - shortEndedElementsMap = createLookupTable('short_ended_elements', 'area base basefont br col frame hr img input isindex link meta param embed source wbr'); - boolAttrMap = createLookupTable('boolean_attributes', 'checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls'); - nonEmptyElementsMap = createLookupTable('non_empty_elements', 'td th iframe video audio object', shortEndedElementsMap); - 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 nav figure'); - blockElementsMap = createLookupTable('block_elements', 'hr table tbody thead tfoot ' + - 'th tr td li ol ul caption dl dt dd noscript menu isindex samp option datalist select optgroup', textBlockElementsMap); - - // Converts a wildcard expression string to a regexp for example *a will become /.*a/. - function patternToRegExp(str) { - return new RegExp('^' + str.replace(/([?+*])/g, '.$1') + '$'); - }; - - // Parses the specified valid_elements string and adds to the current rules - // This function is a bit hard to read since it's heavily optimized for speed - function addValidElements(valid_elements) { - var ei, el, ai, al, yl, matches, element, attr, attrData, elementName, attrName, attrType, attributes, attributesOrder, - prefix, outputName, globalAttributes, globalAttributesOrder, transElement, key, childKey, value, - elementRuleRegExp = /^([#+\-])?([^\[\/]+)(?:\/([^\[]+))?(?:\[([^\]]+)\])?$/, - attrRuleRegExp = /^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/, - hasPatternsRegExp = /[*?+]/; - - if (valid_elements) { - // Split valid elements into an array with rules - valid_elements = split(valid_elements); - - if (elements['@']) { - globalAttributes = elements['@'].attributes; - globalAttributesOrder = elements['@'].attributesOrder; - } - - // Loop all rules - for (ei = 0, el = valid_elements.length; ei < el; ei++) { - // Parse element rule - matches = elementRuleRegExp.exec(valid_elements[ei]); - if (matches) { - // Setup local names for matches - prefix = matches[1]; - elementName = matches[2]; - outputName = matches[3]; - attrData = matches[4]; - - // Create new attributes and attributesOrder - attributes = {}; - attributesOrder = []; - - // Create the new element - element = { - attributes : attributes, - attributesOrder : attributesOrder - }; - - // Padd empty elements prefix - if (prefix === '#') - element.paddEmpty = true; - - // Remove empty elements prefix - if (prefix === '-') - element.removeEmpty = true; - - // Copy attributes from global rule into current rule - if (globalAttributes) { - for (key in globalAttributes) - attributes[key] = globalAttributes[key]; - - attributesOrder.push.apply(attributesOrder, globalAttributesOrder); - } - - // Attributes defined - if (attrData) { - attrData = split(attrData, '|'); - for (ai = 0, al = attrData.length; ai < al; ai++) { - matches = attrRuleRegExp.exec(attrData[ai]); - if (matches) { - attr = {}; - attrType = matches[1]; - attrName = matches[2].replace(/::/g, ':'); - prefix = matches[3]; - value = matches[4]; - - // Required - if (attrType === '!') { - element.attributesRequired = element.attributesRequired || []; - element.attributesRequired.push(attrName); - attr.required = true; - } - - // Denied from global - if (attrType === '-') { - delete attributes[attrName]; - attributesOrder.splice(tinymce.inArray(attributesOrder, attrName), 1); - continue; - } - - // Default value - if (prefix) { - // Default value - if (prefix === '=') { - element.attributesDefault = element.attributesDefault || []; - element.attributesDefault.push({name: attrName, value: value}); - attr.defaultValue = value; - } - - // Forced value - if (prefix === ':') { - element.attributesForced = element.attributesForced || []; - element.attributesForced.push({name: attrName, value: value}); - attr.forcedValue = value; - } - - // Required values - if (prefix === '<') - attr.validValues = makeMap(value, '?'); - } - - // Check for attribute patterns - if (hasPatternsRegExp.test(attrName)) { - element.attributePatterns = element.attributePatterns || []; - attr.pattern = patternToRegExp(attrName); - element.attributePatterns.push(attr); - } else { - // Add attribute to order list if it doesn't already exist - if (!attributes[attrName]) - attributesOrder.push(attrName); - - attributes[attrName] = attr; - } - } - } - } - - // Global rule, store away these for later usage - if (!globalAttributes && elementName == '@') { - globalAttributes = attributes; - globalAttributesOrder = attributesOrder; - } - - // Handle substitute elements such as b/strong - if (outputName) { - element.outputName = elementName; - elements[outputName] = element; - } - - // Add pattern or exact element - if (hasPatternsRegExp.test(elementName)) { - element.pattern = patternToRegExp(elementName); - patternElements.push(element); - } else - elements[elementName] = element; - } - } - } - }; - - function setValidElements(valid_elements) { - elements = {}; - patternElements = []; - - addValidElements(valid_elements); - - each(schemaItems, function(element, name) { - children[name] = element.children; - }); - }; - - // Adds custom non HTML elements to the schema - function addCustomElements(custom_elements) { - var customElementRegExp = /^(~)?(.+)$/; - - if (custom_elements) { - each(split(custom_elements), function(rule) { - var matches = customElementRegExp.exec(rule), - inline = matches[1] === '~', - cloneName = inline ? 'span' : 'div', - name = matches[2]; - - children[name] = children[cloneName]; - customElementsMap[name] = cloneName; - - // If it's not marked as inline then add it to valid block elements - if (!inline) { - blockElementsMap[name.toUpperCase()] = {}; - blockElementsMap[name] = {}; - } - - // Add elements clone if needed - if (!elements[name]) { - elements[name] = elements[cloneName]; - } - - // Add custom elements at span/div positions - each(children, function(element, child) { - if (element[cloneName]) - element[name] = element[cloneName]; - }); - }); - } - }; - - // Adds valid children to the schema object - function addValidChildren(valid_children) { - var childRuleRegExp = /^([+\-]?)(\w+)\[([^\]]+)\]$/; - - if (valid_children) { - each(split(valid_children), function(rule) { - var matches = childRuleRegExp.exec(rule), parent, prefix; - - if (matches) { - prefix = matches[1]; - - // Add/remove items from default - if (prefix) - parent = children[matches[2]]; - else - parent = children[matches[2]] = {'#comment' : {}}; - - parent = children[matches[2]]; - - each(split(matches[3], '|'), function(child) { - if (prefix === '-') - delete parent[child]; - else - parent[child] = {}; - }); - } - }); - } - }; - - function getElementRule(name) { - var element = elements[name], i; - - // Exact match found - if (element) - return element; - - // No exact match then try the patterns - i = patternElements.length; - while (i--) { - element = patternElements[i]; - - if (element.pattern.test(name)) - return element; - } - }; - - if (!settings.valid_elements) { - // No valid elements defined then clone the elements from the schema spec - each(schemaItems, function(element, name) { - elements[name] = { - attributes : element.attributes, - attributesOrder : element.attributesOrder - }; - - children[name] = element.children; - }); - - // Switch these on HTML4 - if (settings.schema != "html5") { - each(split('strong/b,em/i'), function(item) { - item = split(item, '/'); - elements[item[1]].outputName = item[0]; - }); - } - - // Add default alt attribute for images - elements.img.attributesDefault = [{name: 'alt', value: ''}]; - - // Remove these if they are empty by default - each(split('ol,ul,sub,sup,blockquote,span,font,a,table,tbody,tr,strong,em,b,i'), function(name) { - if (elements[name]) { - elements[name].removeEmpty = true; - } - }); - - // Padd these by default - each(split('p,h1,h2,h3,h4,h5,h6,th,td,pre,div,address,caption'), function(name) { - elements[name].paddEmpty = true; - }); - } else - setValidElements(settings.valid_elements); - - addCustomElements(settings.custom_elements); - addValidChildren(settings.valid_children); - addValidElements(settings.extended_valid_elements); - - // Todo: Remove this when we fix list handling to be valid - addValidChildren('+ol[ul|ol],+ul[ul|ol]'); - - // Delete invalid elements - if (settings.invalid_elements) { - tinymce.each(tinymce.explode(settings.invalid_elements), function(item) { - if (elements[item]) - delete elements[item]; - }); - } - - // If the user didn't allow span only allow internal spans - if (!getElementRule('span')) - addValidElements('span[!data-mce-type|*]'); - - self.children = children; - - self.styles = validStyles; - - self.getBoolAttrs = function() { - return boolAttrMap; - }; - - self.getBlockElements = function() { - return blockElementsMap; - }; - - self.getTextBlockElements = function() { - return textBlockElementsMap; - }; - - self.getShortEndedElements = function() { - return shortEndedElementsMap; - }; - - self.getSelfClosingElements = function() { - return selfClosingElementsMap; - }; - - self.getNonEmptyElements = function() { - return nonEmptyElementsMap; - }; - - self.getWhiteSpaceElements = function() { - return whiteSpaceElementsMap; - }; - - self.isValidChild = function(name, child) { - var parent = children[name]; - - return !!(parent && parent[child]); - }; - - self.isValid = function(name, attr) { - var attrPatterns, i, rule = getElementRule(name); - - // Check if it's a valid element - if (rule) { - if (attr) { - // Check if attribute name exists - if (rule.attributes[attr]) { - return true; - } - - // Check if attribute matches a regexp pattern - attrPatterns = rule.attributePatterns; - if (attrPatterns) { - i = attrPatterns.length; - while (i--) { - if (attrPatterns[i].pattern.test(name)) { - return true; - } - } - } - } else { - return true; - } - } - - // No match - return false; - }; - - self.getElementRule = getElementRule; - - self.getCustomElements = function() { - return customElementsMap; - }; - - self.addValidElements = addValidElements; - - self.setValidElements = setValidElements; - - self.addCustomElements = addCustomElements; - - self.addValidChildren = addValidChildren; - - self.elements = elements; - }; -})(tinymce); - -(function(tinymce) { - tinymce.html.SaxParser = function(settings, schema) { - var self = this, noop = function() {}; - - settings = settings || {}; - self.schema = schema = schema || new tinymce.html.Schema(); - - if (settings.fix_self_closing !== false) - settings.fix_self_closing = true; - - // Add handler functions from settings and setup default handlers - tinymce.each('comment cdata text start end pi doctype'.split(' '), function(name) { - if (name) - self[name] = settings[name] || noop; - }); - - self.parse = function(html) { - var self = this, matches, index = 0, value, endRegExp, stack = [], attrList, i, text, name, isInternalElement, removeInternalElements, - shortEndedElements, fillAttrsMap, isShortEnded, validate, elementRule, isValidElement, attr, attribsValue, invalidPrefixRegExp, - validAttributesMap, validAttributePatterns, attributesRequired, attributesDefault, attributesForced, selfClosing, - tokenRegExp, attrRegExp, specialElements, attrValue, idCount = 0, decode = tinymce.html.Entities.decode, fixSelfClosing, isIE; - - function processEndTag(name) { - var pos, i; - - // Find position of parent of the same type - pos = stack.length; - while (pos--) { - if (stack[pos].name === name) - break; - } - - // Found parent - if (pos >= 0) { - // Close all the open elements - for (i = stack.length - 1; i >= pos; i--) { - name = stack[i]; - - if (name.valid) - self.end(name.name); - } - - // Remove the open elements from the stack - stack.length = pos; - } - }; - - function parseAttribute(match, name, value, val2, val3) { - var attrRule, i; - - name = name.toLowerCase(); - value = name in fillAttrsMap ? name : decode(value || val2 || val3 || ''); // Handle boolean attribute than value attribute - - // Validate name and value - if (validate && !isInternalElement && name.indexOf('data-') !== 0) { - attrRule = validAttributesMap[name]; - - // Find rule by pattern matching - if (!attrRule && validAttributePatterns) { - i = validAttributePatterns.length; - while (i--) { - attrRule = validAttributePatterns[i]; - if (attrRule.pattern.test(name)) - break; - } - - // No rule matched - if (i === -1) - attrRule = null; - } - - // No attribute rule found - if (!attrRule) - return; - - // Validate value - if (attrRule.validValues && !(value in attrRule.validValues)) - return; - } - - // Add attribute to list and map - attrList.map[name] = value; - attrList.push({ - name: name, - value: value - }); - }; - - // Precompile RegExps and map objects - tokenRegExp = new RegExp('<(?:' + - '(?:!--([\\w\\W]*?)-->)|' + // Comment - '(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|' + // CDATA - '(?:!DOCTYPE([\\w\\W]*?)>)|' + // DOCTYPE - '(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|' + // PI - '(?:\\/([^>]+)>)|' + // End element - '(?:([A-Za-z0-9\\-\\:\\.]+)((?:\\s+[^"\'>]+(?:(?:"[^"]*")|(?:\'[^\']*\')|[^>]*))*|\\/|\\s+)>)' + // Start element - ')', 'g'); - - attrRegExp = /([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g; - specialElements = { - 'script' : /<\/script[^>]*>/gi, - 'style' : /<\/style[^>]*>/gi, - 'noscript' : /<\/noscript[^>]*>/gi - }; - - // Setup lookup tables for empty elements and boolean attributes - shortEndedElements = schema.getShortEndedElements(); - selfClosing = settings.self_closing_elements || schema.getSelfClosingElements(); - fillAttrsMap = schema.getBoolAttrs(); - validate = settings.validate; - removeInternalElements = settings.remove_internals; - fixSelfClosing = settings.fix_self_closing; - isIE = tinymce.isIE; - invalidPrefixRegExp = /^:/; - - while (matches = tokenRegExp.exec(html)) { - // Text - if (index < matches.index) - self.text(decode(html.substr(index, matches.index - index))); - - if (value = matches[6]) { // End element - value = value.toLowerCase(); - - // IE will add a ":" in front of elements it doesn't understand like custom elements or HTML5 elements - if (isIE && invalidPrefixRegExp.test(value)) - value = value.substr(1); - - processEndTag(value); - } else if (value = matches[7]) { // Start element - value = value.toLowerCase(); - - // IE will add a ":" in front of elements it doesn't understand like custom elements or HTML5 elements - if (isIE && invalidPrefixRegExp.test(value)) - value = value.substr(1); - - isShortEnded = value in shortEndedElements; - - // Is self closing tag for example an
  • after an open
  • - if (fixSelfClosing && selfClosing[value] && stack.length > 0 && stack[stack.length - 1].name === value) - processEndTag(value); - - // Validate element - if (!validate || (elementRule = schema.getElementRule(value))) { - isValidElement = true; - - // Grab attributes map and patters when validation is enabled - if (validate) { - validAttributesMap = elementRule.attributes; - validAttributePatterns = elementRule.attributePatterns; - } - - // Parse attributes - if (attribsValue = matches[8]) { - isInternalElement = attribsValue.indexOf('data-mce-type') !== -1; // Check if the element is an internal element - - // If the element has internal attributes then remove it if we are told to do so - if (isInternalElement && removeInternalElements) - isValidElement = false; - - attrList = []; - attrList.map = {}; - - attribsValue.replace(attrRegExp, parseAttribute); - } else { - attrList = []; - attrList.map = {}; - } - - // Process attributes if validation is enabled - if (validate && !isInternalElement) { - attributesRequired = elementRule.attributesRequired; - attributesDefault = elementRule.attributesDefault; - attributesForced = elementRule.attributesForced; - - // Handle forced attributes - if (attributesForced) { - i = attributesForced.length; - while (i--) { - attr = attributesForced[i]; - name = attr.name; - attrValue = attr.value; - - if (attrValue === '{$uid}') - attrValue = 'mce_' + idCount++; - - attrList.map[name] = attrValue; - attrList.push({name: name, value: attrValue}); - } - } - - // Handle default attributes - if (attributesDefault) { - i = attributesDefault.length; - while (i--) { - attr = attributesDefault[i]; - name = attr.name; - - if (!(name in attrList.map)) { - attrValue = attr.value; - - if (attrValue === '{$uid}') - attrValue = 'mce_' + idCount++; - - attrList.map[name] = attrValue; - attrList.push({name: name, value: attrValue}); - } - } - } - - // Handle required attributes - if (attributesRequired) { - i = attributesRequired.length; - while (i--) { - if (attributesRequired[i] in attrList.map) - break; - } - - // None of the required attributes where found - if (i === -1) - isValidElement = false; - } - - // Invalidate element if it's marked as bogus - if (attrList.map['data-mce-bogus']) - isValidElement = false; - } - - if (isValidElement) - self.start(value, attrList, isShortEnded); - } else - isValidElement = false; - - // Treat script, noscript and style a bit different since they may include code that looks like elements - if (endRegExp = specialElements[value]) { - endRegExp.lastIndex = index = matches.index + matches[0].length; - - if (matches = endRegExp.exec(html)) { - if (isValidElement) - text = html.substr(index, matches.index - index); - - index = matches.index + matches[0].length; - } else { - text = html.substr(index); - index = html.length; - } - - if (isValidElement && text.length > 0) - self.text(text, true); - - if (isValidElement) - self.end(value); - - tokenRegExp.lastIndex = index; - continue; - } - - // Push value on to stack - if (!isShortEnded) { - if (!attribsValue || attribsValue.indexOf('/') != attribsValue.length - 1) - stack.push({name: value, valid: isValidElement}); - else if (isValidElement) - self.end(value); - } - } else if (value = matches[1]) { // Comment - self.comment(value); - } else if (value = matches[2]) { // CDATA - self.cdata(value); - } else if (value = matches[3]) { // DOCTYPE - self.doctype(value); - } else if (value = matches[4]) { // PI - self.pi(value, matches[5]); - } - - index = matches.index + matches[0].length; - } - - // Text - if (index < html.length) - self.text(decode(html.substr(index))); - - // Close any open elements - for (i = stack.length - 1; i >= 0; i--) { - value = stack[i]; - - if (value.valid) - self.end(value.name); - } - }; - } -})(tinymce); - -(function(tinymce) { - var whiteSpaceRegExp = /^[ \t\r\n]*$/, typeLookup = { - '#text' : 3, - '#comment' : 8, - '#cdata' : 4, - '#pi' : 7, - '#doctype' : 10, - '#document-fragment' : 11 - }; - - // Walks the tree left/right - function walk(node, root_node, prev) { - var sibling, parent, startName = prev ? 'lastChild' : 'firstChild', siblingName = prev ? 'prev' : 'next'; - - // Walk into nodes if it has a start - if (node[startName]) - return node[startName]; - - // Return the sibling if it has one - if (node !== root_node) { - sibling = node[siblingName]; - - if (sibling) - return sibling; - - // Walk up the parents to look for siblings - for (parent = node.parent; parent && parent !== root_node; parent = parent.parent) { - sibling = parent[siblingName]; - - if (sibling) - return sibling; - } - } - }; - - function Node(name, type) { - this.name = name; - this.type = type; - - if (type === 1) { - this.attributes = []; - this.attributes.map = {}; - } - } - - tinymce.extend(Node.prototype, { - replace : function(node) { - var self = this; - - if (node.parent) - node.remove(); - - self.insert(node, self); - self.remove(); - - return self; - }, - - attr : function(name, value) { - var self = this, attrs, i, undef; - - if (typeof name !== "string") { - for (i in name) - self.attr(i, name[i]); - - return self; - } - - if (attrs = self.attributes) { - if (value !== undef) { - // Remove attribute - if (value === null) { - if (name in attrs.map) { - delete attrs.map[name]; - - i = attrs.length; - while (i--) { - if (attrs[i].name === name) { - attrs = attrs.splice(i, 1); - return self; - } - } - } - - return self; - } - - // Set attribute - if (name in attrs.map) { - // Set attribute - i = attrs.length; - while (i--) { - if (attrs[i].name === name) { - attrs[i].value = value; - break; - } - } - } else - attrs.push({name: name, value: value}); - - attrs.map[name] = value; - - return self; - } else { - return attrs.map[name]; - } - } - }, - - clone : function() { - var self = this, clone = new Node(self.name, self.type), i, l, selfAttrs, selfAttr, cloneAttrs; - - // Clone element attributes - if (selfAttrs = self.attributes) { - cloneAttrs = []; - cloneAttrs.map = {}; - - for (i = 0, l = selfAttrs.length; i < l; i++) { - selfAttr = selfAttrs[i]; - - // Clone everything except id - if (selfAttr.name !== 'id') { - cloneAttrs[cloneAttrs.length] = {name: selfAttr.name, value: selfAttr.value}; - cloneAttrs.map[selfAttr.name] = selfAttr.value; - } - } - - clone.attributes = cloneAttrs; - } - - clone.value = self.value; - clone.shortEnded = self.shortEnded; - - return clone; - }, - - wrap : function(wrapper) { - var self = this; - - self.parent.insert(wrapper, self); - wrapper.append(self); - - return self; - }, - - unwrap : function() { - var self = this, node, next; - - for (node = self.firstChild; node; ) { - next = node.next; - self.insert(node, self, true); - node = next; - } - - self.remove(); - }, - - remove : function() { - var self = this, parent = self.parent, next = self.next, prev = self.prev; - - if (parent) { - if (parent.firstChild === self) { - parent.firstChild = next; - - if (next) - next.prev = null; - } else { - prev.next = next; - } - - if (parent.lastChild === self) { - parent.lastChild = prev; - - if (prev) - prev.next = null; - } else { - next.prev = prev; - } - - self.parent = self.next = self.prev = null; - } - - return self; - }, - - append : function(node) { - var self = this, last; - - if (node.parent) - node.remove(); - - last = self.lastChild; - if (last) { - last.next = node; - node.prev = last; - self.lastChild = node; - } else - self.lastChild = self.firstChild = node; - - node.parent = self; - - return node; - }, - - insert : function(node, ref_node, before) { - var parent; - - if (node.parent) - node.remove(); - - parent = ref_node.parent || this; - - if (before) { - if (ref_node === parent.firstChild) - parent.firstChild = node; - else - ref_node.prev.next = node; - - node.prev = ref_node.prev; - node.next = ref_node; - ref_node.prev = node; - } else { - if (ref_node === parent.lastChild) - parent.lastChild = node; - else - ref_node.next.prev = node; - - node.next = ref_node.next; - node.prev = ref_node; - ref_node.next = node; - } - - node.parent = parent; - - return node; - }, - - getAll : function(name) { - var self = this, node, collection = []; - - for (node = self.firstChild; node; node = walk(node, self)) { - if (node.name === name) - collection.push(node); - } - - return collection; - }, - - empty : function() { - var self = this, nodes, i, node; - - // Remove all children - if (self.firstChild) { - nodes = []; - - // Collect the children - for (node = self.firstChild; node; node = walk(node, self)) - nodes.push(node); - - // Remove the children - i = nodes.length; - while (i--) { - node = nodes[i]; - node.parent = node.firstChild = node.lastChild = node.next = node.prev = null; - } - } - - self.firstChild = self.lastChild = null; - - return self; - }, - - isEmpty : function(elements) { - var self = this, node = self.firstChild, i, name; - - if (node) { - do { - if (node.type === 1) { - // Ignore bogus elements - if (node.attributes.map['data-mce-bogus']) - continue; - - // Keep empty elements like - if (elements[node.name]) - return false; - - // Keep elements with data attributes or name attribute like - i = node.attributes.length; - while (i--) { - name = node.attributes[i].name; - if (name === "name" || name.indexOf('data-mce-') === 0) - return false; - } - } - - // Keep comments - if (node.type === 8) - return false; - - // Keep non whitespace text nodes - if ((node.type === 3 && !whiteSpaceRegExp.test(node.value))) - return false; - } while (node = walk(node, self)); - } - - return true; - }, - - walk : function(prev) { - return walk(this, null, prev); - } - }); - - tinymce.extend(Node, { - create : function(name, attrs) { - var node, attrName; - - // Create node - node = new Node(name, typeLookup[name] || 1); - - // Add attributes if needed - if (attrs) { - for (attrName in attrs) - node.attr(attrName, attrs[attrName]); - } - - return node; - } - }); - - tinymce.html.Node = Node; -})(tinymce); - -(function(tinymce) { - var Node = tinymce.html.Node; - - tinymce.html.DomParser = function(settings, schema) { - var self = this, nodeFilters = {}, attributeFilters = [], matchedNodes = {}, matchedAttributes = {}; - - settings = settings || {}; - settings.validate = "validate" in settings ? settings.validate : true; - settings.root_name = settings.root_name || 'body'; - self.schema = schema = schema || new tinymce.html.Schema(); - - function fixInvalidChildren(nodes) { - var ni, node, parent, parents, newParent, currentNode, tempNode, childNode, i, - childClone, nonEmptyElements, nonSplitableElements, textBlockElements, sibling, nextNode; - - nonSplitableElements = tinymce.makeMap('tr,td,th,tbody,thead,tfoot,table'); - nonEmptyElements = schema.getNonEmptyElements(); - textBlockElements = schema.getTextBlockElements(); - - for (ni = 0; ni < nodes.length; ni++) { - node = nodes[ni]; - - // Already removed or fixed - if (!node.parent || node.fixed) - continue; - - // If the invalid element is a text block and the text block is within a parent LI element - // Then unwrap the first text block and convert other sibling text blocks to LI elements similar to Word/Open Office - if (textBlockElements[node.name] && node.parent.name == 'li') { - // Move sibling text blocks after LI element - sibling = node.next; - while (sibling) { - if (textBlockElements[sibling.name]) { - sibling.name = 'li'; - sibling.fixed = true; - node.parent.insert(sibling, node.parent); - } else { - break; - } - - sibling = sibling.next; - } - - // Unwrap current text block - node.unwrap(node); - continue; - } - - // Get list of all parent nodes until we find a valid parent to stick the child into - parents = [node]; - for (parent = node.parent; parent && !schema.isValidChild(parent.name, node.name) && !nonSplitableElements[parent.name]; parent = parent.parent) - parents.push(parent); - - // Found a suitable parent - if (parent && parents.length > 1) { - // Reverse the array since it makes looping easier - parents.reverse(); - - // Clone the related parent and insert that after the moved node - newParent = currentNode = self.filterNode(parents[0].clone()); - - // Start cloning and moving children on the left side of the target node - for (i = 0; i < parents.length - 1; i++) { - if (schema.isValidChild(currentNode.name, parents[i].name)) { - tempNode = self.filterNode(parents[i].clone()); - currentNode.append(tempNode); - } else - tempNode = currentNode; - - for (childNode = parents[i].firstChild; childNode && childNode != parents[i + 1]; ) { - nextNode = childNode.next; - tempNode.append(childNode); - childNode = nextNode; - } - - currentNode = tempNode; - } - - if (!newParent.isEmpty(nonEmptyElements)) { - parent.insert(newParent, parents[0], true); - parent.insert(node, newParent); - } else { - parent.insert(node, parents[0], true); - } - - // Check if the element is empty by looking through it's contents and special treatment for


    - parent = parents[0]; - if (parent.isEmpty(nonEmptyElements) || parent.firstChild === parent.lastChild && parent.firstChild.name === 'br') { - parent.empty().remove(); - } - } else if (node.parent) { - // If it's an LI try to find a UL/OL for it or wrap it - if (node.name === 'li') { - sibling = node.prev; - if (sibling && (sibling.name === 'ul' || sibling.name === 'ul')) { - sibling.append(node); - continue; - } - - sibling = node.next; - if (sibling && (sibling.name === 'ul' || sibling.name === 'ul')) { - sibling.insert(node, sibling.firstChild, true); - continue; - } - - node.wrap(self.filterNode(new Node('ul', 1))); - continue; - } - - // Try wrapping the element in a DIV - if (schema.isValidChild(node.parent.name, 'div') && schema.isValidChild('div', node.name)) { - node.wrap(self.filterNode(new Node('div', 1))); - } else { - // We failed wrapping it, then remove or unwrap it - if (node.name === 'style' || node.name === 'script') - node.empty().remove(); - else - node.unwrap(); - } - } - } - }; - - self.filterNode = function(node) { - var i, name, list; - - // Run element filters - if (name in nodeFilters) { - list = matchedNodes[name]; - - if (list) - list.push(node); - else - matchedNodes[name] = [node]; - } - - // Run attribute filters - i = attributeFilters.length; - while (i--) { - name = attributeFilters[i].name; - - if (name in node.attributes.map) { - list = matchedAttributes[name]; - - if (list) - list.push(node); - else - matchedAttributes[name] = [node]; - } - } - - return node; - }; - - self.addNodeFilter = function(name, callback) { - tinymce.each(tinymce.explode(name), function(name) { - var list = nodeFilters[name]; - - if (!list) - nodeFilters[name] = list = []; - - list.push(callback); - }); - }; - - self.addAttributeFilter = function(name, callback) { - tinymce.each(tinymce.explode(name), function(name) { - var i; - - for (i = 0; i < attributeFilters.length; i++) { - if (attributeFilters[i].name === name) { - attributeFilters[i].callbacks.push(callback); - return; - } - } - - attributeFilters.push({name: name, callbacks: [callback]}); - }); - }; - - self.parse = function(html, args) { - var parser, rootNode, node, nodes, i, l, fi, fl, list, name, validate, - blockElements, startWhiteSpaceRegExp, invalidChildren = [], isInWhiteSpacePreservedElement, - endWhiteSpaceRegExp, allWhiteSpaceRegExp, isAllWhiteSpaceRegExp, whiteSpaceElements, children, nonEmptyElements, rootBlockName; - - args = args || {}; - matchedNodes = {}; - matchedAttributes = {}; - blockElements = tinymce.extend(tinymce.makeMap('script,style,head,html,body,title,meta,param'), schema.getBlockElements()); - nonEmptyElements = schema.getNonEmptyElements(); - children = schema.children; - validate = settings.validate; - rootBlockName = "forced_root_block" in args ? args.forced_root_block : settings.forced_root_block; - - whiteSpaceElements = schema.getWhiteSpaceElements(); - startWhiteSpaceRegExp = /^[ \t\r\n]+/; - endWhiteSpaceRegExp = /[ \t\r\n]+$/; - allWhiteSpaceRegExp = /[ \t\r\n]+/g; - isAllWhiteSpaceRegExp = /^[ \t\r\n]+$/; - - function addRootBlocks() { - var node = rootNode.firstChild, next, rootBlockNode; - - while (node) { - next = node.next; - - if (node.type == 3 || (node.type == 1 && node.name !== 'p' && !blockElements[node.name] && !node.attr('data-mce-type'))) { - if (!rootBlockNode) { - // Create a new root block element - rootBlockNode = createNode(rootBlockName, 1); - rootNode.insert(rootBlockNode, node); - rootBlockNode.append(node); - } else - rootBlockNode.append(node); - } else { - rootBlockNode = null; - } - - node = next; - }; - }; - - function createNode(name, type) { - var node = new Node(name, type), list; - - if (name in nodeFilters) { - list = matchedNodes[name]; - - if (list) - list.push(node); - else - matchedNodes[name] = [node]; - } - - return node; - }; - - function removeWhitespaceBefore(node) { - var textNode, textVal, sibling; - - for (textNode = node.prev; textNode && textNode.type === 3; ) { - textVal = textNode.value.replace(endWhiteSpaceRegExp, ''); - - if (textVal.length > 0) { - textNode.value = textVal; - textNode = textNode.prev; - } else { - sibling = textNode.prev; - textNode.remove(); - textNode = sibling; - } - } - }; - - function cloneAndExcludeBlocks(input) { - var name, output = {}; - - for (name in input) { - if (name !== 'li' && name != 'p') { - output[name] = input[name]; - } - } - - return output; - }; - - parser = new tinymce.html.SaxParser({ - validate : validate, - - // Exclude P and LI from DOM parsing since it's treated better by the DOM parser - self_closing_elements: cloneAndExcludeBlocks(schema.getSelfClosingElements()), - - cdata: function(text) { - node.append(createNode('#cdata', 4)).value = text; - }, - - text: function(text, raw) { - var textNode; - - // Trim all redundant whitespace on non white space elements - if (!isInWhiteSpacePreservedElement) { - text = text.replace(allWhiteSpaceRegExp, ' '); - - if (node.lastChild && blockElements[node.lastChild.name]) - text = text.replace(startWhiteSpaceRegExp, ''); - } - - // Do we need to create the node - if (text.length !== 0) { - textNode = createNode('#text', 3); - textNode.raw = !!raw; - node.append(textNode).value = text; - } - }, - - comment: function(text) { - node.append(createNode('#comment', 8)).value = text; - }, - - pi: function(name, text) { - node.append(createNode(name, 7)).value = text; - removeWhitespaceBefore(node); - }, - - doctype: function(text) { - var newNode; - - newNode = node.append(createNode('#doctype', 10)); - newNode.value = text; - removeWhitespaceBefore(node); - }, - - start: function(name, attrs, empty) { - var newNode, attrFiltersLen, elementRule, textNode, attrName, text, sibling, parent; - - elementRule = validate ? schema.getElementRule(name) : {}; - if (elementRule) { - newNode = createNode(elementRule.outputName || name, 1); - newNode.attributes = attrs; - newNode.shortEnded = empty; - - node.append(newNode); - - // Check if node is valid child of the parent node is the child is - // unknown we don't collect it since it's probably a custom element - parent = children[node.name]; - if (parent && children[newNode.name] && !parent[newNode.name]) - invalidChildren.push(newNode); - - attrFiltersLen = attributeFilters.length; - while (attrFiltersLen--) { - attrName = attributeFilters[attrFiltersLen].name; - - if (attrName in attrs.map) { - list = matchedAttributes[attrName]; - - if (list) - list.push(newNode); - else - matchedAttributes[attrName] = [newNode]; - } - } - - // Trim whitespace before block - if (blockElements[name]) - removeWhitespaceBefore(newNode); - - // Change current node if the element wasn't empty i.e not
    or - if (!empty) - node = newNode; - - // Check if we are inside a whitespace preserved element - if (!isInWhiteSpacePreservedElement && whiteSpaceElements[name]) { - isInWhiteSpacePreservedElement = true; - } - } - }, - - end: function(name) { - var textNode, elementRule, text, sibling, tempNode; - - elementRule = validate ? schema.getElementRule(name) : {}; - if (elementRule) { - if (blockElements[name]) { - if (!isInWhiteSpacePreservedElement) { - // Trim whitespace of the first node in a block - textNode = node.firstChild; - if (textNode && textNode.type === 3) { - text = textNode.value.replace(startWhiteSpaceRegExp, ''); - - // Any characters left after trim or should we remove it - if (text.length > 0) { - textNode.value = text; - textNode = textNode.next; - } else { - sibling = textNode.next; - textNode.remove(); - textNode = sibling; - } - - // Remove any pure whitespace siblings - while (textNode && textNode.type === 3) { - text = textNode.value; - sibling = textNode.next; - - if (text.length === 0 || isAllWhiteSpaceRegExp.test(text)) { - textNode.remove(); - textNode = sibling; - } - - textNode = sibling; - } - } - - // Trim whitespace of the last node in a block - textNode = node.lastChild; - if (textNode && textNode.type === 3) { - text = textNode.value.replace(endWhiteSpaceRegExp, ''); - - // Any characters left after trim or should we remove it - if (text.length > 0) { - textNode.value = text; - textNode = textNode.prev; - } else { - sibling = textNode.prev; - textNode.remove(); - textNode = sibling; - } - - // Remove any pure whitespace siblings - while (textNode && textNode.type === 3) { - text = textNode.value; - sibling = textNode.prev; - - if (text.length === 0 || isAllWhiteSpaceRegExp.test(text)) { - textNode.remove(); - textNode = sibling; - } - - textNode = sibling; - } - } - } - - // Trim start white space - // Removed due to: #5424 - /*textNode = node.prev; - if (textNode && textNode.type === 3) { - text = textNode.value.replace(startWhiteSpaceRegExp, ''); - - if (text.length > 0) - textNode.value = text; - else - textNode.remove(); - }*/ - } - - // Check if we exited a whitespace preserved element - if (isInWhiteSpacePreservedElement && whiteSpaceElements[name]) { - isInWhiteSpacePreservedElement = false; - } - - // Handle empty nodes - if (elementRule.removeEmpty || elementRule.paddEmpty) { - if (node.isEmpty(nonEmptyElements)) { - if (elementRule.paddEmpty) - node.empty().append(new Node('#text', '3')).value = '\u00a0'; - else { - // Leave nodes that have a name like - if (!node.attributes.map.name && !node.attributes.map.id) { - tempNode = node.parent; - node.empty().remove(); - node = tempNode; - return; - } - } - } - } - - node = node.parent; - } - } - }, schema); - - rootNode = node = new Node(args.context || settings.root_name, 11); - - parser.parse(html); - - // Fix invalid children or report invalid children in a contextual parsing - if (validate && invalidChildren.length) { - if (!args.context) - fixInvalidChildren(invalidChildren); - else - args.invalid = true; - } - - // Wrap nodes in the root into block elements if the root is body - if (rootBlockName && rootNode.name == 'body') - addRootBlocks(); - - // Run filters only when the contents is valid - if (!args.invalid) { - // Run node filters - for (name in matchedNodes) { - list = nodeFilters[name]; - nodes = matchedNodes[name]; - - // Remove already removed children - fi = nodes.length; - while (fi--) { - if (!nodes[fi].parent) - nodes.splice(fi, 1); - } - - for (i = 0, l = list.length; i < l; i++) - list[i](nodes, name, args); - } - - // Run attribute filters - for (i = 0, l = attributeFilters.length; i < l; i++) { - list = attributeFilters[i]; - - if (list.name in matchedAttributes) { - nodes = matchedAttributes[list.name]; - - // Remove already removed children - fi = nodes.length; - while (fi--) { - if (!nodes[fi].parent) - nodes.splice(fi, 1); - } - - for (fi = 0, fl = list.callbacks.length; fi < fl; fi++) - list.callbacks[fi](nodes, list.name, args); - } - } - } - - return rootNode; - }; - - // Remove
    at end of block elements Gecko and WebKit injects BR elements to - // make it possible to place the caret inside empty blocks. This logic tries to remove - // these elements and keep br elements that where intended to be there intact - if (settings.remove_trailing_brs) { - self.addNodeFilter('br', function(nodes, name) { - var i, l = nodes.length, node, blockElements = tinymce.extend({}, schema.getBlockElements()), - nonEmptyElements = schema.getNonEmptyElements(), parent, lastParent, prev, prevName; - - // Remove brs from body element as well - blockElements.body = 1; - - // Must loop forwards since it will otherwise remove all brs in

    a


    - for (i = 0; i < l; i++) { - node = nodes[i]; - parent = node.parent; - - if (blockElements[node.parent.name] && node === parent.lastChild) { - // Loop all nodes to the left of the current node and check for other BR elements - // excluding bookmarks since they are invisible - prev = node.prev; - while (prev) { - prevName = prev.name; - - // Ignore bookmarks - if (prevName !== "span" || prev.attr('data-mce-type') !== 'bookmark') { - // Found a non BR element - if (prevName !== "br") - break; - - // Found another br it's a

    structure then don't remove anything - if (prevName === 'br') { - node = null; - break; - } - } - - prev = prev.prev; - } - - if (node) { - node.remove(); - - // Is the parent to be considered empty after we removed the BR - if (parent.isEmpty(nonEmptyElements)) { - elementRule = schema.getElementRule(parent.name); - - // Remove or padd the element depending on schema rule - if (elementRule) { - if (elementRule.removeEmpty) - parent.remove(); - else if (elementRule.paddEmpty) - parent.empty().append(new tinymce.html.Node('#text', 3)).value = '\u00a0'; - } - } - } - } else { - // Replaces BR elements inside inline elements like


    so they become

     

    - lastParent = node; - while (parent.firstChild === lastParent && parent.lastChild === lastParent) { - lastParent = parent; - - if (blockElements[parent.name]) { - break; - } - - parent = parent.parent; - } - - if (lastParent === parent) { - textNode = new tinymce.html.Node('#text', 3); - textNode.value = '\u00a0'; - node.replace(textNode); - } - } - } - }); - } - - // Force anchor names closed, unless the setting "allow_html_in_named_anchor" is explicitly included. - if (!settings.allow_html_in_named_anchor) { - self.addAttributeFilter('id,name', function(nodes, name) { - var i = nodes.length, sibling, prevSibling, parent, node; - - while (i--) { - node = nodes[i]; - if (node.name === 'a' && node.firstChild && !node.attr('href')) { - parent = node.parent; - - // Move children after current node - sibling = node.lastChild; - do { - prevSibling = sibling.prev; - parent.insert(sibling, node); - sibling = prevSibling; - } while (sibling); - } - } - }); - } - } -})(tinymce); - -tinymce.html.Writer = function(settings) { - var html = [], indent, indentBefore, indentAfter, encode, htmlOutput; - - settings = settings || {}; - indent = settings.indent; - indentBefore = tinymce.makeMap(settings.indent_before || ''); - indentAfter = tinymce.makeMap(settings.indent_after || ''); - encode = tinymce.html.Entities.getEncodeFunc(settings.entity_encoding || 'raw', settings.entities); - htmlOutput = settings.element_format == "html"; - - return { - start: function(name, attrs, empty) { - var i, l, attr, value; - - if (indent && indentBefore[name] && html.length > 0) { - value = html[html.length - 1]; - - if (value.length > 0 && value !== '\n') - html.push('\n'); - } - - html.push('<', name); - - if (attrs) { - for (i = 0, l = attrs.length; i < l; i++) { - attr = attrs[i]; - html.push(' ', attr.name, '="', encode(attr.value, true), '"'); - } - } - - if (!empty || htmlOutput) - html[html.length] = '>'; - else - html[html.length] = ' />'; - - if (empty && indent && indentAfter[name] && html.length > 0) { - value = html[html.length - 1]; - - if (value.length > 0 && value !== '\n') - html.push('\n'); - } - }, - - end: function(name) { - var value; - - /*if (indent && indentBefore[name] && html.length > 0) { - value = html[html.length - 1]; - - if (value.length > 0 && value !== '\n') - html.push('\n'); - }*/ - - html.push(''); - - if (indent && indentAfter[name] && html.length > 0) { - value = html[html.length - 1]; - - if (value.length > 0 && value !== '\n') - html.push('\n'); - } - }, - - text: function(text, raw) { - if (text.length > 0) - html[html.length] = raw ? text : encode(text); - }, - - cdata: function(text) { - html.push(''); - }, - - comment: function(text) { - html.push(''); - }, - - pi: function(name, text) { - if (text) - html.push(''); - else - html.push(''); - - if (indent) - html.push('\n'); - }, - - doctype: function(text) { - html.push('', indent ? '\n' : ''); - }, - - reset: function() { - html.length = 0; - }, - - getContent: function() { - return html.join('').replace(/\n$/, ''); - } - }; -}; - -(function(tinymce) { - tinymce.html.Serializer = function(settings, schema) { - var self = this, writer = new tinymce.html.Writer(settings); - - settings = settings || {}; - settings.validate = "validate" in settings ? settings.validate : true; - - self.schema = schema = schema || new tinymce.html.Schema(); - self.writer = writer; - - self.serialize = function(node) { - var handlers, validate; - - validate = settings.validate; - - handlers = { - // #text - 3: function(node, raw) { - writer.text(node.value, node.raw); - }, - - // #comment - 8: function(node) { - writer.comment(node.value); - }, - - // Processing instruction - 7: function(node) { - writer.pi(node.name, node.value); - }, - - // Doctype - 10: function(node) { - writer.doctype(node.value); - }, - - // CDATA - 4: function(node) { - writer.cdata(node.value); - }, - - // Document fragment - 11: function(node) { - if ((node = node.firstChild)) { - do { - walk(node); - } while (node = node.next); - } - } - }; - - writer.reset(); - - function walk(node) { - var handler = handlers[node.type], name, isEmpty, attrs, attrName, attrValue, sortedAttrs, i, l, elementRule; - - if (!handler) { - name = node.name; - isEmpty = node.shortEnded; - attrs = node.attributes; - - // Sort attributes - if (validate && attrs && attrs.length > 1) { - sortedAttrs = []; - sortedAttrs.map = {}; - - elementRule = schema.getElementRule(node.name); - for (i = 0, l = elementRule.attributesOrder.length; i < l; i++) { - attrName = elementRule.attributesOrder[i]; - - if (attrName in attrs.map) { - attrValue = attrs.map[attrName]; - sortedAttrs.map[attrName] = attrValue; - sortedAttrs.push({name: attrName, value: attrValue}); - } - } - - for (i = 0, l = attrs.length; i < l; i++) { - attrName = attrs[i].name; - - if (!(attrName in sortedAttrs.map)) { - attrValue = attrs.map[attrName]; - sortedAttrs.map[attrName] = attrValue; - sortedAttrs.push({name: attrName, value: attrValue}); - } - } - - attrs = sortedAttrs; - } - - writer.start(node.name, attrs, isEmpty); - - if (!isEmpty) { - if ((node = node.firstChild)) { - do { - walk(node); - } while (node = node.next); - } - - writer.end(name); - } - } else - handler(node); - } - - // Serialize element and treat all non elements as fragments - if (node.type == 1 && !settings.inner) - walk(node); - else - handlers[11](node); - - return writer.getContent(); - }; - } -})(tinymce); - -// JSLint defined globals -/*global tinymce:false, window:false */ - -tinymce.dom = {}; - -(function(namespace, expando) { - var w3cEventModel = !!document.addEventListener; - - function addEvent(target, name, callback, capture) { - if (target.addEventListener) { - target.addEventListener(name, callback, capture || false); - } else if (target.attachEvent) { - target.attachEvent('on' + name, callback); - } - } - - function removeEvent(target, name, callback, capture) { - if (target.removeEventListener) { - target.removeEventListener(name, callback, capture || false); - } else if (target.detachEvent) { - target.detachEvent('on' + name, callback); - } - } - - function fix(original_event, data) { - var name, event = data || {}; - - // Dummy function that gets replaced on the delegation state functions - function returnFalse() { - return false; - } - - // Dummy function that gets replaced on the delegation state functions - function returnTrue() { - return true; - } - - // Copy all properties from the original event - for (name in original_event) { - // layerX/layerY is deprecated in Chrome and produces a warning - if (name !== "layerX" && name !== "layerY") { - event[name] = original_event[name]; - } - } - - // Normalize target IE uses srcElement - if (!event.target) { - event.target = event.srcElement || document; - } - - // Add preventDefault method - event.preventDefault = function() { - event.isDefaultPrevented = returnTrue; - - // Execute preventDefault on the original event object - if (original_event) { - if (original_event.preventDefault) { - original_event.preventDefault(); - } else { - original_event.returnValue = false; // IE - } - } - }; - - // Add stopPropagation - event.stopPropagation = function() { - event.isPropagationStopped = returnTrue; - - // Execute stopPropagation on the original event object - if (original_event) { - if (original_event.stopPropagation) { - original_event.stopPropagation(); - } else { - original_event.cancelBubble = true; // IE - } - } - }; - - // Add stopImmediatePropagation - event.stopImmediatePropagation = function() { - event.isImmediatePropagationStopped = returnTrue; - event.stopPropagation(); - }; - - // Add event delegation states - if (!event.isDefaultPrevented) { - event.isDefaultPrevented = returnFalse; - event.isPropagationStopped = returnFalse; - event.isImmediatePropagationStopped = returnFalse; - } - - return event; - } - - function bindOnReady(win, callback, event_utils) { - var doc = win.document, event = {type: 'ready'}; - - // Gets called when the DOM is ready - function readyHandler() { - if (!event_utils.domLoaded) { - event_utils.domLoaded = true; - callback(event); - } - } - - // Page already loaded then fire it directly - if (doc.readyState == "complete") { - readyHandler(); - return; - } - - // Use W3C method - if (w3cEventModel) { - addEvent(win, 'DOMContentLoaded', readyHandler); - } else { - // Use IE method - addEvent(doc, "readystatechange", function() { - if (doc.readyState === "complete") { - removeEvent(doc, "readystatechange", arguments.callee); - readyHandler(); - } - }); - - // Wait until we can scroll, when we can the DOM is initialized - if (doc.documentElement.doScroll && win === win.top) { - (function() { - try { - // If IE is used, use the trick by Diego Perini licensed under MIT by request to the author. - // http://javascript.nwbox.com/IEContentLoaded/ - doc.documentElement.doScroll("left"); - } catch (ex) { - setTimeout(arguments.callee, 0); - return; - } - - readyHandler(); - })(); - } - } - - // Fallback if any of the above methods should fail for some odd reason - addEvent(win, 'load', readyHandler); - } - - function EventUtils(proxy) { - var self = this, events = {}, count, isFocusBlurBound, hasFocusIn, hasMouseEnterLeave, mouseEnterLeave; - - hasMouseEnterLeave = "onmouseenter" in document.documentElement; - hasFocusIn = "onfocusin" in document.documentElement; - mouseEnterLeave = {mouseenter: 'mouseover', mouseleave: 'mouseout'}; - count = 1; - - // State if the DOMContentLoaded was executed or not - self.domLoaded = false; - self.events = events; - - function executeHandlers(evt, id) { - var callbackList, i, l, callback; - - callbackList = events[id][evt.type]; - if (callbackList) { - for (i = 0, l = callbackList.length; i < l; i++) { - callback = callbackList[i]; - - // Check if callback exists might be removed if a unbind is called inside the callback - if (callback && callback.func.call(callback.scope, evt) === false) { - evt.preventDefault(); - } - - // Should we stop propagation to immediate listeners - if (evt.isImmediatePropagationStopped()) { - return; - } - } - } - } - - self.bind = function(target, names, callback, scope) { - var id, callbackList, i, name, fakeName, nativeHandler, capture, win = window; - - // Native event handler function patches the event and executes the callbacks for the expando - function defaultNativeHandler(evt) { - executeHandlers(fix(evt || win.event), id); - } - - // Don't bind to text nodes or comments - if (!target || target.nodeType === 3 || target.nodeType === 8) { - return; - } - - // Create or get events id for the target - if (!target[expando]) { - id = count++; - target[expando] = id; - events[id] = {}; - } else { - id = target[expando]; - - if (!events[id]) { - events[id] = {}; - } - } - - // Setup the specified scope or use the target as a default - scope = scope || target; - - // Split names and bind each event, enables you to bind multiple events with one call - names = names.split(' '); - i = names.length; - while (i--) { - name = names[i]; - nativeHandler = defaultNativeHandler; - fakeName = capture = false; - - // Use ready instead of DOMContentLoaded - if (name === "DOMContentLoaded") { - name = "ready"; - } - - // DOM is already ready - if ((self.domLoaded || target.readyState == 'complete') && name === "ready") { - self.domLoaded = true; - callback.call(scope, fix({type: name})); - continue; - } - - // Handle mouseenter/mouseleaver - if (!hasMouseEnterLeave) { - fakeName = mouseEnterLeave[name]; - - if (fakeName) { - nativeHandler = function(evt) { - var current, related; - - current = evt.currentTarget; - related = evt.relatedTarget; - - // Check if related is inside the current target if it's not then the event should be ignored since it's a mouseover/mouseout inside the element - if (related && current.contains) { - // Use contains for performance - related = current.contains(related); - } else { - while (related && related !== current) { - related = related.parentNode; - } - } - - // Fire fake event - if (!related) { - evt = fix(evt || win.event); - evt.type = evt.type === 'mouseout' ? 'mouseleave' : 'mouseenter'; - evt.target = current; - executeHandlers(evt, id); - } - }; - } - } - - // Fake bubbeling of focusin/focusout - if (!hasFocusIn && (name === "focusin" || name === "focusout")) { - capture = true; - fakeName = name === "focusin" ? "focus" : "blur"; - nativeHandler = function(evt) { - evt = fix(evt || win.event); - evt.type = evt.type === 'focus' ? 'focusin' : 'focusout'; - executeHandlers(evt, id); - }; - } - - // Setup callback list and bind native event - callbackList = events[id][name]; - if (!callbackList) { - events[id][name] = callbackList = [{func: callback, scope: scope}]; - callbackList.fakeName = fakeName; - callbackList.capture = capture; - - // Add the nativeHandler to the callback list so that we can later unbind it - callbackList.nativeHandler = nativeHandler; - if (!w3cEventModel) { - callbackList.proxyHandler = proxy(id); - } - - // Check if the target has native events support - if (name === "ready") { - bindOnReady(target, nativeHandler, self); - } else { - addEvent(target, fakeName || name, w3cEventModel ? nativeHandler : callbackList.proxyHandler, capture); - } - } else { - // If it already has an native handler then just push the callback - callbackList.push({func: callback, scope: scope}); - } - } - - target = callbackList = 0; // Clean memory for IE - - return callback; - }; - - self.unbind = function(target, names, callback) { - var id, callbackList, i, ci, name, eventMap; - - // Don't bind to text nodes or comments - if (!target || target.nodeType === 3 || target.nodeType === 8) { - return self; - } - - // Unbind event or events if the target has the expando - id = target[expando]; - if (id) { - eventMap = events[id]; - - // Specific callback - if (names) { - names = names.split(' '); - i = names.length; - while (i--) { - name = names[i]; - callbackList = eventMap[name]; - - // Unbind the event if it exists in the map - if (callbackList) { - // Remove specified callback - if (callback) { - ci = callbackList.length; - while (ci--) { - if (callbackList[ci].func === callback) { - callbackList.splice(ci, 1); - } - } - } - - // Remove all callbacks if there isn't a specified callback or there is no callbacks left - if (!callback || callbackList.length === 0) { - delete eventMap[name]; - removeEvent(target, callbackList.fakeName || name, w3cEventModel ? callbackList.nativeHandler : callbackList.proxyHandler, callbackList.capture); - } - } - } - } else { - // All events for a specific element - for (name in eventMap) { - callbackList = eventMap[name]; - removeEvent(target, callbackList.fakeName || name, w3cEventModel ? callbackList.nativeHandler : callbackList.proxyHandler, callbackList.capture); - } - - eventMap = {}; - } - - // Check if object is empty, if it isn't then we won't remove the expando map - for (name in eventMap) { - return self; - } - - // Delete event object - delete events[id]; - - // Remove expando from target - try { - // IE will fail here since it can't delete properties from window - delete target[expando]; - } catch (ex) { - // IE will set it to null - target[expando] = null; - } - } - - return self; - }; - - self.fire = function(target, name, args) { - var id, event; - - // Don't bind to text nodes or comments - if (!target || target.nodeType === 3 || target.nodeType === 8) { - return self; - } - - // Build event object by patching the args - event = fix(null, args); - event.type = name; - - do { - // Found an expando that means there is listeners to execute - id = target[expando]; - if (id) { - executeHandlers(event, id); - } - - // Walk up the DOM - target = target.parentNode || target.ownerDocument || target.defaultView || target.parentWindow; - } while (target && !event.isPropagationStopped()); - - return self; - }; - - self.clean = function(target) { - var i, children, unbind = self.unbind; - - // Don't bind to text nodes or comments - if (!target || target.nodeType === 3 || target.nodeType === 8) { - return self; - } - - // Unbind any element on the specificed target - if (target[expando]) { - unbind(target); - } - - // Target doesn't have getElementsByTagName it's probably a window object then use it's document to find the children - if (!target.getElementsByTagName) { - target = target.document; - } - - // Remove events from each child element - if (target && target.getElementsByTagName) { - unbind(target); - - children = target.getElementsByTagName('*'); - i = children.length; - while (i--) { - target = children[i]; - - if (target[expando]) { - unbind(target); - } - } - } - - return self; - }; - - self.callNativeHandler = function(id, evt) { - if (events) { - events[id][evt.type].nativeHandler(evt); - } - }; - - self.destory = function() { - events = {}; - }; - - // Legacy function calls - - self.add = function(target, events, func, scope) { - // Old API supported direct ID assignment - if (typeof(target) === "string") { - target = document.getElementById(target); - } - - // Old API supported multiple targets - if (target && target instanceof Array) { - var i = target.length; - - while (i--) { - self.add(target[i], events, func, scope); - } - - return; - } - - // Old API called ready init - if (events === "init") { - events = "ready"; - } - - return self.bind(target, events instanceof Array ? events.join(' ') : events, func, scope); - }; - - self.remove = function(target, events, func, scope) { - if (!target) { - return self; - } - - // Old API supported direct ID assignment - if (typeof(target) === "string") { - target = document.getElementById(target); - } - - // Old API supported multiple targets - if (target instanceof Array) { - var i = target.length; - - while (i--) { - self.remove(target[i], events, func, scope); - } - - return self; - } - - return self.unbind(target, events instanceof Array ? events.join(' ') : events, func); - }; - - self.clear = function(target) { - // Old API supported direct ID assignment - if (typeof(target) === "string") { - target = document.getElementById(target); - } - - return self.clean(target); - }; - - self.cancel = function(e) { - if (e) { - self.prevent(e); - self.stop(e); - } - - return false; - }; - - self.prevent = function(e) { - if (!e.preventDefault) { - e = fix(e); - } - - e.preventDefault(); - - return false; - }; - - self.stop = function(e) { - if (!e.stopPropagation) { - e = fix(e); - } - - e.stopPropagation(); - - return false; - }; - } - - namespace.EventUtils = EventUtils; - - namespace.Event = new EventUtils(function(id) { - return function(evt) { - tinymce.dom.Event.callNativeHandler(id, evt); - }; - }); - - // Bind ready event when tinymce script is loaded - namespace.Event.bind(window, 'ready', function() {}); - - namespace = 0; -})(tinymce.dom, 'data-mce-expando'); // Namespace and expando - -tinymce.dom.TreeWalker = function(start_node, root_node) { - var node = start_node; - - function findSibling(node, start_name, sibling_name, shallow) { - var sibling, parent; - - if (node) { - // Walk into nodes if it has a start - if (!shallow && node[start_name]) - return node[start_name]; - - // Return the sibling if it has one - if (node != root_node) { - sibling = node[sibling_name]; - if (sibling) - return sibling; - - // Walk up the parents to look for siblings - for (parent = node.parentNode; parent && parent != root_node; parent = parent.parentNode) { - sibling = parent[sibling_name]; - if (sibling) - return sibling; - } - } - } - }; - - this.current = function() { - return node; - }; - - this.next = function(shallow) { - return (node = findSibling(node, 'firstChild', 'nextSibling', shallow)); - }; - - this.prev = function(shallow) { - return (node = findSibling(node, 'lastChild', 'previousSibling', shallow)); - }; -}; - -(function(tinymce) { - // Shorten names - var each = tinymce.each, - is = tinymce.is, - isWebKit = tinymce.isWebKit, - isIE = tinymce.isIE, - Entities = tinymce.html.Entities, - simpleSelectorRe = /^([a-z0-9],?)+$/i, - whiteSpaceRegExp = /^[ \t\r\n]*$/; - - tinymce.create('tinymce.dom.DOMUtils', { - doc : null, - root : null, - files : null, - pixelStyles : /^(top|left|bottom|right|width|height|borderWidth)$/, - props : { - "for" : "htmlFor", - "class" : "className", - className : "className", - checked : "checked", - disabled : "disabled", - maxlength : "maxLength", - readonly : "readOnly", - selected : "selected", - value : "value", - id : "id", - name : "name", - type : "type" - }, - - DOMUtils : function(d, s) { - var t = this, globalStyle, name, blockElementsMap; - - t.doc = d; - t.win = window; - t.files = {}; - t.cssFlicker = false; - t.counter = 0; - t.stdMode = !tinymce.isIE || d.documentMode >= 8; - t.boxModel = !tinymce.isIE || d.compatMode == "CSS1Compat" || t.stdMode; - t.hasOuterHTML = "outerHTML" in d.createElement("a"); - - t.settings = s = tinymce.extend({ - keep_values : false, - hex_colors : 1 - }, s); - - t.schema = s.schema; - t.styles = new tinymce.html.Styles({ - url_converter : s.url_converter, - url_converter_scope : s.url_converter_scope - }, s.schema); - - // Fix IE6SP2 flicker and check it failed for pre SP2 - if (tinymce.isIE6) { - try { - d.execCommand('BackgroundImageCache', false, true); - } catch (e) { - t.cssFlicker = true; - } - } - - t.fixDoc(d); - t.events = s.ownEvents ? new tinymce.dom.EventUtils(s.proxy) : tinymce.dom.Event; - tinymce.addUnload(t.destroy, t); - blockElementsMap = s.schema ? s.schema.getBlockElements() : {}; - - t.isBlock = function(node) { - // Fix for #5446 - if (!node) { - return false; - } - - // This function is called in module pattern style since it might be executed with the wrong this scope - var type = node.nodeType; - - // If it's a node then check the type and use the nodeName - if (type) - return !!(type === 1 && blockElementsMap[node.nodeName]); - - return !!blockElementsMap[node]; - }; - }, - - fixDoc: function(doc) { - var settings = this.settings, name; - - if (isIE && settings.schema) { - // Add missing HTML 4/5 elements to IE - ('abbr article aside audio canvas ' + - 'details figcaption figure footer ' + - 'header hgroup mark menu meter nav ' + - 'output progress section summary ' + - 'time video').replace(/\w+/g, function(name) { - doc.createElement(name); - }); - - // Create all custom elements - for (name in settings.schema.getCustomElements()) { - doc.createElement(name); - } - } - }, - - clone: function(node, deep) { - var self = this, clone, doc; - - // TODO: Add feature detection here in the future - if (!isIE || node.nodeType !== 1 || deep) { - return node.cloneNode(deep); - } - - doc = self.doc; - - // Make a HTML5 safe shallow copy - if (!deep) { - clone = doc.createElement(node.nodeName); - - // Copy attribs - each(self.getAttribs(node), function(attr) { - self.setAttrib(clone, attr.nodeName, self.getAttrib(node, attr.nodeName)); - }); - - return clone; - } -/* - // Setup HTML5 patched document fragment - if (!self.frag) { - self.frag = doc.createDocumentFragment(); - self.fixDoc(self.frag); - } - - // Make a deep copy by adding it to the document fragment then removing it this removed the :section - clone = doc.createElement('div'); - self.frag.appendChild(clone); - clone.innerHTML = node.outerHTML; - self.frag.removeChild(clone); -*/ - return clone.firstChild; - }, - - getRoot : function() { - var t = this, s = t.settings; - - return (s && t.get(s.root_element)) || t.doc.body; - }, - - getViewPort : function(w) { - var d, b; - - w = !w ? this.win : w; - d = w.document; - b = this.boxModel ? d.documentElement : d.body; - - // Returns viewport size excluding scrollbars - return { - x : w.pageXOffset || b.scrollLeft, - y : w.pageYOffset || b.scrollTop, - w : w.innerWidth || b.clientWidth, - h : w.innerHeight || b.clientHeight - }; - }, - - getRect : function(e) { - var p, t = this, sr; - - e = t.get(e); - p = t.getPos(e); - sr = t.getSize(e); - - return { - x : p.x, - y : p.y, - w : sr.w, - h : sr.h - }; - }, - - getSize : function(e) { - var t = this, w, h; - - e = t.get(e); - w = t.getStyle(e, 'width'); - h = t.getStyle(e, 'height'); - - // Non pixel value, then force offset/clientWidth - if (w.indexOf('px') === -1) - w = 0; - - // Non pixel value, then force offset/clientWidth - if (h.indexOf('px') === -1) - h = 0; - - return { - w : parseInt(w, 10) || e.offsetWidth || e.clientWidth, - h : parseInt(h, 10) || e.offsetHeight || e.clientHeight - }; - }, - - getParent : function(n, f, r) { - return this.getParents(n, f, r, false); - }, - - getParents : function(n, f, r, c) { - var t = this, na, se = t.settings, o = []; - - n = t.get(n); - c = c === undefined; - - if (se.strict_root) - r = r || t.getRoot(); - - // Wrap node name as func - if (is(f, 'string')) { - na = f; - - if (f === '*') { - f = function(n) {return n.nodeType == 1;}; - } else { - f = function(n) { - return t.is(n, na); - }; - } - } - - while (n) { - if (n == r || !n.nodeType || n.nodeType === 9) - break; - - if (!f || f(n)) { - if (c) - o.push(n); - else - return n; - } - - n = n.parentNode; - } - - return c ? o : null; - }, - - get : function(e) { - var n; - - if (e && this.doc && typeof(e) == 'string') { - n = e; - e = this.doc.getElementById(e); - - // IE and Opera returns meta elements when they match the specified input ID, but getElementsByName seems to do the trick - if (e && e.id !== n) - return this.doc.getElementsByName(n)[1]; - } - - return e; - }, - - getNext : function(node, selector) { - return this._findSib(node, selector, 'nextSibling'); - }, - - getPrev : function(node, selector) { - return this._findSib(node, selector, 'previousSibling'); - }, - - - add : function(p, n, a, h, c) { - var t = this; - - return this.run(p, function(p) { - var e, k; - - e = is(n, 'string') ? t.doc.createElement(n) : n; - t.setAttribs(e, a); - - if (h) { - if (h.nodeType) - e.appendChild(h); - else - t.setHTML(e, h); - } - - return !c ? p.appendChild(e) : e; - }); - }, - - create : function(n, a, h) { - return this.add(this.doc.createElement(n), n, a, h, 1); - }, - - createHTML : function(n, a, h) { - var o = '', t = this, k; - - o += '<' + n; - - for (k in a) { - if (a.hasOwnProperty(k)) - o += ' ' + k + '="' + t.encode(a[k]) + '"'; - } - - // A call to tinymce.is doesn't work for some odd reason on IE9 possible bug inside their JS runtime - if (typeof(h) != "undefined") - return o + '>' + h + ''; - - return o + ' />'; - }, - - remove : function(node, keep_children) { - return this.run(node, function(node) { - var child, parent = node.parentNode; - - if (!parent) - return null; - - if (keep_children) { - while (child = node.firstChild) { - // IE 8 will crash if you don't remove completely empty text nodes - if (!tinymce.isIE || child.nodeType !== 3 || child.nodeValue) - parent.insertBefore(child, node); - else - node.removeChild(child); - } - } - - return parent.removeChild(node); - }); - }, - - setStyle : function(n, na, v) { - var t = this; - - return t.run(n, function(e) { - var s, i; - - s = e.style; - - // Camelcase it, if needed - na = na.replace(/-(\D)/g, function(a, b){ - return b.toUpperCase(); - }); - - // Default px suffix on these - if (t.pixelStyles.test(na) && (tinymce.is(v, 'number') || /^[\-0-9\.]+$/.test(v))) - v += 'px'; - - switch (na) { - case 'opacity': - // IE specific opacity - if (isIE) { - s.filter = v === '' ? '' : "alpha(opacity=" + (v * 100) + ")"; - - if (!n.currentStyle || !n.currentStyle.hasLayout) - s.display = 'inline-block'; - } - - // Fix for older browsers - s[na] = s['-moz-opacity'] = s['-khtml-opacity'] = v || ''; - break; - - case 'float': - isIE ? s.styleFloat = v : s.cssFloat = v; - break; - - default: - s[na] = v || ''; - } - - // Force update of the style data - if (t.settings.update_styles) - t.setAttrib(e, 'data-mce-style'); - }); - }, - - getStyle : function(n, na, c) { - n = this.get(n); - - if (!n) - return; - - // Gecko - if (this.doc.defaultView && c) { - // Remove camelcase - na = na.replace(/[A-Z]/g, function(a){ - return '-' + a; - }); - - try { - return this.doc.defaultView.getComputedStyle(n, null).getPropertyValue(na); - } catch (ex) { - // Old safari might fail - return null; - } - } - - // Camelcase it, if needed - na = na.replace(/-(\D)/g, function(a, b){ - return b.toUpperCase(); - }); - - if (na == 'float') - na = isIE ? 'styleFloat' : 'cssFloat'; - - // IE & Opera - if (n.currentStyle && c) - return n.currentStyle[na]; - - return n.style ? n.style[na] : undefined; - }, - - setStyles : function(e, o) { - var t = this, s = t.settings, ol; - - ol = s.update_styles; - s.update_styles = 0; - - each(o, function(v, n) { - t.setStyle(e, n, v); - }); - - // Update style info - s.update_styles = ol; - if (s.update_styles) - t.setAttrib(e, s.cssText); - }, - - removeAllAttribs: function(e) { - return this.run(e, function(e) { - var i, attrs = e.attributes; - for (i = attrs.length - 1; i >= 0; i--) { - e.removeAttributeNode(attrs.item(i)); - } - }); - }, - - setAttrib : function(e, n, v) { - var t = this; - - // Whats the point - if (!e || !n) - return; - - // Strict XML mode - if (t.settings.strict) - n = n.toLowerCase(); - - return this.run(e, function(e) { - var s = t.settings; - var originalValue = e.getAttribute(n); - if (v !== null) { - switch (n) { - case "style": - if (!is(v, 'string')) { - each(v, function(v, n) { - t.setStyle(e, n, v); - }); - - return; - } - - // No mce_style for elements with these since they might get resized by the user - if (s.keep_values) { - if (v && !t._isRes(v)) - e.setAttribute('data-mce-style', v, 2); - else - e.removeAttribute('data-mce-style', 2); - } - - e.style.cssText = v; - break; - - case "class": - e.className = v || ''; // Fix IE null bug - break; - - case "src": - case "href": - if (s.keep_values) { - if (s.url_converter) - v = s.url_converter.call(s.url_converter_scope || t, v, n, e); - - t.setAttrib(e, 'data-mce-' + n, v, 2); - } - - break; - - case "shape": - e.setAttribute('data-mce-style', v); - break; - } - } - if (is(v) && v !== null && v.length !== 0) - e.setAttribute(n, '' + v, 2); - else - e.removeAttribute(n, 2); - - // fire onChangeAttrib event for attributes that have changed - if (tinyMCE.activeEditor && originalValue != v) { - var ed = tinyMCE.activeEditor; - ed.onSetAttrib.dispatch(ed, e, n, v); - } - }); - }, - - setAttribs : function(e, o) { - var t = this; - - return this.run(e, function(e) { - each(o, function(v, n) { - t.setAttrib(e, n, v); - }); - }); - }, - - getAttrib : function(e, n, dv) { - var v, t = this, undef; - - e = t.get(e); - - if (!e || e.nodeType !== 1) - return dv === undef ? false : dv; - - if (!is(dv)) - dv = ''; - - // Try the mce variant for these - if (/^(src|href|style|coords|shape)$/.test(n)) { - v = e.getAttribute("data-mce-" + n); - - if (v) - return v; - } - - if (isIE && t.props[n]) { - v = e[t.props[n]]; - v = v && v.nodeValue ? v.nodeValue : v; - } - - if (!v) - v = e.getAttribute(n, 2); - - // Check boolean attribs - if (/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(n)) { - if (e[t.props[n]] === true && v === '') - return n; - - return v ? n : ''; - } - - // Inner input elements will override attributes on form elements - if (e.nodeName === "FORM" && e.getAttributeNode(n)) - return e.getAttributeNode(n).nodeValue; - - if (n === 'style') { - v = v || e.style.cssText; - - if (v) { - v = t.serializeStyle(t.parseStyle(v), e.nodeName); - - if (t.settings.keep_values && !t._isRes(v)) - e.setAttribute('data-mce-style', v); - } - } - - // Remove Apple and WebKit stuff - if (isWebKit && n === "class" && v) - v = v.replace(/(apple|webkit)\-[a-z\-]+/gi, ''); - - // Handle IE issues - if (isIE) { - switch (n) { - case 'rowspan': - case 'colspan': - // IE returns 1 as default value - if (v === 1) - v = ''; - - break; - - case 'size': - // IE returns +0 as default value for size - if (v === '+0' || v === 20 || v === 0) - v = ''; - - break; - - case 'width': - case 'height': - case 'vspace': - case 'checked': - case 'disabled': - case 'readonly': - if (v === 0) - v = ''; - - break; - - case 'hspace': - // IE returns -1 as default value - if (v === -1) - v = ''; - - break; - - case 'maxlength': - case 'tabindex': - // IE returns default value - if (v === 32768 || v === 2147483647 || v === '32768') - v = ''; - - break; - - case 'multiple': - case 'compact': - case 'noshade': - case 'nowrap': - if (v === 65535) - return n; - - return dv; - - case 'shape': - v = v.toLowerCase(); - break; - - default: - // IE has odd anonymous function for event attributes - if (n.indexOf('on') === 0 && v) - v = tinymce._replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/, '$1', '' + v); - } - } - - return (v !== undef && v !== null && v !== '') ? '' + v : dv; - }, - - getPos : function(n, ro) { - var t = this, x = 0, y = 0, e, d = t.doc, r; - - n = t.get(n); - ro = ro || d.body; - - if (n) { - // Use getBoundingClientRect if it exists since it's faster than looping offset nodes - if (n.getBoundingClientRect) { - n = n.getBoundingClientRect(); - e = t.boxModel ? d.documentElement : d.body; - - // Add scroll offsets from documentElement or body since IE with the wrong box model will use d.body and so do WebKit - // Also remove the body/documentelement clientTop/clientLeft on IE 6, 7 since they offset the position - x = n.left + (d.documentElement.scrollLeft || d.body.scrollLeft) - e.clientTop; - y = n.top + (d.documentElement.scrollTop || d.body.scrollTop) - e.clientLeft; - - return {x : x, y : y}; - } - - r = n; - while (r && r != ro && r.nodeType) { - x += r.offsetLeft || 0; - y += r.offsetTop || 0; - r = r.offsetParent; - } - - r = n.parentNode; - while (r && r != ro && r.nodeType) { - x -= r.scrollLeft || 0; - y -= r.scrollTop || 0; - r = r.parentNode; - } - } - - return {x : x, y : y}; - }, - - parseStyle : function(st) { - return this.styles.parse(st); - }, - - serializeStyle : function(o, name) { - return this.styles.serialize(o, name); - }, - - addStyle: function(cssText) { - var doc = this.doc, head; - - // Create style element if needed - styleElm = doc.getElementById('mceDefaultStyles'); - if (!styleElm) { - styleElm = doc.createElement('style'), - styleElm.id = 'mceDefaultStyles'; - styleElm.type = 'text/css'; - - head = doc.getElementsByTagName('head')[0]; - if (head.firstChild) { - head.insertBefore(styleElm, head.firstChild); - } else { - head.appendChild(styleElm); - } - } - - // Append style data to old or new style element - if (styleElm.styleSheet) { - styleElm.styleSheet.cssText += cssText; - } else { - styleElm.appendChild(doc.createTextNode(cssText)); - } - }, - - loadCSS : function(u) { - var t = this, d = t.doc, head; - - if (!u) - u = ''; - - head = d.getElementsByTagName('head')[0]; - - each(u.split(','), function(u) { - var link; - - if (t.files[u]) - return; - - t.files[u] = true; - link = t.create('link', {rel : 'stylesheet', href : tinymce._addVer(u)}); - - // IE 8 has a bug where dynamically loading stylesheets would produce a 1 item remaining bug - // This fix seems to resolve that issue by realcing the document ones a stylesheet finishes loading - // It's ugly but it seems to work fine. - if (isIE && d.documentMode && d.recalc) { - link.onload = function() { - if (d.recalc) - d.recalc(); - - link.onload = null; - }; - } - - head.appendChild(link); - }); - }, - - addClass : function(e, c) { - return this.run(e, function(e) { - var o; - - if (!c) - return 0; - - if (this.hasClass(e, c)) - return e.className; - - o = this.removeClass(e, c); - - return e.className = (o != '' ? (o + ' ') : '') + c; - }); - }, - - removeClass : function(e, c) { - var t = this, re; - - return t.run(e, function(e) { - var v; - - if (t.hasClass(e, c)) { - if (!re) - re = new RegExp("(^|\\s+)" + c + "(\\s+|$)", "g"); - - v = e.className.replace(re, ' '); - v = tinymce.trim(v != ' ' ? v : ''); - - e.className = v; - - // Empty class attr - if (!v) { - e.removeAttribute('class'); - e.removeAttribute('className'); - } - - return v; - } - - return e.className; - }); - }, - - hasClass : function(n, c) { - n = this.get(n); - - if (!n || !c) - return false; - - return (' ' + n.className + ' ').indexOf(' ' + c + ' ') !== -1; - }, - - show : function(e) { - return this.setStyle(e, 'display', 'block'); - }, - - hide : function(e) { - return this.setStyle(e, 'display', 'none'); - }, - - isHidden : function(e) { - e = this.get(e); - - return !e || e.style.display == 'none' || this.getStyle(e, 'display') == 'none'; - }, - - uniqueId : function(p) { - return (!p ? 'mce_' : p) + (this.counter++); - }, - - setHTML : function(element, html) { - var self = this; - - return self.run(element, function(element) { - if (isIE) { - // Remove all child nodes, IE keeps empty text nodes in DOM - while (element.firstChild) - element.removeChild(element.firstChild); - - try { - // IE will remove comments from the beginning - // unless you padd the contents with something - element.innerHTML = '
    ' + html; - element.removeChild(element.firstChild); - } catch (ex) { - // IE sometimes produces an unknown runtime error on innerHTML if it's an block element within a block element for example a div inside a p - // This seems to fix this problem - - // Create new div with HTML contents and a BR infront to keep comments - var newElement = self.create('div'); - newElement.innerHTML = '
    ' + html; - - // Add all children from div to target - each (tinymce.grep(newElement.childNodes), function(node, i) { - // Skip br element - if (i && element.canHaveHTML) - element.appendChild(node); - }); - } - } else - element.innerHTML = html; - - return html; - }); - }, - - getOuterHTML : function(elm) { - var doc, self = this; - - elm = self.get(elm); - - if (!elm) - return null; - - if (elm.nodeType === 1 && self.hasOuterHTML) - return elm.outerHTML; - - doc = (elm.ownerDocument || self.doc).createElement("body"); - doc.appendChild(elm.cloneNode(true)); - - return doc.innerHTML; - }, - - setOuterHTML : function(e, h, d) { - var t = this; - - function setHTML(e, h, d) { - var n, tp; - - tp = d.createElement("body"); - tp.innerHTML = h; - - n = tp.lastChild; - while (n) { - t.insertAfter(n.cloneNode(true), e); - n = n.previousSibling; - } - - t.remove(e); - }; - - return this.run(e, function(e) { - e = t.get(e); - - // Only set HTML on elements - if (e.nodeType == 1) { - d = d || e.ownerDocument || t.doc; - - if (isIE) { - try { - // Try outerHTML for IE it sometimes produces an unknown runtime error - if (isIE && e.nodeType == 1) - e.outerHTML = h; - else - setHTML(e, h, d); - } catch (ex) { - // Fix for unknown runtime error - setHTML(e, h, d); - } - } else - setHTML(e, h, d); - } - }); - }, - - decode : Entities.decode, - - encode : Entities.encodeAllRaw, - - insertAfter : function(node, reference_node) { - reference_node = this.get(reference_node); - - return this.run(node, function(node) { - var parent, nextSibling; - - parent = reference_node.parentNode; - nextSibling = reference_node.nextSibling; - - if (nextSibling) - parent.insertBefore(node, nextSibling); - else - parent.appendChild(node); - - return node; - }); - }, - - replace : function(n, o, k) { - var t = this; - - if (is(o, 'array')) - n = n.cloneNode(true); - - return t.run(o, function(o) { - if (k) { - each(tinymce.grep(o.childNodes), function(c) { - n.appendChild(c); - }); - } - - return o.parentNode.replaceChild(n, o); - }); - }, - - rename : function(elm, name) { - var t = this, newElm; - - if (elm.nodeName != name.toUpperCase()) { - // Rename block element - newElm = t.create(name); - - // Copy attribs to new block - each(t.getAttribs(elm), function(attr_node) { - t.setAttrib(newElm, attr_node.nodeName, t.getAttrib(elm, attr_node.nodeName)); - }); - - // Replace block - t.replace(newElm, elm, 1); - } - - return newElm || elm; - }, - - findCommonAncestor : function(a, b) { - var ps = a, pe; - - while (ps) { - pe = b; - - while (pe && ps != pe) - pe = pe.parentNode; - - if (ps == pe) - break; - - ps = ps.parentNode; - } - - if (!ps && a.ownerDocument) - return a.ownerDocument.documentElement; - - return ps; - }, - - toHex : function(s) { - var c = /^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(s); - - function hex(s) { - s = parseInt(s, 10).toString(16); - - return s.length > 1 ? s : '0' + s; // 0 -> 00 - }; - - if (c) { - s = '#' + hex(c[1]) + hex(c[2]) + hex(c[3]); - - return s; - } - - return s; - }, - - getClasses : function() { - var t = this, cl = [], i, lo = {}, f = t.settings.class_filter, ov; - - if (t.classes) - return t.classes; - - function addClasses(s) { - // IE style imports - each(s.imports, function(r) { - addClasses(r); - }); - - each(s.cssRules || s.rules, function(r) { - // Real type or fake it on IE - switch (r.type || 1) { - // Rule - case 1: - if (r.selectorText) { - each(r.selectorText.split(','), function(v) { - v = v.replace(/^\s*|\s*$|^\s\./g, ""); - - // Is internal or it doesn't contain a class - if (/\.mce/.test(v) || !/\.[\w\-]+$/.test(v)) - return; - - // Remove everything but class name - ov = v; - v = tinymce._replace(/.*\.([a-z0-9_\-]+).*/i, '$1', v); - - // Filter classes - if (f && !(v = f(v, ov))) - return; - - if (!lo[v]) { - cl.push({'class' : v}); - lo[v] = 1; - } - }); - } - break; - - // Import - case 3: - addClasses(r.styleSheet); - break; - } - }); - }; - - try { - each(t.doc.styleSheets, addClasses); - } catch (ex) { - // Ignore - } - - if (cl.length > 0) - t.classes = cl; - - return cl; - }, - - run : function(e, f, s) { - var t = this, o; - - if (t.doc && typeof(e) === 'string') - e = t.get(e); - - if (!e) - return false; - - s = s || this; - if (!e.nodeType && (e.length || e.length === 0)) { - o = []; - - each(e, function(e, i) { - if (e) { - if (typeof(e) == 'string') - e = t.doc.getElementById(e); - - o.push(f.call(s, e, i)); - } - }); - - return o; - } - - return f.call(s, e); - }, - - getAttribs : function(n) { - var o; - - n = this.get(n); - - if (!n) - return []; - - if (isIE) { - o = []; - - // Object will throw exception in IE - if (n.nodeName == 'OBJECT') - return n.attributes; - - // IE doesn't keep the selected attribute if you clone option elements - if (n.nodeName === 'OPTION' && this.getAttrib(n, 'selected')) - o.push({specified : 1, nodeName : 'selected'}); - - // It's crazy that this is faster in IE but it's because it returns all attributes all the time - n.cloneNode(false).outerHTML.replace(/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi, '').replace(/[\w:\-]+/gi, function(a) { - o.push({specified : 1, nodeName : a}); - }); - - return o; - } - - return n.attributes; - }, - - isEmpty : function(node, elements) { - var self = this, i, attributes, type, walker, name, brCount = 0; - - node = node.firstChild; - if (node) { - walker = new tinymce.dom.TreeWalker(node, node.parentNode); - elements = elements || self.schema ? self.schema.getNonEmptyElements() : null; - - do { - type = node.nodeType; - - if (type === 1) { - // Ignore bogus elements - if (node.getAttribute('data-mce-bogus')) - continue; - - // Keep empty elements like - name = node.nodeName.toLowerCase(); - if (elements && elements[name]) { - // Ignore single BR elements in blocks like


    or


    - if (name === 'br') { - brCount++; - continue; - } - - return false; - } - - // Keep elements with data-bookmark attributes or name attribute like
    - attributes = self.getAttribs(node); - i = node.attributes.length; - while (i--) { - name = node.attributes[i].nodeName; - if (name === "name" || name === 'data-mce-bookmark') - return false; - } - } - - // Keep comment nodes - if (type == 8) - return false; - - // Keep non whitespace text nodes - if ((type === 3 && !whiteSpaceRegExp.test(node.nodeValue))) - return false; - } while (node = walker.next()); - } - - return brCount <= 1; - }, - - destroy : function(s) { - var t = this; - - t.win = t.doc = t.root = t.events = t.frag = null; - - // Manual destroy then remove unload handler - if (!s) - tinymce.removeUnload(t.destroy); - }, - - createRng : function() { - var d = this.doc; - - return d.createRange ? d.createRange() : new tinymce.dom.Range(this); - }, - - nodeIndex : function(node, normalized) { - var idx = 0, lastNodeType, lastNode, nodeType; - - if (node) { - for (lastNodeType = node.nodeType, node = node.previousSibling, lastNode = node; node; node = node.previousSibling) { - nodeType = node.nodeType; - - // Normalize text nodes - if (normalized && nodeType == 3) { - if (nodeType == lastNodeType || !node.nodeValue.length) - continue; - } - idx++; - lastNodeType = nodeType; - } - } - - return idx; - }, - - split : function(pe, e, re) { - var t = this, r = t.createRng(), bef, aft, pa; - - // W3C valid browsers tend to leave empty nodes to the left/right side of the contents, this makes sense - // but we don't want that in our code since it serves no purpose for the end user - // For example if this is chopped: - //

    text 1CHOPtext 2

    - // would produce: - //

    text 1

    CHOP

    text 2

    - // this function will then trim of empty edges and produce: - //

    text 1

    CHOP

    text 2

    - function trim(node) { - var i, children = node.childNodes, type = node.nodeType; - - function surroundedBySpans(node) { - var previousIsSpan = node.previousSibling && node.previousSibling.nodeName == 'SPAN'; - var nextIsSpan = node.nextSibling && node.nextSibling.nodeName == 'SPAN'; - return previousIsSpan && nextIsSpan; - } - - if (type == 1 && node.getAttribute('data-mce-type') == 'bookmark') - return; - - for (i = children.length - 1; i >= 0; i--) - trim(children[i]); - - if (type != 9) { - // Keep non whitespace text nodes - if (type == 3 && node.nodeValue.length > 0) { - // If parent element isn't a block or there isn't any useful contents for example "

    " - // Also keep text nodes with only spaces if surrounded by spans. - // eg. "

    a b

    " should keep space between a and b - var trimmedLength = tinymce.trim(node.nodeValue).length; - if (!t.isBlock(node.parentNode) || trimmedLength > 0 || trimmedLength === 0 && surroundedBySpans(node)) - return; - } else if (type == 1) { - // If the only child is a bookmark then move it up - children = node.childNodes; - if (children.length == 1 && children[0] && children[0].nodeType == 1 && children[0].getAttribute('data-mce-type') == 'bookmark') - node.parentNode.insertBefore(children[0], node); - - // Keep non empty elements or img, hr etc - if (children.length || /^(br|hr|input|img)$/i.test(node.nodeName)) - return; - } - - t.remove(node); - } - - return node; - }; - - if (pe && e) { - // Get before chunk - r.setStart(pe.parentNode, t.nodeIndex(pe)); - r.setEnd(e.parentNode, t.nodeIndex(e)); - bef = r.extractContents(); - - // Get after chunk - r = t.createRng(); - r.setStart(e.parentNode, t.nodeIndex(e) + 1); - r.setEnd(pe.parentNode, t.nodeIndex(pe) + 1); - aft = r.extractContents(); - - // Insert before chunk - pa = pe.parentNode; - pa.insertBefore(trim(bef), pe); - - // Insert middle chunk - if (re) - pa.replaceChild(re, e); - else - pa.insertBefore(e, pe); - - // Insert after chunk - pa.insertBefore(trim(aft), pe); - t.remove(pe); - - return re || e; - } - }, - - bind : function(target, name, func, scope) { - return this.events.add(target, name, func, scope || this); - }, - - unbind : function(target, name, func) { - return this.events.remove(target, name, func); - }, - - fire : function(target, name, evt) { - return this.events.fire(target, name, evt); - }, - - // Returns the content editable state of a node - getContentEditable: function(node) { - var contentEditable; - - // Check type - if (node.nodeType != 1) { - return null; - } - - // Check for fake content editable - contentEditable = node.getAttribute("data-mce-contenteditable"); - if (contentEditable && contentEditable !== "inherit") { - return contentEditable; - } - - // Check for real content editable - return node.contentEditable !== "inherit" ? node.contentEditable : null; - }, - - - _findSib : function(node, selector, name) { - var t = this, f = selector; - - if (node) { - // If expression make a function of it using is - if (is(f, 'string')) { - f = function(node) { - return t.is(node, selector); - }; - } - - // Loop all siblings - for (node = node[name]; node; node = node[name]) { - if (f(node)) - return node; - } - } - - return null; - }, - - _isRes : function(c) { - // Is live resizble element - return /^(top|left|bottom|right|width|height)/i.test(c) || /;\s*(top|left|bottom|right|width|height)/i.test(c); - } - - /* - walk : function(n, f, s) { - var d = this.doc, w; - - if (d.createTreeWalker) { - w = d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false); - - while ((n = w.nextNode()) != null) - f.call(s || this, n); - } else - tinymce.walk(n, f, 'childNodes', s); - } - */ - - /* - toRGB : function(s) { - var c = /^\s*?#([0-9A-F]{2})([0-9A-F]{1,2})([0-9A-F]{2})?\s*?$/.exec(s); - - if (c) { - // #FFF -> #FFFFFF - if (!is(c[3])) - c[3] = c[2] = c[1]; - - return "rgb(" + parseInt(c[1], 16) + "," + parseInt(c[2], 16) + "," + parseInt(c[3], 16) + ")"; - } - - return s; - } - */ - }); - - tinymce.DOM = new tinymce.dom.DOMUtils(document, {process_html : 0}); -})(tinymce); - -(function(ns) { - // Range constructor - function Range(dom) { - var t = this, - doc = dom.doc, - EXTRACT = 0, - CLONE = 1, - DELETE = 2, - TRUE = true, - FALSE = false, - START_OFFSET = 'startOffset', - START_CONTAINER = 'startContainer', - END_CONTAINER = 'endContainer', - END_OFFSET = 'endOffset', - extend = tinymce.extend, - nodeIndex = dom.nodeIndex; - - extend(t, { - // Inital states - startContainer : doc, - startOffset : 0, - endContainer : doc, - endOffset : 0, - collapsed : TRUE, - commonAncestorContainer : doc, - - // Range constants - START_TO_START : 0, - START_TO_END : 1, - END_TO_END : 2, - END_TO_START : 3, - - // Public methods - setStart : setStart, - setEnd : setEnd, - setStartBefore : setStartBefore, - setStartAfter : setStartAfter, - setEndBefore : setEndBefore, - setEndAfter : setEndAfter, - collapse : collapse, - selectNode : selectNode, - selectNodeContents : selectNodeContents, - compareBoundaryPoints : compareBoundaryPoints, - deleteContents : deleteContents, - extractContents : extractContents, - cloneContents : cloneContents, - insertNode : insertNode, - surroundContents : surroundContents, - cloneRange : cloneRange, - toStringIE : toStringIE - }); - - function createDocumentFragment() { - return doc.createDocumentFragment(); - }; - - function setStart(n, o) { - _setEndPoint(TRUE, n, o); - }; - - function setEnd(n, o) { - _setEndPoint(FALSE, n, o); - }; - - function setStartBefore(n) { - setStart(n.parentNode, nodeIndex(n)); - }; - - function setStartAfter(n) { - setStart(n.parentNode, nodeIndex(n) + 1); - }; - - function setEndBefore(n) { - setEnd(n.parentNode, nodeIndex(n)); - }; - - function setEndAfter(n) { - setEnd(n.parentNode, nodeIndex(n) + 1); - }; - - function collapse(ts) { - if (ts) { - t[END_CONTAINER] = t[START_CONTAINER]; - t[END_OFFSET] = t[START_OFFSET]; - } else { - t[START_CONTAINER] = t[END_CONTAINER]; - t[START_OFFSET] = t[END_OFFSET]; - } - - t.collapsed = TRUE; - }; - - function selectNode(n) { - setStartBefore(n); - setEndAfter(n); - }; - - function selectNodeContents(n) { - setStart(n, 0); - setEnd(n, n.nodeType === 1 ? n.childNodes.length : n.nodeValue.length); - }; - - function compareBoundaryPoints(h, r) { - var sc = t[START_CONTAINER], so = t[START_OFFSET], ec = t[END_CONTAINER], eo = t[END_OFFSET], - rsc = r.startContainer, rso = r.startOffset, rec = r.endContainer, reo = r.endOffset; - - // Check START_TO_START - if (h === 0) - return _compareBoundaryPoints(sc, so, rsc, rso); - - // Check START_TO_END - if (h === 1) - return _compareBoundaryPoints(ec, eo, rsc, rso); - - // Check END_TO_END - if (h === 2) - return _compareBoundaryPoints(ec, eo, rec, reo); - - // Check END_TO_START - if (h === 3) - return _compareBoundaryPoints(sc, so, rec, reo); - }; - - function deleteContents() { - _traverse(DELETE); - }; - - function extractContents() { - return _traverse(EXTRACT); - }; - - function cloneContents() { - return _traverse(CLONE); - }; - - function insertNode(n) { - var startContainer = this[START_CONTAINER], - startOffset = this[START_OFFSET], nn, o; - - // Node is TEXT_NODE or CDATA - if ((startContainer.nodeType === 3 || startContainer.nodeType === 4) && startContainer.nodeValue) { - if (!startOffset) { - // At the start of text - startContainer.parentNode.insertBefore(n, startContainer); - } else if (startOffset >= startContainer.nodeValue.length) { - // At the end of text - dom.insertAfter(n, startContainer); - } else { - // Middle, need to split - nn = startContainer.splitText(startOffset); - startContainer.parentNode.insertBefore(n, nn); - } - } else { - // Insert element node - if (startContainer.childNodes.length > 0) - o = startContainer.childNodes[startOffset]; - - if (o) - startContainer.insertBefore(n, o); - else - startContainer.appendChild(n); - } - }; - - function surroundContents(n) { - var f = t.extractContents(); - - t.insertNode(n); - n.appendChild(f); - t.selectNode(n); - }; - - function cloneRange() { - return extend(new Range(dom), { - startContainer : t[START_CONTAINER], - startOffset : t[START_OFFSET], - endContainer : t[END_CONTAINER], - endOffset : t[END_OFFSET], - collapsed : t.collapsed, - commonAncestorContainer : t.commonAncestorContainer - }); - }; - - // Private methods - - function _getSelectedNode(container, offset) { - var child; - - if (container.nodeType == 3 /* TEXT_NODE */) - return container; - - if (offset < 0) - return container; - - child = container.firstChild; - while (child && offset > 0) { - --offset; - child = child.nextSibling; - } - - if (child) - return child; - - return container; - }; - - function _isCollapsed() { - return (t[START_CONTAINER] == t[END_CONTAINER] && t[START_OFFSET] == t[END_OFFSET]); - }; - - function _compareBoundaryPoints(containerA, offsetA, containerB, offsetB) { - var c, offsetC, n, cmnRoot, childA, childB; - - // In the first case the boundary-points have the same container. A is before B - // if its offset is less than the offset of B, A is equal to B if its offset is - // equal to the offset of B, and A is after B if its offset is greater than the - // offset of B. - if (containerA == containerB) { - if (offsetA == offsetB) - return 0; // equal - - if (offsetA < offsetB) - return -1; // before - - return 1; // after - } - - // In the second case a child node C of the container of A is an ancestor - // container of B. In this case, A is before B if the offset of A is less than or - // equal to the index of the child node C and A is after B otherwise. - c = containerB; - while (c && c.parentNode != containerA) - c = c.parentNode; - - if (c) { - offsetC = 0; - n = containerA.firstChild; - - while (n != c && offsetC < offsetA) { - offsetC++; - n = n.nextSibling; - } - - if (offsetA <= offsetC) - return -1; // before - - return 1; // after - } - - // In the third case a child node C of the container of B is an ancestor container - // of A. In this case, A is before B if the index of the child node C is less than - // the offset of B and A is after B otherwise. - c = containerA; - while (c && c.parentNode != containerB) { - c = c.parentNode; - } - - if (c) { - offsetC = 0; - n = containerB.firstChild; - - while (n != c && offsetC < offsetB) { - offsetC++; - n = n.nextSibling; - } - - if (offsetC < offsetB) - return -1; // before - - return 1; // after - } - - // In the fourth case, none of three other cases hold: the containers of A and B - // are siblings or descendants of sibling nodes. In this case, A is before B if - // the container of A is before the container of B in a pre-order traversal of the - // Ranges' context tree and A is after B otherwise. - cmnRoot = dom.findCommonAncestor(containerA, containerB); - childA = containerA; - - while (childA && childA.parentNode != cmnRoot) - childA = childA.parentNode; - - if (!childA) - childA = cmnRoot; - - childB = containerB; - while (childB && childB.parentNode != cmnRoot) - childB = childB.parentNode; - - if (!childB) - childB = cmnRoot; - - if (childA == childB) - return 0; // equal - - n = cmnRoot.firstChild; - while (n) { - if (n == childA) - return -1; // before - - if (n == childB) - return 1; // after - - n = n.nextSibling; - } - }; - - function _setEndPoint(st, n, o) { - var ec, sc; - - if (st) { - t[START_CONTAINER] = n; - t[START_OFFSET] = o; - } else { - t[END_CONTAINER] = n; - t[END_OFFSET] = o; - } - - // If one boundary-point of a Range is set to have a root container - // other than the current one for the Range, the Range is collapsed to - // the new position. This enforces the restriction that both boundary- - // points of a Range must have the same root container. - ec = t[END_CONTAINER]; - while (ec.parentNode) - ec = ec.parentNode; - - sc = t[START_CONTAINER]; - while (sc.parentNode) - sc = sc.parentNode; - - if (sc == ec) { - // The start position of a Range is guaranteed to never be after the - // end position. To enforce this restriction, if the start is set to - // be at a position after the end, the Range is collapsed to that - // position. - if (_compareBoundaryPoints(t[START_CONTAINER], t[START_OFFSET], t[END_CONTAINER], t[END_OFFSET]) > 0) - t.collapse(st); - } else - t.collapse(st); - - t.collapsed = _isCollapsed(); - t.commonAncestorContainer = dom.findCommonAncestor(t[START_CONTAINER], t[END_CONTAINER]); - }; - - function _traverse(how) { - var c, endContainerDepth = 0, startContainerDepth = 0, p, depthDiff, startNode, endNode, sp, ep; - - if (t[START_CONTAINER] == t[END_CONTAINER]) - return _traverseSameContainer(how); - - for (c = t[END_CONTAINER], p = c.parentNode; p; c = p, p = p.parentNode) { - if (p == t[START_CONTAINER]) - return _traverseCommonStartContainer(c, how); - - ++endContainerDepth; - } - - for (c = t[START_CONTAINER], p = c.parentNode; p; c = p, p = p.parentNode) { - if (p == t[END_CONTAINER]) - return _traverseCommonEndContainer(c, how); - - ++startContainerDepth; - } - - depthDiff = startContainerDepth - endContainerDepth; - - startNode = t[START_CONTAINER]; - while (depthDiff > 0) { - startNode = startNode.parentNode; - depthDiff--; - } - - endNode = t[END_CONTAINER]; - while (depthDiff < 0) { - endNode = endNode.parentNode; - depthDiff++; - } - - // ascend the ancestor hierarchy until we have a common parent. - for (sp = startNode.parentNode, ep = endNode.parentNode; sp != ep; sp = sp.parentNode, ep = ep.parentNode) { - startNode = sp; - endNode = ep; - } - - return _traverseCommonAncestors(startNode, endNode, how); - }; - - function _traverseSameContainer(how) { - var frag, s, sub, n, cnt, sibling, xferNode, start, len; - - if (how != DELETE) - frag = createDocumentFragment(); - - // If selection is empty, just return the fragment - if (t[START_OFFSET] == t[END_OFFSET]) - return frag; - - // Text node needs special case handling - if (t[START_CONTAINER].nodeType == 3 /* TEXT_NODE */) { - // get the substring - s = t[START_CONTAINER].nodeValue; - sub = s.substring(t[START_OFFSET], t[END_OFFSET]); - - // set the original text node to its new value - if (how != CLONE) { - n = t[START_CONTAINER]; - start = t[START_OFFSET]; - len = t[END_OFFSET] - t[START_OFFSET]; - - if (start === 0 && len >= n.nodeValue.length - 1) { - n.parentNode.removeChild(n); - } else { - n.deleteData(start, len); - } - - // Nothing is partially selected, so collapse to start point - t.collapse(TRUE); - } - - if (how == DELETE) - return; - - if (sub.length > 0) { - frag.appendChild(doc.createTextNode(sub)); - } - - return frag; - } - - // Copy nodes between the start/end offsets. - n = _getSelectedNode(t[START_CONTAINER], t[START_OFFSET]); - cnt = t[END_OFFSET] - t[START_OFFSET]; - - while (n && cnt > 0) { - sibling = n.nextSibling; - xferNode = _traverseFullySelected(n, how); - - if (frag) - frag.appendChild( xferNode ); - - --cnt; - n = sibling; - } - - // Nothing is partially selected, so collapse to start point - if (how != CLONE) - t.collapse(TRUE); - - return frag; - }; - - function _traverseCommonStartContainer(endAncestor, how) { - var frag, n, endIdx, cnt, sibling, xferNode; - - if (how != DELETE) - frag = createDocumentFragment(); - - n = _traverseRightBoundary(endAncestor, how); - - if (frag) - frag.appendChild(n); - - endIdx = nodeIndex(endAncestor); - cnt = endIdx - t[START_OFFSET]; - - if (cnt <= 0) { - // Collapse to just before the endAncestor, which - // is partially selected. - if (how != CLONE) { - t.setEndBefore(endAncestor); - t.collapse(FALSE); - } - - return frag; - } - - n = endAncestor.previousSibling; - while (cnt > 0) { - sibling = n.previousSibling; - xferNode = _traverseFullySelected(n, how); - - if (frag) - frag.insertBefore(xferNode, frag.firstChild); - - --cnt; - n = sibling; - } - - // Collapse to just before the endAncestor, which - // is partially selected. - if (how != CLONE) { - t.setEndBefore(endAncestor); - t.collapse(FALSE); - } - - return frag; - }; - - function _traverseCommonEndContainer(startAncestor, how) { - var frag, startIdx, n, cnt, sibling, xferNode; - - if (how != DELETE) - frag = createDocumentFragment(); - - n = _traverseLeftBoundary(startAncestor, how); - if (frag) - frag.appendChild(n); - - startIdx = nodeIndex(startAncestor); - ++startIdx; // Because we already traversed it - - cnt = t[END_OFFSET] - startIdx; - n = startAncestor.nextSibling; - while (n && cnt > 0) { - sibling = n.nextSibling; - xferNode = _traverseFullySelected(n, how); - - if (frag) - frag.appendChild(xferNode); - - --cnt; - n = sibling; - } - - if (how != CLONE) { - t.setStartAfter(startAncestor); - t.collapse(TRUE); - } - - return frag; - }; - - function _traverseCommonAncestors(startAncestor, endAncestor, how) { - var n, frag, commonParent, startOffset, endOffset, cnt, sibling, nextSibling; - - if (how != DELETE) - frag = createDocumentFragment(); - - n = _traverseLeftBoundary(startAncestor, how); - if (frag) - frag.appendChild(n); - - commonParent = startAncestor.parentNode; - startOffset = nodeIndex(startAncestor); - endOffset = nodeIndex(endAncestor); - ++startOffset; - - cnt = endOffset - startOffset; - sibling = startAncestor.nextSibling; - - while (cnt > 0) { - nextSibling = sibling.nextSibling; - n = _traverseFullySelected(sibling, how); - - if (frag) - frag.appendChild(n); - - sibling = nextSibling; - --cnt; - } - - n = _traverseRightBoundary(endAncestor, how); - - if (frag) - frag.appendChild(n); - - if (how != CLONE) { - t.setStartAfter(startAncestor); - t.collapse(TRUE); - } - - return frag; - }; - - function _traverseRightBoundary(root, how) { - var next = _getSelectedNode(t[END_CONTAINER], t[END_OFFSET] - 1), parent, clonedParent, prevSibling, clonedChild, clonedGrandParent, isFullySelected = next != t[END_CONTAINER]; - - if (next == root) - return _traverseNode(next, isFullySelected, FALSE, how); - - parent = next.parentNode; - clonedParent = _traverseNode(parent, FALSE, FALSE, how); - - while (parent) { - while (next) { - prevSibling = next.previousSibling; - clonedChild = _traverseNode(next, isFullySelected, FALSE, how); - - if (how != DELETE) - clonedParent.insertBefore(clonedChild, clonedParent.firstChild); - - isFullySelected = TRUE; - next = prevSibling; - } - - if (parent == root) - return clonedParent; - - next = parent.previousSibling; - parent = parent.parentNode; - - clonedGrandParent = _traverseNode(parent, FALSE, FALSE, how); - - if (how != DELETE) - clonedGrandParent.appendChild(clonedParent); - - clonedParent = clonedGrandParent; - } - }; - - function _traverseLeftBoundary(root, how) { - var next = _getSelectedNode(t[START_CONTAINER], t[START_OFFSET]), isFullySelected = next != t[START_CONTAINER], parent, clonedParent, nextSibling, clonedChild, clonedGrandParent; - - if (next == root) - return _traverseNode(next, isFullySelected, TRUE, how); - - parent = next.parentNode; - clonedParent = _traverseNode(parent, FALSE, TRUE, how); - - while (parent) { - while (next) { - nextSibling = next.nextSibling; - clonedChild = _traverseNode(next, isFullySelected, TRUE, how); - - if (how != DELETE) - clonedParent.appendChild(clonedChild); - - isFullySelected = TRUE; - next = nextSibling; - } - - if (parent == root) - return clonedParent; - - next = parent.nextSibling; - parent = parent.parentNode; - - clonedGrandParent = _traverseNode(parent, FALSE, TRUE, how); - - if (how != DELETE) - clonedGrandParent.appendChild(clonedParent); - - clonedParent = clonedGrandParent; - } - }; - - function _traverseNode(n, isFullySelected, isLeft, how) { - var txtValue, newNodeValue, oldNodeValue, offset, newNode; - - if (isFullySelected) - return _traverseFullySelected(n, how); - - if (n.nodeType == 3 /* TEXT_NODE */) { - txtValue = n.nodeValue; - - if (isLeft) { - offset = t[START_OFFSET]; - newNodeValue = txtValue.substring(offset); - oldNodeValue = txtValue.substring(0, offset); - } else { - offset = t[END_OFFSET]; - newNodeValue = txtValue.substring(0, offset); - oldNodeValue = txtValue.substring(offset); - } - - if (how != CLONE) - n.nodeValue = oldNodeValue; - - if (how == DELETE) - return; - - newNode = dom.clone(n, FALSE); - newNode.nodeValue = newNodeValue; - - return newNode; - } - - if (how == DELETE) - return; - - return dom.clone(n, FALSE); - }; - - function _traverseFullySelected(n, how) { - if (how != DELETE) - return how == CLONE ? dom.clone(n, TRUE) : n; - - n.parentNode.removeChild(n); - }; - - function toStringIE() { - return dom.create('body', null, cloneContents()).outerText; - } - - return t; - }; - - ns.Range = Range; - - // Older IE versions doesn't let you override toString by it's constructor so we have to stick it in the prototype - Range.prototype.toString = function() { - return this.toStringIE(); - }; -})(tinymce.dom); - -(function() { - function Selection(selection) { - var self = this, dom = selection.dom, TRUE = true, FALSE = false; - - function getPosition(rng, start) { - var checkRng, startIndex = 0, endIndex, inside, - children, child, offset, index, position = -1, parent; - - // Setup test range, collapse it and get the parent - checkRng = rng.duplicate(); - checkRng.collapse(start); - parent = checkRng.parentElement(); - - // Check if the selection is within the right document - if (parent.ownerDocument !== selection.dom.doc) - return; - - // IE will report non editable elements as it's parent so look for an editable one - while (parent.contentEditable === "false") { - parent = parent.parentNode; - } - - // If parent doesn't have any children then return that we are inside the element - if (!parent.hasChildNodes()) { - return {node : parent, inside : 1}; - } - - // Setup node list and endIndex - children = parent.children; - endIndex = children.length - 1; - - // Perform a binary search for the position - while (startIndex <= endIndex) { - index = Math.floor((startIndex + endIndex) / 2); - - // Move selection to node and compare the ranges - child = children[index]; - checkRng.moveToElementText(child); - position = checkRng.compareEndPoints(start ? 'StartToStart' : 'EndToEnd', rng); - - // Before/after or an exact match - if (position > 0) { - endIndex = index - 1; - } else if (position < 0) { - startIndex = index + 1; - } else { - return {node : child}; - } - } - - // Check if child position is before or we didn't find a position - if (position < 0) { - // No element child was found use the parent element and the offset inside that - if (!child) { - checkRng.moveToElementText(parent); - checkRng.collapse(true); - child = parent; - inside = true; - } else - checkRng.collapse(false); - - // Walk character by character in text node until we hit the selected range endpoint, hit the end of document or parent isn't the right one - // We need to walk char by char since rng.text or rng.htmlText will trim line endings - offset = 0; - while (checkRng.compareEndPoints(start ? 'StartToStart' : 'StartToEnd', rng) !== 0) { - if (checkRng.move('character', 1) === 0 || parent != checkRng.parentElement()) { - break; - } - - offset++; - } - } else { - // Child position is after the selection endpoint - checkRng.collapse(true); - - // Walk character by character in text node until we hit the selected range endpoint, hit the end of document or parent isn't the right one - offset = 0; - while (checkRng.compareEndPoints(start ? 'StartToStart' : 'StartToEnd', rng) !== 0) { - if (checkRng.move('character', -1) === 0 || parent != checkRng.parentElement()) { - break; - } - - offset++; - } - } - - return {node : child, position : position, offset : offset, inside : inside}; - }; - - // Returns a W3C DOM compatible range object by using the IE Range API - function getRange() { - var ieRange = selection.getRng(), domRange = dom.createRng(), element, collapsed, tmpRange, element2, bookmark, fail; - - // If selection is outside the current document just return an empty range - element = ieRange.item ? ieRange.item(0) : ieRange.parentElement(); - if (element.ownerDocument != dom.doc) - return domRange; - - collapsed = selection.isCollapsed(); - - // Handle control selection - if (ieRange.item) { - domRange.setStart(element.parentNode, dom.nodeIndex(element)); - domRange.setEnd(domRange.startContainer, domRange.startOffset + 1); - - return domRange; - } - - function findEndPoint(start) { - var endPoint = getPosition(ieRange, start), container, offset, textNodeOffset = 0, sibling, undef, nodeValue; - - container = endPoint.node; - offset = endPoint.offset; - - if (endPoint.inside && !container.hasChildNodes()) { - domRange[start ? 'setStart' : 'setEnd'](container, 0); - return; - } - - if (offset === undef) { - domRange[start ? 'setStartBefore' : 'setEndAfter'](container); - return; - } - - if (endPoint.position < 0) { - sibling = endPoint.inside ? container.firstChild : container.nextSibling; - - if (!sibling) { - domRange[start ? 'setStartAfter' : 'setEndAfter'](container); - return; - } - - if (!offset) { - if (sibling.nodeType == 3) - domRange[start ? 'setStart' : 'setEnd'](sibling, 0); - else - domRange[start ? 'setStartBefore' : 'setEndBefore'](sibling); - - return; - } - - // Find the text node and offset - while (sibling) { - nodeValue = sibling.nodeValue; - textNodeOffset += nodeValue.length; - - // We are at or passed the position we where looking for - if (textNodeOffset >= offset) { - container = sibling; - textNodeOffset -= offset; - textNodeOffset = nodeValue.length - textNodeOffset; - break; - } - - sibling = sibling.nextSibling; - } - } else { - // Find the text node and offset - sibling = container.previousSibling; - - if (!sibling) - return domRange[start ? 'setStartBefore' : 'setEndBefore'](container); - - // If there isn't any text to loop then use the first position - if (!offset) { - if (container.nodeType == 3) - domRange[start ? 'setStart' : 'setEnd'](sibling, container.nodeValue.length); - else - domRange[start ? 'setStartAfter' : 'setEndAfter'](sibling); - - return; - } - - while (sibling) { - textNodeOffset += sibling.nodeValue.length; - - // We are at or passed the position we where looking for - if (textNodeOffset >= offset) { - container = sibling; - textNodeOffset -= offset; - break; - } - - sibling = sibling.previousSibling; - } - } - - domRange[start ? 'setStart' : 'setEnd'](container, textNodeOffset); - }; - - try { - // Find start point - findEndPoint(true); - - // Find end point if needed - if (!collapsed) - findEndPoint(); - } catch (ex) { - // IE has a nasty bug where text nodes might throw "invalid argument" when you - // access the nodeValue or other properties of text nodes. This seems to happend when - // text nodes are split into two nodes by a delete/backspace call. So lets detect it and try to fix it. - if (ex.number == -2147024809) { - // Get the current selection - bookmark = self.getBookmark(2); - - // Get start element - tmpRange = ieRange.duplicate(); - tmpRange.collapse(true); - element = tmpRange.parentElement(); - - // Get end element - if (!collapsed) { - tmpRange = ieRange.duplicate(); - tmpRange.collapse(false); - element2 = tmpRange.parentElement(); - element2.innerHTML = element2.innerHTML; - } - - // Remove the broken elements - element.innerHTML = element.innerHTML; - - // Restore the selection - self.moveToBookmark(bookmark); - - // Since the range has moved we need to re-get it - ieRange = selection.getRng(); - - // Find start point - findEndPoint(true); - - // Find end point if needed - if (!collapsed) - findEndPoint(); - } else - throw ex; // Throw other errors - } - - return domRange; - }; - - this.getBookmark = function(type) { - var rng = selection.getRng(), start, end, bookmark = {}; - - function getIndexes(node) { - var parent, root, children, i, indexes = []; - - parent = node.parentNode; - root = dom.getRoot().parentNode; - - while (parent != root && parent.nodeType !== 9) { - children = parent.children; - - i = children.length; - while (i--) { - if (node === children[i]) { - indexes.push(i); - break; - } - } - - node = parent; - parent = parent.parentNode; - } - - return indexes; - }; - - function getBookmarkEndPoint(start) { - var position; - - position = getPosition(rng, start); - if (position) { - return { - position : position.position, - offset : position.offset, - indexes : getIndexes(position.node), - inside : position.inside - }; - } - }; - - // Non ubstructive bookmark - if (type === 2) { - // Handle text selection - if (!rng.item) { - bookmark.start = getBookmarkEndPoint(true); - - if (!selection.isCollapsed()) - bookmark.end = getBookmarkEndPoint(); - } else - bookmark.start = {ctrl : true, indexes : getIndexes(rng.item(0))}; - } - - return bookmark; - }; - - this.moveToBookmark = function(bookmark) { - var rng, body = dom.doc.body; - - function resolveIndexes(indexes) { - var node, i, idx, children; - - node = dom.getRoot(); - for (i = indexes.length - 1; i >= 0; i--) { - children = node.children; - idx = indexes[i]; - - if (idx <= children.length - 1) { - node = children[idx]; - } - } - - return node; - }; - - function setBookmarkEndPoint(start) { - var endPoint = bookmark[start ? 'start' : 'end'], moveLeft, moveRng, undef; - - if (endPoint) { - moveLeft = endPoint.position > 0; - - moveRng = body.createTextRange(); - moveRng.moveToElementText(resolveIndexes(endPoint.indexes)); - - offset = endPoint.offset; - if (offset !== undef) { - moveRng.collapse(endPoint.inside || moveLeft); - moveRng.moveStart('character', moveLeft ? -offset : offset); - } else - moveRng.collapse(start); - - rng.setEndPoint(start ? 'StartToStart' : 'EndToStart', moveRng); - - if (start) - rng.collapse(true); - } - }; - - if (bookmark.start) { - if (bookmark.start.ctrl) { - rng = body.createControlRange(); - rng.addElement(resolveIndexes(bookmark.start.indexes)); - rng.select(); - } else { - rng = body.createTextRange(); - setBookmarkEndPoint(true); - setBookmarkEndPoint(); - rng.select(); - } - } - }; - - this.addRange = function(rng) { - var ieRng, ctrlRng, startContainer, startOffset, endContainer, endOffset, sibling, - doc = selection.dom.doc, body = doc.body, nativeRng, ctrlElm; - - function setEndPoint(start) { - var container, offset, marker, tmpRng, nodes; - - marker = dom.create('a'); - container = start ? startContainer : endContainer; - offset = start ? startOffset : endOffset; - tmpRng = ieRng.duplicate(); - - if (container == doc || container == doc.documentElement) { - container = body; - offset = 0; - } - - if (container.nodeType == 3) { - container.parentNode.insertBefore(marker, container); - tmpRng.moveToElementText(marker); - tmpRng.moveStart('character', offset); - dom.remove(marker); - ieRng.setEndPoint(start ? 'StartToStart' : 'EndToEnd', tmpRng); - } else { - nodes = container.childNodes; - - if (nodes.length) { - if (offset >= nodes.length) { - dom.insertAfter(marker, nodes[nodes.length - 1]); - } else { - container.insertBefore(marker, nodes[offset]); - } - - tmpRng.moveToElementText(marker); - } else if (container.canHaveHTML) { - // Empty node selection for example
    |
    - // Setting innerHTML with a span marker then remove that marker seems to keep empty block elements open - container.innerHTML = '\uFEFF'; - marker = container.firstChild; - tmpRng.moveToElementText(marker); - tmpRng.collapse(FALSE); // Collapse false works better than true for some odd reason - } - - ieRng.setEndPoint(start ? 'StartToStart' : 'EndToEnd', tmpRng); - dom.remove(marker); - } - } - - // Setup some shorter versions - startContainer = rng.startContainer; - startOffset = rng.startOffset; - endContainer = rng.endContainer; - endOffset = rng.endOffset; - ieRng = body.createTextRange(); - - // If single element selection then try making a control selection out of it - if (startContainer == endContainer && startContainer.nodeType == 1) { - // Trick to place the caret inside an empty block element like

    - if (startOffset == endOffset && !startContainer.hasChildNodes()) { - if (startContainer.canHaveHTML) { - // Check if previous sibling is an empty block if it is then we need to render it - // IE would otherwise move the caret into the sibling instead of the empty startContainer see: #5236 - // Example this:

    |

    would become this:

    |

    - sibling = startContainer.previousSibling; - if (sibling && !sibling.hasChildNodes() && dom.isBlock(sibling)) { - sibling.innerHTML = '\uFEFF'; - } else { - sibling = null; - } - - startContainer.innerHTML = '\uFEFF\uFEFF'; - ieRng.moveToElementText(startContainer.lastChild); - ieRng.select(); - dom.doc.selection.clear(); - startContainer.innerHTML = ''; - - if (sibling) { - sibling.innerHTML = ''; - } - return; - } else { - startOffset = dom.nodeIndex(startContainer); - startContainer = startContainer.parentNode; - } - } - - if (startOffset == endOffset - 1) { - try { - ctrlElm = startContainer.childNodes[startOffset]; - ctrlRng = body.createControlRange(); - ctrlRng.addElement(ctrlElm); - ctrlRng.select(); - - // Check if the range produced is on the correct element and is a control range - // On IE 8 it will select the parent contentEditable container if you select an inner element see: #5398 - nativeRng = selection.getRng(); - if (nativeRng.item && ctrlElm === nativeRng.item(0)) { - return; - } - } catch (ex) { - // Ignore - } - } - } - - // Set start/end point of selection - setEndPoint(true); - setEndPoint(); - - // Select the new range and scroll it into view - ieRng.select(); - }; - - // Expose range method - this.getRangeAt = getRange; - }; - - // Expose the selection object - tinymce.dom.TridentSelection = Selection; -})(); - - -(function(tinymce) { - tinymce.dom.Element = function(id, settings) { - var t = this, dom, el; - - t.settings = settings = settings || {}; - t.id = id; - t.dom = dom = settings.dom || tinymce.DOM; - - // Only IE leaks DOM references, this is a lot faster - if (!tinymce.isIE) - el = dom.get(t.id); - - tinymce.each( - ('getPos,getRect,getParent,add,setStyle,getStyle,setStyles,' + - 'setAttrib,setAttribs,getAttrib,addClass,removeClass,' + - 'hasClass,getOuterHTML,setOuterHTML,remove,show,hide,' + - 'isHidden,setHTML,get').split(/,/), function(k) { - t[k] = function() { - var a = [id], i; - - for (i = 0; i < arguments.length; i++) - a.push(arguments[i]); - - a = dom[k].apply(dom, a); - t.update(k); - - return a; - }; - } - ); - - tinymce.extend(t, { - on : function(n, f, s) { - return tinymce.dom.Event.add(t.id, n, f, s); - }, - - getXY : function() { - return { - x : parseInt(t.getStyle('left')), - y : parseInt(t.getStyle('top')) - }; - }, - - getSize : function() { - var n = dom.get(t.id); - - return { - w : parseInt(t.getStyle('width') || n.clientWidth), - h : parseInt(t.getStyle('height') || n.clientHeight) - }; - }, - - moveTo : function(x, y) { - t.setStyles({left : x, top : y}); - }, - - moveBy : function(x, y) { - var p = t.getXY(); - - t.moveTo(p.x + x, p.y + y); - }, - - resizeTo : function(w, h) { - t.setStyles({width : w, height : h}); - }, - - resizeBy : function(w, h) { - var s = t.getSize(); - - t.resizeTo(s.w + w, s.h + h); - }, - - update : function(k) { - var b; - - if (tinymce.isIE6 && settings.blocker) { - k = k || ''; - - // Ignore getters - if (k.indexOf('get') === 0 || k.indexOf('has') === 0 || k.indexOf('is') === 0) - return; - - // Remove blocker on remove - if (k == 'remove') { - dom.remove(t.blocker); - return; - } - - if (!t.blocker) { - t.blocker = dom.uniqueId(); - b = dom.add(settings.container || dom.getRoot(), 'iframe', {id : t.blocker, style : 'position:absolute;', frameBorder : 0, src : 'javascript:""'}); - dom.setStyle(b, 'opacity', 0); - } else - b = dom.get(t.blocker); - - dom.setStyles(b, { - left : t.getStyle('left', 1), - top : t.getStyle('top', 1), - width : t.getStyle('width', 1), - height : t.getStyle('height', 1), - display : t.getStyle('display', 1), - zIndex : parseInt(t.getStyle('zIndex', 1) || 0) - 1 - }); - } - } - }); - }; -})(tinymce); - -(function(tinymce) { - function trimNl(s) { - return s.replace(/[\n\r]+/g, ''); - }; - - // Shorten names - var is = tinymce.is, isIE = tinymce.isIE, each = tinymce.each, TreeWalker = tinymce.dom.TreeWalker; - - tinymce.create('tinymce.dom.Selection', { - Selection : function(dom, win, serializer, editor) { - var t = this; - - t.dom = dom; - t.win = win; - t.serializer = serializer; - t.editor = editor; - - // Add events - each([ - 'onBeforeSetContent', - - 'onBeforeGetContent', - - 'onSetContent', - - 'onGetContent' - ], function(e) { - t[e] = new tinymce.util.Dispatcher(t); - }); - - // No W3C Range support - if (!t.win.getSelection) - t.tridentSel = new tinymce.dom.TridentSelection(t); - - if (tinymce.isIE && dom.boxModel) - this._fixIESelection(); - - // Prevent leaks - tinymce.addUnload(t.destroy, t); - }, - - setCursorLocation: function(node, offset) { - var t = this; var r = t.dom.createRng(); - r.setStart(node, offset); - r.setEnd(node, offset); - t.setRng(r); - t.collapse(false); - }, - getContent : function(s) { - var t = this, r = t.getRng(), e = t.dom.create("body"), se = t.getSel(), wb, wa, n; - - s = s || {}; - wb = wa = ''; - s.get = true; - s.format = s.format || 'html'; - s.forced_root_block = ''; - t.onBeforeGetContent.dispatch(t, s); - - if (s.format == 'text') - return t.isCollapsed() ? '' : (r.text || (se.toString ? se.toString() : '')); - - if (r.cloneContents) { - n = r.cloneContents(); - - if (n) - e.appendChild(n); - } else if (is(r.item) || is(r.htmlText)) { - // IE will produce invalid markup if elements are present that - // it doesn't understand like custom elements or HTML5 elements. - // Adding a BR in front of the contents and then remoiving it seems to fix it though. - e.innerHTML = '
    ' + (r.item ? r.item(0).outerHTML : r.htmlText); - e.removeChild(e.firstChild); - } else - e.innerHTML = r.toString(); - - // Keep whitespace before and after - if (/^\s/.test(e.innerHTML)) - wb = ' '; - - if (/\s+$/.test(e.innerHTML)) - wa = ' '; - - s.getInner = true; - - s.content = t.isCollapsed() ? '' : wb + t.serializer.serialize(e, s) + wa; - t.onGetContent.dispatch(t, s); - - return s.content; - }, - - setContent : function(content, args) { - var self = this, rng = self.getRng(), caretNode, doc = self.win.document, frag, temp; - - args = args || {format : 'html'}; - args.set = true; - content = args.content = content; - - // Dispatch before set content event - if (!args.no_events) - self.onBeforeSetContent.dispatch(self, args); - - content = args.content; - - if (rng.insertNode) { - // Make caret marker since insertNode places the caret in the beginning of text after insert - content += '_'; - - // Delete and insert new node - if (rng.startContainer == doc && rng.endContainer == doc) { - // WebKit will fail if the body is empty since the range is then invalid and it can't insert contents - doc.body.innerHTML = content; - } else { - rng.deleteContents(); - - if (doc.body.childNodes.length === 0) { - doc.body.innerHTML = content; - } else { - // createContextualFragment doesn't exists in IE 9 DOMRanges - if (rng.createContextualFragment) { - rng.insertNode(rng.createContextualFragment(content)); - } else { - // Fake createContextualFragment call in IE 9 - frag = doc.createDocumentFragment(); - temp = doc.createElement('div'); - - frag.appendChild(temp); - temp.outerHTML = content; - - rng.insertNode(frag); - } - } - } - - // Move to caret marker - caretNode = self.dom.get('__caret'); - - // Make sure we wrap it compleatly, Opera fails with a simple select call - rng = doc.createRange(); - rng.setStartBefore(caretNode); - rng.setEndBefore(caretNode); - self.setRng(rng); - - // Remove the caret position - self.dom.remove('__caret'); - - try { - self.setRng(rng); - } catch (ex) { - // Might fail on Opera for some odd reason - } - } else { - if (rng.item) { - // Delete content and get caret text selection - doc.execCommand('Delete', false, null); - rng = self.getRng(); - } - - // Explorer removes spaces from the beginning of pasted contents - if (/^\s+/.test(content)) { - rng.pasteHTML('_' + content); - self.dom.remove('__mce_tmp'); - } else - rng.pasteHTML(content); - } - - // Dispatch set content event - if (!args.no_events) - self.onSetContent.dispatch(self, args); - }, - - getStart : function() { - var self = this, rng = self.getRng(), startElement, parentElement, checkRng, node; - - if (rng.duplicate || rng.item) { - // Control selection, return first item - if (rng.item) - return rng.item(0); - - // Get start element - checkRng = rng.duplicate(); - checkRng.collapse(1); - startElement = checkRng.parentElement(); - if (startElement.ownerDocument !== self.dom.doc) { - startElement = self.dom.getRoot(); - } - - // Check if range parent is inside the start element, then return the inner parent element - // This will fix issues when a single element is selected, IE would otherwise return the wrong start element - parentElement = node = rng.parentElement(); - while (node = node.parentNode) { - if (node == startElement) { - startElement = parentElement; - break; - } - } - - return startElement; - } else { - startElement = rng.startContainer; - - if (startElement.nodeType == 1 && startElement.hasChildNodes()) - startElement = startElement.childNodes[Math.min(startElement.childNodes.length - 1, rng.startOffset)]; - - if (startElement && startElement.nodeType == 3) - return startElement.parentNode; - - return startElement; - } - }, - - getEnd : function() { - var self = this, rng = self.getRng(), endElement, endOffset; - - if (rng.duplicate || rng.item) { - if (rng.item) - return rng.item(0); - - rng = rng.duplicate(); - rng.collapse(0); - endElement = rng.parentElement(); - if (endElement.ownerDocument !== self.dom.doc) { - endElement = self.dom.getRoot(); - } - - if (endElement && endElement.nodeName == 'BODY') - return endElement.lastChild || endElement; - - return endElement; - } else { - endElement = rng.endContainer; - endOffset = rng.endOffset; - - if (endElement.nodeType == 1 && endElement.hasChildNodes()) - endElement = endElement.childNodes[endOffset > 0 ? endOffset - 1 : endOffset]; - - if (endElement && endElement.nodeType == 3) - return endElement.parentNode; - - return endElement; - } - }, - - getBookmark : function(type, normalized) { - var t = this, dom = t.dom, rng, rng2, id, collapsed, name, element, index, chr = '\uFEFF', styles; - - function findIndex(name, element) { - var index = 0; - - each(dom.select(name), function(node, i) { - if (node == element) - index = i; - }); - - return index; - }; - - function normalizeTableCellSelection(rng) { - function moveEndPoint(start) { - var container, offset, childNodes, prefix = start ? 'start' : 'end'; - - container = rng[prefix + 'Container']; - offset = rng[prefix + 'Offset']; - - if (container.nodeType == 1 && container.nodeName == "TR") { - childNodes = container.childNodes; - container = childNodes[Math.min(start ? offset : offset - 1, childNodes.length - 1)]; - if (container) { - offset = start ? 0 : container.childNodes.length; - rng['set' + (start ? 'Start' : 'End')](container, offset); - } - } - }; - - moveEndPoint(true); - moveEndPoint(); - - return rng; - }; - - function getLocation() { - var rng = t.getRng(true), root = dom.getRoot(), bookmark = {}; - - function getPoint(rng, start) { - var container = rng[start ? 'startContainer' : 'endContainer'], - offset = rng[start ? 'startOffset' : 'endOffset'], point = [], node, childNodes, after = 0; - - if (container.nodeType == 3) { - if (normalized) { - for (node = container.previousSibling; node && node.nodeType == 3; node = node.previousSibling) - offset += node.nodeValue.length; - } - - point.push(offset); - } else { - childNodes = container.childNodes; - - if (offset >= childNodes.length && childNodes.length) { - after = 1; - offset = Math.max(0, childNodes.length - 1); - } - - point.push(t.dom.nodeIndex(childNodes[offset], normalized) + after); - } - - for (; container && container != root; container = container.parentNode) - point.push(t.dom.nodeIndex(container, normalized)); - - return point; - }; - - bookmark.start = getPoint(rng, true); - - if (!t.isCollapsed()) - bookmark.end = getPoint(rng); - - return bookmark; - }; - - if (type == 2) { - if (t.tridentSel) - return t.tridentSel.getBookmark(type); - - return getLocation(); - } - - // Handle simple range - if (type) - return {rng : t.getRng()}; - - rng = t.getRng(); - id = dom.uniqueId(); - collapsed = tinyMCE.activeEditor.selection.isCollapsed(); - styles = 'overflow:hidden;line-height:0px'; - - // Explorer method - if (rng.duplicate || rng.item) { - // Text selection - if (!rng.item) { - rng2 = rng.duplicate(); - - try { - // Insert start marker - rng.collapse(); - rng.pasteHTML('' + chr + ''); - - // Insert end marker - if (!collapsed) { - rng2.collapse(false); - - // Detect the empty space after block elements in IE and move the end back one character

    ] becomes

    ]

    - rng.moveToElementText(rng2.parentElement()); - if (rng.compareEndPoints('StartToEnd', rng2) === 0) - rng2.move('character', -1); - - rng2.pasteHTML('' + chr + ''); - } - } catch (ex) { - // IE might throw unspecified error so lets ignore it - return null; - } - } else { - // Control selection - element = rng.item(0); - name = element.nodeName; - - return {name : name, index : findIndex(name, element)}; - } - } else { - element = t.getNode(); - name = element.nodeName; - if (name == 'IMG') - return {name : name, index : findIndex(name, element)}; - - // W3C method - rng2 = normalizeTableCellSelection(rng.cloneRange()); - - // Insert end marker - if (!collapsed) { - rng2.collapse(false); - rng2.insertNode(dom.create('span', {'data-mce-type' : "bookmark", id : id + '_end', style : styles}, chr)); - } - - rng = normalizeTableCellSelection(rng); - rng.collapse(true); - rng.insertNode(dom.create('span', {'data-mce-type' : "bookmark", id : id + '_start', style : styles}, chr)); - } - - t.moveToBookmark({id : id, keep : 1}); - - return {id : id}; - }, - - moveToBookmark : function(bookmark) { - var t = this, dom = t.dom, marker1, marker2, rng, root, startContainer, endContainer, startOffset, endOffset; - - function setEndPoint(start) { - var point = bookmark[start ? 'start' : 'end'], i, node, offset, children; - - if (point) { - offset = point[0]; - - // Find container node - for (node = root, i = point.length - 1; i >= 1; i--) { - children = node.childNodes; - - if (point[i] > children.length - 1) - return; - - node = children[point[i]]; - } - - // Move text offset to best suitable location - if (node.nodeType === 3) - offset = Math.min(point[0], node.nodeValue.length); - - // Move element offset to best suitable location - if (node.nodeType === 1) - offset = Math.min(point[0], node.childNodes.length); - - // Set offset within container node - if (start) - rng.setStart(node, offset); - else - rng.setEnd(node, offset); - } - - return true; - }; - - function restoreEndPoint(suffix) { - var marker = dom.get(bookmark.id + '_' + suffix), node, idx, next, prev, keep = bookmark.keep; - - if (marker) { - node = marker.parentNode; - - if (suffix == 'start') { - if (!keep) { - idx = dom.nodeIndex(marker); - } else { - node = marker.firstChild; - idx = 1; - } - - startContainer = endContainer = node; - startOffset = endOffset = idx; - } else { - if (!keep) { - idx = dom.nodeIndex(marker); - } else { - node = marker.firstChild; - idx = 1; - } - - endContainer = node; - endOffset = idx; - } - - if (!keep) { - prev = marker.previousSibling; - next = marker.nextSibling; - - // Remove all marker text nodes - each(tinymce.grep(marker.childNodes), function(node) { - if (node.nodeType == 3) - node.nodeValue = node.nodeValue.replace(/\uFEFF/g, ''); - }); - - // Remove marker but keep children if for example contents where inserted into the marker - // Also remove duplicated instances of the marker for example by a split operation or by WebKit auto split on paste feature - while (marker = dom.get(bookmark.id + '_' + suffix)) - dom.remove(marker, 1); - - // If siblings are text nodes then merge them unless it's Opera since it some how removes the node - // and we are sniffing since adding a lot of detection code for a browser with 3% of the market isn't worth the effort. Sorry, Opera but it's just a fact - if (prev && next && prev.nodeType == next.nodeType && prev.nodeType == 3 && !tinymce.isOpera) { - idx = prev.nodeValue.length; - prev.appendData(next.nodeValue); - dom.remove(next); - - if (suffix == 'start') { - startContainer = endContainer = prev; - startOffset = endOffset = idx; - } else { - endContainer = prev; - endOffset = idx; - } - } - } - } - }; - - function addBogus(node) { - // Adds a bogus BR element for empty block elements - if (dom.isBlock(node) && !node.innerHTML && !isIE) - node.innerHTML = '
    '; - - return node; - }; - - if (bookmark) { - if (bookmark.start) { - rng = dom.createRng(); - root = dom.getRoot(); - - if (t.tridentSel) - return t.tridentSel.moveToBookmark(bookmark); - - if (setEndPoint(true) && setEndPoint()) { - t.setRng(rng); - } - } else if (bookmark.id) { - // Restore start/end points - restoreEndPoint('start'); - restoreEndPoint('end'); - - if (startContainer) { - rng = dom.createRng(); - rng.setStart(addBogus(startContainer), startOffset); - rng.setEnd(addBogus(endContainer), endOffset); - t.setRng(rng); - } - } else if (bookmark.name) { - t.select(dom.select(bookmark.name)[bookmark.index]); - } else if (bookmark.rng) - t.setRng(bookmark.rng); - } - }, - - select : function(node, content) { - var t = this, dom = t.dom, rng = dom.createRng(), idx; - - function setPoint(node, start) { - var walker = new TreeWalker(node, node); - - do { - // Text node - if (node.nodeType == 3 && tinymce.trim(node.nodeValue).length !== 0) { - if (start) - rng.setStart(node, 0); - else - rng.setEnd(node, node.nodeValue.length); - - return; - } - - // BR element - if (node.nodeName == 'BR') { - if (start) - rng.setStartBefore(node); - else - rng.setEndBefore(node); - - return; - } - } while (node = (start ? walker.next() : walker.prev())); - }; - - if (node) { - idx = dom.nodeIndex(node); - rng.setStart(node.parentNode, idx); - rng.setEnd(node.parentNode, idx + 1); - - // Find first/last text node or BR element - if (content) { - setPoint(node, 1); - setPoint(node); - } - - t.setRng(rng); - } - - return node; - }, - - isCollapsed : function() { - var t = this, r = t.getRng(), s = t.getSel(); - - if (!r || r.item) - return false; - - if (r.compareEndPoints) - return r.compareEndPoints('StartToEnd', r) === 0; - - return !s || r.collapsed; - }, - - collapse : function(to_start) { - var self = this, rng = self.getRng(), node; - - // Control range on IE - if (rng.item) { - node = rng.item(0); - rng = self.win.document.body.createTextRange(); - rng.moveToElementText(node); - } - - rng.collapse(!!to_start); - self.setRng(rng); - }, - - getSel : function() { - var t = this, w = this.win; - - return w.getSelection ? w.getSelection() : w.document.selection; - }, - - getRng : function(w3c) { - var self = this, selection, rng, elm, doc = self.win.document; - - // Found tridentSel object then we need to use that one - if (w3c && self.tridentSel) { - return self.tridentSel.getRangeAt(0); - } - - try { - if (selection = self.getSel()) { - rng = selection.rangeCount > 0 ? selection.getRangeAt(0) : (selection.createRange ? selection.createRange() : doc.createRange()); - } - } catch (ex) { - // IE throws unspecified error here if TinyMCE is placed in a frame/iframe - } - - // We have W3C ranges and it's IE then fake control selection since IE9 doesn't handle that correctly yet - if (tinymce.isIE && rng && rng.setStart && doc.selection.createRange().item) { - elm = doc.selection.createRange().item(0); - rng = doc.createRange(); - rng.setStartBefore(elm); - rng.setEndAfter(elm); - } - - // No range found then create an empty one - // This can occur when the editor is placed in a hidden container element on Gecko - // Or on IE when there was an exception - if (!rng) { - rng = doc.createRange ? doc.createRange() : doc.body.createTextRange(); - } - - // If range is at start of document then move it to start of body - if (rng.setStart && rng.startContainer.nodeType === 9 && rng.collapsed) { - elm = self.dom.getRoot(); - rng.setStart(elm, 0); - rng.setEnd(elm, 0); - } - - if (self.selectedRange && self.explicitRange) { - if (rng.compareBoundaryPoints(rng.START_TO_START, self.selectedRange) === 0 && rng.compareBoundaryPoints(rng.END_TO_END, self.selectedRange) === 0) { - // Safari, Opera and Chrome only ever select text which causes the range to change. - // This lets us use the originally set range if the selection hasn't been changed by the user. - rng = self.explicitRange; - } else { - self.selectedRange = null; - self.explicitRange = null; - } - } - - return rng; - }, - - setRng : function(r, forward) { - var s, t = this; - - if (!t.tridentSel) { - s = t.getSel(); - - if (s) { - t.explicitRange = r; - - try { - s.removeAllRanges(); - } catch (ex) { - // IE9 might throw errors here don't know why - } - - s.addRange(r); - - // Forward is set to false and we have an extend function - if (forward === false && s.extend) { - s.collapse(r.endContainer, r.endOffset); - s.extend(r.startContainer, r.startOffset); - } - - // adding range isn't always successful so we need to check range count otherwise an exception can occur - t.selectedRange = s.rangeCount > 0 ? s.getRangeAt(0) : null; - } - } else { - // Is W3C Range - if (r.cloneRange) { - try { - t.tridentSel.addRange(r); - return; - } catch (ex) { - //IE9 throws an error here if called before selection is placed in the editor - } - } - - // Is IE specific range - try { - r.select(); - } catch (ex) { - // Needed for some odd IE bug #1843306 - } - } - }, - - setNode : function(n) { - var t = this; - - t.setContent(t.dom.getOuterHTML(n)); - - return n; - }, - - getNode : function() { - var t = this, rng = t.getRng(), sel = t.getSel(), elm, start = rng.startContainer, end = rng.endContainer; - - function skipEmptyTextNodes(n, forwards) { - var orig = n; - while (n && n.nodeType === 3 && n.length === 0) { - n = forwards ? n.nextSibling : n.previousSibling; - } - return n || orig; - }; - - // Range maybe lost after the editor is made visible again - if (!rng) - return t.dom.getRoot(); - - if (rng.setStart) { - elm = rng.commonAncestorContainer; - - // Handle selection a image or other control like element such as anchors - if (!rng.collapsed) { - if (rng.startContainer == rng.endContainer) { - if (rng.endOffset - rng.startOffset < 2) { - if (rng.startContainer.hasChildNodes()) - elm = rng.startContainer.childNodes[rng.startOffset]; - } - } - - // If the anchor node is a element instead of a text node then return this element - //if (tinymce.isWebKit && sel.anchorNode && sel.anchorNode.nodeType == 1) - // return sel.anchorNode.childNodes[sel.anchorOffset]; - - // Handle cases where the selection is immediately wrapped around a node and return that node instead of it's parent. - // This happens when you double click an underlined word in FireFox. - if (start.nodeType === 3 && end.nodeType === 3) { - if (start.length === rng.startOffset) { - start = skipEmptyTextNodes(start.nextSibling, true); - } else { - start = start.parentNode; - } - if (rng.endOffset === 0) { - end = skipEmptyTextNodes(end.previousSibling, false); - } else { - end = end.parentNode; - } - - if (start && start === end) - return start; - } - } - - if (elm && elm.nodeType == 3) - return elm.parentNode; - - return elm; - } - - return rng.item ? rng.item(0) : rng.parentElement(); - }, - - getSelectedBlocks : function(st, en) { - var t = this, dom = t.dom, sb, eb, n, bl = []; - - sb = dom.getParent(st || t.getStart(), dom.isBlock); - eb = dom.getParent(en || t.getEnd(), dom.isBlock); - - if (sb) - bl.push(sb); - - if (sb && eb && sb != eb) { - n = sb; - - var walker = new TreeWalker(sb, dom.getRoot()); - while ((n = walker.next()) && n != eb) { - if (dom.isBlock(n)) - bl.push(n); - } - } - - if (eb && sb != eb) - bl.push(eb); - - return bl; - }, - - isForward: function(){ - var dom = this.dom, sel = this.getSel(), anchorRange, focusRange; - - // No support for selection direction then always return true - if (!sel || sel.anchorNode == null || sel.focusNode == null) { - return true; - } - - anchorRange = dom.createRng(); - anchorRange.setStart(sel.anchorNode, sel.anchorOffset); - anchorRange.collapse(true); - - focusRange = dom.createRng(); - focusRange.setStart(sel.focusNode, sel.focusOffset); - focusRange.collapse(true); - - return anchorRange.compareBoundaryPoints(anchorRange.START_TO_START, focusRange) <= 0; - }, - - normalize : function() { - var self = this, rng, normalized, collapsed, node, sibling; - - function normalizeEndPoint(start) { - var container, offset, walker, dom = self.dom, body = dom.getRoot(), node, nonEmptyElementsMap, nodeName; - - function hasBrBeforeAfter(node, left) { - var walker = new TreeWalker(node, dom.getParent(node.parentNode, dom.isBlock) || body); - - while (node = walker[left ? 'prev' : 'next']()) { - if (node.nodeName === "BR") { - return true; - } - } - }; - - // Walks the dom left/right to find a suitable text node to move the endpoint into - // It will only walk within the current parent block or body and will stop if it hits a block or a BR/IMG - function findTextNodeRelative(left, startNode) { - var walker, lastInlineElement; - - startNode = startNode || container; - walker = new TreeWalker(startNode, dom.getParent(startNode.parentNode, dom.isBlock) || body); - - // Walk left until we hit a text node we can move to or a block/br/img - while (node = walker[left ? 'prev' : 'next']()) { - // Found text node that has a length - if (node.nodeType === 3 && node.nodeValue.length > 0) { - container = node; - offset = left ? node.nodeValue.length : 0; - normalized = true; - return; - } - - // Break if we find a block or a BR/IMG/INPUT etc - if (dom.isBlock(node) || nonEmptyElementsMap[node.nodeName.toLowerCase()]) { - return; - } - - lastInlineElement = node; - } - - // Only fetch the last inline element when in caret mode for now - if (collapsed && lastInlineElement) { - container = lastInlineElement; - normalized = true; - offset = 0; - } - }; - - container = rng[(start ? 'start' : 'end') + 'Container']; - offset = rng[(start ? 'start' : 'end') + 'Offset']; - nonEmptyElementsMap = dom.schema.getNonEmptyElements(); - - // If the container is a document move it to the body element - if (container.nodeType === 9) { - container = dom.getRoot(); - offset = 0; - } - - // If the container is body try move it into the closest text node or position - if (container === body) { - // If start is before/after a image, table etc - if (start) { - node = container.childNodes[offset > 0 ? offset - 1 : 0]; - if (node) { - nodeName = node.nodeName.toLowerCase(); - if (nonEmptyElementsMap[node.nodeName] || node.nodeName == "TABLE") { - return; - } - } - } - - // Resolve the index - if (container.hasChildNodes()) { - container = container.childNodes[Math.min(!start && offset > 0 ? offset - 1 : offset, container.childNodes.length - 1)]; - offset = 0; - - // Don't walk into elements that doesn't have any child nodes like a IMG - if (container.hasChildNodes() && !/TABLE/.test(container.nodeName)) { - // Walk the DOM to find a text node to place the caret at or a BR - node = container; - walker = new TreeWalker(container, body); - - do { - // Found a text node use that position - if (node.nodeType === 3 && node.nodeValue.length > 0) { - offset = start ? 0 : node.nodeValue.length; - container = node; - normalized = true; - break; - } - - // Found a BR/IMG element that we can place the caret before - if (nonEmptyElementsMap[node.nodeName.toLowerCase()]) { - offset = dom.nodeIndex(node); - container = node.parentNode; - - // Put caret after image when moving the end point - if (node.nodeName == "IMG" && !start) { - offset++; - } - - normalized = true; - break; - } - } while (node = (start ? walker.next() : walker.prev())); - } - } - } - - // Lean the caret to the left if possible - if (collapsed) { - // So this: x|x - // Becomes: x|x - // Seems that only gecko has issues with this - if (container.nodeType === 3 && offset === 0) { - findTextNodeRelative(true); - } - - // Lean left into empty inline elements when the caret is before a BR - // So this: |
    - // Becomes: |
    - // Seems that only gecko has issues with this - if (container.nodeType === 1) { - node = container.childNodes[offset]; - if(node && node.nodeName === 'BR' && !hasBrBeforeAfter(node) && !hasBrBeforeAfter(node, true)) { - findTextNodeRelative(true, container.childNodes[offset]); - } - } - } - - // Lean the start of the selection right if possible - // So this: x[x] - // Becomes: x[x] - if (start && !collapsed && container.nodeType === 3 && offset === container.nodeValue.length) { - findTextNodeRelative(false); - } - - // Set endpoint if it was normalized - if (normalized) - rng['set' + (start ? 'Start' : 'End')](container, offset); - }; - - // Normalize only on non IE browsers for now - if (tinymce.isIE) - return; - - rng = self.getRng(); - collapsed = rng.collapsed; - - // Normalize the end points - normalizeEndPoint(true); - - if (!collapsed) - normalizeEndPoint(); - - // Set the selection if it was normalized - if (normalized) { - // If it was collapsed then make sure it still is - if (collapsed) { - rng.collapse(true); - } - - //console.log(self.dom.dumpRng(rng)); - self.setRng(rng, self.isForward()); - } - }, - - selectorChanged: function(selector, callback) { - var self = this, currentSelectors; - - if (!self.selectorChangedData) { - self.selectorChangedData = {}; - currentSelectors = {}; - - self.editor.onNodeChange.addToTop(function(ed, cm, node) { - var dom = self.dom, parents = dom.getParents(node, null, dom.getRoot()), matchedSelectors = {}; - - // Check for new matching selectors - each(self.selectorChangedData, function(callbacks, selector) { - each(parents, function(node) { - if (dom.is(node, selector)) { - if (!currentSelectors[selector]) { - // Execute callbacks - each(callbacks, function(callback) { - callback(true, {node: node, selector: selector, parents: parents}); - }); - - currentSelectors[selector] = callbacks; - } - - matchedSelectors[selector] = callbacks; - return false; - } - }); - }); - - // Check if current selectors still match - each(currentSelectors, function(callbacks, selector) { - if (!matchedSelectors[selector]) { - delete currentSelectors[selector]; - - each(callbacks, function(callback) { - callback(false, {node: node, selector: selector, parents: parents}); - }); - } - }); - }); - } - - // Add selector listeners - if (!self.selectorChangedData[selector]) { - self.selectorChangedData[selector] = []; - } - - self.selectorChangedData[selector].push(callback); - - return self; - }, - - scrollIntoView: function(elm) { - var y, viewPort, self = this, dom = self.dom; - - viewPort = dom.getViewPort(self.editor.getWin()); - y = dom.getPos(elm).y; - if (y < viewPort.y || y + 25 > viewPort.y + viewPort.h) { - self.editor.getWin().scrollTo(0, y < viewPort.y ? y : y - viewPort.h + 25); - } - }, - - destroy : function(manual) { - var self = this; - - self.win = null; - - // Manual destroy then remove unload handler - if (!manual) - tinymce.removeUnload(self.destroy); - }, - - // IE has an issue where you can't select/move the caret by clicking outside the body if the document is in standards mode - _fixIESelection : function() { - var dom = this.dom, doc = dom.doc, body = doc.body, started, startRng, htmlElm; - - // Return range from point or null if it failed - function rngFromPoint(x, y) { - var rng = body.createTextRange(); - - try { - rng.moveToPoint(x, y); - } catch (ex) { - // IE sometimes throws and exception, so lets just ignore it - rng = null; - } - - return rng; - }; - - // Fires while the selection is changing - function selectionChange(e) { - var pointRng; - - // Check if the button is down or not - if (e.button) { - // Create range from mouse position - pointRng = rngFromPoint(e.x, e.y); - - if (pointRng) { - // Check if pointRange is before/after selection then change the endPoint - if (pointRng.compareEndPoints('StartToStart', startRng) > 0) - pointRng.setEndPoint('StartToStart', startRng); - else - pointRng.setEndPoint('EndToEnd', startRng); - - pointRng.select(); - } - } else - endSelection(); - } - - // Removes listeners - function endSelection() { - var rng = doc.selection.createRange(); - - // If the range is collapsed then use the last start range - if (startRng && !rng.item && rng.compareEndPoints('StartToEnd', rng) === 0) - startRng.select(); - - dom.unbind(doc, 'mouseup', endSelection); - dom.unbind(doc, 'mousemove', selectionChange); - startRng = started = 0; - }; - - // Make HTML element unselectable since we are going to handle selection by hand - doc.documentElement.unselectable = true; - - // Detect when user selects outside BODY - dom.bind(doc, ['mousedown', 'contextmenu'], function(e) { - if (e.target.nodeName === 'HTML') { - if (started) - endSelection(); - - // Detect vertical scrollbar, since IE will fire a mousedown on the scrollbar and have target set as HTML - htmlElm = doc.documentElement; - if (htmlElm.scrollHeight > htmlElm.clientHeight) - return; - - started = 1; - // Setup start position - startRng = rngFromPoint(e.x, e.y); - if (startRng) { - // Listen for selection change events - dom.bind(doc, 'mouseup', endSelection); - dom.bind(doc, 'mousemove', selectionChange); - - dom.win.focus(); - startRng.select(); - } - } - }); - } - }); -})(tinymce); - -(function(tinymce) { - tinymce.dom.Serializer = function(settings, dom, schema) { - var onPreProcess, onPostProcess, isIE = tinymce.isIE, each = tinymce.each, htmlParser; - - // Support the old apply_source_formatting option - if (!settings.apply_source_formatting) - settings.indent = false; - - // Default DOM and Schema if they are undefined - dom = dom || tinymce.DOM; - schema = schema || new tinymce.html.Schema(settings); - settings.entity_encoding = settings.entity_encoding || 'named'; - settings.remove_trailing_brs = "remove_trailing_brs" in settings ? settings.remove_trailing_brs : true; - - onPreProcess = new tinymce.util.Dispatcher(self); - - onPostProcess = new tinymce.util.Dispatcher(self); - - htmlParser = new tinymce.html.DomParser(settings, schema); - - // Convert move data-mce-src, data-mce-href and data-mce-style into nodes or process them if needed - htmlParser.addAttributeFilter('src,href,style', function(nodes, name) { - var i = nodes.length, node, value, internalName = 'data-mce-' + name, urlConverter = settings.url_converter, urlConverterScope = settings.url_converter_scope, undef; - - while (i--) { - node = nodes[i]; - - value = node.attributes.map[internalName]; - if (value !== undef) { - // Set external name to internal value and remove internal - node.attr(name, value.length > 0 ? value : null); - node.attr(internalName, null); - } else { - // No internal attribute found then convert the value we have in the DOM - value = node.attributes.map[name]; - - if (name === "style") - value = dom.serializeStyle(dom.parseStyle(value), node.name); - else if (urlConverter) - value = urlConverter.call(urlConverterScope, value, name, node.name); - - node.attr(name, value.length > 0 ? value : null); - } - } - }); - - // Remove internal classes mceItem<..> or mceSelected - htmlParser.addAttributeFilter('class', function(nodes, name) { - var i = nodes.length, node, value; - - while (i--) { - node = nodes[i]; - value = node.attr('class').replace(/(?:^|\s)mce(Item\w+|Selected)(?!\S)/g, ''); - node.attr('class', value.length > 0 ? value : null); - } - }); - - // Remove bookmark elements - htmlParser.addAttributeFilter('data-mce-type', function(nodes, name, args) { - var i = nodes.length, node; - - while (i--) { - node = nodes[i]; - - if (node.attributes.map['data-mce-type'] === 'bookmark' && !args.cleanup) - node.remove(); - } - }); - - // Remove expando attributes - htmlParser.addAttributeFilter('data-mce-expando', function(nodes, name, args) { - var i = nodes.length; - - while (i--) { - nodes[i].attr(name, null); - } - }); - - htmlParser.addNodeFilter('noscript', function(nodes) { - var i = nodes.length, node; - - while (i--) { - node = nodes[i].firstChild; - - if (node) { - node.value = tinymce.html.Entities.decode(node.value); - } - } - }); - - // Force script into CDATA sections and remove the mce- prefix also add comments around styles - htmlParser.addNodeFilter('script,style', function(nodes, name) { - var i = nodes.length, node, value; - - function trim(value) { - return value.replace(/()/g, '\n') - .replace(/^[\r\n]*|[\r\n]*$/g, '') - .replace(/^\s*(()?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g, ''); - }; - - while (i--) { - node = nodes[i]; - value = node.firstChild ? node.firstChild.value : ''; - - if (name === "script") { - // Remove mce- prefix from script elements - node.attr('type', (node.attr('type') || 'text/javascript').replace(/^mce\-/, '')); - - if (value.length > 0) - node.firstChild.value = '// '; - } else { - if (value.length > 0) - node.firstChild.value = ''; - } - } - }); - - // Convert comments to cdata and handle protected comments - htmlParser.addNodeFilter('#comment', function(nodes, name) { - var i = nodes.length, node; - - while (i--) { - node = nodes[i]; - - if (node.value.indexOf('[CDATA[') === 0) { - node.name = '#cdata'; - node.type = 4; - node.value = node.value.replace(/^\[CDATA\[|\]\]$/g, ''); - } else if (node.value.indexOf('mce:protected ') === 0) { - node.name = "#text"; - node.type = 3; - node.raw = true; - node.value = unescape(node.value).substr(14); - } - } - }); - - htmlParser.addNodeFilter('xml:namespace,input', function(nodes, name) { - var i = nodes.length, node; - - while (i--) { - node = nodes[i]; - if (node.type === 7) - node.remove(); - else if (node.type === 1) { - if (name === "input" && !("type" in node.attributes.map)) - node.attr('type', 'text'); - } - } - }); - - // Fix list elements, TODO: Replace this later - if (settings.fix_list_elements) { - htmlParser.addNodeFilter('ul,ol', function(nodes, name) { - var i = nodes.length, node, parentNode; - - while (i--) { - node = nodes[i]; - parentNode = node.parent; - - if (parentNode.name === 'ul' || parentNode.name === 'ol') { - if (node.prev && node.prev.name === 'li') { - node.prev.append(node); - } - } - } - }); - } - - // Remove internal data attributes - htmlParser.addAttributeFilter('data-mce-src,data-mce-href,data-mce-style', function(nodes, name) { - var i = nodes.length; - - while (i--) { - nodes[i].attr(name, null); - } - }); - - // Return public methods - return { - schema : schema, - - addNodeFilter : htmlParser.addNodeFilter, - - addAttributeFilter : htmlParser.addAttributeFilter, - - onPreProcess : onPreProcess, - - onPostProcess : onPostProcess, - - serialize : function(node, args) { - var impl, doc, oldDoc, htmlSerializer, content; - - // Explorer won't clone contents of script and style and the - // selected index of select elements are cleared on a clone operation. - if (isIE && dom.select('script,style,select,map').length > 0) { - content = node.innerHTML; - node = node.cloneNode(false); - dom.setHTML(node, content); - } else - node = node.cloneNode(true); - - // Nodes needs to be attached to something in WebKit/Opera - // Older builds of Opera crashes if you attach the node to an document created dynamically - // and since we can't feature detect a crash we need to sniff the acutal build number - // This fix will make DOM ranges and make Sizzle happy! - impl = node.ownerDocument.implementation; - if (impl.createHTMLDocument) { - // Create an empty HTML document - doc = impl.createHTMLDocument(""); - - // Add the element or it's children if it's a body element to the new document - each(node.nodeName == 'BODY' ? node.childNodes : [node], function(node) { - doc.body.appendChild(doc.importNode(node, true)); - }); - - // Grab first child or body element for serialization - if (node.nodeName != 'BODY') - node = doc.body.firstChild; - else - node = doc.body; - - // set the new document in DOMUtils so createElement etc works - oldDoc = dom.doc; - dom.doc = doc; - } - - args = args || {}; - args.format = args.format || 'html'; - - // Pre process - if (!args.no_events) { - args.node = node; - onPreProcess.dispatch(self, args); - } - - // Setup serializer - htmlSerializer = new tinymce.html.Serializer(settings, schema); - - // Parse and serialize HTML - args.content = htmlSerializer.serialize( - htmlParser.parse(tinymce.trim(args.getInner ? node.innerHTML : dom.getOuterHTML(node)), args) - ); - - // Replace all BOM characters for now until we can find a better solution - if (!args.cleanup) - args.content = args.content.replace(/\uFEFF/g, ''); - - // Post process - if (!args.no_events) - onPostProcess.dispatch(self, args); - - // Restore the old document if it was changed - if (oldDoc) - dom.doc = oldDoc; - - args.node = null; - - return args.content; - }, - - addRules : function(rules) { - schema.addValidElements(rules); - }, - - setRules : function(rules) { - schema.setValidElements(rules); - } - }; - }; -})(tinymce); -(function(tinymce) { - tinymce.dom.ScriptLoader = function(settings) { - var QUEUED = 0, - LOADING = 1, - LOADED = 2, - states = {}, - queue = [], - scriptLoadedCallbacks = {}, - queueLoadedCallbacks = [], - loading = 0, - undef; - - function loadScript(url, callback) { - var t = this, dom = tinymce.DOM, elm, uri, loc, id; - - // Execute callback when script is loaded - function done() { - dom.remove(id); - - if (elm) - elm.onreadystatechange = elm.onload = elm = null; - - callback(); - }; - - function error() { - // Report the error so it's easier for people to spot loading errors - if (typeof(console) !== "undefined" && console.log) - console.log("Failed to load: " + url); - - // We can't mark it as done if there is a load error since - // A) We don't want to produce 404 errors on the server and - // B) the onerror event won't fire on all browsers. - // done(); - }; - - id = dom.uniqueId(); - - if (tinymce.isIE6) { - uri = new tinymce.util.URI(url); - loc = location; - - // If script is from same domain and we - // use IE 6 then use XHR since it's more reliable - if (uri.host == loc.hostname && uri.port == loc.port && (uri.protocol + ':') == loc.protocol && uri.protocol.toLowerCase() != 'file') { - tinymce.util.XHR.send({ - url : tinymce._addVer(uri.getURI()), - success : function(content) { - // Create new temp script element - var script = dom.create('script', { - type : 'text/javascript' - }); - - // Evaluate script in global scope - script.text = content; - document.getElementsByTagName('head')[0].appendChild(script); - dom.remove(script); - - done(); - }, - - error : error - }); - - return; - } - } - - // Create new script element - elm = document.createElement('script'); - elm.id = id; - elm.type = 'text/javascript'; - elm.src = tinymce._addVer(url); - - // Add onload listener for non IE browsers since IE9 - // fires onload event before the script is parsed and executed - if (!tinymce.isIE) - elm.onload = done; - - // Add onerror event will get fired on some browsers but not all of them - elm.onerror = error; - - // Opera 9.60 doesn't seem to fire the onreadystate event at correctly - if (!tinymce.isOpera) { - elm.onreadystatechange = function() { - var state = elm.readyState; - - // Loaded state is passed on IE 6 however there - // are known issues with this method but we can't use - // XHR in a cross domain loading - if (state == 'complete' || state == 'loaded') - done(); - }; - } - - // Most browsers support this feature so we report errors - // for those at least to help users track their missing plugins etc - // todo: Removed since it produced error if the document is unloaded by navigating away, re-add it as an option - /*elm.onerror = function() { - alert('Failed to load: ' + url); - };*/ - - // Add script to document - (document.getElementsByTagName('head')[0] || document.body).appendChild(elm); - }; - - this.isDone = function(url) { - return states[url] == LOADED; - }; - - this.markDone = function(url) { - states[url] = LOADED; - }; - - this.add = this.load = function(url, callback, scope) { - var item, state = states[url]; - - // Add url to load queue - if (state == undef) { - queue.push(url); - states[url] = QUEUED; - } - - if (callback) { - // Store away callback for later execution - if (!scriptLoadedCallbacks[url]) - scriptLoadedCallbacks[url] = []; - - scriptLoadedCallbacks[url].push({ - func : callback, - scope : scope || this - }); - } - }; - - this.loadQueue = function(callback, scope) { - this.loadScripts(queue, callback, scope); - }; - - this.loadScripts = function(scripts, callback, scope) { - var loadScripts; - - function execScriptLoadedCallbacks(url) { - // Execute URL callback functions - tinymce.each(scriptLoadedCallbacks[url], function(callback) { - callback.func.call(callback.scope); - }); - - scriptLoadedCallbacks[url] = undef; - }; - - queueLoadedCallbacks.push({ - func : callback, - scope : scope || this - }); - - loadScripts = function() { - var loadingScripts = tinymce.grep(scripts); - - // Current scripts has been handled - scripts.length = 0; - - // Load scripts that needs to be loaded - tinymce.each(loadingScripts, function(url) { - // Script is already loaded then execute script callbacks directly - if (states[url] == LOADED) { - execScriptLoadedCallbacks(url); - return; - } - - // Is script not loading then start loading it - if (states[url] != LOADING) { - states[url] = LOADING; - loading++; - - loadScript(url, function() { - states[url] = LOADED; - loading--; - - execScriptLoadedCallbacks(url); - - // Load more scripts if they where added by the recently loaded script - loadScripts(); - }); - } - }); - - // No scripts are currently loading then execute all pending queue loaded callbacks - if (!loading) { - tinymce.each(queueLoadedCallbacks, function(callback) { - callback.func.call(callback.scope); - }); - - queueLoadedCallbacks.length = 0; - } - }; - - loadScripts(); - }; - }; - - // Global script loader - tinymce.ScriptLoader = new tinymce.dom.ScriptLoader(); -})(tinymce); - -(function(tinymce) { - tinymce.dom.RangeUtils = function(dom) { - var INVISIBLE_CHAR = '\uFEFF'; - - this.walk = function(rng, callback) { - var startContainer = rng.startContainer, - startOffset = rng.startOffset, - endContainer = rng.endContainer, - endOffset = rng.endOffset, - ancestor, startPoint, - endPoint, node, parent, siblings, nodes; - - // Handle table cell selection the table plugin enables - // you to fake select table cells and perform formatting actions on them - nodes = dom.select('td.mceSelected,th.mceSelected'); - if (nodes.length > 0) { - tinymce.each(nodes, function(node) { - callback([node]); - }); - - return; - } - - function exclude(nodes) { - var node; - - // First node is excluded - node = nodes[0]; - if (node.nodeType === 3 && node === startContainer && startOffset >= node.nodeValue.length) { - nodes.splice(0, 1); - } - - // Last node is excluded - node = nodes[nodes.length - 1]; - if (endOffset === 0 && nodes.length > 0 && node === endContainer && node.nodeType === 3) { - nodes.splice(nodes.length - 1, 1); - } - - return nodes; - }; - - function collectSiblings(node, name, end_node) { - var siblings = []; - - for (; node && node != end_node; node = node[name]) - siblings.push(node); - - return siblings; - }; - - function findEndPoint(node, root) { - do { - if (node.parentNode == root) - return node; - - node = node.parentNode; - } while(node); - }; - - function walkBoundary(start_node, end_node, next) { - var siblingName = next ? 'nextSibling' : 'previousSibling'; - - for (node = start_node, parent = node.parentNode; node && node != end_node; node = parent) { - parent = node.parentNode; - siblings = collectSiblings(node == start_node ? node : node[siblingName], siblingName); - - if (siblings.length) { - if (!next) - siblings.reverse(); - - callback(exclude(siblings)); - } - } - }; - - // If index based start position then resolve it - if (startContainer.nodeType == 1 && startContainer.hasChildNodes()) - startContainer = startContainer.childNodes[startOffset]; - - // If index based end position then resolve it - if (endContainer.nodeType == 1 && endContainer.hasChildNodes()) - endContainer = endContainer.childNodes[Math.min(endOffset - 1, endContainer.childNodes.length - 1)]; - - // Same container - if (startContainer == endContainer) - return callback(exclude([startContainer])); - - // Find common ancestor and end points - ancestor = dom.findCommonAncestor(startContainer, endContainer); - - // Process left side - for (node = startContainer; node; node = node.parentNode) { - if (node === endContainer) - return walkBoundary(startContainer, ancestor, true); - - if (node === ancestor) - break; - } - - // Process right side - for (node = endContainer; node; node = node.parentNode) { - if (node === startContainer) - return walkBoundary(endContainer, ancestor); - - if (node === ancestor) - break; - } - - // Find start/end point - startPoint = findEndPoint(startContainer, ancestor) || startContainer; - endPoint = findEndPoint(endContainer, ancestor) || endContainer; - - // Walk left leaf - walkBoundary(startContainer, startPoint, true); - - // Walk the middle from start to end point - siblings = collectSiblings( - startPoint == startContainer ? startPoint : startPoint.nextSibling, - 'nextSibling', - endPoint == endContainer ? endPoint.nextSibling : endPoint - ); - - if (siblings.length) - callback(exclude(siblings)); - - // Walk right leaf - walkBoundary(endContainer, endPoint); - }; - - this.split = function(rng) { - var startContainer = rng.startContainer, - startOffset = rng.startOffset, - endContainer = rng.endContainer, - endOffset = rng.endOffset; - - function splitText(node, offset) { - return node.splitText(offset); - }; - - // Handle single text node - if (startContainer == endContainer && startContainer.nodeType == 3) { - if (startOffset > 0 && startOffset < startContainer.nodeValue.length) { - endContainer = splitText(startContainer, startOffset); - startContainer = endContainer.previousSibling; - - if (endOffset > startOffset) { - endOffset = endOffset - startOffset; - startContainer = endContainer = splitText(endContainer, endOffset).previousSibling; - endOffset = endContainer.nodeValue.length; - startOffset = 0; - } else { - endOffset = 0; - } - } - } else { - // Split startContainer text node if needed - if (startContainer.nodeType == 3 && startOffset > 0 && startOffset < startContainer.nodeValue.length) { - startContainer = splitText(startContainer, startOffset); - startOffset = 0; - } - - // Split endContainer text node if needed - if (endContainer.nodeType == 3 && endOffset > 0 && endOffset < endContainer.nodeValue.length) { - endContainer = splitText(endContainer, endOffset).previousSibling; - endOffset = endContainer.nodeValue.length; - } - } - - return { - startContainer : startContainer, - startOffset : startOffset, - endContainer : endContainer, - endOffset : endOffset - }; - }; - - }; - - tinymce.dom.RangeUtils.compareRanges = function(rng1, rng2) { - if (rng1 && rng2) { - // Compare native IE ranges - if (rng1.item || rng1.duplicate) { - // Both are control ranges and the selected element matches - if (rng1.item && rng2.item && rng1.item(0) === rng2.item(0)) - return true; - - // Both are text ranges and the range matches - if (rng1.isEqual && rng2.isEqual && rng2.isEqual(rng1)) - return true; - } else { - // Compare w3c ranges - return rng1.startContainer == rng2.startContainer && rng1.startOffset == rng2.startOffset; - } - } - - return false; - }; -})(tinymce); - -(function(tinymce) { - var Event = tinymce.dom.Event, each = tinymce.each; - - tinymce.create('tinymce.ui.KeyboardNavigation', { - KeyboardNavigation: function(settings, dom) { - var t = this, root = settings.root, items = settings.items, - enableUpDown = settings.enableUpDown, enableLeftRight = settings.enableLeftRight || !settings.enableUpDown, - excludeFromTabOrder = settings.excludeFromTabOrder, - itemFocussed, itemBlurred, rootKeydown, rootFocussed, focussedId; - - dom = dom || tinymce.DOM; - - itemFocussed = function(evt) { - focussedId = evt.target.id; - }; - - itemBlurred = function(evt) { - dom.setAttrib(evt.target.id, 'tabindex', '-1'); - }; - - rootFocussed = function(evt) { - var item = dom.get(focussedId); - dom.setAttrib(item, 'tabindex', '0'); - item.focus(); - }; - - t.focus = function() { - dom.get(focussedId).focus(); - }; - - t.destroy = function() { - each(items, function(item) { - var elm = dom.get(item.id); - - dom.unbind(elm, 'focus', itemFocussed); - dom.unbind(elm, 'blur', itemBlurred); - }); - - var rootElm = dom.get(root); - dom.unbind(rootElm, 'focus', rootFocussed); - dom.unbind(rootElm, 'keydown', rootKeydown); - - items = dom = root = t.focus = itemFocussed = itemBlurred = rootKeydown = rootFocussed = null; - t.destroy = function() {}; - }; - - t.moveFocus = function(dir, evt) { - var idx = -1, controls = t.controls, newFocus; - - if (!focussedId) - return; - - each(items, function(item, index) { - if (item.id === focussedId) { - idx = index; - return false; - } - }); - - idx += dir; - if (idx < 0) { - idx = items.length - 1; - } else if (idx >= items.length) { - idx = 0; - } - - newFocus = items[idx]; - dom.setAttrib(focussedId, 'tabindex', '-1'); - dom.setAttrib(newFocus.id, 'tabindex', '0'); - dom.get(newFocus.id).focus(); - - if (settings.actOnFocus) { - settings.onAction(newFocus.id); - } - - if (evt) - Event.cancel(evt); - }; - - rootKeydown = function(evt) { - var DOM_VK_LEFT = 37, DOM_VK_RIGHT = 39, DOM_VK_UP = 38, DOM_VK_DOWN = 40, DOM_VK_ESCAPE = 27, DOM_VK_ENTER = 14, DOM_VK_RETURN = 13, DOM_VK_SPACE = 32; - - switch (evt.keyCode) { - case DOM_VK_LEFT: - if (enableLeftRight) t.moveFocus(-1); - break; - - case DOM_VK_RIGHT: - if (enableLeftRight) t.moveFocus(1); - break; - - case DOM_VK_UP: - if (enableUpDown) t.moveFocus(-1); - break; - - case DOM_VK_DOWN: - if (enableUpDown) t.moveFocus(1); - break; - - case DOM_VK_ESCAPE: - if (settings.onCancel) { - settings.onCancel(); - Event.cancel(evt); - } - break; - - case DOM_VK_ENTER: - case DOM_VK_RETURN: - case DOM_VK_SPACE: - if (settings.onAction) { - settings.onAction(focussedId); - Event.cancel(evt); - } - break; - } - }; - - // Set up state and listeners for each item. - each(items, function(item, idx) { - var tabindex, elm; - - if (!item.id) { - item.id = dom.uniqueId('_mce_item_'); - } - - elm = dom.get(item.id); - - if (excludeFromTabOrder) { - dom.bind(elm, 'blur', itemBlurred); - tabindex = '-1'; - } else { - tabindex = (idx === 0 ? '0' : '-1'); - } - - elm.setAttribute('tabindex', tabindex); - dom.bind(elm, 'focus', itemFocussed); - }); - - // Setup initial state for root element. - if (items[0]){ - focussedId = items[0].id; - } - - dom.setAttrib(root, 'tabindex', '-1'); - - // Setup listeners for root element. - var rootElm = dom.get(root); - dom.bind(rootElm, 'focus', rootFocussed); - dom.bind(rootElm, 'keydown', rootKeydown); - } - }); -})(tinymce); - -(function(tinymce) { - // Shorten class names - var DOM = tinymce.DOM, is = tinymce.is; - - tinymce.create('tinymce.ui.Control', { - Control : function(id, s, editor) { - this.id = id; - this.settings = s = s || {}; - this.rendered = false; - this.onRender = new tinymce.util.Dispatcher(this); - this.classPrefix = ''; - this.scope = s.scope || this; - this.disabled = 0; - this.active = 0; - this.editor = editor; - }, - - setAriaProperty : function(property, value) { - var element = DOM.get(this.id + '_aria') || DOM.get(this.id); - if (element) { - DOM.setAttrib(element, 'aria-' + property, !!value); - } - }, - - focus : function() { - DOM.get(this.id).focus(); - }, - - setDisabled : function(s) { - if (s != this.disabled) { - this.setAriaProperty('disabled', s); - - this.setState('Disabled', s); - this.setState('Enabled', !s); - this.disabled = s; - } - }, - - isDisabled : function() { - return this.disabled; - }, - - setActive : function(s) { - if (s != this.active) { - this.setState('Active', s); - this.active = s; - this.setAriaProperty('pressed', s); - } - }, - - isActive : function() { - return this.active; - }, - - setState : function(c, s) { - var n = DOM.get(this.id); - - c = this.classPrefix + c; - - if (s) - DOM.addClass(n, c); - else - DOM.removeClass(n, c); - }, - - isRendered : function() { - return this.rendered; - }, - - renderHTML : function() { - }, - - renderTo : function(n) { - DOM.setHTML(n, this.renderHTML()); - }, - - postRender : function() { - var t = this, b; - - // Set pending states - if (is(t.disabled)) { - b = t.disabled; - t.disabled = -1; - t.setDisabled(b); - } - - if (is(t.active)) { - b = t.active; - t.active = -1; - t.setActive(b); - } - }, - - remove : function() { - DOM.remove(this.id); - this.destroy(); - }, - - destroy : function() { - tinymce.dom.Event.clear(this.id); - } - }); -})(tinymce); -tinymce.create('tinymce.ui.Container:tinymce.ui.Control', { - Container : function(id, s, editor) { - this.parent(id, s, editor); - - this.controls = []; - - this.lookup = {}; - }, - - add : function(c) { - this.lookup[c.id] = c; - this.controls.push(c); - - return c; - }, - - get : function(n) { - return this.lookup[n]; - } -}); - - -tinymce.create('tinymce.ui.Separator:tinymce.ui.Control', { - Separator : function(id, s) { - this.parent(id, s); - this.classPrefix = 'mceSeparator'; - this.setDisabled(true); - }, - - renderHTML : function() { - return tinymce.DOM.createHTML('span', {'class' : this.classPrefix, role : 'separator', 'aria-orientation' : 'vertical', tabindex : '-1'}); - } -}); - -(function(tinymce) { - var is = tinymce.is, DOM = tinymce.DOM, each = tinymce.each, walk = tinymce.walk; - - tinymce.create('tinymce.ui.MenuItem:tinymce.ui.Control', { - MenuItem : function(id, s) { - this.parent(id, s); - this.classPrefix = 'mceMenuItem'; - }, - - setSelected : function(s) { - this.setState('Selected', s); - this.setAriaProperty('checked', !!s); - this.selected = s; - }, - - isSelected : function() { - return this.selected; - }, - - postRender : function() { - var t = this; - - t.parent(); - - // Set pending state - if (is(t.selected)) - t.setSelected(t.selected); - } - }); -})(tinymce); - -(function(tinymce) { - var is = tinymce.is, DOM = tinymce.DOM, each = tinymce.each, walk = tinymce.walk; - - tinymce.create('tinymce.ui.Menu:tinymce.ui.MenuItem', { - Menu : function(id, s) { - var t = this; - - t.parent(id, s); - t.items = {}; - t.collapsed = false; - t.menuCount = 0; - t.onAddItem = new tinymce.util.Dispatcher(this); - }, - - expand : function(d) { - var t = this; - - if (d) { - walk(t, function(o) { - if (o.expand) - o.expand(); - }, 'items', t); - } - - t.collapsed = false; - }, - - collapse : function(d) { - var t = this; - - if (d) { - walk(t, function(o) { - if (o.collapse) - o.collapse(); - }, 'items', t); - } - - t.collapsed = true; - }, - - isCollapsed : function() { - return this.collapsed; - }, - - add : function(o) { - if (!o.settings) - o = new tinymce.ui.MenuItem(o.id || DOM.uniqueId(), o); - - this.onAddItem.dispatch(this, o); - - return this.items[o.id] = o; - }, - - addSeparator : function() { - return this.add({separator : true}); - }, - - addMenu : function(o) { - if (!o.collapse) - o = this.createMenu(o); - - this.menuCount++; - - return this.add(o); - }, - - hasMenus : function() { - return this.menuCount !== 0; - }, - - remove : function(o) { - delete this.items[o.id]; - }, - - removeAll : function() { - var t = this; - - walk(t, function(o) { - if (o.removeAll) - o.removeAll(); - else - o.remove(); - - o.destroy(); - }, 'items', t); - - t.items = {}; - }, - - createMenu : function(o) { - var m = new tinymce.ui.Menu(o.id || DOM.uniqueId(), o); - - m.onAddItem.add(this.onAddItem.dispatch, this.onAddItem); - - return m; - } - }); -})(tinymce); -(function(tinymce) { - var is = tinymce.is, DOM = tinymce.DOM, each = tinymce.each, Event = tinymce.dom.Event, Element = tinymce.dom.Element; - - tinymce.create('tinymce.ui.DropMenu:tinymce.ui.Menu', { - DropMenu : function(id, s) { - s = s || {}; - s.container = s.container || DOM.doc.body; - s.offset_x = s.offset_x || 0; - s.offset_y = s.offset_y || 0; - s.vp_offset_x = s.vp_offset_x || 0; - s.vp_offset_y = s.vp_offset_y || 0; - - if (is(s.icons) && !s.icons) - s['class'] += ' mceNoIcons'; - - this.parent(id, s); - this.onShowMenu = new tinymce.util.Dispatcher(this); - this.onHideMenu = new tinymce.util.Dispatcher(this); - this.classPrefix = 'mceMenu'; - }, - - createMenu : function(s) { - var t = this, cs = t.settings, m; - - s.container = s.container || cs.container; - s.parent = t; - s.constrain = s.constrain || cs.constrain; - s['class'] = s['class'] || cs['class']; - s.vp_offset_x = s.vp_offset_x || cs.vp_offset_x; - s.vp_offset_y = s.vp_offset_y || cs.vp_offset_y; - s.keyboard_focus = cs.keyboard_focus; - m = new tinymce.ui.DropMenu(s.id || DOM.uniqueId(), s); - - m.onAddItem.add(t.onAddItem.dispatch, t.onAddItem); - - return m; - }, - - focus : function() { - var t = this; - if (t.keyboardNav) { - t.keyboardNav.focus(); - } - }, - - update : function() { - var t = this, s = t.settings, tb = DOM.get('menu_' + t.id + '_tbl'), co = DOM.get('menu_' + t.id + '_co'), tw, th; - - tw = s.max_width ? Math.min(tb.offsetWidth, s.max_width) : tb.offsetWidth; - th = s.max_height ? Math.min(tb.offsetHeight, s.max_height) : tb.offsetHeight; - - if (!DOM.boxModel) - t.element.setStyles({width : tw + 2, height : th + 2}); - else - t.element.setStyles({width : tw, height : th}); - - if (s.max_width) - DOM.setStyle(co, 'width', tw); - - if (s.max_height) { - DOM.setStyle(co, 'height', th); - - if (tb.clientHeight < s.max_height) - DOM.setStyle(co, 'overflow', 'hidden'); - } - }, - - showMenu : function(x, y, px) { - var t = this, s = t.settings, co, vp = DOM.getViewPort(), w, h, mx, my, ot = 2, dm, tb, cp = t.classPrefix; - - t.collapse(1); - - if (t.isMenuVisible) - return; - - if (!t.rendered) { - co = DOM.add(t.settings.container, t.renderNode()); - - each(t.items, function(o) { - o.postRender(); - }); - - t.element = new Element('menu_' + t.id, {blocker : 1, container : s.container}); - } else - co = DOM.get('menu_' + t.id); - - // Move layer out of sight unless it's Opera since it scrolls to top of page due to an bug - if (!tinymce.isOpera) - DOM.setStyles(co, {left : -0xFFFF , top : -0xFFFF}); - - DOM.show(co); - t.update(); - - x += s.offset_x || 0; - y += s.offset_y || 0; - vp.w -= 4; - vp.h -= 4; - - // Move inside viewport if not submenu - if (s.constrain) { - w = co.clientWidth - ot; - h = co.clientHeight - ot; - mx = vp.x + vp.w; - my = vp.y + vp.h; - - if ((x + s.vp_offset_x + w) > mx) - x = px ? px - w : Math.max(0, (mx - s.vp_offset_x) - w); - - if ((y + s.vp_offset_y + h) > my) - y = Math.max(0, (my - s.vp_offset_y) - h); - } - - DOM.setStyles(co, {left : x , top : y}); - t.element.update(); - - t.isMenuVisible = 1; - t.mouseClickFunc = Event.add(co, 'click', function(e) { - var m; - - e = e.target; - - if (e && (e = DOM.getParent(e, 'tr')) && !DOM.hasClass(e, cp + 'ItemSub')) { - m = t.items[e.id]; - - if (m.isDisabled()) - return; - - dm = t; - - while (dm) { - if (dm.hideMenu) - dm.hideMenu(); - - dm = dm.settings.parent; - } - - if (m.settings.onclick) - m.settings.onclick(e); - - return false; // Cancel to fix onbeforeunload problem - } - }); - - if (t.hasMenus()) { - t.mouseOverFunc = Event.add(co, 'mouseover', function(e) { - var m, r, mi; - - e = e.target; - if (e && (e = DOM.getParent(e, 'tr'))) { - m = t.items[e.id]; - - if (t.lastMenu) - t.lastMenu.collapse(1); - - if (m.isDisabled()) - return; - - if (e && DOM.hasClass(e, cp + 'ItemSub')) { - //p = DOM.getPos(s.container); - r = DOM.getRect(e); - m.showMenu((r.x + r.w - ot), r.y - ot, r.x); - t.lastMenu = m; - DOM.addClass(DOM.get(m.id).firstChild, cp + 'ItemActive'); - } - } - }); - } - - Event.add(co, 'keydown', t._keyHandler, t); - - t.onShowMenu.dispatch(t); - - if (s.keyboard_focus) { - t._setupKeyboardNav(); - } - }, - - hideMenu : function(c) { - var t = this, co = DOM.get('menu_' + t.id), e; - - if (!t.isMenuVisible) - return; - - if (t.keyboardNav) t.keyboardNav.destroy(); - Event.remove(co, 'mouseover', t.mouseOverFunc); - Event.remove(co, 'click', t.mouseClickFunc); - Event.remove(co, 'keydown', t._keyHandler); - DOM.hide(co); - t.isMenuVisible = 0; - - if (!c) - t.collapse(1); - - if (t.element) - t.element.hide(); - - if (e = DOM.get(t.id)) - DOM.removeClass(e.firstChild, t.classPrefix + 'ItemActive'); - - t.onHideMenu.dispatch(t); - }, - - add : function(o) { - var t = this, co; - - o = t.parent(o); - - if (t.isRendered && (co = DOM.get('menu_' + t.id))) - t._add(DOM.select('tbody', co)[0], o); - - return o; - }, - - collapse : function(d) { - this.parent(d); - this.hideMenu(1); - }, - - remove : function(o) { - DOM.remove(o.id); - this.destroy(); - - return this.parent(o); - }, - - destroy : function() { - var t = this, co = DOM.get('menu_' + t.id); - - if (t.keyboardNav) t.keyboardNav.destroy(); - Event.remove(co, 'mouseover', t.mouseOverFunc); - Event.remove(DOM.select('a', co), 'focus', t.mouseOverFunc); - Event.remove(co, 'click', t.mouseClickFunc); - Event.remove(co, 'keydown', t._keyHandler); - - if (t.element) - t.element.remove(); - - DOM.remove(co); - }, - - renderNode : function() { - var t = this, s = t.settings, n, tb, co, w; - - w = DOM.create('div', {role: 'listbox', id : 'menu_' + t.id, 'class' : s['class'], 'style' : 'position:absolute;left:0;top:0;z-index:200000;outline:0'}); - if (t.settings.parent) { - DOM.setAttrib(w, 'aria-parent', 'menu_' + t.settings.parent.id); - } - co = DOM.add(w, 'div', {role: 'presentation', id : 'menu_' + t.id + '_co', 'class' : t.classPrefix + (s['class'] ? ' ' + s['class'] : '')}); - t.element = new Element('menu_' + t.id, {blocker : 1, container : s.container}); - - if (s.menu_line) - DOM.add(co, 'span', {'class' : t.classPrefix + 'Line'}); - -// n = DOM.add(co, 'div', {id : 'menu_' + t.id + '_co', 'class' : 'mceMenuContainer'}); - n = DOM.add(co, 'table', {role: 'presentation', id : 'menu_' + t.id + '_tbl', border : 0, cellPadding : 0, cellSpacing : 0}); - tb = DOM.add(n, 'tbody'); - - each(t.items, function(o) { - t._add(tb, o); - }); - - t.rendered = true; - - return w; - }, - - // Internal functions - _setupKeyboardNav : function(){ - var contextMenu, menuItems, t=this; - contextMenu = DOM.get('menu_' + t.id); - menuItems = DOM.select('a[role=option]', 'menu_' + t.id); - menuItems.splice(0,0,contextMenu); - t.keyboardNav = new tinymce.ui.KeyboardNavigation({ - root: 'menu_' + t.id, - items: menuItems, - onCancel: function() { - t.hideMenu(); - }, - enableUpDown: true - }); - contextMenu.focus(); - }, - - _keyHandler : function(evt) { - var t = this, e; - switch (evt.keyCode) { - case 37: // Left - if (t.settings.parent) { - t.hideMenu(); - t.settings.parent.focus(); - Event.cancel(evt); - } - break; - case 39: // Right - if (t.mouseOverFunc) - t.mouseOverFunc(evt); - break; - } - }, - - _add : function(tb, o) { - var n, s = o.settings, a, ro, it, cp = this.classPrefix, ic; - - if (s.separator) { - ro = DOM.add(tb, 'tr', {id : o.id, 'class' : cp + 'ItemSeparator'}); - DOM.add(ro, 'td', {'class' : cp + 'ItemSeparator'}); - - if (n = ro.previousSibling) - DOM.addClass(n, 'mceLast'); - - return; - } - - n = ro = DOM.add(tb, 'tr', {id : o.id, 'class' : cp + 'Item ' + cp + 'ItemEnabled'}); - n = it = DOM.add(n, s.titleItem ? 'th' : 'td'); - n = a = DOM.add(n, 'a', {id: o.id + '_aria', role: s.titleItem ? 'presentation' : 'option', href : 'javascript:;', onclick : "return false;", onmousedown : 'return false;'}); - - if (s.parent) { - DOM.setAttrib(a, 'aria-haspopup', 'true'); - DOM.setAttrib(a, 'aria-owns', 'menu_' + o.id); - } - - DOM.addClass(it, s['class']); -// n = DOM.add(n, 'span', {'class' : 'item'}); - - ic = DOM.add(n, 'span', {'class' : 'mceIcon' + (s.icon ? ' mce_' + s.icon : '')}); - - if (s.icon_src) - DOM.add(ic, 'img', {src : s.icon_src}); - - n = DOM.add(n, s.element || 'span', {'class' : 'mceText', title : o.settings.title}, o.settings.title); - - if (o.settings.style) { - if (typeof o.settings.style == "function") - o.settings.style = o.settings.style(); - - DOM.setAttrib(n, 'style', o.settings.style); - } - - if (tb.childNodes.length == 1) - DOM.addClass(ro, 'mceFirst'); - - if ((n = ro.previousSibling) && DOM.hasClass(n, cp + 'ItemSeparator')) - DOM.addClass(ro, 'mceFirst'); - - if (o.collapse) - DOM.addClass(ro, cp + 'ItemSub'); - - if (n = ro.previousSibling) - DOM.removeClass(n, 'mceLast'); - - DOM.addClass(ro, 'mceLast'); - } - }); -})(tinymce); -(function(tinymce) { - var DOM = tinymce.DOM; - - tinymce.create('tinymce.ui.Button:tinymce.ui.Control', { - Button : function(id, s, ed) { - this.parent(id, s, ed); - this.classPrefix = 'mceButton'; - }, - - renderHTML : function() { - var cp = this.classPrefix, s = this.settings, h, l; - - l = DOM.encode(s.label || ''); - h = ''; - if (s.image && !(this.editor &&this.editor.forcedHighContrastMode) ) - h += '' + DOM.encode(s.title) + '' + (l ? '' + l + '' : ''); - else - h += '' + (l ? '' + l + '' : ''); - - h += ''; - h += ''; - return h; - }, - - postRender : function() { - var t = this, s = t.settings, imgBookmark; - - // In IE a large image that occupies the entire editor area will be deselected when a button is clicked, so - // need to keep the selection in case the selection is lost - if (tinymce.isIE && t.editor) { - tinymce.dom.Event.add(t.id, 'mousedown', function(e) { - var nodeName = t.editor.selection.getNode().nodeName; - imgBookmark = nodeName === 'IMG' ? t.editor.selection.getBookmark() : null; - }); - } - tinymce.dom.Event.add(t.id, 'click', function(e) { - if (!t.isDisabled()) { - // restore the selection in case the selection is lost in IE - if (tinymce.isIE && t.editor && imgBookmark !== null) { - t.editor.selection.moveToBookmark(imgBookmark); - } - return s.onclick.call(s.scope, e); - } - }); - tinymce.dom.Event.add(t.id, 'keyup', function(e) { - if (!t.isDisabled() && e.keyCode==tinymce.VK.SPACEBAR) - return s.onclick.call(s.scope, e); - }); - } - }); -})(tinymce); - -(function(tinymce) { - var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, Dispatcher = tinymce.util.Dispatcher, undef; - - tinymce.create('tinymce.ui.ListBox:tinymce.ui.Control', { - ListBox : function(id, s, ed) { - var t = this; - - t.parent(id, s, ed); - - t.items = []; - - t.onChange = new Dispatcher(t); - - t.onPostRender = new Dispatcher(t); - - t.onAdd = new Dispatcher(t); - - t.onRenderMenu = new tinymce.util.Dispatcher(this); - - t.classPrefix = 'mceListBox'; - t.marked = {}; - }, - - select : function(va) { - var t = this, fv, f; - - t.marked = {}; - - if (va == undef) - return t.selectByIndex(-1); - - // Is string or number make function selector - if (va && typeof(va)=="function") - f = va; - else { - f = function(v) { - return v == va; - }; - } - - // Do we need to do something? - if (va != t.selectedValue) { - // Find item - each(t.items, function(o, i) { - if (f(o.value)) { - fv = 1; - t.selectByIndex(i); - return false; - } - }); - - if (!fv) - t.selectByIndex(-1); - } - }, - - selectByIndex : function(idx) { - var t = this, e, o, label; - - t.marked = {}; - - if (idx != t.selectedIndex) { - e = DOM.get(t.id + '_text'); - label = DOM.get(t.id + '_voiceDesc'); - o = t.items[idx]; - - if (o) { - t.selectedValue = o.value; - t.selectedIndex = idx; - DOM.setHTML(e, DOM.encode(o.title)); - DOM.setHTML(label, t.settings.title + " - " + o.title); - DOM.removeClass(e, 'mceTitle'); - DOM.setAttrib(t.id, 'aria-valuenow', o.title); - } else { - DOM.setHTML(e, DOM.encode(t.settings.title)); - DOM.setHTML(label, DOM.encode(t.settings.title)); - DOM.addClass(e, 'mceTitle'); - t.selectedValue = t.selectedIndex = null; - DOM.setAttrib(t.id, 'aria-valuenow', t.settings.title); - } - e = 0; - } - }, - - mark : function(value) { - this.marked[value] = true; - }, - - add : function(n, v, o) { - var t = this; - - o = o || {}; - o = tinymce.extend(o, { - title : n, - value : v - }); - - t.items.push(o); - t.onAdd.dispatch(t, o); - }, - - getLength : function() { - return this.items.length; - }, - - renderHTML : function() { - var h = '', t = this, s = t.settings, cp = t.classPrefix; - - h = ''; - h += ''; - h += ''; - h += ''; - - return h; - }, - - showMenu : function() { - var t = this, p2, e = DOM.get(this.id), m; - - if (t.isDisabled() || t.items.length === 0) - return; - - if (t.menu && t.menu.isMenuVisible) - return t.hideMenu(); - - if (!t.isMenuRendered) { - t.renderMenu(); - t.isMenuRendered = true; - } - - p2 = DOM.getPos(e); - - m = t.menu; - m.settings.offset_x = p2.x; - m.settings.offset_y = p2.y; - m.settings.keyboard_focus = !tinymce.isOpera; // Opera is buggy when it comes to auto focus - - // Select in menu - each(t.items, function(o) { - if (m.items[o.id]) { - m.items[o.id].setSelected(0); - } - }); - - each(t.items, function(o) { - if (m.items[o.id] && t.marked[o.value]) { - m.items[o.id].setSelected(1); - } - - if (o.value === t.selectedValue) { - m.items[o.id].setSelected(1); - } - }); - - m.showMenu(0, e.clientHeight); - - Event.add(DOM.doc, 'mousedown', t.hideMenu, t); - DOM.addClass(t.id, t.classPrefix + 'Selected'); - - //DOM.get(t.id + '_text').focus(); - }, - - hideMenu : function(e) { - var t = this; - - if (t.menu && t.menu.isMenuVisible) { - DOM.removeClass(t.id, t.classPrefix + 'Selected'); - - // Prevent double toogles by canceling the mouse click event to the button - if (e && e.type == "mousedown" && (e.target.id == t.id + '_text' || e.target.id == t.id + '_open')) - return; - - if (!e || !DOM.getParent(e.target, '.mceMenu')) { - DOM.removeClass(t.id, t.classPrefix + 'Selected'); - Event.remove(DOM.doc, 'mousedown', t.hideMenu, t); - t.menu.hideMenu(); - } - } - }, - - renderMenu : function() { - var t = this, m; - - m = t.settings.control_manager.createDropMenu(t.id + '_menu', { - menu_line : 1, - 'class' : t.classPrefix + 'Menu mceNoIcons', - max_width : 250, - max_height : 150 - }); - - m.onHideMenu.add(function() { - t.hideMenu(); - t.focus(); - }); - - m.add({ - title : t.settings.title, - 'class' : 'mceMenuItemTitle', - onclick : function() { - if (t.settings.onselect('') !== false) - t.select(''); // Must be runned after - } - }); - - each(t.items, function(o) { - // No value then treat it as a title - if (o.value === undef) { - m.add({ - title : o.title, - role : "option", - 'class' : 'mceMenuItemTitle', - onclick : function() { - if (t.settings.onselect('') !== false) - t.select(''); // Must be runned after - } - }); - } else { - o.id = DOM.uniqueId(); - o.role= "option"; - o.onclick = function() { - if (t.settings.onselect(o.value) !== false) - t.select(o.value); // Must be runned after - }; - - m.add(o); - } - }); - - t.onRenderMenu.dispatch(t, m); - t.menu = m; - }, - - postRender : function() { - var t = this, cp = t.classPrefix; - - Event.add(t.id, 'click', t.showMenu, t); - Event.add(t.id, 'keydown', function(evt) { - if (evt.keyCode == 32) { // Space - t.showMenu(evt); - Event.cancel(evt); - } - }); - Event.add(t.id, 'focus', function() { - if (!t._focused) { - t.keyDownHandler = Event.add(t.id, 'keydown', function(e) { - if (e.keyCode == 40) { - t.showMenu(); - Event.cancel(e); - } - }); - t.keyPressHandler = Event.add(t.id, 'keypress', function(e) { - var v; - if (e.keyCode == 13) { - // Fake select on enter - v = t.selectedValue; - t.selectedValue = null; // Needs to be null to fake change - Event.cancel(e); - t.settings.onselect(v); - } - }); - } - - t._focused = 1; - }); - Event.add(t.id, 'blur', function() { - Event.remove(t.id, 'keydown', t.keyDownHandler); - Event.remove(t.id, 'keypress', t.keyPressHandler); - t._focused = 0; - }); - - // Old IE doesn't have hover on all elements - if (tinymce.isIE6 || !DOM.boxModel) { - Event.add(t.id, 'mouseover', function() { - if (!DOM.hasClass(t.id, cp + 'Disabled')) - DOM.addClass(t.id, cp + 'Hover'); - }); - - Event.add(t.id, 'mouseout', function() { - if (!DOM.hasClass(t.id, cp + 'Disabled')) - DOM.removeClass(t.id, cp + 'Hover'); - }); - } - - t.onPostRender.dispatch(t, DOM.get(t.id)); - }, - - destroy : function() { - this.parent(); - - Event.clear(this.id + '_text'); - Event.clear(this.id + '_open'); - } - }); -})(tinymce); - -(function(tinymce) { - var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, Dispatcher = tinymce.util.Dispatcher, undef; - - tinymce.create('tinymce.ui.NativeListBox:tinymce.ui.ListBox', { - NativeListBox : function(id, s) { - this.parent(id, s); - this.classPrefix = 'mceNativeListBox'; - }, - - setDisabled : function(s) { - DOM.get(this.id).disabled = s; - this.setAriaProperty('disabled', s); - }, - - isDisabled : function() { - return DOM.get(this.id).disabled; - }, - - select : function(va) { - var t = this, fv, f; - - if (va == undef) - return t.selectByIndex(-1); - - // Is string or number make function selector - if (va && typeof(va)=="function") - f = va; - else { - f = function(v) { - return v == va; - }; - } - - // Do we need to do something? - if (va != t.selectedValue) { - // Find item - each(t.items, function(o, i) { - if (f(o.value)) { - fv = 1; - t.selectByIndex(i); - return false; - } - }); - - if (!fv) - t.selectByIndex(-1); - } - }, - - selectByIndex : function(idx) { - DOM.get(this.id).selectedIndex = idx + 1; - this.selectedValue = this.items[idx] ? this.items[idx].value : null; - }, - - add : function(n, v, a) { - var o, t = this; - - a = a || {}; - a.value = v; - - if (t.isRendered()) - DOM.add(DOM.get(this.id), 'option', a, n); - - o = { - title : n, - value : v, - attribs : a - }; - - t.items.push(o); - t.onAdd.dispatch(t, o); - }, - - getLength : function() { - return this.items.length; - }, - - renderHTML : function() { - var h, t = this; - - h = DOM.createHTML('option', {value : ''}, '-- ' + t.settings.title + ' --'); - - each(t.items, function(it) { - h += DOM.createHTML('option', {value : it.value}, it.title); - }); - - h = DOM.createHTML('select', {id : t.id, 'class' : 'mceNativeListBox', 'aria-labelledby': t.id + '_aria'}, h); - h += DOM.createHTML('span', {id : t.id + '_aria', 'style': 'display: none'}, t.settings.title); - return h; - }, - - postRender : function() { - var t = this, ch, changeListenerAdded = true; - - t.rendered = true; - - function onChange(e) { - var v = t.items[e.target.selectedIndex - 1]; - - if (v && (v = v.value)) { - t.onChange.dispatch(t, v); - - if (t.settings.onselect) - t.settings.onselect(v); - } - }; - - Event.add(t.id, 'change', onChange); - - // Accessibility keyhandler - Event.add(t.id, 'keydown', function(e) { - var bf; - - Event.remove(t.id, 'change', ch); - changeListenerAdded = false; - - bf = Event.add(t.id, 'blur', function() { - if (changeListenerAdded) return; - changeListenerAdded = true; - Event.add(t.id, 'change', onChange); - Event.remove(t.id, 'blur', bf); - }); - - //prevent default left and right keys on chrome - so that the keyboard navigation is used. - if (tinymce.isWebKit && (e.keyCode==37 ||e.keyCode==39)) { - return Event.prevent(e); - } - - if (e.keyCode == 13 || e.keyCode == 32) { - onChange(e); - return Event.cancel(e); - } - }); - - t.onPostRender.dispatch(t, DOM.get(t.id)); - } - }); -})(tinymce); - -(function(tinymce) { - var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each; - - tinymce.create('tinymce.ui.MenuButton:tinymce.ui.Button', { - MenuButton : function(id, s, ed) { - this.parent(id, s, ed); - - this.onRenderMenu = new tinymce.util.Dispatcher(this); - - s.menu_container = s.menu_container || DOM.doc.body; - }, - - showMenu : function() { - var t = this, p1, p2, e = DOM.get(t.id), m; - - if (t.isDisabled()) - return; - - if (!t.isMenuRendered) { - t.renderMenu(); - t.isMenuRendered = true; - } - - if (t.isMenuVisible) - return t.hideMenu(); - - p1 = DOM.getPos(t.settings.menu_container); - p2 = DOM.getPos(e); - - m = t.menu; - m.settings.offset_x = p2.x; - m.settings.offset_y = p2.y; - m.settings.vp_offset_x = p2.x; - m.settings.vp_offset_y = p2.y; - m.settings.keyboard_focus = t._focused; - m.showMenu(0, e.firstChild.clientHeight); - - Event.add(DOM.doc, 'mousedown', t.hideMenu, t); - t.setState('Selected', 1); - - t.isMenuVisible = 1; - }, - - renderMenu : function() { - var t = this, m; - - m = t.settings.control_manager.createDropMenu(t.id + '_menu', { - menu_line : 1, - 'class' : this.classPrefix + 'Menu', - icons : t.settings.icons - }); - - m.onHideMenu.add(function() { - t.hideMenu(); - t.focus(); - }); - - t.onRenderMenu.dispatch(t, m); - t.menu = m; - }, - - hideMenu : function(e) { - var t = this; - - // Prevent double toogles by canceling the mouse click event to the button - if (e && e.type == "mousedown" && DOM.getParent(e.target, function(e) {return e.id === t.id || e.id === t.id + '_open';})) - return; - - if (!e || !DOM.getParent(e.target, '.mceMenu')) { - t.setState('Selected', 0); - Event.remove(DOM.doc, 'mousedown', t.hideMenu, t); - if (t.menu) - t.menu.hideMenu(); - } - - t.isMenuVisible = 0; - }, - - postRender : function() { - var t = this, s = t.settings; - - Event.add(t.id, 'click', function() { - if (!t.isDisabled()) { - if (s.onclick) - s.onclick(t.value); - - t.showMenu(); - } - }); - } - }); -})(tinymce); - -(function(tinymce) { - var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each; - - tinymce.create('tinymce.ui.SplitButton:tinymce.ui.MenuButton', { - SplitButton : function(id, s, ed) { - this.parent(id, s, ed); - this.classPrefix = 'mceSplitButton'; - }, - - renderHTML : function() { - var h, t = this, s = t.settings, h1; - - h = ''; - - if (s.image) - h1 = DOM.createHTML('img ', {src : s.image, role: 'presentation', 'class' : 'mceAction ' + s['class']}); - else - h1 = DOM.createHTML('span', {'class' : 'mceAction ' + s['class']}, ''); - - h1 += DOM.createHTML('span', {'class': 'mceVoiceLabel mceIconOnly', id: t.id + '_voice', style: 'display:none;'}, s.title); - h += '' + DOM.createHTML('a', {role: 'button', id : t.id + '_action', tabindex: '-1', href : 'javascript:;', 'class' : 'mceAction ' + s['class'], onclick : "return false;", onmousedown : 'return false;', title : s.title}, h1) + ''; - - h1 = DOM.createHTML('span', {'class' : 'mceOpen ' + s['class']}, ''); - h += '' + DOM.createHTML('a', {role: 'button', id : t.id + '_open', tabindex: '-1', href : 'javascript:;', 'class' : 'mceOpen ' + s['class'], onclick : "return false;", onmousedown : 'return false;', title : s.title}, h1) + ''; - - h += ''; - h = DOM.createHTML('table', { role: 'presentation', 'class' : 'mceSplitButton mceSplitButtonEnabled ' + s['class'], cellpadding : '0', cellspacing : '0', title : s.title}, h); - return DOM.createHTML('div', {id : t.id, role: 'button', tabindex: '0', 'aria-labelledby': t.id + '_voice', 'aria-haspopup': 'true'}, h); - }, - - postRender : function() { - var t = this, s = t.settings, activate; - - if (s.onclick) { - activate = function(evt) { - if (!t.isDisabled()) { - s.onclick(t.value); - Event.cancel(evt); - } - }; - Event.add(t.id + '_action', 'click', activate); - Event.add(t.id, ['click', 'keydown'], function(evt) { - var DOM_VK_SPACE = 32, DOM_VK_ENTER = 14, DOM_VK_RETURN = 13, DOM_VK_UP = 38, DOM_VK_DOWN = 40; - if ((evt.keyCode === 32 || evt.keyCode === 13 || evt.keyCode === 14) && !evt.altKey && !evt.ctrlKey && !evt.metaKey) { - activate(); - Event.cancel(evt); - } else if (evt.type === 'click' || evt.keyCode === DOM_VK_DOWN) { - t.showMenu(); - Event.cancel(evt); - } - }); - } - - Event.add(t.id + '_open', 'click', function (evt) { - t.showMenu(); - Event.cancel(evt); - }); - Event.add([t.id, t.id + '_open'], 'focus', function() {t._focused = 1;}); - Event.add([t.id, t.id + '_open'], 'blur', function() {t._focused = 0;}); - - // Old IE doesn't have hover on all elements - if (tinymce.isIE6 || !DOM.boxModel) { - Event.add(t.id, 'mouseover', function() { - if (!DOM.hasClass(t.id, 'mceSplitButtonDisabled')) - DOM.addClass(t.id, 'mceSplitButtonHover'); - }); - - Event.add(t.id, 'mouseout', function() { - if (!DOM.hasClass(t.id, 'mceSplitButtonDisabled')) - DOM.removeClass(t.id, 'mceSplitButtonHover'); - }); - } - }, - - destroy : function() { - this.parent(); - - Event.clear(this.id + '_action'); - Event.clear(this.id + '_open'); - Event.clear(this.id); - } - }); -})(tinymce); - -(function(tinymce) { - var DOM = tinymce.DOM, Event = tinymce.dom.Event, is = tinymce.is, each = tinymce.each; - - tinymce.create('tinymce.ui.ColorSplitButton:tinymce.ui.SplitButton', { - ColorSplitButton : function(id, s, ed) { - var t = this; - - t.parent(id, s, ed); - - t.settings = s = tinymce.extend({ - colors : '000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF', - grid_width : 8, - default_color : '#888888' - }, t.settings); - - t.onShowMenu = new tinymce.util.Dispatcher(t); - - t.onHideMenu = new tinymce.util.Dispatcher(t); - - t.value = s.default_color; - }, - - showMenu : function() { - var t = this, r, p, e, p2; - - if (t.isDisabled()) - return; - - if (!t.isMenuRendered) { - t.renderMenu(); - t.isMenuRendered = true; - } - - if (t.isMenuVisible) - return t.hideMenu(); - - e = DOM.get(t.id); - DOM.show(t.id + '_menu'); - DOM.addClass(e, 'mceSplitButtonSelected'); - p2 = DOM.getPos(e); - DOM.setStyles(t.id + '_menu', { - left : p2.x, - top : p2.y + e.firstChild.clientHeight, - zIndex : 200000 - }); - e = 0; - - Event.add(DOM.doc, 'mousedown', t.hideMenu, t); - t.onShowMenu.dispatch(t); - - if (t._focused) { - t._keyHandler = Event.add(t.id + '_menu', 'keydown', function(e) { - if (e.keyCode == 27) - t.hideMenu(); - }); - - DOM.select('a', t.id + '_menu')[0].focus(); // Select first link - } - - t.keyboardNav = new tinymce.ui.KeyboardNavigation({ - root: t.id + '_menu', - items: DOM.select('a', t.id + '_menu'), - onCancel: function() { - t.hideMenu(); - t.focus(); - } - }); - - t.keyboardNav.focus(); - t.isMenuVisible = 1; - }, - - hideMenu : function(e) { - var t = this; - - if (t.isMenuVisible) { - // Prevent double toogles by canceling the mouse click event to the button - if (e && e.type == "mousedown" && DOM.getParent(e.target, function(e) {return e.id === t.id + '_open';})) - return; - - if (!e || !DOM.getParent(e.target, '.mceSplitButtonMenu')) { - DOM.removeClass(t.id, 'mceSplitButtonSelected'); - Event.remove(DOM.doc, 'mousedown', t.hideMenu, t); - Event.remove(t.id + '_menu', 'keydown', t._keyHandler); - DOM.hide(t.id + '_menu'); - } - - t.isMenuVisible = 0; - t.onHideMenu.dispatch(); - t.keyboardNav.destroy(); - } - }, - - renderMenu : function() { - var t = this, m, i = 0, s = t.settings, n, tb, tr, w, context; - - w = DOM.add(s.menu_container, 'div', {role: 'listbox', id : t.id + '_menu', 'class' : s.menu_class + ' ' + s['class'], style : 'position:absolute;left:0;top:-1000px;'}); - m = DOM.add(w, 'div', {'class' : s['class'] + ' mceSplitButtonMenu'}); - DOM.add(m, 'span', {'class' : 'mceMenuLine'}); - - n = DOM.add(m, 'table', {role: 'presentation', 'class' : 'mceColorSplitMenu'}); - tb = DOM.add(n, 'tbody'); - - // Generate color grid - i = 0; - each(is(s.colors, 'array') ? s.colors : s.colors.split(','), function(c) { - c = c.replace(/^#/, ''); - - if (!i--) { - tr = DOM.add(tb, 'tr'); - i = s.grid_width - 1; - } - - n = DOM.add(tr, 'td'); - var settings = { - href : 'javascript:;', - style : { - backgroundColor : '#' + c - }, - 'title': t.editor.getLang('colors.' + c, c), - 'data-mce-color' : '#' + c - }; - - // adding a proper ARIA role = button causes JAWS to read things incorrectly on IE. - if (!tinymce.isIE ) { - settings.role = 'option'; - } - - n = DOM.add(n, 'a', settings); - - if (t.editor.forcedHighContrastMode) { - n = DOM.add(n, 'canvas', { width: 16, height: 16, 'aria-hidden': 'true' }); - if (n.getContext && (context = n.getContext("2d"))) { - context.fillStyle = '#' + c; - context.fillRect(0, 0, 16, 16); - } else { - // No point leaving a canvas element around if it's not supported for drawing on anyway. - DOM.remove(n); - } - } - }); - - if (s.more_colors_func) { - n = DOM.add(tb, 'tr'); - n = DOM.add(n, 'td', {colspan : s.grid_width, 'class' : 'mceMoreColors'}); - n = DOM.add(n, 'a', {role: 'option', id : t.id + '_more', href : 'javascript:;', onclick : 'return false;', 'class' : 'mceMoreColors'}, s.more_colors_title); - - Event.add(n, 'click', function(e) { - s.more_colors_func.call(s.more_colors_scope || this); - return Event.cancel(e); // Cancel to fix onbeforeunload problem - }); - } - - DOM.addClass(m, 'mceColorSplitMenu'); - - // Prevent IE from scrolling and hindering click to occur #4019 - Event.add(t.id + '_menu', 'mousedown', function(e) {return Event.cancel(e);}); - - Event.add(t.id + '_menu', 'click', function(e) { - var c; - - e = DOM.getParent(e.target, 'a', tb); - - if (e && e.nodeName.toLowerCase() == 'a' && (c = e.getAttribute('data-mce-color'))) - t.setColor(c); - - return false; // Prevent IE auto save warning - }); - - return w; - }, - - setColor : function(c) { - this.displayColor(c); - this.hideMenu(); - this.settings.onselect(c); - }, - - displayColor : function(c) { - var t = this; - - DOM.setStyle(t.id + '_preview', 'backgroundColor', c); - - t.value = c; - }, - - postRender : function() { - var t = this, id = t.id; - - t.parent(); - DOM.add(id + '_action', 'div', {id : id + '_preview', 'class' : 'mceColorPreview'}); - DOM.setStyle(t.id + '_preview', 'backgroundColor', t.value); - }, - - destroy : function() { - var self = this; - - self.parent(); - - Event.clear(self.id + '_menu'); - Event.clear(self.id + '_more'); - DOM.remove(self.id + '_menu'); - - if (self.keyboardNav) { - self.keyboardNav.destroy(); - } - } - }); -})(tinymce); - -(function(tinymce) { -// Shorten class names -var dom = tinymce.DOM, each = tinymce.each, Event = tinymce.dom.Event; -tinymce.create('tinymce.ui.ToolbarGroup:tinymce.ui.Container', { - renderHTML : function() { - var t = this, h = [], controls = t.controls, each = tinymce.each, settings = t.settings; - - h.push('
    '); - //TODO: ACC test this out - adding a role = application for getting the landmarks working well. - h.push(""); - h.push(''); - each(controls, function(toolbar) { - h.push(toolbar.renderHTML()); - }); - h.push(""); - h.push('
    '); - - return h.join(''); - }, - - focus : function() { - var t = this; - dom.get(t.id).focus(); - }, - - postRender : function() { - var t = this, items = []; - - each(t.controls, function(toolbar) { - each (toolbar.controls, function(control) { - if (control.id) { - items.push(control); - } - }); - }); - - t.keyNav = new tinymce.ui.KeyboardNavigation({ - root: t.id, - items: items, - onCancel: function() { - //Move focus if webkit so that navigation back will read the item. - if (tinymce.isWebKit) { - dom.get(t.editor.id+"_ifr").focus(); - } - t.editor.focus(); - }, - excludeFromTabOrder: !t.settings.tab_focus_toolbar - }); - }, - - destroy : function() { - var self = this; - - self.parent(); - self.keyNav.destroy(); - Event.clear(self.id); - } -}); -})(tinymce); - -(function(tinymce) { -// Shorten class names -var dom = tinymce.DOM, each = tinymce.each; -tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', { - renderHTML : function() { - var t = this, h = '', c, co, s = t.settings, i, pr, nx, cl; - - cl = t.controls; - for (i=0; i')); - } - - // Add toolbar end before list box and after the previous button - // This is to fix the o2k7 editor skins - if (pr && co.ListBox) { - if (pr.Button || pr.SplitButton) - h += dom.createHTML('td', {'class' : 'mceToolbarEnd'}, dom.createHTML('span', null, '')); - } - - // Render control HTML - - // IE 8 quick fix, needed to propertly generate a hit area for anchors - if (dom.stdMode) - h += '' + co.renderHTML() + ''; - else - h += '' + co.renderHTML() + ''; - - // Add toolbar start after list box and before the next button - // This is to fix the o2k7 editor skins - if (nx && co.ListBox) { - if (nx.Button || nx.SplitButton) - h += dom.createHTML('td', {'class' : 'mceToolbarStart'}, dom.createHTML('span', null, '')); - } - } - - c = 'mceToolbarEnd'; - - if (co.Button) - c += ' mceToolbarEndButton'; - else if (co.SplitButton) - c += ' mceToolbarEndSplitButton'; - else if (co.ListBox) - c += ' mceToolbarEndListBox'; - - h += dom.createHTML('td', {'class' : c}, dom.createHTML('span', null, '')); - - return dom.createHTML('table', {id : t.id, 'class' : 'mceToolbar' + (s['class'] ? ' ' + s['class'] : ''), cellpadding : '0', cellspacing : '0', align : t.settings.align || '', role: 'presentation', tabindex: '-1'}, '' + h + ''); - } -}); -})(tinymce); - -(function(tinymce) { - var Dispatcher = tinymce.util.Dispatcher, each = tinymce.each; - - tinymce.create('tinymce.AddOnManager', { - AddOnManager : function() { - var self = this; - - self.items = []; - self.urls = {}; - self.lookup = {}; - self.onAdd = new Dispatcher(self); - }, - - get : function(n) { - if (this.lookup[n]) { - return this.lookup[n].instance; - } else { - return undefined; - } - }, - - dependencies : function(n) { - var result; - if (this.lookup[n]) { - result = this.lookup[n].dependencies; - } - return result || []; - }, - - requireLangPack : function(n) { - var s = tinymce.settings; - - if (s && s.language && s.language_load !== false) - tinymce.ScriptLoader.add(this.urls[n] + '/langs/' + s.language + '.js'); - }, - - add : function(id, o, dependencies) { - this.items.push(o); - this.lookup[id] = {instance:o, dependencies:dependencies}; - this.onAdd.dispatch(this, id, o); - - return o; - }, - createUrl: function(baseUrl, dep) { - if (typeof dep === "object") { - return dep - } else { - return {prefix: baseUrl.prefix, resource: dep, suffix: baseUrl.suffix}; - } - }, - - addComponents: function(pluginName, scripts) { - var pluginUrl = this.urls[pluginName]; - tinymce.each(scripts, function(script){ - tinymce.ScriptLoader.add(pluginUrl+"/"+script); - }); - }, - - load : function(n, u, cb, s) { - var t = this, url = u; - - function loadDependencies() { - var dependencies = t.dependencies(n); - tinymce.each(dependencies, function(dep) { - var newUrl = t.createUrl(u, dep); - t.load(newUrl.resource, newUrl, undefined, undefined); - }); - if (cb) { - if (s) { - cb.call(s); - } else { - cb.call(tinymce.ScriptLoader); - } - } - } - - if (t.urls[n]) - return; - if (typeof u === "object") - url = u.prefix + u.resource + u.suffix; - - if (url.indexOf('/') !== 0 && url.indexOf('://') == -1) - url = tinymce.baseURL + '/' + url; - - t.urls[n] = url.substring(0, url.lastIndexOf('/')); - - if (t.lookup[n]) { - loadDependencies(); - } else { - tinymce.ScriptLoader.add(url, loadDependencies, s); - } - } - }); - - // Create plugin and theme managers - tinymce.PluginManager = new tinymce.AddOnManager(); - tinymce.ThemeManager = new tinymce.AddOnManager(); -}(tinymce)); - -(function(tinymce) { - // Shorten names - var each = tinymce.each, extend = tinymce.extend, - DOM = tinymce.DOM, Event = tinymce.dom.Event, - ThemeManager = tinymce.ThemeManager, PluginManager = tinymce.PluginManager, - explode = tinymce.explode, - Dispatcher = tinymce.util.Dispatcher, undef, instanceCounter = 0; - - // Setup some URLs where the editor API is located and where the document is - tinymce.documentBaseURL = window.location.href.replace(/[\?#].*$/, '').replace(/[\/\\][^\/]+$/, ''); - if (!/[\/\\]$/.test(tinymce.documentBaseURL)) - tinymce.documentBaseURL += '/'; - - tinymce.baseURL = new tinymce.util.URI(tinymce.documentBaseURL).toAbsolute(tinymce.baseURL); - - tinymce.baseURI = new tinymce.util.URI(tinymce.baseURL); - - // Add before unload listener - // This was required since IE was leaking memory if you added and removed beforeunload listeners - // with attachEvent/detatchEvent so this only adds one listener and instances can the attach to the onBeforeUnload event - tinymce.onBeforeUnload = new Dispatcher(tinymce); - - // Must be on window or IE will leak if the editor is placed in frame or iframe - Event.add(window, 'beforeunload', function(e) { - tinymce.onBeforeUnload.dispatch(tinymce, e); - }); - - tinymce.onAddEditor = new Dispatcher(tinymce); - - tinymce.onRemoveEditor = new Dispatcher(tinymce); - - tinymce.EditorManager = extend(tinymce, { - editors : [], - - i18n : {}, - - activeEditor : null, - - init : function(s) { - var t = this, pl, sl = tinymce.ScriptLoader, e, el = [], ed; - - function createId(elm) { - var id = elm.id; - - // Use element id, or unique name or generate a unique id - if (!id) { - id = elm.name; - - if (id && !DOM.get(id)) { - id = elm.name; - } else { - // Generate unique name - id = DOM.uniqueId(); - } - - elm.setAttribute('id', id); - } - - return id; - }; - - function execCallback(se, n, s) { - var f = se[n]; - - if (!f) - return; - - if (tinymce.is(f, 'string')) { - s = f.replace(/\.\w+$/, ''); - s = s ? tinymce.resolve(s) : 0; - f = tinymce.resolve(f); - } - - return f.apply(s || this, Array.prototype.slice.call(arguments, 2)); - }; - - function hasClass(n, c) { - return c.constructor === RegExp ? c.test(n.className) : DOM.hasClass(n, c); - }; - - t.settings = s; - - // Legacy call - Event.bind(window, 'ready', function() { - var l, co; - - execCallback(s, 'onpageload'); - - switch (s.mode) { - case "exact": - l = s.elements || ''; - - if(l.length > 0) { - each(explode(l), function(v) { - if (DOM.get(v)) { - ed = new tinymce.Editor(v, s); - el.push(ed); - ed.render(1); - } else { - each(document.forms, function(f) { - each(f.elements, function(e) { - if (e.name === v) { - v = 'mce_editor_' + instanceCounter++; - DOM.setAttrib(e, 'id', v); - - ed = new tinymce.Editor(v, s); - el.push(ed); - ed.render(1); - } - }); - }); - } - }); - } - break; - - case "textareas": - case "specific_textareas": - each(DOM.select('textarea'), function(elm) { - if (s.editor_deselector && hasClass(elm, s.editor_deselector)) - return; - - if (!s.editor_selector || hasClass(elm, s.editor_selector)) { - ed = new tinymce.Editor(createId(elm), s); - el.push(ed); - ed.render(1); - } - }); - break; - - default: - if (s.types) { - // Process type specific selector - each(s.types, function(type) { - each(DOM.select(type.selector), function(elm) { - var editor = new tinymce.Editor(createId(elm), tinymce.extend({}, s, type)); - el.push(editor); - editor.render(1); - }); - }); - } else if (s.selector) { - // Process global selector - each(DOM.select(s.selector), function(elm) { - var editor = new tinymce.Editor(createId(elm), s); - el.push(editor); - editor.render(1); - }); - } - } - - // Call onInit when all editors are initialized - if (s.oninit) { - l = co = 0; - - each(el, function(ed) { - co++; - - if (!ed.initialized) { - // Wait for it - ed.onInit.add(function() { - l++; - - // All done - if (l == co) - execCallback(s, 'oninit'); - }); - } else - l++; - - // All done - if (l == co) - execCallback(s, 'oninit'); - }); - } - }); - }, - - get : function(id) { - if (id === undef) - return this.editors; - - if (!this.editors.hasOwnProperty(id)) - return undef; - - return this.editors[id]; - }, - - getInstanceById : function(id) { - return this.get(id); - }, - - add : function(editor) { - var self = this, editors = self.editors; - - // Add named and index editor instance - editors[editor.id] = editor; - editors.push(editor); - - self._setActive(editor); - self.onAddEditor.dispatch(self, editor); - - - // Patch the tinymce.Editor instance with jQuery adapter logic - if (tinymce.adapter) - tinymce.adapter.patchEditor(editor); - - - return editor; - }, - - remove : function(editor) { - var t = this, i, editors = t.editors; - - // Not in the collection - if (!editors[editor.id]) - return null; - - delete editors[editor.id]; - - for (i = 0; i < editors.length; i++) { - if (editors[i] == editor) { - editors.splice(i, 1); - break; - } - } - - // Select another editor since the active one was removed - if (t.activeEditor == editor) - t._setActive(editors[0]); - - editor.destroy(); - t.onRemoveEditor.dispatch(t, editor); - - return editor; - }, - - execCommand : function(c, u, v) { - var t = this, ed = t.get(v), w; - - function clr() { - ed.destroy(); - w.detachEvent('onunload', clr); - w = w.tinyMCE = w.tinymce = null; // IE leak - }; - - // Manager commands - switch (c) { - case "mceFocus": - ed.focus(); - return true; - - case "mceAddEditor": - case "mceAddControl": - if (!t.get(v)) - new tinymce.Editor(v, t.settings).render(); - - return true; - - case "mceAddFrameControl": - w = v.window; - - // Add tinyMCE global instance and tinymce namespace to specified window - w.tinyMCE = tinyMCE; - w.tinymce = tinymce; - - tinymce.DOM.doc = w.document; - tinymce.DOM.win = w; - - ed = new tinymce.Editor(v.element_id, v); - ed.render(); - - // Fix IE memory leaks - if (tinymce.isIE) { - w.attachEvent('onunload', clr); - } - - v.page_window = null; - - return true; - - case "mceRemoveEditor": - case "mceRemoveControl": - if (ed) - ed.remove(); - - return true; - - case 'mceToggleEditor': - if (!ed) { - t.execCommand('mceAddControl', 0, v); - return true; - } - - if (ed.isHidden()) - ed.show(); - else - ed.hide(); - - return true; - } - - // Run command on active editor - if (t.activeEditor) - return t.activeEditor.execCommand(c, u, v); - - return false; - }, - - execInstanceCommand : function(id, c, u, v) { - var ed = this.get(id); - - if (ed) - return ed.execCommand(c, u, v); - - return false; - }, - - triggerSave : function() { - each(this.editors, function(e) { - e.save(); - }); - }, - - addI18n : function(p, o) { - var lo, i18n = this.i18n; - - if (!tinymce.is(p, 'string')) { - each(p, function(o, lc) { - each(o, function(o, g) { - each(o, function(o, k) { - if (g === 'common') - i18n[lc + '.' + k] = o; - else - i18n[lc + '.' + g + '.' + k] = o; - }); - }); - }); - } else { - each(o, function(o, k) { - i18n[p + '.' + k] = o; - }); - } - }, - - // Private methods - - _setActive : function(editor) { - this.selectedInstance = this.activeEditor = editor; - } - }); -})(tinymce); - -(function(tinymce) { - // Shorten these names - var DOM = tinymce.DOM, Event = tinymce.dom.Event, extend = tinymce.extend, - each = tinymce.each, isGecko = tinymce.isGecko, - isIE = tinymce.isIE, isWebKit = tinymce.isWebKit, is = tinymce.is, - ThemeManager = tinymce.ThemeManager, PluginManager = tinymce.PluginManager, - explode = tinymce.explode; - - tinymce.create('tinymce.Editor', { - Editor : function(id, settings) { - var self = this, TRUE = true; - - self.settings = settings = extend({ - id : id, - language : 'en', - theme : 'advanced', - skin : 'default', - delta_width : 0, - delta_height : 0, - popup_css : '', - plugins : '', - document_base_url : tinymce.documentBaseURL, - add_form_submit_trigger : TRUE, - submit_patch : TRUE, - add_unload_trigger : TRUE, - convert_urls : TRUE, - relative_urls : TRUE, - remove_script_host : TRUE, - table_inline_editing : false, - object_resizing : TRUE, - accessibility_focus : TRUE, - doctype : tinymce.isIE6 ? '' : '', // Use old doctype on IE 6 to avoid horizontal scroll - visual : TRUE, - font_size_style_values : 'xx-small,x-small,small,medium,large,x-large,xx-large', - font_size_legacy_values : 'xx-small,small,medium,large,x-large,xx-large,300%', // See: http://www.w3.org/TR/CSS2/fonts.html#propdef-font-size - apply_source_formatting : TRUE, - directionality : 'ltr', - forced_root_block : 'p', - hidden_input : TRUE, - padd_empty_editor : TRUE, - render_ui : TRUE, - indentation : '30px', - fix_table_elements : TRUE, - inline_styles : TRUE, - convert_fonts_to_spans : TRUE, - indent : 'simple', - indent_before : 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist', - indent_after : 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist', - validate : TRUE, - entity_encoding : 'named', - url_converter : self.convertURL, - url_converter_scope : self, - ie7_compat : TRUE - }, settings); - - self.id = self.editorId = id; - - self.isNotDirty = false; - - self.plugins = {}; - - self.documentBaseURI = new tinymce.util.URI(settings.document_base_url || tinymce.documentBaseURL, { - base_uri : tinyMCE.baseURI - }); - - self.baseURI = tinymce.baseURI; - - self.contentCSS = []; - - self.contentStyles = []; - - // Creates all events like onClick, onSetContent etc see Editor.Events.js for the actual logic - self.setupEvents(); - - // Internal command handler objects - self.execCommands = {}; - self.queryStateCommands = {}; - self.queryValueCommands = {}; - - // Call setup - self.execCallback('setup', self); - }, - - render : function(nst) { - var t = this, s = t.settings, id = t.id, sl = tinymce.ScriptLoader; - - // Page is not loaded yet, wait for it - if (!Event.domLoaded) { - Event.add(window, 'ready', function() { - t.render(); - }); - return; - } - - tinyMCE.settings = s; - - // Element not found, then skip initialization - if (!t.getElement()) - return; - - // Is a iPad/iPhone and not on iOS5, then skip initialization. We need to sniff - // here since the browser says it has contentEditable support but there is no visible caret. - if (tinymce.isIDevice && !tinymce.isIOS5) - return; - - // Add hidden input for non input elements inside form elements - if (!/TEXTAREA|INPUT/i.test(t.getElement().nodeName) && s.hidden_input && DOM.getParent(id, 'form')) - DOM.insertAfter(DOM.create('input', {type : 'hidden', name : id}), id); - - // Hide target element early to prevent content flashing - if (!s.content_editable) { - t.orgVisibility = t.getElement().style.visibility; - t.getElement().style.visibility = 'hidden'; - } - - if (tinymce.WindowManager) - t.windowManager = new tinymce.WindowManager(t); - - if (s.encoding == 'xml') { - t.onGetContent.add(function(ed, o) { - if (o.save) - o.content = DOM.encode(o.content); - }); - } - - if (s.add_form_submit_trigger) { - t.onSubmit.addToTop(function() { - if (t.initialized) { - t.save(); - t.isNotDirty = 1; - } - }); - } - - if (s.add_unload_trigger) { - t._beforeUnload = tinyMCE.onBeforeUnload.add(function() { - if (t.initialized && !t.destroyed && !t.isHidden()) - t.save({format : 'raw', no_events : true}); - }); - } - - tinymce.addUnload(t.destroy, t); - - if (s.submit_patch) { - t.onBeforeRenderUI.add(function() { - var n = t.getElement().form; - - if (!n) - return; - - // Already patched - if (n._mceOldSubmit) - return; - - // Check page uses id="submit" or name="submit" for it's submit button - if (!n.submit.nodeType && !n.submit.length) { - t.formElement = n; - n._mceOldSubmit = n.submit; - n.submit = function() { - // Save all instances - tinymce.triggerSave(); - t.isNotDirty = 1; - - return t.formElement._mceOldSubmit(t.formElement); - }; - } - - n = null; - }); - } - - // Load scripts - function loadScripts() { - if (s.language && s.language_load !== false) - sl.add(tinymce.baseURL + '/langs/' + s.language + '.js'); - - if (s.theme && typeof s.theme != "function" && s.theme.charAt(0) != '-' && !ThemeManager.urls[s.theme]) - ThemeManager.load(s.theme, 'themes/' + s.theme + '/editor_template' + tinymce.suffix + '.js'); - - each(explode(s.plugins), function(p) { - if (p &&!PluginManager.urls[p]) { - if (p.charAt(0) == '-') { - p = p.substr(1, p.length); - var dependencies = PluginManager.dependencies(p); - each(dependencies, function(dep) { - var defaultSettings = {prefix:'plugins/', resource: dep, suffix:'/editor_plugin' + tinymce.suffix + '.js'}; - dep = PluginManager.createUrl(defaultSettings, dep); - PluginManager.load(dep.resource, dep); - }); - } else { - // Skip safari plugin, since it is removed as of 3.3b1 - if (p == 'safari') { - return; - } - PluginManager.load(p, {prefix:'plugins/', resource: p, suffix:'/editor_plugin' + tinymce.suffix + '.js'}); - } - } - }); - - // Init when que is loaded - sl.loadQueue(function() { - if (!t.removed) - t.init(); - }); - }; - - loadScripts(); - }, - - init : function() { - var n, t = this, s = t.settings, w, h, mh, e = t.getElement(), o, ti, u, bi, bc, re, i, initializedPlugins = []; - - tinymce.add(t); - - s.aria_label = s.aria_label || DOM.getAttrib(e, 'aria-label', t.getLang('aria.rich_text_area')); - - if (s.theme) { - if (typeof s.theme != "function") { - s.theme = s.theme.replace(/-/, ''); - o = ThemeManager.get(s.theme); - t.theme = new o(); - - if (t.theme.init) - t.theme.init(t, ThemeManager.urls[s.theme] || tinymce.documentBaseURL.replace(/\/$/, '')); - } else { - t.theme = s.theme; - } - } - - function initPlugin(p) { - var c = PluginManager.get(p), u = PluginManager.urls[p] || tinymce.documentBaseURL.replace(/\/$/, ''), po; - if (c && tinymce.inArray(initializedPlugins,p) === -1) { - each(PluginManager.dependencies(p), function(dep){ - initPlugin(dep); - }); - po = new c(t, u); - - t.plugins[p] = po; - - if (po.init) { - po.init(t, u); - initializedPlugins.push(p); - } - } - } - - // Create all plugins - each(explode(s.plugins.replace(/\-/g, '')), initPlugin); - - // Setup popup CSS path(s) - if (s.popup_css !== false) { - if (s.popup_css) - s.popup_css = t.documentBaseURI.toAbsolute(s.popup_css); - else - s.popup_css = t.baseURI.toAbsolute("themes/" + s.theme + "/skins/" + s.skin + "/dialog.css"); - } - - if (s.popup_css_add) - s.popup_css += ',' + t.documentBaseURI.toAbsolute(s.popup_css_add); - - t.controlManager = new tinymce.ControlManager(t); - - // Enables users to override the control factory - t.onBeforeRenderUI.dispatch(t, t.controlManager); - - // Measure box - if (s.render_ui && t.theme) { - t.orgDisplay = e.style.display; - - if (typeof s.theme != "function") { - w = s.width || e.style.width || e.offsetWidth; - h = s.height || e.style.height || e.offsetHeight; - mh = s.min_height || 100; - re = /^[0-9\.]+(|px)$/i; - - if (re.test('' + w)) - w = Math.max(parseInt(w, 10) + (o.deltaWidth || 0), 100); - - if (re.test('' + h)) - h = Math.max(parseInt(h, 10) + (o.deltaHeight || 0), mh); - - // Render UI - o = t.theme.renderUI({ - targetNode : e, - width : w, - height : h, - deltaWidth : s.delta_width, - deltaHeight : s.delta_height - }); - - // Resize editor - DOM.setStyles(o.sizeContainer || o.editorContainer, { - width : w, - height : h - }); - - h = (o.iframeHeight || h) + (typeof(h) == 'number' ? (o.deltaHeight || 0) : ''); - if (h < mh) - h = mh; - } else { - o = s.theme(t, e); - - // Convert element type to id:s - if (o.editorContainer.nodeType) { - o.editorContainer = o.editorContainer.id = o.editorContainer.id || t.id + "_parent"; - } - - // Convert element type to id:s - if (o.iframeContainer.nodeType) { - o.iframeContainer = o.iframeContainer.id = o.iframeContainer.id || t.id + "_iframecontainer"; - } - - // Use specified iframe height or the targets offsetHeight - h = o.iframeHeight || e.offsetHeight; - - // Store away the selection when it's changed to it can be restored later with a editor.focus() call - if (isIE) { - t.onInit.add(function(ed) { - ed.dom.bind(ed.getBody(), 'beforedeactivate keydown', function() { - ed.lastIERng = ed.selection.getRng(); - }); - }); - } - } - - t.editorContainer = o.editorContainer; - } - - // Load specified content CSS last - if (s.content_css) { - each(explode(s.content_css), function(u) { - t.contentCSS.push(t.documentBaseURI.toAbsolute(u)); - }); - } - - // Load specified content CSS last - if (s.content_style) { - t.contentStyles.push(s.content_style); - } - - // Content editable mode ends here - if (s.content_editable) { - e = n = o = null; // Fix IE leak - return t.initContentBody(); - } - - // User specified a document.domain value - if (document.domain && location.hostname != document.domain) - tinymce.relaxedDomain = document.domain; - - t.iframeHTML = s.doctype + ''; - - // We only need to override paths if we have to - // IE has a bug where it remove site absolute urls to relative ones if this is specified - if (s.document_base_url != tinymce.documentBaseURL) - t.iframeHTML += ''; - - // IE8 doesn't support carets behind images setting ie7_compat would force IE8+ to run in IE7 compat mode. - if (tinymce.isIE8) { - if (s.ie7_compat) - t.iframeHTML += ''; - else - t.iframeHTML += ''; - } - - t.iframeHTML += ''; - - // Load the CSS by injecting them into the HTML this will reduce "flicker" - for (i = 0; i < t.contentCSS.length; i++) { - t.iframeHTML += ''; - } - - t.contentCSS = []; - - bi = s.body_id || 'tinymce'; - if (bi.indexOf('=') != -1) { - bi = t.getParam('body_id', '', 'hash'); - bi = bi[t.id] || bi; - } - - bc = s.body_class || ''; - if (bc.indexOf('=') != -1) { - bc = t.getParam('body_class', '', 'hash'); - bc = bc[t.id] || ''; - } - - t.iframeHTML += '
    '; - - // Domain relaxing enabled, then set document domain - if (tinymce.relaxedDomain && (isIE || (tinymce.isOpera && parseFloat(opera.version()) < 11))) { - // We need to write the contents here in IE since multiple writes messes up refresh button and back button - u = 'javascript:(function(){document.open();document.domain="' + document.domain + '";var ed = window.parent.tinyMCE.get("' + t.id + '");document.write(ed.iframeHTML);document.close();ed.initContentBody();})()'; - } - - // Create iframe - // TODO: ACC add the appropriate description on this. - n = DOM.add(o.iframeContainer, 'iframe', { - id : t.id + "_ifr", - src : u || 'javascript:""', // Workaround for HTTPS warning in IE6/7 - frameBorder : '0', - allowTransparency : "true", - title : s.aria_label, - style : { - width : '100%', - height : h, - display : 'block' // Important for Gecko to render the iframe correctly - } - }); - - t.contentAreaContainer = o.iframeContainer; - - if (o.editorContainer) { - DOM.get(o.editorContainer).style.display = t.orgDisplay; - } - - // Restore visibility on target element - e.style.visibility = t.orgVisibility; - - DOM.get(t.id).style.display = 'none'; - DOM.setAttrib(t.id, 'aria-hidden', true); - - if (!tinymce.relaxedDomain || !u) - t.initContentBody(); - - e = n = o = null; // Cleanup - }, - - initContentBody : function() { - var self = this, settings = self.settings, targetElm = DOM.get(self.id), doc = self.getDoc(), html, body, contentCssText; - - // Setup iframe body - if ((!isIE || !tinymce.relaxedDomain) && !settings.content_editable) { - doc.open(); - doc.write(self.iframeHTML); - doc.close(); - - if (tinymce.relaxedDomain) - doc.domain = tinymce.relaxedDomain; - } - - if (settings.content_editable) { - DOM.addClass(targetElm, 'mceContentBody'); - self.contentDocument = doc = settings.content_document || document; - self.contentWindow = settings.content_window || window; - self.bodyElement = targetElm; - - // Prevent leak in IE - settings.content_document = settings.content_window = null; - } - - // It will not steal focus while setting contentEditable - body = self.getBody(); - body.disabled = true; - - if (!settings.readonly) - body.contentEditable = self.getParam('content_editable_state', true); - - body.disabled = false; - - self.schema = new tinymce.html.Schema(settings); - - self.dom = new tinymce.dom.DOMUtils(doc, { - keep_values : true, - url_converter : self.convertURL, - url_converter_scope : self, - hex_colors : settings.force_hex_style_colors, - class_filter : settings.class_filter, - update_styles : true, - root_element : settings.content_editable ? self.id : null, - schema : self.schema - }); - - self.parser = new tinymce.html.DomParser(settings, self.schema); - - // Convert src and href into data-mce-src, data-mce-href and data-mce-style - self.parser.addAttributeFilter('src,href,style', function(nodes, name) { - var i = nodes.length, node, dom = self.dom, value, internalName; - - while (i--) { - node = nodes[i]; - value = node.attr(name); - internalName = 'data-mce-' + name; - - // Add internal attribute if we need to we don't on a refresh of the document - if (!node.attributes.map[internalName]) { - if (name === "style") - node.attr(internalName, dom.serializeStyle(dom.parseStyle(value), node.name)); - else - node.attr(internalName, self.convertURL(value, name, node.name)); - } - } - }); - - // Keep scripts from executing - self.parser.addNodeFilter('script', function(nodes, name) { - var i = nodes.length, node; - - while (i--) { - node = nodes[i]; - node.attr('type', 'mce-' + (node.attr('type') || 'text/javascript')); - } - }); - - self.parser.addNodeFilter('#cdata', function(nodes, name) { - var i = nodes.length, node; - - while (i--) { - node = nodes[i]; - node.type = 8; - node.name = '#comment'; - node.value = '[CDATA[' + node.value + ']]'; - } - }); - - self.parser.addNodeFilter('p,h1,h2,h3,h4,h5,h6,div', function(nodes, name) { - var i = nodes.length, node, nonEmptyElements = self.schema.getNonEmptyElements(); - - while (i--) { - node = nodes[i]; - - if (node.isEmpty(nonEmptyElements)) - node.empty().append(new tinymce.html.Node('br', 1)).shortEnded = true; - } - }); - - self.serializer = new tinymce.dom.Serializer(settings, self.dom, self.schema); - - self.selection = new tinymce.dom.Selection(self.dom, self.getWin(), self.serializer, self); - - self.formatter = new tinymce.Formatter(self); - - self.undoManager = new tinymce.UndoManager(self); - - self.forceBlocks = new tinymce.ForceBlocks(self); - self.enterKey = new tinymce.EnterKey(self); - self.editorCommands = new tinymce.EditorCommands(self); - - self.onExecCommand.add(function(editor, command) { - // Don't refresh the select lists until caret move - if (!/^(FontName|FontSize)$/.test(command)) - self.nodeChanged(); - }); - - // Pass through - self.serializer.onPreProcess.add(function(se, o) { - return self.onPreProcess.dispatch(self, o, se); - }); - - self.serializer.onPostProcess.add(function(se, o) { - return self.onPostProcess.dispatch(self, o, se); - }); - - self.onPreInit.dispatch(self); - - if (!settings.browser_spellcheck && !settings.gecko_spellcheck) - doc.body.spellcheck = false; - - if (!settings.readonly) { - self.bindNativeEvents(); - } - - self.controlManager.onPostRender.dispatch(self, self.controlManager); - self.onPostRender.dispatch(self); - - self.quirks = tinymce.util.Quirks(self); - - if (settings.directionality) - body.dir = settings.directionality; - - if (settings.nowrap) - body.style.whiteSpace = "nowrap"; - - if (settings.protect) { - self.onBeforeSetContent.add(function(ed, o) { - each(settings.protect, function(pattern) { - o.content = o.content.replace(pattern, function(str) { - return ''; - }); - }); - }); - } - - // Add visual aids when new contents is added - self.onSetContent.add(function() { - self.addVisual(self.getBody()); - }); - - // Remove empty contents - if (settings.padd_empty_editor) { - self.onPostProcess.add(function(ed, o) { - o.content = o.content.replace(/^(]*>( | |\s|\u00a0|)<\/p>[\r\n]*|
    [\r\n]*)$/, ''); - }); - } - - self.load({initial : true, format : 'html'}); - self.startContent = self.getContent({format : 'raw'}); - - self.initialized = true; - - self.onInit.dispatch(self); - self.execCallback('setupcontent_callback', self.id, body, doc); - self.execCallback('init_instance_callback', self); - self.focus(true); - self.nodeChanged({initial : true}); - - // Add editor specific CSS styles - if (self.contentStyles.length > 0) { - contentCssText = ''; - - each(self.contentStyles, function(style) { - contentCssText += style + "\r\n"; - }); - - self.dom.addStyle(contentCssText); - } - - // Load specified content CSS last - each(self.contentCSS, function(url) { - self.dom.loadCSS(url); - }); - - // Handle auto focus - if (settings.auto_focus) { - setTimeout(function () { - var ed = tinymce.get(settings.auto_focus); - - ed.selection.select(ed.getBody(), 1); - ed.selection.collapse(1); - ed.getBody().focus(); - ed.getWin().focus(); - }, 100); - } - - // Clean up references for IE - targetElm = doc = body = null; - }, - - focus : function(skip_focus) { - var oed, self = this, selection = self.selection, contentEditable = self.settings.content_editable, ieRng, controlElm, doc = self.getDoc(), body; - - if (!skip_focus) { - if (self.lastIERng) { - selection.setRng(self.lastIERng); - } - - // Get selected control element - ieRng = selection.getRng(); - if (ieRng.item) { - controlElm = ieRng.item(0); - } - - self._refreshContentEditable(); - - // Focus the window iframe - if (!contentEditable) { - self.getWin().focus(); - } - - // Focus the body as well since it's contentEditable - if (tinymce.isGecko || contentEditable) { - body = self.getBody(); - - // Check for setActive since it doesn't scroll to the element - if (body.setActive) { - body.setActive(); - } else { - body.focus(); - } - - if (contentEditable) { - selection.normalize(); - } - } - - // Restore selected control element - // This is needed when for example an image is selected within a - // layer a call to focus will then remove the control selection - if (controlElm && controlElm.ownerDocument == doc) { - ieRng = doc.body.createControlRange(); - ieRng.addElement(controlElm); - ieRng.select(); - } - } - - if (tinymce.activeEditor != self) { - if ((oed = tinymce.activeEditor) != null) - oed.onDeactivate.dispatch(oed, self); - - self.onActivate.dispatch(self, oed); - } - - tinymce._setActive(self); - }, - - execCallback : function(n) { - var t = this, f = t.settings[n], s; - - if (!f) - return; - - // Look through lookup - if (t.callbackLookup && (s = t.callbackLookup[n])) { - f = s.func; - s = s.scope; - } - - if (is(f, 'string')) { - s = f.replace(/\.\w+$/, ''); - s = s ? tinymce.resolve(s) : 0; - f = tinymce.resolve(f); - t.callbackLookup = t.callbackLookup || {}; - t.callbackLookup[n] = {func : f, scope : s}; - } - - return f.apply(s || t, Array.prototype.slice.call(arguments, 1)); - }, - - translate : function(s) { - var c = this.settings.language || 'en', i18n = tinymce.i18n; - - if (!s) - return ''; - - return i18n[c + '.' + s] || s.replace(/\{\#([^\}]+)\}/g, function(a, b) { - return i18n[c + '.' + b] || '{#' + b + '}'; - }); - }, - - getLang : function(n, dv) { - return tinymce.i18n[(this.settings.language || 'en') + '.' + n] || (is(dv) ? dv : '{#' + n + '}'); - }, - - getParam : function(n, dv, ty) { - var tr = tinymce.trim, v = is(this.settings[n]) ? this.settings[n] : dv, o; - - if (ty === 'hash') { - o = {}; - - if (is(v, 'string')) { - each(v.indexOf('=') > 0 ? v.split(/[;,](?![^=;,]*(?:[;,]|$))/) : v.split(','), function(v) { - v = v.split('='); - - if (v.length > 1) - o[tr(v[0])] = tr(v[1]); - else - o[tr(v[0])] = tr(v); - }); - } else - o = v; - - return o; - } - - return v; - }, - - nodeChanged : function(o) { - var self = this, selection = self.selection, node; - - // Fix for bug #1896577 it seems that this can not be fired while the editor is loading - if (self.initialized) { - o = o || {}; - - // Get start node - node = selection.getStart() || self.getBody(); - node = isIE && node.ownerDocument != self.getDoc() ? self.getBody() : node; // Fix for IE initial state - - // Get parents and add them to object - o.parents = []; - self.dom.getParent(node, function(node) { - if (node.nodeName == 'BODY') - return true; - - o.parents.push(node); - }); - - self.onNodeChange.dispatch( - self, - o ? o.controlManager || self.controlManager : self.controlManager, - node, - selection.isCollapsed(), - o - ); - } - }, - - addButton : function(name, settings) { - var self = this; - - self.buttons = self.buttons || {}; - self.buttons[name] = settings; - }, - - addCommand : function(name, callback, scope) { - this.execCommands[name] = {func : callback, scope : scope || this}; - }, - - addQueryStateHandler : function(name, callback, scope) { - this.queryStateCommands[name] = {func : callback, scope : scope || this}; - }, - - addQueryValueHandler : function(name, callback, scope) { - this.queryValueCommands[name] = {func : callback, scope : scope || this}; - }, - - addShortcut : function(pa, desc, cmd_func, sc) { - var t = this, c; - - if (t.settings.custom_shortcuts === false) - return false; - - t.shortcuts = t.shortcuts || {}; - - if (is(cmd_func, 'string')) { - c = cmd_func; - - cmd_func = function() { - t.execCommand(c, false, null); - }; - } - - if (is(cmd_func, 'object')) { - c = cmd_func; - - cmd_func = function() { - t.execCommand(c[0], c[1], c[2]); - }; - } - - each(explode(pa), function(pa) { - var o = { - func : cmd_func, - scope : sc || this, - desc : t.translate(desc), - alt : false, - ctrl : false, - shift : false - }; - - each(explode(pa, '+'), function(v) { - switch (v) { - case 'alt': - case 'ctrl': - case 'shift': - o[v] = true; - break; - - default: - o.charCode = v.charCodeAt(0); - o.keyCode = v.toUpperCase().charCodeAt(0); - } - }); - - t.shortcuts[(o.ctrl ? 'ctrl' : '') + ',' + (o.alt ? 'alt' : '') + ',' + (o.shift ? 'shift' : '') + ',' + o.keyCode] = o; - }); - - return true; - }, - - execCommand : function(cmd, ui, val, a) { - var t = this, s = 0, o, st; - - if (!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(cmd) && (!a || !a.skip_focus)) - t.focus(); - - a = extend({}, a); - t.onBeforeExecCommand.dispatch(t, cmd, ui, val, a); - if (a.terminate) - return false; - - // Command callback - if (t.execCallback('execcommand_callback', t.id, t.selection.getNode(), cmd, ui, val)) { - t.onExecCommand.dispatch(t, cmd, ui, val, a); - return true; - } - - // Registred commands - if (o = t.execCommands[cmd]) { - st = o.func.call(o.scope, ui, val); - - // Fall through on true - if (st !== true) { - t.onExecCommand.dispatch(t, cmd, ui, val, a); - return st; - } - } - - // Plugin commands - each(t.plugins, function(p) { - if (p.execCommand && p.execCommand(cmd, ui, val)) { - t.onExecCommand.dispatch(t, cmd, ui, val, a); - s = 1; - return false; - } - }); - - if (s) - return true; - - // Theme commands - if (t.theme && t.theme.execCommand && t.theme.execCommand(cmd, ui, val)) { - t.onExecCommand.dispatch(t, cmd, ui, val, a); - return true; - } - - // Editor commands - if (t.editorCommands.execCommand(cmd, ui, val)) { - t.onExecCommand.dispatch(t, cmd, ui, val, a); - return true; - } - - // Browser commands - t.getDoc().execCommand(cmd, ui, val); - t.onExecCommand.dispatch(t, cmd, ui, val, a); - }, - - queryCommandState : function(cmd) { - var t = this, o, s; - - // Is hidden then return undefined - if (t._isHidden()) - return; - - // Registred commands - if (o = t.queryStateCommands[cmd]) { - s = o.func.call(o.scope); - - // Fall though on true - if (s !== true) - return s; - } - - // Registred commands - o = t.editorCommands.queryCommandState(cmd); - if (o !== -1) - return o; - - // Browser commands - try { - return this.getDoc().queryCommandState(cmd); - } catch (ex) { - // Fails sometimes see bug: 1896577 - } - }, - - queryCommandValue : function(c) { - var t = this, o, s; - - // Is hidden then return undefined - if (t._isHidden()) - return; - - // Registred commands - if (o = t.queryValueCommands[c]) { - s = o.func.call(o.scope); - - // Fall though on true - if (s !== true) - return s; - } - - // Registred commands - o = t.editorCommands.queryCommandValue(c); - if (is(o)) - return o; - - // Browser commands - try { - return this.getDoc().queryCommandValue(c); - } catch (ex) { - // Fails sometimes see bug: 1896577 - } - }, - - show : function() { - var self = this; - - DOM.show(self.getContainer()); - DOM.hide(self.id); - self.load(); - }, - - hide : function() { - var self = this, doc = self.getDoc(); - - // Fixed bug where IE has a blinking cursor left from the editor - if (isIE && doc) - doc.execCommand('SelectAll'); - - // We must save before we hide so Safari doesn't crash - self.save(); - - // defer the call to hide to prevent an IE9 crash #4921 - DOM.hide(self.getContainer()); - DOM.setStyle(self.id, 'display', self.orgDisplay); - }, - - isHidden : function() { - return !DOM.isHidden(this.id); - }, - - setProgressState : function(b, ti, o) { - this.onSetProgressState.dispatch(this, b, ti, o); - - return b; - }, - - load : function(o) { - var t = this, e = t.getElement(), h; - - if (e) { - o = o || {}; - o.load = true; - - // Double encode existing entities in the value - h = t.setContent(is(e.value) ? e.value : e.innerHTML, o); - o.element = e; - - if (!o.no_events) - t.onLoadContent.dispatch(t, o); - - o.element = e = null; - - return h; - } - }, - - save : function(o) { - var t = this, e = t.getElement(), h, f; - - if (!e || !t.initialized) - return; - - o = o || {}; - o.save = true; - - o.element = e; - h = o.content = t.getContent(o); - - if (!o.no_events) - t.onSaveContent.dispatch(t, o); - - h = o.content; - - if (!/TEXTAREA|INPUT/i.test(e.nodeName)) { - e.innerHTML = h; - - // Update hidden form element - if (f = DOM.getParent(t.id, 'form')) { - each(f.elements, function(e) { - if (e.name == t.id) { - e.value = h; - return false; - } - }); - } - } else - e.value = h; - - o.element = e = null; - - return h; - }, - - setContent : function(content, args) { - var self = this, rootNode, body = self.getBody(), forcedRootBlockName; - - // Setup args object - args = args || {}; - args.format = args.format || 'html'; - args.set = true; - args.content = content; - - // Do preprocessing - if (!args.no_events) - self.onBeforeSetContent.dispatch(self, args); - - content = args.content; - - // Padd empty content in Gecko and Safari. Commands will otherwise fail on the content - // It will also be impossible to place the caret in the editor unless there is a BR element present - if (!tinymce.isIE && (content.length === 0 || /^\s+$/.test(content))) { - forcedRootBlockName = self.settings.forced_root_block; - if (forcedRootBlockName) - content = '<' + forcedRootBlockName + '>
    '; - else - content = '
    '; - - body.innerHTML = content; - self.selection.select(body, true); - self.selection.collapse(true); - return; - } - - // Parse and serialize the html - if (args.format !== 'raw') { - content = new tinymce.html.Serializer({}, self.schema).serialize( - self.parser.parse(content) - ); - } - - // Set the new cleaned contents to the editor - args.content = tinymce.trim(content); - self.dom.setHTML(body, args.content); - - // Do post processing - if (!args.no_events) - self.onSetContent.dispatch(self, args); - - // Don't normalize selection if the focused element isn't the body in content editable mode since it will steal focus otherwise - if (!self.settings.content_editable || document.activeElement === self.getBody()) { - self.selection.normalize(); - } - - return args.content; - }, - - getContent : function(args) { - var self = this, content, body = self.getBody(); - - // Setup args object - args = args || {}; - args.format = args.format || 'html'; - args.get = true; - args.getInner = true; - - // Do preprocessing - if (!args.no_events) - self.onBeforeGetContent.dispatch(self, args); - - // Get raw contents or by default the cleaned contents - if (args.format == 'raw') - content = body.innerHTML; - else if (args.format == 'text') - content = body.innerText || body.textContent; - else - content = self.serializer.serialize(body, args); - - // Trim whitespace in beginning/end of HTML - if (args.format != 'text') { - args.content = tinymce.trim(content); - } else { - args.content = content; - } - - // Do post processing - if (!args.no_events) - self.onGetContent.dispatch(self, args); - - return args.content; - }, - - isDirty : function() { - var self = this; - - return tinymce.trim(self.startContent) != tinymce.trim(self.getContent({format : 'raw', no_events : 1})) && !self.isNotDirty; - }, - - getContainer : function() { - var self = this; - - if (!self.container) - self.container = DOM.get(self.editorContainer || self.id + '_parent'); - - return self.container; - }, - - getContentAreaContainer : function() { - return this.contentAreaContainer; - }, - - getElement : function() { - return DOM.get(this.settings.content_element || this.id); - }, - - getWin : function() { - var self = this, elm; - - if (!self.contentWindow) { - elm = DOM.get(self.id + "_ifr"); - - if (elm) - self.contentWindow = elm.contentWindow; - } - - return self.contentWindow; - }, - - getDoc : function() { - var self = this, win; - - if (!self.contentDocument) { - win = self.getWin(); - - if (win) - self.contentDocument = win.document; - } - - return self.contentDocument; - }, - - getBody : function() { - return this.bodyElement || this.getDoc().body; - }, - - convertURL : function(url, name, elm) { - var self = this, settings = self.settings; - - // Use callback instead - if (settings.urlconverter_callback) - return self.execCallback('urlconverter_callback', url, elm, true, name); - - // Don't convert link href since thats the CSS files that gets loaded into the editor also skip local file URLs - if (!settings.convert_urls || (elm && elm.nodeName == 'LINK') || url.indexOf('file:') === 0) - return url; - - // Convert to relative - if (settings.relative_urls) - return self.documentBaseURI.toRelative(url); - - // Convert to absolute - url = self.documentBaseURI.toAbsolute(url, settings.remove_script_host); - - return url; - }, - - addVisual : function(elm) { - var self = this, settings = self.settings, dom = self.dom, cls; - - elm = elm || self.getBody(); - - if (!is(self.hasVisual)) - self.hasVisual = settings.visual; - - each(dom.select('table,a', elm), function(elm) { - var value; - - switch (elm.nodeName) { - case 'TABLE': - cls = settings.visual_table_class || 'mceItemTable'; - value = dom.getAttrib(elm, 'border'); - - if (!value || value == '0') { - if (self.hasVisual) - dom.addClass(elm, cls); - else - dom.removeClass(elm, cls); - } - - return; - - case 'A': - if (!dom.getAttrib(elm, 'href', false)) { - value = dom.getAttrib(elm, 'name') || elm.id; - cls = 'mceItemAnchor'; - - if (value) { - if (self.hasVisual) - dom.addClass(elm, cls); - else - dom.removeClass(elm, cls); - } - } - - return; - } - }); - - self.onVisualAid.dispatch(self, elm, self.hasVisual); - }, - - remove : function() { - var self = this, elm = self.getContainer(), doc = self.getDoc(); - - if (!self.removed) { - self.removed = 1; // Cancels post remove event execution - - // Fixed bug where IE has a blinking cursor left from the editor - if (isIE && doc) - doc.execCommand('SelectAll'); - - // We must save before we hide so Safari doesn't crash - self.save(); - - DOM.setStyle(self.id, 'display', self.orgDisplay); - - // Don't clear the window or document if content editable - // is enabled since other instances might still be present - if (!self.settings.content_editable) { - Event.unbind(self.getWin()); - Event.unbind(self.getDoc()); - } - - Event.unbind(self.getBody()); - Event.clear(elm); - - self.execCallback('remove_instance_callback', self); - self.onRemove.dispatch(self); - - // Clear all execCommand listeners this is required to avoid errors if the editor was removed inside another command - self.onExecCommand.listeners = []; - - tinymce.remove(self); - DOM.remove(elm); - } - }, - - destroy : function(s) { - var t = this; - - // One time is enough - if (t.destroyed) - return; - - // We must unbind on Gecko since it would otherwise produce the pesky "attempt to run compile-and-go script on a cleared scope" message - if (isGecko) { - Event.unbind(t.getDoc()); - Event.unbind(t.getWin()); - Event.unbind(t.getBody()); - } - - if (!s) { - tinymce.removeUnload(t.destroy); - tinyMCE.onBeforeUnload.remove(t._beforeUnload); - - // Manual destroy - if (t.theme && t.theme.destroy) - t.theme.destroy(); - - // Destroy controls, selection and dom - t.controlManager.destroy(); - t.selection.destroy(); - t.dom.destroy(); - } - - if (t.formElement) { - t.formElement.submit = t.formElement._mceOldSubmit; - t.formElement._mceOldSubmit = null; - } - - t.contentAreaContainer = t.formElement = t.container = t.settings.content_element = t.bodyElement = t.contentDocument = t.contentWindow = null; - - if (t.selection) - t.selection = t.selection.win = t.selection.dom = t.selection.dom.doc = null; - - t.destroyed = 1; - }, - - // Internal functions - - _refreshContentEditable : function() { - var self = this, body, parent; - - // Check if the editor was hidden and the re-initalize contentEditable mode by removing and adding the body again - if (self._isHidden()) { - body = self.getBody(); - parent = body.parentNode; - - parent.removeChild(body); - parent.appendChild(body); - - body.focus(); - } - }, - - _isHidden : function() { - var s; - - if (!isGecko) - return 0; - - // Weird, wheres that cursor selection? - s = this.selection.getSel(); - return (!s || !s.rangeCount || s.rangeCount === 0); - } - }); -})(tinymce); -(function(tinymce) { - var each = tinymce.each; - - tinymce.Editor.prototype.setupEvents = function() { - var self = this, settings = self.settings; - - // Add events to the editor - each([ - 'onPreInit', - - 'onBeforeRenderUI', - - 'onPostRender', - - 'onLoad', - - 'onInit', - - 'onRemove', - - 'onActivate', - - 'onDeactivate', - - 'onClick', - - 'onEvent', - - 'onMouseUp', - - 'onMouseDown', - - 'onDblClick', - - 'onKeyDown', - - 'onKeyUp', - - 'onKeyPress', - - 'onContextMenu', - - 'onSubmit', - - 'onReset', - - 'onPaste', - - 'onPreProcess', - - 'onPostProcess', - - 'onBeforeSetContent', - - 'onBeforeGetContent', - - 'onSetContent', - - 'onGetContent', - - 'onLoadContent', - - 'onSaveContent', - - 'onNodeChange', - - 'onChange', - - 'onBeforeExecCommand', - - 'onExecCommand', - - 'onUndo', - - 'onRedo', - - 'onVisualAid', - - 'onSetProgressState', - - 'onSetAttrib' - ], function(name) { - self[name] = new tinymce.util.Dispatcher(self); - }); - - // Handle legacy cleanup_callback option - if (settings.cleanup_callback) { - self.onBeforeSetContent.add(function(ed, o) { - o.content = ed.execCallback('cleanup_callback', 'insert_to_editor', o.content, o); - }); - - self.onPreProcess.add(function(ed, o) { - if (o.set) - ed.execCallback('cleanup_callback', 'insert_to_editor_dom', o.node, o); - - if (o.get) - ed.execCallback('cleanup_callback', 'get_from_editor_dom', o.node, o); - }); - - self.onPostProcess.add(function(ed, o) { - if (o.set) - o.content = ed.execCallback('cleanup_callback', 'insert_to_editor', o.content, o); - - if (o.get) - o.content = ed.execCallback('cleanup_callback', 'get_from_editor', o.content, o); - }); - } - - // Handle legacy save_callback option - if (settings.save_callback) { - self.onGetContent.add(function(ed, o) { - if (o.save) - o.content = ed.execCallback('save_callback', ed.id, o.content, ed.getBody()); - }); - } - - // Handle legacy handle_event_callback option - if (settings.handle_event_callback) { - self.onEvent.add(function(ed, e, o) { - if (self.execCallback('handle_event_callback', e, ed, o) === false) { - e.preventDefault(); - e.stopPropagation(); - } - }); - } - - // Handle legacy handle_node_change_callback option - if (settings.handle_node_change_callback) { - self.onNodeChange.add(function(ed, cm, n) { - ed.execCallback('handle_node_change_callback', ed.id, n, -1, -1, true, ed.selection.isCollapsed()); - }); - } - - // Handle legacy save_callback option - if (settings.save_callback) { - self.onSaveContent.add(function(ed, o) { - var h = ed.execCallback('save_callback', ed.id, o.content, ed.getBody()); - - if (h) - o.content = h; - }); - } - - // Handle legacy onchange_callback option - if (settings.onchange_callback) { - self.onChange.add(function(ed, l) { - ed.execCallback('onchange_callback', ed, l); - }); - } - }; - - tinymce.Editor.prototype.bindNativeEvents = function() { - // 'focus', 'blur', 'dblclick', 'beforedeactivate', submit, reset - var self = this, i, settings = self.settings, dom = self.dom, nativeToDispatcherMap; - - nativeToDispatcherMap = { - mouseup : 'onMouseUp', - mousedown : 'onMouseDown', - click : 'onClick', - keyup : 'onKeyUp', - keydown : 'onKeyDown', - keypress : 'onKeyPress', - submit : 'onSubmit', - reset : 'onReset', - contextmenu : 'onContextMenu', - dblclick : 'onDblClick', - paste : 'onPaste' // Doesn't work in all browsers yet - }; - - // Handler that takes a native event and sends it out to a dispatcher like onKeyDown - function eventHandler(evt, args) { - var type = evt.type; - - // Don't fire events when it's removed - if (self.removed) - return; - - // Sends the native event out to a global dispatcher then to the specific event dispatcher - if (self.onEvent.dispatch(self, evt, args) !== false) { - self[nativeToDispatcherMap[evt.fakeType || evt.type]].dispatch(self, evt, args); - } - }; - - // Opera doesn't support focus event for contentEditable elements so we need to fake it - function doOperaFocus(e) { - self.focus(true); - }; - - function nodeChanged(ed, e) { - // Normalize selection for example a|a becomes a|a except for Ctrl+A since it selects everything - if (e.keyCode != 65 || !tinymce.VK.metaKeyPressed(e)) { - self.selection.normalize(); - } - - self.nodeChanged(); - } - - // Add DOM events - each(nativeToDispatcherMap, function(dispatcherName, nativeName) { - var root = settings.content_editable ? self.getBody() : self.getDoc(); - - switch (nativeName) { - case 'contextmenu': - dom.bind(root, nativeName, eventHandler); - break; - - case 'paste': - dom.bind(self.getBody(), nativeName, eventHandler); - break; - - case 'submit': - case 'reset': - dom.bind(self.getElement().form || tinymce.DOM.getParent(self.id, 'form'), nativeName, eventHandler); - break; - - default: - dom.bind(root, nativeName, eventHandler); - } - }); - - // Set the editor as active when focused - dom.bind(settings.content_editable ? self.getBody() : (tinymce.isGecko ? self.getDoc() : self.getWin()), 'focus', function(e) { - self.focus(true); - }); - - if (settings.content_editable && tinymce.isOpera) { - dom.bind(self.getBody(), 'click', doOperaFocus); - dom.bind(self.getBody(), 'keydown', doOperaFocus); - } - - // Add node change handler - self.onMouseUp.add(nodeChanged); - - self.onKeyUp.add(function(ed, e) { - var keyCode = e.keyCode; - - if ((keyCode >= 33 && keyCode <= 36) || (keyCode >= 37 && keyCode <= 40) || keyCode == 13 || keyCode == 45 || keyCode == 46 || keyCode == 8 || (tinymce.isMac && (keyCode == 91 || keyCode == 93)) || e.ctrlKey) - nodeChanged(ed, e); - }); - - // Add reset handler - self.onReset.add(function() { - self.setContent(self.startContent, {format : 'raw'}); - }); - - // Add shortcuts - function handleShortcut(e, execute) { - if (e.altKey || e.ctrlKey || e.metaKey) { - each(self.shortcuts, function(shortcut) { - var ctrlState = tinymce.isMac ? e.metaKey : e.ctrlKey; - - if (shortcut.ctrl != ctrlState || shortcut.alt != e.altKey || shortcut.shift != e.shiftKey) - return; - - if (e.keyCode == shortcut.keyCode || (e.charCode && e.charCode == shortcut.charCode)) { - e.preventDefault(); - - if (execute) { - shortcut.func.call(shortcut.scope); - } - - return true; - } - }); - } - }; - - self.onKeyUp.add(function(ed, e) { - handleShortcut(e); - }); - - self.onKeyPress.add(function(ed, e) { - handleShortcut(e); - }); - - self.onKeyDown.add(function(ed, e) { - handleShortcut(e, true); - }); - - if (tinymce.isOpera) { - self.onClick.add(function(ed, e) { - e.preventDefault(); - }); - } - }; -})(tinymce); -(function(tinymce) { - // Added for compression purposes - var each = tinymce.each, undef, TRUE = true, FALSE = false; - - tinymce.EditorCommands = function(editor) { - var dom = editor.dom, - selection = editor.selection, - commands = {state: {}, exec : {}, value : {}}, - settings = editor.settings, - formatter = editor.formatter, - bookmark; - - function execCommand(command, ui, value) { - var func; - - command = command.toLowerCase(); - if (func = commands.exec[command]) { - func(command, ui, value); - return TRUE; - } - - return FALSE; - }; - - function queryCommandState(command) { - var func; - - command = command.toLowerCase(); - if (func = commands.state[command]) - return func(command); - - return -1; - }; - - function queryCommandValue(command) { - var func; - - command = command.toLowerCase(); - if (func = commands.value[command]) - return func(command); - - return FALSE; - }; - - function addCommands(command_list, type) { - type = type || 'exec'; - - each(command_list, function(callback, command) { - each(command.toLowerCase().split(','), function(command) { - commands[type][command] = callback; - }); - }); - }; - - // Expose public methods - tinymce.extend(this, { - execCommand : execCommand, - queryCommandState : queryCommandState, - queryCommandValue : queryCommandValue, - addCommands : addCommands - }); - - // Private methods - - function execNativeCommand(command, ui, value) { - if (ui === undef) - ui = FALSE; - - if (value === undef) - value = null; - - return editor.getDoc().execCommand(command, ui, value); - }; - - function isFormatMatch(name) { - return formatter.match(name); - }; - - function toggleFormat(name, value) { - formatter.toggle(name, value ? {value : value} : undef); - }; - - function storeSelection(type) { - bookmark = selection.getBookmark(type); - }; - - function restoreSelection() { - selection.moveToBookmark(bookmark); - }; - - // Add execCommand overrides - addCommands({ - // Ignore these, added for compatibility - 'mceResetDesignMode,mceBeginUndoLevel' : function() {}, - - // Add undo manager logic - 'mceEndUndoLevel,mceAddUndoLevel' : function() { - editor.undoManager.add(); - }, - - 'Cut,Copy,Paste' : function(command) { - var doc = editor.getDoc(), failed; - - // Try executing the native command - try { - execNativeCommand(command); - } catch (ex) { - // Command failed - failed = TRUE; - } - - // Present alert message about clipboard access not being available - if (failed || !doc.queryCommandSupported(command)) { - if (tinymce.isGecko) { - editor.windowManager.confirm(editor.getLang('clipboard_msg'), function(state) { - if (state) - open('http://www.mozilla.org/editor/midasdemo/securityprefs.html', '_blank'); - }); - } else - editor.windowManager.alert(editor.getLang('clipboard_no_support')); - } - }, - - // Override unlink command - unlink : function(command) { - if (selection.isCollapsed()) - selection.select(selection.getNode()); - - execNativeCommand(command); - selection.collapse(FALSE); - }, - - // Override justify commands to use the text formatter engine - 'JustifyLeft,JustifyCenter,JustifyRight,JustifyFull' : function(command) { - var align = command.substring(7); - - // Remove all other alignments first - each('left,center,right,full'.split(','), function(name) { - if (align != name) - formatter.remove('align' + name); - }); - - toggleFormat('align' + align); - execCommand('mceRepaint'); - }, - - // Override list commands to fix WebKit bug - 'InsertUnorderedList,InsertOrderedList' : function(command) { - var listElm, listParent; - - execNativeCommand(command); - - // WebKit produces lists within block elements so we need to split them - // we will replace the native list creation logic to custom logic later on - // TODO: Remove this when the list creation logic is removed - listElm = dom.getParent(selection.getNode(), 'ol,ul'); - if (listElm) { - listParent = listElm.parentNode; - - // If list is within a text block then split that block - if (/^(H[1-6]|P|ADDRESS|PRE)$/.test(listParent.nodeName)) { - storeSelection(); - dom.split(listParent, listElm); - restoreSelection(); - } - } - }, - - // Override commands to use the text formatter engine - 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript' : function(command) { - toggleFormat(command); - }, - - // Override commands to use the text formatter engine - 'ForeColor,HiliteColor,FontName' : function(command, ui, value) { - toggleFormat(command, value); - }, - - FontSize : function(command, ui, value) { - var fontClasses, fontSizes; - - // Convert font size 1-7 to styles - if (value >= 1 && value <= 7) { - fontSizes = tinymce.explode(settings.font_size_style_values); - fontClasses = tinymce.explode(settings.font_size_classes); - - if (fontClasses) - value = fontClasses[value - 1] || value; - else - value = fontSizes[value - 1] || value; - } - - toggleFormat(command, value); - }, - - RemoveFormat : function(command) { - formatter.remove(command); - }, - - mceBlockQuote : function(command) { - toggleFormat('blockquote'); - }, - - FormatBlock : function(command, ui, value) { - return toggleFormat(value || 'p'); - }, - - mceCleanup : function() { - var bookmark = selection.getBookmark(); - - editor.setContent(editor.getContent({cleanup : TRUE}), {cleanup : TRUE}); - - selection.moveToBookmark(bookmark); - }, - - mceRemoveNode : function(command, ui, value) { - var node = value || selection.getNode(); - - // Make sure that the body node isn't removed - if (node != editor.getBody()) { - storeSelection(); - editor.dom.remove(node, TRUE); - restoreSelection(); - } - }, - - mceSelectNodeDepth : function(command, ui, value) { - var counter = 0; - - dom.getParent(selection.getNode(), function(node) { - if (node.nodeType == 1 && counter++ == value) { - selection.select(node); - return FALSE; - } - }, editor.getBody()); - }, - - mceSelectNode : function(command, ui, value) { - selection.select(value); - }, - - mceInsertContent : function(command, ui, value) { - var parser, serializer, parentNode, rootNode, fragment, args, - marker, nodeRect, viewPortRect, rng, node, node2, bookmarkHtml, viewportBodyElement; - - //selection.normalize(); - - // Setup parser and serializer - parser = editor.parser; - serializer = new tinymce.html.Serializer({}, editor.schema); - bookmarkHtml = '\uFEFF'; - - // Run beforeSetContent handlers on the HTML to be inserted - args = {content: value, format: 'html'}; - selection.onBeforeSetContent.dispatch(selection, args); - value = args.content; - - // Add caret at end of contents if it's missing - if (value.indexOf('{$caret}') == -1) - value += '{$caret}'; - - // Replace the caret marker with a span bookmark element - value = value.replace(/\{\$caret\}/, bookmarkHtml); - - // Insert node maker where we will insert the new HTML and get it's parent - if (!selection.isCollapsed()) - editor.getDoc().execCommand('Delete', false, null); - - parentNode = selection.getNode(); - - // Parse the fragment within the context of the parent node - args = {context : parentNode.nodeName.toLowerCase()}; - fragment = parser.parse(value, args); - - // Move the caret to a more suitable location - node = fragment.lastChild; - if (node.attr('id') == 'mce_marker') { - marker = node; - - for (node = node.prev; node; node = node.walk(true)) { - if (node.type == 3 || !dom.isBlock(node.name)) { - node.parent.insert(marker, node, node.name === 'br'); - break; - } - } - } - - // If parser says valid we can insert the contents into that parent - if (!args.invalid) { - value = serializer.serialize(fragment); - - // Check if parent is empty or only has one BR element then set the innerHTML of that parent - node = parentNode.firstChild; - node2 = parentNode.lastChild; - if (!node || (node === node2 && node.nodeName === 'BR')) - dom.setHTML(parentNode, value); - else - selection.setContent(value); - } else { - // If the fragment was invalid within that context then we need - // to parse and process the parent it's inserted into - - // Insert bookmark node and get the parent - selection.setContent(bookmarkHtml); - parentNode = selection.getNode(); - rootNode = editor.getBody(); - - // Opera will return the document node when selection is in root - if (parentNode.nodeType == 9) - parentNode = node = rootNode; - else - node = parentNode; - - // Find the ancestor just before the root element - while (node !== rootNode) { - parentNode = node; - node = node.parentNode; - } - - // Get the outer/inner HTML depending on if we are in the root and parser and serialize that - value = parentNode == rootNode ? rootNode.innerHTML : dom.getOuterHTML(parentNode); - value = serializer.serialize( - parser.parse( - // Need to replace by using a function since $ in the contents would otherwise be a problem - value.replace(//i, function() { - return serializer.serialize(fragment); - }) - ) - ); - - // Set the inner/outer HTML depending on if we are in the root or not - if (parentNode == rootNode) - dom.setHTML(rootNode, value); - else - dom.setOuterHTML(parentNode, value); - } - - marker = dom.get('mce_marker'); - - // Scroll range into view scrollIntoView on element can't be used since it will scroll the main view port as well - nodeRect = dom.getRect(marker); - viewPortRect = dom.getViewPort(editor.getWin()); - - // Check if node is out side the viewport if it is then scroll to it - if ((nodeRect.y + nodeRect.h > viewPortRect.y + viewPortRect.h || nodeRect.y < viewPortRect.y) || - (nodeRect.x > viewPortRect.x + viewPortRect.w || nodeRect.x < viewPortRect.x)) { - viewportBodyElement = tinymce.isIE ? editor.getDoc().documentElement : editor.getBody(); - viewportBodyElement.scrollLeft = nodeRect.x; - viewportBodyElement.scrollTop = nodeRect.y - viewPortRect.h + 25; - } - - // Move selection before marker and remove it - rng = dom.createRng(); - - // If previous sibling is a text node set the selection to the end of that node - node = marker.previousSibling; - if (node && node.nodeType == 3) { - rng.setStart(node, node.nodeValue.length); - } else { - // If the previous sibling isn't a text node or doesn't exist set the selection before the marker node - rng.setStartBefore(marker); - rng.setEndBefore(marker); - } - - // Remove the marker node and set the new range - dom.remove(marker); - selection.setRng(rng); - - // Dispatch after event and add any visual elements needed - selection.onSetContent.dispatch(selection, args); - editor.addVisual(); - }, - - mceInsertRawHTML : function(command, ui, value) { - selection.setContent('tiny_mce_marker'); - editor.setContent(editor.getContent().replace(/tiny_mce_marker/g, function() { return value })); - }, - - mceToggleFormat : function(command, ui, value) { - toggleFormat(value); - }, - - mceSetContent : function(command, ui, value) { - editor.setContent(value); - }, - - 'Indent,Outdent' : function(command) { - var intentValue, indentUnit, value; - - // Setup indent level - intentValue = settings.indentation; - indentUnit = /[a-z%]+$/i.exec(intentValue); - intentValue = parseInt(intentValue); - - if (!queryCommandState('InsertUnorderedList') && !queryCommandState('InsertOrderedList')) { - // If forced_root_blocks is set to false we don't have a block to indent so lets create a div - if (!settings.forced_root_block && !dom.getParent(selection.getNode(), dom.isBlock)) { - formatter.apply('div'); - } - - each(selection.getSelectedBlocks(), function(element) { - if (command == 'outdent') { - value = Math.max(0, parseInt(element.style.paddingLeft || 0) - intentValue); - dom.setStyle(element, 'paddingLeft', value ? value + indentUnit : ''); - } else - dom.setStyle(element, 'paddingLeft', (parseInt(element.style.paddingLeft || 0) + intentValue) + indentUnit); - }); - } else - execNativeCommand(command); - }, - - mceRepaint : function() { - var bookmark; - - if (tinymce.isGecko) { - try { - storeSelection(TRUE); - - if (selection.getSel()) - selection.getSel().selectAllChildren(editor.getBody()); - - selection.collapse(TRUE); - restoreSelection(); - } catch (ex) { - // Ignore - } - } - }, - - mceToggleFormat : function(command, ui, value) { - formatter.toggle(value); - }, - - InsertHorizontalRule : function() { - editor.execCommand('mceInsertContent', false, '
    '); - }, - - mceToggleVisualAid : function() { - editor.hasVisual = !editor.hasVisual; - editor.addVisual(); - }, - - mceReplaceContent : function(command, ui, value) { - editor.execCommand('mceInsertContent', false, value.replace(/\{\$selection\}/g, selection.getContent({format : 'text'}))); - }, - - mceInsertLink : function(command, ui, value) { - var anchor; - - if (typeof(value) == 'string') - value = {href : value}; - - anchor = dom.getParent(selection.getNode(), 'a'); - - // Spaces are never valid in URLs and it's a very common mistake for people to make so we fix it here. - value.href = value.href.replace(' ', '%20'); - - // Remove existing links if there could be child links or that the href isn't specified - if (!anchor || !value.href) { - formatter.remove('link'); - } - - // Apply new link to selection - if (value.href) { - formatter.apply('link', value, anchor); - } - }, - - selectAll : function() { - var root = dom.getRoot(), rng = dom.createRng(); - - // Old IE does a better job with selectall than new versions - if (selection.getRng().setStart) { - rng.setStart(root, 0); - rng.setEnd(root, root.childNodes.length); - - selection.setRng(rng); - } else { - execNativeCommand('SelectAll'); - } - } - }); - - // Add queryCommandState overrides - addCommands({ - // Override justify commands - 'JustifyLeft,JustifyCenter,JustifyRight,JustifyFull' : function(command) { - var name = 'align' + command.substring(7); - var nodes = selection.isCollapsed() ? [dom.getParent(selection.getNode(), dom.isBlock)] : selection.getSelectedBlocks(); - var matches = tinymce.map(nodes, function(node) { - return !!formatter.matchNode(node, name); - }); - return tinymce.inArray(matches, TRUE) !== -1; - }, - - 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript' : function(command) { - return isFormatMatch(command); - }, - - mceBlockQuote : function() { - return isFormatMatch('blockquote'); - }, - - Outdent : function() { - var node; - - if (settings.inline_styles) { - if ((node = dom.getParent(selection.getStart(), dom.isBlock)) && parseInt(node.style.paddingLeft) > 0) - return TRUE; - - if ((node = dom.getParent(selection.getEnd(), dom.isBlock)) && parseInt(node.style.paddingLeft) > 0) - return TRUE; - } - - return queryCommandState('InsertUnorderedList') || queryCommandState('InsertOrderedList') || (!settings.inline_styles && !!dom.getParent(selection.getNode(), 'BLOCKQUOTE')); - }, - - 'InsertUnorderedList,InsertOrderedList' : function(command) { - var list = dom.getParent(selection.getNode(), 'ul,ol'); - return list && - (command === 'insertunorderedlist' && list.tagName === 'UL' - || command === 'insertorderedlist' && list.tagName === 'OL'); - } - }, 'state'); - - // Add queryCommandValue overrides - addCommands({ - 'FontSize,FontName' : function(command) { - var value = 0, parent; - - if (parent = dom.getParent(selection.getNode(), 'span')) { - if (command == 'fontsize') - value = parent.style.fontSize; - else - value = parent.style.fontFamily.replace(/, /g, ',').replace(/[\'\"]/g, '').toLowerCase(); - } - - return value; - } - }, 'value'); - - // Add undo manager logic - addCommands({ - Undo : function() { - editor.undoManager.undo(); - }, - - Redo : function() { - editor.undoManager.redo(); - } - }); - }; -})(tinymce); - -(function(tinymce) { - var Dispatcher = tinymce.util.Dispatcher; - - tinymce.UndoManager = function(editor) { - var self, index = 0, data = [], beforeBookmark, onAdd, onUndo, onRedo; - - function getContent() { - // Remove whitespace before/after and remove pure bogus nodes - return tinymce.trim(editor.getContent({format : 'raw', no_events : 1}).replace(/]+data-mce-bogus[^>]+>[\u200B\uFEFF]+<\/span>/g, '')); - }; - - function addNonTypingUndoLevel() { - self.typing = false; - self.add(); - }; - - // Create event instances - onBeforeAdd = new Dispatcher(self); - onAdd = new Dispatcher(self); - onUndo = new Dispatcher(self); - onRedo = new Dispatcher(self); - - // Pass though onAdd event from UndoManager to Editor as onChange - onAdd.add(function(undoman, level) { - if (undoman.hasUndo()) - return editor.onChange.dispatch(editor, level, undoman); - }); - - // Pass though onUndo event from UndoManager to Editor - onUndo.add(function(undoman, level) { - return editor.onUndo.dispatch(editor, level, undoman); - }); - - // Pass though onRedo event from UndoManager to Editor - onRedo.add(function(undoman, level) { - return editor.onRedo.dispatch(editor, level, undoman); - }); - - // Add initial undo level when the editor is initialized - editor.onInit.add(function() { - self.add(); - }); - - // Get position before an execCommand is processed - editor.onBeforeExecCommand.add(function(ed, cmd, ui, val, args) { - if (cmd != 'Undo' && cmd != 'Redo' && cmd != 'mceRepaint' && (!args || !args.skip_undo)) { - self.beforeChange(); - } - }); - - // Add undo level after an execCommand call was made - editor.onExecCommand.add(function(ed, cmd, ui, val, args) { - if (cmd != 'Undo' && cmd != 'Redo' && cmd != 'mceRepaint' && (!args || !args.skip_undo)) { - self.add(); - } - }); - - // Add undo level on save contents, drag end and blur/focusout - editor.onSaveContent.add(addNonTypingUndoLevel); - editor.dom.bind(editor.dom.getRoot(), 'dragend', addNonTypingUndoLevel); - editor.dom.bind(editor.getBody(), 'focusout', function(e) { - if (!editor.removed && self.typing) { - addNonTypingUndoLevel(); - } - }); - - editor.onKeyUp.add(function(editor, e) { - var keyCode = e.keyCode; - - if ((keyCode >= 33 && keyCode <= 36) || (keyCode >= 37 && keyCode <= 40) || keyCode == 45 || keyCode == 13 || e.ctrlKey) { - addNonTypingUndoLevel(); - } - }); - - editor.onKeyDown.add(function(editor, e) { - var keyCode = e.keyCode; - - // Is caracter positon keys left,right,up,down,home,end,pgdown,pgup,enter - if ((keyCode >= 33 && keyCode <= 36) || (keyCode >= 37 && keyCode <= 40) || keyCode == 45) { - if (self.typing) { - addNonTypingUndoLevel(); - } - - return; - } - - // If key isn't shift,ctrl,alt,capslock,metakey - if ((keyCode < 16 || keyCode > 20) && keyCode != 224 && keyCode != 91 && !self.typing) { - self.beforeChange(); - self.typing = true; - self.add(); - } - }); - - editor.onMouseDown.add(function(editor, e) { - if (self.typing) { - addNonTypingUndoLevel(); - } - }); - - // Add keyboard shortcuts for undo/redo keys - editor.addShortcut('ctrl+z', 'undo_desc', 'Undo'); - editor.addShortcut('ctrl+y', 'redo_desc', 'Redo'); - - self = { - // Explose for debugging reasons - data : data, - - typing : false, - - onBeforeAdd: onBeforeAdd, - - onAdd : onAdd, - - onUndo : onUndo, - - onRedo : onRedo, - - beforeChange : function() { - beforeBookmark = editor.selection.getBookmark(2, true); - }, - - add : function(level) { - var i, settings = editor.settings, lastLevel; - - level = level || {}; - level.content = getContent(); - - self.onBeforeAdd.dispatch(self, level); - - // Add undo level if needed - lastLevel = data[index]; - if (lastLevel && lastLevel.content == level.content) - return null; - - // Set before bookmark on previous level - if (data[index]) - data[index].beforeBookmark = beforeBookmark; - - // Time to compress - if (settings.custom_undo_redo_levels) { - if (data.length > settings.custom_undo_redo_levels) { - for (i = 0; i < data.length - 1; i++) - data[i] = data[i + 1]; - - data.length--; - index = data.length; - } - } - - // Get a non intrusive normalized bookmark - level.bookmark = editor.selection.getBookmark(2, true); - - // Crop array if needed - if (index < data.length - 1) - data.length = index + 1; - - data.push(level); - index = data.length - 1; - - self.onAdd.dispatch(self, level); - editor.isNotDirty = 0; - - return level; - }, - - undo : function() { - var level, i; - - if (self.typing) { - self.add(); - self.typing = false; - } - - if (index > 0) { - level = data[--index]; - - editor.setContent(level.content, {format : 'raw'}); - editor.selection.moveToBookmark(level.beforeBookmark); - - self.onUndo.dispatch(self, level); - } - - return level; - }, - - redo : function() { - var level; - - if (index < data.length - 1) { - level = data[++index]; - - editor.setContent(level.content, {format : 'raw'}); - editor.selection.moveToBookmark(level.bookmark); - - self.onRedo.dispatch(self, level); - } - - return level; - }, - - clear : function() { - data = []; - index = 0; - self.typing = false; - }, - - hasUndo : function() { - return index > 0 || this.typing; - }, - - hasRedo : function() { - return index < data.length - 1 && !this.typing; - } - }; - - return self; - }; -})(tinymce); - -tinymce.ForceBlocks = function(editor) { - var settings = editor.settings, dom = editor.dom, selection = editor.selection, blockElements = editor.schema.getBlockElements(); - - function addRootBlocks() { - var node = selection.getStart(), rootNode = editor.getBody(), rng, startContainer, startOffset, endContainer, endOffset, rootBlockNode, tempNode, offset = -0xFFFFFF, wrapped, isInEditorDocument; - - if (!node || node.nodeType !== 1 || !settings.forced_root_block) - return; - - // Check if node is wrapped in block - while (node && node != rootNode) { - if (blockElements[node.nodeName]) - return; - - node = node.parentNode; - } - - // Get current selection - rng = selection.getRng(); - if (rng.setStart) { - startContainer = rng.startContainer; - startOffset = rng.startOffset; - endContainer = rng.endContainer; - endOffset = rng.endOffset; - } else { - // Force control range into text range - if (rng.item) { - node = rng.item(0); - rng = editor.getDoc().body.createTextRange(); - rng.moveToElementText(node); - } - - isInEditorDocument = rng.parentElement().ownerDocument === editor.getDoc(); - tmpRng = rng.duplicate(); - tmpRng.collapse(true); - startOffset = tmpRng.move('character', offset) * -1; - - if (!tmpRng.collapsed) { - tmpRng = rng.duplicate(); - tmpRng.collapse(false); - endOffset = (tmpRng.move('character', offset) * -1) - startOffset; - } - } - - // Wrap non block elements and text nodes - node = rootNode.firstChild; - while (node) { - if (node.nodeType === 3 || (node.nodeType == 1 && !blockElements[node.nodeName])) { - // Remove empty text nodes - if (node.nodeType === 3 && node.nodeValue.length == 0) { - tempNode = node; - node = node.nextSibling; - dom.remove(tempNode); - continue; - } - - if (!rootBlockNode) { - rootBlockNode = dom.create(settings.forced_root_block); - node.parentNode.insertBefore(rootBlockNode, node); - wrapped = true; - } - - tempNode = node; - node = node.nextSibling; - rootBlockNode.appendChild(tempNode); - } else { - rootBlockNode = null; - node = node.nextSibling; - } - } - - if (wrapped) { - if (rng.setStart) { - rng.setStart(startContainer, startOffset); - rng.setEnd(endContainer, endOffset); - selection.setRng(rng); - } else { - // Only select if the previous selection was inside the document to prevent auto focus in quirks mode - if (isInEditorDocument) { - try { - rng = editor.getDoc().body.createTextRange(); - rng.moveToElementText(rootNode); - rng.collapse(true); - rng.moveStart('character', startOffset); - - if (endOffset > 0) - rng.moveEnd('character', endOffset); - - rng.select(); - } catch (ex) { - // Ignore - } - } - } - - editor.nodeChanged(); - } - }; - - // Force root blocks - if (settings.forced_root_block) { - editor.onKeyUp.add(addRootBlocks); - editor.onNodeChange.add(addRootBlocks); - } -}; - -(function(tinymce) { - // Shorten names - var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, extend = tinymce.extend; - - tinymce.create('tinymce.ControlManager', { - ControlManager : function(ed, s) { - var t = this, i; - - s = s || {}; - t.editor = ed; - t.controls = {}; - t.onAdd = new tinymce.util.Dispatcher(t); - t.onPostRender = new tinymce.util.Dispatcher(t); - t.prefix = s.prefix || ed.id + '_'; - t._cls = {}; - - t.onPostRender.add(function() { - each(t.controls, function(c) { - c.postRender(); - }); - }); - }, - - get : function(id) { - return this.controls[this.prefix + id] || this.controls[id]; - }, - - setActive : function(id, s) { - var c = null; - - if (c = this.get(id)) - c.setActive(s); - - return c; - }, - - setDisabled : function(id, s) { - var c = null; - - if (c = this.get(id)) - c.setDisabled(s); - - return c; - }, - - add : function(c) { - var t = this; - - if (c) { - t.controls[c.id] = c; - t.onAdd.dispatch(c, t); - } - - return c; - }, - - createControl : function(name) { - var ctrl, i, l, self = this, editor = self.editor, factories, ctrlName; - - // Build control factory cache - if (!self.controlFactories) { - self.controlFactories = []; - each(editor.plugins, function(plugin) { - if (plugin.createControl) { - self.controlFactories.push(plugin); - } - }); - } - - // Create controls by asking cached factories - factories = self.controlFactories; - for (i = 0, l = factories.length; i < l; i++) { - ctrl = factories[i].createControl(name, self); - - if (ctrl) { - return self.add(ctrl); - } - } - - // Create sepearator - if (name === "|" || name === "separator") { - return self.createSeparator(); - } - - // Create control from button collection - if (editor.buttons && (ctrl = editor.buttons[name])) { - return self.createButton(name, ctrl); - } - - return self.add(ctrl); - }, - - createDropMenu : function(id, s, cc) { - var t = this, ed = t.editor, c, bm, v, cls; - - s = extend({ - 'class' : 'mceDropDown', - constrain : ed.settings.constrain_menus - }, s); - - s['class'] = s['class'] + ' ' + ed.getParam('skin') + 'Skin'; - if (v = ed.getParam('skin_variant')) - s['class'] += ' ' + ed.getParam('skin') + 'Skin' + v.substring(0, 1).toUpperCase() + v.substring(1); - - s['class'] += ed.settings.directionality == "rtl" ? ' mceRtl' : ''; - - id = t.prefix + id; - cls = cc || t._cls.dropmenu || tinymce.ui.DropMenu; - c = t.controls[id] = new cls(id, s); - c.onAddItem.add(function(c, o) { - var s = o.settings; - - s.title = ed.getLang(s.title, s.title); - - if (!s.onclick) { - s.onclick = function(v) { - if (s.cmd) - ed.execCommand(s.cmd, s.ui || false, s.value); - }; - } - }); - - ed.onRemove.add(function() { - c.destroy(); - }); - - // Fix for bug #1897785, #1898007 - if (tinymce.isIE) { - c.onShowMenu.add(function() { - // IE 8 needs focus in order to store away a range with the current collapsed caret location - ed.focus(); - - bm = ed.selection.getBookmark(1); - }); - - c.onHideMenu.add(function() { - if (bm) { - ed.selection.moveToBookmark(bm); - bm = 0; - } - }); - } - - return t.add(c); - }, - - createListBox : function(id, s, cc) { - var t = this, ed = t.editor, cmd, c, cls; - - if (t.get(id)) - return null; - - s.title = ed.translate(s.title); - s.scope = s.scope || ed; - - if (!s.onselect) { - s.onselect = function(v) { - ed.execCommand(s.cmd, s.ui || false, v || s.value); - }; - } - - s = extend({ - title : s.title, - 'class' : 'mce_' + id, - scope : s.scope, - control_manager : t - }, s); - - id = t.prefix + id; - - - function useNativeListForAccessibility(ed) { - return ed.settings.use_accessible_selects && !tinymce.isGecko - } - - if (ed.settings.use_native_selects || useNativeListForAccessibility(ed)) - c = new tinymce.ui.NativeListBox(id, s); - else { - cls = cc || t._cls.listbox || tinymce.ui.ListBox; - c = new cls(id, s, ed); - } - - t.controls[id] = c; - - // Fix focus problem in Safari - if (tinymce.isWebKit) { - c.onPostRender.add(function(c, n) { - // Store bookmark on mousedown - Event.add(n, 'mousedown', function() { - ed.bookmark = ed.selection.getBookmark(1); - }); - - // Restore on focus, since it might be lost - Event.add(n, 'focus', function() { - ed.selection.moveToBookmark(ed.bookmark); - ed.bookmark = null; - }); - }); - } - - if (c.hideMenu) - ed.onMouseDown.add(c.hideMenu, c); - - return t.add(c); - }, - - createButton : function(id, s, cc) { - var t = this, ed = t.editor, o, c, cls; - - if (t.get(id)) - return null; - - s.title = ed.translate(s.title); - s.label = ed.translate(s.label); - s.scope = s.scope || ed; - - if (!s.onclick && !s.menu_button) { - s.onclick = function() { - ed.execCommand(s.cmd, s.ui || false, s.value); - }; - } - - s = extend({ - title : s.title, - 'class' : 'mce_' + id, - unavailable_prefix : ed.getLang('unavailable', ''), - scope : s.scope, - control_manager : t - }, s); - - id = t.prefix + id; - - if (s.menu_button) { - cls = cc || t._cls.menubutton || tinymce.ui.MenuButton; - c = new cls(id, s, ed); - ed.onMouseDown.add(c.hideMenu, c); - } else { - cls = t._cls.button || tinymce.ui.Button; - c = new cls(id, s, ed); - } - - return t.add(c); - }, - - createMenuButton : function(id, s, cc) { - s = s || {}; - s.menu_button = 1; - - return this.createButton(id, s, cc); - }, - - createSplitButton : function(id, s, cc) { - var t = this, ed = t.editor, cmd, c, cls; - - if (t.get(id)) - return null; - - s.title = ed.translate(s.title); - s.scope = s.scope || ed; - - if (!s.onclick) { - s.onclick = function(v) { - ed.execCommand(s.cmd, s.ui || false, v || s.value); - }; - } - - if (!s.onselect) { - s.onselect = function(v) { - ed.execCommand(s.cmd, s.ui || false, v || s.value); - }; - } - - s = extend({ - title : s.title, - 'class' : 'mce_' + id, - scope : s.scope, - control_manager : t - }, s); - - id = t.prefix + id; - cls = cc || t._cls.splitbutton || tinymce.ui.SplitButton; - c = t.add(new cls(id, s, ed)); - ed.onMouseDown.add(c.hideMenu, c); - - return c; - }, - - createColorSplitButton : function(id, s, cc) { - var t = this, ed = t.editor, cmd, c, cls, bm; - - if (t.get(id)) - return null; - - s.title = ed.translate(s.title); - s.scope = s.scope || ed; - - if (!s.onclick) { - s.onclick = function(v) { - if (tinymce.isIE) - bm = ed.selection.getBookmark(1); - - ed.execCommand(s.cmd, s.ui || false, v || s.value); - }; - } - - if (!s.onselect) { - s.onselect = function(v) { - ed.execCommand(s.cmd, s.ui || false, v || s.value); - }; - } - - s = extend({ - title : s.title, - 'class' : 'mce_' + id, - 'menu_class' : ed.getParam('skin') + 'Skin', - scope : s.scope, - more_colors_title : ed.getLang('more_colors') - }, s); - - id = t.prefix + id; - cls = cc || t._cls.colorsplitbutton || tinymce.ui.ColorSplitButton; - c = new cls(id, s, ed); - ed.onMouseDown.add(c.hideMenu, c); - - // Remove the menu element when the editor is removed - ed.onRemove.add(function() { - c.destroy(); - }); - - // Fix for bug #1897785, #1898007 - if (tinymce.isIE) { - c.onShowMenu.add(function() { - // IE 8 needs focus in order to store away a range with the current collapsed caret location - ed.focus(); - bm = ed.selection.getBookmark(1); - }); - - c.onHideMenu.add(function() { - if (bm) { - ed.selection.moveToBookmark(bm); - bm = 0; - } - }); - } - - return t.add(c); - }, - - createToolbar : function(id, s, cc) { - var c, t = this, cls; - - id = t.prefix + id; - cls = cc || t._cls.toolbar || tinymce.ui.Toolbar; - c = new cls(id, s, t.editor); - - if (t.get(id)) - return null; - - return t.add(c); - }, - - createToolbarGroup : function(id, s, cc) { - var c, t = this, cls; - id = t.prefix + id; - cls = cc || this._cls.toolbarGroup || tinymce.ui.ToolbarGroup; - c = new cls(id, s, t.editor); - - if (t.get(id)) - return null; - - return t.add(c); - }, - - createSeparator : function(cc) { - var cls = cc || this._cls.separator || tinymce.ui.Separator; - - return new cls(); - }, - - setControlType : function(n, c) { - return this._cls[n.toLowerCase()] = c; - }, - - destroy : function() { - each(this.controls, function(c) { - c.destroy(); - }); - - this.controls = null; - } - }); -})(tinymce); - -(function(tinymce) { - var Dispatcher = tinymce.util.Dispatcher, each = tinymce.each, isIE = tinymce.isIE, isOpera = tinymce.isOpera; - - tinymce.create('tinymce.WindowManager', { - WindowManager : function(ed) { - var t = this; - - t.editor = ed; - t.onOpen = new Dispatcher(t); - t.onClose = new Dispatcher(t); - t.params = {}; - t.features = {}; - }, - - open : function(s, p) { - var t = this, f = '', x, y, mo = t.editor.settings.dialog_type == 'modal', w, sw, sh, vp = tinymce.DOM.getViewPort(), u; - - // Default some options - s = s || {}; - p = p || {}; - sw = isOpera ? vp.w : screen.width; // Opera uses windows inside the Opera window - sh = isOpera ? vp.h : screen.height; - s.name = s.name || 'mc_' + new Date().getTime(); - s.width = parseInt(s.width || 320); - s.height = parseInt(s.height || 240); - s.resizable = true; - s.left = s.left || parseInt(sw / 2.0) - (s.width / 2.0); - s.top = s.top || parseInt(sh / 2.0) - (s.height / 2.0); - p.inline = false; - p.mce_width = s.width; - p.mce_height = s.height; - p.mce_auto_focus = s.auto_focus; - - if (mo) { - if (isIE) { - s.center = true; - s.help = false; - s.dialogWidth = s.width + 'px'; - s.dialogHeight = s.height + 'px'; - s.scroll = s.scrollbars || false; - } - } - - // Build features string - each(s, function(v, k) { - if (tinymce.is(v, 'boolean')) - v = v ? 'yes' : 'no'; - - if (!/^(name|url)$/.test(k)) { - if (isIE && mo) - f += (f ? ';' : '') + k + ':' + v; - else - f += (f ? ',' : '') + k + '=' + v; - } - }); - - t.features = s; - t.params = p; - t.onOpen.dispatch(t, s, p); - - u = s.url || s.file; - u = tinymce._addVer(u); - - try { - if (isIE && mo) { - w = 1; - window.showModalDialog(u, window, f); - } else - w = window.open(u, s.name, f); - } catch (ex) { - // Ignore - } - - if (!w) - alert(t.editor.getLang('popup_blocked')); - }, - - close : function(w) { - w.close(); - this.onClose.dispatch(this); - }, - - createInstance : function(cl, a, b, c, d, e) { - var f = tinymce.resolve(cl); - - return new f(a, b, c, d, e); - }, - - confirm : function(t, cb, s, w) { - w = w || window; - - cb.call(s || this, w.confirm(this._decode(this.editor.getLang(t, t)))); - }, - - alert : function(tx, cb, s, w) { - var t = this; - - w = w || window; - w.alert(t._decode(t.editor.getLang(tx, tx))); - - if (cb) - cb.call(s || t); - }, - - resizeBy : function(dw, dh, win) { - win.resizeBy(dw, dh); - }, - - // Internal functions - - _decode : function(s) { - return tinymce.DOM.decode(s).replace(/\\n/g, '\n'); - } - }); -}(tinymce)); -(function(tinymce) { - tinymce.Formatter = function(ed) { - var formats = {}, - each = tinymce.each, - dom = ed.dom, - selection = ed.selection, - TreeWalker = tinymce.dom.TreeWalker, - rangeUtils = new tinymce.dom.RangeUtils(dom), - isValid = ed.schema.isValidChild, - isArray = tinymce.isArray, - isBlock = dom.isBlock, - forcedRootBlock = ed.settings.forced_root_block, - nodeIndex = dom.nodeIndex, - INVISIBLE_CHAR = '\uFEFF', - MCE_ATTR_RE = /^(src|href|style)$/, - FALSE = false, - TRUE = true, - formatChangeData, - undef, - getContentEditable = dom.getContentEditable; - - function isTextBlock(name) { - return !!ed.schema.getTextBlocks()[name.toLowerCase()]; - } - - function getParents(node, selector) { - return dom.getParents(node, selector, dom.getRoot()); - }; - - function isCaretNode(node) { - return node.nodeType === 1 && node.id === '_mce_caret'; - }; - - function defaultFormats() { - register({ - alignleft : [ - {selector : 'figure,p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'left'}, defaultBlock: 'div'}, - {selector : 'img,table', collapsed : false, styles : {'float' : 'left'}} - ], - - aligncenter : [ - {selector : 'figure,p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'center'}, defaultBlock: 'div'}, - {selector : 'img', collapsed : false, styles : {display : 'block', marginLeft : 'auto', marginRight : 'auto'}}, - {selector : 'table', collapsed : false, styles : {marginLeft : 'auto', marginRight : 'auto'}} - ], - - alignright : [ - {selector : 'figure,p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'right'}, defaultBlock: 'div'}, - {selector : 'img,table', collapsed : false, styles : {'float' : 'right'}} - ], - - alignfull : [ - {selector : 'figure,p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'justify'}, defaultBlock: 'div'} - ], - - bold : [ - {inline : 'strong', remove : 'all'}, - {inline : 'span', styles : {fontWeight : 'bold'}}, - {inline : 'b', remove : 'all'} - ], - - italic : [ - {inline : 'em', remove : 'all'}, - {inline : 'span', styles : {fontStyle : 'italic'}}, - {inline : 'i', remove : 'all'} - ], - - underline : [ - {inline : 'span', styles : {textDecoration : 'underline'}, exact : true}, - {inline : 'u', remove : 'all'} - ], - - strikethrough : [ - {inline : 'span', styles : {textDecoration : 'line-through'}, exact : true}, - {inline : 'strike', remove : 'all'} - ], - - forecolor : {inline : 'span', styles : {color : '%value'}, wrap_links : false}, - hilitecolor : {inline : 'span', styles : {backgroundColor : '%value'}, wrap_links : false}, - fontname : {inline : 'span', styles : {fontFamily : '%value'}}, - fontsize : {inline : 'span', styles : {fontSize : '%value'}}, - fontsize_class : {inline : 'span', attributes : {'class' : '%value'}}, - blockquote : {block : 'blockquote', wrapper : 1, remove : 'all'}, - subscript : {inline : 'sub'}, - superscript : {inline : 'sup'}, - - link : {inline : 'a', selector : 'a', remove : 'all', split : true, deep : true, - onmatch : function(node) { - return true; - }, - - onformat : function(elm, fmt, vars) { - each(vars, function(value, key) { - dom.setAttrib(elm, key, value); - }); - } - }, - - removeformat : [ - {selector : 'b,strong,em,i,font,u,strike', remove : 'all', split : true, expand : false, block_expand : true, deep : true}, - {selector : 'span', attributes : ['style', 'class'], remove : 'empty', split : true, expand : false, deep : true}, - {selector : '*', attributes : ['style', 'class'], split : false, expand : false, deep : true} - ] - }); - - // Register default block formats - each('p h1 h2 h3 h4 h5 h6 div address pre div code dt dd samp'.split(/\s/), function(name) { - register(name, {block : name, remove : 'all'}); - }); - - // Register user defined formats - register(ed.settings.formats); - }; - - function addKeyboardShortcuts() { - // Add some inline shortcuts - ed.addShortcut('ctrl+b', 'bold_desc', 'Bold'); - ed.addShortcut('ctrl+i', 'italic_desc', 'Italic'); - ed.addShortcut('ctrl+u', 'underline_desc', 'Underline'); - - // BlockFormat shortcuts keys - for (var i = 1; i <= 6; i++) { - ed.addShortcut('ctrl+' + i, '', ['FormatBlock', false, 'h' + i]); - } - - ed.addShortcut('ctrl+7', '', ['FormatBlock', false, 'p']); - ed.addShortcut('ctrl+8', '', ['FormatBlock', false, 'div']); - ed.addShortcut('ctrl+9', '', ['FormatBlock', false, 'address']); - }; - - // Public functions - - function get(name) { - return name ? formats[name] : formats; - }; - - function register(name, format) { - if (name) { - if (typeof(name) !== 'string') { - each(name, function(format, name) { - register(name, format); - }); - } else { - // Force format into array and add it to internal collection - format = format.length ? format : [format]; - - each(format, function(format) { - // Set deep to false by default on selector formats this to avoid removing - // alignment on images inside paragraphs when alignment is changed on paragraphs - if (format.deep === undef) - format.deep = !format.selector; - - // Default to true - if (format.split === undef) - format.split = !format.selector || format.inline; - - // Default to true - if (format.remove === undef && format.selector && !format.inline) - format.remove = 'none'; - - // Mark format as a mixed format inline + block level - if (format.selector && format.inline) { - format.mixed = true; - format.block_expand = true; - } - - // Split classes if needed - if (typeof(format.classes) === 'string') - format.classes = format.classes.split(/\s+/); - }); - - formats[name] = format; - } - } - }; - - var getTextDecoration = function(node) { - var decoration; - - ed.dom.getParent(node, function(n) { - decoration = ed.dom.getStyle(n, 'text-decoration'); - return decoration && decoration !== 'none'; - }); - - return decoration; - }; - - var processUnderlineAndColor = function(node) { - var textDecoration; - if (node.nodeType === 1 && node.parentNode && node.parentNode.nodeType === 1) { - textDecoration = getTextDecoration(node.parentNode); - if (ed.dom.getStyle(node, 'color') && textDecoration) { - ed.dom.setStyle(node, 'text-decoration', textDecoration); - } else if (ed.dom.getStyle(node, 'textdecoration') === textDecoration) { - ed.dom.setStyle(node, 'text-decoration', null); - } - } - }; - - function apply(name, vars, node) { - var formatList = get(name), format = formatList[0], bookmark, rng, i, isCollapsed = selection.isCollapsed(); - - function setElementFormat(elm, fmt) { - fmt = fmt || format; - - if (elm) { - if (fmt.onformat) { - fmt.onformat(elm, fmt, vars, node); - } - - each(fmt.styles, function(value, name) { - dom.setStyle(elm, name, replaceVars(value, vars)); - }); - - each(fmt.attributes, function(value, name) { - dom.setAttrib(elm, name, replaceVars(value, vars)); - }); - - each(fmt.classes, function(value) { - value = replaceVars(value, vars); - - if (!dom.hasClass(elm, value)) - dom.addClass(elm, value); - }); - } - }; - function adjustSelectionToVisibleSelection() { - function findSelectionEnd(start, end) { - var walker = new TreeWalker(end); - for (node = walker.current(); node; node = walker.prev()) { - if (node.childNodes.length > 1 || node == start || node.tagName == 'BR') { - return node; - } - } - }; - - // Adjust selection so that a end container with a end offset of zero is not included in the selection - // as this isn't visible to the user. - var rng = ed.selection.getRng(); - var start = rng.startContainer; - var end = rng.endContainer; - - if (start != end && rng.endOffset === 0) { - var newEnd = findSelectionEnd(start, end); - var endOffset = newEnd.nodeType == 3 ? newEnd.length : newEnd.childNodes.length; - - rng.setEnd(newEnd, endOffset); - } - - return rng; - } - - function applyStyleToList(node, bookmark, wrapElm, newWrappers, process){ - var nodes = [], listIndex = -1, list, startIndex = -1, endIndex = -1, currentWrapElm; - - // find the index of the first child list. - each(node.childNodes, function(n, index) { - if (n.nodeName === "UL" || n.nodeName === "OL") { - listIndex = index; - list = n; - return false; - } - }); - - // get the index of the bookmarks - each(node.childNodes, function(n, index) { - if (n.nodeName === "SPAN" && dom.getAttrib(n, "data-mce-type") == "bookmark") { - if (n.id == bookmark.id + "_start") { - startIndex = index; - } else if (n.id == bookmark.id + "_end") { - endIndex = index; - } - } - }); - - // if the selection spans across an embedded list, or there isn't an embedded list - handle processing normally - if (listIndex <= 0 || (startIndex < listIndex && endIndex > listIndex)) { - each(tinymce.grep(node.childNodes), process); - return 0; - } else { - currentWrapElm = dom.clone(wrapElm, FALSE); - - // create a list of the nodes on the same side of the list as the selection - each(tinymce.grep(node.childNodes), function(n, index) { - if ((startIndex < listIndex && index < listIndex) || (startIndex > listIndex && index > listIndex)) { - nodes.push(n); - n.parentNode.removeChild(n); - } - }); - - // insert the wrapping element either before or after the list. - if (startIndex < listIndex) { - node.insertBefore(currentWrapElm, list); - } else if (startIndex > listIndex) { - node.insertBefore(currentWrapElm, list.nextSibling); - } - - // add the new nodes to the list. - newWrappers.push(currentWrapElm); - - each(nodes, function(node) { - currentWrapElm.appendChild(node); - }); - - return currentWrapElm; - } - }; - - function applyRngStyle(rng, bookmark, node_specific) { - var newWrappers = [], wrapName, wrapElm, contentEditable = true; - - // Setup wrapper element - wrapName = format.inline || format.block; - wrapElm = dom.create(wrapName); - setElementFormat(wrapElm); - - rangeUtils.walk(rng, function(nodes) { - var currentWrapElm; - - function process(node) { - var nodeName, parentName, found, hasContentEditableState, lastContentEditable; - - lastContentEditable = contentEditable; - nodeName = node.nodeName.toLowerCase(); - parentName = node.parentNode.nodeName.toLowerCase(); - - // Node has a contentEditable value - if (node.nodeType === 1 && getContentEditable(node)) { - lastContentEditable = contentEditable; - contentEditable = getContentEditable(node) === "true"; - hasContentEditableState = true; // We don't want to wrap the container only it's children - } - - // Stop wrapping on br elements - if (isEq(nodeName, 'br')) { - currentWrapElm = 0; - - // Remove any br elements when we wrap things - if (format.block) - dom.remove(node); - - return; - } - - // If node is wrapper type - if (format.wrapper && matchNode(node, name, vars)) { - currentWrapElm = 0; - return; - } - - // Can we rename the block - if (contentEditable && !hasContentEditableState && format.block && !format.wrapper && isTextBlock(nodeName)) { - node = dom.rename(node, wrapName); - setElementFormat(node); - newWrappers.push(node); - currentWrapElm = 0; - return; - } - - // Handle selector patterns - if (format.selector) { - // Look for matching formats - each(formatList, function(format) { - // Check collapsed state if it exists - if ('collapsed' in format && format.collapsed !== isCollapsed) { - return; - } - - if (dom.is(node, format.selector) && !isCaretNode(node)) { - setElementFormat(node, format); - found = true; - } - }); - - // Continue processing if a selector match wasn't found and a inline element is defined - if (!format.inline || found) { - currentWrapElm = 0; - return; - } - } - - // Is it valid to wrap this item - if (contentEditable && !hasContentEditableState && isValid(wrapName, nodeName) && isValid(parentName, wrapName) && - !(!node_specific && node.nodeType === 3 && node.nodeValue.length === 1 && node.nodeValue.charCodeAt(0) === 65279) && !isCaretNode(node)) { - // Start wrapping - if (!currentWrapElm) { - // Wrap the node - currentWrapElm = dom.clone(wrapElm, FALSE); - node.parentNode.insertBefore(currentWrapElm, node); - newWrappers.push(currentWrapElm); - } - - currentWrapElm.appendChild(node); - } else if (nodeName == 'li' && bookmark) { - // Start wrapping - if we are in a list node and have a bookmark, then we will always begin by wrapping in a new element. - currentWrapElm = applyStyleToList(node, bookmark, wrapElm, newWrappers, process); - } else { - // Start a new wrapper for possible children - currentWrapElm = 0; - - each(tinymce.grep(node.childNodes), process); - - if (hasContentEditableState) { - contentEditable = lastContentEditable; // Restore last contentEditable state from stack - } - - // End the last wrapper - currentWrapElm = 0; - } - }; - - // Process siblings from range - each(nodes, process); - }); - - // Wrap links inside as well, for example color inside a link when the wrapper is around the link - if (format.wrap_links === false) { - each(newWrappers, function(node) { - function process(node) { - var i, currentWrapElm, children; - - if (node.nodeName === 'A') { - currentWrapElm = dom.clone(wrapElm, FALSE); - newWrappers.push(currentWrapElm); - - children = tinymce.grep(node.childNodes); - for (i = 0; i < children.length; i++) - currentWrapElm.appendChild(children[i]); - - node.appendChild(currentWrapElm); - } - - each(tinymce.grep(node.childNodes), process); - }; - - process(node); - }); - } - - // Cleanup - - each(newWrappers, function(node) { - var childCount; - - function getChildCount(node) { - var count = 0; - - each(node.childNodes, function(node) { - if (!isWhiteSpaceNode(node) && !isBookmarkNode(node)) - count++; - }); - - return count; - }; - - function mergeStyles(node) { - var child, clone; - - each(node.childNodes, function(node) { - if (node.nodeType == 1 && !isBookmarkNode(node) && !isCaretNode(node)) { - child = node; - return FALSE; // break loop - } - }); - - // If child was found and of the same type as the current node - if (child && matchName(child, format)) { - clone = dom.clone(child, FALSE); - setElementFormat(clone); - - dom.replace(clone, node, TRUE); - dom.remove(child, 1); - } - - return clone || node; - }; - - childCount = getChildCount(node); - - // Remove empty nodes but only if there is multiple wrappers and they are not block - // elements so never remove single

    since that would remove the currrent empty block element where the caret is at - if ((newWrappers.length > 1 || !isBlock(node)) && childCount === 0) { - dom.remove(node, 1); - return; - } - - if (format.inline || format.wrapper) { - // Merges the current node with it's children of similar type to reduce the number of elements - if (!format.exact && childCount === 1) - node = mergeStyles(node); - - // Remove/merge children - each(formatList, function(format) { - // Merge all children of similar type will move styles from child to parent - // this: text - // will become: text - each(dom.select(format.inline, node), function(child) { - var parent; - - // When wrap_links is set to false we don't want - // to remove the format on children within links - if (format.wrap_links === false) { - parent = child.parentNode; - - do { - if (parent.nodeName === 'A') - return; - } while (parent = parent.parentNode); - } - - removeFormat(format, vars, child, format.exact ? child : null); - }); - }); - - // Remove child if direct parent is of same type - if (matchNode(node.parentNode, name, vars)) { - dom.remove(node, 1); - node = 0; - return TRUE; - } - - // Look for parent with similar style format - if (format.merge_with_parents) { - dom.getParent(node.parentNode, function(parent) { - if (matchNode(parent, name, vars)) { - dom.remove(node, 1); - node = 0; - return TRUE; - } - }); - } - - // Merge next and previous siblings if they are similar texttext becomes texttext - if (node && format.merge_siblings !== false) { - node = mergeSiblings(getNonWhiteSpaceSibling(node), node); - node = mergeSiblings(node, getNonWhiteSpaceSibling(node, TRUE)); - } - } - }); - }; - - if (format) { - if (node) { - if (node.nodeType) { - rng = dom.createRng(); - rng.setStartBefore(node); - rng.setEndAfter(node); - applyRngStyle(expandRng(rng, formatList), null, true); - } else { - applyRngStyle(node, null, true); - } - } else { - if (!isCollapsed || !format.inline || dom.select('td.mceSelected,th.mceSelected').length) { - // Obtain selection node before selection is unselected by applyRngStyle() - var curSelNode = ed.selection.getNode(); - - // If the formats have a default block and we can't find a parent block then start wrapping it with a DIV this is for forced_root_blocks: false - // It's kind of a hack but people should be using the default block type P since all desktop editors work that way - if (!forcedRootBlock && formatList[0].defaultBlock && !dom.getParent(curSelNode, dom.isBlock)) { - apply(formatList[0].defaultBlock); - } - - // Apply formatting to selection - ed.selection.setRng(adjustSelectionToVisibleSelection()); - bookmark = selection.getBookmark(); - applyRngStyle(expandRng(selection.getRng(TRUE), formatList), bookmark); - - // Colored nodes should be underlined so that the color of the underline matches the text color. - if (format.styles && (format.styles.color || format.styles.textDecoration)) { - tinymce.walk(curSelNode, processUnderlineAndColor, 'childNodes'); - processUnderlineAndColor(curSelNode); - } - - selection.moveToBookmark(bookmark); - moveStart(selection.getRng(TRUE)); - ed.nodeChanged(); - } else - performCaretAction('apply', name, vars); - } - } - }; - - function remove(name, vars, node) { - var formatList = get(name), format = formatList[0], bookmark, i, rng, contentEditable = true; - - // Merges the styles for each node - function process(node) { - var children, i, l, localContentEditable, lastContentEditable, hasContentEditableState; - - // Skip on text nodes as they have neither format to remove nor children - if (node.nodeType === 3) { - return; - } - - // Node has a contentEditable value - if (node.nodeType === 1 && getContentEditable(node)) { - lastContentEditable = contentEditable; - contentEditable = getContentEditable(node) === "true"; - hasContentEditableState = true; // We don't want to wrap the container only it's children - } - - // Grab the children first since the nodelist might be changed - children = tinymce.grep(node.childNodes); - - // Process current node - if (contentEditable && !hasContentEditableState) { - for (i = 0, l = formatList.length; i < l; i++) { - if (removeFormat(formatList[i], vars, node, node)) - break; - } - } - - // Process the children - if (format.deep) { - if (children.length) { - for (i = 0, l = children.length; i < l; i++) - process(children[i]); - - if (hasContentEditableState) { - contentEditable = lastContentEditable; // Restore last contentEditable state from stack - } - } - } - }; - - function findFormatRoot(container) { - var formatRoot; - - // Find format root - each(getParents(container.parentNode).reverse(), function(parent) { - var format; - - // Find format root element - if (!formatRoot && parent.id != '_start' && parent.id != '_end') { - // Is the node matching the format we are looking for - format = matchNode(parent, name, vars); - if (format && format.split !== false) - formatRoot = parent; - } - }); - - return formatRoot; - }; - - function wrapAndSplit(format_root, container, target, split) { - var parent, clone, lastClone, firstClone, i, formatRootParent; - - // Format root found then clone formats and split it - if (format_root) { - formatRootParent = format_root.parentNode; - - for (parent = container.parentNode; parent && parent != formatRootParent; parent = parent.parentNode) { - clone = dom.clone(parent, FALSE); - - for (i = 0; i < formatList.length; i++) { - if (removeFormat(formatList[i], vars, clone, clone)) { - clone = 0; - break; - } - } - - // Build wrapper node - if (clone) { - if (lastClone) - clone.appendChild(lastClone); - - if (!firstClone) - firstClone = clone; - - lastClone = clone; - } - } - - // Never split block elements if the format is mixed - if (split && (!format.mixed || !isBlock(format_root))) - container = dom.split(format_root, container); - - // Wrap container in cloned formats - if (lastClone) { - target.parentNode.insertBefore(lastClone, target); - firstClone.appendChild(target); - } - } - - return container; - }; - - function splitToFormatRoot(container) { - return wrapAndSplit(findFormatRoot(container), container, container, true); - }; - - function unwrap(start) { - var node = dom.get(start ? '_start' : '_end'), - out = node[start ? 'firstChild' : 'lastChild']; - - // If the end is placed within the start the result will be removed - // So this checks if the out node is a bookmark node if it is it - // checks for another more suitable node - if (isBookmarkNode(out)) - out = out[start ? 'firstChild' : 'lastChild']; - - dom.remove(node, true); - - return out; - }; - - function removeRngStyle(rng) { - var startContainer, endContainer, node; - - rng = expandRng(rng, formatList, TRUE); - - if (format.split) { - startContainer = getContainer(rng, TRUE); - endContainer = getContainer(rng); - - if (startContainer != endContainer) { - // WebKit will render the table incorrectly if we wrap a TD in a SPAN so lets see if the can use the first child instead - // This will happen if you tripple click a table cell and use remove formatting - if (/^(TR|TD)$/.test(startContainer.nodeName) && startContainer.firstChild) { - startContainer = (startContainer.nodeName == "TD" ? startContainer.firstChild : startContainer.firstChild.firstChild) || startContainer; - } - - // Wrap start/end nodes in span element since these might be cloned/moved - startContainer = wrap(startContainer, 'span', {id : '_start', 'data-mce-type' : 'bookmark'}); - endContainer = wrap(endContainer, 'span', {id : '_end', 'data-mce-type' : 'bookmark'}); - - // Split start/end - splitToFormatRoot(startContainer); - splitToFormatRoot(endContainer); - - // Unwrap start/end to get real elements again - startContainer = unwrap(TRUE); - endContainer = unwrap(); - } else - startContainer = endContainer = splitToFormatRoot(startContainer); - - // Update range positions since they might have changed after the split operations - rng.startContainer = startContainer.parentNode; - rng.startOffset = nodeIndex(startContainer); - rng.endContainer = endContainer.parentNode; - rng.endOffset = nodeIndex(endContainer) + 1; - } - - // Remove items between start/end - rangeUtils.walk(rng, function(nodes) { - each(nodes, function(node) { - process(node); - - // Remove parent span if it only contains text-decoration: underline, yet a parent node is also underlined. - if (node.nodeType === 1 && ed.dom.getStyle(node, 'text-decoration') === 'underline' && node.parentNode && getTextDecoration(node.parentNode) === 'underline') { - removeFormat({'deep': false, 'exact': true, 'inline': 'span', 'styles': {'textDecoration' : 'underline'}}, null, node); - } - }); - }); - }; - - // Handle node - if (node) { - if (node.nodeType) { - rng = dom.createRng(); - rng.setStartBefore(node); - rng.setEndAfter(node); - removeRngStyle(rng); - } else { - removeRngStyle(node); - } - - return; - } - - if (!selection.isCollapsed() || !format.inline || dom.select('td.mceSelected,th.mceSelected').length) { - bookmark = selection.getBookmark(); - removeRngStyle(selection.getRng(TRUE)); - selection.moveToBookmark(bookmark); - - // Check if start element still has formatting then we are at: "text|text" and need to move the start into the next text node - if (format.inline && match(name, vars, selection.getStart())) { - moveStart(selection.getRng(true)); - } - - ed.nodeChanged(); - } else - performCaretAction('remove', name, vars); - }; - - function toggle(name, vars, node) { - var fmt = get(name); - - if (match(name, vars, node) && (!('toggle' in fmt[0]) || fmt[0].toggle)) - remove(name, vars, node); - else - apply(name, vars, node); - }; - - function matchNode(node, name, vars, similar) { - var formatList = get(name), format, i, classes; - - function matchItems(node, format, item_name) { - var key, value, items = format[item_name], i; - - // Custom match - if (format.onmatch) { - return format.onmatch(node, format, item_name); - } - - // Check all items - if (items) { - // Non indexed object - if (items.length === undef) { - for (key in items) { - if (items.hasOwnProperty(key)) { - if (item_name === 'attributes') - value = dom.getAttrib(node, key); - else - value = getStyle(node, key); - - if (similar && !value && !format.exact) - return; - - if ((!similar || format.exact) && !isEq(value, replaceVars(items[key], vars))) - return; - } - } - } else { - // Only one match needed for indexed arrays - for (i = 0; i < items.length; i++) { - if (item_name === 'attributes' ? dom.getAttrib(node, items[i]) : getStyle(node, items[i])) - return format; - } - } - } - - return format; - }; - - if (formatList && node) { - // Check each format in list - for (i = 0; i < formatList.length; i++) { - format = formatList[i]; - - // Name name, attributes, styles and classes - if (matchName(node, format) && matchItems(node, format, 'attributes') && matchItems(node, format, 'styles')) { - // Match classes - if (classes = format.classes) { - for (i = 0; i < classes.length; i++) { - if (!dom.hasClass(node, classes[i])) - return; - } - } - - return format; - } - } - } - }; - - function match(name, vars, node) { - var startNode; - - function matchParents(node) { - // Find first node with similar format settings - node = dom.getParent(node, function(node) { - return !!matchNode(node, name, vars, true); - }); - - // Do an exact check on the similar format element - return matchNode(node, name, vars); - }; - - // Check specified node - if (node) - return matchParents(node); - - // Check selected node - node = selection.getNode(); - if (matchParents(node)) - return TRUE; - - // Check start node if it's different - startNode = selection.getStart(); - if (startNode != node) { - if (matchParents(startNode)) - return TRUE; - } - - return FALSE; - }; - - function matchAll(names, vars) { - var startElement, matchedFormatNames = [], checkedMap = {}, i, ni, name; - - // Check start of selection for formats - startElement = selection.getStart(); - dom.getParent(startElement, function(node) { - var i, name; - - for (i = 0; i < names.length; i++) { - name = names[i]; - - if (!checkedMap[name] && matchNode(node, name, vars)) { - checkedMap[name] = true; - matchedFormatNames.push(name); - } - } - }, dom.getRoot()); - - return matchedFormatNames; - }; - - function canApply(name) { - var formatList = get(name), startNode, parents, i, x, selector; - - if (formatList) { - startNode = selection.getStart(); - parents = getParents(startNode); - - for (x = formatList.length - 1; x >= 0; x--) { - selector = formatList[x].selector; - - // Format is not selector based, then always return TRUE - if (!selector) - return TRUE; - - for (i = parents.length - 1; i >= 0; i--) { - if (dom.is(parents[i], selector)) - return TRUE; - } - } - } - - return FALSE; - }; - - function formatChanged(formats, callback, similar) { - var currentFormats; - - // Setup format node change logic - if (!formatChangeData) { - formatChangeData = {}; - currentFormats = {}; - - ed.onNodeChange.addToTop(function(ed, cm, node) { - var parents = getParents(node), matchedFormats = {}; - - // Check for new formats - each(formatChangeData, function(callbacks, format) { - each(parents, function(node) { - if (matchNode(node, format, {}, callbacks.similar)) { - if (!currentFormats[format]) { - // Execute callbacks - each(callbacks, function(callback) { - callback(true, {node: node, format: format, parents: parents}); - }); - - currentFormats[format] = callbacks; - } - - matchedFormats[format] = callbacks; - return false; - } - }); - }); - - // Check if current formats still match - each(currentFormats, function(callbacks, format) { - if (!matchedFormats[format]) { - delete currentFormats[format]; - - each(callbacks, function(callback) { - callback(false, {node: node, format: format, parents: parents}); - }); - } - }); - }); - } - - // Add format listeners - each(formats.split(','), function(format) { - if (!formatChangeData[format]) { - formatChangeData[format] = []; - formatChangeData[format].similar = similar; - } - - formatChangeData[format].push(callback); - }); - - return this; - }; - - // Expose to public - tinymce.extend(this, { - get : get, - register : register, - apply : apply, - remove : remove, - toggle : toggle, - match : match, - matchAll : matchAll, - matchNode : matchNode, - canApply : canApply, - formatChanged: formatChanged - }); - - // Initialize - defaultFormats(); - addKeyboardShortcuts(); - - // Private functions - - function matchName(node, format) { - // Check for inline match - if (isEq(node, format.inline)) - return TRUE; - - // Check for block match - if (isEq(node, format.block)) - return TRUE; - - // Check for selector match - if (format.selector) - return dom.is(node, format.selector); - }; - - function isEq(str1, str2) { - str1 = str1 || ''; - str2 = str2 || ''; - - str1 = '' + (str1.nodeName || str1); - str2 = '' + (str2.nodeName || str2); - - return str1.toLowerCase() == str2.toLowerCase(); - }; - - function getStyle(node, name) { - var styleVal = dom.getStyle(node, name); - - // Force the format to hex - if (name == 'color' || name == 'backgroundColor') - styleVal = dom.toHex(styleVal); - - // Opera will return bold as 700 - if (name == 'fontWeight' && styleVal == 700) - styleVal = 'bold'; - - return '' + styleVal; - }; - - function replaceVars(value, vars) { - if (typeof(value) != "string") - value = value(vars); - else if (vars) { - value = value.replace(/%(\w+)/g, function(str, name) { - return vars[name] || str; - }); - } - - return value; - }; - - function isWhiteSpaceNode(node) { - return node && node.nodeType === 3 && /^([\t \r\n]+|)$/.test(node.nodeValue); - }; - - function wrap(node, name, attrs) { - var wrapper = dom.create(name, attrs); - - node.parentNode.insertBefore(wrapper, node); - wrapper.appendChild(node); - - return wrapper; - }; - - function expandRng(rng, format, remove) { - var sibling, lastIdx, leaf, endPoint, - startContainer = rng.startContainer, - startOffset = rng.startOffset, - endContainer = rng.endContainer, - endOffset = rng.endOffset; - - // This function walks up the tree if there is no siblings before/after the node - function findParentContainer(start) { - var container, parent, child, sibling, siblingName, root; - - container = parent = start ? startContainer : endContainer; - siblingName = start ? 'previousSibling' : 'nextSibling'; - root = dom.getRoot(); - - function isBogusBr(node) { - return node.nodeName == "BR" && node.getAttribute('data-mce-bogus') && !node.nextSibling; - }; - - // If it's a text node and the offset is inside the text - if (container.nodeType == 3 && !isWhiteSpaceNode(container)) { - if (start ? startOffset > 0 : endOffset < container.nodeValue.length) { - return container; - } - } - - for (;;) { - // Stop expanding on block elements - if (!format[0].block_expand && isBlock(parent)) - return parent; - - // Walk left/right - for (sibling = parent[siblingName]; sibling; sibling = sibling[siblingName]) { - if (!isBookmarkNode(sibling) && !isWhiteSpaceNode(sibling) && !isBogusBr(sibling)) { - return parent; - } - } - - // Check if we can move up are we at root level or body level - if (parent.parentNode == root) { - container = parent; - break; - } - - parent = parent.parentNode; - } - - return container; - }; - - // This function walks down the tree to find the leaf at the selection. - // The offset is also returned as if node initially a leaf, the offset may be in the middle of the text node. - function findLeaf(node, offset) { - if (offset === undef) - offset = node.nodeType === 3 ? node.length : node.childNodes.length; - while (node && node.hasChildNodes()) { - node = node.childNodes[offset]; - if (node) - offset = node.nodeType === 3 ? node.length : node.childNodes.length; - } - return { node: node, offset: offset }; - } - - // If index based start position then resolve it - if (startContainer.nodeType == 1 && startContainer.hasChildNodes()) { - lastIdx = startContainer.childNodes.length - 1; - startContainer = startContainer.childNodes[startOffset > lastIdx ? lastIdx : startOffset]; - - if (startContainer.nodeType == 3) - startOffset = 0; - } - - // If index based end position then resolve it - if (endContainer.nodeType == 1 && endContainer.hasChildNodes()) { - lastIdx = endContainer.childNodes.length - 1; - endContainer = endContainer.childNodes[endOffset > lastIdx ? lastIdx : endOffset - 1]; - - if (endContainer.nodeType == 3) - endOffset = endContainer.nodeValue.length; - } - - // Expands the node to the closes contentEditable false element if it exists - function findParentContentEditable(node) { - var parent = node; - - while (parent) { - if (parent.nodeType === 1 && getContentEditable(parent)) { - return getContentEditable(parent) === "false" ? parent : node; - } - - parent = parent.parentNode; - } - - return node; - }; - - function findWordEndPoint(container, offset, start) { - var walker, node, pos, lastTextNode; - - function findSpace(node, offset) { - var pos, pos2, str = node.nodeValue; - - if (typeof(offset) == "undefined") { - offset = start ? str.length : 0; - } - - if (start) { - pos = str.lastIndexOf(' ', offset); - pos2 = str.lastIndexOf('\u00a0', offset); - pos = pos > pos2 ? pos : pos2; - - // Include the space on remove to avoid tag soup - if (pos !== -1 && !remove) { - pos++; - } - } else { - pos = str.indexOf(' ', offset); - pos2 = str.indexOf('\u00a0', offset); - pos = pos !== -1 && (pos2 === -1 || pos < pos2) ? pos : pos2; - } - - return pos; - }; - - if (container.nodeType === 3) { - pos = findSpace(container, offset); - - if (pos !== -1) { - return {container : container, offset : pos}; - } - - lastTextNode = container; - } - - // Walk the nodes inside the block - walker = new TreeWalker(container, dom.getParent(container, isBlock) || ed.getBody()); - while (node = walker[start ? 'prev' : 'next']()) { - if (node.nodeType === 3) { - lastTextNode = node; - pos = findSpace(node); - - if (pos !== -1) { - return {container : node, offset : pos}; - } - } else if (isBlock(node)) { - break; - } - } - - if (lastTextNode) { - if (start) { - offset = 0; - } else { - offset = lastTextNode.length; - } - - return {container: lastTextNode, offset: offset}; - } - }; - - function findSelectorEndPoint(container, sibling_name) { - var parents, i, y, curFormat; - - if (container.nodeType == 3 && container.nodeValue.length === 0 && container[sibling_name]) - container = container[sibling_name]; - - parents = getParents(container); - for (i = 0; i < parents.length; i++) { - for (y = 0; y < format.length; y++) { - curFormat = format[y]; - - // If collapsed state is set then skip formats that doesn't match that - if ("collapsed" in curFormat && curFormat.collapsed !== rng.collapsed) - continue; - - if (dom.is(parents[i], curFormat.selector)) - return parents[i]; - } - } - - return container; - }; - - function findBlockEndPoint(container, sibling_name, sibling_name2) { - var node; - - // Expand to block of similar type - if (!format[0].wrapper) - node = dom.getParent(container, format[0].block); - - // Expand to first wrappable block element or any block element - if (!node) - node = dom.getParent(container.nodeType == 3 ? container.parentNode : container, isTextBlock); - - // Exclude inner lists from wrapping - if (node && format[0].wrapper) - node = getParents(node, 'ul,ol').reverse()[0] || node; - - // Didn't find a block element look for first/last wrappable element - if (!node) { - node = container; - - while (node[sibling_name] && !isBlock(node[sibling_name])) { - node = node[sibling_name]; - - // Break on BR but include it will be removed later on - // we can't remove it now since we need to check if it can be wrapped - if (isEq(node, 'br')) - break; - } - } - - return node || container; - }; - - // Expand to closest contentEditable element - startContainer = findParentContentEditable(startContainer); - endContainer = findParentContentEditable(endContainer); - - // Exclude bookmark nodes if possible - if (isBookmarkNode(startContainer.parentNode) || isBookmarkNode(startContainer)) { - startContainer = isBookmarkNode(startContainer) ? startContainer : startContainer.parentNode; - startContainer = startContainer.nextSibling || startContainer; - - if (startContainer.nodeType == 3) - startOffset = 0; - } - - if (isBookmarkNode(endContainer.parentNode) || isBookmarkNode(endContainer)) { - endContainer = isBookmarkNode(endContainer) ? endContainer : endContainer.parentNode; - endContainer = endContainer.previousSibling || endContainer; - - if (endContainer.nodeType == 3) - endOffset = endContainer.length; - } - - if (format[0].inline) { - if (rng.collapsed) { - // Expand left to closest word boundery - endPoint = findWordEndPoint(startContainer, startOffset, true); - if (endPoint) { - startContainer = endPoint.container; - startOffset = endPoint.offset; - } - - // Expand right to closest word boundery - endPoint = findWordEndPoint(endContainer, endOffset); - if (endPoint) { - endContainer = endPoint.container; - endOffset = endPoint.offset; - } - } - - // Avoid applying formatting to a trailing space. - leaf = findLeaf(endContainer, endOffset); - if (leaf.node) { - while (leaf.node && leaf.offset === 0 && leaf.node.previousSibling) - leaf = findLeaf(leaf.node.previousSibling); - - if (leaf.node && leaf.offset > 0 && leaf.node.nodeType === 3 && - leaf.node.nodeValue.charAt(leaf.offset - 1) === ' ') { - - if (leaf.offset > 1) { - endContainer = leaf.node; - endContainer.splitText(leaf.offset - 1); - } - } - } - } - - // Move start/end point up the tree if the leaves are sharp and if we are in different containers - // Example * becomes !: !

    *texttext*

    ! - // This will reduce the number of wrapper elements that needs to be created - // Move start point up the tree - if (format[0].inline || format[0].block_expand) { - if (!format[0].inline || (startContainer.nodeType != 3 || startOffset === 0)) { - startContainer = findParentContainer(true); - } - - if (!format[0].inline || (endContainer.nodeType != 3 || endOffset === endContainer.nodeValue.length)) { - endContainer = findParentContainer(); - } - } - - // Expand start/end container to matching selector - if (format[0].selector && format[0].expand !== FALSE && !format[0].inline) { - // Find new startContainer/endContainer if there is better one - startContainer = findSelectorEndPoint(startContainer, 'previousSibling'); - endContainer = findSelectorEndPoint(endContainer, 'nextSibling'); - } - - // Expand start/end container to matching block element or text node - if (format[0].block || format[0].selector) { - // Find new startContainer/endContainer if there is better one - startContainer = findBlockEndPoint(startContainer, 'previousSibling'); - endContainer = findBlockEndPoint(endContainer, 'nextSibling'); - - // Non block element then try to expand up the leaf - if (format[0].block) { - if (!isBlock(startContainer)) - startContainer = findParentContainer(true); - - if (!isBlock(endContainer)) - endContainer = findParentContainer(); - } - } - - // Setup index for startContainer - if (startContainer.nodeType == 1) { - startOffset = nodeIndex(startContainer); - startContainer = startContainer.parentNode; - } - - // Setup index for endContainer - if (endContainer.nodeType == 1) { - endOffset = nodeIndex(endContainer) + 1; - endContainer = endContainer.parentNode; - } - - // Return new range like object - return { - startContainer : startContainer, - startOffset : startOffset, - endContainer : endContainer, - endOffset : endOffset - }; - } - - function removeFormat(format, vars, node, compare_node) { - var i, attrs, stylesModified; - - // Check if node matches format - if (!matchName(node, format)) - return FALSE; - - // Should we compare with format attribs and styles - if (format.remove != 'all') { - // Remove styles - each(format.styles, function(value, name) { - value = replaceVars(value, vars); - - // Indexed array - if (typeof(name) === 'number') { - name = value; - compare_node = 0; - } - - if (!compare_node || isEq(getStyle(compare_node, name), value)) - dom.setStyle(node, name, ''); - - stylesModified = 1; - }); - - // Remove style attribute if it's empty - if (stylesModified && dom.getAttrib(node, 'style') == '') { - node.removeAttribute('style'); - node.removeAttribute('data-mce-style'); - } - - // Remove attributes - each(format.attributes, function(value, name) { - var valueOut; - - value = replaceVars(value, vars); - - // Indexed array - if (typeof(name) === 'number') { - name = value; - compare_node = 0; - } - - if (!compare_node || isEq(dom.getAttrib(compare_node, name), value)) { - // Keep internal classes - if (name == 'class') { - value = dom.getAttrib(node, name); - if (value) { - // Build new class value where everything is removed except the internal prefixed classes - valueOut = ''; - each(value.split(/\s+/), function(cls) { - if (/mce\w+/.test(cls)) - valueOut += (valueOut ? ' ' : '') + cls; - }); - - // We got some internal classes left - if (valueOut) { - dom.setAttrib(node, name, valueOut); - return; - } - } - } - - // IE6 has a bug where the attribute doesn't get removed correctly - if (name == "class") - node.removeAttribute('className'); - - // Remove mce prefixed attributes - if (MCE_ATTR_RE.test(name)) - node.removeAttribute('data-mce-' + name); - - node.removeAttribute(name); - } - }); - - // Remove classes - each(format.classes, function(value) { - value = replaceVars(value, vars); - - if (!compare_node || dom.hasClass(compare_node, value)) - dom.removeClass(node, value); - }); - - // Check for non internal attributes - attrs = dom.getAttribs(node); - for (i = 0; i < attrs.length; i++) { - if (attrs[i].nodeName.indexOf('_') !== 0) - return FALSE; - } - } - - // Remove the inline child if it's empty for example or - if (format.remove != 'none') { - removeNode(node, format); - return TRUE; - } - }; - - function removeNode(node, format) { - var parentNode = node.parentNode, rootBlockElm; - - function find(node, next, inc) { - node = getNonWhiteSpaceSibling(node, next, inc); - - return !node || (node.nodeName == 'BR' || isBlock(node)); - }; - - if (format.block) { - if (!forcedRootBlock) { - // Append BR elements if needed before we remove the block - if (isBlock(node) && !isBlock(parentNode)) { - if (!find(node, FALSE) && !find(node.firstChild, TRUE, 1)) - node.insertBefore(dom.create('br'), node.firstChild); - - if (!find(node, TRUE) && !find(node.lastChild, FALSE, 1)) - node.appendChild(dom.create('br')); - } - } else { - // Wrap the block in a forcedRootBlock if we are at the root of document - if (parentNode == dom.getRoot()) { - if (!format.list_block || !isEq(node, format.list_block)) { - each(tinymce.grep(node.childNodes), function(node) { - if (isValid(forcedRootBlock, node.nodeName.toLowerCase())) { - if (!rootBlockElm) - rootBlockElm = wrap(node, forcedRootBlock); - else - rootBlockElm.appendChild(node); - } else - rootBlockElm = 0; - }); - } - } - } - } - - // Never remove nodes that isn't the specified inline element if a selector is specified too - if (format.selector && format.inline && !isEq(format.inline, node)) - return; - - dom.remove(node, 1); - }; - - function getNonWhiteSpaceSibling(node, next, inc) { - if (node) { - next = next ? 'nextSibling' : 'previousSibling'; - - for (node = inc ? node : node[next]; node; node = node[next]) { - if (node.nodeType == 1 || !isWhiteSpaceNode(node)) - return node; - } - } - }; - - function isBookmarkNode(node) { - return node && node.nodeType == 1 && node.getAttribute('data-mce-type') == 'bookmark'; - }; - - function mergeSiblings(prev, next) { - var marker, sibling, tmpSibling; - - function compareElements(node1, node2) { - // Not the same name - if (node1.nodeName != node2.nodeName) - return FALSE; - - function getAttribs(node) { - var attribs = {}; - - each(dom.getAttribs(node), function(attr) { - var name = attr.nodeName.toLowerCase(); - - // Don't compare internal attributes or style - if (name.indexOf('_') !== 0 && name !== 'style') - attribs[name] = dom.getAttrib(node, name); - }); - - return attribs; - }; - - function compareObjects(obj1, obj2) { - var value, name; - - for (name in obj1) { - // Obj1 has item obj2 doesn't have - if (obj1.hasOwnProperty(name)) { - value = obj2[name]; - - // Obj2 doesn't have obj1 item - if (value === undef) - return FALSE; - - // Obj2 item has a different value - if (obj1[name] != value) - return FALSE; - - // Delete similar value - delete obj2[name]; - } - } - - // Check if obj 2 has something obj 1 doesn't have - for (name in obj2) { - // Obj2 has item obj1 doesn't have - if (obj2.hasOwnProperty(name)) - return FALSE; - } - - return TRUE; - }; - - // Attribs are not the same - if (!compareObjects(getAttribs(node1), getAttribs(node2))) - return FALSE; - - // Styles are not the same - if (!compareObjects(dom.parseStyle(dom.getAttrib(node1, 'style')), dom.parseStyle(dom.getAttrib(node2, 'style')))) - return FALSE; - - return TRUE; - }; - - function findElementSibling(node, sibling_name) { - for (sibling = node; sibling; sibling = sibling[sibling_name]) { - if (sibling.nodeType == 3 && sibling.nodeValue.length !== 0) - return node; - - if (sibling.nodeType == 1 && !isBookmarkNode(sibling)) - return sibling; - } - - return node; - }; - - // Check if next/prev exists and that they are elements - if (prev && next) { - // If previous sibling is empty then jump over it - prev = findElementSibling(prev, 'previousSibling'); - next = findElementSibling(next, 'nextSibling'); - - // Compare next and previous nodes - if (compareElements(prev, next)) { - // Append nodes between - for (sibling = prev.nextSibling; sibling && sibling != next;) { - tmpSibling = sibling; - sibling = sibling.nextSibling; - prev.appendChild(tmpSibling); - } - - // Remove next node - dom.remove(next); - - // Move children into prev node - each(tinymce.grep(next.childNodes), function(node) { - prev.appendChild(node); - }); - - return prev; - } - } - - return next; - }; - - function isTextBlock(name) { - return /^(h[1-6]|p|div|pre|address|dl|dt|dd)$/.test(name); - }; - - function getContainer(rng, start) { - var container, offset, lastIdx, walker; - - container = rng[start ? 'startContainer' : 'endContainer']; - offset = rng[start ? 'startOffset' : 'endOffset']; - - if (container.nodeType == 1) { - lastIdx = container.childNodes.length - 1; - - if (!start && offset) - offset--; - - container = container.childNodes[offset > lastIdx ? lastIdx : offset]; - } - - // If start text node is excluded then walk to the next node - if (container.nodeType === 3 && start && offset >= container.nodeValue.length) { - container = new TreeWalker(container, ed.getBody()).next() || container; - } - - // If end text node is excluded then walk to the previous node - if (container.nodeType === 3 && !start && offset === 0) { - container = new TreeWalker(container, ed.getBody()).prev() || container; - } - - return container; - }; - - function performCaretAction(type, name, vars) { - var caretContainerId = '_mce_caret', debug = ed.settings.caret_debug; - - // Creates a caret container bogus element - function createCaretContainer(fill) { - var caretContainer = dom.create('span', {id: caretContainerId, 'data-mce-bogus': true, style: debug ? 'color:red' : ''}); - - if (fill) { - caretContainer.appendChild(ed.getDoc().createTextNode(INVISIBLE_CHAR)); - } - - return caretContainer; - }; - - function isCaretContainerEmpty(node, nodes) { - while (node) { - if ((node.nodeType === 3 && node.nodeValue !== INVISIBLE_CHAR) || node.childNodes.length > 1) { - return false; - } - - // Collect nodes - if (nodes && node.nodeType === 1) { - nodes.push(node); - } - - node = node.firstChild; - } - - return true; - }; - - // Returns any parent caret container element - function getParentCaretContainer(node) { - while (node) { - if (node.id === caretContainerId) { - return node; - } - - node = node.parentNode; - } - }; - - // Finds the first text node in the specified node - function findFirstTextNode(node) { - var walker; - - if (node) { - walker = new TreeWalker(node, node); - - for (node = walker.current(); node; node = walker.next()) { - if (node.nodeType === 3) { - return node; - } - } - } - }; - - // Removes the caret container for the specified node or all on the current document - function removeCaretContainer(node, move_caret) { - var child, rng; - - if (!node) { - node = getParentCaretContainer(selection.getStart()); - - if (!node) { - while (node = dom.get(caretContainerId)) { - removeCaretContainer(node, false); - } - } - } else { - rng = selection.getRng(true); - - if (isCaretContainerEmpty(node)) { - if (move_caret !== false) { - rng.setStartBefore(node); - rng.setEndBefore(node); - } - - dom.remove(node); - } else { - child = findFirstTextNode(node); - - if (child.nodeValue.charAt(0) === INVISIBLE_CHAR) { - child = child.deleteData(0, 1); - } - - dom.remove(node, 1); - } - - selection.setRng(rng); - } - }; - - // Applies formatting to the caret postion - function applyCaretFormat() { - var rng, caretContainer, textNode, offset, bookmark, container, text; - - rng = selection.getRng(true); - offset = rng.startOffset; - container = rng.startContainer; - text = container.nodeValue; - - caretContainer = getParentCaretContainer(selection.getStart()); - if (caretContainer) { - textNode = findFirstTextNode(caretContainer); - } - - // Expand to word is caret is in the middle of a text node and the char before/after is a alpha numeric character - if (text && offset > 0 && offset < text.length && /\w/.test(text.charAt(offset)) && /\w/.test(text.charAt(offset - 1))) { - // Get bookmark of caret position - bookmark = selection.getBookmark(); - - // Collapse bookmark range (WebKit) - rng.collapse(true); - - // Expand the range to the closest word and split it at those points - rng = expandRng(rng, get(name)); - rng = rangeUtils.split(rng); - - // Apply the format to the range - apply(name, vars, rng); - - // Move selection back to caret position - selection.moveToBookmark(bookmark); - } else { - if (!caretContainer || textNode.nodeValue !== INVISIBLE_CHAR) { - caretContainer = createCaretContainer(true); - textNode = caretContainer.firstChild; - - rng.insertNode(caretContainer); - offset = 1; - - apply(name, vars, caretContainer); - } else { - apply(name, vars, caretContainer); - } - - // Move selection to text node - selection.setCursorLocation(textNode, offset); - } - }; - - function removeCaretFormat() { - var rng = selection.getRng(true), container, offset, bookmark, - hasContentAfter, node, formatNode, parents = [], i, caretContainer; - - container = rng.startContainer; - offset = rng.startOffset; - node = container; - - if (container.nodeType == 3) { - if (offset != container.nodeValue.length || container.nodeValue === INVISIBLE_CHAR) { - hasContentAfter = true; - } - - node = node.parentNode; - } - - while (node) { - if (matchNode(node, name, vars)) { - formatNode = node; - break; - } - - if (node.nextSibling) { - hasContentAfter = true; - } - - parents.push(node); - node = node.parentNode; - } - - // Node doesn't have the specified format - if (!formatNode) { - return; - } - - // Is there contents after the caret then remove the format on the element - if (hasContentAfter) { - // Get bookmark of caret position - bookmark = selection.getBookmark(); - - // Collapse bookmark range (WebKit) - rng.collapse(true); - - // Expand the range to the closest word and split it at those points - rng = expandRng(rng, get(name), true); - rng = rangeUtils.split(rng); - - // Remove the format from the range - remove(name, vars, rng); - - // Move selection back to caret position - selection.moveToBookmark(bookmark); - } else { - caretContainer = createCaretContainer(); - - node = caretContainer; - for (i = parents.length - 1; i >= 0; i--) { - node.appendChild(dom.clone(parents[i], false)); - node = node.firstChild; - } - - // Insert invisible character into inner most format element - node.appendChild(dom.doc.createTextNode(INVISIBLE_CHAR)); - node = node.firstChild; - - // Insert caret container after the formated node - dom.insertAfter(caretContainer, formatNode); - - // Move selection to text node - selection.setCursorLocation(node, 1); - } - }; - - // Checks if the parent caret container node isn't empty if that is the case it - // will remove the bogus state on all children that isn't empty - function unmarkBogusCaretParents() { - var i, caretContainer, node; - - caretContainer = getParentCaretContainer(selection.getStart()); - if (caretContainer && !dom.isEmpty(caretContainer)) { - tinymce.walk(caretContainer, function(node) { - if (node.nodeType == 1 && node.id !== caretContainerId && !dom.isEmpty(node)) { - dom.setAttrib(node, 'data-mce-bogus', null); - } - }, 'childNodes'); - } - }; - - // Only bind the caret events once - if (!self._hasCaretEvents) { - // Mark current caret container elements as bogus when getting the contents so we don't end up with empty elements - ed.onBeforeGetContent.addToTop(function() { - var nodes = [], i; - - if (isCaretContainerEmpty(getParentCaretContainer(selection.getStart()), nodes)) { - // Mark children - i = nodes.length; - while (i--) { - dom.setAttrib(nodes[i], 'data-mce-bogus', '1'); - } - } - }); - - // Remove caret container on mouse up and on key up - tinymce.each('onMouseUp onKeyUp'.split(' '), function(name) { - ed[name].addToTop(function() { - removeCaretContainer(); - unmarkBogusCaretParents(); - }); - }); - - // Remove caret container on keydown and it's a backspace, enter or left/right arrow keys - ed.onKeyDown.addToTop(function(ed, e) { - var keyCode = e.keyCode; - - if (keyCode == 8 || keyCode == 37 || keyCode == 39) { - removeCaretContainer(getParentCaretContainer(selection.getStart())); - } - - unmarkBogusCaretParents(); - }); - - // Remove bogus state if they got filled by contents using editor.selection.setContent - selection.onSetContent.add(unmarkBogusCaretParents); - - self._hasCaretEvents = true; - } - - // Do apply or remove caret format - if (type == "apply") { - applyCaretFormat(); - } else { - removeCaretFormat(); - } - }; - - function moveStart(rng) { - var container = rng.startContainer, - offset = rng.startOffset, isAtEndOfText, - walker, node, nodes, tmpNode; - - // Convert text node into index if possible - if (container.nodeType == 3 && offset >= container.nodeValue.length) { - // Get the parent container location and walk from there - offset = nodeIndex(container); - container = container.parentNode; - isAtEndOfText = true; - } - - // Move startContainer/startOffset in to a suitable node - if (container.nodeType == 1) { - nodes = container.childNodes; - container = nodes[Math.min(offset, nodes.length - 1)]; - walker = new TreeWalker(container, dom.getParent(container, dom.isBlock)); - - // If offset is at end of the parent node walk to the next one - if (offset > nodes.length - 1 || isAtEndOfText) - walker.next(); - - for (node = walker.current(); node; node = walker.next()) { - if (node.nodeType == 3 && !isWhiteSpaceNode(node)) { - // IE has a "neat" feature where it moves the start node into the closest element - // we can avoid this by inserting an element before it and then remove it after we set the selection - tmpNode = dom.create('a', null, INVISIBLE_CHAR); - node.parentNode.insertBefore(tmpNode, node); - - // Set selection and remove tmpNode - rng.setStart(node, 0); - selection.setRng(rng); - dom.remove(tmpNode); - - return; - } - } - } - }; - }; -})(tinymce); - -tinymce.onAddEditor.add(function(tinymce, ed) { - var filters, fontSizes, dom, settings = ed.settings; - - function replaceWithSpan(node, styles) { - tinymce.each(styles, function(value, name) { - if (value) - dom.setStyle(node, name, value); - }); - - dom.rename(node, 'span'); - }; - - function convert(editor, params) { - dom = editor.dom; - - if (settings.convert_fonts_to_spans) { - tinymce.each(dom.select('font,u,strike', params.node), function(node) { - filters[node.nodeName.toLowerCase()](ed.dom, node); - }); - } - }; - - if (settings.inline_styles) { - fontSizes = tinymce.explode(settings.font_size_legacy_values); - - filters = { - font : function(dom, node) { - replaceWithSpan(node, { - backgroundColor : node.style.backgroundColor, - color : node.color, - fontFamily : node.face, - fontSize : fontSizes[parseInt(node.size, 10) - 1] - }); - }, - - u : function(dom, node) { - replaceWithSpan(node, { - textDecoration : 'underline' - }); - }, - - strike : function(dom, node) { - replaceWithSpan(node, { - textDecoration : 'line-through' - }); - } - }; - - ed.onPreProcess.add(convert); - ed.onSetContent.add(convert); - - ed.onInit.add(function() { - ed.selection.onSetContent.add(convert); - }); - } -}); - -(function(tinymce) { - var TreeWalker = tinymce.dom.TreeWalker; - - tinymce.EnterKey = function(editor) { - var dom = editor.dom, selection = editor.selection, settings = editor.settings, undoManager = editor.undoManager, nonEmptyElementsMap = editor.schema.getNonEmptyElements(); - - function handleEnterKey(evt) { - var rng = selection.getRng(true), tmpRng, editableRoot, container, offset, parentBlock, documentMode, shiftKey, - newBlock, fragment, containerBlock, parentBlockName, containerBlockName, newBlockName, isAfterLastNodeInContainer; - - // Returns true if the block can be split into two blocks or not - function canSplitBlock(node) { - return node && - dom.isBlock(node) && - !/^(TD|TH|CAPTION|FORM)$/.test(node.nodeName) && - !/^(fixed|absolute)/i.test(node.style.position) && - dom.getContentEditable(node) !== "true"; - }; - - // Renders empty block on IE - function renderBlockOnIE(block) { - var oldRng; - - if (tinymce.isIE && dom.isBlock(block)) { - oldRng = selection.getRng(); - block.appendChild(dom.create('span', null, '\u00a0')); - selection.select(block); - block.lastChild.outerHTML = ''; - selection.setRng(oldRng); - } - }; - - // Remove the first empty inline element of the block so this:

    x

    becomes this:

    x

    - function trimInlineElementsOnLeftSideOfBlock(block) { - var node = block, firstChilds = [], i; - - // Find inner most first child ex:

    *

    - while (node = node.firstChild) { - if (dom.isBlock(node)) { - return; - } - - if (node.nodeType == 1 && !nonEmptyElementsMap[node.nodeName.toLowerCase()]) { - firstChilds.push(node); - } - } - - i = firstChilds.length; - while (i--) { - node = firstChilds[i]; - if (!node.hasChildNodes() || (node.firstChild == node.lastChild && node.firstChild.nodeValue === '')) { - dom.remove(node); - } else { - // Remove see #5381 - if (node.nodeName == "A" && (node.innerText || node.textContent) === ' ') { - dom.remove(node); - } - } - } - }; - - // Moves the caret to a suitable position within the root for example in the first non pure whitespace text node or before an image - function moveToCaretPosition(root) { - var walker, node, rng, y, viewPort, lastNode = root, tempElm; - - rng = dom.createRng(); - - if (root.hasChildNodes()) { - walker = new TreeWalker(root, root); - - while (node = walker.current()) { - if (node.nodeType == 3) { - rng.setStart(node, 0); - rng.setEnd(node, 0); - break; - } - - if (nonEmptyElementsMap[node.nodeName.toLowerCase()]) { - rng.setStartBefore(node); - rng.setEndBefore(node); - break; - } - - lastNode = node; - node = walker.next(); - } - - if (!node) { - rng.setStart(lastNode, 0); - rng.setEnd(lastNode, 0); - } - } else { - if (root.nodeName == 'BR') { - if (root.nextSibling && dom.isBlock(root.nextSibling)) { - // Trick on older IE versions to render the caret before the BR between two lists - if (!documentMode || documentMode < 9) { - tempElm = dom.create('br'); - root.parentNode.insertBefore(tempElm, root); - } - - rng.setStartBefore(root); - rng.setEndBefore(root); - } else { - rng.setStartAfter(root); - rng.setEndAfter(root); - } - } else { - rng.setStart(root, 0); - rng.setEnd(root, 0); - } - } - - selection.setRng(rng); - - // Remove tempElm created for old IE:s - dom.remove(tempElm); - - viewPort = dom.getViewPort(editor.getWin()); - - // scrollIntoView seems to scroll the parent window in most browsers now including FF 3.0b4 so it's time to stop using it and do it our selfs - y = dom.getPos(root).y; - if (y < viewPort.y || y + 25 > viewPort.y + viewPort.h) { - editor.getWin().scrollTo(0, y < viewPort.y ? y : y - viewPort.h + 25); // Needs to be hardcoded to roughly one line of text if a huge text block is broken into two blocks - } - }; - - // Creates a new block element by cloning the current one or creating a new one if the name is specified - // This function will also copy any text formatting from the parent block and add it to the new one - function createNewBlock(name) { - var node = container, block, clonedNode, caretNode; - - block = name || parentBlockName == "TABLE" ? dom.create(name || newBlockName) : parentBlock.cloneNode(false); - caretNode = block; - - // Clone any parent styles - if (settings.keep_styles !== false) { - do { - if (/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(node.nodeName)) { - // Never clone a caret containers - if (node.id == '_mce_caret') { - continue; - } - - clonedNode = node.cloneNode(false); - dom.setAttrib(clonedNode, 'id', ''); // Remove ID since it needs to be document unique - - if (block.hasChildNodes()) { - clonedNode.appendChild(block.firstChild); - block.appendChild(clonedNode); - } else { - caretNode = clonedNode; - block.appendChild(clonedNode); - } - } - } while (node = node.parentNode); - } - - // BR is needed in empty blocks on non IE browsers - if (!tinymce.isIE) { - caretNode.innerHTML = '
    '; - } - - return block; - }; - - // Returns true/false if the caret is at the start/end of the parent block element - function isCaretAtStartOrEndOfBlock(start) { - var walker, node, name; - - // Caret is in the middle of a text node like "a|b" - if (container.nodeType == 3 && (start ? offset > 0 : offset < container.nodeValue.length)) { - return false; - } - - // If after the last element in block node edge case for #5091 - if (container.parentNode == parentBlock && isAfterLastNodeInContainer && !start) { - return true; - } - - // If the caret if before the first element in parentBlock - if (start && container.nodeType == 1 && container == parentBlock.firstChild) { - return true; - } - - // Caret can be before/after a table - if (container.nodeName === "TABLE" || (container.previousSibling && container.previousSibling.nodeName == "TABLE")) { - return (isAfterLastNodeInContainer && !start) || (!isAfterLastNodeInContainer && start); - } - - // Walk the DOM and look for text nodes or non empty elements - walker = new TreeWalker(container, parentBlock); - - // If caret is in beginning or end of a text block then jump to the next/previous node - if (container.nodeType == 3) { - if (start && offset == 0) { - walker.prev(); - } else if (!start && offset == container.nodeValue.length) { - walker.next(); - } - } - - while (node = walker.current()) { - if (node.nodeType === 1) { - // Ignore bogus elements - if (!node.getAttribute('data-mce-bogus')) { - // Keep empty elements like but not trailing br:s like

    text|

    - name = node.nodeName.toLowerCase(); - if (nonEmptyElementsMap[name] && name !== 'br') { - return false; - } - } - } else if (node.nodeType === 3 && !/^[ \t\r\n]*$/.test(node.nodeValue)) { - return false; - } - - if (start) { - walker.prev(); - } else { - walker.next(); - } - } - - return true; - }; - - // Wraps any text nodes or inline elements in the specified forced root block name - function wrapSelfAndSiblingsInDefaultBlock(container, offset) { - var newBlock, parentBlock, startNode, node, next, blockName = newBlockName || 'P'; - - // Not in a block element or in a table cell or caption - parentBlock = dom.getParent(container, dom.isBlock); - if (!parentBlock || !canSplitBlock(parentBlock)) { - parentBlock = parentBlock || editableRoot; - - if (!parentBlock.hasChildNodes()) { - newBlock = dom.create(blockName); - parentBlock.appendChild(newBlock); - rng.setStart(newBlock, 0); - rng.setEnd(newBlock, 0); - return newBlock; - } - - // Find parent that is the first child of parentBlock - node = container; - while (node.parentNode != parentBlock) { - node = node.parentNode; - } - - // Loop left to find start node start wrapping at - while (node && !dom.isBlock(node)) { - startNode = node; - node = node.previousSibling; - } - - if (startNode) { - newBlock = dom.create(blockName); - startNode.parentNode.insertBefore(newBlock, startNode); - - // Start wrapping until we hit a block - node = startNode; - while (node && !dom.isBlock(node)) { - next = node.nextSibling; - newBlock.appendChild(node); - node = next; - } - - // Restore range to it's past location - rng.setStart(container, offset); - rng.setEnd(container, offset); - } - } - - return container; - }; - - // Inserts a block or br before/after or in the middle of a split list of the LI is empty - function handleEmptyListItem() { - function isFirstOrLastLi(first) { - var node = containerBlock[first ? 'firstChild' : 'lastChild']; - - // Find first/last element since there might be whitespace there - while (node) { - if (node.nodeType == 1) { - break; - } - - node = node[first ? 'nextSibling' : 'previousSibling']; - } - - return node === parentBlock; - }; - - newBlock = newBlockName ? createNewBlock(newBlockName) : dom.create('BR'); - - if (isFirstOrLastLi(true) && isFirstOrLastLi()) { - // Is first and last list item then replace the OL/UL with a text block - dom.replace(newBlock, containerBlock); - } else if (isFirstOrLastLi(true)) { - // First LI in list then remove LI and add text block before list - containerBlock.parentNode.insertBefore(newBlock, containerBlock); - } else if (isFirstOrLastLi()) { - // Last LI in list then temove LI and add text block after list - dom.insertAfter(newBlock, containerBlock); - renderBlockOnIE(newBlock); - } else { - // Middle LI in list the split the list and insert a text block in the middle - // Extract after fragment and insert it after the current block - tmpRng = rng.cloneRange(); - tmpRng.setStartAfter(parentBlock); - tmpRng.setEndAfter(containerBlock); - fragment = tmpRng.extractContents(); - dom.insertAfter(fragment, containerBlock); - dom.insertAfter(newBlock, containerBlock); - } - - dom.remove(parentBlock); - moveToCaretPosition(newBlock); - undoManager.add(); - }; - - // Walks the parent block to the right and look for BR elements - function hasRightSideBr() { - var walker = new TreeWalker(container, parentBlock), node; - - while (node = walker.current()) { - if (node.nodeName == 'BR') { - return true; - } - - node = walker.next(); - } - } - - // Inserts a BR element if the forced_root_block option is set to false or empty string - function insertBr() { - var brElm, extraBr, marker; - - if (container && container.nodeType == 3 && offset >= container.nodeValue.length) { - // Insert extra BR element at the end block elements - if (!tinymce.isIE && !hasRightSideBr()) { - brElm = dom.create('br'); - rng.insertNode(brElm); - rng.setStartAfter(brElm); - rng.setEndAfter(brElm); - extraBr = true; - } - } - - brElm = dom.create('br'); - rng.insertNode(brElm); - - // Rendering modes below IE8 doesn't display BR elements in PRE unless we have a \n before it - if (tinymce.isIE && parentBlockName == 'PRE' && (!documentMode || documentMode < 8)) { - brElm.parentNode.insertBefore(dom.doc.createTextNode('\r'), brElm); - } - - // Insert temp marker and scroll to that - marker = dom.create('span', {}, ' '); - brElm.parentNode.insertBefore(marker, brElm); - selection.scrollIntoView(marker); - dom.remove(marker); - - if (!extraBr) { - rng.setStartAfter(brElm); - rng.setEndAfter(brElm); - } else { - rng.setStartBefore(brElm); - rng.setEndBefore(brElm); - } - - selection.setRng(rng); - undoManager.add(); - }; - - // Trims any linebreaks at the beginning of node user for example when pressing enter in a PRE element - function trimLeadingLineBreaks(node) { - do { - if (node.nodeType === 3) { - node.nodeValue = node.nodeValue.replace(/^[\r\n]+/, ''); - } - - node = node.firstChild; - } while (node); - }; - - function getEditableRoot(node) { - var root = dom.getRoot(), parent, editableRoot; - - // Get all parents until we hit a non editable parent or the root - parent = node; - while (parent !== root && dom.getContentEditable(parent) !== "false") { - if (dom.getContentEditable(parent) === "true") { - editableRoot = parent; - } - - parent = parent.parentNode; - } - - return parent !== root ? editableRoot : root; - }; - - // Adds a BR at the end of blocks that only contains an IMG or INPUT since these might be floated and then they won't expand the block - function addBrToBlockIfNeeded(block) { - var lastChild; - - // IE will render the blocks correctly other browsers needs a BR - if (!tinymce.isIE) { - block.normalize(); // Remove empty text nodes that got left behind by the extract - - // Check if the block is empty or contains a floated last child - lastChild = block.lastChild; - if (!lastChild || (/^(left|right)$/gi.test(dom.getStyle(lastChild, 'float', true)))) { - dom.add(block, 'br'); - } - } - }; - - // Delete any selected contents - if (!rng.collapsed) { - editor.execCommand('Delete'); - return; - } - - // Event is blocked by some other handler for example the lists plugin - if (evt.isDefaultPrevented()) { - return; - } - - // Setup range items and newBlockName - container = rng.startContainer; - offset = rng.startOffset; - newBlockName = (settings.force_p_newlines ? 'p' : '') || settings.forced_root_block; - newBlockName = newBlockName ? newBlockName.toUpperCase() : ''; - documentMode = dom.doc.documentMode; - shiftKey = evt.shiftKey; - - // Resolve node index - if (container.nodeType == 1 && container.hasChildNodes()) { - isAfterLastNodeInContainer = offset > container.childNodes.length - 1; - container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container; - if (isAfterLastNodeInContainer && container.nodeType == 3) { - offset = container.nodeValue.length; - } else { - offset = 0; - } - } - - // Get editable root node normaly the body element but sometimes a div or span - editableRoot = getEditableRoot(container); - - // If there is no editable root then enter is done inside a contentEditable false element - if (!editableRoot) { - return; - } - - undoManager.beforeChange(); - - // If editable root isn't block nor the root of the editor - if (!dom.isBlock(editableRoot) && editableRoot != dom.getRoot()) { - if (!newBlockName || shiftKey) { - insertBr(); - } - - return; - } - - // Wrap the current node and it's sibling in a default block if it's needed. - // for example this text|text2 will become this

    text|text2

    - // This won't happen if root blocks are disabled or the shiftKey is pressed - if ((newBlockName && !shiftKey) || (!newBlockName && shiftKey)) { - container = wrapSelfAndSiblingsInDefaultBlock(container, offset); - } - - // Find parent block and setup empty block paddings - parentBlock = dom.getParent(container, dom.isBlock); - containerBlock = parentBlock ? dom.getParent(parentBlock.parentNode, dom.isBlock) : null; - - // Setup block names - parentBlockName = parentBlock ? parentBlock.nodeName.toUpperCase() : ''; // IE < 9 & HTML5 - containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : ''; // IE < 9 & HTML5 - - // Enter inside block contained within a LI then split or insert before/after LI - if (containerBlockName == 'LI' && !evt.ctrlKey) { - parentBlock = containerBlock; - parentBlockName = containerBlockName; - } - - // Handle enter in LI - if (parentBlockName == 'LI') { - if (!newBlockName && shiftKey) { - insertBr(); - return; - } - - // Handle enter inside an empty list item - if (dom.isEmpty(parentBlock)) { - // Let the list plugin or browser handle nested lists for now - if (/^(UL|OL|LI)$/.test(containerBlock.parentNode.nodeName)) { - return false; - } - - handleEmptyListItem(); - return; - } - } - - // Don't split PRE tags but insert a BR instead easier when writing code samples etc - if (parentBlockName == 'PRE' && settings.br_in_pre !== false) { - if (!shiftKey) { - insertBr(); - return; - } - } else { - // If no root block is configured then insert a BR by default or if the shiftKey is pressed - if ((!newBlockName && !shiftKey && parentBlockName != 'LI') || (newBlockName && shiftKey)) { - insertBr(); - return; - } - } - - // Default block name if it's not configured - newBlockName = newBlockName || 'P'; - - // Insert new block before/after the parent block depending on caret location - if (isCaretAtStartOrEndOfBlock()) { - // If the caret is at the end of a header we produce a P tag after it similar to Word unless we are in a hgroup - if (/^(H[1-6]|PRE)$/.test(parentBlockName) && containerBlockName != 'HGROUP') { - newBlock = createNewBlock(newBlockName); - } else { - newBlock = createNewBlock(); - } - - // Split the current container block element if enter is pressed inside an empty inner block element - if (settings.end_container_on_empty_block && canSplitBlock(containerBlock) && dom.isEmpty(parentBlock)) { - // Split container block for example a BLOCKQUOTE at the current blockParent location for example a P - newBlock = dom.split(containerBlock, parentBlock); - } else { - dom.insertAfter(newBlock, parentBlock); - } - - moveToCaretPosition(newBlock); - } else if (isCaretAtStartOrEndOfBlock(true)) { - // Insert new block before - newBlock = parentBlock.parentNode.insertBefore(createNewBlock(), parentBlock); - renderBlockOnIE(newBlock); - } else { - // Extract after fragment and insert it after the current block - tmpRng = rng.cloneRange(); - tmpRng.setEndAfter(parentBlock); - fragment = tmpRng.extractContents(); - trimLeadingLineBreaks(fragment); - newBlock = fragment.firstChild; - dom.insertAfter(fragment, parentBlock); - trimInlineElementsOnLeftSideOfBlock(newBlock); - addBrToBlockIfNeeded(parentBlock); - moveToCaretPosition(newBlock); - } - - dom.setAttrib(newBlock, 'id', ''); // Remove ID since it needs to be document unique - undoManager.add(); - } - - editor.onKeyDown.add(function(ed, evt) { - if (evt.keyCode == 13) { - if (handleEnterKey(evt) !== false) { - evt.preventDefault(); - } - } - }); - }; -})(tinymce); - diff --git a/common/static/js/vendor/tiny_mce/tinymce.min.js b/common/static/js/vendor/tiny_mce/tinymce.min.js new file mode 100644 index 0000000000..a2cae7b6f9 --- /dev/null +++ b/common/static/js/vendor/tiny_mce/tinymce.min.js @@ -0,0 +1,6340 @@ +// 4.0.16 (2014-01-31) +!function (e, t) { + "use strict"; + function n(e, t) { + for (var n, r = [], i = 0; i < e.length; ++i) { + if (n = s[e[i]] || o(e[i]), !n)throw"module definition dependecy not found: " + e[i]; + r.push(n) + } + t.apply(null, r) + } + + function r(e, r, i) { + if ("string" != typeof e)throw"invalid module definition, module id must be defined and be a string"; + if (r === t)throw"invalid module definition, dependencies must be specified"; + if (i === t)throw"invalid module definition, definition function must be specified"; + n(r, function () { + s[e] = i.apply(null, arguments) + }) + } + + function i(e) { + return!!s[e] + } + + function o(t) { + for (var n = e, r = t.split(/[.\/]/), i = 0; i < r.length; ++i) { + if (!n[r[i]])return; + n = n[r[i]] + } + return n + } + + function a(n) { + for (var r = 0; r < n.length; r++) { + for (var i = e, o = n[r], a = o.split(/[.\/]/), l = 0; l < a.length - 1; ++l)i[a[l]] === t && (i[a[l]] = {}), i = i[a[l]]; + i[a[a.length - 1]] = s[o] + } + } + + var s = {}, l = "tinymce/dom/Sizzle", c = "tinymce/html/Styles", d = "tinymce/dom/EventUtils", u = "tinymce/dom/TreeWalker", f = "tinymce/util/Tools", p = "tinymce/dom/Range", m = "tinymce/html/Entities", h = "tinymce/Env", g = "tinymce/dom/StyleSheetLoader", v = "tinymce/dom/DOMUtils", y = "tinymce/dom/ScriptLoader", b = "tinymce/AddOnManager", C = "tinymce/html/Node", x = "tinymce/html/Schema", w = "tinymce/html/SaxParser", _ = "tinymce/html/DomParser", N = "tinymce/html/Writer", E = "tinymce/html/Serializer", k = "tinymce/dom/Serializer", S = "tinymce/dom/TridentSelection", T = "tinymce/util/VK", R = "tinymce/dom/ControlSelection", A = "tinymce/dom/Selection", B = "tinymce/dom/RangeUtils", L = "tinymce/Formatter", H = "tinymce/UndoManager", M = "tinymce/EnterKey", D = "tinymce/ForceBlocks", P = "tinymce/EditorCommands", O = "tinymce/util/URI", I = "tinymce/util/Class", z = "tinymce/ui/Selector", F = "tinymce/ui/Collection", W = "tinymce/ui/DomUtils", V = "tinymce/ui/Control", U = "tinymce/ui/Factory", q = "tinymce/ui/Container", j = "tinymce/ui/DragHelper", $ = "tinymce/ui/Scrollable", K = "tinymce/ui/Panel", Y = "tinymce/ui/Movable", G = "tinymce/ui/Resizable", X = "tinymce/ui/FloatPanel", J = "tinymce/ui/KeyboardNavigation", Q = "tinymce/ui/Window", Z = "tinymce/ui/MessageBox", et = "tinymce/WindowManager", tt = "tinymce/util/Quirks", nt = "tinymce/util/Observable", rt = "tinymce/Shortcuts", it = "tinymce/Editor", ot = "tinymce/util/I18n", at = "tinymce/FocusManager", st = "tinymce/EditorManager", lt = "tinymce/LegacyInput", ct = "tinymce/util/XHR", dt = "tinymce/util/JSON", ut = "tinymce/util/JSONRequest", ft = "tinymce/util/JSONP", pt = "tinymce/util/LocalStorage", mt = "tinymce/Compat", ht = "tinymce/ui/Layout", gt = "tinymce/ui/AbsoluteLayout", vt = "tinymce/ui/Tooltip", yt = "tinymce/ui/Widget", bt = "tinymce/ui/Button", Ct = "tinymce/ui/ButtonGroup", xt = "tinymce/ui/Checkbox", wt = "tinymce/ui/PanelButton", _t = "tinymce/ui/ColorButton", Nt = "tinymce/ui/ComboBox", Et = "tinymce/ui/Path", kt = "tinymce/ui/ElementPath", St = "tinymce/ui/FormItem", Tt = "tinymce/ui/Form", Rt = "tinymce/ui/FieldSet", At = "tinymce/ui/FilePicker", Bt = "tinymce/ui/FitLayout", Lt = "tinymce/ui/FlexLayout", Ht = "tinymce/ui/FlowLayout", Mt = "tinymce/ui/FormatControls", Dt = "tinymce/ui/GridLayout", Pt = "tinymce/ui/Iframe", Ot = "tinymce/ui/Label", It = "tinymce/ui/Toolbar", zt = "tinymce/ui/MenuBar", Ft = "tinymce/ui/MenuButton", Wt = "tinymce/ui/ListBox", Vt = "tinymce/ui/MenuItem", Ut = "tinymce/ui/Menu", qt = "tinymce/ui/Radio", jt = "tinymce/ui/ResizeHandle", $t = "tinymce/ui/Spacer", Kt = "tinymce/ui/SplitButton", Yt = "tinymce/ui/StackLayout", Gt = "tinymce/ui/TabPanel", Xt = "tinymce/ui/TextBox", Jt = "tinymce/ui/Throbber"; + r(l, [], function () { + if (!window.jQuery)throw new Error("Load jQuery first"); + return jQuery.find + }), r(c, [], function () { + return function (e, t) { + function n(e, t, n, r) { + function i(e) { + return e = parseInt(e, 10).toString(16), e.length > 1 ? e : "0" + e + } + + return"#" + i(t) + i(n) + i(r) + } + + var r = /rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi, i = /(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi, o = /\s*([^:]+):\s*([^;]+);?/g, a = /\s+$/, s, l, c = {}, d, u = "\ufeff"; + for (e = e || {}, d = ("\\\" \\' \\; \\: ; : " + u).split(" "), l = 0; l < d.length; l++)c[d[l]] = u + l, c[u + l] = d[l]; + return{toHex: function (e) { + return e.replace(r, n) + }, parse: function (t) { + function s(e, t, n) { + var r, i, o, a; + if (r = h[e + "-top" + t], r && (i = h[e + "-right" + t], i && (o = h[e + "-bottom" + t], o && (a = h[e + "-left" + t])))) { + var s = [r, i, o, a]; + for (l = s.length - 1; l-- && s[l] === s[l + 1];); + l > -1 && n || (h[e + t] = -1 == l ? s[0] : s.join(" "), delete h[e + "-top" + t], delete h[e + "-right" + t], delete h[e + "-bottom" + t], delete h[e + "-left" + t]) + } + } + + function d(e) { + var t = h[e], n; + if (t) { + for (t = t.split(" "), n = t.length; n--;)if (t[n] !== t[0])return!1; + return h[e] = t[0], !0 + } + } + + function u(e, t, n, r) { + d(t) && d(n) && d(r) && (h[e] = h[t] + " " + h[n] + " " + h[r], delete h[t], delete h[n], delete h[r]) + } + + function f(e) { + return b = !0, c[e] + } + + function p(e, t) { + return b && (e = e.replace(/\uFEFF[0-9]/g, function (e) { + return c[e] + })), t || (e = e.replace(/\\([\'\";:])/g, "$1")), e + } + + function m(t, n, r, i, o, a) { + return(o = o || a) ? (o = p(o), "'" + o.replace(/\'/g, "\\'") + "'") : (n = p(n || r || i), !e.allow_script_urls && /(java|vb)script:/i.test(n.replace(/[\s\r\n]+/, "")) ? "" : (C && (n = C.call(x, n, "style")), "url('" + n.replace(/\'/g, "\\'") + "')")) + } + + var h = {}, g, v, y, b, C = e.url_converter, x = e.url_converter_scope || this; + if (t) { + for (t = t.replace(/[\u0000-\u001F]/g, ""), t = t.replace(/\\[\"\';:\uFEFF]/g, f).replace(/\"[^\"]+\"|\'[^\']+\'/g, function (e) { + return e.replace(/[;:]/g, f) + }); g = o.exec(t);) { + if (v = g[1].replace(a, "").toLowerCase(), y = g[2].replace(a, ""), v && y.length > 0) { + if (!e.allow_script_urls && ("behavior" == v || /expression\s*\(/.test(y)))continue; + "font-weight" === v && "700" === y ? y = "bold" : ("color" === v || "background-color" === v) && (y = y.toLowerCase()), y = y.replace(r, n), y = y.replace(i, m), h[v] = b ? p(y, !0) : y + } + o.lastIndex = g.index + g[0].length + } + s("border", "", !0), s("border", "-width"), s("border", "-color"), s("border", "-style"), s("padding", ""), s("margin", ""), u("border", "border-width", "border-style", "border-color"), "medium none" === h.border && delete h.border, "none" === h["border-image"] && delete h["border-image"] + } + return h + }, serialize: function (e, n) { + function r(n) { + var r, o, a, l; + if (r = t.styles[n])for (o = 0, a = r.length; a > o; o++)n = r[o], l = e[n], l !== s && l.length > 0 && (i += (i.length > 0 ? " " : "") + n + ": " + l + ";") + } + + var i = "", o, a; + if (n && t && t.styles)r("*"), r(n); else for (o in e)a = e[o], a !== s && a.length > 0 && (i += (i.length > 0 ? " " : "") + o + ": " + a + ";"); + return i + }} + } + }), r(d, [], function () { + function e(e, t, n, r) { + e.addEventListener ? e.addEventListener(t, n, r || !1) : e.attachEvent && e.attachEvent("on" + t, n) + } + + function t(e, t, n, r) { + e.removeEventListener ? e.removeEventListener(t, n, r || !1) : e.detachEvent && e.detachEvent("on" + t, n) + } + + function n(e, t) { + function n() { + return!1 + } + + function r() { + return!0 + } + + var i, o = t || {}, l; + for (i in e)s[i] || (o[i] = e[i]); + if (o.target || (o.target = o.srcElement || document), e && a.test(e.type) && e.pageX === l && e.clientX !== l) { + var c = o.target.ownerDocument || document, d = c.documentElement, u = c.body; + o.pageX = e.clientX + (d && d.scrollLeft || u && u.scrollLeft || 0) - (d && d.clientLeft || u && u.clientLeft || 0), o.pageY = e.clientY + (d && d.scrollTop || u && u.scrollTop || 0) - (d && d.clientTop || u && u.clientTop || 0) + } + return o.preventDefault = function () { + o.isDefaultPrevented = r, e && (e.preventDefault ? e.preventDefault() : e.returnValue = !1) + }, o.stopPropagation = function () { + o.isPropagationStopped = r, e && (e.stopPropagation ? e.stopPropagation() : e.cancelBubble = !0) + }, o.stopImmediatePropagation = function () { + o.isImmediatePropagationStopped = r, o.stopPropagation() + }, o.isDefaultPrevented || (o.isDefaultPrevented = n, o.isPropagationStopped = n, o.isImmediatePropagationStopped = n), o + } + + function r(n, r, i) { + function o() { + i.domLoaded || (i.domLoaded = !0, r(c)) + } + + function a() { + ("complete" === l.readyState || "interactive" === l.readyState) && (t(l, "readystatechange", a), o()) + } + + function s() { + try { + l.documentElement.doScroll("left") + } catch (e) { + return void setTimeout(s, 0) + } + o() + } + + var l = n.document, c = {type: "ready"}; + return i.domLoaded ? void r(c) : (l.addEventListener ? "complete" === l.readyState ? o() : e(n, "DOMContentLoaded", o) : (e(l, "readystatechange", a), l.documentElement.doScroll && n.self === n.top && s()), void e(n, "load", o)) + } + + function i() { + function i(e, t) { + var n, r, i, o, a = s[t]; + if (n = a && a[e.type])for (r = 0, i = n.length; i > r; r++)if (o = n[r], o && o.func.call(o.scope, e) === !1 && e.preventDefault(), e.isImmediatePropagationStopped())return + } + + var a = this, s = {}, l, c, d, u, f; + c = o + (+new Date).toString(32), u = "onmouseenter"in document.documentElement, d = "onfocusin"in document.documentElement, f = {mouseenter: "mouseover", mouseleave: "mouseout"}, l = 1, a.domLoaded = !1, a.events = s, a.bind = function (t, o, p, m) { + function h(e) { + i(n(e || _.event), g) + } + + var g, v, y, b, C, x, w, _ = window; + if (t && 3 !== t.nodeType && 8 !== t.nodeType) { + for (t[c] ? g = t[c] : (g = l++, t[c] = g, s[g] = {}), m = m || t, o = o.split(" "), y = o.length; y--;)b = o[y], x = h, C = w = !1, "DOMContentLoaded" === b && (b = "ready"), a.domLoaded && "ready" === b && "complete" == t.readyState ? p.call(m, n({type: b})) : (u || (C = f[b], C && (x = function (e) { + var t, r; + if (t = e.currentTarget, r = e.relatedTarget, r && t.contains)r = t.contains(r); else for (; r && r !== t;)r = r.parentNode; + r || (e = n(e || _.event), e.type = "mouseout" === e.type ? "mouseleave" : "mouseenter", e.target = t, i(e, g)) + })), d || "focusin" !== b && "focusout" !== b || (w = !0, C = "focusin" === b ? "focus" : "blur", x = function (e) { + e = n(e || _.event), e.type = "focus" === e.type ? "focusin" : "focusout", i(e, g) + }), v = s[g][b], v ? "ready" === b && a.domLoaded ? p({type: b}) : v.push({func: p, scope: m}) : (s[g][b] = v = [ + {func: p, scope: m} + ], v.fakeName = C, v.capture = w, v.nativeHandler = x, "ready" === b ? r(t, x, a) : e(t, C || b, x, w))); + return t = v = 0, p + } + }, a.unbind = function (e, n, r) { + var i, o, l, d, u, f; + if (!e || 3 === e.nodeType || 8 === e.nodeType)return a; + if (i = e[c]) { + if (f = s[i], n) { + for (n = n.split(" "), l = n.length; l--;)if (u = n[l], o = f[u]) { + if (r)for (d = o.length; d--;)if (o[d].func === r) { + var p = o.nativeHandler; + o = o.slice(0, d).concat(o.slice(d + 1)), o.nativeHandler = p, f[u] = o + } + r && 0 !== o.length || (delete f[u], t(e, o.fakeName || u, o.nativeHandler, o.capture)) + } + } else { + for (u in f)o = f[u], t(e, o.fakeName || u, o.nativeHandler, o.capture); + f = {} + } + for (u in f)return a; + delete s[i]; + try { + delete e[c] + } catch (m) { + e[c] = null + } + } + return a + }, a.fire = function (e, t, r) { + var o; + if (!e || 3 === e.nodeType || 8 === e.nodeType)return a; + r = n(null, r), r.type = t, r.target = e; + do o = e[c], o && i(r, o), e = e.parentNode || e.ownerDocument || e.defaultView || e.parentWindow; while (e && !r.isPropagationStopped()); + return a + }, a.clean = function (e) { + var t, n, r = a.unbind; + if (!e || 3 === e.nodeType || 8 === e.nodeType)return a; + if (e[c] && r(e), e.getElementsByTagName || (e = e.document), e && e.getElementsByTagName)for (r(e), n = e.getElementsByTagName("*"), t = n.length; t--;)e = n[t], e[c] && r(e); + return a + }, a.destroy = function () { + s = {} + }, a.cancel = function (e) { + return e && (e.preventDefault(), e.stopImmediatePropagation()), !1 + } + } + + var o = "mce-data-", a = /^(?:mouse|contextmenu)|click/, s = {keyLocation: 1, layerX: 1, layerY: 1, returnValue: 1}; + return i.Event = new i, i.Event.bind(window, "ready", function () { + }), i + }), r(u, [], function () { + return function (e, t) { + function n(e, n, r, i) { + var o, a; + if (e) { + if (!i && e[n])return e[n]; + if (e != t) { + if (o = e[r])return o; + for (a = e.parentNode; a && a != t; a = a.parentNode)if (o = a[r])return o + } + } + } + + var r = e; + this.current = function () { + return r + }, this.next = function (e) { + return r = n(r, "firstChild", "nextSibling", e) + }, this.prev = function (e) { + return r = n(r, "lastChild", "previousSibling", e) + } + } + }), r(f, [], function () { + function e(e, n) { + return n ? "array" == n && g(e) ? !0 : typeof e == n : e !== t + } + + function n(e) { + var t = [], n, r; + for (n = 0, r = e.length; r > n; n++)t[n] = e[n]; + return t + } + + function r(e, t, n) { + var r; + for (e = e || [], t = t || ",", "string" == typeof e && (e = e.split(t)), n = n || {}, r = e.length; r--;)n[e[r]] = {}; + return n + } + + function i(e, n, r) { + var i, o; + if (!e)return 0; + if (r = r || e, e.length !== t) { + for (i = 0, o = e.length; o > i; i++)if (n.call(r, e[i], i, e) === !1)return 0 + } else for (i in e)if (e.hasOwnProperty(i) && n.call(r, e[i], i, e) === !1)return 0; + return 1 + } + + function o(e, t) { + var n = []; + return i(e, function (e) { + n.push(t(e)) + }), n + } + + function a(e, t) { + var n = []; + return i(e, function (e) { + (!t || t(e)) && n.push(e) + }), n + } + + function s(e, t, n) { + var r = this, i, o, a, s, l, c = 0; + if (e = /^((static) )?([\w.]+)(:([\w.]+))?/.exec(e), a = e[3].match(/(^|\.)(\w+)$/i)[2], o = r.createNS(e[3].replace(/\.\w+$/, ""), n), !o[a]) { + if ("static" == e[2])return o[a] = t, void(this.onCreate && this.onCreate(e[2], e[3], o[a])); + t[a] || (t[a] = function () { + }, c = 1), o[a] = t[a], r.extend(o[a].prototype, t), e[5] && (i = r.resolve(e[5]).prototype, s = e[5].match(/\.(\w+)$/i)[1], l = o[a], o[a] = c ? function () { + return i[s].apply(this, arguments) + } : function () { + return this.parent = i[s], l.apply(this, arguments) + }, o[a].prototype[a] = o[a], r.each(i, function (e, t) { + o[a].prototype[t] = i[t] + }), r.each(t, function (e, t) { + i[t] ? o[a].prototype[t] = function () { + return this.parent = i[t], e.apply(this, arguments) + } : t != a && (o[a].prototype[t] = e) + })), r.each(t["static"], function (e, t) { + o[a][t] = e + }) + } + } + + function l(e, t) { + var n, r; + if (e)for (n = 0, r = e.length; r > n; n++)if (e[n] === t)return n; + return-1 + } + + function c(e, n) { + var r, i, o, a = arguments, s; + for (r = 1, i = a.length; i > r; r++) { + n = a[r]; + for (o in n)n.hasOwnProperty(o) && (s = n[o], s !== t && (e[o] = s)) + } + return e + } + + function d(e, t, n, r) { + r = r || this, e && (n && (e = e[n]), i(e, function (e, i) { + return t.call(r, e, i, n) === !1 ? !1 : void d(e, t, n, r) + })) + } + + function u(e, t) { + var n, r; + for (t = t || window, e = e.split("."), n = 0; n < e.length; n++)r = e[n], t[r] || (t[r] = {}), t = t[r]; + return t + } + + function f(e, t) { + var n, r; + for (t = t || window, e = e.split("."), n = 0, r = e.length; r > n && (t = t[e[n]], t); n++); + return t + } + + function p(t, n) { + return!t || e(t, "array") ? t : o(t.split(n || ","), h) + } + + var m = /^\s*|\s*$/g, h = function (e) { + return null === e || e === t ? "" : ("" + e).replace(m, "") + }, g = Array.isArray || function (e) { + return"[object Array]" === Object.prototype.toString.call(e) + }; + return{trim: h, isArray: g, is: e, toArray: n, makeMap: r, each: i, map: o, grep: a, inArray: l, extend: c, create: s, walk: d, createNS: u, resolve: f, explode: p} + }), r(p, [f], function (e) { + function t(n) { + function r() { + return D.createDocumentFragment() + } + + function i(e, t) { + _(z, e, t) + } + + function o(e, t) { + _(F, e, t) + } + + function a(e) { + i(e.parentNode, $(e)) + } + + function s(e) { + i(e.parentNode, $(e) + 1) + } + + function l(e) { + o(e.parentNode, $(e)) + } + + function c(e) { + o(e.parentNode, $(e) + 1) + } + + function d(e) { + e ? (M[U] = M[V], M[q] = M[W]) : (M[V] = M[U], M[W] = M[q]), M.collapsed = z + } + + function u(e) { + a(e), c(e) + } + + function f(e) { + i(e, 0), o(e, 1 === e.nodeType ? e.childNodes.length : e.nodeValue.length) + } + + function p(e, t) { + var n = M[V], r = M[W], i = M[U], o = M[q], a = t.startContainer, s = t.startOffset, l = t.endContainer, c = t.endOffset; + return 0 === e ? w(n, r, a, s) : 1 === e ? w(i, o, a, s) : 2 === e ? w(i, o, l, c) : 3 === e ? w(n, r, l, c) : void 0 + } + + function m() { + N(I) + } + + function h() { + return N(P) + } + + function g() { + return N(O) + } + + function v(e) { + var t = this[V], r = this[W], i, o; + 3 !== t.nodeType && 4 !== t.nodeType || !t.nodeValue ? (t.childNodes.length > 0 && (o = t.childNodes[r]), o ? t.insertBefore(e, o) : 3 == t.nodeType ? n.insertAfter(e, t) : t.appendChild(e)) : r ? r >= t.nodeValue.length ? n.insertAfter(e, t) : (i = t.splitText(r), t.parentNode.insertBefore(e, i)) : t.parentNode.insertBefore(e, t) + } + + function y(e) { + var t = M.extractContents(); + M.insertNode(e), e.appendChild(t), M.selectNode(e) + } + + function b() { + return j(new t(n), {startContainer: M[V], startOffset: M[W], endContainer: M[U], endOffset: M[q], collapsed: M.collapsed, commonAncestorContainer: M.commonAncestorContainer}) + } + + function C(e, t) { + var n; + if (3 == e.nodeType)return e; + if (0 > t)return e; + for (n = e.firstChild; n && t > 0;)--t, n = n.nextSibling; + return n ? n : e + } + + function x() { + return M[V] == M[U] && M[W] == M[q] + } + + function w(e, t, r, i) { + var o, a, s, l, c, d; + if (e == r)return t == i ? 0 : i > t ? -1 : 1; + for (o = r; o && o.parentNode != e;)o = o.parentNode; + if (o) { + for (a = 0, s = e.firstChild; s != o && t > a;)a++, s = s.nextSibling; + return a >= t ? -1 : 1 + } + for (o = e; o && o.parentNode != r;)o = o.parentNode; + if (o) { + for (a = 0, s = r.firstChild; s != o && i > a;)a++, s = s.nextSibling; + return i > a ? -1 : 1 + } + for (l = n.findCommonAncestor(e, r), c = e; c && c.parentNode != l;)c = c.parentNode; + for (c || (c = l), d = r; d && d.parentNode != l;)d = d.parentNode; + if (d || (d = l), c == d)return 0; + for (s = l.firstChild; s;) { + if (s == c)return-1; + if (s == d)return 1; + s = s.nextSibling + } + } + + function _(e, t, r) { + var i, o; + for (e ? (M[V] = t, M[W] = r) : (M[U] = t, M[q] = r), i = M[U]; i.parentNode;)i = i.parentNode; + for (o = M[V]; o.parentNode;)o = o.parentNode; + o == i ? w(M[V], M[W], M[U], M[q]) > 0 && M.collapse(e) : M.collapse(e), M.collapsed = x(), M.commonAncestorContainer = n.findCommonAncestor(M[V], M[U]) + } + + function N(e) { + var t, n = 0, r = 0, i, o, a, s, l, c; + if (M[V] == M[U])return E(e); + for (t = M[U], i = t.parentNode; i; t = i, i = i.parentNode) { + if (i == M[V])return k(t, e); + ++n + } + for (t = M[V], i = t.parentNode; i; t = i, i = i.parentNode) { + if (i == M[U])return S(t, e); + ++r + } + for (o = r - n, a = M[V]; o > 0;)a = a.parentNode, o--; + for (s = M[U]; 0 > o;)s = s.parentNode, o++; + for (l = a.parentNode, c = s.parentNode; l != c; l = l.parentNode, c = c.parentNode)a = l, s = c; + return T(a, s, e) + } + + function E(e) { + var t, n, i, o, a, s, l, c, d; + if (e != I && (t = r()), M[W] == M[q])return t; + if (3 == M[V].nodeType) { + if (n = M[V].nodeValue, i = n.substring(M[W], M[q]), e != O && (o = M[V], c = M[W], d = M[q] - M[W], 0 === c && d >= o.nodeValue.length - 1 ? o.parentNode.removeChild(o) : o.deleteData(c, d), M.collapse(z)), e == I)return; + return i.length > 0 && t.appendChild(D.createTextNode(i)), t + } + for (o = C(M[V], M[W]), a = M[q] - M[W]; o && a > 0;)s = o.nextSibling, l = L(o, e), t && t.appendChild(l), --a, o = s; + return e != O && M.collapse(z), t + } + + function k(e, t) { + var n, i, o, a, s, l; + if (t != I && (n = r()), i = R(e, t), n && n.appendChild(i), o = $(e), a = o - M[W], 0 >= a)return t != O && (M.setEndBefore(e), M.collapse(F)), n; + for (i = e.previousSibling; a > 0;)s = i.previousSibling, l = L(i, t), n && n.insertBefore(l, n.firstChild), --a, i = s; + return t != O && (M.setEndBefore(e), M.collapse(F)), n + } + + function S(e, t) { + var n, i, o, a, s, l; + for (t != I && (n = r()), o = A(e, t), n && n.appendChild(o), i = $(e), ++i, a = M[q] - i, o = e.nextSibling; o && a > 0;)s = o.nextSibling, l = L(o, t), n && n.appendChild(l), --a, o = s; + return t != O && (M.setStartAfter(e), M.collapse(z)), n + } + + function T(e, t, n) { + var i, o, a, s, l, c, d, u; + for (n != I && (o = r()), i = A(e, n), o && o.appendChild(i), a = e.parentNode, s = $(e), l = $(t), ++s, c = l - s, d = e.nextSibling; c > 0;)u = d.nextSibling, i = L(d, n), o && o.appendChild(i), d = u, --c; + return i = R(t, n), o && o.appendChild(i), n != O && (M.setStartAfter(e), M.collapse(z)), o + } + + function R(e, t) { + var n = C(M[U], M[q] - 1), r, i, o, a, s, l = n != M[U]; + if (n == e)return B(n, l, F, t); + for (r = n.parentNode, i = B(r, F, F, t); r;) { + for (; n;)o = n.previousSibling, a = B(n, l, F, t), t != I && i.insertBefore(a, i.firstChild), l = z, n = o; + if (r == e)return i; + n = r.previousSibling, r = r.parentNode, s = B(r, F, F, t), t != I && s.appendChild(i), i = s + } + } + + function A(e, t) { + var n = C(M[V], M[W]), r = n != M[V], i, o, a, s, l; + if (n == e)return B(n, r, z, t); + for (i = n.parentNode, o = B(i, F, z, t); i;) { + for (; n;)a = n.nextSibling, s = B(n, r, z, t), t != I && o.appendChild(s), r = z, n = a; + if (i == e)return o; + n = i.nextSibling, i = i.parentNode, l = B(i, F, z, t), t != I && l.appendChild(o), o = l + } + } + + function B(e, t, r, i) { + var o, a, s, l, c; + if (t)return L(e, i); + if (3 == e.nodeType) { + if (o = e.nodeValue, r ? (l = M[W], a = o.substring(l), s = o.substring(0, l)) : (l = M[q], a = o.substring(0, l), s = o.substring(l)), i != O && (e.nodeValue = s), i == I)return; + return c = n.clone(e, F), c.nodeValue = a, c + } + if (i != I)return n.clone(e, F) + } + + function L(e, t) { + return t != I ? t == O ? n.clone(e, z) : e : void e.parentNode.removeChild(e) + } + + function H() { + return n.create("body", null, g()).outerText + } + + var M = this, D = n.doc, P = 0, O = 1, I = 2, z = !0, F = !1, W = "startOffset", V = "startContainer", U = "endContainer", q = "endOffset", j = e.extend, $ = n.nodeIndex; + return j(M, {startContainer: D, startOffset: 0, endContainer: D, endOffset: 0, collapsed: z, commonAncestorContainer: D, START_TO_START: 0, START_TO_END: 1, END_TO_END: 2, END_TO_START: 3, setStart: i, setEnd: o, setStartBefore: a, setStartAfter: s, setEndBefore: l, setEndAfter: c, collapse: d, selectNode: u, selectNodeContents: f, compareBoundaryPoints: p, deleteContents: m, extractContents: h, cloneContents: g, insertNode: v, surroundContents: y, cloneRange: b, toStringIE: H}), M + } + + return t.prototype.toString = function () { + return this.toStringIE() + }, t + }), r(m, [f], function (e) { + function t(e) { + var t; + return t = document.createElement("div"), t.innerHTML = e, t.textContent || t.innerText || e + } + + function n(e, t) { + var n, r, i, a = {}; + if (e) { + for (e = e.split(","), t = t || 10, n = 0; n < e.length; n += 2)r = String.fromCharCode(parseInt(e[n], t)), o[r] || (i = "&" + e[n + 1] + ";", a[r] = i, a[i] = r); + return a + } + } + + var r = e.makeMap, i, o, a, s = /[&<>\"\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g, l = /[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g, c = /[<>&\"\']/g, d = /&(#x|#)?([\w]+);/g, u = {128: "\u20ac", 130: "\u201a", 131: "\u0192", 132: "\u201e", 133: "\u2026", 134: "\u2020", 135: "\u2021", 136: "\u02c6", 137: "\u2030", 138: "\u0160", 139: "\u2039", 140: "\u0152", 142: "\u017d", 145: "\u2018", 146: "\u2019", 147: "\u201c", 148: "\u201d", 149: "\u2022", 150: "\u2013", 151: "\u2014", 152: "\u02dc", 153: "\u2122", 154: "\u0161", 155: "\u203a", 156: "\u0153", 158: "\u017e", 159: "\u0178"}; + o = {'"': """, "'": "'", "<": "<", ">": ">", "&": "&"}, a = {"<": "<", ">": ">", "&": "&", """: '"', "'": "'"}, i = n("50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,t9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro", 32); + var f = {encodeRaw: function (e, t) { + return e.replace(t ? s : l, function (e) { + return o[e] || e + }) + }, encodeAllRaw: function (e) { + return("" + e).replace(c, function (e) { + return o[e] || e + }) + }, encodeNumeric: function (e, t) { + return e.replace(t ? s : l, function (e) { + return e.length > 1 ? "&#" + (1024 * (e.charCodeAt(0) - 55296) + (e.charCodeAt(1) - 56320) + 65536) + ";" : o[e] || "&#" + e.charCodeAt(0) + ";" + }) + }, encodeNamed: function (e, t, n) { + return n = n || i, e.replace(t ? s : l, function (e) { + return o[e] || n[e] || e + }) + }, getEncodeFunc: function (e, t) { + function a(e, n) { + return e.replace(n ? s : l, function (e) { + return o[e] || t[e] || "&#" + e.charCodeAt(0) + ";" || e + }) + } + + function c(e, n) { + return f.encodeNamed(e, n, t) + } + + return t = n(t) || i, e = r(e.replace(/\+/g, ",")), e.named && e.numeric ? a : e.named ? t ? c : f.encodeNamed : e.numeric ? f.encodeNumeric : f.encodeRaw + }, decode: function (e) { + return e.replace(d, function (e, n, r) { + return n ? (r = parseInt(r, 2 === n.length ? 16 : 10), r > 65535 ? (r -= 65536, String.fromCharCode(55296 + (r >> 10), 56320 + (1023 & r))) : u[r] || String.fromCharCode(r)) : a[e] || i[e] || t(e) + }) + }}; + return f + }), r(h, [], function () { + var e = navigator, t = e.userAgent, n, r, i, o, a, s, l; + n = window.opera && window.opera.buildNumber, r = /WebKit/.test(t), i = !r && !n && /MSIE/gi.test(t) && /Explorer/gi.test(e.appName), i = i && /MSIE (\w+)\./.exec(t)[1], o = -1 == t.indexOf("Trident/") || -1 == t.indexOf("rv:") && -1 == e.appName.indexOf("Netscape") ? !1 : 11, i = i || o, a = !r && !o && /Gecko/.test(t), s = -1 != t.indexOf("Mac"), l = /(iPad|iPhone)/.test(t); + var c = !l || t.match(/AppleWebKit\/(\d*)/)[1] >= 534; + return{opera: n, webkit: r, ie: i, gecko: a, mac: s, iOS: l, contentEditable: c, transparentSrc: "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7", caretAfter: 8 != i, range: window.getSelection && "Range"in window, documentMode: i ? document.documentMode || 7 : 10} + }), r(g, [], function () { + return function (e, t) { + function n(t) { + e.getElementsByTagName("head")[0].appendChild(t) + } + + function r(t, r, s) { + function l() { + for (var e = v.passed, t = e.length; t--;)e[t](); + v.status = 2, v.passed = [], v.failed = [] + } + + function c() { + for (var e = v.failed, t = e.length; t--;)e[t](); + v.status = 3, v.passed = [], v.failed = [] + } + + function d() { + var e = navigator.userAgent.match(/WebKit\/(\d*)/); + return!!(e && e[1] < 536) + } + + function u(e, t) { + e() || ((new Date).getTime() - g < a ? window.setTimeout(t, 0) : c()) + } + + function f() { + u(function () { + for (var t = e.styleSheets, n, r = t.length, i; r--;)if (n = t[r], i = n.ownerNode ? n.ownerNode : n.owningElement, i && i.id === m.id)return l(), !0 + }, f) + } + + function p() { + u(function () { + try { + var e = h.sheet.cssRules; + return l(), !!e + } catch (t) { + } + }, p) + } + + var m, h, g, v; + if (o[t] ? v = o[t] : (v = {passed: [], failed: []}, o[t] = v), r && v.passed.push(r), s && v.failed.push(s), 1 != v.status) { + if (2 == v.status)return void l(); + if (3 == v.status)return void c(); + if (v.status = 1, m = e.createElement("link"), m.rel = "stylesheet", m.type = "text/css", m.id = "u" + i++, m.async = !1, m.defer = !1, g = (new Date).getTime(), "onload"in m && !d())m.onload = f, m.onerror = c; else { + if (navigator.userAgent.indexOf("Firefox") > 0)return h = e.createElement("style"), h.textContent = '@import "' + t + '"', p(), void n(h); + f() + } + n(m), m.href = t + } + } + + var i = 0, o = {}, a; + t = t || {}, a = t.maxLoadTime || 5e3, this.load = r + } + }), r(v, [l, c, d, u, p, m, h, f, g], function (e, n, r, i, o, a, s, l, c) { + function d(e, t) { + var i = this, o; + i.doc = e, i.win = window, i.files = {}, i.counter = 0, i.stdMode = !v || e.documentMode >= 8, i.boxModel = !v || "CSS1Compat" == e.compatMode || i.stdMode, i.hasOuterHTML = "outerHTML"in e.createElement("a"), i.styleSheetLoader = new c(e), this.boundEvents = [], i.settings = t = h({keep_values: !1, hex_colors: 1}, t), i.schema = t.schema, i.styles = new n({url_converter: t.url_converter, url_converter_scope: t.url_converter_scope}, t.schema), i.fixDoc(e), i.events = t.ownEvents ? new r(t.proxy) : r.Event, o = t.schema ? t.schema.getBlockElements() : {}, i.isBlock = function (e) { + if (!e)return!1; + var t = e.nodeType; + return t ? !(1 !== t || !o[e.nodeName]) : !!o[e] + } + } + + var u = l.each, f = l.is, p = l.grep, m = l.trim, h = l.extend, g = s.webkit, v = s.ie, y = /^([a-z0-9],?)+$/i, b = /^[ \t\r\n]*$/, C = l.makeMap("fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom", " "); + return d.prototype = {root: null, props: {"for": "htmlFor", "class": "className", className: "className", checked: "checked", disabled: "disabled", maxlength: "maxLength", readonly: "readOnly", selected: "selected", value: "value", id: "id", name: "name", type: "type"}, fixDoc: function (e) { + var t = this.settings, n; + if (v && t.schema) { + "abbr article aside audio canvas details figcaption figure footer header hgroup mark menu meter nav output progress section summary time video".replace(/\w+/g, function (t) { + e.createElement(t) + }); + for (n in t.schema.getCustomElements())e.createElement(n) + } + }, clone: function (e, t) { + var n = this, r, i; + return!v || 1 !== e.nodeType || t ? e.cloneNode(t) : (i = n.doc, t ? r.firstChild : (r = i.createElement(e.nodeName), u(n.getAttribs(e), function (t) { + n.setAttrib(r, t.nodeName, n.getAttrib(e, t.nodeName)) + }), r)) + }, getRoot: function () { + var e = this; + return e.get(e.settings.root_element) || e.doc.body + }, getViewPort: function (e) { + var t, n; + return e = e ? e : this.win, t = e.document, n = this.boxModel ? t.documentElement : t.body, {x: e.pageXOffset || n.scrollLeft, y: e.pageYOffset || n.scrollTop, w: e.innerWidth || n.clientWidth, h: e.innerHeight || n.clientHeight} + }, getRect: function (e) { + var t = this, n, r; + return e = t.get(e), n = t.getPos(e), r = t.getSize(e), {x: n.x, y: n.y, w: r.w, h: r.h} + }, getSize: function (e) { + var t = this, n, r; + return e = t.get(e), n = t.getStyle(e, "width"), r = t.getStyle(e, "height"), -1 === n.indexOf("px") && (n = 0), -1 === r.indexOf("px") && (r = 0), {w: parseInt(n, 10) || e.offsetWidth || e.clientWidth, h: parseInt(r, 10) || e.offsetHeight || e.clientHeight} + }, getParent: function (e, t, n) { + return this.getParents(e, t, n, !1) + }, getParents: function (e, n, r, i) { + var o = this, a, s = []; + for (e = o.get(e), i = i === t, r = r || ("BODY" != o.getRoot().nodeName ? o.getRoot().parentNode : null), f(n, "string") && (a = n, n = "*" === n ? function (e) { + return 1 == e.nodeType + } : function (e) { + return o.is(e, a) + }); e && e != r && e.nodeType && 9 !== e.nodeType;) { + if (!n || n(e)) { + if (!i)return e; + s.push(e) + } + e = e.parentNode + } + return i ? s : null + }, get: function (e) { + var t; + return e && this.doc && "string" == typeof e && (t = e, e = this.doc.getElementById(e), e && e.id !== t) ? this.doc.getElementsByName(t)[1] : e + }, getNext: function (e, t) { + return this._findSib(e, t, "nextSibling") + }, getPrev: function (e, t) { + return this._findSib(e, t, "previousSibling") + }, select: function (t, n) { + var r = this; + return e(t, r.get(n) || r.get(r.settings.root_element) || r.doc, []) + }, is: function (n, r) { + var i; + if (n.length === t) { + if ("*" === r)return 1 == n.nodeType; + if (y.test(r)) { + for (r = r.toLowerCase().split(/,/), n = n.nodeName.toLowerCase(), i = r.length - 1; i >= 0; i--)if (r[i] == n)return!0; + return!1 + } + } + return n.nodeType && 1 != n.nodeType ? !1 : e.matches(r, n.nodeType ? [n] : n).length > 0 + }, add: function (e, t, n, r, i) { + var o = this; + return this.run(e, function (e) { + var a; + return a = f(t, "string") ? o.doc.createElement(t) : t, o.setAttribs(a, n), r && (r.nodeType ? a.appendChild(r) : o.setHTML(a, r)), i ? a : e.appendChild(a) + }) + }, create: function (e, t, n) { + return this.add(this.doc.createElement(e), e, t, n, 1) + }, createHTML: function (e, t, n) { + var r = "", i; + r += "<" + e; + for (i in t)t.hasOwnProperty(i) && null !== t[i] && (r += " " + i + '="' + this.encode(t[i]) + '"'); + return"undefined" != typeof n ? r + ">" + n + "" : r + " />" + }, createFragment: function (e) { + var t, n, r = this.doc, i; + for (i = r.createElement("div"), t = r.createDocumentFragment(), e && (i.innerHTML = e); n = i.firstChild;)t.appendChild(n); + return t + }, remove: function (e, t) { + return this.run(e, function (e) { + var n, r = e.parentNode; + if (!r)return null; + if (t)for (; n = e.firstChild;)!v || 3 !== n.nodeType || n.nodeValue ? r.insertBefore(n, e) : e.removeChild(n); + return r.removeChild(e) + }) + }, setStyle: function (e, t, n) { + return this.run(e, function (e) { + var r = this, i, o; + if (t)if ("string" == typeof t) { + i = e.style, t = t.replace(/-(\D)/g, function (e, t) { + return t.toUpperCase() + }), "number" != typeof n || C[t] || (n += "px"), "opacity" === t && e.runtimeStyle && "undefined" == typeof e.runtimeStyle.opacity && (i.filter = "" === n ? "" : "alpha(opacity=" + 100 * n + ")"), "float" == t && (t = "cssFloat"in e.style ? "cssFloat" : "styleFloat"); + try { + i[t] = n + } catch (a) { + } + r.settings.update_styles && e.removeAttribute("data-mce-style") + } else for (o in t)r.setStyle(e, o, t[o]) + }) + }, getStyle: function (e, n, r) { + if (e = this.get(e)) { + if (this.doc.defaultView && r) { + n = n.replace(/[A-Z]/g, function (e) { + return"-" + e + }); + try { + return this.doc.defaultView.getComputedStyle(e, null).getPropertyValue(n) + } catch (i) { + return null + } + } + return n = n.replace(/-(\D)/g, function (e, t) { + return t.toUpperCase() + }), "float" == n && (n = v ? "styleFloat" : "cssFloat"), e.currentStyle && r ? e.currentStyle[n] : e.style ? e.style[n] : t + } + }, setStyles: function (e, t) { + this.setStyle(e, t) + }, css: function (e, t, n) { + this.setStyle(e, t, n) + }, removeAllAttribs: function (e) { + return this.run(e, function (e) { + var t, n = e.attributes; + for (t = n.length - 1; t >= 0; t--)e.removeAttributeNode(n.item(t)) + }) + }, setAttrib: function (e, t, n) { + var r = this; + if (e && t)return this.run(e, function (e) { + var i = r.settings, o = e.getAttribute(t); + if (null !== n)switch (t) { + case"style": + if (!f(n, "string"))return void u(n, function (t, n) { + r.setStyle(e, n, t) + }); + i.keep_values && (n ? e.setAttribute("data-mce-style", n, 2) : e.removeAttribute("data-mce-style", 2)), e.style.cssText = n; + break; + case"class": + e.className = n || ""; + break; + case"src": + case"href": + i.keep_values && (i.url_converter && (n = i.url_converter.call(i.url_converter_scope || r, n, t, e)), r.setAttrib(e, "data-mce-" + t, n, 2)); + break; + case"shape": + e.setAttribute("data-mce-style", n) + } + f(n) && null !== n && 0 !== n.length ? e.setAttribute(t, "" + n, 2) : e.removeAttribute(t, 2), o != n && i.onSetAttrib && i.onSetAttrib({attrElm: e, attrName: t, attrValue: n}) + }) + }, setAttribs: function (e, t) { + var n = this; + return this.run(e, function (e) { + u(t, function (t, r) { + n.setAttrib(e, r, t) + }) + }) + }, getAttrib: function (e, t, n) { + var r, i = this, o; + if (e = i.get(e), !e || 1 !== e.nodeType)return n === o ? !1 : n; + if (f(n) || (n = ""), /^(src|href|style|coords|shape)$/.test(t) && (r = e.getAttribute("data-mce-" + t)))return r; + if (v && i.props[t] && (r = e[i.props[t]], r = r && r.nodeValue ? r.nodeValue : r), r || (r = e.getAttribute(t, 2)), /^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(t))return e[i.props[t]] === !0 && "" === r ? t : r ? t : ""; + if ("FORM" === e.nodeName && e.getAttributeNode(t))return e.getAttributeNode(t).nodeValue; + if ("style" === t && (r = r || e.style.cssText, r && (r = i.serializeStyle(i.parseStyle(r), e.nodeName), i.settings.keep_values && e.setAttribute("data-mce-style", r))), g && "class" === t && r && (r = r.replace(/(apple|webkit)\-[a-z\-]+/gi, "")), v)switch (t) { + case"rowspan": + case"colspan": + 1 === r && (r = ""); + break; + case"size": + ("+0" === r || 20 === r || 0 === r) && (r = ""); + break; + case"width": + case"height": + case"vspace": + case"checked": + case"disabled": + case"readonly": + 0 === r && (r = ""); + break; + case"hspace": + -1 === r && (r = ""); + break; + case"maxlength": + case"tabindex": + (32768 === r || 2147483647 === r || "32768" === r) && (r = ""); + break; + case"multiple": + case"compact": + case"noshade": + case"nowrap": + return 65535 === r ? t : n; + case"shape": + r = r.toLowerCase(); + break; + default: + 0 === t.indexOf("on") && r && (r = ("" + r).replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/, "$1")) + } + return r !== o && null !== r && "" !== r ? "" + r : n + }, getPos: function (e, t) { + var n = this, r = 0, i = 0, o, a = n.doc, s; + if (e = n.get(e), t = t || a.body, e) { + if (t === a.body && e.getBoundingClientRect)return s = e.getBoundingClientRect(), t = n.boxModel ? a.documentElement : a.body, r = s.left + (a.documentElement.scrollLeft || a.body.scrollLeft) - t.clientLeft, i = s.top + (a.documentElement.scrollTop || a.body.scrollTop) - t.clientTop, {x: r, y: i}; + for (o = e; o && o != t && o.nodeType;)r += o.offsetLeft || 0, i += o.offsetTop || 0, o = o.offsetParent; + for (o = e.parentNode; o && o != t && o.nodeType;)r -= o.scrollLeft || 0, i -= o.scrollTop || 0, o = o.parentNode + } + return{x: r, y: i} + }, parseStyle: function (e) { + return this.styles.parse(e) + }, serializeStyle: function (e, t) { + return this.styles.serialize(e, t) + }, addStyle: function (e) { + var t = this, n = t.doc, r, i; + if (t !== d.DOM && n === document) { + var o = d.DOM.addedStyles; + if (o = o || [], o[e])return; + o[e] = !0, d.DOM.addedStyles = o + } + i = n.getElementById("mceDefaultStyles"), i || (i = n.createElement("style"), i.id = "mceDefaultStyles", i.type = "text/css", r = n.getElementsByTagName("head")[0], r.firstChild ? r.insertBefore(i, r.firstChild) : r.appendChild(i)), i.styleSheet ? i.styleSheet.cssText += e : i.appendChild(n.createTextNode(e)) + }, loadCSS: function (e) { + var t = this, n = t.doc, r; + return t !== d.DOM && n === document ? void d.DOM.loadCSS(e) : (e || (e = ""), r = n.getElementsByTagName("head")[0], void u(e.split(","), function (e) { + var i; + t.files[e] || (t.files[e] = !0, i = t.create("link", {rel: "stylesheet", href: e}), v && n.documentMode && n.recalc && (i.onload = function () { + n.recalc && n.recalc(), i.onload = null + }), r.appendChild(i)) + })) + }, addClass: function (e, t) { + return this.run(e, function (e) { + var n; + return t ? this.hasClass(e, t) ? e.className : (n = this.removeClass(e, t), e.className = n = ("" !== n ? n + " " : "") + t, n) : 0 + }) + }, removeClass: function (e, t) { + var n = this, r; + return n.run(e, function (e) { + var i; + return n.hasClass(e, t) ? (r || (r = new RegExp("(^|\\s+)" + t + "(\\s+|$)", "g")), i = e.className.replace(r, " "), i = m(" " != i ? i : ""), e.className = i, i || (e.removeAttribute("class"), e.removeAttribute("className")), i) : e.className + }) + }, hasClass: function (e, t) { + return e = this.get(e), e && t ? -1 !== (" " + e.className + " ").indexOf(" " + t + " ") : !1 + }, toggleClass: function (e, n, r) { + r = r === t ? !this.hasClass(e, n) : r, this.hasClass(e, n) !== r && (r ? this.addClass(e, n) : this.removeClass(e, n)) + }, show: function (e) { + return this.setStyle(e, "display", "block") + }, hide: function (e) { + return this.setStyle(e, "display", "none") + }, isHidden: function (e) { + return e = this.get(e), !e || "none" == e.style.display || "none" == this.getStyle(e, "display") + }, uniqueId: function (e) { + return(e ? e : "mce_") + this.counter++ + }, setHTML: function (e, t) { + var n = this; + return n.run(e, function (e) { + if (v) { + for (; e.firstChild;)e.removeChild(e.firstChild); + try { + e.innerHTML = "
    " + t, e.removeChild(e.firstChild) + } catch (r) { + var i = n.create("div"); + i.innerHTML = "
    " + t, u(p(i.childNodes), function (t, n) { + n && e.canHaveHTML && e.appendChild(t) + }) + } + } else e.innerHTML = t; + return t + }) + }, getOuterHTML: function (e) { + var t, n = this; + return(e = n.get(e)) ? 1 === e.nodeType && n.hasOuterHTML ? e.outerHTML : (t = (e.ownerDocument || n.doc).createElement("body"), t.appendChild(e.cloneNode(!0)), t.innerHTML) : null + }, setOuterHTML: function (e, t, n) { + var r = this; + return r.run(e, function (e) { + function i() { + var i, o; + for (o = n.createElement("body"), o.innerHTML = t, i = o.lastChild; i;)r.insertAfter(i.cloneNode(!0), e), i = i.previousSibling; + r.remove(e) + } + + if (1 == e.nodeType)if (n = n || e.ownerDocument || r.doc, v)try { + 1 == e.nodeType && r.hasOuterHTML ? e.outerHTML = t : i() + } catch (o) { + i() + } else i() + }) + }, decode: a.decode, encode: a.encodeAllRaw, insertAfter: function (e, t) { + return t = this.get(t), this.run(e, function (e) { + var n, r; + return n = t.parentNode, r = t.nextSibling, r ? n.insertBefore(e, r) : n.appendChild(e), e + }) + }, replace: function (e, t, n) { + var r = this; + return r.run(t, function (t) { + return f(t, "array") && (e = e.cloneNode(!0)), n && u(p(t.childNodes), function (t) { + e.appendChild(t) + }), t.parentNode.replaceChild(e, t) + }) + }, rename: function (e, t) { + var n = this, r; + return e.nodeName != t.toUpperCase() && (r = n.create(t), u(n.getAttribs(e), function (t) { + n.setAttrib(r, t.nodeName, n.getAttrib(e, t.nodeName)) + }), n.replace(r, e, 1)), r || e + }, findCommonAncestor: function (e, t) { + for (var n = e, r; n;) { + for (r = t; r && n != r;)r = r.parentNode; + if (n == r)break; + n = n.parentNode + } + return!n && e.ownerDocument ? e.ownerDocument.documentElement : n + }, toHex: function (e) { + return this.styles.toHex(l.trim(e)) + }, run: function (e, t, n) { + var r = this, i; + return"string" == typeof e && (e = r.get(e)), e ? (n = n || this, e.nodeType || !e.length && 0 !== e.length ? t.call(n, e) : (i = [], u(e, function (e, o) { + e && ("string" == typeof e && (e = r.get(e)), i.push(t.call(n, e, o))) + }), i)) : !1 + }, getAttribs: function (e) { + var t; + if (e = this.get(e), !e)return[]; + if (v) { + if (t = [], "OBJECT" == e.nodeName)return e.attributes; + "OPTION" === e.nodeName && this.getAttrib(e, "selected") && t.push({specified: 1, nodeName: "selected"}); + var n = /<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi; + return e.cloneNode(!1).outerHTML.replace(n, "").replace(/[\w:\-]+/gi, function (e) { + t.push({specified: 1, nodeName: e}) + }), t + } + return e.attributes + }, isEmpty: function (e, t) { + var n = this, r, o, a, s, l, c = 0; + if (e = e.firstChild) { + s = new i(e, e.parentNode), t = t || n.schema ? n.schema.getNonEmptyElements() : null; + do { + if (a = e.nodeType, 1 === a) { + if (e.getAttribute("data-mce-bogus"))continue; + if (l = e.nodeName.toLowerCase(), t && t[l]) { + if ("br" === l) { + c++; + continue + } + return!1 + } + for (o = n.getAttribs(e), r = e.attributes.length; r--;)if (l = e.attributes[r].nodeName, "name" === l || "data-mce-bookmark" === l)return!1 + } + if (8 == a)return!1; + if (3 === a && !b.test(e.nodeValue))return!1 + } while (e = s.next()) + } + return 1 >= c + }, createRng: function () { + var e = this.doc; + return e.createRange ? e.createRange() : new o(this) + }, nodeIndex: function (e, t) { + var n = 0, r, i, o; + if (e)for (r = e.nodeType, e = e.previousSibling, i = e; e; e = e.previousSibling)o = e.nodeType, (!t || 3 != o || o != r && e.nodeValue.length) && (n++, r = o); + return n + }, split: function (e, t, n) { + function r(e) { + function t(e) { + var t = e.previousSibling && "SPAN" == e.previousSibling.nodeName, n = e.nextSibling && "SPAN" == e.nextSibling.nodeName; + return t && n + } + + var n, o = e.childNodes, a = e.nodeType; + if (1 != a || "bookmark" != e.getAttribute("data-mce-type")) { + for (n = o.length - 1; n >= 0; n--)r(o[n]); + if (9 != a) { + if (3 == a && e.nodeValue.length > 0) { + var s = m(e.nodeValue).length; + if (!i.isBlock(e.parentNode) || s > 0 || 0 === s && t(e))return + } else if (1 == a && (o = e.childNodes, 1 == o.length && o[0] && 1 == o[0].nodeType && "bookmark" == o[0].getAttribute("data-mce-type") && e.parentNode.insertBefore(o[0], e), o.length || /^(br|hr|input|img)$/i.test(e.nodeName)))return; + i.remove(e) + } + return e + } + } + + var i = this, o = i.createRng(), a, s, l; + return e && t ? (o.setStart(e.parentNode, i.nodeIndex(e)), o.setEnd(t.parentNode, i.nodeIndex(t)), a = o.extractContents(), o = i.createRng(), o.setStart(t.parentNode, i.nodeIndex(t) + 1), o.setEnd(e.parentNode, i.nodeIndex(e) + 1), s = o.extractContents(), l = e.parentNode, l.insertBefore(r(a), e), n ? l.replaceChild(n, t) : l.insertBefore(t, e), l.insertBefore(r(s), e), i.remove(e), n || t) : void 0 + }, bind: function (e, t, n, r) { + var i = this; + if (l.isArray(e)) { + for (var o = e.length; o--;)e[o] = i.bind(e[o], t, n, r); + return e + } + return!i.settings.collect || e !== i.doc && e !== i.win || i.boundEvents.push([e, t, n, r]), i.events.bind(e, t, n, r || i) + }, unbind: function (e, t, n) { + var r = this, i; + if (l.isArray(e)) { + for (i = e.length; i--;)e[i] = r.unbind(e[i], t, n); + return e + } + if (r.boundEvents && (e === r.doc || e === r.win))for (i = r.boundEvents.length; i--;) { + var o = r.boundEvents[i]; + e != o[0] || t && t != o[1] || n && n != o[2] || this.events.unbind(o[0], o[1], o[2]) + } + return this.events.unbind(e, t, n) + }, fire: function (e, t, n) { + return this.events.fire(e, t, n) + }, getContentEditable: function (e) { + var t; + return 1 != e.nodeType ? null : (t = e.getAttribute("data-mce-contenteditable"), t && "inherit" !== t ? t : "inherit" !== e.contentEditable ? e.contentEditable : null) + }, destroy: function () { + var t = this; + if (t.boundEvents) { + for (var n = t.boundEvents.length; n--;) { + var r = t.boundEvents[n]; + this.events.unbind(r[0], r[1], r[2]) + } + t.boundEvents = null + } + e.setDocument && e.setDocument(), t.win = t.doc = t.root = t.events = t.frag = null + }, dumpRng: function (e) { + return"startContainer: " + e.startContainer.nodeName + ", startOffset: " + e.startOffset + ", endContainer: " + e.endContainer.nodeName + ", endOffset: " + e.endOffset + }, _findSib: function (e, t, n) { + var r = this, i = t; + if (e)for ("string" == typeof i && (i = function (e) { + return r.is(e, t) + }), e = e[n]; e; e = e[n])if (i(e))return e; + return null + }}, d.DOM = new d(document), d + }), r(y, [v, f], function (e, t) { + function n() { + function e(e, t) { + function n() { + o.remove(s), a && (a.onreadystatechange = a.onload = a = null), t() + } + + function i() { + "undefined" != typeof console && console.log && console.log("Failed to load: " + e) + } + + var o = r, a, s; + s = o.uniqueId(), a = document.createElement("script"), a.id = s, a.type = "text/javascript", a.src = e, "onreadystatechange"in a ? a.onreadystatechange = function () { + /loaded|complete/.test(a.readyState) && n() + } : a.onload = n, a.onerror = i, (document.getElementsByTagName("head")[0] || document.body).appendChild(a) + } + + var t = 0, n = 1, a = 2, s = {}, l = [], c = {}, d = [], u = 0, f; + this.isDone = function (e) { + return s[e] == a + }, this.markDone = function (e) { + s[e] = a + }, this.add = this.load = function (e, n, r) { + var i = s[e]; + i == f && (l.push(e), s[e] = t), n && (c[e] || (c[e] = []), c[e].push({func: n, scope: r || this})) + }, this.loadQueue = function (e, t) { + this.loadScripts(l, e, t) + }, this.loadScripts = function (t, r, l) { + function p(e) { + i(c[e], function (e) { + e.func.call(e.scope) + }), c[e] = f + } + + var m; + d.push({func: r, scope: l || this}), (m = function () { + var r = o(t); + t.length = 0, i(r, function (t) { + return s[t] == a ? void p(t) : void(s[t] != n && (s[t] = n, u++, e(t, function () { + s[t] = a, u--, p(t), m() + }))) + }), u || (i(d, function (e) { + e.func.call(e.scope) + }), d.length = 0) + })() + } + } + + var r = e.DOM, i = t.each, o = t.grep; + return n.ScriptLoader = new n, n + }), r(b, [y, f], function (e, n) { + function r() { + var e = this; + e.items = [], e.urls = {}, e.lookup = {} + } + + var i = n.each; + return r.prototype = {get: function (e) { + return this.lookup[e] ? this.lookup[e].instance : t + }, dependencies: function (e) { + var t; + return this.lookup[e] && (t = this.lookup[e].dependencies), t || [] + }, requireLangPack: function (t, n) { + if (r.language && r.languageLoad !== !1) { + if (n && new RegExp("([, ]|\\b)" + r.language + "([, ]|\\b)").test(n) === !1)return; + e.ScriptLoader.add(this.urls[t] + "/langs/" + r.language + ".js") + } + }, add: function (e, t, n) { + return this.items.push(t), this.lookup[e] = {instance: t, dependencies: n}, t + }, createUrl: function (e, t) { + return"object" == typeof t ? t : {prefix: e.prefix, resource: t, suffix: e.suffix} + }, addComponents: function (t, n) { + var r = this.urls[t]; + i(n, function (t) { + e.ScriptLoader.add(r + "/" + t) + }) + }, load: function (n, o, a, s) { + function l() { + var r = c.dependencies(n); + i(r, function (e) { + var n = c.createUrl(o, e); + c.load(n.resource, n, t, t) + }), a && a.call(s ? s : e) + } + + var c = this, d = o; + c.urls[n] || ("object" == typeof o && (d = o.prefix + o.resource + o.suffix), 0 !== d.indexOf("/") && -1 == d.indexOf("://") && (d = r.baseURL + "/" + d), c.urls[n] = d.substring(0, d.lastIndexOf("/")), c.lookup[n] ? l() : e.ScriptLoader.add(d, l, s)) + }}, r.PluginManager = new r, r.ThemeManager = new r, r + }), r(C, [], function () { + function e(e, t, n) { + var r, i, o = n ? "lastChild" : "firstChild", a = n ? "prev" : "next"; + if (e[o])return e[o]; + if (e !== t) { + if (r = e[a])return r; + for (i = e.parent; i && i !== t; i = i.parent)if (r = i[a])return r + } + } + + function t(e, t) { + this.name = e, this.type = t, 1 === t && (this.attributes = [], this.attributes.map = {}) + } + + var n = /^[ \t\r\n]*$/, r = {"#text": 3, "#comment": 8, "#cdata": 4, "#pi": 7, "#doctype": 10, "#document-fragment": 11}; + return t.prototype = {replace: function (e) { + var t = this; + return e.parent && e.remove(), t.insert(e, t), t.remove(), t + }, attr: function (e, t) { + var n = this, r, i, o; + if ("string" != typeof e) { + for (i in e)n.attr(i, e[i]); + return n + } + if (r = n.attributes) { + if (t !== o) { + if (null === t) { + if (e in r.map)for (delete r.map[e], i = r.length; i--;)if (r[i].name === e)return r = r.splice(i, 1), n; + return n + } + if (e in r.map) { + for (i = r.length; i--;)if (r[i].name === e) { + r[i].value = t; + break + } + } else r.push({name: e, value: t}); + return r.map[e] = t, n + } + return r.map[e] + } + }, clone: function () { + var e = this, n = new t(e.name, e.type), r, i, o, a, s; + if (o = e.attributes) { + for (s = [], s.map = {}, r = 0, i = o.length; i > r; r++)a = o[r], "id" !== a.name && (s[s.length] = {name: a.name, value: a.value}, s.map[a.name] = a.value); + n.attributes = s + } + return n.value = e.value, n.shortEnded = e.shortEnded, n + }, wrap: function (e) { + var t = this; + return t.parent.insert(e, t), e.append(t), t + }, unwrap: function () { + var e = this, t, n; + for (t = e.firstChild; t;)n = t.next, e.insert(t, e, !0), t = n; + e.remove() + }, remove: function () { + var e = this, t = e.parent, n = e.next, r = e.prev; + return t && (t.firstChild === e ? (t.firstChild = n, n && (n.prev = null)) : r.next = n, t.lastChild === e ? (t.lastChild = r, r && (r.next = null)) : n.prev = r, e.parent = e.next = e.prev = null), e + }, append: function (e) { + var t = this, n; + return e.parent && e.remove(), n = t.lastChild, n ? (n.next = e, e.prev = n, t.lastChild = e) : t.lastChild = t.firstChild = e, e.parent = t, e + }, insert: function (e, t, n) { + var r; + return e.parent && e.remove(), r = t.parent || this, n ? (t === r.firstChild ? r.firstChild = e : t.prev.next = e, e.prev = t.prev, e.next = t, t.prev = e) : (t === r.lastChild ? r.lastChild = e : t.next.prev = e, e.next = t.next, e.prev = t, t.next = e), e.parent = r, e + }, getAll: function (t) { + var n = this, r, i = []; + for (r = n.firstChild; r; r = e(r, n))r.name === t && i.push(r); + return i + }, empty: function () { + var t = this, n, r, i; + if (t.firstChild) { + for (n = [], i = t.firstChild; i; i = e(i, t))n.push(i); + for (r = n.length; r--;)i = n[r], i.parent = i.firstChild = i.lastChild = i.next = i.prev = null + } + return t.firstChild = t.lastChild = null, t + }, isEmpty: function (t) { + var r = this, i = r.firstChild, o, a; + if (i)do { + if (1 === i.type) { + if (i.attributes.map["data-mce-bogus"])continue; + if (t[i.name])return!1; + for (o = i.attributes.length; o--;)if (a = i.attributes[o].name, "name" === a || 0 === a.indexOf("data-mce-"))return!1 + } + if (8 === i.type)return!1; + if (3 === i.type && !n.test(i.value))return!1 + } while (i = e(i, r)); + return!0 + }, walk: function (t) { + return e(this, null, t) + }}, t.create = function (e, n) { + var i, o; + if (i = new t(e, r[e] || 1), n)for (o in n)i.attr(o, n[o]); + return i + }, t + }), r(x, [f], function (e) { + function t(e, t) { + return e ? e.split(t || " ") : [] + } + + function n(e) { + function n(e, n, r) { + function i(e) { + var t = {}, n, r; + for (n = 0, r = e.length; r > n; n++)t[e[n]] = {}; + return t + } + + var o, l, c, d = arguments; + for (r = r || [], n = n || "", "string" == typeof r && (r = t(r)), l = 3; l < d.length; l++)"string" == typeof d[l] && (d[l] = t(d[l])), r.push.apply(r, d[l]); + for (e = t(e), o = e.length; o--;)c = [].concat(s, t(n)), a[e[o]] = {attributes: i(c), attributesOrder: c, children: i(r)} + } + + function i(e, n) { + var r, i, o, s; + for (e = t(e), r = e.length, n = t(n); r--;)for (i = a[e[r]], o = 0, s = n.length; s > o; o++)i.attributes[n[o]] = {}, i.attributesOrder.push(n[o]) + } + + var a = {}, s, l, c, d, u, f, p; + return r[e] ? r[e] : (s = t("id accesskey class dir lang style tabindex title"), l = t("onabort onblur oncancel oncanplay oncanplaythrough onchange onclick onclose oncontextmenu oncuechange ondblclick ondrag ondragend ondragenter ondragleave ondragover ondragstart ondrop ondurationchange onemptied onended onerror onfocus oninput oninvalid onkeydown onkeypress onkeyup onload onloadeddata onloadedmetadata onloadstart onmousedown onmousemove onmouseout onmouseover onmouseup onmousewheel onpause onplay onplaying onprogress onratechange onreset onscroll onseeked onseeking onseeking onselect onshow onstalled onsubmit onsuspend ontimeupdate onvolumechange onwaiting"), c = t("address blockquote div dl fieldset form h1 h2 h3 h4 h5 h6 hr menu ol p pre table ul"), d = t("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"), "html4" != e && (s.push.apply(s, t("contenteditable contextmenu draggable dropzone hidden spellcheck translate")), c.push.apply(c, t("article aside details dialog figure header footer hgroup section nav")), d.push.apply(d, t("audio canvas command datalist mark meter output progress time wbr video ruby bdi keygen"))), "html5-strict" != e && (s.push("xml:lang"), p = t("acronym applet basefont big font strike tt"), d.push.apply(d, p), o(p, function (e) { + n(e, "", d) + }), f = t("center dir isindex noframes"), c.push.apply(c, f), u = [].concat(c, d), o(f, function (e) { + n(e, "", u) + })), u = u || [].concat(c, d), n("html", "manifest", "head body"), n("head", "", "base command link meta noscript script style title"), n("title hr noscript br"), n("base", "href target"), n("link", "href rel media hreflang type sizes hreflang"), n("meta", "name http-equiv content charset"), n("style", "media type scoped"), n("script", "src async defer type charset"), n("body", "onafterprint onbeforeprint onbeforeunload onblur onerror onfocus onhashchange onload onmessage onoffline ononline onpagehide onpageshow onpopstate onresize onscroll onstorage onunload", u), n("address dt dd div caption", "", u), n("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", "", d), n("blockquote", "cite", u), n("ol", "reversed start type", "li"), n("ul", "", "li"), n("li", "value", u), n("dl", "", "dt dd"), n("a", "href target rel media hreflang type", d), n("q", "cite", d), n("ins del", "cite datetime", u), n("img", "src alt usemap ismap width height"), n("iframe", "src name width height", u), n("embed", "src type width height"), n("object", "data type typemustmatch name usemap form width height", u, "param"), n("param", "name value"), n("map", "name", u, "area"), n("area", "alt coords shape href target rel media hreflang type"), n("table", "border", "caption colgroup thead tfoot tbody tr" + ("html4" == e ? " col" : "")), n("colgroup", "span", "col"), n("col", "span"), n("tbody thead tfoot", "", "tr"), n("tr", "", "td th"), n("td", "colspan rowspan headers", u), n("th", "colspan rowspan headers scope abbr", u), n("form", "accept-charset action autocomplete enctype method name novalidate target", u), n("fieldset", "disabled form name", u, "legend"), n("label", "form for", d), n("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("button", "disabled form formaction formenctype formmethod formnovalidate formtarget name type value", "html4" == e ? u : d), n("select", "disabled form multiple name required size", "option optgroup"), n("optgroup", "disabled label", "option"), n("option", "disabled label selected value"), n("textarea", "cols dirname disabled form maxlength name readonly required rows wrap"), n("menu", "type label", u, "li"), n("noscript", "", u), "html4" != e && (n("wbr"), n("ruby", "", d, "rt rp"), n("figcaption", "", u), n("mark rt rp summary bdi", "", d), n("canvas", "width height", u), n("video", "src crossorigin poster preload autoplay mediagroup loop muted controls width height", u, "track source"), n("audio", "src crossorigin preload autoplay mediagroup loop muted controls", u, "track source"), n("source", "src type media"), n("track", "kind src srclang label default"), n("datalist", "", d, "option"), n("article section nav aside header footer", "", u), n("hgroup", "", "h1 h2 h3 h4 h5 h6"), n("figure", "", u, "figcaption"), n("time", "datetime", d), n("dialog", "open", u), n("command", "type label icon disabled checked radiogroup command"), n("output", "for form name", d), n("progress", "value max", d), n("meter", "value min max low high optimum", d), n("details", "open", u, "summary"), n("keygen", "autofocus challenge disabled form keytype name")), "html5-strict" != e && (i("script", "language xml:space"), i("style", "xml:space"), i("object", "declare classid codebase codetype archive standby align border hspace vspace"), i("param", "valuetype type"), i("a", "charset name rev shape coords"), i("br", "clear"), i("applet", "codebase archive code object alt name width height align hspace vspace"), i("img", "name longdesc align border hspace vspace"), i("iframe", "longdesc frameborder marginwidth marginheight scrolling align"), i("font basefont", "size color face"), i("input", "usemap align"), i("select", "onchange"), i("textarea"), i("h1 h2 h3 h4 h5 h6 div p legend caption", "align"), i("ul", "type compact"), i("li", "type"), i("ol dl menu dir", "compact"), i("pre", "width xml:space"), i("hr", "align noshade size width"), i("isindex", "prompt"), i("table", "summary width frame rules cellspacing cellpadding align bgcolor"), i("col", "width align char charoff valign"), i("colgroup", "width align char charoff valign"), i("thead", "align char charoff valign"), i("tr", "align char charoff valign bgcolor"), i("th", "axis align char charoff valign nowrap bgcolor width height"), i("form", "accept"), i("td", "abbr axis scope align char charoff valign nowrap bgcolor width height"), i("tfoot", "align char charoff valign"), i("tbody", "align char charoff valign"), i("area", "nohref"), i("body", "background bgcolor text link vlink alink")), "html4" != e && (i("input button select textarea", "autofocus"), i("input textarea", "placeholder"), i("a", "download"), i("link script img", "crossorigin"), i("iframe", "srcdoc sandbox seamless allowfullscreen")), o(t("a form meter progress dfn"), function (e) { + a[e] && delete a[e].children[e] + }), delete a.caption.children.table, r[e] = a, a) + } + + var r = {}, i = e.makeMap, o = e.each, a = e.extend, s = e.explode, l = e.inArray; + return function (e) { + function c(t, n, o) { + var s = e[t]; + return s ? s = i(s, ",", i(s.toUpperCase(), " ")) : (s = r[t], s || (s = i(n, " ", i(n.toUpperCase(), " ")), s = a(s, o), r[t] = s)), s + } + + function d(e) { + return new RegExp("^" + e.replace(/([?+*])/g, ".$1") + "$") + } + + function u(e) { + var n, r, o, a, s, c, u, f, p, m, h, g, y, C, x, w, _, N, E, k = /^([#+\-])?([^\[!\/]+)(?:\/([^\[!]+))?(?:(!?)\[([^\]]+)\])?$/, S = /^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/, T = /[*?+]/; + if (e)for (e = t(e, ","), v["@"] && (w = v["@"].attributes, _ = v["@"].attributesOrder), n = 0, r = e.length; r > n; n++)if (s = k.exec(e[n])) { + if (C = s[1], p = s[2], x = s[3], f = s[5], g = {}, y = [], c = {attributes: g, attributesOrder: y}, "#" === C && (c.paddEmpty = !0), "-" === C && (c.removeEmpty = !0), "!" === s[4] && (c.removeEmptyAttrs = !0), w) { + for (N in w)g[N] = w[N]; + y.push.apply(y, _) + } + if (f)for (f = t(f, "|"), o = 0, a = f.length; a > o; o++)if (s = S.exec(f[o])) { + if (u = {}, h = s[1], m = s[2].replace(/::/g, ":"), C = s[3], E = s[4], "!" === h && (c.attributesRequired = c.attributesRequired || [], c.attributesRequired.push(m), u.required = !0), "-" === h) { + delete g[m], y.splice(l(y, m), 1); + continue + } + C && ("=" === C && (c.attributesDefault = c.attributesDefault || [], c.attributesDefault.push({name: m, value: E}), u.defaultValue = E), ":" === C && (c.attributesForced = c.attributesForced || [], c.attributesForced.push({name: m, value: E}), u.forcedValue = E), "<" === C && (u.validValues = i(E, "?"))), T.test(m) ? (c.attributePatterns = c.attributePatterns || [], u.pattern = d(m), c.attributePatterns.push(u)) : (g[m] || y.push(m), g[m] = u) + } + w || "@" != p || (w = g, _ = y), x && (c.outputName = p, v[x] = c), T.test(p) ? (c.pattern = d(p), b.push(c)) : v[p] = c + } + } + + function f(e) { + v = {}, b = [], u(e), o(x, function (e, t) { + y[t] = e.children + }) + } + + function p(e) { + var n = /^(~)?(.+)$/; + e && o(t(e, ","), function (e) { + var t = n.exec(e), r = "~" === t[1], i = r ? "span" : "div", s = t[2]; + if (y[s] = y[i], R[s] = i, r || (k[s.toUpperCase()] = {}, k[s] = {}), !v[s]) { + var l = v[i]; + l = a({}, l), delete l.removeEmptyAttrs, delete l.removeEmpty, v[s] = l + } + o(y, function (e) { + e[i] && (e[s] = e[i]) + }) + }) + } + + function m(e) { + var n = /^([+\-]?)(\w+)\[([^\]]+)\]$/; + e && o(t(e, ","), function (e) { + var r = n.exec(e), i, a; + r && (a = r[1], i = a ? y[r[2]] : y[r[2]] = {"#comment": {}}, i = y[r[2]], o(t(r[3], "|"), function (e) { + "-" === a ? delete i[e] : i[e] = {} + })) + }) + } + + function h(e) { + var t = v[e], n; + if (t)return t; + for (n = b.length; n--;)if (t = b[n], t.pattern.test(e))return t + } + + var g = this, v = {}, y = {}, b = [], C, x, w, _, N, E, k, S, T, R = {}, A = {}; + e = e || {}, x = n(e.schema), e.verify_html === !1 && (e.valid_elements = "*[*]"), e.valid_styles && (C = {}, o(e.valid_styles, function (e, t) { + C[t] = s(e) + })), w = c("whitespace_elements", "pre script noscript style textarea video audio iframe object"), _ = c("self_closing_elements", "colgroup dd dt li option p td tfoot th thead tr"), N = c("short_ended_elements", "area base basefont br col frame hr img input isindex link meta param embed source wbr track"), E = c("boolean_attributes", "checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls"), S = c("non_empty_elements", "td th iframe video audio object script", N), T = c("text_block_elements", "h1 h2 h3 h4 h5 h6 p div address pre form blockquote center dir fieldset header footer article section hgroup aside nav figure"), k = c("block_elements", "hr table tbody thead tfoot th tr td li ol ul caption dl dt dd noscript menu isindex samp option datalist select optgroup", T), o((e.special || "script noscript style textarea").split(" "), function (e) { + A[e] = new RegExp("]*>", "gi") + }), e.valid_elements ? f(e.valid_elements) : (o(x, function (e, t) { + v[t] = {attributes: e.attributes, attributesOrder: e.attributesOrder}, y[t] = e.children + }), "html5" != e.schema && o(t("strong/b em/i"), function (e) { + e = t(e, "/"), v[e[1]].outputName = e[0] + }), v.img.attributesDefault = [ + {name: "alt", value: ""} + ], o(t("ol ul sub sup blockquote span font a table tbody tr strong em b i"), function (e) { + v[e] && (v[e].removeEmpty = !0) + }), o(t("p h1 h2 h3 h4 h5 h6 th td pre div address caption"), function (e) { + v[e].paddEmpty = !0 + }), o(t("span"), function (e) { + v[e].removeEmptyAttrs = !0 + })), p(e.custom_elements), m(e.valid_children), u(e.extended_valid_elements), m("+ol[ul|ol],+ul[ul|ol]"), e.invalid_elements && o(s(e.invalid_elements), function (e) { + v[e] && delete v[e] + }), h("span") || u("span[!data-mce-type|*]"), g.children = y, g.styles = C, g.getBoolAttrs = function () { + return E + }, g.getBlockElements = function () { + return k + }, g.getTextBlockElements = function () { + return T + }, g.getShortEndedElements = function () { + return N + }, g.getSelfClosingElements = function () { + return _ + }, g.getNonEmptyElements = function () { + return S + }, g.getWhiteSpaceElements = function () { + return w + }, g.getSpecialElements = function () { + return A + }, g.isValidChild = function (e, t) { + var n = y[e]; + return!(!n || !n[t]) + }, g.isValid = function (e, t) { + var n, r, i = h(e); + if (i) { + if (!t)return!0; + if (i.attributes[t])return!0; + if (n = i.attributePatterns)for (r = n.length; r--;)if (n[r].pattern.test(e))return!0 + } + return!1 + }, g.getElementRule = h, g.getCustomElements = function () { + return R + }, g.addValidElements = u, g.setValidElements = f, g.addCustomElements = p, g.addValidChildren = m, g.elements = v + } + }), r(w, [x, m, f], function (e, t, n) { + var r = n.each; + return function (i, o) { + var a = this, s = function () { + }; + i = i || {}, a.schema = o = o || new e, i.fix_self_closing !== !1 && (i.fix_self_closing = !0), r("comment cdata text start end pi doctype".split(" "), function (e) { + e && (a[e] = i[e] || s) + }), a.parse = function (e) { + function r(e) { + var t, n; + for (t = f.length; t-- && f[t].name !== e;); + if (t >= 0) { + for (n = f.length - 1; n >= t; n--)e = f[n], e.valid && s.end(e.name); + f.length = t + } + } + + function a(e, t, n, r, o) { + var a, s, l = /[\s\u0000-\u001F]+/g; + if (t = t.toLowerCase(), n = t in C ? t : z(n || r || o || ""), w && !v && 0 !== t.indexOf("data-")) { + if (a = S[t], !a && T) { + for (s = T.length; s-- && (a = T[s], !a.pattern.test(t));); + -1 === s && (a = null) + } + if (!a)return; + if (a.validValues && !(n in a.validValues))return + } + if (W[t] && !i.allow_script_urls) { + var c = n.replace(l, ""); + try { + if (c = decodeURIComponent(c), V.test(c))return + } catch (d) { + if (c = unescape(c), V.test(c))return + } + } + p.map[t] = n, p.push({name: t, value: n}) + } + + var s = this, l, c = 0, d, u, f = [], p, m, h, g, v, y, b, C, x, w, _, N, E, k, S, T, R, A, B, L, H, M, D, P, O, I = 0, z = t.decode, F, W = n.makeMap("src,href"), V = /(java|vb)script:/i; + for (M = new RegExp("<(?:(?:!--([\\w\\W]*?)-->)|(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|(?:!DOCTYPE([\\w\\W]*?)>)|(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|(?:\\/([^>]+)>)|(?:([A-Za-z0-9\\-\\:\\.]+)((?:\\s+[^\"'>]+(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>]*))*|\\/|\\s+)>))", "g"), D = /([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g, b = o.getShortEndedElements(), H = i.self_closing_elements || o.getSelfClosingElements(), C = o.getBoolAttrs(), w = i.validate, y = i.remove_internals, F = i.fix_self_closing, P = o.getSpecialElements(); l = M.exec(e);) { + if (c < l.index && s.text(z(e.substr(c, l.index - c))), d = l[6])d = d.toLowerCase(), ":" === d.charAt(0) && (d = d.substr(1)), r(d); else if (d = l[7]) { + if (d = d.toLowerCase(), ":" === d.charAt(0) && (d = d.substr(1)), x = d in b, F && H[d] && f.length > 0 && f[f.length - 1].name === d && r(d), !w || (_ = o.getElementRule(d))) { + if (N = !0, w && (S = _.attributes, T = _.attributePatterns), (k = l[8]) ? (v = -1 !== k.indexOf("data-mce-type"), v && y && (N = !1), p = [], p.map = {}, k.replace(D, a)) : (p = [], p.map = {}), w && !v) { + if (R = _.attributesRequired, A = _.attributesDefault, B = _.attributesForced, L = _.removeEmptyAttrs, L && !p.length && (N = !1), B)for (m = B.length; m--;)E = B[m], g = E.name, O = E.value, "{$uid}" === O && (O = "mce_" + I++), p.map[g] = O, p.push({name: g, value: O}); + if (A)for (m = A.length; m--;)E = A[m], g = E.name, g in p.map || (O = E.value, "{$uid}" === O && (O = "mce_" + I++), p.map[g] = O, p.push({name: g, value: O})); + if (R) { + for (m = R.length; m-- && !(R[m]in p.map);); + -1 === m && (N = !1) + } + p.map["data-mce-bogus"] && (N = !1) + } + N && s.start(d, p, x) + } else N = !1; + if (u = P[d]) { + u.lastIndex = c = l.index + l[0].length, (l = u.exec(e)) ? (N && (h = e.substr(c, l.index - c)), c = l.index + l[0].length) : (h = e.substr(c), c = e.length), N && (h.length > 0 && s.text(h, !0), s.end(d)), M.lastIndex = c; + continue + } + x || (k && k.indexOf("/") == k.length - 1 ? N && s.end(d) : f.push({name: d, valid: N})) + } else(d = l[1]) ? (">" === d.charAt(0) && (d = " " + d), i.allow_conditional_comments || "[if" !== d.substr(0, 3) || (d = " " + d), s.comment(d)) : (d = l[2]) ? s.cdata(d) : (d = l[3]) ? s.doctype(d) : (d = l[4]) && s.pi(d, l[5]); + c = l.index + l[0].length + } + for (c < e.length && s.text(z(e.substr(c))), m = f.length - 1; m >= 0; m--)d = f[m], d.valid && s.end(d.name) + } + } + }), r(_, [C, x, w, f], function (e, t, n, r) { + var i = r.makeMap, o = r.each, a = r.explode, s = r.extend; + return function (r, l) { + function c(t) { + var n, r, o, a, s, c, u, f, p, m, h, g, v, y; + for (h = i("tr,td,th,tbody,thead,tfoot,table"), m = l.getNonEmptyElements(), g = l.getTextBlockElements(), n = 0; n < t.length; n++)if (r = t[n], r.parent && !r.fixed)if (g[r.name] && "li" == r.parent.name) { + for (v = r.next; v && g[v.name];)v.name = "li", v.fixed = !0, r.parent.insert(v, r.parent), v = v.next; + r.unwrap(r) + } else { + for (a = [r], o = r.parent; o && !l.isValidChild(o.name, r.name) && !h[o.name]; o = o.parent)a.push(o); + if (o && a.length > 1) { + for (a.reverse(), s = c = d.filterNode(a[0].clone()), p = 0; p < a.length - 1; p++) { + for (l.isValidChild(c.name, a[p].name) ? (u = d.filterNode(a[p].clone()), c.append(u)) : u = c, f = a[p].firstChild; f && f != a[p + 1];)y = f.next, u.append(f), f = y; + c = u + } + s.isEmpty(m) ? o.insert(r, a[0], !0) : (o.insert(s, a[0], !0), o.insert(r, s)), o = a[0], (o.isEmpty(m) || o.firstChild === o.lastChild && "br" === o.firstChild.name) && o.empty().remove() + } else if (r.parent) { + if ("li" === r.name) { + if (v = r.prev, v && ("ul" === v.name || "ul" === v.name)) { + v.append(r); + continue + } + if (v = r.next, v && ("ul" === v.name || "ul" === v.name)) { + v.insert(r, v.firstChild, !0); + continue + } + r.wrap(d.filterNode(new e("ul", 1))); + continue + } + l.isValidChild(r.parent.name, "div") && l.isValidChild("div", r.name) ? r.wrap(d.filterNode(new e("div", 1))) : "style" === r.name || "script" === r.name ? r.empty().remove() : r.unwrap() + } + } + } + + var d = this, u = {}, f = [], p = {}, m = {}; + r = r || {}, r.validate = "validate"in r ? r.validate : !0, r.root_name = r.root_name || "body", d.schema = l = l || new t, d.filterNode = function (e) { + var t, n, r; + n in u && (r = p[n], r ? r.push(e) : p[n] = [e]), t = f.length; + for (; t--;)n = f[t].name, n in e.attributes.map && (r = m[n], r ? r.push(e) : m[n] = [e]); + return e + }, d.addNodeFilter = function (e, t) { + o(a(e), function (e) { + var n = u[e]; + n || (u[e] = n = []), n.push(t) + }) + }, d.addAttributeFilter = function (e, t) { + o(a(e), function (e) { + var n; + for (n = 0; n < f.length; n++)if (f[n].name === e)return void f[n].callbacks.push(t); + f.push({name: e, callbacks: [t]}) + }) + }, d.parse = function (t, o) { + function a() { + function e(e) { + e && (t = e.firstChild, t && 3 == t.type && (t.value = t.value.replace(R, "")), t = e.lastChild, t && 3 == t.type && (t.value = t.value.replace(L, ""))) + } + + var t = y.firstChild, n, i; + if (l.isValidChild(y.name, I.toLowerCase())) { + for (; t;)n = t.next, 3 == t.type || 1 == t.type && "p" !== t.name && !T[t.name] && !t.attr("data-mce-type") ? i ? i.append(t) : (i = d(I, 1), i.attr(r.forced_root_block_attrs), y.insert(i, t), i.append(t)) : (e(i), i = null), t = n; + e(i) + } + } + + function d(t, n) { + var r = new e(t, n), i; + return t in u && (i = p[t], i ? i.push(r) : p[t] = [r]), r + } + + function h(e) { + var t, n, r; + for (t = e.prev; t && 3 === t.type;)n = t.value.replace(L, ""), n.length > 0 ? (t.value = n, t = t.prev) : (r = t.prev, t.remove(), t = r) + } + + function g(e) { + var t, n = {}; + for (t in e)"li" !== t && "p" != t && (n[t] = e[t]); + return n + } + + var v, y, b, C, x, w, _, N, E, k, S, T, R, A = [], B, L, H, M, D, P, O, I; + if (o = o || {}, p = {}, m = {}, T = s(i("script,style,head,html,body,title,meta,param"), l.getBlockElements()), O = l.getNonEmptyElements(), P = l.children, S = r.validate, I = "forced_root_block"in o ? o.forced_root_block : r.forced_root_block, D = l.getWhiteSpaceElements(), R = /^[ \t\r\n]+/, L = /[ \t\r\n]+$/, H = /[ \t\r\n]+/g, M = /^[ \t\r\n]+$/, v = new n({validate: S, allow_script_urls: r.allow_script_urls, allow_conditional_comments: r.allow_conditional_comments, self_closing_elements: g(l.getSelfClosingElements()), cdata: function (e) { + b.append(d("#cdata", 4)).value = e + }, text: function (e, t) { + var n; + B || (e = e.replace(H, " "), b.lastChild && T[b.lastChild.name] && (e = e.replace(R, ""))), 0 !== e.length && (n = d("#text", 3), n.raw = !!t, b.append(n).value = e) + }, comment: function (e) { + b.append(d("#comment", 8)).value = e + }, pi: function (e, t) { + b.append(d(e, 7)).value = t, h(b) + }, doctype: function (e) { + var t; + t = b.append(d("#doctype", 10)), t.value = e, h(b) + }, start: function (e, t, n) { + var r, i, o, a, s; + if (o = S ? l.getElementRule(e) : {}) { + for (r = d(o.outputName || e, 1), r.attributes = t, r.shortEnded = n, b.append(r), s = P[b.name], s && P[r.name] && !s[r.name] && A.push(r), i = f.length; i--;)a = f[i].name, a in t.map && (E = m[a], E ? E.push(r) : m[a] = [r]); + T[e] && h(r), n || (b = r), !B && D[e] && (B = !0) + } + }, end: function (t) { + var n, r, i, o, a; + if (r = S ? l.getElementRule(t) : {}) { + if (T[t] && !B) { + if (n = b.firstChild, n && 3 === n.type)if (i = n.value.replace(R, ""), i.length > 0)n.value = i, n = n.next; else for (o = n.next, n.remove(), n = o; n && 3 === n.type;)i = n.value, o = n.next, (0 === i.length || M.test(i)) && (n.remove(), n = o), n = o; + if (n = b.lastChild, n && 3 === n.type)if (i = n.value.replace(L, ""), i.length > 0)n.value = i, n = n.prev; else for (o = n.prev, n.remove(), n = o; n && 3 === n.type;)i = n.value, o = n.prev, (0 === i.length || M.test(i)) && (n.remove(), n = o), n = o + } + if (B && D[t] && (B = !1), (r.removeEmpty || r.paddEmpty) && b.isEmpty(O))if (r.paddEmpty)b.empty().append(new e("#text", "3")).value = "\xa0"; else if (!b.attributes.map.name && !b.attributes.map.id)return a = b.parent, b.empty().remove(), void(b = a); + b = b.parent + } + }}, l), y = b = new e(o.context || r.root_name, 11), v.parse(t), S && A.length && (o.context ? o.invalid = !0 : c(A)), I && ("body" == y.name || o.isRootContent) && a(), !o.invalid) { + for (k in p) { + for (E = u[k], C = p[k], _ = C.length; _--;)C[_].parent || C.splice(_, 1); + for (x = 0, w = E.length; w > x; x++)E[x](C, k, o) + } + for (x = 0, w = f.length; w > x; x++)if (E = f[x], E.name in m) { + for (C = m[E.name], _ = C.length; _--;)C[_].parent || C.splice(_, 1); + for (_ = 0, N = E.callbacks.length; N > _; _++)E.callbacks[_](C, E.name, o) + } + } + return y + }, r.remove_trailing_brs && d.addNodeFilter("br", function (t) { + var n, r = t.length, i, o = s({}, l.getBlockElements()), a = l.getNonEmptyElements(), c, d, u, f, p, m; + for (o.body = 1, n = 0; r > n; n++)if (i = t[n], c = i.parent, o[i.parent.name] && i === c.lastChild) { + for (u = i.prev; u;) { + if (f = u.name, "span" !== f || "bookmark" !== u.attr("data-mce-type")) { + if ("br" !== f)break; + if ("br" === f) { + i = null; + break + } + } + u = u.prev + } + i && (i.remove(), c.isEmpty(a) && (p = l.getElementRule(c.name), p && (p.removeEmpty ? c.remove() : p.paddEmpty && (c.empty().append(new e("#text", 3)).value = "\xa0")))) + } else { + for (d = i; c && c.firstChild === d && c.lastChild === d && (d = c, !o[c.name]);)c = c.parent; + d === c && (m = new e("#text", 3), m.value = "\xa0", i.replace(m)) + } + }), r.allow_html_in_named_anchor || d.addAttributeFilter("id,name", function (e) { + for (var t = e.length, n, r, i, o; t--;)if (o = e[t], "a" === o.name && o.firstChild && !o.attr("href")) { + i = o.parent, n = o.lastChild; + do r = n.prev, i.insert(n, o), n = r; while (n) + } + }) + } + }), r(N, [m, f], function (e, t) { + var n = t.makeMap; + return function (t) { + var r = [], i, o, a, s, l; + return t = t || {}, i = t.indent, o = n(t.indent_before || ""), a = n(t.indent_after || ""), s = e.getEncodeFunc(t.entity_encoding || "raw", t.entities), l = "html" == t.element_format, {start: function (e, t, n) { + var c, d, u, f; + if (i && o[e] && r.length > 0 && (f = r[r.length - 1], f.length > 0 && "\n" !== f && r.push("\n")), r.push("<", e), t)for (c = 0, d = t.length; d > c; c++)u = t[c], r.push(" ", u.name, '="', s(u.value, !0), '"'); + r[r.length] = !n || l ? ">" : " />", n && i && a[e] && r.length > 0 && (f = r[r.length - 1], f.length > 0 && "\n" !== f && r.push("\n")) + }, end: function (e) { + var t; + r.push(""), i && a[e] && r.length > 0 && (t = r[r.length - 1], t.length > 0 && "\n" !== t && r.push("\n")) + }, text: function (e, t) { + e.length > 0 && (r[r.length] = t ? e : s(e)) + }, cdata: function (e) { + r.push("") + }, comment: function (e) { + r.push("") + }, pi: function (e, t) { + t ? r.push("") : r.push(""), i && r.push("\n") + }, doctype: function (e) { + r.push("", i ? "\n" : "") + }, reset: function () { + r.length = 0 + }, getContent: function () { + return r.join("").replace(/\n$/, "") + }} + } + }), r(E, [N, x], function (e, t) { + return function (n, r) { + var i = this, o = new e(n); + n = n || {}, n.validate = "validate"in n ? n.validate : !0, i.schema = r = r || new t, i.writer = o, i.serialize = function (e) { + function t(e) { + var n = i[e.type], s, l, c, d, u, f, p, m, h; + if (n)n(e); else { + if (s = e.name, l = e.shortEnded, c = e.attributes, a && c && c.length > 1) { + for (f = [], f.map = {}, h = r.getElementRule(e.name), p = 0, m = h.attributesOrder.length; m > p; p++)d = h.attributesOrder[p], d in c.map && (u = c.map[d], f.map[d] = u, f.push({name: d, value: u})); + for (p = 0, m = c.length; m > p; p++)d = c[p].name, d in f.map || (u = c.map[d], f.map[d] = u, f.push({name: d, value: u})); + c = f + } + if (o.start(e.name, c, l), !l) { + if (e = e.firstChild)do t(e); while (e = e.next); + o.end(s) + } + } + } + + var i, a; + return a = n.validate, i = {3: function (e) { + o.text(e.value, e.raw) + }, 8: function (e) { + o.comment(e.value) + }, 7: function (e) { + o.pi(e.name, e.value) + }, 10: function (e) { + o.doctype(e.value) + }, 4: function (e) { + o.cdata(e.value) + }, 11: function (e) { + if (e = e.firstChild)do t(e); while (e = e.next) + }}, o.reset(), 1 != e.type || n.inner ? i[11](e) : t(e), o.getContent() + } + } + }), r(k, [v, _, m, E, C, x, h, f], function (e, t, n, r, i, o, a, s) { + var l = s.each, c = s.trim, d = e.DOM; + return function (e, i) { + var s, u, f; + return i && (s = i.dom, u = i.schema), s = s || d, u = u || new o(e), e.entity_encoding = e.entity_encoding || "named", e.remove_trailing_brs = "remove_trailing_brs"in e ? e.remove_trailing_brs : !0, f = new t(e, u), f.addAttributeFilter("src,href,style", function (t, n) { + for (var r = t.length, i, o, a = "data-mce-" + n, l = e.url_converter, c = e.url_converter_scope, d; r--;)i = t[r], o = i.attributes.map[a], o !== d ? (i.attr(n, o.length > 0 ? o : null), i.attr(a, null)) : (o = i.attributes.map[n], "style" === n ? o = s.serializeStyle(s.parseStyle(o), i.name) : l && (o = l.call(c, o, n, i.name)), i.attr(n, o.length > 0 ? o : null)) + }), f.addAttributeFilter("class", function (e) { + for (var t = e.length, n, r; t--;)n = e[t], r = n.attr("class").replace(/(?:^|\s)mce-item-\w+(?!\S)/g, ""), n.attr("class", r.length > 0 ? r : null) + }), f.addAttributeFilter("data-mce-type", function (e, t, n) { + for (var r = e.length, i; r--;)i = e[r], "bookmark" !== i.attributes.map["data-mce-type"] || n.cleanup || i.remove() + }), f.addAttributeFilter("data-mce-expando", function (e, t) { + for (var n = e.length; n--;)e[n].attr(t, null) + }), f.addNodeFilter("noscript", function (e) { + for (var t = e.length, r; t--;)r = e[t].firstChild, r && (r.value = n.decode(r.value)) + }), f.addNodeFilter("script,style", function (e, t) { + function n(e) { + return e.replace(/()/g, "\n").replace(/^[\r\n]*|[\r\n]*$/g, "").replace(/^\s*(()?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g, "") + } + + for (var r = e.length, i, o; r--;)if (i = e[r], o = i.firstChild ? i.firstChild.value : "", "script" === t) { + var a = (i.attr("type") || "text/javascript").replace(/^mce\-/, ""); + i.attr("type", "text/javascript" === a ? null : a), o.length > 0 && (i.firstChild.value = "// ") + } else o.length > 0 && (i.firstChild.value = "") + }), f.addNodeFilter("#comment", function (e) { + for (var t = e.length, n; t--;)n = e[t], 0 === n.value.indexOf("[CDATA[") ? (n.name = "#cdata", n.type = 4, n.value = n.value.replace(/^\[CDATA\[|\]\]$/g, "")) : 0 === n.value.indexOf("mce:protected ") && (n.name = "#text", n.type = 3, n.raw = !0, n.value = unescape(n.value).substr(14)) + }), f.addNodeFilter("xml:namespace,input", function (e, t) { + for (var n = e.length, r; n--;)r = e[n], 7 === r.type ? r.remove() : 1 === r.type && ("input" !== t || "type"in r.attributes.map || r.attr("type", "text")) + }), e.fix_list_elements && f.addNodeFilter("ul,ol", function (e) { + for (var t = e.length, n, r; t--;)n = e[t], r = n.parent, ("ul" === r.name || "ol" === r.name) && n.prev && "li" === n.prev.name && n.prev.append(n) + }), f.addAttributeFilter("data-mce-src,data-mce-href,data-mce-style,data-mce-selected", function (e, t) { + for (var n = e.length; n--;)e[n].attr(t, null) + }), {schema: u, addNodeFilter: f.addNodeFilter, addAttributeFilter: f.addAttributeFilter, serialize: function (t, n) { + var i = this, o, d, p, m, h; + return a.ie && s.select("script,style,select,map").length > 0 ? (h = t.innerHTML, t = t.cloneNode(!1), s.setHTML(t, h)) : t = t.cloneNode(!0), o = t.ownerDocument.implementation, o.createHTMLDocument && (d = o.createHTMLDocument(""), l("BODY" == t.nodeName ? t.childNodes : [t], function (e) { + d.body.appendChild(d.importNode(e, !0)) + }), t = "BODY" != t.nodeName ? d.body.firstChild : d.body, p = s.doc, s.doc = d), n = n || {}, n.format = n.format || "html", n.selection && (n.forced_root_block = ""), n.no_events || (n.node = t, i.onPreProcess(n)), m = new r(e, u), n.content = m.serialize(f.parse(c(n.getInner ? t.innerHTML : s.getOuterHTML(t)), n)), n.cleanup || (n.content = n.content.replace(/\uFEFF/g, "")), n.no_events || i.onPostProcess(n), p && (s.doc = p), n.node = null, n.content + }, addRules: function (e) { + u.addValidElements(e) + }, setRules: function (e) { + u.setValidElements(e) + }, onPreProcess: function (e) { + i && i.fire("PreProcess", e) + }, onPostProcess: function (e) { + i && i.fire("PostProcess", e) + }} + } + }), r(S, [], function () { + function e(e) { + function t(t, n) { + var r, i = 0, o, a, s, l, c, d, u = -1, f; + if (r = t.duplicate(), r.collapse(n), f = r.parentElement(), f.ownerDocument === e.dom.doc) { + for (; "false" === f.contentEditable;)f = f.parentNode; + if (!f.hasChildNodes())return{node: f, inside: 1}; + for (s = f.children, o = s.length - 1; o >= i;)if (d = Math.floor((i + o) / 2), l = s[d], r.moveToElementText(l), u = r.compareEndPoints(n ? "StartToStart" : "EndToEnd", t), u > 0)o = d - 1; else { + if (!(0 > u))return{node: l}; + i = d + 1 + } + if (0 > u)for (l ? r.collapse(!1) : (r.moveToElementText(f), r.collapse(!0), l = f, a = !0), c = 0; 0 !== r.compareEndPoints(n ? "StartToStart" : "StartToEnd", t) && 0 !== r.move("character", 1) && f == r.parentElement();)c++; else for (r.collapse(!0), c = 0; 0 !== r.compareEndPoints(n ? "StartToStart" : "StartToEnd", t) && 0 !== r.move("character", -1) && f == r.parentElement();)c++; + return{node: l, position: u, offset: c, inside: a} + } + } + + function n() { + function n(e) { + var n = t(o, e), r, i, s = 0, l, c, d; + if (r = n.node, i = n.offset, n.inside && !r.hasChildNodes())return void a[e ? "setStart" : "setEnd"](r, 0); + if (i === c)return void a[e ? "setStartBefore" : "setEndAfter"](r); + if (n.position < 0) { + if (l = n.inside ? r.firstChild : r.nextSibling, !l)return void a[e ? "setStartAfter" : "setEndAfter"](r); + if (!i)return void(3 == l.nodeType ? a[e ? "setStart" : "setEnd"](l, 0) : a[e ? "setStartBefore" : "setEndBefore"](l)); + for (; l;) { + if (d = l.nodeValue, s += d.length, s >= i) { + r = l, s -= i, s = d.length - s; + break + } + l = l.nextSibling + } + } else { + if (l = r.previousSibling, !l)return a[e ? "setStartBefore" : "setEndBefore"](r); + if (!i)return void(3 == r.nodeType ? a[e ? "setStart" : "setEnd"](l, r.nodeValue.length) : a[e ? "setStartAfter" : "setEndAfter"](l)); + for (; l;) { + if (s += l.nodeValue.length, s >= i) { + r = l, s -= i; + break + } + l = l.previousSibling + } + } + a[e ? "setStart" : "setEnd"](r, s) + } + + var o = e.getRng(), a = i.createRng(), s, l, c, d, u; + if (s = o.item ? o.item(0) : o.parentElement(), s.ownerDocument != i.doc)return a; + if (l = e.isCollapsed(), o.item)return a.setStart(s.parentNode, i.nodeIndex(s)), a.setEnd(a.startContainer, a.startOffset + 1), a; + try { + n(!0), l || n() + } catch (f) { + if (-2147024809 != f.number)throw f; + u = r.getBookmark(2), c = o.duplicate(), c.collapse(!0), s = c.parentElement(), l || (c = o.duplicate(), c.collapse(!1), d = c.parentElement(), d.innerHTML = d.innerHTML), s.innerHTML = s.innerHTML, r.moveToBookmark(u), o = e.getRng(), n(!0), l || n() + } + return a + } + + var r = this, i = e.dom, o = !1; + this.getBookmark = function (n) { + function r(e) { + var t, n, r, o, a = []; + for (t = e.parentNode, n = i.getRoot().parentNode; t != n && 9 !== t.nodeType;) { + for (r = t.children, o = r.length; o--;)if (e === r[o]) { + a.push(o); + break + } + e = t, t = t.parentNode + } + return a + } + + function o(e) { + var n; + return n = t(a, e), n ? {position: n.position, offset: n.offset, indexes: r(n.node), inside: n.inside} : void 0 + } + + var a = e.getRng(), s = {}; + return 2 === n && (a.item ? s.start = {ctrl: !0, indexes: r(a.item(0))} : (s.start = o(!0), e.isCollapsed() || (s.end = o()))), s + }, this.moveToBookmark = function (e) { + function t(e) { + var t, n, r, o; + for (t = i.getRoot(), n = e.length - 1; n >= 0; n--)o = t.children, r = e[n], r <= o.length - 1 && (t = o[r]); + return t + } + + function n(n) { + var i = e[n ? "start" : "end"], a, s, l, c; + i && (a = i.position > 0, s = o.createTextRange(), s.moveToElementText(t(i.indexes)), c = i.offset, c !== l ? (s.collapse(i.inside || a), s.moveStart("character", a ? -c : c)) : s.collapse(n), r.setEndPoint(n ? "StartToStart" : "EndToStart", s), n && r.collapse(!0)) + } + + var r, o = i.doc.body; + e.start && (e.start.ctrl ? (r = o.createControlRange(), r.addElement(t(e.start.indexes)), r.select()) : (r = o.createTextRange(), n(!0), n(), r.select())) + }, this.addRange = function (t) { + function n(e) { + var t, n, a, u, m; + a = i.create("a"), t = e ? s : c, n = e ? l : d, u = r.duplicate(), (t == f || t == f.documentElement) && (t = p, n = 0), 3 == t.nodeType ? (t.parentNode.insertBefore(a, t), u.moveToElementText(a), u.moveStart("character", n), i.remove(a), r.setEndPoint(e ? "StartToStart" : "EndToEnd", u)) : (m = t.childNodes, m.length ? (n >= m.length ? i.insertAfter(a, m[m.length - 1]) : t.insertBefore(a, m[n]), u.moveToElementText(a)) : t.canHaveHTML && (t.innerHTML = "", a = t.firstChild, u.moveToElementText(a), u.collapse(o)), r.setEndPoint(e ? "StartToStart" : "EndToEnd", u), i.remove(a)) + } + + var r, a, s, l, c, d, u, f = e.dom.doc, p = f.body, m, h; + if (s = t.startContainer, l = t.startOffset, c = t.endContainer, d = t.endOffset, r = p.createTextRange(), s == c && 1 == s.nodeType) { + if (l == d && !s.hasChildNodes()) { + if (s.canHaveHTML)return u = s.previousSibling, u && !u.hasChildNodes() && i.isBlock(u) ? u.innerHTML = "" : u = null, s.innerHTML = "", r.moveToElementText(s.lastChild), r.select(), i.doc.selection.clear(), s.innerHTML = "", void(u && (u.innerHTML = "")); + l = i.nodeIndex(s), s = s.parentNode + } + if (l == d - 1)try { + if (h = s.childNodes[l], a = p.createControlRange(), a.addElement(h), a.select(), m = e.getRng(), m.item && h === m.item(0))return + } catch (g) { + } + } + n(!0), n(), r.select() + }, this.getRangeAt = n + } + + return e + }), r(T, [h], function (e) { + return{BACKSPACE: 8, DELETE: 46, DOWN: 40, ENTER: 13, LEFT: 37, RIGHT: 39, SPACEBAR: 32, TAB: 9, UP: 38, modifierPressed: function (e) { + return e.shiftKey || e.ctrlKey || e.altKey + }, metaKeyPressed: function (t) { + return(e.mac ? t.metaKey : t.ctrlKey) && !t.altKey + }} + }), r(R, [T, f, h], function (e, t, n) { + return function (r, i) { + function o(e) { + return i.settings.object_resizing === !1 ? !1 : /TABLE|IMG|DIV/.test(e.nodeName) ? "false" === e.getAttribute("data-mce-resize") ? !1 : !0 : !1 + } + + function a(t) { + var n, r; + n = t.screenX - k, r = t.screenY - S, M = n * N[2] + A, D = r * N[3] + B, M = 5 > M ? 5 : M, D = 5 > D ? 5 : D, (e.modifierPressed(t) || "IMG" == x.nodeName && N[2] * N[3] !== 0) && (M = Math.round(D / L), D = Math.round(M * L)), b.setStyles(w, {width: M, height: D}), N[2] < 0 && w.clientWidth <= M && b.setStyle(w, "left", T + (A - M)), N[3] < 0 && w.clientHeight <= D && b.setStyle(w, "top", R + (B - D)), H || (i.fire("ObjectResizeStart", {target: x, width: A, height: B}), H = !0) + } + + function s() { + function e(e, t) { + t && (x.style[e] || !i.schema.isValid(x.nodeName.toLowerCase(), e) ? b.setStyle(x, e, t) : b.setAttrib(x, e, t)) + } + + H = !1, e("width", M), e("height", D), b.unbind(P, "mousemove", a), b.unbind(P, "mouseup", s), O != P && (b.unbind(O, "mousemove", a), b.unbind(O, "mouseup", s)), b.remove(w), I && "TABLE" != x.nodeName || l(x), i.fire("ObjectResized", {target: x, width: M, height: D}), i.nodeChanged() + } + + function l(e, t, n) { + var r, l, d, u, f, p = i.getBody(); + r = b.getPos(e, p), T = r.x, R = r.y, f = e.getBoundingClientRect(), l = f.width || f.right - f.left, d = f.height || f.bottom - f.top, x != e && (h(), x = e, M = D = 0), u = i.fire("ObjectSelected", {target: e}), o(e) && !u.isDefaultPrevented() ? C(_, function (e, r) { + function o(t) { + H = !0, k = t.screenX, S = t.screenY, A = x.clientWidth, B = x.clientHeight, L = B / A, N = e, w = x.cloneNode(!0), b.addClass(w, "mce-clonedresizable"), w.contentEditable = !1, w.unSelectabe = !0, b.setStyles(w, {left: T, top: R, margin: 0}), w.removeAttribute("data-mce-selected"), i.getBody().appendChild(w), b.bind(P, "mousemove", a), b.bind(P, "mouseup", s), O != P && (b.bind(O, "mousemove", a), b.bind(O, "mouseup", s)) + } + + var c, u; + return t ? void(r == t && o(n)) : (c = b.get("mceResizeHandle" + r), c ? b.show(c) : (u = i.getBody(), c = b.add(u, "div", {id: "mceResizeHandle" + r, "data-mce-bogus": !0, "class": "mce-resizehandle", contentEditable: !1, unSelectabe: !0, style: "cursor:" + r + "-resize; margin:0; padding:0"}), b.bind(c, "mousedown", function (e) { + e.preventDefault(), o(e) + })), void b.setStyles(c, {left: l * e[0] + T - c.offsetWidth / 2, top: d * e[1] + R - c.offsetHeight / 2})) + }) : c(), x.setAttribute("data-mce-selected", "1") + } + + function c() { + var e, t; + x && x.removeAttribute("data-mce-selected"); + for (e in _)t = b.get("mceResizeHandle" + e), t && (b.unbind(t), b.remove(t)) + } + + function d(e) { + function t(e, t) { + if (e)do if (e === t)return!0; while (e = e.parentNode) + } + + var n; + return C(b.select("img[data-mce-selected],hr[data-mce-selected]"), function (e) { + e.removeAttribute("data-mce-selected") + }), n = "mousedown" == e.type ? e.target : r.getNode(), n = b.getParent(n, I ? "table" : "table,img,hr"), t(n, i.getBody()) && (g(), t(r.getStart(), n) && t(r.getEnd(), n) && (!I || n != r.getStart() && "IMG" !== r.getStart().nodeName)) ? void l(n) : void c() + } + + function u(e, t, n) { + e && e.attachEvent && e.attachEvent("on" + t, n) + } + + function f(e, t, n) { + e && e.detachEvent && e.detachEvent("on" + t, n) + } + + function p(e) { + var t = e.srcElement, n, r, o, a, s, c, d; + n = t.getBoundingClientRect(), c = E.clientX - n.left, d = E.clientY - n.top; + for (r in _)if (o = _[r], a = t.offsetWidth * o[0], s = t.offsetHeight * o[1], Math.abs(a - c) < 8 && Math.abs(s - d) < 8) { + N = o; + break + } + H = !0, i.getDoc().selection.empty(), l(t, r, E) + } + + function m(e) { + var t = e.srcElement; + if (t != x) { + if (h(), 0 === t.id.indexOf("mceResizeHandle"))return void(e.returnValue = !1); + ("IMG" == t.nodeName || "TABLE" == t.nodeName) && (c(), x = t, u(t, "resizestart", p)) + } + } + + function h() { + f(x, "resizestart", p) + } + + function g() { + try { + i.getDoc().execCommand("enableObjectResizing", !1, !1) + } catch (e) { + } + } + + function v(e) { + var t; + if (I) { + t = P.body.createControlRange(); + try { + return t.addElement(e), t.select(), !0 + } catch (n) { + } + } + } + + function y() { + x = w = null, I && (h(), f(i.getBody(), "controlselect", m)) + } + + var b = i.dom, C = t.each, x, w, _, N, E, k, S, T, R, A, B, L, H, M, D, P = i.getDoc(), O = document, I = n.ie && n.ie < 11; + _ = {n: [.5, 0, 0, -1], e: [1, .5, 1, 0], s: [.5, 1, 0, 1], w: [0, .5, -1, 0], nw: [0, 0, -1, -1], ne: [1, 0, 1, -1], se: [1, 1, 1, 1], sw: [0, 1, -1, 1]}; + var z = ".mce-content-body"; + return i.contentStyles.push(z + " div.mce-resizehandle {position: absolute;border: 1px solid black;background: #FFF;width: 5px;height: 5px;z-index: 10000}" + z + " .mce-resizehandle:hover {background: #000}" + z + " img[data-mce-selected], hr[data-mce-selected] {outline: 1px solid black;resize: none}" + z + " .mce-clonedresizable {position: absolute;" + (n.gecko ? "" : "outline: 1px dashed black;") + "opacity: .5;filter: alpha(opacity=50);z-index: 10000}"), i.on("init", function () { + I ? (i.on("ObjectResized", function (e) { + "TABLE" != e.target.nodeName && (c(), v(e.target)) + }), u(i.getBody(), "controlselect", m), i.on("mousedown", function (e) { + E = e + })) : (g(), n.ie >= 11 && (i.on("mouseup", function (e) { + var t = e.target.nodeName; + /^(TABLE|IMG|HR)$/.test(t) && (i.selection.select(e.target, "TABLE" == t), i.nodeChanged()) + }), i.dom.bind(i.getBody(), "mscontrolselect", function (e) { + /^(TABLE|IMG|HR)$/.test(e.target.nodeName) && e.preventDefault() + }))), i.on("nodechange mousedown mouseup ResizeEditor", d), i.on("keydown keyup", function (e) { + x && "TABLE" == x.nodeName && d(e) + }) + }), {isResizable: o, showResizeRect: l, hideResizeRect: c, updateResizeRect: d, controlSelect: v, destroy: y} + } + }), r(A, [u, S, R, h, f], function (e, n, r, i, o) { + function a(e, t, i, o) { + var a = this; + a.dom = e, a.win = t, a.serializer = i, a.editor = o, a.controlSelection = new r(a, o), a.win.getSelection || (a.tridentSel = new n(a)) + } + + var s = o.each, l = o.grep, c = o.trim, d = i.ie, u = i.opera; + return a.prototype = {setCursorLocation: function (e, t) { + var n = this, r = n.dom.createRng(); + e ? (r.setStart(e, t), r.setEnd(e, t), n.setRng(r), n.collapse(!1)) : (n._moveEndPoint(r, n.editor.getBody(), !0), n.setRng(r)) + }, getContent: function (e) { + var n = this, r = n.getRng(), i = n.dom.create("body"), o = n.getSel(), a, s, l; + return e = e || {}, a = s = "", e.get = !0, e.format = e.format || "html", e.selection = !0, n.editor.fire("BeforeGetContent", e), "text" == e.format ? n.isCollapsed() ? "" : r.text || (o.toString ? o.toString() : "") : (r.cloneContents ? (l = r.cloneContents(), l && i.appendChild(l)) : r.item !== t || r.htmlText !== t ? (i.innerHTML = "
    " + (r.item ? r.item(0).outerHTML : r.htmlText), i.removeChild(i.firstChild)) : i.innerHTML = r.toString(), /^\s/.test(i.innerHTML) && (a = " "), /\s+$/.test(i.innerHTML) && (s = " "), e.getInner = !0, e.content = n.isCollapsed() ? "" : a + n.serializer.serialize(i, e) + s, n.editor.fire("GetContent", e), e.content) + }, setContent: function (e, t) { + var n = this, r = n.getRng(), i, o = n.win.document, a, s; + if (t = t || {format: "html"}, t.set = !0, t.selection = !0, e = t.content = e, t.no_events || n.editor.fire("BeforeSetContent", t), e = t.content, r.insertNode) { + e += '_', r.startContainer == o && r.endContainer == o ? o.body.innerHTML = e : (r.deleteContents(), 0 === o.body.childNodes.length ? o.body.innerHTML = e : r.createContextualFragment ? r.insertNode(r.createContextualFragment(e)) : (a = o.createDocumentFragment(), s = o.createElement("div"), a.appendChild(s), s.outerHTML = e, r.insertNode(a))), i = n.dom.get("__caret"), r = o.createRange(), r.setStartBefore(i), r.setEndBefore(i), n.setRng(r), n.dom.remove("__caret"); + try { + n.setRng(r) + } catch (l) { + } + } else r.item && (o.execCommand("Delete", !1, null), r = n.getRng()), /^\s+/.test(e) ? (r.pasteHTML('_' + e), n.dom.remove("__mce_tmp")) : r.pasteHTML(e); + t.no_events || n.editor.fire("SetContent", t) + }, getStart: function () { + var e = this, t = e.getRng(), n, r, i, o; + if (t.duplicate || t.item) { + if (t.item)return t.item(0); + for (i = t.duplicate(), i.collapse(1), n = i.parentElement(), n.ownerDocument !== e.dom.doc && (n = e.dom.getRoot()), r = o = t.parentElement(); o = o.parentNode;)if (o == n) { + n = r; + break + } + return n + } + return n = t.startContainer, 1 == n.nodeType && n.hasChildNodes() && (n = n.childNodes[Math.min(n.childNodes.length - 1, t.startOffset)]), n && 3 == n.nodeType ? n.parentNode : n + }, getEnd: function () { + var e = this, t = e.getRng(), n, r; + return t.duplicate || t.item ? t.item ? t.item(0) : (t = t.duplicate(), t.collapse(0), n = t.parentElement(), n.ownerDocument !== e.dom.doc && (n = e.dom.getRoot()), n && "BODY" == n.nodeName ? n.lastChild || n : n) : (n = t.endContainer, r = t.endOffset, 1 == n.nodeType && n.hasChildNodes() && (n = n.childNodes[r > 0 ? r - 1 : r]), n && 3 == n.nodeType ? n.parentNode : n) + }, getBookmark: function (e, t) { + function n(e, t) { + var n = 0; + return s(a.select(e), function (e, r) { + e == t && (n = r) + }), n + } + + function r(e) { + function t(t) { + var n, r, i, o = t ? "start" : "end"; + n = e[o + "Container"], r = e[o + "Offset"], 1 == n.nodeType && "TR" == n.nodeName && (i = n.childNodes, n = i[Math.min(t ? r : r - 1, i.length - 1)], n && (r = t ? 0 : n.childNodes.length, e["set" + (t ? "Start" : "End")](n, r))) + } + + return t(!0), t(), e + } + + function i() { + function e(e, n) { + var i = e[n ? "startContainer" : "endContainer"], a = e[n ? "startOffset" : "endOffset"], s = [], l, c, d = 0; + if (3 == i.nodeType) { + if (t)for (l = i.previousSibling; l && 3 == l.nodeType; l = l.previousSibling)a += l.nodeValue.length; + s.push(a) + } else c = i.childNodes, a >= c.length && c.length && (d = 1, a = Math.max(0, c.length - 1)), s.push(o.dom.nodeIndex(c[a], t) + d); + for (; i && i != r; i = i.parentNode)s.push(o.dom.nodeIndex(i, t)); + return s + } + + var n = o.getRng(!0), r = a.getRoot(), i = {}; + return i.start = e(n, !0), o.isCollapsed() || (i.end = e(n)), i + } + + var o = this, a = o.dom, l, c, d, u, f, p, m = "", h; + if (2 == e)return p = o.getNode(), f = p ? p.nodeName : null, "IMG" == f ? {name: f, index: n(f, p)} : o.tridentSel ? o.tridentSel.getBookmark(e) : i(); + if (e)return{rng: o.getRng()}; + if (l = o.getRng(), d = a.uniqueId(), u = o.isCollapsed(), h = "overflow:hidden;line-height:0px", l.duplicate || l.item) { + if (l.item)return p = l.item(0), f = p.nodeName, {name: f, index: n(f, p)}; + c = l.duplicate(); + try { + l.collapse(), l.pasteHTML('' + m + ""), u || (c.collapse(!1), l.moveToElementText(c.parentElement()), 0 === l.compareEndPoints("StartToEnd", c) && c.move("character", -1), c.pasteHTML('' + m + "")) + } catch (g) { + return null + } + } else { + if (p = o.getNode(), f = p.nodeName, "IMG" == f)return{name: f, index: n(f, p)}; + c = r(l.cloneRange()), u || (c.collapse(!1), c.insertNode(a.create("span", {"data-mce-type": "bookmark", id: d + "_end", style: h}, m))), l = r(l), l.collapse(!0), l.insertNode(a.create("span", {"data-mce-type": "bookmark", id: d + "_start", style: h}, m)) + } + return o.moveToBookmark({id: d, keep: 1}), {id: d} + }, moveToBookmark: function (e) { + function t(t) { + var n = e[t ? "start" : "end"], r, i, o, s; + if (n) { + for (o = n[0], i = c, r = n.length - 1; r >= 1; r--) { + if (s = i.childNodes, n[r] > s.length - 1)return; + i = s[n[r]] + } + 3 === i.nodeType && (o = Math.min(n[0], i.nodeValue.length)), 1 === i.nodeType && (o = Math.min(n[0], i.childNodes.length)), t ? a.setStart(i, o) : a.setEnd(i, o) + } + return!0 + } + + function n(t) { + var n = o.get(e.id + "_" + t), r, i, a, c, d = e.keep; + if (n && (r = n.parentNode, "start" == t ? (d ? (r = n.firstChild, i = 1) : i = o.nodeIndex(n), f = p = r, m = h = i) : (d ? (r = n.firstChild, i = 1) : i = o.nodeIndex(n), p = r, h = i), !d)) { + for (c = n.previousSibling, a = n.nextSibling, s(l(n.childNodes), function (e) { + 3 == e.nodeType && (e.nodeValue = e.nodeValue.replace(/\uFEFF/g, "")) + }); n = o.get(e.id + "_" + t);)o.remove(n, 1); + c && a && c.nodeType == a.nodeType && 3 == c.nodeType && !u && (i = c.nodeValue.length, c.appendData(a.nodeValue), o.remove(a), "start" == t ? (f = p = c, m = h = i) : (p = c, h = i)) + } + } + + function r(e) { + return!o.isBlock(e) || e.innerHTML || d || (e.innerHTML = '
    '), e + } + + var i = this, o = i.dom, a, c, f, p, m, h; + if (e)if (e.start) { + if (a = o.createRng(), c = o.getRoot(), i.tridentSel)return i.tridentSel.moveToBookmark(e); + t(!0) && t() && i.setRng(a) + } else e.id ? (n("start"), n("end"), f && (a = o.createRng(), a.setStart(r(f), m), a.setEnd(r(p), h), i.setRng(a))) : e.name ? i.select(o.select(e.name)[e.index]) : e.rng && i.setRng(e.rng) + }, select: function (e, t) { + var n = this, r = n.dom, i = r.createRng(), o; + if (n.lastFocusBookmark = null, e) { + if (!t && n.controlSelection.controlSelect(e))return; + o = r.nodeIndex(e), i.setStart(e.parentNode, o), i.setEnd(e.parentNode, o + 1), t && (n._moveEndPoint(i, e, !0), n._moveEndPoint(i, e)), n.setRng(i) + } + return e + }, isCollapsed: function () { + var e = this, t = e.getRng(), n = e.getSel(); + return!t || t.item ? !1 : t.compareEndPoints ? 0 === t.compareEndPoints("StartToEnd", t) : !n || t.collapsed + }, collapse: function (e) { + var t = this, n = t.getRng(), r; + n.item && (r = n.item(0), n = t.win.document.body.createTextRange(), n.moveToElementText(r)), n.collapse(!!e), t.setRng(n) + }, getSel: function () { + var e = this.win; + return e.getSelection ? e.getSelection() : e.document.selection + }, getRng: function (e) { + var t = this, n, r, i, o = t.win.document, a; + if (!e && t.lastFocusBookmark) { + var s = t.lastFocusBookmark; + return s.startContainer ? (r = o.createRange(), r.setStart(s.startContainer, s.startOffset), r.setEnd(s.endContainer, s.endOffset)) : r = s, r + } + if (e && t.tridentSel)return t.tridentSel.getRangeAt(0); + try { + (n = t.getSel()) && (r = n.rangeCount > 0 ? n.getRangeAt(0) : n.createRange ? n.createRange() : o.createRange()) + } catch (l) { + } + if (d && r && r.setStart && o.selection) { + try { + a = o.selection.createRange() + } catch (l) { + } + a && a.item && (i = a.item(0), r = o.createRange(), r.setStartBefore(i), r.setEndAfter(i)) + } + return r || (r = o.createRange ? o.createRange() : o.body.createTextRange()), r.setStart && 9 === r.startContainer.nodeType && r.collapsed && (i = t.dom.getRoot(), r.setStart(i, 0), r.setEnd(i, 0)), t.selectedRange && t.explicitRange && (0 === r.compareBoundaryPoints(r.START_TO_START, t.selectedRange) && 0 === r.compareBoundaryPoints(r.END_TO_END, t.selectedRange) ? r = t.explicitRange : (t.selectedRange = null, t.explicitRange = null)), r + }, setRng: function (e, t) { + var n = this, r; + if (e.select)try { + e.select() + } catch (i) { + } else if (n.tridentSel) { + if (e.cloneRange)try { + return void n.tridentSel.addRange(e) + } catch (i) { + } + } else if (r = n.getSel()) { + n.explicitRange = e; + try { + r.removeAllRanges(), r.addRange(e) + } catch (i) { + } + t === !1 && r.extend && (r.collapse(e.endContainer, e.endOffset), r.extend(e.startContainer, e.startOffset)), n.selectedRange = r.rangeCount > 0 ? r.getRangeAt(0) : null + } + }, setNode: function (e) { + var t = this; + return t.setContent(t.dom.getOuterHTML(e)), e + }, getNode: function () { + function e(e, t) { + for (var n = e; e && 3 === e.nodeType && 0 === e.length;)e = t ? e.nextSibling : e.previousSibling; + return e || n + } + + var t = this, n = t.getRng(), r, i = n.startContainer, o = n.endContainer, a = n.startOffset, s = n.endOffset, l = t.dom.getRoot(); + return n ? n.setStart ? (r = n.commonAncestorContainer, !n.collapsed && (i == o && 2 > s - a && i.hasChildNodes() && (r = i.childNodes[a]), 3 === i.nodeType && 3 === o.nodeType && (i = i.length === a ? e(i.nextSibling, !0) : i.parentNode, o = 0 === s ? e(o.previousSibling, !1) : o.parentNode, i && i === o)) ? i : r && 3 == r.nodeType ? r.parentNode : r) : (r = n.item ? n.item(0) : n.parentElement(), r.ownerDocument !== t.win.document && (r = l), r) : l + }, getSelectedBlocks: function (t, n) { + var r = this, i = r.dom, o, a, s = []; + if (a = i.getRoot(), t = i.getParent(t || r.getStart(), i.isBlock), n = i.getParent(n || r.getEnd(), i.isBlock), t && t != a && s.push(t), t && n && t != n) { + o = t; + for (var l = new e(t, a); (o = l.next()) && o != n;)i.isBlock(o) && s.push(o) + } + return n && t != n && n != a && s.push(n), s + }, isForward: function () { + var e = this.dom, t = this.getSel(), n, r; + return t && t.anchorNode && t.focusNode ? (n = e.createRng(), n.setStart(t.anchorNode, t.anchorOffset), n.collapse(!0), r = e.createRng(), r.setStart(t.focusNode, t.focusOffset), r.collapse(!0), n.compareBoundaryPoints(n.START_TO_START, r) <= 0) : !0 + }, normalize: function () { + function t(t) { + function a(t, n) { + for (var r = new e(t, f.getParent(t.parentNode, f.isBlock) || p); t = r[n ? "prev" : "next"]();)if ("BR" === t.nodeName)return!0 + } + + function s(e, t) { + return e.previousSibling && e.previousSibling.nodeName == t + } + + function l(t, n) { + var r, a; + for (n = n || c, r = new e(n, f.getParent(n.parentNode, f.isBlock) || p); m = r[t ? "prev" : "next"]();) { + if (3 === m.nodeType && m.nodeValue.length > 0)return c = m, d = t ? m.nodeValue.length : 0, void(i = !0); + if (f.isBlock(m) || h[m.nodeName.toLowerCase()])return; + a = m + } + o && a && (c = a, i = !0, d = 0) + } + + var c, d, u, f = n.dom, p = f.getRoot(), m, h, g, v; + if (c = r[(t ? "start" : "end") + "Container"], d = r[(t ? "start" : "end") + "Offset"], h = f.schema.getNonEmptyElements(), v = t, 1 == c.nodeType && d > c.childNodes.length - 1 && (v = !1), 9 === c.nodeType && (c = f.getRoot(), d = 0), c === p) { + if (v && (m = c.childNodes[d > 0 ? d - 1 : 0], m && (g = m.nodeName.toLowerCase(), h[m.nodeName] || "TABLE" == m.nodeName)))return; + if (c.hasChildNodes() && (d = Math.min(!v && d > 0 ? d - 1 : d, c.childNodes.length - 1), c = c.childNodes[d], d = 0, c.hasChildNodes() && !/TABLE/.test(c.nodeName))) { + m = c, u = new e(c, p); + do { + if (3 === m.nodeType && m.nodeValue.length > 0) { + d = v ? 0 : m.nodeValue.length, c = m, i = !0; + break + } + if (h[m.nodeName.toLowerCase()]) { + d = f.nodeIndex(m), c = m.parentNode, "IMG" != m.nodeName || v || d++, i = !0; + break + } + } while (m = v ? u.next() : u.prev()) + } + } + o && (3 === c.nodeType && 0 === d && l(!0), 1 === c.nodeType && (m = c.childNodes[d], !m || "BR" !== m.nodeName || s(m, "A") || a(m) || a(m, !0) || l(!0, c.childNodes[d]))), v && !o && 3 === c.nodeType && d === c.nodeValue.length && l(!1), i && r["set" + (t ? "Start" : "End")](c, d) + } + + var n = this, r, i, o; + d || (r = n.getRng(), o = r.collapsed, t(!0), o || t(), i && (o && r.collapse(!0), n.setRng(r, n.isForward()))) + }, selectorChanged: function (e, t) { + var n = this, r; + return n.selectorChangedData || (n.selectorChangedData = {}, r = {}, n.editor.on("NodeChange", function (e) { + var t = e.element, i = n.dom, o = i.getParents(t, null, i.getRoot()), a = {}; + s(n.selectorChangedData, function (e, t) { + s(o, function (n) { + return i.is(n, t) ? (r[t] || (s(e, function (e) { + e(!0, {node: n, selector: t, parents: o}) + }), r[t] = e), a[t] = e, !1) : void 0 + }) + }), s(r, function (e, n) { + a[n] || (delete r[n], s(e, function (e) { + e(!1, {node: t, selector: n, parents: o}) + })) + }) + })), n.selectorChangedData[e] || (n.selectorChangedData[e] = []), n.selectorChangedData[e].push(t), n + }, getScrollContainer: function () { + for (var e, t = this.dom.getRoot(); t && "BODY" != t.nodeName;) { + if (t.scrollHeight > t.clientHeight) { + e = t; + break + } + t = t.parentNode + } + return e + }, scrollIntoView: function (e) { + function t(e) { + for (var t = 0, n = 0, r = e; r && r.nodeType;)t += r.offsetLeft || 0, n += r.offsetTop || 0, r = r.offsetParent; + return{x: t, y: n} + } + + var n, r, i = this, o = i.dom, a = o.getRoot(), s, l; + if ("BODY" != a.nodeName) { + var c = i.getScrollContainer(); + if (c)return n = t(e).y - t(c).y, l = c.clientHeight, s = c.scrollTop, void((s > n || n + 25 > s + l) && (c.scrollTop = s > n ? n : n - l + 25)) + } + r = o.getViewPort(i.editor.getWin()), n = o.getPos(e).y, s = r.y, l = r.h, (n < r.y || n + 25 > s + l) && i.editor.getWin().scrollTo(0, s > n ? n : n - l + 25) + }, _moveEndPoint: function (t, n, r) { + var o = n, a = new e(n, o), s = this.dom.schema.getNonEmptyElements(); + do { + if (3 == n.nodeType && 0 !== c(n.nodeValue).length)return void(r ? t.setStart(n, 0) : t.setEnd(n, n.nodeValue.length)); + if (s[n.nodeName])return void(r ? t.setStartBefore(n) : "BR" == n.nodeName ? t.setEndBefore(n) : t.setEndAfter(n)); + if (i.ie && i.ie < 11 && this.dom.isBlock(n) && this.dom.isEmpty(n))return void(r ? t.setStart(n, 0) : t.setEnd(n, 0)) + } while (n = r ? a.next() : a.prev()); + "BODY" == o.nodeName && (r ? t.setStart(o, 0) : t.setEnd(o, o.childNodes.length)) + }, destroy: function () { + this.win = null, this.controlSelection.destroy() + }}, a + }), r(B, [f], function (e) { + function t(e) { + this.walk = function (t, r) { + function i(e) { + var t; + return t = e[0], 3 === t.nodeType && t === l && c >= t.nodeValue.length && e.splice(0, 1), t = e[e.length - 1], 0 === u && e.length > 0 && t === d && 3 === t.nodeType && e.splice(e.length - 1, 1), e + } + + function o(e, t, n) { + for (var r = []; e && e != n; e = e[t])r.push(e); + return r + } + + function a(e, t) { + do { + if (e.parentNode == t)return e; + e = e.parentNode + } while (e) + } + + function s(e, t, n) { + var a = n ? "nextSibling" : "previousSibling"; + for (h = e, g = h.parentNode; h && h != t; h = g)g = h.parentNode, v = o(h == e ? h : h[a], a), v.length && (n || v.reverse(), r(i(v))) + } + + var l = t.startContainer, c = t.startOffset, d = t.endContainer, u = t.endOffset, f, p, m, h, g, v, y; + if (y = e.select("td.mce-item-selected,th.mce-item-selected"), y.length > 0)return void n(y, function (e) { + r([e]) + }); + if (1 == l.nodeType && l.hasChildNodes() && (l = l.childNodes[c]), 1 == d.nodeType && d.hasChildNodes() && (d = d.childNodes[Math.min(u - 1, d.childNodes.length - 1)]), l == d)return r(i([l])); + for (f = e.findCommonAncestor(l, d), h = l; h; h = h.parentNode) { + if (h === d)return s(l, f, !0); + if (h === f)break + } + for (h = d; h; h = h.parentNode) { + if (h === l)return s(d, f); + if (h === f)break + } + p = a(l, f) || l, m = a(d, f) || d, s(l, p, !0), v = o(p == l ? p : p.nextSibling, "nextSibling", m == d ? m.nextSibling : m), v.length && r(i(v)), s(d, m) + }, this.split = function (e) { + function t(e, t) { + return e.splitText(t) + } + + var n = e.startContainer, r = e.startOffset, i = e.endContainer, o = e.endOffset; + return n == i && 3 == n.nodeType ? r > 0 && r < n.nodeValue.length && (i = t(n, r), n = i.previousSibling, o > r ? (o -= r, n = i = t(i, o).previousSibling, o = i.nodeValue.length, r = 0) : o = 0) : (3 == n.nodeType && r > 0 && r < n.nodeValue.length && (n = t(n, r), r = 0), 3 == i.nodeType && o > 0 && o < i.nodeValue.length && (i = t(i, o).previousSibling, o = i.nodeValue.length)), {startContainer: n, startOffset: r, endContainer: i, endOffset: o} + } + } + + var n = e.each; + return t.compareRanges = function (e, t) { + if (e && t) { + if (!e.item && !e.duplicate)return e.startContainer == t.startContainer && e.startOffset == t.startOffset; + if (e.item && t.item && e.item(0) === t.item(0))return!0; + if (e.isEqual && t.isEqual && t.isEqual(e))return!0 + } + return!1 + }, t + }), r(L, [u, B, f], function (e, t, n) { + return function (r) { + function i(e) { + return e.nodeType && (e = e.nodeName), !!r.schema.getTextBlockElements()[e.toLowerCase()] + } + + function o(e, t) { + return I.getParents(e, t, I.getRoot()) + } + + function a(e) { + return 1 === e.nodeType && "_mce_caret" === e.id + } + + function s() { + d({alignleft: [ + {selector: "figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li", styles: {textAlign: "left"}, defaultBlock: "div"}, + {selector: "img,table", collapsed: !1, styles: {"float": "left"}} + ], aligncenter: [ + {selector: "figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li", styles: {textAlign: "center"}, defaultBlock: "div"}, + {selector: "img", collapsed: !1, styles: {display: "block", marginLeft: "auto", marginRight: "auto"}}, + {selector: "table", collapsed: !1, styles: {marginLeft: "auto", marginRight: "auto"}} + ], alignright: [ + {selector: "figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li", styles: {textAlign: "right"}, defaultBlock: "div"}, + {selector: "img,table", collapsed: !1, styles: {"float": "right"}} + ], alignjustify: [ + {selector: "figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li", styles: {textAlign: "justify"}, defaultBlock: "div"} + ], bold: [ + {inline: "strong", remove: "all"}, + {inline: "span", styles: {fontWeight: "bold"}}, + {inline: "b", remove: "all"} + ], italic: [ + {inline: "em", remove: "all"}, + {inline: "span", styles: {fontStyle: "italic"}}, + {inline: "i", remove: "all"} + ], underline: [ + {inline: "span", styles: {textDecoration: "underline"}, exact: !0}, + {inline: "u", remove: "all"} + ], strikethrough: [ + {inline: "span", styles: {textDecoration: "line-through"}, exact: !0}, + {inline: "strike", remove: "all"} + ], forecolor: {inline: "span", styles: {color: "%value"}, wrap_links: !1}, hilitecolor: {inline: "span", styles: {backgroundColor: "%value"}, wrap_links: !1}, fontname: {inline: "span", styles: {fontFamily: "%value"}}, fontsize: {inline: "span", styles: {fontSize: "%value"}}, fontsize_class: {inline: "span", attributes: {"class": "%value"}}, blockquote: {block: "blockquote", wrapper: 1, remove: "all"}, subscript: {inline: "sub"}, superscript: {inline: "sup"}, code: {inline: "code"}, link: {inline: "a", selector: "a", remove: "all", split: !0, deep: !0, onmatch: function () { + return!0 + }, onformat: function (e, t, n) { + et(n, function (t, n) { + I.setAttrib(e, n, t) + }) + }}, removeformat: [ + {selector: "b,strong,em,i,font,u,strike,sub,sup", remove: "all", split: !0, expand: !1, block_expand: !0, deep: !0}, + {selector: "span", attributes: ["style", "class"], remove: "empty", split: !0, expand: !1, deep: !0}, + {selector: "*", attributes: ["style", "class"], split: !1, expand: !1, deep: !0} + ]}), et("p h1 h2 h3 h4 h5 h6 div address pre div dt dd samp".split(/\s/), function (e) { + d(e, {block: e, remove: "all"}) + }), d(r.settings.formats) + } + + function l() { + r.addShortcut("ctrl+b", "bold_desc", "Bold"), r.addShortcut("ctrl+i", "italic_desc", "Italic"), r.addShortcut("ctrl+u", "underline_desc", "Underline"); + for (var e = 1; 6 >= e; e++)r.addShortcut("ctrl+" + e, "", ["FormatBlock", !1, "h" + e]); + r.addShortcut("ctrl+7", "", ["FormatBlock", !1, "p"]), r.addShortcut("ctrl+8", "", ["FormatBlock", !1, "div"]), r.addShortcut("ctrl+9", "", ["FormatBlock", !1, "address"]) + } + + function c(e) { + return e ? O[e] : O + } + + function d(e, t) { + e && ("string" != typeof e ? et(e, function (e, t) { + d(t, e) + }) : (t = t.length ? t : [t], et(t, function (e) { + e.deep === X && (e.deep = !e.selector), e.split === X && (e.split = !e.selector || e.inline), e.remove === X && e.selector && !e.inline && (e.remove = "none"), e.selector && e.inline && (e.mixed = !0, e.block_expand = !0), "string" == typeof e.classes && (e.classes = e.classes.split(/\s+/)) + }), O[e] = t)) + } + + function u(e) { + var t; + return r.dom.getParent(e, function (e) { + return t = r.dom.getStyle(e, "text-decoration"), t && "none" !== t + }), t + } + + function f(e) { + var t; + 1 === e.nodeType && e.parentNode && 1 === e.parentNode.nodeType && (t = u(e.parentNode), r.dom.getStyle(e, "color") && t ? r.dom.setStyle(e, "text-decoration", t) : r.dom.getStyle(e, "textdecoration") === t && r.dom.setStyle(e, "text-decoration", null)) + } + + function p(t, n, o) { + function s(e, t) { + t = t || h, e && (t.onformat && t.onformat(e, t, n, o), et(t.styles, function (t, r) { + I.setStyle(e, r, E(t, n)) + }), et(t.attributes, function (t, r) { + I.setAttrib(e, r, E(t, n)) + }), et(t.classes, function (t) { + t = E(t, n), I.hasClass(e, t) || I.addClass(e, t) + })) + } + + function l() { + function t(t, n) { + var r = new e(n); + for (o = r.current(); o; o = r.prev())if (o.childNodes.length > 1 || o == t || "BR" == o.tagName)return o + } + + var n = r.selection.getRng(), i = n.startContainer, a = n.endContainer; + if (i != a && 0 === n.endOffset) { + var s = t(i, a), l = 3 == s.nodeType ? s.length : s.childNodes.length; + n.setEnd(s, l) + } + return n + } + + function d(e, t, n, r, i) { + var o = [], a = -1, s, l = -1, c = -1, d; + return et(e.childNodes, function (e, t) { + return"UL" === e.nodeName || "OL" === e.nodeName ? (a = t, s = e, !1) : void 0 + }), et(e.childNodes, function (e, n) { + "SPAN" === e.nodeName && "bookmark" == I.getAttrib(e, "data-mce-type") && (e.id == t.id + "_start" ? l = n : e.id == t.id + "_end" && (c = n)) + }), 0 >= a || a > l && c > a ? (et(tt(e.childNodes), i), 0) : (d = I.clone(n, K), et(tt(e.childNodes), function (e, t) { + (a > l && a > t || l > a && t > a) && (o.push(e), e.parentNode.removeChild(e)) + }), a > l ? e.insertBefore(d, s) : l > a && e.insertBefore(d, s.nextSibling), r.push(d), et(o, function (e) { + d.appendChild(e) + }), d) + } + + function u(e, r, o) { + var l = [], c, u, f = !0; + c = h.inline || h.block, u = I.create(c), s(u), F.walk(e, function (e) { + function p(e) { + var y, C, x, _, N; + return N = f, y = e.nodeName.toLowerCase(), C = e.parentNode.nodeName.toLowerCase(), 1 === e.nodeType && J(e) && (N = f, f = "true" === J(e), _ = !0), w(y, "br") ? (v = 0, void(h.block && I.remove(e))) : h.wrapper && g(e, t, n) ? void(v = 0) : f && !_ && h.block && !h.wrapper && i(y) && W(C, c) ? (e = I.rename(e, c), s(e), l.push(e), void(v = 0)) : h.selector && (et(m, function (t) { + "collapsed"in t && t.collapsed !== b || I.is(e, t.selector) && !a(e) && (s(e, t), x = !0) + }), !h.inline || x) ? void(v = 0) : void(!f || _ || !W(c, y) || !W(C, c) || !o && 3 === e.nodeType && 1 === e.nodeValue.length && 65279 === e.nodeValue.charCodeAt(0) || a(e) || h.inline && V(e) ? "li" == y && r ? v = d(e, r, u, l, p) : (v = 0, et(tt(e.childNodes), p), _ && (f = N), v = 0) : (v || (v = I.clone(u, K), e.parentNode.insertBefore(v, e), l.push(v)), v.appendChild(e))) + } + + var v; + et(e, p) + }), h.wrap_links === !1 && et(l, function (e) { + function t(e) { + var n, r, i; + if ("A" === e.nodeName) { + for (r = I.clone(u, K), l.push(r), i = tt(e.childNodes), n = 0; n < i.length; n++)r.appendChild(i[n]); + e.appendChild(r) + } + et(tt(e.childNodes), t) + } + + t(e) + }), et(l, function (e) { + function r(e) { + var t = 0; + return et(e.childNodes, function (e) { + k(e) || L(e) || t++ + }), t + } + + function i(e) { + var t, n; + return et(e.childNodes, function (e) { + return 1 != e.nodeType || L(e) || a(e) ? void 0 : (t = e, K) + }), t && x(t, h) && (n = I.clone(t, K), s(n), I.replace(n, e, Y), I.remove(t, 1)), n || e + } + + var o; + if (o = r(e), (l.length > 1 || !V(e)) && 0 === o)return void I.remove(e, 1); + if (h.inline || h.wrapper) { + if (h.exact || 1 !== o || (e = i(e)), et(m, function (t) { + et(I.select(t.inline, e), function (e) { + var r; + if (t.wrap_links === !1) { + r = e.parentNode; + do if ("A" === r.nodeName)return; while (r = r.parentNode) + } + R(t, n, e, t.exact ? e : null) + }) + }), g(e.parentNode, t, n))return I.remove(e, 1), e = 0, Y; + h.merge_with_parents && I.getParent(e.parentNode, function (r) { + return g(r, t, n) ? (I.remove(e, 1), e = 0, Y) : void 0 + }), e && h.merge_siblings !== !1 && (e = H(B(e), e), e = H(e, B(e, Y))) + } + }) + } + + var m = c(t), h = m[0], v, y, b = !o && z.isCollapsed(); + if (h)if (o)o.nodeType ? (y = I.createRng(), y.setStartBefore(o), y.setEndAfter(o), u(T(y, m), null, !0)) : u(o, null, !0); else if (b && h.inline && !I.select("td.mce-item-selected,th.mce-item-selected").length)D("apply", t, n); else { + var C = r.selection.getNode(); + U || !m[0].defaultBlock || I.getParent(C, I.isBlock) || p(m[0].defaultBlock), r.selection.setRng(l()), v = z.getBookmark(), u(T(z.getRng(Y), m), v), h.styles && (h.styles.color || h.styles.textDecoration) && (nt(C, f, "childNodes"), f(C)), z.moveToBookmark(v), P(z.getRng(Y)), r.nodeChanged() + } + } + + function m(e, t, n) { + function i(e) { + var n, r, o, a, s; + if (1 === e.nodeType && J(e) && (a = b, b = "true" === J(e), s = !0), n = tt(e.childNodes), b && !s)for (r = 0, o = p.length; o > r && !R(p[r], t, e, e); r++); + if (m.deep && n.length) { + for (r = 0, o = n.length; o > r; r++)i(n[r]); + s && (b = a) + } + } + + function a(n) { + var r; + return et(o(n.parentNode).reverse(), function (n) { + var i; + r || "_start" == n.id || "_end" == n.id || (i = g(n, e, t), i && i.split !== !1 && (r = n)) + }), r + } + + function s(e, n, r, i) { + var o, a, s, l, c, d; + if (e) { + for (d = e.parentNode, o = n.parentNode; o && o != d; o = o.parentNode) { + for (a = I.clone(o, K), c = 0; c < p.length; c++)if (R(p[c], t, a, a)) { + a = 0; + break + } + a && (s && a.appendChild(s), l || (l = a), s = a) + } + !i || m.mixed && V(e) || (n = I.split(e, n)), s && (r.parentNode.insertBefore(s, r), l.appendChild(r)) + } + return n + } + + function l(e) { + return s(a(e), e, e, !0) + } + + function d(e) { + var t = I.get(e ? "_start" : "_end"), n = t[e ? "firstChild" : "lastChild"]; + return L(n) && (n = n[e ? "firstChild" : "lastChild"]), I.remove(t, !0), n + } + + function f(e) { + var t, n, o = e.commonAncestorContainer; + e = T(e, p, Y), m.split && (t = M(e, Y), n = M(e), t != n ? (/^(TR|TH|TD)$/.test(t.nodeName) && t.firstChild && (t = "TR" == t.nodeName ? t.firstChild.firstChild || t : t.firstChild || t), o && /^T(HEAD|BODY|FOOT|R)$/.test(o.nodeName) && /^(TH|TD)$/.test(n.nodeName) && n.firstChild && (n = n.firstChild || n), t = S(t, "span", {id: "_start", "data-mce-type": "bookmark"}), n = S(n, "span", {id: "_end", "data-mce-type": "bookmark"}), l(t), l(n), t = d(Y), n = d()) : t = n = l(t), e.startContainer = t.parentNode, e.startOffset = q(t), e.endContainer = n.parentNode, e.endOffset = q(n) + 1), F.walk(e, function (e) { + et(e, function (e) { + i(e), 1 === e.nodeType && "underline" === r.dom.getStyle(e, "text-decoration") && e.parentNode && "underline" === u(e.parentNode) && R({deep: !1, exact: !0, inline: "span", styles: {textDecoration: "underline"}}, null, e) + }) + }) + } + + var p = c(e), m = p[0], h, y, b = !0; + return n ? void(n.nodeType ? (y = I.createRng(), y.setStartBefore(n), y.setEndAfter(n), f(y)) : f(n)) : void(z.isCollapsed() && m.inline && !I.select("td.mce-item-selected,th.mce-item-selected").length ? D("remove", e, t) : (h = z.getBookmark(), f(z.getRng(Y)), z.moveToBookmark(h), m.inline && v(e, t, z.getStart()) && P(z.getRng(!0)), r.nodeChanged())) + } + + function h(e, t, n) { + var r = c(e); + !v(e, t, n) || "toggle"in r[0] && !r[0].toggle ? p(e, t, n) : m(e, t, n) + } + + function g(e, t, n, r) { + function i(e, t, i) { + var o, a, s = t[i], l; + if (t.onmatch)return t.onmatch(e, t, i); + if (s)if (s.length === X) { + for (o in s)if (s.hasOwnProperty(o)) { + if (a = "attributes" === i ? I.getAttrib(e, o) : _(e, o), r && !a && !t.exact)return; + if ((!r || t.exact) && !w(a, N(E(s[o], n), o)))return + } + } else for (l = 0; l < s.length; l++)if ("attributes" === i ? I.getAttrib(e, s[l]) : _(e, s[l]))return t; + return t + } + + var o = c(t), a, s, l; + if (o && e)for (s = 0; s < o.length; s++)if (a = o[s], x(e, a) && i(e, a, "attributes") && i(e, a, "styles")) { + if (l = a.classes)for (s = 0; s < l.length; s++)if (!I.hasClass(e, l[s]))return; + return a + } + } + + function v(e, t, n) { + function r(n) { + var r = I.getRoot(); + return n === r ? !1 : (n = I.getParent(n, function (n) { + return n.parentNode === r || !!g(n, e, t, !0) + }), g(n, e, t)) + } + + var i; + return n ? r(n) : (n = z.getNode(), r(n) ? Y : (i = z.getStart(), i != n && r(i) ? Y : K)) + } + + function y(e, t) { + var n, r = [], i = {}; + return n = z.getStart(), I.getParent(n, function (n) { + var o, a; + for (o = 0; o < e.length; o++)a = e[o], !i[a] && g(n, a, t) && (i[a] = !0, r.push(a)) + }, I.getRoot()), r + } + + function b(e) { + var t = c(e), n, r, i, a, s; + if (t)for (n = z.getStart(), r = o(n), a = t.length - 1; a >= 0; a--) { + if (s = t[a].selector, !s || t[a].defaultBlock)return Y; + for (i = r.length - 1; i >= 0; i--)if (I.is(r[i], s))return Y + } + return K + } + + function C(e, t, n) { + var i; + return G || (G = {}, i = {}, r.on("NodeChange", function (e) { + var t = o(e.element), n = {}; + et(G, function (e, r) { + et(t, function (o) { + return g(o, r, {}, e.similar) ? (i[r] || (et(e, function (e) { + e(!0, {node: o, format: r, parents: t}) + }), i[r] = e), n[r] = e, !1) : void 0 + }) + }), et(i, function (r, o) { + n[o] || (delete i[o], et(r, function (n) { + n(!1, {node: e.element, format: o, parents: t}) + })) + }) + })), et(e.split(","), function (e) { + G[e] || (G[e] = [], G[e].similar = n), G[e].push(t) + }), this + } + + function x(e, t) { + return w(e, t.inline) ? Y : w(e, t.block) ? Y : t.selector ? 1 == e.nodeType && I.is(e, t.selector) : void 0 + } + + function w(e, t) { + return e = e || "", t = t || "", e = "" + (e.nodeName || e), t = "" + (t.nodeName || t), e.toLowerCase() == t.toLowerCase() + } + + function _(e, t) { + return N(I.getStyle(e, t), t) + } + + function N(e, t) { + return("color" == t || "backgroundColor" == t) && (e = I.toHex(e)), "fontWeight" == t && 700 == e && (e = "bold"), "fontFamily" == t && (e = e.replace(/[\'\"]/g, "").replace(/,\s+/g, ",")), "" + e + } + + function E(e, t) { + return"string" != typeof e ? e = e(t) : t && (e = e.replace(/%(\w+)/g, function (e, n) { + return t[n] || e + })), e + } + + function k(e) { + return e && 3 === e.nodeType && /^([\t \r\n]+|)$/.test(e.nodeValue) + } + + function S(e, t, n) { + var r = I.create(t, n); + return e.parentNode.insertBefore(r, e), r.appendChild(e), r + } + + function T(t, n, a) { + function s(e) { + function t(e) { + return"BR" == e.nodeName && e.getAttribute("data-mce-bogus") && !e.nextSibling + } + + var r, i, o, a, s; + if (r = i = e ? g : y, a = e ? "previousSibling" : "nextSibling", s = I.getRoot(), 3 == r.nodeType && !k(r) && (e ? v > 0 : b < r.nodeValue.length))return r; + for (; ;) { + if (!n[0].block_expand && V(i))return i; + for (o = i[a]; o; o = o[a])if (!L(o) && !k(o) && !t(o))return i; + if (i.parentNode == s) { + r = i; + break + } + i = i.parentNode + } + return r + } + + function l(e, t) { + for (t === X && (t = 3 === e.nodeType ? e.length : e.childNodes.length); e && e.hasChildNodes();)e = e.childNodes[t], e && (t = 3 === e.nodeType ? e.length : e.childNodes.length); + return{node: e, offset: t} + } + + function c(e) { + for (var t = e; t;) { + if (1 === t.nodeType && J(t))return"false" === J(t) ? t : e; + t = t.parentNode + } + return e + } + + function d(t, n, i) { + function o(e, t) { + var n, r, o = e.nodeValue; + return"undefined" == typeof t && (t = i ? o.length : 0), i ? (n = o.lastIndexOf(" ", t), r = o.lastIndexOf("\xa0", t), n = n > r ? n : r, -1 === n || a || n++) : (n = o.indexOf(" ", t), r = o.indexOf("\xa0", t), n = -1 !== n && (-1 === r || r > n) ? n : r), n + } + + var s, l, c, d; + if (3 === t.nodeType) { + if (c = o(t, n), -1 !== c)return{container: t, offset: c}; + d = t + } + for (s = new e(t, I.getParent(t, V) || r.getBody()); l = s[i ? "prev" : "next"]();)if (3 === l.nodeType) { + if (d = l, c = o(l), -1 !== c)return{container: l, offset: c} + } else if (V(l))break; + return d ? (n = i ? 0 : d.length, {container: d, offset: n}) : void 0 + } + + function u(e, r) { + var i, a, s, l; + for (3 == e.nodeType && 0 === e.nodeValue.length && e[r] && (e = e[r]), i = o(e), a = 0; a < i.length; a++)for (s = 0; s < n.length; s++)if (l = n[s], !("collapsed"in l && l.collapsed !== t.collapsed) && I.is(i[a], l.selector))return i[a]; + return e + } + + function f(e, t) { + var r, a = I.getRoot(); + if (n[0].wrapper || (r = I.getParent(e, n[0].block, a)), r || (r = I.getParent(3 == e.nodeType ? e.parentNode : e, function (e) { + return e != a && i(e) + })), r && n[0].wrapper && (r = o(r, "ul,ol").reverse()[0] || r), !r)for (r = e; r[t] && !V(r[t]) && (r = r[t], !w(r, "br"));); + return r || e + } + + var p, m, h, g = t.startContainer, v = t.startOffset, y = t.endContainer, b = t.endOffset; + if (1 == g.nodeType && g.hasChildNodes() && (p = g.childNodes.length - 1, g = g.childNodes[v > p ? p : v], 3 == g.nodeType && (v = 0)), 1 == y.nodeType && y.hasChildNodes() && (p = y.childNodes.length - 1, y = y.childNodes[b > p ? p : b - 1], 3 == y.nodeType && (b = y.nodeValue.length)), g = c(g), y = c(y), (L(g.parentNode) || L(g)) && (g = L(g) ? g : g.parentNode, g = g.nextSibling || g, 3 == g.nodeType && (v = 0)), (L(y.parentNode) || L(y)) && (y = L(y) ? y : y.parentNode, y = y.previousSibling || y, 3 == y.nodeType && (b = y.length)), n[0].inline && (t.collapsed && (h = d(g, v, !0), h && (g = h.container, v = h.offset), h = d(y, b), h && (y = h.container, b = h.offset)), m = l(y, b), m.node)) { + for (; m.node && 0 === m.offset && m.node.previousSibling;)m = l(m.node.previousSibling); + m.node && m.offset > 0 && 3 === m.node.nodeType && " " === m.node.nodeValue.charAt(m.offset - 1) && m.offset > 1 && (y = m.node, y.splitText(m.offset - 1)) + } + return(n[0].inline || n[0].block_expand) && (n[0].inline && 3 == g.nodeType && 0 !== v || (g = s(!0)), n[0].inline && 3 == y.nodeType && b !== y.nodeValue.length || (y = s())), n[0].selector && n[0].expand !== K && !n[0].inline && (g = u(g, "previousSibling"), y = u(y, "nextSibling")), (n[0].block || n[0].selector) && (g = f(g, "previousSibling"), y = f(y, "nextSibling"), n[0].block && (V(g) || (g = s(!0)), V(y) || (y = s()))), 1 == g.nodeType && (v = q(g), g = g.parentNode), 1 == y.nodeType && (b = q(y) + 1, y = y.parentNode), {startContainer: g, startOffset: v, endContainer: y, endOffset: b} + } + + function R(e, t, n, r) { + var i, o, a; + if (!x(n, e))return K; + if ("all" != e.remove)for (et(e.styles, function (e, i) { + e = N(E(e, t), i), "number" == typeof i && (i = e, r = 0), (!r || w(_(r, i), e)) && I.setStyle(n, i, ""), a = 1 + }), a && "" === I.getAttrib(n, "style") && (n.removeAttribute("style"), n.removeAttribute("data-mce-style")), et(e.attributes, function (e, i) { + var o; + if (e = E(e, t), "number" == typeof i && (i = e, r = 0), !r || w(I.getAttrib(r, i), e)) { + if ("class" == i && (e = I.getAttrib(n, i), e && (o = "", et(e.split(/\s+/), function (e) { + /mce\w+/.test(e) && (o += (o ? " " : "") + e) + }), o)))return void I.setAttrib(n, i, o); + "class" == i && n.removeAttribute("className"), $.test(i) && n.removeAttribute("data-mce-" + i), n.removeAttribute(i) + } + }), et(e.classes, function (e) { + e = E(e, t), (!r || I.hasClass(r, e)) && I.removeClass(n, e) + }), o = I.getAttribs(n), i = 0; i < o.length; i++)if (0 !== o[i].nodeName.indexOf("_"))return K; + return"none" != e.remove ? (A(n, e), Y) : void 0 + } + + function A(e, t) { + function n(e, t, n) { + return e = B(e, t, n), !e || "BR" == e.nodeName || V(e) + } + + var i = e.parentNode, o; + t.block && (U ? i == I.getRoot() && (t.list_block && w(e, t.list_block) || et(tt(e.childNodes), function (e) { + W(U, e.nodeName.toLowerCase()) ? o ? o.appendChild(e) : (o = S(e, U), I.setAttribs(o, r.settings.forced_root_block_attrs)) : o = 0 + })) : V(e) && !V(i) && (n(e, K) || n(e.firstChild, Y, 1) || e.insertBefore(I.create("br"), e.firstChild), n(e, Y) || n(e.lastChild, K, 1) || e.appendChild(I.create("br")))), t.selector && t.inline && !w(t.inline, e) || I.remove(e, 1) + } + + function B(e, t, n) { + if (e)for (t = t ? "nextSibling" : "previousSibling", e = n ? e : e[t]; e; e = e[t])if (1 == e.nodeType && !k(e))return e + } + + function L(e) { + return e && 1 == e.nodeType && "bookmark" == e.getAttribute("data-mce-type") + } + + function H(e, t) { + function n(e, t) { + function n(e) { + var t = {}; + return et(I.getAttribs(e), function (n) { + var r = n.nodeName.toLowerCase(); + 0 !== r.indexOf("_") && "style" !== r && "data-mce-style" !== r && (t[r] = I.getAttrib(e, r)) + }), t + } + + function r(e, t) { + var n, r; + for (r in e)if (e.hasOwnProperty(r)) { + if (n = t[r], n === X)return K; + if (e[r] != n)return K; + delete t[r] + } + for (r in t)if (t.hasOwnProperty(r))return K; + return Y + } + + return e.nodeName != t.nodeName ? K : r(n(e), n(t)) ? r(I.parseStyle(I.getAttrib(e, "style")), I.parseStyle(I.getAttrib(t, "style"))) ? Y : K : K + } + + function r(e, t) { + for (i = e; i; i = i[t]) { + if (3 == i.nodeType && 0 !== i.nodeValue.length)return e; + if (1 == i.nodeType && !L(i))return i + } + return e + } + + var i, o; + if (e && t && (e = r(e, "previousSibling"), t = r(t, "nextSibling"), n(e, t))) { + for (i = e.nextSibling; i && i != t;)o = i, i = i.nextSibling, e.appendChild(o); + return I.remove(t), et(tt(t.childNodes), function (t) { + e.appendChild(t) + }), e + } + return t + } + + function M(t, n) { + var i, o, a; + return i = t[n ? "startContainer" : "endContainer"], o = t[n ? "startOffset" : "endOffset"], 1 == i.nodeType && (a = i.childNodes.length - 1, !n && o && o--, i = i.childNodes[o > a ? a : o]), 3 === i.nodeType && n && o >= i.nodeValue.length && (i = new e(i, r.getBody()).next() || i), 3 !== i.nodeType || n || 0 !== o || (i = new e(i, r.getBody()).prev() || i), i + } + + function D(t, n, o) { + function a(e) { + var t = I.create("span", {id: y, "data-mce-bogus": !0, style: b ? "color:red" : ""}); + return e && t.appendChild(r.getDoc().createTextNode(j)), t + } + + function s(e, t) { + for (; e;) { + if (3 === e.nodeType && e.nodeValue !== j || e.childNodes.length > 1)return!1; + t && 1 === e.nodeType && t.push(e), e = e.firstChild + } + return!0 + } + + function l(e) { + for (; e;) { + if (e.id === y)return e; + e = e.parentNode + } + } + + function d(t) { + var n; + if (t)for (n = new e(t, t), t = n.current(); t; t = n.next())if (3 === t.nodeType)return t + } + + function u(e, t) { + var n, r; + if (e)r = z.getRng(!0), s(e) ? (t !== !1 && (r.setStartBefore(e), r.setEndBefore(e)), I.remove(e)) : (n = d(e), n.nodeValue.charAt(0) === j && (n = n.deleteData(0, 1)), I.remove(e, 1)), z.setRng(r); else if (e = l(z.getStart()), !e)for (; e = I.get(y);)u(e, !1) + } + + function f() { + var e, t, r, i, s, u, f; + e = z.getRng(!0), i = e.startOffset, u = e.startContainer, f = u.nodeValue, t = l(z.getStart()), t && (r = d(t)), f && i > 0 && i < f.length && /\w/.test(f.charAt(i)) && /\w/.test(f.charAt(i - 1)) ? (s = z.getBookmark(), e.collapse(!0), e = T(e, c(n)), e = F.split(e), p(n, o, e), z.moveToBookmark(s)) : (t && r.nodeValue === j ? p(n, o, t) : (t = a(!0), r = t.firstChild, e.insertNode(t), i = 1, p(n, o, t)), z.setCursorLocation(r, i)) + } + + function h() { + var e = z.getRng(!0), t, r, s, l, d, u, f = [], p, h; + for (t = e.startContainer, r = e.startOffset, d = t, 3 == t.nodeType && ((r != t.nodeValue.length || t.nodeValue === j) && (l = !0), d = d.parentNode); d;) { + if (g(d, n, o)) { + u = d; + break + } + d.nextSibling && (l = !0), f.push(d), d = d.parentNode + } + if (u)if (l)s = z.getBookmark(), e.collapse(!0), e = T(e, c(n), !0), e = F.split(e), m(n, o, e), z.moveToBookmark(s); else { + for (h = a(), d = h, p = f.length - 1; p >= 0; p--)d.appendChild(I.clone(f[p], !1)), d = d.firstChild; + d.appendChild(I.doc.createTextNode(j)), d = d.firstChild; + var v = I.getParent(u, i); + v && I.isEmpty(v) ? u.parentNode.replaceChild(h, u) : I.insertAfter(h, u), z.setCursorLocation(d, 1), I.isEmpty(u) && I.remove(u) + } + } + + function v() { + var e; + e = l(z.getStart()), e && !I.isEmpty(e) && nt(e, function (e) { + 1 != e.nodeType || e.id === y || I.isEmpty(e) || I.setAttrib(e, "data-mce-bogus", null) + }, "childNodes") + } + + var y = "_mce_caret", b = r.settings.caret_debug; + r._hasCaretEvents || (Z = function () { + var e = [], t; + if (s(l(z.getStart()), e))for (t = e.length; t--;)I.setAttrib(e[t], "data-mce-bogus", "1") + }, Q = function (e) { + var t = e.keyCode; + u(), (8 == t || 37 == t || 39 == t) && u(l(z.getStart())), v() + }, r.on("SetContent", function (e) { + e.selection && v() + }), r._hasCaretEvents = !0), "apply" == t ? f() : h() + } + + function P(t) { + var n = t.startContainer, r = t.startOffset, i, o, a, s, l; + if (3 == n.nodeType && r >= n.nodeValue.length && (r = q(n), n = n.parentNode, i = !0), 1 == n.nodeType)for (s = n.childNodes, n = s[Math.min(r, s.length - 1)], o = new e(n, I.getParent(n, I.isBlock)), (r > s.length - 1 || i) && o.next(), a = o.current(); a; a = o.next())if (3 == a.nodeType && !k(a))return l = I.create("a", null, j), a.parentNode.insertBefore(l, a), t.setStart(a, 0), z.setRng(t), void I.remove(l) + } + + var O = {}, I = r.dom, z = r.selection, F = new t(I), W = r.schema.isValidChild, V = I.isBlock, U = r.settings.forced_root_block, q = I.nodeIndex, j = "\ufeff", $ = /^(src|href|style)$/, K = !1, Y = !0, G, X, J = I.getContentEditable, Q, Z, et = n.each, tt = n.grep, nt = n.walk, rt = n.extend; + rt(this, {get: c, register: d, apply: p, remove: m, toggle: h, match: v, matchAll: y, matchNode: g, canApply: b, formatChanged: C}), s(), l(), r.on("BeforeGetContent", function () { + Z && Z() + }), r.on("mouseup keydown", function (e) { + Q && Q(e) + }) + } + }), r(H, [h, f], function (e, t) { + var n = t.trim, r; + return r = new RegExp(["]+data-mce-bogus[^>]+>[\u200b\ufeff]+<\\/span>", "]+data-mce-bogus[^>]+><\\/div>", '\\s?data-mce-selected="[^"]+"'].join("|"), "gi"), function (t) { + function i() { + return n(t.getContent({format: "raw", no_events: 1}).replace(r, "")) + } + + function o() { + a.typing = !1, a.add() + } + + var a, s = 0, l = [], c, d, u; + return t.on("init", function () { + a.add() + }), t.on("BeforeExecCommand", function (e) { + var t = e.command; + "Undo" != t && "Redo" != t && "mceRepaint" != t && a.beforeChange() + }), t.on("ExecCommand", function (e) { + var t = e.command; + "Undo" != t && "Redo" != t && "mceRepaint" != t && a.add() + }), t.on("ObjectResizeStart", function () { + a.beforeChange() + }), t.on("SaveContent ObjectResized", o), t.dom.bind(t.dom.getRoot(), "dragend", o), t.dom.bind(t.getBody(), "focusout", function () { + !t.removed && a.typing && o() + }), t.on("KeyUp", function (n) { + var r = n.keyCode; + (r >= 33 && 36 >= r || r >= 37 && 40 >= r || 45 == r || 13 == r || n.ctrlKey) && (o(), t.nodeChanged()), (46 == r || 8 == r || e.mac && (91 == r || 93 == r)) && t.nodeChanged(), d && a.typing && (t.isDirty() || (t.isNotDirty = !l[0] || i() == l[0].content, t.isNotDirty || t.fire("change", {level: l[0], lastLevel: null})), t.fire("TypingUndo"), d = !1, t.nodeChanged()) + }), t.on("KeyDown", function (e) { + var t = e.keyCode; + return t >= 33 && 36 >= t || t >= 37 && 40 >= t || 45 == t ? void(a.typing && o()) : void((16 > t || t > 20) && 224 != t && 91 != t && !a.typing && (a.beforeChange(), a.typing = !0, a.add(), d = !0)) + }), t.on("MouseDown", function () { + a.typing && o() + }), t.addShortcut("ctrl+z", "", "Undo"), t.addShortcut("ctrl+y,ctrl+shift+z", "", "Redo"), t.on("AddUndo Undo Redo ClearUndos MouseUp", function (e) { + e.isDefaultPrevented() || t.nodeChanged() + }), a = {data: l, typing: !1, beforeChange: function () { + u || (c = t.selection.getBookmark(2, !0)) + }, add: function (e) { + var n, r = t.settings, o; + if (e = e || {}, e.content = i(), u || t.fire("BeforeAddUndo", {level: e}).isDefaultPrevented())return null; + if (o = l[s], o && o.content == e.content)return null; + if (l[s] && (l[s].beforeBookmark = c), r.custom_undo_redo_levels && l.length > r.custom_undo_redo_levels) { + for (n = 0; n < l.length - 1; n++)l[n] = l[n + 1]; + l.length--, s = l.length + } + e.bookmark = t.selection.getBookmark(2, !0), s < l.length - 1 && (l.length = s + 1), l.push(e), s = l.length - 1; + var a = {level: e, lastLevel: o}; + return t.fire("AddUndo", a), s > 0 && (t.fire("change", a), t.isNotDirty = !1), e + }, undo: function () { + var e; + return a.typing && (a.add(), a.typing = !1), s > 0 && (e = l[--s], 0 === s && (t.isNotDirty = !0), t.setContent(e.content, {format: "raw"}), t.selection.moveToBookmark(e.beforeBookmark), t.fire("undo", {level: e})), e + }, redo: function () { + var e; + return s < l.length - 1 && (e = l[++s], t.setContent(e.content, {format: "raw"}), t.selection.moveToBookmark(e.bookmark), t.fire("redo", {level: e})), e + }, clear: function () { + l = [], s = 0, a.typing = !1, t.fire("ClearUndos") + }, hasUndo: function () { + return s > 0 || a.typing && l[0] && i() != l[0].content + }, hasRedo: function () { + return s < l.length - 1 && !this.typing + }, transact: function (e) { + a.beforeChange(), u = !0, e(), u = !1, a.add() + }} + } + }), r(M, [u, h], function (e, t) { + var n = t.ie && t.ie < 11; + return function (r) { + function i(i) { + function u(e) { + return e && o.isBlock(e) && !/^(TD|TH|CAPTION|FORM)$/.test(e.nodeName) && !/^(fixed|absolute)/i.test(e.style.position) && "true" !== o.getContentEditable(e) + } + + function f(e) { + var t; + o.isBlock(e) && (t = a.getRng(), e.appendChild(o.create("span", null, "\xa0")), a.select(e), e.lastChild.outerHTML = "", a.setRng(t)) + } + + function p(e) { + for (var t = e, n = [], r; t = t.firstChild;) { + if (o.isBlock(t))return; + 1 != t.nodeType || d[t.nodeName.toLowerCase()] || n.push(t) + } + for (r = n.length; r--;)t = n[r], !t.hasChildNodes() || t.firstChild == t.lastChild && "" === t.firstChild.nodeValue ? o.remove(t) : "A" == t.nodeName && " " === (t.innerText || t.textContent) && o.remove(t) + } + + function m(n) { + function r(e) { + for (; e;) { + if (1 == e.nodeType || 3 == e.nodeType && e.data && /[\r\n\s]/.test(e.data))return e; + e = e.nextSibling + } + } + + var i, s, l, c = n, u; + if (t.ie && t.ie < 9 && A && A.firstChild && A.firstChild == A.lastChild && "BR" == A.firstChild.tagName && o.remove(A.firstChild), "LI" == n.nodeName) { + var f = r(n.firstChild); + f && /^(UL|OL)$/.test(f.nodeName) && n.insertBefore(o.doc.createTextNode("\xa0"), n.firstChild) + } + if (l = o.createRng(), n.hasChildNodes()) { + for (i = new e(n, n); s = i.current();) { + if (3 == s.nodeType) { + l.setStart(s, 0), l.setEnd(s, 0); + break + } + if (d[s.nodeName.toLowerCase()]) { + l.setStartBefore(s), l.setEndBefore(s); + break + } + c = s, s = i.next() + } + s || (l.setStart(c, 0), l.setEnd(c, 0)) + } else"BR" == n.nodeName ? n.nextSibling && o.isBlock(n.nextSibling) ? ((!B || 9 > B) && (u = o.create("br"), n.parentNode.insertBefore(u, n)), l.setStartBefore(n), l.setEndBefore(n)) : (l.setStartAfter(n), l.setEndAfter(n)) : (l.setStart(n, 0), l.setEnd(n, 0)); + a.setRng(l), o.remove(u), a.scrollIntoView(n) + } + + function h(e) { + var t = s.forced_root_block; + t && t.toLowerCase() === e.tagName.toLowerCase() && o.setAttribs(e, s.forced_root_block_attrs) + } + + function g(e) { + var t = T, r, i, a; + if (e || "TABLE" == P ? (r = o.create(e || I), h(r)) : r = A.cloneNode(!1), a = r, s.keep_styles !== !1)do if (/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(t.nodeName)) { + if ("_mce_caret" == t.id)continue; + i = t.cloneNode(!1), o.setAttrib(i, "id", ""), r.hasChildNodes() ? (i.appendChild(r.firstChild), r.appendChild(i)) : (a = i, r.appendChild(i)) + } while (t = t.parentNode); + return n || (a.innerHTML = '
    '), r + } + + function v(t) { + var n, r, i; + if (3 == T.nodeType && (t ? R > 0 : R < T.nodeValue.length))return!1; + if (T.parentNode == A && z && !t)return!0; + if (t && 1 == T.nodeType && T == A.firstChild)return!0; + if ("TABLE" === T.nodeName || T.previousSibling && "TABLE" == T.previousSibling.nodeName)return z && !t || !z && t; + for (n = new e(T, A), 3 == T.nodeType && (t && 0 === R ? n.prev() : t || R != T.nodeValue.length || n.next()); r = n.current();) { + if (1 === r.nodeType) { + if (!r.getAttribute("data-mce-bogus") && (i = r.nodeName.toLowerCase(), d[i] && "br" !== i))return!1 + } else if (3 === r.nodeType && !/^[ \t\r\n]*$/.test(r.nodeValue))return!1; + t ? n.prev() : n.next() + } + return!0 + } + + function y(e, t) { + var n, i, a, s, l, d, f = I || "P"; + if (i = o.getParent(e, o.isBlock), d = r.getBody().nodeName.toLowerCase(), !i || !u(i)) { + if (i = i || S, !i.hasChildNodes())return n = o.create(f), h(n), i.appendChild(n), E.setStart(n, 0), E.setEnd(n, 0), n; + for (s = e; s.parentNode != i;)s = s.parentNode; + for (; s && !o.isBlock(s);)a = s, s = s.previousSibling; + if (a && c.isValidChild(d, f.toLowerCase())) { + for (n = o.create(f), h(n), a.parentNode.insertBefore(n, a), s = a; s && !o.isBlock(s);)l = s.nextSibling, n.appendChild(s), s = l; + E.setStart(e, t), E.setEnd(e, t) + } + } + return e + } + + function b() { + function e(e) { + for (var t = D[e ? "firstChild" : "lastChild"]; t && 1 != t.nodeType;)t = t[e ? "nextSibling" : "previousSibling"]; + return t === A + } + + function t() { + var e = D.parentNode; + return"LI" == e.nodeName ? e : D + } + + var n = D.parentNode.nodeName; + /^(OL|UL|LI)$/.test(n) && (I = "LI"), H = I ? g(I) : o.create("BR"), e(!0) && e() ? "LI" == n ? o.insertAfter(H, t()) : o.replace(H, D) : e(!0) ? "LI" == n ? (o.insertAfter(H, t()), H.appendChild(o.doc.createTextNode(" ")), H.appendChild(D)) : D.parentNode.insertBefore(H, D) : e() ? (o.insertAfter(H, t()), f(H)) : (D = t(), k = E.cloneRange(), k.setStartAfter(A), k.setEndAfter(D), M = k.extractContents(), "LI" == I && "LI" == M.firstChild.nodeName ? (H = M.firstChild, o.insertAfter(M, D)) : (o.insertAfter(M, D), o.insertAfter(H, D))), o.remove(A), m(H), l.add() + } + + function C() { + for (var t = new e(T, A), n; n = t.next();)if (d[n.nodeName.toLowerCase()] || n.length > 0)return!0 + } + + function x() { + var e, t, r; + T && 3 == T.nodeType && R >= T.nodeValue.length && (n || C() || (e = o.create("br"), E.insertNode(e), E.setStartAfter(e), E.setEndAfter(e), t = !0)), e = o.create("br"), E.insertNode(e), n && "PRE" == P && (!B || 8 > B) && e.parentNode.insertBefore(o.doc.createTextNode("\r"), e), r = o.create("span", {}, " "), e.parentNode.insertBefore(r, e), a.scrollIntoView(r), o.remove(r), t ? (E.setStartBefore(e), E.setEndBefore(e)) : (E.setStartAfter(e), E.setEndAfter(e)), a.setRng(E), l.add() + } + + function w(e) { + do 3 === e.nodeType && (e.nodeValue = e.nodeValue.replace(/^[\r\n]+/, "")), e = e.firstChild; while (e) + } + + function _(e) { + var t = o.getRoot(), n, r; + for (n = e; n !== t && "false" !== o.getContentEditable(n);)"true" === o.getContentEditable(n) && (r = n), n = n.parentNode; + return n !== t ? r : t + } + + function N(e) { + var t; + n || (e.normalize(), t = e.lastChild, (!t || /^(left|right)$/gi.test(o.getStyle(t, "float", !0))) && o.add(e, "br")) + } + + var E = a.getRng(!0), k, S, T, R, A, B, L, H, M, D, P, O, I, z; + if (!E.collapsed)return void r.execCommand("Delete"); + if (!i.isDefaultPrevented() && (T = E.startContainer, R = E.startOffset, I = (s.force_p_newlines ? "p" : "") || s.forced_root_block, I = I ? I.toUpperCase() : "", B = o.doc.documentMode, L = i.shiftKey, 1 == T.nodeType && T.hasChildNodes() && (z = R > T.childNodes.length - 1, T = T.childNodes[Math.min(R, T.childNodes.length - 1)] || T, R = z && 3 == T.nodeType ? T.nodeValue.length : 0), S = _(T))) { + if (l.beforeChange(), !o.isBlock(S) && S != o.getRoot())return void((!I || L) && x()); + if ((I && !L || !I && L) && (T = y(T, R)), A = o.getParent(T, o.isBlock), D = A ? o.getParent(A.parentNode, o.isBlock) : null, P = A ? A.nodeName.toUpperCase() : "", O = D ? D.nodeName.toUpperCase() : "", "LI" != O || i.ctrlKey || (A = D, P = O), "LI" == P) { + if (!I && L)return void x(); + if (o.isEmpty(A))return void b() + } + if ("PRE" == P && s.br_in_pre !== !1) { + if (!L)return void x() + } else if (!I && !L && "LI" != P || I && L)return void x(); + I && A === r.getBody() || (I = I || "P", v() ? (H = /^(H[1-6]|PRE|FIGURE)$/.test(P) && "HGROUP" != O ? g(I) : g(), s.end_container_on_empty_block && u(D) && o.isEmpty(A) ? H = o.split(D, A) : o.insertAfter(H, A), m(H)) : v(!0) ? (H = A.parentNode.insertBefore(g(), A), f(H), m(A)) : (k = E.cloneRange(), k.setEndAfter(A), M = k.extractContents(), w(M), H = M.firstChild, o.insertAfter(M, A), p(H), N(A), m(H)), o.setAttrib(H, "id", ""), r.fire("NewBlock", {newBlock: H}), l.add()) + } + } + + var o = r.dom, a = r.selection, s = r.settings, l = r.undoManager, c = r.schema, d = c.getNonEmptyElements(); + r.on("keydown", function (e) { + 13 == e.keyCode && i(e) !== !1 && e.preventDefault() + }) + } + }), r(D, [], function () { + return function (e) { + function t() { + var t = i.getStart(), s = e.getBody(), l, c, d, u, f, p, m, h = -16777215, g, v, y, b, C; + if (C = n.forced_root_block, t && 1 === t.nodeType && C) { + for (; t && t != s;) { + if (a[t.nodeName])return; + t = t.parentNode + } + if (l = i.getRng(), l.setStart) { + c = l.startContainer, d = l.startOffset, u = l.endContainer, f = l.endOffset; + try { + v = e.getDoc().activeElement === s + } catch (x) { + } + } else l.item && (t = l.item(0), l = e.getDoc().body.createTextRange(), l.moveToElementText(t)), v = l.parentElement().ownerDocument === e.getDoc(), y = l.duplicate(), y.collapse(!0), d = -1 * y.move("character", h), y.collapsed || (y = l.duplicate(), y.collapse(!1), f = -1 * y.move("character", h) - d); + for (t = s.firstChild, b = s.nodeName.toLowerCase(); t;)if ((3 === t.nodeType || 1 == t.nodeType && !a[t.nodeName]) && o.isValidChild(b, C.toLowerCase())) { + if (3 === t.nodeType && 0 === t.nodeValue.length) { + m = t, t = t.nextSibling, r.remove(m); + continue + } + p || (p = r.create(C, e.settings.forced_root_block_attrs), t.parentNode.insertBefore(p, t), g = !0), m = t, t = t.nextSibling, p.appendChild(m) + } else p = null, t = t.nextSibling; + if (g && v) { + if (l.setStart)l.setStart(c, d), l.setEnd(u, f), i.setRng(l); else try { + l = e.getDoc().body.createTextRange(), l.moveToElementText(s), l.collapse(!0), l.moveStart("character", d), f > 0 && l.moveEnd("character", f), l.select() + } catch (x) { + } + e.nodeChanged() + } + } + } + + var n = e.settings, r = e.dom, i = e.selection, o = e.schema, a = o.getBlockElements(); + n.forced_root_block && e.on("NodeChange", t) + } + }), r(P, [E, h, f], function (e, n, r) { + var i = r.each, o = r.extend, a = r.map, s = r.inArray, l = r.explode, c = n.gecko, d = n.ie, u = !0, f = !1; + return function (r) { + function p(e, t, n) { + var r; + return e = e.toLowerCase(), (r = N.exec[e]) ? (r(e, t, n), u) : f + } + + function m(e) { + var t; + return e = e.toLowerCase(), (t = N.state[e]) ? t(e) : -1 + } + + function h(e) { + var t; + return e = e.toLowerCase(), (t = N.value[e]) ? t(e) : f + } + + function g(e, t) { + t = t || "exec", i(e, function (e, n) { + i(n.toLowerCase().split(","), function (n) { + N[t][n] = e + }) + }) + } + + function v(e, n, i) { + return n === t && (n = f), i === t && (i = null), r.getDoc().execCommand(e, n, i) + } + + function y(e) { + return k.match(e) + } + + function b(e, n) { + k.toggle(e, n ? {value: n} : t), r.nodeChanged() + } + + function C(e) { + S = _.getBookmark(e) + } + + function x() { + _.moveToBookmark(S) + } + + var w = r.dom, _ = r.selection, N = {state: {}, exec: {}, value: {}}, E = r.settings, k = r.formatter, S; + o(this, {execCommand: p, queryCommandState: m, queryCommandValue: h, addCommands: g}), g({"mceResetDesignMode,mceBeginUndoLevel": function () { + }, "mceEndUndoLevel,mceAddUndoLevel": function () { + r.undoManager.add() + }, "Cut,Copy,Paste": function (e) { + var t = r.getDoc(), i; + try { + v(e) + } catch (o) { + i = u + } + if (i || !t.queryCommandSupported(e)) { + var a = r.translate("Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead."); + n.mac && (a = a.replace(/Ctrl\+/g, "\u2318+")), r.windowManager.alert(a) + } + }, unlink: function () { + if (_.isCollapsed()) { + var e = _.getNode(); + return void("A" == e.tagName && r.dom.remove(e, !0)) + } + k.remove("link") + }, "JustifyLeft,JustifyCenter,JustifyRight,JustifyFull": function (e) { + var t = e.substring(7); + "full" == t && (t = "justify"), i("left,center,right,justify".split(","), function (e) { + t != e && k.remove("align" + e) + }), b("align" + t), p("mceRepaint") + }, "InsertUnorderedList,InsertOrderedList": function (e) { + var t, n; + v(e), t = w.getParent(_.getNode(), "ol,ul"), t && (n = t.parentNode, /^(H[1-6]|P|ADDRESS|PRE)$/.test(n.nodeName) && (C(), w.split(n, t), x())) + }, "Bold,Italic,Underline,Strikethrough,Superscript,Subscript": function (e) { + b(e) + }, "ForeColor,HiliteColor,FontName": function (e, t, n) { + b(e, n) + }, FontSize: function (e, t, n) { + var r, i; + n >= 1 && 7 >= n && (i = l(E.font_size_style_values), r = l(E.font_size_classes), n = r ? r[n - 1] || n : i[n - 1] || n), b(e, n) + }, RemoveFormat: function (e) { + k.remove(e) + }, mceBlockQuote: function () { + b("blockquote") + }, FormatBlock: function (e, t, n) { + return b(n || "p") + }, mceCleanup: function () { + var e = _.getBookmark(); + r.setContent(r.getContent({cleanup: u}), {cleanup: u}), _.moveToBookmark(e) + }, mceRemoveNode: function (e, t, n) { + var i = n || _.getNode(); + i != r.getBody() && (C(), r.dom.remove(i, u), x()) + }, mceSelectNodeDepth: function (e, t, n) { + var i = 0; + w.getParent(_.getNode(), function (e) { + return 1 == e.nodeType && i++ == n ? (_.select(e), f) : void 0 + }, r.getBody()) + }, mceSelectNode: function (e, t, n) { + _.select(n) + }, mceInsertContent: function (t, n, i) { + function o(e) { + function t(e) { + return r[e] && 3 == r[e].nodeType + } + + var n, r, i; + return n = _.getRng(!0), r = n.startContainer, i = n.startOffset, 3 == r.nodeType && (i > 0 ? e = e.replace(/^ /, " ") : t("previousSibling") || (e = e.replace(/^ /, " ")), i < r.length ? e = e.replace(/ (
    |)$/, " ") : t("nextSibling") || (e = e.replace(/( | )(
    |)$/, " "))), e + } + + var a, s, l, c, u, f, p, m, h, g, v; + /^ | $/.test(i) && (i = o(i)), a = r.parser, s = new e({}, r.schema), v = 'ÈB;', f = {content: i, format: "html", selection: !0}, r.fire("BeforeSetContent", f), i = f.content, -1 == i.indexOf("{$caret}") && (i += "{$caret}"), i = i.replace(/\{\$caret\}/, v), m = _.getRng(); + var y = m.startContainer || (m.parentElement ? m.parentElement() : null), b = r.getBody(); + y === b && _.isCollapsed() && w.isBlock(b.firstChild) && w.isEmpty(b.firstChild) && (m = w.createRng(), m.setStart(b.firstChild, 0), m.setEnd(b.firstChild, 0), _.setRng(m)), _.isCollapsed() || r.getDoc().execCommand("Delete", !1, null), l = _.getNode(); + var C = {context: l.nodeName.toLowerCase()}; + if (u = a.parse(i, C), h = u.lastChild, "mce_marker" == h.attr("id"))for (p = h, h = h.prev; h; h = h.walk(!0))if (3 == h.type || !w.isBlock(h.name)) { + h.parent.insert(p, h, "br" === h.name); + break + } + if (C.invalid) { + for (_.setContent(v), l = _.getNode(), c = r.getBody(), 9 == l.nodeType ? l = h = c : h = l; h !== c;)l = h, h = h.parentNode; + i = l == c ? c.innerHTML : w.getOuterHTML(l), i = s.serialize(a.parse(i.replace(//i, function () { + return s.serialize(u) + }))), l == c ? w.setHTML(c, i) : w.setOuterHTML(l, i) + } else i = s.serialize(u), h = l.firstChild, g = l.lastChild, !h || h === g && "BR" === h.nodeName ? w.setHTML(l, i) : _.setContent(i); + p = w.get("mce_marker"), _.scrollIntoView(p), m = w.createRng(), h = p.previousSibling, h && 3 == h.nodeType ? (m.setStart(h, h.nodeValue.length), d || (g = p.nextSibling, g && 3 == g.nodeType && (h.appendData(g.data), g.parentNode.removeChild(g)))) : (m.setStartBefore(p), m.setEndBefore(p)), w.remove(p), _.setRng(m), r.fire("SetContent", f), r.addVisual() + }, mceInsertRawHTML: function (e, t, n) { + _.setContent("tiny_mce_marker"), r.setContent(r.getContent().replace(/tiny_mce_marker/g, function () { + return n + })) + }, mceToggleFormat: function (e, t, n) { + b(n) + }, mceSetContent: function (e, t, n) { + r.setContent(n) + }, "Indent,Outdent": function (e) { + var t, n, o; + t = E.indentation, n = /[a-z%]+$/i.exec(t), t = parseInt(t, 10), m("InsertUnorderedList") || m("InsertOrderedList") ? v(e) : (E.forced_root_block || w.getParent(_.getNode(), w.isBlock) || k.apply("div"), i(_.getSelectedBlocks(), function (i) { + if ("LI" != i.nodeName) { + var a = r.getParam("indent_use_margin", !1) ? "margin" : "padding"; + a += "rtl" == w.getStyle(i, "direction", !0) ? "Right" : "Left", "outdent" == e ? (o = Math.max(0, parseInt(i.style[a] || 0, 10) - t), w.setStyle(i, a, o ? o + n : "")) : (o = parseInt(i.style[a] || 0, 10) + t + n, w.setStyle(i, a, o)) + } + })) + }, mceRepaint: function () { + if (c)try { + C(u), _.getSel() && _.getSel().selectAllChildren(r.getBody()), _.collapse(u), x() + } catch (e) { + } + }, InsertHorizontalRule: function () { + r.execCommand("mceInsertContent", !1, "
    ") + }, mceToggleVisualAid: function () { + r.hasVisual = !r.hasVisual, r.addVisual() + }, mceReplaceContent: function (e, t, n) { + r.execCommand("mceInsertContent", !1, n.replace(/\{\$selection\}/g, _.getContent({format: "text"}))) + }, mceInsertLink: function (e, t, n) { + var r; + "string" == typeof n && (n = {href: n}), r = w.getParent(_.getNode(), "a"), n.href = n.href.replace(" ", "%20"), r && n.href || k.remove("link"), n.href && k.apply("link", n, r) + }, selectAll: function () { + var e = w.getRoot(), t; + _.getRng().setStart ? (t = w.createRng(), t.setStart(e, 0), t.setEnd(e, e.childNodes.length), _.setRng(t)) : (t = _.getRng(), t.item || (t.moveToElementText(e), t.select())) + }, "delete": function () { + v("Delete"); + var e = r.getBody(); + w.isEmpty(e) && (r.setContent(""), e.firstChild && w.isBlock(e.firstChild) ? r.selection.setCursorLocation(e.firstChild, 0) : r.selection.setCursorLocation(e, 0)) + }, mceNewDocument: function () { + r.setContent("") + }}), g({"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull": function (e) { + var t = "align" + e.substring(7), n = _.isCollapsed() ? [w.getParent(_.getNode(), w.isBlock)] : _.getSelectedBlocks(), r = a(n, function (e) { + return!!k.matchNode(e, t) + }); + return-1 !== s(r, u) + }, "Bold,Italic,Underline,Strikethrough,Superscript,Subscript": function (e) { + return y(e) + }, mceBlockQuote: function () { + return y("blockquote") + }, Outdent: function () { + var e; + if (E.inline_styles) { + if ((e = w.getParent(_.getStart(), w.isBlock)) && parseInt(e.style.paddingLeft, 10) > 0)return u; + if ((e = w.getParent(_.getEnd(), w.isBlock)) && parseInt(e.style.paddingLeft, 10) > 0)return u + } + return m("InsertUnorderedList") || m("InsertOrderedList") || !E.inline_styles && !!w.getParent(_.getNode(), "BLOCKQUOTE") + }, "InsertUnorderedList,InsertOrderedList": function (e) { + var t = w.getParent(_.getNode(), "ul,ol"); + return t && ("insertunorderedlist" === e && "UL" === t.tagName || "insertorderedlist" === e && "OL" === t.tagName) + }}, "state"), g({"FontSize,FontName": function (e) { + var t = 0, n; + return(n = w.getParent(_.getNode(), "span")) && (t = "fontsize" == e ? n.style.fontSize : n.style.fontFamily.replace(/, /g, ",").replace(/[\'\"]/g, "").toLowerCase()), t + }}, "value"), g({Undo: function () { + r.undoManager.undo() + }, Redo: function () { + r.undoManager.redo() + }}) + } + }), r(O, [f], function (e) { + function t(e, i) { + var o = this, a, s; + if (e = r(e), i = o.settings = i || {}, /^([\w\-]+):([^\/]{2})/i.test(e) || /^\s*#/.test(e))return void(o.source = e); + var l = 0 === e.indexOf("//"); + 0 !== e.indexOf("/") || l || (e = (i.base_uri ? i.base_uri.protocol || "http" : "http") + "://mce_host" + e), /^[\w\-]*:?\/\//.test(e) || (s = i.base_uri ? i.base_uri.path : new t(location.href).directory, e = "" === i.base_uri.protocol ? "//mce_host" + o.toAbsPath(s, e) : (i.base_uri && i.base_uri.protocol || "http") + "://mce_host" + o.toAbsPath(s, e)), e = e.replace(/@@/g, "(mce_at)"), e = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(e), n(["source", "protocol", "authority", "userInfo", "user", "password", "host", "port", "relative", "path", "directory", "file", "query", "anchor"], function (t, n) { + var r = e[n]; + r && (r = r.replace(/\(mce_at\)/g, "@@")), o[t] = r + }), a = i.base_uri, a && (o.protocol || (o.protocol = a.protocol), o.userInfo || (o.userInfo = a.userInfo), o.port || "mce_host" !== o.host || (o.port = a.port), o.host && "mce_host" !== o.host || (o.host = a.host), o.source = ""), l && (o.protocol = "") + } + + var n = e.each, r = e.trim; + return t.prototype = {setPath: function (e) { + var t = this; + e = /^(.*?)\/?(\w+)?$/.exec(e), t.path = e[0], t.directory = e[1], t.file = e[2], t.source = "", t.getURI() + }, toRelative: function (e) { + var n = this, r; + if ("./" === e)return e; + if (e = new t(e, {base_uri: n}), "mce_host" != e.host && n.host != e.host && e.host || n.port != e.port || n.protocol != e.protocol && "" !== e.protocol)return e.getURI(); + var i = n.getURI(), o = e.getURI(); + return i == o || "/" == i.charAt(i.length - 1) && i.substr(0, i.length - 1) == o ? i : (r = n.toRelPath(n.path, e.path), e.query && (r += "?" + e.query), e.anchor && (r += "#" + e.anchor), r) + }, toAbsolute: function (e, n) { + return e = new t(e, {base_uri: this}), e.getURI(this.host == e.host && this.protocol == e.protocol ? n : 0) + }, toRelPath: function (e, t) { + var n, r = 0, i = "", o, a; + if (e = e.substring(0, e.lastIndexOf("/")), e = e.split("/"), n = t.split("/"), e.length >= n.length)for (o = 0, a = e.length; a > o; o++)if (o >= n.length || e[o] != n[o]) { + r = o + 1; + break + } + if (e.length < n.length)for (o = 0, a = n.length; a > o; o++)if (o >= e.length || e[o] != n[o]) { + r = o + 1; + break + } + if (1 === r)return t; + for (o = 0, a = e.length - (r - 1); a > o; o++)i += "../"; + for (o = r - 1, a = n.length; a > o; o++)i += o != r - 1 ? "/" + n[o] : n[o]; + return i + }, toAbsPath: function (e, t) { + var r, i = 0, o = [], a, s; + for (a = /\/$/.test(t) ? "/" : "", e = e.split("/"), t = t.split("/"), n(e, function (e) { + e && o.push(e) + }), e = o, r = t.length - 1, o = []; r >= 0; r--)0 !== t[r].length && "." !== t[r] && (".." !== t[r] ? i > 0 ? i-- : o.push(t[r]) : i++); + return r = e.length - i, s = 0 >= r ? o.reverse().join("/") : e.slice(0, r).join("/") + "/" + o.reverse().join("/"), 0 !== s.indexOf("/") && (s = "/" + s), a && s.lastIndexOf("/") !== s.length - 1 && (s += a), s + }, getURI: function (e) { + var t, n = this; + return(!n.source || e) && (t = "", e || (t += n.protocol ? n.protocol + "://" : "//", n.userInfo && (t += n.userInfo + "@"), n.host && (t += n.host), n.port && (t += ":" + n.port)), n.path && (t += n.path), n.query && (t += "?" + n.query), n.anchor && (t += "#" + n.anchor), n.source = t), n.source + }}, t + }), r(I, [f], function (e) { + function t() { + } + + var n = e.each, r = e.extend, i, o; + return t.extend = i = function (e) { + function t() { + var e, t, n, r; + if (!o && (r = this, r.init && r.init.apply(r, arguments), t = r.Mixins))for (e = t.length; e--;)n = t[e], n.init && n.init.apply(r, arguments) + } + + function a() { + return this + } + + function s(e, t) { + return function () { + var n = this, r = n._super, i; + return n._super = c[e], i = t.apply(n, arguments), n._super = r, i + } + } + + var l = this, c = l.prototype, d, u, f; + o = !0, d = new l, o = !1, e.Mixins && (n(e.Mixins, function (t) { + t = t; + for (var n in t)"init" !== n && (e[n] = t[n]) + }), c.Mixins && (e.Mixins = c.Mixins.concat(e.Mixins))), e.Methods && n(e.Methods.split(","), function (t) { + e[t] = a + }), e.Properties && n(e.Properties.split(","), function (t) { + var n = "_" + t; + e[t] = function (e) { + var t = this, r; + return e !== r ? (t[n] = e, t) : t[n] + } + }), e.Statics && n(e.Statics, function (e, n) { + t[n] = e + }), e.Defaults && c.Defaults && (e.Defaults = r({}, c.Defaults, e.Defaults)); + for (u in e)f = e[u], d[u] = "function" == typeof f && c[u] ? s(u, f) : f; + return t.prototype = d, t.constructor = t, t.extend = i, t + }, t + }), r(z, [I], function (e) { + function t(e) { + for (var t = [], n = e.length, r; n--;)r = e[n], r.__checked || (t.push(r), r.__checked = 1); + for (n = t.length; n--;)delete t[n].__checked; + return t + } + + var n = /^([\w\\*]+)?(?:#([\w\\]+))?(?:\.([\w\\\.]+))?(?:\[\@?([\w\\]+)([\^\$\*!~]?=)([\w\\]+)\])?(?:\:(.+))?/i, r = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, i = /^\s*|\s*$/g, o, a = e.extend({init: function (e) { + function t(e) { + return e ? (e = e.toLowerCase(), function (t) { + return"*" === e || t.type === e + }) : void 0 + } + + function o(e) { + return e ? function (t) { + return t._name === e + } : void 0 + } + + function a(e) { + return e ? (e = e.split("."), function (t) { + for (var n = e.length; n--;)if (!t.hasClass(e[n]))return!1; + return!0 + }) : void 0 + } + + function s(e, t, n) { + return e ? function (r) { + var i = r[e] ? r[e]() : ""; + return t ? "=" === t ? i === n : "*=" === t ? i.indexOf(n) >= 0 : "~=" === t ? (" " + i + " ").indexOf(" " + n + " ") >= 0 : "!=" === t ? i != n : "^=" === t ? 0 === i.indexOf(n) : "$=" === t ? i.substr(i.length - n.length) === n : !1 : !!n + } : void 0 + } + + function l(e) { + var t; + return e ? (e = /(?:not\((.+)\))|(.+)/i.exec(e), e[1] ? (t = d(e[1], []), function (e) { + return!u(e, t) + }) : (e = e[2], function (t, n, r) { + return"first" === e ? 0 === n : "last" === e ? n === r - 1 : "even" === e ? n % 2 === 0 : "odd" === e ? n % 2 === 1 : t[e] ? t[e]() : !1 + })) : void 0 + } + + function c(e, r, c) { + function d(e) { + e && r.push(e) + } + + var u; + return u = n.exec(e.replace(i, "")), d(t(u[1])), d(o(u[2])), d(a(u[3])), d(s(u[4], u[5], u[6])), d(l(u[7])), r.psuedo = !!u[7], r.direct = c, r + } + + function d(e, t) { + var n = [], i, o, a; + do if (r.exec(""), o = r.exec(e), o && (e = o[3], n.push(o[1]), o[2])) { + i = o[3]; + break + } while (o); + for (i && d(i, t), e = [], a = 0; a < n.length; a++)">" != n[a] && e.push(c(n[a], [], ">" === n[a - 1])); + return t.push(e), t + } + + var u = this.match; + this._selectors = d(e, []) + }, match: function (e, t) { + var n, r, i, o, a, s, l, c, d, u, f, p, m; + for (t = t || this._selectors, n = 0, r = t.length; r > n; n++) { + for (a = t[n], o = a.length, m = e, p = 0, i = o - 1; i >= 0; i--)for (c = a[i]; m;) { + if (c.psuedo)for (f = m.parent().items(), d = u = f.length; d-- && f[d] !== m;); + for (s = 0, l = c.length; l > s; s++)if (!c[s](m, d, u)) { + s = l + 1; + break + } + if (s === l) { + p++; + break + } + if (i === o - 1)break; + m = m.parent() + } + if (p === o)return!0 + } + return!1 + }, find: function (e) { + function n(e, t, i) { + var o, a, s, l, c, d = t[i]; + for (o = 0, a = e.length; a > o; o++) { + for (c = e[o], s = 0, l = d.length; l > s; s++)if (!d[s](c, o, a)) { + s = l + 1; + break + } + if (s === l)i == t.length - 1 ? r.push(c) : c.items && n(c.items(), t, i + 1); else if (d.direct)return; + c.items && n(c.items(), t, i) + } + } + + var r = [], i, s, l = this._selectors; + if (e.items) { + for (i = 0, s = l.length; s > i; i++)n(e.items(), l[i], 0); + s > 1 && (r = t(r)) + } + return o || (o = a.Collection), new o(r) + }}); + return a + }), r(F, [f, z, I], function (e, t, n) { + var r, i, o = Array.prototype.push, a = Array.prototype.slice; + return i = {length: 0, init: function (e) { + e && this.add(e) + }, add: function (t) { + var n = this; + return e.isArray(t) ? o.apply(n, t) : t instanceof r ? n.add(t.toArray()) : o.call(n, t), n + }, set: function (e) { + var t = this, n = t.length, r; + for (t.length = 0, t.add(e), r = t.length; n > r; r++)delete t[r]; + return t + }, filter: function (e) { + var n = this, i, o, a = [], s, l; + for ("string" == typeof e ? (e = new t(e), l = function (t) { + return e.match(t) + }) : l = e, i = 0, o = n.length; o > i; i++)s = n[i], l(s) && a.push(s); + return new r(a) + }, slice: function () { + return new r(a.apply(this, arguments)) + }, eq: function (e) { + return-1 === e ? this.slice(e) : this.slice(e, +e + 1) + }, each: function (t) { + return e.each(this, t), this + }, toArray: function () { + return e.toArray(this) + }, indexOf: function (e) { + for (var t = this, n = t.length; n-- && t[n] !== e;); + return n + }, reverse: function () { + return new r(e.toArray(this).reverse()) + }, hasClass: function (e) { + return this[0] ? this[0].hasClass(e) : !1 + }, prop: function (e, t) { + var n = this, r, i; + return t !== r ? (n.each(function (n) { + n[e] && n[e](t) + }), n) : (i = n[0], i && i[e] ? i[e]() : void 0) + }, exec: function (t) { + var n = this, r = e.toArray(arguments).slice(1); + return n.each(function (e) { + e[t] && e[t].apply(e, r) + }), n + }, remove: function () { + for (var e = this.length; e--;)this[e].remove(); + return this + }}, e.each("fire on off show hide addClass removeClass append prepend before after reflow".split(" "), function (t) { + i[t] = function () { + var n = e.toArray(arguments); + return this.each(function (e) { + t in e && e[t].apply(e, n) + }), this + } + }), e.each("text name disabled active selected checked visible parent value data".split(" "), function (e) { + i[e] = function (t) { + return this.prop(e, t) + } + }), r = n.extend(i), t.Collection = r, r + }), r(W, [f, v], function (e, t) { + return{id: function () { + return t.DOM.uniqueId() + }, createFragment: function (e) { + return t.DOM.createFragment(e) + }, getWindowSize: function () { + return t.DOM.getViewPort() + }, getSize: function (e) { + var t, n; + if (e.getBoundingClientRect) { + var r = e.getBoundingClientRect(); + t = Math.max(r.width || r.right - r.left, e.offsetWidth), n = Math.max(r.height || r.bottom - r.bottom, e.offsetHeight) + } else t = e.offsetWidth, n = e.offsetHeight; + return{width: t, height: n} + }, getPos: function (e, n) { + return t.DOM.getPos(e, n) + }, getViewPort: function (e) { + return t.DOM.getViewPort(e) + }, get: function (e) { + return document.getElementById(e) + }, addClass: function (e, n) { + return t.DOM.addClass(e, n) + }, removeClass: function (e, n) { + return t.DOM.removeClass(e, n) + }, hasClass: function (e, n) { + return t.DOM.hasClass(e, n) + }, toggleClass: function (e, n, r) { + return t.DOM.toggleClass(e, n, r) + }, css: function (e, n, r) { + return t.DOM.setStyle(e, n, r) + }, on: function (e, n, r, i) { + return t.DOM.bind(e, n, r, i) + }, off: function (e, n, r) { + return t.DOM.unbind(e, n, r) + }, fire: function (e, n, r) { + return t.DOM.fire(e, n, r) + }, innerHtml: function (e, n) { + t.DOM.setHTML(e, n) + }} + }), r(V, [I, f, F, W], function (e, t, n, r) { + var i = t.makeMap("focusin focusout scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave wheel keydown keypress keyup contextmenu", " "), o = {}, a = "onmousewheel"in document, s = !1, l = e.extend({Statics: {elementIdCache: o}, isRtl: function () { + return l.rtl + }, classPrefix: "mce-", init: function (e) { + var n = this, i, o; + if (n.settings = e = t.extend({}, n.Defaults, e), n._id = r.id(), n._text = n._name = "", n._width = n._height = 0, n._aria = {role: e.role}, i = e.classes)for (i = i.split(" "), i.map = {}, o = i.length; o--;)i.map[i[o]] = !0; + n._classes = i || [], n.visible(!0), t.each("title text width height name classes visible disabled active value".split(" "), function (t) { + var r = e[t], i; + r !== i ? n[t](r) : n["_" + t] === i && (n["_" + t] = !1) + }), n.on("click", function () { + return n.disabled() ? !1 : void 0 + }), e.classes && t.each(e.classes.split(" "), function (e) { + n.addClass(e) + }), n.settings = e, n._borderBox = n.parseBox(e.border), n._paddingBox = n.parseBox(e.padding), n._marginBox = n.parseBox(e.margin), e.hidden && n.hide() + }, Properties: "parent,title,text,width,height,disabled,active,name,value", Methods: "renderHtml", getContainerElm: function () { + return document.body + }, getParentCtrl: function (e) { + for (var t, n = this.getRoot().controlIdLookup; e && n && !(t = n[e.id]);)e = e.parentNode; + return t + }, parseBox: function (e) { + var t, n = 10; + if (e)return"number" == typeof e ? (e = e || 0, {top: e, left: e, bottom: e, right: e}) : (e = e.split(" "), t = e.length, 1 === t ? e[1] = e[2] = e[3] = e[0] : 2 === t ? (e[2] = e[0], e[3] = e[1]) : 3 === t && (e[3] = e[1]), {top: parseInt(e[0], n) || 0, right: parseInt(e[1], n) || 0, bottom: parseInt(e[2], n) || 0, left: parseInt(e[3], n) || 0}) + }, borderBox: function () { + return this._borderBox + }, paddingBox: function () { + return this._paddingBox + }, marginBox: function () { + return this._marginBox + }, measureBox: function (e, t) { + function n(t) { + var n = document.defaultView; + return n ? (t = t.replace(/[A-Z]/g, function (e) { + return"-" + e + }), n.getComputedStyle(e, null).getPropertyValue(t)) : e.currentStyle[t] + } + + function r(e) { + var t = parseFloat(n(e), 10); + return isNaN(t) ? 0 : t + } + + return{top: r(t + "TopWidth"), right: r(t + "RightWidth"), bottom: r(t + "BottomWidth"), left: r(t + "LeftWidth")} + }, initLayoutRect: function () { + var e = this, t = e.settings, n, i, o = e.getEl(), a, s, l, c, d, u, f, p; + n = e._borderBox = e._borderBox || e.measureBox(o, "border"), e._paddingBox = e._paddingBox || e.measureBox(o, "padding"), e._marginBox = e._marginBox || e.measureBox(o, "margin"), p = r.getSize(o), u = t.minWidth, f = t.minHeight, l = u || p.width, c = f || p.height, a = t.width, s = t.height, d = t.autoResize, d = "undefined" != typeof d ? d : !a && !s, a = a || l, s = s || c; + var m = n.left + n.right, h = n.top + n.bottom, g = t.maxWidth || 65535, v = t.maxHeight || 65535; + return e._layoutRect = i = {x: t.x || 0, y: t.y || 0, w: a, h: s, deltaW: m, deltaH: h, contentW: a - m, contentH: s - h, innerW: a - m, innerH: s - h, startMinWidth: u || 0, startMinHeight: f || 0, minW: Math.min(l, g), minH: Math.min(c, v), maxW: g, maxH: v, autoResize: d, scrollW: 0}, e._lastLayoutRect = {}, i + }, layoutRect: function (e) { + var t = this, n = t._layoutRect, r, i, o, a, s, c; + return n || (n = t.initLayoutRect()), e ? (o = n.deltaW, a = n.deltaH, e.x !== s && (n.x = e.x), e.y !== s && (n.y = e.y), e.minW !== s && (n.minW = e.minW), e.minH !== s && (n.minH = e.minH), i = e.w, i !== s && (i = i < n.minW ? n.minW : i, i = i > n.maxW ? n.maxW : i, n.w = i, n.innerW = i - o), i = e.h, i !== s && (i = i < n.minH ? n.minH : i, i = i > n.maxH ? n.maxH : i, n.h = i, n.innerH = i - a), i = e.innerW, i !== s && (i = i < n.minW - o ? n.minW - o : i, i = i > n.maxW - o ? n.maxW - o : i, n.innerW = i, n.w = i + o), i = e.innerH, i !== s && (i = i < n.minH - a ? n.minH - a : i, i = i > n.maxH - a ? n.maxH - a : i, n.innerH = i, n.h = i + a), e.contentW !== s && (n.contentW = e.contentW), e.contentH !== s && (n.contentH = e.contentH), r = t._lastLayoutRect, (r.x !== n.x || r.y !== n.y || r.w !== n.w || r.h !== n.h) && (c = l.repaintControls, c && c.map && !c.map[t._id] && (c.push(t), c.map[t._id] = !0), r.x = n.x, r.y = n.y, r.w = n.w, r.h = n.h), t) : n + }, repaint: function () { + var e = this, t, n, r, i, o = 0, a = 0, s, l; + l = document.createRange ? function (e) { + return e + } : Math.round, t = e.getEl().style, r = e._layoutRect, s = e._lastRepaintRect || {}, i = e._borderBox, o = i.left + i.right, a = i.top + i.bottom, r.x !== s.x && (t.left = l(r.x) + "px", s.x = r.x), r.y !== s.y && (t.top = l(r.y) + "px", s.y = r.y), r.w !== s.w && (t.width = l(r.w - o) + "px", s.w = r.w), r.h !== s.h && (t.height = l(r.h - a) + "px", s.h = r.h), e._hasBody && r.innerW !== s.innerW && (n = e.getEl("body").style, n.width = l(r.innerW) + "px", s.innerW = r.innerW), e._hasBody && r.innerH !== s.innerH && (n = n || e.getEl("body").style, n.height = l(r.innerH) + "px", s.innerH = r.innerH), e._lastRepaintRect = s, e.fire("repaint", {}, !1) + }, on: function (e, t) { + function n(e) { + var t, n; + return function (i) { + return t || r.parents().each(function (r) { + var i = r.settings.callbacks; + return i && (t = i[e]) ? (n = r, !1) : void 0 + }), t.call(n, i) + } + } + + var r = this, o, a, s, l; + if (t)for ("string" == typeof t && (t = n(t)), s = e.toLowerCase().split(" "), l = s.length; l--;)e = s[l], o = r._bindings, o || (o = r._bindings = {}), a = o[e], a || (a = o[e] = []), a.push(t), i[e] && (r._nativeEvents ? r._nativeEvents[e] = !0 : r._nativeEvents = {name: !0}, r._rendered && r.bindPendingEvents()); + return r + }, off: function (e, t) { + var n = this, r, i = n._bindings, o, a, s, l; + if (i)if (e)for (s = e.toLowerCase().split(" "), r = s.length; r--;) { + if (e = s[r], o = i[e], !e) { + for (a in i)i[a].length = 0; + return n + } + if (o)if (t)for (l = o.length; l--;)o[l] === t && o.splice(l, 1); else o.length = 0 + } else n._bindings = []; + return n + }, fire: function (e, t, n) { + function r() { + return!1 + } + + function i() { + return!0 + } + + var o = this, a, s, l, c; + if (e = e.toLowerCase(), t = t || {}, t.type || (t.type = e), t.control || (t.control = o), t.preventDefault || (t.preventDefault = function () { + t.isDefaultPrevented = i + }, t.stopPropagation = function () { + t.isPropagationStopped = i + }, t.stopImmediatePropagation = function () { + t.isImmediatePropagationStopped = i + }, t.isDefaultPrevented = r, t.isPropagationStopped = r, t.isImmediatePropagationStopped = r), o._bindings && (l = o._bindings[e]))for (a = 0, s = l.length; s > a && (t.isImmediatePropagationStopped() || l[a].call(o, t) !== !1); a++); + if (n !== !1)for (c = o.parent(); c && !t.isPropagationStopped();)c.fire(e, t, !1), c = c.parent(); + return t + }, hasEventListeners: function (e) { + return e in this._bindings + }, parents: function (e) { + var t = this, r = new n; + for (t = t.parent(); t; t = t.parent())r.add(t); + return e && (r = r.filter(e)), r + }, next: function () { + var e = this.parent().items(); + return e[e.indexOf(this) + 1] + }, prev: function () { + var e = this.parent().items(); + return e[e.indexOf(this) - 1] + }, findCommonAncestor: function (e, t) { + for (var n; e;) { + for (n = t; n && e != n;)n = n.parent(); + if (e == n)break; + e = e.parent() + } + return e + }, hasClass: function (e, t) { + var n = this._classes[t || "control"]; + return e = this.classPrefix + e, n && !!n.map[e] + }, addClass: function (e, t) { + var n = this, r, i; + return e = this.classPrefix + e, r = n._classes[t || "control"], r || (r = [], r.map = {}, n._classes[t || "control"] = r), r.map[e] || (r.map[e] = e, r.push(e), n._rendered && (i = n.getEl(t), i && (i.className = r.join(" ")))), n + }, removeClass: function (e, t) { + var n = this, r, i, o; + if (e = this.classPrefix + e, r = n._classes[t || "control"], r && r.map[e])for (delete r.map[e], i = r.length; i--;)r[i] === e && r.splice(i, 1); + return n._rendered && (o = n.getEl(t), o && (o.className = r.join(" "))), n + }, toggleClass: function (e, t, n) { + var r = this; + return t ? r.addClass(e, n) : r.removeClass(e, n), r + }, classes: function (e) { + var t = this._classes[e || "control"]; + return t ? t.join(" ") : "" + }, innerHtml: function (e) { + return r.innerHtml(this.getEl(), e), this + }, getEl: function (e, t) { + var n, i = e ? this._id + "-" + e : this._id; + return n = o[i] = (t === !0 ? null : o[i]) || r.get(i) + }, visible: function (e) { + var t = this, n; + return"undefined" != typeof e ? (t._visible !== e && (t._rendered && (t.getEl().style.display = e ? "" : "none"), t._visible = e, n = t.parent(), n && (n._lastRect = null), t.fire(e ? "show" : "hide")), t) : t._visible + }, show: function () { + return this.visible(!0) + }, hide: function () { + return this.visible(!1) + }, focus: function () { + try { + this.getEl().focus() + } catch (e) { + } + return this + }, blur: function () { + return this.getEl().blur(), this + }, aria: function (e, t) { + var n = this, r = n.getEl(); + return"undefined" == typeof t ? n._aria[e] : (n._aria[e] = t, n._rendered && ("label" == e && r.setAttribute("aria-labelledby", n._id), r.setAttribute("role" == e ? e : "aria-" + e, t)), n) + }, encode: function (e, t) { + return t !== !1 && l.translate && (e = l.translate(e)), (e || "").replace(/[&<>"]/g, function (e) { + return"&#" + e.charCodeAt(0) + ";" + }) + }, before: function (e) { + var t = this, n = t.parent(); + return n && n.insert(e, n.items().indexOf(t), !0), t + }, after: function (e) { + var t = this, n = t.parent(); + return n && n.insert(e, n.items().indexOf(t)), t + }, remove: function () { + var e = this, t = e.getEl(), n = e.parent(), i, a; + if (e.items) { + var s = e.items().toArray(); + for (a = s.length; a--;)s[a].remove() + } + n && n.items && (i = [], n.items().each(function (t) { + t !== e && i.push(t) + }), n.items().set(i), n._lastRect = null), e._eventsRoot && e._eventsRoot == e && r.off(t); + var l = e.getRoot().controlIdLookup; + if (l && delete l[e._id], delete o[e._id], t && t.parentNode) { + var c = t.getElementsByTagName("*"); + for (a = c.length; a--;)delete o[c[a].id]; + t.parentNode.removeChild(t) + } + return e._rendered = !1, e + }, renderBefore: function (e) { + var t = this; + return e.parentNode.insertBefore(r.createFragment(t.renderHtml()), e), t.postRender(), t + }, renderTo: function (e) { + var t = this; + return e = e || t.getContainerElm(), e.appendChild(r.createFragment(t.renderHtml())), t.postRender(), t + }, postRender: function () { + var e = this, t = e.settings, n, i, o, a, s; + for (a in t)0 === a.indexOf("on") && e.on(a.substr(2), t[a]); + if (e._eventsRoot) { + for (o = e.parent(); !s && o; o = o.parent())s = o._eventsRoot; + if (s)for (a in s._nativeEvents)e._nativeEvents[a] = !0 + } + e.bindPendingEvents(), t.style && (n = e.getEl(), n && (n.setAttribute("style", t.style), n.style.cssText = t.style)), e._visible || r.css(e.getEl(), "display", "none"), e.settings.border && (i = e.borderBox(), r.css(e.getEl(), {"border-top-width": i.top, "border-right-width": i.right, "border-bottom-width": i.bottom, "border-left-width": i.left})); + var l = e.getRoot(); + l.controlIdLookup || (l.controlIdLookup = {}), l.controlIdLookup[e._id] = e; + for (var c in e._aria)e.aria(c, e._aria[c]); + e.fire("postrender", {}, !1) + }, scrollIntoView: function (e) { + function t(e, t) { + var n, r, i = e; + for (n = r = 0; i && i != t && i.nodeType;)n += i.offsetLeft || 0, r += i.offsetTop || 0, i = i.offsetParent; + return{x: n, y: r} + } + + var n = this.getEl(), r = n.parentNode, i, o, a, s, l, c, d = t(n, r); + return i = d.x, o = d.y, a = n.offsetWidth, s = n.offsetHeight, l = r.clientWidth, c = r.clientHeight, "end" == e ? (i -= l - a, o -= c - s) : "center" == e && (i -= l / 2 - a / 2, o -= c / 2 - s / 2), r.scrollLeft = i, r.scrollTop = o, this + }, bindPendingEvents: function () { + function e(e) { + var t = o.getParentCtrl(e.target); + t && t.fire(e.type, e) + } + + function t() { + var e = u._lastHoverCtrl; + e && (e.fire("mouseleave", {target: e.getEl()}), e.parents().each(function (e) { + e.fire("mouseleave", {target: e.getEl()}) + }), u._lastHoverCtrl = null) + } + + function n(e) { + var t = o.getParentCtrl(e.target), n = u._lastHoverCtrl, r = 0, i, a, s; + if (t !== n) { + if (u._lastHoverCtrl = t, a = t.parents().toArray().reverse(), a.push(t), n) { + for (s = n.parents().toArray().reverse(), s.push(n), r = 0; r < s.length && a[r] === s[r]; r++); + for (i = s.length - 1; i >= r; i--)n = s[i], n.fire("mouseleave", {target: n.getEl()}) + } + for (i = r; i < a.length; i++)t = a[i], t.fire("mouseenter", {target: t.getEl()}) + } + } + + function i(e) { + e.preventDefault(), "mousewheel" == e.type ? (e.deltaY = -1 / 40 * e.wheelDelta, e.wheelDeltaX && (e.deltaX = -1 / 40 * e.wheelDeltaX)) : (e.deltaX = 0, e.deltaY = e.detail), e = o.fire("wheel", e) + } + + var o = this, l, c, d, u, f, p; + if (o._rendered = !0, f = o._nativeEvents) { + for (d = o.parents().toArray(), d.unshift(o), l = 0, c = d.length; !u && c > l; l++)u = d[l]._eventsRoot; + for (u || (u = d[d.length - 1] || o), o._eventsRoot = u, c = l, l = 0; c > l; l++)d[l]._eventsRoot = u; + for (p in f) { + if (!f)return!1; + "wheel" !== p || s ? ("mouseenter" === p || "mouseleave" === p ? u._hasMouseEnter || (r.on(u.getEl(), "mouseleave", t), r.on(u.getEl(), "mouseover", n), u._hasMouseEnter = 1) : u[p] || (r.on(u.getEl(), p, e), u[p] = !0), f[p] = !1) : a ? r.on(o.getEl(), "mousewheel", i) : r.on(o.getEl(), "DOMMouseScroll", i) + } + } + }, getRoot: function () { + for (var e = this, t, n = []; e;) { + if (e.rootControl) { + t = e.rootControl; + break + } + n.push(e), t = e, e = e.parent() + } + t || (t = this); + for (var r = n.length; r--;)n[r].rootControl = t; + return t + }, reflow: function () { + return this.repaint(), this + }}); + return l + }), r(U, [], function () { + var e = {}, t; + return{add: function (t, n) { + e[t.toLowerCase()] = n + }, has: function (t) { + return!!e[t.toLowerCase()] + }, create: function (n, r) { + var i, o, a; + if (!t) { + a = tinymce.ui; + for (o in a)e[o.toLowerCase()] = a[o]; + t = !0 + } + if ("string" == typeof n ? (r = r || {}, r.type = n) : (r = n, n = r.type), n = n.toLowerCase(), i = e[n], !i)throw new Error("Could not find control by type: " + n); + return i = new i(r), i.type = n, i + }} + }), r(q, [V, F, z, U, f, W], function (e, t, n, r, i, o) { + var a = {}; + return e.extend({layout: "", innerClass: "container-inner", init: function (e) { + var n = this; + n._super(e), e = n.settings, n._fixed = e.fixed, n._items = new t, n.isRtl() && n.addClass("rtl"), n.addClass("container"), n.addClass("container-body", "body"), e.containerCls && n.addClass(e.containerCls), n._layout = r.create((e.layout || n.layout) + "layout"), n.settings.items && n.add(n.settings.items), n._hasBody = !0 + }, items: function () { + return this._items + }, find: function (e) { + return e = a[e] = a[e] || new n(e), e.find(this) + }, add: function (e) { + var t = this; + return t.items().add(t.create(e)).parent(t), t + }, focus: function () { + var e = this; + return e.keyNav ? e.keyNav.focusFirst() : e._super(), e + }, replace: function (e, t) { + for (var n, r = this.items(), i = r.length; i--;)if (r[i] === e) { + r[i] = t; + break + } + i >= 0 && (n = t.getEl(), n && n.parentNode.removeChild(n), n = e.getEl(), n && n.parentNode.removeChild(n)), t.parent(this) + }, create: function (t) { + var n = this, o, a = []; + return i.isArray(t) || (t = [t]), i.each(t, function (t) { + t && (t instanceof e || ("string" == typeof t && (t = {type: t}), o = i.extend({}, n.settings.defaults, t), t.type = o.type = o.type || t.type || n.settings.defaultType || (o.defaults ? o.defaults.type : null), t = r.create(o)), a.push(t)) + }), a + }, renderNew: function () { + var e = this; + return e.items().each(function (t, n) { + var r, i; + t.parent(e), t._rendered || (r = e.getEl("body"), i = o.createFragment(t.renderHtml()), r.hasChildNodes() && n <= r.childNodes.length - 1 ? r.insertBefore(i, r.childNodes[n]) : r.appendChild(i), t.postRender()) + }), e._layout.applyClasses(e), e._lastRect = null, e + }, append: function (e) { + return this.add(e).renderNew() + }, prepend: function (e) { + var t = this; + return t.items().set(t.create(e).concat(t.items().toArray())), t.renderNew() + }, insert: function (e, t, n) { + var r = this, i, o, a; + return e = r.create(e), i = r.items(), !n && t < i.length - 1 && (t += 1), t >= 0 && t < i.length && (o = i.slice(0, t).toArray(), a = i.slice(t).toArray(), i.set(o.concat(e, a))), r.renderNew() + }, fromJSON: function (e) { + var t = this; + for (var n in e)t.find("#" + n).value(e[n]); + return t + }, toJSON: function () { + var e = this, t = {}; + return e.find("*").each(function (e) { + var n = e.name(), r = e.value(); + n && "undefined" != typeof r && (t[n] = r) + }), t + }, preRender: function () { + }, renderHtml: function () { + var e = this, t = e._layout, n = this.settings.role; + return e.preRender(), t.preRender(e), '
    ' + (e.settings.html || "") + t.renderHtml(e) + "
    " + }, postRender: function () { + var e = this, t; + return e.items().exec("postRender"), e._super(), e._layout.postRender(e), e._rendered = !0, e.settings.style && o.css(e.getEl(), e.settings.style), e.settings.border && (t = e.borderBox(), o.css(e.getEl(), {"border-top-width": t.top, "border-right-width": t.right, "border-bottom-width": t.bottom, "border-left-width": t.left})), e + }, initLayoutRect: function () { + var e = this, t = e._super(); + return e._layout.recalc(e), t + }, recalc: function () { + var e = this, t = e._layoutRect, n = e._lastRect; + return n && n.w == t.w && n.h == t.h ? void 0 : (e._layout.recalc(e), t = e.layoutRect(), e._lastRect = {x: t.x, y: t.y, w: t.w, h: t.h}, !0) + }, reflow: function () { + var t, n; + if (this.visible()) { + for (e.repaintControls = [], e.repaintControls.map = {}, n = this.recalc(), t = e.repaintControls.length; t--;)e.repaintControls[t].repaint(); + "flow" !== this.settings.layout && "stack" !== this.settings.layout && this.repaint(), e.repaintControls = [] + } + return this + }}) + }), r(j, [W], function (e) { + function t() { + var e = document, t, n, r, i, o, a, s, l, c = Math.max; + return t = e.documentElement, n = e.body, r = c(t.scrollWidth, n.scrollWidth), i = c(t.clientWidth, n.clientWidth), o = c(t.offsetWidth, n.offsetWidth), a = c(t.scrollHeight, n.scrollHeight), s = c(t.clientHeight, n.clientHeight), l = c(t.offsetHeight, n.offsetHeight), {width: o > r ? i : r, height: l > a ? s : a} + } + + return function (n, r) { + function i() { + return a.getElementById(r.handle || n) + } + + var o, a = document, s, l, c, d, u, f; + r = r || {}, l = function (n) { + var l = t(), p, m; + n.preventDefault(), s = n.button, p = i(), u = n.screenX, f = n.screenY, m = window.getComputedStyle ? window.getComputedStyle(p, null).getPropertyValue("cursor") : p.runtimeStyle.cursor, o = a.createElement("div"), e.css(o, {position: "absolute", top: 0, left: 0, width: l.width, height: l.height, zIndex: 2147483647, opacity: 1e-4, background: "red", cursor: m}), a.body.appendChild(o), e.on(a, "mousemove", d), e.on(a, "mouseup", c), r.start(n) + }, d = function (e) { + return e.button !== s ? c(e) : (e.deltaX = e.screenX - u, e.deltaY = e.screenY - f, e.preventDefault(), void r.drag(e)) + }, c = function (t) { + e.off(a, "mousemove", d), e.off(a, "mouseup", c), o.parentNode.removeChild(o), r.stop && r.stop(t) + }, this.destroy = function () { + e.off(i()) + }, e.on(i(), "mousedown", l) + } + }), r($, [W, j], function (e, t) { + return{init: function () { + var e = this; + e.on("repaint", e.renderScroll) + }, renderScroll: function () { + function n() { + function t(t, a, s, l, c, d) { + var u, f, p, m, h, g, v, y, b; + if (f = i.getEl("scroll" + t)) { + if (y = a.toLowerCase(), b = s.toLowerCase(), i.getEl("absend") && e.css(i.getEl("absend"), y, i.layoutRect()[l] - 1), !c)return void e.css(f, "display", "none"); + e.css(f, "display", "block"), u = i.getEl("body"), p = i.getEl("scroll" + t + "t"), m = u["client" + s] - 2 * o, m -= n && r ? f["client" + d] : 0, h = u["scroll" + s], g = m / h, v = {}, v[y] = u["offset" + a] + o, v[b] = m, e.css(f, v), v = {}, v[y] = u["scroll" + a] * g, v[b] = m * g, e.css(p, v) + } + } + + var n, r, a; + a = i.getEl("body"), n = a.scrollWidth > a.clientWidth, r = a.scrollHeight > a.clientHeight, t("h", "Left", "Width", "contentW", n, "Height"), t("v", "Top", "Height", "contentH", r, "Width") + } + + function r() { + function n(n, r, a, s, l) { + var c, d = i._id + "-scroll" + n, u = i.classPrefix; + i.getEl().appendChild(e.createFragment('
    ')), i.draghelper = new t(d + "t", {start: function () { + c = i.getEl("body")["scroll" + r], e.addClass(e.get(d), u + "active") + }, drag: function (e) { + var t, d, u, f, p = i.layoutRect(); + d = p.contentW > p.innerW, u = p.contentH > p.innerH, f = i.getEl("body")["client" + a] - 2 * o, f -= d && u ? i.getEl("scroll" + n)["client" + l] : 0, t = f / i.getEl("body")["scroll" + a], i.getEl("body")["scroll" + r] = c + e["delta" + s] / t + }, stop: function () { + e.removeClass(e.get(d), u + "active") + }}) + } + + i.addClass("scroll"), n("v", "Top", "Height", "Y", "Width"), n("h", "Left", "Width", "X", "Height") + } + + var i = this, o = 2; + i.settings.autoScroll && (i._hasScroll || (i._hasScroll = !0, r(), i.on("wheel", function (e) { + var t = i.getEl("body"); + t.scrollLeft += 10 * (e.deltaX || 0), t.scrollTop += 10 * e.deltaY, n() + }), e.on(i.getEl("body"), "scroll", n)), n()) + }} + }), r(K, [q, $], function (e, t) { + return e.extend({Defaults: {layout: "fit", containerCls: "panel"}, Mixins: [t], renderHtml: function () { + var e = this, t = e._layout, n = e.settings.html; + return e.preRender(), t.preRender(e), "undefined" == typeof n ? n = '
    ' + t.renderHtml(e) + "
    " : ("function" == typeof n && (n = n.call(e)), e._hasBody = !1), '
    ' + (e._preBodyHtml || "") + n + "
    " + }}) + }), r(Y, [W], function (e) { + function t(t, n, r) { + var i, o, a, s, l, c, d, u, f, p; + return f = e.getViewPort(), o = e.getPos(n), a = o.x, s = o.y, t._fixed && (a -= f.x, s -= f.y), i = t.getEl(), p = e.getSize(i), l = p.width, c = p.height, p = e.getSize(n), d = p.width, u = p.height, r = (r || "").split(""), "b" === r[0] && (s += u), "r" === r[1] && (a += d), "c" === r[0] && (s += Math.round(u / 2)), "c" === r[1] && (a += Math.round(d / 2)), "b" === r[3] && (s -= c), "r" === r[4] && (a -= l), "c" === r[3] && (s -= Math.round(c / 2)), "c" === r[4] && (a -= Math.round(l / 2)), {x: a, y: s, w: l, h: c} + } + + return{testMoveRel: function (n, r) { + for (var i = e.getViewPort(), o = 0; o < r.length; o++) { + var a = t(this, n, r[o]); + if (this._fixed) { + if (a.x > 0 && a.x + a.w < i.w && a.y > 0 && a.y + a.h < i.h)return r[o] + } else if (a.x > i.x && a.x + a.w < i.w + i.x && a.y > i.y && a.y + a.h < i.h + i.y)return r[o] + } + return r[0] + }, moveRel: function (e, n) { + "string" != typeof n && (n = this.testMoveRel(e, n)); + var r = t(this, e, n); + return this.moveTo(r.x, r.y) + }, moveBy: function (e, t) { + var n = this, r = n.layoutRect(); + return n.moveTo(r.x + e, r.y + t), n + }, moveTo: function (t, n) { + function r(e, t, n) { + return 0 > e ? 0 : e + n > t ? (e = t - n, 0 > e ? 0 : e) : e + } + + var i = this; + if (i.settings.constrainToViewport) { + var o = e.getViewPort(window), a = i.layoutRect(); + t = r(t, o.w + o.x, a.w), n = r(n, o.h + o.y, a.h) + } + return i._rendered ? i.layoutRect({x: t, y: n}).repaint() : (i.settings.x = t, i.settings.y = n), i.fire("move", {x: t, y: n}), i + }} + }), r(G, [W], function (e) { + return{resizeToContent: function () { + this._layoutRect.autoResize = !0, this._lastRect = null, this.reflow() + }, resizeTo: function (t, n) { + if (1 >= t || 1 >= n) { + var r = e.getWindowSize(); + t = 1 >= t ? t * r.w : t, n = 1 >= n ? n * r.h : n + } + return this._layoutRect.autoResize = !1, this.layoutRect({minW: t, minH: n, w: t, h: n}).reflow() + }, resizeBy: function (e, t) { + var n = this, r = n.layoutRect(); + return n.resizeTo(r.w + e, r.h + t) + }} + }), r(X, [K, Y, G, W], function (e, t, n, r) { + function i(e) { + var t; + for (t = s.length; t--;)s[t] === e && s.splice(t, 1); + for (t = l.length; t--;)l[t] === e && l.splice(t, 1) + } + + var o, a, s = [], l = [], c, d = e.extend({Mixins: [t, n], init: function (e) { + function t() { + var e, t = d.zIndex || 65535, n; + if (l.length)for (e = 0; e < l.length; e++)l[e].modal && (t++, n = l[e]), l[e].getEl().style.zIndex = t, l[e].zIndex = t, t++; + var i = document.getElementById(u.classPrefix + "modal-block"); + n ? r.css(i, "z-index", n.zIndex - 1) : i && (i.parentNode.removeChild(i), c = !1), d.currentZIndex = t + } + + function n(e, t) { + for (; e;) { + if (e == t)return!0; + e = e.parent() + } + } + + function i(e) { + function t(t, n) { + for (var r, i = 0; i < s.length; i++)if (s[i] != e)for (r = s[i].parent(); r && (r = r.parent());)r == e && s[i].fixed(t).moveBy(0, n).repaint() + } + + var n = r.getViewPort().y; + e.settings.autofix && (e._fixed ? e._autoFixY > n && (e.fixed(!1).layoutRect({y: e._autoFixY}).repaint(), t(!1, e._autoFixY - n)) : (e._autoFixY = e.layoutRect().y, e._autoFixY < n && (e.fixed(!0).layoutRect({y: 0}).repaint(), t(!0, n - e._autoFixY)))) + } + + var u = this; + u._super(e), u._eventsRoot = u, u.addClass("floatpanel"), e.autohide && (o || (o = function (e) { + for (var t = s.length; t--;) { + var r = s[t], i = r.getParentCtrl(e.target); + if (r.settings.autohide) { + if (i && (n(i, r) || r.parent() === i))continue; + e = r.fire("autohide", {target: e.target}), e.isDefaultPrevented() || r.hide() + } + } + }, r.on(document, "click", o)), s.push(u)), e.autofix && (a || (a = function () { + var e; + for (e = s.length; e--;)i(s[e]) + }, r.on(window, "scroll", a)), u.on("move", function () { + i(this) + })), u.on("postrender show", function (e) { + if (e.control == u) { + var n, i = u.classPrefix; + u.modal && !c && (n = r.createFragment('
    '), n = n.firstChild, u.getContainerElm().appendChild(n), setTimeout(function () { + r.addClass(n, i + "in"), r.addClass(u.getEl(), i + "in") + }, 0), c = !0), l.push(u), t() + } + }), u.on("close hide", function (e) { + if (e.control == u) { + for (var n = l.length; n--;)l[n] === u && l.splice(n, 1); + t() + } + }), u.on("show", function () { + u.parents().each(function (e) { + return e._fixed ? (u.fixed(!0), !1) : void 0 + }) + }), e.popover && (u._preBodyHtml = '
    ', u.addClass("popover").addClass("bottom").addClass(u.isRtl() ? "end" : "start")) + }, fixed: function (e) { + var t = this; + if (t._fixed != e) { + if (t._rendered) { + var n = r.getViewPort(); + e ? t.layoutRect().y -= n.y : t.layoutRect().y += n.y + } + t.toggleClass("fixed", e), t._fixed = e + } + return t + }, show: function () { + var e = this, t, n = e._super(); + for (t = s.length; t-- && s[t] !== e;); + return-1 === t && s.push(e), n + }, hide: function () { + return i(this), this._super() + }, hideAll: function () { + d.hideAll() + }, close: function () { + var e = this; + return e.fire("close"), e.remove() + }, remove: function () { + i(this), this._super() + }}); + return d.hideAll = function () { + for (var e = s.length; e--;) { + var t = s[e]; + t.settings.autohide && (t.fire("cancel", {}, !1), t.hide(), s.splice(e, 1)) + } + }, d + }), r(J, [W], function (e) { + return function (t) { + function n() { + if (!m)if (m = [], u.find)u.find("*").each(function (e) { + e.canFocus && m.push(e.getEl()) + }); else for (var e = u.getEl().getElementsByTagName("*"), t = 0; t < e.length; t++)e[t].id && e[t] && m.push(e[t]) + } + + function r() { + return document.getElementById(h) + } + + function i(e) { + return e = e || r(), e && e.getAttribute("role") + } + + function o(e) { + for (var t, n = e || r(); n = n.parentNode;)if (t = i(n))return t + } + + function a(e) { + var t = document.getElementById(h); + return t ? t.getAttribute("aria-" + e) : void 0 + } + + function s() { + var n = r(); + if (!n || "TEXTAREA" != n.nodeName && "text" != n.type)return t.onAction ? t.onAction(h) : e.fire(r(), "click", {keyboard: !0}), !0 + } + + function l() { + var e; + t.onCancel ? ((e = r()) && e.blur(), t.onCancel()) : t.root.fire("cancel") + } + + function c(e) { + function r(e) { + for (var t = u ? u.getEl() : document.body; e && e != t;) { + if ("none" == e.style.display)return!1; + e = e.parentNode + } + return!0 + } + + var i = -1, o, a, l = []; + for (n(), a = l.length, a = 0; a < m.length; a++)r(m[a]) && l.push(m[a]); + for (a = l.length; a--;)if (l[a].id === h) { + i = a; + break + } + i += e, 0 > i ? i = l.length - 1 : i >= l.length && (i = 0), o = l[i], o.focus(), h = o.id, t.actOnFocus && s() + } + + function d() { + var e, r; + for (r = i(t.root.getEl()), n(), e = m.length; e--;)if ("toolbar" == r && m[e].id === h)return void m[e].focus(); + m[0].focus() + } + + var u = t.root, f = t.enableUpDown !== !1, p = t.enableLeftRight !== !1, m = t.items, h; + return u.on("keydown", function (e) { + var n = 37, r = 39, d = 38, u = 40, m = 27, h = 14, g = 13, v = 32, y = 9, b; + switch (e.keyCode) { + case n: + p && (t.leftAction ? t.leftAction() : c(-1), b = !0); + break; + case r: + p && ("menuitem" == i() && "menu" == o() ? a("haspopup") && s() : c(1), b = !0); + break; + case d: + f && (c(-1), b = !0); + break; + case u: + f && ("menuitem" == i() && "menubar" == o() ? s() : "button" == i() && a("haspopup") ? s() : c(1), b = !0); + break; + case y: + b = !0, c(e.shiftKey ? -1 : 1); + break; + case m: + b = !0, l(); + break; + case h: + case g: + case v: + b = s() + } + b && (e.stopPropagation(), e.preventDefault()) + }), u.on("focusin", function (e) { + n(), h = e.target.id + }), {moveFocus: c, focusFirst: d, cancel: l} + } + }), r(Q, [X, K, W, J, j], function (e, t, n, r, i) { + var o = e.extend({modal: !0, Defaults: {border: 1, layout: "flex", containerCls: "panel", role: "dialog", callbacks: {submit: function () { + this.fire("submit", {data: this.toJSON()}) + }, close: function () { + this.close() + }}}, init: function (e) { + var n = this; + n._super(e), n.isRtl() && n.addClass("rtl"), n.addClass("window"), n._fixed = !0, e.buttons && (n.statusbar = new t({layout: "flex", border: "1 0 0 0", spacing: 3, padding: 10, align: "center", pack: n.isRtl() ? "start" : "end", defaults: {type: "button"}, items: e.buttons}), n.statusbar.addClass("foot"), n.statusbar.parent(n)), n.on("click", function (e) { + -1 != e.target.className.indexOf(n.classPrefix + "close") && n.close() + }), n.aria("label", e.title), n._fullscreen = !1 + }, recalc: function () { + var e = this, t = e.statusbar, r, i, o, a; + e._fullscreen && (e.layoutRect(n.getWindowSize()), e.layoutRect().contentH = e.layoutRect().innerH), e._super(), r = e.layoutRect(), e.settings.title && !e._fullscreen && (i = r.headerW, i > r.w && (o = r.x - Math.max(0, i / 2), e.layoutRect({w: i, x: o}), a = !0)), t && (t.layoutRect({w: e.layoutRect().innerW}).recalc(), i = t.layoutRect().minW + r.deltaW, i > r.w && (o = r.x - Math.max(0, i - r.w), e.layoutRect({w: i, x: o}), a = !0)), a && e.recalc() + }, initLayoutRect: function () { + var e = this, t = e._super(), r = 0, i; + if (e.settings.title && !e._fullscreen) { + i = e.getEl("head"); + var o = n.getSize(i); + t.headerW = o.width, t.headerH = o.height, r += t.headerH + } + e.statusbar && (r += e.statusbar.layoutRect().h), t.deltaH += r, t.minH += r, t.h += r; + var a = n.getWindowSize(); + return t.x = Math.max(0, a.w / 2 - t.w / 2), t.y = Math.max(0, a.h / 2 - t.h / 2), t + }, renderHtml: function () { + var e = this, t = e._layout, n = e._id, r = e.classPrefix, i = e.settings, o = "", a = "", s = i.html; + return e.preRender(), t.preRender(e), i.title && (o = '
    ' + e.encode(i.title) + '
    '), i.url && (s = ''), "undefined" == typeof s && (s = t.renderHtml(e)), e.statusbar && (a = e.statusbar.renderHtml()), '
    ' + o + '
    ' + s + "
    " + a + "
    " + }, fullscreen: function (e) { + var t = this, r = document.documentElement, i, o = t.classPrefix, a; + if (e != t._fullscreen)if (n.on(window, "resize", function () { + var e; + if (t._fullscreen)if (i)t._timer || (t._timer = setTimeout(function () { + var e = n.getWindowSize(); + t.moveTo(0, 0).resizeTo(e.w, e.h), t._timer = 0 + }, 50)); else { + e = (new Date).getTime(); + var r = n.getWindowSize(); + t.moveTo(0, 0).resizeTo(r.w, r.h), (new Date).getTime() - e > 50 && (i = !0) + } + }), a = t.layoutRect(), t._fullscreen = e, e) { + t._initial = {x: a.x, y: a.y, w: a.w, h: a.h}, t._borderBox = t.parseBox("0"), t.getEl("head").style.display = "none", a.deltaH -= a.headerH + 2, n.addClass(r, o + "fullscreen"), n.addClass(document.body, o + "fullscreen"), t.addClass("fullscreen"); + var s = n.getWindowSize(); + t.moveTo(0, 0).resizeTo(s.w, s.h) + } else t._borderBox = t.parseBox(t.settings.border), t.getEl("head").style.display = "", a.deltaH += a.headerH, n.removeClass(r, o + "fullscreen"), n.removeClass(document.body, o + "fullscreen"), t.removeClass("fullscreen"), t.moveTo(t._initial.x, t._initial.y).resizeTo(t._initial.w, t._initial.h); + return t.reflow() + }, postRender: function () { + var e = this, t = [], n, o, a; + setTimeout(function () { + e.addClass("in") + }, 0), e.keyboardNavigation = new r({root: e, enableLeftRight: !1, enableUpDown: !1, items: t, onCancel: function () { + e.close() + }}), e.find("*").each(function (e) { + e.canFocus && (o = o || e.settings.autofocus, n = n || e, e.subinput ? (t.push(e.getEl("inp")), e.getEl("open") && t.push(e.getEl("open"))) : t.push(e.getEl())) + }), e.statusbar && e.statusbar.find("*").each(function (e) { + e.canFocus && (o = o || e.settings.autofocus, n = n || e, t.push(e.getEl())) + }), e._super(), e.statusbar && e.statusbar.postRender(), !o && n && n.focus(), this.dragHelper = new i(e._id + "-dragh", {start: function () { + a = {x: e.layoutRect().x, y: e.layoutRect().y} + }, drag: function (t) { + e.moveTo(a.x + t.deltaX, a.y + t.deltaY) + }}), e.on("submit", function (t) { + t.isDefaultPrevented() || e.close() + }) + }, submit: function () { + return this.fire("submit", {data: this.toJSON()}) + }, remove: function () { + var e = this, t = e.classPrefix; + e.dragHelper.destroy(), e._super(), e.statusbar && this.statusbar.remove(), e._fullscreen && (n.removeClass(document.documentElement, t + "fullscreen"), n.removeClass(document.body, t + "fullscreen")) + }}); + return o + }), r(Z, [Q], function (e) { + var t = e.extend({init: function (e) { + e = {border: 1, padding: 20, layout: "flex", pack: "center", align: "center", containerCls: "panel", autoScroll: !0, buttons: {type: "button", text: "Ok", action: "ok"}, items: {type: "label", multiline: !0, maxWidth: 500, maxHeight: 200}}, this._super(e) + }, Statics: {OK: 1, OK_CANCEL: 2, YES_NO: 3, YES_NO_CANCEL: 4, msgBox: function (n) { + var r, i = n.callback || function () { + }; + switch (n.buttons) { + case t.OK_CANCEL: + r = [ + {type: "button", text: "Ok", subtype: "primary", onClick: function (e) { + e.control.parents()[1].close(), i(!0) + }}, + {type: "button", text: "Cancel", onClick: function (e) { + e.control.parents()[1].close(), i(!1) + }} + ]; + break; + case t.YES_NO: + r = [ + {type: "button", text: "Ok", subtype: "primary", onClick: function (e) { + e.control.parents()[1].close(), i(!0) + }} + ]; + break; + case t.YES_NO_CANCEL: + r = [ + {type: "button", text: "Ok", subtype: "primary", onClick: function (e) { + e.control.parents()[1].close() + }} + ]; + break; + default: + r = [ + {type: "button", text: "Ok", subtype: "primary", onClick: function (e) { + e.control.parents()[1].close(), i(!0) + }} + ] + } + return new e({padding: 20, x: n.x, y: n.y, minWidth: 300, minHeight: 100, layout: "flex", pack: "center", align: "center", buttons: r, title: n.title, items: {type: "label", multiline: !0, maxWidth: 500, maxHeight: 200, text: n.text}, onClose: n.onClose}).renderTo(document.body).reflow() + }, alert: function (e, n) { + return"string" == typeof e && (e = {text: e}), e.callback = n, t.msgBox(e) + }, confirm: function (e, n) { + return"string" == typeof e && (e = {text: e}), e.callback = n, e.buttons = t.OK_CANCEL, t.msgBox(e) + }}}); + return t + }), r(et, [Q, Z], function (e, t) { + return function (n) { + function r() { + return o.length ? o[o.length - 1] : void 0 + } + + var i = this, o = []; + i.windows = o, i.open = function (t, r) { + var i; + return n.editorManager.activeEditor = n, t.title = t.title || " ", t.url = t.url || t.file, t.url && (t.width = parseInt(t.width || 320, 10), t.height = parseInt(t.height || 240, 10)), t.body && (t.items = {defaults: t.defaults, type: t.bodyType || "form", items: t.body}), t.url || t.buttons || (t.buttons = [ + {text: "Ok", subtype: "primary", onclick: function () { + i.find("form")[0].submit(), i.close() + }}, + {text: "Cancel", onclick: function () { + i.close() + }} + ]), i = new e(t), o.push(i), i.on("close", function () { + for (var e = o.length; e--;)o[e] === i && o.splice(e, 1); + n.focus() + }), t.data && i.on("postRender", function () { + this.find("*").each(function (e) { + var n = e.name(); + n in t.data && e.value(t.data[n]) + }) + }), i.features = t || {}, i.params = r || {}, n.nodeChanged(), i.renderTo(document.body).reflow() + }, i.alert = function (e, n, r) { + t.alert(e, function () { + n && n.call(r || this) + }) + }, i.confirm = function (e, n, r) { + t.confirm(e, function (e) { + n.call(r || this, e) + }) + }, i.close = function () { + r() && r().close() + }, i.getParams = function () { + return r() ? r().params : null + }, i.setParams = function (e) { + r() && (r().params = e) + } + } + }), r(tt, [T, B, C, m, h, f], function (e, t, n, r, i, o) { + return function (a) { + function s(e, t) { + try { + a.getDoc().execCommand(e, !1, t) + } catch (n) { + } + } + + function l() { + var e = a.getDoc().documentMode; + return e ? e : 6 + } + + function c(e) { + return e.isDefaultPrevented() + } + + function d() { + function t(e) { + var t = new MutationObserver(function () { + }); + o.each(a.getBody().getElementsByTagName("*"), function (e) { + "SPAN" == e.tagName && e.setAttribute("mce-data-marked", 1), !e.hasAttribute("data-mce-style") && e.hasAttribute("style") && a.dom.setAttrib(e, "style", e.getAttribute("style")) + }), t.observe(a.getDoc(), {childList: !0, attributes: !0, subtree: !0, attributeFilter: ["style"]}), a.getDoc().execCommand(e ? "ForwardDelete" : "Delete", !1, null); + var n = a.selection.getRng(), r = n.startContainer.parentNode; + o.each(t.takeRecords(), function (e) { + if ("style" == e.attributeName) { + var t = e.target.getAttribute("data-mce-style"); + t ? e.target.setAttribute("style", t) : e.target.removeAttribute("style") + } + o.each(e.addedNodes, function (e) { + if ("SPAN" == e.nodeName && !e.getAttribute("mce-data-marked")) { + var t, i; + e == r && (t = n.startOffset, i = e.firstChild), W.remove(e, !0), i && (n.setStart(i, t), n.setEnd(i, t), a.selection.setRng(n)) + } + }) + }), t.disconnect(), o.each(a.dom.select("span[mce-data-marked]"), function (e) { + e.removeAttribute("mce-data-marked") + }) + } + + var n = a.getDoc(); + window.MutationObserver && (a.on("keydown", function (n) { + var r = n.keyCode == F, i = e.metaKeyPressed(n); + if (!c(n) && (r || n.keyCode == z)) { + var o = a.selection.getRng(), s = o.startContainer, l = o.startOffset; + if (!i && o.collapsed && 3 == s.nodeType && (r ? l < s.data.length : l > 0))return; + n.preventDefault(), i && a.selection.getSel().modify("extend", r ? "forward" : "backward", "word"), t(r) + } + }), a.on("keypress", function (n) { + c(n) || V.isCollapsed() || !n.charCode || e.metaKeyPressed(n) || (n.preventDefault(), t(!0), a.selection.setContent(String.fromCharCode(n.charCode))) + }), a.addCommand("Delete", function () { + t() + }), a.addCommand("ForwardDelete", function () { + t(!0) + }), a.on("dragstart", function (e) { + e.dataTransfer.setData("mce-internal", a.selection.getContent()) + }), a.on("drop", function (e) { + if (!c(e)) { + var r = e.dataTransfer.getData("mce-internal"); + r && n.caretRangeFromPoint && (e.preventDefault(), t(), a.selection.setRng(n.caretRangeFromPoint(e.x, e.y)), a.insertContent(r)) + } + }), a.on("cut", function (e) { + !c(e) && e.clipboardData && (e.preventDefault(), e.clipboardData.clearData(), e.clipboardData.setData("text/html", a.selection.getContent()), e.clipboardData.setData("text/plain", a.selection.getContent({format: "text"})), t(!0)) + })) + } + + function u() { + function e(e) { + var t = W.create("body"), n = e.cloneContents(); + return t.appendChild(n), V.serializer.serialize(t, {format: "html"}) + } + + function n(n) { + if (!n.setStart) { + if (n.item)return!1; + var r = n.duplicate(); + return r.moveToElementText(a.getBody()), t.compareRanges(n, r) + } + var i = e(n), o = W.createRng(); + o.selectNode(a.getBody()); + var s = e(o); + return i === s + } + + a.on("keydown", function (e) { + var t = e.keyCode, r, i; + if (!c(e) && (t == F || t == z)) { + if (r = a.selection.isCollapsed(), i = a.getBody(), r && !W.isEmpty(i))return; + if (!r && !n(a.selection.getRng()))return; + e.preventDefault(), a.setContent(""), i.firstChild && W.isBlock(i.firstChild) ? a.selection.setCursorLocation(i.firstChild, 0) : a.selection.setCursorLocation(i, 0), a.nodeChanged() + } + }) + } + + function f() { + a.on("keydown", function (t) { + !c(t) && 65 == t.keyCode && e.metaKeyPressed(t) && (t.preventDefault(), a.execCommand("SelectAll")) + }) + } + + function p() { + a.settings.content_editable || (W.bind(a.getDoc(), "focusin", function () { + V.setRng(V.getRng()) + }), W.bind(a.getDoc(), "mousedown", function (e) { + e.target == a.getDoc().documentElement && (a.getBody().focus(), V.setRng(V.getRng())) + })) + } + + function m() { + a.on("keydown", function (e) { + if (!c(e) && e.keyCode === z && V.isCollapsed() && 0 === V.getRng(!0).startOffset) { + var t = V.getNode(), n = t.previousSibling; + if ("HR" == t.nodeName)return W.remove(t), void e.preventDefault(); + n && n.nodeName && "hr" === n.nodeName.toLowerCase() && (W.remove(n), e.preventDefault()) + } + }) + } + + function h() { + window.Range.prototype.getClientRects || a.on("mousedown", function (e) { + if (!c(e) && "HTML" === e.target.nodeName) { + var t = a.getBody(); + t.blur(), setTimeout(function () { + t.focus() + }, 0) + } + }) + } + + function g() { + a.on("click", function (e) { + e = e.target, /^(IMG|HR)$/.test(e.nodeName) && V.getSel().setBaseAndExtent(e, 0, e, 1), "A" == e.nodeName && W.hasClass(e, "mce-item-anchor") && V.select(e), a.nodeChanged() + }) + } + + function v() { + function e() { + var e = W.getAttribs(V.getStart().cloneNode(!1)); + return function () { + var t = V.getStart(); + t !== a.getBody() && (W.setAttrib(t, "style", null), I(e, function (e) { + t.setAttributeNode(e.cloneNode(!0)) + })) + } + } + + function t() { + return!V.isCollapsed() && W.getParent(V.getStart(), W.isBlock) != W.getParent(V.getEnd(), W.isBlock) + } + + a.on("keypress", function (n) { + var r; + return c(n) || 8 != n.keyCode && 46 != n.keyCode || !t() ? void 0 : (r = e(), a.getDoc().execCommand("delete", !1, null), r(), n.preventDefault(), !1) + }), W.bind(a.getDoc(), "cut", function (n) { + var r; + !c(n) && t() && (r = e(), setTimeout(function () { + r() + }, 0)) + }) + } + + function y() { + var e, n; + a.on("selectionchange", function () { + n && (clearTimeout(n), n = 0), n = window.setTimeout(function () { + var n = V.getRng(); + e && t.compareRanges(n, e) || (a.nodeChanged(), e = n) + }, 50) + }) + } + + function b() { + document.body.setAttribute("role", "application") + } + + function C() { + a.on("keydown", function (e) { + if (!c(e) && e.keyCode === z && V.isCollapsed() && 0 === V.getRng(!0).startOffset) { + var t = V.getNode().previousSibling; + if (t && t.nodeName && "table" === t.nodeName.toLowerCase())return e.preventDefault(), !1 + } + }) + } + + function x() { + l() > 7 || (s("RespectVisibilityInDesign", !0), a.contentStyles.push(".mceHideBrInPre pre br {display: none}"), W.addClass(a.getBody(), "mceHideBrInPre"), q.addNodeFilter("pre", function (e) { + for (var t = e.length, r, i, o, a; t--;)for (r = e[t].getAll("br"), i = r.length; i--;)o = r[i], a = o.prev, a && 3 === a.type && "\n" != a.value.charAt(a.value - 1) ? a.value += "\n" : o.parent.insert(new n("#text", 3), o, !0).value = "\n" + }), j.addNodeFilter("pre", function (e) { + for (var t = e.length, n, r, i, o; t--;)for (n = e[t].getAll("br"), r = n.length; r--;)i = n[r], o = i.prev, o && 3 == o.type && (o.value = o.value.replace(/\r?\n$/, "")) + })) + } + + function w() { + W.bind(a.getBody(), "mouseup", function () { + var e, t = V.getNode(); + "IMG" == t.nodeName && ((e = W.getStyle(t, "width")) && (W.setAttrib(t, "width", e.replace(/[^0-9%]+/g, "")), W.setStyle(t, "width", "")), (e = W.getStyle(t, "height")) && (W.setAttrib(t, "height", e.replace(/[^0-9%]+/g, "")), W.setStyle(t, "height", ""))) + }) + } + + function _() { + a.on("keydown", function (t) { + var n, r, i, o, s; + if (!c(t) && t.keyCode == e.BACKSPACE && (n = V.getRng(), r = n.startContainer, i = n.startOffset, o = W.getRoot(), s = r, n.collapsed && 0 === i)) { + for (; s && s.parentNode && s.parentNode.firstChild == s && s.parentNode != o;)s = s.parentNode; + "BLOCKQUOTE" === s.tagName && (a.formatter.toggle("blockquote", null, s), n = W.createRng(), n.setStart(r, 0), n.setEnd(r, 0), V.setRng(n)) + } + }) + } + + function N() { + function e() { + a._refreshContentEditable(), s("StyleWithCSS", !1), s("enableInlineTableEditing", !1), U.object_resizing || s("enableObjectResizing", !1) + } + + U.readonly || a.on("BeforeExecCommand MouseDown", e) + } + + function E() { + function e() { + I(W.select("a"), function (e) { + var t = e.parentNode, n = W.getRoot(); + if (t.lastChild === e) { + for (; t && !W.isBlock(t);) { + if (t.parentNode.lastChild !== t || t === n)return; + t = t.parentNode + } + W.add(t, "br", {"data-mce-bogus": 1}) + } + }) + } + + a.on("SetContent ExecCommand", function (t) { + ("setcontent" == t.type || "mceInsertLink" === t.command) && e() + }) + } + + function k() { + U.forced_root_block && a.on("init", function () { + s("DefaultParagraphSeparator", U.forced_root_block) + }) + } + + function S() { + a.on("Undo Redo SetContent", function (e) { + e.initial || a.execCommand("mceRepaint") + }) + } + + function T() { + a.on("keydown", function (e) { + var t; + c(e) || e.keyCode != z || (t = a.getDoc().selection.createRange(), t && t.item && (e.preventDefault(), a.undoManager.beforeChange(), W.remove(t.item(0)), a.undoManager.add())) + }) + } + + function R() { + var e; + l() >= 10 && (e = "", I("p div h1 h2 h3 h4 h5 h6".split(" "), function (t, n) { + e += (n > 0 ? "," : "") + t + ":empty" + }), a.contentStyles.push(e + "{padding-right: 1px !important}")) + } + + function A() { + l() < 9 && (q.addNodeFilter("noscript", function (e) { + for (var t = e.length, n, r; t--;)n = e[t], r = n.firstChild, r && n.attr("data-mce-innertext", r.value) + }), j.addNodeFilter("noscript", function (e) { + for (var t = e.length, i, o, a; t--;)i = e[t], o = e[t].firstChild, o ? o.value = r.decode(o.value) : (a = i.attributes.map["data-mce-innertext"], a && (i.attr("data-mce-innertext", null), o = new n("#text", 3), o.value = a, o.raw = !0, i.append(o))) + })) + } + + function B() { + function e(e, t) { + var n = i.createTextRange(); + try { + n.moveToPoint(e, t) + } catch (r) { + n = null + } + return n + } + + function t(t) { + var r; + t.button ? (r = e(t.x, t.y), r && (r.compareEndPoints("StartToStart", a) > 0 ? r.setEndPoint("StartToStart", a) : r.setEndPoint("EndToEnd", a), r.select())) : n() + } + + function n() { + var e = r.selection.createRange(); + a && !e.item && 0 === e.compareEndPoints("StartToEnd", e) && a.select(), W.unbind(r, "mouseup", n), W.unbind(r, "mousemove", t), a = o = 0 + } + + var r = W.doc, i = r.body, o, a, s; + r.documentElement.unselectable = !0, W.bind(r, "mousedown contextmenu", function (i) { + if ("HTML" === i.target.nodeName) { + if (o && n(), s = r.documentElement, s.scrollHeight > s.clientHeight)return; + o = 1, a = e(i.x, i.y), a && (W.bind(r, "mouseup", n), W.bind(r, "mousemove", t), W.win.focus(), a.select()) + } + }) + } + + function L() { + a.on("keyup focusin", function (t) { + 65 == t.keyCode && e.metaKeyPressed(t) || V.normalize() + }) + } + + function H() { + a.contentStyles.push("img:-moz-broken {-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}") + } + + function M() { + a.inline || a.on("keydown", function () { + document.activeElement == document.body && a.getWin().focus() + }) + } + + function D() { + a.inline || (a.contentStyles.push("body {min-height: 150px}"), a.on("click", function (e) { + "HTML" == e.target.nodeName && (a.execCommand("SelectAll"), a.selection.collapse(!0), a.nodeChanged()) + })) + } + + function P() { + i.mac && a.on("keydown", function (t) { + !e.metaKeyPressed(t) || 37 != t.keyCode && 39 != t.keyCode || (t.preventDefault(), a.selection.getSel().modify("move", 37 == t.keyCode ? "backward" : "forward", "word")) + }) + } + + function O() { + s("AutoUrlDetect", !1) + } + + var I = o.each, z = e.BACKSPACE, F = e.DELETE, W = a.dom, V = a.selection, U = a.settings, q = a.parser, j = a.serializer, $ = i.gecko, K = i.ie, Y = i.webkit; + C(), _(), u(), L(), Y && (d(), p(), g(), k(), i.iOS ? (y(), M(), D()) : f()), K && i.ie < 11 && (m(), b(), x(), w(), T(), R(), A(), B()), i.ie >= 11 && D(), i.ie && (f(), O()), $ && (m(), h(), v(), N(), E(), S(), H(), P()) + } + }), r(nt, [f], function (e) { + function t() { + return!1 + } + + function n() { + return!0 + } + + var r = "__bindings", i = e.makeMap("focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange mouseout mouseenter mouseleave keydown keypress keyup contextmenu dragstart dragend dragover draggesture dragdrop drop drag", " "); + return{fire: function (e, i, o) { + var a = this, s, l, c, d, u; + if (e = e.toLowerCase(), i = i || {}, i.type = e, i.target || (i.target = a), i.preventDefault || (i.preventDefault = function () { + i.isDefaultPrevented = n + }, i.stopPropagation = function () { + i.isPropagationStopped = n + }, i.stopImmediatePropagation = function () { + i.isImmediatePropagationStopped = n + }, i.isDefaultPrevented = t, i.isPropagationStopped = t, i.isImmediatePropagationStopped = t), a[r] && (s = a[r][e]))for (l = 0, c = s.length; c > l && (s[l] = d = s[l], !i.isImmediatePropagationStopped()); l++)if (d.call(a, i) === !1)return i.preventDefault(), i; + if (o !== !1 && a.parent)for (u = a.parent(); u && !i.isPropagationStopped();)u.fire(e, i, !1), u = u.parent(); + return i + }, on: function (e, t) { + var n = this, o, a, s, l; + if (t === !1 && (t = function () { + return!1 + }), t)for (s = e.toLowerCase().split(" "), l = s.length; l--;)e = s[l], o = n[r], o || (o = n[r] = {}), a = o[e], a || (a = o[e] = [], n.bindNative && i[e] && n.bindNative(e)), a.push(t); + return n + }, off: function (e, t) { + var n = this, o, a = n[r], s, l, c, d; + if (a)if (e)for (c = e.toLowerCase().split(" "), o = c.length; o--;) { + if (e = c[o], s = a[e], !e) { + for (l in a)a[e].length = 0; + return n + } + if (s) { + if (t)for (d = s.length; d--;)s[d] === t && s.splice(d, 1); else s.length = 0; + !s.length && n.unbindNative && i[e] && (n.unbindNative(e), delete a[e]) + } + } else { + if (n.unbindNative)for (e in a)n.unbindNative(e); + n[r] = [] + } + return n + }, hasEventListeners: function (e) { + var t = this[r]; + return e = e.toLowerCase(), !(!t || !t[e] || 0 === t[e].length) + }} + }), r(rt, [f, h], function (e, t) { + var n = e.each, r = e.explode, i = {f9: 120, f10: 121, f11: 122}; + return function (o) { + var a = this, s = {}; + o.on("keyup keypress keydown", function (e) { + (e.altKey || e.ctrlKey || e.metaKey) && n(s, function (n) { + var r = t.mac ? e.metaKey : e.ctrlKey; + if (n.ctrl == r && n.alt == e.altKey && n.shift == e.shiftKey)return e.keyCode == n.keyCode || e.charCode && e.charCode == n.charCode ? (e.preventDefault(), "keydown" == e.type && n.func.call(n.scope), !0) : void 0 + }) + }), a.add = function (t, a, l, c) { + var d; + return d = l, "string" == typeof l ? l = function () { + o.execCommand(d, !1, null) + } : e.isArray(d) && (l = function () { + o.execCommand(d[0], d[1], d[2]) + }), n(r(t.toLowerCase()), function (e) { + var t = {func: l, scope: c || o, desc: o.translate(a), alt: !1, ctrl: !1, shift: !1}; + n(r(e, "+"), function (e) { + switch (e) { + case"alt": + case"ctrl": + case"shift": + t[e] = !0; + break; + default: + t.charCode = e.charCodeAt(0), t.keyCode = i[e] || e.toUpperCase().charCodeAt(0) + } + }), s[(t.ctrl ? "ctrl" : "") + "," + (t.alt ? "alt" : "") + "," + (t.shift ? "shift" : "") + "," + t.keyCode] = t + }), !0 + } + } + }), r(it, [v, b, C, k, E, A, L, H, M, D, P, O, y, d, et, x, _, tt, h, f, nt, rt], function (e, n, r, i, o, a, s, l, c, d, u, f, p, m, h, g, v, y, b, C, x, w) { + function _(e, t) { + return"selectionchange" == t ? e.getDoc() : !e.inline && /^mouse|click|contextmenu|drop/.test(t) ? e.getDoc() : e.getBody() + } + + function N(e, t, r) { + var i = this, o, a; + o = i.documentBaseUrl = r.documentBaseURL, a = r.baseURI, i.settings = t = T({id: e, theme: "modern", delta_width: 0, delta_height: 0, popup_css: "", plugins: "", document_base_url: o, add_form_submit_trigger: !0, submit_patch: !0, add_unload_trigger: !0, convert_urls: !0, relative_urls: !0, remove_script_host: !0, object_resizing: !0, doctype: "", visual: !0, font_size_style_values: "xx-small,x-small,small,medium,large,x-large,xx-large", font_size_legacy_values: "xx-small,small,medium,large,x-large,xx-large,300%", forced_root_block: "p", hidden_input: !0, padd_empty_editor: !0, render_ui: !0, indentation: "30px", inline_styles: !0, convert_fonts_to_spans: !0, indent: "simple", indent_before: "p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist", indent_after: "p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist", validate: !0, entity_encoding: "named", url_converter: i.convertURL, url_converter_scope: i, ie7_compat: !0}, t), n.language = t.language || "en", n.languageLoad = t.language_load, n.baseURL = r.baseURL, i.id = t.id = e, i.isNotDirty = !0, i.plugins = {}, i.documentBaseURI = new f(t.document_base_url || o, {base_uri: a}), i.baseURI = a, i.contentCSS = [], i.contentStyles = [], i.shortcuts = new w(i), i.execCommands = {}, i.queryStateCommands = {}, i.queryValueCommands = {}, i.loadedCSS = {}, i.suffix = r.suffix, i.editorManager = r, i.inline = t.inline, r.fire("SetupEditor", i), i.execCallback("setup", i) + } + + var E = e.DOM, k = n.ThemeManager, S = n.PluginManager, T = C.extend, R = C.each, A = C.explode, B = C.inArray, L = C.trim, H = C.resolve, M = m.Event, D = b.gecko, P = b.ie; + return N.prototype = {render: function () { + function e() { + E.unbind(window, "ready", e), n.render() + } + + function t() { + var e = p.ScriptLoader; + if (r.language && "en" != r.language && !r.language_url && (r.language_url = n.editorManager.baseURL + "/langs/" + r.language + ".js"), r.language_url && e.add(r.language_url), r.theme && "function" != typeof r.theme && "-" != r.theme.charAt(0) && !k.urls[r.theme]) { + var t = r.theme_url; + t = t ? n.documentBaseURI.toAbsolute(t) : "themes/" + r.theme + "/theme" + o + ".js", k.load(r.theme, t) + } + C.isArray(r.plugins) && (r.plugins = r.plugins.join(" ")), R(r.external_plugins, function (e, t) { + S.load(t, e), r.plugins += " " + t + }), R(r.plugins.split(/[ ,]/), function (e) { + if (e = L(e), e && !S.urls[e])if ("-" == e.charAt(0)) { + e = e.substr(1, e.length); + var t = S.dependencies(e); + R(t, function (e) { + var t = {prefix: "plugins/", resource: e, suffix: "/plugin" + o + ".js"}; + e = S.createUrl(t, e), S.load(e.resource, e) + }) + } else S.load(e, {prefix: "plugins/", resource: e, suffix: "/plugin" + o + ".js"}) + }), e.loadQueue(function () { + n.removed || n.init() + }) + } + + var n = this, r = n.settings, i = n.id, o = n.suffix; + if (!M.domLoaded)return void E.bind(window, "ready", e); + if (n.getElement() && b.contentEditable) { + r.inline ? n.inline = !0 : (n.orgVisibility = n.getElement().style.visibility, n.getElement().style.visibility = "hidden"); + var a = n.getElement().form || E.getParent(i, "form"); + a && (n.formElement = a, r.hidden_input && !/TEXTAREA|INPUT/i.test(n.getElement().nodeName) && (E.insertAfter(E.create("input", {type: "hidden", name: i}), i), n.hasHiddenInput = !0), n.formEventDelegate = function (e) { + n.fire(e.type, e) + }, E.bind(a, "submit reset", n.formEventDelegate), n.on("reset", function () { + n.setContent(n.startContent, {format: "raw"}) + }), !r.submit_patch || a.submit.nodeType || a.submit.length || a._mceOldSubmit || (a._mceOldSubmit = a.submit, a.submit = function () { + return n.editorManager.triggerSave(), n.isNotDirty = !0, a._mceOldSubmit(a) + })), n.windowManager = new h(n), "xml" == r.encoding && n.on("GetContent", function (e) { + e.save && (e.content = E.encode(e.content)) + }), r.add_form_submit_trigger && n.on("submit", function () { + n.initialized && n.save() + }), r.add_unload_trigger && (n._beforeUnload = function () { + !n.initialized || n.destroyed || n.isHidden() || n.save({format: "raw", no_events: !0, set_dirty: !1}) + }, n.editorManager.on("BeforeUnload", n._beforeUnload)), t() + } + }, init: function () { + function e(n) { + var r = S.get(n), i, o; + i = S.urls[n] || t.documentBaseUrl.replace(/\/$/, ""), n = L(n), r && -1 === B(m, n) && (R(S.dependencies(n), function (t) { + e(t) + }), o = new r(t, i), t.plugins[n] = o, o.init && (o.init(t, i), m.push(n))) + } + + var t = this, n = t.settings, r = t.getElement(), i, o, a, s, l, c, d, u, f, p, m = []; + if (t.rtl = this.editorManager.i18n.rtl, t.editorManager.add(t), n.aria_label = n.aria_label || E.getAttrib(r, "aria-label", t.getLang("aria.rich_text_area")), n.theme && ("function" != typeof n.theme ? (n.theme = n.theme.replace(/-/, ""), l = k.get(n.theme), t.theme = new l(t, k.urls[n.theme]), t.theme.init && t.theme.init(t, k.urls[n.theme] || t.documentBaseUrl.replace(/\/$/, ""))) : t.theme = n.theme), R(n.plugins.replace(/\-/g, "").split(/[ ,]/), e), n.render_ui && t.theme && (t.orgDisplay = r.style.display, "function" != typeof n.theme ? (i = n.width || r.style.width || r.offsetWidth, o = n.height || r.style.height || r.offsetHeight, a = n.min_height || 100, f = /^[0-9\.]+(|px)$/i, f.test("" + i) && (i = Math.max(parseInt(i, 10) + (l.deltaWidth || 0), 100)), f.test("" + o) && (o = Math.max(parseInt(o, 10) + (l.deltaHeight || 0), a)), l = t.theme.renderUI({targetNode: r, width: i, height: o, deltaWidth: n.delta_width, deltaHeight: n.delta_height}), n.content_editable || (E.setStyles(l.sizeContainer || l.editorContainer, {wi2dth: i, h2eight: o}), o = (l.iframeHeight || o) + ("number" == typeof o ? l.deltaHeight || 0 : ""), a > o && (o = a))) : (l = n.theme(t, r), l.editorContainer.nodeType && (l.editorContainer = l.editorContainer.id = l.editorContainer.id || t.id + "_parent"), l.iframeContainer.nodeType && (l.iframeContainer = l.iframeContainer.id = l.iframeContainer.id || t.id + "_iframecontainer"), o = l.iframeHeight || r.offsetHeight), t.editorContainer = l.editorContainer), n.content_css && R(A(n.content_css), function (e) { + t.contentCSS.push(t.documentBaseURI.toAbsolute(e)) + }), n.content_style && t.contentStyles.push(n.content_style), n.content_editable)return r = s = l = null, t.initContentBody(); + for (t.iframeHTML = n.doctype + "", n.document_base_url != t.documentBaseUrl && (t.iframeHTML += ''), !b.caretAfter && n.ie7_compat && (t.iframeHTML += ''), t.iframeHTML += '', p = 0; p < t.contentCSS.length; p++) { + var h = t.contentCSS[p]; + t.iframeHTML += '', t.loadedCSS[h] = !0 + } + d = n.body_id || "tinymce", -1 != d.indexOf("=") && (d = t.getParam("body_id", "", "hash"), d = d[t.id] || d), u = n.body_class || "", -1 != u.indexOf("=") && (u = t.getParam("body_class", "", "hash"), u = u[t.id] || ""), t.iframeHTML += '
    "; + var g = 'javascript:(function(){document.open();document.domain="' + document.domain + '";var ed = window.parent.tinymce.get("' + t.id + '");document.write(ed.iframeHTML);document.close();ed.initContentBody(true);})()'; + if (document.domain != location.hostname && (c = g), s = E.add(l.iframeContainer, "iframe", {id: t.id + "_ifr", src: c || 'javascript:""', frameBorder: "0", allowTransparency: "true", title: t.editorManager.translate("Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help"), style: {width: "100%", height: o, display: "block"}}), P)try { + t.getDoc() + } catch (v) { + s.src = c = g + } + t.contentAreaContainer = l.iframeContainer, l.editorContainer && (E.get(l.editorContainer).style.display = t.orgDisplay), E.get(t.id).style.display = "none", E.setAttrib(t.id, "aria-hidden", !0), c || t.initContentBody(), r = s = l = null + }, initContentBody: function (t) { + var n = this, o = n.settings, f = E.get(n.id), p = n.getDoc(), m, h; + o.inline || (n.getElement().style.visibility = n.orgVisibility), t || o.content_editable || (p.open(), p.write(n.iframeHTML), p.close()), o.content_editable && (n.on("remove", function () { + var e = this.getBody(); + E.removeClass(e, "mce-content-body"), E.removeClass(e, "mce-edit-focus"), E.setAttrib(e, "tabIndex", null), E.setAttrib(e, "contentEditable", null) + }), E.addClass(f, "mce-content-body"), f.tabIndex = -1, n.contentDocument = p = o.content_document || document, n.contentWindow = o.content_window || window, n.bodyElement = f, o.content_document = o.content_window = null, o.root_name = f.nodeName.toLowerCase()), m = n.getBody(), m.disabled = !0, o.readonly || (n.inline && "static" == E.getStyle(m, "position", !0) && (m.style.position = "relative"), m.contentEditable = n.getParam("content_editable_state", !0)), m.disabled = !1, n.schema = new g(o), n.dom = new e(p, {keep_values: !0, url_converter: n.convertURL, url_converter_scope: n, hex_colors: o.force_hex_style_colors, class_filter: o.class_filter, update_styles: !0, root_element: o.content_editable ? n.id : null, collect: o.content_editable, schema: n.schema, onSetAttrib: function (e) { + n.fire("SetAttrib", e) + }}), n.parser = new v(o, n.schema), n.parser.addAttributeFilter("src,href,style", function (e, t) { + for (var r = e.length, i, o = n.dom, a, s; r--;)i = e[r], a = i.attr(t), s = "data-mce-" + t, i.attributes.map[s] || ("style" === t ? i.attr(s, o.serializeStyle(o.parseStyle(a), i.name)) : i.attr(s, n.convertURL(a, t, i.name))) + }), n.parser.addNodeFilter("script", function (e) { + for (var t = e.length, n; t--;)n = e[t], n.attr("type", "mce-" + (n.attr("type") || "text/javascript")) + }), n.parser.addNodeFilter("#cdata", function (e) { + for (var t = e.length, n; t--;)n = e[t], n.type = 8, n.name = "#comment", n.value = "[CDATA[" + n.value + "]]" + }), n.parser.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div", function (e) { + for (var t = e.length, i, o = n.schema.getNonEmptyElements(); t--;)i = e[t], i.isEmpty(o) && (i.empty().append(new r("br", 1)).shortEnded = !0) + }), n.serializer = new i(o, n), n.selection = new a(n.dom, n.getWin(), n.serializer, n), n.formatter = new s(n), n.undoManager = new l(n), n.forceBlocks = new d(n), n.enterKey = new c(n), n.editorCommands = new u(n), n.fire("PreInit"), o.browser_spellcheck || o.gecko_spellcheck || (p.body.spellcheck = !1, E.setAttrib(m, "spellcheck", "false")), n.fire("PostRender"), n.quirks = y(n), o.directionality && (m.dir = o.directionality), o.nowrap && (m.style.whiteSpace = "nowrap"), o.protect && n.on("BeforeSetContent", function (e) { + R(o.protect, function (t) { + e.content = e.content.replace(t, function (e) { + return"" + }) + }) + }), n.on("SetContent", function () { + n.addVisual(n.getBody()) + }), o.padd_empty_editor && n.on("PostProcess", function (e) { + e.content = e.content.replace(/^(]*>( | |\s|\u00a0|)<\/p>[\r\n]*|
    [\r\n]*)$/, "") + }), n.load({initial: !0, format: "html"}), n.startContent = n.getContent({format: "raw"}), n.initialized = !0, R(n._pendingNativeEvents, function (e) { + n.dom.bind(_(n, e), e, function (e) { + n.fire(e.type, e) + }) + }), n.fire("init"), n.focus(!0), n.nodeChanged({initial: !0}), n.execCallback("init_instance_callback", n), n.contentStyles.length > 0 && (h = "", R(n.contentStyles, function (e) { + h += e + "\r\n" + }), n.dom.addStyle(h)), R(n.contentCSS, function (e) { + n.loadedCSS[e] || (n.dom.loadCSS(e), n.loadedCSS[e] = !0) + }), o.auto_focus && setTimeout(function () { + var e = n.editorManager.get(o.auto_focus); + e.selection.select(e.getBody(), 1), e.selection.collapse(1), e.getBody().focus(), e.getWin().focus() + }, 100), f = p = m = null + }, focus: function (e) { + var t, n = this, r = n.selection, i = n.settings.content_editable, o, a, s = n.getDoc(), l; + e || (o = r.getRng(), o.item && (a = o.item(0)), n._refreshContentEditable(), i || (b.opera || n.getBody().focus(), n.getWin().focus()), (D || i) && (l = n.getBody(), l.setActive && b.ie < 11 ? l.setActive() : l.focus(), i && r.normalize()), a && a.ownerDocument == s && (o = s.body.createControlRange(), o.addElement(a), o.select())), n.editorManager.activeEditor != n && ((t = n.editorManager.activeEditor) && t.fire("deactivate", {relatedTarget: n}), n.fire("activate", {relatedTarget: t})), n.editorManager.activeEditor = n + }, execCallback: function (e) { + var t = this, n = t.settings[e], r; + if (n)return t.callbackLookup && (r = t.callbackLookup[e]) && (n = r.func, r = r.scope), "string" == typeof n && (r = n.replace(/\.\w+$/, ""), r = r ? H(r) : 0, n = H(n), t.callbackLookup = t.callbackLookup || {}, t.callbackLookup[e] = {func: n, scope: r}), n.apply(r || t, Array.prototype.slice.call(arguments, 1)) + }, translate: function (e) { + var t = this.settings.language || "en", n = this.editorManager.i18n; + return e ? n.data[t + "." + e] || e.replace(/\{\#([^\}]+)\}/g, function (e, r) { + return n.data[t + "." + r] || "{#" + r + "}" + }) : "" + }, getLang: function (e, n) { + return this.editorManager.i18n.data[(this.settings.language || "en") + "." + e] || (n !== t ? n : "{#" + e + "}") + }, getParam: function (e, t, n) { + var r = e in this.settings ? this.settings[e] : t, i; + return"hash" === n ? (i = {}, "string" == typeof r ? R(r.split(r.indexOf("=") > 0 ? /[;,](?![^=;,]*(?:[;,]|$))/ : ","), function (e) { + e = e.split("="), i[L(e[0])] = L(e.length > 1 ? e[1] : e) + }) : i = r, i) : r + }, nodeChanged: function () { + var e = this, t = e.selection, n, r, i; + e.initialized && !e.settings.disable_nodechange && (i = e.getBody(), n = t.getStart() || i, n = P && n.ownerDocument != e.getDoc() ? e.getBody() : n, "IMG" == n.nodeName && t.isCollapsed() && (n = n.parentNode), r = [], e.dom.getParent(n, function (e) { + return e === i ? !0 : void r.push(e) + }), e.fire("NodeChange", {element: n, parents: r})) + }, addButton: function (e, t) { + var n = this; + t.cmd && (t.onclick = function () { + n.execCommand(t.cmd) + }), t.text || t.icon || (t.icon = e), n.buttons = n.buttons || {}, t.tooltip = t.tooltip || t.title, n.buttons[e] = t + }, addMenuItem: function (e, t) { + var n = this; + t.cmd && (t.onclick = function () { + n.execCommand(t.cmd) + }), n.menuItems = n.menuItems || {}, n.menuItems[e] = t + }, addCommand: function (e, t, n) { + this.execCommands[e] = {func: t, scope: n || this} + }, addQueryStateHandler: function (e, t, n) { + this.queryStateCommands[e] = {func: t, scope: n || this} + }, addQueryValueHandler: function (e, t, n) { + this.queryValueCommands[e] = {func: t, scope: n || this} + }, addShortcut: function (e, t, n, r) { + this.shortcuts.add(e, t, n, r) + }, execCommand: function (e, t, n, r) { + var i = this, o = 0, a; + return/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(e) || r && r.skip_focus || i.focus(), r = T({}, r), r = i.fire("BeforeExecCommand", {command: e, ui: t, value: n}), r.isDefaultPrevented() ? !1 : (a = i.execCommands[e]) && a.func.call(a.scope, t, n) !== !0 ? (i.fire("ExecCommand", {command: e, ui: t, value: n}), !0) : (R(i.plugins, function (r) { + return r.execCommand && r.execCommand(e, t, n) ? (i.fire("ExecCommand", {command: e, ui: t, value: n}), o = !0, !1) : void 0 + }), o ? o : i.theme && i.theme.execCommand && i.theme.execCommand(e, t, n) ? (i.fire("ExecCommand", {command: e, ui: t, value: n}), !0) : i.editorCommands.execCommand(e, t, n) ? (i.fire("ExecCommand", {command: e, ui: t, value: n}), !0) : (i.getDoc().execCommand(e, t, n), void i.fire("ExecCommand", {command: e, ui: t, value: n}))) + }, queryCommandState: function (e) { + var t = this, n, r; + if (!t._isHidden()) { + if ((n = t.queryStateCommands[e]) && (r = n.func.call(n.scope), r !== !0))return r; + if (r = t.editorCommands.queryCommandState(e), -1 !== r)return r; + try { + return t.getDoc().queryCommandState(e) + } catch (i) { + } + } + }, queryCommandValue: function (e) { + var n = this, r, i; + if (!n._isHidden()) { + if ((r = n.queryValueCommands[e]) && (i = r.func.call(r.scope), i !== !0))return i; + if (i = n.editorCommands.queryCommandValue(e), i !== t)return i; + try { + return n.getDoc().queryCommandValue(e) + } catch (o) { + } + } + }, show: function () { + var e = this; + E.show(e.getContainer()), E.hide(e.id), e.load(), e.fire("show") + }, hide: function () { + var e = this, t = e.getDoc(); + P && t && !e.inline && t.execCommand("SelectAll"), e.save(), E.hide(e.getContainer()), E.setStyle(e.id, "display", e.orgDisplay), e.fire("hide") + }, isHidden: function () { + return!E.isHidden(this.id) + }, setProgressState: function (e, t) { + this.fire("ProgressState", {state: e, time: t}) + }, load: function (e) { + var n = this, r = n.getElement(), i; + return r ? (e = e || {}, e.load = !0, i = n.setContent(r.value !== t ? r.value : r.innerHTML, e), e.element = r, e.no_events || n.fire("LoadContent", e), e.element = r = null, i) : void 0 + }, save: function (e) { + var t = this, n = t.getElement(), r, i; + if (n && t.initialized)return e = e || {}, e.save = !0, e.element = n, r = e.content = t.getContent(e), e.no_events || t.fire("SaveContent", e), r = e.content, /TEXTAREA|INPUT/i.test(n.nodeName) ? n.value = r : (n.innerHTML = r, (i = E.getParent(t.id, "form")) && R(i.elements, function (e) { + return e.name == t.id ? (e.value = r, !1) : void 0 + })), e.element = n = null, e.set_dirty !== !1 && (t.isNotDirty = !0), r + }, setContent: function (e, t) { + var n = this, r = n.getBody(), i; + return t = t || {}, t.format = t.format || "html", t.set = !0, t.content = e, t.no_events || n.fire("BeforeSetContent", t), e = t.content, 0 === e.length || /^\s+$/.test(e) ? (i = n.settings.forced_root_block, i && n.schema.isValidChild(r.nodeName.toLowerCase(), i.toLowerCase()) ? (e = P && 11 > P ? "" : '
    ', e = n.dom.createHTML(i, n.settings.forced_root_block_attrs, e)) : (!P || 11 > P) && (e = '
    '), r.innerHTML = e, n.fire("SetContent", t)) : ("raw" !== t.format && (e = new o({}, n.schema).serialize(n.parser.parse(e, {isRootContent: !0}))), t.content = L(e), n.dom.setHTML(r, t.content), t.no_events || n.fire("SetContent", t)), t.content + }, getContent: function (e) { + var t = this, n, r = t.getBody(); + return e = e || {}, e.format = e.format || "html", e.get = !0, e.getInner = !0, e.no_events || t.fire("BeforeGetContent", e), n = "raw" == e.format ? r.innerHTML : "text" == e.format ? r.innerText || r.textContent : t.serializer.serialize(r, e), e.content = "text" != e.format ? L(n) : n, e.no_events || t.fire("GetContent", e), e.content + }, insertContent: function (e) { + this.execCommand("mceInsertContent", !1, e) + }, isDirty: function () { + return!this.isNotDirty + }, getContainer: function () { + var e = this; + return e.container || (e.container = E.get(e.editorContainer || e.id + "_parent")), e.container + }, getContentAreaContainer: function () { + return this.contentAreaContainer + }, getElement: function () { + return E.get(this.settings.content_element || this.id) + }, getWin: function () { + var e = this, t; + return e.contentWindow || (t = E.get(e.id + "_ifr"), t && (e.contentWindow = t.contentWindow)), e.contentWindow + }, getDoc: function () { + var e = this, t; + return e.contentDocument || (t = e.getWin(), t && (e.contentDocument = t.document)), e.contentDocument + }, getBody: function () { + return this.bodyElement || this.getDoc().body + }, convertURL: function (e, t, n) { + var r = this, i = r.settings; + return i.urlconverter_callback ? r.execCallback("urlconverter_callback", e, n, !0, t) : !i.convert_urls || n && "LINK" == n.nodeName || 0 === e.indexOf("file:") || 0 === e.length ? e : i.relative_urls ? r.documentBaseURI.toRelative(e) : e = r.documentBaseURI.toAbsolute(e, i.remove_script_host) + }, addVisual: function (e) { + var n = this, r = n.settings, i = n.dom, o; + e = e || n.getBody(), n.hasVisual === t && (n.hasVisual = r.visual), R(i.select("table,a", e), function (e) { + var t; + switch (e.nodeName) { + case"TABLE": + return o = r.visual_table_class || "mce-item-table", t = i.getAttrib(e, "border"), void(t && "0" != t || (n.hasVisual ? i.addClass(e, o) : i.removeClass(e, o))); + case"A": + return void(i.getAttrib(e, "href", !1) || (t = i.getAttrib(e, "name") || e.id, o = "mce-item-anchor", t && (n.hasVisual ? i.addClass(e, o) : i.removeClass(e, o)))) + } + }), n.fire("VisualAid", {element: e, hasVisual: n.hasVisual}) + }, remove: function () { + var e = this; + if (!e.removed) { + e.removed = 1, e.hasHiddenInput && E.remove(e.getElement().nextSibling); + var t = e.getDoc(); + P && t && !e.inline && t.execCommand("SelectAll"), e.save(), E.setStyle(e.id, "display", e.orgDisplay), e.settings.content_editable || (M.unbind(e.getWin()), M.unbind(e.getDoc())); + var n = e.getContainer(); + M.unbind(e.getBody()), M.unbind(n), e.fire("remove"), e.editorManager.remove(e), E.remove(n), e.destroy() + } + }, bindNative: function (e) { + var t = this; + t.settings.readonly || (t.initialized ? t.dom.bind(_(t, e), e, function (n) { + t.fire(e, n) + }) : t._pendingNativeEvents ? t._pendingNativeEvents.push(e) : t._pendingNativeEvents = [e]) + }, unbindNative: function (e) { + var t = this; + t.initialized && t.dom.unbind(e) + }, destroy: function (e) { + var t = this, n; + if (!t.destroyed) { + if (!e && !t.removed)return void t.remove(); + e && D && (M.unbind(t.getDoc()), M.unbind(t.getWin()), M.unbind(t.getBody())), e || (t.editorManager.off("beforeunload", t._beforeUnload), t.theme && t.theme.destroy && t.theme.destroy(), t.selection.destroy(), t.dom.destroy()), n = t.formElement, n && (n._mceOldSubmit && (n.submit = n._mceOldSubmit, n._mceOldSubmit = null), E.unbind(n, "submit reset", t.formEventDelegate)), t.contentAreaContainer = t.formElement = t.container = null, t.settings.content_element = t.bodyElement = t.contentDocument = t.contentWindow = null, t.selection && (t.selection = t.selection.win = t.selection.dom = t.selection.dom.doc = null), t.destroyed = 1 + } + }, _refreshContentEditable: function () { + var e = this, t, n; + e._isHidden() && (t = e.getBody(), n = t.parentNode, n.removeChild(t), n.appendChild(t), t.focus()) + }, _isHidden: function () { + var e; + return D ? (e = this.selection.getSel(), !e || !e.rangeCount || 0 === e.rangeCount) : 0 + }}, T(N.prototype, x), N + }), r(ot, [], function () { + var e = {}; + return{rtl: !1, add: function (t, n) { + for (var r in n)e[r] = n[r]; + this.rtl = this.rtl || "rtl" === e._dir + }, translate: function (t) { + if ("undefined" == typeof t)return t; + if ("string" != typeof t && t.raw)return t.raw; + if (t.push) { + var n = t.slice(1); + t = (e[t[0]] || t[0]).replace(/\{([^\}]+)\}/g, function (e, t) { + return n[t] + }) + } + return e[t] || t + }, data: e} + }), r(at, [v, h], function (e, t) { + function n(r) { + function i() { + try { + return document.activeElement + } catch (e) { + return document.body + } + } + + function o(e) { + return e && e.startContainer ? {startContainer: e.startContainer, startOffset: e.startOffset, endContainer: e.endContainer, endOffset: e.endOffset} : e + } + + function a(e, t) { + var n; + return t.startContainer ? (n = e.getDoc().createRange(), n.setStart(t.startContainer, t.startOffset), n.setEnd(t.endContainer, t.endOffset)) : n = t, n + } + + function s(t) { + return!!e.DOM.getParent(t, n.isEditorUIElement) + } + + function l(e, t) { + for (var n = t.getBody(); e;) { + if (e == n)return!0; + e = e.parentNode + } + } + + function c(n) { + var c = n.editor, d; + c.on("init", function () { + "onbeforedeactivate"in document && t.ie < 11 ? c.dom.bind(c.getBody(), "beforedeactivate", function () { + try { + c.lastRng = c.selection.getRng() + } catch (e) { + } + c.selection.lastFocusBookmark = o(c.lastRng) + }) : (c.inline || t.ie > 10) && (c.on("nodechange keyup", function () { + var e = document.activeElement; + e && e.id == c.id + "_ifr" && (e = c.getBody()), l(e, c) && (c.lastRng = c.selection.getRng()) + }), t.webkit && (d = function () { + var e = c.selection.getRng(); + e.collapsed || (c.lastRng = e) + }, e.DOM.bind(document, "selectionchange", d), c.on("remove", function () { + e.DOM.unbind(document, "selectionchange", d) + }))) + }), c.on("setcontent", function () { + c.lastRng = null + }), c.on("mousedown", function () { + c.selection.lastFocusBookmark = null + }), c.on("focusin", function () { + var e = r.focusedEditor; + c.selection.lastFocusBookmark && (c.selection.setRng(a(c, c.selection.lastFocusBookmark)), c.selection.lastFocusBookmark = null), e != c && (e && e.fire("blur", {focusedEditor: c}), r.activeEditor = c, r.focusedEditor = c, c.fire("focus", {blurredEditor: e}), c.focus(!1)), c.lastRng = null + }), c.on("focusout", function () { + window.setTimeout(function () { + var e = r.focusedEditor; + s(i()) || e != c || (c.fire("blur", {focusedEditor: null}), r.focusedEditor = null, c.selection && (c.selection.lastFocusBookmark = null)) + }, 0) + }) + } + + e.DOM.bind(document, "focusin", function (e) { + var t = r.activeEditor; + t && e.target.ownerDocument == document && (t.selection && (t.selection.lastFocusBookmark = o(t.lastRng)), s(e.target) || r.focusedEditor != t || (t.fire("blur", {focusedEditor: null}), r.focusedEditor = null)) + }), r.on("AddEditor", c) + } + + return n.isEditorUIElement = function (e) { + return-1 !== e.className.indexOf("mce-") + }, n + }), r(st, [it, v, O, h, f, nt, ot, at], function (e, n, r, i, o, a, s, l) { + var c = n.DOM, d = o.explode, u = o.each, f = o.extend, p = 0, m, h = {majorVersion: "4", minorVersion: "0.16", releaseDate: "2014-01-31", editors: [], i18n: s, activeEditor: null, setup: function () { + var e = this, t, n, i = "", o; + if (n = document.location.href.replace(/[\?#].*$/, "").replace(/[\/\\][^\/]+$/, ""), /[\/\\]$/.test(n) || (n += "/"), o = window.tinymce || window.tinyMCEPreInit)t = o.base || o.baseURL, i = o.suffix; else for (var a = document.getElementsByTagName("script"), s = 0; s < a.length; s++) { + var c = a[s].src; + if (/tinymce(\.full|\.jquery|)(\.min|\.dev|)\.js/.test(c)) { + -1 != c.indexOf(".min") && (i = ".min"), t = c.substring(0, c.lastIndexOf("/")); + break + } + } + e.baseURL = new r(n).toAbsolute(t), e.documentBaseURL = n, e.baseURI = new r(e.baseURL), e.suffix = i, e.focusManager = new l(e) + }, init: function (t) { + function n(e) { + var t = e.id; + return t || (t = e.name, t = t && !c.get(t) ? e.name : c.uniqueId(), e.setAttribute("id", t)), t + } + + function r(e, t, n) { + var r = e[t]; + if (r)return r.apply(n || this, Array.prototype.slice.call(arguments, 2)) + } + + function i(e, t) { + return t.constructor === RegExp ? t.test(e.className) : c.hasClass(e, t) + } + + function o() { + var m, h; + if (c.unbind(window, "ready", o), r(t, "onpageload"), t.types)return void u(t.types, function (r) { + u(c.select(r.selector), function (i) { + var o = new e(n(i), f({}, t, r), a); + s.push(o), o.render(1) + }) + }); + if (t.selector)return void u(c.select(t.selector), function (r) { + var i = new e(n(r), t, a); + s.push(i), i.render(1) + }); + switch (t.mode) { + case"exact": + m = t.elements || "", m.length > 0 && u(d(m), function (n) { + c.get(n) ? (l = new e(n, t, a), s.push(l), l.render(!0)) : u(document.forms, function (r) { + u(r.elements, function (r) { + r.name === n && (n = "mce_editor_" + p++, c.setAttrib(r, "id", n), l = new e(n, t, a), s.push(l), l.render(1)) + }) + }) + }); + break; + case"textareas": + case"specific_textareas": + u(c.select("textarea"), function (r) { + t.editor_deselector && i(r, t.editor_deselector) || (!t.editor_selector || i(r, t.editor_selector)) && (l = new e(n(r), t, a), s.push(l), l.render(!0)) + }) + } + t.oninit && (m = h = 0, u(s, function (e) { + h++, e.initialized ? m++ : e.on("init", function () { + m++, m == h && r(t, "oninit") + }), m == h && r(t, "oninit") + })) + } + + var a = this, s = [], l; + a.settings = t, c.bind(window, "ready", o) + }, get: function (e) { + return e === t ? this.editors : this.editors[e] + }, add: function (e) { + var t = this, n = t.editors; + return n[e.id] = e, n.push(e), t.activeEditor = e, t.fire("AddEditor", {editor: e}), m || (m = function () { + t.fire("BeforeUnload") + }, c.bind(window, "beforeunload", m)), e + }, createEditor: function (t, n) { + return this.add(new e(t, n, this)) + }, remove: function (e) { + var t = this, n, r = t.editors, i, o; + { + if (e) { + if ("string" == typeof e)return e = e.selector || e, void u(c.select(e), function (e) { + t.remove(r[e.id]) + }); + if (i = e, !r[i.id])return null; + for (delete r[i.id], n = 0; n < r.length; n++)if (r[n] == i) { + r.splice(n, 1), o = !0; + break + } + return t.activeEditor == i && (t.activeEditor = r[0]), o && t.fire("RemoveEditor", {editor: i}), r.length || c.unbind(window, "beforeunload", m), i.remove(), i + } + for (n = r.length - 1; n >= 0; n--)t.remove(r[n]) + } + }, execCommand: function (t, n, r) { + var i = this, o = i.get(r); + switch (t) { + case"mceAddEditor": + return i.get(r) || new e(r, i.settings, i).render(), !0; + case"mceRemoveEditor": + return o && o.remove(), !0; + case"mceToggleEditor": + return o ? (o.isHidden() ? o.show() : o.hide(), !0) : (i.execCommand("mceAddEditor", 0, r), !0) + } + return i.activeEditor ? i.activeEditor.execCommand(t, n, r) : !1 + }, triggerSave: function () { + u(this.editors, function (e) { + e.save() + }) + }, addI18n: function (e, t) { + s.add(e, t) + }, translate: function (e) { + return s.translate(e) + }}; + return f(h, a), h.setup(), window.tinymce = window.tinyMCE = h, h + }), r(lt, [st, f], function (e, t) { + var n = t.each, r = t.explode; + e.on("AddEditor", function (e) { + var t = e.editor; + t.on("preInit", function () { + function e(e, t) { + n(t, function (t, n) { + t && s.setStyle(e, n, t) + }), s.rename(e, "span") + } + + function i(e) { + s = t.dom, l.convert_fonts_to_spans && n(s.select("font,u,strike", e.node), function (e) { + o[e.nodeName.toLowerCase()](s, e) + }) + } + + var o, a, s, l = t.settings; + l.inline_styles && (a = r(l.font_size_legacy_values), o = {font: function (t, n) { + e(n, {backgroundColor: n.style.backgroundColor, color: n.color, fontFamily: n.face, fontSize: a[parseInt(n.size, 10) - 1]}) + }, u: function (t, n) { + e(n, {textDecoration: "underline"}) + }, strike: function (t, n) { + e(n, {textDecoration: "line-through"}) + }}, t.on("PreProcess SetContent", i)) + }) + }) + }), r(ct, [], function () { + return{send: function (e) { + function t() { + !e.async || 4 == n.readyState || r++ > 1e4 ? (e.success && 1e4 > r && 200 == n.status ? e.success.call(e.success_scope, "" + n.responseText, n, e) : e.error && e.error.call(e.error_scope, r > 1e4 ? "TIMED_OUT" : "GENERAL", n, e), n = null) : setTimeout(t, 10) + } + + var n, r = 0; + if (e.scope = e.scope || this, e.success_scope = e.success_scope || e.scope, e.error_scope = e.error_scope || e.scope, e.async = e.async === !1 ? !1 : !0, e.data = e.data || "", n = new XMLHttpRequest) { + if (n.overrideMimeType && n.overrideMimeType(e.content_type), n.open(e.type || (e.data ? "POST" : "GET"), e.url, e.async), e.content_type && n.setRequestHeader("Content-Type", e.content_type), n.setRequestHeader("X-Requested-With", "XMLHttpRequest"), n.send(e.data), !e.async)return t(); + setTimeout(t, 10) + } + }} + }), r(dt, [], function () { + function e(t, n) { + var r, i, o, a; + if (n = n || '"', null === t)return"null"; + if (o = typeof t, "string" == o)return i = "\bb t\nn\ff\rr\"\"''\\\\", n + t.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g, function (e, t) { + return'"' === n && "'" === e ? e : (r = i.indexOf(t), r + 1 ? "\\" + i.charAt(r + 1) : (e = t.charCodeAt().toString(16), "\\u" + "0000".substring(e.length) + e)) + }) + n; + if ("object" == o) { + if (t.hasOwnProperty && "[object Array]" === Object.prototype.toString.call(t)) { + for (r = 0, i = "["; r < t.length; r++)i += (r > 0 ? "," : "") + e(t[r], n); + return i + "]" + } + i = "{"; + for (a in t)t.hasOwnProperty(a) && (i += "function" != typeof t[a] ? (i.length > 1 ? "," + n : n) + a + n + ":" + e(t[a], n) : ""); + return i + "}" + } + return"" + t + } + + return{serialize: e, parse: function (e) { + try { + return window[String.fromCharCode(101) + "val"]("(" + e + ")") + } catch (t) { + } + }} + }), r(ut, [dt, ct, f], function (e, t, n) { + function r(e) { + this.settings = i({}, e), this.count = 0 + } + + var i = n.extend; + return r.sendRPC = function (e) { + return(new r).send(e) + }, r.prototype = {send: function (n) { + var r = n.error, o = n.success; + n = i(this.settings, n), n.success = function (t, i) { + t = e.parse(t), "undefined" == typeof t && (t = {error: "JSON Parse error."}), t.error ? r.call(n.error_scope || n.scope, t.error, i) : o.call(n.success_scope || n.scope, t.result) + }, n.error = function (e, t) { + r && r.call(n.error_scope || n.scope, e, t) + }, n.data = e.serialize({id: n.id || "c" + this.count++, method: n.method, params: n.params}), n.content_type = "application/json", t.send(n) + }}, r + }), r(ft, [v], function (e) { + return{callbacks: {}, count: 0, send: function (n) { + var r = this, i = e.DOM, o = n.count !== t ? n.count : r.count, a = "tinymce_jsonp_" + o; + r.callbacks[o] = function (e) { + i.remove(a), delete r.callbacks[o], n.callback(e) + }, i.add(i.doc.body, "script", {id: a, src: n.url, type: "text/javascript"}), r.count++ + }} + }), r(pt, [], function () { + function e() { + s = []; + for (var e in a)s.push(e); + i.length = s.length + } + + function n() { + function n(e) { + var n, r; + return r = e !== t ? d + e : i.indexOf(",", d), -1 === r || r > i.length ? null : (n = i.substring(d, r), d = r + 1, n) + } + + var r, i, s, d = 0; + if (a = {}, c) { + o.load(l), i = o.getAttribute(l) || ""; + do { + var u = n(); + if (null === u)break; + if (r = n(parseInt(u, 32) || 0), null !== r) { + if (u = n(), null === u)break; + s = n(parseInt(u, 32) || 0), r && (a[r] = s) + } + } while (null !== r); + e() + } + } + + function r() { + var t, n = ""; + if (c) { + for (var r in a)t = a[r], n += (n ? "," : "") + r.length.toString(32) + "," + r + "," + t.length.toString(32) + "," + t; + o.setAttribute(l, n); + try { + o.save(l) + } catch (i) { + } + e() + } + } + + var i, o, a, s, l, c; + try { + if (window.localStorage)return localStorage + } catch (d) { + } + return l = "tinymce", o = document.documentElement, c = !!o.addBehavior, c && o.addBehavior("#default#userData"), i = {key: function (e) { + return s[e] + }, getItem: function (e) { + return e in a ? a[e] : null + }, setItem: function (e, t) { + a[e] = "" + t, r() + }, removeItem: function (e) { + delete a[e], r() + }, clear: function () { + a = {}, r() + }}, n(), i + }), r(mt, [v, d, y, b, f, h], function (e, t, n, r, i, o) { + var a = window.tinymce; + return a.DOM = e.DOM, a.ScriptLoader = n.ScriptLoader, a.PluginManager = r.PluginManager, a.ThemeManager = r.ThemeManager, a.dom = a.dom || {}, a.dom.Event = t.Event, i.each(i, function (e, t) { + a[t] = e + }), i.each("isOpera isWebKit isIE isGecko isMac".split(" "), function (e) { + a[e] = o[e.substr(2).toLowerCase()] + }), {} + }), r(ht, [I, f], function (e, t) { + return e.extend({Defaults: {firstControlClass: "first", lastControlClass: "last"}, init: function (e) { + this.settings = t.extend({}, this.Defaults, e) + }, preRender: function (e) { + e.addClass(this.settings.containerClass, "body") + }, applyClasses: function (e) { + var t = this, n = t.settings, r, i, o; + r = e.items().filter(":visible"), i = n.firstControlClass, o = n.lastControlClass, r.each(function (e) { + e.removeClass(i).removeClass(o), n.controlClass && e.addClass(n.controlClass) + }), r.eq(0).addClass(i), r.eq(-1).addClass(o) + }, renderHtml: function (e) { + var t = this, n = t.settings, r, i = ""; + return r = e.items(), r.eq(0).addClass(n.firstControlClass), r.eq(-1).addClass(n.lastControlClass), r.each(function (e) { + n.controlClass && e.addClass(n.controlClass), i += e.renderHtml() + }), i + }, recalc: function () { + }, postRender: function () { + }}) + }), r(gt, [ht], function (e) { + return e.extend({Defaults: {containerClass: "abs-layout", controlClass: "abs-layout-item"}, recalc: function (e) { + e.items().filter(":visible").each(function (e) { + var t = e.settings; + e.layoutRect({x: t.x, y: t.y, w: t.w, h: t.h}), e.recalc && e.recalc() + }) + }, renderHtml: function (e) { + return'
    ' + this._super(e) + }}) + }), r(vt, [V, Y], function (e, t) { + return e.extend({Mixins: [t], Defaults: {classes: "widget tooltip tooltip-n"}, text: function (e) { + var t = this; + return"undefined" != typeof e ? (t._value = e, t._rendered && (t.getEl().lastChild.innerHTML = t.encode(e)), t) : t._value + }, renderHtml: function () { + var e = this, t = e.classPrefix; + return'" + }, repaint: function () { + var e = this, t, n; + t = e.getEl().style, n = e._layoutRect, t.left = n.x + "px", t.top = n.y + "px", t.zIndex = 131070 + }}) + }), r(yt, [V, vt], function (e, t) { + var n, r = e.extend({init: function (e) { + var t = this; + t._super(e), t.canFocus = !0, e.tooltip && r.tooltips !== !1 && (t.on("mouseenter", function (n) { + var r = t.tooltip().moveTo(-65535); + if (n.control == t) { + var i = r.text(e.tooltip).show().testMoveRel(t.getEl(), ["bc-tc", "bc-tl", "bc-tr"]); + r.toggleClass("tooltip-n", "bc-tc" == i), r.toggleClass("tooltip-nw", "bc-tl" == i), r.toggleClass("tooltip-ne", "bc-tr" == i), r.moveRel(t.getEl(), i) + } else r.hide() + }), t.on("mouseleave mousedown click", function () { + t.tooltip().hide() + })), t.aria("label", e.tooltip) + }, tooltip: function () { + var e = this; + return n || (n = new t({type: "tooltip"}), n.renderTo(e.getContainerElm())), n + }, active: function (e) { + var t = this, n; + return e !== n && (t.aria("pressed", e), t.toggleClass("active", e)), t._super(e) + }, disabled: function (e) { + var t = this, n; + return e !== n && (t.aria("disabled", e), t.toggleClass("disabled", e)), t._super(e) + }, postRender: function () { + var e = this, t = e.settings; + e._rendered = !0, e._super(), e.parent() || !t.width && !t.height || (e.initLayoutRect(), e.repaint()), t.autofocus && setTimeout(function () { + e.focus() + }, 0) + }, remove: function () { + this._super(), n && (n.remove(), n = null) + }}); + return r + }), r(bt, [yt], function (e) { + return e.extend({Defaults: {classes: "widget btn", role: "button"}, init: function (e) { + var t = this, n; + t.on("click mousedown", function (e) { + e.preventDefault() + }), t._super(e), n = e.size, e.subtype && t.addClass(e.subtype), n && t.addClass("btn-" + n) + }, icon: function (e) { + var t = this, n = t.classPrefix; + if ("undefined" == typeof e)return t.settings.icon; + if (t.settings.icon = e, e = e ? n + "ico " + n + "i-" + t.settings.icon : "", t._rendered) { + var r = t.getEl().firstChild, i = r.getElementsByTagName("i")[0]; + e ? (i && i == r.firstChild || (i = document.createElement("i"), r.insertBefore(i, r.firstChild)), i.className = e) : i && r.removeChild(i), t.text(t._text) + } + return t + }, repaint: function () { + var e = this.getEl().firstChild.style; + e.width = e.height = "100%", this._super() + }, renderHtml: function () { + var e = this, t = e._id, n = e.classPrefix, r = e.settings.icon, i = ""; + return e.settings.image && (r = "none", i = " style=\"background-image: url('" + e.settings.image + "')\""), r = e.settings.icon ? n + "ico " + n + "i-" + r : "", '
    " + }}) + }), r(Ct, [q], function (e) { + return e.extend({Defaults: {defaultType: "button", role: "toolbar"}, renderHtml: function () { + var e = this, t = e._layout; + return e.addClass("btn-group"), e.preRender(), t.preRender(e), '
    ' + (e.settings.html || "") + t.renderHtml(e) + "
    " + }}) + }), r(xt, [yt], function (e) { + return e.extend({Defaults: {classes: "checkbox", role: "checkbox", checked: !1}, init: function (e) { + var t = this; + t._super(e), t.on("click mousedown", function (e) { + e.preventDefault() + }), t.on("click", function (e) { + e.preventDefault(), t.disabled() || t.checked(!t.checked()) + }), t.checked(t.settings.checked) + }, checked: function (e) { + var t = this; + return"undefined" != typeof e ? (e ? t.addClass("checked") : t.removeClass("checked"), t._checked = e, t.aria("checked", e), t) : t._checked + }, value: function (e) { + return this.checked(e) + }, renderHtml: function () { + var e = this, t = e._id, n = e.classPrefix; + return'
    ' + e.encode(e._text) + "
    " + }}) + }), r(wt, [bt, X], function (e, t) { + return e.extend({showPanel: function () { + var e = this, n = e.settings; + if (e.active(!0), e.panel)e.panel.show(); else { + var r = n.panel; + r.type && (r = {layout: "grid", items: r}), r.popover = !0, r.autohide = !0, e.panel = new t(r).on("hide",function () { + e.active(!1) + }).parent(e).renderTo(e.getContainerElm()), e.panel.fire("show"), e.panel.reflow() + } + e.panel.moveRel(e.getEl(), n.popoverAlign || (e.isRtl() ? ["bc-tr", "bc-tc"] : ["bc-tl", "bc-tc"])) + }, hidePanel: function () { + var e = this; + e.panel && e.panel.hide() + }, postRender: function () { + var e = this; + return e.on("click", function (t) { + t.control === e && (e.panel && e.panel.visible() ? e.hidePanel() : e.showPanel()) + }), e._super() + }}) + }), r(_t, [wt, v], function (e, t) { + var n = t.DOM; + return e.extend({init: function (e) { + this._super(e), this.addClass("colorbutton") + }, color: function (e) { + return e ? (this._color = e, this.getEl("preview").style.backgroundColor = e, this) : this._color + }, renderHtml: function () { + var e = this, t = e._id, n = e.classPrefix, r = e.settings.icon ? n + "ico " + n + "i-" + e.settings.icon : "", i = e.settings.image ? " style=\"background-image: url('" + e.settings.image + "')\"" : ""; + return'
    ' + }, postRender: function () { + var e = this, t = e.settings.onclick; + return e.on("click", function (r) { + r.control != e || n.getParent(r.target, "." + e.classPrefix + "open") || (r.stopImmediatePropagation(), t.call(e, r)) + }), delete e.settings.onclick, e._super() + }}) + }), r(Nt, [yt, U, W], function (e, t, n) { + return e.extend({init: function (e) { + var t = this; + t._super(e), t.addClass("combobox"), t.subinput = !0, e = t.settings, e.menu = e.menu || e.values, e.menu && (e.icon = "caret"), t.on("click", function (n) { + for (var r = n.target; r;)r.id && -1 != r.id.indexOf("-open") && (t.fire("action"), e.menu && (t.showMenu(), n.keyboard && t.menu.items()[0].focus())), r = r.parentNode + }), t.on("keydown", function (e) { + "INPUT" == e.target.nodeName && 13 == e.keyCode && t.parents().reverse().each(function (n) { + return e.preventDefault(), t.fire("change"), n.hasEventListeners("submit") && n.toJSON ? (n.fire("submit", {data: n.toJSON()}), !1) : void 0 + }) + }), e.placeholder && (t.addClass("placeholder"), t.on("focusin", function () { + t._hasOnChange || (n.on(t.getEl("inp"), "change", function () { + t.fire("change") + }), t._hasOnChange = !0), t.hasClass("placeholder") && (t.getEl("inp").value = "", t.removeClass("placeholder")) + }), t.on("focusout", function () { + 0 === t.value().length && (t.getEl("inp").value = e.placeholder, t.addClass("placeholder")) + })) + }, showMenu: function () { + var e = this, n = e.settings, r; + e.menu || (r = n.menu || [], r.length ? r = {type: "menu", items: r} : r.type = r.type || "menu", e.menu = t.create(r).parent(e).renderTo(e.getContainerElm()), e.fire("createmenu"), e.menu.reflow(), e.menu.on("cancel", function (t) { + t.control === e.menu && e.focus() + }), e.menu.on("show hide",function (t) { + t.control.items().each(function (t) { + t.active(t.value() == e.value()) + }) + }).fire("show"), e.menu.on("select", function (t) { + e.value(t.control.value()) + }), e.on("focusin", function (t) { + "INPUT" == t.target.tagName && e.menu.hide() + }), e.aria("expanded", !0)), e.menu.show(), e.menu.layoutRect({w: e.layoutRect().w}), e.menu.moveRel(e.getEl(), e.isRtl() ? ["br-tr", "tr-br"] : ["bl-tl", "tl-bl"]) + }, value: function (e) { + var t = this; + return"undefined" != typeof e ? (t._value = e, t.removeClass("placeholder"), t._rendered && (t.getEl("inp").value = e), t) : t._rendered ? (e = t.getEl("inp").value, e != t.settings.placeholder ? e : "") : t._value + }, disabled: function (e) { + var t = this; + return t._rendered && "undefined" != typeof e && (t.getEl("inp").disabled = e), t._super(e) + }, focus: function () { + this.getEl("inp").focus() + }, repaint: function () { + var e = this, t = e.getEl(), r = e.getEl("open"), i = e.layoutRect(), o, a; + o = r ? i.w - n.getSize(r).width - 10 : i.w - 10; + var s = document; + return s.all && (!s.documentMode || s.documentMode <= 8) && (a = e.layoutRect().h - 2 + "px"), n.css(t.firstChild, {width: o, lineHeight: a}), e._super(), e + }, postRender: function () { + var e = this; + return n.on(this.getEl("inp"), "change", function () { + e.fire("change") + }), e._super() + }, remove: function () { + n.off(this.getEl("inp")), this._super() + }, renderHtml: function () { + var e = this, t = e._id, n = e.settings, r = e.classPrefix, i = n.value || n.placeholder || "", o, a, s = "", l = ""; + return"spellcheck"in n && (l += ' spellcheck="' + n.spellcheck + '"'), n.maxLength && (l += ' maxlength="' + n.maxLength + '"'), n.size && (l += ' size="' + n.size + '"'), n.subtype && (l += ' type="' + n.subtype + '"'), e.disabled() && (l += ' disabled="disabled"'), o = n.icon, o && "caret" != o && (o = r + "ico " + r + "i-" + n.icon), a = e._text, (o || a) && (s = '
    ", e.addClass("has-open")), '
    " + s + "
    " + }}) + }), r(Et, [yt, J], function (e, t) { + return e.extend({init: function (e) { + var t = this; + e.delimiter || (e.delimiter = "\xbb"), t._super(e), t.addClass("path"), t.canFocus = !0, t.on("click", function (e) { + var n, r = e.target; + (n = r.getAttribute("data-index")) && t.fire("select", {value: t.data()[n], index: n}) + }) + }, focus: function () { + var e = this; + return e.keyNav = new t({root: e, enableLeftRight: !0}), e.keyNav.focusFirst(), e + }, data: function (e) { + var t = this; + return"undefined" != typeof e ? (t._data = e, t.update(), t) : t._data + }, update: function () { + this.innerHtml(this._getPathHtml()) + }, postRender: function () { + var e = this; + e._super(), e.data(e.settings.data) + }, renderHtml: function () { + var e = this; + return'
    ' + e._getPathHtml() + "
    " + }, _getPathHtml: function () { + var e = this, t = e._data || [], n, r, i = "", o = e.classPrefix; + for (n = 0, r = t.length; r > n; n++)i += (n > 0 ? '" : "") + '
    ' + t[n].name + "
    "; + return i || (i = '
     
    '), i + }}) + }), r(kt, [Et, st], function (e, t) { + return e.extend({postRender: function () { + function e(e) { + if (1 === e.nodeType) { + if ("BR" == e.nodeName || e.getAttribute("data-mce-bogus"))return!0; + if ("bookmark" === e.getAttribute("data-mce-type"))return!0 + } + return!1 + } + + var n = this, r = t.activeEditor; + return n.on("select", function (t) { + var n = [], i, o = r.getBody(); + for (r.focus(), i = r.selection.getStart(); i && i != o;)e(i) || n.push(i), i = i.parentNode; + r.selection.select(n[n.length - 1 - t.index]), r.nodeChanged() + }), r.on("nodeChange", function (t) { + for (var i = [], o = t.parents, a = o.length; a--;)if (1 == o[a].nodeType && !e(o[a])) { + var s = r.fire("ResolveName", {name: o[a].nodeName.toLowerCase(), target: o[a]}); + i.push({name: s.name}) + } + n.data(i) + }), n._super() + }}) + }), r(St, [q], function (e) { + return e.extend({Defaults: {layout: "flex", align: "center", defaults: {flex: 1}}, renderHtml: function () { + var e = this, t = e._layout, n = e.classPrefix; + return e.addClass("formitem"), t.preRender(e), '
    ' + (e.settings.title ? '
    ' + e.settings.title + "
    " : "") + '
    ' + (e.settings.html || "") + t.renderHtml(e) + "
    " + }}) + }), r(Tt, [q, St], function (e, t) { + return e.extend({Defaults: {containerCls: "form", layout: "flex", direction: "column", align: "stretch", flex: 1, padding: 20, labelGap: 30, spacing: 10, callbacks: {submit: function () { + this.submit() + }}}, preRender: function () { + var e = this, n = e.items(); + n.each(function (n) { + var r, i = n.settings.label; + i && (r = new t({layout: "flex", autoResize: "overflow", defaults: {flex: 1}, items: [ + {type: "label", text: i, flex: 0, forId: n._id, disabled: n.disabled()} + ]}), r.type = "formitem", "undefined" == typeof n.settings.flex && (n.settings.flex = 1), e.replace(n, r), r.add(n)) + }) + }, recalcLabels: function () { + var e = this, t = 0, n = [], r, i; + if (e.settings.labelGapCalc !== !1)for (e.items().filter("formitem").each(function (e) { + var r = e.items()[0], i = r.getEl().clientWidth; + t = i > t ? i : t, n.push(r) + }), i = e.settings.labelGap || 0, r = n.length; r--;)n[r].settings.minWidth = t + i + }, visible: function (e) { + var t = this._super(e); + return e === !0 && this._rendered && this.recalcLabels(), t + }, submit: function () { + return this.fire("submit", {data: this.toJSON()}) + }, postRender: function () { + var e = this; + e._super(), e.recalcLabels(), e.fromJSON(e.settings.data) + }}) + }), r(Rt, [Tt], function (e) { + return e.extend({Defaults: {containerCls: "fieldset", layout: "flex", direction: "column", align: "stretch", flex: 1, padding: "25 15 5 15", labelGap: 30, spacing: 10, border: 1}, renderHtml: function () { + var e = this, t = e._layout, n = e.classPrefix; + return e.preRender(), t.preRender(e), '
    ' + (e.settings.title ? '' + e.settings.title + "" : "") + '
    ' + (e.settings.html || "") + t.renderHtml(e) + "
    " + }}) + }), r(At, [Nt], function (e) { + return e.extend({init: function (e) { + var t = this, n = tinymce.activeEditor, r; + e.spellcheck = !1, r = n.settings.file_browser_callback, r && (e.icon = "browse", e.onaction = function () { + r(t.getEl("inp").id, t.getEl("inp").value, e.filetype, window) + }), t._super(e) + }}) + }), r(Bt, [gt], function (e) { + return e.extend({recalc: function (e) { + var t = e.layoutRect(), n = e.paddingBox(); + e.items().filter(":visible").each(function (e) { + e.layoutRect({x: n.left, y: n.top, w: t.innerW - n.right - n.left, h: t.innerH - n.top - n.bottom}), e.recalc && e.recalc() + }) + }}) + }), r(Lt, [gt], function (e) { + return e.extend({recalc: function (e) { + var t, n, r, i, o, a, s, l, c, d, u, f, p, m, h, g, v = [], y, b, C, x, w, _, N, E, k, S, T, R, A, B, L, H, M, D, P, O, I, z, F, W, V = Math.max, U = Math.min; + for (r = e.items().filter(":visible"), i = e.layoutRect(), o = e._paddingBox, a = e.settings, f = e.isRtl() ? a.direction || "row-reversed" : a.direction, s = a.align, l = e.isRtl() ? a.pack || "end" : a.pack, c = a.spacing || 0, ("row-reversed" == f || "column-reverse" == f) && (r = r.set(r.toArray().reverse()), f = f.split("-")[0]), "column" == f ? (k = "y", N = "h", E = "minH", S = "maxH", R = "innerH", T = "top", A = "bottom", B = "deltaH", L = "contentH", I = "left", D = "w", H = "x", M = "innerW", P = "minW", O = "maxW", z = "right", F = "deltaW", W = "contentW") : (k = "x", N = "w", E = "minW", S = "maxW", R = "innerW", T = "left", A = "right", B = "deltaW", L = "contentW", I = "top", D = "h", H = "y", M = "innerH", P = "minH", O = "maxH", z = "bottom", F = "deltaH", W = "contentH"), u = i[R] - o[T] - o[T], _ = d = 0, t = 0, n = r.length; n > t; t++)p = r[t], m = p.layoutRect(), h = p.settings, g = h.flex, u -= n - 1 > t ? c : 0, g > 0 && (d += g, m[S] && v.push(p), m.flex = g), u -= m[E], y = o[I] + m[P] + o[z], y > _ && (_ = y); + if (x = {}, x[E] = 0 > u ? i[E] - u + i[B] : i[R] - u + i[B], x[P] = _ + i[F], x[L] = i[R] - u, x[W] = _, x.minW = U(x.minW, i.maxW), x.minH = U(x.minH, i.maxH), x.minW = V(x.minW, i.startMinWidth), x.minH = V(x.minH, i.startMinHeight), !i.autoResize || x.minW == i.minW && x.minH == i.minH) { + for (C = u / d, t = 0, n = v.length; n > t; t++)p = v[t], m = p.layoutRect(), b = m[S], y = m[E] + m.flex * C, y > b ? (u -= m[S] - m[E], d -= m.flex, m.flex = 0, m.maxFlexSize = b) : m.maxFlexSize = 0; + for (C = u / d, w = o[T], x = {}, 0 === d && ("end" == l ? w = u + o[T] : "center" == l ? (w = Math.round(i[R] / 2 - (i[R] - u) / 2) + o[T], 0 > w && (w = o[T])) : "justify" == l && (w = o[T], c = Math.floor(u / (r.length - 1)))), x[H] = o[I], t = 0, n = r.length; n > t; t++)p = r[t], m = p.layoutRect(), y = m.maxFlexSize || m[E], "center" === s ? x[H] = Math.round(i[M] / 2 - m[D] / 2) : "stretch" === s ? (x[D] = V(m[P] || 0, i[M] - o[I] - o[z]), x[H] = o[I]) : "end" === s && (x[H] = i[M] - m[D] - o.top), m.flex > 0 && (y += m.flex * C), x[N] = y, x[k] = w, p.layoutRect(x), p.recalc && p.recalc(), w += y + c + } else if (x.w = x.minW, x.h = x.minH, e.layoutRect(x), this.recalc(e), null === e._lastRect) { + var q = e.parent(); + q && (q._lastRect = null, q.recalc()) + } + }}) + }), r(Ht, [ht], function (e) { + return e.extend({Defaults: {containerClass: "flow-layout", controlClass: "flow-layout-item", endClass: "break"}, recalc: function (e) { + e.items().filter(":visible").each(function (e) { + e.recalc && e.recalc() + }) + }}) + }), r(Mt, [V, yt, X, f, st, h], function (e, t, n, r, i, o) { + function a(e) { + function t(t) { + function n(e) { + return e.replace(/%(\w+)/g, "") + } + + var r, i, o = e.dom, a = "", l, c; + return c = e.settings.preview_styles, c === !1 ? "" : (c || (c = "font-family font-size font-weight font-style text-decoration text-transform color background-color border border-radius outline text-shadow"), (t = e.formatter.get(t)) ? (t = t[0], r = t.block || t.inline || "span", i = o.create(r), s(t.styles, function (e, t) { + e = n(e), e && o.setStyle(i, t, e) + }), s(t.attributes, function (e, t) { + e = n(e), e && o.setAttrib(i, t, e) + }), s(t.classes, function (e) { + e = n(e), o.hasClass(i, e) || o.addClass(i, e) + }), e.fire("PreviewFormats"), o.setStyles(i, {position: "absolute", left: -65535}), e.getBody().appendChild(i), l = o.getStyle(e.getBody(), "fontSize", !0), l = /px$/.test(l) ? parseInt(l, 10) : 0, s(c.split(" "), function (t) { + var n = o.getStyle(i, t, !0); + if (!("background-color" == t && /transparent|rgba\s*\([^)]+,\s*0\)/.test(n) && (n = o.getStyle(e.getBody(), t, !0), "#ffffff" == o.toHex(n).toLowerCase()) || "color" == t && "#000000" == o.toHex(n).toLowerCase())) { + if ("font-size" == t && /em|%$/.test(n)) { + if (0 === l)return; + n = parseFloat(n, 10) / (/%$/.test(n) ? 100 : 1), n = n * l + "px" + } + "border" == t && n && (a += "padding:0 2px;"), a += t + ":" + n + ";" + } + }), e.fire("AfterPreviewFormats"), o.remove(i), a) : void 0) + } + + function r(t, n) { + return function () { + var r = this; + e.on("nodeChange", function (i) { + var o = e.formatter, a = null; + s(i.parents, function (e) { + return s(t, function (t) { + return n ? o.matchNode(e, n, {value: t.value}) && (a = t.value) : o.matchNode(e, t.value) && (a = t.value), a ? !1 : void 0 + }), a ? !1 : void 0 + }), r.value(a) + }) + } + } + + function i(e) { + e = e.split(";"); + for (var t = e.length; t--;)e[t] = e[t].split("="); + return e + } + + function o() { + function n(e) { + var t = []; + if (e)return s(e, function (e) { + var r = {text: e.title, icon: e.icon}; + if (e.items)r.menu = n(e.items); else { + var a = e.format || "custom" + i++; + e.format || (e.name = a, o.push(e)), r.format = a + } + t.push(r) + }), t + } + + function r() { + var t; + return t = n(e.settings.style_formats_merge ? e.settings.style_formats ? a.concat(e.settings.style_formats) : a : e.settings.style_formats || a) + } + + var i = 0, o = [], a = [ + {title: "Headers", items: [ + {title: "Header 1", format: "h1"}, + {title: "Header 2", format: "h2"}, + {title: "Header 3", format: "h3"}, + {title: "Header 4", format: "h4"}, + {title: "Header 5", format: "h5"}, + {title: "Header 6", format: "h6"} + ]}, + {title: "Inline", items: [ + {title: "Bold", icon: "bold", format: "bold"}, + {title: "Italic", icon: "italic", format: "italic"}, + {title: "Underline", icon: "underline", format: "underline"}, + {title: "Strikethrough", icon: "strikethrough", format: "strikethrough"}, + {title: "Superscript", icon: "superscript", format: "superscript"}, + {title: "Subscript", icon: "subscript", format: "subscript"}, + {title: "Code", icon: "code", format: "code"} + ]}, + {title: "Blocks", items: [ + {title: "Paragraph", format: "p"}, + {title: "Blockquote", format: "blockquote"}, + {title: "Div", format: "div"}, + {title: "Pre", format: "pre"} + ]}, + {title: "Alignment", items: [ + {title: "Left", icon: "alignleft", format: "alignleft"}, + {title: "Center", icon: "aligncenter", format: "aligncenter"}, + {title: "Right", icon: "alignright", format: "alignright"}, + {title: "Justify", icon: "alignjustify", format: "alignjustify"} + ]} + ]; + return e.on("init", function () { + s(o, function (t) { + e.formatter.register(t.name, t) + }) + }), {type: "menu", items: r(), onPostRender: function (t) { + e.fire("renderFormatsMenu", {control: t.control}) + }, itemDefaults: {preview: !0, textStyle: function () { + return this.settings.format ? t(this.settings.format) : void 0 + }, onPostRender: function () { + var t = this, n = this.settings.format; + n && t.parent().on("show", function () { + t.disabled(!e.formatter.canApply(n)), t.active(e.formatter.match(n)) + }) + }, onclick: function () { + this.settings.format && f(this.settings.format) + }}} + } + + function a() { + return e.undoManager ? e.undoManager.hasUndo() : !1 + } + + function l() { + return e.undoManager ? e.undoManager.hasRedo() : !1 + } + + function c() { + var t = this; + t.disabled(!a()), e.on("Undo Redo AddUndo TypingUndo", function () { + t.disabled(!a()) + }) + } + + function d() { + var t = this; + t.disabled(!l()), e.on("Undo Redo AddUndo TypingUndo", function () { + t.disabled(!l()) + }) + } + + function u() { + var t = this; + e.on("VisualAid", function (e) { + t.active(e.hasVisual) + }), t.active(e.hasVisual) + } + + function f(t) { + t.control && (t = t.control.value()), t && e.execCommand("mceToggleFormat", !1, t) + } + + var p; + p = o(), s({bold: "Bold", italic: "Italic", underline: "Underline", strikethrough: "Strikethrough", subscript: "Subscript", superscript: "Superscript"}, function (t, n) { + e.addButton(n, {tooltip: t, onPostRender: function () { + var t = this; + e.formatter ? e.formatter.formatChanged(n, function (e) { + t.active(e) + }) : e.on("init", function () { + e.formatter.formatChanged(n, function (e) { + t.active(e) + }) + }) + }, onclick: function () { + f(n) + }}) + }), s({outdent: ["Decrease indent", "Outdent"], indent: ["Increase indent", "Indent"], cut: ["Cut", "Cut"], copy: ["Copy", "Copy"], paste: ["Paste", "Paste"], help: ["Help", "mceHelp"], selectall: ["Select all", "SelectAll"], hr: ["Insert horizontal rule", "InsertHorizontalRule"], removeformat: ["Clear formatting", "RemoveFormat"], visualaid: ["Visual aids", "mceToggleVisualAid"], newdocument: ["New document", "mceNewDocument"]}, function (t, n) { + e.addButton(n, {tooltip: t[0], cmd: t[1]}) + }), s({blockquote: ["Blockquote", "mceBlockQuote"], numlist: ["Numbered list", "InsertOrderedList"], bullist: ["Bullet list", "InsertUnorderedList"], subscript: ["Subscript", "Subscript"], superscript: ["Superscript", "Superscript"], alignleft: ["Align left", "JustifyLeft"], aligncenter: ["Align center", "JustifyCenter"], alignright: ["Align right", "JustifyRight"], alignjustify: ["Justify", "JustifyFull"]}, function (t, n) { + e.addButton(n, {tooltip: t[0], cmd: t[1], onPostRender: function () { + var t = this; + e.formatter ? e.formatter.formatChanged(n, function (e) { + t.active(e) + }) : e.on("init", function () { + e.formatter.formatChanged(n, function (e) { + t.active(e) + }) + }) + }}) + }), e.addButton("undo", {tooltip: "Undo", onPostRender: c, cmd: "undo"}), e.addButton("redo", {tooltip: "Redo", onPostRender: d, cmd: "redo"}), e.addMenuItem("newdocument", {text: "New document", shortcut: "Ctrl+N", icon: "newdocument", cmd: "mceNewDocument"}), e.addMenuItem("undo", {text: "Undo", icon: "undo", shortcut: "Ctrl+Z", onPostRender: c, cmd: "undo"}), e.addMenuItem("redo", {text: "Redo", icon: "redo", shortcut: "Ctrl+Y", onPostRender: d, cmd: "redo"}), e.addMenuItem("visualaid", {text: "Visual aids", selectable: !0, onPostRender: u, cmd: "mceToggleVisualAid"}), s({cut: ["Cut", "Cut", "Ctrl+X"], copy: ["Copy", "Copy", "Ctrl+C"], paste: ["Paste", "Paste", "Ctrl+V"], selectall: ["Select all", "SelectAll", "Ctrl+A"], bold: ["Bold", "Bold", "Ctrl+B"], italic: ["Italic", "Italic", "Ctrl+I"], underline: ["Underline", "Underline"], strikethrough: ["Strikethrough", "Strikethrough"], subscript: ["Subscript", "Subscript"], superscript: ["Superscript", "Superscript"], removeformat: ["Clear formatting", "RemoveFormat"]}, function (t, n) { + e.addMenuItem(n, {text: t[0], icon: n, shortcut: t[2], cmd: t[1]}) + }), e.on("mousedown", function () { + n.hideAll() + }), e.addButton("styleselect", {type: "menubutton", text: "Formats", menu: p}), e.addButton("formatselect", function () { + var n = [], o = i(e.settings.block_formats || "Paragraph=p;Address=address;Pre=pre;Header 1=h1;Header 2=h2;Header 3=h3;Header 4=h4;Header 5=h5;Header 6=h6"); + return s(o, function (e) { + n.push({text: e[0], value: e[1], textStyle: function () { + return t(e[1]) + }}) + }), {type: "listbox", text: o[0][0], values: n, fixedWidth: !0, onselect: f, onPostRender: r(n)} + }), e.addButton("fontselect", function () { + var t = "Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats", n = [], o = i(e.settings.font_formats || t); + return s(o, function (e) { + n.push({text: {raw: e[0]}, value: e[1], textStyle: -1 == e[1].indexOf("dings") ? "font-family:" + e[1] : ""}) + }), {type: "listbox", text: "Font Family", tooltip: "Font Family", values: n, fixedWidth: !0, onPostRender: r(n, "fontname"), onselect: function (t) { + t.control.settings.value && e.execCommand("FontName", !1, t.control.settings.value) + }} + }), e.addButton("fontsizeselect", function () { + var t = [], n = "8pt 10pt 12pt 14pt 18pt 24pt 36pt", i = e.settings.fontsize_formats || n; + return s(i.split(" "), function (e) { + t.push({text: e, value: e}) + }), {type: "listbox", text: "Font Sizes", tooltip: "Font Sizes", values: t, fixedWidth: !0, onPostRender: r(t, "fontsize"), onclick: function (t) { + t.control.settings.value && e.execCommand("FontSize", !1, t.control.settings.value) + }} + }), e.addMenuItem("formats", {text: "Formats", menu: p}) + } + + var s = r.each; + i.on("AddEditor", function (t) { + t.editor.rtl && (e.rtl = !0), a(t.editor) + }), e.translate = function (e) { + return i.translate(e) + }, t.tooltips = !o.iOS + }), r(Dt, [gt], function (e) { + return e.extend({recalc: function (e) { + var t = e.settings, n, r, i, o, a, s, l, c, d, u, f, p, m, h, g, v, y, b, C, x, w, _, N = [], E = [], k, S, T, R, A, B; + for (t = e.settings, i = e.items().filter(":visible"), o = e.layoutRect(), r = t.columns || Math.ceil(Math.sqrt(i.length)), n = Math.ceil(i.length / r), y = t.spacingH || t.spacing || 0, b = t.spacingV || t.spacing || 0, C = t.alignH || t.align, x = t.alignV || t.align, g = e._paddingBox, C && "string" == typeof C && (C = [C]), x && "string" == typeof x && (x = [x]), u = 0; r > u; u++)N.push(0); + for (f = 0; n > f; f++)E.push(0); + for (f = 0; n > f; f++)for (u = 0; r > u && (d = i[f * r + u], d); u++)c = d.layoutRect(), k = c.minW, S = c.minH, N[u] = k > N[u] ? k : N[u], E[f] = S > E[f] ? S : E[f]; + for (A = o.innerW - g.left - g.right, w = 0, u = 0; r > u; u++)w += N[u] + (u > 0 ? y : 0), A -= (u > 0 ? y : 0) + N[u]; + for (B = o.innerH - g.top - g.bottom, _ = 0, f = 0; n > f; f++)_ += E[f] + (f > 0 ? b : 0), B -= (f > 0 ? b : 0) + E[f]; + if (w += g.left + g.right, _ += g.top + g.bottom, l = {}, l.minW = w + (o.w - o.innerW), l.minH = _ + (o.h - o.innerH), l.contentW = l.minW - o.deltaW, l.contentH = l.minH - o.deltaH, l.minW = Math.min(l.minW, o.maxW), l.minH = Math.min(l.minH, o.maxH), l.minW = Math.max(l.minW, o.startMinWidth), l.minH = Math.max(l.minH, o.startMinHeight), !o.autoResize || l.minW == o.minW && l.minH == o.minH) { + o.autoResize && (l = e.layoutRect(l), l.contentW = l.minW - o.deltaW, l.contentH = l.minH - o.deltaH); + var L; + L = "start" == t.packV ? 0 : B > 0 ? Math.floor(B / n) : 0; + var H = 0, M = t.flexWidths; + if (M)for (u = 0; u < M.length; u++)H += M[u]; else H = r; + var D = A / H; + for (u = 0; r > u; u++)N[u] += M ? M[u] * D : D; + for (m = g.top, f = 0; n > f; f++) { + for (p = g.left, s = E[f] + L, u = 0; r > u && (d = i[f * r + u], d); u++)h = d.settings, c = d.layoutRect(), a = Math.max(N[u], c.startMinWidth), T = R = 0, c.x = p, c.y = m, v = h.alignH || (C ? C[u] || C[0] : null), "center" == v ? c.x = p + a / 2 - c.w / 2 : "right" == v ? c.x = p + a - c.w : "stretch" == v && (c.w = a), v = h.alignV || (x ? x[u] || x[0] : null), "center" == v ? c.y = m + s / 2 - c.h / 2 : "bottom" == v ? c.y = m + s - c.h : "stretch" == v && (c.h = s), d.layoutRect(c), p += a + y, d.recalc && d.recalc(); + m += s + b + } + } else if (l.w = l.minW, l.h = l.minH, e.layoutRect(l), this.recalc(e), null === e._lastRect) { + var P = e.parent(); + P && (P._lastRect = null, P.recalc()) + } + }}) + }), r(Pt, [yt], function (e) { + return e.extend({renderHtml: function () { + var e = this; + return e.addClass("iframe"), e.canFocus = !1, '' + }, src: function (e) { + this.getEl().src = e + }, html: function (e, t) { + var n = this, r = this.getEl().contentWindow.document.body; + return r ? (r.innerHTML = e, t && t()) : setTimeout(function () { + n.html(e) + }, 0), this + }}) + }), r(Ot, [yt, W], function (e, t) { + return e.extend({init: function (e) { + var t = this; + t._super(e), t.addClass("widget"), t.addClass("label"), t.canFocus = !1, e.multiline && t.addClass("autoscroll"), e.strong && t.addClass("strong") + }, initLayoutRect: function () { + var e = this, n = e._super(); + if (e.settings.multiline) { + var r = t.getSize(e.getEl()); + r.width > n.maxW && (n.minW = n.maxW, e.addClass("multiline")), e.getEl().style.width = n.minW + "px", n.startMinH = n.h = n.minH = Math.min(n.maxH, t.getSize(e.getEl()).height) + } + return n + }, repaint: function () { + var e = this; + return e.settings.multiline || (e.getEl().style.lineHeight = e.layoutRect().h + "px"), e._super() + }, text: function (e) { + var t = this; + return t._rendered && e && this.innerHtml(t.encode(e)), t._super(e) + }, renderHtml: function () { + var e = this, t = e.settings.forId; + return'" + }}) + }), r(It, [q, J], function (e, t) { + return e.extend({Defaults: {role: "toolbar", layout: "flow"}, init: function (e) { + var t = this; + t._super(e), t.addClass("toolbar") + }, postRender: function () { + var e = this; + return e.items().addClass("toolbar-item"), e.keyNav = new t({root: e, enableLeftRight: !0}), e._super() + }}) + }), r(zt, [It], function (e) { + return e.extend({Defaults: {role: "menubar", containerCls: "menubar", defaults: {type: "menubutton"}}}) + }), r(Ft, [bt, U, zt], function (e, t, n) { + function r(e, t) { + for (; e;) { + if (t === e)return!0; + e = e.parentNode + } + return!1 + } + + var i = e.extend({init: function (e) { + var t = this; + t._renderOpen = !0, t._super(e), t.addClass("menubtn"), e.fixedWidth && t.addClass("fixed-width"), t.aria("haspopup", !0), t.hasPopup = !0 + }, showMenu: function () { + var e = this, n = e.settings, r; + return e.menu && e.menu.visible() ? e.hideMenu() : (e.menu || (r = n.menu || [], r.length ? r = {type: "menu", items: r} : r.type = r.type || "menu", e.menu = t.create(r).parent(e).renderTo(e.getContainerElm()), e.fire("createmenu"), e.menu.reflow(), e.menu.on("cancel", function (t) { + t.control === e.menu && e.focus() + }), e.menu.on("show hide",function (t) { + t.control == e.menu && e.activeMenu("show" == t.type) + }).fire("show"), e.aria("expanded", !0)), e.menu.show(), e.menu.layoutRect({w: e.layoutRect().w}), void e.menu.moveRel(e.getEl(), e.isRtl() ? ["br-tr", "tr-br"] : ["bl-tl", "tl-bl"])) + }, hideMenu: function () { + var e = this; + e.menu && (e.menu.items().each(function (e) { + e.hideMenu && e.hideMenu() + }), e.menu.hide(), e.aria("expanded", !1)) + }, activeMenu: function (e) { + this.toggleClass("active", e) + }, renderHtml: function () { + var e = this, t = e._id, r = e.classPrefix, i = e.settings.icon ? r + "ico " + r + "i-" + e.settings.icon : ""; + return e.aria("role", e.parent()instanceof n ? "menuitem" : "button"), '
    ' + }, postRender: function () { + var e = this; + return e.on("click", function (t) { + t.control === e && r(t.target, e.getEl()) && (e.showMenu(), t.keyboard && e.menu.items()[0].focus()) + }), e.on("mouseenter", function (t) { + var n = t.control, r = e.parent(), o; + n && r && n instanceof i && n.parent() == r && (r.items().filter("MenuButton").each(function (e) { + e.hideMenu && e != n && (e.menu && e.menu.visible() && (o = !0), e.hideMenu()) + }), o && (n.focus(), n.showMenu())) + }), e._super() + }, text: function (e) { + var t = this, n, r; + if (t._rendered)for (r = t.getEl("open").getElementsByTagName("span"), n = 0; n < r.length; n++)r[n].innerHTML = (t.settings.icon && e ? "\xa0" : "") + t.encode(e); + return this._super(e) + }, remove: function () { + this._super(), this.menu && this.menu.remove() + }}); + return i + }), r(Wt, [Ft], function (e) { + return e.extend({init: function (e) { + var t = this, n, r, i, o, a; + if (t._values = n = e.values, n) { + for (r = 0; r < n.length; r++)i = n[r].selected || e.value === n[r].value, i && (o = o || n[r].text, t._value = n[r].value); + e.menu = n + } + e.text = e.text || o || n[0].text, t._super(e), t.addClass("listbox"), t.on("select", function (n) { + var r = n.control; + a && (n.lastControl = a), e.multiple ? r.active(!r.active()) : t.value(n.control.settings.value), a = r + }) + }, value: function (e) { + function t(e, n) { + e.items().each(function (e) { + r = e.value() === n, r && (i = i || e.text()), e.active(r), e.menu && t(e.menu, n) + }) + } + + var n = this, r, i, o, a; + if ("undefined" != typeof e) { + if (n.menu)t(n.menu, e); else for (o = n.settings.menu, a = 0; a < o.length; a++)r = o[a].value == e, r && (i = i || o[a].text), o[a].active = r; + n.text(i || this.settings.text) + } + return n._super(e) + }}) + }), r(Vt, [yt, U, h], function (e, t, n) { + return e.extend({Defaults: {border: 0, role: "menuitem"}, init: function (e) { + var t = this; + t.hasPopup = !0, t._super(e), e = t.settings, t.addClass("menu-item"), e.menu && t.addClass("menu-item-expand"), e.preview && t.addClass("menu-item-preview"), ("-" === t._text || "|" === t._text) && (t.addClass("menu-item-sep"), t.aria("role", "separator"), t.canFocus = !1, t._text = "-"), e.selectable && (t.aria("role", "menuitemcheckbox"), t.aria("checked", !0), t.addClass("menu-item-checkbox"), e.icon = "selected"), e.preview || e.selectable || t.addClass("menu-item-normal"), t.on("mousedown", function (e) { + e.preventDefault() + }), t.on("mouseenter click", function (n) { + n.control === t && (e.menu || "click" !== n.type ? (t.showMenu(), n.keyboard && setTimeout(function () { + t.menu.items()[0].focus() + }, 0)) : (t.parent().hideAll(), t.fire("cancel"), t.fire("select"))) + }), e.menu && t.aria("haspopup", !0) + }, hasMenus: function () { + return!!this.settings.menu + }, showMenu: function () { + var e = this, n = e.settings, r, i = e.parent(); + if (i.items().each(function (t) { + t !== e && t.hideMenu() + }), n.menu) { + r = e.menu, r ? r.show() : (r = n.menu, r.length ? r = {type: "menu", items: r} : r.type = r.type || "menu", i.settings.itemDefaults && (r.itemDefaults = i.settings.itemDefaults), r = e.menu = t.create(r).parent(e).renderTo(e.getContainerElm()), r.reflow(), r.fire("show"), r.on("cancel", function () { + e.focus() + }), r.on("hide", function (t) { + t.control === r && e.removeClass("selected") + })), r._parentMenu = i, r.addClass("menu-sub"); + var o = r.testMoveRel(e.getEl(), e.isRtl() ? ["tl-tr", "bl-br", "tr-tl", "br-bl"] : ["tr-tl", "br-bl", "tl-tr", "bl-br"]); + r.moveRel(e.getEl(), o), r.rel = o, o = "menu-sub-" + o, r.removeClass(r._lastRel), r.addClass(o), r._lastRel = o, e.addClass("selected"), e.aria("expanded", !0) + } + }, hideMenu: function () { + var e = this; + return e.menu && (e.menu.items().each(function (e) { + e.hideMenu && e.hideMenu() + }), e.menu.hide(), e.aria("expanded", !1)), e + }, renderHtml: function () { + var e = this, t = e._id, r = e.settings, i = e.classPrefix, o = e.encode(e._text), a = e.settings.icon, s = "", l = r.shortcut; + return a && e.parent().addClass("menu-has-icons"), r.image && (a = "none", s = " style=\"background-image: url('" + r.image + "')\""), l && n.mac && (l = l.replace(/ctrl\+alt\+/i, "⌥⌘"), l = l.replace(/ctrl\+/i, "⌘"), l = l.replace(/alt\+/i, "⌥"), l = l.replace(/shift\+/i, "⇧")), a = i + "ico " + i + "i-" + (e.settings.icon || "none"), '
    ' + ("-" !== o ? ' " : "") + ("-" !== o ? '' + o + "" : "") + (l ? '
    ' + l + "
    " : "") + (r.menu ? '
    ' : "") + "
    " + }, postRender: function () { + var e = this, t = e.settings, n = t.textStyle; + if ("function" == typeof n && (n = n.call(this)), n) { + var r = e.getEl("text"); + r && r.setAttribute("style", n) + } + return e._super() + }, remove: function () { + this._super(), this.menu && this.menu.remove() + }}) + }), r(Ut, [X, J, Vt, f], function (e, t, n, r) { + var i = e.extend({Defaults: {defaultType: "menuitem", border: 1, layout: "stack", role: "menu"}, init: function (e) { + var i = this; + if (e.autohide = !0, e.constrainToViewport = !0, e.itemDefaults)for (var o = e.items, a = o.length; a--;)o[a] = r.extend({}, e.itemDefaults, o[a]); + i._super(e), i.addClass("menu"), i.keyNav = new t({root: i, enableUpDown: !0, enableLeftRight: !0, leftAction: function () { + i.parent()instanceof n && i.keyNav.cancel() + }, onCancel: function () { + i.fire("cancel", {}, !1), i.hide() + }}) + }, repaint: function () { + return this.toggleClass("menu-align", !0), this._super(), this.getEl().style.height = "", this.getEl("body").style.height = "", this + }, cancel: function () { + var e = this; + e.hideAll(), e.fire("cancel"), e.fire("select") + }, hideAll: function () { + var e = this; + return this.find("menuitem").exec("hideMenu"), e._super() + }, preRender: function () { + var e = this; + return e.items().each(function (t) { + var n = t.settings; + return n.icon || n.selectable ? (e._hasIcons = !0, !1) : void 0 + }), e._super() + }}); + return i + }), r(qt, [xt], function (e) { + return e.extend({Defaults: {classes: "radio", role: "radio"}}) + }), r(jt, [yt, j], function (e, t) { + return e.extend({renderHtml: function () { + var e = this, t = e.classPrefix; + return e.addClass("resizehandle"), "both" == e.settings.direction && e.addClass("resizehandle-both"), e.canFocus = !1, '
    ' + }, postRender: function () { + var e = this; + e._super(), e.resizeDragHelper = new t(this._id, {start: function () { + e.fire("ResizeStart") + }, drag: function (t) { + "both" != e.settings.direction && (t.deltaX = 0), e.fire("Resize", t) + }, stop: function () { + e.fire("ResizeEnd") + }}) + }, remove: function () { + return this.resizeDragHelper && this.resizeDragHelper.destroy(), this._super() + }}) + }), r($t, [yt], function (e) { + return e.extend({renderHtml: function () { + var e = this; + return e.addClass("spacer"), e.canFocus = !1, '
    ' + }}) + }), r(Kt, [Ft, W], function (e, t) { + return e.extend({Defaults: {classes: "widget btn splitbtn", role: "splitbutton"}, repaint: function () { + var e = this, n = e.getEl(), r = e.layoutRect(), i, o; + return e._super(), i = n.firstChild, o = n.lastChild, t.css(i, {width: r.w - t.getSize(o).width, height: r.h - 2}), t.css(o, {height: r.h - 2}), e + }, activeMenu: function (e) { + var n = this; + t.toggleClass(n.getEl().lastChild, n.classPrefix + "active", e) + }, renderHtml: function () { + var e = this, t = e._id, n = e.classPrefix, r = e.settings.icon ? n + "ico " + n + "i-" + e.settings.icon : ""; + return'
    ' + }, postRender: function () { + var e = this, t = e.settings.onclick; + return e.on("click", function (e) { + var n = e.target; + if (e.control == this)for (; n;) { + if ("BUTTON" == n.nodeName && -1 == n.className.indexOf("open"))return e.stopImmediatePropagation(), void t.call(this, e); + n = n.parentNode + } + }), delete e.settings.onclick, e._super() + }}) + }), r(Yt, [Ht], function (e) { + return e.extend({Defaults: {containerClass: "stack-layout", controlClass: "stack-layout-item", endClass: "break"}}) + }), r(Gt, [K, W], function (e, t) { + return e.extend({lastIdx: 0, Defaults: {layout: "absolute", defaults: {type: "panel"}}, activateTab: function (e) { + this.activeTabId && t.removeClass(this.getEl(this.activeTabId), this.classPrefix + "active"), this.activeTabId = "t" + e, t.addClass(this.getEl("t" + e), this.classPrefix + "active"), e != this.lastIdx && (this.items()[this.lastIdx].hide(), this.lastIdx = e), this.items()[e].show().fire("showtab"), this.reflow() + }, renderHtml: function () { + var e = this, t = e._layout, n = "", r = e.classPrefix; + return e.preRender(), t.preRender(e), e.items().each(function (t, i) { + n += '
    ' + e.encode(t.settings.title) + "
    " + }), '
    ' + n + '
    ' + t.renderHtml(e) + "
    " + }, postRender: function () { + var e = this; + e._super(), e.settings.activeTab = e.settings.activeTab || 0, e.activateTab(e.settings.activeTab), this.on("click", function (t) { + var n = t.target.parentNode; + if (t.target.parentNode.id == e._id + "-head")for (var r = n.childNodes.length; r--;)n.childNodes[r] == t.target && e.activateTab(r) + }) + }, initLayoutRect: function () { + var e = this, n, r, i; + r = t.getSize(e.getEl("head")).width, r = 0 > r ? 0 : r, i = 0, e.items().each(function (t, n) { + r = Math.max(r, t.layoutRect().minW), i = Math.max(i, t.layoutRect().minH), e.settings.activeTab != n && t.hide() + }), e.items().each(function (e) { + e.settings.x = 0, e.settings.y = 0, e.settings.w = r, e.settings.h = i, e.layoutRect({x: 0, y: 0, w: r, h: i}) + }); + var o = t.getSize(e.getEl("head")).height; + return e.settings.minWidth = r, e.settings.minHeight = i + o, n = e._super(), n.deltaH += o, n.innerH = n.h - n.deltaH, n + }}) + }), r(Xt, [yt, W], function (e, t) { + return e.extend({init: function (e) { + var t = this; + t._super(e), t._value = e.value || "", t.addClass("textbox"), e.multiline ? t.addClass("multiline") : t.on("keydown", function (e) { + 13 == e.keyCode && t.parents().reverse().each(function (t) { + return e.preventDefault(), t.hasEventListeners("submit") && t.toJSON ? (t.fire("submit", {data: t.toJSON()}), !1) : void 0 + }) + }) + }, disabled: function (e) { + var t = this; + return t._rendered && "undefined" != typeof e && (t.getEl().disabled = e), t._super(e) + }, value: function (e) { + var t = this; + return"undefined" != typeof e ? (t._value = e, t._rendered && (t.getEl().value = e), t) : t._rendered ? t.getEl().value : t._value + }, repaint: function () { + var e = this, t, n, r, i = 0, o = 0, a; + t = e.getEl().style, n = e._layoutRect, a = e._lastRepaintRect || {}; + var s = document; + return!e.settings.multiline && s.all && (!s.documentMode || s.documentMode <= 8) && (t.lineHeight = n.h - o + "px"), r = e._borderBox, i = r.left + r.right + 8, o = r.top + r.bottom + (e.settings.multiline ? 8 : 0), n.x !== a.x && (t.left = n.x + "px", a.x = n.x), n.y !== a.y && (t.top = n.y + "px", a.y = n.y), n.w !== a.w && (t.width = n.w - i + "px", a.w = n.w), n.h !== a.h && (t.height = n.h - o + "px", a.h = n.h), e._lastRepaintRect = a, e.fire("repaint", {}, !1), e + }, renderHtml: function () { + var e = this, t = e._id, n = e.settings, r = e.encode(e._value, !1), i = ""; + return"spellcheck"in n && (i += ' spellcheck="' + n.spellcheck + '"'), n.maxLength && (i += ' maxlength="' + n.maxLength + '"'), n.size && (i += ' size="' + n.size + '"'), n.subtype && (i += ' type="' + n.subtype + '"'), e.disabled() && (i += ' disabled="disabled"'), n.multiline ? '" : '" + }, postRender: function () { + var e = this; + return t.on(e.getEl(), "change", function (t) { + e.fire("change", t) + }), e._super() + }, remove: function () { + t.off(this.getEl()), this._super() + }}) + }), r(Jt, [W], function (e) { + return function (t) { + var n = this, r; + n.show = function (i) { + return n.hide(), r = !0, window.setTimeout(function () { + r && t.appendChild(e.createFragment('
    ')) + }, i || 0), n + }, n.hide = function () { + var e = t.lastChild; + return e && -1 != e.className.indexOf("throbber") && e.parentNode.removeChild(e), r = !1, n + } + } + }), a([l, c, d, u, f, p, m, h, g, v, y, b, C, x, w, _, N, E, k, S, T, R, A, B, L, H, M, D, P, O, I, z, F, W, V, U, q, j, $, K, Y, G, X, J, Q, Z, et, tt, nt, rt, it, ot, at, st, lt, ct, dt, ut, ft, pt, mt, ht, gt, vt, yt, bt, Ct, xt, wt, _t, Nt, Et, kt, St, Tt, Rt, At, Bt, Lt, Ht, Mt, Dt, Pt, Ot, It, zt, Ft, Wt, Vt, Ut, qt, jt, $t, Kt, Yt, Gt, Xt, Jt]) +}(this); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/utils/editable_selects.js b/common/static/js/vendor/tiny_mce/utils/editable_selects.js deleted file mode 100644 index 4d9ffe272b..0000000000 --- a/common/static/js/vendor/tiny_mce/utils/editable_selects.js +++ /dev/null @@ -1,70 +0,0 @@ -/** - * editable_selects.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under LGPL License. - * - * License: http://tinymce.moxiecode.com/license - * Contributing: http://tinymce.moxiecode.com/contributing - */ - -var TinyMCE_EditableSelects = { - editSelectElm : null, - - init : function() { - var nl = document.getElementsByTagName("select"), i, d = document, o; - - for (i=0; i'; - h += ' '; - - return h; -} - -function updateColor(img_id, form_element_id) { - document.getElementById(img_id).style.backgroundColor = document.forms[0].elements[form_element_id].value; -} - -function setBrowserDisabled(id, state) { - var img = document.getElementById(id); - var lnk = document.getElementById(id + "_link"); - - if (lnk) { - if (state) { - lnk.setAttribute("realhref", lnk.getAttribute("href")); - lnk.removeAttribute("href"); - tinyMCEPopup.dom.addClass(img, 'disabled'); - } else { - if (lnk.getAttribute("realhref")) - lnk.setAttribute("href", lnk.getAttribute("realhref")); - - tinyMCEPopup.dom.removeClass(img, 'disabled'); - } - } -} - -function getBrowserHTML(id, target_form_element, type, prefix) { - var option = prefix + "_" + type + "_browser_callback", cb, html; - - cb = tinyMCEPopup.getParam(option, tinyMCEPopup.getParam("file_browser_callback")); - - if (!cb) - return ""; - - html = ""; - html += ''; - html += ' '; - - return html; -} - -function openBrowser(img_id, target_form_element, type, option) { - var img = document.getElementById(img_id); - - if (img.className != "mceButtonDisabled") - tinyMCEPopup.openBrowser(target_form_element, type, option); -} - -function selectByValue(form_obj, field_name, value, add_custom, ignore_case) { - if (!form_obj || !form_obj.elements[field_name]) - return; - - if (!value) - value = ""; - - var sel = form_obj.elements[field_name]; - - var found = false; - for (var i=0; i parseInt(v)) - st = this.mark(f, n); - } - } - - return st; - }, - - hasClass : function(n, c, d) { - return new RegExp('\\b' + c + (d ? '[0-9]+' : '') + '\\b', 'g').test(n.className); - }, - - getNum : function(n, c) { - c = n.className.match(new RegExp('\\b' + c + '([0-9]+)\\b', 'g'))[0]; - c = c.replace(/[^0-9]/g, ''); - - return c; - }, - - addClass : function(n, c, b) { - var o = this.removeClass(n, c); - n.className = b ? c + (o != '' ? (' ' + o) : '') : (o != '' ? (o + ' ') : '') + c; - }, - - removeClass : function(n, c) { - c = n.className.replace(new RegExp("(^|\\s+)" + c + "(\\s+|$)"), ' '); - return n.className = c != ' ' ? c : ''; - }, - - tags : function(f, s) { - return f.getElementsByTagName(s); - }, - - mark : function(f, n) { - var s = this.settings; - - this.addClass(n, s.invalid_cls); - n.setAttribute('aria-invalid', 'true'); - this.markLabels(f, n, s.invalid_cls); - - return false; - }, - - markLabels : function(f, n, ic) { - var nl, i; - - nl = this.tags(f, "label"); - for (i=0; i - - + + diff --git a/lms/templates/instructor/instructor_dashboard_2/instructor_dashboard_2.html b/lms/templates/instructor/instructor_dashboard_2/instructor_dashboard_2.html index 0552c7c82d..8191b8c3ec 100644 --- a/lms/templates/instructor/instructor_dashboard_2/instructor_dashboard_2.html +++ b/lms/templates/instructor/instructor_dashboard_2/instructor_dashboard_2.html @@ -37,8 +37,8 @@ - - + + <%static:js group='module-descriptor-js'/> <%static:js group='instructor_dash'/> diff --git a/lms/templates/widgets/html-edit.html b/lms/templates/widgets/html-edit.html index 0cb0ca4f0a..a3ad0ef7d3 100644 --- a/lms/templates/widgets/html-edit.html +++ b/lms/templates/widgets/html-edit.html @@ -1,13 +1,7 @@ <%! from django.utils.translation import ugettext as _ %>
    - -
    -
    From 9c1a42b85236d226db82a0d599a913d17588764f Mon Sep 17 00:00:00 2001 From: cahrens Date: Thu, 27 Mar 2014 13:03:28 -0400 Subject: [PATCH 02/11] Use postMessage to communicate between the iframe and TinyMCE. This gets around cross-origin issues on the CDN. Delete plugin.min.js as the Jake command will minimize into the full file. --- .../xmodule/xmodule/js/src/html/edit.coffee | 20 +- .../tiny_mce/plugins/codemirror/plugin.js | 120 +++++- .../tiny_mce/plugins/codemirror/plugin.min.js | 3 - .../tiny_mce/plugins/codemirror/source.html | 352 +++++++++--------- 4 files changed, 288 insertions(+), 207 deletions(-) delete mode 100644 common/static/js/vendor/tiny_mce/plugins/codemirror/plugin.min.js diff --git a/common/lib/xmodule/xmodule/js/src/html/edit.coffee b/common/lib/xmodule/xmodule/js/src/html/edit.coffee index 1b9e0c95db..f0ca39f852 100644 --- a/common/lib/xmodule/xmodule/js/src/html/edit.coffee +++ b/common/lib/xmodule/xmodule/js/src/html/edit.coffee @@ -63,8 +63,8 @@ class @HTMLEditingDescriptor ed.on('EditImage', @editImage) ed.on('SaveLink', @saveLink) ed.on('EditLink', @editLink) - ed.on('ShowCodeMirror', @showCodeEditor) - ed.on('SaveCodeMirror', @saveCodeEditor) + ed.on('ShowCodeEditor', @showCodeEditor) + ed.on('SaveCodeEditor', @saveCodeEditor) editImage: (data) => # Called when the image plugin will be shown. Input arg is the JSON version of the image data. @@ -86,17 +86,17 @@ class @HTMLEditingDescriptor if data['href'] data['href'] = rewriteStaticLinks(data['href'], '/static/', @base_asset_url) - showCodeEditor: (codeEditor) => + showCodeEditor: (source) => # Called when the CodeMirror Editor is displayed to convert links to show static prefix. - # The input argument is the CodeMirror instance. - content = rewriteStaticLinks(codeEditor.getValue(), @base_asset_url, '/static/') - codeEditor.setValue(content) + # The input argument is a dict with the text content. + content = rewriteStaticLinks(source.content, @base_asset_url, '/static/') + source.content = content - saveCodeEditor: (codeEditor) => + saveCodeEditor: (source) => # Called when the CodeMirror Editor is saved to convert links back to the full form. - # The input argument is the CodeMirror instance. - content = rewriteStaticLinks(codeEditor.getValue(), '/static/', @base_asset_url) - codeEditor.setValue(content) + # The input argument is a dict with the text content. + content = rewriteStaticLinks(source.content, '/static/', @base_asset_url) + source.content = content initInstanceCallback: (visualEditor) => visualEditor.setContent(rewriteStaticLinks(visualEditor.getContent({no_events: 1}), '/static/', @base_asset_url)) diff --git a/common/static/js/vendor/tiny_mce/plugins/codemirror/plugin.js b/common/static/js/vendor/tiny_mce/plugins/codemirror/plugin.js index 9c58127f27..c6d8fc7ad4 100644 --- a/common/static/js/vendor/tiny_mce/plugins/codemirror/plugin.js +++ b/common/static/js/vendor/tiny_mce/plugins/codemirror/plugin.js @@ -18,24 +18,114 @@ tinymce.PluginManager.add('codemirror', function(editor, url) { editor.selection.collapse(true); editor.selection.setContent(''); + // Determine the origin of the window that will host the code editor. + // If tinyMCE's baseURL is relative, then static files are hosted in the + // same origin as the containing page. If it is not relative, then we know that + // the origin of the iframe hosting the code editor will match the origin + // of tinyMCE's baseURL, as they are both hosted on the CDN. + var codeEditorOrigin; + var index = tinyMCE.baseURL.indexOf("/static/"); + if (index > 0) { + codeEditorOrigin = tinyMCE.baseURL.substring(0, index); + } + else { + codeEditorOrigin = window.location.origin; + } + + // Send the path location for CodeMirror and the parent origin to use in postMessage. + var sourceHtmlParams = "?CodeMirrorPath=" + editor.settings.codemirror.path + + "&ParentOrigin=" + window.location.origin; + // Open editor window var win = editor.windowManager.open({ title: 'HTML source code', - url: url + '/source.html', - width: 800, - height: 550, - resizable : true, - maximizable : true, - buttons: [ - { text: 'Ok', subtype: 'primary', onclick: function(){ - var doc = document.querySelectorAll('.mce-container-body>iframe')[0]; - doc.contentWindow.submit(); - win.close(); - }}, - { text: 'Cancel', onclick: 'close' } - ] - }); - }; + url: url + '/source.html' + sourceHtmlParams, + width: 800, + height: 550, + resizable: true, + maximizable: true, + buttons: [ + { text: 'OK', subtype: 'primary', onclick: function () { + postToCodeEditor({type: "save"}); + }}, + { text: 'Cancel', onclick: function () { + postToCodeEditor({type: "cancel"}); + }} + ] + + }); + + // The master version of TinyMCE has a win.getContentWindow() method. This is its implementation. + var codeWindow = win.getEl().getElementsByTagName('iframe')[0].contentWindow; + + var postToCodeEditor = function (data) { + codeWindow.postMessage(data, codeEditorOrigin); + }; + + var messageListener = function (event) { + // Check that the message came from the code editor. + if (codeEditorOrigin !== event.origin) { + return; + } + + var source; + if (event.data.type === "init") { + source = {content: editor.getContent({source_view: true})}; + // Post an event to allow rewriting of static links on the content. + editor.fire("ShowCodeEditor", source); + + postToCodeEditor( + { + type: "init", + content: source.content + } + ); + editor.dom.remove(editor.dom.select('.CmCaReT')); + } + else if (event.data.type === "setText") { + source = {content: event.data.text}; + var isDirty = event.data.isDirty; + + // Post an event to allow rewriting of static links on the content. + editor.fire('SaveCodeEditor', source); + + editor.setContent(source.content); + + // Set cursor: + var el = editor.dom.select('span#CmCaReT')[0]; + if (el) { + editor.selection.scrollIntoView(el); + editor.selection.setCursorLocation(el,0); + editor.dom.remove(el); + } + // EDX: added because CmCaReT span was getting left in when caret was within a style tag. + // Make sure to strip it out (and accept that caret will not be in the correct place). + else { + var content = editor.getContent(); + var strippedContent = content.replace('', ''); + if (content !== strippedContent) { + editor.setContent(strippedContent); + } + } + + // EDX: moved block of code from original location since we may change content in bug fix code above. + editor.isNotDirty = !isDirty; + if (isDirty) { + editor.nodeChanged(); + } + } + else if (event.data.type === "closeWindow") { + win.close(); + } + }; + + win.on("close", function() { + window.removeEventListener("message", messageListener); + }); + + window.addEventListener("message", messageListener, false); + + } // Add a button to the button bar // EDX changed to show "HTML" on toolbar button diff --git a/common/static/js/vendor/tiny_mce/plugins/codemirror/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/codemirror/plugin.min.js deleted file mode 100644 index 05ad0a5597..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/codemirror/plugin.min.js +++ /dev/null @@ -1,3 +0,0 @@ -tinymce.PluginManager.requireLangPack("codemirror"); -tinymce.PluginManager.add("codemirror",function(a,c){function b(){a.focus();a.selection.collapse(!0);a.selection.setContent('');var b=a.windowManager.open({title:"HTML source code",url:c+"/source.html",width:800,height:550,resizable:!0,maximizable:!0,buttons:[{text:"Ok",subtype:"primary",onclick:function(){document.querySelectorAll(".mce-container-body>iframe")[0].contentWindow.submit();b.close()}},{text:"Cancel",onclick:"close"}]})}a.addButton("code", -{title:"Edit HTML",text:"HTML",icon:false,onclick:b});a.addMenuItem("code",{icon:"code",text:"Edit HTML",context:"tools",onclick:b})}); diff --git a/common/static/js/vendor/tiny_mce/plugins/codemirror/source.html b/common/static/js/vendor/tiny_mce/plugins/codemirror/source.html index 15de3748ab..627d1051e4 100644 --- a/common/static/js/vendor/tiny_mce/plugins/codemirror/source.html +++ b/common/static/js/vendor/tiny_mce/plugins/codemirror/source.html @@ -1,6 +1,8 @@ + + From f44a1b6c1c6ab9d30c07dc98633eff7ee0aa357e Mon Sep 17 00:00:00 2001 From: Nimisha Asthagiri Date: Fri, 28 Mar 2014 14:04:24 -0400 Subject: [PATCH 03/11] Tiny MCE version 4.0.20 Changed tiny-MCE to not load CSS files dynamically. Added CSS files for tiny-MCE in env files. Moved TinyMCE files to directory structure required by Jake command. Changed clients of "tinymce.min.js" to use "tinymce.full.min.js" instead. Updated CHANGELOG to indicate tinymce version 4.0.20. Renamed tinymce.css. Directions for creating tinymce.full.min.js and commenting of edX changes. Updated comments related to disabling dynamic JS and CSS file loading in tinymce. Allow TinyMCE to handle CSS within the iframe. --- CHANGELOG.rst | 8 +- cms/envs/common.py | 15 +- cms/static/coffee/spec/main.coffee | 4 +- cms/static/coffee/spec/main_squire.coffee | 4 +- cms/templates/base.html | 6 +- common/lib/xmodule/xmodule/js/js_test.yml | 4 +- .../xmodule/xmodule/js/src/html/edit.coffee | 17 +- ...iny-mce.css => tinymce-studio-content.css} | 0 .../js/vendor/tiny_mce/jquery.tinymce.min.js | 1 - .../tiny_mce/plugins/advlist/plugin.min.js | 1 - .../tiny_mce/plugins/anchor/plugin.min.js | 1 - .../tiny_mce/plugins/autolink/plugin.min.js | 1 - .../tiny_mce/plugins/autoresize/plugin.min.js | 1 - .../tiny_mce/plugins/autosave/plugin.min.js | 1 - .../tiny_mce/plugins/bbcode/plugin.min.js | 1 - .../tiny_mce/plugins/charmap/plugin.min.js | 1 - .../tiny_mce/plugins/code/plugin.min.js | 1 - .../plugins/contextmenu/plugin.min.js | 1 - .../plugins/directionality/plugin.min.js | 1 - .../plugins/emoticons/img/smiley-cool.gif | Bin 354 -> 0 bytes .../plugins/emoticons/img/smiley-cry.gif | Bin 329 -> 0 bytes .../emoticons/img/smiley-embarassed.gif | Bin 331 -> 0 bytes .../emoticons/img/smiley-foot-in-mouth.gif | Bin 342 -> 0 bytes .../plugins/emoticons/img/smiley-frown.gif | Bin 340 -> 0 bytes .../plugins/emoticons/img/smiley-innocent.gif | Bin 336 -> 0 bytes .../plugins/emoticons/img/smiley-kiss.gif | Bin 338 -> 0 bytes .../plugins/emoticons/img/smiley-laughing.gif | Bin 343 -> 0 bytes .../emoticons/img/smiley-money-mouth.gif | Bin 321 -> 0 bytes .../plugins/emoticons/img/smiley-sealed.gif | Bin 323 -> 0 bytes .../plugins/emoticons/img/smiley-smile.gif | Bin 344 -> 0 bytes .../emoticons/img/smiley-surprised.gif | Bin 338 -> 0 bytes .../emoticons/img/smiley-tongue-out.gif | Bin 328 -> 0 bytes .../emoticons/img/smiley-undecided.gif | Bin 337 -> 0 bytes .../plugins/emoticons/img/smiley-wink.gif | Bin 350 -> 0 bytes .../plugins/emoticons/img/smiley-yell.gif | Bin 336 -> 0 bytes .../tiny_mce/plugins/emoticons/plugin.min.js | 1 - .../tiny_mce/plugins/example/plugin.min.js | 1 - .../plugins/example_dependency/plugin.min.js | 1 - .../tiny_mce/plugins/fullpage/plugin.min.js | 1 - .../tiny_mce/plugins/fullscreen/plugin.min.js | 1 - .../vendor/tiny_mce/plugins/hr/plugin.min.js | 1 - .../tiny_mce/plugins/importcss/plugin.min.js | 1 - .../plugins/insertdatetime/plugin.min.js | 1 - .../tiny_mce/plugins/layer/plugin.min.js | 1 - .../plugins/legacyoutput/plugin.min.js | 1 - .../tiny_mce/plugins/lists/plugin.min.js | 1 - .../tiny_mce/plugins/media/moxieplayer.swf | Bin 20017 -> 0 bytes .../tiny_mce/plugins/media/plugin.min.js | 1 - .../plugins/nonbreaking/plugin.min.js | 1 - .../plugins/noneditable/plugin.min.js | 1 - .../tiny_mce/plugins/pagebreak/plugin.min.js | 1 - .../tiny_mce/plugins/paste/plugin.min.js | 1 - .../tiny_mce/plugins/preview/plugin.min.js | 1 - .../tiny_mce/plugins/print/plugin.min.js | 1 - .../tiny_mce/plugins/save/plugin.min.js | 1 - .../plugins/searchreplace/plugin.min.js | 1 - .../plugins/spellchecker/plugin.min.js | 1 - .../tiny_mce/plugins/tabfocus/plugin.min.js | 1 - .../tiny_mce/plugins/table/plugin.min.js | 1 - .../tiny_mce/plugins/template/plugin.min.js | 1 - .../tiny_mce/plugins/textcolor/plugin.min.js | 1 - .../plugins/visualblocks/css/visualblocks.css | 128 - .../plugins/visualblocks/plugin.min.js | 1 - .../plugins/visualchars/plugin.min.js | 1 - .../tiny_mce/plugins/wordcount/plugin.min.js | 1 - .../skins/lightgray/content.inline.min.css | 1 - .../tiny_mce/skins/lightgray/content.min.css | 1 - .../skins/lightgray/fonts/tinymce-small.eot | Bin 8348 -> 0 bytes .../skins/lightgray/fonts/tinymce-small.svg | 175 - .../skins/lightgray/fonts/tinymce-small.ttf | Bin 8164 -> 0 bytes .../skins/lightgray/fonts/tinymce-small.woff | Bin 8340 -> 0 bytes .../skins/lightgray/fonts/tinymce.eot | Bin 8276 -> 0 bytes .../skins/lightgray/fonts/tinymce.svg | 153 - .../skins/lightgray/fonts/tinymce.ttf | Bin 8112 -> 0 bytes .../skins/lightgray/fonts/tinymce.woff | Bin 8408 -> 0 bytes .../tiny_mce/skins/lightgray/skin.ie7.min.css | 1 - .../tiny_mce/skins/lightgray/skin.min.css | 1 - .../skins/studio-tmce4/fonts/readme.md | 1 - .../skins/studio-tmce4/img/anchor.gif | Bin 53 -> 0 bytes .../skins/studio-tmce4/img/loader.gif | Bin 2608 -> 0 bytes .../skins/studio-tmce4/img/object.gif | Bin 152 -> 0 bytes .../tiny_mce/skins/studio-tmce4/img/trans.gif | Bin 43 -> 0 bytes .../tiny_mce/themes/modern/theme.min.js | 1 - .../js/vendor/tiny_mce/tiny_mce_popup.js | 7 - .../static/js/vendor/tiny_mce/tinymce.min.js | 6340 --- .../static/js/vendor/tinymce/BUILD_README.txt | 16 + .../js/tinymce/classes/AddOnManager.js | 256 + .../tinymce/js/tinymce/classes/Compat.js | 84 + .../tinymce/js/tinymce/classes/Editor.js | 2168 + .../js/tinymce/classes/EditorCommands.js | 721 + .../js/tinymce/classes/EditorManager.js | 574 + .../tinymce/js/tinymce/classes/EnterKey.js | 670 + .../vendor/tinymce/js/tinymce/classes/Env.js | 135 + .../js/tinymce/classes/FocusManager.js | 230 + .../tinymce/js/tinymce/classes/ForceBlocks.js | 132 + .../tinymce/js/tinymce/classes/Formatter.js | 2426 ++ .../tinymce/js/tinymce/classes/LegacyInput.js | 73 + .../tinymce/js/tinymce/classes/Shortcuts.js | 111 + .../tinymce/js/tinymce/classes/UndoManager.js | 337 + .../js/tinymce/classes/WindowManager.js | 221 + .../tinymce/classes/dom/ControlSelection.js | 519 + .../js/tinymce/classes/dom/DOMUtils.js | 2078 + .../js/tinymce/classes/dom/DomQuery.js | 730 + .../js/tinymce/classes/dom/EventUtils.js | 557 + .../tinymce/js/tinymce/classes/dom/Range.js | 777 + .../js/tinymce/classes/dom/RangeUtils.js | 476 + .../js/tinymce/classes/dom/ScriptLoader.js | 255 + .../js/tinymce/classes/dom/Selection.js | 1259 + .../js/tinymce/classes/dom/Serializer.js | 387 + .../js/tinymce/classes/dom/Sizzle.jQuery.js | 23 + .../tinymce/js/tinymce/classes/dom/Sizzle.js | 1928 + .../tinymce/classes/dom/StyleSheetLoader.js | 185 + .../js/tinymce/classes/dom/TreeWalker.js | 79 + .../tinymce/classes/dom/TridentSelection.js | 502 + .../js/tinymce/classes/html/DomParser.js | 756 + .../js/tinymce/classes/html/Entities.js | 263 + .../tinymce/js/tinymce/classes/html/Node.js | 496 + .../js/tinymce/classes/html/SaxParser.js | 423 + .../tinymce/js/tinymce/classes/html/Schema.js | 938 + .../js/tinymce/classes/html/Serializer.js | 156 + .../tinymce/js/tinymce/classes/html/Styles.js | 324 + .../tinymce/js/tinymce/classes/html/Writer.js | 199 + .../js/tinymce/classes/jquery.tinymce.js | 364 + .../js/tinymce/classes/ui/AbsoluteLayout.js | 63 + .../tinymce/js/tinymce/classes/ui/Button.js | 141 + .../js/tinymce/classes/ui/ButtonGroup.js | 62 + .../tinymce/js/tinymce/classes/ui/Checkbox.js | 119 + .../js/tinymce/classes/ui/Collection.js | 430 + .../js/tinymce/classes/ui/ColorButton.js | 107 + .../tinymce/js/tinymce/classes/ui/ComboBox.js | 332 + .../js/tinymce/classes/ui/Container.js | 495 + .../tinymce/js/tinymce/classes/ui/Control.js | 1559 + .../tinymce/js/tinymce/classes/ui/DomUtils.js | 95 + .../js/tinymce/classes/ui/DragHelper.js | 136 + .../js/tinymce/classes/ui/ElementPath.js | 83 + .../tinymce/js/tinymce/classes/ui/Factory.js | 105 + .../tinymce/js/tinymce/classes/ui/FieldSet.js | 59 + .../js/tinymce/classes/ui/FilePicker.js | 53 + .../js/tinymce/classes/ui/FitLayout.js | 48 + .../js/tinymce/classes/ui/FlexLayout.js | 246 + .../js/tinymce/classes/ui/FloatPanel.js | 366 + .../js/tinymce/classes/ui/FlowLayout.js | 42 + .../tinymce/js/tinymce/classes/ui/Form.js | 154 + .../tinymce/js/tinymce/classes/ui/FormItem.js | 56 + .../js/tinymce/classes/ui/FormatControls.js | 652 + .../js/tinymce/classes/ui/GridLayout.js | 226 + .../tinymce/js/tinymce/classes/ui/Iframe.js | 83 + .../tinymce/classes/ui/KeyboardNavigation.js | 390 + .../tinymce/js/tinymce/classes/ui/Label.js | 125 + .../tinymce/js/tinymce/classes/ui/Layout.js | 114 + .../tinymce/js/tinymce/classes/ui/ListBox.js | 125 + .../tinymce/js/tinymce/classes/ui/Menu.js | 140 + .../tinymce/js/tinymce/classes/ui/MenuBar.js | 33 + .../js/tinymce/classes/ui/MenuButton.js | 244 + .../tinymce/js/tinymce/classes/ui/MenuItem.js | 292 + .../js/tinymce/classes/ui/MessageBox.js | 205 + .../tinymce/js/tinymce/classes/ui/Movable.js | 200 + .../tinymce/js/tinymce/classes/ui/Panel.js | 67 + .../js/tinymce/classes/ui/PanelButton.js | 105 + .../tinymce/js/tinymce/classes/ui/Path.js | 140 + .../tinymce/js/tinymce/classes/ui/Radio.js | 29 + .../js/tinymce/classes/ui/Resizable.js | 68 + .../js/tinymce/classes/ui/ResizeHandle.js | 86 + .../js/tinymce/classes/ui/Scrollable.js | 149 + .../tinymce/js/tinymce/classes/ui/Selector.js | 369 + .../tinymce/js/tinymce/classes/ui/Spacer.js | 39 + .../js/tinymce/classes/ui/SplitButton.js | 119 + .../js/tinymce/classes/ui/StackLayout.js | 30 + .../tinymce/js/tinymce/classes/ui/TabPanel.js | 180 + .../tinymce/js/tinymce/classes/ui/TextBox.js | 214 + .../tinymce/js/tinymce/classes/ui/Throbber.js | 70 + .../tinymce/js/tinymce/classes/ui/Toolbar.js | 54 + .../tinymce/js/tinymce/classes/ui/Tooltip.js | 86 + .../tinymce/js/tinymce/classes/ui/Widget.js | 156 + .../tinymce/js/tinymce/classes/ui/Window.js | 373 + .../tinymce/js/tinymce/classes/util/Class.js | 163 + .../tinymce/js/tinymce/classes/util/I18n.js | 80 + .../tinymce/js/tinymce/classes/util/JSON.js | 109 + .../tinymce/js/tinymce/classes/util/JSONP.js | 38 + .../js/tinymce/classes/util/JSONRequest.js | 110 + .../js/tinymce/classes/util/LocalStorage.js | 213 + .../js/tinymce/classes/util/Observable.js | 250 + .../tinymce/js/tinymce/classes/util/Quirks.js | 1139 + .../tinymce/js/tinymce/classes/util/Tools.js | 503 + .../tinymce/js/tinymce/classes/util/URI.js | 366 + .../tinymce/js/tinymce/classes/util/VK.js | 37 + .../tinymce/js/tinymce/classes/util/XHR.js | 84 + .../tinymce/js/tinymce/jquery.tinymce.min.js | 1 + .../js/tinymce}/langs/readme.md | 0 .../js/tinymce}/license.txt | 0 .../tinymce}/plugins/codemirror/LICENSE.txt | 0 .../js/tinymce}/plugins/codemirror/README.txt | 0 .../tinymce}/plugins/codemirror/langs/en.js | 0 .../tinymce}/plugins/codemirror/langs/nl.js | 0 .../js/tinymce}/plugins/codemirror/plugin.js | 0 .../tinymce}/plugins/codemirror/source.html | 0 .../js/tinymce}/plugins/image/plugin.min.js | 0 .../js/tinymce}/plugins/link/plugin.min.js | 0 .../plugins/paste/classes/Clipboard.js | 489 + .../tinymce/plugins/paste/classes/Plugin.js | 110 + .../tinymce/plugins/paste/classes/Quirks.js | 123 + .../js/tinymce/plugins/paste/classes/Utils.js | 98 + .../plugins/paste/classes/WordFilter.js | 287 + .../js/tinymce/plugins/paste/plugin.dev.js | 120 + .../js/tinymce/plugins/paste/plugin.js | 1206 + .../js/tinymce/plugins/paste/plugin.min.js | 1 + .../spellchecker/classes/DomTextMatcher.js | 470 + .../plugins/spellchecker/classes/Plugin.js | 343 + .../plugins/spellchecker/plugin.dev.js | 117 + .../js/tinymce/plugins/spellchecker/plugin.js | 903 + .../plugins/spellchecker/plugin.min.js | 1 + .../plugins/table/classes/CellSelection.js | 167 + .../tinymce/plugins/table/classes/Plugin.js | 794 + .../tinymce/plugins/table/classes/Quirks.js | 370 + .../plugins/table/classes/TableGrid.js | 833 + .../js/tinymce/plugins/table/plugin.dev.js | 119 + .../js/tinymce/plugins/table/plugin.js | 2260 + .../js/tinymce/plugins/table/plugin.min.js | 1 + .../js/tinymce/plugins/textcolor/plugin.js | 164 + .../tinymce/plugins/textcolor/plugin.min.js | 1 + .../skins/studio-tmce4/content.inline.min.css | 0 .../skins/studio-tmce4/content.min.css | 0 .../studio-tmce4/fonts/icomoon-small.eot | Bin .../studio-tmce4/fonts/icomoon-small.svg | 0 .../studio-tmce4/fonts/icomoon-small.ttf | Bin .../studio-tmce4/fonts/icomoon-small.woff | Bin .../skins/studio-tmce4/fonts/icomoon.eot | Bin .../skins/studio-tmce4/fonts/icomoon.svg | 0 .../skins/studio-tmce4/fonts/icomoon.ttf | Bin .../skins/studio-tmce4/fonts/icomoon.woff | Bin .../skins/studio-tmce4}/fonts/readme.md | 0 .../skins/studio-tmce4}/img/anchor.gif | Bin .../skins/studio-tmce4}/img/loader.gif | Bin .../skins/studio-tmce4}/img/object.gif | Bin .../tinymce/skins/studio-tmce4}/img/trans.gif | Bin .../tinymce}/skins/studio-tmce4/img/wline.gif | Bin .../skins/studio-tmce4/skin.ie7.min.css | 0 .../js/tinymce}/skins/studio-tmce4/skin.json | 0 .../tinymce}/skins/studio-tmce4/skin.min.css | 0 .../tinymce/js/tinymce/themes/modern/theme.js | 599 + .../js/tinymce/themes/modern/theme.min.js | 1 + .../vendor/tinymce/js/tinymce/tinymce.dev.js | 214 + .../tinymce/js/tinymce/tinymce.full.min.js | 17 + .../tinymce/js/tinymce/tinymce.jquery.dev.js | 213 + .../tinymce/js/tinymce/tinymce.jquery.js | 32176 ++++++++++++++ .../tinymce/js/tinymce/tinymce.jquery.min.js | 10 + .../js/vendor/tinymce/js/tinymce/tinymce.js | 34814 ++++++++++++++++ .../vendor/tinymce/js/tinymce/tinymce.min.js | 10 + lms/envs/common.py | 14 +- .../courseware/instructor_dashboard.html | 6 +- .../instructor_dashboard_2.html | 6 +- vendor_extra/tinymce/JakePackage.zip | Bin 0 -> 6409572 bytes 252 files changed, 111928 insertions(+), 6870 deletions(-) rename common/static/css/{tiny-mce.css => tinymce-studio-content.css} (100%) delete mode 100644 common/static/js/vendor/tiny_mce/jquery.tinymce.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/advlist/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/anchor/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/autolink/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/autoresize/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/autosave/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/bbcode/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/charmap/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/code/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/contextmenu/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/directionality/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/emoticons/img/smiley-cool.gif delete mode 100644 common/static/js/vendor/tiny_mce/plugins/emoticons/img/smiley-cry.gif delete mode 100644 common/static/js/vendor/tiny_mce/plugins/emoticons/img/smiley-embarassed.gif delete mode 100644 common/static/js/vendor/tiny_mce/plugins/emoticons/img/smiley-foot-in-mouth.gif delete mode 100644 common/static/js/vendor/tiny_mce/plugins/emoticons/img/smiley-frown.gif delete mode 100644 common/static/js/vendor/tiny_mce/plugins/emoticons/img/smiley-innocent.gif delete mode 100644 common/static/js/vendor/tiny_mce/plugins/emoticons/img/smiley-kiss.gif delete mode 100644 common/static/js/vendor/tiny_mce/plugins/emoticons/img/smiley-laughing.gif delete mode 100644 common/static/js/vendor/tiny_mce/plugins/emoticons/img/smiley-money-mouth.gif delete mode 100644 common/static/js/vendor/tiny_mce/plugins/emoticons/img/smiley-sealed.gif delete mode 100644 common/static/js/vendor/tiny_mce/plugins/emoticons/img/smiley-smile.gif delete mode 100644 common/static/js/vendor/tiny_mce/plugins/emoticons/img/smiley-surprised.gif delete mode 100644 common/static/js/vendor/tiny_mce/plugins/emoticons/img/smiley-tongue-out.gif delete mode 100644 common/static/js/vendor/tiny_mce/plugins/emoticons/img/smiley-undecided.gif delete mode 100644 common/static/js/vendor/tiny_mce/plugins/emoticons/img/smiley-wink.gif delete mode 100644 common/static/js/vendor/tiny_mce/plugins/emoticons/img/smiley-yell.gif delete mode 100644 common/static/js/vendor/tiny_mce/plugins/emoticons/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/example/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/example_dependency/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/fullpage/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/fullscreen/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/hr/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/importcss/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/insertdatetime/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/layer/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/legacyoutput/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/lists/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/media/moxieplayer.swf delete mode 100644 common/static/js/vendor/tiny_mce/plugins/media/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/nonbreaking/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/noneditable/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/pagebreak/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/paste/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/preview/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/print/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/save/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/searchreplace/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/spellchecker/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/tabfocus/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/table/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/template/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/textcolor/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/visualblocks/css/visualblocks.css delete mode 100644 common/static/js/vendor/tiny_mce/plugins/visualblocks/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/visualchars/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/plugins/wordcount/plugin.min.js delete mode 100644 common/static/js/vendor/tiny_mce/skins/lightgray/content.inline.min.css delete mode 100644 common/static/js/vendor/tiny_mce/skins/lightgray/content.min.css delete mode 100644 common/static/js/vendor/tiny_mce/skins/lightgray/fonts/tinymce-small.eot delete mode 100644 common/static/js/vendor/tiny_mce/skins/lightgray/fonts/tinymce-small.svg delete mode 100644 common/static/js/vendor/tiny_mce/skins/lightgray/fonts/tinymce-small.ttf delete mode 100644 common/static/js/vendor/tiny_mce/skins/lightgray/fonts/tinymce-small.woff delete mode 100644 common/static/js/vendor/tiny_mce/skins/lightgray/fonts/tinymce.eot delete mode 100644 common/static/js/vendor/tiny_mce/skins/lightgray/fonts/tinymce.svg delete mode 100644 common/static/js/vendor/tiny_mce/skins/lightgray/fonts/tinymce.ttf delete mode 100644 common/static/js/vendor/tiny_mce/skins/lightgray/fonts/tinymce.woff delete mode 100644 common/static/js/vendor/tiny_mce/skins/lightgray/skin.ie7.min.css delete mode 100644 common/static/js/vendor/tiny_mce/skins/lightgray/skin.min.css delete mode 100755 common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/readme.md delete mode 100755 common/static/js/vendor/tiny_mce/skins/studio-tmce4/img/anchor.gif delete mode 100755 common/static/js/vendor/tiny_mce/skins/studio-tmce4/img/loader.gif delete mode 100755 common/static/js/vendor/tiny_mce/skins/studio-tmce4/img/object.gif delete mode 100755 common/static/js/vendor/tiny_mce/skins/studio-tmce4/img/trans.gif delete mode 100644 common/static/js/vendor/tiny_mce/themes/modern/theme.min.js delete mode 100644 common/static/js/vendor/tiny_mce/tiny_mce_popup.js delete mode 100644 common/static/js/vendor/tiny_mce/tinymce.min.js create mode 100644 common/static/js/vendor/tinymce/BUILD_README.txt create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/AddOnManager.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/Compat.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/Editor.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/EditorCommands.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/EditorManager.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/EnterKey.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/Env.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/FocusManager.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ForceBlocks.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/Formatter.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/LegacyInput.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/Shortcuts.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/UndoManager.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/WindowManager.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/dom/ControlSelection.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/dom/DOMUtils.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/dom/DomQuery.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/dom/EventUtils.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/dom/Range.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/dom/RangeUtils.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/dom/ScriptLoader.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/dom/Selection.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/dom/Serializer.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/dom/Sizzle.jQuery.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/dom/Sizzle.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/dom/StyleSheetLoader.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/dom/TreeWalker.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/dom/TridentSelection.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/html/DomParser.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/html/Entities.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/html/Node.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/html/SaxParser.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/html/Schema.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/html/Serializer.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/html/Styles.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/html/Writer.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/jquery.tinymce.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/AbsoluteLayout.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/Button.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/ButtonGroup.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/Checkbox.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/Collection.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/ColorButton.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/ComboBox.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/Container.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/Control.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/DomUtils.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/DragHelper.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/ElementPath.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/Factory.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/FieldSet.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/FilePicker.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/FitLayout.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/FlexLayout.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/FloatPanel.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/FlowLayout.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/Form.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/FormItem.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/FormatControls.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/GridLayout.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/Iframe.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/KeyboardNavigation.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/Label.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/Layout.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/ListBox.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/Menu.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/MenuBar.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/MenuButton.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/MenuItem.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/MessageBox.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/Movable.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/Panel.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/PanelButton.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/Path.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/Radio.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/Resizable.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/ResizeHandle.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/Scrollable.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/Selector.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/Spacer.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/SplitButton.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/StackLayout.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/TabPanel.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/TextBox.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/Throbber.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/Toolbar.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/Tooltip.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/Widget.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/ui/Window.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/util/Class.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/util/I18n.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/util/JSON.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/util/JSONP.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/util/JSONRequest.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/util/LocalStorage.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/util/Observable.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/util/Quirks.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/util/Tools.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/util/URI.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/util/VK.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/classes/util/XHR.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/jquery.tinymce.min.js rename common/static/js/vendor/{tiny_mce => tinymce/js/tinymce}/langs/readme.md (100%) mode change 100644 => 100755 rename common/static/js/vendor/{tiny_mce => tinymce/js/tinymce}/license.txt (100%) mode change 100644 => 100755 rename common/static/js/vendor/{tiny_mce => tinymce/js/tinymce}/plugins/codemirror/LICENSE.txt (100%) rename common/static/js/vendor/{tiny_mce => tinymce/js/tinymce}/plugins/codemirror/README.txt (100%) rename common/static/js/vendor/{tiny_mce => tinymce/js/tinymce}/plugins/codemirror/langs/en.js (100%) rename common/static/js/vendor/{tiny_mce => tinymce/js/tinymce}/plugins/codemirror/langs/nl.js (100%) rename common/static/js/vendor/{tiny_mce => tinymce/js/tinymce}/plugins/codemirror/plugin.js (100%) rename common/static/js/vendor/{tiny_mce => tinymce/js/tinymce}/plugins/codemirror/source.html (100%) rename common/static/js/vendor/{tiny_mce => tinymce/js/tinymce}/plugins/image/plugin.min.js (100%) rename common/static/js/vendor/{tiny_mce => tinymce/js/tinymce}/plugins/link/plugin.min.js (100%) create mode 100755 common/static/js/vendor/tinymce/js/tinymce/plugins/paste/classes/Clipboard.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/plugins/paste/classes/Plugin.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/plugins/paste/classes/Quirks.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/plugins/paste/classes/Utils.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/plugins/paste/classes/WordFilter.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/plugins/paste/plugin.dev.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/plugins/paste/plugin.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/plugins/paste/plugin.min.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/plugins/spellchecker/classes/DomTextMatcher.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/plugins/spellchecker/classes/Plugin.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/plugins/spellchecker/plugin.dev.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/plugins/spellchecker/plugin.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/plugins/spellchecker/plugin.min.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/plugins/table/classes/CellSelection.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/plugins/table/classes/Plugin.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/plugins/table/classes/Quirks.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/plugins/table/classes/TableGrid.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/plugins/table/plugin.dev.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/plugins/table/plugin.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/plugins/table/plugin.min.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/plugins/textcolor/plugin.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/plugins/textcolor/plugin.min.js rename common/static/js/vendor/{tiny_mce => tinymce/js/tinymce}/skins/studio-tmce4/content.inline.min.css (100%) rename common/static/js/vendor/{tiny_mce => tinymce/js/tinymce}/skins/studio-tmce4/content.min.css (100%) rename common/static/js/vendor/{tiny_mce => tinymce/js/tinymce}/skins/studio-tmce4/fonts/icomoon-small.eot (100%) rename common/static/js/vendor/{tiny_mce => tinymce/js/tinymce}/skins/studio-tmce4/fonts/icomoon-small.svg (100%) rename common/static/js/vendor/{tiny_mce => tinymce/js/tinymce}/skins/studio-tmce4/fonts/icomoon-small.ttf (100%) rename common/static/js/vendor/{tiny_mce => tinymce/js/tinymce}/skins/studio-tmce4/fonts/icomoon-small.woff (100%) rename common/static/js/vendor/{tiny_mce => tinymce/js/tinymce}/skins/studio-tmce4/fonts/icomoon.eot (100%) rename common/static/js/vendor/{tiny_mce => tinymce/js/tinymce}/skins/studio-tmce4/fonts/icomoon.svg (100%) rename common/static/js/vendor/{tiny_mce => tinymce/js/tinymce}/skins/studio-tmce4/fonts/icomoon.ttf (100%) rename common/static/js/vendor/{tiny_mce => tinymce/js/tinymce}/skins/studio-tmce4/fonts/icomoon.woff (100%) rename common/static/js/vendor/{tiny_mce/skins/lightgray => tinymce/js/tinymce/skins/studio-tmce4}/fonts/readme.md (100%) mode change 100644 => 100755 rename common/static/js/vendor/{tiny_mce/skins/lightgray => tinymce/js/tinymce/skins/studio-tmce4}/img/anchor.gif (100%) mode change 100644 => 100755 rename common/static/js/vendor/{tiny_mce/skins/lightgray => tinymce/js/tinymce/skins/studio-tmce4}/img/loader.gif (100%) mode change 100644 => 100755 rename common/static/js/vendor/{tiny_mce/skins/lightgray => tinymce/js/tinymce/skins/studio-tmce4}/img/object.gif (100%) mode change 100644 => 100755 rename common/static/js/vendor/{tiny_mce/skins/lightgray => tinymce/js/tinymce/skins/studio-tmce4}/img/trans.gif (100%) mode change 100644 => 100755 rename common/static/js/vendor/{tiny_mce => tinymce/js/tinymce}/skins/studio-tmce4/img/wline.gif (100%) rename common/static/js/vendor/{tiny_mce => tinymce/js/tinymce}/skins/studio-tmce4/skin.ie7.min.css (100%) rename common/static/js/vendor/{tiny_mce => tinymce/js/tinymce}/skins/studio-tmce4/skin.json (100%) rename common/static/js/vendor/{tiny_mce => tinymce/js/tinymce}/skins/studio-tmce4/skin.min.css (100%) create mode 100755 common/static/js/vendor/tinymce/js/tinymce/themes/modern/theme.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/themes/modern/theme.min.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/tinymce.dev.js create mode 100644 common/static/js/vendor/tinymce/js/tinymce/tinymce.full.min.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/tinymce.jquery.dev.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/tinymce.jquery.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/tinymce.jquery.min.js create mode 100755 common/static/js/vendor/tinymce/js/tinymce/tinymce.js create mode 100644 common/static/js/vendor/tinymce/js/tinymce/tinymce.min.js create mode 100644 vendor_extra/tinymce/JakePackage.zip diff --git a/CHANGELOG.rst b/CHANGELOG.rst index ad83dbbf30..94fd2fba0f 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -7,6 +7,10 @@ the top. Include a label indicating the component affected. Blades: Create an upload modal for video transcript translations (BLD-751). +Studio and LMS: Upgrade version of TinyMCE to 4.0.20. Switch from tabbed Visual/HTML +Editor for HTML modules to showing the code editor as a plugin within TinyMCE (triggered +from toolbar). STUD-1422 + Studio: Add ability to reorder Pages and hide the Wiki page. STUD-1375 Blades: Added template for iFrames. BLD-611. @@ -16,10 +20,6 @@ Studio: Support for viewing built-in tabs on the Pages page. STUD-1193 Blades: Fixed bug when image mapped input's Show Answer multiplies rectangles on many inputtypes. BLD-810. -Studio and LMS: Upgrade version of TinyMCE to 4.0.16. Switch from tabbed Visual/HTML -Editor for HTML modules to showing the code editor as a plugin within TinyMCE (triggered -from toolbar). STUD-1422 - LMS: Enabled screen reader feedback of problem responses. LMS-2158 diff --git a/cms/envs/common.py b/cms/envs/common.py index 434f534a27..a8b2fc1276 100644 --- a/cms/envs/common.py +++ b/cms/envs/common.py @@ -310,10 +310,23 @@ PIPELINE_CSS = { 'css/vendor/ui-lightness/jquery-ui-1.8.22.custom.css', 'css/vendor/jquery.qtip.min.css', 'js/vendor/markitup/skins/simple/style.css', - 'js/vendor/markitup/sets/wiki/style.css', + 'js/vendor/markitup/sets/wiki/style.css' ], 'output_filename': 'css/cms-style-vendor.css', }, + 'style-vendor-tinymce-content': { + 'source_filenames': [ + 'js/vendor/tinymce/js/tinymce/skins/studio-tmce4/content.min.css', + 'css/tinymce-studio-content.css' + ], + 'output_filename': 'css/cms-style-vendor-tinymce-content.css', + }, + 'style-vendor-tinymce-skin': { + 'source_filenames': [ + 'js/vendor/tinymce/js/tinymce/skins/studio-tmce4/skin.min.css' + ], + 'output_filename': 'css/cms-style-vendor-tinymce-skin.css', + }, 'style-app': { 'source_filenames': [ 'sass/style-app.css', diff --git a/cms/static/coffee/spec/main.coffee b/cms/static/coffee/spec/main.coffee index 1cbc3fc805..4980e86c65 100644 --- a/cms/static/coffee/spec/main.coffee +++ b/cms/static/coffee/spec/main.coffee @@ -25,8 +25,8 @@ requirejs.config({ "backbone": "xmodule_js/common_static/js/vendor/backbone-min", "backbone.associations": "xmodule_js/common_static/js/vendor/backbone-associations-min", "backbone.paginator": "xmodule_js/common_static/js/vendor/backbone.paginator.min", - "tinymce": "xmodule_js/common_static/js/vendor/tiny_mce/tiny_mce", - "jquery.tinymce": "xmodule_js/common_static/js/vendor/tiny_mce/jquery.tinymce", + "tinymce": "xmodule_js/common_static/js/vendor/tinymce/js/tinymce/tinymce.full.min", + "jquery.tinymce": "xmodule_js/common_static/js/vendor/tinymce/js/tinymce/jquery.tinymce", "xmodule": "xmodule_js/src/xmodule", "xblock/cms.runtime.v1": "coffee/src/xblock/cms.runtime.v1", "xblock": "xmodule_js/common_static/coffee/src/xblock", diff --git a/cms/static/coffee/spec/main_squire.coffee b/cms/static/coffee/spec/main_squire.coffee index c3ce440bca..e7e6bef00b 100644 --- a/cms/static/coffee/spec/main_squire.coffee +++ b/cms/static/coffee/spec/main_squire.coffee @@ -24,8 +24,8 @@ requirejs.config({ "backbone": "xmodule_js/common_static/js/vendor/backbone-min", "backbone.associations": "xmodule_js/common_static/js/vendor/backbone-associations-min", "backbone.paginator": "xmodule_js/common_static/js/vendor/backbone.paginator.min", - "tinymce": "xmodule_js/common_static/js/vendor/tiny_mce/tiny_mce", - "jquery.tinymce": "xmodule_js/common_static/js/vendor/tiny_mce/jquery.tinymce", + "tinymce": "xmodule_js/common_static/js/vendor/tinymce/js/tinymce/tinymce.full.min", + "jquery.tinymce": "xmodule_js/common_static/js/vendor/tinymce/js/tinymce/jquery.tinymce", "xmodule": "xmodule_js/src/xmodule", "xblock/cms.runtime.v1": "coffee/src/xblock/cms.runtime.v1", "xblock": "xmodule_js/common_static/coffee/src/xblock", diff --git a/cms/templates/base.html b/cms/templates/base.html index 579a26f504..93a3ec4ff7 100644 --- a/cms/templates/base.html +++ b/cms/templates/base.html @@ -23,6 +23,8 @@ <%static:css group='style-vendor'/> + <%static:css group='style-vendor-tinymce-content'/> + <%static:css group='style-vendor-tinymce-skin'/> <%static:css group='style-app'/> <%static:css group='style-app-extend1'/> <%static:css group='style-xmodule'/> @@ -70,8 +72,8 @@ "backbone": "js/vendor/backbone-min", "backbone.associations": "js/vendor/backbone-associations-min", "backbone.paginator": "js/vendor/backbone.paginator.min", - "tinymce": "js/vendor/tiny_mce/tinymce.min", - "jquery.tinymce": "js/vendor/tiny_mce/jquery.tinymce.min", + "tinymce": "js/vendor/tinymce/js/tinymce/tinymce.full.min", + "jquery.tinymce": "js/vendor/tinymce/js/tinymce/jquery.tinymce.min", "xmodule": "/xmodule/xmodule", "xblock": "coffee/src/xblock", "utility": "js/src/utility", diff --git a/common/lib/xmodule/xmodule/js/js_test.yml b/common/lib/xmodule/xmodule/js/js_test.yml index 8b251a4842..95d4df3e3f 100644 --- a/common/lib/xmodule/xmodule/js/js_test.yml +++ b/common/lib/xmodule/xmodule/js/js_test.yml @@ -49,8 +49,8 @@ lib_paths: - common_static/js/vendor/backbone-min.js - common_static/js/vendor/jquery.leanModal.min.js - common_static/js/vendor/CodeMirror/codemirror.js - - common_static/js/vendor/tiny_mce/jquery.tinymce.min.js - - common_static/js/vendor/tiny_mce/tinymce.min.js + - common_static/js/vendor/tinymce/js/tinymce/jquery.tinymce.min.js + - common_static/js/vendor/tinymce/js/tinymce/tinymce.full.min.js - common_static/js/vendor/mathjax-MathJax-c9db6ac/MathJax.js - common_static/js/vendor/jquery.timeago.js - common_static/js/vendor/sinon-1.7.1.js diff --git a/common/lib/xmodule/xmodule/js/src/html/edit.coffee b/common/lib/xmodule/xmodule/js/src/html/edit.coffee index f0ca39f852..97e713dad5 100644 --- a/common/lib/xmodule/xmodule/js/src/html/edit.coffee +++ b/common/lib/xmodule/xmodule/js/src/html/edit.coffee @@ -6,21 +6,30 @@ class @HTMLEditingDescriptor if @base_asset_url == undefined @base_asset_url = null + # Create an array of all content CSS links to use in and pass to Tiny MCE. + # We create this dynamically in order to support hashed files from our Django pipeline. + # CSS files that are to be used by Tiny MCE should contain the string "tinymce" so + # they can be found by the search below. + # We filter for only those files that are "content" files (as opposed to "skin" files). + tiny_mce_css_links = [] + $("link[rel=stylesheet][href*='tinymce']").filter("[href*='content']").each -> + tiny_mce_css_links.push $(this).attr("href") + return + # This is a workaround for the fact that tinyMCE's baseURL property is not getting correctly set on AWS # instances (like sandbox). It is not necessary to explicitly set baseURL when running locally. - tinyMCE.baseURL = "#{baseUrl}/js/vendor/tiny_mce" + tinyMCE.baseURL = "#{baseUrl}/js/vendor/tinymce/js/tinymce" # This is necessary for the LMS bulk e-mail acceptance test. In that particular scenario, # tinyMCE incorrectly decides that the suffix should be "", which means it fails to load files. tinyMCE.suffix = ".min" @tiny_mce_textarea = $(".tiny-mce", @element).tinymce({ - script_url : "#{baseUrl}/js/vendor/tiny_mce/tinymce.min.js", + script_url : "#{baseUrl}/js/vendor/tinymce/js/tinymce/tinymce.full.min.js", theme : "modern", skin: 'studio-tmce4', schema: "html5", # Necessary to preserve relative URLs to our images. convert_urls : false, - # TODO: we should share this CSS with studio (and LMS) - content_css : "#{baseUrl}/css/tiny-mce.css", + content_css : tiny_mce_css_links.join(", "), formats : { # tinyMCE does block level for code by default code: {inline: 'code'} diff --git a/common/static/css/tiny-mce.css b/common/static/css/tinymce-studio-content.css similarity index 100% rename from common/static/css/tiny-mce.css rename to common/static/css/tinymce-studio-content.css diff --git a/common/static/js/vendor/tiny_mce/jquery.tinymce.min.js b/common/static/js/vendor/tiny_mce/jquery.tinymce.min.js deleted file mode 100644 index 9221fa9a4f..0000000000 --- a/common/static/js/vendor/tiny_mce/jquery.tinymce.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(e){function t(){function t(e){"remove"===e&&this.each(function(e,t){var n=r(t);n&&n.remove()}),this.find("span.mceEditor,div.mceEditor").each(function(e,t){var n=tinymce.get(t.id.replace(/_parent$/,""));n&&n.remove()})}function i(e){var n,i=this;if(null!=e)t.call(i),i.each(function(t,n){var i;(i=tinymce.get(n.id))&&i.setContent(e)});else if(i.length>0&&(n=tinymce.get(i[0].id)))return n.getContent()}function r(e){var t=null;return e&&e.id&&a.tinymce&&(t=tinymce.get(e.id)),t}function c(e){return!!(e&&e.length&&a.tinymce&&e.is(":tinymce"))}var u={};e.each(["text","html","val"],function(t,a){var o=u[a]=e.fn[a],s="text"===a;e.fn[a]=function(t){var a=this;if(!c(a))return o.apply(a,arguments);if(t!==n)return i.call(a.filter(":tinymce"),t),o.apply(a.not(":tinymce"),arguments),a;var u="",l=arguments;return(s?a:a.eq(0)).each(function(t,n){var i=r(n);u+=i?s?i.getContent().replace(/<(?:"[^"]*"|'[^']*'|[^'">])*>/g,""):i.getContent({save:!0}):o.apply(e(n),l)}),u}}),e.each(["append","prepend"],function(t,i){var a=u[i]=e.fn[i],o="prepend"===i;e.fn[i]=function(e){var t=this;return c(t)?e!==n?(t.filter(":tinymce").each(function(t,n){var i=r(n);i&&i.setContent(o?e+i.getContent():i.getContent()+e)}),a.apply(t.not(":tinymce"),arguments),t):void 0:a.apply(t,arguments)}}),e.each(["remove","replaceWith","replaceAll","empty"],function(n,i){var r=u[i]=e.fn[i];e.fn[i]=function(){return t.call(this,i),r.apply(this,arguments)}}),u.attr=e.fn.attr,e.fn.attr=function(t,a){var o=this,s=arguments;if(!t||"value"!==t||!c(o))return a!==n?u.attr.apply(o,s):u.attr.apply(o,s);if(a!==n)return i.call(o.filter(":tinymce"),a),u.attr.apply(o.not(":tinymce"),s),o;var l=o[0],m=r(l);return m?m.getContent({save:!0}):u.attr.apply(e(l),s)}}var n,i,r=[],a=window;e.fn.tinymce=function(n){function c(){var i=[],r=0;t&&(t(),t=null),l.each(function(e,t){var a,c=t.id,u=n.oninit;c||(t.id=c=tinymce.DOM.uniqueId()),tinymce.get(c)||(a=new tinymce.Editor(c,n,tinymce.EditorManager),i.push(a),a.on("init",function(){var e,t=u;l.css("visibility",""),u&&++r==i.length&&("string"==typeof t&&(e=-1===t.indexOf(".")?null:tinymce.resolve(t.replace(/\.\w+$/,"")),t=tinymce.resolve(t)),t.apply(e||tinymce,i))}))}),e.each(i,function(e,t){t.render()})}var u,o,s,l=this,m="";if(!l.length)return l;if(!n)return tinymce.get(l[0].id);if(l.css("visibility","hidden"),a.tinymce||i||!(u=n.script_url))1===i?r.push(c):c();else{i=1,o=u.substring(0,u.lastIndexOf("/")),-1!=u.indexOf(".min")&&(m=".min"),a.tinymce=a.tinyMCEPreInit||{base:o,suffix:m},-1!=u.indexOf("gzip")&&(s=n.language||"en",u=u+(/\?/.test(u)?"&":"?")+"js=true&core=true&suffix="+escape(m)+"&themes="+escape(n.theme||"modern")+"&plugins="+escape(n.plugins||"")+"&languages="+(s||""),a.tinyMCE_GZ||(a.tinyMCE_GZ={start:function(){function t(e){tinymce.ScriptLoader.markDone(tinymce.baseURI.toAbsolute(e))}t("langs/"+s+".js"),t("themes/"+n.theme+"/theme"+m+".js"),t("themes/"+n.theme+"/langs/"+s+".js"),e.each(n.plugins.split(","),function(e,n){n&&(t("plugins/"+n+"/plugin"+m+".js"),t("plugins/"+n+"/langs/"+s+".js"))})},end:function(){}}));var p=document.createElement("script");p.type="text/javascript",p.onload=p.onreadystatechange=function(t){t=t||event,2===i||"load"!=t.type&&!/complete|loaded/.test(p.readyState)||(tinymce.dom.Event.domLoaded=1,i=2,n.script_loaded&&n.script_loaded(),c(),e.each(r,function(e,t){t()}))},p.src=u,document.body.appendChild(p)}return l},e.extend(e.expr[":"],{tinymce:function(e){return!!(e.id&&"tinymce"in window&&tinymce.get(e.id))}})}(jQuery); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/advlist/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/advlist/plugin.min.js deleted file mode 100644 index da1cdb2ba4..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/advlist/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.PluginManager.add("advlist",function(t){function e(t,e){var n=[];return tinymce.each(e.split(/[ ,]/),function(t){n.push({text:t.replace(/\-/g," ").replace(/\b\w/g,function(t){return t.toUpperCase()}),data:"default"==t?"":t})}),n}function n(e,n){var i,r=t.dom,a=t.selection;i=r.getParent(a.getNode(),"ol,ul"),i&&i.nodeName==e&&n!==!1||t.execCommand("UL"==e?"InsertUnorderedList":"InsertOrderedList"),n=n===!1?o[e]:n,o[e]=n,i=r.getParent(a.getNode(),"ol,ul"),i&&(r.setStyle(i,"listStyleType",n),i.removeAttribute("data-mce-style")),t.focus()}function i(e){var n=t.dom.getStyle(t.dom.getParent(t.selection.getNode(),"ol,ul"),"listStyleType")||"";e.control.items().each(function(t){t.active(t.settings.data===n)})}var r,a,o={};r=e("OL",t.getParam("advlist_number_styles","default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman")),a=e("UL",t.getParam("advlist_bullet_styles","default,circle,disc,square")),t.addButton("numlist",{type:"splitbutton",tooltip:"Numbered list",menu:r,onshow:i,onselect:function(t){n("OL",t.control.settings.data)},onclick:function(){n("OL",!1)}}),t.addButton("bullist",{type:"splitbutton",tooltip:"Bullet list",menu:a,onshow:i,onselect:function(t){n("UL",t.control.settings.data)},onclick:function(){n("UL",!1)}})}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/anchor/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/anchor/plugin.min.js deleted file mode 100644 index 6a3fd792d8..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/anchor/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.PluginManager.add("anchor",function(e){function t(){var t=e.selection.getNode();e.windowManager.open({title:"Anchor",body:{type:"textbox",name:"name",size:40,label:"Name",value:t.name||t.id},onsubmit:function(t){e.execCommand("mceInsertContent",!1,e.dom.createHTML("a",{id:t.data.name}))}})}e.addButton("anchor",{icon:"anchor",tooltip:"Anchor",onclick:t,stateSelector:"a:not([href])"}),e.addMenuItem("anchor",{icon:"anchor",text:"Anchor",context:"insert",onclick:t})}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/autolink/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/autolink/plugin.min.js deleted file mode 100644 index 332cababb5..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/autolink/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.PluginManager.add("autolink",function(t){function e(t){o(t,-1,"(",!0)}function n(t){o(t,0,"",!0)}function i(t){o(t,-1,"",!1)}function o(t,e,n){var i,o,r,s,d,a,f,l,c;if(i=t.selection.getRng(!0).cloneRange(),i.startOffset<5){if(l=i.endContainer.previousSibling,!l){if(!i.endContainer.firstChild||!i.endContainer.firstChild.nextSibling)return;l=i.endContainer.firstChild.nextSibling}if(c=l.length,i.setStart(l,c),i.setEnd(l,c),i.endOffset<5)return;o=i.endOffset,s=l}else{if(s=i.endContainer,3!=s.nodeType&&s.firstChild){for(;3!=s.nodeType&&s.firstChild;)s=s.firstChild;3==s.nodeType&&(i.setStart(s,0),i.setEnd(s,s.nodeValue.length))}o=1==i.endOffset?2:i.endOffset-1-e}r=o;do i.setStart(s,o>=2?o-2:0),i.setEnd(s,o>=1?o-1:0),o-=1;while(" "!=i.toString()&&""!==i.toString()&&160!=i.toString().charCodeAt(0)&&o-2>=0&&i.toString()!=n);if(i.toString()==n||160==i.toString().charCodeAt(0)?(i.setStart(s,o),i.setEnd(s,r),o+=1):0===i.startOffset?(i.setStart(s,0),i.setEnd(s,r)):(i.setStart(s,o),i.setEnd(s,r)),a=i.toString(),"."==a.charAt(a.length-1)&&i.setEnd(s,r-1),a=i.toString(),f=a.match(/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.|(?:mailto:)?[A-Z0-9._%+\-]+@)(.+)$/i),f&&("www."==f[1]?f[1]="http://www.":/@$/.test(f[1])&&!/^mailto:/.test(f[1])&&(f[1]="mailto:"+f[1]),d=t.selection.getBookmark(),t.selection.setRng(i),t.execCommand("createlink",!1,f[1]+f[2]),t.selection.moveToBookmark(d),t.nodeChanged(),tinymce.Env.webkit)){t.selection.collapse(!1);var g=Math.min(s.length,r+1);i.setStart(s,g),i.setEnd(s,g),t.selection.setRng(i)}}return t.on("keydown",function(e){return 13==e.keyCode?i(t):void 0}),tinymce.Env.ie?void t.on("init",function(){try{t.execCommand("AutoUrlDetect",!1,!0)}catch(e){}}):(t.on("keypress",function(n){return 41==n.which?e(t):void 0}),void t.on("keyup",function(e){return 32==e.keyCode?n(t):void 0}))}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/autoresize/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/autoresize/plugin.min.js deleted file mode 100644 index 4713ec26fd..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/autoresize/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.PluginManager.add("autoresize",function(e){function t(i){var a,s,g,r,m=e.getDoc(),u=m.body,l=m.documentElement,h=tinymce.DOM,_=n.autoresize_min_height;!u||!i||"setcontent"===i.type&&i.initial||e.plugins.fullscreen&&e.plugins.fullscreen.isFullscreen()||(g=e.dom.getStyle(u,"margin-top",!0),r=e.dom.getStyle(u,"margin-bottom",!0),s=u.offsetHeight+parseInt(g,10)+parseInt(r,10),(isNaN(s)||0>=s)&&(s=tinymce.Env.ie?u.scrollHeight:tinymce.Env.webkit&&0===u.clientHeight?0:u.offsetHeight),s>n.autoresize_min_height&&(_=s),n.autoresize_max_height&&s>n.autoresize_max_height?(_=n.autoresize_max_height,u.style.overflowY="auto",l.style.overflowY="auto"):(u.style.overflowY="hidden",l.style.overflowY="hidden",u.scrollTop=0),_!==o&&(a=_-o,h.setStyle(h.get(e.id+"_ifr"),"height",_+"px"),o=_,tinymce.isWebKit&&0>a&&t(i)))}function i(e,n,o){setTimeout(function(){t({}),e--?i(e,n,o):o&&o()},n)}var n=e.settings,o=0;e.settings.inline||(n.autoresize_min_height=parseInt(e.getParam("autoresize_min_height",e.getElement().offsetHeight),10),n.autoresize_max_height=parseInt(e.getParam("autoresize_max_height",0),10),e.on("init",function(){var t=e.getParam("autoresize_overflow_padding",1);e.dom.setStyles(e.getBody(),{paddingBottom:e.getParam("autoresize_bottom_margin",50),paddingLeft:t,paddingRight:t})}),e.on("change setcontent paste keyup",t),e.getParam("autoresize_on_init",!0)&&e.on("init",function(){i(20,100,function(){i(5,1e3)})}),e.addCommand("mceAutoResize",t))}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/autosave/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/autosave/plugin.min.js deleted file mode 100644 index bb41975102..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/autosave/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.PluginManager.add("autosave",function(e){function t(e,t){var n={s:1e3,m:6e4};return e=/^(\d+)([ms]?)$/.exec(""+(e||t)),(e[2]?n[e[2]]:1)*parseInt(e,10)}function n(){var e=parseInt(l.getItem(d+"time"),10)||0;return(new Date).getTime()-e>v.autosave_retention?(a(!1),!1):!0}function a(t){l.removeItem(d+"draft"),l.removeItem(d+"time"),t!==!1&&e.fire("RemoveDraft")}function r(){!c()&&e.isDirty()&&(l.setItem(d+"draft",e.getContent({format:"raw",no_events:!0})),l.setItem(d+"time",(new Date).getTime()),e.fire("StoreDraft"))}function o(){n()&&(e.setContent(l.getItem(d+"draft"),{format:"raw"}),e.fire("RestoreDraft"))}function i(){m||(setInterval(function(){e.removed||r()},v.autosave_interval),m=!0)}function s(){var t=this;t.disabled(!n()),e.on("StoreDraft RestoreDraft RemoveDraft",function(){t.disabled(!n())}),i()}function u(){e.undoManager.beforeChange(),o(),a(),e.undoManager.add()}function f(){var e;return tinymce.each(tinymce.editors,function(t){t.plugins.autosave&&t.plugins.autosave.storeDraft(),!e&&t.isDirty()&&t.getParam("autosave_ask_before_unload",!0)&&(e=t.translate("You have unsaved changes are you sure you want to navigate away?"))}),e}function c(t){var n=e.settings.forced_root_block;return t=tinymce.trim("undefined"==typeof t?e.getBody().innerHTML:t),""===t||new RegExp("^<"+n+"[^>]*>(( | |[ ]|]*>)+?|)|
    $","i").test(t)}var d,m,v=e.settings,l=tinymce.util.LocalStorage;d=v.autosave_prefix||"tinymce-autosave-{path}{query}-{id}-",d=d.replace(/\{path\}/g,document.location.pathname),d=d.replace(/\{query\}/g,document.location.search),d=d.replace(/\{id\}/g,e.id),v.autosave_interval=t(v.autosave_interval,"30s"),v.autosave_retention=t(v.autosave_retention,"20m"),e.addButton("restoredraft",{title:"Restore last draft",onclick:u,onPostRender:s}),e.addMenuItem("restoredraft",{text:"Restore last draft",onclick:u,onPostRender:s,context:"file"}),e.settings.autosave_restore_when_empty!==!1&&(e.on("init",function(){n()&&c()&&o()}),e.on("saveContent",function(){a()})),window.onbeforeunload=f,this.hasDraft=n,this.storeDraft=r,this.restoreDraft=o,this.removeDraft=a,this.isEmpty=c}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/bbcode/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/bbcode/plugin.min.js deleted file mode 100644 index 70a88a7d69..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/bbcode/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(){tinymce.create("tinymce.plugins.BBCodePlugin",{init:function(e){var t=this,n=e.getParam("bbcode_dialect","punbb").toLowerCase();e.on("beforeSetContent",function(e){e.content=t["_"+n+"_bbcode2html"](e.content)}),e.on("postProcess",function(e){e.set&&(e.content=t["_"+n+"_bbcode2html"](e.content)),e.get&&(e.content=t["_"+n+"_html2bbcode"](e.content))})},getInfo:function(){return{longname:"BBCode Plugin",author:"Moxiecode Systems AB",authorurl:"http://www.tinymce.com",infourl:"http://www.tinymce.com/wiki.php/Plugin:bbcode"}},_punbb_html2bbcode:function(e){function t(t,n){e=e.replace(t,n)}return e=tinymce.trim(e),t(/(.*?)<\/a>/gi,"[url=$1]$2[/url]"),t(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"),t(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"),t(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"),t(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"),t(/(.*?)<\/span>/gi,"[color=$1]$2[/color]"),t(/(.*?)<\/font>/gi,"[color=$1]$2[/color]"),t(/(.*?)<\/span>/gi,"[size=$1]$2[/size]"),t(/(.*?)<\/font>/gi,"$1"),t(//gi,"[img]$1[/img]"),t(/(.*?)<\/span>/gi,"[code]$1[/code]"),t(/(.*?)<\/span>/gi,"[quote]$1[/quote]"),t(/(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]"),t(/(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]"),t(/(.*?)<\/em>/gi,"[code][i]$1[/i][/code]"),t(/(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]"),t(/(.*?)<\/u>/gi,"[code][u]$1[/u][/code]"),t(/(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]"),t(/<\/(strong|b)>/gi,"[/b]"),t(/<(strong|b)>/gi,"[b]"),t(/<\/(em|i)>/gi,"[/i]"),t(/<(em|i)>/gi,"[i]"),t(/<\/u>/gi,"[/u]"),t(/(.*?)<\/span>/gi,"[u]$1[/u]"),t(//gi,"[u]"),t(/]*>/gi,"[quote]"),t(/<\/blockquote>/gi,"[/quote]"),t(/
    /gi,"\n"),t(//gi,"\n"),t(/
    /gi,"\n"),t(/

    /gi,""),t(/<\/p>/gi,"\n"),t(/ |\u00a0/gi," "),t(/"/gi,'"'),t(/</gi,"<"),t(/>/gi,">"),t(/&/gi,"&"),e},_punbb_bbcode2html:function(e){function t(t,n){e=e.replace(t,n)}return e=tinymce.trim(e),t(/\n/gi,"
    "),t(/\[b\]/gi,""),t(/\[\/b\]/gi,""),t(/\[i\]/gi,""),t(/\[\/i\]/gi,""),t(/\[u\]/gi,""),t(/\[\/u\]/gi,""),t(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,'$2'),t(/\[url\](.*?)\[\/url\]/gi,'$1'),t(/\[img\](.*?)\[\/img\]/gi,''),t(/\[color=(.*?)\](.*?)\[\/color\]/gi,'$2'),t(/\[code\](.*?)\[\/code\]/gi,'$1 '),t(/\[quote.*?\](.*?)\[\/quote\]/gi,'$1 '),e}}),tinymce.PluginManager.add("bbcode",tinymce.plugins.BBCodePlugin)}(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/charmap/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/charmap/plugin.min.js deleted file mode 100644 index dff18e6e55..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/charmap/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.PluginManager.add("charmap",function(e){function t(){function t(e){for(;e;){if("TD"==e.nodeName)return e;e=e.parentNode}}var i,a,r,o;i='';var s=25;for(r=0;10>r;r++){for(i+="",a=0;s>a;a++){var l=n[r*s+a],c="g"+(r*s+a);i+='"}i+=""}i+="";var u={type:"container",html:i,onclick:function(t){var n=t.target;"DIV"==n.nodeName&&e.execCommand("mceInsertContent",!1,n.firstChild.nodeValue)},onmouseover:function(e){var n=t(e.target);n&&o.find("#preview").text(n.firstChild.firstChild.data)}};o=e.windowManager.open({title:"Special character",spacing:10,padding:10,items:[u,{type:"label",name:"preview",text:" ",style:"font-size: 40px; text-align: center",border:1,minWidth:100,minHeight:80}],buttons:[{text:"Close",onclick:function(){o.close()}}]})}var n=[["160","no-break space"],["38","ampersand"],["34","quotation mark"],["162","cent sign"],["8364","euro sign"],["163","pound sign"],["165","yen sign"],["169","copyright sign"],["174","registered sign"],["8482","trade mark sign"],["8240","per mille sign"],["181","micro sign"],["183","middle dot"],["8226","bullet"],["8230","three dot leader"],["8242","minutes / feet"],["8243","seconds / inches"],["167","section sign"],["182","paragraph sign"],["223","sharp s / ess-zed"],["8249","single left-pointing angle quotation mark"],["8250","single right-pointing angle quotation mark"],["171","left pointing guillemet"],["187","right pointing guillemet"],["8216","left single quotation mark"],["8217","right single quotation mark"],["8220","left double quotation mark"],["8221","right double quotation mark"],["8218","single low-9 quotation mark"],["8222","double low-9 quotation mark"],["60","less-than sign"],["62","greater-than sign"],["8804","less-than or equal to"],["8805","greater-than or equal to"],["8211","en dash"],["8212","em dash"],["175","macron"],["8254","overline"],["164","currency sign"],["166","broken bar"],["168","diaeresis"],["161","inverted exclamation mark"],["191","turned question mark"],["710","circumflex accent"],["732","small tilde"],["176","degree sign"],["8722","minus sign"],["177","plus-minus sign"],["247","division sign"],["8260","fraction slash"],["215","multiplication sign"],["185","superscript one"],["178","superscript two"],["179","superscript three"],["188","fraction one quarter"],["189","fraction one half"],["190","fraction three quarters"],["402","function / florin"],["8747","integral"],["8721","n-ary sumation"],["8734","infinity"],["8730","square root"],["8764","similar to"],["8773","approximately equal to"],["8776","almost equal to"],["8800","not equal to"],["8801","identical to"],["8712","element of"],["8713","not an element of"],["8715","contains as member"],["8719","n-ary product"],["8743","logical and"],["8744","logical or"],["172","not sign"],["8745","intersection"],["8746","union"],["8706","partial differential"],["8704","for all"],["8707","there exists"],["8709","diameter"],["8711","backward difference"],["8727","asterisk operator"],["8733","proportional to"],["8736","angle"],["180","acute accent"],["184","cedilla"],["170","feminine ordinal indicator"],["186","masculine ordinal indicator"],["8224","dagger"],["8225","double dagger"],["192","A - grave"],["193","A - acute"],["194","A - circumflex"],["195","A - tilde"],["196","A - diaeresis"],["197","A - ring above"],["198","ligature AE"],["199","C - cedilla"],["200","E - grave"],["201","E - acute"],["202","E - circumflex"],["203","E - diaeresis"],["204","I - grave"],["205","I - acute"],["206","I - circumflex"],["207","I - diaeresis"],["208","ETH"],["209","N - tilde"],["210","O - grave"],["211","O - acute"],["212","O - circumflex"],["213","O - tilde"],["214","O - diaeresis"],["216","O - slash"],["338","ligature OE"],["352","S - caron"],["217","U - grave"],["218","U - acute"],["219","U - circumflex"],["220","U - diaeresis"],["221","Y - acute"],["376","Y - diaeresis"],["222","THORN"],["224","a - grave"],["225","a - acute"],["226","a - circumflex"],["227","a - tilde"],["228","a - diaeresis"],["229","a - ring above"],["230","ligature ae"],["231","c - cedilla"],["232","e - grave"],["233","e - acute"],["234","e - circumflex"],["235","e - diaeresis"],["236","i - grave"],["237","i - acute"],["238","i - circumflex"],["239","i - diaeresis"],["240","eth"],["241","n - tilde"],["242","o - grave"],["243","o - acute"],["244","o - circumflex"],["245","o - tilde"],["246","o - diaeresis"],["248","o slash"],["339","ligature oe"],["353","s - caron"],["249","u - grave"],["250","u - acute"],["251","u - circumflex"],["252","u - diaeresis"],["253","y - acute"],["254","thorn"],["255","y - diaeresis"],["913","Alpha"],["914","Beta"],["915","Gamma"],["916","Delta"],["917","Epsilon"],["918","Zeta"],["919","Eta"],["920","Theta"],["921","Iota"],["922","Kappa"],["923","Lambda"],["924","Mu"],["925","Nu"],["926","Xi"],["927","Omicron"],["928","Pi"],["929","Rho"],["931","Sigma"],["932","Tau"],["933","Upsilon"],["934","Phi"],["935","Chi"],["936","Psi"],["937","Omega"],["945","alpha"],["946","beta"],["947","gamma"],["948","delta"],["949","epsilon"],["950","zeta"],["951","eta"],["952","theta"],["953","iota"],["954","kappa"],["955","lambda"],["956","mu"],["957","nu"],["958","xi"],["959","omicron"],["960","pi"],["961","rho"],["962","final sigma"],["963","sigma"],["964","tau"],["965","upsilon"],["966","phi"],["967","chi"],["968","psi"],["969","omega"],["8501","alef symbol"],["982","pi symbol"],["8476","real part symbol"],["978","upsilon - hook symbol"],["8472","Weierstrass p"],["8465","imaginary part"],["8592","leftwards arrow"],["8593","upwards arrow"],["8594","rightwards arrow"],["8595","downwards arrow"],["8596","left right arrow"],["8629","carriage return"],["8656","leftwards double arrow"],["8657","upwards double arrow"],["8658","rightwards double arrow"],["8659","downwards double arrow"],["8660","left right double arrow"],["8756","therefore"],["8834","subset of"],["8835","superset of"],["8836","not a subset of"],["8838","subset of or equal to"],["8839","superset of or equal to"],["8853","circled plus"],["8855","circled times"],["8869","perpendicular"],["8901","dot operator"],["8968","left ceiling"],["8969","right ceiling"],["8970","left floor"],["8971","right floor"],["9001","left-pointing angle bracket"],["9002","right-pointing angle bracket"],["9674","lozenge"],["9824","black spade suit"],["9827","black club suit"],["9829","black heart suit"],["9830","black diamond suit"],["8194","en space"],["8195","em space"],["8201","thin space"],["8204","zero width non-joiner"],["8205","zero width joiner"],["8206","left-to-right mark"],["8207","right-to-left mark"],["173","soft hyphen"]];e.addButton("charmap",{icon:"charmap",tooltip:"Special character",onclick:t}),e.addMenuItem("charmap",{icon:"charmap",text:"Special character",onclick:t,context:"insert"})}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/code/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/code/plugin.min.js deleted file mode 100644 index 9e7e89895e..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/code/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.PluginManager.add("code",function(e){function o(){e.windowManager.open({title:"Source code",body:{type:"textbox",name:"code",multiline:!0,minWidth:e.getParam("code_dialog_width",600),minHeight:e.getParam("code_dialog_height",Math.min(tinymce.DOM.getViewPort().h-200,500)),value:e.getContent({source_view:!0}),spellcheck:!1,style:"direction: ltr; text-align: left"},onSubmit:function(o){e.focus(),e.undoManager.transact(function(){e.setContent(o.data.code)}),e.selection.setCursorLocation(),e.nodeChanged()}})}e.addCommand("mceCodeEditor",o),e.addButton("code",{icon:"code",tooltip:"Source code",onclick:o}),e.addMenuItem("code",{icon:"code",text:"Source code",context:"tools",onclick:o})}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/contextmenu/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/contextmenu/plugin.min.js deleted file mode 100644 index f4c664a065..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/contextmenu/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.PluginManager.add("contextmenu",function(e){var n,t=e.settings.contextmenu_never_use_native;e.on("contextmenu",function(o){var i;if(!o.ctrlKey||t){if(o.preventDefault(),i=e.settings.contextmenu||"link image inserttable | cell row column deletetable",n)n.show();else{var c=[];tinymce.each(i.split(/[ ,]/),function(n){var t=e.menuItems[n];"|"==n&&(t={text:n}),t&&(t.shortcut="",c.push(t))});for(var a=0;aKx}s1_F$4FCWDA^8LW0018VEC2ui01^Na000Hw;3tYzX_jM3Qpv$_M?zI9i5=0S zX-{-uv=l3%&P0s%m9Ox_a(m_c|u z01g3U0`Wll5)poVdma=N8y<3f0Sf~hXmTC}2oxMW4FdxUj+z4<0}lrX2nP=qkDRIt z9Ge*(qzMrj3jrIOjvI{`5eWzt3`G_T8yChG8w(a19SkK12@M(+799Zr9n=~PzBCmA z5)BU-)YKUd4H5!D9|!^o9kWIe9SH(WDHRk92}DZ?3})2$P@$55g90f0N)ZA8JID5J Aw*UYD diff --git a/common/static/js/vendor/tiny_mce/plugins/emoticons/img/smiley-cry.gif b/common/static/js/vendor/tiny_mce/plugins/emoticons/img/smiley-cry.gif deleted file mode 100644 index 74d897a4f6d22e814e2b054e98b8a75fb464b4be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 329 zcmV-P0k-}}Nk%w1VG;lm0Mr-&E)xPSit@9T3%;vR+|V+?t0A(pllJjXrMl7n=_A_a za^B+Su$LjvyC3@TIQZNZa##w=!k(SO^P#bO*w(eU#;{U83XFCU_V)J5wrb+;g2vkN z#>U24qVoOvY5)KLA^8LW0018VEC2ui01^Na000HX;3tY$X_jM3QUfCh%s^o(nF++< zc?Th6v=oL>*by8K!mhvwelUXuuW&&U9iGO3hM@>Njw{l^#0q9mWpcefdI;O$;efnY zkd~@r-o$*74FCWI1%d((4+jDz0va0>69^fI6%`W{8w!gU1pyL>prH>E0R<%k6Aq%H z4ij+^9TEwM5P}eh2@)L<~6+>@EpxfA0YrcPNsSu diff --git a/common/static/js/vendor/tiny_mce/plugins/emoticons/img/smiley-embarassed.gif b/common/static/js/vendor/tiny_mce/plugins/emoticons/img/smiley-embarassed.gif deleted file mode 100644 index 963a96b8a7593b1d8bcbab073abe5ee4e539dbf6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 331 zcmV-R0kr-{Nk%w1VG;lm0MrryDh>j~yq&6%75dW~z^P39(NxsGDE{UkxtkIEq(S-a zRKlwv+S=Lr?>hbYY~sQ?c3T&ZcN_Nh_EU3s(>Io6B&>WW`@bsw**)Ocy1bht z{*G6|uwwqUQ2+n{A^8LW0018VEC2ui01^Na000HZ;3tYwX_jM3YQ!c88=*-m*&&bO zILd=`w3KAC;8hxpif*w9ek6oqV-Z0L77fROK$BSR@5BAv-%C>6y>>#+D4e#&nz^qMDItlpp zTG728+|V&?R13PIEBW(C`uh6d*t-1sZ^XQv;oDD}iYLOV7uVO;{`xl4#4tJ{0;h@! z>)kdc3IhA?Hvj+tA^8La0018VEC2ui01^Na06+!P;3tYuX_ljS7!u|-O)I}TzP1q%xT4HOFwMJaO;2ml)!00$)141pU08x3594IX?4 o5YuAA8yXz~76K1c;3^jg77WP185Rf^u}23N0sR5^q(T4yJ1sVN5dZ)H diff --git a/common/static/js/vendor/tiny_mce/plugins/emoticons/img/smiley-frown.gif b/common/static/js/vendor/tiny_mce/plugins/emoticons/img/smiley-frown.gif deleted file mode 100644 index 716f55e161bfebb1c3d34f0b0f40c177fc82c30b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 340 zcmV-a0jvH;Nk%w1VG;lm0MroxK_>;q#>Sw62=mns-On=0wransPVevT^YK{Dy(0YY zH)vE6x0?;Wqb>gZas1^OT0si>`ugD5y87}*#H$s=yq(wA*8cf7{`y+(+9J7|9QfT7 z`ROHiU=Y&6FaQ7mA^8LW0018VEC2ui01^Na000Hi;3tYvX_jM3N`@u~nju9hSuh^r zIEcp-wA7(NL0~2d#RP+(G!CPPA>o*KJjv_CkucCA5=K?AfF#RG2V*8BU@jL304|4P z2;PGRF@bj$et;Jf2pR_mVsIA<85|n}kQ*Bq42Ovqj*yy>6P0=h3X&9Z01yyk~2N4w%7#RW^55W%`0vQ+-6(y_*2pqz~90*;x9}yM}%$UI(7t#$D mK_3Se1{4HKM+6iG7EmeH6$V631{L5n)#CyC0qx-*Apkoyg?w!Q diff --git a/common/static/js/vendor/tiny_mce/plugins/emoticons/img/smiley-innocent.gif b/common/static/js/vendor/tiny_mce/plugins/emoticons/img/smiley-innocent.gif deleted file mode 100644 index 334d49e0e60f2997c9ba24071764f95d9e08a5cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 336 zcmV-W0k8f?Nk%w1VG;lm0MrryI4TI-%dP0m5~*+Y`T~ z7Rth){q{I_X%*S48uRZ|(b3V&wIKTX`u+WJzo<^$#wuY;3W|Cf{O29IkTAcaE&lpe z+P*^H)-tknA^-pYA^8LW0018VEC2ui01^Na000He;3tYwX_n)75QgVvNQ`6#5gcMm zEEG~blgXokptKAJgCU?%JT?yos!R6cPtcQWh2siHlNI2L}ifQhgX02^InZ2?-ktkqVRyZJY^Trk|lv zovp437?1~d46O)?2(1i+2NDYk8<+_Kil!K!3njA^!I#dL8x<729}*B65mC=m5gHH@ iDi9P3f*VjB3KS4HDb_qqRul{0DIT=Nk%w1VG;lm0Mrx!QauaC#>Vb6G=_5=^YB^9wrc376Sb5I-qJGf@9vZ# z5WlKU(!eVB+7tfnDXp0zyB`?BZ5IChalob*`uh6d*t+@dKGHcU+L|83yq*5~IoH?L zy`?Gp<{bX|SpWb4A^8LW0018VEC2ui01^Na000Hg;3tYyX_jM3R?Bl7&r(q;SsVx< zNd$5fv{ZsKA$SlL3&KN~a1tZRf*~1Ltkx9~2uL3&z-yb0WJDRY082|tP diff --git a/common/static/js/vendor/tiny_mce/plugins/emoticons/img/smiley-laughing.gif b/common/static/js/vendor/tiny_mce/plugins/emoticons/img/smiley-laughing.gif deleted file mode 100644 index 82c5b182e61d32bd394acae551eff180f1eebd26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 343 zcmV-d0jT~*Nk%w1VG;lm0Q4UK!lp8=s;1-69HWK?p_PpF=Pd8~Ygtcnp*fHAL z**;z>w3iC}`fmL6IkKB1N;3zEa}&zKpsu1;_V)HocR5-{J~BcYvE`YXhBnc@CfU=! za(Ec zG>66zv=rqr;2j)}gKqE$ekcSD?}0=WLB?AWp85)qALd+P=4)6X4oXy{bw2>K^d$ z@6ERvva+(4ib~41YUkTEn1&#?rzrOHT>1I=Y*h`+%*@WtPUPg|!@EEI_d5LgZ>^Og z-qyBKJqy*wF8}}lA^8La0018VEC2ui01^Na06+!6;3tYxX_lj?7+U61R3gAaEg8x< zT>%mSfCwURnWQF&g=Q0ZxH1ulW`QtH0>O!5%iT_X0VBy_@EkOngU8?ye~=H!t21{= z9@Uj3a_UbE88~kh5Eq7rh!7QSBn1c?0|Off1&k^`5*QE<4-gmSR<4C>Dj%C>6W(lWoQPVevT^YB^Fy&h6M z4YZgH{O~qtR1(Ci8T;lQ`uh6d*t-7xar*K{#Jrulo-Wtd*44u?{`oh#n;gQXGXDEo z_}UUC3IeK%0ssI2A^8La0018VEC2ui01^Na06+!R;3tYuX_ljSEE482&%+G^XK%|f zLKbCc4u{4-u|QG~LqamSTo?@JM3OKZAr!|Z2IzP@fY`=CIg$vA3qm46TowfLCt29I z6pDKuvnf~)83+sm9yW#?9s>^(89F=~2?!W44-6Ox2^vNza}fp^9v&G65pp936%Gg+ z6HpTy2o4oGoh+>l3Q)KVQwybl2oo*<4a3D469|nfEii|MH4`}p1_cZp0ssj%2>=2d q41Na?)CpS;4gvxWVpZcR76uLludD?Q1{SnP2NnVU0rZ&)0RTIit8@_n diff --git a/common/static/js/vendor/tiny_mce/plugins/emoticons/img/smiley-surprised.gif b/common/static/js/vendor/tiny_mce/plugins/emoticons/img/smiley-surprised.gif deleted file mode 100644 index 0cc9bb71cca4cdeafbb248ce7e07c3708c1cbd64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 338 zcmV-Y0j>T=Nk%w1VG;lm0Q4UK`{WwN#>SnDDC*4*{OcpiwransPVevTQacIr@mkQp zCf(06s)_=>r7UYx48o@u`uh6d*t-7rH~ji<`P&oj;5Wp)o!8ga`SV6TA_BIW5#ZWV z{`*)c32kA}f=futY?#YE7kxGD|7L}4&OEDw$hkm+~<00QS>F_H?J#bz?uEHnl42f5(9 z5O)`6Q9V2o5;YVLUK)Y`7!Nr+4GMq?85s%^2?`BGDRU798Vn2?1`%>22R{iO0u>bk z9tlA?nk*O<3zHJH6&Mp5qALj)E(mxM!Y&vII4dm@1Ov{`f*8pL3xPEVUI>D>1_uxa kNm?`6VH{N6Di;P13m6<67z+;u7qCYM7XkVK^`jvGJD~P?KL7v# diff --git a/common/static/js/vendor/tiny_mce/plugins/emoticons/img/smiley-tongue-out.gif b/common/static/js/vendor/tiny_mce/plugins/emoticons/img/smiley-tongue-out.gif deleted file mode 100644 index 2075dc16058f1f17912167675ce5cfb9986fc71d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 328 zcmV-O0k{4~Nk%w1VG;lm0Mrx!CJF+^#>SU@3-{U*rx+Q^wrc$ABfqLn@9*x?z8(4X zSW-O=@){bmmI~g|GQXoP);cvj3|f1M8e@{G*!tYaiCEujj1NGxRN#6#tiCETo+{x{Hkzt z5k-kPvcD=V2nbmjCgL6k{uF&2nP-t0s;w<385Nx2oxDb z9T5Pp7qJl?3Kkh9oe2sCr5F$p7zPSlsUH*@54w*83=9Or4;w)r2pcU95(FL|1Th;< aDaRQH4;Tal7#Y$v#?=Au0pHUfApkpvZg^t= diff --git a/common/static/js/vendor/tiny_mce/plugins/emoticons/img/smiley-undecided.gif b/common/static/js/vendor/tiny_mce/plugins/emoticons/img/smiley-undecided.gif deleted file mode 100644 index bef7e257303f8243c89787e7a7f9955dd1f112e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 337 zcmV-X0j~Z>Nk%w1VG;lm0MroxDi#99#>R?y8~4}{%C>6#>?OadPVevTr-=vi@LATn z4rERY-qJF+n+?CCE&B3D{{3Shh?>WT0o%`b%*Voqm`dL;(4F35y zc485^n;g!+Bme*aA^8LW0018VEC2ui01^Na000Hf;3tYvX_jM3N=AnuogqakNi<9X zK?&0kwA8^tNn{?C$|IAYI1ZzT!2>}iuMddFK#NEkRl!7%6brJAnUs;)XcnA}TNBSP zxQ9;SvEfwYeSaGd2^|LqU~(QF1qBxr3Ii7x84ZVt8wCTKoSYAqc?p`G2onnpk`IOl z1`HLGj}riN2p1K12N4z&8IBDc6tEWs859;JtRB6>lf+xO9}yT19toMv8wnl`7(pKg j7zPv!OGgY81{hE&(iR3pP6ig;HPPS!_yOwPA0Yrc)=Yf3 diff --git a/common/static/js/vendor/tiny_mce/plugins/emoticons/img/smiley-wink.gif b/common/static/js/vendor/tiny_mce/plugins/emoticons/img/smiley-wink.gif deleted file mode 100644 index 0631c7616ec8624ddeee02b633326f697ee72f80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 350 zcmV-k0ipg!Nk%w1VG;lm0Q4UK(ZVUl#>Sn03F^-g-qAA3wransPV?|t@9*x%vmQ`7 z4E*pcw3rOOq%3t@4*K#({N^40{c-yG`rz2Q!KfI-yq*61HrBop*VoqW<}&{JS@_x# zwwfF$4Fdh~IsgCwA^8La0018VEC2ui01^Na06+!X;3tYwX_ljiFp=e23$zWxW@`*G zN?2ty6iUNT!AMdPLn89IbS7WCB_mWF$+hzY-{PWkp(?(Xf;zbH~P z3jOdj?W+^YwrakfE8fyG&5jTBz!3WS`fgM_;MltQ+c}4GO8)(E`S3`@yq&d~5!ct& z)v79NObo)O7XSbNA^8LW0018VEC2ui01^Na000He;3tYwX_jM3QifI(nn6h_*=Wyk zUB{y}v=qYOIUF#R3dZPhAVv~H;(|a2yN_5FH&J0|$eJ3kw4gj1Y?v5d#>LMV12^6BYy$1)ZKA zga!|m2?POz0R)f>4+aPl8KD{gz`+G_9vLMFQU?RU!8uyH9}*i52|cC+7S0YEK_3Vk i1|APfM-Ltb8&4_H83sg61{vHn(cc000qNZzApkp'}),t+=""}),t+=""}var i=[["cool","cry","embarassed","foot-in-mouth"],["frown","innocent","kiss","laughing"],["money-mouth","sealed","smile","surprised"],["tongue-out","undecided","wink","yell"]];t.addButton("emoticons",{type:"panelbutton",panel:{autohide:!0,html:n,onclick:function(e){var n=t.dom.getParent(e.target,"a");n&&(t.insertContent(''),this.hide())}},tooltip:"Emoticons"})}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/example/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/example/plugin.min.js deleted file mode 100644 index 1ff20b46b9..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/example/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.PluginManager.add("example",function(t){t.addButton("example",{text:"My button",icon:!1,onclick:function(){t.windowManager.open({title:"Example plugin",body:[{type:"textbox",name:"title",label:"Title"}],onsubmit:function(e){t.insertContent("Title: "+e.data.title)}})}}),t.addMenuItem("example",{text:"Example plugin",context:"tools",onclick:function(){t.windowManager.open({title:"TinyMCE site",url:"http://www.tinymce.com",width:800,height:600,buttons:[{text:"Close",onclick:"close"}]})}})}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/example_dependency/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/example_dependency/plugin.min.js deleted file mode 100644 index e61bf473ad..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/example_dependency/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.PluginManager.add("example_dependency",function(){},["example"]); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/fullpage/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/fullpage/plugin.min.js deleted file mode 100644 index 7cdbf79275..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/fullpage/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.PluginManager.add("fullpage",function(e){function t(){var t=n();e.windowManager.open({title:"Document properties",data:t,defaults:{type:"textbox",size:40},body:[{name:"title",label:"Title"},{name:"keywords",label:"Keywords"},{name:"description",label:"Description"},{name:"robots",label:"Robots"},{name:"author",label:"Author"},{name:"docencoding",label:"Encoding"}],onSubmit:function(e){l(tinymce.extend(t,e.data))}})}function n(){function t(e,t){var n=e.attr(t);return n||""}var n,l,a=i(),r={};return r.fontface=e.getParam("fullpage_default_fontface",""),r.fontsize=e.getParam("fullpage_default_fontsize",""),n=a.firstChild,7==n.type&&(r.xml_pi=!0,l=/encoding="([^"]+)"/.exec(n.value),l&&(r.docencoding=l[1])),n=a.getAll("#doctype")[0],n&&(r.doctype=""),n=a.getAll("title")[0],n&&n.firstChild&&(r.title=n.firstChild.value),s(a.getAll("meta"),function(e){var t,n=e.attr("name"),l=e.attr("http-equiv");n?r[n.toLowerCase()]=e.attr("content"):"Content-Type"==l&&(t=/charset\s*=\s*(.*)\s*/gi.exec(e.attr("content")),t&&(r.docencoding=t[1]))}),n=a.getAll("html")[0],n&&(r.langcode=t(n,"lang")||t(n,"xml:lang")),r.stylesheets=[],tinymce.each(a.getAll("link"),function(e){"stylesheet"==e.attr("rel")&&r.stylesheets.push(e.attr("href"))}),n=a.getAll("body")[0],n&&(r.langdir=t(n,"dir"),r.style=t(n,"style"),r.visited_color=t(n,"vlink"),r.link_color=t(n,"link"),r.active_color=t(n,"alink")),r}function l(t){function n(e,t,n){e.attr(t,n?n:void 0)}function l(e){r.firstChild?r.insert(e,r.firstChild):r.append(e)}var a,r,o,c,u,f=e.dom;a=i(),r=a.getAll("head")[0],r||(c=a.getAll("html")[0],r=new m("head",1),c.firstChild?c.insert(r,c.firstChild,!0):c.append(r)),c=a.firstChild,t.xml_pi?(u='version="1.0"',t.docencoding&&(u+=' encoding="'+t.docencoding+'"'),7!=c.type&&(c=new m("xml",7),a.insert(c,a.firstChild,!0)),c.value=u):c&&7==c.type&&c.remove(),c=a.getAll("#doctype")[0],t.doctype?(c||(c=new m("#doctype",10),t.xml_pi?a.insert(c,a.firstChild):l(c)),c.value=t.doctype.substring(9,t.doctype.length-1)):c&&c.remove(),t.docencoding&&(c=null,s(a.getAll("meta"),function(e){"Content-Type"==e.attr("http-equiv")&&(c=e)}),c||(c=new m("meta",1),c.attr("http-equiv","Content-Type"),c.shortEnded=!0,l(c)),c.attr("content","text/html; charset="+t.docencoding)),c=a.getAll("title")[0],t.title?c||(c=new m("title",1),c.append(new m("#text",3)).value=t.title,l(c)):c&&c.remove(),s("keywords,description,author,copyright,robots".split(","),function(e){var n,i,r=a.getAll("meta"),o=t[e];for(n=0;n"))}function i(){return new tinymce.html.DomParser({validate:!1,root_name:"#document"}).parse(d)}function a(t){function n(e){return e.replace(/<\/?[A-Z]+/g,function(e){return e.toLowerCase()})}var l,a,o,m,u=t.content,f="",g=e.dom;if(!t.selection&&!("raw"==t.format&&d||t.source_view&&e.getParam("fullpage_hide_in_source_view"))){u=u.replace(/<(\/?)BODY/gi,"<$1body"),l=u.indexOf("",l),d=n(u.substring(0,l+1)),a=u.indexOf("\n"),o=i(),s(o.getAll("style"),function(e){e.firstChild&&(f+=e.firstChild.value)}),m=o.getAll("body")[0],m&&g.setAttribs(e.getBody(),{style:m.attr("style")||"",dir:m.attr("dir")||"",vLink:m.attr("vlink")||"",link:m.attr("link")||"",aLink:m.attr("alink")||""}),g.remove("fullpage_styles");var y=e.getDoc().getElementsByTagName("head")[0];f&&(g.add(y,"style",{id:"fullpage_styles"},f),m=g.get("fullpage_styles"),m.styleSheet&&(m.styleSheet.cssText=f));var h={};tinymce.each(y.getElementsByTagName("link"),function(e){"stylesheet"==e.rel&&e.getAttribute("data-mce-fullpage")&&(h[e.href]=e)}),tinymce.each(o.getAll("link"),function(e){var t=e.attr("href");h[t]||"stylesheet"!=e.attr("rel")||g.add(y,"link",{rel:"stylesheet",text:"text/css",href:t,"data-mce-fullpage":"1"}),delete h[t]}),tinymce.each(h,function(e){e.parentNode.removeChild(e)})}}function r(){var t,n="",l="";return e.getParam("fullpage_default_xml_pi")&&(n+='\n'),n+=e.getParam("fullpage_default_doctype",""),n+="\n\n\n",(t=e.getParam("fullpage_default_title"))&&(n+=""+t+"\n"),(t=e.getParam("fullpage_default_encoding"))&&(n+='\n'),(t=e.getParam("fullpage_default_font_family"))&&(l+="font-family: "+t+";"),(t=e.getParam("fullpage_default_font_size"))&&(l+="font-size: "+t+";"),(t=e.getParam("fullpage_default_text_color"))&&(l+="color: "+t+";"),n+="\n\n"}function o(t){t.selection||t.source_view&&e.getParam("fullpage_hide_in_source_view")||(t.content=tinymce.trim(d)+"\n"+tinymce.trim(t.content)+"\n"+tinymce.trim(c))}var d,c,s=tinymce.each,m=tinymce.html.Node;e.addCommand("mceFullPageProperties",t),e.addButton("fullpage",{title:"Document properties",cmd:"mceFullPageProperties"}),e.addMenuItem("fullpage",{text:"Document properties",cmd:"mceFullPageProperties",context:"file"}),e.on("BeforeSetContent",a),e.on("GetContent",o)}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/fullscreen/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/fullscreen/plugin.min.js deleted file mode 100644 index 1bb1940dd9..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/fullscreen/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.PluginManager.add("fullscreen",function(e){function t(){var e,t,n=window,i=document,l=i.body;return l.offsetWidth&&(e=l.offsetWidth,t=l.offsetHeight),n.innerWidth&&n.innerHeight&&(e=n.innerWidth,t=n.innerHeight),{w:e,h:t}}function n(){function n(){d.setStyle(a,"height",t().h-(h.clientHeight-a.clientHeight))}var u,h,a,f,m=document.body,g=document.documentElement;s=!s,h=e.getContainer(),u=h.style,a=e.getContentAreaContainer().firstChild,f=a.style,s?(i=f.width,l=f.height,f.width=f.height="100%",c=u.width,o=u.height,u.width=u.height="",d.addClass(m,"mce-fullscreen"),d.addClass(g,"mce-fullscreen"),d.addClass(h,"mce-fullscreen"),d.bind(window,"resize",n),n(),r=n):(f.width=i,f.height=l,c&&(u.width=c),o&&(u.height=o),d.removeClass(m,"mce-fullscreen"),d.removeClass(g,"mce-fullscreen"),d.removeClass(h,"mce-fullscreen"),d.unbind(window,"resize",r)),e.fire("FullscreenStateChanged",{state:s})}var i,l,r,c,o,s=!1,d=tinymce.DOM;return e.settings.inline?void 0:(e.on("init",function(){e.addShortcut("Ctrl+Alt+F","",n)}),e.on("remove",function(){r&&d.unbind(window,"resize",r)}),e.addCommand("mceFullScreen",n),e.addMenuItem("fullscreen",{text:"Fullscreen",shortcut:"Ctrl+Alt+F",selectable:!0,onClick:n,onPostRender:function(){var t=this;e.on("FullscreenStateChanged",function(e){t.active(e.state)})},context:"view"}),e.addButton("fullscreen",{tooltip:"Fullscreen",shortcut:"Ctrl+Alt+F",onClick:n,onPostRender:function(){var t=this;e.on("FullscreenStateChanged",function(e){t.active(e.state)})}}),{isFullscreen:function(){return s}})}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/hr/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/hr/plugin.min.js deleted file mode 100644 index ca36c92751..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/hr/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.PluginManager.add("hr",function(e){e.addCommand("InsertHorizontalRule",function(){e.execCommand("mceInsertContent",!1,"


    ")}),e.addButton("hr",{icon:"hr",tooltip:"Horizontal line",cmd:"InsertHorizontalRule"}),e.addMenuItem("hr",{icon:"hr",text:"Horizontal line",cmd:"InsertHorizontalRule",context:"insert"})}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/importcss/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/importcss/plugin.min.js deleted file mode 100644 index ab38e3959d..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/importcss/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.PluginManager.add("importcss",function(t){function e(t){return"string"==typeof t?function(e){return-1!==e.indexOf(t)}:t instanceof RegExp?function(e){return t.test(e)}:t}function n(e,n){function i(t,e){var o,l=t.href;if((e||c[l])&&(!n||n(l))){s(t.imports,function(t){i(t,!0)});try{o=t.cssRules||t.rules}catch(a){}s(o,function(t){t.styleSheet?i(t.styleSheet,!0):t.selectorText&&s(t.selectorText.split(","),function(t){r.push(tinymce.trim(t))})})}}var r=[],c={};s(t.contentCSS,function(t){c[t]=!0});try{s(e.styleSheets,function(t){i(t)})}catch(o){}return r}function i(e){var n,i=/^(?:([a-z0-9\-_]+))?(\.[a-z0-9_\-\.]+)$/i.exec(e);if(i){var r=i[1],s=i[2].substr(1).split(".").join(" "),c=tinymce.makeMap("a,img");return i[1]?(n={title:e},t.schema.getTextBlockElements()[r]?n.block=r:t.schema.getBlockElements()[r]||c[r.toLowerCase()]?n.selector=r:n.inline=r):i[2]&&(n={inline:"span",title:e.substr(1),classes:s}),t.settings.importcss_merge_classes!==!1?n.classes=s:n.attributes={"class":s},n}}var r=this,s=tinymce.each;t.on("renderFormatsMenu",function(c){var o=t.settings,l={},a=o.importcss_selector_converter||i,m=e(o.importcss_selector_filter);t.settings.importcss_append||c.control.items().remove();var f=[];tinymce.each(o.importcss_groups,function(t){t=tinymce.extend({},t),t.filter=e(t.filter),f.push(t)}),s(n(t.getDoc(),e(o.importcss_file_filter)),function(e){if(-1===e.indexOf(".mce-")&&!l[e]&&(!m||m(e))){var n,i=a.call(r,e);if(i){var s=i.name||tinymce.DOM.uniqueId();if(f)for(var o=0;o'+n+"";var i=e.dom.getParent(e.selection.getStart(),"time");if(i)return e.dom.setOuterHTML(i,n),void 0}e.insertContent(n)}var n,r,i="Sun Mon Tue Wed Thu Fri Sat Sun".split(" "),c="Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday".split(" "),m="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),u="January February March April May June July August September October November December".split(" "),d=[];e.addCommand("mceInsertDate",function(){a(e.getParam("insertdatetime_dateformat",e.translate("%Y-%m-%d")))}),e.addCommand("mceInsertTime",function(){a(e.getParam("insertdatetime_timeformat",e.translate("%H:%M:%S")))}),e.addButton("inserttime",{type:"splitbutton",title:"Insert time",onclick:function(){a(n||r)},menu:d}),tinymce.each(e.settings.insertdatetime_formats||["%H:%M:%S","%Y-%m-%d","%I:%M:%S %p","%D"],function(e){r||(r=e),d.push({text:t(e),onclick:function(){n=e,a(e)}})}),e.addMenuItem("insertdatetime",{icon:"date",text:"Insert date/time",menu:d,context:"insert"})}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/layer/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/layer/plugin.min.js deleted file mode 100644 index eb1ad4b68d..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/layer/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.PluginManager.add("layer",function(e){function t(e){do if(e.className&&-1!=e.className.indexOf("mceItemLayer"))return e;while(e=e.parentNode)}function n(t){var n=e.dom;tinymce.each(n.select("div,p",t),function(e){/^(absolute|relative|fixed)$/i.test(e.style.position)&&(e.hasVisual?n.addClass(e,"mceItemVisualAid"):n.removeClass(e,"mceItemVisualAid"),n.addClass(e,"mceItemLayer"))})}function i(n){var i,o,a=[],r=t(e.selection.getNode()),l=-1,s=-1;for(o=[],tinymce.walk(e.getBody(),function(e){1==e.nodeType&&/^(absolute|relative|static)$/i.test(e.style.position)&&o.push(e)},"childNodes"),i=0;il&&o[i]==r&&(l=i);if(0>n){for(i=0;i-1?(o[l].style.zIndex=a[s],o[s].style.zIndex=a[l]):a[l]>0&&(o[l].style.zIndex=a[l]-1)}else{for(i=0;ia[l]){s=i;break}s>-1?(o[l].style.zIndex=a[s],o[s].style.zIndex=a[l]):o[l].style.zIndex=a[l]+1}e.execCommand("mceRepaint")}function o(){var t=e.dom,n=t.getPos(t.getParent(e.selection.getNode(),"*")),i=e.getBody();e.dom.add(i,"div",{style:{position:"absolute",left:n.x,top:n.y>20?n.y:20,width:100,height:100},"class":"mceItemVisualAid mceItemLayer"},e.selection.getContent()||e.getLang("layer.content")),tinymce.Env.ie&&t.setHTML(i,i.innerHTML)}function a(){var n=t(e.selection.getNode());n||(n=e.dom.getParent(e.selection.getNode(),"DIV,P,IMG")),n&&("absolute"==n.style.position.toLowerCase()?(e.dom.setStyles(n,{position:"",left:"",top:"",width:"",height:""}),e.dom.removeClass(n,"mceItemVisualAid"),e.dom.removeClass(n,"mceItemLayer")):(n.style.left||(n.style.left="20px"),n.style.top||(n.style.top="20px"),n.style.width||(n.style.width=n.width?n.width+"px":"100px"),n.style.height||(n.style.height=n.height?n.height+"px":"100px"),n.style.position="absolute",e.dom.setAttrib(n,"data-mce-style",""),e.addVisual(e.getBody())),e.execCommand("mceRepaint"),e.nodeChanged())}e.addCommand("mceInsertLayer",o),e.addCommand("mceMoveForward",function(){i(1)}),e.addCommand("mceMoveBackward",function(){i(-1)}),e.addCommand("mceMakeAbsolute",function(){a()}),e.addButton("moveforward",{title:"layer.forward_desc",cmd:"mceMoveForward"}),e.addButton("movebackward",{title:"layer.backward_desc",cmd:"mceMoveBackward"}),e.addButton("absolute",{title:"layer.absolute_desc",cmd:"mceMakeAbsolute"}),e.addButton("insertlayer",{title:"layer.insertlayer_desc",cmd:"mceInsertLayer"}),e.on("init",function(){tinymce.Env.ie&&e.getDoc().execCommand("2D-Position",!1,!0)}),e.on("mouseup",function(n){var i=t(n.target);i&&e.dom.setAttrib(i,"data-mce-style","")}),e.on("mousedown",function(n){var i,o=n.target,a=e.getDoc();tinymce.Env.gecko&&(t(o)?"on"!==a.designMode&&(a.designMode="on",o=a.body,i=o.parentNode,i.removeChild(o),i.appendChild(o)):"on"==a.designMode&&(a.designMode="off"))}),e.on("NodeChange",n)}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/legacyoutput/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/legacyoutput/plugin.min.js deleted file mode 100644 index 4f6f7c1aa3..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/legacyoutput/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(e){e.on("AddEditor",function(e){e.editor.settings.inline_styles=!1}),e.PluginManager.add("legacyoutput",function(t){t.on("init",function(){var n="p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img",i=e.explode(t.settings.font_size_style_values),o=t.schema;t.formatter.register({alignleft:{selector:n,attributes:{align:"left"}},aligncenter:{selector:n,attributes:{align:"center"}},alignright:{selector:n,attributes:{align:"right"}},alignjustify:{selector:n,attributes:{align:"justify"}},bold:[{inline:"b",remove:"all"},{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}}],italic:[{inline:"i",remove:"all"},{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}}],underline:[{inline:"u",remove:"all"},{inline:"span",styles:{textDecoration:"underline"},exact:!0}],strikethrough:[{inline:"strike",remove:"all"},{inline:"span",styles:{textDecoration:"line-through"},exact:!0}],fontname:{inline:"font",attributes:{face:"%value"}},fontsize:{inline:"font",attributes:{size:function(t){return e.inArray(i,t.value)+1}}},forecolor:{inline:"font",attributes:{color:"%value"}},hilitecolor:{inline:"font",styles:{backgroundColor:"%value"}}}),e.each("b,i,u,strike".split(","),function(e){o.addValidElements(e+"[*]")}),o.getElementRule("font")||o.addValidElements("font[face|size|color|style]"),e.each(n.split(","),function(e){var t=o.getElementRule(e);t&&(t.attributes.align||(t.attributes.align={},t.attributesOrder.push("align")))})})})}(tinymce); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/lists/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/lists/plugin.min.js deleted file mode 100644 index 3f1de3972e..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/lists/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.PluginManager.add("lists",function(e){function t(e){return e&&/^(OL|UL)$/.test(e.nodeName)}function n(e){return e.parentNode.firstChild==e}function r(e){return e.parentNode.lastChild==e}function o(t){return t&&!!e.schema.getTextBlockElements()[t.nodeName]}function i(e){return e&&"SPAN"===e.nodeName&&"bookmark"===e.getAttribute("data-mce-type")}var a=this;e.on("init",function(){function d(e){function t(t){var r,o,i;o=e[t?"startContainer":"endContainer"],i=e[t?"startOffset":"endOffset"],1==o.nodeType&&(r=b.create("span",{"data-mce-type":"bookmark"}),o.hasChildNodes()?(i=Math.min(i,o.childNodes.length-1),t?o.insertBefore(r,o.childNodes[i]):b.insertAfter(r,o.childNodes[i])):o.appendChild(r),o=r,i=0),n[t?"startContainer":"endContainer"]=o,n[t?"startOffset":"endOffset"]=i}var n={};return t(!0),e.collapsed||t(),n}function s(e){function t(t){function n(e){for(var t=e.parentNode.firstChild,n=0;t;){if(t==e)return n;(1!=t.nodeType||"bookmark"!=t.getAttribute("data-mce-type"))&&n++,t=t.nextSibling}return-1}var r,o,i;r=i=e[t?"startContainer":"endContainer"],o=e[t?"startOffset":"endOffset"],r&&(1==r.nodeType&&(o=n(r),r=r.parentNode,b.remove(i)),e[t?"startContainer":"endContainer"]=r,e[t?"startOffset":"endOffset"]=o)}t(!0),t();var n=b.createRng();n.setStart(e.startContainer,e.startOffset),e.endContainer&&n.setEnd(e.endContainer,e.endOffset),L.setRng(n)}function f(t,n){var r,o,i,a=b.createFragment(),d=e.schema.getBlockElements();if(e.settings.forced_root_block&&(n=n||e.settings.forced_root_block),n&&(o=b.create(n),o.tagName===e.settings.forced_root_block&&b.setAttribs(o,e.settings.forced_root_block_attrs),a.appendChild(o)),t)for(;r=t.firstChild;){var s=r.nodeName;i||"SPAN"==s&&"bookmark"==r.getAttribute("data-mce-type")||(i=!0),d[s]?(a.appendChild(r),o=null):n?(o||(o=b.create(n),a.appendChild(o)),o.appendChild(r)):a.appendChild(r)}return e.settings.forced_root_block?i||tinymce.Env.ie&&!(tinymce.Env.ie>10)||o.appendChild(b.create("br",{"data-mce-bogus":"1"})):a.appendChild(b.create("br")),a}function l(){return tinymce.grep(L.getSelectedBlocks(),function(e){return"LI"==e.nodeName})}function c(e,t,n){var r,o,i=b.select('span[data-mce-type="bookmark"]',e);n=n||f(t),r=b.createRng(),r.setStartAfter(t),r.setEndAfter(e),o=r.extractContents(),b.isEmpty(o)||b.insertAfter(o,e),b.insertAfter(n,e),b.isEmpty(t.parentNode)&&(tinymce.each(i,function(e){t.parentNode.parentNode.insertBefore(e,t.parentNode)}),b.remove(t.parentNode)),b.remove(t)}function p(e){var n,r;if(n=e.nextSibling,n&&t(n)&&n.nodeName==e.nodeName){for(;r=n.firstChild;)e.appendChild(r);b.remove(n)}if(n=e.previousSibling,n&&t(n)&&n.nodeName==e.nodeName){for(;r=n.firstChild;)e.insertBefore(r,e.firstChild);b.remove(n)}}function u(e){tinymce.each(tinymce.grep(b.select("ol,ul",e)),function(e){var n,r=e.parentNode;"LI"==r.nodeName&&r.firstChild==e&&(n=r.previousSibling,n&&"LI"==n.nodeName&&(n.appendChild(e),b.isEmpty(r)&&b.remove(r))),t(r)&&(n=r.previousSibling,n&&"LI"==n.nodeName&&n.appendChild(e))})}function m(e){function o(e){b.isEmpty(e)&&b.remove(e)}var i,a=e.parentNode,d=a.parentNode;return n(e)&&r(e)?("LI"==d.nodeName?(b.insertAfter(e,d),o(d),b.remove(a)):t(d)?b.remove(a,!0):(d.insertBefore(f(e),a),b.remove(a)),!0):n(e)?("LI"==d.nodeName?(b.insertAfter(e,d),e.appendChild(a),o(d)):t(d)?d.insertBefore(e,a):(d.insertBefore(f(e),a),b.remove(e)),!0):r(e)?("LI"==d.nodeName?b.insertAfter(e,d):t(d)?b.insertAfter(e,a):(b.insertAfter(f(e),a),b.remove(e)),!0):("LI"==d.nodeName?(a=d,i=f(e,"LI")):i=t(d)?f(e,"LI"):f(e),c(a,e,i),u(a.parentNode),!0)}function h(e){function n(n,r){var o;if(t(n)){for(;o=e.lastChild.firstChild;)r.appendChild(o);b.remove(n)}}var r,o;return r=e.previousSibling,r&&t(r)?(r.appendChild(e),!0):r&&"LI"==r.nodeName&&t(r.lastChild)?(r.lastChild.appendChild(e),n(e.lastChild,r.lastChild),!0):(r=e.nextSibling,r&&t(r)?(r.insertBefore(e,r.firstChild),!0):r&&"LI"==r.nodeName&&t(e.lastChild)?!1:(r=e.previousSibling,r&&"LI"==r.nodeName?(o=b.create(e.parentNode.nodeName),r.appendChild(o),o.appendChild(e),n(e.lastChild,o),!0):!1))}function v(){var t=l();if(t.length){for(var n=d(L.getRng(!0)),r=0;r0))return n;for(var o=new tinymce.dom.TreeWalker(e.startContainer);n=o[t?"next":"prev"]();)if(3==n.nodeType&&n.data.length>0)return n}function r(e,n){var r,o,i=e.parentNode;for(t(n.lastChild)&&(o=n.lastChild),r=n.lastChild,r&&"BR"==r.nodeName&&e.hasChildNodes()&&b.remove(r);r=e.firstChild;)n.appendChild(r);o&&n.appendChild(o),b.remove(e),b.isEmpty(i)&&b.remove(i)}if(L.isCollapsed()){var o=b.getParent(L.getStart(),"LI");if(o){var i=L.getRng(!0),a=b.getParent(n(i,e),"LI");if(a&&a!=o){var f=d(i);return e?r(a,o):r(o,a),s(f),!0}if(!a&&!e&&N(o.parentNode.nodeName))return!0}}},e.addCommand("Indent",function(){return v()?void 0:!0}),e.addCommand("Outdent",function(){return C()?void 0:!0}),e.addCommand("InsertUnorderedList",function(){y("UL")}),e.addCommand("InsertOrderedList",function(){y("OL")}),e.on("keydown",function(t){9==t.keyCode&&e.dom.getParent(e.selection.getStart(),"LI")&&(t.preventDefault(),t.shiftKey?C():v())})}),e.addButton("indent",{icon:"indent",title:"Increase indent",cmd:"Indent",onPostRender:function(){var t=this;e.on("nodechange",function(){var r=e.dom.getParent(e.selection.getNode(),"LI,UL,OL");t.disabled(r&&("LI"!=r.nodeName||n(r)))})}}),e.on("keydown",function(e){e.keyCode==tinymce.util.VK.BACKSPACE?a.backspaceDelete()&&e.preventDefault():e.keyCode==tinymce.util.VK.DELETE&&a.backspaceDelete(!0)&&e.preventDefault()})}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/media/moxieplayer.swf b/common/static/js/vendor/tiny_mce/plugins/media/moxieplayer.swf deleted file mode 100644 index 19c771bea50c6665fe0ee5f46515e9686427dbc7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20017 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':"application/x-shockwave-flash"==a.source1mime?(o+='',a.poster&&(o+=''),o+=""):-1!=a.source1mime.indexOf("audio")?e.settings.audio_template_callback?o=e.settings.audio_template_callback(a):o+='":"script"==a.type?o+='':o=e.settings.video_template_callback?e.settings.video_template_callback(a):'"}return o}function n(e){var t={};return new tinymce.html.SaxParser({validate:!1,allow_conditional_comments:!0,special:"script,noscript",start:function(e,i){if(t.source1||"param"!=e||(t.source1=i.map.movie),("iframe"==e||"object"==e||"embed"==e||"video"==e||"audio"==e)&&(t.type||(t.type=e),t=tinymce.extend(i.map,t)),"script"==e){var a=r(i.map.src);if(!a)return;t={type:"script",source1:i.map.src,width:a.width,height:a.height}}"source"==e&&(t.source1?t.source2||(t.source2=i.map.src):t.source1=i.map.src),"img"!=e||t.poster||(t.poster=i.map.src)}}).parse(e),t.source1=t.source1||t.src||t.data,t.source2=t.source2||"",t.poster=t.poster||"",t}function s(t){return t.getAttribute("data-mce-object")?n(e.serializer.serialize(t,{selection:!0})):{}}function m(e,t,i){function r(e,t){var i,r,a,o;for(i in t)if(a=""+t[i],e.map[i])for(r=e.length;r--;)o=e[r],o.name==i&&(a?(e.map[i]=a,o.value=a):(delete e.map[i],e.splice(r,1)));else a&&(e.push({name:i,value:a}),e.map[i]=a)}var a,o=new tinymce.html.Writer,c=0;return new tinymce.html.SaxParser({validate:!1,allow_conditional_comments:!0,special:"script,noscript",comment:function(e){o.comment(e)},cdata:function(e){o.cdata(e)},text:function(e,t){o.text(e,t)},start:function(e,n,s){switch(e){case"video":case"object":case"embed":case"img":case"iframe":r(n,{width:t.width,height:t.height})}if(i)switch(e){case"video":r(n,{poster:t.poster,src:""}),t.source2&&r(n,{src:""});break;case"iframe":r(n,{src:t.source1});break;case"source":if(c++,2>=c&&(r(n,{src:t["source"+c],type:t["source"+c+"mime"]}),!t["source"+c]))return;break;case"img":if(!t.poster)return;a=!0}o.start(e,n,s)},end:function(e){if("video"==e&&i)for(var n=1;2>=n;n++)if(t["source"+n]){var s=[];s.map={},n>c&&(r(s,{src:t["source"+n],type:t["source"+n+"mime"]}),o.start("source",s,!0))}if(t.poster&&"object"==e&&i&&!a){var m=[];m.map={},r(m,{src:t.poster,width:t.width,height:t.height}),o.start("img",m,!0)}o.end(e)}},new tinymce.html.Schema({})).parse(e),o.getContent()}var d=[{regex:/youtu\.be\/([a-z1-9.-_]+)/,type:"iframe",w:425,h:350,url:"http://www.youtube.com/embed/$1"},{regex:/youtube\.com(.+)v=([^&]+)/,type:"iframe",w:425,h:350,url:"http://www.youtube.com/embed/$2"},{regex:/vimeo\.com\/([0-9]+)/,type:"iframe",w:425,h:350,url:"http://player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc"},{regex:/maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/,type:"iframe",w:425,h:350,url:'http://maps.google.com/maps/ms?msid=$2&output=embed"'}];e.on("ResolveName",function(e){var t;1==e.target.nodeType&&(t=e.target.getAttribute("data-mce-object"))&&(e.name=t)}),e.on("preInit",function(){var t=e.schema.getSpecialElements();tinymce.each("video audio iframe object".split(" "),function(e){t[e]=new RegExp("]*>","gi")}),e.schema.addValidElements("object[id|style|width|height|classid|codebase|*],embed[id|style|width|height|type|src|*],video[*],audio[*]");var i=e.schema.getBoolAttrs();tinymce.each("webkitallowfullscreen mozallowfullscreen allowfullscreen".split(" "),function(e){i[e]={}}),e.parser.addNodeFilter("iframe,video,audio,object,embed,script",function(t,i){for(var a,o,c,n,s,m,d,u,l=t.length;l--;)if(o=t[l],"script"!=o.name||(u=r(o.attr("src")))){for(c=new tinymce.html.Node("img",1),c.shortEnded=!0,u&&(u.width&&o.attr("width",u.width.toString()),u.height&&o.attr("height",u.height.toString())),m=o.attributes,a=m.length;a--;)n=m[a].name,s=m[a].value,"width"!==n&&"height"!==n&&"style"!==n&&(("data"==n||"src"==n)&&(s=e.convertURL(s,n)),c.attr("data-mce-p-"+n,s));d=o.firstChild&&o.firstChild.value,d&&(c.attr("data-mce-html",escape(d)),c.firstChild=null),c.attr({width:o.attr("width")||"300",height:o.attr("height")||("audio"==i?"30":"150"),style:o.attr("style"),src:tinymce.Env.transparentSrc,"data-mce-object":i,"class":"mce-object mce-object-"+i}),o.replace(c)}}),e.serializer.addAttributeFilter("data-mce-object",function(e,t){for(var i,r,a,o,c,n,s,m=e.length;m--;){for(i=e[m],s=i.attr(t),r=new tinymce.html.Node(s,1),"audio"!=s&&"script"!=s&&r.attr({width:i.attr("width"),height:i.attr("height")}),r.attr({style:i.attr("style")}),o=i.attributes,a=o.length;a--;){var d=o[a].name;0===d.indexOf("data-mce-p-")&&r.attr(d.substr(11),o[a].value)}"script"==s&&r.attr("type","text/javascript"),c=i.attr("data-mce-html"),c&&(n=new tinymce.html.Node("#text",3),n.raw=!0,n.value=unescape(c),r.append(n)),i.replace(r)}})}),e.on("ObjectSelected",function(e){var t=e.target.getAttribute("data-mce-object");("audio"==t||"script"==t)&&e.preventDefault()}),e.on("objectResized",function(e){var t,i=e.target;i.getAttribute("data-mce-object")&&(t=i.getAttribute("data-mce-html"),t&&(t=unescape(t),i.setAttribute("data-mce-html",escape(m(t,{width:e.width,height:e.height})))))}),e.addButton("media",{tooltip:"Insert/edit video",onclick:a,stateSelector:"img[data-mce-object=video]"}),e.addMenuItem("media",{icon:"media",text:"Insert video",onclick:a,context:"insert",prependToContext:!0})}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/nonbreaking/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/nonbreaking/plugin.min.js deleted file mode 100644 index 866339c7dc..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/nonbreaking/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.PluginManager.add("nonbreaking",function(e){var t=e.getParam("nonbreaking_force_tab");if(e.addCommand("mceNonBreaking",function(){e.insertContent(e.plugins.visualchars&&e.plugins.visualchars.state?' ':" ")}),e.addButton("nonbreaking",{title:"Insert nonbreaking space",cmd:"mceNonBreaking"}),e.addMenuItem("nonbreaking",{text:"Nonbreaking space",cmd:"mceNonBreaking",context:"insert"}),t){var n=+t>1?+t:3;e.on("keydown",function(t){if(9==t.keyCode){if(t.shiftKey)return;t.preventDefault();for(var i=0;n>i;i++)e.execCommand("mceNonBreaking")}})}}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/noneditable/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/noneditable/plugin.min.js deleted file mode 100644 index aa642de8c6..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/noneditable/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.PluginManager.add("noneditable",function(e){function t(e){var t;if(1===e.nodeType){if(t=e.getAttribute(u),t&&"inherit"!==t)return t;if(t=e.contentEditable,"inherit"!==t)return t}return null}function n(e){for(var n;e;){if(n=t(e))return"false"===n?e:null;e=e.parentNode}}function r(){function r(e){for(;e;){if(e.id===g)return e;e=e.parentNode}}function a(e){var t;if(e)for(t=new f(e,e),e=t.current();e;e=t.next())if(3===e.nodeType)return e}function i(n,r){var a,i;return"false"===t(n)&&u.isBlock(n)?void s.select(n):(i=u.createRng(),"true"===t(n)&&(n.firstChild||n.appendChild(e.getDoc().createTextNode(" ")),n=n.firstChild,r=!0),a=u.create("span",{id:g,"data-mce-bogus":!0},m),r?n.parentNode.insertBefore(a,n):u.insertAfter(a,n),i.setStart(a.firstChild,1),i.collapse(!0),s.setRng(i),a)}function o(e){var t,n,i,o;if(e)t=s.getRng(!0),t.setStartBefore(e),t.setEndBefore(e),n=a(e),n&&n.nodeValue.charAt(0)==m&&(n=n.deleteData(0,1)),u.remove(e,!0),s.setRng(t);else for(i=r(s.getStart());(e=u.get(g))&&e!==o;)i!==e&&(n=a(e),n&&n.nodeValue.charAt(0)==m&&(n=n.deleteData(0,1)),u.remove(e,!0)),o=e}function l(){function e(e,n){var r,a,i,o,l;if(r=d.startContainer,a=d.startOffset,3==r.nodeType){if(l=r.nodeValue.length,a>0&&l>a||(n?a==l:0===a))return}else{if(!(a0?a-1:a;r=r.childNodes[u],r.hasChildNodes()&&(r=r.firstChild)}for(i=new f(r,e);o=i[n?"prev":"next"]();){if(3===o.nodeType&&o.nodeValue.length>0)return;if("true"===t(o))return o}return e}var r,a,l,d,u;o(),l=s.isCollapsed(),r=n(s.getStart()),a=n(s.getEnd()),(r||a)&&(d=s.getRng(!0),l?(r=r||a,(u=e(r,!0))?i(u,!0):(u=e(r,!1))?i(u,!1):s.select(r)):(d=s.getRng(!0),r&&d.setStartBefore(r),a&&d.setEndAfter(a),s.setRng(d)))}function d(a){function i(e,t){for(;e=e[t?"previousSibling":"nextSibling"];)if(3!==e.nodeType||e.nodeValue.length>0)return e}function d(e,t){s.select(e),s.collapse(t)}function g(a){function i(e){for(var t=d;t;){if(t===e)return;t=t.parentNode}u.remove(e),l()}function o(){var r,o,l=e.schema.getNonEmptyElements();for(o=new tinymce.dom.TreeWalker(d,e.getBody());(r=a?o.prev():o.next())&&!l[r.nodeName.toLowerCase()]&&!(3===r.nodeType&&tinymce.trim(r.nodeValue).length>0);)if("false"===t(r))return i(r),!0;return n(r)?!0:!1}var f,d,c,g;if(s.isCollapsed()){if(f=s.getRng(!0),d=f.startContainer,c=f.startOffset,d=r(d)||d,g=n(d))return i(g),!1;if(3==d.nodeType&&(a?c>0:ch||h>124)&&h!=c.DELETE&&h!=c.BACKSPACE){if((tinymce.isMac?a.metaKey:a.ctrlKey)&&(67==h||88==h||86==h))return;if(a.preventDefault(),h==c.LEFT||h==c.RIGHT){var y=h==c.LEFT;if(e.dom.isBlock(m)){var T=y?m.previousSibling:m.nextSibling,C=new f(T,T),b=y?C.prev():C.next();d(b,!y)}else d(m,y)}}else if(h==c.LEFT||h==c.RIGHT||h==c.BACKSPACE||h==c.DELETE){if(p=r(v)){if(h==c.LEFT||h==c.BACKSPACE)if(m=i(p,!0),m&&"false"===t(m)){if(a.preventDefault(),h!=c.LEFT)return void u.remove(m);d(m,!0)}else o(p);if(h==c.RIGHT||h==c.DELETE)if(m=i(p),m&&"false"===t(m)){if(a.preventDefault(),h!=c.RIGHT)return void u.remove(m);d(m,!1)}else o(p)}if((h==c.BACKSPACE||h==c.DELETE)&&!g(h==c.BACKSPACE))return a.preventDefault(),!1}}var u=e.dom,s=e.selection,g="mce_noneditablecaret",m="";e.on("mousedown",function(n){var r=e.selection.getNode();"false"===t(r)&&r==n.target&&l()}),e.on("mouseup keyup",l),e.on("keydown",d)}function a(t){var n=l.length,r=t.content,a=tinymce.trim(o);if("raw"!=t.format){for(;n--;)r=r.replace(l[n],function(t){var n=arguments,i=n[n.length-2];return i>0&&'"'==r.charAt(i-1)?t:''+e.dom.encode("string"==typeof n[1]?n[1]:n[0])+""});t.content=r}}var i,o,l,f=tinymce.dom.TreeWalker,d="contenteditable",u="data-mce-"+d,c=tinymce.util.VK;i=" "+tinymce.trim(e.getParam("noneditable_editable_class","mceEditable"))+" ",o=" "+tinymce.trim(e.getParam("noneditable_noneditable_class","mceNonEditable"))+" ",l=e.getParam("noneditable_regexp"),l&&!l.length&&(l=[l]),e.on("PreInit",function(){r(),l&&e.on("BeforeSetContent",a),e.parser.addAttributeFilter("class",function(e){for(var t,n,r=e.length;r--;)n=e[r],t=" "+n.attr("class")+" ",-1!==t.indexOf(i)?n.attr(u,"true"):-1!==t.indexOf(o)&&n.attr(u,"false")}),e.serializer.addAttributeFilter(u,function(e){for(var t,n=e.length;n--;)t=e[n],l&&t.attr("data-mce-content")?(t.name="#text",t.type=3,t.raw=!0,t.value=t.attr("data-mce-content")):(t.attr(d,null),t.attr(u,null))}),e.parser.addAttributeFilter(d,function(e){for(var t,n=e.length;n--;)t=e[n],t.attr(u,t.attr(d)),t.attr(d,null)})}),e.on("drop",function(e){n(e.target)&&e.preventDefault()})}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/pagebreak/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/pagebreak/plugin.min.js deleted file mode 100644 index e224cb4414..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/pagebreak/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.PluginManager.add("pagebreak",function(e){var a="mce-pagebreak",t=e.getParam("pagebreak_separator",""),n=new RegExp(t.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(e){return"\\"+e}),"gi"),r='';e.addCommand("mcePageBreak",function(){e.settings.pagebreak_split_block?e.insertContent("

    "+r+"

    "):e.insertContent(r)}),e.addButton("pagebreak",{title:"Page break",cmd:"mcePageBreak"}),e.addMenuItem("pagebreak",{text:"Page break",icon:"pagebreak",cmd:"mcePageBreak",context:"insert"}),e.on("ResolveName",function(t){"IMG"==t.target.nodeName&&e.dom.hasClass(t.target,a)&&(t.name="pagebreak")}),e.on("click",function(t){t=t.target,"IMG"===t.nodeName&&e.dom.hasClass(t,a)&&e.selection.select(t)}),e.on("BeforeSetContent",function(e){e.content=e.content.replace(n,r)}),e.on("PreInit",function(){e.serializer.addNodeFilter("img",function(a){for(var n,r,c=a.length;c--;)if(n=a[c],r=n.attr("class"),r&&-1!==r.indexOf("mce-pagebreak")){var o=n.parent;if(e.schema.getBlockElements()[o.name]&&e.settings.pagebreak_split_block){o.type=3,o.value=t,o.raw=!0,n.remove();continue}n.type=3,n.value=t,n.raw=!0}})})}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/paste/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/paste/plugin.min.js deleted file mode 100644 index c099330686..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/paste/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(e,t){"use strict";function n(e,t){for(var n,r=[],i=0;i"),t&&/^(PRE|DIV)$/.test(t.nodeName)||!o?e=n.filter(e,[[/\n/g,"
    "]]):(e=n.filter(e,[[/\n\n/g,"

    "+a],[/^(.*<\/p>)(

    )$/,a+"$1"],[/\n/g,"
    "]]),-1!=e.indexOf("

    ")&&(e=a+e)),i(e)}function a(){var t=r.dom,n=r.getBody(),i=r.dom.getViewPort(r.getWin()),o=i.y,a=20;if(h=r.selection.getRng(),r.inline){var s=r.selection.getScrollContainer();s&&(o=s.scrollTop)}if(h.getClientRects){var l=h.getClientRects();l.length&&(a=o+(l[0].top-t.getPos(n).y))}m=t.add(r.getBody(),"div",{id:"mcepastebin",contentEditable:!0,"data-mce-bogus":"1",style:"position: absolute; top: "+a+"px;width: 10px; height: 10px; overflow: hidden; opacity: 0"},v),(e.ie||e.gecko)&&t.setStyle(m,"left","rtl"==t.getStyle(n,"direction",!0)?65535:-65535),t.bind(m,"beforedeactivate focusin focusout",function(e){e.stopPropagation()}),m.focus(),r.selection.select(m,!0)}function s(){if(m){for(var e;e=r.dom.get("mcepastebin");)r.dom.remove(e),r.dom.unbind(e);h&&r.selection.setRng(h)}y=!1,m=h=null}function l(){var e=v,t,n;for(t=r.dom.select("div[id=mcepastebin]"),n=t.length;n--;){var i=t[n].innerHTML;e==v&&(e=""),i.length>e.length&&(e=i)}return e}function c(e){var t={};if(e&&e.types){t["text/plain"]=e.getData("Text");for(var n=0;nl?n&&(n=n.parent.parent):(r=n,n=null)),n&&n.name==a?n.append(e):(r=r||n,n=new i(a,1),s>1&&n.attr("start",""+s),e.wrap(n)),e.name="li",t.value="";var c=t.next;c&&3==c.type&&(c.value=c.value.replace(/^\u00a0+/,"")),l>o&&r&&r.lastChild.append(n),o=l}for(var n,r,o=1,a=e.getAll("p"),s=0;s/gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/ /gi,"\xa0"],[/([\s\u00a0]*)<\/span>/gi,function(e,t){return t.length>0?t.replace(/./," ").slice(Math.floor(t.length/2)).split("").join("\xa0"):""}]]);var h=l.paste_word_valid_elements;h||(h="@[style],-strong/b,-em/i,-span,-p,-ol,-ul,-li,-h1,-h2,-h3,-h4,-h5,-h6,-table,-tr,-td[colspan|rowspan],-th,-thead,-tfoot,-tbody,-a[href|name],sub,sup,strike,br");var g=new n({valid_elements:h}),v=new t({},g);v.addAttributeFilter("style",function(e){for(var t=e.length,n;t--;)n=e[t],n.attr("style",u(n,n.attr("style"))),"span"!=n.name||n.attributes.length||n.unwrap()}),v.addNodeFilter("a",function(e){for(var t=e.length,n,r,i;t--;)n=e[t],r=n.attr("href"),i=n.attr("name"),r&&0===r.indexOf("file://")&&(r=r.split("#")[1],r&&(r="#"+r)),r||i?n.attr({href:r,name:i}):n.unwrap()});var y=v.parse(f);d(y),c.content=new r({},g).serialize(y)}})}return s.isWordContent=a,s}),r(y,[p,c,h,l],function(e,t,n,r){return function(i){function o(e){i.on("BeforePastePreProcess",function(t){t.content=e(t.content)})}function a(e){return e=r.filter(e,[/^[\s\S]*|[\s\S]*$/g,[/\u00a0<\/span>/g,"\xa0"],/
    $/])}function s(e){if(!n.isWordContent(e))return e;var o=[];t.each(i.schema.getBlockElements(),function(e,t){o.push(t)});var a=new RegExp("(?:
     [\\s\\r\\n]+|
    )*(<\\/?("+o.join("|")+")[^>]*>)(?:
     [\\s\\r\\n]+|
    )*","g");return e=r.filter(e,[[a,"$1"]]),e=r.filter(e,[[/

    /g,"

    "],[/
    /g," "],[/

    /g,"
    "]])}function l(e){return(i.settings.paste_remove_styles||i.settings.paste_remove_styles_if_webkit!==!1)&&(e=e.replace(/ style=\"[^\"]+\"/g,"")),e}e.webkit&&(o(l),o(a)),e.ie&&o(s)}}),r(b,[C,f,h,y],function(e,t,n,r){var i;e.add("paste",function(e){function o(){"text"==s.pasteFormat?(this.active(!1),s.pasteFormat="html"):(s.pasteFormat="text",this.active(!0),i||(e.windowManager.alert("Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off."),i=!0))}var a=this,s,l=e.settings;a.clipboard=s=new t(e),a.quirks=new r(e),a.wordFilter=new n(e),e.settings.paste_as_text&&(a.clipboard.pasteFormat="text"),l.paste_preprocess&&e.on("PastePreProcess",function(e){l.paste_preprocess.call(a,a,e)}),l.paste_postprocess&&e.on("PastePostProcess",function(e){l.paste_postprocess.call(a,a,e)}),e.addCommand("mceInsertClipboardContent",function(e,t){t.content&&a.clipboard.pasteHtml(t.content),t.text&&a.clipboard.pasteText(t.text)}),e.paste_block_drop&&e.on("dragend dragover draggesture dragdrop drop drag",function(e){e.preventDefault(),e.stopPropagation()}),e.settings.paste_data_images||e.on("drop",function(e){var t=e.dataTransfer;t&&t.files&&t.files.length>0&&e.preventDefault()}),e.addButton("pastetext",{icon:"pastetext",tooltip:"Paste as text",onclick:o,active:"text"==a.clipboard.pasteFormat}),e.addMenuItem("pastetext",{text:"Paste as text",selectable:!0,active:s.pasteFormat,onclick:o})})}),a([l,f,h,y,b])}(this); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/preview/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/preview/plugin.min.js deleted file mode 100644 index 8a24058f74..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/preview/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.PluginManager.add("preview",function(e){var t=e.settings;e.addCommand("mcePreview",function(){e.windowManager.open({title:"Preview",width:parseInt(e.getParam("plugin_preview_width","650"),10),height:parseInt(e.getParam("plugin_preview_height","500"),10),html:'',buttons:{text:"Close",onclick:function(){this.parent().parent().close()}},onPostRender:function(){var i,n=this.getEl("body").firstChild.contentWindow.document,a="";tinymce.each(e.contentCSS,function(t){a+=''});var d=t.body_id||"tinymce";-1!=d.indexOf("=")&&(d=e.getParam("body_id","","hash"),d=d[e.id]||d);var r=t.body_class||"";-1!=r.indexOf("=")&&(r=e.getParam("body_class","","hash"),r=r[e.id]||""),i=""+a+""+''+e.getContent()+""+"",n.open(),n.write(i),n.close()}})}),e.addButton("preview",{title:"Preview",cmd:"mcePreview"}),e.addMenuItem("preview",{text:"Preview",cmd:"mcePreview",context:"view"})}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/print/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/print/plugin.min.js deleted file mode 100644 index abc37b5fd4..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/print/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.PluginManager.add("print",function(t){t.addCommand("mcePrint",function(){t.getWin().print()}),t.addButton("print",{title:"Print",cmd:"mcePrint"}),t.addShortcut("Ctrl+P","","mcePrint"),t.addMenuItem("print",{text:"Print",cmd:"mcePrint",icon:"print",shortcut:"Ctrl+P",context:"file"})}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/save/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/save/plugin.min.js deleted file mode 100644 index bd50cec41e..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/save/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.PluginManager.add("save",function(e){function t(){var t,n;return t=tinymce.DOM.getParent(e.id,"form"),!e.getParam("save_enablewhendirty",!0)||e.isDirty()?(tinymce.triggerSave(),(n=e.getParam("save_onsavecallback"))?(e.execCallback("save_onsavecallback",e)&&(e.startContent=tinymce.trim(e.getContent({format:"raw"})),e.nodeChanged()),void 0):(t?(e.isNotDirty=!0,(!t.onsubmit||t.onsubmit())&&("function"==typeof t.submit?t.submit():e.windowManager.alert("Error: Form submit field collision.")),e.nodeChanged()):e.windowManager.alert("Error: No form element found."),void 0)):void 0}function n(){var t,n=tinymce.trim(e.startContent);return(t=e.getParam("save_oncancelcallback"))?(e.execCallback("save_oncancelcallback",e),void 0):(e.setContent(n),e.undoManager.clear(),e.nodeChanged(),void 0)}function i(){var t=this;e.on("nodeChange",function(){t.disabled(e.getParam("save_enablewhendirty",!0)&&!e.isDirty())})}e.addCommand("mceSave",t),e.addCommand("mceCancel",n),e.addButton("save",{icon:"save",text:"Save",cmd:"mceSave",disabled:!0,onPostRender:i}),e.addButton("cancel",{text:"Cancel",icon:!1,cmd:"mceCancel",disabled:!0,onPostRender:i}),e.addShortcut("ctrl+s","","mceSave")}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/searchreplace/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/searchreplace/plugin.min.js deleted file mode 100644 index 7ffaf4610f..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/searchreplace/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(){function e(e,t,n,a,r){function i(e,t){if(t=t||0,!e[0])throw"findAndReplaceDOMText cannot handle zero-length matches";var n=e.index;if(t>0){var a=e[t];if(!a)throw"Invalid capture group";n+=e[0].indexOf(a),e[0]=a}return[n,n+e[0].length,[e[0]]]}function d(e){var t;if(3===e.nodeType)return e.data;if(h[e.nodeName]&&!u[e.nodeName])return"";if(t="",(u[e.nodeName]||m[e.nodeName])&&(t+="\n"),e=e.firstChild)do t+=d(e);while(e=e.nextSibling);return t}function o(e,t,n){var a,r,i,d,o=[],l=0,c=e,s=t.shift(),f=0;e:for(;;){if((u[c.nodeName]||m[c.nodeName])&&l++,3===c.nodeType&&(!r&&c.length+l>=s[1]?(r=c,d=s[1]-l):a&&o.push(c),!a&&c.length+l>s[0]&&(a=c,i=s[0]-l),l+=c.length),a&&r){if(c=n({startNode:a,startNodeIndex:i,endNode:r,endNodeIndex:d,innerNodes:o,match:s[2],matchIndex:f}),l-=r.length-d,a=null,r=null,o=[],s=t.shift(),f++,!s)break}else{if((!h[c.nodeName]||u[c.nodeName])&&c.firstChild){c=c.firstChild;continue}if(c.nextSibling){c=c.nextSibling;continue}}for(;;){if(c.nextSibling){c=c.nextSibling;break}if(c.parentNode===e)break e;c=c.parentNode}}}function l(e){var t;if("function"!=typeof e){var n=e.nodeType?e:f.createElement(e);t=function(e,t){var a=n.cloneNode(!1);return a.setAttribute("data-mce-index",t),e&&a.appendChild(f.createTextNode(e)),a}}else t=e;return function(e){var n,a,r,i=e.startNode,d=e.endNode,o=e.matchIndex;if(i===d){var l=i;r=l.parentNode,e.startNodeIndex>0&&(n=f.createTextNode(l.data.substring(0,e.startNodeIndex)),r.insertBefore(n,l));var c=t(e.match[0],o);return r.insertBefore(c,l),e.endNodeIndexh;++h){var g=e.innerNodes[h],p=t(g.data,o);g.parentNode.replaceChild(p,g),u.push(p)}var x=t(d.data.substring(0,e.endNodeIndex),o);return r=i.parentNode,r.insertBefore(n,i),r.insertBefore(s,i),r.removeChild(i),r=d.parentNode,r.insertBefore(x,d),r.insertBefore(a,d),r.removeChild(d),x}}var c,s,f,u,h,m,g=[],p=0;if(f=t.ownerDocument,u=r.getBlockElements(),h=r.getWhiteSpaceElements(),m=r.getShortEndedElements(),s=d(t)){if(e.global)for(;c=e.exec(s);)g.push(i(c,a));else c=s.match(e),g.push(i(c,a));return g.length&&(p=g.length,o(t,g,l(n))),p}}function t(t){function n(){function e(){r.statusbar.find("#next").disabled(!d(s+1).length),r.statusbar.find("#prev").disabled(!d(s-1).length)}function n(){tinymce.ui.MessageBox.alert("Could not find the specified string.",function(){r.find("#find")[0].focus()})}var a={},r=tinymce.ui.Factory.create({type:"window",layout:"flex",pack:"center",align:"center",onClose:function(){t.focus(),c.done()},onSubmit:function(t){var i,o,l,f;return t.preventDefault(),o=r.find("#case").checked(),f=r.find("#words").checked(),l=r.find("#find").value(),l.length?a.text==l&&a.caseState==o&&a.wholeWord==f?0===d(s+1).length?(n(),void 0):(c.next(),e(),void 0):(i=c.find(l,o,f),i||n(),r.statusbar.items().slice(1).disabled(0===i),e(),a={text:l,caseState:o,wholeWord:f},void 0):(c.done(!1),r.statusbar.items().slice(1).disabled(!0),void 0)},buttons:[{text:"Find",onclick:function(){r.submit()}},{text:"Replace",disabled:!0,onclick:function(){c.replace(r.find("#replace").value())||(r.statusbar.items().slice(1).disabled(!0),s=-1,a={})}},{text:"Replace all",disabled:!0,onclick:function(){c.replace(r.find("#replace").value(),!0,!0),r.statusbar.items().slice(1).disabled(!0),a={}}},{type:"spacer",flex:1},{text:"Prev",name:"prev",disabled:!0,onclick:function(){c.prev(),e()}},{text:"Next",name:"next",disabled:!0,onclick:function(){c.next(),e()}}],title:"Find and replace",items:{type:"form",padding:20,labelGap:30,spacing:10,items:[{type:"textbox",name:"find",size:40,label:"Find",value:t.selection.getNode().src},{type:"textbox",name:"replace",size:40,label:"Replace with"},{type:"checkbox",name:"case",text:"Match case",label:" "},{type:"checkbox",name:"words",text:"Whole words",label:" "}]}}).renderTo().reflow()}function a(e){var t=e.getAttribute("data-mce-index");return"number"==typeof t?""+t:t}function r(n){var a,r;return r=t.dom.create("span",{"data-mce-bogus":1}),r.className="mce-match-marker",a=t.getBody(),c.done(!1),e(n,a,r,!1,t.schema)}function i(e){var t=e.parentNode;t.insertBefore(e.firstChild,e),e.parentNode.removeChild(e)}function d(e){var n,r=[];if(n=tinymce.toArray(t.getBody().getElementsByTagName("span")),n.length)for(var i=0;is&&f[o].setAttribute("data-mce-index",m-1)}return t.undoManager.add(),s=p,n?(g=d(p+1).length>0,c.next()):(g=d(p-1).length>0,c.prev()),!r&&g},c.done=function(e){var n,r,d,o;for(r=tinymce.toArray(t.getBody().getElementsByTagName("span")),n=0;n=d.end?(i=c,a=d.end-l):r&&s.push(c),!r&&c.length+l>d.start&&(r=c,o=d.start-l),l+=c.length),r&&i){if(c=n({startNode:r,startNodeIndex:o,endNode:i,endNodeIndex:a,innerNodes:s,match:d.text,matchIndex:u}),l-=i.length-a,r=null,i=null,s=[],d=t.shift(),u++,!d)break}else{if((!k[c.nodeName]||N[c.nodeName])&&c.firstChild){c=c.firstChild;continue}if(c.nextSibling){c=c.nextSibling;continue}}for(;;){if(c.nextSibling){c=c.nextSibling;break}if(c.parentNode===e)break e;c=c.parentNode}}}function o(e){function t(t,n){var r=x[n];r.stencil||(r.stencil=e(r));var i=r.stencil.cloneNode(!1);return i.setAttribute("data-mce-index",n),t&&i.appendChild(_.doc.createTextNode(t)),i}return function n(e){var n,r,i,o=e.startNode,a=e.endNode,s=e.matchIndex,l=_.doc;if(o===a){var c=o;i=c.parentNode,e.startNodeIndex>0&&(n=l.createTextNode(c.data.substring(0,e.startNodeIndex)),i.insertBefore(n,c));var d=t(e.match,s);return i.insertBefore(d,c),e.endNodeIndexp;++p){var h=e.innerNodes[p],g=t(h.data,s);h.parentNode.replaceChild(g,h),f.push(g)}var v=t(a.data.substring(0,e.endNodeIndex),s);return i=o.parentNode,i.insertBefore(n,o),i.insertBefore(u,o),i.removeChild(o),i=a.parentNode,i.insertBefore(v,a),i.insertBefore(r,a),i.removeChild(a),v}}function a(e){var t=e.parentNode;t.insertBefore(e.firstChild,e),e.parentNode.removeChild(e)}function s(t){var n=e.getElementsByTagName("*"),r=[];t="number"==typeof t?""+t:null;for(var i=0;it&&e(x[t],t)!==!1;t++);return this}function u(t){return x.length&&i(e,x,o(t)),this}function f(e,t){if(w&&e.global)for(;C=e.exec(w);)x.push(n(C,t));return this}function p(e){var t,n=s(e?l(e):null);for(t=n.length;t--;)a(n[t]);return this}function m(e){return x[e.getAttribute("data-mce-index")]}function h(e){return s(l(e))[0]}function g(e,t,n){return x.push({start:e,end:e+t,text:w.substr(e,t),data:n}),this}function v(e){var n=s(l(e)),r=t.dom.createRng();return r.setStartBefore(n[0]),r.setEndAfter(n[n.length-1]),r}function y(e,n){var r=v(e);return r.deleteContents(),n.length>0&&r.insertNode(t.dom.doc.createTextNode(n)),r}function b(){return x.splice(0,x.length),p(),this}var C,x=[],w,_=t.dom,N,k,E;return N=t.schema.getBlockElements(),k=t.schema.getWhiteSpaceElements(),E=t.schema.getShortEndedElements(),w=r(e),{text:w,matches:x,each:d,filter:c,reset:b,matchFromElement:m,elementFromMatch:h,find:f,add:g,wrap:u,unwrap:p,replace:y,rangeFromMatch:v,indexOf:l}}}),r(c,[l,d,u,f,p,m,h],function(e,t,n,r,i,o,a){t.add("spellchecker",function(t,s){function l(){return y.textMatcher||(y.textMatcher=new e(t.getBody(),t)),y.textMatcher}function c(e,t){var r=[];return n.each(t,function(e){r.push({selectable:!0,text:e.name,data:e.value})}),r}function d(e){for(var t in e)return!1;return!0}function u(e){var o=[],a=b[e.text];n.each(a,function(n){o.push({text:n,onclick:function(){var r=l().replace(e,n);r.collapse(!1),t.selection.setRng(r),p()}})}),o.push.apply(o,[{text:"-"},{text:"Ignore",onclick:function(){m(e)}},{text:"Ignore all",onclick:function(){m(e,!0)}},{text:"Finish",onclick:h}]),x=new r({items:o,context:"contextmenu",onautohide:function(e){-1!=e.target.className.indexOf("spellchecker")&&e.preventDefault()},onhide:function(){x.remove(),x=null}}),x.renderTo(document.body);var s=l().elementFromMatch(e),c=i.DOM.getPos(t.getContentAreaContainer()),d=t.dom.getPos(s),u=t.dom.getRoot();"BODY"==u.nodeName?(d.x-=u.ownerDocument.documentElement.scrollLeft||u.scrollLeft,d.y-=u.ownerDocument.documentElement.scrollTop||u.scrollTop):(d.x-=u.scrollLeft,d.y-=u.scrollTop),c.x+=d.x,c.y+=d.y,x.moveTo(c.x,c.y+s.offsetHeight)}function f(){function e(e){return t.setProgressState(!1),d(e)?(t.windowManager.alert("No misspellings found"),void(C=!1)):(b=e,l().filter(function(t){return!!e[t.text]}).wrap(function(){return t.dom.create("span",{"class":"mce-spellchecker-word","data-mce-bogus":1})}),void t.fire("SpellcheckStart"))}function n(e,n,r){o.sendRPC({url:new a(s).toAbsolute(w.spellchecker_rpc_url),method:e,params:{lang:w.spellchecker_language||"en",words:n},success:function(e){r(e)},error:function(e,n){e="JSON Parse error."==e?"Non JSON response:"+n.responseText:"Error: "+e,t.windowManager.alert(e),t.setProgressState(!1),h()}})}var r=[],i={};if(C)return void h();h(),C=!0;var c=t.getParam("spellchecker_wordchar_pattern")||new RegExp('[^\\s!"#$%&()*+,-./:;<=>?@[\\]^_{|}`\xa7\xa9\xab\xae\xb1\xb6\xb7\xb8\xbb\xbc\xbd\xbe\xbf\xd7\xf7\xa4\u201d\u201c\u201e]+',"g");l().find(c).each(function(e){var t=e.text;if(!i[t]){if(/^\d+$/.test(t)||1==t.length)return;r.push(t),i[t]=!0}}),t.setProgressState(!0);var u=w.spellchecker_callback||n;u("spellcheck",r,e)}function p(){t.dom.select("span.mce-spellchecker-word").length||h()}function m(e,n){t.selection.collapse(),n?l().each(function(t){t.text==e.text&&l().unwrap(t)}):l().unwrap(e),p()}function h(){l().reset(),y.textMatcher=null,C&&(C=!1,t.fire("SpellcheckEnd"))}function g(e){var t=w.spellchecker_language;e.control.items().each(function(e){e.active(e.settings.data===t)})}var v,y=this,b,C,x,w=t.settings,_=w.spellchecker_languages||"English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr_FR,German=de,Italian=it,Polish=pl,Portuguese=pt_BR,Spanish=es,Swedish=sv";v=c("Language",n.map(_.split(","),function(e){var t=e.split("=");return{name:t[0],value:t[1]}})),t.on("click",function(e){if("mce-spellchecker-word"==e.target.className){e.preventDefault();var n=l().matchFromElement(e.target);t.selection.setRng(l().rangeFromMatch(n)),u(n)}}),t.addMenuItem("spellchecker",{text:"Spellcheck",context:"tools",onclick:f,selectable:!0,onPostRender:function(){var e=this;t.on("SpellcheckStart SpellcheckEnd",function(){e.active(C)})}});var N={tooltip:"Spellcheck",onclick:f,onPostRender:function(){var e=this;t.on("SpellcheckStart SpellcheckEnd",function(){e.active(C)})}};v.length>1&&(N.type="splitbutton",N.menu=v,N.onshow=g,N.onselect=function(e){w.spellchecker_language=e.control.settings.data}),t.addButton("spellchecker",N),t.addCommand("mceSpellCheck",f),t.on("remove",function(){x&&(x.remove(),x=null)}),this.getTextMatcher=l,w.spellchecker_language=w.spellchecker_language||w.language||"en"})}),a([l,c])}(this); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/tabfocus/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/tabfocus/plugin.min.js deleted file mode 100644 index 68fe35e35a..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/tabfocus/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.PluginManager.add("tabfocus",function(e){function n(e){9!==e.keyCode||e.ctrlKey||e.altKey||e.metaKey||e.preventDefault()}function t(n){function t(n){function t(e){return"BODY"===e.nodeName||"hidden"!=e.type&&"none"!=e.style.display&&"hidden"!=e.style.visibility&&t(e.parentNode)}function r(e){return e.tabIndex||"INPUT"==e.nodeName||"TEXTAREA"==e.nodeName}function c(e){return!r(e)&&"-1"!=e.getAttribute("tabindex")&&t(e)}if(u=i.select(":input:enabled,*[tabindex]:not(iframe)"),o(u,function(n,t){return n.id==e.id?(a=t,!1):void 0}),n>0){for(d=a+1;d=0;d--)if(c(u[d]))return u[d];return null}var a,u,c,d;if(!(9!==n.keyCode||n.ctrlKey||n.altKey||n.metaKey)&&(c=r(e.getParam("tab_focus",e.getParam("tabfocus_elements",":prev,:next"))),1==c.length&&(c[1]=c[0],c[0]=":prev"),u=n.shiftKey?":prev"==c[0]?t(-1):i.get(c[0]):":next"==c[1]?t(1):i.get(c[1]))){var y=tinymce.get(u.id||u.name);u.id&&y?y.focus():window.setTimeout(function(){tinymce.Env.webkit||window.focus(),u.focus()},10),n.preventDefault()}}var i=tinymce.DOM,o=tinymce.each,r=tinymce.explode;e.on("init",function(){e.inline&&tinymce.DOM.setAttrib(e.getBody(),"tabIndex",null)}),e.on("keyup",n),tinymce.Env.gecko?e.on("keypress keydown",t):e.on("keydown",t)}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/table/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/table/plugin.min.js deleted file mode 100644 index d041caeabf..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/table/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(e,t){"use strict";function n(e,t){for(var n,r=[],i=0;i "+t+" tr",o);r(i,function(i,o){o+=e,r(H.select("> td, > th",i),function(e,r){var i,a,s,l;if(R[o])for(;R[o][r];)r++;for(s=n(e,"rowspan"),l=n(e,"colspan"),a=o;o+s>a;a++)for(R[a]||(R[a]=[]),i=r;r+l>i;i++)R[a][i]={part:t,real:a==o&&i==r,elm:e,rowspan:s,colspan:l}})}),e+=i.length})}function s(e,t){return e=e.cloneNode(t),e.removeAttribute("id"),e}function l(e,t){var n;return n=R[t],n?n[e]:void 0}function c(e,t,n){e&&(n=parseInt(n,10),1===n?e.removeAttribute(t,1):e.setAttribute(t,n,1))}function d(e){return e&&(H.hasClass(e.elm,"mce-item-selected")||e==L)}function u(){var e=[];return r(o.rows,function(t){r(t.cells,function(n){return H.hasClass(n,"mce-item-selected")||n==L.elm?(e.push(t),!1):void 0})}),e}function f(){var e=H.createRng();e.setStartAfter(o),e.setEndAfter(o),D.setRng(e),H.remove(o)}function p(n){var o,a={};return i.settings.table_clone_elements!==!1&&(a=e.makeMap((i.settings.table_clone_elements||"strong em b i span font h1 h2 h3 h4 h5 h6 p div").toUpperCase(),/[ ,]/)),e.walk(n,function(e){var i;return 3==e.nodeType?(r(H.getParents(e.parentNode,null,n).reverse(),function(e){a[e.nodeName]&&(e=s(e,!1),o?i&&i.appendChild(e):o=i=e,i=e)}),i&&(i.innerHTML=t.ie?" ":'
    '),!1):void 0},"childNodes"),n=s(n,!1),c(n,"rowSpan",1),c(n,"colSpan",1),o?n.appendChild(o):t.ie||(n.innerHTML='
    '),n}function m(){var e=H.createRng(),t;return r(H.select("tr",o),function(e){0===e.cells.length&&H.remove(e)}),0===H.select("tr",o).length?(e.setStartBefore(o),e.setEndBefore(o),D.setRng(e),H.remove(o),void 0):(r(H.select("thead,tbody,tfoot",o),function(e){0===e.rows.length&&H.remove(e)}),a(),t=R[Math.min(R.length-1,A.y)],t&&(D.select(t[Math.min(t.length-1,A.x)].elm,!0),D.collapse(!0)),void 0)}function h(e,t,n,r){var i,o,a,s,l;for(i=R[t][e].elm.parentNode,a=1;n>=a;a++)if(i=H.getNext(i,"tr")){for(o=e;o>=0;o--)if(l=R[t+a][o].elm,l.parentNode==i){for(s=1;r>=s;s++)H.insertAfter(p(l),l);break}if(-1==o)for(s=1;r>=s;s++)i.insertBefore(p(i.cells[0]),i.cells[0])}}function g(){r(R,function(e,t){r(e,function(e,r){var i,o,a;if(d(e)&&(e=e.elm,i=n(e,"colspan"),o=n(e,"rowspan"),i>1||o>1)){for(c(e,"rowSpan",1),c(e,"colSpan",1),a=0;i-1>a;a++)H.insertAfter(p(e),e);h(r,t,o-1,i)}})})}function v(t,n,i){var o,s,u,f,p,h,v,y,b,C,x;if(t?(o=E(t),s=o.x,u=o.y,f=s+(n-1),p=u+(i-1)):(A=B=null,r(R,function(e,t){r(e,function(e,n){d(e)&&(A||(A={x:n,y:t}),B={x:n,y:t})})}),s=A.x,u=A.y,f=B.x,p=B.y),y=l(s,u),b=l(f,p),y&&b&&y.part==b.part){for(g(),a(),y=l(s,u).elm,c(y,"colSpan",f-s+1),c(y,"rowSpan",p-u+1),v=u;p>=v;v++)for(h=s;f>=h;h++)R[v]&&R[v][h]&&(t=R[v][h].elm,t!=y&&(C=e.grep(t.childNodes),r(C,function(e){y.appendChild(e)}),C.length&&(C=e.grep(y.childNodes),x=0,r(C,function(e){"BR"==e.nodeName&&H.getAttrib(e,"data-mce-bogus")&&x++0&&R[t-1][a]&&(m=R[t-1][a].elm,h=n(m,"rowSpan"),h>1)){c(m,"rowSpan",h+1);continue}}else if(h=n(i,"rowspan"),h>1){c(i,"rowSpan",h+1);continue}f=p(i),c(f,"colSpan",i.colSpan),u.appendChild(f),o=i}u.hasChildNodes()&&(e?l.parentNode.insertBefore(u,l):H.insertAfter(u,l))}function b(e){var t,i;r(R,function(n){return r(n,function(n,r){return d(n)&&(t=r,e)?!1:void 0}),e?!t:void 0}),r(R,function(r,o){var a,s,l;r[t]&&(a=r[t].elm,a!=i&&(l=n(a,"colspan"),s=n(a,"rowspan"),1==l?e?(a.parentNode.insertBefore(p(a),a),h(t,o,s-1,l)):(H.insertAfter(p(a),a),h(t,o,s-1,l)):c(a,"colSpan",a.colSpan+1),i=a))})}function C(){var t=[];r(R,function(i){r(i,function(i,o){d(i)&&-1===e.inArray(t,o)&&(r(R,function(e){var t=e[o].elm,r;r=n(t,"colSpan"),r>1?c(t,"colSpan",r-1):H.remove(t)}),t.push(o))})}),m()}function x(){function e(e){var t,i,o;t=H.getNext(e,"tr"),r(e.cells,function(e){var t=n(e,"rowSpan");t>1&&(c(e,"rowSpan",t-1),i=E(e),h(i.x,i.y,1,1))}),i=E(e.cells[0]),r(R[i.y],function(e){var t;e=e.elm,e!=o&&(t=n(e,"rowSpan"),1>=t?H.remove(e):c(e,"rowSpan",t-1),o=e)})}var t;t=u(),r(t.reverse(),function(t){e(t)}),m()}function w(){var e=u();return H.remove(e),m(),e}function _(){var e=u();return r(e,function(t,n){e[n]=s(t,!0)}),e}function N(e,t){var n=u(),i=n[t?0:n.length-1],o=i.cells.length;e&&(r(R,function(e){var t;return o=0,r(e,function(e){e.real&&(o+=e.colspan),e.elm.parentNode==i&&(t=1)}),t?!1:void 0}),t||e.reverse(),r(e,function(e){var n,r=e.cells.length,a;for(n=0;r>n;n++)a=e.cells[n],c(a,"colSpan",1),c(a,"rowSpan",1);for(n=r;o>n;n++)e.appendChild(p(e.cells[r-1]));for(n=o;r>n;n++)H.remove(e.cells[n]);t?i.parentNode.insertBefore(e,i):H.insertAfter(e,i)}),H.removeClass(H.select("td.mce-item-selected,th.mce-item-selected"),"mce-item-selected"))}function E(e){var t;return r(R,function(n,i){return r(n,function(n,r){return n.elm==e?(t={x:r,y:i},!1):void 0}),!t}),t}function k(e){A=E(e)}function S(){var e,t;return e=t=0,r(R,function(n,i){r(n,function(n,r){var o,a;d(n)&&(n=R[i][r],r>e&&(e=r),i>t&&(t=i),n.real&&(o=n.colspan-1,a=n.rowspan-1,o&&r+o>e&&(e=r+o),a&&i+a>t&&(t=i+a)))})}),{x:e,y:t}}function T(e){var t,n,r,i,o,a,s,l,c,d;if(B=E(e),A&&B){for(t=Math.min(A.x,B.x),n=Math.min(A.y,B.y),r=Math.max(A.x,B.x),i=Math.max(A.y,B.y),o=r,a=i,d=n;a>=d;d++)e=R[d][t],e.real||t-(e.colspan-1)=c;c++)e=R[n][c],e.real||n-(e.rowspan-1)=d;d++)for(c=t;r>=c;c++)e=R[d][c],e.real&&(s=e.colspan-1,l=e.rowspan-1,s&&c+s>o&&(o=c+s),l&&d+l>a&&(a=d+l));for(H.removeClass(H.select("td.mce-item-selected,th.mce-item-selected"),"mce-item-selected"),d=n;a>=d;d++)for(c=t;o>=c;c++)R[d][c]&&H.addClass(R[d][c].elm,"mce-item-selected")}}var R,A,B,L,D=i.selection,H=D.dom;o=o||H.getParent(D.getStart(),"table"),a(),L=H.getParent(D.getStart(),"th,td"),L&&(A=E(L),B=S(),L=l(A.x,A.y)),e.extend(this,{deleteTable:f,split:g,merge:v,insertRow:y,insertCol:b,deleteCols:C,deleteRows:x,cutRows:w,copyRows:_,pasteRows:N,getPos:E,setStartCell:k,setEndCell:T})}}),r(u,[f,d,c],function(e,t,n){function r(e,t){return parseInt(e.getAttribute(t)||1,10)}var i=n.each;return function(n){function o(){function t(t){function o(e,r){var i=e?"previousSibling":"nextSibling",o=n.dom.getParent(r,"tr"),s=o[i];if(s)return g(n,r,s,e),t.preventDefault(),!0;var d=n.dom.getParent(o,"table"),u=o.parentNode,f=u.nodeName.toLowerCase();if("tbody"===f||f===(e?"tfoot":"thead")){var p=a(e,d,u,"tbody");if(null!==p)return l(e,p,r)}return c(e,o,i,d)}function a(e,t,r,i){var o=n.dom.select(">"+i,t),a=o.indexOf(r);if(e&&0===a||!e&&a===o.length-1)return s(e,t);if(-1===a){var l="thead"===r.tagName.toLowerCase()?0:o.length-1;return o[l]}return o[a+(e?-1:1)]}function s(e,t){var r=e?"thead":"tfoot",i=n.dom.select(">"+r,t);return 0!==i.length?i[0]:null}function l(e,r,i){var o=d(r,e);return o&&g(n,i,o,e),t.preventDefault(),!0}function c(e,r,i,a){var s=a[i];if(s)return u(s),!0;var l=n.dom.getParent(a,"td,th");if(l)return o(e,l,t);var c=d(r,!e);return u(c),t.preventDefault(),!1}function d(e,t){var r=e&&e[t?"lastChild":"firstChild"];return r&&"BR"===r.nodeName?n.dom.getParent(r,"td,th"):r}function u(e){n.selection.setCursorLocation(e,0)}function f(){return b==e.UP||b==e.DOWN}function p(e){var t=e.selection.getNode(),n=e.dom.getParent(t,"tr");return null!==n}function m(e){for(var t=0,n=e;n.previousSibling;)n=n.previousSibling,t+=r(n,"colspan");return t}function h(e,t){var n=0,o=0;return i(e.children,function(e,i){return n+=r(e,"colspan"),o=i,n>t?!1:void 0}),o}function g(e,t,r,i){var o=m(n.dom.getParent(t,"td,th")),a=h(r,o),s=r.childNodes[a],l=d(s,i);u(l||s)}function v(e){var t=n.selection.getNode(),r=n.dom.getParent(t,"td,th"),i=n.dom.getParent(e,"td,th");return r&&r!==i&&y(r,i)}function y(e,t){return n.dom.getParent(e,"TABLE")===n.dom.getParent(t,"TABLE")}var b=t.keyCode;if(f()&&p(n)){var C=n.selection.getNode();setTimeout(function(){v(C)&&o(!t.shiftKey&&b===e.UP,C,t)},0)}}n.on("KeyDown",function(e){t(e)})}function a(){function e(e,t){var n=t.ownerDocument,r=n.createRange(),i;return r.setStartBefore(t),r.setEnd(e.endContainer,e.endOffset),i=n.createElement("body"),i.appendChild(r.cloneContents()),0===i.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi,"-").replace(/<[^>]+>/g,"").length}n.on("KeyDown",function(t){var r,i,o=n.dom;(37==t.keyCode||38==t.keyCode)&&(r=n.selection.getRng(),i=o.getParent(r.startContainer,"table"),i&&n.getBody().firstChild==i&&e(r,i)&&(r=o.createRng(),r.setStartBefore(i),r.setEndBefore(i),n.selection.setRng(r),t.preventDefault()))})}function s(){n.on("KeyDown SetContent VisualAid",function(){var e;for(e=n.getBody().lastChild;e;e=e.previousSibling)if(3==e.nodeType){if(e.nodeValue.length>0)break}else if(1==e.nodeType&&!e.getAttribute("data-mce-bogus"))break;e&&"TABLE"==e.nodeName&&(n.settings.forced_root_block?n.dom.add(n.getBody(),n.settings.forced_root_block,n.settings.forced_root_block_attrs,t.ie&&t.ie<11?" ":'
    '):n.dom.add(n.getBody(),"br",{"data-mce-bogus":"1"}))}),n.on("PreProcess",function(e){var t=e.node.lastChild;t&&("BR"==t.nodeName||1==t.childNodes.length&&("BR"==t.firstChild.nodeName||"\xa0"==t.firstChild.nodeValue))&&t.previousSibling&&"TABLE"==t.previousSibling.nodeName&&n.dom.remove(t)})}function l(){function e(e,t,n,r){var i=3,o=e.dom.getParent(t.startContainer,"TABLE"),a,s,l;return o&&(a=o.parentNode),s=t.startContainer.nodeType==i&&0===t.startOffset&&0===t.endOffset&&r&&("TR"==n.nodeName||n==a),l=("TD"==n.nodeName||"TH"==n.nodeName)&&!r,s||l}function t(){var t=n.selection.getRng(),r=n.selection.getNode(),i=n.dom.getParent(t.startContainer,"TD,TH");if(e(n,t,r,i)){i||(i=r);for(var o=i.lastChild;o.lastChild;)o=o.lastChild;t.setEnd(o,o.nodeValue.length),n.selection.setRng(t)}}n.on("KeyDown",function(){t()}),n.on("MouseDown",function(e){2!=e.button&&t()})}function c(){n.on("keydown",function(t){if((t.keyCode==e.DELETE||t.keyCode==e.BACKSPACE)&&!t.isDefaultPrevented()){var r=n.dom.getParent(n.selection.getStart(),"table");if(r){for(var i=n.dom.select("td,th",r),o=i.length;o--;)if(!n.dom.hasClass(i[o],"mce-item-selected"))return;t.preventDefault(),n.execCommand("mceTableDelete")}}})}c(),t.webkit&&(o(),l()),t.gecko&&(a(),s()),t.ie>10&&(a(),s())}}),r(p,[l,m,c],function(e,t,n){return function(r){function i(){r.getBody().style.webkitUserSelect="",d&&(r.dom.removeClass(r.dom.select("td.mce-item-selected,th.mce-item-selected"),"mce-item-selected"),d=!1)}function o(t){var n,i,o=t.target;if(l&&(s||o!=l)&&("TD"==o.nodeName||"TH"==o.nodeName)){i=a.getParent(o,"table"),i==c&&(s||(s=new e(r,i),s.setStartCell(l),r.getBody().style.webkitUserSelect="none"),s.setEndCell(o),d=!0),n=r.selection.getSel();try{n.removeAllRanges?n.removeAllRanges():n.empty()}catch(u){}t.preventDefault()}}var a=r.dom,s,l,c,d=!0;return r.on("MouseDown",function(e){2!=e.button&&(i(),l=a.getParent(e.target,"td,th"),c=a.getParent(l,"table"))}),a.bind(r.getDoc(),"mouseover",o),r.on("remove",function(){a.unbind(r.getDoc(),"mouseover",o)}),r.on("MouseUp",function(){function e(e,r){var o=new t(e,e);do{if(3==e.nodeType&&0!==n.trim(e.nodeValue).length)return r?i.setStart(e,0):i.setEnd(e,e.nodeValue.length),void 0;if("BR"==e.nodeName)return r?i.setStartBefore(e):i.setEndBefore(e),void 0}while(e=r?o.next():o.prev())}var i,o=r.selection,d,u,f,p,m;if(l){if(s&&(r.getBody().style.webkitUserSelect=""),d=a.select("td.mce-item-selected,th.mce-item-selected"),d.length>0){i=a.createRng(),f=d[0],m=d[d.length-1],i.setStartBefore(f),i.setEndAfter(f),e(f,1),u=new t(f,a.getParent(d[0],"table"));do if("TD"==f.nodeName||"TH"==f.nodeName){if(!a.hasClass(f,"mce-item-selected"))break;p=f}while(f=u.next());e(p),o.setRng(i)}r.nodeChanged(),l=s=c=null}}),r.on("KeyUp",function(){i()}),{clear:i}}}),r(h,[l,u,p,c,m,d,g],function(e,t,n,r,i,o,a){function s(r){function i(e){return e?e.replace(/px$/,""):""}function a(e){return/^[0-9]+$/.test(e)&&(e+="px"),e}function s(e){l("left center right".split(" "),function(t){r.formatter.remove("align"+t,{},e)})}function c(){var e=r.dom,t,n;t=e.getParent(r.selection.getStart(),"table"),n={width:i(e.getStyle(t,"width")||e.getAttrib(t,"width")),height:i(e.getStyle(t,"height")||e.getAttrib(t,"height")),cellspacing:e.getAttrib(t,"cellspacing"),cellpadding:e.getAttrib(t,"cellpadding"),border:e.getAttrib(t,"border"),caption:!!e.select("caption",t)[0]},l("left center right".split(" "),function(e){r.formatter.matchNode(t,"align"+e)&&(n.align=e)}),r.windowManager.open({title:"Table properties",items:{type:"form",layout:"grid",columns:2,data:n,defaults:{type:"textbox",maxWidth:50},items:[{label:"Width",name:"width"},{label:"Height",name:"height"},{label:"Cell spacing",name:"cellspacing"},{label:"Cell padding",name:"cellpadding"},{label:"Border",name:"border"},{label:"Caption",name:"caption",type:"checkbox"},{label:"Alignment",minWidth:90,name:"align",type:"listbox",text:"None",maxWidth:null,values:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]}]},onsubmit:function(){var n=this.toJSON(),i;r.undoManager.transact(function(){r.dom.setAttribs(t,{cellspacing:n.cellspacing,cellpadding:n.cellpadding,border:n.border}),r.dom.setStyles(t,{width:a(n.width),height:a(n.height)}),i=e.select("caption",t)[0],i&&!n.caption&&e.remove(i),!i&&n.caption&&(i=e.create("caption"),i.innerHTML=o.ie?"\xa0":'
    ',t.insertBefore(i,t.firstChild)),s(t),n.align&&r.formatter.apply("align"+n.align,{},t),r.focus(),r.addVisual()})}})}function d(e,t){r.windowManager.open({title:"Merge cells",body:[{label:"Cols",name:"cols",type:"textbox",size:10},{label:"Rows",name:"rows",type:"textbox",size:10}],onsubmit:function(){var n=this.toJSON();r.undoManager.transact(function(){e.merge(t,n.cols,n.rows)})}})}function u(){var e=r.dom,t,n,o=[];o=r.dom.select("td.mce-item-selected,th.mce-item-selected"),t=r.dom.getParent(r.selection.getStart(),"td,th"),!o.length&&t&&o.push(t),t=t||o[0],n={width:i(e.getStyle(t,"width")||e.getAttrib(t,"width")),height:i(e.getStyle(t,"height")||e.getAttrib(t,"height")),scope:e.getAttrib(t,"scope")},n.type=t.nodeName.toLowerCase(),l("left center right".split(" "),function(e){r.formatter.matchNode(t,"align"+e)&&(n.align=e)}),r.windowManager.open({title:"Cell properties",items:{type:"form",data:n,layout:"grid",columns:2,defaults:{type:"textbox",maxWidth:50},items:[{label:"Width",name:"width"},{label:"Height",name:"height"},{label:"Cell type",name:"type",type:"listbox",text:"None",minWidth:90,maxWidth:null,menu:[{text:"Cell",value:"td"},{text:"Header cell",value:"th"}]},{label:"Scope",name:"scope",type:"listbox",text:"None",minWidth:90,maxWidth:null,menu:[{text:"None",value:""},{text:"Row",value:"row"},{text:"Column",value:"col"},{text:"Row group",value:"rowgroup"},{text:"Column group",value:"colgroup"}]},{label:"Alignment",name:"align",type:"listbox",text:"None",minWidth:90,maxWidth:null,values:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]}]},onsubmit:function(){var t=this.toJSON();r.undoManager.transact(function(){l(o,function(n){r.dom.setAttrib(n,"scope",t.scope),r.dom.setStyles(n,{width:a(t.width),height:a(t.height)}),t.type&&n.nodeName.toLowerCase()!=t.type&&(n=e.rename(n,t.type)),s(n),t.align&&r.formatter.apply("align"+t.align,{},n)}),r.focus()})}})}function f(){var e=r.dom,t,n,o,c,d=[];t=r.dom.getParent(r.selection.getStart(),"table"),n=r.dom.getParent(r.selection.getStart(),"td,th"),l(t.rows,function(t){l(t.cells,function(r){return e.hasClass(r,"mce-item-selected")||r==n?(d.push(t),!1):void 0})}),o=d[0],c={height:i(e.getStyle(o,"height")||e.getAttrib(o,"height")),scope:e.getAttrib(o,"scope")},c.type=o.parentNode.nodeName.toLowerCase(),l("left center right".split(" "),function(e){r.formatter.matchNode(o,"align"+e)&&(c.align=e)}),r.windowManager.open({title:"Row properties",items:{type:"form",data:c,columns:2,defaults:{type:"textbox"},items:[{type:"listbox",name:"type",label:"Row type",text:"None",maxWidth:null,menu:[{text:"Header",value:"thead"},{text:"Body",value:"tbody"},{text:"Footer",value:"tfoot"}]},{type:"listbox",name:"align",label:"Alignment",text:"None",maxWidth:null,menu:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]},{label:"Height",name:"height"}]},onsubmit:function(){var t=this.toJSON(),n,i,o;r.undoManager.transact(function(){var c=t.type;l(d,function(l){r.dom.setAttrib(l,"scope",t.scope),r.dom.setStyles(l,{height:a(t.height)}),c!=l.parentNode.nodeName.toLowerCase()&&(n=e.getParent(l,"table"),i=l.parentNode,o=e.select(c,n)[0],o||(o=e.create(c),n.firstChild?n.insertBefore(o,n.firstChild):n.appendChild(o)),o.appendChild(l),i.hasChildNodes()||e.remove(i)),s(l),t.align&&r.formatter.apply("align"+t.align,{},l)}),r.focus()})}})}function p(e){return function(){r.execCommand(e)}}function m(e,t){var n,i,a;for(a="",n=0;t>n;n++){for(a+="",i=0;e>i;i++)a+="";a+=""}a+="
    "+(o.ie?" ":"
    ")+"
    ",r.insertContent(a)}function h(e,t){function n(){e.disabled(!r.dom.getParent(r.selection.getStart(),t)),r.selection.selectorChanged(t,function(t){e.disabled(!t)})}r.initialized?n():r.on("init",n)}function g(){h(this,"table")}function v(){h(this,"td,th")}function y(){var e="";e='';for(var t=0;10>t;t++){e+="";for(var n=0;10>n;n++)e+='';e+=""}return e+="",e+='

    0 x 0
    '}var b,C,x=this;r.addMenuItem("inserttable",{text:"Insert table",icon:"table",context:"table",onhide:function(){r.dom.removeClass(this.menu.items()[0].getEl().getElementsByTagName("a"),"mce-active")},menu:[{type:"container",html:y(),onmousemove:function(e){var t,n,i=e.target;if("A"==i.nodeName){var o=r.dom.getParent(i,"table"),a=i.getAttribute("data-mce-index"),s=e.control.parent().rel;if(a!=this.lastPos){if(a=a.split(","),a[0]=parseInt(a[0],10),a[1]=parseInt(a[1],10),e.control.isRtl()||"tl-tr"==s){for(n=9;n>=0;n--)for(t=0;10>t;t++)r.dom.toggleClass(o.rows[n].childNodes[t].firstChild,"mce-active",t>=a[0]&&n<=a[1]);a[0]=9-a[0],o.nextSibling.innerHTML=a[0]+" x "+(a[1]+1)}else{for(n=0;10>n;n++)for(t=0;10>t;t++)r.dom.toggleClass(o.rows[n].childNodes[t].firstChild,"mce-active",t<=a[0]&&n<=a[1]);o.nextSibling.innerHTML=a[0]+1+" x "+(a[1]+1)}this.lastPos=a}}},onclick:function(e){"A"==e.target.nodeName&&this.lastPos&&(e.preventDefault(),m(this.lastPos[0]+1,this.lastPos[1]+1),this.parent().cancel())}}]}),r.addMenuItem("tableprops",{text:"Table properties",context:"table",onPostRender:g,onclick:c}),r.addMenuItem("deletetable",{text:"Delete table",context:"table",onPostRender:g,cmd:"mceTableDelete"}),r.addMenuItem("cell",{separator:"before",text:"Cell",context:"table",menu:[{text:"Cell properties",onclick:p("mceTableCellProps"),onPostRender:v},{text:"Merge cells",onclick:p("mceTableMergeCells"),onPostRender:v},{text:"Split cell",onclick:p("mceTableSplitCells"),onPostRender:v}]}),r.addMenuItem("row",{text:"Row",context:"table",menu:[{text:"Insert row before",onclick:p("mceTableInsertRowBefore"),onPostRender:v},{text:"Insert row after",onclick:p("mceTableInsertRowAfter"),onPostRender:v},{text:"Delete row",onclick:p("mceTableDeleteRow"),onPostRender:v},{text:"Row properties",onclick:p("mceTableRowProps"),onPostRender:v},{text:"-"},{text:"Cut row",onclick:p("mceTableCutRow"),onPostRender:v},{text:"Copy row",onclick:p("mceTableCopyRow"),onPostRender:v},{text:"Paste row before",onclick:p("mceTablePasteRowBefore"),onPostRender:v},{text:"Paste row after",onclick:p("mceTablePasteRowAfter"),onPostRender:v}]}),r.addMenuItem("column",{text:"Column",context:"table",menu:[{text:"Insert column before",onclick:p("mceTableInsertColBefore"),onPostRender:v},{text:"Insert column after",onclick:p("mceTableInsertColAfter"),onPostRender:v},{text:"Delete column",onclick:p("mceTableDeleteCol"),onPostRender:v}]});var w=[];l("inserttable tableprops deletetable | cell row column".split(" "),function(e){"|"==e?w.push({text:"-"}):w.push(r.menuItems[e])}),r.addButton("table",{type:"menubutton",title:"Table",menu:w}),o.isIE||r.on("click",function(e){e=e.target,"TABLE"===e.nodeName&&(r.selection.select(e),r.nodeChanged())}),x.quirks=new t(r),r.on("Init",function(){b=r.windowManager,x.cellSelection=new n(r)}),l({mceTableSplitCells:function(e){e.split()},mceTableMergeCells:function(e){var t,n,i;i=r.dom.getParent(r.selection.getStart(),"th,td"),i&&(t=i.rowSpan,n=i.colSpan),r.dom.select("td.mce-item-selected,th.mce-item-selected").length?e.merge():d(e,i)},mceTableInsertRowBefore:function(e){e.insertRow(!0)},mceTableInsertRowAfter:function(e){e.insertRow()},mceTableInsertColBefore:function(e){e.insertCol(!0)},mceTableInsertColAfter:function(e){e.insertCol()},mceTableDeleteCol:function(e){e.deleteCols()},mceTableDeleteRow:function(e){e.deleteRows()},mceTableCutRow:function(e){C=e.cutRows()},mceTableCopyRow:function(e){C=e.copyRows()},mceTablePasteRowBefore:function(e){e.pasteRows(C,!0)},mceTablePasteRowAfter:function(e){e.pasteRows(C)},mceTableDelete:function(e){e.deleteTable()}},function(t,n){r.addCommand(n,function(){var n=new e(r);n&&(t(n),r.execCommand("mceRepaint"),x.cellSelection.clear())})}),l({mceInsertTable:function(){c()},mceTableRowProps:f,mceTableCellProps:u},function(e,t){r.addCommand(t,function(t,n){e(n)})})}var l=r.each;a.add("table",s)}),a([l,u,p,h])}(this); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/template/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/template/plugin.min.js deleted file mode 100644 index 91a8b5fa2d..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/template/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.PluginManager.add("template",function(e){function t(t){return function(){var a=e.settings.templates;"string"==typeof a?tinymce.util.XHR.send({url:a,success:function(e){t(tinymce.util.JSON.parse(e))}}):t(a)}}function a(t){function a(t){function a(t){if(-1==t.indexOf("")){var a="";tinymce.each(e.contentCSS,function(t){a+=''}),t=""+a+""+""+t+""+""}t=r(t,"template_preview_replace_values");var l=n.find("iframe")[0].getEl().contentWindow.document;l.open(),l.write(t),l.close()}var c=t.control.value();c.url?tinymce.util.XHR.send({url:c.url,success:function(e){l=e,a(l)}}):(l=c.content,a(l)),n.find("#description")[0].text(t.control.value().description)}var n,l,i=[];return t&&0!==t.length?(tinymce.each(t,function(e){i.push({selected:!i.length,text:e.title,value:{url:e.url,content:e.content,description:e.description}})}),n=e.windowManager.open({title:"Insert template",layout:"flex",direction:"column",align:"stretch",padding:15,spacing:10,items:[{type:"form",flex:0,padding:0,items:[{type:"container",label:"Templates",items:{type:"listbox",label:"Templates",name:"template",values:i,onselect:a}}]},{type:"label",name:"description",label:"Description",text:" "},{type:"iframe",flex:1,border:1}],onsubmit:function(){c(!1,l)},width:e.getParam("template_popup_width",600),height:e.getParam("template_popup_height",500)}),n.find("listbox")[0].fire("select"),void 0):(e.windowManager.alert("No templates defined"),void 0)}function n(t,a){function n(e,t){if(e=""+e,e.length0&&(o=p.create("div",null),o.appendChild(s[0].cloneNode(!0))),i(p.select("*",o),function(t){c(t,e.getParam("template_cdate_classes","cdate").replace(/\s+/g,"|"))&&(t.innerHTML=n(e.getParam("template_cdate_format",e.getLang("template.cdate_format")))),c(t,e.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))&&(t.innerHTML=n(e.getParam("template_mdate_format",e.getLang("template.mdate_format")))),c(t,e.getParam("template_selected_content_classes","selcontent").replace(/\s+/g,"|"))&&(t.innerHTML=m)}),l(o),e.execCommand("mceInsertContent",!1,o.innerHTML),e.addVisual()}var i=tinymce.each;e.addCommand("mceInsertTemplate",c),e.addButton("template",{title:"Insert template",onclick:t(a)}),e.addMenuItem("template",{text:"Insert template",onclick:t(a),context:"insert"}),e.on("PreProcess",function(t){var a=e.dom;i(a.select("div",t.node),function(t){a.hasClass(t,"mceTmpl")&&(i(a.select("*",t),function(t){a.hasClass(t,e.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))&&(t.innerHTML=n(e.getParam("template_mdate_format",e.getLang("template.mdate_format"))))}),l(t))})})}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/textcolor/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/textcolor/plugin.min.js deleted file mode 100644 index ee943e497f..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/textcolor/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.PluginManager.add("textcolor",function(e){function o(){var o,t,r=[];for(t=e.settings.textcolor_map||["000000","Black","993300","Burnt orange","333300","Dark olive","003300","Dark green","003366","Dark azure","000080","Navy Blue","333399","Indigo","333333","Very dark gray","800000","Maroon","FF6600","Orange","808000","Olive","008000","Green","008080","Teal","0000FF","Blue","666699","Grayish blue","808080","Gray","FF0000","Red","FF9900","Amber","99CC00","Yellow green","339966","Sea green","33CCCC","Turquoise","3366FF","Royal blue","800080","Purple","999999","Medium gray","FF00FF","Magenta","FFCC00","Gold","FFFF00","Yellow","00FF00","Lime","00FFFF","Aqua","00CCFF","Sky blue","993366","Brown","C0C0C0","Silver","FF99CC","Pink","FFCC99","Peach","FFFF99","Light yellow","CCFFCC","Pale green","CCFFFF","Pale cyan","99CCFF","Light sky blue","CC99FF","Plum","FFFFFF","White"],o=0;o',c=t.length-1,n=e.settings.textcolor_rows||5,a=e.settings.textcolor_cols||8,i=0;n>i;i++){for(l+="",F=0;a>F;F++)d=i*a+F,d>c?l+="":(r=t[d],l+='
    '+"
    "+"");l+=""}return l+=""}function r(o){var t,r=this.parent();(t=o.target.getAttribute("data-mce-color"))&&(r.hidePanel(),t="#"+t,r.color(t),e.execCommand(r.settings.selectcmd,!1,t))}function l(){var o=this;o._color&&e.execCommand(o.settings.selectcmd,!1,o._color)}e.addButton("forecolor",{type:"colorbutton",tooltip:"Text color",selectcmd:"ForeColor",panel:{html:t,onclick:r},onclick:l}),e.addButton("backcolor",{type:"colorbutton",tooltip:"Background color",selectcmd:"HiliteColor",panel:{html:t,onclick:r},onclick:l})}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/visualblocks/css/visualblocks.css b/common/static/js/vendor/tiny_mce/plugins/visualblocks/css/visualblocks.css deleted file mode 100644 index fe6fa930a4..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/visualblocks/css/visualblocks.css +++ /dev/null @@ -1,128 +0,0 @@ -.mce-visualblocks p { - padding-top: 10px; - border: 1px dashed #BBB; - margin-left: 3px; - background: transparent no-repeat url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7); -} - -.mce-visualblocks h1 { - padding-top: 10px; - border: 1px dashed #BBB; - margin-left: 3px; - background: transparent no-repeat url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==); -} - -.mce-visualblocks h2 { - padding-top: 10px; - border: 1px dashed #BBB; - margin-left: 3px; - background: transparent no-repeat url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==); -} - -.mce-visualblocks h3 { - padding-top: 10px; - border: 1px dashed #BBB; - margin-left: 3px; - background: transparent no-repeat url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7); -} - -.mce-visualblocks h4 { - padding-top: 10px; - border: 1px dashed #BBB; - margin-left: 3px; - background: transparent no-repeat url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==); -} - -.mce-visualblocks h5 { - padding-top: 10px; - border: 1px dashed #BBB; - margin-left: 3px; - background: transparent no-repeat url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==); -} - -.mce-visualblocks h6 { - padding-top: 10px; - border: 1px dashed #BBB; - margin-left: 3px; - background: transparent no-repeat url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==); -} - -.mce-visualblocks div { - padding-top: 10px; - border: 1px dashed #BBB; - margin-left: 3px; - background: transparent no-repeat url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7); -} - -.mce-visualblocks section { - padding-top: 10px; - border: 1px dashed #BBB; - margin: 0 0 1em 3px; - background: transparent no-repeat url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=); -} - -.mce-visualblocks article { - padding-top: 10px; - border: 1px dashed #BBB; - margin: 0 0 1em 3px; - background: transparent no-repeat url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7); -} - -.mce-visualblocks blockquote { - padding-top: 10px; - border: 1px dashed #BBB; - background: transparent no-repeat url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7); -} - -.mce-visualblocks address { - padding-top: 10px; - border: 1px dashed #BBB; - margin: 0 0 1em 3px; - background: transparent no-repeat url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=); -} - -.mce-visualblocks pre { - padding-top: 10px; - border: 1px dashed #BBB; - margin-left: 3px; - background: transparent no-repeat url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==); -} - -.mce-visualblocks figure { - padding-top: 10px; - border: 1px dashed #BBB; - margin: 0 0 1em 3px; - background: transparent no-repeat url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7); -} - -.mce-visualblocks hgroup { - padding-top: 10px; - border: 1px dashed #BBB; - margin: 0 0 1em 3px; - background: transparent no-repeat url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7); -} - -.mce-visualblocks aside { - padding-top: 10px; - border: 1px dashed #BBB; - margin: 0 0 1em 3px; - background: transparent no-repeat url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=); -} - -.mce-visualblocks figcaption { - border: 1px dashed #BBB; -} - -.mce-visualblocks ul { - padding-top: 10px; - border: 1px dashed #BBB; - margin: 0 0 1em 3px; - background: transparent no-repeat url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==) -} - -.mce-visualblocks ol { - padding-top: 10px; - border: 1px dashed #BBB; - margin: 0 0 1em 3px; - background: transparent no-repeat url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==); -} diff --git a/common/static/js/vendor/tiny_mce/plugins/visualblocks/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/visualblocks/plugin.min.js deleted file mode 100644 index cafa418736..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/visualblocks/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.PluginManager.add("visualblocks",function(e,t){function n(){var t=this;t.active(r),e.on("VisualBlocks",function(){t.active(e.dom.hasClass(e.getBody(),"mce-visualblocks"))})}var i,a,r;window.NodeList&&(e.addCommand("mceVisualBlocks",function(){var n,o=e.dom;i||(i=o.uniqueId(),n=o.create("link",{id:i,rel:"stylesheet",href:t+"/css/visualblocks.css"}),e.getDoc().getElementsByTagName("head")[0].appendChild(n)),e.on("PreviewFormats AfterPreviewFormats",function(t){r&&o.toggleClass(e.getBody(),"mce-visualblocks","afterpreviewformats"==t.type)}),o.toggleClass(e.getBody(),"mce-visualblocks"),r=e.dom.hasClass(e.getBody(),"mce-visualblocks"),a&&a.active(o.hasClass(e.getBody(),"mce-visualblocks")),e.fire("VisualBlocks")}),e.addButton("visualblocks",{title:"Show blocks",cmd:"mceVisualBlocks",onPostRender:n}),e.addMenuItem("visualblocks",{text:"Show blocks",cmd:"mceVisualBlocks",onPostRender:n,selectable:!0,context:"view",prependToContext:!0}),e.on("init",function(){e.settings.visualblocks_default_state&&e.execCommand("mceVisualBlocks",!1,null,{skip_focus:!0})}),e.on("remove",function(){e.dom.removeClass(e.getBody(),"mce-visualblocks")}))}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/visualchars/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/visualchars/plugin.min.js deleted file mode 100644 index 447423884e..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/visualchars/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.PluginManager.add("visualchars",function(e){function t(t){var n,a,r,o,l,s,c=e.getBody(),d=e.selection;if(i=!i,e.fire("VisualChars",{state:i}),t&&(s=d.getBookmark()),i)for(a=[],tinymce.walk(c,function(e){3==e.nodeType&&e.nodeValue&&-1!=e.nodeValue.indexOf(" ")&&a.push(e)},"childNodes"),r=0;r$1
    '),l=e.dom.create("div",null,o);n=l.lastChild;)e.dom.insertAfter(n,a[r]);e.dom.remove(a[r])}else for(a=e.dom.select("span.mce-nbsp",c),r=a.length-1;r>=0;r--)e.dom.remove(a[r],1);d.moveToBookmark(s)}function n(){var t=this;e.on("VisualChars",function(e){t.active(e.state)})}var i;e.addCommand("mceVisualChars",t),e.addButton("visualchars",{title:"Show invisible characters",cmd:"mceVisualChars",onPostRender:n}),e.addMenuItem("visualchars",{text:"Show invisible characters",cmd:"mceVisualChars",onPostRender:n,selectable:!0,context:"view",prependToContext:!0}),e.on("beforegetcontent",function(e){i&&"raw"!=e.format&&!e.draft&&(i=!0,t(!1))})}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/plugins/wordcount/plugin.min.js b/common/static/js/vendor/tiny_mce/plugins/wordcount/plugin.min.js deleted file mode 100644 index acda5d044c..0000000000 --- a/common/static/js/vendor/tiny_mce/plugins/wordcount/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.PluginManager.add("wordcount",function(e){function t(){e.theme.panel.find("#wordcount").text(["Words: {0}",a.getCount()])}var n,o,a=this;n=e.getParam("wordcount_countregex",/[\w\u2019\x27\-\u0600-\u06FF]+/g),o=e.getParam("wordcount_cleanregex",/[0-9.(),;:!?%#$?\x27\x22_+=\\\/\-]*/g),e.on("init",function(){var n=e.theme.panel&&e.theme.panel.find("#statusbar")[0];n&&window.setTimeout(function(){n.insert({type:"label",name:"wordcount",text:["Words: {0}",a.getCount()],classes:"wordcount",disabled:e.settings.readonly},0),e.on("setcontent beforeaddundo",t),e.on("keyup",function(e){32==e.keyCode&&t()})},0)}),a.getCount=function(){var t=e.getContent({format:"raw"}),a=0;if(t){t=t.replace(/\.\.\./g," "),t=t.replace(/<.[^<>]*?>/g," ").replace(/ | /gi," "),t=t.replace(/(\w+)(&.+?;)+(\w+)/,"$1$3").replace(/&.+?;/g," "),t=t.replace(o,"");var r=t.match(n);r&&(a=r.length)}return a}}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/skins/lightgray/content.inline.min.css b/common/static/js/vendor/tiny_mce/skins/lightgray/content.inline.min.css deleted file mode 100644 index 0592828408..0000000000 --- a/common/static/js/vendor/tiny_mce/skins/lightgray/content.inline.min.css +++ /dev/null @@ -1 +0,0 @@ -.mce-object{border:1px dotted #3A3A3A;background:#d5d5d5 url(img/object.gif) no-repeat center}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px !important;height:9px !important;border:1px dotted #3A3A3A;background:#d5d5d5 url(img/anchor.gif) no-repeat center}.mce-nbsp{background:#AAA}hr{cursor:default}.mce-match-marker{background:#AAA;color:#fff}.mce-match-marker-selected{background:#3399ff;color:#fff}.mce-spellchecker-word{border-bottom:2px solid #F00;cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid #008000;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td.mce-item-selected,th.mce-item-selected{background-color:#3399ff !important}.mce-edit-focus{outline:1px dotted #333} \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/skins/lightgray/content.min.css b/common/static/js/vendor/tiny_mce/skins/lightgray/content.min.css deleted file mode 100644 index eafd4616b3..0000000000 --- a/common/static/js/vendor/tiny_mce/skins/lightgray/content.min.css +++ /dev/null @@ -1 +0,0 @@ -body{background-color:#FFFFFF;color:#000000;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px;scrollbar-3dlight-color:#F0F0EE;scrollbar-arrow-color:#676662;scrollbar-base-color:#F0F0EE;scrollbar-darkshadow-color:#DDDDDD;scrollbar-face-color:#E0E0DD;scrollbar-highlight-color:#F0F0EE;scrollbar-shadow-color:#F0F0EE;scrollbar-track-color:#F5F5F5}td,th{font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px}.mce-object{border:1px dotted #3A3A3A;background:#d5d5d5 url(img/object.gif) no-repeat center}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px !important;height:9px !important;border:1px dotted #3A3A3A;background:#d5d5d5 url(img/anchor.gif) no-repeat center}.mce-nbsp{background:#AAA}hr{cursor:default}.mce-match-marker{background:#AAA;color:#fff}.mce-match-marker-selected{background:#3399ff;color:#fff}.mce-spellchecker-word{border-bottom:2px solid #F00;cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid #008000;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td.mce-item-selected,th.mce-item-selected{background-color:#3399ff !important}.mce-edit-focus{outline:1px dotted #333} \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/skins/lightgray/fonts/tinymce-small.eot b/common/static/js/vendor/tiny_mce/skins/lightgray/fonts/tinymce-small.eot deleted file mode 100644 index 128a98f3d81337dbcab72a183ac19914b3e2c5fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8348 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 G-2V#}OT3@} diff --git a/common/static/js/vendor/tiny_mce/skins/lightgray/fonts/tinymce-small.svg b/common/static/js/vendor/tiny_mce/skins/lightgray/fonts/tinymce-small.svg deleted file mode 100644 index fd5e3ff4d2..0000000000 --- a/common/static/js/vendor/tiny_mce/skins/lightgray/fonts/tinymce-small.svg +++ /dev/null @@ -1,175 +0,0 @@ - - - - -This is a custom SVG font generated by IcoMoon. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/skins/lightgray/fonts/tinymce-small.ttf b/common/static/js/vendor/tiny_mce/skins/lightgray/fonts/tinymce-small.ttf deleted file mode 100644 index 7b50bfdae94f6efce635dcc26469ffb77c123a97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8164 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 diff --git a/common/static/js/vendor/tiny_mce/skins/lightgray/fonts/tinymce-small.woff b/common/static/js/vendor/tiny_mce/skins/lightgray/fonts/tinymce-small.woff deleted file mode 100644 index 725aaf19e21fef9e2510c6934bde9f52f042afe3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8340 zcmZX4Wl&sAwC&)7Lx4d-U~qSLclY2vxRW43hY;K?xVr=k?jC{;1b26b06`w#efQt( zs#RTUoz;7vv%9LRy8C#k$;zr}YpVeO;A8+g;H~k+1K|Ga|8J9$l?4L;a6kZnbQ1vJ zC?g>r2$Pl7RsjG$oV>Y7-arb8?&Ow}mXQSj$liQ_4{rbiECGmWT5Oze8vPqrdV?9; z%8Iz9lez1g=K03c-r|lH4yIY!TANz|0OS~N8v7e~U*5%b+rEi!n(!MZe*-ll;C08= z$a_`zF_-x@JjLar_zZ#lu? zZ`yx(zyJgQz&mTu;ET7`U{mfYgf2g>QCu@GIa$&NS<$YrASgL32vLI_MMGR2E+q*2 zL_>Jwy~H9A_y+-r09OVGw!lSX17E32$>iMwg0CvXYa7)U>e@ZeTuv2W1(z%TCZEsJ z&JDjn#xr;v=Bo4?=9H-+?Cc7O%&lr-*H`y+vdw|!PnO$591M{PCucnf8o|NS!QYT+ zSPde$7A!v&q8z))pb~B=CkY34h}UGj<6))rDhGcamMSUP0m?%dV0j9NV@*k z42Pj#{Xl8qeR$K@+LlM${SAJu$<~aNUt82<_STHTs}(wHx>xw*>DD%W?(%>fMkdX7 zYt%V?sEuyCO}vu&gjuFI1gRMGEQs71E?|Y~*6{UWv3C)TqW-JAzGNyhg_2zG3B9~v zWK(P}FGpdlMZkwpD}DHM;@NbfvO*$W!<*kAr^N}wu|3`Q7Rnh^owS{-<0<%dIXB<9 zO%1>-$!p0Vg{WfTLzY9Q!*$p@yYgf7)FGAK&zrhN zSpz1Y;!iMNyO5iRMvX`9C2D_K0{P71$zm3m?jgEeW@GlM>JVsfYvB_E%VUsv>L#JU zOiQo#>_@vJbKfQ5pA%PtdRtsu=P~5(U+teFzkZ5%mG`SV>+qeg)}L!t_>fpaGj2E4 zB=JegvVZ3rG3Go^l`1b?vjW+yxA!O&L*?mvSQAg?s_>6NDCoC=--^3hzi9UHxq0u8Sh{QF&>p81cbT{$uyyG2keW2?0W7t6jhyWPdTN1mYd zUlRfXhvy4YxISN~>@G-#3{&yMsfuaAk0N7k=iA2T=cADPCY%G~jP*(l5VAAa`4 zMV1{?OT_aj8%>l4DJ45kwp_2i-n6Hd7|>Puy0@is;k_l zBW9pTIvHVxh?fOdd`?ryLrPJN%lZ7LT#)K2c7Xqnb@YJHyKU`iasOXKt#d2YI8}5d z{gsa@1X=@Q=hPRGHL=35jR0dqNUl=J(n%gd@0GtdY$Wut@^O_V zRe@Z~RL~f?;q|>C^`aKlF-@ZENy1O3`K$~s%JXpFOXAo0r5Cl5QLp&&$5;Cb8_ANk z2WKvp8dBZNsfBN~y%Si(Oeyy7ndZbj+(i==+C{Fu(==zNe# zNc;WwTlIF=7o7F{&k37jiL;)66teEz?gkqM2cB6cUg?QL$Q)NPoCM3~WX{VzQFsx~ ztAYH|H>+1Im_=`;Ly2E|%(DK!kIz-UjXV6X8 zT@6>(4@T%1x=DM^DDnI5@awA;q5R$FFJzllr|C#pVLgPm0YKv1e2LEvXj?Uli^_n@3;p zHv_`KUu0PpS=NI7%rVO{O|3NT-QUAiu9R{2%Y9nL7nG0vEy3AIBVF>>4pi8N35JEs ze?rMB$iFLuuh`C)(S?VmB@5II&lS`J!(S#p!pmL_Xfu7(zXYV9HN`2m3AZ*Gu!zd?Ak;5wlIi;PZNma2%IAPE!{VxEGeQb zGlCC}3Q@J?9=#azH(z${IYDPY{mlb^e};GQQ09#5m8 z2HG^G$z@WJVT1N7Se7EXb;?5QEHtF5ojaH7_dx@|vKIAdkFV}upRJjj>;KfH}EM`L3D-xF$w+)%9KR=nVa@&y3aJ75Dpa zV-;Rv)JrmrSjwra3Y#+Nc0~usXSc4t`hk+R&hJ$j!z(B!Arv(BBMdOR?yVR7UP~9EGw&N{J!{ko%E{oD*ik3_vg(jX{}h^ zPLm4>)gcD!uQQK5SGEG$wT zE5doZ4jU-s-5rOpdz}fpUJ@FRv)Nn&J_Ica1rF%X!l+xm`A&*c4TjXkXw7SDls98p z*}L>Sw64dglb@WE@Aw~{TnOC76@hT`n?>k$_phtxB zCWCs~DZ!p(p?)L!V>!FjBMn*Wq}O%nh>Il%VWztHX_Nc?8Yp@a!`YL&eKov7q|z7G z@|w!ffe(^THw*#NmW^|RgC`49*aBkp=ail!FFd4_yEi?I== zNee*z-G5=du+;u(rHg@%tKXUn3x8m}LA&Vrvtnfa5!aC(bU@}|ig7O-Z=^oGpAzva zC+xI0#1n1D&*wCdn21wGq6<8H>V)pJFLNQSL-WSywmwZ9LjkX!CM@3bQL&R;$0-o0 znh_b~kcMgb+t`f2S_BlGN(&xd_F?=UtA?S6v&FW{lD*AXH;iy5WcC}y=IUhjWxc40 zS7vu(b5QsNLe~g+njLvs&^gwgFZqL%UQ|wipp?`29h?jX~*<) z-Y7eNY>rWj;e{n4$(R~3cbm7LhE9AFEob-z>vm!^Qxo`>E5B z05e4u%~Y0A2^5uAIYkO9J-qC<7`#EEHmmWkof7~1vO(Q?%=c#hJPSgsj1;CH$9LyvSv35T5oD2!P7hh*3KO}UxRNxd` zVA61`f9C5cN*%#?=9SL8y{@3x_t|0E<6Gmtw(oj|5=sme+?feE-CxHC>GhxLS`xB1 z`3P1dVi&VKYb5FwG=6ZtUE%y#t0Up3FS}@lx1UDTFIpcK1XQ7CKm;xO%%T=#VY=mf z$tnRh*%gxaHd|d!XKdGIRFO0H_-L zW*Q{qL>(#;*_n991+|~UPv`8O-p30UZ*{cmuED>=>b7sZ_vei>*x+fMMa#q<2JV~2 z^DPLV*o}9^>aWi|?pq5BYAhf& zlJ6UkSa4pgb#O#2tz8@v3))?3PXsxg%ZnRQW<}Ud%N7`YjcxZ;caetH(Fp=$ne+b; z;LujFa&2!&$`|eW#)6ZlB7GSn<;G?1XSF2aH9V#Bi`r&%cU%cs)#Ya)Ohc?fq2e9C zpjO6O@i+3nWXhb^;elG-9mM-#8-@30H%XsaM9g$Br}XtkjqBrO@~RmUK&6bm+a->C zRSzd&=N>Q1G4r*NY3RKUs^t9HxR{U2zLH!IDz%x86ZTcwv__3Fs)<%vB7z&mC`m}M zrdKkh7E#fn=+>simXCrH25{HKRTfb3(lFKy<6creK5eg7)aWEvxDPz7sU`u*a?}y{#Y2wA)0qTM?Q!I73y{oQI)i+IVPACk6?1 zAWl_)9sJ~rG;=>aY4&)T{wKR5@G3)j zw{S^GGj>72obmY=dDu{abi_1yGDvn@2tX5f@%(P$+b2g;( zdYsk2JZO*B)TPZfEva}Uouqyq0mhn*Q84H#Nm#!CND zGlWkQ0U3{A53eGq2eIO=*`xetc{Jy+I3;Jcc!9E;RZ02S-o>MeN%cs{fg3gN@7elm zU((jd9dBXg1QF_DGPyl&pEV*ZQn^q%Z$aT+0&qs^)I!l7P4MMyL%&6#ttTB}( zn%Te0Cn(IDwr-=js&M1x?G%vPUzY0ve+t6|@vy}Q>pYmOzl1%W_H`M@NIlOdvEh2x zeLlRh4^u6`@p1Uj1T`dg$NxwOz1y?ymv29a-F)y2|I7$W&s!}0^#6;de^D~c^%X7j$=o2s))MNAgJ zs$6;CRaacsd|Qc!iUs4XN`}kkif)MFQYC%92J#j;h*j~}+~$ZNsriz>yGeFZ*;vb! zQEug{6xl~v8V@mj23+3ht!rH{Y`_U_EMq!IB@d2lqQ|M9^KFWq3n-CJU;OLiCfU?! zt4I&^b2?Dp!DE#Xyw?Khpnp#j_S-DyDBB+A!0rAxSZ zC6#6;@*~%KBk{cU$xvvyL5Brp<@gB}H$+FROfL%D_ZUhSQ&q9TuUF|o$x z%eQAKV_0=pGJ3I%$mWK(rGW6%{vrX-+bUNUlV3Vz$60W&!oXTc>5$uHKeD)fg!A~F z+eZnfiuwYMjhenmB3EB0I0u3N+8;+432g~4N1fRUH+6_hNGnYWqsrsuy9``9bOaKG zBTI1f4(aton=(1|9~(5M%kz78(IW|ox4=E5b?HxJX&UcCg_rY62p#!XvKs==rK9-^ zsc2pehRg<*fxHjnzEd5CIUdO$o?d7ZM>2jYVgFeD@wr>0a?0H)Ag#Z!jf(Aj-AE0r z=+RUB=*LR0*i9R2ri#TgPu}`(D*oB-rx2n7=1+y*0W&FDM|Xi6Y-WHDa`BKTVetTK zk^y4#=~Uzs>o~D%zepU^EI*3!&(SSEDW_n<>-VF`t8vAQrDqHN zBw?ielfD3hoFe@xmRME0hXxP#GJ_2WdNP@n_47ke{N_O^OF3fmm*m7ls@0pf>|7uV*K^95FNUEkS?MDiqgNjRPe94h}&3G20=UvJ^AR#8JupM2d!RMsEVFK za(W~ysP$z+E}@0HWm3{sRy*8tX)RYduP$DlJN_&94B3S^@AQu#t=aA$CT6kamf2I~ zKrMbWTas9K*>8nGayLK-^fD0Wfp5}T`O71pU9LT-C$%T#SfD~eNi5dL4sklJiVOD$ z0&_qF6GV}S7oP*iXg0VUfb2h#o1u3}rP`G0+0Gd7og_n-O7xf4+JfXYvOS^ymZXyY z_UiN(m|@NtcJ=l4w%W?j)5%ayuPE5JNhyVKZB6sI`F($M^017^^$%B2|rn}=^S^UGVb8`Ym$7t-l zk!%_|8k}YWQLx&)(J!+AS1Dn3qUQp{pxGT1Q z6g#E)jl6oQrjcQ50gCr1zSqHYuCkjP_o|5ufvEU|6@JAH#JnKv7vnnLNXf4d6cUg| zzgX}7`{x{gH$W;Mzjc)|n<%pHWj^5`ug=XD9(=Gmg3jUU^(nseo`0aMysw{I(Anx^ zi0Lf{sgTB`rP{@c0=sjXTUC%EAweZcwR21pCwAhuZ8@$zr)=Xolq0I z5%G;{LATix*$>}-msOa=H9+6dQH6N4wCu%ocRm;v|DL-e)~Kr}06@Er`f$8>^)t`! zMCjw1#z5dNsuHkU%wni;DaQ0m@G3gP?2-temK}t3%(yD`K~(UAq0J!K(Pe^(->(pfpoumxs+KisDI#$->~kkyd)z$+=`30GMhGqmJtQpHukqd8^lP;1q1-Rq zvduZAZuzwEk1=i#$4cyuPWBkte;k^UPtO-A9;5sXdvW4D9e8c_EuwJKJOb0-jyKZS zl$DEgPu3EJlFGu6TK8%{El>=Ks2>Hd5{e+jzQ#3asVkmBV`L(HWJngDth4a+)U>B` z9ER9Fww=?*2r8n^Ym6dv7g8S!wUvt5^TYjBnSX5lRqp9R5LiZV%O)MMM!b9GneMAu z=yt&I*r*XbURlyjyR)fNE<|BTS43{D_XDl9HSk7010C`CRKhoO5%u+IIj_=U!q%VM zcfl*c*KbsR31pR@MlMd0rK&K7+3!AKfcP#2N16PJN*Ga7QhfrUK`n9|#JYMthrxKGc^McjSzTdE@`f>J2isjaw7gqdCtkhG6y$%=n!?ZHN)WQ+uNuVc; zK+=LS1gi{x*nMPg(M5UB1o1Vr`vW}-EP&;yvRu01U=v|@+47^NbXk**KRhb6vj=p$ z)N{ag5m2yTtE)^m;ad6{F(2I6iP2q8H12c9-pK?S=aVD>)$pGbA*h`Is(LBpReNEe zZcS^*^(Pmzy59%7_LqqKpSl8+qM;4r6(k35>(fI55tR5BQO1W}GUcMTPZBl?F!7n+?UUf91YIuC|2v;jY)xb}kzWo@7`2IgZFMS8Rr`U;vW z8VkRSn&}SI&$C=js$R9h5UBr=FR+oB+UnA4tdycIpIP9`Ek#|rwIDMeOr)?J`nFkn zS&aEMAemmXKf=A^S5Q9_Un{5NMTM!aymG)_NWmeCk10S4Y)inq@t2h&3lD!X=Aiz_ ze@hW@`WNCqvSCJ~i~C8liTT@XN;NiW-98dsQ2F-|sUy4-=~s`XSN8zdNA<7F-|&wT zest0&t4JMWxkt#-Q4 zZxm;`aPU;Pef=xVxF)CaT6$h6W00USUL2;r6XN`K=Apu=dgY5hco|&aEyxr}Xxc58 zzLQ?WgeiFCo$#scCT>49uHQ?EB_c1t?N$$FX#0Z3608BVOY^B%iA<{zO!cYVsw8dT zX&a2qxMkXkbz^rw4ESz5mS$TtHsS0c#v=tCT|--hcwPDT#7s*OvR*>FpA~nsQIoOEGHtgAzN=FWNMd z3yaHMR<)hu!Scg_4*Zi*S#T~e#3TP3Nfuau@FW#2%wEUwd|U20^1isqYi4`lw*tMOuZBNgL|O>HlfM^UvWI`44!ku! zL891%vJ^wc3l7289?pjic1mAl*^43E$nN#w&q?(BDuw&QjqZrVFd(zVZDczB5BYE- zXWj0vFe0m3(nZE3cL+U&{KujAYACD>fq4V$&KC0dbIB__Z4C@geitLlNJkHcKyKd2 zu50)11#+u<6xFi32eTY-Asbp3kU^E`vv8!-aHhh^OHYEUp2rMtfiIe>JjwsbZ59#B z9kvf$dA5?Yg#Yz8dxM;w%%3u=q-7^s%0f_j{3!z|n~ow5yjTYdqfou&7#WNt%SEMwX+F8(d5C_bH1E8Q61BW?`GhTEb7GLB%v zEe;)V(GVx83+PCNw|z+pt&yrA2WdVRraTt7nv-83tmPxjvyb#32eK=_Fo$rLg5y5m+X1{~D<*i*EzAC%alOChB_?LW4GXR7m zxL|VXpg#-Ap!o7cZ|~kr87mgU-gZQ+EAv>fpAG`O_GBLdA3Ty3F(21+oViEUPR(Y! z;h*=#u%3%*@OR08Pq%_y&G7+IE*E!UTw)BW?Zv zXI5rr8weJt$T(&eW{8qnUVEeygAr@v?Jw2m6y$Ai@hkAN8u!_4mL4MC9!B+;5IP0(t-i6#z#PgZ%A1c4H%O zq3RgY>x42Lmt7ZKI4)ly%)O(`1Cjx#pMxICbXvI5t+?7V0ifI~bt2)=@?;wydA9BN z1me?U^bQe>G~I|hg+3tJ8Q zJqZ++v|o*ODu$DB9eA1b-3sK=u$&-c`s!4aduXG3|DImAF#r1C>-iOpPyLg2QA;ar`a}a$G zGD6nw!2o2MBJKVc&msswi;Rr)4H>L!b^&2WnL)$A5(kjViUK*zyD5@#AnOtht0ko8 L?FR&Z0OJ1xJUq%= diff --git a/common/static/js/vendor/tiny_mce/skins/lightgray/fonts/tinymce.eot b/common/static/js/vendor/tiny_mce/skins/lightgray/fonts/tinymce.eot deleted file mode 100644 index b769c2c6611cc18f5cc9ec35528d9924f3a5541e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8276 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 QJ?PKAbfGBe`tQ~M1DmY - - - -This is a custom SVG font generated by IcoMoon. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/skins/lightgray/fonts/tinymce.ttf b/common/static/js/vendor/tiny_mce/skins/lightgray/fonts/tinymce.ttf deleted file mode 100644 index a31b584c2bc361084bfd1745ccaee5b70181e4ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8112 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


    geWSell!|GRp<_hLGWxI@5bh$gS##zwF$Wj> zT`njhmGfLBJ+1Z!;Xs~(UebC{QVjE}UlutJ3`{Mn3MwAU zb8W1%8W4delcA8?Mim+V}smbf^0vdWtifqduifdt>{t zHo%c>!kR1)?*VOpW5aDZ_7Am+C(844SJik8!#m&}yn8d<@b{Am(N`YC&KrJ@-!Wpd zHU^1aO;IFwe985bJb$!*2*Hj@ivWQi(BFrm)i

    ^0jpb9P<1G1GFXVz|iN5e_&@f zat$p^V4BKRbNy#A8ZK_FOa6Y>-sUU4Wn%y7%FJ8SyLQQB7bEs=>LVV3G zhov)?>sI_qG7cKHp!`F;^u^f6^@=8}&~Mj{*0)2!*26Wx4d+*3H-3a$7_RUHS6{Ph z`C#t!KdPvswye$X@A>by0-=V2@$r^CXAcC3S9;u;##EN>EEI+uN&(3=FNOE{HQkZi zc^8wBwdBi8rQfjTyufE`Sa52@Go@lD3dmODwxY$9U9vQVpOch01(7rfCR?WY)p$ld zBhnRRPq?Vcp7%?``5ZqivFm`p>@AX2M{jVzB$a)RhYy;yS$qS%S#yg#436o%>QsJE9lXk@hdu92i3CzxVjy##S;ESx@g?Kxs z3o#y7?cXoJ1vgZ`Eh;GlB-7?5)s=oq*9Ca5>x z!)tFwgNb(TH!Ds(O{_+SXz6k5NPWqZK@KbPpcH3K_)7Ay10Ip!Nyi^;Y#eWr z-H%u1Ig=-q$l(dzddvi3VL}E(eM=(!qhUt2xQ>P7*|kC7Wiqe0+8~V__#(ez>7#7c z#>}@~R1x(rN(i6%U9D;`zOkosXtXUZi)-X6T1J?Bp^!4-E8D&Mb}*!<8J5KKr`+vv zt|0eMFTD2;Z*d%cN?uVN1i4ap>`kocTdiNmYlJP+Dze1k#mdvP0y!Izp$qTw;hBnh z@?h5h>9m)G&}!InP`pBz9TnDa%Zi*AYsuwWh#X2!d37Z`;<7kCdsyg3b{c`R!rrnK zJD9T5`&_6y`?{d83!1$RCFR2mCzaBTz=Bk+K z3jmIxQQzoQd==d-w=dWlGyB0&xh)%2=>OcLCg=yFfX_1_{Xpp~oQ z*qNn3F&`&0u5o0d<%9pi^AARL!)Q;gUmZ>#!vv8--_Z6&(XV|wW`EM+@SCafj_NvC z4$5O7&&G}Nv+iOK;i^Rly+@po{3g#77>V+848<*!&f}QBB=mH3M#YZ zEUt5wd6z^XbFEUCss3slB(c~~tl163M_l~plWgX{{P_6wUatpyi zosztl@}x#S4dc$RXY`7tEbz0id_}9bE=GN-9+9dnM!SHdvrc{*92VY!+gV?iB1pi4 z@2Q+9K`$2XytOnR@?qFm-flZ;yETq9KX!*cgn=wei1zreliY`vyE_unslFzyQ@CKWcD{m+N<0seiV|8 z35gmjTcqG_83l{|E6X>`2T!rgHoFFxO~+N2HP7kmYOM+U<&xcGFUm z#aMHH`~E91+t%Yeqv{v!DF*gMzO9ktvhslP-4ETlxS+&C$)yz0srb15&cFYq)c)|6 z>cB4P70Q%Zj0qAvrjdyethg)C0_uhk0AB>K`9IfMm>6Yr zb`E!T9rmR3cXn=~gFDz|*=t!@S=lPtIXZ&?!9$qw`)S>qmw{U_Fgqb17=*Wk2X20H!!9Ibt7Gs;FHWT`;B3_5r-$(;I5w-GtYhl z!W&-*DOwAn=j5`|h%_nmT0=05t%yYSiG0)Rv!Qq@^m$#k2ZMwJ>g{xDOooE_I0_#X z2sum!MahJk-K=KvA&n0ww z__&<)9*QNOfO&7g+h&E+}5;RT%u?*QUe_JA39lXf=a#EbqU?V4qYYHf z+Kj~->h8(fqBpI}yt4hlShTij9db{St|+DVt=D@O$xnFTLcXNtkC!*=Ah@tR?J`^# zWt-W$o|2Q3!; Q|9KxRIw6}F`~k543putNr2qf` diff --git a/common/static/js/vendor/tiny_mce/skins/lightgray/skin.ie7.min.css b/common/static/js/vendor/tiny_mce/skins/lightgray/skin.ie7.min.css deleted file mode 100644 index dfa0e4e190..0000000000 --- a/common/static/js/vendor/tiny_mce/skins/lightgray/skin.ie7.min.css +++ /dev/null @@ -1 +0,0 @@ -.mce-container,.mce-container *,.mce-widget,.mce-widget *{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:#333;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;-webkit-tap-highlight-color:transparent;line-height:normal;font-weight:normal;text-align:left;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr}.mce-widget button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.mce-container *[unselectable]{-moz-user-select:none;-webkit-user-select:none;-o-user-select:none;user-select:none}.mce-fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.mce-fade.mce-in{opacity:1}.mce-tinymce{visibility:visible !important;position:relative}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%;z-index:100}div.mce-fullscreen{position:fixed;top:0;left:0;width:100%;height:auto}.mce-tinymce{display:block;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mce-wordcount{position:absolute;top:0;right:0;padding:8px}div.mce-edit-area{background:#FFF;filter:none}.mce-statusbar{position:relative}.mce-statusbar .mce-container-body{position:relative}.mce-fullscreen .mce-resizehandle{display:none}.mce-charmap{border-collapse:collapse}.mce-charmap td{cursor:default;border:1px solid #9e9e9e;width:20px;height:20px;line-height:20px;text-align:center;vertical-align:middle;padding:2px}.mce-charmap td div{text-align:center}.mce-charmap td:hover{background:#d9d9d9}.mce-grid td div{border:1px solid #d6d6d6;width:12px;height:12px;margin:2px;cursor:pointer}.mce-grid{border-spacing:2px;border-collapse:separate}.mce-grid a{display:block;border:1px solid transparent}.mce-grid a:hover{border-color:#a1a1a1}.mce-grid-border{margin:0 4px 0 4px}.mce-grid-border a{border-color:#d6d6d6;width:13px;height:13px}.mce-grid-border a:hover,.mce-grid-border a.mce-active{border-color:#a1a1a1;background:#c8def4}.mce-text-center{text-align:center}div.mce-tinymce-inline{width:100%;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-toolbar-grp{padding-bottom:2px}.mce-toolbar-grp .mce-flow-layout-item{margin-bottom:0}.mce-rtl .mce-wordcount{left:0;right:auto}.mce-container,.mce-container-body{display:block}.mce-autoscroll{overflow:hidden}.mce-scrollbar{position:absolute;width:7px;height:100%;top:2px;right:2px;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-scrollbar-h{top:auto;right:auto;left:2px;bottom:2px;width:100%;height:7px}.mce-scrollbar-thumb{position:absolute;background-color:#000;border:1px solid #888;border-color:rgba(85,85,85,0.6);width:5px;height:100%;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scrollbar-h .mce-scrollbar-thumb{width:100%;height:5px}.mce-scrollbar:hover,.mce-scrollbar.mce-active{background-color:#AAA;opacity:.6;filter:alpha(opacity=60);zoom:1;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scroll{position:relative}.mce-panel{border:0 solid #9e9e9e;background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fdfdfd, #ddd);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fdfdfd), to(#ddd));background-image:-webkit-linear-gradient(top, #fdfdfd, #ddd);background-image:-o-linear-gradient(top, #fdfdfd, #ddd);background-image:linear-gradient(to bottom, #fdfdfd, #ddd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffdfdfd', endColorstr='#ffdddddd', GradientType=0);zoom:1}.mce-floatpanel{position:absolute;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2)}.mce-floatpanel.mce-fixed{position:fixed}.mce-floatpanel .mce-arrow,.mce-floatpanel .mce-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.mce-floatpanel .mce-arrow{border-width:11px}.mce-floatpanel .mce-arrow:after{border-width:10px;content:""}.mce-floatpanel.mce-popover{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);top:0;left:0;background:#fff;border:1px solid #9e9e9e;border:1px solid rgba(0,0,0,0.25)}.mce-floatpanel.mce-popover.mce-bottom{margin-top:10px;*margin-top:0}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#9e9e9e;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;background:#fff;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#fff;position:fixed;top:0;left:0;opacity:0;-webkit-transition:opacity 150ms ease-in;transition:opacity 150ms ease-in}.mce-window.mce-in{opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #c5c5c5;position:relative}.mce-window-head .mce-close{position:absolute;right:15px;top:9px;font-size:20px;font-weight:bold;line-height:20px;color:#858585;cursor:pointer;height:20px;overflow:hidden}.mce-close:hover{color:#adadad}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:10px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#fff;border-top:1px solid #c5c5c5;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window.mce-fullscreen,.mce-window.mce-fullscreen .mce-foot{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:15px}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:#fff;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-inner{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-tooltip-inner{-webkit-box-shadow:0 0 5px #000000;-moz-box-shadow:0 0 5px #000000;box-shadow:0 0 5px #000000}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-n .mce-tooltip-arrow{top:0px;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-btn{border:1px solid #b1b1b1;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25) rgba(0,0,0,0.25);position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fff, #d9d9d9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#d9d9d9));background-image:-webkit-linear-gradient(top, #fff, #d9d9d9);background-image:-o-linear-gradient(top, #fff, #d9d9d9);background-image:linear-gradient(to bottom, #fff, #d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffd9d9d9', GradientType=0);zoom:1}.mce-btn:hover,.mce-btn:focus{color:#333;background-color:#e3e3e3;background-image:-moz-linear-gradient(top, #f2f2f2, #ccc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#ccc));background-image:-webkit-linear-gradient(top, #f2f2f2, #ccc);background-image:-o-linear-gradient(top, #f2f2f2, #ccc);background-image:linear-gradient(to bottom, #f2f2f2, #ccc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffcccccc', GradientType=0);zoom:1}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{background-color:#d6d6d6;background-image:-moz-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#e6e6e6), to(#c0c0c0));background-image:-webkit-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-o-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:linear-gradient(to bottom, #e6e6e6, #c0c0c0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6', endColorstr='#ffc0c0c0', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn:not(.mce-disabled):active{background-color:#d6d6d6;background-image:-moz-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#e6e6e6), to(#c0c0c0));background-image:-webkit-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-o-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:linear-gradient(to bottom, #e6e6e6, #c0c0c0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6', endColorstr='#ffc0c0c0', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn button{padding:4px 10px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#333;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px #fff}.mce-primary{min-width:50px;color:#fff;border:1px solid #b1b1b1;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25) rgba(0,0,0,0.25);background-color:#006dcc;background-image:-moz-linear-gradient(top, #08c, #04c);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#04c));background-image:-webkit-linear-gradient(top, #08c, #04c);background-image:-o-linear-gradient(top, #08c, #04c);background-image:linear-gradient(to bottom, #08c, #04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);zoom:1}.mce-primary:hover,.mce-primary:focus{background-color:#005fb3;background-image:-moz-linear-gradient(top, #0077b3, #003cb3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0077b3), to(#003cb3));background-image:-webkit-linear-gradient(top, #0077b3, #003cb3);background-image:-o-linear-gradient(top, #0077b3, #003cb3);background-image:linear-gradient(to bottom, #0077b3, #003cb3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0077b3', endColorstr='#ff003cb3', GradientType=0);zoom:1}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#005299;background-image:-moz-linear-gradient(top, #069, #039);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#069), to(#039));background-image:-webkit-linear-gradient(top, #069, #039);background-image:-o-linear-gradient(top, #069, #039);background-image:linear-gradient(to bottom, #069, #039);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff006699', endColorstr='#ff003399', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-primary button,.mce-primary button i{color:#fff;text-shadow:1px 1px #333}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:1px 5px;font-size:12px;*padding-bottom:2px}.mce-btn-small i{line-height:20px;vertical-align:top;*line-height:18px}.mce-btn .mce-caret{margin-top:8px;margin-left:0}.mce-btn-small .mce-caret{margin-top:8px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #333;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #333;border-top:0}.mce-rtl .mce-btn button{direction:rtl}.mce-btn-group .mce-btn{border-width:1px 0 1px 0;margin:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-btn-group .mce-first{border-left:1px solid #b1b1b1;border-left:1px solid rgba(0,0,0,0.25);-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.mce-btn-group .mce-last{border-right:1px solid #b1b1b1;border-right:1px solid rgba(0,0,0,0.1);-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.mce-btn-group .mce-first.mce-last{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fff, #d9d9d9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#d9d9d9));background-image:-webkit-linear-gradient(top, #fff, #d9d9d9);background-image:-o-linear-gradient(top, #fff, #d9d9d9);background-image:linear-gradient(to bottom, #fff, #d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffd9d9d9', GradientType=0);zoom:1;text-indent:-10em;*font-size:0;*line-height:0;*text-indent:0;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#333;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65)}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#acacac}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-colorbutton button{padding-right:4px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-14px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-16px;padding-right:0;width:16px}.mce-colorbutton .mce-open{padding-left:4px;border-left:1px solid transparent;border-right:1px solid transparent}.mce-colorbutton:hover .mce-open{border-left-color:#bdbdbd;border-right-color:#bdbdbd}.mce-colorbutton.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:4px;margin-right:-14px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;margin-right:-17px;padding-left:0}.mce-rtl .mce-colorbutton button{padding-right:10px;padding-left:10px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px}.mce-combobox{display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#adadad}.mce-combobox.mce-has-open input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.mce-combobox .mce-btn{border-left:0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#333}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#666;color:#fff}.mce-path .mce-divider{display:inline}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9E9E9E;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid #9e9e9e;width:100%;height:100%}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);border:0;overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-menubar{border:1px solid #c4c4c4}.mce-menubar .mce-menubtn button span{color:#333}.mce-menubar .mce-caret{border-top-color:#333}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:transparent;background:#e6e6e6;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-menubtn.mce-disabled span{color:#aaa}.mce-menubtn span{color:#333;margin-right:2px;line-height:20px;*line-height:16px}.mce-menubtn.mce-btn-small span{font-size:12px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-menubtn .mce-caret{*margin-top:6px}.mce-rtl .mce-menubtn button{direction:rtl;text-align:right}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-menu-item{display:block;padding:6px 15px 6px 12px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-ico,.mce-menu-item .mce-text{color:#333}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled .mce-ico{color:#adadad}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text{color:#fff}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:#fff}.mce-menu-item.mce-disabled:hover{background:#ccc}.mce-menu-shortcut{display:inline-block;color:#adadad}.mce-menu-shortcut{display:inline-block;*display:inline;*zoom:1;padding:0 15px 0 20px}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item.mce-selected .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:#fff}.mce-menu-item .mce-caret{margin-top:4px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #333}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret,.mce-menu-item:hover .mce-caret{border-left-color:#fff}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item-normal.mce-active{background-color:#c8def4}.mce-menu-item-preview.mce-active{border-left:5px solid #aaa}.mce-menu-item-normal.mce-active .mce-text{color:#333}.mce-menu-item-normal.mce-active:hover .mce-text,.mce-menu-item-normal.mce-active:hover .mce-ico{color:#fff}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:#fff;background-color:#0081c2;background-image:-moz-linear-gradient(top, #08c, #0077b3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#0077b3));background-image:-webkit-linear-gradient(top, #08c, #0077b3);background-image:-o-linear-gradient(top, #08c, #0077b3);background-image:linear-gradient(to bottom, #08c, #0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);zoom:1}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:#cbcbcb;border-bottom:1px solid #fff;cursor:default;filter:none}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-menu-align.mce-rtl .mce-menu-shortcut,.mce-menu-align.mce-rtl .mce-caret{right:auto;left:0}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #333;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:#fff}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:2px 0 0;min-width:160px;background:#fff;border:1px solid #989898;border:1px solid rgba(0,0,0,0.2);z-index:1002;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;*display:inline}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#333}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent;border-right:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#bdbdbd;border-right-color:#bdbdbd}.mce-splitbtn button{padding-right:4px}.mce-splitbtn .mce-open{padding-left:4px}.mce-splitbtn .mce-open.mce-active{-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-splitbtn.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:10px;padding-left:10px}.mce-rtl .mce-splitbtn .mce-open{padding-left:4px;padding-right:4px}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#e3e3e3;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#fdfdfd}.mce-tab.mce-active{background:#fdfdfd;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);display:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#333}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65)}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px}.mce-textbox.mce-disabled{color:#adadad}.mce-rtl .mce-textbox{text-align:right;direction:rtl}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}@font-face{font-family:'tinymce';src:url('fonts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce';font-style:normal;font-weight:normal;font-size:16px;line-height:16px;vertical-align:text-top;-webkit-font-smoothing:antialiased;display:inline-block;background:transparent center center;width:16px;height:16px;color:#333;-ie7-icon:' '}.mce-btn-small .mce-ico{font-family:'tinymce-small'}.mce-ico,i.mce-i-checkbox{zoom:expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = this.currentStyle['-ie7-icon'].substr(1, 1) + ' ')}.mce-i-save{-ie7-icon:"\e000"}.mce-i-newdocument{-ie7-icon:"\e001"}.mce-i-fullpage{-ie7-icon:"\e002"}.mce-i-alignleft{-ie7-icon:"\e003"}.mce-i-aligncenter{-ie7-icon:"\e004"}.mce-i-alignright{-ie7-icon:"\e005"}.mce-i-alignjustify{-ie7-icon:"\e006"}.mce-i-cut{-ie7-icon:"\e007"}.mce-i-paste{-ie7-icon:"\e008"}.mce-i-searchreplace{-ie7-icon:"\e009"}.mce-i-bullist{-ie7-icon:"\e00a"}.mce-i-numlist{-ie7-icon:"\e00b"}.mce-i-indent{-ie7-icon:"\e00c"}.mce-i-outdent{-ie7-icon:"\e00d"}.mce-i-blockquote{-ie7-icon:"\e00e"}.mce-i-undo{-ie7-icon:"\e00f"}.mce-i-redo{-ie7-icon:"\e010"}.mce-i-link{-ie7-icon:"\e011"}.mce-i-unlink{-ie7-icon:"\e012"}.mce-i-anchor{-ie7-icon:"\e013"}.mce-i-image{-ie7-icon:"\e014"}.mce-i-media{-ie7-icon:"\e015"}.mce-i-help{-ie7-icon:"\e016"}.mce-i-code{-ie7-icon:"\e017"}.mce-i-inserttime{-ie7-icon:"\e018"}.mce-i-preview{-ie7-icon:"\e019"}.mce-i-forecolor{-ie7-icon:"\e01a"}.mce-i-backcolor{-ie7-icon:"\e01a"}.mce-i-table{-ie7-icon:"\e01b"}.mce-i-hr{-ie7-icon:"\e01c"}.mce-i-removeformat{-ie7-icon:"\e01d"}.mce-i-subscript{-ie7-icon:"\e01e"}.mce-i-superscript{-ie7-icon:"\e01f"}.mce-i-charmap{-ie7-icon:"\e020"}.mce-i-emoticons{-ie7-icon:"\e021"}.mce-i-print{-ie7-icon:"\e022"}.mce-i-fullscreen{-ie7-icon:"\e023"}.mce-i-spellchecker{-ie7-icon:"\e024"}.mce-i-nonbreaking{-ie7-icon:"\e025"}.mce-i-template{-ie7-icon:"\e026"}.mce-i-pagebreak{-ie7-icon:"\e027"}.mce-i-restoredraft{-ie7-icon:"\e028"}.mce-i-untitled{-ie7-icon:"\e029"}.mce-i-bold{-ie7-icon:"\e02a"}.mce-i-italic{-ie7-icon:"\e02b"}.mce-i-underline{-ie7-icon:"\e02c"}.mce-i-strikethrough{-ie7-icon:"\e02d"}.mce-i-visualchars{-ie7-icon:"\e02e"}.mce-i-ltr{-ie7-icon:"\e02f"}.mce-i-rtl{-ie7-icon:"\e030"}.mce-i-copy{-ie7-icon:"\e031"}.mce-i-resize{-ie7-icon:"\e032"}.mce-i-browse{-ie7-icon:"\e034"}.mce-i-pastetext{-ie7-icon:"\e035"}.mce-i-checkbox,.mce-i-selected{-ie7-icon:"\e033"}.mce-i-selected{visibility:hidden}.mce-i-backcolor{background:#BBB} \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/skins/lightgray/skin.min.css b/common/static/js/vendor/tiny_mce/skins/lightgray/skin.min.css deleted file mode 100644 index 86c4eac719..0000000000 --- a/common/static/js/vendor/tiny_mce/skins/lightgray/skin.min.css +++ /dev/null @@ -1 +0,0 @@ -.mce-container,.mce-container *,.mce-widget,.mce-widget *{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:#333;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;-webkit-tap-highlight-color:transparent;line-height:normal;font-weight:normal;text-align:left;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr}.mce-widget button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.mce-container *[unselectable]{-moz-user-select:none;-webkit-user-select:none;-o-user-select:none;user-select:none}.mce-fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.mce-fade.mce-in{opacity:1}.mce-tinymce{visibility:visible !important;position:relative}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%;z-index:100}div.mce-fullscreen{position:fixed;top:0;left:0;width:100%;height:auto}.mce-tinymce{display:block;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mce-wordcount{position:absolute;top:0;right:0;padding:8px}div.mce-edit-area{background:#FFF;filter:none}.mce-statusbar{position:relative}.mce-statusbar .mce-container-body{position:relative}.mce-fullscreen .mce-resizehandle{display:none}.mce-charmap{border-collapse:collapse}.mce-charmap td{cursor:default;border:1px solid #9e9e9e;width:20px;height:20px;line-height:20px;text-align:center;vertical-align:middle;padding:2px}.mce-charmap td div{text-align:center}.mce-charmap td:hover{background:#d9d9d9}.mce-grid td div{border:1px solid #d6d6d6;width:12px;height:12px;margin:2px;cursor:pointer}.mce-grid{border-spacing:2px;border-collapse:separate}.mce-grid a{display:block;border:1px solid transparent}.mce-grid a:hover{border-color:#a1a1a1}.mce-grid-border{margin:0 4px 0 4px}.mce-grid-border a{border-color:#d6d6d6;width:13px;height:13px}.mce-grid-border a:hover,.mce-grid-border a.mce-active{border-color:#a1a1a1;background:#c8def4}.mce-text-center{text-align:center}div.mce-tinymce-inline{width:100%;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-toolbar-grp{padding-bottom:2px}.mce-toolbar-grp .mce-flow-layout-item{margin-bottom:0}.mce-rtl .mce-wordcount{left:0;right:auto}.mce-container,.mce-container-body{display:block}.mce-autoscroll{overflow:hidden}.mce-scrollbar{position:absolute;width:7px;height:100%;top:2px;right:2px;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-scrollbar-h{top:auto;right:auto;left:2px;bottom:2px;width:100%;height:7px}.mce-scrollbar-thumb{position:absolute;background-color:#000;border:1px solid #888;border-color:rgba(85,85,85,0.6);width:5px;height:100%;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scrollbar-h .mce-scrollbar-thumb{width:100%;height:5px}.mce-scrollbar:hover,.mce-scrollbar.mce-active{background-color:#AAA;opacity:.6;filter:alpha(opacity=60);zoom:1;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scroll{position:relative}.mce-panel{border:0 solid #9e9e9e;background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fdfdfd, #ddd);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fdfdfd), to(#ddd));background-image:-webkit-linear-gradient(top, #fdfdfd, #ddd);background-image:-o-linear-gradient(top, #fdfdfd, #ddd);background-image:linear-gradient(to bottom, #fdfdfd, #ddd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffdfdfd', endColorstr='#ffdddddd', GradientType=0);zoom:1}.mce-floatpanel{position:absolute;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2)}.mce-floatpanel.mce-fixed{position:fixed}.mce-floatpanel .mce-arrow,.mce-floatpanel .mce-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.mce-floatpanel .mce-arrow{border-width:11px}.mce-floatpanel .mce-arrow:after{border-width:10px;content:""}.mce-floatpanel.mce-popover{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);top:0;left:0;background:#fff;border:1px solid #9e9e9e;border:1px solid rgba(0,0,0,0.25)}.mce-floatpanel.mce-popover.mce-bottom{margin-top:10px;*margin-top:0}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#9e9e9e;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;background:#fff;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#fff;position:fixed;top:0;left:0;opacity:0;-webkit-transition:opacity 150ms ease-in;transition:opacity 150ms ease-in}.mce-window.mce-in{opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #c5c5c5;position:relative}.mce-window-head .mce-close{position:absolute;right:15px;top:9px;font-size:20px;font-weight:bold;line-height:20px;color:#858585;cursor:pointer;height:20px;overflow:hidden}.mce-close:hover{color:#adadad}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:10px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#fff;border-top:1px solid #c5c5c5;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window.mce-fullscreen,.mce-window.mce-fullscreen .mce-foot{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:15px}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:#fff;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-inner{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-tooltip-inner{-webkit-box-shadow:0 0 5px #000000;-moz-box-shadow:0 0 5px #000000;box-shadow:0 0 5px #000000}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-n .mce-tooltip-arrow{top:0px;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-btn{border:1px solid #b1b1b1;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25) rgba(0,0,0,0.25);position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fff, #d9d9d9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#d9d9d9));background-image:-webkit-linear-gradient(top, #fff, #d9d9d9);background-image:-o-linear-gradient(top, #fff, #d9d9d9);background-image:linear-gradient(to bottom, #fff, #d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffd9d9d9', GradientType=0);zoom:1}.mce-btn:hover,.mce-btn:focus{color:#333;background-color:#e3e3e3;background-image:-moz-linear-gradient(top, #f2f2f2, #ccc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#ccc));background-image:-webkit-linear-gradient(top, #f2f2f2, #ccc);background-image:-o-linear-gradient(top, #f2f2f2, #ccc);background-image:linear-gradient(to bottom, #f2f2f2, #ccc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffcccccc', GradientType=0);zoom:1}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{background-color:#d6d6d6;background-image:-moz-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#e6e6e6), to(#c0c0c0));background-image:-webkit-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-o-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:linear-gradient(to bottom, #e6e6e6, #c0c0c0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6', endColorstr='#ffc0c0c0', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn:not(.mce-disabled):active{background-color:#d6d6d6;background-image:-moz-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#e6e6e6), to(#c0c0c0));background-image:-webkit-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-o-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:linear-gradient(to bottom, #e6e6e6, #c0c0c0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6', endColorstr='#ffc0c0c0', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn button{padding:4px 10px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#333;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px #fff}.mce-primary{min-width:50px;color:#fff;border:1px solid #b1b1b1;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25) rgba(0,0,0,0.25);background-color:#006dcc;background-image:-moz-linear-gradient(top, #08c, #04c);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#04c));background-image:-webkit-linear-gradient(top, #08c, #04c);background-image:-o-linear-gradient(top, #08c, #04c);background-image:linear-gradient(to bottom, #08c, #04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);zoom:1}.mce-primary:hover,.mce-primary:focus{background-color:#005fb3;background-image:-moz-linear-gradient(top, #0077b3, #003cb3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0077b3), to(#003cb3));background-image:-webkit-linear-gradient(top, #0077b3, #003cb3);background-image:-o-linear-gradient(top, #0077b3, #003cb3);background-image:linear-gradient(to bottom, #0077b3, #003cb3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0077b3', endColorstr='#ff003cb3', GradientType=0);zoom:1}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#005299;background-image:-moz-linear-gradient(top, #069, #039);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#069), to(#039));background-image:-webkit-linear-gradient(top, #069, #039);background-image:-o-linear-gradient(top, #069, #039);background-image:linear-gradient(to bottom, #069, #039);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff006699', endColorstr='#ff003399', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-primary button,.mce-primary button i{color:#fff;text-shadow:1px 1px #333}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:1px 5px;font-size:12px;*padding-bottom:2px}.mce-btn-small i{line-height:20px;vertical-align:top;*line-height:18px}.mce-btn .mce-caret{margin-top:8px;margin-left:0}.mce-btn-small .mce-caret{margin-top:8px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #333;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #333;border-top:0}.mce-rtl .mce-btn button{direction:rtl}.mce-btn-group .mce-btn{border-width:1px 0 1px 0;margin:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-btn-group .mce-first{border-left:1px solid #b1b1b1;border-left:1px solid rgba(0,0,0,0.25);-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.mce-btn-group .mce-last{border-right:1px solid #b1b1b1;border-right:1px solid rgba(0,0,0,0.1);-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.mce-btn-group .mce-first.mce-last{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fff, #d9d9d9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#d9d9d9));background-image:-webkit-linear-gradient(top, #fff, #d9d9d9);background-image:-o-linear-gradient(top, #fff, #d9d9d9);background-image:linear-gradient(to bottom, #fff, #d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffd9d9d9', GradientType=0);zoom:1;text-indent:-10em;*font-size:0;*line-height:0;*text-indent:0;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#333;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65)}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#acacac}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-colorbutton button{padding-right:4px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-14px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-16px;padding-right:0;width:16px}.mce-colorbutton .mce-open{padding-left:4px;border-left:1px solid transparent;border-right:1px solid transparent}.mce-colorbutton:hover .mce-open{border-left-color:#bdbdbd;border-right-color:#bdbdbd}.mce-colorbutton.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:4px;margin-right:-14px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;margin-right:-17px;padding-left:0}.mce-rtl .mce-colorbutton button{padding-right:10px;padding-left:10px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px}.mce-combobox{display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#adadad}.mce-combobox.mce-has-open input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.mce-combobox .mce-btn{border-left:0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#333}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#666;color:#fff}.mce-path .mce-divider{display:inline}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9E9E9E;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid #9e9e9e;width:100%;height:100%}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);border:0;overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-menubar{border:1px solid #c4c4c4}.mce-menubar .mce-menubtn button span{color:#333}.mce-menubar .mce-caret{border-top-color:#333}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:transparent;background:#e6e6e6;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-menubtn.mce-disabled span{color:#aaa}.mce-menubtn span{color:#333;margin-right:2px;line-height:20px;*line-height:16px}.mce-menubtn.mce-btn-small span{font-size:12px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-menubtn .mce-caret{*margin-top:6px}.mce-rtl .mce-menubtn button{direction:rtl;text-align:right}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-menu-item{display:block;padding:6px 15px 6px 12px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-ico,.mce-menu-item .mce-text{color:#333}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled .mce-ico{color:#adadad}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text{color:#fff}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:#fff}.mce-menu-item.mce-disabled:hover{background:#ccc}.mce-menu-shortcut{display:inline-block;color:#adadad}.mce-menu-shortcut{display:inline-block;*display:inline;*zoom:1;padding:0 15px 0 20px}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item.mce-selected .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:#fff}.mce-menu-item .mce-caret{margin-top:4px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #333}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret,.mce-menu-item:hover .mce-caret{border-left-color:#fff}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item-normal.mce-active{background-color:#c8def4}.mce-menu-item-preview.mce-active{border-left:5px solid #aaa}.mce-menu-item-normal.mce-active .mce-text{color:#333}.mce-menu-item-normal.mce-active:hover .mce-text,.mce-menu-item-normal.mce-active:hover .mce-ico{color:#fff}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:#fff;background-color:#0081c2;background-image:-moz-linear-gradient(top, #08c, #0077b3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#0077b3));background-image:-webkit-linear-gradient(top, #08c, #0077b3);background-image:-o-linear-gradient(top, #08c, #0077b3);background-image:linear-gradient(to bottom, #08c, #0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);zoom:1}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:#cbcbcb;border-bottom:1px solid #fff;cursor:default;filter:none}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-menu-align.mce-rtl .mce-menu-shortcut,.mce-menu-align.mce-rtl .mce-caret{right:auto;left:0}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #333;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:#fff}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:2px 0 0;min-width:160px;background:#fff;border:1px solid #989898;border:1px solid rgba(0,0,0,0.2);z-index:1002;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;*display:inline}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#333}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent;border-right:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#bdbdbd;border-right-color:#bdbdbd}.mce-splitbtn button{padding-right:4px}.mce-splitbtn .mce-open{padding-left:4px}.mce-splitbtn .mce-open.mce-active{-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-splitbtn.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:10px;padding-left:10px}.mce-rtl .mce-splitbtn .mce-open{padding-left:4px;padding-right:4px}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#e3e3e3;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#fdfdfd}.mce-tab.mce-active{background:#fdfdfd;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);display:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#333}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65)}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px}.mce-textbox.mce-disabled{color:#adadad}.mce-rtl .mce-textbox{text-align:right;direction:rtl}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}@font-face{font-family:'tinymce';src:url('fonts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce',Arial;font-style:normal;font-weight:normal;font-size:16px;line-height:16px;vertical-align:text-top;-webkit-font-smoothing:antialiased;display:inline-block;background:transparent center center;width:16px;height:16px;color:#333}.mce-btn-small .mce-ico{font-family:'tinymce-small',Arial}.mce-i-save:before{content:"\e000"}.mce-i-newdocument:before{content:"\e001"}.mce-i-fullpage:before{content:"\e002"}.mce-i-alignleft:before{content:"\e003"}.mce-i-aligncenter:before{content:"\e004"}.mce-i-alignright:before{content:"\e005"}.mce-i-alignjustify:before{content:"\e006"}.mce-i-cut:before{content:"\e007"}.mce-i-paste:before{content:"\e008"}.mce-i-searchreplace:before{content:"\e009"}.mce-i-bullist:before{content:"\e00a"}.mce-i-numlist:before{content:"\e00b"}.mce-i-indent:before{content:"\e00c"}.mce-i-outdent:before{content:"\e00d"}.mce-i-blockquote:before{content:"\e00e"}.mce-i-undo:before{content:"\e00f"}.mce-i-redo:before{content:"\e010"}.mce-i-link:before{content:"\e011"}.mce-i-unlink:before{content:"\e012"}.mce-i-anchor:before{content:"\e013"}.mce-i-image:before{content:"\e014"}.mce-i-media:before{content:"\e015"}.mce-i-help:before{content:"\e016"}.mce-i-code:before{content:"\e017"}.mce-i-inserttime:before{content:"\e018"}.mce-i-preview:before{content:"\e019"}.mce-i-forecolor:before{content:"\e01a"}.mce-i-backcolor:before{content:"\e01a"}.mce-i-table:before{content:"\e01b"}.mce-i-hr:before{content:"\e01c"}.mce-i-removeformat:before{content:"\e01d"}.mce-i-subscript:before{content:"\e01e"}.mce-i-superscript:before{content:"\e01f"}.mce-i-charmap:before{content:"\e020"}.mce-i-emoticons:before{content:"\e021"}.mce-i-print:before{content:"\e022"}.mce-i-fullscreen:before{content:"\e023"}.mce-i-spellchecker:before{content:"\e024"}.mce-i-nonbreaking:before{content:"\e025"}.mce-i-template:before{content:"\e026"}.mce-i-pagebreak:before{content:"\e027"}.mce-i-restoredraft:before{content:"\e028"}.mce-i-untitled:before{content:"\e029"}.mce-i-bold:before{content:"\e02a"}.mce-i-italic:before{content:"\e02b"}.mce-i-underline:before{content:"\e02c"}.mce-i-strikethrough:before{content:"\e02d"}.mce-i-visualchars:before{content:"\e02e"}.mce-i-visualblocks:before{content:"\e02e"}.mce-i-ltr:before{content:"\e02f"}.mce-i-rtl:before{content:"\e030"}.mce-i-copy:before{content:"\e031"}.mce-i-resize:before{content:"\e032"}.mce-i-browse:before{content:"\e034"}.mce-i-pastetext:before{content:"\e035"}.mce-i-checkbox:before,.mce-i-selected:before{content:"\e033"}.mce-i-selected{visibility:hidden}i.mce-i-backcolor{text-shadow:none;background:#bbb} \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/readme.md b/common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/readme.md deleted file mode 100755 index fa5d63946c..0000000000 --- a/common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/readme.md +++ /dev/null @@ -1 +0,0 @@ -Icons are generated and provided by the http://icomoon.io service. diff --git a/common/static/js/vendor/tiny_mce/skins/studio-tmce4/img/anchor.gif b/common/static/js/vendor/tiny_mce/skins/studio-tmce4/img/anchor.gif deleted file mode 100755 index 606348c7f53dba169a9aca7279a2a973f4b07bdb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53 zcmZ?wbhEHbWM^P!XkcUjg8%>jEB<5wG8q|kKzxu40~1eAV&{y5e`l1KFoiKNSOWkz C+YCGa diff --git a/common/static/js/vendor/tiny_mce/skins/studio-tmce4/img/loader.gif b/common/static/js/vendor/tiny_mce/skins/studio-tmce4/img/loader.gif deleted file mode 100755 index c69e937232b24ea30f01c68bbd2ebc798dcecfcb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2608 zcmdVcdr(tX9tZGC9yiG~=H_*Q-0%n(kWqP*D#hw{AQu8;1%gl-Hrf&{2?48KX;hHy z3Ze*zEz4t3XdUFyLbNPUYlA`|B}P=N1fqtL1*}S;87#|-W9v<#G;ul(e%d3)N(^9c$d2Dz{7}?ErjNd;{EMKkCsk21~b9Gvg zDo<7L=3Z5HNbVlZUcm1eg#o#CZCJU`3IYHwM->zCd?uYrF3vKFeM}v?f+%s?E>ly|3W25ry9#NNbTx-}0ON58dTrs^ix{_1O0Wh~SVSBlH)Ajn zPn^Gbjz}PCtN@#keR&hK&Dhl-b$kZ8^S)x#dh0{7X=X%CCJk7P1PSO>T&S8I4{#Lg zb5#)o=;!ZP*1nM{cI4@(x7o27*SA()NHmrn67aN@Pmi~(i_SnrjYnwh36aG%!@i0d zqbvfa44f|?OG4ntP|nbjhEl1)Yp6ZN@yjy zy4==QmLy%t;ps3R?~f2KfTTI|2?q8dFd6^z5GF+Xa&Y)sjG)hxit80pPcOP zJ z*LW{SyGHD%hUotV+W%I}fBLAIx!8|7#}$;clKQ+{&FjDqGQ2ZNx(lYM3*%~}ILnao zM`aui55~ZFJlu^!5rdA9Q_7H68H_;##u{x(Yn-vSfIRCb^Nqsg zGRS!Egm>h+o<}LeV4&CLReo9FrDjDvs}8?JwC)#Qs|ie=r?~xUh)&*d`Fx>FG}%X# zNdtDHBKhLPC0wpooFDAQKL%*6T|ULH$=wX!NhcasgD3d;-d$I6yRK3yN+E~C1335_iLOt+*9uvSZ`>*KA}vm}08wRq=>5l|t*Na&jR z-C1&C`nkEk#sB|@yyt-#fXngP04My zm7u$Q%EJbHp`>~`5W&L{W!6`y&}LMS;jfUpgO~7TLVMRZ9IC)IZp0A${`yp0{&wco z#1nx@XMkhqeK%7?RE7JdLr1^nwFfaJ0Q&Lv?WNJ%9}VSJsNY2+UYs2%EU0J~ayFXv zi*?7KCXQHkD)O6!0Q%4N+HTODHxJ{kQSuQX$l-rSwkwh(zMkdfzxyGwl@yHC)C4p< z&n2%8#M?)Q@mgHL1ot8`SFdSEj9ye|jHy+U8#@HoUExG=@AVkRAe_qYm4EpzK6L*& zh`)26?V#f4#_h^P9G^%>h2-H3)$QP zQovu6J9qDvsxqweDdNNa!Lb?L4_UF{tLX_nN7r0U_vF14YKcGR-*Gl} zx3oG)bzf|65dBxD-;2ZCp??K;+TuQ9onnK?==5hzbkb^r_g>z4#D8mcv8(+XdoszA zCx-qhdgxMNMotj}SiL_6V(tLcsK7(M(r(%u<}QrVfOvyK6_;~NOTlPGfX@M7S5YQF z&*$(ylJMHJt^_aQeu{C6NaTE$G3HNN@_SnN8YcaKn%`)F@~L1x+ah7-gEJPpc6w%3 zyX}r+Qk$4RHZzfH){e~F*qJ{d*L8a6n4;U?+{de0-t)mal#TVxe)3F}^UBh+zd T)6_**#cgp_+?JL9(ew3BlNF>u diff --git a/common/static/js/vendor/tiny_mce/skins/studio-tmce4/img/object.gif b/common/static/js/vendor/tiny_mce/skins/studio-tmce4/img/object.gif deleted file mode 100755 index cccd7f023fb80908cb33bb7d9604236cd21b7ae7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152 zcmV;J0B8S4Nk%w1VG#fg0J9GO<>lo+KR<78Z?v?uS65g4{r%Y3*xlXT%F4>`@9+2b z_ww@cot>Tk|Nk>HGXMYpA^8LW000jFEC2ui01*HU000C<(8)=wd#<&tyXIMjHBV`d zBSi|xsj3(;nD0kQ0aJq8eLH~x02P|t2!_J&Wqb%0io?#xD li",function(e,n){for(var i,o=n.parents.length;o--&&(i=n.parents[o].nodeName,"OL"!=i&&"UL"!=i););t.active(e&&"UL"==i)}),"numlist"==r&&n.selectorChanged("ol > li",function(e,n){for(var i,o=n.parents.length;o--&&(i=n.parents[o].nodeName,"OL"!=i&&"UL"!=i););t.active(e&&"OL"==i)}),t.settings.stateSelector&&n.selectorChanged(t.settings.stateSelector,function(e){t.active(e)},!0),t.settings.disabledStateSelector&&n.selectorChanged(t.settings.disabledStateSelector,function(e){t.disabled(e)})}var r;"|"==t?i=null:c.has(t)?(t={type:t},u.toolbar_items_size&&(t.size=u.toolbar_items_size),o.push(t),i=null):(i||(i={type:"buttongroup",items:[]},o.push(i)),e.buttons[t]&&(r=t,t=e.buttons[r],"function"==typeof t&&(t=t()),t.type=t.type||"button",u.toolbar_items_size&&(t.size=u.toolbar_items_size),t=c.create(t),i.items.push(t),e.initialized?n():e.on("init",n)))}),n.push({type:"toolbar",layout:"flow",items:o}),!0}for(var n=[],i=1;10>i&&t(u["toolbar"+i]);i++);return n.length||t(u.toolbar||f),n}function n(){function t(t){var n;return"|"==t?{text:"|"}:n=e.menuItems[t]}function n(n){var i,o,r,s,a;if(a=tinymce.makeMap((u.removed_menuitems||"").split(/[ ,]/)),u.menu?(o=u.menu[n],s=!0):o=h[n],o){i={text:o.title},r=[],d((o.items||"").split(/[ ,]/),function(e){var n=t(e);n&&!a[e]&&r.push(t(e))}),s||d(e.menuItems,function(e){e.context==n&&("before"==e.separator&&r.push({text:"|"}),e.prependToContext?r.unshift(e):r.push(e),"after"==e.separator&&r.push({text:"|"}))});for(var l=0;l<\/script>');tinymce.ScriptLoader.markDone(a)}}},pickColor:function(b,a){this.execCommand("mceColorPicker",true,{color:document.getElementById(a).value,func:function(e){document.getElementById(a).value=e;try{document.getElementById(a).onchange()}catch(d){}}})},openBrowser:function(a,c,b){tinyMCEPopup.restoreSelection();this.editor.execCallback("file_browser_callback",a,document.getElementById(a).value,c,window)},confirm:function(b,a,c){this.editor.windowManager.confirm(b,a,c,window)},alert:function(b,a,c){this.editor.windowManager.alert(b,a,c,window)},close:function(){var a=this;function b(){a.editor.windowManager.close(window);tinymce=tinyMCE=a.editor=a.params=a.dom=a.dom.doc=null}if(tinymce.isOpera){a.getWin().setTimeout(b,0)}else{b()}},_restoreSelection:function(){var a=window.event.srcElement;if(a.nodeName=="INPUT"&&(a.type=="submit"||a.type=="button")){tinyMCEPopup.restoreSelection()}},_onDOMLoaded:function(){var b=tinyMCEPopup,d=document.title,e,c,a;if(b.features.translate_i18n!==false){c=document.body.innerHTML;if(tinymce.isIE){c=c.replace(/ (value|title|alt)=([^"][^\s>]+)/gi,' $1="$2"')}document.dir=b.editor.getParam("directionality","");if((a=b.editor.translate(c))&&a!=c){document.body.innerHTML=a}if((a=b.editor.translate(d))&&a!=d){document.title=d=a}}if(!b.editor.getParam("browser_preferred_colors",false)||!b.isWindow){b.dom.addClass(document.body,"forceColors")}document.body.style.display="";if(tinymce.isIE){document.attachEvent("onmouseup",tinyMCEPopup._restoreSelection);b.dom.add(b.dom.select("head")[0],"base",{target:"_self"})}b.restoreSelection();b.resizeToInnerSize();if(!b.isWindow){b.editor.windowManager.setTitle(window,d)}else{window.focus()}if(!tinymce.isIE&&!b.isWindow){b.dom.bind(document,"focus",function(){b.editor.windowManager.focus(b.id)})}tinymce.each(b.dom.select("select"),function(f){f.onkeydown=tinyMCEPopup._accessHandler});tinymce.each(b.listeners,function(f){f.func.call(f.scope,b.editor)});if(b.getWindowArg("mce_auto_focus",true)){window.focus();tinymce.each(document.forms,function(g){tinymce.each(g.elements,function(f){if(b.dom.hasClass(f,"mceFocus")&&!f.disabled){f.focus();return false}})})}document.onkeyup=tinyMCEPopup._closeWinKeyHandler},_accessHandler:function(a){a=a||window.event;if(a.keyCode==13||a.keyCode==32){var b=a.target||a.srcElement;if(b.onchange){b.onchange()}return tinymce.dom.Event.cancel(a)}},_closeWinKeyHandler:function(a){a=a||window.event;if(a.keyCode==27){tinyMCEPopup.close()}},_eventProxy:function(a){return function(b){tinyMCEPopup.dom.events.callNativeHandler(a,b)}}};tinyMCEPopup.init(); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/tinymce.min.js b/common/static/js/vendor/tiny_mce/tinymce.min.js deleted file mode 100644 index a2cae7b6f9..0000000000 --- a/common/static/js/vendor/tiny_mce/tinymce.min.js +++ /dev/null @@ -1,6340 +0,0 @@ -// 4.0.16 (2014-01-31) -!function (e, t) { - "use strict"; - function n(e, t) { - for (var n, r = [], i = 0; i < e.length; ++i) { - if (n = s[e[i]] || o(e[i]), !n)throw"module definition dependecy not found: " + e[i]; - r.push(n) - } - t.apply(null, r) - } - - function r(e, r, i) { - if ("string" != typeof e)throw"invalid module definition, module id must be defined and be a string"; - if (r === t)throw"invalid module definition, dependencies must be specified"; - if (i === t)throw"invalid module definition, definition function must be specified"; - n(r, function () { - s[e] = i.apply(null, arguments) - }) - } - - function i(e) { - return!!s[e] - } - - function o(t) { - for (var n = e, r = t.split(/[.\/]/), i = 0; i < r.length; ++i) { - if (!n[r[i]])return; - n = n[r[i]] - } - return n - } - - function a(n) { - for (var r = 0; r < n.length; r++) { - for (var i = e, o = n[r], a = o.split(/[.\/]/), l = 0; l < a.length - 1; ++l)i[a[l]] === t && (i[a[l]] = {}), i = i[a[l]]; - i[a[a.length - 1]] = s[o] - } - } - - var s = {}, l = "tinymce/dom/Sizzle", c = "tinymce/html/Styles", d = "tinymce/dom/EventUtils", u = "tinymce/dom/TreeWalker", f = "tinymce/util/Tools", p = "tinymce/dom/Range", m = "tinymce/html/Entities", h = "tinymce/Env", g = "tinymce/dom/StyleSheetLoader", v = "tinymce/dom/DOMUtils", y = "tinymce/dom/ScriptLoader", b = "tinymce/AddOnManager", C = "tinymce/html/Node", x = "tinymce/html/Schema", w = "tinymce/html/SaxParser", _ = "tinymce/html/DomParser", N = "tinymce/html/Writer", E = "tinymce/html/Serializer", k = "tinymce/dom/Serializer", S = "tinymce/dom/TridentSelection", T = "tinymce/util/VK", R = "tinymce/dom/ControlSelection", A = "tinymce/dom/Selection", B = "tinymce/dom/RangeUtils", L = "tinymce/Formatter", H = "tinymce/UndoManager", M = "tinymce/EnterKey", D = "tinymce/ForceBlocks", P = "tinymce/EditorCommands", O = "tinymce/util/URI", I = "tinymce/util/Class", z = "tinymce/ui/Selector", F = "tinymce/ui/Collection", W = "tinymce/ui/DomUtils", V = "tinymce/ui/Control", U = "tinymce/ui/Factory", q = "tinymce/ui/Container", j = "tinymce/ui/DragHelper", $ = "tinymce/ui/Scrollable", K = "tinymce/ui/Panel", Y = "tinymce/ui/Movable", G = "tinymce/ui/Resizable", X = "tinymce/ui/FloatPanel", J = "tinymce/ui/KeyboardNavigation", Q = "tinymce/ui/Window", Z = "tinymce/ui/MessageBox", et = "tinymce/WindowManager", tt = "tinymce/util/Quirks", nt = "tinymce/util/Observable", rt = "tinymce/Shortcuts", it = "tinymce/Editor", ot = "tinymce/util/I18n", at = "tinymce/FocusManager", st = "tinymce/EditorManager", lt = "tinymce/LegacyInput", ct = "tinymce/util/XHR", dt = "tinymce/util/JSON", ut = "tinymce/util/JSONRequest", ft = "tinymce/util/JSONP", pt = "tinymce/util/LocalStorage", mt = "tinymce/Compat", ht = "tinymce/ui/Layout", gt = "tinymce/ui/AbsoluteLayout", vt = "tinymce/ui/Tooltip", yt = "tinymce/ui/Widget", bt = "tinymce/ui/Button", Ct = "tinymce/ui/ButtonGroup", xt = "tinymce/ui/Checkbox", wt = "tinymce/ui/PanelButton", _t = "tinymce/ui/ColorButton", Nt = "tinymce/ui/ComboBox", Et = "tinymce/ui/Path", kt = "tinymce/ui/ElementPath", St = "tinymce/ui/FormItem", Tt = "tinymce/ui/Form", Rt = "tinymce/ui/FieldSet", At = "tinymce/ui/FilePicker", Bt = "tinymce/ui/FitLayout", Lt = "tinymce/ui/FlexLayout", Ht = "tinymce/ui/FlowLayout", Mt = "tinymce/ui/FormatControls", Dt = "tinymce/ui/GridLayout", Pt = "tinymce/ui/Iframe", Ot = "tinymce/ui/Label", It = "tinymce/ui/Toolbar", zt = "tinymce/ui/MenuBar", Ft = "tinymce/ui/MenuButton", Wt = "tinymce/ui/ListBox", Vt = "tinymce/ui/MenuItem", Ut = "tinymce/ui/Menu", qt = "tinymce/ui/Radio", jt = "tinymce/ui/ResizeHandle", $t = "tinymce/ui/Spacer", Kt = "tinymce/ui/SplitButton", Yt = "tinymce/ui/StackLayout", Gt = "tinymce/ui/TabPanel", Xt = "tinymce/ui/TextBox", Jt = "tinymce/ui/Throbber"; - r(l, [], function () { - if (!window.jQuery)throw new Error("Load jQuery first"); - return jQuery.find - }), r(c, [], function () { - return function (e, t) { - function n(e, t, n, r) { - function i(e) { - return e = parseInt(e, 10).toString(16), e.length > 1 ? e : "0" + e - } - - return"#" + i(t) + i(n) + i(r) - } - - var r = /rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi, i = /(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi, o = /\s*([^:]+):\s*([^;]+);?/g, a = /\s+$/, s, l, c = {}, d, u = "\ufeff"; - for (e = e || {}, d = ("\\\" \\' \\; \\: ; : " + u).split(" "), l = 0; l < d.length; l++)c[d[l]] = u + l, c[u + l] = d[l]; - return{toHex: function (e) { - return e.replace(r, n) - }, parse: function (t) { - function s(e, t, n) { - var r, i, o, a; - if (r = h[e + "-top" + t], r && (i = h[e + "-right" + t], i && (o = h[e + "-bottom" + t], o && (a = h[e + "-left" + t])))) { - var s = [r, i, o, a]; - for (l = s.length - 1; l-- && s[l] === s[l + 1];); - l > -1 && n || (h[e + t] = -1 == l ? s[0] : s.join(" "), delete h[e + "-top" + t], delete h[e + "-right" + t], delete h[e + "-bottom" + t], delete h[e + "-left" + t]) - } - } - - function d(e) { - var t = h[e], n; - if (t) { - for (t = t.split(" "), n = t.length; n--;)if (t[n] !== t[0])return!1; - return h[e] = t[0], !0 - } - } - - function u(e, t, n, r) { - d(t) && d(n) && d(r) && (h[e] = h[t] + " " + h[n] + " " + h[r], delete h[t], delete h[n], delete h[r]) - } - - function f(e) { - return b = !0, c[e] - } - - function p(e, t) { - return b && (e = e.replace(/\uFEFF[0-9]/g, function (e) { - return c[e] - })), t || (e = e.replace(/\\([\'\";:])/g, "$1")), e - } - - function m(t, n, r, i, o, a) { - return(o = o || a) ? (o = p(o), "'" + o.replace(/\'/g, "\\'") + "'") : (n = p(n || r || i), !e.allow_script_urls && /(java|vb)script:/i.test(n.replace(/[\s\r\n]+/, "")) ? "" : (C && (n = C.call(x, n, "style")), "url('" + n.replace(/\'/g, "\\'") + "')")) - } - - var h = {}, g, v, y, b, C = e.url_converter, x = e.url_converter_scope || this; - if (t) { - for (t = t.replace(/[\u0000-\u001F]/g, ""), t = t.replace(/\\[\"\';:\uFEFF]/g, f).replace(/\"[^\"]+\"|\'[^\']+\'/g, function (e) { - return e.replace(/[;:]/g, f) - }); g = o.exec(t);) { - if (v = g[1].replace(a, "").toLowerCase(), y = g[2].replace(a, ""), v && y.length > 0) { - if (!e.allow_script_urls && ("behavior" == v || /expression\s*\(/.test(y)))continue; - "font-weight" === v && "700" === y ? y = "bold" : ("color" === v || "background-color" === v) && (y = y.toLowerCase()), y = y.replace(r, n), y = y.replace(i, m), h[v] = b ? p(y, !0) : y - } - o.lastIndex = g.index + g[0].length - } - s("border", "", !0), s("border", "-width"), s("border", "-color"), s("border", "-style"), s("padding", ""), s("margin", ""), u("border", "border-width", "border-style", "border-color"), "medium none" === h.border && delete h.border, "none" === h["border-image"] && delete h["border-image"] - } - return h - }, serialize: function (e, n) { - function r(n) { - var r, o, a, l; - if (r = t.styles[n])for (o = 0, a = r.length; a > o; o++)n = r[o], l = e[n], l !== s && l.length > 0 && (i += (i.length > 0 ? " " : "") + n + ": " + l + ";") - } - - var i = "", o, a; - if (n && t && t.styles)r("*"), r(n); else for (o in e)a = e[o], a !== s && a.length > 0 && (i += (i.length > 0 ? " " : "") + o + ": " + a + ";"); - return i - }} - } - }), r(d, [], function () { - function e(e, t, n, r) { - e.addEventListener ? e.addEventListener(t, n, r || !1) : e.attachEvent && e.attachEvent("on" + t, n) - } - - function t(e, t, n, r) { - e.removeEventListener ? e.removeEventListener(t, n, r || !1) : e.detachEvent && e.detachEvent("on" + t, n) - } - - function n(e, t) { - function n() { - return!1 - } - - function r() { - return!0 - } - - var i, o = t || {}, l; - for (i in e)s[i] || (o[i] = e[i]); - if (o.target || (o.target = o.srcElement || document), e && a.test(e.type) && e.pageX === l && e.clientX !== l) { - var c = o.target.ownerDocument || document, d = c.documentElement, u = c.body; - o.pageX = e.clientX + (d && d.scrollLeft || u && u.scrollLeft || 0) - (d && d.clientLeft || u && u.clientLeft || 0), o.pageY = e.clientY + (d && d.scrollTop || u && u.scrollTop || 0) - (d && d.clientTop || u && u.clientTop || 0) - } - return o.preventDefault = function () { - o.isDefaultPrevented = r, e && (e.preventDefault ? e.preventDefault() : e.returnValue = !1) - }, o.stopPropagation = function () { - o.isPropagationStopped = r, e && (e.stopPropagation ? e.stopPropagation() : e.cancelBubble = !0) - }, o.stopImmediatePropagation = function () { - o.isImmediatePropagationStopped = r, o.stopPropagation() - }, o.isDefaultPrevented || (o.isDefaultPrevented = n, o.isPropagationStopped = n, o.isImmediatePropagationStopped = n), o - } - - function r(n, r, i) { - function o() { - i.domLoaded || (i.domLoaded = !0, r(c)) - } - - function a() { - ("complete" === l.readyState || "interactive" === l.readyState) && (t(l, "readystatechange", a), o()) - } - - function s() { - try { - l.documentElement.doScroll("left") - } catch (e) { - return void setTimeout(s, 0) - } - o() - } - - var l = n.document, c = {type: "ready"}; - return i.domLoaded ? void r(c) : (l.addEventListener ? "complete" === l.readyState ? o() : e(n, "DOMContentLoaded", o) : (e(l, "readystatechange", a), l.documentElement.doScroll && n.self === n.top && s()), void e(n, "load", o)) - } - - function i() { - function i(e, t) { - var n, r, i, o, a = s[t]; - if (n = a && a[e.type])for (r = 0, i = n.length; i > r; r++)if (o = n[r], o && o.func.call(o.scope, e) === !1 && e.preventDefault(), e.isImmediatePropagationStopped())return - } - - var a = this, s = {}, l, c, d, u, f; - c = o + (+new Date).toString(32), u = "onmouseenter"in document.documentElement, d = "onfocusin"in document.documentElement, f = {mouseenter: "mouseover", mouseleave: "mouseout"}, l = 1, a.domLoaded = !1, a.events = s, a.bind = function (t, o, p, m) { - function h(e) { - i(n(e || _.event), g) - } - - var g, v, y, b, C, x, w, _ = window; - if (t && 3 !== t.nodeType && 8 !== t.nodeType) { - for (t[c] ? g = t[c] : (g = l++, t[c] = g, s[g] = {}), m = m || t, o = o.split(" "), y = o.length; y--;)b = o[y], x = h, C = w = !1, "DOMContentLoaded" === b && (b = "ready"), a.domLoaded && "ready" === b && "complete" == t.readyState ? p.call(m, n({type: b})) : (u || (C = f[b], C && (x = function (e) { - var t, r; - if (t = e.currentTarget, r = e.relatedTarget, r && t.contains)r = t.contains(r); else for (; r && r !== t;)r = r.parentNode; - r || (e = n(e || _.event), e.type = "mouseout" === e.type ? "mouseleave" : "mouseenter", e.target = t, i(e, g)) - })), d || "focusin" !== b && "focusout" !== b || (w = !0, C = "focusin" === b ? "focus" : "blur", x = function (e) { - e = n(e || _.event), e.type = "focus" === e.type ? "focusin" : "focusout", i(e, g) - }), v = s[g][b], v ? "ready" === b && a.domLoaded ? p({type: b}) : v.push({func: p, scope: m}) : (s[g][b] = v = [ - {func: p, scope: m} - ], v.fakeName = C, v.capture = w, v.nativeHandler = x, "ready" === b ? r(t, x, a) : e(t, C || b, x, w))); - return t = v = 0, p - } - }, a.unbind = function (e, n, r) { - var i, o, l, d, u, f; - if (!e || 3 === e.nodeType || 8 === e.nodeType)return a; - if (i = e[c]) { - if (f = s[i], n) { - for (n = n.split(" "), l = n.length; l--;)if (u = n[l], o = f[u]) { - if (r)for (d = o.length; d--;)if (o[d].func === r) { - var p = o.nativeHandler; - o = o.slice(0, d).concat(o.slice(d + 1)), o.nativeHandler = p, f[u] = o - } - r && 0 !== o.length || (delete f[u], t(e, o.fakeName || u, o.nativeHandler, o.capture)) - } - } else { - for (u in f)o = f[u], t(e, o.fakeName || u, o.nativeHandler, o.capture); - f = {} - } - for (u in f)return a; - delete s[i]; - try { - delete e[c] - } catch (m) { - e[c] = null - } - } - return a - }, a.fire = function (e, t, r) { - var o; - if (!e || 3 === e.nodeType || 8 === e.nodeType)return a; - r = n(null, r), r.type = t, r.target = e; - do o = e[c], o && i(r, o), e = e.parentNode || e.ownerDocument || e.defaultView || e.parentWindow; while (e && !r.isPropagationStopped()); - return a - }, a.clean = function (e) { - var t, n, r = a.unbind; - if (!e || 3 === e.nodeType || 8 === e.nodeType)return a; - if (e[c] && r(e), e.getElementsByTagName || (e = e.document), e && e.getElementsByTagName)for (r(e), n = e.getElementsByTagName("*"), t = n.length; t--;)e = n[t], e[c] && r(e); - return a - }, a.destroy = function () { - s = {} - }, a.cancel = function (e) { - return e && (e.preventDefault(), e.stopImmediatePropagation()), !1 - } - } - - var o = "mce-data-", a = /^(?:mouse|contextmenu)|click/, s = {keyLocation: 1, layerX: 1, layerY: 1, returnValue: 1}; - return i.Event = new i, i.Event.bind(window, "ready", function () { - }), i - }), r(u, [], function () { - return function (e, t) { - function n(e, n, r, i) { - var o, a; - if (e) { - if (!i && e[n])return e[n]; - if (e != t) { - if (o = e[r])return o; - for (a = e.parentNode; a && a != t; a = a.parentNode)if (o = a[r])return o - } - } - } - - var r = e; - this.current = function () { - return r - }, this.next = function (e) { - return r = n(r, "firstChild", "nextSibling", e) - }, this.prev = function (e) { - return r = n(r, "lastChild", "previousSibling", e) - } - } - }), r(f, [], function () { - function e(e, n) { - return n ? "array" == n && g(e) ? !0 : typeof e == n : e !== t - } - - function n(e) { - var t = [], n, r; - for (n = 0, r = e.length; r > n; n++)t[n] = e[n]; - return t - } - - function r(e, t, n) { - var r; - for (e = e || [], t = t || ",", "string" == typeof e && (e = e.split(t)), n = n || {}, r = e.length; r--;)n[e[r]] = {}; - return n - } - - function i(e, n, r) { - var i, o; - if (!e)return 0; - if (r = r || e, e.length !== t) { - for (i = 0, o = e.length; o > i; i++)if (n.call(r, e[i], i, e) === !1)return 0 - } else for (i in e)if (e.hasOwnProperty(i) && n.call(r, e[i], i, e) === !1)return 0; - return 1 - } - - function o(e, t) { - var n = []; - return i(e, function (e) { - n.push(t(e)) - }), n - } - - function a(e, t) { - var n = []; - return i(e, function (e) { - (!t || t(e)) && n.push(e) - }), n - } - - function s(e, t, n) { - var r = this, i, o, a, s, l, c = 0; - if (e = /^((static) )?([\w.]+)(:([\w.]+))?/.exec(e), a = e[3].match(/(^|\.)(\w+)$/i)[2], o = r.createNS(e[3].replace(/\.\w+$/, ""), n), !o[a]) { - if ("static" == e[2])return o[a] = t, void(this.onCreate && this.onCreate(e[2], e[3], o[a])); - t[a] || (t[a] = function () { - }, c = 1), o[a] = t[a], r.extend(o[a].prototype, t), e[5] && (i = r.resolve(e[5]).prototype, s = e[5].match(/\.(\w+)$/i)[1], l = o[a], o[a] = c ? function () { - return i[s].apply(this, arguments) - } : function () { - return this.parent = i[s], l.apply(this, arguments) - }, o[a].prototype[a] = o[a], r.each(i, function (e, t) { - o[a].prototype[t] = i[t] - }), r.each(t, function (e, t) { - i[t] ? o[a].prototype[t] = function () { - return this.parent = i[t], e.apply(this, arguments) - } : t != a && (o[a].prototype[t] = e) - })), r.each(t["static"], function (e, t) { - o[a][t] = e - }) - } - } - - function l(e, t) { - var n, r; - if (e)for (n = 0, r = e.length; r > n; n++)if (e[n] === t)return n; - return-1 - } - - function c(e, n) { - var r, i, o, a = arguments, s; - for (r = 1, i = a.length; i > r; r++) { - n = a[r]; - for (o in n)n.hasOwnProperty(o) && (s = n[o], s !== t && (e[o] = s)) - } - return e - } - - function d(e, t, n, r) { - r = r || this, e && (n && (e = e[n]), i(e, function (e, i) { - return t.call(r, e, i, n) === !1 ? !1 : void d(e, t, n, r) - })) - } - - function u(e, t) { - var n, r; - for (t = t || window, e = e.split("."), n = 0; n < e.length; n++)r = e[n], t[r] || (t[r] = {}), t = t[r]; - return t - } - - function f(e, t) { - var n, r; - for (t = t || window, e = e.split("."), n = 0, r = e.length; r > n && (t = t[e[n]], t); n++); - return t - } - - function p(t, n) { - return!t || e(t, "array") ? t : o(t.split(n || ","), h) - } - - var m = /^\s*|\s*$/g, h = function (e) { - return null === e || e === t ? "" : ("" + e).replace(m, "") - }, g = Array.isArray || function (e) { - return"[object Array]" === Object.prototype.toString.call(e) - }; - return{trim: h, isArray: g, is: e, toArray: n, makeMap: r, each: i, map: o, grep: a, inArray: l, extend: c, create: s, walk: d, createNS: u, resolve: f, explode: p} - }), r(p, [f], function (e) { - function t(n) { - function r() { - return D.createDocumentFragment() - } - - function i(e, t) { - _(z, e, t) - } - - function o(e, t) { - _(F, e, t) - } - - function a(e) { - i(e.parentNode, $(e)) - } - - function s(e) { - i(e.parentNode, $(e) + 1) - } - - function l(e) { - o(e.parentNode, $(e)) - } - - function c(e) { - o(e.parentNode, $(e) + 1) - } - - function d(e) { - e ? (M[U] = M[V], M[q] = M[W]) : (M[V] = M[U], M[W] = M[q]), M.collapsed = z - } - - function u(e) { - a(e), c(e) - } - - function f(e) { - i(e, 0), o(e, 1 === e.nodeType ? e.childNodes.length : e.nodeValue.length) - } - - function p(e, t) { - var n = M[V], r = M[W], i = M[U], o = M[q], a = t.startContainer, s = t.startOffset, l = t.endContainer, c = t.endOffset; - return 0 === e ? w(n, r, a, s) : 1 === e ? w(i, o, a, s) : 2 === e ? w(i, o, l, c) : 3 === e ? w(n, r, l, c) : void 0 - } - - function m() { - N(I) - } - - function h() { - return N(P) - } - - function g() { - return N(O) - } - - function v(e) { - var t = this[V], r = this[W], i, o; - 3 !== t.nodeType && 4 !== t.nodeType || !t.nodeValue ? (t.childNodes.length > 0 && (o = t.childNodes[r]), o ? t.insertBefore(e, o) : 3 == t.nodeType ? n.insertAfter(e, t) : t.appendChild(e)) : r ? r >= t.nodeValue.length ? n.insertAfter(e, t) : (i = t.splitText(r), t.parentNode.insertBefore(e, i)) : t.parentNode.insertBefore(e, t) - } - - function y(e) { - var t = M.extractContents(); - M.insertNode(e), e.appendChild(t), M.selectNode(e) - } - - function b() { - return j(new t(n), {startContainer: M[V], startOffset: M[W], endContainer: M[U], endOffset: M[q], collapsed: M.collapsed, commonAncestorContainer: M.commonAncestorContainer}) - } - - function C(e, t) { - var n; - if (3 == e.nodeType)return e; - if (0 > t)return e; - for (n = e.firstChild; n && t > 0;)--t, n = n.nextSibling; - return n ? n : e - } - - function x() { - return M[V] == M[U] && M[W] == M[q] - } - - function w(e, t, r, i) { - var o, a, s, l, c, d; - if (e == r)return t == i ? 0 : i > t ? -1 : 1; - for (o = r; o && o.parentNode != e;)o = o.parentNode; - if (o) { - for (a = 0, s = e.firstChild; s != o && t > a;)a++, s = s.nextSibling; - return a >= t ? -1 : 1 - } - for (o = e; o && o.parentNode != r;)o = o.parentNode; - if (o) { - for (a = 0, s = r.firstChild; s != o && i > a;)a++, s = s.nextSibling; - return i > a ? -1 : 1 - } - for (l = n.findCommonAncestor(e, r), c = e; c && c.parentNode != l;)c = c.parentNode; - for (c || (c = l), d = r; d && d.parentNode != l;)d = d.parentNode; - if (d || (d = l), c == d)return 0; - for (s = l.firstChild; s;) { - if (s == c)return-1; - if (s == d)return 1; - s = s.nextSibling - } - } - - function _(e, t, r) { - var i, o; - for (e ? (M[V] = t, M[W] = r) : (M[U] = t, M[q] = r), i = M[U]; i.parentNode;)i = i.parentNode; - for (o = M[V]; o.parentNode;)o = o.parentNode; - o == i ? w(M[V], M[W], M[U], M[q]) > 0 && M.collapse(e) : M.collapse(e), M.collapsed = x(), M.commonAncestorContainer = n.findCommonAncestor(M[V], M[U]) - } - - function N(e) { - var t, n = 0, r = 0, i, o, a, s, l, c; - if (M[V] == M[U])return E(e); - for (t = M[U], i = t.parentNode; i; t = i, i = i.parentNode) { - if (i == M[V])return k(t, e); - ++n - } - for (t = M[V], i = t.parentNode; i; t = i, i = i.parentNode) { - if (i == M[U])return S(t, e); - ++r - } - for (o = r - n, a = M[V]; o > 0;)a = a.parentNode, o--; - for (s = M[U]; 0 > o;)s = s.parentNode, o++; - for (l = a.parentNode, c = s.parentNode; l != c; l = l.parentNode, c = c.parentNode)a = l, s = c; - return T(a, s, e) - } - - function E(e) { - var t, n, i, o, a, s, l, c, d; - if (e != I && (t = r()), M[W] == M[q])return t; - if (3 == M[V].nodeType) { - if (n = M[V].nodeValue, i = n.substring(M[W], M[q]), e != O && (o = M[V], c = M[W], d = M[q] - M[W], 0 === c && d >= o.nodeValue.length - 1 ? o.parentNode.removeChild(o) : o.deleteData(c, d), M.collapse(z)), e == I)return; - return i.length > 0 && t.appendChild(D.createTextNode(i)), t - } - for (o = C(M[V], M[W]), a = M[q] - M[W]; o && a > 0;)s = o.nextSibling, l = L(o, e), t && t.appendChild(l), --a, o = s; - return e != O && M.collapse(z), t - } - - function k(e, t) { - var n, i, o, a, s, l; - if (t != I && (n = r()), i = R(e, t), n && n.appendChild(i), o = $(e), a = o - M[W], 0 >= a)return t != O && (M.setEndBefore(e), M.collapse(F)), n; - for (i = e.previousSibling; a > 0;)s = i.previousSibling, l = L(i, t), n && n.insertBefore(l, n.firstChild), --a, i = s; - return t != O && (M.setEndBefore(e), M.collapse(F)), n - } - - function S(e, t) { - var n, i, o, a, s, l; - for (t != I && (n = r()), o = A(e, t), n && n.appendChild(o), i = $(e), ++i, a = M[q] - i, o = e.nextSibling; o && a > 0;)s = o.nextSibling, l = L(o, t), n && n.appendChild(l), --a, o = s; - return t != O && (M.setStartAfter(e), M.collapse(z)), n - } - - function T(e, t, n) { - var i, o, a, s, l, c, d, u; - for (n != I && (o = r()), i = A(e, n), o && o.appendChild(i), a = e.parentNode, s = $(e), l = $(t), ++s, c = l - s, d = e.nextSibling; c > 0;)u = d.nextSibling, i = L(d, n), o && o.appendChild(i), d = u, --c; - return i = R(t, n), o && o.appendChild(i), n != O && (M.setStartAfter(e), M.collapse(z)), o - } - - function R(e, t) { - var n = C(M[U], M[q] - 1), r, i, o, a, s, l = n != M[U]; - if (n == e)return B(n, l, F, t); - for (r = n.parentNode, i = B(r, F, F, t); r;) { - for (; n;)o = n.previousSibling, a = B(n, l, F, t), t != I && i.insertBefore(a, i.firstChild), l = z, n = o; - if (r == e)return i; - n = r.previousSibling, r = r.parentNode, s = B(r, F, F, t), t != I && s.appendChild(i), i = s - } - } - - function A(e, t) { - var n = C(M[V], M[W]), r = n != M[V], i, o, a, s, l; - if (n == e)return B(n, r, z, t); - for (i = n.parentNode, o = B(i, F, z, t); i;) { - for (; n;)a = n.nextSibling, s = B(n, r, z, t), t != I && o.appendChild(s), r = z, n = a; - if (i == e)return o; - n = i.nextSibling, i = i.parentNode, l = B(i, F, z, t), t != I && l.appendChild(o), o = l - } - } - - function B(e, t, r, i) { - var o, a, s, l, c; - if (t)return L(e, i); - if (3 == e.nodeType) { - if (o = e.nodeValue, r ? (l = M[W], a = o.substring(l), s = o.substring(0, l)) : (l = M[q], a = o.substring(0, l), s = o.substring(l)), i != O && (e.nodeValue = s), i == I)return; - return c = n.clone(e, F), c.nodeValue = a, c - } - if (i != I)return n.clone(e, F) - } - - function L(e, t) { - return t != I ? t == O ? n.clone(e, z) : e : void e.parentNode.removeChild(e) - } - - function H() { - return n.create("body", null, g()).outerText - } - - var M = this, D = n.doc, P = 0, O = 1, I = 2, z = !0, F = !1, W = "startOffset", V = "startContainer", U = "endContainer", q = "endOffset", j = e.extend, $ = n.nodeIndex; - return j(M, {startContainer: D, startOffset: 0, endContainer: D, endOffset: 0, collapsed: z, commonAncestorContainer: D, START_TO_START: 0, START_TO_END: 1, END_TO_END: 2, END_TO_START: 3, setStart: i, setEnd: o, setStartBefore: a, setStartAfter: s, setEndBefore: l, setEndAfter: c, collapse: d, selectNode: u, selectNodeContents: f, compareBoundaryPoints: p, deleteContents: m, extractContents: h, cloneContents: g, insertNode: v, surroundContents: y, cloneRange: b, toStringIE: H}), M - } - - return t.prototype.toString = function () { - return this.toStringIE() - }, t - }), r(m, [f], function (e) { - function t(e) { - var t; - return t = document.createElement("div"), t.innerHTML = e, t.textContent || t.innerText || e - } - - function n(e, t) { - var n, r, i, a = {}; - if (e) { - for (e = e.split(","), t = t || 10, n = 0; n < e.length; n += 2)r = String.fromCharCode(parseInt(e[n], t)), o[r] || (i = "&" + e[n + 1] + ";", a[r] = i, a[i] = r); - return a - } - } - - var r = e.makeMap, i, o, a, s = /[&<>\"\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g, l = /[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g, c = /[<>&\"\']/g, d = /&(#x|#)?([\w]+);/g, u = {128: "\u20ac", 130: "\u201a", 131: "\u0192", 132: "\u201e", 133: "\u2026", 134: "\u2020", 135: "\u2021", 136: "\u02c6", 137: "\u2030", 138: "\u0160", 139: "\u2039", 140: "\u0152", 142: "\u017d", 145: "\u2018", 146: "\u2019", 147: "\u201c", 148: "\u201d", 149: "\u2022", 150: "\u2013", 151: "\u2014", 152: "\u02dc", 153: "\u2122", 154: "\u0161", 155: "\u203a", 156: "\u0153", 158: "\u017e", 159: "\u0178"}; - o = {'"': """, "'": "'", "<": "<", ">": ">", "&": "&"}, a = {"<": "<", ">": ">", "&": "&", """: '"', "'": "'"}, i = n("50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,t9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro", 32); - var f = {encodeRaw: function (e, t) { - return e.replace(t ? s : l, function (e) { - return o[e] || e - }) - }, encodeAllRaw: function (e) { - return("" + e).replace(c, function (e) { - return o[e] || e - }) - }, encodeNumeric: function (e, t) { - return e.replace(t ? s : l, function (e) { - return e.length > 1 ? "&#" + (1024 * (e.charCodeAt(0) - 55296) + (e.charCodeAt(1) - 56320) + 65536) + ";" : o[e] || "&#" + e.charCodeAt(0) + ";" - }) - }, encodeNamed: function (e, t, n) { - return n = n || i, e.replace(t ? s : l, function (e) { - return o[e] || n[e] || e - }) - }, getEncodeFunc: function (e, t) { - function a(e, n) { - return e.replace(n ? s : l, function (e) { - return o[e] || t[e] || "&#" + e.charCodeAt(0) + ";" || e - }) - } - - function c(e, n) { - return f.encodeNamed(e, n, t) - } - - return t = n(t) || i, e = r(e.replace(/\+/g, ",")), e.named && e.numeric ? a : e.named ? t ? c : f.encodeNamed : e.numeric ? f.encodeNumeric : f.encodeRaw - }, decode: function (e) { - return e.replace(d, function (e, n, r) { - return n ? (r = parseInt(r, 2 === n.length ? 16 : 10), r > 65535 ? (r -= 65536, String.fromCharCode(55296 + (r >> 10), 56320 + (1023 & r))) : u[r] || String.fromCharCode(r)) : a[e] || i[e] || t(e) - }) - }}; - return f - }), r(h, [], function () { - var e = navigator, t = e.userAgent, n, r, i, o, a, s, l; - n = window.opera && window.opera.buildNumber, r = /WebKit/.test(t), i = !r && !n && /MSIE/gi.test(t) && /Explorer/gi.test(e.appName), i = i && /MSIE (\w+)\./.exec(t)[1], o = -1 == t.indexOf("Trident/") || -1 == t.indexOf("rv:") && -1 == e.appName.indexOf("Netscape") ? !1 : 11, i = i || o, a = !r && !o && /Gecko/.test(t), s = -1 != t.indexOf("Mac"), l = /(iPad|iPhone)/.test(t); - var c = !l || t.match(/AppleWebKit\/(\d*)/)[1] >= 534; - return{opera: n, webkit: r, ie: i, gecko: a, mac: s, iOS: l, contentEditable: c, transparentSrc: "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7", caretAfter: 8 != i, range: window.getSelection && "Range"in window, documentMode: i ? document.documentMode || 7 : 10} - }), r(g, [], function () { - return function (e, t) { - function n(t) { - e.getElementsByTagName("head")[0].appendChild(t) - } - - function r(t, r, s) { - function l() { - for (var e = v.passed, t = e.length; t--;)e[t](); - v.status = 2, v.passed = [], v.failed = [] - } - - function c() { - for (var e = v.failed, t = e.length; t--;)e[t](); - v.status = 3, v.passed = [], v.failed = [] - } - - function d() { - var e = navigator.userAgent.match(/WebKit\/(\d*)/); - return!!(e && e[1] < 536) - } - - function u(e, t) { - e() || ((new Date).getTime() - g < a ? window.setTimeout(t, 0) : c()) - } - - function f() { - u(function () { - for (var t = e.styleSheets, n, r = t.length, i; r--;)if (n = t[r], i = n.ownerNode ? n.ownerNode : n.owningElement, i && i.id === m.id)return l(), !0 - }, f) - } - - function p() { - u(function () { - try { - var e = h.sheet.cssRules; - return l(), !!e - } catch (t) { - } - }, p) - } - - var m, h, g, v; - if (o[t] ? v = o[t] : (v = {passed: [], failed: []}, o[t] = v), r && v.passed.push(r), s && v.failed.push(s), 1 != v.status) { - if (2 == v.status)return void l(); - if (3 == v.status)return void c(); - if (v.status = 1, m = e.createElement("link"), m.rel = "stylesheet", m.type = "text/css", m.id = "u" + i++, m.async = !1, m.defer = !1, g = (new Date).getTime(), "onload"in m && !d())m.onload = f, m.onerror = c; else { - if (navigator.userAgent.indexOf("Firefox") > 0)return h = e.createElement("style"), h.textContent = '@import "' + t + '"', p(), void n(h); - f() - } - n(m), m.href = t - } - } - - var i = 0, o = {}, a; - t = t || {}, a = t.maxLoadTime || 5e3, this.load = r - } - }), r(v, [l, c, d, u, p, m, h, f, g], function (e, n, r, i, o, a, s, l, c) { - function d(e, t) { - var i = this, o; - i.doc = e, i.win = window, i.files = {}, i.counter = 0, i.stdMode = !v || e.documentMode >= 8, i.boxModel = !v || "CSS1Compat" == e.compatMode || i.stdMode, i.hasOuterHTML = "outerHTML"in e.createElement("a"), i.styleSheetLoader = new c(e), this.boundEvents = [], i.settings = t = h({keep_values: !1, hex_colors: 1}, t), i.schema = t.schema, i.styles = new n({url_converter: t.url_converter, url_converter_scope: t.url_converter_scope}, t.schema), i.fixDoc(e), i.events = t.ownEvents ? new r(t.proxy) : r.Event, o = t.schema ? t.schema.getBlockElements() : {}, i.isBlock = function (e) { - if (!e)return!1; - var t = e.nodeType; - return t ? !(1 !== t || !o[e.nodeName]) : !!o[e] - } - } - - var u = l.each, f = l.is, p = l.grep, m = l.trim, h = l.extend, g = s.webkit, v = s.ie, y = /^([a-z0-9],?)+$/i, b = /^[ \t\r\n]*$/, C = l.makeMap("fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom", " "); - return d.prototype = {root: null, props: {"for": "htmlFor", "class": "className", className: "className", checked: "checked", disabled: "disabled", maxlength: "maxLength", readonly: "readOnly", selected: "selected", value: "value", id: "id", name: "name", type: "type"}, fixDoc: function (e) { - var t = this.settings, n; - if (v && t.schema) { - "abbr article aside audio canvas details figcaption figure footer header hgroup mark menu meter nav output progress section summary time video".replace(/\w+/g, function (t) { - e.createElement(t) - }); - for (n in t.schema.getCustomElements())e.createElement(n) - } - }, clone: function (e, t) { - var n = this, r, i; - return!v || 1 !== e.nodeType || t ? e.cloneNode(t) : (i = n.doc, t ? r.firstChild : (r = i.createElement(e.nodeName), u(n.getAttribs(e), function (t) { - n.setAttrib(r, t.nodeName, n.getAttrib(e, t.nodeName)) - }), r)) - }, getRoot: function () { - var e = this; - return e.get(e.settings.root_element) || e.doc.body - }, getViewPort: function (e) { - var t, n; - return e = e ? e : this.win, t = e.document, n = this.boxModel ? t.documentElement : t.body, {x: e.pageXOffset || n.scrollLeft, y: e.pageYOffset || n.scrollTop, w: e.innerWidth || n.clientWidth, h: e.innerHeight || n.clientHeight} - }, getRect: function (e) { - var t = this, n, r; - return e = t.get(e), n = t.getPos(e), r = t.getSize(e), {x: n.x, y: n.y, w: r.w, h: r.h} - }, getSize: function (e) { - var t = this, n, r; - return e = t.get(e), n = t.getStyle(e, "width"), r = t.getStyle(e, "height"), -1 === n.indexOf("px") && (n = 0), -1 === r.indexOf("px") && (r = 0), {w: parseInt(n, 10) || e.offsetWidth || e.clientWidth, h: parseInt(r, 10) || e.offsetHeight || e.clientHeight} - }, getParent: function (e, t, n) { - return this.getParents(e, t, n, !1) - }, getParents: function (e, n, r, i) { - var o = this, a, s = []; - for (e = o.get(e), i = i === t, r = r || ("BODY" != o.getRoot().nodeName ? o.getRoot().parentNode : null), f(n, "string") && (a = n, n = "*" === n ? function (e) { - return 1 == e.nodeType - } : function (e) { - return o.is(e, a) - }); e && e != r && e.nodeType && 9 !== e.nodeType;) { - if (!n || n(e)) { - if (!i)return e; - s.push(e) - } - e = e.parentNode - } - return i ? s : null - }, get: function (e) { - var t; - return e && this.doc && "string" == typeof e && (t = e, e = this.doc.getElementById(e), e && e.id !== t) ? this.doc.getElementsByName(t)[1] : e - }, getNext: function (e, t) { - return this._findSib(e, t, "nextSibling") - }, getPrev: function (e, t) { - return this._findSib(e, t, "previousSibling") - }, select: function (t, n) { - var r = this; - return e(t, r.get(n) || r.get(r.settings.root_element) || r.doc, []) - }, is: function (n, r) { - var i; - if (n.length === t) { - if ("*" === r)return 1 == n.nodeType; - if (y.test(r)) { - for (r = r.toLowerCase().split(/,/), n = n.nodeName.toLowerCase(), i = r.length - 1; i >= 0; i--)if (r[i] == n)return!0; - return!1 - } - } - return n.nodeType && 1 != n.nodeType ? !1 : e.matches(r, n.nodeType ? [n] : n).length > 0 - }, add: function (e, t, n, r, i) { - var o = this; - return this.run(e, function (e) { - var a; - return a = f(t, "string") ? o.doc.createElement(t) : t, o.setAttribs(a, n), r && (r.nodeType ? a.appendChild(r) : o.setHTML(a, r)), i ? a : e.appendChild(a) - }) - }, create: function (e, t, n) { - return this.add(this.doc.createElement(e), e, t, n, 1) - }, createHTML: function (e, t, n) { - var r = "", i; - r += "<" + e; - for (i in t)t.hasOwnProperty(i) && null !== t[i] && (r += " " + i + '="' + this.encode(t[i]) + '"'); - return"undefined" != typeof n ? r + ">" + n + "" : r + " />" - }, createFragment: function (e) { - var t, n, r = this.doc, i; - for (i = r.createElement("div"), t = r.createDocumentFragment(), e && (i.innerHTML = e); n = i.firstChild;)t.appendChild(n); - return t - }, remove: function (e, t) { - return this.run(e, function (e) { - var n, r = e.parentNode; - if (!r)return null; - if (t)for (; n = e.firstChild;)!v || 3 !== n.nodeType || n.nodeValue ? r.insertBefore(n, e) : e.removeChild(n); - return r.removeChild(e) - }) - }, setStyle: function (e, t, n) { - return this.run(e, function (e) { - var r = this, i, o; - if (t)if ("string" == typeof t) { - i = e.style, t = t.replace(/-(\D)/g, function (e, t) { - return t.toUpperCase() - }), "number" != typeof n || C[t] || (n += "px"), "opacity" === t && e.runtimeStyle && "undefined" == typeof e.runtimeStyle.opacity && (i.filter = "" === n ? "" : "alpha(opacity=" + 100 * n + ")"), "float" == t && (t = "cssFloat"in e.style ? "cssFloat" : "styleFloat"); - try { - i[t] = n - } catch (a) { - } - r.settings.update_styles && e.removeAttribute("data-mce-style") - } else for (o in t)r.setStyle(e, o, t[o]) - }) - }, getStyle: function (e, n, r) { - if (e = this.get(e)) { - if (this.doc.defaultView && r) { - n = n.replace(/[A-Z]/g, function (e) { - return"-" + e - }); - try { - return this.doc.defaultView.getComputedStyle(e, null).getPropertyValue(n) - } catch (i) { - return null - } - } - return n = n.replace(/-(\D)/g, function (e, t) { - return t.toUpperCase() - }), "float" == n && (n = v ? "styleFloat" : "cssFloat"), e.currentStyle && r ? e.currentStyle[n] : e.style ? e.style[n] : t - } - }, setStyles: function (e, t) { - this.setStyle(e, t) - }, css: function (e, t, n) { - this.setStyle(e, t, n) - }, removeAllAttribs: function (e) { - return this.run(e, function (e) { - var t, n = e.attributes; - for (t = n.length - 1; t >= 0; t--)e.removeAttributeNode(n.item(t)) - }) - }, setAttrib: function (e, t, n) { - var r = this; - if (e && t)return this.run(e, function (e) { - var i = r.settings, o = e.getAttribute(t); - if (null !== n)switch (t) { - case"style": - if (!f(n, "string"))return void u(n, function (t, n) { - r.setStyle(e, n, t) - }); - i.keep_values && (n ? e.setAttribute("data-mce-style", n, 2) : e.removeAttribute("data-mce-style", 2)), e.style.cssText = n; - break; - case"class": - e.className = n || ""; - break; - case"src": - case"href": - i.keep_values && (i.url_converter && (n = i.url_converter.call(i.url_converter_scope || r, n, t, e)), r.setAttrib(e, "data-mce-" + t, n, 2)); - break; - case"shape": - e.setAttribute("data-mce-style", n) - } - f(n) && null !== n && 0 !== n.length ? e.setAttribute(t, "" + n, 2) : e.removeAttribute(t, 2), o != n && i.onSetAttrib && i.onSetAttrib({attrElm: e, attrName: t, attrValue: n}) - }) - }, setAttribs: function (e, t) { - var n = this; - return this.run(e, function (e) { - u(t, function (t, r) { - n.setAttrib(e, r, t) - }) - }) - }, getAttrib: function (e, t, n) { - var r, i = this, o; - if (e = i.get(e), !e || 1 !== e.nodeType)return n === o ? !1 : n; - if (f(n) || (n = ""), /^(src|href|style|coords|shape)$/.test(t) && (r = e.getAttribute("data-mce-" + t)))return r; - if (v && i.props[t] && (r = e[i.props[t]], r = r && r.nodeValue ? r.nodeValue : r), r || (r = e.getAttribute(t, 2)), /^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(t))return e[i.props[t]] === !0 && "" === r ? t : r ? t : ""; - if ("FORM" === e.nodeName && e.getAttributeNode(t))return e.getAttributeNode(t).nodeValue; - if ("style" === t && (r = r || e.style.cssText, r && (r = i.serializeStyle(i.parseStyle(r), e.nodeName), i.settings.keep_values && e.setAttribute("data-mce-style", r))), g && "class" === t && r && (r = r.replace(/(apple|webkit)\-[a-z\-]+/gi, "")), v)switch (t) { - case"rowspan": - case"colspan": - 1 === r && (r = ""); - break; - case"size": - ("+0" === r || 20 === r || 0 === r) && (r = ""); - break; - case"width": - case"height": - case"vspace": - case"checked": - case"disabled": - case"readonly": - 0 === r && (r = ""); - break; - case"hspace": - -1 === r && (r = ""); - break; - case"maxlength": - case"tabindex": - (32768 === r || 2147483647 === r || "32768" === r) && (r = ""); - break; - case"multiple": - case"compact": - case"noshade": - case"nowrap": - return 65535 === r ? t : n; - case"shape": - r = r.toLowerCase(); - break; - default: - 0 === t.indexOf("on") && r && (r = ("" + r).replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/, "$1")) - } - return r !== o && null !== r && "" !== r ? "" + r : n - }, getPos: function (e, t) { - var n = this, r = 0, i = 0, o, a = n.doc, s; - if (e = n.get(e), t = t || a.body, e) { - if (t === a.body && e.getBoundingClientRect)return s = e.getBoundingClientRect(), t = n.boxModel ? a.documentElement : a.body, r = s.left + (a.documentElement.scrollLeft || a.body.scrollLeft) - t.clientLeft, i = s.top + (a.documentElement.scrollTop || a.body.scrollTop) - t.clientTop, {x: r, y: i}; - for (o = e; o && o != t && o.nodeType;)r += o.offsetLeft || 0, i += o.offsetTop || 0, o = o.offsetParent; - for (o = e.parentNode; o && o != t && o.nodeType;)r -= o.scrollLeft || 0, i -= o.scrollTop || 0, o = o.parentNode - } - return{x: r, y: i} - }, parseStyle: function (e) { - return this.styles.parse(e) - }, serializeStyle: function (e, t) { - return this.styles.serialize(e, t) - }, addStyle: function (e) { - var t = this, n = t.doc, r, i; - if (t !== d.DOM && n === document) { - var o = d.DOM.addedStyles; - if (o = o || [], o[e])return; - o[e] = !0, d.DOM.addedStyles = o - } - i = n.getElementById("mceDefaultStyles"), i || (i = n.createElement("style"), i.id = "mceDefaultStyles", i.type = "text/css", r = n.getElementsByTagName("head")[0], r.firstChild ? r.insertBefore(i, r.firstChild) : r.appendChild(i)), i.styleSheet ? i.styleSheet.cssText += e : i.appendChild(n.createTextNode(e)) - }, loadCSS: function (e) { - var t = this, n = t.doc, r; - return t !== d.DOM && n === document ? void d.DOM.loadCSS(e) : (e || (e = ""), r = n.getElementsByTagName("head")[0], void u(e.split(","), function (e) { - var i; - t.files[e] || (t.files[e] = !0, i = t.create("link", {rel: "stylesheet", href: e}), v && n.documentMode && n.recalc && (i.onload = function () { - n.recalc && n.recalc(), i.onload = null - }), r.appendChild(i)) - })) - }, addClass: function (e, t) { - return this.run(e, function (e) { - var n; - return t ? this.hasClass(e, t) ? e.className : (n = this.removeClass(e, t), e.className = n = ("" !== n ? n + " " : "") + t, n) : 0 - }) - }, removeClass: function (e, t) { - var n = this, r; - return n.run(e, function (e) { - var i; - return n.hasClass(e, t) ? (r || (r = new RegExp("(^|\\s+)" + t + "(\\s+|$)", "g")), i = e.className.replace(r, " "), i = m(" " != i ? i : ""), e.className = i, i || (e.removeAttribute("class"), e.removeAttribute("className")), i) : e.className - }) - }, hasClass: function (e, t) { - return e = this.get(e), e && t ? -1 !== (" " + e.className + " ").indexOf(" " + t + " ") : !1 - }, toggleClass: function (e, n, r) { - r = r === t ? !this.hasClass(e, n) : r, this.hasClass(e, n) !== r && (r ? this.addClass(e, n) : this.removeClass(e, n)) - }, show: function (e) { - return this.setStyle(e, "display", "block") - }, hide: function (e) { - return this.setStyle(e, "display", "none") - }, isHidden: function (e) { - return e = this.get(e), !e || "none" == e.style.display || "none" == this.getStyle(e, "display") - }, uniqueId: function (e) { - return(e ? e : "mce_") + this.counter++ - }, setHTML: function (e, t) { - var n = this; - return n.run(e, function (e) { - if (v) { - for (; e.firstChild;)e.removeChild(e.firstChild); - try { - e.innerHTML = "
    " + t, e.removeChild(e.firstChild) - } catch (r) { - var i = n.create("div"); - i.innerHTML = "
    " + t, u(p(i.childNodes), function (t, n) { - n && e.canHaveHTML && e.appendChild(t) - }) - } - } else e.innerHTML = t; - return t - }) - }, getOuterHTML: function (e) { - var t, n = this; - return(e = n.get(e)) ? 1 === e.nodeType && n.hasOuterHTML ? e.outerHTML : (t = (e.ownerDocument || n.doc).createElement("body"), t.appendChild(e.cloneNode(!0)), t.innerHTML) : null - }, setOuterHTML: function (e, t, n) { - var r = this; - return r.run(e, function (e) { - function i() { - var i, o; - for (o = n.createElement("body"), o.innerHTML = t, i = o.lastChild; i;)r.insertAfter(i.cloneNode(!0), e), i = i.previousSibling; - r.remove(e) - } - - if (1 == e.nodeType)if (n = n || e.ownerDocument || r.doc, v)try { - 1 == e.nodeType && r.hasOuterHTML ? e.outerHTML = t : i() - } catch (o) { - i() - } else i() - }) - }, decode: a.decode, encode: a.encodeAllRaw, insertAfter: function (e, t) { - return t = this.get(t), this.run(e, function (e) { - var n, r; - return n = t.parentNode, r = t.nextSibling, r ? n.insertBefore(e, r) : n.appendChild(e), e - }) - }, replace: function (e, t, n) { - var r = this; - return r.run(t, function (t) { - return f(t, "array") && (e = e.cloneNode(!0)), n && u(p(t.childNodes), function (t) { - e.appendChild(t) - }), t.parentNode.replaceChild(e, t) - }) - }, rename: function (e, t) { - var n = this, r; - return e.nodeName != t.toUpperCase() && (r = n.create(t), u(n.getAttribs(e), function (t) { - n.setAttrib(r, t.nodeName, n.getAttrib(e, t.nodeName)) - }), n.replace(r, e, 1)), r || e - }, findCommonAncestor: function (e, t) { - for (var n = e, r; n;) { - for (r = t; r && n != r;)r = r.parentNode; - if (n == r)break; - n = n.parentNode - } - return!n && e.ownerDocument ? e.ownerDocument.documentElement : n - }, toHex: function (e) { - return this.styles.toHex(l.trim(e)) - }, run: function (e, t, n) { - var r = this, i; - return"string" == typeof e && (e = r.get(e)), e ? (n = n || this, e.nodeType || !e.length && 0 !== e.length ? t.call(n, e) : (i = [], u(e, function (e, o) { - e && ("string" == typeof e && (e = r.get(e)), i.push(t.call(n, e, o))) - }), i)) : !1 - }, getAttribs: function (e) { - var t; - if (e = this.get(e), !e)return[]; - if (v) { - if (t = [], "OBJECT" == e.nodeName)return e.attributes; - "OPTION" === e.nodeName && this.getAttrib(e, "selected") && t.push({specified: 1, nodeName: "selected"}); - var n = /<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi; - return e.cloneNode(!1).outerHTML.replace(n, "").replace(/[\w:\-]+/gi, function (e) { - t.push({specified: 1, nodeName: e}) - }), t - } - return e.attributes - }, isEmpty: function (e, t) { - var n = this, r, o, a, s, l, c = 0; - if (e = e.firstChild) { - s = new i(e, e.parentNode), t = t || n.schema ? n.schema.getNonEmptyElements() : null; - do { - if (a = e.nodeType, 1 === a) { - if (e.getAttribute("data-mce-bogus"))continue; - if (l = e.nodeName.toLowerCase(), t && t[l]) { - if ("br" === l) { - c++; - continue - } - return!1 - } - for (o = n.getAttribs(e), r = e.attributes.length; r--;)if (l = e.attributes[r].nodeName, "name" === l || "data-mce-bookmark" === l)return!1 - } - if (8 == a)return!1; - if (3 === a && !b.test(e.nodeValue))return!1 - } while (e = s.next()) - } - return 1 >= c - }, createRng: function () { - var e = this.doc; - return e.createRange ? e.createRange() : new o(this) - }, nodeIndex: function (e, t) { - var n = 0, r, i, o; - if (e)for (r = e.nodeType, e = e.previousSibling, i = e; e; e = e.previousSibling)o = e.nodeType, (!t || 3 != o || o != r && e.nodeValue.length) && (n++, r = o); - return n - }, split: function (e, t, n) { - function r(e) { - function t(e) { - var t = e.previousSibling && "SPAN" == e.previousSibling.nodeName, n = e.nextSibling && "SPAN" == e.nextSibling.nodeName; - return t && n - } - - var n, o = e.childNodes, a = e.nodeType; - if (1 != a || "bookmark" != e.getAttribute("data-mce-type")) { - for (n = o.length - 1; n >= 0; n--)r(o[n]); - if (9 != a) { - if (3 == a && e.nodeValue.length > 0) { - var s = m(e.nodeValue).length; - if (!i.isBlock(e.parentNode) || s > 0 || 0 === s && t(e))return - } else if (1 == a && (o = e.childNodes, 1 == o.length && o[0] && 1 == o[0].nodeType && "bookmark" == o[0].getAttribute("data-mce-type") && e.parentNode.insertBefore(o[0], e), o.length || /^(br|hr|input|img)$/i.test(e.nodeName)))return; - i.remove(e) - } - return e - } - } - - var i = this, o = i.createRng(), a, s, l; - return e && t ? (o.setStart(e.parentNode, i.nodeIndex(e)), o.setEnd(t.parentNode, i.nodeIndex(t)), a = o.extractContents(), o = i.createRng(), o.setStart(t.parentNode, i.nodeIndex(t) + 1), o.setEnd(e.parentNode, i.nodeIndex(e) + 1), s = o.extractContents(), l = e.parentNode, l.insertBefore(r(a), e), n ? l.replaceChild(n, t) : l.insertBefore(t, e), l.insertBefore(r(s), e), i.remove(e), n || t) : void 0 - }, bind: function (e, t, n, r) { - var i = this; - if (l.isArray(e)) { - for (var o = e.length; o--;)e[o] = i.bind(e[o], t, n, r); - return e - } - return!i.settings.collect || e !== i.doc && e !== i.win || i.boundEvents.push([e, t, n, r]), i.events.bind(e, t, n, r || i) - }, unbind: function (e, t, n) { - var r = this, i; - if (l.isArray(e)) { - for (i = e.length; i--;)e[i] = r.unbind(e[i], t, n); - return e - } - if (r.boundEvents && (e === r.doc || e === r.win))for (i = r.boundEvents.length; i--;) { - var o = r.boundEvents[i]; - e != o[0] || t && t != o[1] || n && n != o[2] || this.events.unbind(o[0], o[1], o[2]) - } - return this.events.unbind(e, t, n) - }, fire: function (e, t, n) { - return this.events.fire(e, t, n) - }, getContentEditable: function (e) { - var t; - return 1 != e.nodeType ? null : (t = e.getAttribute("data-mce-contenteditable"), t && "inherit" !== t ? t : "inherit" !== e.contentEditable ? e.contentEditable : null) - }, destroy: function () { - var t = this; - if (t.boundEvents) { - for (var n = t.boundEvents.length; n--;) { - var r = t.boundEvents[n]; - this.events.unbind(r[0], r[1], r[2]) - } - t.boundEvents = null - } - e.setDocument && e.setDocument(), t.win = t.doc = t.root = t.events = t.frag = null - }, dumpRng: function (e) { - return"startContainer: " + e.startContainer.nodeName + ", startOffset: " + e.startOffset + ", endContainer: " + e.endContainer.nodeName + ", endOffset: " + e.endOffset - }, _findSib: function (e, t, n) { - var r = this, i = t; - if (e)for ("string" == typeof i && (i = function (e) { - return r.is(e, t) - }), e = e[n]; e; e = e[n])if (i(e))return e; - return null - }}, d.DOM = new d(document), d - }), r(y, [v, f], function (e, t) { - function n() { - function e(e, t) { - function n() { - o.remove(s), a && (a.onreadystatechange = a.onload = a = null), t() - } - - function i() { - "undefined" != typeof console && console.log && console.log("Failed to load: " + e) - } - - var o = r, a, s; - s = o.uniqueId(), a = document.createElement("script"), a.id = s, a.type = "text/javascript", a.src = e, "onreadystatechange"in a ? a.onreadystatechange = function () { - /loaded|complete/.test(a.readyState) && n() - } : a.onload = n, a.onerror = i, (document.getElementsByTagName("head")[0] || document.body).appendChild(a) - } - - var t = 0, n = 1, a = 2, s = {}, l = [], c = {}, d = [], u = 0, f; - this.isDone = function (e) { - return s[e] == a - }, this.markDone = function (e) { - s[e] = a - }, this.add = this.load = function (e, n, r) { - var i = s[e]; - i == f && (l.push(e), s[e] = t), n && (c[e] || (c[e] = []), c[e].push({func: n, scope: r || this})) - }, this.loadQueue = function (e, t) { - this.loadScripts(l, e, t) - }, this.loadScripts = function (t, r, l) { - function p(e) { - i(c[e], function (e) { - e.func.call(e.scope) - }), c[e] = f - } - - var m; - d.push({func: r, scope: l || this}), (m = function () { - var r = o(t); - t.length = 0, i(r, function (t) { - return s[t] == a ? void p(t) : void(s[t] != n && (s[t] = n, u++, e(t, function () { - s[t] = a, u--, p(t), m() - }))) - }), u || (i(d, function (e) { - e.func.call(e.scope) - }), d.length = 0) - })() - } - } - - var r = e.DOM, i = t.each, o = t.grep; - return n.ScriptLoader = new n, n - }), r(b, [y, f], function (e, n) { - function r() { - var e = this; - e.items = [], e.urls = {}, e.lookup = {} - } - - var i = n.each; - return r.prototype = {get: function (e) { - return this.lookup[e] ? this.lookup[e].instance : t - }, dependencies: function (e) { - var t; - return this.lookup[e] && (t = this.lookup[e].dependencies), t || [] - }, requireLangPack: function (t, n) { - if (r.language && r.languageLoad !== !1) { - if (n && new RegExp("([, ]|\\b)" + r.language + "([, ]|\\b)").test(n) === !1)return; - e.ScriptLoader.add(this.urls[t] + "/langs/" + r.language + ".js") - } - }, add: function (e, t, n) { - return this.items.push(t), this.lookup[e] = {instance: t, dependencies: n}, t - }, createUrl: function (e, t) { - return"object" == typeof t ? t : {prefix: e.prefix, resource: t, suffix: e.suffix} - }, addComponents: function (t, n) { - var r = this.urls[t]; - i(n, function (t) { - e.ScriptLoader.add(r + "/" + t) - }) - }, load: function (n, o, a, s) { - function l() { - var r = c.dependencies(n); - i(r, function (e) { - var n = c.createUrl(o, e); - c.load(n.resource, n, t, t) - }), a && a.call(s ? s : e) - } - - var c = this, d = o; - c.urls[n] || ("object" == typeof o && (d = o.prefix + o.resource + o.suffix), 0 !== d.indexOf("/") && -1 == d.indexOf("://") && (d = r.baseURL + "/" + d), c.urls[n] = d.substring(0, d.lastIndexOf("/")), c.lookup[n] ? l() : e.ScriptLoader.add(d, l, s)) - }}, r.PluginManager = new r, r.ThemeManager = new r, r - }), r(C, [], function () { - function e(e, t, n) { - var r, i, o = n ? "lastChild" : "firstChild", a = n ? "prev" : "next"; - if (e[o])return e[o]; - if (e !== t) { - if (r = e[a])return r; - for (i = e.parent; i && i !== t; i = i.parent)if (r = i[a])return r - } - } - - function t(e, t) { - this.name = e, this.type = t, 1 === t && (this.attributes = [], this.attributes.map = {}) - } - - var n = /^[ \t\r\n]*$/, r = {"#text": 3, "#comment": 8, "#cdata": 4, "#pi": 7, "#doctype": 10, "#document-fragment": 11}; - return t.prototype = {replace: function (e) { - var t = this; - return e.parent && e.remove(), t.insert(e, t), t.remove(), t - }, attr: function (e, t) { - var n = this, r, i, o; - if ("string" != typeof e) { - for (i in e)n.attr(i, e[i]); - return n - } - if (r = n.attributes) { - if (t !== o) { - if (null === t) { - if (e in r.map)for (delete r.map[e], i = r.length; i--;)if (r[i].name === e)return r = r.splice(i, 1), n; - return n - } - if (e in r.map) { - for (i = r.length; i--;)if (r[i].name === e) { - r[i].value = t; - break - } - } else r.push({name: e, value: t}); - return r.map[e] = t, n - } - return r.map[e] - } - }, clone: function () { - var e = this, n = new t(e.name, e.type), r, i, o, a, s; - if (o = e.attributes) { - for (s = [], s.map = {}, r = 0, i = o.length; i > r; r++)a = o[r], "id" !== a.name && (s[s.length] = {name: a.name, value: a.value}, s.map[a.name] = a.value); - n.attributes = s - } - return n.value = e.value, n.shortEnded = e.shortEnded, n - }, wrap: function (e) { - var t = this; - return t.parent.insert(e, t), e.append(t), t - }, unwrap: function () { - var e = this, t, n; - for (t = e.firstChild; t;)n = t.next, e.insert(t, e, !0), t = n; - e.remove() - }, remove: function () { - var e = this, t = e.parent, n = e.next, r = e.prev; - return t && (t.firstChild === e ? (t.firstChild = n, n && (n.prev = null)) : r.next = n, t.lastChild === e ? (t.lastChild = r, r && (r.next = null)) : n.prev = r, e.parent = e.next = e.prev = null), e - }, append: function (e) { - var t = this, n; - return e.parent && e.remove(), n = t.lastChild, n ? (n.next = e, e.prev = n, t.lastChild = e) : t.lastChild = t.firstChild = e, e.parent = t, e - }, insert: function (e, t, n) { - var r; - return e.parent && e.remove(), r = t.parent || this, n ? (t === r.firstChild ? r.firstChild = e : t.prev.next = e, e.prev = t.prev, e.next = t, t.prev = e) : (t === r.lastChild ? r.lastChild = e : t.next.prev = e, e.next = t.next, e.prev = t, t.next = e), e.parent = r, e - }, getAll: function (t) { - var n = this, r, i = []; - for (r = n.firstChild; r; r = e(r, n))r.name === t && i.push(r); - return i - }, empty: function () { - var t = this, n, r, i; - if (t.firstChild) { - for (n = [], i = t.firstChild; i; i = e(i, t))n.push(i); - for (r = n.length; r--;)i = n[r], i.parent = i.firstChild = i.lastChild = i.next = i.prev = null - } - return t.firstChild = t.lastChild = null, t - }, isEmpty: function (t) { - var r = this, i = r.firstChild, o, a; - if (i)do { - if (1 === i.type) { - if (i.attributes.map["data-mce-bogus"])continue; - if (t[i.name])return!1; - for (o = i.attributes.length; o--;)if (a = i.attributes[o].name, "name" === a || 0 === a.indexOf("data-mce-"))return!1 - } - if (8 === i.type)return!1; - if (3 === i.type && !n.test(i.value))return!1 - } while (i = e(i, r)); - return!0 - }, walk: function (t) { - return e(this, null, t) - }}, t.create = function (e, n) { - var i, o; - if (i = new t(e, r[e] || 1), n)for (o in n)i.attr(o, n[o]); - return i - }, t - }), r(x, [f], function (e) { - function t(e, t) { - return e ? e.split(t || " ") : [] - } - - function n(e) { - function n(e, n, r) { - function i(e) { - var t = {}, n, r; - for (n = 0, r = e.length; r > n; n++)t[e[n]] = {}; - return t - } - - var o, l, c, d = arguments; - for (r = r || [], n = n || "", "string" == typeof r && (r = t(r)), l = 3; l < d.length; l++)"string" == typeof d[l] && (d[l] = t(d[l])), r.push.apply(r, d[l]); - for (e = t(e), o = e.length; o--;)c = [].concat(s, t(n)), a[e[o]] = {attributes: i(c), attributesOrder: c, children: i(r)} - } - - function i(e, n) { - var r, i, o, s; - for (e = t(e), r = e.length, n = t(n); r--;)for (i = a[e[r]], o = 0, s = n.length; s > o; o++)i.attributes[n[o]] = {}, i.attributesOrder.push(n[o]) - } - - var a = {}, s, l, c, d, u, f, p; - return r[e] ? r[e] : (s = t("id accesskey class dir lang style tabindex title"), l = t("onabort onblur oncancel oncanplay oncanplaythrough onchange onclick onclose oncontextmenu oncuechange ondblclick ondrag ondragend ondragenter ondragleave ondragover ondragstart ondrop ondurationchange onemptied onended onerror onfocus oninput oninvalid onkeydown onkeypress onkeyup onload onloadeddata onloadedmetadata onloadstart onmousedown onmousemove onmouseout onmouseover onmouseup onmousewheel onpause onplay onplaying onprogress onratechange onreset onscroll onseeked onseeking onseeking onselect onshow onstalled onsubmit onsuspend ontimeupdate onvolumechange onwaiting"), c = t("address blockquote div dl fieldset form h1 h2 h3 h4 h5 h6 hr menu ol p pre table ul"), d = t("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"), "html4" != e && (s.push.apply(s, t("contenteditable contextmenu draggable dropzone hidden spellcheck translate")), c.push.apply(c, t("article aside details dialog figure header footer hgroup section nav")), d.push.apply(d, t("audio canvas command datalist mark meter output progress time wbr video ruby bdi keygen"))), "html5-strict" != e && (s.push("xml:lang"), p = t("acronym applet basefont big font strike tt"), d.push.apply(d, p), o(p, function (e) { - n(e, "", d) - }), f = t("center dir isindex noframes"), c.push.apply(c, f), u = [].concat(c, d), o(f, function (e) { - n(e, "", u) - })), u = u || [].concat(c, d), n("html", "manifest", "head body"), n("head", "", "base command link meta noscript script style title"), n("title hr noscript br"), n("base", "href target"), n("link", "href rel media hreflang type sizes hreflang"), n("meta", "name http-equiv content charset"), n("style", "media type scoped"), n("script", "src async defer type charset"), n("body", "onafterprint onbeforeprint onbeforeunload onblur onerror onfocus onhashchange onload onmessage onoffline ononline onpagehide onpageshow onpopstate onresize onscroll onstorage onunload", u), n("address dt dd div caption", "", u), n("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", "", d), n("blockquote", "cite", u), n("ol", "reversed start type", "li"), n("ul", "", "li"), n("li", "value", u), n("dl", "", "dt dd"), n("a", "href target rel media hreflang type", d), n("q", "cite", d), n("ins del", "cite datetime", u), n("img", "src alt usemap ismap width height"), n("iframe", "src name width height", u), n("embed", "src type width height"), n("object", "data type typemustmatch name usemap form width height", u, "param"), n("param", "name value"), n("map", "name", u, "area"), n("area", "alt coords shape href target rel media hreflang type"), n("table", "border", "caption colgroup thead tfoot tbody tr" + ("html4" == e ? " col" : "")), n("colgroup", "span", "col"), n("col", "span"), n("tbody thead tfoot", "", "tr"), n("tr", "", "td th"), n("td", "colspan rowspan headers", u), n("th", "colspan rowspan headers scope abbr", u), n("form", "accept-charset action autocomplete enctype method name novalidate target", u), n("fieldset", "disabled form name", u, "legend"), n("label", "form for", d), n("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("button", "disabled form formaction formenctype formmethod formnovalidate formtarget name type value", "html4" == e ? u : d), n("select", "disabled form multiple name required size", "option optgroup"), n("optgroup", "disabled label", "option"), n("option", "disabled label selected value"), n("textarea", "cols dirname disabled form maxlength name readonly required rows wrap"), n("menu", "type label", u, "li"), n("noscript", "", u), "html4" != e && (n("wbr"), n("ruby", "", d, "rt rp"), n("figcaption", "", u), n("mark rt rp summary bdi", "", d), n("canvas", "width height", u), n("video", "src crossorigin poster preload autoplay mediagroup loop muted controls width height", u, "track source"), n("audio", "src crossorigin preload autoplay mediagroup loop muted controls", u, "track source"), n("source", "src type media"), n("track", "kind src srclang label default"), n("datalist", "", d, "option"), n("article section nav aside header footer", "", u), n("hgroup", "", "h1 h2 h3 h4 h5 h6"), n("figure", "", u, "figcaption"), n("time", "datetime", d), n("dialog", "open", u), n("command", "type label icon disabled checked radiogroup command"), n("output", "for form name", d), n("progress", "value max", d), n("meter", "value min max low high optimum", d), n("details", "open", u, "summary"), n("keygen", "autofocus challenge disabled form keytype name")), "html5-strict" != e && (i("script", "language xml:space"), i("style", "xml:space"), i("object", "declare classid codebase codetype archive standby align border hspace vspace"), i("param", "valuetype type"), i("a", "charset name rev shape coords"), i("br", "clear"), i("applet", "codebase archive code object alt name width height align hspace vspace"), i("img", "name longdesc align border hspace vspace"), i("iframe", "longdesc frameborder marginwidth marginheight scrolling align"), i("font basefont", "size color face"), i("input", "usemap align"), i("select", "onchange"), i("textarea"), i("h1 h2 h3 h4 h5 h6 div p legend caption", "align"), i("ul", "type compact"), i("li", "type"), i("ol dl menu dir", "compact"), i("pre", "width xml:space"), i("hr", "align noshade size width"), i("isindex", "prompt"), i("table", "summary width frame rules cellspacing cellpadding align bgcolor"), i("col", "width align char charoff valign"), i("colgroup", "width align char charoff valign"), i("thead", "align char charoff valign"), i("tr", "align char charoff valign bgcolor"), i("th", "axis align char charoff valign nowrap bgcolor width height"), i("form", "accept"), i("td", "abbr axis scope align char charoff valign nowrap bgcolor width height"), i("tfoot", "align char charoff valign"), i("tbody", "align char charoff valign"), i("area", "nohref"), i("body", "background bgcolor text link vlink alink")), "html4" != e && (i("input button select textarea", "autofocus"), i("input textarea", "placeholder"), i("a", "download"), i("link script img", "crossorigin"), i("iframe", "srcdoc sandbox seamless allowfullscreen")), o(t("a form meter progress dfn"), function (e) { - a[e] && delete a[e].children[e] - }), delete a.caption.children.table, r[e] = a, a) - } - - var r = {}, i = e.makeMap, o = e.each, a = e.extend, s = e.explode, l = e.inArray; - return function (e) { - function c(t, n, o) { - var s = e[t]; - return s ? s = i(s, ",", i(s.toUpperCase(), " ")) : (s = r[t], s || (s = i(n, " ", i(n.toUpperCase(), " ")), s = a(s, o), r[t] = s)), s - } - - function d(e) { - return new RegExp("^" + e.replace(/([?+*])/g, ".$1") + "$") - } - - function u(e) { - var n, r, o, a, s, c, u, f, p, m, h, g, y, C, x, w, _, N, E, k = /^([#+\-])?([^\[!\/]+)(?:\/([^\[!]+))?(?:(!?)\[([^\]]+)\])?$/, S = /^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/, T = /[*?+]/; - if (e)for (e = t(e, ","), v["@"] && (w = v["@"].attributes, _ = v["@"].attributesOrder), n = 0, r = e.length; r > n; n++)if (s = k.exec(e[n])) { - if (C = s[1], p = s[2], x = s[3], f = s[5], g = {}, y = [], c = {attributes: g, attributesOrder: y}, "#" === C && (c.paddEmpty = !0), "-" === C && (c.removeEmpty = !0), "!" === s[4] && (c.removeEmptyAttrs = !0), w) { - for (N in w)g[N] = w[N]; - y.push.apply(y, _) - } - if (f)for (f = t(f, "|"), o = 0, a = f.length; a > o; o++)if (s = S.exec(f[o])) { - if (u = {}, h = s[1], m = s[2].replace(/::/g, ":"), C = s[3], E = s[4], "!" === h && (c.attributesRequired = c.attributesRequired || [], c.attributesRequired.push(m), u.required = !0), "-" === h) { - delete g[m], y.splice(l(y, m), 1); - continue - } - C && ("=" === C && (c.attributesDefault = c.attributesDefault || [], c.attributesDefault.push({name: m, value: E}), u.defaultValue = E), ":" === C && (c.attributesForced = c.attributesForced || [], c.attributesForced.push({name: m, value: E}), u.forcedValue = E), "<" === C && (u.validValues = i(E, "?"))), T.test(m) ? (c.attributePatterns = c.attributePatterns || [], u.pattern = d(m), c.attributePatterns.push(u)) : (g[m] || y.push(m), g[m] = u) - } - w || "@" != p || (w = g, _ = y), x && (c.outputName = p, v[x] = c), T.test(p) ? (c.pattern = d(p), b.push(c)) : v[p] = c - } - } - - function f(e) { - v = {}, b = [], u(e), o(x, function (e, t) { - y[t] = e.children - }) - } - - function p(e) { - var n = /^(~)?(.+)$/; - e && o(t(e, ","), function (e) { - var t = n.exec(e), r = "~" === t[1], i = r ? "span" : "div", s = t[2]; - if (y[s] = y[i], R[s] = i, r || (k[s.toUpperCase()] = {}, k[s] = {}), !v[s]) { - var l = v[i]; - l = a({}, l), delete l.removeEmptyAttrs, delete l.removeEmpty, v[s] = l - } - o(y, function (e) { - e[i] && (e[s] = e[i]) - }) - }) - } - - function m(e) { - var n = /^([+\-]?)(\w+)\[([^\]]+)\]$/; - e && o(t(e, ","), function (e) { - var r = n.exec(e), i, a; - r && (a = r[1], i = a ? y[r[2]] : y[r[2]] = {"#comment": {}}, i = y[r[2]], o(t(r[3], "|"), function (e) { - "-" === a ? delete i[e] : i[e] = {} - })) - }) - } - - function h(e) { - var t = v[e], n; - if (t)return t; - for (n = b.length; n--;)if (t = b[n], t.pattern.test(e))return t - } - - var g = this, v = {}, y = {}, b = [], C, x, w, _, N, E, k, S, T, R = {}, A = {}; - e = e || {}, x = n(e.schema), e.verify_html === !1 && (e.valid_elements = "*[*]"), e.valid_styles && (C = {}, o(e.valid_styles, function (e, t) { - C[t] = s(e) - })), w = c("whitespace_elements", "pre script noscript style textarea video audio iframe object"), _ = c("self_closing_elements", "colgroup dd dt li option p td tfoot th thead tr"), N = c("short_ended_elements", "area base basefont br col frame hr img input isindex link meta param embed source wbr track"), E = c("boolean_attributes", "checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls"), S = c("non_empty_elements", "td th iframe video audio object script", N), T = c("text_block_elements", "h1 h2 h3 h4 h5 h6 p div address pre form blockquote center dir fieldset header footer article section hgroup aside nav figure"), k = c("block_elements", "hr table tbody thead tfoot th tr td li ol ul caption dl dt dd noscript menu isindex samp option datalist select optgroup", T), o((e.special || "script noscript style textarea").split(" "), function (e) { - A[e] = new RegExp("]*>", "gi") - }), e.valid_elements ? f(e.valid_elements) : (o(x, function (e, t) { - v[t] = {attributes: e.attributes, attributesOrder: e.attributesOrder}, y[t] = e.children - }), "html5" != e.schema && o(t("strong/b em/i"), function (e) { - e = t(e, "/"), v[e[1]].outputName = e[0] - }), v.img.attributesDefault = [ - {name: "alt", value: ""} - ], o(t("ol ul sub sup blockquote span font a table tbody tr strong em b i"), function (e) { - v[e] && (v[e].removeEmpty = !0) - }), o(t("p h1 h2 h3 h4 h5 h6 th td pre div address caption"), function (e) { - v[e].paddEmpty = !0 - }), o(t("span"), function (e) { - v[e].removeEmptyAttrs = !0 - })), p(e.custom_elements), m(e.valid_children), u(e.extended_valid_elements), m("+ol[ul|ol],+ul[ul|ol]"), e.invalid_elements && o(s(e.invalid_elements), function (e) { - v[e] && delete v[e] - }), h("span") || u("span[!data-mce-type|*]"), g.children = y, g.styles = C, g.getBoolAttrs = function () { - return E - }, g.getBlockElements = function () { - return k - }, g.getTextBlockElements = function () { - return T - }, g.getShortEndedElements = function () { - return N - }, g.getSelfClosingElements = function () { - return _ - }, g.getNonEmptyElements = function () { - return S - }, g.getWhiteSpaceElements = function () { - return w - }, g.getSpecialElements = function () { - return A - }, g.isValidChild = function (e, t) { - var n = y[e]; - return!(!n || !n[t]) - }, g.isValid = function (e, t) { - var n, r, i = h(e); - if (i) { - if (!t)return!0; - if (i.attributes[t])return!0; - if (n = i.attributePatterns)for (r = n.length; r--;)if (n[r].pattern.test(e))return!0 - } - return!1 - }, g.getElementRule = h, g.getCustomElements = function () { - return R - }, g.addValidElements = u, g.setValidElements = f, g.addCustomElements = p, g.addValidChildren = m, g.elements = v - } - }), r(w, [x, m, f], function (e, t, n) { - var r = n.each; - return function (i, o) { - var a = this, s = function () { - }; - i = i || {}, a.schema = o = o || new e, i.fix_self_closing !== !1 && (i.fix_self_closing = !0), r("comment cdata text start end pi doctype".split(" "), function (e) { - e && (a[e] = i[e] || s) - }), a.parse = function (e) { - function r(e) { - var t, n; - for (t = f.length; t-- && f[t].name !== e;); - if (t >= 0) { - for (n = f.length - 1; n >= t; n--)e = f[n], e.valid && s.end(e.name); - f.length = t - } - } - - function a(e, t, n, r, o) { - var a, s, l = /[\s\u0000-\u001F]+/g; - if (t = t.toLowerCase(), n = t in C ? t : z(n || r || o || ""), w && !v && 0 !== t.indexOf("data-")) { - if (a = S[t], !a && T) { - for (s = T.length; s-- && (a = T[s], !a.pattern.test(t));); - -1 === s && (a = null) - } - if (!a)return; - if (a.validValues && !(n in a.validValues))return - } - if (W[t] && !i.allow_script_urls) { - var c = n.replace(l, ""); - try { - if (c = decodeURIComponent(c), V.test(c))return - } catch (d) { - if (c = unescape(c), V.test(c))return - } - } - p.map[t] = n, p.push({name: t, value: n}) - } - - var s = this, l, c = 0, d, u, f = [], p, m, h, g, v, y, b, C, x, w, _, N, E, k, S, T, R, A, B, L, H, M, D, P, O, I = 0, z = t.decode, F, W = n.makeMap("src,href"), V = /(java|vb)script:/i; - for (M = new RegExp("<(?:(?:!--([\\w\\W]*?)-->)|(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|(?:!DOCTYPE([\\w\\W]*?)>)|(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|(?:\\/([^>]+)>)|(?:([A-Za-z0-9\\-\\:\\.]+)((?:\\s+[^\"'>]+(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>]*))*|\\/|\\s+)>))", "g"), D = /([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g, b = o.getShortEndedElements(), H = i.self_closing_elements || o.getSelfClosingElements(), C = o.getBoolAttrs(), w = i.validate, y = i.remove_internals, F = i.fix_self_closing, P = o.getSpecialElements(); l = M.exec(e);) { - if (c < l.index && s.text(z(e.substr(c, l.index - c))), d = l[6])d = d.toLowerCase(), ":" === d.charAt(0) && (d = d.substr(1)), r(d); else if (d = l[7]) { - if (d = d.toLowerCase(), ":" === d.charAt(0) && (d = d.substr(1)), x = d in b, F && H[d] && f.length > 0 && f[f.length - 1].name === d && r(d), !w || (_ = o.getElementRule(d))) { - if (N = !0, w && (S = _.attributes, T = _.attributePatterns), (k = l[8]) ? (v = -1 !== k.indexOf("data-mce-type"), v && y && (N = !1), p = [], p.map = {}, k.replace(D, a)) : (p = [], p.map = {}), w && !v) { - if (R = _.attributesRequired, A = _.attributesDefault, B = _.attributesForced, L = _.removeEmptyAttrs, L && !p.length && (N = !1), B)for (m = B.length; m--;)E = B[m], g = E.name, O = E.value, "{$uid}" === O && (O = "mce_" + I++), p.map[g] = O, p.push({name: g, value: O}); - if (A)for (m = A.length; m--;)E = A[m], g = E.name, g in p.map || (O = E.value, "{$uid}" === O && (O = "mce_" + I++), p.map[g] = O, p.push({name: g, value: O})); - if (R) { - for (m = R.length; m-- && !(R[m]in p.map);); - -1 === m && (N = !1) - } - p.map["data-mce-bogus"] && (N = !1) - } - N && s.start(d, p, x) - } else N = !1; - if (u = P[d]) { - u.lastIndex = c = l.index + l[0].length, (l = u.exec(e)) ? (N && (h = e.substr(c, l.index - c)), c = l.index + l[0].length) : (h = e.substr(c), c = e.length), N && (h.length > 0 && s.text(h, !0), s.end(d)), M.lastIndex = c; - continue - } - x || (k && k.indexOf("/") == k.length - 1 ? N && s.end(d) : f.push({name: d, valid: N})) - } else(d = l[1]) ? (">" === d.charAt(0) && (d = " " + d), i.allow_conditional_comments || "[if" !== d.substr(0, 3) || (d = " " + d), s.comment(d)) : (d = l[2]) ? s.cdata(d) : (d = l[3]) ? s.doctype(d) : (d = l[4]) && s.pi(d, l[5]); - c = l.index + l[0].length - } - for (c < e.length && s.text(z(e.substr(c))), m = f.length - 1; m >= 0; m--)d = f[m], d.valid && s.end(d.name) - } - } - }), r(_, [C, x, w, f], function (e, t, n, r) { - var i = r.makeMap, o = r.each, a = r.explode, s = r.extend; - return function (r, l) { - function c(t) { - var n, r, o, a, s, c, u, f, p, m, h, g, v, y; - for (h = i("tr,td,th,tbody,thead,tfoot,table"), m = l.getNonEmptyElements(), g = l.getTextBlockElements(), n = 0; n < t.length; n++)if (r = t[n], r.parent && !r.fixed)if (g[r.name] && "li" == r.parent.name) { - for (v = r.next; v && g[v.name];)v.name = "li", v.fixed = !0, r.parent.insert(v, r.parent), v = v.next; - r.unwrap(r) - } else { - for (a = [r], o = r.parent; o && !l.isValidChild(o.name, r.name) && !h[o.name]; o = o.parent)a.push(o); - if (o && a.length > 1) { - for (a.reverse(), s = c = d.filterNode(a[0].clone()), p = 0; p < a.length - 1; p++) { - for (l.isValidChild(c.name, a[p].name) ? (u = d.filterNode(a[p].clone()), c.append(u)) : u = c, f = a[p].firstChild; f && f != a[p + 1];)y = f.next, u.append(f), f = y; - c = u - } - s.isEmpty(m) ? o.insert(r, a[0], !0) : (o.insert(s, a[0], !0), o.insert(r, s)), o = a[0], (o.isEmpty(m) || o.firstChild === o.lastChild && "br" === o.firstChild.name) && o.empty().remove() - } else if (r.parent) { - if ("li" === r.name) { - if (v = r.prev, v && ("ul" === v.name || "ul" === v.name)) { - v.append(r); - continue - } - if (v = r.next, v && ("ul" === v.name || "ul" === v.name)) { - v.insert(r, v.firstChild, !0); - continue - } - r.wrap(d.filterNode(new e("ul", 1))); - continue - } - l.isValidChild(r.parent.name, "div") && l.isValidChild("div", r.name) ? r.wrap(d.filterNode(new e("div", 1))) : "style" === r.name || "script" === r.name ? r.empty().remove() : r.unwrap() - } - } - } - - var d = this, u = {}, f = [], p = {}, m = {}; - r = r || {}, r.validate = "validate"in r ? r.validate : !0, r.root_name = r.root_name || "body", d.schema = l = l || new t, d.filterNode = function (e) { - var t, n, r; - n in u && (r = p[n], r ? r.push(e) : p[n] = [e]), t = f.length; - for (; t--;)n = f[t].name, n in e.attributes.map && (r = m[n], r ? r.push(e) : m[n] = [e]); - return e - }, d.addNodeFilter = function (e, t) { - o(a(e), function (e) { - var n = u[e]; - n || (u[e] = n = []), n.push(t) - }) - }, d.addAttributeFilter = function (e, t) { - o(a(e), function (e) { - var n; - for (n = 0; n < f.length; n++)if (f[n].name === e)return void f[n].callbacks.push(t); - f.push({name: e, callbacks: [t]}) - }) - }, d.parse = function (t, o) { - function a() { - function e(e) { - e && (t = e.firstChild, t && 3 == t.type && (t.value = t.value.replace(R, "")), t = e.lastChild, t && 3 == t.type && (t.value = t.value.replace(L, ""))) - } - - var t = y.firstChild, n, i; - if (l.isValidChild(y.name, I.toLowerCase())) { - for (; t;)n = t.next, 3 == t.type || 1 == t.type && "p" !== t.name && !T[t.name] && !t.attr("data-mce-type") ? i ? i.append(t) : (i = d(I, 1), i.attr(r.forced_root_block_attrs), y.insert(i, t), i.append(t)) : (e(i), i = null), t = n; - e(i) - } - } - - function d(t, n) { - var r = new e(t, n), i; - return t in u && (i = p[t], i ? i.push(r) : p[t] = [r]), r - } - - function h(e) { - var t, n, r; - for (t = e.prev; t && 3 === t.type;)n = t.value.replace(L, ""), n.length > 0 ? (t.value = n, t = t.prev) : (r = t.prev, t.remove(), t = r) - } - - function g(e) { - var t, n = {}; - for (t in e)"li" !== t && "p" != t && (n[t] = e[t]); - return n - } - - var v, y, b, C, x, w, _, N, E, k, S, T, R, A = [], B, L, H, M, D, P, O, I; - if (o = o || {}, p = {}, m = {}, T = s(i("script,style,head,html,body,title,meta,param"), l.getBlockElements()), O = l.getNonEmptyElements(), P = l.children, S = r.validate, I = "forced_root_block"in o ? o.forced_root_block : r.forced_root_block, D = l.getWhiteSpaceElements(), R = /^[ \t\r\n]+/, L = /[ \t\r\n]+$/, H = /[ \t\r\n]+/g, M = /^[ \t\r\n]+$/, v = new n({validate: S, allow_script_urls: r.allow_script_urls, allow_conditional_comments: r.allow_conditional_comments, self_closing_elements: g(l.getSelfClosingElements()), cdata: function (e) { - b.append(d("#cdata", 4)).value = e - }, text: function (e, t) { - var n; - B || (e = e.replace(H, " "), b.lastChild && T[b.lastChild.name] && (e = e.replace(R, ""))), 0 !== e.length && (n = d("#text", 3), n.raw = !!t, b.append(n).value = e) - }, comment: function (e) { - b.append(d("#comment", 8)).value = e - }, pi: function (e, t) { - b.append(d(e, 7)).value = t, h(b) - }, doctype: function (e) { - var t; - t = b.append(d("#doctype", 10)), t.value = e, h(b) - }, start: function (e, t, n) { - var r, i, o, a, s; - if (o = S ? l.getElementRule(e) : {}) { - for (r = d(o.outputName || e, 1), r.attributes = t, r.shortEnded = n, b.append(r), s = P[b.name], s && P[r.name] && !s[r.name] && A.push(r), i = f.length; i--;)a = f[i].name, a in t.map && (E = m[a], E ? E.push(r) : m[a] = [r]); - T[e] && h(r), n || (b = r), !B && D[e] && (B = !0) - } - }, end: function (t) { - var n, r, i, o, a; - if (r = S ? l.getElementRule(t) : {}) { - if (T[t] && !B) { - if (n = b.firstChild, n && 3 === n.type)if (i = n.value.replace(R, ""), i.length > 0)n.value = i, n = n.next; else for (o = n.next, n.remove(), n = o; n && 3 === n.type;)i = n.value, o = n.next, (0 === i.length || M.test(i)) && (n.remove(), n = o), n = o; - if (n = b.lastChild, n && 3 === n.type)if (i = n.value.replace(L, ""), i.length > 0)n.value = i, n = n.prev; else for (o = n.prev, n.remove(), n = o; n && 3 === n.type;)i = n.value, o = n.prev, (0 === i.length || M.test(i)) && (n.remove(), n = o), n = o - } - if (B && D[t] && (B = !1), (r.removeEmpty || r.paddEmpty) && b.isEmpty(O))if (r.paddEmpty)b.empty().append(new e("#text", "3")).value = "\xa0"; else if (!b.attributes.map.name && !b.attributes.map.id)return a = b.parent, b.empty().remove(), void(b = a); - b = b.parent - } - }}, l), y = b = new e(o.context || r.root_name, 11), v.parse(t), S && A.length && (o.context ? o.invalid = !0 : c(A)), I && ("body" == y.name || o.isRootContent) && a(), !o.invalid) { - for (k in p) { - for (E = u[k], C = p[k], _ = C.length; _--;)C[_].parent || C.splice(_, 1); - for (x = 0, w = E.length; w > x; x++)E[x](C, k, o) - } - for (x = 0, w = f.length; w > x; x++)if (E = f[x], E.name in m) { - for (C = m[E.name], _ = C.length; _--;)C[_].parent || C.splice(_, 1); - for (_ = 0, N = E.callbacks.length; N > _; _++)E.callbacks[_](C, E.name, o) - } - } - return y - }, r.remove_trailing_brs && d.addNodeFilter("br", function (t) { - var n, r = t.length, i, o = s({}, l.getBlockElements()), a = l.getNonEmptyElements(), c, d, u, f, p, m; - for (o.body = 1, n = 0; r > n; n++)if (i = t[n], c = i.parent, o[i.parent.name] && i === c.lastChild) { - for (u = i.prev; u;) { - if (f = u.name, "span" !== f || "bookmark" !== u.attr("data-mce-type")) { - if ("br" !== f)break; - if ("br" === f) { - i = null; - break - } - } - u = u.prev - } - i && (i.remove(), c.isEmpty(a) && (p = l.getElementRule(c.name), p && (p.removeEmpty ? c.remove() : p.paddEmpty && (c.empty().append(new e("#text", 3)).value = "\xa0")))) - } else { - for (d = i; c && c.firstChild === d && c.lastChild === d && (d = c, !o[c.name]);)c = c.parent; - d === c && (m = new e("#text", 3), m.value = "\xa0", i.replace(m)) - } - }), r.allow_html_in_named_anchor || d.addAttributeFilter("id,name", function (e) { - for (var t = e.length, n, r, i, o; t--;)if (o = e[t], "a" === o.name && o.firstChild && !o.attr("href")) { - i = o.parent, n = o.lastChild; - do r = n.prev, i.insert(n, o), n = r; while (n) - } - }) - } - }), r(N, [m, f], function (e, t) { - var n = t.makeMap; - return function (t) { - var r = [], i, o, a, s, l; - return t = t || {}, i = t.indent, o = n(t.indent_before || ""), a = n(t.indent_after || ""), s = e.getEncodeFunc(t.entity_encoding || "raw", t.entities), l = "html" == t.element_format, {start: function (e, t, n) { - var c, d, u, f; - if (i && o[e] && r.length > 0 && (f = r[r.length - 1], f.length > 0 && "\n" !== f && r.push("\n")), r.push("<", e), t)for (c = 0, d = t.length; d > c; c++)u = t[c], r.push(" ", u.name, '="', s(u.value, !0), '"'); - r[r.length] = !n || l ? ">" : " />", n && i && a[e] && r.length > 0 && (f = r[r.length - 1], f.length > 0 && "\n" !== f && r.push("\n")) - }, end: function (e) { - var t; - r.push(""), i && a[e] && r.length > 0 && (t = r[r.length - 1], t.length > 0 && "\n" !== t && r.push("\n")) - }, text: function (e, t) { - e.length > 0 && (r[r.length] = t ? e : s(e)) - }, cdata: function (e) { - r.push("") - }, comment: function (e) { - r.push("") - }, pi: function (e, t) { - t ? r.push("") : r.push(""), i && r.push("\n") - }, doctype: function (e) { - r.push("", i ? "\n" : "") - }, reset: function () { - r.length = 0 - }, getContent: function () { - return r.join("").replace(/\n$/, "") - }} - } - }), r(E, [N, x], function (e, t) { - return function (n, r) { - var i = this, o = new e(n); - n = n || {}, n.validate = "validate"in n ? n.validate : !0, i.schema = r = r || new t, i.writer = o, i.serialize = function (e) { - function t(e) { - var n = i[e.type], s, l, c, d, u, f, p, m, h; - if (n)n(e); else { - if (s = e.name, l = e.shortEnded, c = e.attributes, a && c && c.length > 1) { - for (f = [], f.map = {}, h = r.getElementRule(e.name), p = 0, m = h.attributesOrder.length; m > p; p++)d = h.attributesOrder[p], d in c.map && (u = c.map[d], f.map[d] = u, f.push({name: d, value: u})); - for (p = 0, m = c.length; m > p; p++)d = c[p].name, d in f.map || (u = c.map[d], f.map[d] = u, f.push({name: d, value: u})); - c = f - } - if (o.start(e.name, c, l), !l) { - if (e = e.firstChild)do t(e); while (e = e.next); - o.end(s) - } - } - } - - var i, a; - return a = n.validate, i = {3: function (e) { - o.text(e.value, e.raw) - }, 8: function (e) { - o.comment(e.value) - }, 7: function (e) { - o.pi(e.name, e.value) - }, 10: function (e) { - o.doctype(e.value) - }, 4: function (e) { - o.cdata(e.value) - }, 11: function (e) { - if (e = e.firstChild)do t(e); while (e = e.next) - }}, o.reset(), 1 != e.type || n.inner ? i[11](e) : t(e), o.getContent() - } - } - }), r(k, [v, _, m, E, C, x, h, f], function (e, t, n, r, i, o, a, s) { - var l = s.each, c = s.trim, d = e.DOM; - return function (e, i) { - var s, u, f; - return i && (s = i.dom, u = i.schema), s = s || d, u = u || new o(e), e.entity_encoding = e.entity_encoding || "named", e.remove_trailing_brs = "remove_trailing_brs"in e ? e.remove_trailing_brs : !0, f = new t(e, u), f.addAttributeFilter("src,href,style", function (t, n) { - for (var r = t.length, i, o, a = "data-mce-" + n, l = e.url_converter, c = e.url_converter_scope, d; r--;)i = t[r], o = i.attributes.map[a], o !== d ? (i.attr(n, o.length > 0 ? o : null), i.attr(a, null)) : (o = i.attributes.map[n], "style" === n ? o = s.serializeStyle(s.parseStyle(o), i.name) : l && (o = l.call(c, o, n, i.name)), i.attr(n, o.length > 0 ? o : null)) - }), f.addAttributeFilter("class", function (e) { - for (var t = e.length, n, r; t--;)n = e[t], r = n.attr("class").replace(/(?:^|\s)mce-item-\w+(?!\S)/g, ""), n.attr("class", r.length > 0 ? r : null) - }), f.addAttributeFilter("data-mce-type", function (e, t, n) { - for (var r = e.length, i; r--;)i = e[r], "bookmark" !== i.attributes.map["data-mce-type"] || n.cleanup || i.remove() - }), f.addAttributeFilter("data-mce-expando", function (e, t) { - for (var n = e.length; n--;)e[n].attr(t, null) - }), f.addNodeFilter("noscript", function (e) { - for (var t = e.length, r; t--;)r = e[t].firstChild, r && (r.value = n.decode(r.value)) - }), f.addNodeFilter("script,style", function (e, t) { - function n(e) { - return e.replace(/()/g, "\n").replace(/^[\r\n]*|[\r\n]*$/g, "").replace(/^\s*(()?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g, "") - } - - for (var r = e.length, i, o; r--;)if (i = e[r], o = i.firstChild ? i.firstChild.value : "", "script" === t) { - var a = (i.attr("type") || "text/javascript").replace(/^mce\-/, ""); - i.attr("type", "text/javascript" === a ? null : a), o.length > 0 && (i.firstChild.value = "// ") - } else o.length > 0 && (i.firstChild.value = "") - }), f.addNodeFilter("#comment", function (e) { - for (var t = e.length, n; t--;)n = e[t], 0 === n.value.indexOf("[CDATA[") ? (n.name = "#cdata", n.type = 4, n.value = n.value.replace(/^\[CDATA\[|\]\]$/g, "")) : 0 === n.value.indexOf("mce:protected ") && (n.name = "#text", n.type = 3, n.raw = !0, n.value = unescape(n.value).substr(14)) - }), f.addNodeFilter("xml:namespace,input", function (e, t) { - for (var n = e.length, r; n--;)r = e[n], 7 === r.type ? r.remove() : 1 === r.type && ("input" !== t || "type"in r.attributes.map || r.attr("type", "text")) - }), e.fix_list_elements && f.addNodeFilter("ul,ol", function (e) { - for (var t = e.length, n, r; t--;)n = e[t], r = n.parent, ("ul" === r.name || "ol" === r.name) && n.prev && "li" === n.prev.name && n.prev.append(n) - }), f.addAttributeFilter("data-mce-src,data-mce-href,data-mce-style,data-mce-selected", function (e, t) { - for (var n = e.length; n--;)e[n].attr(t, null) - }), {schema: u, addNodeFilter: f.addNodeFilter, addAttributeFilter: f.addAttributeFilter, serialize: function (t, n) { - var i = this, o, d, p, m, h; - return a.ie && s.select("script,style,select,map").length > 0 ? (h = t.innerHTML, t = t.cloneNode(!1), s.setHTML(t, h)) : t = t.cloneNode(!0), o = t.ownerDocument.implementation, o.createHTMLDocument && (d = o.createHTMLDocument(""), l("BODY" == t.nodeName ? t.childNodes : [t], function (e) { - d.body.appendChild(d.importNode(e, !0)) - }), t = "BODY" != t.nodeName ? d.body.firstChild : d.body, p = s.doc, s.doc = d), n = n || {}, n.format = n.format || "html", n.selection && (n.forced_root_block = ""), n.no_events || (n.node = t, i.onPreProcess(n)), m = new r(e, u), n.content = m.serialize(f.parse(c(n.getInner ? t.innerHTML : s.getOuterHTML(t)), n)), n.cleanup || (n.content = n.content.replace(/\uFEFF/g, "")), n.no_events || i.onPostProcess(n), p && (s.doc = p), n.node = null, n.content - }, addRules: function (e) { - u.addValidElements(e) - }, setRules: function (e) { - u.setValidElements(e) - }, onPreProcess: function (e) { - i && i.fire("PreProcess", e) - }, onPostProcess: function (e) { - i && i.fire("PostProcess", e) - }} - } - }), r(S, [], function () { - function e(e) { - function t(t, n) { - var r, i = 0, o, a, s, l, c, d, u = -1, f; - if (r = t.duplicate(), r.collapse(n), f = r.parentElement(), f.ownerDocument === e.dom.doc) { - for (; "false" === f.contentEditable;)f = f.parentNode; - if (!f.hasChildNodes())return{node: f, inside: 1}; - for (s = f.children, o = s.length - 1; o >= i;)if (d = Math.floor((i + o) / 2), l = s[d], r.moveToElementText(l), u = r.compareEndPoints(n ? "StartToStart" : "EndToEnd", t), u > 0)o = d - 1; else { - if (!(0 > u))return{node: l}; - i = d + 1 - } - if (0 > u)for (l ? r.collapse(!1) : (r.moveToElementText(f), r.collapse(!0), l = f, a = !0), c = 0; 0 !== r.compareEndPoints(n ? "StartToStart" : "StartToEnd", t) && 0 !== r.move("character", 1) && f == r.parentElement();)c++; else for (r.collapse(!0), c = 0; 0 !== r.compareEndPoints(n ? "StartToStart" : "StartToEnd", t) && 0 !== r.move("character", -1) && f == r.parentElement();)c++; - return{node: l, position: u, offset: c, inside: a} - } - } - - function n() { - function n(e) { - var n = t(o, e), r, i, s = 0, l, c, d; - if (r = n.node, i = n.offset, n.inside && !r.hasChildNodes())return void a[e ? "setStart" : "setEnd"](r, 0); - if (i === c)return void a[e ? "setStartBefore" : "setEndAfter"](r); - if (n.position < 0) { - if (l = n.inside ? r.firstChild : r.nextSibling, !l)return void a[e ? "setStartAfter" : "setEndAfter"](r); - if (!i)return void(3 == l.nodeType ? a[e ? "setStart" : "setEnd"](l, 0) : a[e ? "setStartBefore" : "setEndBefore"](l)); - for (; l;) { - if (d = l.nodeValue, s += d.length, s >= i) { - r = l, s -= i, s = d.length - s; - break - } - l = l.nextSibling - } - } else { - if (l = r.previousSibling, !l)return a[e ? "setStartBefore" : "setEndBefore"](r); - if (!i)return void(3 == r.nodeType ? a[e ? "setStart" : "setEnd"](l, r.nodeValue.length) : a[e ? "setStartAfter" : "setEndAfter"](l)); - for (; l;) { - if (s += l.nodeValue.length, s >= i) { - r = l, s -= i; - break - } - l = l.previousSibling - } - } - a[e ? "setStart" : "setEnd"](r, s) - } - - var o = e.getRng(), a = i.createRng(), s, l, c, d, u; - if (s = o.item ? o.item(0) : o.parentElement(), s.ownerDocument != i.doc)return a; - if (l = e.isCollapsed(), o.item)return a.setStart(s.parentNode, i.nodeIndex(s)), a.setEnd(a.startContainer, a.startOffset + 1), a; - try { - n(!0), l || n() - } catch (f) { - if (-2147024809 != f.number)throw f; - u = r.getBookmark(2), c = o.duplicate(), c.collapse(!0), s = c.parentElement(), l || (c = o.duplicate(), c.collapse(!1), d = c.parentElement(), d.innerHTML = d.innerHTML), s.innerHTML = s.innerHTML, r.moveToBookmark(u), o = e.getRng(), n(!0), l || n() - } - return a - } - - var r = this, i = e.dom, o = !1; - this.getBookmark = function (n) { - function r(e) { - var t, n, r, o, a = []; - for (t = e.parentNode, n = i.getRoot().parentNode; t != n && 9 !== t.nodeType;) { - for (r = t.children, o = r.length; o--;)if (e === r[o]) { - a.push(o); - break - } - e = t, t = t.parentNode - } - return a - } - - function o(e) { - var n; - return n = t(a, e), n ? {position: n.position, offset: n.offset, indexes: r(n.node), inside: n.inside} : void 0 - } - - var a = e.getRng(), s = {}; - return 2 === n && (a.item ? s.start = {ctrl: !0, indexes: r(a.item(0))} : (s.start = o(!0), e.isCollapsed() || (s.end = o()))), s - }, this.moveToBookmark = function (e) { - function t(e) { - var t, n, r, o; - for (t = i.getRoot(), n = e.length - 1; n >= 0; n--)o = t.children, r = e[n], r <= o.length - 1 && (t = o[r]); - return t - } - - function n(n) { - var i = e[n ? "start" : "end"], a, s, l, c; - i && (a = i.position > 0, s = o.createTextRange(), s.moveToElementText(t(i.indexes)), c = i.offset, c !== l ? (s.collapse(i.inside || a), s.moveStart("character", a ? -c : c)) : s.collapse(n), r.setEndPoint(n ? "StartToStart" : "EndToStart", s), n && r.collapse(!0)) - } - - var r, o = i.doc.body; - e.start && (e.start.ctrl ? (r = o.createControlRange(), r.addElement(t(e.start.indexes)), r.select()) : (r = o.createTextRange(), n(!0), n(), r.select())) - }, this.addRange = function (t) { - function n(e) { - var t, n, a, u, m; - a = i.create("a"), t = e ? s : c, n = e ? l : d, u = r.duplicate(), (t == f || t == f.documentElement) && (t = p, n = 0), 3 == t.nodeType ? (t.parentNode.insertBefore(a, t), u.moveToElementText(a), u.moveStart("character", n), i.remove(a), r.setEndPoint(e ? "StartToStart" : "EndToEnd", u)) : (m = t.childNodes, m.length ? (n >= m.length ? i.insertAfter(a, m[m.length - 1]) : t.insertBefore(a, m[n]), u.moveToElementText(a)) : t.canHaveHTML && (t.innerHTML = "", a = t.firstChild, u.moveToElementText(a), u.collapse(o)), r.setEndPoint(e ? "StartToStart" : "EndToEnd", u), i.remove(a)) - } - - var r, a, s, l, c, d, u, f = e.dom.doc, p = f.body, m, h; - if (s = t.startContainer, l = t.startOffset, c = t.endContainer, d = t.endOffset, r = p.createTextRange(), s == c && 1 == s.nodeType) { - if (l == d && !s.hasChildNodes()) { - if (s.canHaveHTML)return u = s.previousSibling, u && !u.hasChildNodes() && i.isBlock(u) ? u.innerHTML = "" : u = null, s.innerHTML = "", r.moveToElementText(s.lastChild), r.select(), i.doc.selection.clear(), s.innerHTML = "", void(u && (u.innerHTML = "")); - l = i.nodeIndex(s), s = s.parentNode - } - if (l == d - 1)try { - if (h = s.childNodes[l], a = p.createControlRange(), a.addElement(h), a.select(), m = e.getRng(), m.item && h === m.item(0))return - } catch (g) { - } - } - n(!0), n(), r.select() - }, this.getRangeAt = n - } - - return e - }), r(T, [h], function (e) { - return{BACKSPACE: 8, DELETE: 46, DOWN: 40, ENTER: 13, LEFT: 37, RIGHT: 39, SPACEBAR: 32, TAB: 9, UP: 38, modifierPressed: function (e) { - return e.shiftKey || e.ctrlKey || e.altKey - }, metaKeyPressed: function (t) { - return(e.mac ? t.metaKey : t.ctrlKey) && !t.altKey - }} - }), r(R, [T, f, h], function (e, t, n) { - return function (r, i) { - function o(e) { - return i.settings.object_resizing === !1 ? !1 : /TABLE|IMG|DIV/.test(e.nodeName) ? "false" === e.getAttribute("data-mce-resize") ? !1 : !0 : !1 - } - - function a(t) { - var n, r; - n = t.screenX - k, r = t.screenY - S, M = n * N[2] + A, D = r * N[3] + B, M = 5 > M ? 5 : M, D = 5 > D ? 5 : D, (e.modifierPressed(t) || "IMG" == x.nodeName && N[2] * N[3] !== 0) && (M = Math.round(D / L), D = Math.round(M * L)), b.setStyles(w, {width: M, height: D}), N[2] < 0 && w.clientWidth <= M && b.setStyle(w, "left", T + (A - M)), N[3] < 0 && w.clientHeight <= D && b.setStyle(w, "top", R + (B - D)), H || (i.fire("ObjectResizeStart", {target: x, width: A, height: B}), H = !0) - } - - function s() { - function e(e, t) { - t && (x.style[e] || !i.schema.isValid(x.nodeName.toLowerCase(), e) ? b.setStyle(x, e, t) : b.setAttrib(x, e, t)) - } - - H = !1, e("width", M), e("height", D), b.unbind(P, "mousemove", a), b.unbind(P, "mouseup", s), O != P && (b.unbind(O, "mousemove", a), b.unbind(O, "mouseup", s)), b.remove(w), I && "TABLE" != x.nodeName || l(x), i.fire("ObjectResized", {target: x, width: M, height: D}), i.nodeChanged() - } - - function l(e, t, n) { - var r, l, d, u, f, p = i.getBody(); - r = b.getPos(e, p), T = r.x, R = r.y, f = e.getBoundingClientRect(), l = f.width || f.right - f.left, d = f.height || f.bottom - f.top, x != e && (h(), x = e, M = D = 0), u = i.fire("ObjectSelected", {target: e}), o(e) && !u.isDefaultPrevented() ? C(_, function (e, r) { - function o(t) { - H = !0, k = t.screenX, S = t.screenY, A = x.clientWidth, B = x.clientHeight, L = B / A, N = e, w = x.cloneNode(!0), b.addClass(w, "mce-clonedresizable"), w.contentEditable = !1, w.unSelectabe = !0, b.setStyles(w, {left: T, top: R, margin: 0}), w.removeAttribute("data-mce-selected"), i.getBody().appendChild(w), b.bind(P, "mousemove", a), b.bind(P, "mouseup", s), O != P && (b.bind(O, "mousemove", a), b.bind(O, "mouseup", s)) - } - - var c, u; - return t ? void(r == t && o(n)) : (c = b.get("mceResizeHandle" + r), c ? b.show(c) : (u = i.getBody(), c = b.add(u, "div", {id: "mceResizeHandle" + r, "data-mce-bogus": !0, "class": "mce-resizehandle", contentEditable: !1, unSelectabe: !0, style: "cursor:" + r + "-resize; margin:0; padding:0"}), b.bind(c, "mousedown", function (e) { - e.preventDefault(), o(e) - })), void b.setStyles(c, {left: l * e[0] + T - c.offsetWidth / 2, top: d * e[1] + R - c.offsetHeight / 2})) - }) : c(), x.setAttribute("data-mce-selected", "1") - } - - function c() { - var e, t; - x && x.removeAttribute("data-mce-selected"); - for (e in _)t = b.get("mceResizeHandle" + e), t && (b.unbind(t), b.remove(t)) - } - - function d(e) { - function t(e, t) { - if (e)do if (e === t)return!0; while (e = e.parentNode) - } - - var n; - return C(b.select("img[data-mce-selected],hr[data-mce-selected]"), function (e) { - e.removeAttribute("data-mce-selected") - }), n = "mousedown" == e.type ? e.target : r.getNode(), n = b.getParent(n, I ? "table" : "table,img,hr"), t(n, i.getBody()) && (g(), t(r.getStart(), n) && t(r.getEnd(), n) && (!I || n != r.getStart() && "IMG" !== r.getStart().nodeName)) ? void l(n) : void c() - } - - function u(e, t, n) { - e && e.attachEvent && e.attachEvent("on" + t, n) - } - - function f(e, t, n) { - e && e.detachEvent && e.detachEvent("on" + t, n) - } - - function p(e) { - var t = e.srcElement, n, r, o, a, s, c, d; - n = t.getBoundingClientRect(), c = E.clientX - n.left, d = E.clientY - n.top; - for (r in _)if (o = _[r], a = t.offsetWidth * o[0], s = t.offsetHeight * o[1], Math.abs(a - c) < 8 && Math.abs(s - d) < 8) { - N = o; - break - } - H = !0, i.getDoc().selection.empty(), l(t, r, E) - } - - function m(e) { - var t = e.srcElement; - if (t != x) { - if (h(), 0 === t.id.indexOf("mceResizeHandle"))return void(e.returnValue = !1); - ("IMG" == t.nodeName || "TABLE" == t.nodeName) && (c(), x = t, u(t, "resizestart", p)) - } - } - - function h() { - f(x, "resizestart", p) - } - - function g() { - try { - i.getDoc().execCommand("enableObjectResizing", !1, !1) - } catch (e) { - } - } - - function v(e) { - var t; - if (I) { - t = P.body.createControlRange(); - try { - return t.addElement(e), t.select(), !0 - } catch (n) { - } - } - } - - function y() { - x = w = null, I && (h(), f(i.getBody(), "controlselect", m)) - } - - var b = i.dom, C = t.each, x, w, _, N, E, k, S, T, R, A, B, L, H, M, D, P = i.getDoc(), O = document, I = n.ie && n.ie < 11; - _ = {n: [.5, 0, 0, -1], e: [1, .5, 1, 0], s: [.5, 1, 0, 1], w: [0, .5, -1, 0], nw: [0, 0, -1, -1], ne: [1, 0, 1, -1], se: [1, 1, 1, 1], sw: [0, 1, -1, 1]}; - var z = ".mce-content-body"; - return i.contentStyles.push(z + " div.mce-resizehandle {position: absolute;border: 1px solid black;background: #FFF;width: 5px;height: 5px;z-index: 10000}" + z + " .mce-resizehandle:hover {background: #000}" + z + " img[data-mce-selected], hr[data-mce-selected] {outline: 1px solid black;resize: none}" + z + " .mce-clonedresizable {position: absolute;" + (n.gecko ? "" : "outline: 1px dashed black;") + "opacity: .5;filter: alpha(opacity=50);z-index: 10000}"), i.on("init", function () { - I ? (i.on("ObjectResized", function (e) { - "TABLE" != e.target.nodeName && (c(), v(e.target)) - }), u(i.getBody(), "controlselect", m), i.on("mousedown", function (e) { - E = e - })) : (g(), n.ie >= 11 && (i.on("mouseup", function (e) { - var t = e.target.nodeName; - /^(TABLE|IMG|HR)$/.test(t) && (i.selection.select(e.target, "TABLE" == t), i.nodeChanged()) - }), i.dom.bind(i.getBody(), "mscontrolselect", function (e) { - /^(TABLE|IMG|HR)$/.test(e.target.nodeName) && e.preventDefault() - }))), i.on("nodechange mousedown mouseup ResizeEditor", d), i.on("keydown keyup", function (e) { - x && "TABLE" == x.nodeName && d(e) - }) - }), {isResizable: o, showResizeRect: l, hideResizeRect: c, updateResizeRect: d, controlSelect: v, destroy: y} - } - }), r(A, [u, S, R, h, f], function (e, n, r, i, o) { - function a(e, t, i, o) { - var a = this; - a.dom = e, a.win = t, a.serializer = i, a.editor = o, a.controlSelection = new r(a, o), a.win.getSelection || (a.tridentSel = new n(a)) - } - - var s = o.each, l = o.grep, c = o.trim, d = i.ie, u = i.opera; - return a.prototype = {setCursorLocation: function (e, t) { - var n = this, r = n.dom.createRng(); - e ? (r.setStart(e, t), r.setEnd(e, t), n.setRng(r), n.collapse(!1)) : (n._moveEndPoint(r, n.editor.getBody(), !0), n.setRng(r)) - }, getContent: function (e) { - var n = this, r = n.getRng(), i = n.dom.create("body"), o = n.getSel(), a, s, l; - return e = e || {}, a = s = "", e.get = !0, e.format = e.format || "html", e.selection = !0, n.editor.fire("BeforeGetContent", e), "text" == e.format ? n.isCollapsed() ? "" : r.text || (o.toString ? o.toString() : "") : (r.cloneContents ? (l = r.cloneContents(), l && i.appendChild(l)) : r.item !== t || r.htmlText !== t ? (i.innerHTML = "
    " + (r.item ? r.item(0).outerHTML : r.htmlText), i.removeChild(i.firstChild)) : i.innerHTML = r.toString(), /^\s/.test(i.innerHTML) && (a = " "), /\s+$/.test(i.innerHTML) && (s = " "), e.getInner = !0, e.content = n.isCollapsed() ? "" : a + n.serializer.serialize(i, e) + s, n.editor.fire("GetContent", e), e.content) - }, setContent: function (e, t) { - var n = this, r = n.getRng(), i, o = n.win.document, a, s; - if (t = t || {format: "html"}, t.set = !0, t.selection = !0, e = t.content = e, t.no_events || n.editor.fire("BeforeSetContent", t), e = t.content, r.insertNode) { - e += '_', r.startContainer == o && r.endContainer == o ? o.body.innerHTML = e : (r.deleteContents(), 0 === o.body.childNodes.length ? o.body.innerHTML = e : r.createContextualFragment ? r.insertNode(r.createContextualFragment(e)) : (a = o.createDocumentFragment(), s = o.createElement("div"), a.appendChild(s), s.outerHTML = e, r.insertNode(a))), i = n.dom.get("__caret"), r = o.createRange(), r.setStartBefore(i), r.setEndBefore(i), n.setRng(r), n.dom.remove("__caret"); - try { - n.setRng(r) - } catch (l) { - } - } else r.item && (o.execCommand("Delete", !1, null), r = n.getRng()), /^\s+/.test(e) ? (r.pasteHTML('_' + e), n.dom.remove("__mce_tmp")) : r.pasteHTML(e); - t.no_events || n.editor.fire("SetContent", t) - }, getStart: function () { - var e = this, t = e.getRng(), n, r, i, o; - if (t.duplicate || t.item) { - if (t.item)return t.item(0); - for (i = t.duplicate(), i.collapse(1), n = i.parentElement(), n.ownerDocument !== e.dom.doc && (n = e.dom.getRoot()), r = o = t.parentElement(); o = o.parentNode;)if (o == n) { - n = r; - break - } - return n - } - return n = t.startContainer, 1 == n.nodeType && n.hasChildNodes() && (n = n.childNodes[Math.min(n.childNodes.length - 1, t.startOffset)]), n && 3 == n.nodeType ? n.parentNode : n - }, getEnd: function () { - var e = this, t = e.getRng(), n, r; - return t.duplicate || t.item ? t.item ? t.item(0) : (t = t.duplicate(), t.collapse(0), n = t.parentElement(), n.ownerDocument !== e.dom.doc && (n = e.dom.getRoot()), n && "BODY" == n.nodeName ? n.lastChild || n : n) : (n = t.endContainer, r = t.endOffset, 1 == n.nodeType && n.hasChildNodes() && (n = n.childNodes[r > 0 ? r - 1 : r]), n && 3 == n.nodeType ? n.parentNode : n) - }, getBookmark: function (e, t) { - function n(e, t) { - var n = 0; - return s(a.select(e), function (e, r) { - e == t && (n = r) - }), n - } - - function r(e) { - function t(t) { - var n, r, i, o = t ? "start" : "end"; - n = e[o + "Container"], r = e[o + "Offset"], 1 == n.nodeType && "TR" == n.nodeName && (i = n.childNodes, n = i[Math.min(t ? r : r - 1, i.length - 1)], n && (r = t ? 0 : n.childNodes.length, e["set" + (t ? "Start" : "End")](n, r))) - } - - return t(!0), t(), e - } - - function i() { - function e(e, n) { - var i = e[n ? "startContainer" : "endContainer"], a = e[n ? "startOffset" : "endOffset"], s = [], l, c, d = 0; - if (3 == i.nodeType) { - if (t)for (l = i.previousSibling; l && 3 == l.nodeType; l = l.previousSibling)a += l.nodeValue.length; - s.push(a) - } else c = i.childNodes, a >= c.length && c.length && (d = 1, a = Math.max(0, c.length - 1)), s.push(o.dom.nodeIndex(c[a], t) + d); - for (; i && i != r; i = i.parentNode)s.push(o.dom.nodeIndex(i, t)); - return s - } - - var n = o.getRng(!0), r = a.getRoot(), i = {}; - return i.start = e(n, !0), o.isCollapsed() || (i.end = e(n)), i - } - - var o = this, a = o.dom, l, c, d, u, f, p, m = "", h; - if (2 == e)return p = o.getNode(), f = p ? p.nodeName : null, "IMG" == f ? {name: f, index: n(f, p)} : o.tridentSel ? o.tridentSel.getBookmark(e) : i(); - if (e)return{rng: o.getRng()}; - if (l = o.getRng(), d = a.uniqueId(), u = o.isCollapsed(), h = "overflow:hidden;line-height:0px", l.duplicate || l.item) { - if (l.item)return p = l.item(0), f = p.nodeName, {name: f, index: n(f, p)}; - c = l.duplicate(); - try { - l.collapse(), l.pasteHTML('' + m + ""), u || (c.collapse(!1), l.moveToElementText(c.parentElement()), 0 === l.compareEndPoints("StartToEnd", c) && c.move("character", -1), c.pasteHTML('' + m + "")) - } catch (g) { - return null - } - } else { - if (p = o.getNode(), f = p.nodeName, "IMG" == f)return{name: f, index: n(f, p)}; - c = r(l.cloneRange()), u || (c.collapse(!1), c.insertNode(a.create("span", {"data-mce-type": "bookmark", id: d + "_end", style: h}, m))), l = r(l), l.collapse(!0), l.insertNode(a.create("span", {"data-mce-type": "bookmark", id: d + "_start", style: h}, m)) - } - return o.moveToBookmark({id: d, keep: 1}), {id: d} - }, moveToBookmark: function (e) { - function t(t) { - var n = e[t ? "start" : "end"], r, i, o, s; - if (n) { - for (o = n[0], i = c, r = n.length - 1; r >= 1; r--) { - if (s = i.childNodes, n[r] > s.length - 1)return; - i = s[n[r]] - } - 3 === i.nodeType && (o = Math.min(n[0], i.nodeValue.length)), 1 === i.nodeType && (o = Math.min(n[0], i.childNodes.length)), t ? a.setStart(i, o) : a.setEnd(i, o) - } - return!0 - } - - function n(t) { - var n = o.get(e.id + "_" + t), r, i, a, c, d = e.keep; - if (n && (r = n.parentNode, "start" == t ? (d ? (r = n.firstChild, i = 1) : i = o.nodeIndex(n), f = p = r, m = h = i) : (d ? (r = n.firstChild, i = 1) : i = o.nodeIndex(n), p = r, h = i), !d)) { - for (c = n.previousSibling, a = n.nextSibling, s(l(n.childNodes), function (e) { - 3 == e.nodeType && (e.nodeValue = e.nodeValue.replace(/\uFEFF/g, "")) - }); n = o.get(e.id + "_" + t);)o.remove(n, 1); - c && a && c.nodeType == a.nodeType && 3 == c.nodeType && !u && (i = c.nodeValue.length, c.appendData(a.nodeValue), o.remove(a), "start" == t ? (f = p = c, m = h = i) : (p = c, h = i)) - } - } - - function r(e) { - return!o.isBlock(e) || e.innerHTML || d || (e.innerHTML = '
    '), e - } - - var i = this, o = i.dom, a, c, f, p, m, h; - if (e)if (e.start) { - if (a = o.createRng(), c = o.getRoot(), i.tridentSel)return i.tridentSel.moveToBookmark(e); - t(!0) && t() && i.setRng(a) - } else e.id ? (n("start"), n("end"), f && (a = o.createRng(), a.setStart(r(f), m), a.setEnd(r(p), h), i.setRng(a))) : e.name ? i.select(o.select(e.name)[e.index]) : e.rng && i.setRng(e.rng) - }, select: function (e, t) { - var n = this, r = n.dom, i = r.createRng(), o; - if (n.lastFocusBookmark = null, e) { - if (!t && n.controlSelection.controlSelect(e))return; - o = r.nodeIndex(e), i.setStart(e.parentNode, o), i.setEnd(e.parentNode, o + 1), t && (n._moveEndPoint(i, e, !0), n._moveEndPoint(i, e)), n.setRng(i) - } - return e - }, isCollapsed: function () { - var e = this, t = e.getRng(), n = e.getSel(); - return!t || t.item ? !1 : t.compareEndPoints ? 0 === t.compareEndPoints("StartToEnd", t) : !n || t.collapsed - }, collapse: function (e) { - var t = this, n = t.getRng(), r; - n.item && (r = n.item(0), n = t.win.document.body.createTextRange(), n.moveToElementText(r)), n.collapse(!!e), t.setRng(n) - }, getSel: function () { - var e = this.win; - return e.getSelection ? e.getSelection() : e.document.selection - }, getRng: function (e) { - var t = this, n, r, i, o = t.win.document, a; - if (!e && t.lastFocusBookmark) { - var s = t.lastFocusBookmark; - return s.startContainer ? (r = o.createRange(), r.setStart(s.startContainer, s.startOffset), r.setEnd(s.endContainer, s.endOffset)) : r = s, r - } - if (e && t.tridentSel)return t.tridentSel.getRangeAt(0); - try { - (n = t.getSel()) && (r = n.rangeCount > 0 ? n.getRangeAt(0) : n.createRange ? n.createRange() : o.createRange()) - } catch (l) { - } - if (d && r && r.setStart && o.selection) { - try { - a = o.selection.createRange() - } catch (l) { - } - a && a.item && (i = a.item(0), r = o.createRange(), r.setStartBefore(i), r.setEndAfter(i)) - } - return r || (r = o.createRange ? o.createRange() : o.body.createTextRange()), r.setStart && 9 === r.startContainer.nodeType && r.collapsed && (i = t.dom.getRoot(), r.setStart(i, 0), r.setEnd(i, 0)), t.selectedRange && t.explicitRange && (0 === r.compareBoundaryPoints(r.START_TO_START, t.selectedRange) && 0 === r.compareBoundaryPoints(r.END_TO_END, t.selectedRange) ? r = t.explicitRange : (t.selectedRange = null, t.explicitRange = null)), r - }, setRng: function (e, t) { - var n = this, r; - if (e.select)try { - e.select() - } catch (i) { - } else if (n.tridentSel) { - if (e.cloneRange)try { - return void n.tridentSel.addRange(e) - } catch (i) { - } - } else if (r = n.getSel()) { - n.explicitRange = e; - try { - r.removeAllRanges(), r.addRange(e) - } catch (i) { - } - t === !1 && r.extend && (r.collapse(e.endContainer, e.endOffset), r.extend(e.startContainer, e.startOffset)), n.selectedRange = r.rangeCount > 0 ? r.getRangeAt(0) : null - } - }, setNode: function (e) { - var t = this; - return t.setContent(t.dom.getOuterHTML(e)), e - }, getNode: function () { - function e(e, t) { - for (var n = e; e && 3 === e.nodeType && 0 === e.length;)e = t ? e.nextSibling : e.previousSibling; - return e || n - } - - var t = this, n = t.getRng(), r, i = n.startContainer, o = n.endContainer, a = n.startOffset, s = n.endOffset, l = t.dom.getRoot(); - return n ? n.setStart ? (r = n.commonAncestorContainer, !n.collapsed && (i == o && 2 > s - a && i.hasChildNodes() && (r = i.childNodes[a]), 3 === i.nodeType && 3 === o.nodeType && (i = i.length === a ? e(i.nextSibling, !0) : i.parentNode, o = 0 === s ? e(o.previousSibling, !1) : o.parentNode, i && i === o)) ? i : r && 3 == r.nodeType ? r.parentNode : r) : (r = n.item ? n.item(0) : n.parentElement(), r.ownerDocument !== t.win.document && (r = l), r) : l - }, getSelectedBlocks: function (t, n) { - var r = this, i = r.dom, o, a, s = []; - if (a = i.getRoot(), t = i.getParent(t || r.getStart(), i.isBlock), n = i.getParent(n || r.getEnd(), i.isBlock), t && t != a && s.push(t), t && n && t != n) { - o = t; - for (var l = new e(t, a); (o = l.next()) && o != n;)i.isBlock(o) && s.push(o) - } - return n && t != n && n != a && s.push(n), s - }, isForward: function () { - var e = this.dom, t = this.getSel(), n, r; - return t && t.anchorNode && t.focusNode ? (n = e.createRng(), n.setStart(t.anchorNode, t.anchorOffset), n.collapse(!0), r = e.createRng(), r.setStart(t.focusNode, t.focusOffset), r.collapse(!0), n.compareBoundaryPoints(n.START_TO_START, r) <= 0) : !0 - }, normalize: function () { - function t(t) { - function a(t, n) { - for (var r = new e(t, f.getParent(t.parentNode, f.isBlock) || p); t = r[n ? "prev" : "next"]();)if ("BR" === t.nodeName)return!0 - } - - function s(e, t) { - return e.previousSibling && e.previousSibling.nodeName == t - } - - function l(t, n) { - var r, a; - for (n = n || c, r = new e(n, f.getParent(n.parentNode, f.isBlock) || p); m = r[t ? "prev" : "next"]();) { - if (3 === m.nodeType && m.nodeValue.length > 0)return c = m, d = t ? m.nodeValue.length : 0, void(i = !0); - if (f.isBlock(m) || h[m.nodeName.toLowerCase()])return; - a = m - } - o && a && (c = a, i = !0, d = 0) - } - - var c, d, u, f = n.dom, p = f.getRoot(), m, h, g, v; - if (c = r[(t ? "start" : "end") + "Container"], d = r[(t ? "start" : "end") + "Offset"], h = f.schema.getNonEmptyElements(), v = t, 1 == c.nodeType && d > c.childNodes.length - 1 && (v = !1), 9 === c.nodeType && (c = f.getRoot(), d = 0), c === p) { - if (v && (m = c.childNodes[d > 0 ? d - 1 : 0], m && (g = m.nodeName.toLowerCase(), h[m.nodeName] || "TABLE" == m.nodeName)))return; - if (c.hasChildNodes() && (d = Math.min(!v && d > 0 ? d - 1 : d, c.childNodes.length - 1), c = c.childNodes[d], d = 0, c.hasChildNodes() && !/TABLE/.test(c.nodeName))) { - m = c, u = new e(c, p); - do { - if (3 === m.nodeType && m.nodeValue.length > 0) { - d = v ? 0 : m.nodeValue.length, c = m, i = !0; - break - } - if (h[m.nodeName.toLowerCase()]) { - d = f.nodeIndex(m), c = m.parentNode, "IMG" != m.nodeName || v || d++, i = !0; - break - } - } while (m = v ? u.next() : u.prev()) - } - } - o && (3 === c.nodeType && 0 === d && l(!0), 1 === c.nodeType && (m = c.childNodes[d], !m || "BR" !== m.nodeName || s(m, "A") || a(m) || a(m, !0) || l(!0, c.childNodes[d]))), v && !o && 3 === c.nodeType && d === c.nodeValue.length && l(!1), i && r["set" + (t ? "Start" : "End")](c, d) - } - - var n = this, r, i, o; - d || (r = n.getRng(), o = r.collapsed, t(!0), o || t(), i && (o && r.collapse(!0), n.setRng(r, n.isForward()))) - }, selectorChanged: function (e, t) { - var n = this, r; - return n.selectorChangedData || (n.selectorChangedData = {}, r = {}, n.editor.on("NodeChange", function (e) { - var t = e.element, i = n.dom, o = i.getParents(t, null, i.getRoot()), a = {}; - s(n.selectorChangedData, function (e, t) { - s(o, function (n) { - return i.is(n, t) ? (r[t] || (s(e, function (e) { - e(!0, {node: n, selector: t, parents: o}) - }), r[t] = e), a[t] = e, !1) : void 0 - }) - }), s(r, function (e, n) { - a[n] || (delete r[n], s(e, function (e) { - e(!1, {node: t, selector: n, parents: o}) - })) - }) - })), n.selectorChangedData[e] || (n.selectorChangedData[e] = []), n.selectorChangedData[e].push(t), n - }, getScrollContainer: function () { - for (var e, t = this.dom.getRoot(); t && "BODY" != t.nodeName;) { - if (t.scrollHeight > t.clientHeight) { - e = t; - break - } - t = t.parentNode - } - return e - }, scrollIntoView: function (e) { - function t(e) { - for (var t = 0, n = 0, r = e; r && r.nodeType;)t += r.offsetLeft || 0, n += r.offsetTop || 0, r = r.offsetParent; - return{x: t, y: n} - } - - var n, r, i = this, o = i.dom, a = o.getRoot(), s, l; - if ("BODY" != a.nodeName) { - var c = i.getScrollContainer(); - if (c)return n = t(e).y - t(c).y, l = c.clientHeight, s = c.scrollTop, void((s > n || n + 25 > s + l) && (c.scrollTop = s > n ? n : n - l + 25)) - } - r = o.getViewPort(i.editor.getWin()), n = o.getPos(e).y, s = r.y, l = r.h, (n < r.y || n + 25 > s + l) && i.editor.getWin().scrollTo(0, s > n ? n : n - l + 25) - }, _moveEndPoint: function (t, n, r) { - var o = n, a = new e(n, o), s = this.dom.schema.getNonEmptyElements(); - do { - if (3 == n.nodeType && 0 !== c(n.nodeValue).length)return void(r ? t.setStart(n, 0) : t.setEnd(n, n.nodeValue.length)); - if (s[n.nodeName])return void(r ? t.setStartBefore(n) : "BR" == n.nodeName ? t.setEndBefore(n) : t.setEndAfter(n)); - if (i.ie && i.ie < 11 && this.dom.isBlock(n) && this.dom.isEmpty(n))return void(r ? t.setStart(n, 0) : t.setEnd(n, 0)) - } while (n = r ? a.next() : a.prev()); - "BODY" == o.nodeName && (r ? t.setStart(o, 0) : t.setEnd(o, o.childNodes.length)) - }, destroy: function () { - this.win = null, this.controlSelection.destroy() - }}, a - }), r(B, [f], function (e) { - function t(e) { - this.walk = function (t, r) { - function i(e) { - var t; - return t = e[0], 3 === t.nodeType && t === l && c >= t.nodeValue.length && e.splice(0, 1), t = e[e.length - 1], 0 === u && e.length > 0 && t === d && 3 === t.nodeType && e.splice(e.length - 1, 1), e - } - - function o(e, t, n) { - for (var r = []; e && e != n; e = e[t])r.push(e); - return r - } - - function a(e, t) { - do { - if (e.parentNode == t)return e; - e = e.parentNode - } while (e) - } - - function s(e, t, n) { - var a = n ? "nextSibling" : "previousSibling"; - for (h = e, g = h.parentNode; h && h != t; h = g)g = h.parentNode, v = o(h == e ? h : h[a], a), v.length && (n || v.reverse(), r(i(v))) - } - - var l = t.startContainer, c = t.startOffset, d = t.endContainer, u = t.endOffset, f, p, m, h, g, v, y; - if (y = e.select("td.mce-item-selected,th.mce-item-selected"), y.length > 0)return void n(y, function (e) { - r([e]) - }); - if (1 == l.nodeType && l.hasChildNodes() && (l = l.childNodes[c]), 1 == d.nodeType && d.hasChildNodes() && (d = d.childNodes[Math.min(u - 1, d.childNodes.length - 1)]), l == d)return r(i([l])); - for (f = e.findCommonAncestor(l, d), h = l; h; h = h.parentNode) { - if (h === d)return s(l, f, !0); - if (h === f)break - } - for (h = d; h; h = h.parentNode) { - if (h === l)return s(d, f); - if (h === f)break - } - p = a(l, f) || l, m = a(d, f) || d, s(l, p, !0), v = o(p == l ? p : p.nextSibling, "nextSibling", m == d ? m.nextSibling : m), v.length && r(i(v)), s(d, m) - }, this.split = function (e) { - function t(e, t) { - return e.splitText(t) - } - - var n = e.startContainer, r = e.startOffset, i = e.endContainer, o = e.endOffset; - return n == i && 3 == n.nodeType ? r > 0 && r < n.nodeValue.length && (i = t(n, r), n = i.previousSibling, o > r ? (o -= r, n = i = t(i, o).previousSibling, o = i.nodeValue.length, r = 0) : o = 0) : (3 == n.nodeType && r > 0 && r < n.nodeValue.length && (n = t(n, r), r = 0), 3 == i.nodeType && o > 0 && o < i.nodeValue.length && (i = t(i, o).previousSibling, o = i.nodeValue.length)), {startContainer: n, startOffset: r, endContainer: i, endOffset: o} - } - } - - var n = e.each; - return t.compareRanges = function (e, t) { - if (e && t) { - if (!e.item && !e.duplicate)return e.startContainer == t.startContainer && e.startOffset == t.startOffset; - if (e.item && t.item && e.item(0) === t.item(0))return!0; - if (e.isEqual && t.isEqual && t.isEqual(e))return!0 - } - return!1 - }, t - }), r(L, [u, B, f], function (e, t, n) { - return function (r) { - function i(e) { - return e.nodeType && (e = e.nodeName), !!r.schema.getTextBlockElements()[e.toLowerCase()] - } - - function o(e, t) { - return I.getParents(e, t, I.getRoot()) - } - - function a(e) { - return 1 === e.nodeType && "_mce_caret" === e.id - } - - function s() { - d({alignleft: [ - {selector: "figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li", styles: {textAlign: "left"}, defaultBlock: "div"}, - {selector: "img,table", collapsed: !1, styles: {"float": "left"}} - ], aligncenter: [ - {selector: "figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li", styles: {textAlign: "center"}, defaultBlock: "div"}, - {selector: "img", collapsed: !1, styles: {display: "block", marginLeft: "auto", marginRight: "auto"}}, - {selector: "table", collapsed: !1, styles: {marginLeft: "auto", marginRight: "auto"}} - ], alignright: [ - {selector: "figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li", styles: {textAlign: "right"}, defaultBlock: "div"}, - {selector: "img,table", collapsed: !1, styles: {"float": "right"}} - ], alignjustify: [ - {selector: "figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li", styles: {textAlign: "justify"}, defaultBlock: "div"} - ], bold: [ - {inline: "strong", remove: "all"}, - {inline: "span", styles: {fontWeight: "bold"}}, - {inline: "b", remove: "all"} - ], italic: [ - {inline: "em", remove: "all"}, - {inline: "span", styles: {fontStyle: "italic"}}, - {inline: "i", remove: "all"} - ], underline: [ - {inline: "span", styles: {textDecoration: "underline"}, exact: !0}, - {inline: "u", remove: "all"} - ], strikethrough: [ - {inline: "span", styles: {textDecoration: "line-through"}, exact: !0}, - {inline: "strike", remove: "all"} - ], forecolor: {inline: "span", styles: {color: "%value"}, wrap_links: !1}, hilitecolor: {inline: "span", styles: {backgroundColor: "%value"}, wrap_links: !1}, fontname: {inline: "span", styles: {fontFamily: "%value"}}, fontsize: {inline: "span", styles: {fontSize: "%value"}}, fontsize_class: {inline: "span", attributes: {"class": "%value"}}, blockquote: {block: "blockquote", wrapper: 1, remove: "all"}, subscript: {inline: "sub"}, superscript: {inline: "sup"}, code: {inline: "code"}, link: {inline: "a", selector: "a", remove: "all", split: !0, deep: !0, onmatch: function () { - return!0 - }, onformat: function (e, t, n) { - et(n, function (t, n) { - I.setAttrib(e, n, t) - }) - }}, removeformat: [ - {selector: "b,strong,em,i,font,u,strike,sub,sup", remove: "all", split: !0, expand: !1, block_expand: !0, deep: !0}, - {selector: "span", attributes: ["style", "class"], remove: "empty", split: !0, expand: !1, deep: !0}, - {selector: "*", attributes: ["style", "class"], split: !1, expand: !1, deep: !0} - ]}), et("p h1 h2 h3 h4 h5 h6 div address pre div dt dd samp".split(/\s/), function (e) { - d(e, {block: e, remove: "all"}) - }), d(r.settings.formats) - } - - function l() { - r.addShortcut("ctrl+b", "bold_desc", "Bold"), r.addShortcut("ctrl+i", "italic_desc", "Italic"), r.addShortcut("ctrl+u", "underline_desc", "Underline"); - for (var e = 1; 6 >= e; e++)r.addShortcut("ctrl+" + e, "", ["FormatBlock", !1, "h" + e]); - r.addShortcut("ctrl+7", "", ["FormatBlock", !1, "p"]), r.addShortcut("ctrl+8", "", ["FormatBlock", !1, "div"]), r.addShortcut("ctrl+9", "", ["FormatBlock", !1, "address"]) - } - - function c(e) { - return e ? O[e] : O - } - - function d(e, t) { - e && ("string" != typeof e ? et(e, function (e, t) { - d(t, e) - }) : (t = t.length ? t : [t], et(t, function (e) { - e.deep === X && (e.deep = !e.selector), e.split === X && (e.split = !e.selector || e.inline), e.remove === X && e.selector && !e.inline && (e.remove = "none"), e.selector && e.inline && (e.mixed = !0, e.block_expand = !0), "string" == typeof e.classes && (e.classes = e.classes.split(/\s+/)) - }), O[e] = t)) - } - - function u(e) { - var t; - return r.dom.getParent(e, function (e) { - return t = r.dom.getStyle(e, "text-decoration"), t && "none" !== t - }), t - } - - function f(e) { - var t; - 1 === e.nodeType && e.parentNode && 1 === e.parentNode.nodeType && (t = u(e.parentNode), r.dom.getStyle(e, "color") && t ? r.dom.setStyle(e, "text-decoration", t) : r.dom.getStyle(e, "textdecoration") === t && r.dom.setStyle(e, "text-decoration", null)) - } - - function p(t, n, o) { - function s(e, t) { - t = t || h, e && (t.onformat && t.onformat(e, t, n, o), et(t.styles, function (t, r) { - I.setStyle(e, r, E(t, n)) - }), et(t.attributes, function (t, r) { - I.setAttrib(e, r, E(t, n)) - }), et(t.classes, function (t) { - t = E(t, n), I.hasClass(e, t) || I.addClass(e, t) - })) - } - - function l() { - function t(t, n) { - var r = new e(n); - for (o = r.current(); o; o = r.prev())if (o.childNodes.length > 1 || o == t || "BR" == o.tagName)return o - } - - var n = r.selection.getRng(), i = n.startContainer, a = n.endContainer; - if (i != a && 0 === n.endOffset) { - var s = t(i, a), l = 3 == s.nodeType ? s.length : s.childNodes.length; - n.setEnd(s, l) - } - return n - } - - function d(e, t, n, r, i) { - var o = [], a = -1, s, l = -1, c = -1, d; - return et(e.childNodes, function (e, t) { - return"UL" === e.nodeName || "OL" === e.nodeName ? (a = t, s = e, !1) : void 0 - }), et(e.childNodes, function (e, n) { - "SPAN" === e.nodeName && "bookmark" == I.getAttrib(e, "data-mce-type") && (e.id == t.id + "_start" ? l = n : e.id == t.id + "_end" && (c = n)) - }), 0 >= a || a > l && c > a ? (et(tt(e.childNodes), i), 0) : (d = I.clone(n, K), et(tt(e.childNodes), function (e, t) { - (a > l && a > t || l > a && t > a) && (o.push(e), e.parentNode.removeChild(e)) - }), a > l ? e.insertBefore(d, s) : l > a && e.insertBefore(d, s.nextSibling), r.push(d), et(o, function (e) { - d.appendChild(e) - }), d) - } - - function u(e, r, o) { - var l = [], c, u, f = !0; - c = h.inline || h.block, u = I.create(c), s(u), F.walk(e, function (e) { - function p(e) { - var y, C, x, _, N; - return N = f, y = e.nodeName.toLowerCase(), C = e.parentNode.nodeName.toLowerCase(), 1 === e.nodeType && J(e) && (N = f, f = "true" === J(e), _ = !0), w(y, "br") ? (v = 0, void(h.block && I.remove(e))) : h.wrapper && g(e, t, n) ? void(v = 0) : f && !_ && h.block && !h.wrapper && i(y) && W(C, c) ? (e = I.rename(e, c), s(e), l.push(e), void(v = 0)) : h.selector && (et(m, function (t) { - "collapsed"in t && t.collapsed !== b || I.is(e, t.selector) && !a(e) && (s(e, t), x = !0) - }), !h.inline || x) ? void(v = 0) : void(!f || _ || !W(c, y) || !W(C, c) || !o && 3 === e.nodeType && 1 === e.nodeValue.length && 65279 === e.nodeValue.charCodeAt(0) || a(e) || h.inline && V(e) ? "li" == y && r ? v = d(e, r, u, l, p) : (v = 0, et(tt(e.childNodes), p), _ && (f = N), v = 0) : (v || (v = I.clone(u, K), e.parentNode.insertBefore(v, e), l.push(v)), v.appendChild(e))) - } - - var v; - et(e, p) - }), h.wrap_links === !1 && et(l, function (e) { - function t(e) { - var n, r, i; - if ("A" === e.nodeName) { - for (r = I.clone(u, K), l.push(r), i = tt(e.childNodes), n = 0; n < i.length; n++)r.appendChild(i[n]); - e.appendChild(r) - } - et(tt(e.childNodes), t) - } - - t(e) - }), et(l, function (e) { - function r(e) { - var t = 0; - return et(e.childNodes, function (e) { - k(e) || L(e) || t++ - }), t - } - - function i(e) { - var t, n; - return et(e.childNodes, function (e) { - return 1 != e.nodeType || L(e) || a(e) ? void 0 : (t = e, K) - }), t && x(t, h) && (n = I.clone(t, K), s(n), I.replace(n, e, Y), I.remove(t, 1)), n || e - } - - var o; - if (o = r(e), (l.length > 1 || !V(e)) && 0 === o)return void I.remove(e, 1); - if (h.inline || h.wrapper) { - if (h.exact || 1 !== o || (e = i(e)), et(m, function (t) { - et(I.select(t.inline, e), function (e) { - var r; - if (t.wrap_links === !1) { - r = e.parentNode; - do if ("A" === r.nodeName)return; while (r = r.parentNode) - } - R(t, n, e, t.exact ? e : null) - }) - }), g(e.parentNode, t, n))return I.remove(e, 1), e = 0, Y; - h.merge_with_parents && I.getParent(e.parentNode, function (r) { - return g(r, t, n) ? (I.remove(e, 1), e = 0, Y) : void 0 - }), e && h.merge_siblings !== !1 && (e = H(B(e), e), e = H(e, B(e, Y))) - } - }) - } - - var m = c(t), h = m[0], v, y, b = !o && z.isCollapsed(); - if (h)if (o)o.nodeType ? (y = I.createRng(), y.setStartBefore(o), y.setEndAfter(o), u(T(y, m), null, !0)) : u(o, null, !0); else if (b && h.inline && !I.select("td.mce-item-selected,th.mce-item-selected").length)D("apply", t, n); else { - var C = r.selection.getNode(); - U || !m[0].defaultBlock || I.getParent(C, I.isBlock) || p(m[0].defaultBlock), r.selection.setRng(l()), v = z.getBookmark(), u(T(z.getRng(Y), m), v), h.styles && (h.styles.color || h.styles.textDecoration) && (nt(C, f, "childNodes"), f(C)), z.moveToBookmark(v), P(z.getRng(Y)), r.nodeChanged() - } - } - - function m(e, t, n) { - function i(e) { - var n, r, o, a, s; - if (1 === e.nodeType && J(e) && (a = b, b = "true" === J(e), s = !0), n = tt(e.childNodes), b && !s)for (r = 0, o = p.length; o > r && !R(p[r], t, e, e); r++); - if (m.deep && n.length) { - for (r = 0, o = n.length; o > r; r++)i(n[r]); - s && (b = a) - } - } - - function a(n) { - var r; - return et(o(n.parentNode).reverse(), function (n) { - var i; - r || "_start" == n.id || "_end" == n.id || (i = g(n, e, t), i && i.split !== !1 && (r = n)) - }), r - } - - function s(e, n, r, i) { - var o, a, s, l, c, d; - if (e) { - for (d = e.parentNode, o = n.parentNode; o && o != d; o = o.parentNode) { - for (a = I.clone(o, K), c = 0; c < p.length; c++)if (R(p[c], t, a, a)) { - a = 0; - break - } - a && (s && a.appendChild(s), l || (l = a), s = a) - } - !i || m.mixed && V(e) || (n = I.split(e, n)), s && (r.parentNode.insertBefore(s, r), l.appendChild(r)) - } - return n - } - - function l(e) { - return s(a(e), e, e, !0) - } - - function d(e) { - var t = I.get(e ? "_start" : "_end"), n = t[e ? "firstChild" : "lastChild"]; - return L(n) && (n = n[e ? "firstChild" : "lastChild"]), I.remove(t, !0), n - } - - function f(e) { - var t, n, o = e.commonAncestorContainer; - e = T(e, p, Y), m.split && (t = M(e, Y), n = M(e), t != n ? (/^(TR|TH|TD)$/.test(t.nodeName) && t.firstChild && (t = "TR" == t.nodeName ? t.firstChild.firstChild || t : t.firstChild || t), o && /^T(HEAD|BODY|FOOT|R)$/.test(o.nodeName) && /^(TH|TD)$/.test(n.nodeName) && n.firstChild && (n = n.firstChild || n), t = S(t, "span", {id: "_start", "data-mce-type": "bookmark"}), n = S(n, "span", {id: "_end", "data-mce-type": "bookmark"}), l(t), l(n), t = d(Y), n = d()) : t = n = l(t), e.startContainer = t.parentNode, e.startOffset = q(t), e.endContainer = n.parentNode, e.endOffset = q(n) + 1), F.walk(e, function (e) { - et(e, function (e) { - i(e), 1 === e.nodeType && "underline" === r.dom.getStyle(e, "text-decoration") && e.parentNode && "underline" === u(e.parentNode) && R({deep: !1, exact: !0, inline: "span", styles: {textDecoration: "underline"}}, null, e) - }) - }) - } - - var p = c(e), m = p[0], h, y, b = !0; - return n ? void(n.nodeType ? (y = I.createRng(), y.setStartBefore(n), y.setEndAfter(n), f(y)) : f(n)) : void(z.isCollapsed() && m.inline && !I.select("td.mce-item-selected,th.mce-item-selected").length ? D("remove", e, t) : (h = z.getBookmark(), f(z.getRng(Y)), z.moveToBookmark(h), m.inline && v(e, t, z.getStart()) && P(z.getRng(!0)), r.nodeChanged())) - } - - function h(e, t, n) { - var r = c(e); - !v(e, t, n) || "toggle"in r[0] && !r[0].toggle ? p(e, t, n) : m(e, t, n) - } - - function g(e, t, n, r) { - function i(e, t, i) { - var o, a, s = t[i], l; - if (t.onmatch)return t.onmatch(e, t, i); - if (s)if (s.length === X) { - for (o in s)if (s.hasOwnProperty(o)) { - if (a = "attributes" === i ? I.getAttrib(e, o) : _(e, o), r && !a && !t.exact)return; - if ((!r || t.exact) && !w(a, N(E(s[o], n), o)))return - } - } else for (l = 0; l < s.length; l++)if ("attributes" === i ? I.getAttrib(e, s[l]) : _(e, s[l]))return t; - return t - } - - var o = c(t), a, s, l; - if (o && e)for (s = 0; s < o.length; s++)if (a = o[s], x(e, a) && i(e, a, "attributes") && i(e, a, "styles")) { - if (l = a.classes)for (s = 0; s < l.length; s++)if (!I.hasClass(e, l[s]))return; - return a - } - } - - function v(e, t, n) { - function r(n) { - var r = I.getRoot(); - return n === r ? !1 : (n = I.getParent(n, function (n) { - return n.parentNode === r || !!g(n, e, t, !0) - }), g(n, e, t)) - } - - var i; - return n ? r(n) : (n = z.getNode(), r(n) ? Y : (i = z.getStart(), i != n && r(i) ? Y : K)) - } - - function y(e, t) { - var n, r = [], i = {}; - return n = z.getStart(), I.getParent(n, function (n) { - var o, a; - for (o = 0; o < e.length; o++)a = e[o], !i[a] && g(n, a, t) && (i[a] = !0, r.push(a)) - }, I.getRoot()), r - } - - function b(e) { - var t = c(e), n, r, i, a, s; - if (t)for (n = z.getStart(), r = o(n), a = t.length - 1; a >= 0; a--) { - if (s = t[a].selector, !s || t[a].defaultBlock)return Y; - for (i = r.length - 1; i >= 0; i--)if (I.is(r[i], s))return Y - } - return K - } - - function C(e, t, n) { - var i; - return G || (G = {}, i = {}, r.on("NodeChange", function (e) { - var t = o(e.element), n = {}; - et(G, function (e, r) { - et(t, function (o) { - return g(o, r, {}, e.similar) ? (i[r] || (et(e, function (e) { - e(!0, {node: o, format: r, parents: t}) - }), i[r] = e), n[r] = e, !1) : void 0 - }) - }), et(i, function (r, o) { - n[o] || (delete i[o], et(r, function (n) { - n(!1, {node: e.element, format: o, parents: t}) - })) - }) - })), et(e.split(","), function (e) { - G[e] || (G[e] = [], G[e].similar = n), G[e].push(t) - }), this - } - - function x(e, t) { - return w(e, t.inline) ? Y : w(e, t.block) ? Y : t.selector ? 1 == e.nodeType && I.is(e, t.selector) : void 0 - } - - function w(e, t) { - return e = e || "", t = t || "", e = "" + (e.nodeName || e), t = "" + (t.nodeName || t), e.toLowerCase() == t.toLowerCase() - } - - function _(e, t) { - return N(I.getStyle(e, t), t) - } - - function N(e, t) { - return("color" == t || "backgroundColor" == t) && (e = I.toHex(e)), "fontWeight" == t && 700 == e && (e = "bold"), "fontFamily" == t && (e = e.replace(/[\'\"]/g, "").replace(/,\s+/g, ",")), "" + e - } - - function E(e, t) { - return"string" != typeof e ? e = e(t) : t && (e = e.replace(/%(\w+)/g, function (e, n) { - return t[n] || e - })), e - } - - function k(e) { - return e && 3 === e.nodeType && /^([\t \r\n]+|)$/.test(e.nodeValue) - } - - function S(e, t, n) { - var r = I.create(t, n); - return e.parentNode.insertBefore(r, e), r.appendChild(e), r - } - - function T(t, n, a) { - function s(e) { - function t(e) { - return"BR" == e.nodeName && e.getAttribute("data-mce-bogus") && !e.nextSibling - } - - var r, i, o, a, s; - if (r = i = e ? g : y, a = e ? "previousSibling" : "nextSibling", s = I.getRoot(), 3 == r.nodeType && !k(r) && (e ? v > 0 : b < r.nodeValue.length))return r; - for (; ;) { - if (!n[0].block_expand && V(i))return i; - for (o = i[a]; o; o = o[a])if (!L(o) && !k(o) && !t(o))return i; - if (i.parentNode == s) { - r = i; - break - } - i = i.parentNode - } - return r - } - - function l(e, t) { - for (t === X && (t = 3 === e.nodeType ? e.length : e.childNodes.length); e && e.hasChildNodes();)e = e.childNodes[t], e && (t = 3 === e.nodeType ? e.length : e.childNodes.length); - return{node: e, offset: t} - } - - function c(e) { - for (var t = e; t;) { - if (1 === t.nodeType && J(t))return"false" === J(t) ? t : e; - t = t.parentNode - } - return e - } - - function d(t, n, i) { - function o(e, t) { - var n, r, o = e.nodeValue; - return"undefined" == typeof t && (t = i ? o.length : 0), i ? (n = o.lastIndexOf(" ", t), r = o.lastIndexOf("\xa0", t), n = n > r ? n : r, -1 === n || a || n++) : (n = o.indexOf(" ", t), r = o.indexOf("\xa0", t), n = -1 !== n && (-1 === r || r > n) ? n : r), n - } - - var s, l, c, d; - if (3 === t.nodeType) { - if (c = o(t, n), -1 !== c)return{container: t, offset: c}; - d = t - } - for (s = new e(t, I.getParent(t, V) || r.getBody()); l = s[i ? "prev" : "next"]();)if (3 === l.nodeType) { - if (d = l, c = o(l), -1 !== c)return{container: l, offset: c} - } else if (V(l))break; - return d ? (n = i ? 0 : d.length, {container: d, offset: n}) : void 0 - } - - function u(e, r) { - var i, a, s, l; - for (3 == e.nodeType && 0 === e.nodeValue.length && e[r] && (e = e[r]), i = o(e), a = 0; a < i.length; a++)for (s = 0; s < n.length; s++)if (l = n[s], !("collapsed"in l && l.collapsed !== t.collapsed) && I.is(i[a], l.selector))return i[a]; - return e - } - - function f(e, t) { - var r, a = I.getRoot(); - if (n[0].wrapper || (r = I.getParent(e, n[0].block, a)), r || (r = I.getParent(3 == e.nodeType ? e.parentNode : e, function (e) { - return e != a && i(e) - })), r && n[0].wrapper && (r = o(r, "ul,ol").reverse()[0] || r), !r)for (r = e; r[t] && !V(r[t]) && (r = r[t], !w(r, "br"));); - return r || e - } - - var p, m, h, g = t.startContainer, v = t.startOffset, y = t.endContainer, b = t.endOffset; - if (1 == g.nodeType && g.hasChildNodes() && (p = g.childNodes.length - 1, g = g.childNodes[v > p ? p : v], 3 == g.nodeType && (v = 0)), 1 == y.nodeType && y.hasChildNodes() && (p = y.childNodes.length - 1, y = y.childNodes[b > p ? p : b - 1], 3 == y.nodeType && (b = y.nodeValue.length)), g = c(g), y = c(y), (L(g.parentNode) || L(g)) && (g = L(g) ? g : g.parentNode, g = g.nextSibling || g, 3 == g.nodeType && (v = 0)), (L(y.parentNode) || L(y)) && (y = L(y) ? y : y.parentNode, y = y.previousSibling || y, 3 == y.nodeType && (b = y.length)), n[0].inline && (t.collapsed && (h = d(g, v, !0), h && (g = h.container, v = h.offset), h = d(y, b), h && (y = h.container, b = h.offset)), m = l(y, b), m.node)) { - for (; m.node && 0 === m.offset && m.node.previousSibling;)m = l(m.node.previousSibling); - m.node && m.offset > 0 && 3 === m.node.nodeType && " " === m.node.nodeValue.charAt(m.offset - 1) && m.offset > 1 && (y = m.node, y.splitText(m.offset - 1)) - } - return(n[0].inline || n[0].block_expand) && (n[0].inline && 3 == g.nodeType && 0 !== v || (g = s(!0)), n[0].inline && 3 == y.nodeType && b !== y.nodeValue.length || (y = s())), n[0].selector && n[0].expand !== K && !n[0].inline && (g = u(g, "previousSibling"), y = u(y, "nextSibling")), (n[0].block || n[0].selector) && (g = f(g, "previousSibling"), y = f(y, "nextSibling"), n[0].block && (V(g) || (g = s(!0)), V(y) || (y = s()))), 1 == g.nodeType && (v = q(g), g = g.parentNode), 1 == y.nodeType && (b = q(y) + 1, y = y.parentNode), {startContainer: g, startOffset: v, endContainer: y, endOffset: b} - } - - function R(e, t, n, r) { - var i, o, a; - if (!x(n, e))return K; - if ("all" != e.remove)for (et(e.styles, function (e, i) { - e = N(E(e, t), i), "number" == typeof i && (i = e, r = 0), (!r || w(_(r, i), e)) && I.setStyle(n, i, ""), a = 1 - }), a && "" === I.getAttrib(n, "style") && (n.removeAttribute("style"), n.removeAttribute("data-mce-style")), et(e.attributes, function (e, i) { - var o; - if (e = E(e, t), "number" == typeof i && (i = e, r = 0), !r || w(I.getAttrib(r, i), e)) { - if ("class" == i && (e = I.getAttrib(n, i), e && (o = "", et(e.split(/\s+/), function (e) { - /mce\w+/.test(e) && (o += (o ? " " : "") + e) - }), o)))return void I.setAttrib(n, i, o); - "class" == i && n.removeAttribute("className"), $.test(i) && n.removeAttribute("data-mce-" + i), n.removeAttribute(i) - } - }), et(e.classes, function (e) { - e = E(e, t), (!r || I.hasClass(r, e)) && I.removeClass(n, e) - }), o = I.getAttribs(n), i = 0; i < o.length; i++)if (0 !== o[i].nodeName.indexOf("_"))return K; - return"none" != e.remove ? (A(n, e), Y) : void 0 - } - - function A(e, t) { - function n(e, t, n) { - return e = B(e, t, n), !e || "BR" == e.nodeName || V(e) - } - - var i = e.parentNode, o; - t.block && (U ? i == I.getRoot() && (t.list_block && w(e, t.list_block) || et(tt(e.childNodes), function (e) { - W(U, e.nodeName.toLowerCase()) ? o ? o.appendChild(e) : (o = S(e, U), I.setAttribs(o, r.settings.forced_root_block_attrs)) : o = 0 - })) : V(e) && !V(i) && (n(e, K) || n(e.firstChild, Y, 1) || e.insertBefore(I.create("br"), e.firstChild), n(e, Y) || n(e.lastChild, K, 1) || e.appendChild(I.create("br")))), t.selector && t.inline && !w(t.inline, e) || I.remove(e, 1) - } - - function B(e, t, n) { - if (e)for (t = t ? "nextSibling" : "previousSibling", e = n ? e : e[t]; e; e = e[t])if (1 == e.nodeType && !k(e))return e - } - - function L(e) { - return e && 1 == e.nodeType && "bookmark" == e.getAttribute("data-mce-type") - } - - function H(e, t) { - function n(e, t) { - function n(e) { - var t = {}; - return et(I.getAttribs(e), function (n) { - var r = n.nodeName.toLowerCase(); - 0 !== r.indexOf("_") && "style" !== r && "data-mce-style" !== r && (t[r] = I.getAttrib(e, r)) - }), t - } - - function r(e, t) { - var n, r; - for (r in e)if (e.hasOwnProperty(r)) { - if (n = t[r], n === X)return K; - if (e[r] != n)return K; - delete t[r] - } - for (r in t)if (t.hasOwnProperty(r))return K; - return Y - } - - return e.nodeName != t.nodeName ? K : r(n(e), n(t)) ? r(I.parseStyle(I.getAttrib(e, "style")), I.parseStyle(I.getAttrib(t, "style"))) ? Y : K : K - } - - function r(e, t) { - for (i = e; i; i = i[t]) { - if (3 == i.nodeType && 0 !== i.nodeValue.length)return e; - if (1 == i.nodeType && !L(i))return i - } - return e - } - - var i, o; - if (e && t && (e = r(e, "previousSibling"), t = r(t, "nextSibling"), n(e, t))) { - for (i = e.nextSibling; i && i != t;)o = i, i = i.nextSibling, e.appendChild(o); - return I.remove(t), et(tt(t.childNodes), function (t) { - e.appendChild(t) - }), e - } - return t - } - - function M(t, n) { - var i, o, a; - return i = t[n ? "startContainer" : "endContainer"], o = t[n ? "startOffset" : "endOffset"], 1 == i.nodeType && (a = i.childNodes.length - 1, !n && o && o--, i = i.childNodes[o > a ? a : o]), 3 === i.nodeType && n && o >= i.nodeValue.length && (i = new e(i, r.getBody()).next() || i), 3 !== i.nodeType || n || 0 !== o || (i = new e(i, r.getBody()).prev() || i), i - } - - function D(t, n, o) { - function a(e) { - var t = I.create("span", {id: y, "data-mce-bogus": !0, style: b ? "color:red" : ""}); - return e && t.appendChild(r.getDoc().createTextNode(j)), t - } - - function s(e, t) { - for (; e;) { - if (3 === e.nodeType && e.nodeValue !== j || e.childNodes.length > 1)return!1; - t && 1 === e.nodeType && t.push(e), e = e.firstChild - } - return!0 - } - - function l(e) { - for (; e;) { - if (e.id === y)return e; - e = e.parentNode - } - } - - function d(t) { - var n; - if (t)for (n = new e(t, t), t = n.current(); t; t = n.next())if (3 === t.nodeType)return t - } - - function u(e, t) { - var n, r; - if (e)r = z.getRng(!0), s(e) ? (t !== !1 && (r.setStartBefore(e), r.setEndBefore(e)), I.remove(e)) : (n = d(e), n.nodeValue.charAt(0) === j && (n = n.deleteData(0, 1)), I.remove(e, 1)), z.setRng(r); else if (e = l(z.getStart()), !e)for (; e = I.get(y);)u(e, !1) - } - - function f() { - var e, t, r, i, s, u, f; - e = z.getRng(!0), i = e.startOffset, u = e.startContainer, f = u.nodeValue, t = l(z.getStart()), t && (r = d(t)), f && i > 0 && i < f.length && /\w/.test(f.charAt(i)) && /\w/.test(f.charAt(i - 1)) ? (s = z.getBookmark(), e.collapse(!0), e = T(e, c(n)), e = F.split(e), p(n, o, e), z.moveToBookmark(s)) : (t && r.nodeValue === j ? p(n, o, t) : (t = a(!0), r = t.firstChild, e.insertNode(t), i = 1, p(n, o, t)), z.setCursorLocation(r, i)) - } - - function h() { - var e = z.getRng(!0), t, r, s, l, d, u, f = [], p, h; - for (t = e.startContainer, r = e.startOffset, d = t, 3 == t.nodeType && ((r != t.nodeValue.length || t.nodeValue === j) && (l = !0), d = d.parentNode); d;) { - if (g(d, n, o)) { - u = d; - break - } - d.nextSibling && (l = !0), f.push(d), d = d.parentNode - } - if (u)if (l)s = z.getBookmark(), e.collapse(!0), e = T(e, c(n), !0), e = F.split(e), m(n, o, e), z.moveToBookmark(s); else { - for (h = a(), d = h, p = f.length - 1; p >= 0; p--)d.appendChild(I.clone(f[p], !1)), d = d.firstChild; - d.appendChild(I.doc.createTextNode(j)), d = d.firstChild; - var v = I.getParent(u, i); - v && I.isEmpty(v) ? u.parentNode.replaceChild(h, u) : I.insertAfter(h, u), z.setCursorLocation(d, 1), I.isEmpty(u) && I.remove(u) - } - } - - function v() { - var e; - e = l(z.getStart()), e && !I.isEmpty(e) && nt(e, function (e) { - 1 != e.nodeType || e.id === y || I.isEmpty(e) || I.setAttrib(e, "data-mce-bogus", null) - }, "childNodes") - } - - var y = "_mce_caret", b = r.settings.caret_debug; - r._hasCaretEvents || (Z = function () { - var e = [], t; - if (s(l(z.getStart()), e))for (t = e.length; t--;)I.setAttrib(e[t], "data-mce-bogus", "1") - }, Q = function (e) { - var t = e.keyCode; - u(), (8 == t || 37 == t || 39 == t) && u(l(z.getStart())), v() - }, r.on("SetContent", function (e) { - e.selection && v() - }), r._hasCaretEvents = !0), "apply" == t ? f() : h() - } - - function P(t) { - var n = t.startContainer, r = t.startOffset, i, o, a, s, l; - if (3 == n.nodeType && r >= n.nodeValue.length && (r = q(n), n = n.parentNode, i = !0), 1 == n.nodeType)for (s = n.childNodes, n = s[Math.min(r, s.length - 1)], o = new e(n, I.getParent(n, I.isBlock)), (r > s.length - 1 || i) && o.next(), a = o.current(); a; a = o.next())if (3 == a.nodeType && !k(a))return l = I.create("a", null, j), a.parentNode.insertBefore(l, a), t.setStart(a, 0), z.setRng(t), void I.remove(l) - } - - var O = {}, I = r.dom, z = r.selection, F = new t(I), W = r.schema.isValidChild, V = I.isBlock, U = r.settings.forced_root_block, q = I.nodeIndex, j = "\ufeff", $ = /^(src|href|style)$/, K = !1, Y = !0, G, X, J = I.getContentEditable, Q, Z, et = n.each, tt = n.grep, nt = n.walk, rt = n.extend; - rt(this, {get: c, register: d, apply: p, remove: m, toggle: h, match: v, matchAll: y, matchNode: g, canApply: b, formatChanged: C}), s(), l(), r.on("BeforeGetContent", function () { - Z && Z() - }), r.on("mouseup keydown", function (e) { - Q && Q(e) - }) - } - }), r(H, [h, f], function (e, t) { - var n = t.trim, r; - return r = new RegExp(["]+data-mce-bogus[^>]+>[\u200b\ufeff]+<\\/span>", "]+data-mce-bogus[^>]+><\\/div>", '\\s?data-mce-selected="[^"]+"'].join("|"), "gi"), function (t) { - function i() { - return n(t.getContent({format: "raw", no_events: 1}).replace(r, "")) - } - - function o() { - a.typing = !1, a.add() - } - - var a, s = 0, l = [], c, d, u; - return t.on("init", function () { - a.add() - }), t.on("BeforeExecCommand", function (e) { - var t = e.command; - "Undo" != t && "Redo" != t && "mceRepaint" != t && a.beforeChange() - }), t.on("ExecCommand", function (e) { - var t = e.command; - "Undo" != t && "Redo" != t && "mceRepaint" != t && a.add() - }), t.on("ObjectResizeStart", function () { - a.beforeChange() - }), t.on("SaveContent ObjectResized", o), t.dom.bind(t.dom.getRoot(), "dragend", o), t.dom.bind(t.getBody(), "focusout", function () { - !t.removed && a.typing && o() - }), t.on("KeyUp", function (n) { - var r = n.keyCode; - (r >= 33 && 36 >= r || r >= 37 && 40 >= r || 45 == r || 13 == r || n.ctrlKey) && (o(), t.nodeChanged()), (46 == r || 8 == r || e.mac && (91 == r || 93 == r)) && t.nodeChanged(), d && a.typing && (t.isDirty() || (t.isNotDirty = !l[0] || i() == l[0].content, t.isNotDirty || t.fire("change", {level: l[0], lastLevel: null})), t.fire("TypingUndo"), d = !1, t.nodeChanged()) - }), t.on("KeyDown", function (e) { - var t = e.keyCode; - return t >= 33 && 36 >= t || t >= 37 && 40 >= t || 45 == t ? void(a.typing && o()) : void((16 > t || t > 20) && 224 != t && 91 != t && !a.typing && (a.beforeChange(), a.typing = !0, a.add(), d = !0)) - }), t.on("MouseDown", function () { - a.typing && o() - }), t.addShortcut("ctrl+z", "", "Undo"), t.addShortcut("ctrl+y,ctrl+shift+z", "", "Redo"), t.on("AddUndo Undo Redo ClearUndos MouseUp", function (e) { - e.isDefaultPrevented() || t.nodeChanged() - }), a = {data: l, typing: !1, beforeChange: function () { - u || (c = t.selection.getBookmark(2, !0)) - }, add: function (e) { - var n, r = t.settings, o; - if (e = e || {}, e.content = i(), u || t.fire("BeforeAddUndo", {level: e}).isDefaultPrevented())return null; - if (o = l[s], o && o.content == e.content)return null; - if (l[s] && (l[s].beforeBookmark = c), r.custom_undo_redo_levels && l.length > r.custom_undo_redo_levels) { - for (n = 0; n < l.length - 1; n++)l[n] = l[n + 1]; - l.length--, s = l.length - } - e.bookmark = t.selection.getBookmark(2, !0), s < l.length - 1 && (l.length = s + 1), l.push(e), s = l.length - 1; - var a = {level: e, lastLevel: o}; - return t.fire("AddUndo", a), s > 0 && (t.fire("change", a), t.isNotDirty = !1), e - }, undo: function () { - var e; - return a.typing && (a.add(), a.typing = !1), s > 0 && (e = l[--s], 0 === s && (t.isNotDirty = !0), t.setContent(e.content, {format: "raw"}), t.selection.moveToBookmark(e.beforeBookmark), t.fire("undo", {level: e})), e - }, redo: function () { - var e; - return s < l.length - 1 && (e = l[++s], t.setContent(e.content, {format: "raw"}), t.selection.moveToBookmark(e.bookmark), t.fire("redo", {level: e})), e - }, clear: function () { - l = [], s = 0, a.typing = !1, t.fire("ClearUndos") - }, hasUndo: function () { - return s > 0 || a.typing && l[0] && i() != l[0].content - }, hasRedo: function () { - return s < l.length - 1 && !this.typing - }, transact: function (e) { - a.beforeChange(), u = !0, e(), u = !1, a.add() - }} - } - }), r(M, [u, h], function (e, t) { - var n = t.ie && t.ie < 11; - return function (r) { - function i(i) { - function u(e) { - return e && o.isBlock(e) && !/^(TD|TH|CAPTION|FORM)$/.test(e.nodeName) && !/^(fixed|absolute)/i.test(e.style.position) && "true" !== o.getContentEditable(e) - } - - function f(e) { - var t; - o.isBlock(e) && (t = a.getRng(), e.appendChild(o.create("span", null, "\xa0")), a.select(e), e.lastChild.outerHTML = "", a.setRng(t)) - } - - function p(e) { - for (var t = e, n = [], r; t = t.firstChild;) { - if (o.isBlock(t))return; - 1 != t.nodeType || d[t.nodeName.toLowerCase()] || n.push(t) - } - for (r = n.length; r--;)t = n[r], !t.hasChildNodes() || t.firstChild == t.lastChild && "" === t.firstChild.nodeValue ? o.remove(t) : "A" == t.nodeName && " " === (t.innerText || t.textContent) && o.remove(t) - } - - function m(n) { - function r(e) { - for (; e;) { - if (1 == e.nodeType || 3 == e.nodeType && e.data && /[\r\n\s]/.test(e.data))return e; - e = e.nextSibling - } - } - - var i, s, l, c = n, u; - if (t.ie && t.ie < 9 && A && A.firstChild && A.firstChild == A.lastChild && "BR" == A.firstChild.tagName && o.remove(A.firstChild), "LI" == n.nodeName) { - var f = r(n.firstChild); - f && /^(UL|OL)$/.test(f.nodeName) && n.insertBefore(o.doc.createTextNode("\xa0"), n.firstChild) - } - if (l = o.createRng(), n.hasChildNodes()) { - for (i = new e(n, n); s = i.current();) { - if (3 == s.nodeType) { - l.setStart(s, 0), l.setEnd(s, 0); - break - } - if (d[s.nodeName.toLowerCase()]) { - l.setStartBefore(s), l.setEndBefore(s); - break - } - c = s, s = i.next() - } - s || (l.setStart(c, 0), l.setEnd(c, 0)) - } else"BR" == n.nodeName ? n.nextSibling && o.isBlock(n.nextSibling) ? ((!B || 9 > B) && (u = o.create("br"), n.parentNode.insertBefore(u, n)), l.setStartBefore(n), l.setEndBefore(n)) : (l.setStartAfter(n), l.setEndAfter(n)) : (l.setStart(n, 0), l.setEnd(n, 0)); - a.setRng(l), o.remove(u), a.scrollIntoView(n) - } - - function h(e) { - var t = s.forced_root_block; - t && t.toLowerCase() === e.tagName.toLowerCase() && o.setAttribs(e, s.forced_root_block_attrs) - } - - function g(e) { - var t = T, r, i, a; - if (e || "TABLE" == P ? (r = o.create(e || I), h(r)) : r = A.cloneNode(!1), a = r, s.keep_styles !== !1)do if (/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(t.nodeName)) { - if ("_mce_caret" == t.id)continue; - i = t.cloneNode(!1), o.setAttrib(i, "id", ""), r.hasChildNodes() ? (i.appendChild(r.firstChild), r.appendChild(i)) : (a = i, r.appendChild(i)) - } while (t = t.parentNode); - return n || (a.innerHTML = '
    '), r - } - - function v(t) { - var n, r, i; - if (3 == T.nodeType && (t ? R > 0 : R < T.nodeValue.length))return!1; - if (T.parentNode == A && z && !t)return!0; - if (t && 1 == T.nodeType && T == A.firstChild)return!0; - if ("TABLE" === T.nodeName || T.previousSibling && "TABLE" == T.previousSibling.nodeName)return z && !t || !z && t; - for (n = new e(T, A), 3 == T.nodeType && (t && 0 === R ? n.prev() : t || R != T.nodeValue.length || n.next()); r = n.current();) { - if (1 === r.nodeType) { - if (!r.getAttribute("data-mce-bogus") && (i = r.nodeName.toLowerCase(), d[i] && "br" !== i))return!1 - } else if (3 === r.nodeType && !/^[ \t\r\n]*$/.test(r.nodeValue))return!1; - t ? n.prev() : n.next() - } - return!0 - } - - function y(e, t) { - var n, i, a, s, l, d, f = I || "P"; - if (i = o.getParent(e, o.isBlock), d = r.getBody().nodeName.toLowerCase(), !i || !u(i)) { - if (i = i || S, !i.hasChildNodes())return n = o.create(f), h(n), i.appendChild(n), E.setStart(n, 0), E.setEnd(n, 0), n; - for (s = e; s.parentNode != i;)s = s.parentNode; - for (; s && !o.isBlock(s);)a = s, s = s.previousSibling; - if (a && c.isValidChild(d, f.toLowerCase())) { - for (n = o.create(f), h(n), a.parentNode.insertBefore(n, a), s = a; s && !o.isBlock(s);)l = s.nextSibling, n.appendChild(s), s = l; - E.setStart(e, t), E.setEnd(e, t) - } - } - return e - } - - function b() { - function e(e) { - for (var t = D[e ? "firstChild" : "lastChild"]; t && 1 != t.nodeType;)t = t[e ? "nextSibling" : "previousSibling"]; - return t === A - } - - function t() { - var e = D.parentNode; - return"LI" == e.nodeName ? e : D - } - - var n = D.parentNode.nodeName; - /^(OL|UL|LI)$/.test(n) && (I = "LI"), H = I ? g(I) : o.create("BR"), e(!0) && e() ? "LI" == n ? o.insertAfter(H, t()) : o.replace(H, D) : e(!0) ? "LI" == n ? (o.insertAfter(H, t()), H.appendChild(o.doc.createTextNode(" ")), H.appendChild(D)) : D.parentNode.insertBefore(H, D) : e() ? (o.insertAfter(H, t()), f(H)) : (D = t(), k = E.cloneRange(), k.setStartAfter(A), k.setEndAfter(D), M = k.extractContents(), "LI" == I && "LI" == M.firstChild.nodeName ? (H = M.firstChild, o.insertAfter(M, D)) : (o.insertAfter(M, D), o.insertAfter(H, D))), o.remove(A), m(H), l.add() - } - - function C() { - for (var t = new e(T, A), n; n = t.next();)if (d[n.nodeName.toLowerCase()] || n.length > 0)return!0 - } - - function x() { - var e, t, r; - T && 3 == T.nodeType && R >= T.nodeValue.length && (n || C() || (e = o.create("br"), E.insertNode(e), E.setStartAfter(e), E.setEndAfter(e), t = !0)), e = o.create("br"), E.insertNode(e), n && "PRE" == P && (!B || 8 > B) && e.parentNode.insertBefore(o.doc.createTextNode("\r"), e), r = o.create("span", {}, " "), e.parentNode.insertBefore(r, e), a.scrollIntoView(r), o.remove(r), t ? (E.setStartBefore(e), E.setEndBefore(e)) : (E.setStartAfter(e), E.setEndAfter(e)), a.setRng(E), l.add() - } - - function w(e) { - do 3 === e.nodeType && (e.nodeValue = e.nodeValue.replace(/^[\r\n]+/, "")), e = e.firstChild; while (e) - } - - function _(e) { - var t = o.getRoot(), n, r; - for (n = e; n !== t && "false" !== o.getContentEditable(n);)"true" === o.getContentEditable(n) && (r = n), n = n.parentNode; - return n !== t ? r : t - } - - function N(e) { - var t; - n || (e.normalize(), t = e.lastChild, (!t || /^(left|right)$/gi.test(o.getStyle(t, "float", !0))) && o.add(e, "br")) - } - - var E = a.getRng(!0), k, S, T, R, A, B, L, H, M, D, P, O, I, z; - if (!E.collapsed)return void r.execCommand("Delete"); - if (!i.isDefaultPrevented() && (T = E.startContainer, R = E.startOffset, I = (s.force_p_newlines ? "p" : "") || s.forced_root_block, I = I ? I.toUpperCase() : "", B = o.doc.documentMode, L = i.shiftKey, 1 == T.nodeType && T.hasChildNodes() && (z = R > T.childNodes.length - 1, T = T.childNodes[Math.min(R, T.childNodes.length - 1)] || T, R = z && 3 == T.nodeType ? T.nodeValue.length : 0), S = _(T))) { - if (l.beforeChange(), !o.isBlock(S) && S != o.getRoot())return void((!I || L) && x()); - if ((I && !L || !I && L) && (T = y(T, R)), A = o.getParent(T, o.isBlock), D = A ? o.getParent(A.parentNode, o.isBlock) : null, P = A ? A.nodeName.toUpperCase() : "", O = D ? D.nodeName.toUpperCase() : "", "LI" != O || i.ctrlKey || (A = D, P = O), "LI" == P) { - if (!I && L)return void x(); - if (o.isEmpty(A))return void b() - } - if ("PRE" == P && s.br_in_pre !== !1) { - if (!L)return void x() - } else if (!I && !L && "LI" != P || I && L)return void x(); - I && A === r.getBody() || (I = I || "P", v() ? (H = /^(H[1-6]|PRE|FIGURE)$/.test(P) && "HGROUP" != O ? g(I) : g(), s.end_container_on_empty_block && u(D) && o.isEmpty(A) ? H = o.split(D, A) : o.insertAfter(H, A), m(H)) : v(!0) ? (H = A.parentNode.insertBefore(g(), A), f(H), m(A)) : (k = E.cloneRange(), k.setEndAfter(A), M = k.extractContents(), w(M), H = M.firstChild, o.insertAfter(M, A), p(H), N(A), m(H)), o.setAttrib(H, "id", ""), r.fire("NewBlock", {newBlock: H}), l.add()) - } - } - - var o = r.dom, a = r.selection, s = r.settings, l = r.undoManager, c = r.schema, d = c.getNonEmptyElements(); - r.on("keydown", function (e) { - 13 == e.keyCode && i(e) !== !1 && e.preventDefault() - }) - } - }), r(D, [], function () { - return function (e) { - function t() { - var t = i.getStart(), s = e.getBody(), l, c, d, u, f, p, m, h = -16777215, g, v, y, b, C; - if (C = n.forced_root_block, t && 1 === t.nodeType && C) { - for (; t && t != s;) { - if (a[t.nodeName])return; - t = t.parentNode - } - if (l = i.getRng(), l.setStart) { - c = l.startContainer, d = l.startOffset, u = l.endContainer, f = l.endOffset; - try { - v = e.getDoc().activeElement === s - } catch (x) { - } - } else l.item && (t = l.item(0), l = e.getDoc().body.createTextRange(), l.moveToElementText(t)), v = l.parentElement().ownerDocument === e.getDoc(), y = l.duplicate(), y.collapse(!0), d = -1 * y.move("character", h), y.collapsed || (y = l.duplicate(), y.collapse(!1), f = -1 * y.move("character", h) - d); - for (t = s.firstChild, b = s.nodeName.toLowerCase(); t;)if ((3 === t.nodeType || 1 == t.nodeType && !a[t.nodeName]) && o.isValidChild(b, C.toLowerCase())) { - if (3 === t.nodeType && 0 === t.nodeValue.length) { - m = t, t = t.nextSibling, r.remove(m); - continue - } - p || (p = r.create(C, e.settings.forced_root_block_attrs), t.parentNode.insertBefore(p, t), g = !0), m = t, t = t.nextSibling, p.appendChild(m) - } else p = null, t = t.nextSibling; - if (g && v) { - if (l.setStart)l.setStart(c, d), l.setEnd(u, f), i.setRng(l); else try { - l = e.getDoc().body.createTextRange(), l.moveToElementText(s), l.collapse(!0), l.moveStart("character", d), f > 0 && l.moveEnd("character", f), l.select() - } catch (x) { - } - e.nodeChanged() - } - } - } - - var n = e.settings, r = e.dom, i = e.selection, o = e.schema, a = o.getBlockElements(); - n.forced_root_block && e.on("NodeChange", t) - } - }), r(P, [E, h, f], function (e, n, r) { - var i = r.each, o = r.extend, a = r.map, s = r.inArray, l = r.explode, c = n.gecko, d = n.ie, u = !0, f = !1; - return function (r) { - function p(e, t, n) { - var r; - return e = e.toLowerCase(), (r = N.exec[e]) ? (r(e, t, n), u) : f - } - - function m(e) { - var t; - return e = e.toLowerCase(), (t = N.state[e]) ? t(e) : -1 - } - - function h(e) { - var t; - return e = e.toLowerCase(), (t = N.value[e]) ? t(e) : f - } - - function g(e, t) { - t = t || "exec", i(e, function (e, n) { - i(n.toLowerCase().split(","), function (n) { - N[t][n] = e - }) - }) - } - - function v(e, n, i) { - return n === t && (n = f), i === t && (i = null), r.getDoc().execCommand(e, n, i) - } - - function y(e) { - return k.match(e) - } - - function b(e, n) { - k.toggle(e, n ? {value: n} : t), r.nodeChanged() - } - - function C(e) { - S = _.getBookmark(e) - } - - function x() { - _.moveToBookmark(S) - } - - var w = r.dom, _ = r.selection, N = {state: {}, exec: {}, value: {}}, E = r.settings, k = r.formatter, S; - o(this, {execCommand: p, queryCommandState: m, queryCommandValue: h, addCommands: g}), g({"mceResetDesignMode,mceBeginUndoLevel": function () { - }, "mceEndUndoLevel,mceAddUndoLevel": function () { - r.undoManager.add() - }, "Cut,Copy,Paste": function (e) { - var t = r.getDoc(), i; - try { - v(e) - } catch (o) { - i = u - } - if (i || !t.queryCommandSupported(e)) { - var a = r.translate("Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead."); - n.mac && (a = a.replace(/Ctrl\+/g, "\u2318+")), r.windowManager.alert(a) - } - }, unlink: function () { - if (_.isCollapsed()) { - var e = _.getNode(); - return void("A" == e.tagName && r.dom.remove(e, !0)) - } - k.remove("link") - }, "JustifyLeft,JustifyCenter,JustifyRight,JustifyFull": function (e) { - var t = e.substring(7); - "full" == t && (t = "justify"), i("left,center,right,justify".split(","), function (e) { - t != e && k.remove("align" + e) - }), b("align" + t), p("mceRepaint") - }, "InsertUnorderedList,InsertOrderedList": function (e) { - var t, n; - v(e), t = w.getParent(_.getNode(), "ol,ul"), t && (n = t.parentNode, /^(H[1-6]|P|ADDRESS|PRE)$/.test(n.nodeName) && (C(), w.split(n, t), x())) - }, "Bold,Italic,Underline,Strikethrough,Superscript,Subscript": function (e) { - b(e) - }, "ForeColor,HiliteColor,FontName": function (e, t, n) { - b(e, n) - }, FontSize: function (e, t, n) { - var r, i; - n >= 1 && 7 >= n && (i = l(E.font_size_style_values), r = l(E.font_size_classes), n = r ? r[n - 1] || n : i[n - 1] || n), b(e, n) - }, RemoveFormat: function (e) { - k.remove(e) - }, mceBlockQuote: function () { - b("blockquote") - }, FormatBlock: function (e, t, n) { - return b(n || "p") - }, mceCleanup: function () { - var e = _.getBookmark(); - r.setContent(r.getContent({cleanup: u}), {cleanup: u}), _.moveToBookmark(e) - }, mceRemoveNode: function (e, t, n) { - var i = n || _.getNode(); - i != r.getBody() && (C(), r.dom.remove(i, u), x()) - }, mceSelectNodeDepth: function (e, t, n) { - var i = 0; - w.getParent(_.getNode(), function (e) { - return 1 == e.nodeType && i++ == n ? (_.select(e), f) : void 0 - }, r.getBody()) - }, mceSelectNode: function (e, t, n) { - _.select(n) - }, mceInsertContent: function (t, n, i) { - function o(e) { - function t(e) { - return r[e] && 3 == r[e].nodeType - } - - var n, r, i; - return n = _.getRng(!0), r = n.startContainer, i = n.startOffset, 3 == r.nodeType && (i > 0 ? e = e.replace(/^ /, " ") : t("previousSibling") || (e = e.replace(/^ /, " ")), i < r.length ? e = e.replace(/ (
    |)$/, " ") : t("nextSibling") || (e = e.replace(/( | )(
    |)$/, " "))), e - } - - var a, s, l, c, u, f, p, m, h, g, v; - /^ | $/.test(i) && (i = o(i)), a = r.parser, s = new e({}, r.schema), v = 'ÈB;', f = {content: i, format: "html", selection: !0}, r.fire("BeforeSetContent", f), i = f.content, -1 == i.indexOf("{$caret}") && (i += "{$caret}"), i = i.replace(/\{\$caret\}/, v), m = _.getRng(); - var y = m.startContainer || (m.parentElement ? m.parentElement() : null), b = r.getBody(); - y === b && _.isCollapsed() && w.isBlock(b.firstChild) && w.isEmpty(b.firstChild) && (m = w.createRng(), m.setStart(b.firstChild, 0), m.setEnd(b.firstChild, 0), _.setRng(m)), _.isCollapsed() || r.getDoc().execCommand("Delete", !1, null), l = _.getNode(); - var C = {context: l.nodeName.toLowerCase()}; - if (u = a.parse(i, C), h = u.lastChild, "mce_marker" == h.attr("id"))for (p = h, h = h.prev; h; h = h.walk(!0))if (3 == h.type || !w.isBlock(h.name)) { - h.parent.insert(p, h, "br" === h.name); - break - } - if (C.invalid) { - for (_.setContent(v), l = _.getNode(), c = r.getBody(), 9 == l.nodeType ? l = h = c : h = l; h !== c;)l = h, h = h.parentNode; - i = l == c ? c.innerHTML : w.getOuterHTML(l), i = s.serialize(a.parse(i.replace(//i, function () { - return s.serialize(u) - }))), l == c ? w.setHTML(c, i) : w.setOuterHTML(l, i) - } else i = s.serialize(u), h = l.firstChild, g = l.lastChild, !h || h === g && "BR" === h.nodeName ? w.setHTML(l, i) : _.setContent(i); - p = w.get("mce_marker"), _.scrollIntoView(p), m = w.createRng(), h = p.previousSibling, h && 3 == h.nodeType ? (m.setStart(h, h.nodeValue.length), d || (g = p.nextSibling, g && 3 == g.nodeType && (h.appendData(g.data), g.parentNode.removeChild(g)))) : (m.setStartBefore(p), m.setEndBefore(p)), w.remove(p), _.setRng(m), r.fire("SetContent", f), r.addVisual() - }, mceInsertRawHTML: function (e, t, n) { - _.setContent("tiny_mce_marker"), r.setContent(r.getContent().replace(/tiny_mce_marker/g, function () { - return n - })) - }, mceToggleFormat: function (e, t, n) { - b(n) - }, mceSetContent: function (e, t, n) { - r.setContent(n) - }, "Indent,Outdent": function (e) { - var t, n, o; - t = E.indentation, n = /[a-z%]+$/i.exec(t), t = parseInt(t, 10), m("InsertUnorderedList") || m("InsertOrderedList") ? v(e) : (E.forced_root_block || w.getParent(_.getNode(), w.isBlock) || k.apply("div"), i(_.getSelectedBlocks(), function (i) { - if ("LI" != i.nodeName) { - var a = r.getParam("indent_use_margin", !1) ? "margin" : "padding"; - a += "rtl" == w.getStyle(i, "direction", !0) ? "Right" : "Left", "outdent" == e ? (o = Math.max(0, parseInt(i.style[a] || 0, 10) - t), w.setStyle(i, a, o ? o + n : "")) : (o = parseInt(i.style[a] || 0, 10) + t + n, w.setStyle(i, a, o)) - } - })) - }, mceRepaint: function () { - if (c)try { - C(u), _.getSel() && _.getSel().selectAllChildren(r.getBody()), _.collapse(u), x() - } catch (e) { - } - }, InsertHorizontalRule: function () { - r.execCommand("mceInsertContent", !1, "


    ") - }, mceToggleVisualAid: function () { - r.hasVisual = !r.hasVisual, r.addVisual() - }, mceReplaceContent: function (e, t, n) { - r.execCommand("mceInsertContent", !1, n.replace(/\{\$selection\}/g, _.getContent({format: "text"}))) - }, mceInsertLink: function (e, t, n) { - var r; - "string" == typeof n && (n = {href: n}), r = w.getParent(_.getNode(), "a"), n.href = n.href.replace(" ", "%20"), r && n.href || k.remove("link"), n.href && k.apply("link", n, r) - }, selectAll: function () { - var e = w.getRoot(), t; - _.getRng().setStart ? (t = w.createRng(), t.setStart(e, 0), t.setEnd(e, e.childNodes.length), _.setRng(t)) : (t = _.getRng(), t.item || (t.moveToElementText(e), t.select())) - }, "delete": function () { - v("Delete"); - var e = r.getBody(); - w.isEmpty(e) && (r.setContent(""), e.firstChild && w.isBlock(e.firstChild) ? r.selection.setCursorLocation(e.firstChild, 0) : r.selection.setCursorLocation(e, 0)) - }, mceNewDocument: function () { - r.setContent("") - }}), g({"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull": function (e) { - var t = "align" + e.substring(7), n = _.isCollapsed() ? [w.getParent(_.getNode(), w.isBlock)] : _.getSelectedBlocks(), r = a(n, function (e) { - return!!k.matchNode(e, t) - }); - return-1 !== s(r, u) - }, "Bold,Italic,Underline,Strikethrough,Superscript,Subscript": function (e) { - return y(e) - }, mceBlockQuote: function () { - return y("blockquote") - }, Outdent: function () { - var e; - if (E.inline_styles) { - if ((e = w.getParent(_.getStart(), w.isBlock)) && parseInt(e.style.paddingLeft, 10) > 0)return u; - if ((e = w.getParent(_.getEnd(), w.isBlock)) && parseInt(e.style.paddingLeft, 10) > 0)return u - } - return m("InsertUnorderedList") || m("InsertOrderedList") || !E.inline_styles && !!w.getParent(_.getNode(), "BLOCKQUOTE") - }, "InsertUnorderedList,InsertOrderedList": function (e) { - var t = w.getParent(_.getNode(), "ul,ol"); - return t && ("insertunorderedlist" === e && "UL" === t.tagName || "insertorderedlist" === e && "OL" === t.tagName) - }}, "state"), g({"FontSize,FontName": function (e) { - var t = 0, n; - return(n = w.getParent(_.getNode(), "span")) && (t = "fontsize" == e ? n.style.fontSize : n.style.fontFamily.replace(/, /g, ",").replace(/[\'\"]/g, "").toLowerCase()), t - }}, "value"), g({Undo: function () { - r.undoManager.undo() - }, Redo: function () { - r.undoManager.redo() - }}) - } - }), r(O, [f], function (e) { - function t(e, i) { - var o = this, a, s; - if (e = r(e), i = o.settings = i || {}, /^([\w\-]+):([^\/]{2})/i.test(e) || /^\s*#/.test(e))return void(o.source = e); - var l = 0 === e.indexOf("//"); - 0 !== e.indexOf("/") || l || (e = (i.base_uri ? i.base_uri.protocol || "http" : "http") + "://mce_host" + e), /^[\w\-]*:?\/\//.test(e) || (s = i.base_uri ? i.base_uri.path : new t(location.href).directory, e = "" === i.base_uri.protocol ? "//mce_host" + o.toAbsPath(s, e) : (i.base_uri && i.base_uri.protocol || "http") + "://mce_host" + o.toAbsPath(s, e)), e = e.replace(/@@/g, "(mce_at)"), e = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(e), n(["source", "protocol", "authority", "userInfo", "user", "password", "host", "port", "relative", "path", "directory", "file", "query", "anchor"], function (t, n) { - var r = e[n]; - r && (r = r.replace(/\(mce_at\)/g, "@@")), o[t] = r - }), a = i.base_uri, a && (o.protocol || (o.protocol = a.protocol), o.userInfo || (o.userInfo = a.userInfo), o.port || "mce_host" !== o.host || (o.port = a.port), o.host && "mce_host" !== o.host || (o.host = a.host), o.source = ""), l && (o.protocol = "") - } - - var n = e.each, r = e.trim; - return t.prototype = {setPath: function (e) { - var t = this; - e = /^(.*?)\/?(\w+)?$/.exec(e), t.path = e[0], t.directory = e[1], t.file = e[2], t.source = "", t.getURI() - }, toRelative: function (e) { - var n = this, r; - if ("./" === e)return e; - if (e = new t(e, {base_uri: n}), "mce_host" != e.host && n.host != e.host && e.host || n.port != e.port || n.protocol != e.protocol && "" !== e.protocol)return e.getURI(); - var i = n.getURI(), o = e.getURI(); - return i == o || "/" == i.charAt(i.length - 1) && i.substr(0, i.length - 1) == o ? i : (r = n.toRelPath(n.path, e.path), e.query && (r += "?" + e.query), e.anchor && (r += "#" + e.anchor), r) - }, toAbsolute: function (e, n) { - return e = new t(e, {base_uri: this}), e.getURI(this.host == e.host && this.protocol == e.protocol ? n : 0) - }, toRelPath: function (e, t) { - var n, r = 0, i = "", o, a; - if (e = e.substring(0, e.lastIndexOf("/")), e = e.split("/"), n = t.split("/"), e.length >= n.length)for (o = 0, a = e.length; a > o; o++)if (o >= n.length || e[o] != n[o]) { - r = o + 1; - break - } - if (e.length < n.length)for (o = 0, a = n.length; a > o; o++)if (o >= e.length || e[o] != n[o]) { - r = o + 1; - break - } - if (1 === r)return t; - for (o = 0, a = e.length - (r - 1); a > o; o++)i += "../"; - for (o = r - 1, a = n.length; a > o; o++)i += o != r - 1 ? "/" + n[o] : n[o]; - return i - }, toAbsPath: function (e, t) { - var r, i = 0, o = [], a, s; - for (a = /\/$/.test(t) ? "/" : "", e = e.split("/"), t = t.split("/"), n(e, function (e) { - e && o.push(e) - }), e = o, r = t.length - 1, o = []; r >= 0; r--)0 !== t[r].length && "." !== t[r] && (".." !== t[r] ? i > 0 ? i-- : o.push(t[r]) : i++); - return r = e.length - i, s = 0 >= r ? o.reverse().join("/") : e.slice(0, r).join("/") + "/" + o.reverse().join("/"), 0 !== s.indexOf("/") && (s = "/" + s), a && s.lastIndexOf("/") !== s.length - 1 && (s += a), s - }, getURI: function (e) { - var t, n = this; - return(!n.source || e) && (t = "", e || (t += n.protocol ? n.protocol + "://" : "//", n.userInfo && (t += n.userInfo + "@"), n.host && (t += n.host), n.port && (t += ":" + n.port)), n.path && (t += n.path), n.query && (t += "?" + n.query), n.anchor && (t += "#" + n.anchor), n.source = t), n.source - }}, t - }), r(I, [f], function (e) { - function t() { - } - - var n = e.each, r = e.extend, i, o; - return t.extend = i = function (e) { - function t() { - var e, t, n, r; - if (!o && (r = this, r.init && r.init.apply(r, arguments), t = r.Mixins))for (e = t.length; e--;)n = t[e], n.init && n.init.apply(r, arguments) - } - - function a() { - return this - } - - function s(e, t) { - return function () { - var n = this, r = n._super, i; - return n._super = c[e], i = t.apply(n, arguments), n._super = r, i - } - } - - var l = this, c = l.prototype, d, u, f; - o = !0, d = new l, o = !1, e.Mixins && (n(e.Mixins, function (t) { - t = t; - for (var n in t)"init" !== n && (e[n] = t[n]) - }), c.Mixins && (e.Mixins = c.Mixins.concat(e.Mixins))), e.Methods && n(e.Methods.split(","), function (t) { - e[t] = a - }), e.Properties && n(e.Properties.split(","), function (t) { - var n = "_" + t; - e[t] = function (e) { - var t = this, r; - return e !== r ? (t[n] = e, t) : t[n] - } - }), e.Statics && n(e.Statics, function (e, n) { - t[n] = e - }), e.Defaults && c.Defaults && (e.Defaults = r({}, c.Defaults, e.Defaults)); - for (u in e)f = e[u], d[u] = "function" == typeof f && c[u] ? s(u, f) : f; - return t.prototype = d, t.constructor = t, t.extend = i, t - }, t - }), r(z, [I], function (e) { - function t(e) { - for (var t = [], n = e.length, r; n--;)r = e[n], r.__checked || (t.push(r), r.__checked = 1); - for (n = t.length; n--;)delete t[n].__checked; - return t - } - - var n = /^([\w\\*]+)?(?:#([\w\\]+))?(?:\.([\w\\\.]+))?(?:\[\@?([\w\\]+)([\^\$\*!~]?=)([\w\\]+)\])?(?:\:(.+))?/i, r = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, i = /^\s*|\s*$/g, o, a = e.extend({init: function (e) { - function t(e) { - return e ? (e = e.toLowerCase(), function (t) { - return"*" === e || t.type === e - }) : void 0 - } - - function o(e) { - return e ? function (t) { - return t._name === e - } : void 0 - } - - function a(e) { - return e ? (e = e.split("."), function (t) { - for (var n = e.length; n--;)if (!t.hasClass(e[n]))return!1; - return!0 - }) : void 0 - } - - function s(e, t, n) { - return e ? function (r) { - var i = r[e] ? r[e]() : ""; - return t ? "=" === t ? i === n : "*=" === t ? i.indexOf(n) >= 0 : "~=" === t ? (" " + i + " ").indexOf(" " + n + " ") >= 0 : "!=" === t ? i != n : "^=" === t ? 0 === i.indexOf(n) : "$=" === t ? i.substr(i.length - n.length) === n : !1 : !!n - } : void 0 - } - - function l(e) { - var t; - return e ? (e = /(?:not\((.+)\))|(.+)/i.exec(e), e[1] ? (t = d(e[1], []), function (e) { - return!u(e, t) - }) : (e = e[2], function (t, n, r) { - return"first" === e ? 0 === n : "last" === e ? n === r - 1 : "even" === e ? n % 2 === 0 : "odd" === e ? n % 2 === 1 : t[e] ? t[e]() : !1 - })) : void 0 - } - - function c(e, r, c) { - function d(e) { - e && r.push(e) - } - - var u; - return u = n.exec(e.replace(i, "")), d(t(u[1])), d(o(u[2])), d(a(u[3])), d(s(u[4], u[5], u[6])), d(l(u[7])), r.psuedo = !!u[7], r.direct = c, r - } - - function d(e, t) { - var n = [], i, o, a; - do if (r.exec(""), o = r.exec(e), o && (e = o[3], n.push(o[1]), o[2])) { - i = o[3]; - break - } while (o); - for (i && d(i, t), e = [], a = 0; a < n.length; a++)">" != n[a] && e.push(c(n[a], [], ">" === n[a - 1])); - return t.push(e), t - } - - var u = this.match; - this._selectors = d(e, []) - }, match: function (e, t) { - var n, r, i, o, a, s, l, c, d, u, f, p, m; - for (t = t || this._selectors, n = 0, r = t.length; r > n; n++) { - for (a = t[n], o = a.length, m = e, p = 0, i = o - 1; i >= 0; i--)for (c = a[i]; m;) { - if (c.psuedo)for (f = m.parent().items(), d = u = f.length; d-- && f[d] !== m;); - for (s = 0, l = c.length; l > s; s++)if (!c[s](m, d, u)) { - s = l + 1; - break - } - if (s === l) { - p++; - break - } - if (i === o - 1)break; - m = m.parent() - } - if (p === o)return!0 - } - return!1 - }, find: function (e) { - function n(e, t, i) { - var o, a, s, l, c, d = t[i]; - for (o = 0, a = e.length; a > o; o++) { - for (c = e[o], s = 0, l = d.length; l > s; s++)if (!d[s](c, o, a)) { - s = l + 1; - break - } - if (s === l)i == t.length - 1 ? r.push(c) : c.items && n(c.items(), t, i + 1); else if (d.direct)return; - c.items && n(c.items(), t, i) - } - } - - var r = [], i, s, l = this._selectors; - if (e.items) { - for (i = 0, s = l.length; s > i; i++)n(e.items(), l[i], 0); - s > 1 && (r = t(r)) - } - return o || (o = a.Collection), new o(r) - }}); - return a - }), r(F, [f, z, I], function (e, t, n) { - var r, i, o = Array.prototype.push, a = Array.prototype.slice; - return i = {length: 0, init: function (e) { - e && this.add(e) - }, add: function (t) { - var n = this; - return e.isArray(t) ? o.apply(n, t) : t instanceof r ? n.add(t.toArray()) : o.call(n, t), n - }, set: function (e) { - var t = this, n = t.length, r; - for (t.length = 0, t.add(e), r = t.length; n > r; r++)delete t[r]; - return t - }, filter: function (e) { - var n = this, i, o, a = [], s, l; - for ("string" == typeof e ? (e = new t(e), l = function (t) { - return e.match(t) - }) : l = e, i = 0, o = n.length; o > i; i++)s = n[i], l(s) && a.push(s); - return new r(a) - }, slice: function () { - return new r(a.apply(this, arguments)) - }, eq: function (e) { - return-1 === e ? this.slice(e) : this.slice(e, +e + 1) - }, each: function (t) { - return e.each(this, t), this - }, toArray: function () { - return e.toArray(this) - }, indexOf: function (e) { - for (var t = this, n = t.length; n-- && t[n] !== e;); - return n - }, reverse: function () { - return new r(e.toArray(this).reverse()) - }, hasClass: function (e) { - return this[0] ? this[0].hasClass(e) : !1 - }, prop: function (e, t) { - var n = this, r, i; - return t !== r ? (n.each(function (n) { - n[e] && n[e](t) - }), n) : (i = n[0], i && i[e] ? i[e]() : void 0) - }, exec: function (t) { - var n = this, r = e.toArray(arguments).slice(1); - return n.each(function (e) { - e[t] && e[t].apply(e, r) - }), n - }, remove: function () { - for (var e = this.length; e--;)this[e].remove(); - return this - }}, e.each("fire on off show hide addClass removeClass append prepend before after reflow".split(" "), function (t) { - i[t] = function () { - var n = e.toArray(arguments); - return this.each(function (e) { - t in e && e[t].apply(e, n) - }), this - } - }), e.each("text name disabled active selected checked visible parent value data".split(" "), function (e) { - i[e] = function (t) { - return this.prop(e, t) - } - }), r = n.extend(i), t.Collection = r, r - }), r(W, [f, v], function (e, t) { - return{id: function () { - return t.DOM.uniqueId() - }, createFragment: function (e) { - return t.DOM.createFragment(e) - }, getWindowSize: function () { - return t.DOM.getViewPort() - }, getSize: function (e) { - var t, n; - if (e.getBoundingClientRect) { - var r = e.getBoundingClientRect(); - t = Math.max(r.width || r.right - r.left, e.offsetWidth), n = Math.max(r.height || r.bottom - r.bottom, e.offsetHeight) - } else t = e.offsetWidth, n = e.offsetHeight; - return{width: t, height: n} - }, getPos: function (e, n) { - return t.DOM.getPos(e, n) - }, getViewPort: function (e) { - return t.DOM.getViewPort(e) - }, get: function (e) { - return document.getElementById(e) - }, addClass: function (e, n) { - return t.DOM.addClass(e, n) - }, removeClass: function (e, n) { - return t.DOM.removeClass(e, n) - }, hasClass: function (e, n) { - return t.DOM.hasClass(e, n) - }, toggleClass: function (e, n, r) { - return t.DOM.toggleClass(e, n, r) - }, css: function (e, n, r) { - return t.DOM.setStyle(e, n, r) - }, on: function (e, n, r, i) { - return t.DOM.bind(e, n, r, i) - }, off: function (e, n, r) { - return t.DOM.unbind(e, n, r) - }, fire: function (e, n, r) { - return t.DOM.fire(e, n, r) - }, innerHtml: function (e, n) { - t.DOM.setHTML(e, n) - }} - }), r(V, [I, f, F, W], function (e, t, n, r) { - var i = t.makeMap("focusin focusout scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave wheel keydown keypress keyup contextmenu", " "), o = {}, a = "onmousewheel"in document, s = !1, l = e.extend({Statics: {elementIdCache: o}, isRtl: function () { - return l.rtl - }, classPrefix: "mce-", init: function (e) { - var n = this, i, o; - if (n.settings = e = t.extend({}, n.Defaults, e), n._id = r.id(), n._text = n._name = "", n._width = n._height = 0, n._aria = {role: e.role}, i = e.classes)for (i = i.split(" "), i.map = {}, o = i.length; o--;)i.map[i[o]] = !0; - n._classes = i || [], n.visible(!0), t.each("title text width height name classes visible disabled active value".split(" "), function (t) { - var r = e[t], i; - r !== i ? n[t](r) : n["_" + t] === i && (n["_" + t] = !1) - }), n.on("click", function () { - return n.disabled() ? !1 : void 0 - }), e.classes && t.each(e.classes.split(" "), function (e) { - n.addClass(e) - }), n.settings = e, n._borderBox = n.parseBox(e.border), n._paddingBox = n.parseBox(e.padding), n._marginBox = n.parseBox(e.margin), e.hidden && n.hide() - }, Properties: "parent,title,text,width,height,disabled,active,name,value", Methods: "renderHtml", getContainerElm: function () { - return document.body - }, getParentCtrl: function (e) { - for (var t, n = this.getRoot().controlIdLookup; e && n && !(t = n[e.id]);)e = e.parentNode; - return t - }, parseBox: function (e) { - var t, n = 10; - if (e)return"number" == typeof e ? (e = e || 0, {top: e, left: e, bottom: e, right: e}) : (e = e.split(" "), t = e.length, 1 === t ? e[1] = e[2] = e[3] = e[0] : 2 === t ? (e[2] = e[0], e[3] = e[1]) : 3 === t && (e[3] = e[1]), {top: parseInt(e[0], n) || 0, right: parseInt(e[1], n) || 0, bottom: parseInt(e[2], n) || 0, left: parseInt(e[3], n) || 0}) - }, borderBox: function () { - return this._borderBox - }, paddingBox: function () { - return this._paddingBox - }, marginBox: function () { - return this._marginBox - }, measureBox: function (e, t) { - function n(t) { - var n = document.defaultView; - return n ? (t = t.replace(/[A-Z]/g, function (e) { - return"-" + e - }), n.getComputedStyle(e, null).getPropertyValue(t)) : e.currentStyle[t] - } - - function r(e) { - var t = parseFloat(n(e), 10); - return isNaN(t) ? 0 : t - } - - return{top: r(t + "TopWidth"), right: r(t + "RightWidth"), bottom: r(t + "BottomWidth"), left: r(t + "LeftWidth")} - }, initLayoutRect: function () { - var e = this, t = e.settings, n, i, o = e.getEl(), a, s, l, c, d, u, f, p; - n = e._borderBox = e._borderBox || e.measureBox(o, "border"), e._paddingBox = e._paddingBox || e.measureBox(o, "padding"), e._marginBox = e._marginBox || e.measureBox(o, "margin"), p = r.getSize(o), u = t.minWidth, f = t.minHeight, l = u || p.width, c = f || p.height, a = t.width, s = t.height, d = t.autoResize, d = "undefined" != typeof d ? d : !a && !s, a = a || l, s = s || c; - var m = n.left + n.right, h = n.top + n.bottom, g = t.maxWidth || 65535, v = t.maxHeight || 65535; - return e._layoutRect = i = {x: t.x || 0, y: t.y || 0, w: a, h: s, deltaW: m, deltaH: h, contentW: a - m, contentH: s - h, innerW: a - m, innerH: s - h, startMinWidth: u || 0, startMinHeight: f || 0, minW: Math.min(l, g), minH: Math.min(c, v), maxW: g, maxH: v, autoResize: d, scrollW: 0}, e._lastLayoutRect = {}, i - }, layoutRect: function (e) { - var t = this, n = t._layoutRect, r, i, o, a, s, c; - return n || (n = t.initLayoutRect()), e ? (o = n.deltaW, a = n.deltaH, e.x !== s && (n.x = e.x), e.y !== s && (n.y = e.y), e.minW !== s && (n.minW = e.minW), e.minH !== s && (n.minH = e.minH), i = e.w, i !== s && (i = i < n.minW ? n.minW : i, i = i > n.maxW ? n.maxW : i, n.w = i, n.innerW = i - o), i = e.h, i !== s && (i = i < n.minH ? n.minH : i, i = i > n.maxH ? n.maxH : i, n.h = i, n.innerH = i - a), i = e.innerW, i !== s && (i = i < n.minW - o ? n.minW - o : i, i = i > n.maxW - o ? n.maxW - o : i, n.innerW = i, n.w = i + o), i = e.innerH, i !== s && (i = i < n.minH - a ? n.minH - a : i, i = i > n.maxH - a ? n.maxH - a : i, n.innerH = i, n.h = i + a), e.contentW !== s && (n.contentW = e.contentW), e.contentH !== s && (n.contentH = e.contentH), r = t._lastLayoutRect, (r.x !== n.x || r.y !== n.y || r.w !== n.w || r.h !== n.h) && (c = l.repaintControls, c && c.map && !c.map[t._id] && (c.push(t), c.map[t._id] = !0), r.x = n.x, r.y = n.y, r.w = n.w, r.h = n.h), t) : n - }, repaint: function () { - var e = this, t, n, r, i, o = 0, a = 0, s, l; - l = document.createRange ? function (e) { - return e - } : Math.round, t = e.getEl().style, r = e._layoutRect, s = e._lastRepaintRect || {}, i = e._borderBox, o = i.left + i.right, a = i.top + i.bottom, r.x !== s.x && (t.left = l(r.x) + "px", s.x = r.x), r.y !== s.y && (t.top = l(r.y) + "px", s.y = r.y), r.w !== s.w && (t.width = l(r.w - o) + "px", s.w = r.w), r.h !== s.h && (t.height = l(r.h - a) + "px", s.h = r.h), e._hasBody && r.innerW !== s.innerW && (n = e.getEl("body").style, n.width = l(r.innerW) + "px", s.innerW = r.innerW), e._hasBody && r.innerH !== s.innerH && (n = n || e.getEl("body").style, n.height = l(r.innerH) + "px", s.innerH = r.innerH), e._lastRepaintRect = s, e.fire("repaint", {}, !1) - }, on: function (e, t) { - function n(e) { - var t, n; - return function (i) { - return t || r.parents().each(function (r) { - var i = r.settings.callbacks; - return i && (t = i[e]) ? (n = r, !1) : void 0 - }), t.call(n, i) - } - } - - var r = this, o, a, s, l; - if (t)for ("string" == typeof t && (t = n(t)), s = e.toLowerCase().split(" "), l = s.length; l--;)e = s[l], o = r._bindings, o || (o = r._bindings = {}), a = o[e], a || (a = o[e] = []), a.push(t), i[e] && (r._nativeEvents ? r._nativeEvents[e] = !0 : r._nativeEvents = {name: !0}, r._rendered && r.bindPendingEvents()); - return r - }, off: function (e, t) { - var n = this, r, i = n._bindings, o, a, s, l; - if (i)if (e)for (s = e.toLowerCase().split(" "), r = s.length; r--;) { - if (e = s[r], o = i[e], !e) { - for (a in i)i[a].length = 0; - return n - } - if (o)if (t)for (l = o.length; l--;)o[l] === t && o.splice(l, 1); else o.length = 0 - } else n._bindings = []; - return n - }, fire: function (e, t, n) { - function r() { - return!1 - } - - function i() { - return!0 - } - - var o = this, a, s, l, c; - if (e = e.toLowerCase(), t = t || {}, t.type || (t.type = e), t.control || (t.control = o), t.preventDefault || (t.preventDefault = function () { - t.isDefaultPrevented = i - }, t.stopPropagation = function () { - t.isPropagationStopped = i - }, t.stopImmediatePropagation = function () { - t.isImmediatePropagationStopped = i - }, t.isDefaultPrevented = r, t.isPropagationStopped = r, t.isImmediatePropagationStopped = r), o._bindings && (l = o._bindings[e]))for (a = 0, s = l.length; s > a && (t.isImmediatePropagationStopped() || l[a].call(o, t) !== !1); a++); - if (n !== !1)for (c = o.parent(); c && !t.isPropagationStopped();)c.fire(e, t, !1), c = c.parent(); - return t - }, hasEventListeners: function (e) { - return e in this._bindings - }, parents: function (e) { - var t = this, r = new n; - for (t = t.parent(); t; t = t.parent())r.add(t); - return e && (r = r.filter(e)), r - }, next: function () { - var e = this.parent().items(); - return e[e.indexOf(this) + 1] - }, prev: function () { - var e = this.parent().items(); - return e[e.indexOf(this) - 1] - }, findCommonAncestor: function (e, t) { - for (var n; e;) { - for (n = t; n && e != n;)n = n.parent(); - if (e == n)break; - e = e.parent() - } - return e - }, hasClass: function (e, t) { - var n = this._classes[t || "control"]; - return e = this.classPrefix + e, n && !!n.map[e] - }, addClass: function (e, t) { - var n = this, r, i; - return e = this.classPrefix + e, r = n._classes[t || "control"], r || (r = [], r.map = {}, n._classes[t || "control"] = r), r.map[e] || (r.map[e] = e, r.push(e), n._rendered && (i = n.getEl(t), i && (i.className = r.join(" ")))), n - }, removeClass: function (e, t) { - var n = this, r, i, o; - if (e = this.classPrefix + e, r = n._classes[t || "control"], r && r.map[e])for (delete r.map[e], i = r.length; i--;)r[i] === e && r.splice(i, 1); - return n._rendered && (o = n.getEl(t), o && (o.className = r.join(" "))), n - }, toggleClass: function (e, t, n) { - var r = this; - return t ? r.addClass(e, n) : r.removeClass(e, n), r - }, classes: function (e) { - var t = this._classes[e || "control"]; - return t ? t.join(" ") : "" - }, innerHtml: function (e) { - return r.innerHtml(this.getEl(), e), this - }, getEl: function (e, t) { - var n, i = e ? this._id + "-" + e : this._id; - return n = o[i] = (t === !0 ? null : o[i]) || r.get(i) - }, visible: function (e) { - var t = this, n; - return"undefined" != typeof e ? (t._visible !== e && (t._rendered && (t.getEl().style.display = e ? "" : "none"), t._visible = e, n = t.parent(), n && (n._lastRect = null), t.fire(e ? "show" : "hide")), t) : t._visible - }, show: function () { - return this.visible(!0) - }, hide: function () { - return this.visible(!1) - }, focus: function () { - try { - this.getEl().focus() - } catch (e) { - } - return this - }, blur: function () { - return this.getEl().blur(), this - }, aria: function (e, t) { - var n = this, r = n.getEl(); - return"undefined" == typeof t ? n._aria[e] : (n._aria[e] = t, n._rendered && ("label" == e && r.setAttribute("aria-labelledby", n._id), r.setAttribute("role" == e ? e : "aria-" + e, t)), n) - }, encode: function (e, t) { - return t !== !1 && l.translate && (e = l.translate(e)), (e || "").replace(/[&<>"]/g, function (e) { - return"&#" + e.charCodeAt(0) + ";" - }) - }, before: function (e) { - var t = this, n = t.parent(); - return n && n.insert(e, n.items().indexOf(t), !0), t - }, after: function (e) { - var t = this, n = t.parent(); - return n && n.insert(e, n.items().indexOf(t)), t - }, remove: function () { - var e = this, t = e.getEl(), n = e.parent(), i, a; - if (e.items) { - var s = e.items().toArray(); - for (a = s.length; a--;)s[a].remove() - } - n && n.items && (i = [], n.items().each(function (t) { - t !== e && i.push(t) - }), n.items().set(i), n._lastRect = null), e._eventsRoot && e._eventsRoot == e && r.off(t); - var l = e.getRoot().controlIdLookup; - if (l && delete l[e._id], delete o[e._id], t && t.parentNode) { - var c = t.getElementsByTagName("*"); - for (a = c.length; a--;)delete o[c[a].id]; - t.parentNode.removeChild(t) - } - return e._rendered = !1, e - }, renderBefore: function (e) { - var t = this; - return e.parentNode.insertBefore(r.createFragment(t.renderHtml()), e), t.postRender(), t - }, renderTo: function (e) { - var t = this; - return e = e || t.getContainerElm(), e.appendChild(r.createFragment(t.renderHtml())), t.postRender(), t - }, postRender: function () { - var e = this, t = e.settings, n, i, o, a, s; - for (a in t)0 === a.indexOf("on") && e.on(a.substr(2), t[a]); - if (e._eventsRoot) { - for (o = e.parent(); !s && o; o = o.parent())s = o._eventsRoot; - if (s)for (a in s._nativeEvents)e._nativeEvents[a] = !0 - } - e.bindPendingEvents(), t.style && (n = e.getEl(), n && (n.setAttribute("style", t.style), n.style.cssText = t.style)), e._visible || r.css(e.getEl(), "display", "none"), e.settings.border && (i = e.borderBox(), r.css(e.getEl(), {"border-top-width": i.top, "border-right-width": i.right, "border-bottom-width": i.bottom, "border-left-width": i.left})); - var l = e.getRoot(); - l.controlIdLookup || (l.controlIdLookup = {}), l.controlIdLookup[e._id] = e; - for (var c in e._aria)e.aria(c, e._aria[c]); - e.fire("postrender", {}, !1) - }, scrollIntoView: function (e) { - function t(e, t) { - var n, r, i = e; - for (n = r = 0; i && i != t && i.nodeType;)n += i.offsetLeft || 0, r += i.offsetTop || 0, i = i.offsetParent; - return{x: n, y: r} - } - - var n = this.getEl(), r = n.parentNode, i, o, a, s, l, c, d = t(n, r); - return i = d.x, o = d.y, a = n.offsetWidth, s = n.offsetHeight, l = r.clientWidth, c = r.clientHeight, "end" == e ? (i -= l - a, o -= c - s) : "center" == e && (i -= l / 2 - a / 2, o -= c / 2 - s / 2), r.scrollLeft = i, r.scrollTop = o, this - }, bindPendingEvents: function () { - function e(e) { - var t = o.getParentCtrl(e.target); - t && t.fire(e.type, e) - } - - function t() { - var e = u._lastHoverCtrl; - e && (e.fire("mouseleave", {target: e.getEl()}), e.parents().each(function (e) { - e.fire("mouseleave", {target: e.getEl()}) - }), u._lastHoverCtrl = null) - } - - function n(e) { - var t = o.getParentCtrl(e.target), n = u._lastHoverCtrl, r = 0, i, a, s; - if (t !== n) { - if (u._lastHoverCtrl = t, a = t.parents().toArray().reverse(), a.push(t), n) { - for (s = n.parents().toArray().reverse(), s.push(n), r = 0; r < s.length && a[r] === s[r]; r++); - for (i = s.length - 1; i >= r; i--)n = s[i], n.fire("mouseleave", {target: n.getEl()}) - } - for (i = r; i < a.length; i++)t = a[i], t.fire("mouseenter", {target: t.getEl()}) - } - } - - function i(e) { - e.preventDefault(), "mousewheel" == e.type ? (e.deltaY = -1 / 40 * e.wheelDelta, e.wheelDeltaX && (e.deltaX = -1 / 40 * e.wheelDeltaX)) : (e.deltaX = 0, e.deltaY = e.detail), e = o.fire("wheel", e) - } - - var o = this, l, c, d, u, f, p; - if (o._rendered = !0, f = o._nativeEvents) { - for (d = o.parents().toArray(), d.unshift(o), l = 0, c = d.length; !u && c > l; l++)u = d[l]._eventsRoot; - for (u || (u = d[d.length - 1] || o), o._eventsRoot = u, c = l, l = 0; c > l; l++)d[l]._eventsRoot = u; - for (p in f) { - if (!f)return!1; - "wheel" !== p || s ? ("mouseenter" === p || "mouseleave" === p ? u._hasMouseEnter || (r.on(u.getEl(), "mouseleave", t), r.on(u.getEl(), "mouseover", n), u._hasMouseEnter = 1) : u[p] || (r.on(u.getEl(), p, e), u[p] = !0), f[p] = !1) : a ? r.on(o.getEl(), "mousewheel", i) : r.on(o.getEl(), "DOMMouseScroll", i) - } - } - }, getRoot: function () { - for (var e = this, t, n = []; e;) { - if (e.rootControl) { - t = e.rootControl; - break - } - n.push(e), t = e, e = e.parent() - } - t || (t = this); - for (var r = n.length; r--;)n[r].rootControl = t; - return t - }, reflow: function () { - return this.repaint(), this - }}); - return l - }), r(U, [], function () { - var e = {}, t; - return{add: function (t, n) { - e[t.toLowerCase()] = n - }, has: function (t) { - return!!e[t.toLowerCase()] - }, create: function (n, r) { - var i, o, a; - if (!t) { - a = tinymce.ui; - for (o in a)e[o.toLowerCase()] = a[o]; - t = !0 - } - if ("string" == typeof n ? (r = r || {}, r.type = n) : (r = n, n = r.type), n = n.toLowerCase(), i = e[n], !i)throw new Error("Could not find control by type: " + n); - return i = new i(r), i.type = n, i - }} - }), r(q, [V, F, z, U, f, W], function (e, t, n, r, i, o) { - var a = {}; - return e.extend({layout: "", innerClass: "container-inner", init: function (e) { - var n = this; - n._super(e), e = n.settings, n._fixed = e.fixed, n._items = new t, n.isRtl() && n.addClass("rtl"), n.addClass("container"), n.addClass("container-body", "body"), e.containerCls && n.addClass(e.containerCls), n._layout = r.create((e.layout || n.layout) + "layout"), n.settings.items && n.add(n.settings.items), n._hasBody = !0 - }, items: function () { - return this._items - }, find: function (e) { - return e = a[e] = a[e] || new n(e), e.find(this) - }, add: function (e) { - var t = this; - return t.items().add(t.create(e)).parent(t), t - }, focus: function () { - var e = this; - return e.keyNav ? e.keyNav.focusFirst() : e._super(), e - }, replace: function (e, t) { - for (var n, r = this.items(), i = r.length; i--;)if (r[i] === e) { - r[i] = t; - break - } - i >= 0 && (n = t.getEl(), n && n.parentNode.removeChild(n), n = e.getEl(), n && n.parentNode.removeChild(n)), t.parent(this) - }, create: function (t) { - var n = this, o, a = []; - return i.isArray(t) || (t = [t]), i.each(t, function (t) { - t && (t instanceof e || ("string" == typeof t && (t = {type: t}), o = i.extend({}, n.settings.defaults, t), t.type = o.type = o.type || t.type || n.settings.defaultType || (o.defaults ? o.defaults.type : null), t = r.create(o)), a.push(t)) - }), a - }, renderNew: function () { - var e = this; - return e.items().each(function (t, n) { - var r, i; - t.parent(e), t._rendered || (r = e.getEl("body"), i = o.createFragment(t.renderHtml()), r.hasChildNodes() && n <= r.childNodes.length - 1 ? r.insertBefore(i, r.childNodes[n]) : r.appendChild(i), t.postRender()) - }), e._layout.applyClasses(e), e._lastRect = null, e - }, append: function (e) { - return this.add(e).renderNew() - }, prepend: function (e) { - var t = this; - return t.items().set(t.create(e).concat(t.items().toArray())), t.renderNew() - }, insert: function (e, t, n) { - var r = this, i, o, a; - return e = r.create(e), i = r.items(), !n && t < i.length - 1 && (t += 1), t >= 0 && t < i.length && (o = i.slice(0, t).toArray(), a = i.slice(t).toArray(), i.set(o.concat(e, a))), r.renderNew() - }, fromJSON: function (e) { - var t = this; - for (var n in e)t.find("#" + n).value(e[n]); - return t - }, toJSON: function () { - var e = this, t = {}; - return e.find("*").each(function (e) { - var n = e.name(), r = e.value(); - n && "undefined" != typeof r && (t[n] = r) - }), t - }, preRender: function () { - }, renderHtml: function () { - var e = this, t = e._layout, n = this.settings.role; - return e.preRender(), t.preRender(e), '
    ' + (e.settings.html || "") + t.renderHtml(e) + "
    " - }, postRender: function () { - var e = this, t; - return e.items().exec("postRender"), e._super(), e._layout.postRender(e), e._rendered = !0, e.settings.style && o.css(e.getEl(), e.settings.style), e.settings.border && (t = e.borderBox(), o.css(e.getEl(), {"border-top-width": t.top, "border-right-width": t.right, "border-bottom-width": t.bottom, "border-left-width": t.left})), e - }, initLayoutRect: function () { - var e = this, t = e._super(); - return e._layout.recalc(e), t - }, recalc: function () { - var e = this, t = e._layoutRect, n = e._lastRect; - return n && n.w == t.w && n.h == t.h ? void 0 : (e._layout.recalc(e), t = e.layoutRect(), e._lastRect = {x: t.x, y: t.y, w: t.w, h: t.h}, !0) - }, reflow: function () { - var t, n; - if (this.visible()) { - for (e.repaintControls = [], e.repaintControls.map = {}, n = this.recalc(), t = e.repaintControls.length; t--;)e.repaintControls[t].repaint(); - "flow" !== this.settings.layout && "stack" !== this.settings.layout && this.repaint(), e.repaintControls = [] - } - return this - }}) - }), r(j, [W], function (e) { - function t() { - var e = document, t, n, r, i, o, a, s, l, c = Math.max; - return t = e.documentElement, n = e.body, r = c(t.scrollWidth, n.scrollWidth), i = c(t.clientWidth, n.clientWidth), o = c(t.offsetWidth, n.offsetWidth), a = c(t.scrollHeight, n.scrollHeight), s = c(t.clientHeight, n.clientHeight), l = c(t.offsetHeight, n.offsetHeight), {width: o > r ? i : r, height: l > a ? s : a} - } - - return function (n, r) { - function i() { - return a.getElementById(r.handle || n) - } - - var o, a = document, s, l, c, d, u, f; - r = r || {}, l = function (n) { - var l = t(), p, m; - n.preventDefault(), s = n.button, p = i(), u = n.screenX, f = n.screenY, m = window.getComputedStyle ? window.getComputedStyle(p, null).getPropertyValue("cursor") : p.runtimeStyle.cursor, o = a.createElement("div"), e.css(o, {position: "absolute", top: 0, left: 0, width: l.width, height: l.height, zIndex: 2147483647, opacity: 1e-4, background: "red", cursor: m}), a.body.appendChild(o), e.on(a, "mousemove", d), e.on(a, "mouseup", c), r.start(n) - }, d = function (e) { - return e.button !== s ? c(e) : (e.deltaX = e.screenX - u, e.deltaY = e.screenY - f, e.preventDefault(), void r.drag(e)) - }, c = function (t) { - e.off(a, "mousemove", d), e.off(a, "mouseup", c), o.parentNode.removeChild(o), r.stop && r.stop(t) - }, this.destroy = function () { - e.off(i()) - }, e.on(i(), "mousedown", l) - } - }), r($, [W, j], function (e, t) { - return{init: function () { - var e = this; - e.on("repaint", e.renderScroll) - }, renderScroll: function () { - function n() { - function t(t, a, s, l, c, d) { - var u, f, p, m, h, g, v, y, b; - if (f = i.getEl("scroll" + t)) { - if (y = a.toLowerCase(), b = s.toLowerCase(), i.getEl("absend") && e.css(i.getEl("absend"), y, i.layoutRect()[l] - 1), !c)return void e.css(f, "display", "none"); - e.css(f, "display", "block"), u = i.getEl("body"), p = i.getEl("scroll" + t + "t"), m = u["client" + s] - 2 * o, m -= n && r ? f["client" + d] : 0, h = u["scroll" + s], g = m / h, v = {}, v[y] = u["offset" + a] + o, v[b] = m, e.css(f, v), v = {}, v[y] = u["scroll" + a] * g, v[b] = m * g, e.css(p, v) - } - } - - var n, r, a; - a = i.getEl("body"), n = a.scrollWidth > a.clientWidth, r = a.scrollHeight > a.clientHeight, t("h", "Left", "Width", "contentW", n, "Height"), t("v", "Top", "Height", "contentH", r, "Width") - } - - function r() { - function n(n, r, a, s, l) { - var c, d = i._id + "-scroll" + n, u = i.classPrefix; - i.getEl().appendChild(e.createFragment('
    ')), i.draghelper = new t(d + "t", {start: function () { - c = i.getEl("body")["scroll" + r], e.addClass(e.get(d), u + "active") - }, drag: function (e) { - var t, d, u, f, p = i.layoutRect(); - d = p.contentW > p.innerW, u = p.contentH > p.innerH, f = i.getEl("body")["client" + a] - 2 * o, f -= d && u ? i.getEl("scroll" + n)["client" + l] : 0, t = f / i.getEl("body")["scroll" + a], i.getEl("body")["scroll" + r] = c + e["delta" + s] / t - }, stop: function () { - e.removeClass(e.get(d), u + "active") - }}) - } - - i.addClass("scroll"), n("v", "Top", "Height", "Y", "Width"), n("h", "Left", "Width", "X", "Height") - } - - var i = this, o = 2; - i.settings.autoScroll && (i._hasScroll || (i._hasScroll = !0, r(), i.on("wheel", function (e) { - var t = i.getEl("body"); - t.scrollLeft += 10 * (e.deltaX || 0), t.scrollTop += 10 * e.deltaY, n() - }), e.on(i.getEl("body"), "scroll", n)), n()) - }} - }), r(K, [q, $], function (e, t) { - return e.extend({Defaults: {layout: "fit", containerCls: "panel"}, Mixins: [t], renderHtml: function () { - var e = this, t = e._layout, n = e.settings.html; - return e.preRender(), t.preRender(e), "undefined" == typeof n ? n = '
    ' + t.renderHtml(e) + "
    " : ("function" == typeof n && (n = n.call(e)), e._hasBody = !1), '
    ' + (e._preBodyHtml || "") + n + "
    " - }}) - }), r(Y, [W], function (e) { - function t(t, n, r) { - var i, o, a, s, l, c, d, u, f, p; - return f = e.getViewPort(), o = e.getPos(n), a = o.x, s = o.y, t._fixed && (a -= f.x, s -= f.y), i = t.getEl(), p = e.getSize(i), l = p.width, c = p.height, p = e.getSize(n), d = p.width, u = p.height, r = (r || "").split(""), "b" === r[0] && (s += u), "r" === r[1] && (a += d), "c" === r[0] && (s += Math.round(u / 2)), "c" === r[1] && (a += Math.round(d / 2)), "b" === r[3] && (s -= c), "r" === r[4] && (a -= l), "c" === r[3] && (s -= Math.round(c / 2)), "c" === r[4] && (a -= Math.round(l / 2)), {x: a, y: s, w: l, h: c} - } - - return{testMoveRel: function (n, r) { - for (var i = e.getViewPort(), o = 0; o < r.length; o++) { - var a = t(this, n, r[o]); - if (this._fixed) { - if (a.x > 0 && a.x + a.w < i.w && a.y > 0 && a.y + a.h < i.h)return r[o] - } else if (a.x > i.x && a.x + a.w < i.w + i.x && a.y > i.y && a.y + a.h < i.h + i.y)return r[o] - } - return r[0] - }, moveRel: function (e, n) { - "string" != typeof n && (n = this.testMoveRel(e, n)); - var r = t(this, e, n); - return this.moveTo(r.x, r.y) - }, moveBy: function (e, t) { - var n = this, r = n.layoutRect(); - return n.moveTo(r.x + e, r.y + t), n - }, moveTo: function (t, n) { - function r(e, t, n) { - return 0 > e ? 0 : e + n > t ? (e = t - n, 0 > e ? 0 : e) : e - } - - var i = this; - if (i.settings.constrainToViewport) { - var o = e.getViewPort(window), a = i.layoutRect(); - t = r(t, o.w + o.x, a.w), n = r(n, o.h + o.y, a.h) - } - return i._rendered ? i.layoutRect({x: t, y: n}).repaint() : (i.settings.x = t, i.settings.y = n), i.fire("move", {x: t, y: n}), i - }} - }), r(G, [W], function (e) { - return{resizeToContent: function () { - this._layoutRect.autoResize = !0, this._lastRect = null, this.reflow() - }, resizeTo: function (t, n) { - if (1 >= t || 1 >= n) { - var r = e.getWindowSize(); - t = 1 >= t ? t * r.w : t, n = 1 >= n ? n * r.h : n - } - return this._layoutRect.autoResize = !1, this.layoutRect({minW: t, minH: n, w: t, h: n}).reflow() - }, resizeBy: function (e, t) { - var n = this, r = n.layoutRect(); - return n.resizeTo(r.w + e, r.h + t) - }} - }), r(X, [K, Y, G, W], function (e, t, n, r) { - function i(e) { - var t; - for (t = s.length; t--;)s[t] === e && s.splice(t, 1); - for (t = l.length; t--;)l[t] === e && l.splice(t, 1) - } - - var o, a, s = [], l = [], c, d = e.extend({Mixins: [t, n], init: function (e) { - function t() { - var e, t = d.zIndex || 65535, n; - if (l.length)for (e = 0; e < l.length; e++)l[e].modal && (t++, n = l[e]), l[e].getEl().style.zIndex = t, l[e].zIndex = t, t++; - var i = document.getElementById(u.classPrefix + "modal-block"); - n ? r.css(i, "z-index", n.zIndex - 1) : i && (i.parentNode.removeChild(i), c = !1), d.currentZIndex = t - } - - function n(e, t) { - for (; e;) { - if (e == t)return!0; - e = e.parent() - } - } - - function i(e) { - function t(t, n) { - for (var r, i = 0; i < s.length; i++)if (s[i] != e)for (r = s[i].parent(); r && (r = r.parent());)r == e && s[i].fixed(t).moveBy(0, n).repaint() - } - - var n = r.getViewPort().y; - e.settings.autofix && (e._fixed ? e._autoFixY > n && (e.fixed(!1).layoutRect({y: e._autoFixY}).repaint(), t(!1, e._autoFixY - n)) : (e._autoFixY = e.layoutRect().y, e._autoFixY < n && (e.fixed(!0).layoutRect({y: 0}).repaint(), t(!0, n - e._autoFixY)))) - } - - var u = this; - u._super(e), u._eventsRoot = u, u.addClass("floatpanel"), e.autohide && (o || (o = function (e) { - for (var t = s.length; t--;) { - var r = s[t], i = r.getParentCtrl(e.target); - if (r.settings.autohide) { - if (i && (n(i, r) || r.parent() === i))continue; - e = r.fire("autohide", {target: e.target}), e.isDefaultPrevented() || r.hide() - } - } - }, r.on(document, "click", o)), s.push(u)), e.autofix && (a || (a = function () { - var e; - for (e = s.length; e--;)i(s[e]) - }, r.on(window, "scroll", a)), u.on("move", function () { - i(this) - })), u.on("postrender show", function (e) { - if (e.control == u) { - var n, i = u.classPrefix; - u.modal && !c && (n = r.createFragment('
    '), n = n.firstChild, u.getContainerElm().appendChild(n), setTimeout(function () { - r.addClass(n, i + "in"), r.addClass(u.getEl(), i + "in") - }, 0), c = !0), l.push(u), t() - } - }), u.on("close hide", function (e) { - if (e.control == u) { - for (var n = l.length; n--;)l[n] === u && l.splice(n, 1); - t() - } - }), u.on("show", function () { - u.parents().each(function (e) { - return e._fixed ? (u.fixed(!0), !1) : void 0 - }) - }), e.popover && (u._preBodyHtml = '
    ', u.addClass("popover").addClass("bottom").addClass(u.isRtl() ? "end" : "start")) - }, fixed: function (e) { - var t = this; - if (t._fixed != e) { - if (t._rendered) { - var n = r.getViewPort(); - e ? t.layoutRect().y -= n.y : t.layoutRect().y += n.y - } - t.toggleClass("fixed", e), t._fixed = e - } - return t - }, show: function () { - var e = this, t, n = e._super(); - for (t = s.length; t-- && s[t] !== e;); - return-1 === t && s.push(e), n - }, hide: function () { - return i(this), this._super() - }, hideAll: function () { - d.hideAll() - }, close: function () { - var e = this; - return e.fire("close"), e.remove() - }, remove: function () { - i(this), this._super() - }}); - return d.hideAll = function () { - for (var e = s.length; e--;) { - var t = s[e]; - t.settings.autohide && (t.fire("cancel", {}, !1), t.hide(), s.splice(e, 1)) - } - }, d - }), r(J, [W], function (e) { - return function (t) { - function n() { - if (!m)if (m = [], u.find)u.find("*").each(function (e) { - e.canFocus && m.push(e.getEl()) - }); else for (var e = u.getEl().getElementsByTagName("*"), t = 0; t < e.length; t++)e[t].id && e[t] && m.push(e[t]) - } - - function r() { - return document.getElementById(h) - } - - function i(e) { - return e = e || r(), e && e.getAttribute("role") - } - - function o(e) { - for (var t, n = e || r(); n = n.parentNode;)if (t = i(n))return t - } - - function a(e) { - var t = document.getElementById(h); - return t ? t.getAttribute("aria-" + e) : void 0 - } - - function s() { - var n = r(); - if (!n || "TEXTAREA" != n.nodeName && "text" != n.type)return t.onAction ? t.onAction(h) : e.fire(r(), "click", {keyboard: !0}), !0 - } - - function l() { - var e; - t.onCancel ? ((e = r()) && e.blur(), t.onCancel()) : t.root.fire("cancel") - } - - function c(e) { - function r(e) { - for (var t = u ? u.getEl() : document.body; e && e != t;) { - if ("none" == e.style.display)return!1; - e = e.parentNode - } - return!0 - } - - var i = -1, o, a, l = []; - for (n(), a = l.length, a = 0; a < m.length; a++)r(m[a]) && l.push(m[a]); - for (a = l.length; a--;)if (l[a].id === h) { - i = a; - break - } - i += e, 0 > i ? i = l.length - 1 : i >= l.length && (i = 0), o = l[i], o.focus(), h = o.id, t.actOnFocus && s() - } - - function d() { - var e, r; - for (r = i(t.root.getEl()), n(), e = m.length; e--;)if ("toolbar" == r && m[e].id === h)return void m[e].focus(); - m[0].focus() - } - - var u = t.root, f = t.enableUpDown !== !1, p = t.enableLeftRight !== !1, m = t.items, h; - return u.on("keydown", function (e) { - var n = 37, r = 39, d = 38, u = 40, m = 27, h = 14, g = 13, v = 32, y = 9, b; - switch (e.keyCode) { - case n: - p && (t.leftAction ? t.leftAction() : c(-1), b = !0); - break; - case r: - p && ("menuitem" == i() && "menu" == o() ? a("haspopup") && s() : c(1), b = !0); - break; - case d: - f && (c(-1), b = !0); - break; - case u: - f && ("menuitem" == i() && "menubar" == o() ? s() : "button" == i() && a("haspopup") ? s() : c(1), b = !0); - break; - case y: - b = !0, c(e.shiftKey ? -1 : 1); - break; - case m: - b = !0, l(); - break; - case h: - case g: - case v: - b = s() - } - b && (e.stopPropagation(), e.preventDefault()) - }), u.on("focusin", function (e) { - n(), h = e.target.id - }), {moveFocus: c, focusFirst: d, cancel: l} - } - }), r(Q, [X, K, W, J, j], function (e, t, n, r, i) { - var o = e.extend({modal: !0, Defaults: {border: 1, layout: "flex", containerCls: "panel", role: "dialog", callbacks: {submit: function () { - this.fire("submit", {data: this.toJSON()}) - }, close: function () { - this.close() - }}}, init: function (e) { - var n = this; - n._super(e), n.isRtl() && n.addClass("rtl"), n.addClass("window"), n._fixed = !0, e.buttons && (n.statusbar = new t({layout: "flex", border: "1 0 0 0", spacing: 3, padding: 10, align: "center", pack: n.isRtl() ? "start" : "end", defaults: {type: "button"}, items: e.buttons}), n.statusbar.addClass("foot"), n.statusbar.parent(n)), n.on("click", function (e) { - -1 != e.target.className.indexOf(n.classPrefix + "close") && n.close() - }), n.aria("label", e.title), n._fullscreen = !1 - }, recalc: function () { - var e = this, t = e.statusbar, r, i, o, a; - e._fullscreen && (e.layoutRect(n.getWindowSize()), e.layoutRect().contentH = e.layoutRect().innerH), e._super(), r = e.layoutRect(), e.settings.title && !e._fullscreen && (i = r.headerW, i > r.w && (o = r.x - Math.max(0, i / 2), e.layoutRect({w: i, x: o}), a = !0)), t && (t.layoutRect({w: e.layoutRect().innerW}).recalc(), i = t.layoutRect().minW + r.deltaW, i > r.w && (o = r.x - Math.max(0, i - r.w), e.layoutRect({w: i, x: o}), a = !0)), a && e.recalc() - }, initLayoutRect: function () { - var e = this, t = e._super(), r = 0, i; - if (e.settings.title && !e._fullscreen) { - i = e.getEl("head"); - var o = n.getSize(i); - t.headerW = o.width, t.headerH = o.height, r += t.headerH - } - e.statusbar && (r += e.statusbar.layoutRect().h), t.deltaH += r, t.minH += r, t.h += r; - var a = n.getWindowSize(); - return t.x = Math.max(0, a.w / 2 - t.w / 2), t.y = Math.max(0, a.h / 2 - t.h / 2), t - }, renderHtml: function () { - var e = this, t = e._layout, n = e._id, r = e.classPrefix, i = e.settings, o = "", a = "", s = i.html; - return e.preRender(), t.preRender(e), i.title && (o = '
    ' + e.encode(i.title) + '
    '), i.url && (s = ''), "undefined" == typeof s && (s = t.renderHtml(e)), e.statusbar && (a = e.statusbar.renderHtml()), '
    ' + o + '
    ' + s + "
    " + a + "
    " - }, fullscreen: function (e) { - var t = this, r = document.documentElement, i, o = t.classPrefix, a; - if (e != t._fullscreen)if (n.on(window, "resize", function () { - var e; - if (t._fullscreen)if (i)t._timer || (t._timer = setTimeout(function () { - var e = n.getWindowSize(); - t.moveTo(0, 0).resizeTo(e.w, e.h), t._timer = 0 - }, 50)); else { - e = (new Date).getTime(); - var r = n.getWindowSize(); - t.moveTo(0, 0).resizeTo(r.w, r.h), (new Date).getTime() - e > 50 && (i = !0) - } - }), a = t.layoutRect(), t._fullscreen = e, e) { - t._initial = {x: a.x, y: a.y, w: a.w, h: a.h}, t._borderBox = t.parseBox("0"), t.getEl("head").style.display = "none", a.deltaH -= a.headerH + 2, n.addClass(r, o + "fullscreen"), n.addClass(document.body, o + "fullscreen"), t.addClass("fullscreen"); - var s = n.getWindowSize(); - t.moveTo(0, 0).resizeTo(s.w, s.h) - } else t._borderBox = t.parseBox(t.settings.border), t.getEl("head").style.display = "", a.deltaH += a.headerH, n.removeClass(r, o + "fullscreen"), n.removeClass(document.body, o + "fullscreen"), t.removeClass("fullscreen"), t.moveTo(t._initial.x, t._initial.y).resizeTo(t._initial.w, t._initial.h); - return t.reflow() - }, postRender: function () { - var e = this, t = [], n, o, a; - setTimeout(function () { - e.addClass("in") - }, 0), e.keyboardNavigation = new r({root: e, enableLeftRight: !1, enableUpDown: !1, items: t, onCancel: function () { - e.close() - }}), e.find("*").each(function (e) { - e.canFocus && (o = o || e.settings.autofocus, n = n || e, e.subinput ? (t.push(e.getEl("inp")), e.getEl("open") && t.push(e.getEl("open"))) : t.push(e.getEl())) - }), e.statusbar && e.statusbar.find("*").each(function (e) { - e.canFocus && (o = o || e.settings.autofocus, n = n || e, t.push(e.getEl())) - }), e._super(), e.statusbar && e.statusbar.postRender(), !o && n && n.focus(), this.dragHelper = new i(e._id + "-dragh", {start: function () { - a = {x: e.layoutRect().x, y: e.layoutRect().y} - }, drag: function (t) { - e.moveTo(a.x + t.deltaX, a.y + t.deltaY) - }}), e.on("submit", function (t) { - t.isDefaultPrevented() || e.close() - }) - }, submit: function () { - return this.fire("submit", {data: this.toJSON()}) - }, remove: function () { - var e = this, t = e.classPrefix; - e.dragHelper.destroy(), e._super(), e.statusbar && this.statusbar.remove(), e._fullscreen && (n.removeClass(document.documentElement, t + "fullscreen"), n.removeClass(document.body, t + "fullscreen")) - }}); - return o - }), r(Z, [Q], function (e) { - var t = e.extend({init: function (e) { - e = {border: 1, padding: 20, layout: "flex", pack: "center", align: "center", containerCls: "panel", autoScroll: !0, buttons: {type: "button", text: "Ok", action: "ok"}, items: {type: "label", multiline: !0, maxWidth: 500, maxHeight: 200}}, this._super(e) - }, Statics: {OK: 1, OK_CANCEL: 2, YES_NO: 3, YES_NO_CANCEL: 4, msgBox: function (n) { - var r, i = n.callback || function () { - }; - switch (n.buttons) { - case t.OK_CANCEL: - r = [ - {type: "button", text: "Ok", subtype: "primary", onClick: function (e) { - e.control.parents()[1].close(), i(!0) - }}, - {type: "button", text: "Cancel", onClick: function (e) { - e.control.parents()[1].close(), i(!1) - }} - ]; - break; - case t.YES_NO: - r = [ - {type: "button", text: "Ok", subtype: "primary", onClick: function (e) { - e.control.parents()[1].close(), i(!0) - }} - ]; - break; - case t.YES_NO_CANCEL: - r = [ - {type: "button", text: "Ok", subtype: "primary", onClick: function (e) { - e.control.parents()[1].close() - }} - ]; - break; - default: - r = [ - {type: "button", text: "Ok", subtype: "primary", onClick: function (e) { - e.control.parents()[1].close(), i(!0) - }} - ] - } - return new e({padding: 20, x: n.x, y: n.y, minWidth: 300, minHeight: 100, layout: "flex", pack: "center", align: "center", buttons: r, title: n.title, items: {type: "label", multiline: !0, maxWidth: 500, maxHeight: 200, text: n.text}, onClose: n.onClose}).renderTo(document.body).reflow() - }, alert: function (e, n) { - return"string" == typeof e && (e = {text: e}), e.callback = n, t.msgBox(e) - }, confirm: function (e, n) { - return"string" == typeof e && (e = {text: e}), e.callback = n, e.buttons = t.OK_CANCEL, t.msgBox(e) - }}}); - return t - }), r(et, [Q, Z], function (e, t) { - return function (n) { - function r() { - return o.length ? o[o.length - 1] : void 0 - } - - var i = this, o = []; - i.windows = o, i.open = function (t, r) { - var i; - return n.editorManager.activeEditor = n, t.title = t.title || " ", t.url = t.url || t.file, t.url && (t.width = parseInt(t.width || 320, 10), t.height = parseInt(t.height || 240, 10)), t.body && (t.items = {defaults: t.defaults, type: t.bodyType || "form", items: t.body}), t.url || t.buttons || (t.buttons = [ - {text: "Ok", subtype: "primary", onclick: function () { - i.find("form")[0].submit(), i.close() - }}, - {text: "Cancel", onclick: function () { - i.close() - }} - ]), i = new e(t), o.push(i), i.on("close", function () { - for (var e = o.length; e--;)o[e] === i && o.splice(e, 1); - n.focus() - }), t.data && i.on("postRender", function () { - this.find("*").each(function (e) { - var n = e.name(); - n in t.data && e.value(t.data[n]) - }) - }), i.features = t || {}, i.params = r || {}, n.nodeChanged(), i.renderTo(document.body).reflow() - }, i.alert = function (e, n, r) { - t.alert(e, function () { - n && n.call(r || this) - }) - }, i.confirm = function (e, n, r) { - t.confirm(e, function (e) { - n.call(r || this, e) - }) - }, i.close = function () { - r() && r().close() - }, i.getParams = function () { - return r() ? r().params : null - }, i.setParams = function (e) { - r() && (r().params = e) - } - } - }), r(tt, [T, B, C, m, h, f], function (e, t, n, r, i, o) { - return function (a) { - function s(e, t) { - try { - a.getDoc().execCommand(e, !1, t) - } catch (n) { - } - } - - function l() { - var e = a.getDoc().documentMode; - return e ? e : 6 - } - - function c(e) { - return e.isDefaultPrevented() - } - - function d() { - function t(e) { - var t = new MutationObserver(function () { - }); - o.each(a.getBody().getElementsByTagName("*"), function (e) { - "SPAN" == e.tagName && e.setAttribute("mce-data-marked", 1), !e.hasAttribute("data-mce-style") && e.hasAttribute("style") && a.dom.setAttrib(e, "style", e.getAttribute("style")) - }), t.observe(a.getDoc(), {childList: !0, attributes: !0, subtree: !0, attributeFilter: ["style"]}), a.getDoc().execCommand(e ? "ForwardDelete" : "Delete", !1, null); - var n = a.selection.getRng(), r = n.startContainer.parentNode; - o.each(t.takeRecords(), function (e) { - if ("style" == e.attributeName) { - var t = e.target.getAttribute("data-mce-style"); - t ? e.target.setAttribute("style", t) : e.target.removeAttribute("style") - } - o.each(e.addedNodes, function (e) { - if ("SPAN" == e.nodeName && !e.getAttribute("mce-data-marked")) { - var t, i; - e == r && (t = n.startOffset, i = e.firstChild), W.remove(e, !0), i && (n.setStart(i, t), n.setEnd(i, t), a.selection.setRng(n)) - } - }) - }), t.disconnect(), o.each(a.dom.select("span[mce-data-marked]"), function (e) { - e.removeAttribute("mce-data-marked") - }) - } - - var n = a.getDoc(); - window.MutationObserver && (a.on("keydown", function (n) { - var r = n.keyCode == F, i = e.metaKeyPressed(n); - if (!c(n) && (r || n.keyCode == z)) { - var o = a.selection.getRng(), s = o.startContainer, l = o.startOffset; - if (!i && o.collapsed && 3 == s.nodeType && (r ? l < s.data.length : l > 0))return; - n.preventDefault(), i && a.selection.getSel().modify("extend", r ? "forward" : "backward", "word"), t(r) - } - }), a.on("keypress", function (n) { - c(n) || V.isCollapsed() || !n.charCode || e.metaKeyPressed(n) || (n.preventDefault(), t(!0), a.selection.setContent(String.fromCharCode(n.charCode))) - }), a.addCommand("Delete", function () { - t() - }), a.addCommand("ForwardDelete", function () { - t(!0) - }), a.on("dragstart", function (e) { - e.dataTransfer.setData("mce-internal", a.selection.getContent()) - }), a.on("drop", function (e) { - if (!c(e)) { - var r = e.dataTransfer.getData("mce-internal"); - r && n.caretRangeFromPoint && (e.preventDefault(), t(), a.selection.setRng(n.caretRangeFromPoint(e.x, e.y)), a.insertContent(r)) - } - }), a.on("cut", function (e) { - !c(e) && e.clipboardData && (e.preventDefault(), e.clipboardData.clearData(), e.clipboardData.setData("text/html", a.selection.getContent()), e.clipboardData.setData("text/plain", a.selection.getContent({format: "text"})), t(!0)) - })) - } - - function u() { - function e(e) { - var t = W.create("body"), n = e.cloneContents(); - return t.appendChild(n), V.serializer.serialize(t, {format: "html"}) - } - - function n(n) { - if (!n.setStart) { - if (n.item)return!1; - var r = n.duplicate(); - return r.moveToElementText(a.getBody()), t.compareRanges(n, r) - } - var i = e(n), o = W.createRng(); - o.selectNode(a.getBody()); - var s = e(o); - return i === s - } - - a.on("keydown", function (e) { - var t = e.keyCode, r, i; - if (!c(e) && (t == F || t == z)) { - if (r = a.selection.isCollapsed(), i = a.getBody(), r && !W.isEmpty(i))return; - if (!r && !n(a.selection.getRng()))return; - e.preventDefault(), a.setContent(""), i.firstChild && W.isBlock(i.firstChild) ? a.selection.setCursorLocation(i.firstChild, 0) : a.selection.setCursorLocation(i, 0), a.nodeChanged() - } - }) - } - - function f() { - a.on("keydown", function (t) { - !c(t) && 65 == t.keyCode && e.metaKeyPressed(t) && (t.preventDefault(), a.execCommand("SelectAll")) - }) - } - - function p() { - a.settings.content_editable || (W.bind(a.getDoc(), "focusin", function () { - V.setRng(V.getRng()) - }), W.bind(a.getDoc(), "mousedown", function (e) { - e.target == a.getDoc().documentElement && (a.getBody().focus(), V.setRng(V.getRng())) - })) - } - - function m() { - a.on("keydown", function (e) { - if (!c(e) && e.keyCode === z && V.isCollapsed() && 0 === V.getRng(!0).startOffset) { - var t = V.getNode(), n = t.previousSibling; - if ("HR" == t.nodeName)return W.remove(t), void e.preventDefault(); - n && n.nodeName && "hr" === n.nodeName.toLowerCase() && (W.remove(n), e.preventDefault()) - } - }) - } - - function h() { - window.Range.prototype.getClientRects || a.on("mousedown", function (e) { - if (!c(e) && "HTML" === e.target.nodeName) { - var t = a.getBody(); - t.blur(), setTimeout(function () { - t.focus() - }, 0) - } - }) - } - - function g() { - a.on("click", function (e) { - e = e.target, /^(IMG|HR)$/.test(e.nodeName) && V.getSel().setBaseAndExtent(e, 0, e, 1), "A" == e.nodeName && W.hasClass(e, "mce-item-anchor") && V.select(e), a.nodeChanged() - }) - } - - function v() { - function e() { - var e = W.getAttribs(V.getStart().cloneNode(!1)); - return function () { - var t = V.getStart(); - t !== a.getBody() && (W.setAttrib(t, "style", null), I(e, function (e) { - t.setAttributeNode(e.cloneNode(!0)) - })) - } - } - - function t() { - return!V.isCollapsed() && W.getParent(V.getStart(), W.isBlock) != W.getParent(V.getEnd(), W.isBlock) - } - - a.on("keypress", function (n) { - var r; - return c(n) || 8 != n.keyCode && 46 != n.keyCode || !t() ? void 0 : (r = e(), a.getDoc().execCommand("delete", !1, null), r(), n.preventDefault(), !1) - }), W.bind(a.getDoc(), "cut", function (n) { - var r; - !c(n) && t() && (r = e(), setTimeout(function () { - r() - }, 0)) - }) - } - - function y() { - var e, n; - a.on("selectionchange", function () { - n && (clearTimeout(n), n = 0), n = window.setTimeout(function () { - var n = V.getRng(); - e && t.compareRanges(n, e) || (a.nodeChanged(), e = n) - }, 50) - }) - } - - function b() { - document.body.setAttribute("role", "application") - } - - function C() { - a.on("keydown", function (e) { - if (!c(e) && e.keyCode === z && V.isCollapsed() && 0 === V.getRng(!0).startOffset) { - var t = V.getNode().previousSibling; - if (t && t.nodeName && "table" === t.nodeName.toLowerCase())return e.preventDefault(), !1 - } - }) - } - - function x() { - l() > 7 || (s("RespectVisibilityInDesign", !0), a.contentStyles.push(".mceHideBrInPre pre br {display: none}"), W.addClass(a.getBody(), "mceHideBrInPre"), q.addNodeFilter("pre", function (e) { - for (var t = e.length, r, i, o, a; t--;)for (r = e[t].getAll("br"), i = r.length; i--;)o = r[i], a = o.prev, a && 3 === a.type && "\n" != a.value.charAt(a.value - 1) ? a.value += "\n" : o.parent.insert(new n("#text", 3), o, !0).value = "\n" - }), j.addNodeFilter("pre", function (e) { - for (var t = e.length, n, r, i, o; t--;)for (n = e[t].getAll("br"), r = n.length; r--;)i = n[r], o = i.prev, o && 3 == o.type && (o.value = o.value.replace(/\r?\n$/, "")) - })) - } - - function w() { - W.bind(a.getBody(), "mouseup", function () { - var e, t = V.getNode(); - "IMG" == t.nodeName && ((e = W.getStyle(t, "width")) && (W.setAttrib(t, "width", e.replace(/[^0-9%]+/g, "")), W.setStyle(t, "width", "")), (e = W.getStyle(t, "height")) && (W.setAttrib(t, "height", e.replace(/[^0-9%]+/g, "")), W.setStyle(t, "height", ""))) - }) - } - - function _() { - a.on("keydown", function (t) { - var n, r, i, o, s; - if (!c(t) && t.keyCode == e.BACKSPACE && (n = V.getRng(), r = n.startContainer, i = n.startOffset, o = W.getRoot(), s = r, n.collapsed && 0 === i)) { - for (; s && s.parentNode && s.parentNode.firstChild == s && s.parentNode != o;)s = s.parentNode; - "BLOCKQUOTE" === s.tagName && (a.formatter.toggle("blockquote", null, s), n = W.createRng(), n.setStart(r, 0), n.setEnd(r, 0), V.setRng(n)) - } - }) - } - - function N() { - function e() { - a._refreshContentEditable(), s("StyleWithCSS", !1), s("enableInlineTableEditing", !1), U.object_resizing || s("enableObjectResizing", !1) - } - - U.readonly || a.on("BeforeExecCommand MouseDown", e) - } - - function E() { - function e() { - I(W.select("a"), function (e) { - var t = e.parentNode, n = W.getRoot(); - if (t.lastChild === e) { - for (; t && !W.isBlock(t);) { - if (t.parentNode.lastChild !== t || t === n)return; - t = t.parentNode - } - W.add(t, "br", {"data-mce-bogus": 1}) - } - }) - } - - a.on("SetContent ExecCommand", function (t) { - ("setcontent" == t.type || "mceInsertLink" === t.command) && e() - }) - } - - function k() { - U.forced_root_block && a.on("init", function () { - s("DefaultParagraphSeparator", U.forced_root_block) - }) - } - - function S() { - a.on("Undo Redo SetContent", function (e) { - e.initial || a.execCommand("mceRepaint") - }) - } - - function T() { - a.on("keydown", function (e) { - var t; - c(e) || e.keyCode != z || (t = a.getDoc().selection.createRange(), t && t.item && (e.preventDefault(), a.undoManager.beforeChange(), W.remove(t.item(0)), a.undoManager.add())) - }) - } - - function R() { - var e; - l() >= 10 && (e = "", I("p div h1 h2 h3 h4 h5 h6".split(" "), function (t, n) { - e += (n > 0 ? "," : "") + t + ":empty" - }), a.contentStyles.push(e + "{padding-right: 1px !important}")) - } - - function A() { - l() < 9 && (q.addNodeFilter("noscript", function (e) { - for (var t = e.length, n, r; t--;)n = e[t], r = n.firstChild, r && n.attr("data-mce-innertext", r.value) - }), j.addNodeFilter("noscript", function (e) { - for (var t = e.length, i, o, a; t--;)i = e[t], o = e[t].firstChild, o ? o.value = r.decode(o.value) : (a = i.attributes.map["data-mce-innertext"], a && (i.attr("data-mce-innertext", null), o = new n("#text", 3), o.value = a, o.raw = !0, i.append(o))) - })) - } - - function B() { - function e(e, t) { - var n = i.createTextRange(); - try { - n.moveToPoint(e, t) - } catch (r) { - n = null - } - return n - } - - function t(t) { - var r; - t.button ? (r = e(t.x, t.y), r && (r.compareEndPoints("StartToStart", a) > 0 ? r.setEndPoint("StartToStart", a) : r.setEndPoint("EndToEnd", a), r.select())) : n() - } - - function n() { - var e = r.selection.createRange(); - a && !e.item && 0 === e.compareEndPoints("StartToEnd", e) && a.select(), W.unbind(r, "mouseup", n), W.unbind(r, "mousemove", t), a = o = 0 - } - - var r = W.doc, i = r.body, o, a, s; - r.documentElement.unselectable = !0, W.bind(r, "mousedown contextmenu", function (i) { - if ("HTML" === i.target.nodeName) { - if (o && n(), s = r.documentElement, s.scrollHeight > s.clientHeight)return; - o = 1, a = e(i.x, i.y), a && (W.bind(r, "mouseup", n), W.bind(r, "mousemove", t), W.win.focus(), a.select()) - } - }) - } - - function L() { - a.on("keyup focusin", function (t) { - 65 == t.keyCode && e.metaKeyPressed(t) || V.normalize() - }) - } - - function H() { - a.contentStyles.push("img:-moz-broken {-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}") - } - - function M() { - a.inline || a.on("keydown", function () { - document.activeElement == document.body && a.getWin().focus() - }) - } - - function D() { - a.inline || (a.contentStyles.push("body {min-height: 150px}"), a.on("click", function (e) { - "HTML" == e.target.nodeName && (a.execCommand("SelectAll"), a.selection.collapse(!0), a.nodeChanged()) - })) - } - - function P() { - i.mac && a.on("keydown", function (t) { - !e.metaKeyPressed(t) || 37 != t.keyCode && 39 != t.keyCode || (t.preventDefault(), a.selection.getSel().modify("move", 37 == t.keyCode ? "backward" : "forward", "word")) - }) - } - - function O() { - s("AutoUrlDetect", !1) - } - - var I = o.each, z = e.BACKSPACE, F = e.DELETE, W = a.dom, V = a.selection, U = a.settings, q = a.parser, j = a.serializer, $ = i.gecko, K = i.ie, Y = i.webkit; - C(), _(), u(), L(), Y && (d(), p(), g(), k(), i.iOS ? (y(), M(), D()) : f()), K && i.ie < 11 && (m(), b(), x(), w(), T(), R(), A(), B()), i.ie >= 11 && D(), i.ie && (f(), O()), $ && (m(), h(), v(), N(), E(), S(), H(), P()) - } - }), r(nt, [f], function (e) { - function t() { - return!1 - } - - function n() { - return!0 - } - - var r = "__bindings", i = e.makeMap("focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange mouseout mouseenter mouseleave keydown keypress keyup contextmenu dragstart dragend dragover draggesture dragdrop drop drag", " "); - return{fire: function (e, i, o) { - var a = this, s, l, c, d, u; - if (e = e.toLowerCase(), i = i || {}, i.type = e, i.target || (i.target = a), i.preventDefault || (i.preventDefault = function () { - i.isDefaultPrevented = n - }, i.stopPropagation = function () { - i.isPropagationStopped = n - }, i.stopImmediatePropagation = function () { - i.isImmediatePropagationStopped = n - }, i.isDefaultPrevented = t, i.isPropagationStopped = t, i.isImmediatePropagationStopped = t), a[r] && (s = a[r][e]))for (l = 0, c = s.length; c > l && (s[l] = d = s[l], !i.isImmediatePropagationStopped()); l++)if (d.call(a, i) === !1)return i.preventDefault(), i; - if (o !== !1 && a.parent)for (u = a.parent(); u && !i.isPropagationStopped();)u.fire(e, i, !1), u = u.parent(); - return i - }, on: function (e, t) { - var n = this, o, a, s, l; - if (t === !1 && (t = function () { - return!1 - }), t)for (s = e.toLowerCase().split(" "), l = s.length; l--;)e = s[l], o = n[r], o || (o = n[r] = {}), a = o[e], a || (a = o[e] = [], n.bindNative && i[e] && n.bindNative(e)), a.push(t); - return n - }, off: function (e, t) { - var n = this, o, a = n[r], s, l, c, d; - if (a)if (e)for (c = e.toLowerCase().split(" "), o = c.length; o--;) { - if (e = c[o], s = a[e], !e) { - for (l in a)a[e].length = 0; - return n - } - if (s) { - if (t)for (d = s.length; d--;)s[d] === t && s.splice(d, 1); else s.length = 0; - !s.length && n.unbindNative && i[e] && (n.unbindNative(e), delete a[e]) - } - } else { - if (n.unbindNative)for (e in a)n.unbindNative(e); - n[r] = [] - } - return n - }, hasEventListeners: function (e) { - var t = this[r]; - return e = e.toLowerCase(), !(!t || !t[e] || 0 === t[e].length) - }} - }), r(rt, [f, h], function (e, t) { - var n = e.each, r = e.explode, i = {f9: 120, f10: 121, f11: 122}; - return function (o) { - var a = this, s = {}; - o.on("keyup keypress keydown", function (e) { - (e.altKey || e.ctrlKey || e.metaKey) && n(s, function (n) { - var r = t.mac ? e.metaKey : e.ctrlKey; - if (n.ctrl == r && n.alt == e.altKey && n.shift == e.shiftKey)return e.keyCode == n.keyCode || e.charCode && e.charCode == n.charCode ? (e.preventDefault(), "keydown" == e.type && n.func.call(n.scope), !0) : void 0 - }) - }), a.add = function (t, a, l, c) { - var d; - return d = l, "string" == typeof l ? l = function () { - o.execCommand(d, !1, null) - } : e.isArray(d) && (l = function () { - o.execCommand(d[0], d[1], d[2]) - }), n(r(t.toLowerCase()), function (e) { - var t = {func: l, scope: c || o, desc: o.translate(a), alt: !1, ctrl: !1, shift: !1}; - n(r(e, "+"), function (e) { - switch (e) { - case"alt": - case"ctrl": - case"shift": - t[e] = !0; - break; - default: - t.charCode = e.charCodeAt(0), t.keyCode = i[e] || e.toUpperCase().charCodeAt(0) - } - }), s[(t.ctrl ? "ctrl" : "") + "," + (t.alt ? "alt" : "") + "," + (t.shift ? "shift" : "") + "," + t.keyCode] = t - }), !0 - } - } - }), r(it, [v, b, C, k, E, A, L, H, M, D, P, O, y, d, et, x, _, tt, h, f, nt, rt], function (e, n, r, i, o, a, s, l, c, d, u, f, p, m, h, g, v, y, b, C, x, w) { - function _(e, t) { - return"selectionchange" == t ? e.getDoc() : !e.inline && /^mouse|click|contextmenu|drop/.test(t) ? e.getDoc() : e.getBody() - } - - function N(e, t, r) { - var i = this, o, a; - o = i.documentBaseUrl = r.documentBaseURL, a = r.baseURI, i.settings = t = T({id: e, theme: "modern", delta_width: 0, delta_height: 0, popup_css: "", plugins: "", document_base_url: o, add_form_submit_trigger: !0, submit_patch: !0, add_unload_trigger: !0, convert_urls: !0, relative_urls: !0, remove_script_host: !0, object_resizing: !0, doctype: "", visual: !0, font_size_style_values: "xx-small,x-small,small,medium,large,x-large,xx-large", font_size_legacy_values: "xx-small,small,medium,large,x-large,xx-large,300%", forced_root_block: "p", hidden_input: !0, padd_empty_editor: !0, render_ui: !0, indentation: "30px", inline_styles: !0, convert_fonts_to_spans: !0, indent: "simple", indent_before: "p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist", indent_after: "p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist", validate: !0, entity_encoding: "named", url_converter: i.convertURL, url_converter_scope: i, ie7_compat: !0}, t), n.language = t.language || "en", n.languageLoad = t.language_load, n.baseURL = r.baseURL, i.id = t.id = e, i.isNotDirty = !0, i.plugins = {}, i.documentBaseURI = new f(t.document_base_url || o, {base_uri: a}), i.baseURI = a, i.contentCSS = [], i.contentStyles = [], i.shortcuts = new w(i), i.execCommands = {}, i.queryStateCommands = {}, i.queryValueCommands = {}, i.loadedCSS = {}, i.suffix = r.suffix, i.editorManager = r, i.inline = t.inline, r.fire("SetupEditor", i), i.execCallback("setup", i) - } - - var E = e.DOM, k = n.ThemeManager, S = n.PluginManager, T = C.extend, R = C.each, A = C.explode, B = C.inArray, L = C.trim, H = C.resolve, M = m.Event, D = b.gecko, P = b.ie; - return N.prototype = {render: function () { - function e() { - E.unbind(window, "ready", e), n.render() - } - - function t() { - var e = p.ScriptLoader; - if (r.language && "en" != r.language && !r.language_url && (r.language_url = n.editorManager.baseURL + "/langs/" + r.language + ".js"), r.language_url && e.add(r.language_url), r.theme && "function" != typeof r.theme && "-" != r.theme.charAt(0) && !k.urls[r.theme]) { - var t = r.theme_url; - t = t ? n.documentBaseURI.toAbsolute(t) : "themes/" + r.theme + "/theme" + o + ".js", k.load(r.theme, t) - } - C.isArray(r.plugins) && (r.plugins = r.plugins.join(" ")), R(r.external_plugins, function (e, t) { - S.load(t, e), r.plugins += " " + t - }), R(r.plugins.split(/[ ,]/), function (e) { - if (e = L(e), e && !S.urls[e])if ("-" == e.charAt(0)) { - e = e.substr(1, e.length); - var t = S.dependencies(e); - R(t, function (e) { - var t = {prefix: "plugins/", resource: e, suffix: "/plugin" + o + ".js"}; - e = S.createUrl(t, e), S.load(e.resource, e) - }) - } else S.load(e, {prefix: "plugins/", resource: e, suffix: "/plugin" + o + ".js"}) - }), e.loadQueue(function () { - n.removed || n.init() - }) - } - - var n = this, r = n.settings, i = n.id, o = n.suffix; - if (!M.domLoaded)return void E.bind(window, "ready", e); - if (n.getElement() && b.contentEditable) { - r.inline ? n.inline = !0 : (n.orgVisibility = n.getElement().style.visibility, n.getElement().style.visibility = "hidden"); - var a = n.getElement().form || E.getParent(i, "form"); - a && (n.formElement = a, r.hidden_input && !/TEXTAREA|INPUT/i.test(n.getElement().nodeName) && (E.insertAfter(E.create("input", {type: "hidden", name: i}), i), n.hasHiddenInput = !0), n.formEventDelegate = function (e) { - n.fire(e.type, e) - }, E.bind(a, "submit reset", n.formEventDelegate), n.on("reset", function () { - n.setContent(n.startContent, {format: "raw"}) - }), !r.submit_patch || a.submit.nodeType || a.submit.length || a._mceOldSubmit || (a._mceOldSubmit = a.submit, a.submit = function () { - return n.editorManager.triggerSave(), n.isNotDirty = !0, a._mceOldSubmit(a) - })), n.windowManager = new h(n), "xml" == r.encoding && n.on("GetContent", function (e) { - e.save && (e.content = E.encode(e.content)) - }), r.add_form_submit_trigger && n.on("submit", function () { - n.initialized && n.save() - }), r.add_unload_trigger && (n._beforeUnload = function () { - !n.initialized || n.destroyed || n.isHidden() || n.save({format: "raw", no_events: !0, set_dirty: !1}) - }, n.editorManager.on("BeforeUnload", n._beforeUnload)), t() - } - }, init: function () { - function e(n) { - var r = S.get(n), i, o; - i = S.urls[n] || t.documentBaseUrl.replace(/\/$/, ""), n = L(n), r && -1 === B(m, n) && (R(S.dependencies(n), function (t) { - e(t) - }), o = new r(t, i), t.plugins[n] = o, o.init && (o.init(t, i), m.push(n))) - } - - var t = this, n = t.settings, r = t.getElement(), i, o, a, s, l, c, d, u, f, p, m = []; - if (t.rtl = this.editorManager.i18n.rtl, t.editorManager.add(t), n.aria_label = n.aria_label || E.getAttrib(r, "aria-label", t.getLang("aria.rich_text_area")), n.theme && ("function" != typeof n.theme ? (n.theme = n.theme.replace(/-/, ""), l = k.get(n.theme), t.theme = new l(t, k.urls[n.theme]), t.theme.init && t.theme.init(t, k.urls[n.theme] || t.documentBaseUrl.replace(/\/$/, ""))) : t.theme = n.theme), R(n.plugins.replace(/\-/g, "").split(/[ ,]/), e), n.render_ui && t.theme && (t.orgDisplay = r.style.display, "function" != typeof n.theme ? (i = n.width || r.style.width || r.offsetWidth, o = n.height || r.style.height || r.offsetHeight, a = n.min_height || 100, f = /^[0-9\.]+(|px)$/i, f.test("" + i) && (i = Math.max(parseInt(i, 10) + (l.deltaWidth || 0), 100)), f.test("" + o) && (o = Math.max(parseInt(o, 10) + (l.deltaHeight || 0), a)), l = t.theme.renderUI({targetNode: r, width: i, height: o, deltaWidth: n.delta_width, deltaHeight: n.delta_height}), n.content_editable || (E.setStyles(l.sizeContainer || l.editorContainer, {wi2dth: i, h2eight: o}), o = (l.iframeHeight || o) + ("number" == typeof o ? l.deltaHeight || 0 : ""), a > o && (o = a))) : (l = n.theme(t, r), l.editorContainer.nodeType && (l.editorContainer = l.editorContainer.id = l.editorContainer.id || t.id + "_parent"), l.iframeContainer.nodeType && (l.iframeContainer = l.iframeContainer.id = l.iframeContainer.id || t.id + "_iframecontainer"), o = l.iframeHeight || r.offsetHeight), t.editorContainer = l.editorContainer), n.content_css && R(A(n.content_css), function (e) { - t.contentCSS.push(t.documentBaseURI.toAbsolute(e)) - }), n.content_style && t.contentStyles.push(n.content_style), n.content_editable)return r = s = l = null, t.initContentBody(); - for (t.iframeHTML = n.doctype + "", n.document_base_url != t.documentBaseUrl && (t.iframeHTML += ''), !b.caretAfter && n.ie7_compat && (t.iframeHTML += ''), t.iframeHTML += '', p = 0; p < t.contentCSS.length; p++) { - var h = t.contentCSS[p]; - t.iframeHTML += '', t.loadedCSS[h] = !0 - } - d = n.body_id || "tinymce", -1 != d.indexOf("=") && (d = t.getParam("body_id", "", "hash"), d = d[t.id] || d), u = n.body_class || "", -1 != u.indexOf("=") && (u = t.getParam("body_class", "", "hash"), u = u[t.id] || ""), t.iframeHTML += '
    "; - var g = 'javascript:(function(){document.open();document.domain="' + document.domain + '";var ed = window.parent.tinymce.get("' + t.id + '");document.write(ed.iframeHTML);document.close();ed.initContentBody(true);})()'; - if (document.domain != location.hostname && (c = g), s = E.add(l.iframeContainer, "iframe", {id: t.id + "_ifr", src: c || 'javascript:""', frameBorder: "0", allowTransparency: "true", title: t.editorManager.translate("Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help"), style: {width: "100%", height: o, display: "block"}}), P)try { - t.getDoc() - } catch (v) { - s.src = c = g - } - t.contentAreaContainer = l.iframeContainer, l.editorContainer && (E.get(l.editorContainer).style.display = t.orgDisplay), E.get(t.id).style.display = "none", E.setAttrib(t.id, "aria-hidden", !0), c || t.initContentBody(), r = s = l = null - }, initContentBody: function (t) { - var n = this, o = n.settings, f = E.get(n.id), p = n.getDoc(), m, h; - o.inline || (n.getElement().style.visibility = n.orgVisibility), t || o.content_editable || (p.open(), p.write(n.iframeHTML), p.close()), o.content_editable && (n.on("remove", function () { - var e = this.getBody(); - E.removeClass(e, "mce-content-body"), E.removeClass(e, "mce-edit-focus"), E.setAttrib(e, "tabIndex", null), E.setAttrib(e, "contentEditable", null) - }), E.addClass(f, "mce-content-body"), f.tabIndex = -1, n.contentDocument = p = o.content_document || document, n.contentWindow = o.content_window || window, n.bodyElement = f, o.content_document = o.content_window = null, o.root_name = f.nodeName.toLowerCase()), m = n.getBody(), m.disabled = !0, o.readonly || (n.inline && "static" == E.getStyle(m, "position", !0) && (m.style.position = "relative"), m.contentEditable = n.getParam("content_editable_state", !0)), m.disabled = !1, n.schema = new g(o), n.dom = new e(p, {keep_values: !0, url_converter: n.convertURL, url_converter_scope: n, hex_colors: o.force_hex_style_colors, class_filter: o.class_filter, update_styles: !0, root_element: o.content_editable ? n.id : null, collect: o.content_editable, schema: n.schema, onSetAttrib: function (e) { - n.fire("SetAttrib", e) - }}), n.parser = new v(o, n.schema), n.parser.addAttributeFilter("src,href,style", function (e, t) { - for (var r = e.length, i, o = n.dom, a, s; r--;)i = e[r], a = i.attr(t), s = "data-mce-" + t, i.attributes.map[s] || ("style" === t ? i.attr(s, o.serializeStyle(o.parseStyle(a), i.name)) : i.attr(s, n.convertURL(a, t, i.name))) - }), n.parser.addNodeFilter("script", function (e) { - for (var t = e.length, n; t--;)n = e[t], n.attr("type", "mce-" + (n.attr("type") || "text/javascript")) - }), n.parser.addNodeFilter("#cdata", function (e) { - for (var t = e.length, n; t--;)n = e[t], n.type = 8, n.name = "#comment", n.value = "[CDATA[" + n.value + "]]" - }), n.parser.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div", function (e) { - for (var t = e.length, i, o = n.schema.getNonEmptyElements(); t--;)i = e[t], i.isEmpty(o) && (i.empty().append(new r("br", 1)).shortEnded = !0) - }), n.serializer = new i(o, n), n.selection = new a(n.dom, n.getWin(), n.serializer, n), n.formatter = new s(n), n.undoManager = new l(n), n.forceBlocks = new d(n), n.enterKey = new c(n), n.editorCommands = new u(n), n.fire("PreInit"), o.browser_spellcheck || o.gecko_spellcheck || (p.body.spellcheck = !1, E.setAttrib(m, "spellcheck", "false")), n.fire("PostRender"), n.quirks = y(n), o.directionality && (m.dir = o.directionality), o.nowrap && (m.style.whiteSpace = "nowrap"), o.protect && n.on("BeforeSetContent", function (e) { - R(o.protect, function (t) { - e.content = e.content.replace(t, function (e) { - return"" - }) - }) - }), n.on("SetContent", function () { - n.addVisual(n.getBody()) - }), o.padd_empty_editor && n.on("PostProcess", function (e) { - e.content = e.content.replace(/^(]*>( | |\s|\u00a0|)<\/p>[\r\n]*|
    [\r\n]*)$/, "") - }), n.load({initial: !0, format: "html"}), n.startContent = n.getContent({format: "raw"}), n.initialized = !0, R(n._pendingNativeEvents, function (e) { - n.dom.bind(_(n, e), e, function (e) { - n.fire(e.type, e) - }) - }), n.fire("init"), n.focus(!0), n.nodeChanged({initial: !0}), n.execCallback("init_instance_callback", n), n.contentStyles.length > 0 && (h = "", R(n.contentStyles, function (e) { - h += e + "\r\n" - }), n.dom.addStyle(h)), R(n.contentCSS, function (e) { - n.loadedCSS[e] || (n.dom.loadCSS(e), n.loadedCSS[e] = !0) - }), o.auto_focus && setTimeout(function () { - var e = n.editorManager.get(o.auto_focus); - e.selection.select(e.getBody(), 1), e.selection.collapse(1), e.getBody().focus(), e.getWin().focus() - }, 100), f = p = m = null - }, focus: function (e) { - var t, n = this, r = n.selection, i = n.settings.content_editable, o, a, s = n.getDoc(), l; - e || (o = r.getRng(), o.item && (a = o.item(0)), n._refreshContentEditable(), i || (b.opera || n.getBody().focus(), n.getWin().focus()), (D || i) && (l = n.getBody(), l.setActive && b.ie < 11 ? l.setActive() : l.focus(), i && r.normalize()), a && a.ownerDocument == s && (o = s.body.createControlRange(), o.addElement(a), o.select())), n.editorManager.activeEditor != n && ((t = n.editorManager.activeEditor) && t.fire("deactivate", {relatedTarget: n}), n.fire("activate", {relatedTarget: t})), n.editorManager.activeEditor = n - }, execCallback: function (e) { - var t = this, n = t.settings[e], r; - if (n)return t.callbackLookup && (r = t.callbackLookup[e]) && (n = r.func, r = r.scope), "string" == typeof n && (r = n.replace(/\.\w+$/, ""), r = r ? H(r) : 0, n = H(n), t.callbackLookup = t.callbackLookup || {}, t.callbackLookup[e] = {func: n, scope: r}), n.apply(r || t, Array.prototype.slice.call(arguments, 1)) - }, translate: function (e) { - var t = this.settings.language || "en", n = this.editorManager.i18n; - return e ? n.data[t + "." + e] || e.replace(/\{\#([^\}]+)\}/g, function (e, r) { - return n.data[t + "." + r] || "{#" + r + "}" - }) : "" - }, getLang: function (e, n) { - return this.editorManager.i18n.data[(this.settings.language || "en") + "." + e] || (n !== t ? n : "{#" + e + "}") - }, getParam: function (e, t, n) { - var r = e in this.settings ? this.settings[e] : t, i; - return"hash" === n ? (i = {}, "string" == typeof r ? R(r.split(r.indexOf("=") > 0 ? /[;,](?![^=;,]*(?:[;,]|$))/ : ","), function (e) { - e = e.split("="), i[L(e[0])] = L(e.length > 1 ? e[1] : e) - }) : i = r, i) : r - }, nodeChanged: function () { - var e = this, t = e.selection, n, r, i; - e.initialized && !e.settings.disable_nodechange && (i = e.getBody(), n = t.getStart() || i, n = P && n.ownerDocument != e.getDoc() ? e.getBody() : n, "IMG" == n.nodeName && t.isCollapsed() && (n = n.parentNode), r = [], e.dom.getParent(n, function (e) { - return e === i ? !0 : void r.push(e) - }), e.fire("NodeChange", {element: n, parents: r})) - }, addButton: function (e, t) { - var n = this; - t.cmd && (t.onclick = function () { - n.execCommand(t.cmd) - }), t.text || t.icon || (t.icon = e), n.buttons = n.buttons || {}, t.tooltip = t.tooltip || t.title, n.buttons[e] = t - }, addMenuItem: function (e, t) { - var n = this; - t.cmd && (t.onclick = function () { - n.execCommand(t.cmd) - }), n.menuItems = n.menuItems || {}, n.menuItems[e] = t - }, addCommand: function (e, t, n) { - this.execCommands[e] = {func: t, scope: n || this} - }, addQueryStateHandler: function (e, t, n) { - this.queryStateCommands[e] = {func: t, scope: n || this} - }, addQueryValueHandler: function (e, t, n) { - this.queryValueCommands[e] = {func: t, scope: n || this} - }, addShortcut: function (e, t, n, r) { - this.shortcuts.add(e, t, n, r) - }, execCommand: function (e, t, n, r) { - var i = this, o = 0, a; - return/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(e) || r && r.skip_focus || i.focus(), r = T({}, r), r = i.fire("BeforeExecCommand", {command: e, ui: t, value: n}), r.isDefaultPrevented() ? !1 : (a = i.execCommands[e]) && a.func.call(a.scope, t, n) !== !0 ? (i.fire("ExecCommand", {command: e, ui: t, value: n}), !0) : (R(i.plugins, function (r) { - return r.execCommand && r.execCommand(e, t, n) ? (i.fire("ExecCommand", {command: e, ui: t, value: n}), o = !0, !1) : void 0 - }), o ? o : i.theme && i.theme.execCommand && i.theme.execCommand(e, t, n) ? (i.fire("ExecCommand", {command: e, ui: t, value: n}), !0) : i.editorCommands.execCommand(e, t, n) ? (i.fire("ExecCommand", {command: e, ui: t, value: n}), !0) : (i.getDoc().execCommand(e, t, n), void i.fire("ExecCommand", {command: e, ui: t, value: n}))) - }, queryCommandState: function (e) { - var t = this, n, r; - if (!t._isHidden()) { - if ((n = t.queryStateCommands[e]) && (r = n.func.call(n.scope), r !== !0))return r; - if (r = t.editorCommands.queryCommandState(e), -1 !== r)return r; - try { - return t.getDoc().queryCommandState(e) - } catch (i) { - } - } - }, queryCommandValue: function (e) { - var n = this, r, i; - if (!n._isHidden()) { - if ((r = n.queryValueCommands[e]) && (i = r.func.call(r.scope), i !== !0))return i; - if (i = n.editorCommands.queryCommandValue(e), i !== t)return i; - try { - return n.getDoc().queryCommandValue(e) - } catch (o) { - } - } - }, show: function () { - var e = this; - E.show(e.getContainer()), E.hide(e.id), e.load(), e.fire("show") - }, hide: function () { - var e = this, t = e.getDoc(); - P && t && !e.inline && t.execCommand("SelectAll"), e.save(), E.hide(e.getContainer()), E.setStyle(e.id, "display", e.orgDisplay), e.fire("hide") - }, isHidden: function () { - return!E.isHidden(this.id) - }, setProgressState: function (e, t) { - this.fire("ProgressState", {state: e, time: t}) - }, load: function (e) { - var n = this, r = n.getElement(), i; - return r ? (e = e || {}, e.load = !0, i = n.setContent(r.value !== t ? r.value : r.innerHTML, e), e.element = r, e.no_events || n.fire("LoadContent", e), e.element = r = null, i) : void 0 - }, save: function (e) { - var t = this, n = t.getElement(), r, i; - if (n && t.initialized)return e = e || {}, e.save = !0, e.element = n, r = e.content = t.getContent(e), e.no_events || t.fire("SaveContent", e), r = e.content, /TEXTAREA|INPUT/i.test(n.nodeName) ? n.value = r : (n.innerHTML = r, (i = E.getParent(t.id, "form")) && R(i.elements, function (e) { - return e.name == t.id ? (e.value = r, !1) : void 0 - })), e.element = n = null, e.set_dirty !== !1 && (t.isNotDirty = !0), r - }, setContent: function (e, t) { - var n = this, r = n.getBody(), i; - return t = t || {}, t.format = t.format || "html", t.set = !0, t.content = e, t.no_events || n.fire("BeforeSetContent", t), e = t.content, 0 === e.length || /^\s+$/.test(e) ? (i = n.settings.forced_root_block, i && n.schema.isValidChild(r.nodeName.toLowerCase(), i.toLowerCase()) ? (e = P && 11 > P ? "" : '
    ', e = n.dom.createHTML(i, n.settings.forced_root_block_attrs, e)) : (!P || 11 > P) && (e = '
    '), r.innerHTML = e, n.fire("SetContent", t)) : ("raw" !== t.format && (e = new o({}, n.schema).serialize(n.parser.parse(e, {isRootContent: !0}))), t.content = L(e), n.dom.setHTML(r, t.content), t.no_events || n.fire("SetContent", t)), t.content - }, getContent: function (e) { - var t = this, n, r = t.getBody(); - return e = e || {}, e.format = e.format || "html", e.get = !0, e.getInner = !0, e.no_events || t.fire("BeforeGetContent", e), n = "raw" == e.format ? r.innerHTML : "text" == e.format ? r.innerText || r.textContent : t.serializer.serialize(r, e), e.content = "text" != e.format ? L(n) : n, e.no_events || t.fire("GetContent", e), e.content - }, insertContent: function (e) { - this.execCommand("mceInsertContent", !1, e) - }, isDirty: function () { - return!this.isNotDirty - }, getContainer: function () { - var e = this; - return e.container || (e.container = E.get(e.editorContainer || e.id + "_parent")), e.container - }, getContentAreaContainer: function () { - return this.contentAreaContainer - }, getElement: function () { - return E.get(this.settings.content_element || this.id) - }, getWin: function () { - var e = this, t; - return e.contentWindow || (t = E.get(e.id + "_ifr"), t && (e.contentWindow = t.contentWindow)), e.contentWindow - }, getDoc: function () { - var e = this, t; - return e.contentDocument || (t = e.getWin(), t && (e.contentDocument = t.document)), e.contentDocument - }, getBody: function () { - return this.bodyElement || this.getDoc().body - }, convertURL: function (e, t, n) { - var r = this, i = r.settings; - return i.urlconverter_callback ? r.execCallback("urlconverter_callback", e, n, !0, t) : !i.convert_urls || n && "LINK" == n.nodeName || 0 === e.indexOf("file:") || 0 === e.length ? e : i.relative_urls ? r.documentBaseURI.toRelative(e) : e = r.documentBaseURI.toAbsolute(e, i.remove_script_host) - }, addVisual: function (e) { - var n = this, r = n.settings, i = n.dom, o; - e = e || n.getBody(), n.hasVisual === t && (n.hasVisual = r.visual), R(i.select("table,a", e), function (e) { - var t; - switch (e.nodeName) { - case"TABLE": - return o = r.visual_table_class || "mce-item-table", t = i.getAttrib(e, "border"), void(t && "0" != t || (n.hasVisual ? i.addClass(e, o) : i.removeClass(e, o))); - case"A": - return void(i.getAttrib(e, "href", !1) || (t = i.getAttrib(e, "name") || e.id, o = "mce-item-anchor", t && (n.hasVisual ? i.addClass(e, o) : i.removeClass(e, o)))) - } - }), n.fire("VisualAid", {element: e, hasVisual: n.hasVisual}) - }, remove: function () { - var e = this; - if (!e.removed) { - e.removed = 1, e.hasHiddenInput && E.remove(e.getElement().nextSibling); - var t = e.getDoc(); - P && t && !e.inline && t.execCommand("SelectAll"), e.save(), E.setStyle(e.id, "display", e.orgDisplay), e.settings.content_editable || (M.unbind(e.getWin()), M.unbind(e.getDoc())); - var n = e.getContainer(); - M.unbind(e.getBody()), M.unbind(n), e.fire("remove"), e.editorManager.remove(e), E.remove(n), e.destroy() - } - }, bindNative: function (e) { - var t = this; - t.settings.readonly || (t.initialized ? t.dom.bind(_(t, e), e, function (n) { - t.fire(e, n) - }) : t._pendingNativeEvents ? t._pendingNativeEvents.push(e) : t._pendingNativeEvents = [e]) - }, unbindNative: function (e) { - var t = this; - t.initialized && t.dom.unbind(e) - }, destroy: function (e) { - var t = this, n; - if (!t.destroyed) { - if (!e && !t.removed)return void t.remove(); - e && D && (M.unbind(t.getDoc()), M.unbind(t.getWin()), M.unbind(t.getBody())), e || (t.editorManager.off("beforeunload", t._beforeUnload), t.theme && t.theme.destroy && t.theme.destroy(), t.selection.destroy(), t.dom.destroy()), n = t.formElement, n && (n._mceOldSubmit && (n.submit = n._mceOldSubmit, n._mceOldSubmit = null), E.unbind(n, "submit reset", t.formEventDelegate)), t.contentAreaContainer = t.formElement = t.container = null, t.settings.content_element = t.bodyElement = t.contentDocument = t.contentWindow = null, t.selection && (t.selection = t.selection.win = t.selection.dom = t.selection.dom.doc = null), t.destroyed = 1 - } - }, _refreshContentEditable: function () { - var e = this, t, n; - e._isHidden() && (t = e.getBody(), n = t.parentNode, n.removeChild(t), n.appendChild(t), t.focus()) - }, _isHidden: function () { - var e; - return D ? (e = this.selection.getSel(), !e || !e.rangeCount || 0 === e.rangeCount) : 0 - }}, T(N.prototype, x), N - }), r(ot, [], function () { - var e = {}; - return{rtl: !1, add: function (t, n) { - for (var r in n)e[r] = n[r]; - this.rtl = this.rtl || "rtl" === e._dir - }, translate: function (t) { - if ("undefined" == typeof t)return t; - if ("string" != typeof t && t.raw)return t.raw; - if (t.push) { - var n = t.slice(1); - t = (e[t[0]] || t[0]).replace(/\{([^\}]+)\}/g, function (e, t) { - return n[t] - }) - } - return e[t] || t - }, data: e} - }), r(at, [v, h], function (e, t) { - function n(r) { - function i() { - try { - return document.activeElement - } catch (e) { - return document.body - } - } - - function o(e) { - return e && e.startContainer ? {startContainer: e.startContainer, startOffset: e.startOffset, endContainer: e.endContainer, endOffset: e.endOffset} : e - } - - function a(e, t) { - var n; - return t.startContainer ? (n = e.getDoc().createRange(), n.setStart(t.startContainer, t.startOffset), n.setEnd(t.endContainer, t.endOffset)) : n = t, n - } - - function s(t) { - return!!e.DOM.getParent(t, n.isEditorUIElement) - } - - function l(e, t) { - for (var n = t.getBody(); e;) { - if (e == n)return!0; - e = e.parentNode - } - } - - function c(n) { - var c = n.editor, d; - c.on("init", function () { - "onbeforedeactivate"in document && t.ie < 11 ? c.dom.bind(c.getBody(), "beforedeactivate", function () { - try { - c.lastRng = c.selection.getRng() - } catch (e) { - } - c.selection.lastFocusBookmark = o(c.lastRng) - }) : (c.inline || t.ie > 10) && (c.on("nodechange keyup", function () { - var e = document.activeElement; - e && e.id == c.id + "_ifr" && (e = c.getBody()), l(e, c) && (c.lastRng = c.selection.getRng()) - }), t.webkit && (d = function () { - var e = c.selection.getRng(); - e.collapsed || (c.lastRng = e) - }, e.DOM.bind(document, "selectionchange", d), c.on("remove", function () { - e.DOM.unbind(document, "selectionchange", d) - }))) - }), c.on("setcontent", function () { - c.lastRng = null - }), c.on("mousedown", function () { - c.selection.lastFocusBookmark = null - }), c.on("focusin", function () { - var e = r.focusedEditor; - c.selection.lastFocusBookmark && (c.selection.setRng(a(c, c.selection.lastFocusBookmark)), c.selection.lastFocusBookmark = null), e != c && (e && e.fire("blur", {focusedEditor: c}), r.activeEditor = c, r.focusedEditor = c, c.fire("focus", {blurredEditor: e}), c.focus(!1)), c.lastRng = null - }), c.on("focusout", function () { - window.setTimeout(function () { - var e = r.focusedEditor; - s(i()) || e != c || (c.fire("blur", {focusedEditor: null}), r.focusedEditor = null, c.selection && (c.selection.lastFocusBookmark = null)) - }, 0) - }) - } - - e.DOM.bind(document, "focusin", function (e) { - var t = r.activeEditor; - t && e.target.ownerDocument == document && (t.selection && (t.selection.lastFocusBookmark = o(t.lastRng)), s(e.target) || r.focusedEditor != t || (t.fire("blur", {focusedEditor: null}), r.focusedEditor = null)) - }), r.on("AddEditor", c) - } - - return n.isEditorUIElement = function (e) { - return-1 !== e.className.indexOf("mce-") - }, n - }), r(st, [it, v, O, h, f, nt, ot, at], function (e, n, r, i, o, a, s, l) { - var c = n.DOM, d = o.explode, u = o.each, f = o.extend, p = 0, m, h = {majorVersion: "4", minorVersion: "0.16", releaseDate: "2014-01-31", editors: [], i18n: s, activeEditor: null, setup: function () { - var e = this, t, n, i = "", o; - if (n = document.location.href.replace(/[\?#].*$/, "").replace(/[\/\\][^\/]+$/, ""), /[\/\\]$/.test(n) || (n += "/"), o = window.tinymce || window.tinyMCEPreInit)t = o.base || o.baseURL, i = o.suffix; else for (var a = document.getElementsByTagName("script"), s = 0; s < a.length; s++) { - var c = a[s].src; - if (/tinymce(\.full|\.jquery|)(\.min|\.dev|)\.js/.test(c)) { - -1 != c.indexOf(".min") && (i = ".min"), t = c.substring(0, c.lastIndexOf("/")); - break - } - } - e.baseURL = new r(n).toAbsolute(t), e.documentBaseURL = n, e.baseURI = new r(e.baseURL), e.suffix = i, e.focusManager = new l(e) - }, init: function (t) { - function n(e) { - var t = e.id; - return t || (t = e.name, t = t && !c.get(t) ? e.name : c.uniqueId(), e.setAttribute("id", t)), t - } - - function r(e, t, n) { - var r = e[t]; - if (r)return r.apply(n || this, Array.prototype.slice.call(arguments, 2)) - } - - function i(e, t) { - return t.constructor === RegExp ? t.test(e.className) : c.hasClass(e, t) - } - - function o() { - var m, h; - if (c.unbind(window, "ready", o), r(t, "onpageload"), t.types)return void u(t.types, function (r) { - u(c.select(r.selector), function (i) { - var o = new e(n(i), f({}, t, r), a); - s.push(o), o.render(1) - }) - }); - if (t.selector)return void u(c.select(t.selector), function (r) { - var i = new e(n(r), t, a); - s.push(i), i.render(1) - }); - switch (t.mode) { - case"exact": - m = t.elements || "", m.length > 0 && u(d(m), function (n) { - c.get(n) ? (l = new e(n, t, a), s.push(l), l.render(!0)) : u(document.forms, function (r) { - u(r.elements, function (r) { - r.name === n && (n = "mce_editor_" + p++, c.setAttrib(r, "id", n), l = new e(n, t, a), s.push(l), l.render(1)) - }) - }) - }); - break; - case"textareas": - case"specific_textareas": - u(c.select("textarea"), function (r) { - t.editor_deselector && i(r, t.editor_deselector) || (!t.editor_selector || i(r, t.editor_selector)) && (l = new e(n(r), t, a), s.push(l), l.render(!0)) - }) - } - t.oninit && (m = h = 0, u(s, function (e) { - h++, e.initialized ? m++ : e.on("init", function () { - m++, m == h && r(t, "oninit") - }), m == h && r(t, "oninit") - })) - } - - var a = this, s = [], l; - a.settings = t, c.bind(window, "ready", o) - }, get: function (e) { - return e === t ? this.editors : this.editors[e] - }, add: function (e) { - var t = this, n = t.editors; - return n[e.id] = e, n.push(e), t.activeEditor = e, t.fire("AddEditor", {editor: e}), m || (m = function () { - t.fire("BeforeUnload") - }, c.bind(window, "beforeunload", m)), e - }, createEditor: function (t, n) { - return this.add(new e(t, n, this)) - }, remove: function (e) { - var t = this, n, r = t.editors, i, o; - { - if (e) { - if ("string" == typeof e)return e = e.selector || e, void u(c.select(e), function (e) { - t.remove(r[e.id]) - }); - if (i = e, !r[i.id])return null; - for (delete r[i.id], n = 0; n < r.length; n++)if (r[n] == i) { - r.splice(n, 1), o = !0; - break - } - return t.activeEditor == i && (t.activeEditor = r[0]), o && t.fire("RemoveEditor", {editor: i}), r.length || c.unbind(window, "beforeunload", m), i.remove(), i - } - for (n = r.length - 1; n >= 0; n--)t.remove(r[n]) - } - }, execCommand: function (t, n, r) { - var i = this, o = i.get(r); - switch (t) { - case"mceAddEditor": - return i.get(r) || new e(r, i.settings, i).render(), !0; - case"mceRemoveEditor": - return o && o.remove(), !0; - case"mceToggleEditor": - return o ? (o.isHidden() ? o.show() : o.hide(), !0) : (i.execCommand("mceAddEditor", 0, r), !0) - } - return i.activeEditor ? i.activeEditor.execCommand(t, n, r) : !1 - }, triggerSave: function () { - u(this.editors, function (e) { - e.save() - }) - }, addI18n: function (e, t) { - s.add(e, t) - }, translate: function (e) { - return s.translate(e) - }}; - return f(h, a), h.setup(), window.tinymce = window.tinyMCE = h, h - }), r(lt, [st, f], function (e, t) { - var n = t.each, r = t.explode; - e.on("AddEditor", function (e) { - var t = e.editor; - t.on("preInit", function () { - function e(e, t) { - n(t, function (t, n) { - t && s.setStyle(e, n, t) - }), s.rename(e, "span") - } - - function i(e) { - s = t.dom, l.convert_fonts_to_spans && n(s.select("font,u,strike", e.node), function (e) { - o[e.nodeName.toLowerCase()](s, e) - }) - } - - var o, a, s, l = t.settings; - l.inline_styles && (a = r(l.font_size_legacy_values), o = {font: function (t, n) { - e(n, {backgroundColor: n.style.backgroundColor, color: n.color, fontFamily: n.face, fontSize: a[parseInt(n.size, 10) - 1]}) - }, u: function (t, n) { - e(n, {textDecoration: "underline"}) - }, strike: function (t, n) { - e(n, {textDecoration: "line-through"}) - }}, t.on("PreProcess SetContent", i)) - }) - }) - }), r(ct, [], function () { - return{send: function (e) { - function t() { - !e.async || 4 == n.readyState || r++ > 1e4 ? (e.success && 1e4 > r && 200 == n.status ? e.success.call(e.success_scope, "" + n.responseText, n, e) : e.error && e.error.call(e.error_scope, r > 1e4 ? "TIMED_OUT" : "GENERAL", n, e), n = null) : setTimeout(t, 10) - } - - var n, r = 0; - if (e.scope = e.scope || this, e.success_scope = e.success_scope || e.scope, e.error_scope = e.error_scope || e.scope, e.async = e.async === !1 ? !1 : !0, e.data = e.data || "", n = new XMLHttpRequest) { - if (n.overrideMimeType && n.overrideMimeType(e.content_type), n.open(e.type || (e.data ? "POST" : "GET"), e.url, e.async), e.content_type && n.setRequestHeader("Content-Type", e.content_type), n.setRequestHeader("X-Requested-With", "XMLHttpRequest"), n.send(e.data), !e.async)return t(); - setTimeout(t, 10) - } - }} - }), r(dt, [], function () { - function e(t, n) { - var r, i, o, a; - if (n = n || '"', null === t)return"null"; - if (o = typeof t, "string" == o)return i = "\bb t\nn\ff\rr\"\"''\\\\", n + t.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g, function (e, t) { - return'"' === n && "'" === e ? e : (r = i.indexOf(t), r + 1 ? "\\" + i.charAt(r + 1) : (e = t.charCodeAt().toString(16), "\\u" + "0000".substring(e.length) + e)) - }) + n; - if ("object" == o) { - if (t.hasOwnProperty && "[object Array]" === Object.prototype.toString.call(t)) { - for (r = 0, i = "["; r < t.length; r++)i += (r > 0 ? "," : "") + e(t[r], n); - return i + "]" - } - i = "{"; - for (a in t)t.hasOwnProperty(a) && (i += "function" != typeof t[a] ? (i.length > 1 ? "," + n : n) + a + n + ":" + e(t[a], n) : ""); - return i + "}" - } - return"" + t - } - - return{serialize: e, parse: function (e) { - try { - return window[String.fromCharCode(101) + "val"]("(" + e + ")") - } catch (t) { - } - }} - }), r(ut, [dt, ct, f], function (e, t, n) { - function r(e) { - this.settings = i({}, e), this.count = 0 - } - - var i = n.extend; - return r.sendRPC = function (e) { - return(new r).send(e) - }, r.prototype = {send: function (n) { - var r = n.error, o = n.success; - n = i(this.settings, n), n.success = function (t, i) { - t = e.parse(t), "undefined" == typeof t && (t = {error: "JSON Parse error."}), t.error ? r.call(n.error_scope || n.scope, t.error, i) : o.call(n.success_scope || n.scope, t.result) - }, n.error = function (e, t) { - r && r.call(n.error_scope || n.scope, e, t) - }, n.data = e.serialize({id: n.id || "c" + this.count++, method: n.method, params: n.params}), n.content_type = "application/json", t.send(n) - }}, r - }), r(ft, [v], function (e) { - return{callbacks: {}, count: 0, send: function (n) { - var r = this, i = e.DOM, o = n.count !== t ? n.count : r.count, a = "tinymce_jsonp_" + o; - r.callbacks[o] = function (e) { - i.remove(a), delete r.callbacks[o], n.callback(e) - }, i.add(i.doc.body, "script", {id: a, src: n.url, type: "text/javascript"}), r.count++ - }} - }), r(pt, [], function () { - function e() { - s = []; - for (var e in a)s.push(e); - i.length = s.length - } - - function n() { - function n(e) { - var n, r; - return r = e !== t ? d + e : i.indexOf(",", d), -1 === r || r > i.length ? null : (n = i.substring(d, r), d = r + 1, n) - } - - var r, i, s, d = 0; - if (a = {}, c) { - o.load(l), i = o.getAttribute(l) || ""; - do { - var u = n(); - if (null === u)break; - if (r = n(parseInt(u, 32) || 0), null !== r) { - if (u = n(), null === u)break; - s = n(parseInt(u, 32) || 0), r && (a[r] = s) - } - } while (null !== r); - e() - } - } - - function r() { - var t, n = ""; - if (c) { - for (var r in a)t = a[r], n += (n ? "," : "") + r.length.toString(32) + "," + r + "," + t.length.toString(32) + "," + t; - o.setAttribute(l, n); - try { - o.save(l) - } catch (i) { - } - e() - } - } - - var i, o, a, s, l, c; - try { - if (window.localStorage)return localStorage - } catch (d) { - } - return l = "tinymce", o = document.documentElement, c = !!o.addBehavior, c && o.addBehavior("#default#userData"), i = {key: function (e) { - return s[e] - }, getItem: function (e) { - return e in a ? a[e] : null - }, setItem: function (e, t) { - a[e] = "" + t, r() - }, removeItem: function (e) { - delete a[e], r() - }, clear: function () { - a = {}, r() - }}, n(), i - }), r(mt, [v, d, y, b, f, h], function (e, t, n, r, i, o) { - var a = window.tinymce; - return a.DOM = e.DOM, a.ScriptLoader = n.ScriptLoader, a.PluginManager = r.PluginManager, a.ThemeManager = r.ThemeManager, a.dom = a.dom || {}, a.dom.Event = t.Event, i.each(i, function (e, t) { - a[t] = e - }), i.each("isOpera isWebKit isIE isGecko isMac".split(" "), function (e) { - a[e] = o[e.substr(2).toLowerCase()] - }), {} - }), r(ht, [I, f], function (e, t) { - return e.extend({Defaults: {firstControlClass: "first", lastControlClass: "last"}, init: function (e) { - this.settings = t.extend({}, this.Defaults, e) - }, preRender: function (e) { - e.addClass(this.settings.containerClass, "body") - }, applyClasses: function (e) { - var t = this, n = t.settings, r, i, o; - r = e.items().filter(":visible"), i = n.firstControlClass, o = n.lastControlClass, r.each(function (e) { - e.removeClass(i).removeClass(o), n.controlClass && e.addClass(n.controlClass) - }), r.eq(0).addClass(i), r.eq(-1).addClass(o) - }, renderHtml: function (e) { - var t = this, n = t.settings, r, i = ""; - return r = e.items(), r.eq(0).addClass(n.firstControlClass), r.eq(-1).addClass(n.lastControlClass), r.each(function (e) { - n.controlClass && e.addClass(n.controlClass), i += e.renderHtml() - }), i - }, recalc: function () { - }, postRender: function () { - }}) - }), r(gt, [ht], function (e) { - return e.extend({Defaults: {containerClass: "abs-layout", controlClass: "abs-layout-item"}, recalc: function (e) { - e.items().filter(":visible").each(function (e) { - var t = e.settings; - e.layoutRect({x: t.x, y: t.y, w: t.w, h: t.h}), e.recalc && e.recalc() - }) - }, renderHtml: function (e) { - return'
    ' + this._super(e) - }}) - }), r(vt, [V, Y], function (e, t) { - return e.extend({Mixins: [t], Defaults: {classes: "widget tooltip tooltip-n"}, text: function (e) { - var t = this; - return"undefined" != typeof e ? (t._value = e, t._rendered && (t.getEl().lastChild.innerHTML = t.encode(e)), t) : t._value - }, renderHtml: function () { - var e = this, t = e.classPrefix; - return'" - }, repaint: function () { - var e = this, t, n; - t = e.getEl().style, n = e._layoutRect, t.left = n.x + "px", t.top = n.y + "px", t.zIndex = 131070 - }}) - }), r(yt, [V, vt], function (e, t) { - var n, r = e.extend({init: function (e) { - var t = this; - t._super(e), t.canFocus = !0, e.tooltip && r.tooltips !== !1 && (t.on("mouseenter", function (n) { - var r = t.tooltip().moveTo(-65535); - if (n.control == t) { - var i = r.text(e.tooltip).show().testMoveRel(t.getEl(), ["bc-tc", "bc-tl", "bc-tr"]); - r.toggleClass("tooltip-n", "bc-tc" == i), r.toggleClass("tooltip-nw", "bc-tl" == i), r.toggleClass("tooltip-ne", "bc-tr" == i), r.moveRel(t.getEl(), i) - } else r.hide() - }), t.on("mouseleave mousedown click", function () { - t.tooltip().hide() - })), t.aria("label", e.tooltip) - }, tooltip: function () { - var e = this; - return n || (n = new t({type: "tooltip"}), n.renderTo(e.getContainerElm())), n - }, active: function (e) { - var t = this, n; - return e !== n && (t.aria("pressed", e), t.toggleClass("active", e)), t._super(e) - }, disabled: function (e) { - var t = this, n; - return e !== n && (t.aria("disabled", e), t.toggleClass("disabled", e)), t._super(e) - }, postRender: function () { - var e = this, t = e.settings; - e._rendered = !0, e._super(), e.parent() || !t.width && !t.height || (e.initLayoutRect(), e.repaint()), t.autofocus && setTimeout(function () { - e.focus() - }, 0) - }, remove: function () { - this._super(), n && (n.remove(), n = null) - }}); - return r - }), r(bt, [yt], function (e) { - return e.extend({Defaults: {classes: "widget btn", role: "button"}, init: function (e) { - var t = this, n; - t.on("click mousedown", function (e) { - e.preventDefault() - }), t._super(e), n = e.size, e.subtype && t.addClass(e.subtype), n && t.addClass("btn-" + n) - }, icon: function (e) { - var t = this, n = t.classPrefix; - if ("undefined" == typeof e)return t.settings.icon; - if (t.settings.icon = e, e = e ? n + "ico " + n + "i-" + t.settings.icon : "", t._rendered) { - var r = t.getEl().firstChild, i = r.getElementsByTagName("i")[0]; - e ? (i && i == r.firstChild || (i = document.createElement("i"), r.insertBefore(i, r.firstChild)), i.className = e) : i && r.removeChild(i), t.text(t._text) - } - return t - }, repaint: function () { - var e = this.getEl().firstChild.style; - e.width = e.height = "100%", this._super() - }, renderHtml: function () { - var e = this, t = e._id, n = e.classPrefix, r = e.settings.icon, i = ""; - return e.settings.image && (r = "none", i = " style=\"background-image: url('" + e.settings.image + "')\""), r = e.settings.icon ? n + "ico " + n + "i-" + r : "", '
    " - }}) - }), r(Ct, [q], function (e) { - return e.extend({Defaults: {defaultType: "button", role: "toolbar"}, renderHtml: function () { - var e = this, t = e._layout; - return e.addClass("btn-group"), e.preRender(), t.preRender(e), '
    ' + (e.settings.html || "") + t.renderHtml(e) + "
    " - }}) - }), r(xt, [yt], function (e) { - return e.extend({Defaults: {classes: "checkbox", role: "checkbox", checked: !1}, init: function (e) { - var t = this; - t._super(e), t.on("click mousedown", function (e) { - e.preventDefault() - }), t.on("click", function (e) { - e.preventDefault(), t.disabled() || t.checked(!t.checked()) - }), t.checked(t.settings.checked) - }, checked: function (e) { - var t = this; - return"undefined" != typeof e ? (e ? t.addClass("checked") : t.removeClass("checked"), t._checked = e, t.aria("checked", e), t) : t._checked - }, value: function (e) { - return this.checked(e) - }, renderHtml: function () { - var e = this, t = e._id, n = e.classPrefix; - return'
    ' + e.encode(e._text) + "
    " - }}) - }), r(wt, [bt, X], function (e, t) { - return e.extend({showPanel: function () { - var e = this, n = e.settings; - if (e.active(!0), e.panel)e.panel.show(); else { - var r = n.panel; - r.type && (r = {layout: "grid", items: r}), r.popover = !0, r.autohide = !0, e.panel = new t(r).on("hide",function () { - e.active(!1) - }).parent(e).renderTo(e.getContainerElm()), e.panel.fire("show"), e.panel.reflow() - } - e.panel.moveRel(e.getEl(), n.popoverAlign || (e.isRtl() ? ["bc-tr", "bc-tc"] : ["bc-tl", "bc-tc"])) - }, hidePanel: function () { - var e = this; - e.panel && e.panel.hide() - }, postRender: function () { - var e = this; - return e.on("click", function (t) { - t.control === e && (e.panel && e.panel.visible() ? e.hidePanel() : e.showPanel()) - }), e._super() - }}) - }), r(_t, [wt, v], function (e, t) { - var n = t.DOM; - return e.extend({init: function (e) { - this._super(e), this.addClass("colorbutton") - }, color: function (e) { - return e ? (this._color = e, this.getEl("preview").style.backgroundColor = e, this) : this._color - }, renderHtml: function () { - var e = this, t = e._id, n = e.classPrefix, r = e.settings.icon ? n + "ico " + n + "i-" + e.settings.icon : "", i = e.settings.image ? " style=\"background-image: url('" + e.settings.image + "')\"" : ""; - return'
    ' - }, postRender: function () { - var e = this, t = e.settings.onclick; - return e.on("click", function (r) { - r.control != e || n.getParent(r.target, "." + e.classPrefix + "open") || (r.stopImmediatePropagation(), t.call(e, r)) - }), delete e.settings.onclick, e._super() - }}) - }), r(Nt, [yt, U, W], function (e, t, n) { - return e.extend({init: function (e) { - var t = this; - t._super(e), t.addClass("combobox"), t.subinput = !0, e = t.settings, e.menu = e.menu || e.values, e.menu && (e.icon = "caret"), t.on("click", function (n) { - for (var r = n.target; r;)r.id && -1 != r.id.indexOf("-open") && (t.fire("action"), e.menu && (t.showMenu(), n.keyboard && t.menu.items()[0].focus())), r = r.parentNode - }), t.on("keydown", function (e) { - "INPUT" == e.target.nodeName && 13 == e.keyCode && t.parents().reverse().each(function (n) { - return e.preventDefault(), t.fire("change"), n.hasEventListeners("submit") && n.toJSON ? (n.fire("submit", {data: n.toJSON()}), !1) : void 0 - }) - }), e.placeholder && (t.addClass("placeholder"), t.on("focusin", function () { - t._hasOnChange || (n.on(t.getEl("inp"), "change", function () { - t.fire("change") - }), t._hasOnChange = !0), t.hasClass("placeholder") && (t.getEl("inp").value = "", t.removeClass("placeholder")) - }), t.on("focusout", function () { - 0 === t.value().length && (t.getEl("inp").value = e.placeholder, t.addClass("placeholder")) - })) - }, showMenu: function () { - var e = this, n = e.settings, r; - e.menu || (r = n.menu || [], r.length ? r = {type: "menu", items: r} : r.type = r.type || "menu", e.menu = t.create(r).parent(e).renderTo(e.getContainerElm()), e.fire("createmenu"), e.menu.reflow(), e.menu.on("cancel", function (t) { - t.control === e.menu && e.focus() - }), e.menu.on("show hide",function (t) { - t.control.items().each(function (t) { - t.active(t.value() == e.value()) - }) - }).fire("show"), e.menu.on("select", function (t) { - e.value(t.control.value()) - }), e.on("focusin", function (t) { - "INPUT" == t.target.tagName && e.menu.hide() - }), e.aria("expanded", !0)), e.menu.show(), e.menu.layoutRect({w: e.layoutRect().w}), e.menu.moveRel(e.getEl(), e.isRtl() ? ["br-tr", "tr-br"] : ["bl-tl", "tl-bl"]) - }, value: function (e) { - var t = this; - return"undefined" != typeof e ? (t._value = e, t.removeClass("placeholder"), t._rendered && (t.getEl("inp").value = e), t) : t._rendered ? (e = t.getEl("inp").value, e != t.settings.placeholder ? e : "") : t._value - }, disabled: function (e) { - var t = this; - return t._rendered && "undefined" != typeof e && (t.getEl("inp").disabled = e), t._super(e) - }, focus: function () { - this.getEl("inp").focus() - }, repaint: function () { - var e = this, t = e.getEl(), r = e.getEl("open"), i = e.layoutRect(), o, a; - o = r ? i.w - n.getSize(r).width - 10 : i.w - 10; - var s = document; - return s.all && (!s.documentMode || s.documentMode <= 8) && (a = e.layoutRect().h - 2 + "px"), n.css(t.firstChild, {width: o, lineHeight: a}), e._super(), e - }, postRender: function () { - var e = this; - return n.on(this.getEl("inp"), "change", function () { - e.fire("change") - }), e._super() - }, remove: function () { - n.off(this.getEl("inp")), this._super() - }, renderHtml: function () { - var e = this, t = e._id, n = e.settings, r = e.classPrefix, i = n.value || n.placeholder || "", o, a, s = "", l = ""; - return"spellcheck"in n && (l += ' spellcheck="' + n.spellcheck + '"'), n.maxLength && (l += ' maxlength="' + n.maxLength + '"'), n.size && (l += ' size="' + n.size + '"'), n.subtype && (l += ' type="' + n.subtype + '"'), e.disabled() && (l += ' disabled="disabled"'), o = n.icon, o && "caret" != o && (o = r + "ico " + r + "i-" + n.icon), a = e._text, (o || a) && (s = '
    ", e.addClass("has-open")), '
    " + s + "
    " - }}) - }), r(Et, [yt, J], function (e, t) { - return e.extend({init: function (e) { - var t = this; - e.delimiter || (e.delimiter = "\xbb"), t._super(e), t.addClass("path"), t.canFocus = !0, t.on("click", function (e) { - var n, r = e.target; - (n = r.getAttribute("data-index")) && t.fire("select", {value: t.data()[n], index: n}) - }) - }, focus: function () { - var e = this; - return e.keyNav = new t({root: e, enableLeftRight: !0}), e.keyNav.focusFirst(), e - }, data: function (e) { - var t = this; - return"undefined" != typeof e ? (t._data = e, t.update(), t) : t._data - }, update: function () { - this.innerHtml(this._getPathHtml()) - }, postRender: function () { - var e = this; - e._super(), e.data(e.settings.data) - }, renderHtml: function () { - var e = this; - return'
    ' + e._getPathHtml() + "
    " - }, _getPathHtml: function () { - var e = this, t = e._data || [], n, r, i = "", o = e.classPrefix; - for (n = 0, r = t.length; r > n; n++)i += (n > 0 ? '" : "") + '
    ' + t[n].name + "
    "; - return i || (i = '
     
    '), i - }}) - }), r(kt, [Et, st], function (e, t) { - return e.extend({postRender: function () { - function e(e) { - if (1 === e.nodeType) { - if ("BR" == e.nodeName || e.getAttribute("data-mce-bogus"))return!0; - if ("bookmark" === e.getAttribute("data-mce-type"))return!0 - } - return!1 - } - - var n = this, r = t.activeEditor; - return n.on("select", function (t) { - var n = [], i, o = r.getBody(); - for (r.focus(), i = r.selection.getStart(); i && i != o;)e(i) || n.push(i), i = i.parentNode; - r.selection.select(n[n.length - 1 - t.index]), r.nodeChanged() - }), r.on("nodeChange", function (t) { - for (var i = [], o = t.parents, a = o.length; a--;)if (1 == o[a].nodeType && !e(o[a])) { - var s = r.fire("ResolveName", {name: o[a].nodeName.toLowerCase(), target: o[a]}); - i.push({name: s.name}) - } - n.data(i) - }), n._super() - }}) - }), r(St, [q], function (e) { - return e.extend({Defaults: {layout: "flex", align: "center", defaults: {flex: 1}}, renderHtml: function () { - var e = this, t = e._layout, n = e.classPrefix; - return e.addClass("formitem"), t.preRender(e), '
    ' + (e.settings.title ? '
    ' + e.settings.title + "
    " : "") + '
    ' + (e.settings.html || "") + t.renderHtml(e) + "
    " - }}) - }), r(Tt, [q, St], function (e, t) { - return e.extend({Defaults: {containerCls: "form", layout: "flex", direction: "column", align: "stretch", flex: 1, padding: 20, labelGap: 30, spacing: 10, callbacks: {submit: function () { - this.submit() - }}}, preRender: function () { - var e = this, n = e.items(); - n.each(function (n) { - var r, i = n.settings.label; - i && (r = new t({layout: "flex", autoResize: "overflow", defaults: {flex: 1}, items: [ - {type: "label", text: i, flex: 0, forId: n._id, disabled: n.disabled()} - ]}), r.type = "formitem", "undefined" == typeof n.settings.flex && (n.settings.flex = 1), e.replace(n, r), r.add(n)) - }) - }, recalcLabels: function () { - var e = this, t = 0, n = [], r, i; - if (e.settings.labelGapCalc !== !1)for (e.items().filter("formitem").each(function (e) { - var r = e.items()[0], i = r.getEl().clientWidth; - t = i > t ? i : t, n.push(r) - }), i = e.settings.labelGap || 0, r = n.length; r--;)n[r].settings.minWidth = t + i - }, visible: function (e) { - var t = this._super(e); - return e === !0 && this._rendered && this.recalcLabels(), t - }, submit: function () { - return this.fire("submit", {data: this.toJSON()}) - }, postRender: function () { - var e = this; - e._super(), e.recalcLabels(), e.fromJSON(e.settings.data) - }}) - }), r(Rt, [Tt], function (e) { - return e.extend({Defaults: {containerCls: "fieldset", layout: "flex", direction: "column", align: "stretch", flex: 1, padding: "25 15 5 15", labelGap: 30, spacing: 10, border: 1}, renderHtml: function () { - var e = this, t = e._layout, n = e.classPrefix; - return e.preRender(), t.preRender(e), '
    ' + (e.settings.title ? '' + e.settings.title + "" : "") + '
    ' + (e.settings.html || "") + t.renderHtml(e) + "
    " - }}) - }), r(At, [Nt], function (e) { - return e.extend({init: function (e) { - var t = this, n = tinymce.activeEditor, r; - e.spellcheck = !1, r = n.settings.file_browser_callback, r && (e.icon = "browse", e.onaction = function () { - r(t.getEl("inp").id, t.getEl("inp").value, e.filetype, window) - }), t._super(e) - }}) - }), r(Bt, [gt], function (e) { - return e.extend({recalc: function (e) { - var t = e.layoutRect(), n = e.paddingBox(); - e.items().filter(":visible").each(function (e) { - e.layoutRect({x: n.left, y: n.top, w: t.innerW - n.right - n.left, h: t.innerH - n.top - n.bottom}), e.recalc && e.recalc() - }) - }}) - }), r(Lt, [gt], function (e) { - return e.extend({recalc: function (e) { - var t, n, r, i, o, a, s, l, c, d, u, f, p, m, h, g, v = [], y, b, C, x, w, _, N, E, k, S, T, R, A, B, L, H, M, D, P, O, I, z, F, W, V = Math.max, U = Math.min; - for (r = e.items().filter(":visible"), i = e.layoutRect(), o = e._paddingBox, a = e.settings, f = e.isRtl() ? a.direction || "row-reversed" : a.direction, s = a.align, l = e.isRtl() ? a.pack || "end" : a.pack, c = a.spacing || 0, ("row-reversed" == f || "column-reverse" == f) && (r = r.set(r.toArray().reverse()), f = f.split("-")[0]), "column" == f ? (k = "y", N = "h", E = "minH", S = "maxH", R = "innerH", T = "top", A = "bottom", B = "deltaH", L = "contentH", I = "left", D = "w", H = "x", M = "innerW", P = "minW", O = "maxW", z = "right", F = "deltaW", W = "contentW") : (k = "x", N = "w", E = "minW", S = "maxW", R = "innerW", T = "left", A = "right", B = "deltaW", L = "contentW", I = "top", D = "h", H = "y", M = "innerH", P = "minH", O = "maxH", z = "bottom", F = "deltaH", W = "contentH"), u = i[R] - o[T] - o[T], _ = d = 0, t = 0, n = r.length; n > t; t++)p = r[t], m = p.layoutRect(), h = p.settings, g = h.flex, u -= n - 1 > t ? c : 0, g > 0 && (d += g, m[S] && v.push(p), m.flex = g), u -= m[E], y = o[I] + m[P] + o[z], y > _ && (_ = y); - if (x = {}, x[E] = 0 > u ? i[E] - u + i[B] : i[R] - u + i[B], x[P] = _ + i[F], x[L] = i[R] - u, x[W] = _, x.minW = U(x.minW, i.maxW), x.minH = U(x.minH, i.maxH), x.minW = V(x.minW, i.startMinWidth), x.minH = V(x.minH, i.startMinHeight), !i.autoResize || x.minW == i.minW && x.minH == i.minH) { - for (C = u / d, t = 0, n = v.length; n > t; t++)p = v[t], m = p.layoutRect(), b = m[S], y = m[E] + m.flex * C, y > b ? (u -= m[S] - m[E], d -= m.flex, m.flex = 0, m.maxFlexSize = b) : m.maxFlexSize = 0; - for (C = u / d, w = o[T], x = {}, 0 === d && ("end" == l ? w = u + o[T] : "center" == l ? (w = Math.round(i[R] / 2 - (i[R] - u) / 2) + o[T], 0 > w && (w = o[T])) : "justify" == l && (w = o[T], c = Math.floor(u / (r.length - 1)))), x[H] = o[I], t = 0, n = r.length; n > t; t++)p = r[t], m = p.layoutRect(), y = m.maxFlexSize || m[E], "center" === s ? x[H] = Math.round(i[M] / 2 - m[D] / 2) : "stretch" === s ? (x[D] = V(m[P] || 0, i[M] - o[I] - o[z]), x[H] = o[I]) : "end" === s && (x[H] = i[M] - m[D] - o.top), m.flex > 0 && (y += m.flex * C), x[N] = y, x[k] = w, p.layoutRect(x), p.recalc && p.recalc(), w += y + c - } else if (x.w = x.minW, x.h = x.minH, e.layoutRect(x), this.recalc(e), null === e._lastRect) { - var q = e.parent(); - q && (q._lastRect = null, q.recalc()) - } - }}) - }), r(Ht, [ht], function (e) { - return e.extend({Defaults: {containerClass: "flow-layout", controlClass: "flow-layout-item", endClass: "break"}, recalc: function (e) { - e.items().filter(":visible").each(function (e) { - e.recalc && e.recalc() - }) - }}) - }), r(Mt, [V, yt, X, f, st, h], function (e, t, n, r, i, o) { - function a(e) { - function t(t) { - function n(e) { - return e.replace(/%(\w+)/g, "") - } - - var r, i, o = e.dom, a = "", l, c; - return c = e.settings.preview_styles, c === !1 ? "" : (c || (c = "font-family font-size font-weight font-style text-decoration text-transform color background-color border border-radius outline text-shadow"), (t = e.formatter.get(t)) ? (t = t[0], r = t.block || t.inline || "span", i = o.create(r), s(t.styles, function (e, t) { - e = n(e), e && o.setStyle(i, t, e) - }), s(t.attributes, function (e, t) { - e = n(e), e && o.setAttrib(i, t, e) - }), s(t.classes, function (e) { - e = n(e), o.hasClass(i, e) || o.addClass(i, e) - }), e.fire("PreviewFormats"), o.setStyles(i, {position: "absolute", left: -65535}), e.getBody().appendChild(i), l = o.getStyle(e.getBody(), "fontSize", !0), l = /px$/.test(l) ? parseInt(l, 10) : 0, s(c.split(" "), function (t) { - var n = o.getStyle(i, t, !0); - if (!("background-color" == t && /transparent|rgba\s*\([^)]+,\s*0\)/.test(n) && (n = o.getStyle(e.getBody(), t, !0), "#ffffff" == o.toHex(n).toLowerCase()) || "color" == t && "#000000" == o.toHex(n).toLowerCase())) { - if ("font-size" == t && /em|%$/.test(n)) { - if (0 === l)return; - n = parseFloat(n, 10) / (/%$/.test(n) ? 100 : 1), n = n * l + "px" - } - "border" == t && n && (a += "padding:0 2px;"), a += t + ":" + n + ";" - } - }), e.fire("AfterPreviewFormats"), o.remove(i), a) : void 0) - } - - function r(t, n) { - return function () { - var r = this; - e.on("nodeChange", function (i) { - var o = e.formatter, a = null; - s(i.parents, function (e) { - return s(t, function (t) { - return n ? o.matchNode(e, n, {value: t.value}) && (a = t.value) : o.matchNode(e, t.value) && (a = t.value), a ? !1 : void 0 - }), a ? !1 : void 0 - }), r.value(a) - }) - } - } - - function i(e) { - e = e.split(";"); - for (var t = e.length; t--;)e[t] = e[t].split("="); - return e - } - - function o() { - function n(e) { - var t = []; - if (e)return s(e, function (e) { - var r = {text: e.title, icon: e.icon}; - if (e.items)r.menu = n(e.items); else { - var a = e.format || "custom" + i++; - e.format || (e.name = a, o.push(e)), r.format = a - } - t.push(r) - }), t - } - - function r() { - var t; - return t = n(e.settings.style_formats_merge ? e.settings.style_formats ? a.concat(e.settings.style_formats) : a : e.settings.style_formats || a) - } - - var i = 0, o = [], a = [ - {title: "Headers", items: [ - {title: "Header 1", format: "h1"}, - {title: "Header 2", format: "h2"}, - {title: "Header 3", format: "h3"}, - {title: "Header 4", format: "h4"}, - {title: "Header 5", format: "h5"}, - {title: "Header 6", format: "h6"} - ]}, - {title: "Inline", items: [ - {title: "Bold", icon: "bold", format: "bold"}, - {title: "Italic", icon: "italic", format: "italic"}, - {title: "Underline", icon: "underline", format: "underline"}, - {title: "Strikethrough", icon: "strikethrough", format: "strikethrough"}, - {title: "Superscript", icon: "superscript", format: "superscript"}, - {title: "Subscript", icon: "subscript", format: "subscript"}, - {title: "Code", icon: "code", format: "code"} - ]}, - {title: "Blocks", items: [ - {title: "Paragraph", format: "p"}, - {title: "Blockquote", format: "blockquote"}, - {title: "Div", format: "div"}, - {title: "Pre", format: "pre"} - ]}, - {title: "Alignment", items: [ - {title: "Left", icon: "alignleft", format: "alignleft"}, - {title: "Center", icon: "aligncenter", format: "aligncenter"}, - {title: "Right", icon: "alignright", format: "alignright"}, - {title: "Justify", icon: "alignjustify", format: "alignjustify"} - ]} - ]; - return e.on("init", function () { - s(o, function (t) { - e.formatter.register(t.name, t) - }) - }), {type: "menu", items: r(), onPostRender: function (t) { - e.fire("renderFormatsMenu", {control: t.control}) - }, itemDefaults: {preview: !0, textStyle: function () { - return this.settings.format ? t(this.settings.format) : void 0 - }, onPostRender: function () { - var t = this, n = this.settings.format; - n && t.parent().on("show", function () { - t.disabled(!e.formatter.canApply(n)), t.active(e.formatter.match(n)) - }) - }, onclick: function () { - this.settings.format && f(this.settings.format) - }}} - } - - function a() { - return e.undoManager ? e.undoManager.hasUndo() : !1 - } - - function l() { - return e.undoManager ? e.undoManager.hasRedo() : !1 - } - - function c() { - var t = this; - t.disabled(!a()), e.on("Undo Redo AddUndo TypingUndo", function () { - t.disabled(!a()) - }) - } - - function d() { - var t = this; - t.disabled(!l()), e.on("Undo Redo AddUndo TypingUndo", function () { - t.disabled(!l()) - }) - } - - function u() { - var t = this; - e.on("VisualAid", function (e) { - t.active(e.hasVisual) - }), t.active(e.hasVisual) - } - - function f(t) { - t.control && (t = t.control.value()), t && e.execCommand("mceToggleFormat", !1, t) - } - - var p; - p = o(), s({bold: "Bold", italic: "Italic", underline: "Underline", strikethrough: "Strikethrough", subscript: "Subscript", superscript: "Superscript"}, function (t, n) { - e.addButton(n, {tooltip: t, onPostRender: function () { - var t = this; - e.formatter ? e.formatter.formatChanged(n, function (e) { - t.active(e) - }) : e.on("init", function () { - e.formatter.formatChanged(n, function (e) { - t.active(e) - }) - }) - }, onclick: function () { - f(n) - }}) - }), s({outdent: ["Decrease indent", "Outdent"], indent: ["Increase indent", "Indent"], cut: ["Cut", "Cut"], copy: ["Copy", "Copy"], paste: ["Paste", "Paste"], help: ["Help", "mceHelp"], selectall: ["Select all", "SelectAll"], hr: ["Insert horizontal rule", "InsertHorizontalRule"], removeformat: ["Clear formatting", "RemoveFormat"], visualaid: ["Visual aids", "mceToggleVisualAid"], newdocument: ["New document", "mceNewDocument"]}, function (t, n) { - e.addButton(n, {tooltip: t[0], cmd: t[1]}) - }), s({blockquote: ["Blockquote", "mceBlockQuote"], numlist: ["Numbered list", "InsertOrderedList"], bullist: ["Bullet list", "InsertUnorderedList"], subscript: ["Subscript", "Subscript"], superscript: ["Superscript", "Superscript"], alignleft: ["Align left", "JustifyLeft"], aligncenter: ["Align center", "JustifyCenter"], alignright: ["Align right", "JustifyRight"], alignjustify: ["Justify", "JustifyFull"]}, function (t, n) { - e.addButton(n, {tooltip: t[0], cmd: t[1], onPostRender: function () { - var t = this; - e.formatter ? e.formatter.formatChanged(n, function (e) { - t.active(e) - }) : e.on("init", function () { - e.formatter.formatChanged(n, function (e) { - t.active(e) - }) - }) - }}) - }), e.addButton("undo", {tooltip: "Undo", onPostRender: c, cmd: "undo"}), e.addButton("redo", {tooltip: "Redo", onPostRender: d, cmd: "redo"}), e.addMenuItem("newdocument", {text: "New document", shortcut: "Ctrl+N", icon: "newdocument", cmd: "mceNewDocument"}), e.addMenuItem("undo", {text: "Undo", icon: "undo", shortcut: "Ctrl+Z", onPostRender: c, cmd: "undo"}), e.addMenuItem("redo", {text: "Redo", icon: "redo", shortcut: "Ctrl+Y", onPostRender: d, cmd: "redo"}), e.addMenuItem("visualaid", {text: "Visual aids", selectable: !0, onPostRender: u, cmd: "mceToggleVisualAid"}), s({cut: ["Cut", "Cut", "Ctrl+X"], copy: ["Copy", "Copy", "Ctrl+C"], paste: ["Paste", "Paste", "Ctrl+V"], selectall: ["Select all", "SelectAll", "Ctrl+A"], bold: ["Bold", "Bold", "Ctrl+B"], italic: ["Italic", "Italic", "Ctrl+I"], underline: ["Underline", "Underline"], strikethrough: ["Strikethrough", "Strikethrough"], subscript: ["Subscript", "Subscript"], superscript: ["Superscript", "Superscript"], removeformat: ["Clear formatting", "RemoveFormat"]}, function (t, n) { - e.addMenuItem(n, {text: t[0], icon: n, shortcut: t[2], cmd: t[1]}) - }), e.on("mousedown", function () { - n.hideAll() - }), e.addButton("styleselect", {type: "menubutton", text: "Formats", menu: p}), e.addButton("formatselect", function () { - var n = [], o = i(e.settings.block_formats || "Paragraph=p;Address=address;Pre=pre;Header 1=h1;Header 2=h2;Header 3=h3;Header 4=h4;Header 5=h5;Header 6=h6"); - return s(o, function (e) { - n.push({text: e[0], value: e[1], textStyle: function () { - return t(e[1]) - }}) - }), {type: "listbox", text: o[0][0], values: n, fixedWidth: !0, onselect: f, onPostRender: r(n)} - }), e.addButton("fontselect", function () { - var t = "Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats", n = [], o = i(e.settings.font_formats || t); - return s(o, function (e) { - n.push({text: {raw: e[0]}, value: e[1], textStyle: -1 == e[1].indexOf("dings") ? "font-family:" + e[1] : ""}) - }), {type: "listbox", text: "Font Family", tooltip: "Font Family", values: n, fixedWidth: !0, onPostRender: r(n, "fontname"), onselect: function (t) { - t.control.settings.value && e.execCommand("FontName", !1, t.control.settings.value) - }} - }), e.addButton("fontsizeselect", function () { - var t = [], n = "8pt 10pt 12pt 14pt 18pt 24pt 36pt", i = e.settings.fontsize_formats || n; - return s(i.split(" "), function (e) { - t.push({text: e, value: e}) - }), {type: "listbox", text: "Font Sizes", tooltip: "Font Sizes", values: t, fixedWidth: !0, onPostRender: r(t, "fontsize"), onclick: function (t) { - t.control.settings.value && e.execCommand("FontSize", !1, t.control.settings.value) - }} - }), e.addMenuItem("formats", {text: "Formats", menu: p}) - } - - var s = r.each; - i.on("AddEditor", function (t) { - t.editor.rtl && (e.rtl = !0), a(t.editor) - }), e.translate = function (e) { - return i.translate(e) - }, t.tooltips = !o.iOS - }), r(Dt, [gt], function (e) { - return e.extend({recalc: function (e) { - var t = e.settings, n, r, i, o, a, s, l, c, d, u, f, p, m, h, g, v, y, b, C, x, w, _, N = [], E = [], k, S, T, R, A, B; - for (t = e.settings, i = e.items().filter(":visible"), o = e.layoutRect(), r = t.columns || Math.ceil(Math.sqrt(i.length)), n = Math.ceil(i.length / r), y = t.spacingH || t.spacing || 0, b = t.spacingV || t.spacing || 0, C = t.alignH || t.align, x = t.alignV || t.align, g = e._paddingBox, C && "string" == typeof C && (C = [C]), x && "string" == typeof x && (x = [x]), u = 0; r > u; u++)N.push(0); - for (f = 0; n > f; f++)E.push(0); - for (f = 0; n > f; f++)for (u = 0; r > u && (d = i[f * r + u], d); u++)c = d.layoutRect(), k = c.minW, S = c.minH, N[u] = k > N[u] ? k : N[u], E[f] = S > E[f] ? S : E[f]; - for (A = o.innerW - g.left - g.right, w = 0, u = 0; r > u; u++)w += N[u] + (u > 0 ? y : 0), A -= (u > 0 ? y : 0) + N[u]; - for (B = o.innerH - g.top - g.bottom, _ = 0, f = 0; n > f; f++)_ += E[f] + (f > 0 ? b : 0), B -= (f > 0 ? b : 0) + E[f]; - if (w += g.left + g.right, _ += g.top + g.bottom, l = {}, l.minW = w + (o.w - o.innerW), l.minH = _ + (o.h - o.innerH), l.contentW = l.minW - o.deltaW, l.contentH = l.minH - o.deltaH, l.minW = Math.min(l.minW, o.maxW), l.minH = Math.min(l.minH, o.maxH), l.minW = Math.max(l.minW, o.startMinWidth), l.minH = Math.max(l.minH, o.startMinHeight), !o.autoResize || l.minW == o.minW && l.minH == o.minH) { - o.autoResize && (l = e.layoutRect(l), l.contentW = l.minW - o.deltaW, l.contentH = l.minH - o.deltaH); - var L; - L = "start" == t.packV ? 0 : B > 0 ? Math.floor(B / n) : 0; - var H = 0, M = t.flexWidths; - if (M)for (u = 0; u < M.length; u++)H += M[u]; else H = r; - var D = A / H; - for (u = 0; r > u; u++)N[u] += M ? M[u] * D : D; - for (m = g.top, f = 0; n > f; f++) { - for (p = g.left, s = E[f] + L, u = 0; r > u && (d = i[f * r + u], d); u++)h = d.settings, c = d.layoutRect(), a = Math.max(N[u], c.startMinWidth), T = R = 0, c.x = p, c.y = m, v = h.alignH || (C ? C[u] || C[0] : null), "center" == v ? c.x = p + a / 2 - c.w / 2 : "right" == v ? c.x = p + a - c.w : "stretch" == v && (c.w = a), v = h.alignV || (x ? x[u] || x[0] : null), "center" == v ? c.y = m + s / 2 - c.h / 2 : "bottom" == v ? c.y = m + s - c.h : "stretch" == v && (c.h = s), d.layoutRect(c), p += a + y, d.recalc && d.recalc(); - m += s + b - } - } else if (l.w = l.minW, l.h = l.minH, e.layoutRect(l), this.recalc(e), null === e._lastRect) { - var P = e.parent(); - P && (P._lastRect = null, P.recalc()) - } - }}) - }), r(Pt, [yt], function (e) { - return e.extend({renderHtml: function () { - var e = this; - return e.addClass("iframe"), e.canFocus = !1, '' - }, src: function (e) { - this.getEl().src = e - }, html: function (e, t) { - var n = this, r = this.getEl().contentWindow.document.body; - return r ? (r.innerHTML = e, t && t()) : setTimeout(function () { - n.html(e) - }, 0), this - }}) - }), r(Ot, [yt, W], function (e, t) { - return e.extend({init: function (e) { - var t = this; - t._super(e), t.addClass("widget"), t.addClass("label"), t.canFocus = !1, e.multiline && t.addClass("autoscroll"), e.strong && t.addClass("strong") - }, initLayoutRect: function () { - var e = this, n = e._super(); - if (e.settings.multiline) { - var r = t.getSize(e.getEl()); - r.width > n.maxW && (n.minW = n.maxW, e.addClass("multiline")), e.getEl().style.width = n.minW + "px", n.startMinH = n.h = n.minH = Math.min(n.maxH, t.getSize(e.getEl()).height) - } - return n - }, repaint: function () { - var e = this; - return e.settings.multiline || (e.getEl().style.lineHeight = e.layoutRect().h + "px"), e._super() - }, text: function (e) { - var t = this; - return t._rendered && e && this.innerHtml(t.encode(e)), t._super(e) - }, renderHtml: function () { - var e = this, t = e.settings.forId; - return'" - }}) - }), r(It, [q, J], function (e, t) { - return e.extend({Defaults: {role: "toolbar", layout: "flow"}, init: function (e) { - var t = this; - t._super(e), t.addClass("toolbar") - }, postRender: function () { - var e = this; - return e.items().addClass("toolbar-item"), e.keyNav = new t({root: e, enableLeftRight: !0}), e._super() - }}) - }), r(zt, [It], function (e) { - return e.extend({Defaults: {role: "menubar", containerCls: "menubar", defaults: {type: "menubutton"}}}) - }), r(Ft, [bt, U, zt], function (e, t, n) { - function r(e, t) { - for (; e;) { - if (t === e)return!0; - e = e.parentNode - } - return!1 - } - - var i = e.extend({init: function (e) { - var t = this; - t._renderOpen = !0, t._super(e), t.addClass("menubtn"), e.fixedWidth && t.addClass("fixed-width"), t.aria("haspopup", !0), t.hasPopup = !0 - }, showMenu: function () { - var e = this, n = e.settings, r; - return e.menu && e.menu.visible() ? e.hideMenu() : (e.menu || (r = n.menu || [], r.length ? r = {type: "menu", items: r} : r.type = r.type || "menu", e.menu = t.create(r).parent(e).renderTo(e.getContainerElm()), e.fire("createmenu"), e.menu.reflow(), e.menu.on("cancel", function (t) { - t.control === e.menu && e.focus() - }), e.menu.on("show hide",function (t) { - t.control == e.menu && e.activeMenu("show" == t.type) - }).fire("show"), e.aria("expanded", !0)), e.menu.show(), e.menu.layoutRect({w: e.layoutRect().w}), void e.menu.moveRel(e.getEl(), e.isRtl() ? ["br-tr", "tr-br"] : ["bl-tl", "tl-bl"])) - }, hideMenu: function () { - var e = this; - e.menu && (e.menu.items().each(function (e) { - e.hideMenu && e.hideMenu() - }), e.menu.hide(), e.aria("expanded", !1)) - }, activeMenu: function (e) { - this.toggleClass("active", e) - }, renderHtml: function () { - var e = this, t = e._id, r = e.classPrefix, i = e.settings.icon ? r + "ico " + r + "i-" + e.settings.icon : ""; - return e.aria("role", e.parent()instanceof n ? "menuitem" : "button"), '
    ' - }, postRender: function () { - var e = this; - return e.on("click", function (t) { - t.control === e && r(t.target, e.getEl()) && (e.showMenu(), t.keyboard && e.menu.items()[0].focus()) - }), e.on("mouseenter", function (t) { - var n = t.control, r = e.parent(), o; - n && r && n instanceof i && n.parent() == r && (r.items().filter("MenuButton").each(function (e) { - e.hideMenu && e != n && (e.menu && e.menu.visible() && (o = !0), e.hideMenu()) - }), o && (n.focus(), n.showMenu())) - }), e._super() - }, text: function (e) { - var t = this, n, r; - if (t._rendered)for (r = t.getEl("open").getElementsByTagName("span"), n = 0; n < r.length; n++)r[n].innerHTML = (t.settings.icon && e ? "\xa0" : "") + t.encode(e); - return this._super(e) - }, remove: function () { - this._super(), this.menu && this.menu.remove() - }}); - return i - }), r(Wt, [Ft], function (e) { - return e.extend({init: function (e) { - var t = this, n, r, i, o, a; - if (t._values = n = e.values, n) { - for (r = 0; r < n.length; r++)i = n[r].selected || e.value === n[r].value, i && (o = o || n[r].text, t._value = n[r].value); - e.menu = n - } - e.text = e.text || o || n[0].text, t._super(e), t.addClass("listbox"), t.on("select", function (n) { - var r = n.control; - a && (n.lastControl = a), e.multiple ? r.active(!r.active()) : t.value(n.control.settings.value), a = r - }) - }, value: function (e) { - function t(e, n) { - e.items().each(function (e) { - r = e.value() === n, r && (i = i || e.text()), e.active(r), e.menu && t(e.menu, n) - }) - } - - var n = this, r, i, o, a; - if ("undefined" != typeof e) { - if (n.menu)t(n.menu, e); else for (o = n.settings.menu, a = 0; a < o.length; a++)r = o[a].value == e, r && (i = i || o[a].text), o[a].active = r; - n.text(i || this.settings.text) - } - return n._super(e) - }}) - }), r(Vt, [yt, U, h], function (e, t, n) { - return e.extend({Defaults: {border: 0, role: "menuitem"}, init: function (e) { - var t = this; - t.hasPopup = !0, t._super(e), e = t.settings, t.addClass("menu-item"), e.menu && t.addClass("menu-item-expand"), e.preview && t.addClass("menu-item-preview"), ("-" === t._text || "|" === t._text) && (t.addClass("menu-item-sep"), t.aria("role", "separator"), t.canFocus = !1, t._text = "-"), e.selectable && (t.aria("role", "menuitemcheckbox"), t.aria("checked", !0), t.addClass("menu-item-checkbox"), e.icon = "selected"), e.preview || e.selectable || t.addClass("menu-item-normal"), t.on("mousedown", function (e) { - e.preventDefault() - }), t.on("mouseenter click", function (n) { - n.control === t && (e.menu || "click" !== n.type ? (t.showMenu(), n.keyboard && setTimeout(function () { - t.menu.items()[0].focus() - }, 0)) : (t.parent().hideAll(), t.fire("cancel"), t.fire("select"))) - }), e.menu && t.aria("haspopup", !0) - }, hasMenus: function () { - return!!this.settings.menu - }, showMenu: function () { - var e = this, n = e.settings, r, i = e.parent(); - if (i.items().each(function (t) { - t !== e && t.hideMenu() - }), n.menu) { - r = e.menu, r ? r.show() : (r = n.menu, r.length ? r = {type: "menu", items: r} : r.type = r.type || "menu", i.settings.itemDefaults && (r.itemDefaults = i.settings.itemDefaults), r = e.menu = t.create(r).parent(e).renderTo(e.getContainerElm()), r.reflow(), r.fire("show"), r.on("cancel", function () { - e.focus() - }), r.on("hide", function (t) { - t.control === r && e.removeClass("selected") - })), r._parentMenu = i, r.addClass("menu-sub"); - var o = r.testMoveRel(e.getEl(), e.isRtl() ? ["tl-tr", "bl-br", "tr-tl", "br-bl"] : ["tr-tl", "br-bl", "tl-tr", "bl-br"]); - r.moveRel(e.getEl(), o), r.rel = o, o = "menu-sub-" + o, r.removeClass(r._lastRel), r.addClass(o), r._lastRel = o, e.addClass("selected"), e.aria("expanded", !0) - } - }, hideMenu: function () { - var e = this; - return e.menu && (e.menu.items().each(function (e) { - e.hideMenu && e.hideMenu() - }), e.menu.hide(), e.aria("expanded", !1)), e - }, renderHtml: function () { - var e = this, t = e._id, r = e.settings, i = e.classPrefix, o = e.encode(e._text), a = e.settings.icon, s = "", l = r.shortcut; - return a && e.parent().addClass("menu-has-icons"), r.image && (a = "none", s = " style=\"background-image: url('" + r.image + "')\""), l && n.mac && (l = l.replace(/ctrl\+alt\+/i, "⌥⌘"), l = l.replace(/ctrl\+/i, "⌘"), l = l.replace(/alt\+/i, "⌥"), l = l.replace(/shift\+/i, "⇧")), a = i + "ico " + i + "i-" + (e.settings.icon || "none"), '
    ' + ("-" !== o ? ' " : "") + ("-" !== o ? '' + o + "" : "") + (l ? '
    ' + l + "
    " : "") + (r.menu ? '
    ' : "") + "
    " - }, postRender: function () { - var e = this, t = e.settings, n = t.textStyle; - if ("function" == typeof n && (n = n.call(this)), n) { - var r = e.getEl("text"); - r && r.setAttribute("style", n) - } - return e._super() - }, remove: function () { - this._super(), this.menu && this.menu.remove() - }}) - }), r(Ut, [X, J, Vt, f], function (e, t, n, r) { - var i = e.extend({Defaults: {defaultType: "menuitem", border: 1, layout: "stack", role: "menu"}, init: function (e) { - var i = this; - if (e.autohide = !0, e.constrainToViewport = !0, e.itemDefaults)for (var o = e.items, a = o.length; a--;)o[a] = r.extend({}, e.itemDefaults, o[a]); - i._super(e), i.addClass("menu"), i.keyNav = new t({root: i, enableUpDown: !0, enableLeftRight: !0, leftAction: function () { - i.parent()instanceof n && i.keyNav.cancel() - }, onCancel: function () { - i.fire("cancel", {}, !1), i.hide() - }}) - }, repaint: function () { - return this.toggleClass("menu-align", !0), this._super(), this.getEl().style.height = "", this.getEl("body").style.height = "", this - }, cancel: function () { - var e = this; - e.hideAll(), e.fire("cancel"), e.fire("select") - }, hideAll: function () { - var e = this; - return this.find("menuitem").exec("hideMenu"), e._super() - }, preRender: function () { - var e = this; - return e.items().each(function (t) { - var n = t.settings; - return n.icon || n.selectable ? (e._hasIcons = !0, !1) : void 0 - }), e._super() - }}); - return i - }), r(qt, [xt], function (e) { - return e.extend({Defaults: {classes: "radio", role: "radio"}}) - }), r(jt, [yt, j], function (e, t) { - return e.extend({renderHtml: function () { - var e = this, t = e.classPrefix; - return e.addClass("resizehandle"), "both" == e.settings.direction && e.addClass("resizehandle-both"), e.canFocus = !1, '
    ' - }, postRender: function () { - var e = this; - e._super(), e.resizeDragHelper = new t(this._id, {start: function () { - e.fire("ResizeStart") - }, drag: function (t) { - "both" != e.settings.direction && (t.deltaX = 0), e.fire("Resize", t) - }, stop: function () { - e.fire("ResizeEnd") - }}) - }, remove: function () { - return this.resizeDragHelper && this.resizeDragHelper.destroy(), this._super() - }}) - }), r($t, [yt], function (e) { - return e.extend({renderHtml: function () { - var e = this; - return e.addClass("spacer"), e.canFocus = !1, '
    ' - }}) - }), r(Kt, [Ft, W], function (e, t) { - return e.extend({Defaults: {classes: "widget btn splitbtn", role: "splitbutton"}, repaint: function () { - var e = this, n = e.getEl(), r = e.layoutRect(), i, o; - return e._super(), i = n.firstChild, o = n.lastChild, t.css(i, {width: r.w - t.getSize(o).width, height: r.h - 2}), t.css(o, {height: r.h - 2}), e - }, activeMenu: function (e) { - var n = this; - t.toggleClass(n.getEl().lastChild, n.classPrefix + "active", e) - }, renderHtml: function () { - var e = this, t = e._id, n = e.classPrefix, r = e.settings.icon ? n + "ico " + n + "i-" + e.settings.icon : ""; - return'
    ' - }, postRender: function () { - var e = this, t = e.settings.onclick; - return e.on("click", function (e) { - var n = e.target; - if (e.control == this)for (; n;) { - if ("BUTTON" == n.nodeName && -1 == n.className.indexOf("open"))return e.stopImmediatePropagation(), void t.call(this, e); - n = n.parentNode - } - }), delete e.settings.onclick, e._super() - }}) - }), r(Yt, [Ht], function (e) { - return e.extend({Defaults: {containerClass: "stack-layout", controlClass: "stack-layout-item", endClass: "break"}}) - }), r(Gt, [K, W], function (e, t) { - return e.extend({lastIdx: 0, Defaults: {layout: "absolute", defaults: {type: "panel"}}, activateTab: function (e) { - this.activeTabId && t.removeClass(this.getEl(this.activeTabId), this.classPrefix + "active"), this.activeTabId = "t" + e, t.addClass(this.getEl("t" + e), this.classPrefix + "active"), e != this.lastIdx && (this.items()[this.lastIdx].hide(), this.lastIdx = e), this.items()[e].show().fire("showtab"), this.reflow() - }, renderHtml: function () { - var e = this, t = e._layout, n = "", r = e.classPrefix; - return e.preRender(), t.preRender(e), e.items().each(function (t, i) { - n += '
    ' + e.encode(t.settings.title) + "
    " - }), '
    ' + n + '
    ' + t.renderHtml(e) + "
    " - }, postRender: function () { - var e = this; - e._super(), e.settings.activeTab = e.settings.activeTab || 0, e.activateTab(e.settings.activeTab), this.on("click", function (t) { - var n = t.target.parentNode; - if (t.target.parentNode.id == e._id + "-head")for (var r = n.childNodes.length; r--;)n.childNodes[r] == t.target && e.activateTab(r) - }) - }, initLayoutRect: function () { - var e = this, n, r, i; - r = t.getSize(e.getEl("head")).width, r = 0 > r ? 0 : r, i = 0, e.items().each(function (t, n) { - r = Math.max(r, t.layoutRect().minW), i = Math.max(i, t.layoutRect().minH), e.settings.activeTab != n && t.hide() - }), e.items().each(function (e) { - e.settings.x = 0, e.settings.y = 0, e.settings.w = r, e.settings.h = i, e.layoutRect({x: 0, y: 0, w: r, h: i}) - }); - var o = t.getSize(e.getEl("head")).height; - return e.settings.minWidth = r, e.settings.minHeight = i + o, n = e._super(), n.deltaH += o, n.innerH = n.h - n.deltaH, n - }}) - }), r(Xt, [yt, W], function (e, t) { - return e.extend({init: function (e) { - var t = this; - t._super(e), t._value = e.value || "", t.addClass("textbox"), e.multiline ? t.addClass("multiline") : t.on("keydown", function (e) { - 13 == e.keyCode && t.parents().reverse().each(function (t) { - return e.preventDefault(), t.hasEventListeners("submit") && t.toJSON ? (t.fire("submit", {data: t.toJSON()}), !1) : void 0 - }) - }) - }, disabled: function (e) { - var t = this; - return t._rendered && "undefined" != typeof e && (t.getEl().disabled = e), t._super(e) - }, value: function (e) { - var t = this; - return"undefined" != typeof e ? (t._value = e, t._rendered && (t.getEl().value = e), t) : t._rendered ? t.getEl().value : t._value - }, repaint: function () { - var e = this, t, n, r, i = 0, o = 0, a; - t = e.getEl().style, n = e._layoutRect, a = e._lastRepaintRect || {}; - var s = document; - return!e.settings.multiline && s.all && (!s.documentMode || s.documentMode <= 8) && (t.lineHeight = n.h - o + "px"), r = e._borderBox, i = r.left + r.right + 8, o = r.top + r.bottom + (e.settings.multiline ? 8 : 0), n.x !== a.x && (t.left = n.x + "px", a.x = n.x), n.y !== a.y && (t.top = n.y + "px", a.y = n.y), n.w !== a.w && (t.width = n.w - i + "px", a.w = n.w), n.h !== a.h && (t.height = n.h - o + "px", a.h = n.h), e._lastRepaintRect = a, e.fire("repaint", {}, !1), e - }, renderHtml: function () { - var e = this, t = e._id, n = e.settings, r = e.encode(e._value, !1), i = ""; - return"spellcheck"in n && (i += ' spellcheck="' + n.spellcheck + '"'), n.maxLength && (i += ' maxlength="' + n.maxLength + '"'), n.size && (i += ' size="' + n.size + '"'), n.subtype && (i += ' type="' + n.subtype + '"'), e.disabled() && (i += ' disabled="disabled"'), n.multiline ? '" : '" - }, postRender: function () { - var e = this; - return t.on(e.getEl(), "change", function (t) { - e.fire("change", t) - }), e._super() - }, remove: function () { - t.off(this.getEl()), this._super() - }}) - }), r(Jt, [W], function (e) { - return function (t) { - var n = this, r; - n.show = function (i) { - return n.hide(), r = !0, window.setTimeout(function () { - r && t.appendChild(e.createFragment('
    ')) - }, i || 0), n - }, n.hide = function () { - var e = t.lastChild; - return e && -1 != e.className.indexOf("throbber") && e.parentNode.removeChild(e), r = !1, n - } - } - }), a([l, c, d, u, f, p, m, h, g, v, y, b, C, x, w, _, N, E, k, S, T, R, A, B, L, H, M, D, P, O, I, z, F, W, V, U, q, j, $, K, Y, G, X, J, Q, Z, et, tt, nt, rt, it, ot, at, st, lt, ct, dt, ut, ft, pt, mt, ht, gt, vt, yt, bt, Ct, xt, wt, _t, Nt, Et, kt, St, Tt, Rt, At, Bt, Lt, Ht, Mt, Dt, Pt, Ot, It, zt, Ft, Wt, Vt, Ut, qt, jt, $t, Kt, Yt, Gt, Xt, Jt]) -}(this); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/BUILD_README.txt b/common/static/js/vendor/tinymce/BUILD_README.txt new file mode 100644 index 0000000000..8b18fb0345 --- /dev/null +++ b/common/static/js/vendor/tinymce/BUILD_README.txt @@ -0,0 +1,16 @@ +Instructions for creating js/tinymce.full.min.js + +1. Ensure that the dependencies (NodeJS, Jake, and other dependencies) are installed. If necessary, + install them per the directions on https://github.com/tinymce/tinymce/tree/4.0.20. +2. Unzip edx-platform/vendor_extra/tinymce/jake_package.zip into this directory (so that Jakefile.js resides in this directory). +3. Run the following command in the tinymce directory: + jake minify bundle[themes:modern,plugins:image,link,codemirror,paste,table,textcolor] +4. Cleanup by deleting the Unversioned files that were created from unzipping jake_package.zip. + +Instructions for updating tinymce to a newer version: + +1. Download the desired version from https://github.com/tinymce/tinymce/releases +2. Find all the EDX specific changes that were made to the currently used version of tinymce by searching for + the string "EDX" in this directory. +3. Merge the EDX specific changes with the new version. +4. Follow the instructions above for creating the new version of js/tinymce.full.min.js diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/AddOnManager.js b/common/static/js/vendor/tinymce/js/tinymce/classes/AddOnManager.js new file mode 100755 index 0000000000..02ae2d9bdd --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/AddOnManager.js @@ -0,0 +1,256 @@ +/** + * AddOnManager.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class handles the loading of themes/plugins or other add-ons and their language packs. + * + * @class tinymce.AddOnManager + */ +define("tinymce/AddOnManager", [ + "tinymce/dom/ScriptLoader", + "tinymce/util/Tools" +], function(ScriptLoader, Tools) { + var each = Tools.each; + + function AddOnManager() { + var self = this; + + self.items = []; + self.urls = {}; + self.lookup = {}; + } + + AddOnManager.prototype = { + /** + * Returns the specified add on by the short name. + * + * @method get + * @param {String} name Add-on to look for. + * @return {tinymce.Theme/tinymce.Plugin} Theme or plugin add-on instance or undefined. + */ + get: function(name) { + if (this.lookup[name]) { + return this.lookup[name].instance; + } else { + return undefined; + } + }, + + dependencies: function(name) { + var result; + + if (this.lookup[name]) { + result = this.lookup[name].dependencies; + } + + return result || []; + }, + + /** + * Loads a language pack for the specified add-on. + * + * @method requireLangPack + * @param {String} name Short name of the add-on. + * @param {String} languages Optional comma or space separated list of languages to check if it matches the name. + */ + requireLangPack: function(name, languages) { + if (AddOnManager.language && AddOnManager.languageLoad !== false) { + if (languages && new RegExp('([, ]|\\b)' + AddOnManager.language + '([, ]|\\b)').test(languages) === false) { + return; + } + + ScriptLoader.ScriptLoader.add(this.urls[name] + '/langs/' + AddOnManager.language + '.js'); + } + }, + + /** + * Adds a instance of the add-on by it's short name. + * + * @method add + * @param {String} id Short name/id for the add-on. + * @param {tinymce.Theme/tinymce.Plugin} addOn Theme or plugin to add. + * @return {tinymce.Theme/tinymce.Plugin} The same theme or plugin instance that got passed in. + * @example + * // Create a simple plugin + * tinymce.create('tinymce.plugins.TestPlugin', { + * TestPlugin: function(ed, url) { + * ed.on('click', function(e) { + * ed.windowManager.alert('Hello World!'); + * }); + * } + * }); + * + * // Register plugin using the add method + * tinymce.PluginManager.add('test', tinymce.plugins.TestPlugin); + * + * // Initialize TinyMCE + * tinymce.init({ + * ... + * plugins: '-test' // Init the plugin but don't try to load it + * }); + */ + add: function(id, addOn, dependencies) { + this.items.push(addOn); + this.lookup[id] = {instance: addOn, dependencies: dependencies}; + + return addOn; + }, + + createUrl: function(baseUrl, dep) { + if (typeof dep === "object") { + return dep; + } else { + return {prefix: baseUrl.prefix, resource: dep, suffix: baseUrl.suffix}; + } + }, + + /** + * Add a set of components that will make up the add-on. Using the url of the add-on name as the base url. + * This should be used in development mode. A new compressor/javascript munger process will ensure that the + * components are put together into the plugin.js file and compressed correctly. + * + * @method addComponents + * @param {String} pluginName name of the plugin to load scripts from (will be used to get the base url for the plugins). + * @param {Array} scripts Array containing the names of the scripts to load. + */ + addComponents: function(pluginName, scripts) { + var pluginUrl = this.urls[pluginName]; + + each(scripts, function(script) { + ScriptLoader.ScriptLoader.add(pluginUrl + "/" + script); + }); + }, + + /** + * Loads an add-on from a specific url. + * + * @method load + * @param {String} name Short name of the add-on that gets loaded. + * @param {String} addOnUrl URL to the add-on that will get loaded. + * @param {function} callback Optional callback to execute ones the add-on is loaded. + * @param {Object} scope Optional scope to execute the callback in. + * @example + * // Loads a plugin from an external URL + * tinymce.PluginManager.load('myplugin', '/some/dir/someplugin/plugin.js'); + * + * // Initialize TinyMCE + * tinymce.init({ + * ... + * plugins: '-myplugin' // Don't try to load it again + * }); + */ + load: function(name, addOnUrl, callback, scope) { + var self = this, url = addOnUrl; + + function loadDependencies() { + var dependencies = self.dependencies(name); + + each(dependencies, function(dep) { + var newUrl = self.createUrl(addOnUrl, dep); + + self.load(newUrl.resource, newUrl, undefined, undefined); + }); + + if (callback) { + if (scope) { + callback.call(scope); + } else { + callback.call(ScriptLoader); + } + } + } + + if (self.urls[name]) { + return; + } + + if (typeof addOnUrl === "object") { + url = addOnUrl.prefix + addOnUrl.resource + addOnUrl.suffix; + } + + if (url.indexOf('/') !== 0 && url.indexOf('://') == -1) { + url = AddOnManager.baseURL + '/' + url; + } + + self.urls[name] = url.substring(0, url.lastIndexOf('/')); + + if (self.lookup[name]) { + loadDependencies(); + } else { + ScriptLoader.ScriptLoader.add(url, loadDependencies, scope); + } + } + }; + + AddOnManager.PluginManager = new AddOnManager(); + AddOnManager.ThemeManager = new AddOnManager(); + + return AddOnManager; +}); + +/** + * TinyMCE theme class. + * + * @class tinymce.Theme + */ + +/** + * This method is responsible for rendering/generating the overall user interface with toolbars, buttons, iframe containers etc. + * + * @method renderUI + * @param {Object} obj Object parameter containing the targetNode DOM node that will be replaced visually with an editor instance. + * @return {Object} an object with items like iframeContainer, editorContainer, sizeContainer, deltaWidth, deltaHeight. + */ + +/** + * Plugin base class, this is a pseudo class that describes how a plugin is to be created for TinyMCE. The methods below are all optional. + * + * @class tinymce.Plugin + * @example + * tinymce.PluginManager.add('example', function(editor, url) { + * // Add a button that opens a window + * editor.addButton('example', { + * text: 'My button', + * icon: false, + * onclick: function() { + * // Open window + * editor.windowManager.open({ + * title: 'Example plugin', + * body: [ + * {type: 'textbox', name: 'title', label: 'Title'} + * ], + * onsubmit: function(e) { + * // Insert content when the window form is submitted + * editor.insertContent('Title: ' + e.data.title); + * } + * }); + * } + * }); + * + * // Adds a menu item to the tools menu + * editor.addMenuItem('example', { + * text: 'Example plugin', + * context: 'tools', + * onclick: function() { + * // Open window with a specific url + * editor.windowManager.open({ + * title: 'TinyMCE site', + * url: 'http://www.tinymce.com', + * width: 800, + * height: 600, + * buttons: [{ + * text: 'Close', + * onclick: 'close' + * }] + * }); + * } + * }); + * }); + */ diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/Compat.js b/common/static/js/vendor/tinymce/js/tinymce/classes/Compat.js new file mode 100755 index 0000000000..eacc64c9cf --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/Compat.js @@ -0,0 +1,84 @@ +/** + * Compat.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * TinyMCE core class. + * + * @static + * @class tinymce + * @borrow-members tinymce.EditorManager + * @borrow-members tinymce.util.Tools + */ +define("tinymce/Compat", [ + "tinymce/dom/DOMUtils", + "tinymce/dom/EventUtils", + "tinymce/dom/ScriptLoader", + "tinymce/AddOnManager", + "tinymce/util/Tools", + "tinymce/Env" +], function(DOMUtils, EventUtils, ScriptLoader, AddOnManager, Tools, Env) { + var tinymce = window.tinymce; + + /** + * @property {tinymce.dom.DOMUtils} DOM Global DOM instance. + * @property {tinymce.dom.ScriptLoader} ScriptLoader Global ScriptLoader instance. + * @property {tinymce.AddOnManager} PluginManager Global PluginManager instance. + * @property {tinymce.AddOnManager} ThemeManager Global ThemeManager instance. + */ + tinymce.DOM = DOMUtils.DOM; + tinymce.ScriptLoader = ScriptLoader.ScriptLoader; + tinymce.PluginManager = AddOnManager.PluginManager; + tinymce.ThemeManager = AddOnManager.ThemeManager; + + tinymce.dom = tinymce.dom || {}; + tinymce.dom.Event = EventUtils.Event; + + Tools.each(Tools, function(func, key) { + tinymce[key] = func; + }); + + Tools.each('isOpera isWebKit isIE isGecko isMac'.split(' '), function(name) { + tinymce[name] = Env[name.substr(2).toLowerCase()]; + }); + + return {}; +}); + +// Describe the different namespaces + +/** + * Root level namespace this contains classes directly releated to the TinyMCE editor. + * + * @namespace tinymce + */ + +/** + * Contains classes for handling the browsers DOM. + * + * @namespace tinymce.dom + */ + +/** + * Contains html parser and serializer logic. + * + * @namespace tinymce.html + */ + +/** + * Contains the different UI types such as buttons, listboxes etc. + * + * @namespace tinymce.ui + */ + +/** + * Contains various utility classes such as json parser, cookies etc. + * + * @namespace tinymce.util + */ diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/Editor.js b/common/static/js/vendor/tinymce/js/tinymce/classes/Editor.js new file mode 100755 index 0000000000..571c4fa32d --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/Editor.js @@ -0,0 +1,2168 @@ +/** + * Editor.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*jshint scripturl:true */ + +/** + * Include the base event class documentation. + * + * @include ../../../tools/docs/tinymce.Event.js + */ + +/** + * This class contains the core logic for a TinyMCE editor. + * + * @class tinymce.Editor + * @mixes tinymce.util.Observable + * @example + * // Add a class to all paragraphs in the editor. + * tinymce.activeEditor.dom.addClass(tinymce.activeEditor.dom.select('p'), 'someclass'); + * + * // Gets the current editors selection as text + * tinymce.activeEditor.selection.getContent({format: 'text'}); + * + * // Creates a new editor instance + * var ed = new tinymce.Editor('textareaid', { + * some_setting: 1 + * }, tinymce.EditorManager); + * + * // Select each item the user clicks on + * ed.on('click', function(e) { + * ed.selection.select(e.target); + * }); + * + * ed.render(); + */ +define("tinymce/Editor", [ + "tinymce/dom/DOMUtils", + "tinymce/AddOnManager", + "tinymce/html/Node", + "tinymce/dom/Serializer", + "tinymce/html/Serializer", + "tinymce/dom/Selection", + "tinymce/Formatter", + "tinymce/UndoManager", + "tinymce/EnterKey", + "tinymce/ForceBlocks", + "tinymce/EditorCommands", + "tinymce/util/URI", + "tinymce/dom/ScriptLoader", + "tinymce/dom/EventUtils", + "tinymce/WindowManager", + "tinymce/html/Schema", + "tinymce/html/DomParser", + "tinymce/util/Quirks", + "tinymce/Env", + "tinymce/util/Tools", + "tinymce/util/Observable", + "tinymce/Shortcuts" +], function( + DOMUtils, AddOnManager, Node, DomSerializer, Serializer, + Selection, Formatter, UndoManager, EnterKey, ForceBlocks, EditorCommands, + URI, ScriptLoader, EventUtils, WindowManager, + Schema, DomParser, Quirks, Env, Tools, Observable, Shortcuts +) { + // Shorten these names + var DOM = DOMUtils.DOM, ThemeManager = AddOnManager.ThemeManager, PluginManager = AddOnManager.PluginManager; + var extend = Tools.extend, each = Tools.each, explode = Tools.explode; + var inArray = Tools.inArray, trim = Tools.trim, resolve = Tools.resolve; + var Event = EventUtils.Event; + var isGecko = Env.gecko, ie = Env.ie; + + function getEventTarget(editor, eventName) { + if (eventName == 'selectionchange') { + return editor.getDoc(); + } + + // Need to bind mousedown/mouseup etc to document not body in iframe mode + // Since the user might click on the HTML element not the BODY + if (!editor.inline && /^mouse|click|contextmenu|drop/.test(eventName)) { + return editor.getDoc(); + } + + return editor.getBody(); + } + + /** + * Include documentation for all the events. + * + * @include ../../../tools/docs/tinymce.Editor.js + */ + + /** + * Constructs a editor instance by id. + * + * @constructor + * @method Editor + * @param {String} id Unique id for the editor. + * @param {Object} settings Settings for the editor. + * @param {tinymce.EditorManager} editorManager EditorManager instance. + * @author Moxiecode + */ + function Editor(id, settings, editorManager) { + var self = this, documentBaseUrl, baseUri; + + documentBaseUrl = self.documentBaseUrl = editorManager.documentBaseURL; + baseUri = editorManager.baseURI; + + /** + * Name/value collection with editor settings. + * + * @property settings + * @type Object + * @example + * // Get the value of the theme setting + * tinymce.activeEditor.windowManager.alert("You are using the " + tinymce.activeEditor.settings.theme + " theme"); + */ + self.settings = settings = extend({ + id: id, + theme: 'modern', + delta_width: 0, + delta_height: 0, + popup_css: '', + plugins: '', + document_base_url: documentBaseUrl, + add_form_submit_trigger: true, + submit_patch: true, + add_unload_trigger: true, + convert_urls: true, + relative_urls: true, + remove_script_host: true, + object_resizing: true, + doctype: '', + visual: true, + font_size_style_values: 'xx-small,x-small,small,medium,large,x-large,xx-large', + + // See: http://www.w3.org/TR/CSS2/fonts.html#propdef-font-size + font_size_legacy_values: 'xx-small,small,medium,large,x-large,xx-large,300%', + forced_root_block: 'p', + hidden_input: true, + padd_empty_editor: true, + render_ui: true, + indentation: '30px', + inline_styles: true, + convert_fonts_to_spans: true, + indent: 'simple', + indent_before: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,' + + 'tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist', + indent_after: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,' + + 'tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist', + validate: true, + entity_encoding: 'named', + url_converter: self.convertURL, + url_converter_scope: self, + ie7_compat: true + }, settings); + + AddOnManager.language = settings.language || 'en'; + AddOnManager.languageLoad = settings.language_load; + + AddOnManager.baseURL = editorManager.baseURL; + + /** + * Editor instance id, normally the same as the div/textarea that was replaced. + * + * @property id + * @type String + */ + self.id = settings.id = id; + + /** + * State to force the editor to return false on a isDirty call. + * + * @property isNotDirty + * @type Boolean + * @example + * function ajaxSave() { + * var ed = tinymce.get('elm1'); + * + * // Save contents using some XHR call + * alert(ed.getContent()); + * + * ed.isNotDirty = true; // Force not dirty state + * } + */ + self.isNotDirty = true; + + /** + * Name/Value object containting plugin instances. + * + * @property plugins + * @type Object + * @example + * // Execute a method inside a plugin directly + * tinymce.activeEditor.plugins.someplugin.someMethod(); + */ + self.plugins = {}; + + /** + * URI object to document configured for the TinyMCE instance. + * + * @property documentBaseURI + * @type tinymce.util.URI + * @example + * // Get relative URL from the location of document_base_url + * tinymce.activeEditor.documentBaseURI.toRelative('/somedir/somefile.htm'); + * + * // Get absolute URL from the location of document_base_url + * tinymce.activeEditor.documentBaseURI.toAbsolute('somefile.htm'); + */ + self.documentBaseURI = new URI(settings.document_base_url || documentBaseUrl, { + base_uri: baseUri + }); + + /** + * URI object to current document that holds the TinyMCE editor instance. + * + * @property baseURI + * @type tinymce.util.URI + * @example + * // Get relative URL from the location of the API + * tinymce.activeEditor.baseURI.toRelative('/somedir/somefile.htm'); + * + * // Get absolute URL from the location of the API + * tinymce.activeEditor.baseURI.toAbsolute('somefile.htm'); + */ + self.baseURI = baseUri; + + /** + * Array with CSS files to load into the iframe. + * + * @property contentCSS + * @type Array + */ + self.contentCSS = []; + + /** + * Array of CSS styles to add to head of document when the editor loads. + * + * @property contentStyles + * @type Array + */ + self.contentStyles = []; + + // Creates all events like onClick, onSetContent etc see Editor.Events.js for the actual logic + self.shortcuts = new Shortcuts(self); + + // Internal command handler objects + self.execCommands = {}; + self.queryStateCommands = {}; + self.queryValueCommands = {}; + self.loadedCSS = {}; + + self.suffix = editorManager.suffix; + self.editorManager = editorManager; + self.inline = settings.inline; + + // Call setup + editorManager.fire('SetupEditor', self); + self.execCallback('setup', self); + } + + Editor.prototype = { + /** + * Renderes the editor/adds it to the page. + * + * @method render + */ + render: function() { + var self = this, settings = self.settings, id = self.id, suffix = self.suffix; + + function readyHandler() { + DOM.unbind(window, 'ready', readyHandler); + self.render(); + } + + // Page is not loaded yet, wait for it + if (!Event.domLoaded) { + DOM.bind(window, 'ready', readyHandler); + return; + } + + // Element not found, then skip initialization + if (!self.getElement()) { + return; + } + + // No editable support old iOS versions etc + if (!Env.contentEditable) { + return; + } + + // Hide target element early to prevent content flashing + if (!settings.inline) { + self.orgVisibility = self.getElement().style.visibility; + self.getElement().style.visibility = 'hidden'; + } else { + self.inline = true; + } + + var form = self.getElement().form || DOM.getParent(id, 'form'); + if (form) { + self.formElement = form; + + // Add hidden input for non input elements inside form elements + if (settings.hidden_input && !/TEXTAREA|INPUT/i.test(self.getElement().nodeName)) { + DOM.insertAfter(DOM.create('input', {type: 'hidden', name: id}), id); + self.hasHiddenInput = true; + } + + // Pass submit/reset from form to editor instance + self.formEventDelegate = function(e) { + self.fire(e.type, e); + }; + + DOM.bind(form, 'submit reset', self.formEventDelegate); + + // Reset contents in editor when the form is reset + self.on('reset', function() { + self.setContent(self.startContent, {format: 'raw'}); + }); + + // Check page uses id="submit" or name="submit" for it's submit button + if (settings.submit_patch && !form.submit.nodeType && !form.submit.length && !form._mceOldSubmit) { + form._mceOldSubmit = form.submit; + form.submit = function() { + self.editorManager.triggerSave(); + self.isNotDirty = true; + + return form._mceOldSubmit(form); + }; + } + } + + /** + * Window manager reference, use this to open new windows and dialogs. + * + * @property windowManager + * @type tinymce.WindowManager + * @example + * // Shows an alert message + * tinymce.activeEditor.windowManager.alert('Hello world!'); + * + * // Opens a new dialog with the file.htm file and the size 320x240 + * // It also adds a custom parameter this can be retrieved by using tinyMCEPopup.getWindowArg inside the dialog. + * tinymce.activeEditor.windowManager.open({ + * url: 'file.htm', + * width: 320, + * height: 240 + * }, { + * custom_param: 1 + * }); + */ + self.windowManager = new WindowManager(self); + + if (settings.encoding == 'xml') { + self.on('GetContent', function(e) { + if (e.save) { + e.content = DOM.encode(e.content); + } + }); + } + + if (settings.add_form_submit_trigger) { + self.on('submit', function() { + if (self.initialized) { + self.save(); + } + }); + } + + if (settings.add_unload_trigger) { + self._beforeUnload = function() { + if (self.initialized && !self.destroyed && !self.isHidden()) { + self.save({format: 'raw', no_events: true, set_dirty: false}); + } + }; + + self.editorManager.on('BeforeUnload', self._beforeUnload); + } + + // Load scripts + function loadScripts() { + var scriptLoader = ScriptLoader.ScriptLoader; + + if (settings.language && settings.language != 'en' && !settings.language_url) { + settings.language_url = self.editorManager.baseURL + '/langs/' + settings.language + '.js'; + } + + if (settings.language_url) { + scriptLoader.add(settings.language_url); + } + + if (settings.theme && typeof settings.theme != "function" && + settings.theme.charAt(0) != '-' && !ThemeManager.urls[settings.theme]) { + var themeUrl = settings.theme_url; + + if (themeUrl) { + themeUrl = self.documentBaseURI.toAbsolute(themeUrl); + } else { + themeUrl = 'themes/' + settings.theme + '/theme' + suffix + '.js'; + } + + ThemeManager.load(settings.theme, themeUrl); + } + + if (Tools.isArray(settings.plugins)) { + settings.plugins = settings.plugins.join(' '); + } + + each(settings.external_plugins, function(url, name) { + PluginManager.load(name, url); + settings.plugins += ' ' + name; + }); + + each(settings.plugins.split(/[ ,]/), function(plugin) { + plugin = trim(plugin); + + if (plugin && !PluginManager.urls[plugin]) { + if (plugin.charAt(0) == '-') { + plugin = plugin.substr(1, plugin.length); + + var dependencies = PluginManager.dependencies(plugin); + + each(dependencies, function(dep) { + var defaultSettings = { + prefix:'plugins/', + resource: dep, + suffix:'/plugin' + suffix + '.js' + }; + + dep = PluginManager.createUrl(defaultSettings, dep); + PluginManager.load(dep.resource, dep); + }); + } else { + PluginManager.load(plugin, { + prefix: 'plugins/', + resource: plugin, + suffix: '/plugin' + suffix + '.js' + }); + } + } + }); + + scriptLoader.loadQueue(function() { + if (!self.removed) { + self.init(); + } + }); + } + + loadScripts(); + }, + + /** + * Initializes the editor this will be called automatically when + * all plugins/themes and language packs are loaded by the rendered method. + * This method will setup the iframe and create the theme and plugin instances. + * + * @method init + */ + init: function() { + var self = this, settings = self.settings, elm = self.getElement(); + var w, h, minHeight, n, o, Theme, url, bodyId, bodyClass, re, i, initializedPlugins = []; + + self.rtl = this.editorManager.i18n.rtl; + self.editorManager.add(self); + + settings.aria_label = settings.aria_label || DOM.getAttrib(elm, 'aria-label', self.getLang('aria.rich_text_area')); + + /** + * Reference to the theme instance that was used to generate the UI. + * + * @property theme + * @type tinymce.Theme + * @example + * // Executes a method on the theme directly + * tinymce.activeEditor.theme.someMethod(); + */ + if (settings.theme) { + if (typeof settings.theme != "function") { + settings.theme = settings.theme.replace(/-/, ''); + Theme = ThemeManager.get(settings.theme); + self.theme = new Theme(self, ThemeManager.urls[settings.theme]); + + if (self.theme.init) { + self.theme.init(self, ThemeManager.urls[settings.theme] || self.documentBaseUrl.replace(/\/$/, '')); + } + } else { + self.theme = settings.theme; + } + } + + function initPlugin(plugin) { + var Plugin = PluginManager.get(plugin), pluginUrl, pluginInstance; + + pluginUrl = PluginManager.urls[plugin] || self.documentBaseUrl.replace(/\/$/, ''); + plugin = trim(plugin); + if (Plugin && inArray(initializedPlugins, plugin) === -1) { + each(PluginManager.dependencies(plugin), function(dep){ + initPlugin(dep); + }); + + pluginInstance = new Plugin(self, pluginUrl); + + self.plugins[plugin] = pluginInstance; + + if (pluginInstance.init) { + pluginInstance.init(self, pluginUrl); + initializedPlugins.push(plugin); + } + } + } + + // Create all plugins + each(settings.plugins.replace(/\-/g, '').split(/[ ,]/), initPlugin); + + // Measure box + if (settings.render_ui && self.theme) { + self.orgDisplay = elm.style.display; + + if (typeof settings.theme != "function") { + w = settings.width || elm.style.width || elm.offsetWidth; + h = settings.height || elm.style.height || elm.offsetHeight; + minHeight = settings.min_height || 100; + re = /^[0-9\.]+(|px)$/i; + + if (re.test('' + w)) { + w = Math.max(parseInt(w, 10), 100); + } + + if (re.test('' + h)) { + h = Math.max(parseInt(h, 10), minHeight); + } + + // Render UI + o = self.theme.renderUI({ + targetNode: elm, + width: w, + height: h, + deltaWidth: settings.delta_width, + deltaHeight: settings.delta_height + }); + + // Resize editor + if (!settings.content_editable) { + DOM.setStyles(o.sizeContainer || o.editorContainer, { + wi2dth: w, + // TODO: Fix this + h2eight: h + }); + + h = (o.iframeHeight || h) + (typeof(h) == 'number' ? (o.deltaHeight || 0) : ''); + if (h < minHeight) { + h = minHeight; + } + } + } else { + o = settings.theme(self, elm); + + // Convert element type to id:s + if (o.editorContainer.nodeType) { + o.editorContainer = o.editorContainer.id = o.editorContainer.id || self.id + "_parent"; + } + + // Convert element type to id:s + if (o.iframeContainer.nodeType) { + o.iframeContainer = o.iframeContainer.id = o.iframeContainer.id || self.id + "_iframecontainer"; + } + + // Use specified iframe height or the targets offsetHeight + h = o.iframeHeight || elm.offsetHeight; + } + + self.editorContainer = o.editorContainer; + } + + // Load specified content CSS last + if (settings.content_css) { + each(explode(settings.content_css), function(u) { + self.contentCSS.push(self.documentBaseURI.toAbsolute(u)); + }); + } + + // Load specified content CSS last + if (settings.content_style) { + self.contentStyles.push(settings.content_style); + } + + // Content editable mode ends here + if (settings.content_editable) { + elm = n = o = null; // Fix IE leak + return self.initContentBody(); + } + + self.iframeHTML = settings.doctype + ''; + + // We only need to override paths if we have to + // IE has a bug where it remove site absolute urls to relative ones if this is specified + if (settings.document_base_url != self.documentBaseUrl) { + self.iframeHTML += ''; + } + + // IE8 doesn't support carets behind images setting ie7_compat would force IE8+ to run in IE7 compat mode. + if (!Env.caretAfter && settings.ie7_compat) { + self.iframeHTML += ''; + } + + self.iframeHTML += ''; + + // Load the CSS by injecting them into the HTML this will reduce "flicker" + for (i = 0; i < self.contentCSS.length; i++) { + var cssUrl = self.contentCSS[i]; + self.iframeHTML += ''; + self.loadedCSS[cssUrl] = true; + } + + bodyId = settings.body_id || 'tinymce'; + if (bodyId.indexOf('=') != -1) { + bodyId = self.getParam('body_id', '', 'hash'); + bodyId = bodyId[self.id] || bodyId; + } + + bodyClass = settings.body_class || ''; + if (bodyClass.indexOf('=') != -1) { + bodyClass = self.getParam('body_class', '', 'hash'); + bodyClass = bodyClass[self.id] || ''; + } + + self.iframeHTML += '
    '; + + /*eslint no-script-url:0 */ + var domainRelaxUrl = 'javascript:(function(){' + + 'document.open();document.domain="' + document.domain + '";' + + 'var ed = window.parent.tinymce.get("' + self.id + '");document.write(ed.iframeHTML);' + + 'document.close();ed.initContentBody(true);})()'; + + // Domain relaxing is required since the user has messed around with document.domain + if (document.domain != location.hostname) { + url = domainRelaxUrl; + } + + // Create iframe + // TODO: ACC add the appropriate description on this. + n = DOM.add(o.iframeContainer, 'iframe', { + id: self.id + "_ifr", + src: url || 'javascript:""', // Workaround for HTTPS warning in IE6/7 + frameBorder: '0', + allowTransparency: "true", + title: self.editorManager.translate( + "Rich Text Area. Press ALT-F9 for menu. " + + "Press ALT-F10 for toolbar. Press ALT-0 for help" + ), + style: { + width: '100%', + height: h, + display: 'block' // Important for Gecko to render the iframe correctly + } + }); + + // Try accessing the document this will fail on IE when document.domain is set to the same as location.hostname + // Then we have to force domain relaxing using the domainRelaxUrl approach very ugly!! + if (ie) { + try { + self.getDoc(); + } catch (e) { + n.src = url = domainRelaxUrl; + } + } + + self.contentAreaContainer = o.iframeContainer; + + if (o.editorContainer) { + DOM.get(o.editorContainer).style.display = self.orgDisplay; + } + + DOM.get(self.id).style.display = 'none'; + DOM.setAttrib(self.id, 'aria-hidden', true); + + if (!url) { + self.initContentBody(); + } + + elm = n = o = null; // Cleanup + }, + + /** + * This method get called by the init method ones the iframe is loaded. + * It will fill the iframe with contents, setups DOM and selection objects for the iframe. + * + * @method initContentBody + * @private + */ + initContentBody: function(skipWrite) { + var self = this, settings = self.settings, targetElm = DOM.get(self.id), doc = self.getDoc(), body, contentCssText; + + // Restore visibility on target element + if (!settings.inline) { + self.getElement().style.visibility = self.orgVisibility; + } + + // Setup iframe body + if (!skipWrite && !settings.content_editable) { + doc.open(); + doc.write(self.iframeHTML); + doc.close(); + } + + if (settings.content_editable) { + self.on('remove', function() { + var bodyEl = this.getBody(); + + DOM.removeClass(bodyEl, 'mce-content-body'); + DOM.removeClass(bodyEl, 'mce-edit-focus'); + DOM.setAttrib(bodyEl, 'tabIndex', null); + DOM.setAttrib(bodyEl, 'contentEditable', null); + }); + + DOM.addClass(targetElm, 'mce-content-body'); + targetElm.tabIndex = -1; + self.contentDocument = doc = settings.content_document || document; + self.contentWindow = settings.content_window || window; + self.bodyElement = targetElm; + + // Prevent leak in IE + settings.content_document = settings.content_window = null; + + // TODO: Fix this + settings.root_name = targetElm.nodeName.toLowerCase(); + } + + // It will not steal focus while setting contentEditable + body = self.getBody(); + body.disabled = true; + + if (!settings.readonly) { + if (self.inline && DOM.getStyle(body, 'position', true) == 'static') { + body.style.position = 'relative'; + } + + body.contentEditable = self.getParam('content_editable_state', true); + } + + body.disabled = false; + + /** + * Schema instance, enables you to validate elements and it's children. + * + * @property schema + * @type tinymce.html.Schema + */ + self.schema = new Schema(settings); + + /** + * DOM instance for the editor. + * + * @property dom + * @type tinymce.dom.DOMUtils + * @example + * // Adds a class to all paragraphs within the editor + * tinymce.activeEditor.dom.addClass(tinymce.activeEditor.dom.select('p'), 'someclass'); + */ + self.dom = new DOMUtils(doc, { + keep_values: true, + url_converter: self.convertURL, + url_converter_scope: self, + hex_colors: settings.force_hex_style_colors, + class_filter: settings.class_filter, + update_styles: true, + root_element: settings.content_editable ? self.id : null, + collect: settings.content_editable, + schema: self.schema, + onSetAttrib: function(e) { + self.fire('SetAttrib', e); + } + }); + + /** + * HTML parser will be used when contents is inserted into the editor. + * + * @property parser + * @type tinymce.html.DomParser + */ + self.parser = new DomParser(settings, self.schema); + + // Convert src and href into data-mce-src, data-mce-href and data-mce-style + self.parser.addAttributeFilter('src,href,style', function(nodes, name) { + var i = nodes.length, node, dom = self.dom, value, internalName; + + while (i--) { + node = nodes[i]; + value = node.attr(name); + internalName = 'data-mce-' + name; + + // Add internal attribute if we need to we don't on a refresh of the document + if (!node.attributes.map[internalName]) { + if (name === "style") { + node.attr(internalName, dom.serializeStyle(dom.parseStyle(value), node.name)); + } else { + node.attr(internalName, self.convertURL(value, name, node.name)); + } + } + } + }); + + // Keep scripts from executing + self.parser.addNodeFilter('script', function(nodes) { + var i = nodes.length, node; + + while (i--) { + node = nodes[i]; + node.attr('type', 'mce-' + (node.attr('type') || 'text/javascript')); + } + }); + + self.parser.addNodeFilter('#cdata', function(nodes) { + var i = nodes.length, node; + + while (i--) { + node = nodes[i]; + node.type = 8; + node.name = '#comment'; + node.value = '[CDATA[' + node.value + ']]'; + } + }); + + self.parser.addNodeFilter('p,h1,h2,h3,h4,h5,h6,div', function(nodes) { + var i = nodes.length, node, nonEmptyElements = self.schema.getNonEmptyElements(); + + while (i--) { + node = nodes[i]; + + if (node.isEmpty(nonEmptyElements)) { + node.empty().append(new Node('br', 1)).shortEnded = true; + } + } + }); + + /** + * DOM serializer for the editor. Will be used when contents is extracted from the editor. + * + * @property serializer + * @type tinymce.dom.Serializer + * @example + * // Serializes the first paragraph in the editor into a string + * tinymce.activeEditor.serializer.serialize(tinymce.activeEditor.dom.select('p')[0]); + */ + self.serializer = new DomSerializer(settings, self); + + /** + * Selection instance for the editor. + * + * @property selection + * @type tinymce.dom.Selection + * @example + * // Sets some contents to the current selection in the editor + * tinymce.activeEditor.selection.setContent('Some contents'); + * + * // Gets the current selection + * alert(tinymce.activeEditor.selection.getContent()); + * + * // Selects the first paragraph found + * tinymce.activeEditor.selection.select(tinymce.activeEditor.dom.select('p')[0]); + */ + self.selection = new Selection(self.dom, self.getWin(), self.serializer, self); + + /** + * Formatter instance. + * + * @property formatter + * @type tinymce.Formatter + */ + self.formatter = new Formatter(self); + + /** + * Undo manager instance, responsible for handling undo levels. + * + * @property undoManager + * @type tinymce.UndoManager + * @example + * // Undoes the last modification to the editor + * tinymce.activeEditor.undoManager.undo(); + */ + self.undoManager = new UndoManager(self); + + self.forceBlocks = new ForceBlocks(self); + self.enterKey = new EnterKey(self); + self.editorCommands = new EditorCommands(self); + + self.fire('PreInit'); + + if (!settings.browser_spellcheck && !settings.gecko_spellcheck) { + doc.body.spellcheck = false; // Gecko + DOM.setAttrib(body, "spellcheck", "false"); + } + + self.fire('PostRender'); + + self.quirks = Quirks(self); + + if (settings.directionality) { + body.dir = settings.directionality; + } + + if (settings.nowrap) { + body.style.whiteSpace = "nowrap"; + } + + if (settings.protect) { + self.on('BeforeSetContent', function(e) { + each(settings.protect, function(pattern) { + e.content = e.content.replace(pattern, function(str) { + return ''; + }); + }); + }); + } + + self.on('SetContent', function() { + self.addVisual(self.getBody()); + }); + + // Remove empty contents + if (settings.padd_empty_editor) { + self.on('PostProcess', function(e) { + e.content = e.content.replace(/^(]*>( | |\s|\u00a0|)<\/p>[\r\n]*|
    [\r\n]*)$/, ''); + }); + } + + self.load({initial: true, format: 'html'}); + self.startContent = self.getContent({format: 'raw'}); + + /** + * Is set to true after the editor instance has been initialized + * + * @property initialized + * @type Boolean + * @example + * function isEditorInitialized(editor) { + * return editor && editor.initialized; + * } + */ + self.initialized = true; + + each(self._pendingNativeEvents, function(name) { + self.dom.bind(getEventTarget(self, name), name, function(e) { + self.fire(e.type, e); + }); + }); + + self.fire('init'); + self.focus(true); + self.nodeChanged({initial: true}); + self.execCallback('init_instance_callback', self); + + // Add editor specific CSS styles + if (self.contentStyles.length > 0) { + contentCssText = ''; + + each(self.contentStyles, function(style) { + contentCssText += style + "\r\n"; + }); + + self.dom.addStyle(contentCssText); + } + + // Load specified content CSS last + each(self.contentCSS, function(cssUrl) { + if (!self.loadedCSS[cssUrl]) { + self.dom.loadCSS(cssUrl); + self.loadedCSS[cssUrl] = true; + } + }); + + // Handle auto focus + if (settings.auto_focus) { + setTimeout(function () { + var ed = self.editorManager.get(settings.auto_focus); + + ed.selection.select(ed.getBody(), 1); + ed.selection.collapse(1); + ed.getBody().focus(); + ed.getWin().focus(); + }, 100); + } + + // Clean up references for IE + targetElm = doc = body = null; + }, + + /** + * Focuses/activates the editor. This will set this editor as the activeEditor in the tinymce collection + * it will also place DOM focus inside the editor. + * + * @method focus + * @param {Boolean} skip_focus Skip DOM focus. Just set is as the active editor. + */ + focus: function(skip_focus) { + var oed, self = this, selection = self.selection, contentEditable = self.settings.content_editable, rng; + var controlElm, doc = self.getDoc(), body; + + if (!skip_focus) { + // Get selected control element + rng = selection.getRng(); + if (rng.item) { + controlElm = rng.item(0); + } + + self._refreshContentEditable(); + + // Focus the window iframe + if (!contentEditable) { + // WebKit needs this call to fire focusin event properly see #5948 + // But Opera pre Blink engine will produce an empty selection so skip Opera + if (!Env.opera) { + self.getBody().focus(); + } + + self.getWin().focus(); + } + + // Focus the body as well since it's contentEditable + if (isGecko || contentEditable) { + body = self.getBody(); + + // Check for setActive since it doesn't scroll to the element + if (body.setActive && Env.ie < 11) { + body.setActive(); + } else { + body.focus(); + } + + if (contentEditable) { + selection.normalize(); + } + } + + // Restore selected control element + // This is needed when for example an image is selected within a + // layer a call to focus will then remove the control selection + if (controlElm && controlElm.ownerDocument == doc) { + rng = doc.body.createControlRange(); + rng.addElement(controlElm); + rng.select(); + } + } + + if (self.editorManager.activeEditor != self) { + if ((oed = self.editorManager.activeEditor)) { + oed.fire('deactivate', {relatedTarget: self}); + } + + self.fire('activate', {relatedTarget: oed}); + } + + self.editorManager.activeEditor = self; + }, + + /** + * Executes a legacy callback. This method is useful to call old 2.x option callbacks. + * There new event model is a better way to add callback so this method might be removed in the future. + * + * @method execCallback + * @param {String} name Name of the callback to execute. + * @return {Object} Return value passed from callback function. + */ + execCallback: function(name) { + var self = this, callback = self.settings[name], scope; + + if (!callback) { + return; + } + + // Look through lookup + if (self.callbackLookup && (scope = self.callbackLookup[name])) { + callback = scope.func; + scope = scope.scope; + } + + if (typeof(callback) === 'string') { + scope = callback.replace(/\.\w+$/, ''); + scope = scope ? resolve(scope) : 0; + callback = resolve(callback); + self.callbackLookup = self.callbackLookup || {}; + self.callbackLookup[name] = {func: callback, scope: scope}; + } + + return callback.apply(scope || self, Array.prototype.slice.call(arguments, 1)); + }, + + /** + * Translates the specified string by replacing variables with language pack items it will also check if there is + * a key mathcin the input. + * + * @method translate + * @param {String} text String to translate by the language pack data. + * @return {String} Translated string. + */ + translate: function(text) { + var lang = this.settings.language || 'en', i18n = this.editorManager.i18n; + + if (!text) { + return ''; + } + + return i18n.data[lang + '.' + text] || text.replace(/\{\#([^\}]+)\}/g, function(a, b) { + return i18n.data[lang + '.' + b] || '{#' + b + '}'; + }); + }, + + /** + * Returns a language pack item by name/key. + * + * @method getLang + * @param {String} name Name/key to get from the language pack. + * @param {String} defaultVal Optional default value to retrive. + */ + getLang: function(name, defaultVal) { + return ( + this.editorManager.i18n.data[(this.settings.language || 'en') + '.' + name] || + (defaultVal !== undefined ? defaultVal : '{#' + name + '}') + ); + }, + + /** + * Returns a configuration parameter by name. + * + * @method getParam + * @param {String} name Configruation parameter to retrive. + * @param {String} defaultVal Optional default value to return. + * @param {String} type Optional type parameter. + * @return {String} Configuration parameter value or default value. + * @example + * // Returns a specific config value from the currently active editor + * var someval = tinymce.activeEditor.getParam('myvalue'); + * + * // Returns a specific config value from a specific editor instance by id + * var someval2 = tinymce.get('my_editor').getParam('myvalue'); + */ + getParam: function(name, defaultVal, type) { + var value = name in this.settings ? this.settings[name] : defaultVal, output; + + if (type === 'hash') { + output = {}; + + if (typeof(value) === 'string') { + each(value.indexOf('=') > 0 ? value.split(/[;,](?![^=;,]*(?:[;,]|$))/) : value.split(','), function(value) { + value = value.split('='); + + if (value.length > 1) { + output[trim(value[0])] = trim(value[1]); + } else { + output[trim(value[0])] = trim(value); + } + }); + } else { + output = value; + } + + return output; + } + + return value; + }, + + /** + * Distpaches out a onNodeChange event to all observers. This method should be called when you + * need to update the UI states or element path etc. + * + * @method nodeChanged + */ + nodeChanged: function() { + var self = this, selection = self.selection, node, parents, root; + + // Fix for bug #1896577 it seems that this can not be fired while the editor is loading + if (self.initialized && !self.settings.disable_nodechange && !self.settings.readonly) { + // Get start node + root = self.getBody(); + node = selection.getStart() || root; + node = ie && node.ownerDocument != self.getDoc() ? self.getBody() : node; // Fix for IE initial state + + // Edge case for

    |

    + if (node.nodeName == 'IMG' && selection.isCollapsed()) { + node = node.parentNode; + } + + // Get parents and add them to object + parents = []; + self.dom.getParent(node, function(node) { + if (node === root) { + return true; + } + + parents.push(node); + }); + + self.fire('NodeChange', {element: node, parents: parents}); + } + }, + + /** + * Adds a button that later gets created by the theme in the editors toolbars. + * + * @method addButton + * @param {String} name Button name to add. + * @param {Object} settings Settings object with title, cmd etc. + * @example + * // Adds a custom button to the editor that inserts contents when clicked + * tinymce.init({ + * ... + * + * toolbar: 'example' + * + * setup: function(ed) { + * ed.addButton('example', { + * title: 'My title', + * image: '../js/tinymce/plugins/example/img/example.gif', + * onclick: function() { + * ed.insertContent('Hello world!!'); + * } + * }); + * } + * }); + */ + addButton: function(name, settings) { + var self = this; + + if (settings.cmd) { + settings.onclick = function() { + self.execCommand(settings.cmd); + }; + } + + if (!settings.text && !settings.icon) { + settings.icon = name; + } + + self.buttons = self.buttons || {}; + settings.tooltip = settings.tooltip || settings.title; + self.buttons[name] = settings; + }, + + /** + * Adds a menu item to be used in the menus of the theme. There might be multiple instances + * of this menu item for example it might be used in the main menus of the theme but also in + * the context menu so make sure that it's self contained and supports multiple instances. + * + * @method addMenuItem + * @param {String} name Menu item name to add. + * @param {Object} settings Settings object with title, cmd etc. + * @example + * // Adds a custom menu item to the editor that inserts contents when clicked + * // The context option allows you to add the menu item to an existing default menu + * tinymce.init({ + * ... + * + * setup: function(ed) { + * ed.addMenuItem('example', { + * text: 'My menu item', + * context: 'tools', + * onclick: function() { + * ed.insertContent('Hello world!!'); + * } + * }); + * } + * }); + */ + addMenuItem: function(name, settings) { + var self = this; + + if (settings.cmd) { + settings.onclick = function() { + self.execCommand(settings.cmd); + }; + } + + self.menuItems = self.menuItems || {}; + self.menuItems[name] = settings; + }, + + /** + * Adds a custom command to the editor, you can also override existing commands with this method. + * The command that you add can be executed with execCommand. + * + * @method addCommand + * @param {String} name Command name to add/override. + * @param {addCommandCallback} callback Function to execute when the command occurs. + * @param {Object} scope Optional scope to execute the function in. + * @example + * // Adds a custom command that later can be executed using execCommand + * tinymce.init({ + * ... + * + * setup: function(ed) { + * // Register example command + * ed.addCommand('mycommand', function(ui, v) { + * ed.windowManager.alert('Hello world!! Selection: ' + ed.selection.getContent({format: 'text'})); + * }); + * } + * }); + */ + addCommand: function(name, callback, scope) { + /** + * Callback function that gets called when a command is executed. + * + * @callback addCommandCallback + * @param {Boolean} ui Display UI state true/false. + * @param {Object} value Optional value for command. + * @return {Boolean} True/false state if the command was handled or not. + */ + this.execCommands[name] = {func: callback, scope: scope || this}; + }, + + /** + * Adds a custom query state command to the editor, you can also override existing commands with this method. + * The command that you add can be executed with queryCommandState function. + * + * @method addQueryStateHandler + * @param {String} name Command name to add/override. + * @param {addQueryStateHandlerCallback} callback Function to execute when the command state retrival occurs. + * @param {Object} scope Optional scope to execute the function in. + */ + addQueryStateHandler: function(name, callback, scope) { + /** + * Callback function that gets called when a queryCommandState is executed. + * + * @callback addQueryStateHandlerCallback + * @return {Boolean} True/false state if the command is enabled or not like is it bold. + */ + this.queryStateCommands[name] = {func: callback, scope: scope || this}; + }, + + /** + * Adds a custom query value command to the editor, you can also override existing commands with this method. + * The command that you add can be executed with queryCommandValue function. + * + * @method addQueryValueHandler + * @param {String} name Command name to add/override. + * @param {addQueryValueHandlerCallback} callback Function to execute when the command value retrival occurs. + * @param {Object} scope Optional scope to execute the function in. + */ + addQueryValueHandler: function(name, callback, scope) { + /** + * Callback function that gets called when a queryCommandValue is executed. + * + * @callback addQueryValueHandlerCallback + * @return {Object} Value of the command or undefined. + */ + this.queryValueCommands[name] = {func: callback, scope: scope || this}; + }, + + /** + * Adds a keyboard shortcut for some command or function. + * + * @method addShortcut + * @param {String} pattern Shortcut pattern. Like for example: ctrl+alt+o. + * @param {String} desc Text description for the command. + * @param {String/Function} cmdFunc Command name string or function to execute when the key is pressed. + * @param {Object} sc Optional scope to execute the function in. + * @return {Boolean} true/false state if the shortcut was added or not. + */ + addShortcut: function(pattern, desc, cmdFunc, scope) { + this.shortcuts.add(pattern, desc, cmdFunc, scope); + }, + + /** + * Executes a command on the current instance. These commands can be TinyMCE internal commands prefixed with "mce" or + * they can be build in browser commands such as "Bold". A compleate list of browser commands is available on MSDN or Mozilla.org. + * This function will dispatch the execCommand function on each plugin, theme or the execcommand_callback option if none of these + * return true it will handle the command as a internal browser command. + * + * @method execCommand + * @param {String} cmd Command name to execute, for example mceLink or Bold. + * @param {Boolean} ui True/false state if a UI (dialog) should be presented or not. + * @param {mixed} value Optional command value, this can be anything. + * @param {Object} a Optional arguments object. + */ + execCommand: function(cmd, ui, value, args) { + var self = this, state = 0, cmdItem; + + if (!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(cmd) && (!args || !args.skip_focus)) { + self.focus(); + } + + args = extend({}, args); + args = self.fire('BeforeExecCommand', {command: cmd, ui: ui, value: value}); + if (args.isDefaultPrevented()) { + return false; + } + + // Registred commands + if ((cmdItem = self.execCommands[cmd])) { + // Fall through on true + if (cmdItem.func.call(cmdItem.scope, ui, value) !== true) { + self.fire('ExecCommand', {command: cmd, ui: ui, value: value}); + return true; + } + } + + // Plugin commands + each(self.plugins, function(p) { + if (p.execCommand && p.execCommand(cmd, ui, value)) { + self.fire('ExecCommand', {command: cmd, ui: ui, value: value}); + state = true; + return false; + } + }); + + if (state) { + return state; + } + + // Theme commands + if (self.theme && self.theme.execCommand && self.theme.execCommand(cmd, ui, value)) { + self.fire('ExecCommand', {command: cmd, ui: ui, value: value}); + return true; + } + + // Editor commands + if (self.editorCommands.execCommand(cmd, ui, value)) { + self.fire('ExecCommand', {command: cmd, ui: ui, value: value}); + return true; + } + + // Browser commands + self.getDoc().execCommand(cmd, ui, value); + self.fire('ExecCommand', {command: cmd, ui: ui, value: value}); + }, + + /** + * Returns a command specific state, for example if bold is enabled or not. + * + * @method queryCommandState + * @param {string} cmd Command to query state from. + * @return {Boolean} Command specific state, for example if bold is enabled or not. + */ + queryCommandState: function(cmd) { + var self = this, queryItem, returnVal; + + // Is hidden then return undefined + if (self._isHidden()) { + return; + } + + // Registred commands + if ((queryItem = self.queryStateCommands[cmd])) { + returnVal = queryItem.func.call(queryItem.scope); + + // Fall though on true + if (returnVal !== true) { + return returnVal; + } + } + + // Editor commands + returnVal = self.editorCommands.queryCommandState(cmd); + if (returnVal !== -1) { + return returnVal; + } + + // Browser commands + try { + return self.getDoc().queryCommandState(cmd); + } catch (ex) { + // Fails sometimes see bug: 1896577 + } + }, + + /** + * Returns a command specific value, for example the current font size. + * + * @method queryCommandValue + * @param {string} cmd Command to query value from. + * @return {Object} Command specific value, for example the current font size. + */ + queryCommandValue: function(cmd) { + var self = this, queryItem, returnVal; + + // Is hidden then return undefined + if (self._isHidden()) { + return; + } + + // Registred commands + if ((queryItem = self.queryValueCommands[cmd])) { + returnVal = queryItem.func.call(queryItem.scope); + + // Fall though on true + if (returnVal !== true) { + return returnVal; + } + } + + // Editor commands + returnVal = self.editorCommands.queryCommandValue(cmd); + if (returnVal !== undefined) { + return returnVal; + } + + // Browser commands + try { + return self.getDoc().queryCommandValue(cmd); + } catch (ex) { + // Fails sometimes see bug: 1896577 + } + }, + + /** + * Shows the editor and hides any textarea/div that the editor is supposed to replace. + * + * @method show + */ + show: function() { + var self = this; + + DOM.show(self.getContainer()); + DOM.hide(self.id); + self.load(); + self.fire('show'); + }, + + /** + * Hides the editor and shows any textarea/div that the editor is supposed to replace. + * + * @method hide + */ + hide: function() { + var self = this, doc = self.getDoc(); + + // Fixed bug where IE has a blinking cursor left from the editor + if (ie && doc && !self.inline) { + doc.execCommand('SelectAll'); + } + + // We must save before we hide so Safari doesn't crash + self.save(); + + // defer the call to hide to prevent an IE9 crash #4921 + DOM.hide(self.getContainer()); + DOM.setStyle(self.id, 'display', self.orgDisplay); + self.fire('hide'); + }, + + /** + * Returns true/false if the editor is hidden or not. + * + * @method isHidden + * @return {Boolean} True/false if the editor is hidden or not. + */ + isHidden: function() { + return !DOM.isHidden(this.id); + }, + + /** + * Sets the progress state, this will display a throbber/progess for the editor. + * This is ideal for asycronous operations like an AJAX save call. + * + * @method setProgressState + * @param {Boolean} state Boolean state if the progress should be shown or hidden. + * @param {Number} time Optional time to wait before the progress gets shown. + * @return {Boolean} Same as the input state. + * @example + * // Show progress for the active editor + * tinymce.activeEditor.setProgressState(true); + * + * // Hide progress for the active editor + * tinymce.activeEditor.setProgressState(false); + * + * // Show progress after 3 seconds + * tinymce.activeEditor.setProgressState(true, 3000); + */ + setProgressState: function(state, time) { + this.fire('ProgressState', {state: state, time: time}); + }, + + /** + * Loads contents from the textarea or div element that got converted into an editor instance. + * This method will move the contents from that textarea or div into the editor by using setContent + * so all events etc that method has will get dispatched as well. + * + * @method load + * @param {Object} args Optional content object, this gets passed around through the whole load process. + * @return {String} HTML string that got set into the editor. + */ + load: function(args) { + var self = this, elm = self.getElement(), html; + + if (elm) { + args = args || {}; + args.load = true; + + html = self.setContent(elm.value !== undefined ? elm.value : elm.innerHTML, args); + args.element = elm; + + if (!args.no_events) { + self.fire('LoadContent', args); + } + + args.element = elm = null; + + return html; + } + }, + + /** + * Saves the contents from a editor out to the textarea or div element that got converted into an editor instance. + * This method will move the HTML contents from the editor into that textarea or div by getContent + * so all events etc that method has will get dispatched as well. + * + * @method save + * @param {Object} args Optional content object, this gets passed around through the whole save process. + * @return {String} HTML string that got set into the textarea/div. + */ + save: function(args) { + var self = this, elm = self.getElement(), html, form; + + if (!elm || !self.initialized) { + return; + } + + args = args || {}; + args.save = true; + + args.element = elm; + html = args.content = self.getContent(args); + + if (!args.no_events) { + self.fire('SaveContent', args); + } + + html = args.content; + + if (!/TEXTAREA|INPUT/i.test(elm.nodeName)) { + // Update DIV element when not in inline mode + if (!self.inline) { + elm.innerHTML = html; + } + + // Update hidden form element + if ((form = DOM.getParent(self.id, 'form'))) { + each(form.elements, function(elm) { + if (elm.name == self.id) { + elm.value = html; + return false; + } + }); + } + } else { + elm.value = html; + } + + args.element = elm = null; + + if (args.set_dirty !== false) { + self.isNotDirty = true; + } + + return html; + }, + + /** + * Sets the specified content to the editor instance, this will cleanup the content before it gets set using + * the different cleanup rules options. + * + * @method setContent + * @param {String} content Content to set to editor, normally HTML contents but can be other formats as well. + * @param {Object} args Optional content object, this gets passed around through the whole set process. + * @return {String} HTML string that got set into the editor. + * @example + * // Sets the HTML contents of the activeEditor editor + * tinymce.activeEditor.setContent('some html'); + * + * // Sets the raw contents of the activeEditor editor + * tinymce.activeEditor.setContent('some html', {format: 'raw'}); + * + * // Sets the content of a specific editor (my_editor in this example) + * tinymce.get('my_editor').setContent(data); + * + * // Sets the bbcode contents of the activeEditor editor if the bbcode plugin was added + * tinymce.activeEditor.setContent('[b]some[/b] html', {format: 'bbcode'}); + */ + setContent: function(content, args) { + var self = this, body = self.getBody(), forcedRootBlockName; + + // Setup args object + args = args || {}; + args.format = args.format || 'html'; + args.set = true; + args.content = content; + + // Do preprocessing + if (!args.no_events) { + self.fire('BeforeSetContent', args); + } + + content = args.content; + + // Padd empty content in Gecko and Safari. Commands will otherwise fail on the content + // It will also be impossible to place the caret in the editor unless there is a BR element present + if (content.length === 0 || /^\s+$/.test(content)) { + forcedRootBlockName = self.settings.forced_root_block; + + // Check if forcedRootBlock is configured and that the block is a valid child of the body + if (forcedRootBlockName && self.schema.isValidChild(body.nodeName.toLowerCase(), forcedRootBlockName.toLowerCase())) { + // Padd with bogus BR elements on modern browsers and IE 7 and 8 since they don't render empty P tags properly + content = ie && ie < 11 ? '' : '
    '; + content = self.dom.createHTML(forcedRootBlockName, self.settings.forced_root_block_attrs, content); + } else if (!ie) { + // We need to add a BR when forced_root_block is disabled on non IE browsers to place the caret + content = '
    '; + } + + body.innerHTML = content; + + self.fire('SetContent', args); + } else { + // Parse and serialize the html + if (args.format !== 'raw') { + content = new Serializer({}, self.schema).serialize( + self.parser.parse(content, {isRootContent: true}) + ); + } + + // Set the new cleaned contents to the editor + args.content = trim(content); + self.dom.setHTML(body, args.content); + + // Do post processing + if (!args.no_events) { + self.fire('SetContent', args); + } + + // Don't normalize selection if the focused element isn't the body in + // content editable mode since it will steal focus otherwise + /*if (!self.settings.content_editable || document.activeElement === self.getBody()) { + self.selection.normalize(); + }*/ + } + + return args.content; + }, + + /** + * Gets the content from the editor instance, this will cleanup the content before it gets returned using + * the different cleanup rules options. + * + * @method getContent + * @param {Object} args Optional content object, this gets passed around through the whole get process. + * @return {String} Cleaned content string, normally HTML contents. + * @example + * // Get the HTML contents of the currently active editor + * console.debug(tinymce.activeEditor.getContent()); + * + * // Get the raw contents of the currently active editor + * tinymce.activeEditor.getContent({format: 'raw'}); + * + * // Get content of a specific editor: + * tinymce.get('content id').getContent() + */ + getContent: function(args) { + var self = this, content, body = self.getBody(); + + // Setup args object + args = args || {}; + args.format = args.format || 'html'; + args.get = true; + args.getInner = true; + + // Do preprocessing + if (!args.no_events) { + self.fire('BeforeGetContent', args); + } + + // Get raw contents or by default the cleaned contents + if (args.format == 'raw') { + content = body.innerHTML; + } else if (args.format == 'text') { + content = body.innerText || body.textContent; + } else { + content = self.serializer.serialize(body, args); + } + + // Trim whitespace in beginning/end of HTML + if (args.format != 'text') { + args.content = trim(content); + } else { + args.content = content; + } + + // Do post processing + if (!args.no_events) { + self.fire('GetContent', args); + } + + return args.content; + }, + + /** + * Inserts content at caret position. + * + * @method insertContent + * @param {String} content Content to insert. + */ + insertContent: function(content) { + this.execCommand('mceInsertContent', false, content); + }, + + /** + * Returns true/false if the editor is dirty or not. It will get dirty if the user has made modifications to the contents. + * + * @method isDirty + * @return {Boolean} True/false if the editor is dirty or not. It will get dirty if the user has made modifications to the contents. + * @example + * if (tinymce.activeEditor.isDirty()) + * alert("You must save your contents."); + */ + isDirty: function() { + return !this.isNotDirty; + }, + + /** + * Returns the editors container element. The container element wrappes in + * all the elements added to the page for the editor. Such as UI, iframe etc. + * + * @method getContainer + * @return {Element} HTML DOM element for the editor container. + */ + getContainer: function() { + var self = this; + + if (!self.container) { + self.container = DOM.get(self.editorContainer || self.id + '_parent'); + } + + return self.container; + }, + + /** + * Returns the editors content area container element. The this element is the one who + * holds the iframe or the editable element. + * + * @method getContentAreaContainer + * @return {Element} HTML DOM element for the editor area container. + */ + getContentAreaContainer: function() { + return this.contentAreaContainer; + }, + + /** + * Returns the target element/textarea that got replaced with a TinyMCE editor instance. + * + * @method getElement + * @return {Element} HTML DOM element for the replaced element. + */ + getElement: function() { + return DOM.get(this.settings.content_element || this.id); + }, + + /** + * Returns the iframes window object. + * + * @method getWin + * @return {Window} Iframe DOM window object. + */ + getWin: function() { + var self = this, elm; + + if (!self.contentWindow) { + elm = DOM.get(self.id + "_ifr"); + + if (elm) { + self.contentWindow = elm.contentWindow; + } + } + + return self.contentWindow; + }, + + /** + * Returns the iframes document object. + * + * @method getDoc + * @return {Document} Iframe DOM document object. + */ + getDoc: function() { + var self = this, win; + + if (!self.contentDocument) { + win = self.getWin(); + + if (win) { + self.contentDocument = win.document; + } + } + + return self.contentDocument; + }, + + /** + * Returns the iframes body element. + * + * @method getBody + * @return {Element} Iframe body element. + */ + getBody: function() { + return this.bodyElement || this.getDoc().body; + }, + + /** + * URL converter function this gets executed each time a user adds an img, a or + * any other element that has a URL in it. This will be called both by the DOM and HTML + * manipulation functions. + * + * @method convertURL + * @param {string} url URL to convert. + * @param {string} name Attribute name src, href etc. + * @param {string/HTMLElement} elm Tag name or HTML DOM element depending on HTML or DOM insert. + * @return {string} Converted URL string. + */ + convertURL: function(url, name, elm) { + var self = this, settings = self.settings; + + // Use callback instead + if (settings.urlconverter_callback) { + return self.execCallback('urlconverter_callback', url, elm, true, name); + } + + // Don't convert link href since thats the CSS files that gets loaded into the editor also skip local file URLs + if (!settings.convert_urls || (elm && elm.nodeName == 'LINK') || url.indexOf('file:') === 0 || url.length === 0) { + return url; + } + + // Convert to relative + if (settings.relative_urls) { + return self.documentBaseURI.toRelative(url); + } + + // Convert to absolute + url = self.documentBaseURI.toAbsolute(url, settings.remove_script_host); + + return url; + }, + + /** + * Adds visual aid for tables, anchors etc so they can be more easily edited inside the editor. + * + * @method addVisual + * @param {Element} elm Optional root element to loop though to find tables etc that needs the visual aid. + */ + addVisual: function(elm) { + var self = this, settings = self.settings, dom = self.dom, cls; + + elm = elm || self.getBody(); + + if (self.hasVisual === undefined) { + self.hasVisual = settings.visual; + } + + each(dom.select('table,a', elm), function(elm) { + var value; + + switch (elm.nodeName) { + case 'TABLE': + cls = settings.visual_table_class || 'mce-item-table'; + value = dom.getAttrib(elm, 'border'); + + if (!value || value == '0') { + if (self.hasVisual) { + dom.addClass(elm, cls); + } else { + dom.removeClass(elm, cls); + } + } + + return; + + case 'A': + if (!dom.getAttrib(elm, 'href', false)) { + value = dom.getAttrib(elm, 'name') || elm.id; + cls = settings.visual_anchor_class || 'mce-item-anchor'; + + if (value) { + if (self.hasVisual) { + dom.addClass(elm, cls); + } else { + dom.removeClass(elm, cls); + } + } + } + + return; + } + }); + + self.fire('VisualAid', {element: elm, hasVisual: self.hasVisual}); + }, + + /** + * Removes the editor from the dom and tinymce collection. + * + * @method remove + */ + remove: function() { + var self = this; + + if (!self.removed) { + self.save(); + self.fire('remove'); + self.off(); + self.removed = 1; // Cancels post remove event execution + + // Remove any hidden input + if (self.hasHiddenInput) { + DOM.remove(self.getElement().nextSibling); + } + + DOM.setStyle(self.id, 'display', self.orgDisplay); + + // Don't clear the window or document if content editable + // is enabled since other instances might still be present + if (!self.settings.content_editable) { + Event.unbind(self.getWin()); + Event.unbind(self.getDoc()); + } + + var elm = self.getContainer(); + Event.unbind(self.getBody()); + Event.unbind(elm); + + self.editorManager.remove(self); + DOM.remove(elm); + self.destroy(); + } + }, + + bindNative: function(name) { + var self = this; + + if (self.settings.readonly) { + return; + } + + if (self.initialized) { + self.dom.bind(getEventTarget(self, name), name, function(e) { + self.fire(name, e); + }); + } else { + if (!self._pendingNativeEvents) { + self._pendingNativeEvents = [name]; + } else { + self._pendingNativeEvents.push(name); + } + } + }, + + unbindNative: function(name) { + var self = this; + + if (self.initialized) { + self.dom.unbind(name); + } + }, + + /** + * Destroys the editor instance by removing all events, element references or other resources + * that could leak memory. This method will be called automatically when the page is unloaded + * but you can also call it directly if you know what you are doing. + * + * @method destroy + * @param {Boolean} automatic Optional state if the destroy is an automatic destroy or user called one. + */ + destroy: function(automatic) { + var self = this, form; + + // One time is enough + if (self.destroyed) { + return; + } + + // If user manually calls destroy and not remove + // Users seems to have logic that calls destroy instead of remove + if (!automatic && !self.removed) { + self.remove(); + return; + } + + // We must unbind on Gecko since it would otherwise produce the pesky "attempt + // to run compile-and-go script on a cleared scope" message + if (automatic && isGecko) { + Event.unbind(self.getDoc()); + Event.unbind(self.getWin()); + Event.unbind(self.getBody()); + } + + if (!automatic) { + self.editorManager.off('beforeunload', self._beforeUnload); + + // Manual destroy + if (self.theme && self.theme.destroy) { + self.theme.destroy(); + } + + // Destroy controls, selection and dom + self.selection.destroy(); + self.dom.destroy(); + } + + form = self.formElement; + if (form) { + if (form._mceOldSubmit) { + form.submit = form._mceOldSubmit; + form._mceOldSubmit = null; + } + + DOM.unbind(form, 'submit reset', self.formEventDelegate); + } + + self.contentAreaContainer = self.formElement = self.container = self.editorContainer = null; + self.settings.content_element = self.bodyElement = self.contentDocument = self.contentWindow = null; + + if (self.selection) { + self.selection = self.selection.win = self.selection.dom = self.selection.dom.doc = null; + } + + self.destroyed = 1; + }, + + // Internal functions + + _refreshContentEditable: function() { + var self = this, body, parent; + + // Check if the editor was hidden and the re-initalize contentEditable mode by removing and adding the body again + if (self._isHidden()) { + body = self.getBody(); + parent = body.parentNode; + + parent.removeChild(body); + parent.appendChild(body); + + body.focus(); + } + }, + + _isHidden: function() { + var sel; + + if (!isGecko) { + return 0; + } + + // Weird, wheres that cursor selection? + sel = this.selection.getSel(); + return (!sel || !sel.rangeCount || sel.rangeCount === 0); + } + }; + + extend(Editor.prototype, Observable); + + return Editor; +}); diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/EditorCommands.js b/common/static/js/vendor/tinymce/js/tinymce/classes/EditorCommands.js new file mode 100755 index 0000000000..0192017d46 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/EditorCommands.js @@ -0,0 +1,721 @@ +/** + * EditorCommands.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class enables you to add custom editor commands and it contains + * overrides for native browser commands to address various bugs and issues. + * + * @class tinymce.EditorCommands + */ +define("tinymce/EditorCommands", [ + "tinymce/html/Serializer", + "tinymce/Env", + "tinymce/util/Tools" +], function(Serializer, Env, Tools) { + // Added for compression purposes + var each = Tools.each, extend = Tools.extend; + var map = Tools.map, inArray = Tools.inArray, explode = Tools.explode; + var isGecko = Env.gecko, isIE = Env.ie; + var TRUE = true, FALSE = false; + + return function(editor) { + var dom = editor.dom, + selection = editor.selection, + commands = {state: {}, exec: {}, value: {}}, + settings = editor.settings, + formatter = editor.formatter, + bookmark; + + /** + * Executes the specified command. + * + * @method execCommand + * @param {String} command Command to execute. + * @param {Boolean} ui Optional user interface state. + * @param {Object} value Optional value for command. + * @return {Boolean} true/false if the command was found or not. + */ + function execCommand(command, ui, value) { + var func; + + command = command.toLowerCase(); + if ((func = commands.exec[command])) { + func(command, ui, value); + return TRUE; + } + + return FALSE; + } + + /** + * Queries the current state for a command for example if the current selection is "bold". + * + * @method queryCommandState + * @param {String} command Command to check the state of. + * @return {Boolean/Number} true/false if the selected contents is bold or not, -1 if it's not found. + */ + function queryCommandState(command) { + var func; + + command = command.toLowerCase(); + if ((func = commands.state[command])) { + return func(command); + } + + return -1; + } + + /** + * Queries the command value for example the current fontsize. + * + * @method queryCommandValue + * @param {String} command Command to check the value of. + * @return {Object} Command value of false if it's not found. + */ + function queryCommandValue(command) { + var func; + + command = command.toLowerCase(); + if ((func = commands.value[command])) { + return func(command); + } + + return FALSE; + } + + /** + * Adds commands to the command collection. + * + * @method addCommands + * @param {Object} command_list Name/value collection with commands to add, the names can also be comma separated. + * @param {String} type Optional type to add, defaults to exec. Can be value or state as well. + */ + function addCommands(command_list, type) { + type = type || 'exec'; + + each(command_list, function(callback, command) { + each(command.toLowerCase().split(','), function(command) { + commands[type][command] = callback; + }); + }); + } + + // Expose public methods + extend(this, { + execCommand: execCommand, + queryCommandState: queryCommandState, + queryCommandValue: queryCommandValue, + addCommands: addCommands + }); + + // Private methods + + function execNativeCommand(command, ui, value) { + if (ui === undefined) { + ui = FALSE; + } + + if (value === undefined) { + value = null; + } + + return editor.getDoc().execCommand(command, ui, value); + } + + function isFormatMatch(name) { + return formatter.match(name); + } + + function toggleFormat(name, value) { + formatter.toggle(name, value ? {value: value} : undefined); + editor.nodeChanged(); + } + + function storeSelection(type) { + bookmark = selection.getBookmark(type); + } + + function restoreSelection() { + selection.moveToBookmark(bookmark); + } + + // Add execCommand overrides + addCommands({ + // Ignore these, added for compatibility + 'mceResetDesignMode,mceBeginUndoLevel': function() {}, + + // Add undo manager logic + 'mceEndUndoLevel,mceAddUndoLevel': function() { + editor.undoManager.add(); + }, + + 'Cut,Copy,Paste': function(command) { + var doc = editor.getDoc(), failed; + + // Try executing the native command + try { + execNativeCommand(command); + } catch (ex) { + // Command failed + failed = TRUE; + } + + // Present alert message about clipboard access not being available + if (failed || !doc.queryCommandSupported(command)) { + var msg = editor.translate( + "Your browser doesn't support direct access to the clipboard. " + + "Please use the Ctrl+X/C/V keyboard shortcuts instead." + ); + + if (Env.mac) { + msg = msg.replace(/Ctrl\+/g, '\u2318+'); + } + + editor.windowManager.alert(msg); + } + }, + + // Override unlink command + unlink: function() { + if (selection.isCollapsed()) { + var elm = selection.getNode(); + if (elm.tagName == 'A') { + editor.dom.remove(elm, true); + } + + return; + } + + formatter.remove("link"); + }, + + // Override justify commands to use the text formatter engine + 'JustifyLeft,JustifyCenter,JustifyRight,JustifyFull': function(command) { + var align = command.substring(7); + + if (align == 'full') { + align = 'justify'; + } + + // Remove all other alignments first + each('left,center,right,justify'.split(','), function(name) { + if (align != name) { + formatter.remove('align' + name); + } + }); + + toggleFormat('align' + align); + execCommand('mceRepaint'); + }, + + // Override list commands to fix WebKit bug + 'InsertUnorderedList,InsertOrderedList': function(command) { + var listElm, listParent; + + execNativeCommand(command); + + // WebKit produces lists within block elements so we need to split them + // we will replace the native list creation logic to custom logic later on + // TODO: Remove this when the list creation logic is removed + listElm = dom.getParent(selection.getNode(), 'ol,ul'); + if (listElm) { + listParent = listElm.parentNode; + + // If list is within a text block then split that block + if (/^(H[1-6]|P|ADDRESS|PRE)$/.test(listParent.nodeName)) { + storeSelection(); + dom.split(listParent, listElm); + restoreSelection(); + } + } + }, + + // Override commands to use the text formatter engine + 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': function(command) { + toggleFormat(command); + }, + + // Override commands to use the text formatter engine + 'ForeColor,HiliteColor,FontName': function(command, ui, value) { + toggleFormat(command, value); + }, + + FontSize: function(command, ui, value) { + var fontClasses, fontSizes; + + // Convert font size 1-7 to styles + if (value >= 1 && value <= 7) { + fontSizes = explode(settings.font_size_style_values); + fontClasses = explode(settings.font_size_classes); + + if (fontClasses) { + value = fontClasses[value - 1] || value; + } else { + value = fontSizes[value - 1] || value; + } + } + + toggleFormat(command, value); + }, + + RemoveFormat: function(command) { + formatter.remove(command); + }, + + mceBlockQuote: function() { + toggleFormat('blockquote'); + }, + + FormatBlock: function(command, ui, value) { + return toggleFormat(value || 'p'); + }, + + mceCleanup: function() { + var bookmark = selection.getBookmark(); + + editor.setContent(editor.getContent({cleanup: TRUE}), {cleanup: TRUE}); + + selection.moveToBookmark(bookmark); + }, + + mceRemoveNode: function(command, ui, value) { + var node = value || selection.getNode(); + + // Make sure that the body node isn't removed + if (node != editor.getBody()) { + storeSelection(); + editor.dom.remove(node, TRUE); + restoreSelection(); + } + }, + + mceSelectNodeDepth: function(command, ui, value) { + var counter = 0; + + dom.getParent(selection.getNode(), function(node) { + if (node.nodeType == 1 && counter++ == value) { + selection.select(node); + return FALSE; + } + }, editor.getBody()); + }, + + mceSelectNode: function(command, ui, value) { + selection.select(value); + }, + + mceInsertContent: function(command, ui, value) { + var parser, serializer, parentNode, rootNode, fragment, args; + var marker, rng, node, node2, bookmarkHtml; + + function trimOrPaddLeftRight(html) { + var rng, container, offset; + + rng = selection.getRng(true); + container = rng.startContainer; + offset = rng.startOffset; + + function hasSiblingText(siblingName) { + return container[siblingName] && container[siblingName].nodeType == 3; + } + + if (container.nodeType == 3) { + if (offset > 0) { + html = html.replace(/^ /, ' '); + } else if (!hasSiblingText('previousSibling')) { + html = html.replace(/^ /, ' '); + } + + if (offset < container.length) { + html = html.replace(/ (
    |)$/, ' '); + } else if (!hasSiblingText('nextSibling')) { + html = html.replace(/( | )(
    |)$/, ' '); + } + } + + return html; + } + + // Check for whitespace before/after value + if (/^ | $/.test(value)) { + value = trimOrPaddLeftRight(value); + } + + // Setup parser and serializer + parser = editor.parser; + serializer = new Serializer({}, editor.schema); + bookmarkHtml = 'ÈB;'; + + // Run beforeSetContent handlers on the HTML to be inserted + args = {content: value, format: 'html', selection: true}; + editor.fire('BeforeSetContent', args); + value = args.content; + + // Add caret at end of contents if it's missing + if (value.indexOf('{$caret}') == -1) { + value += '{$caret}'; + } + + // Replace the caret marker with a span bookmark element + value = value.replace(/\{\$caret\}/, bookmarkHtml); + + // If selection is at |

    then move it into

    |

    + rng = selection.getRng(); + var caretElement = rng.startContainer || (rng.parentElement ? rng.parentElement() : null); + var body = editor.getBody(); + if (caretElement === body && selection.isCollapsed()) { + if (dom.isBlock(body.firstChild) && dom.isEmpty(body.firstChild)) { + rng = dom.createRng(); + rng.setStart(body.firstChild, 0); + rng.setEnd(body.firstChild, 0); + selection.setRng(rng); + } + } + + // Insert node maker where we will insert the new HTML and get it's parent + if (!selection.isCollapsed()) { + editor.getDoc().execCommand('Delete', false, null); + } + + parentNode = selection.getNode(); + + // Parse the fragment within the context of the parent node + var parserArgs = {context: parentNode.nodeName.toLowerCase()}; + fragment = parser.parse(value, parserArgs); + + // Move the caret to a more suitable location + node = fragment.lastChild; + if (node.attr('id') == 'mce_marker') { + marker = node; + + for (node = node.prev; node; node = node.walk(true)) { + if (node.type == 3 || !dom.isBlock(node.name)) { + node.parent.insert(marker, node, node.name === 'br'); + break; + } + } + } + + // If parser says valid we can insert the contents into that parent + if (!parserArgs.invalid) { + value = serializer.serialize(fragment); + + // Check if parent is empty or only has one BR element then set the innerHTML of that parent + node = parentNode.firstChild; + node2 = parentNode.lastChild; + if (!node || (node === node2 && node.nodeName === 'BR')) { + dom.setHTML(parentNode, value); + } else { + selection.setContent(value); + } + } else { + // If the fragment was invalid within that context then we need + // to parse and process the parent it's inserted into + + // Insert bookmark node and get the parent + selection.setContent(bookmarkHtml); + parentNode = selection.getNode(); + rootNode = editor.getBody(); + + // Opera will return the document node when selection is in root + if (parentNode.nodeType == 9) { + parentNode = node = rootNode; + } else { + node = parentNode; + } + + // Find the ancestor just before the root element + while (node !== rootNode) { + parentNode = node; + node = node.parentNode; + } + + // Get the outer/inner HTML depending on if we are in the root and parser and serialize that + value = parentNode == rootNode ? rootNode.innerHTML : dom.getOuterHTML(parentNode); + value = serializer.serialize( + parser.parse( + // Need to replace by using a function since $ in the contents would otherwise be a problem + value.replace(//i, function() { + return serializer.serialize(fragment); + }) + ) + ); + + // Set the inner/outer HTML depending on if we are in the root or not + if (parentNode == rootNode) { + dom.setHTML(rootNode, value); + } else { + dom.setOuterHTML(parentNode, value); + } + } + + marker = dom.get('mce_marker'); + selection.scrollIntoView(marker); + + // Move selection before marker and remove it + rng = dom.createRng(); + + // If previous sibling is a text node set the selection to the end of that node + node = marker.previousSibling; + if (node && node.nodeType == 3) { + rng.setStart(node, node.nodeValue.length); + + // TODO: Why can't we normalize on IE + if (!isIE) { + node2 = marker.nextSibling; + if (node2 && node2.nodeType == 3) { + node.appendData(node2.data); + node2.parentNode.removeChild(node2); + } + } + } else { + // If the previous sibling isn't a text node or doesn't exist set the selection before the marker node + rng.setStartBefore(marker); + rng.setEndBefore(marker); + } + + // Remove the marker node and set the new range + dom.remove(marker); + selection.setRng(rng); + + // Dispatch after event and add any visual elements needed + editor.fire('SetContent', args); + editor.addVisual(); + }, + + mceInsertRawHTML: function(command, ui, value) { + selection.setContent('tiny_mce_marker'); + editor.setContent( + editor.getContent().replace(/tiny_mce_marker/g, function() { + return value; + }) + ); + }, + + mceToggleFormat: function(command, ui, value) { + toggleFormat(value); + }, + + mceSetContent: function(command, ui, value) { + editor.setContent(value); + }, + + 'Indent,Outdent': function(command) { + var intentValue, indentUnit, value; + + // Setup indent level + intentValue = settings.indentation; + indentUnit = /[a-z%]+$/i.exec(intentValue); + intentValue = parseInt(intentValue, 10); + + if (!queryCommandState('InsertUnorderedList') && !queryCommandState('InsertOrderedList')) { + // If forced_root_blocks is set to false we don't have a block to indent so lets create a div + if (!settings.forced_root_block && !dom.getParent(selection.getNode(), dom.isBlock)) { + formatter.apply('div'); + } + + each(selection.getSelectedBlocks(), function(element) { + if (element.nodeName != "LI") { + var indentStyleName = editor.getParam('indent_use_margin', false) ? 'margin' : 'padding'; + + indentStyleName += dom.getStyle(element, 'direction', true) == 'rtl' ? 'Right' : 'Left'; + + if (command == 'outdent') { + value = Math.max(0, parseInt(element.style[indentStyleName] || 0, 10) - intentValue); + dom.setStyle(element, indentStyleName, value ? value + indentUnit : ''); + } else { + value = (parseInt(element.style[indentStyleName] || 0, 10) + intentValue) + indentUnit; + dom.setStyle(element, indentStyleName, value); + } + } + }); + } else { + execNativeCommand(command); + } + }, + + mceRepaint: function() { + if (isGecko) { + try { + storeSelection(TRUE); + + if (selection.getSel()) { + selection.getSel().selectAllChildren(editor.getBody()); + } + + selection.collapse(TRUE); + restoreSelection(); + } catch (ex) { + // Ignore + } + } + }, + + InsertHorizontalRule: function() { + editor.execCommand('mceInsertContent', false, '
    '); + }, + + mceToggleVisualAid: function() { + editor.hasVisual = !editor.hasVisual; + editor.addVisual(); + }, + + mceReplaceContent: function(command, ui, value) { + editor.execCommand('mceInsertContent', false, value.replace(/\{\$selection\}/g, selection.getContent({format: 'text'}))); + }, + + mceInsertLink: function(command, ui, value) { + var anchor; + + if (typeof(value) == 'string') { + value = {href: value}; + } + + anchor = dom.getParent(selection.getNode(), 'a'); + + // Spaces are never valid in URLs and it's a very common mistake for people to make so we fix it here. + value.href = value.href.replace(' ', '%20'); + + // Remove existing links if there could be child links or that the href isn't specified + if (!anchor || !value.href) { + formatter.remove('link'); + } + + // Apply new link to selection + if (value.href) { + formatter.apply('link', value, anchor); + } + }, + + selectAll: function() { + var root = dom.getRoot(), rng; + + if (selection.getRng().setStart) { + rng = dom.createRng(); + rng.setStart(root, 0); + rng.setEnd(root, root.childNodes.length); + selection.setRng(rng); + } else { + // IE will render it's own root level block elements and sometimes + // even put font elements in them when the user starts typing. So we need to + // move the selection to a more suitable element from this: + // |

    to this:

    |

    + rng = selection.getRng(); + if (!rng.item) { + rng.moveToElementText(root); + rng.select(); + } + } + }, + + "delete": function() { + execNativeCommand("Delete"); + + // Check if body is empty after the delete call if so then set the contents + // to an empty string and move the caret to any block produced by that operation + // this fixes the issue with root blocks not being properly produced after a delete call on IE + var body = editor.getBody(); + + if (dom.isEmpty(body)) { + editor.setContent(''); + + if (body.firstChild && dom.isBlock(body.firstChild)) { + editor.selection.setCursorLocation(body.firstChild, 0); + } else { + editor.selection.setCursorLocation(body, 0); + } + } + }, + + mceNewDocument: function() { + editor.setContent(''); + } + }); + + // Add queryCommandState overrides + addCommands({ + // Override justify commands + 'JustifyLeft,JustifyCenter,JustifyRight,JustifyFull': function(command) { + var name = 'align' + command.substring(7); + var nodes = selection.isCollapsed() ? [dom.getParent(selection.getNode(), dom.isBlock)] : selection.getSelectedBlocks(); + var matches = map(nodes, function(node) { + return !!formatter.matchNode(node, name); + }); + return inArray(matches, TRUE) !== -1; + }, + + 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': function(command) { + return isFormatMatch(command); + }, + + mceBlockQuote: function() { + return isFormatMatch('blockquote'); + }, + + Outdent: function() { + var node; + + if (settings.inline_styles) { + if ((node = dom.getParent(selection.getStart(), dom.isBlock)) && parseInt(node.style.paddingLeft, 10) > 0) { + return TRUE; + } + + if ((node = dom.getParent(selection.getEnd(), dom.isBlock)) && parseInt(node.style.paddingLeft, 10) > 0) { + return TRUE; + } + } + + return ( + queryCommandState('InsertUnorderedList') || + queryCommandState('InsertOrderedList') || + (!settings.inline_styles && !!dom.getParent(selection.getNode(), 'BLOCKQUOTE')) + ); + }, + + 'InsertUnorderedList,InsertOrderedList': function(command) { + var list = dom.getParent(selection.getNode(), 'ul,ol'); + + return list && + ( + command === 'insertunorderedlist' && list.tagName === 'UL' || + command === 'insertorderedlist' && list.tagName === 'OL' + ); + } + }, 'state'); + + // Add queryCommandValue overrides + addCommands({ + 'FontSize,FontName': function(command) { + var value = 0, parent; + + if ((parent = dom.getParent(selection.getNode(), 'span'))) { + if (command == 'fontsize') { + value = parent.style.fontSize; + } else { + value = parent.style.fontFamily.replace(/, /g, ',').replace(/[\'\"]/g, '').toLowerCase(); + } + } + + return value; + } + }, 'value'); + + // Add undo manager logic + addCommands({ + Undo: function() { + editor.undoManager.undo(); + }, + + Redo: function() { + editor.undoManager.redo(); + } + }); + }; +}); diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/EditorManager.js b/common/static/js/vendor/tinymce/js/tinymce/classes/EditorManager.js new file mode 100755 index 0000000000..bc3294c976 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/EditorManager.js @@ -0,0 +1,574 @@ +/** + * EditorManager.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class used as a factory for manager for tinymce.Editor instances. + * + * @example + * tinymce.EditorManager.init({}); + * + * @class tinymce.EditorManager + * @mixes tinymce.util.Observable + * @static + */ +define("tinymce/EditorManager", [ + "tinymce/Editor", + "tinymce/dom/DOMUtils", + "tinymce/util/URI", + "tinymce/Env", + "tinymce/util/Tools", + "tinymce/util/Observable", + "tinymce/util/I18n", + "tinymce/FocusManager" +], function(Editor, DOMUtils, URI, Env, Tools, Observable, I18n, FocusManager) { + var DOM = DOMUtils.DOM; + var explode = Tools.explode, each = Tools.each, extend = Tools.extend; + var instanceCounter = 0, beforeUnloadDelegate; + + var EditorManager = { + /** + * Major version of TinyMCE build. + * + * @property majorVersion + * @type String + */ + majorVersion : '@@majorVersion@@', + + /** + * Minor version of TinyMCE build. + * + * @property minorVersion + * @type String + */ + minorVersion : '@@minorVersion@@', + + /** + * Release date of TinyMCE build. + * + * @property releaseDate + * @type String + */ + releaseDate: '@@releaseDate@@', + + /** + * Collection of editor instances. + * + * @property editors + * @type Object + * @example + * for (edId in tinymce.editors) + * tinymce.editors[edId].save(); + */ + editors: [], + + /** + * Collection of language pack data. + * + * @property i18n + * @type Object + */ + i18n: I18n, + + /** + * Currently active editor instance. + * + * @property activeEditor + * @type tinymce.Editor + * @example + * tinyMCE.activeEditor.selection.getContent(); + * tinymce.EditorManager.activeEditor.selection.getContent(); + */ + activeEditor: null, + + setup: function() { + var self = this, baseURL, documentBaseURL, suffix = "", preInit; + + // Get base URL for the current document + documentBaseURL = document.location.href.replace(/[\?#].*$/, '').replace(/[\/\\][^\/]+$/, ''); + if (!/[\/\\]$/.test(documentBaseURL)) { + documentBaseURL += '/'; + } + + // If tinymce is defined and has a base use that or use the old tinyMCEPreInit + preInit = window.tinymce || window.tinyMCEPreInit; + if (preInit) { + baseURL = preInit.base || preInit.baseURL; + suffix = preInit.suffix; + } else { + // Get base where the tinymce script is located + var scripts = document.getElementsByTagName('script'); + for (var i = 0; i < scripts.length; i++) { + var src = scripts[i].src; + + // Script types supported: + // tinymce.js tinymce.min.js tinymce.dev.js + // tinymce.jquery.js tinymce.jquery.min.js tinymce.jquery.dev.js + // tinymce.full.js tinymce.full.min.js tinymce.full.dev.js + if (/tinymce(\.full|\.jquery|)(\.min|\.dev|)\.js/.test(src)) { + if (src.indexOf('.min') != -1) { + suffix = '.min'; + } + + baseURL = src.substring(0, src.lastIndexOf('/')); + break; + } + } + } + + /** + * Base URL where the root directory if TinyMCE is located. + * + * @property baseURL + * @type String + */ + self.baseURL = new URI(documentBaseURL).toAbsolute(baseURL); + + /** + * Document base URL where the current document is located. + * + * @property documentBaseURL + * @type String + */ + self.documentBaseURL = documentBaseURL; + + /** + * Absolute baseURI for the installation path of TinyMCE. + * + * @property baseURI + * @type tinymce.util.URI + */ + self.baseURI = new URI(self.baseURL); + + /** + * Current suffix to add to each plugin/theme that gets loaded for example ".min". + * + * @property suffix + * @type String + */ + self.suffix = suffix; + + self.focusManager = new FocusManager(self); + }, + + /** + * Initializes a set of editors. This method will create editors based on various settings. + * + * @method init + * @param {Object} settings Settings object to be passed to each editor instance. + * @example + * // Initializes a editor using the longer method + * tinymce.EditorManager.init({ + * some_settings : 'some value' + * }); + * + * // Initializes a editor instance using the shorter version + * tinyMCE.init({ + * some_settings : 'some value' + * }); + */ + init: function(settings) { + var self = this, editors = [], editor; + + function createId(elm) { + var id = elm.id; + + // Use element id, or unique name or generate a unique id + if (!id) { + id = elm.name; + + if (id && !DOM.get(id)) { + id = elm.name; + } else { + // Generate unique name + id = DOM.uniqueId(); + } + + elm.setAttribute('id', id); + } + + return id; + } + + function execCallback(se, n, s) { + var f = se[n]; + + if (!f) { + return; + } + + return f.apply(s || this, Array.prototype.slice.call(arguments, 2)); + } + + function hasClass(n, c) { + return c.constructor === RegExp ? c.test(n.className) : DOM.hasClass(n, c); + } + + function readyHandler() { + var l, co; + + DOM.unbind(window, 'ready', readyHandler); + + execCallback(settings, 'onpageload'); + + if (settings.types) { + // Process type specific selector + each(settings.types, function(type) { + each(DOM.select(type.selector), function(elm) { + var editor = new Editor(createId(elm), extend({}, settings, type), self); + editors.push(editor); + editor.render(1); + }); + }); + + return; + } else if (settings.selector) { + // Process global selector + each(DOM.select(settings.selector), function(elm) { + var editor = new Editor(createId(elm), settings, self); + editors.push(editor); + editor.render(1); + }); + + return; + } + + // Fallback to old setting + switch (settings.mode) { + case "exact": + l = settings.elements || ''; + + if(l.length > 0) { + each(explode(l), function(v) { + if (DOM.get(v)) { + editor = new Editor(v, settings, self); + editors.push(editor); + editor.render(true); + } else { + each(document.forms, function(f) { + each(f.elements, function(e) { + if (e.name === v) { + v = 'mce_editor_' + instanceCounter++; + DOM.setAttrib(e, 'id', v); + + editor = new Editor(v, settings, self); + editors.push(editor); + editor.render(1); + } + }); + }); + } + }); + } + break; + + case "textareas": + case "specific_textareas": + each(DOM.select('textarea'), function(elm) { + if (settings.editor_deselector && hasClass(elm, settings.editor_deselector)) { + return; + } + + if (!settings.editor_selector || hasClass(elm, settings.editor_selector)) { + editor = new Editor(createId(elm), settings, self); + editors.push(editor); + editor.render(true); + } + }); + break; + } + + // Call onInit when all editors are initialized + if (settings.oninit) { + l = co = 0; + + each(editors, function(ed) { + co++; + + if (!ed.initialized) { + // Wait for it + ed.on('init', function() { + l++; + + // All done + if (l == co) { + execCallback(settings, 'oninit'); + } + }); + } else { + l++; + } + + // All done + if (l == co) { + execCallback(settings, 'oninit'); + } + }); + } + } + + self.settings = settings; + + DOM.bind(window, 'ready', readyHandler); + }, + + /** + * Returns a editor instance by id. + * + * @method get + * @param {String/Number} id Editor instance id or index to return. + * @return {tinymce.Editor} Editor instance to return. + * @example + * // Adds an onclick event to an editor by id (shorter version) + * tinymce.get('mytextbox').on('click', function(e) { + * ed.windowManager.alert('Hello world!'); + * }); + * + * // Adds an onclick event to an editor by id (longer version) + * tinymce.EditorManager.get('mytextbox').on('click', function(e) { + * ed.windowManager.alert('Hello world!'); + * }); + */ + get: function(id) { + if (id === undefined) { + return this.editors; + } + + return this.editors[id]; + }, + + /** + * Adds an editor instance to the editor collection. This will also set it as the active editor. + * + * @method add + * @param {tinymce.Editor} editor Editor instance to add to the collection. + * @return {tinymce.Editor} The same instance that got passed in. + */ + add: function(editor) { + var self = this, editors = self.editors; + + // Add named and index editor instance + editors[editor.id] = editor; + editors.push(editor); + + self.activeEditor = editor; + + /** + * Fires when an editor is added to the EditorManager collection. + * + * @event AddEditor + * @param {Object} e Event arguments. + */ + self.fire('AddEditor', {editor: editor}); + + if (!beforeUnloadDelegate) { + beforeUnloadDelegate = function() { + self.fire('BeforeUnload'); + }; + + DOM.bind(window, 'beforeunload', beforeUnloadDelegate); + } + + return editor; + }, + + /** + * Creates an editor instance and adds it to the EditorManager collection. + * + * @method createEditor + * @param {String} id Instance id to use for editor. + * @param {Object} settings Editor instance settings. + * @return {tinymce.Editor} Editor instance that got created. + */ + createEditor: function(id, settings) { + return this.add(new Editor(id, settings, this)); + }, + + /** + * Removes a editor or editors form page. + * + * @example + * // Remove all editors bound to divs + * tinymce.remove('div'); + * + * // Remove all editors bound to textareas + * tinymce.remove('textarea'); + * + * // Remove all editors + * tinymce.remove(); + * + * // Remove specific instance by id + * tinymce.remove('#id'); + * + * @method remove + * @param {tinymce.Editor/String/Object} [selector] CSS selector or editor instance to remove. + * @return {tinymce.Editor} The editor that got passed in will be return if it was found otherwise null. + */ + remove: function(selector) { + var self = this, i, editors = self.editors, editor, removedFromList; + + // Remove all editors + if (!selector) { + for (i = editors.length - 1; i >= 0; i--) { + self.remove(editors[i]); + } + + return; + } + + // Remove editors by selector + if (typeof(selector) == "string") { + selector = selector.selector || selector; + + each(DOM.select(selector), function(elm) { + self.remove(editors[elm.id]); + }); + + return; + } + + // Remove specific editor + editor = selector; + + // Not in the collection + if (!editors[editor.id]) { + return null; + } + + delete editors[editor.id]; + + for (i = 0; i < editors.length; i++) { + if (editors[i] == editor) { + editors.splice(i, 1); + removedFromList = true; + break; + } + } + + // Select another editor since the active one was removed + if (self.activeEditor == editor) { + self.activeEditor = editors[0]; + } + + /** + * Fires when an editor is removed from EditorManager collection. + * + * @event RemoveEditor + * @param {Object} e Event arguments. + */ + if (removedFromList) { + self.fire('RemoveEditor', {editor: editor}); + } + + if (!editors.length) { + DOM.unbind(window, 'beforeunload', beforeUnloadDelegate); + } + + editor.remove(); + + return editor; + }, + + /** + * Executes a specific command on the currently active editor. + * + * @method execCommand + * @param {String} c Command to perform for example Bold. + * @param {Boolean} u Optional boolean state if a UI should be presented for the command or not. + * @param {String} v Optional value parameter like for example an URL to a link. + * @return {Boolean} true/false if the command was executed or not. + */ + execCommand: function(cmd, ui, value) { + var self = this, editor = self.get(value); + + // Manager commands + switch (cmd) { + case "mceAddEditor": + if (!self.get(value)) { + new Editor(value, self.settings, self).render(); + } + + return true; + + case "mceRemoveEditor": + if (editor) { + editor.remove(); + } + + return true; + + case 'mceToggleEditor': + if (!editor) { + self.execCommand('mceAddEditor', 0, value); + return true; + } + + if (editor.isHidden()) { + editor.show(); + } else { + editor.hide(); + } + + return true; + } + + // Run command on active editor + if (self.activeEditor) { + return self.activeEditor.execCommand(cmd, ui, value); + } + + return false; + }, + + /** + * Calls the save method on all editor instances in the collection. This can be useful when a form is to be submitted. + * + * @method triggerSave + * @example + * // Saves all contents + * tinyMCE.triggerSave(); + */ + triggerSave: function() { + each(this.editors, function(editor) { + editor.save(); + }); + }, + + /** + * Adds a language pack, this gets called by the loaded language files like en.js. + * + * @method addI18n + * @param {String} code Optional language code. + * @param {Object} items Name/value object with translations. + */ + addI18n: function(code, items) { + I18n.add(code, items); + }, + + /** + * Translates the specified string using the language pack items. + * + * @method translate + * @param {String/Array/Object} text String to translate + * @return {String} Translated string. + */ + translate: function(text) { + return I18n.translate(text); + } + }; + + extend(EditorManager, Observable); + + EditorManager.setup(); + + // Export EditorManager as tinymce/tinymce in global namespace + window.tinymce = window.tinyMCE = EditorManager; + + return EditorManager; +}); diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/EnterKey.js b/common/static/js/vendor/tinymce/js/tinymce/classes/EnterKey.js new file mode 100755 index 0000000000..325ab28c00 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/EnterKey.js @@ -0,0 +1,670 @@ +/** + * EnterKey.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Contains logic for handling the enter key to split/generate block elements. + */ +define("tinymce/EnterKey", [ + "tinymce/dom/TreeWalker", + "tinymce/dom/RangeUtils", + "tinymce/Env" +], function(TreeWalker, RangeUtils, Env) { + var isIE = Env.ie && Env.ie < 11; + + return function(editor) { + var dom = editor.dom, selection = editor.selection, settings = editor.settings; + var undoManager = editor.undoManager, schema = editor.schema, nonEmptyElementsMap = schema.getNonEmptyElements(); + + function handleEnterKey(evt) { + var rng, tmpRng, editableRoot, container, offset, parentBlock, documentMode, shiftKey, + newBlock, fragment, containerBlock, parentBlockName, containerBlockName, newBlockName, isAfterLastNodeInContainer; + + // Returns true if the block can be split into two blocks or not + function canSplitBlock(node) { + return node && + dom.isBlock(node) && + !/^(TD|TH|CAPTION|FORM)$/.test(node.nodeName) && + !/^(fixed|absolute)/i.test(node.style.position) && + dom.getContentEditable(node) !== "true"; + } + + // Renders empty block on IE + function renderBlockOnIE(block) { + var oldRng; + + if (dom.isBlock(block)) { + oldRng = selection.getRng(); + block.appendChild(dom.create('span', null, '\u00a0')); + selection.select(block); + block.lastChild.outerHTML = ''; + selection.setRng(oldRng); + } + } + + // Remove the first empty inline element of the block so this:

    x

    becomes this:

    x

    + function trimInlineElementsOnLeftSideOfBlock(block) { + var node = block, firstChilds = [], i; + + // Find inner most first child ex:

    *

    + while ((node = node.firstChild)) { + if (dom.isBlock(node)) { + return; + } + + if (node.nodeType == 1 && !nonEmptyElementsMap[node.nodeName.toLowerCase()]) { + firstChilds.push(node); + } + } + + i = firstChilds.length; + while (i--) { + node = firstChilds[i]; + if (!node.hasChildNodes() || (node.firstChild == node.lastChild && node.firstChild.nodeValue === '')) { + dom.remove(node); + } else { + // Remove see #5381 + if (node.nodeName == "A" && (node.innerText || node.textContent) === ' ') { + dom.remove(node); + } + } + } + } + + // Moves the caret to a suitable position within the root for example in the first non + // pure whitespace text node or before an image + function moveToCaretPosition(root) { + var walker, node, rng, lastNode = root, tempElm; + + function firstNonWhiteSpaceNodeSibling(node) { + while (node) { + if (node.nodeType == 1 || (node.nodeType == 3 && node.data && /[\r\n\s]/.test(node.data))) { + return node; + } + + node = node.nextSibling; + } + } + + // Old IE versions doesn't properly render blocks with br elements in them + // For example


    wont be rendered correctly in a contentEditable area + // until you remove the br producing

    + if (Env.ie && Env.ie < 9 && parentBlock && parentBlock.firstChild) { + if (parentBlock.firstChild == parentBlock.lastChild && parentBlock.firstChild.tagName == 'BR') { + dom.remove(parentBlock.firstChild); + } + } + + if (root.nodeName == 'LI') { + var firstChild = firstNonWhiteSpaceNodeSibling(root.firstChild); + + if (firstChild && /^(UL|OL)$/.test(firstChild.nodeName)) { + root.insertBefore(dom.doc.createTextNode('\u00a0'), root.firstChild); + } + } + + rng = dom.createRng(); + + if (root.hasChildNodes()) { + walker = new TreeWalker(root, root); + + while ((node = walker.current())) { + if (node.nodeType == 3) { + rng.setStart(node, 0); + rng.setEnd(node, 0); + break; + } + + if (nonEmptyElementsMap[node.nodeName.toLowerCase()]) { + rng.setStartBefore(node); + rng.setEndBefore(node); + break; + } + + lastNode = node; + node = walker.next(); + } + + if (!node) { + rng.setStart(lastNode, 0); + rng.setEnd(lastNode, 0); + } + } else { + if (root.nodeName == 'BR') { + if (root.nextSibling && dom.isBlock(root.nextSibling)) { + // Trick on older IE versions to render the caret before the BR between two lists + if (!documentMode || documentMode < 9) { + tempElm = dom.create('br'); + root.parentNode.insertBefore(tempElm, root); + } + + rng.setStartBefore(root); + rng.setEndBefore(root); + } else { + rng.setStartAfter(root); + rng.setEndAfter(root); + } + } else { + rng.setStart(root, 0); + rng.setEnd(root, 0); + } + } + + selection.setRng(rng); + + // Remove tempElm created for old IE:s + dom.remove(tempElm); + selection.scrollIntoView(root); + } + + function setForcedBlockAttrs(node) { + var forcedRootBlockName = settings.forced_root_block; + + if (forcedRootBlockName && forcedRootBlockName.toLowerCase() === node.tagName.toLowerCase()) { + dom.setAttribs(node, settings.forced_root_block_attrs); + } + } + + // Creates a new block element by cloning the current one or creating a new one if the name is specified + // This function will also copy any text formatting from the parent block and add it to the new one + function createNewBlock(name) { + var node = container, block, clonedNode, caretNode; + + if (name || parentBlockName == "TABLE") { + block = dom.create(name || newBlockName); + setForcedBlockAttrs(block); + } else { + block = parentBlock.cloneNode(false); + } + + caretNode = block; + + // Clone any parent styles + if (settings.keep_styles !== false) { + do { + if (/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U|VAR|CITE|DFN|CODE|MARK|Q|SUP|SUB|SAMP)$/.test(node.nodeName)) { + // Never clone a caret containers + if (node.id == '_mce_caret') { + continue; + } + + clonedNode = node.cloneNode(false); + dom.setAttrib(clonedNode, 'id', ''); // Remove ID since it needs to be document unique + + if (block.hasChildNodes()) { + clonedNode.appendChild(block.firstChild); + block.appendChild(clonedNode); + } else { + caretNode = clonedNode; + block.appendChild(clonedNode); + } + } + } while ((node = node.parentNode)); + } + + // BR is needed in empty blocks on non IE browsers + if (!isIE) { + caretNode.innerHTML = '
    '; + } + + return block; + } + + // Returns true/false if the caret is at the start/end of the parent block element + function isCaretAtStartOrEndOfBlock(start) { + var walker, node, name; + + // Caret is in the middle of a text node like "a|b" + if (container.nodeType == 3 && (start ? offset > 0 : offset < container.nodeValue.length)) { + return false; + } + + // If after the last element in block node edge case for #5091 + if (container.parentNode == parentBlock && isAfterLastNodeInContainer && !start) { + return true; + } + + // If the caret if before the first element in parentBlock + if (start && container.nodeType == 1 && container == parentBlock.firstChild) { + return true; + } + + // Caret can be before/after a table + if (container.nodeName === "TABLE" || (container.previousSibling && container.previousSibling.nodeName == "TABLE")) { + return (isAfterLastNodeInContainer && !start) || (!isAfterLastNodeInContainer && start); + } + + // Walk the DOM and look for text nodes or non empty elements + walker = new TreeWalker(container, parentBlock); + + // If caret is in beginning or end of a text block then jump to the next/previous node + if (container.nodeType == 3) { + if (start && offset === 0) { + walker.prev(); + } else if (!start && offset == container.nodeValue.length) { + walker.next(); + } + } + + while ((node = walker.current())) { + if (node.nodeType === 1) { + // Ignore bogus elements + if (!node.getAttribute('data-mce-bogus')) { + // Keep empty elements like but not trailing br:s like

    text|

    + name = node.nodeName.toLowerCase(); + if (nonEmptyElementsMap[name] && name !== 'br') { + return false; + } + } + } else if (node.nodeType === 3 && !/^[ \t\r\n]*$/.test(node.nodeValue)) { + return false; + } + + if (start) { + walker.prev(); + } else { + walker.next(); + } + } + + return true; + } + + // Wraps any text nodes or inline elements in the specified forced root block name + function wrapSelfAndSiblingsInDefaultBlock(container, offset) { + var newBlock, parentBlock, startNode, node, next, rootBlockName, blockName = newBlockName || 'P'; + + // Not in a block element or in a table cell or caption + parentBlock = dom.getParent(container, dom.isBlock); + rootBlockName = editor.getBody().nodeName.toLowerCase(); + if (!parentBlock || !canSplitBlock(parentBlock)) { + parentBlock = parentBlock || editableRoot; + + if (!parentBlock.hasChildNodes()) { + newBlock = dom.create(blockName); + setForcedBlockAttrs(newBlock); + parentBlock.appendChild(newBlock); + rng.setStart(newBlock, 0); + rng.setEnd(newBlock, 0); + return newBlock; + } + + // Find parent that is the first child of parentBlock + node = container; + while (node.parentNode != parentBlock) { + node = node.parentNode; + } + + // Loop left to find start node start wrapping at + while (node && !dom.isBlock(node)) { + startNode = node; + node = node.previousSibling; + } + + if (startNode && schema.isValidChild(rootBlockName, blockName.toLowerCase())) { + newBlock = dom.create(blockName); + setForcedBlockAttrs(newBlock); + startNode.parentNode.insertBefore(newBlock, startNode); + + // Start wrapping until we hit a block + node = startNode; + while (node && !dom.isBlock(node)) { + next = node.nextSibling; + newBlock.appendChild(node); + node = next; + } + + // Restore range to it's past location + rng.setStart(container, offset); + rng.setEnd(container, offset); + } + } + + return container; + } + + // Inserts a block or br before/after or in the middle of a split list of the LI is empty + function handleEmptyListItem() { + function isFirstOrLastLi(first) { + var node = containerBlock[first ? 'firstChild' : 'lastChild']; + + // Find first/last element since there might be whitespace there + while (node) { + if (node.nodeType == 1) { + break; + } + + node = node[first ? 'nextSibling' : 'previousSibling']; + } + + return node === parentBlock; + } + + function getContainerBlock() { + var containerBlockParent = containerBlock.parentNode; + + if (containerBlockParent.nodeName == 'LI') { + return containerBlockParent; + } + + return containerBlock; + } + + // Check if we are in an nested list + var containerBlockParentName = containerBlock.parentNode.nodeName; + if (/^(OL|UL|LI)$/.test(containerBlockParentName)) { + newBlockName = 'LI'; + } + + newBlock = newBlockName ? createNewBlock(newBlockName) : dom.create('BR'); + + if (isFirstOrLastLi(true) && isFirstOrLastLi()) { + if (containerBlockParentName == 'LI') { + // Nested list is inside a LI + dom.insertAfter(newBlock, getContainerBlock()); + } else { + // Is first and last list item then replace the OL/UL with a text block + dom.replace(newBlock, containerBlock); + } + } else if (isFirstOrLastLi(true)) { + if (containerBlockParentName == 'LI') { + // List nested in an LI then move the list to a new sibling LI + dom.insertAfter(newBlock, getContainerBlock()); + newBlock.appendChild(dom.doc.createTextNode(' ')); // Needed for IE so the caret can be placed + newBlock.appendChild(containerBlock); + } else { + // First LI in list then remove LI and add text block before list + containerBlock.parentNode.insertBefore(newBlock, containerBlock); + } + } else if (isFirstOrLastLi()) { + // Last LI in list then remove LI and add text block after list + dom.insertAfter(newBlock, getContainerBlock()); + renderBlockOnIE(newBlock); + } else { + // Middle LI in list the split the list and insert a text block in the middle + // Extract after fragment and insert it after the current block + containerBlock = getContainerBlock(); + tmpRng = rng.cloneRange(); + tmpRng.setStartAfter(parentBlock); + tmpRng.setEndAfter(containerBlock); + fragment = tmpRng.extractContents(); + + if (newBlockName == 'LI' && fragment.firstChild.nodeName == 'LI') { + newBlock = fragment.firstChild; + dom.insertAfter(fragment, containerBlock); + } else { + dom.insertAfter(fragment, containerBlock); + dom.insertAfter(newBlock, containerBlock); + } + } + + dom.remove(parentBlock); + moveToCaretPosition(newBlock); + undoManager.add(); + } + + // Walks the parent block to the right and look for BR elements + function hasRightSideContent() { + var walker = new TreeWalker(container, parentBlock), node; + + while ((node = walker.next())) { + if (nonEmptyElementsMap[node.nodeName.toLowerCase()] || node.length > 0) { + return true; + } + } + } + + // Inserts a BR element if the forced_root_block option is set to false or empty string + function insertBr() { + var brElm, extraBr, marker; + + if (container && container.nodeType == 3 && offset >= container.nodeValue.length) { + // Insert extra BR element at the end block elements + if (!isIE && !hasRightSideContent()) { + brElm = dom.create('br'); + rng.insertNode(brElm); + rng.setStartAfter(brElm); + rng.setEndAfter(brElm); + extraBr = true; + } + } + + brElm = dom.create('br'); + rng.insertNode(brElm); + + // Rendering modes below IE8 doesn't display BR elements in PRE unless we have a \n before it + if (isIE && parentBlockName == 'PRE' && (!documentMode || documentMode < 8)) { + brElm.parentNode.insertBefore(dom.doc.createTextNode('\r'), brElm); + } + + // Insert temp marker and scroll to that + marker = dom.create('span', {}, ' '); + brElm.parentNode.insertBefore(marker, brElm); + selection.scrollIntoView(marker); + dom.remove(marker); + + if (!extraBr) { + rng.setStartAfter(brElm); + rng.setEndAfter(brElm); + } else { + rng.setStartBefore(brElm); + rng.setEndBefore(brElm); + } + + selection.setRng(rng); + undoManager.add(); + } + + // Trims any linebreaks at the beginning of node user for example when pressing enter in a PRE element + function trimLeadingLineBreaks(node) { + do { + if (node.nodeType === 3) { + node.nodeValue = node.nodeValue.replace(/^[\r\n]+/, ''); + } + + node = node.firstChild; + } while (node); + } + + function getEditableRoot(node) { + var root = dom.getRoot(), parent, editableRoot; + + // Get all parents until we hit a non editable parent or the root + parent = node; + while (parent !== root && dom.getContentEditable(parent) !== "false") { + if (dom.getContentEditable(parent) === "true") { + editableRoot = parent; + } + + parent = parent.parentNode; + } + + return parent !== root ? editableRoot : root; + } + + // Adds a BR at the end of blocks that only contains an IMG or INPUT since + // these might be floated and then they won't expand the block + function addBrToBlockIfNeeded(block) { + var lastChild; + + // IE will render the blocks correctly other browsers needs a BR + if (!isIE) { + block.normalize(); // Remove empty text nodes that got left behind by the extract + + // Check if the block is empty or contains a floated last child + lastChild = block.lastChild; + if (!lastChild || (/^(left|right)$/gi.test(dom.getStyle(lastChild, 'float', true)))) { + dom.add(block, 'br'); + } + } + } + + rng = selection.getRng(true); + + // Event is blocked by some other handler for example the lists plugin + if (evt.isDefaultPrevented()) { + return; + } + + // Delete any selected contents + if (!rng.collapsed) { + editor.execCommand('Delete'); + return; + } + + // Setup range items and newBlockName + new RangeUtils(dom).normalize(rng); + container = rng.startContainer; + offset = rng.startOffset; + newBlockName = (settings.force_p_newlines ? 'p' : '') || settings.forced_root_block; + newBlockName = newBlockName ? newBlockName.toUpperCase() : ''; + documentMode = dom.doc.documentMode; + shiftKey = evt.shiftKey; + + // Resolve node index + if (container.nodeType == 1 && container.hasChildNodes()) { + isAfterLastNodeInContainer = offset > container.childNodes.length - 1; + + container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container; + if (isAfterLastNodeInContainer && container.nodeType == 3) { + offset = container.nodeValue.length; + } else { + offset = 0; + } + } + + // Get editable root node normaly the body element but sometimes a div or span + editableRoot = getEditableRoot(container); + + // If there is no editable root then enter is done inside a contentEditable false element + if (!editableRoot) { + return; + } + + undoManager.beforeChange(); + + // If editable root isn't block nor the root of the editor + if (!dom.isBlock(editableRoot) && editableRoot != dom.getRoot()) { + if (!newBlockName || shiftKey) { + insertBr(); + } + + return; + } + + // Wrap the current node and it's sibling in a default block if it's needed. + // for example this text|text2 will become this

    text|text2

    + // This won't happen if root blocks are disabled or the shiftKey is pressed + if ((newBlockName && !shiftKey) || (!newBlockName && shiftKey)) { + container = wrapSelfAndSiblingsInDefaultBlock(container, offset); + } + + // Find parent block and setup empty block paddings + parentBlock = dom.getParent(container, dom.isBlock); + containerBlock = parentBlock ? dom.getParent(parentBlock.parentNode, dom.isBlock) : null; + + // Setup block names + parentBlockName = parentBlock ? parentBlock.nodeName.toUpperCase() : ''; // IE < 9 & HTML5 + containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : ''; // IE < 9 & HTML5 + + // Enter inside block contained within a LI then split or insert before/after LI + if (containerBlockName == 'LI' && !evt.ctrlKey) { + parentBlock = containerBlock; + parentBlockName = containerBlockName; + } + + // Handle enter in LI + if (parentBlockName == 'LI') { + if (!newBlockName && shiftKey) { + insertBr(); + return; + } + + // Handle enter inside an empty list item + if (dom.isEmpty(parentBlock)) { + handleEmptyListItem(); + return; + } + } + + // Don't split PRE tags but insert a BR instead easier when writing code samples etc + if (parentBlockName == 'PRE' && settings.br_in_pre !== false) { + if (!shiftKey) { + insertBr(); + return; + } + } else { + // If no root block is configured then insert a BR by default or if the shiftKey is pressed + if ((!newBlockName && !shiftKey && parentBlockName != 'LI') || (newBlockName && shiftKey)) { + insertBr(); + return; + } + } + + // If parent block is root then never insert new blocks + if (newBlockName && parentBlock === editor.getBody()) { + return; + } + + // Default block name if it's not configured + newBlockName = newBlockName || 'P'; + + // Insert new block before/after the parent block depending on caret location + if (isCaretAtStartOrEndOfBlock()) { + // If the caret is at the end of a header we produce a P tag after it similar to Word unless we are in a hgroup + if (/^(H[1-6]|PRE|FIGURE)$/.test(parentBlockName) && containerBlockName != 'HGROUP') { + newBlock = createNewBlock(newBlockName); + } else { + newBlock = createNewBlock(); + } + + // Split the current container block element if enter is pressed inside an empty inner block element + if (settings.end_container_on_empty_block && canSplitBlock(containerBlock) && dom.isEmpty(parentBlock)) { + // Split container block for example a BLOCKQUOTE at the current blockParent location for example a P + newBlock = dom.split(containerBlock, parentBlock); + } else { + dom.insertAfter(newBlock, parentBlock); + } + + moveToCaretPosition(newBlock); + } else if (isCaretAtStartOrEndOfBlock(true)) { + // Insert new block before + newBlock = parentBlock.parentNode.insertBefore(createNewBlock(), parentBlock); + renderBlockOnIE(newBlock); + moveToCaretPosition(parentBlock); + } else { + // Extract after fragment and insert it after the current block + tmpRng = rng.cloneRange(); + tmpRng.setEndAfter(parentBlock); + fragment = tmpRng.extractContents(); + trimLeadingLineBreaks(fragment); + newBlock = fragment.firstChild; + dom.insertAfter(fragment, parentBlock); + trimInlineElementsOnLeftSideOfBlock(newBlock); + addBrToBlockIfNeeded(parentBlock); + moveToCaretPosition(newBlock); + } + + dom.setAttrib(newBlock, 'id', ''); // Remove ID since it needs to be document unique + + // Allow custom handling of new blocks + editor.fire('NewBlock', { newBlock: newBlock }); + + undoManager.add(); + } + + editor.on('keydown', function(evt) { + if (evt.keyCode == 13) { + if (handleEnterKey(evt) !== false) { + evt.preventDefault(); + } + } + }); + }; +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/Env.js b/common/static/js/vendor/tinymce/js/tinymce/classes/Env.js new file mode 100755 index 0000000000..8bf2c6ef84 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/Env.js @@ -0,0 +1,135 @@ +/** + * Env.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class contains various environment constants like browser versions etc. + * Normally you don't want to sniff specific browser versions but sometimes you have + * to when it's impossible to feature detect. So use this with care. + * + * @class tinymce.Env + * @static + */ +define("tinymce/Env", [], function() { + var nav = navigator, userAgent = nav.userAgent; + var opera, webkit, ie, ie11, gecko, mac, iDevice; + + opera = window.opera && window.opera.buildNumber; + webkit = /WebKit/.test(userAgent); + ie = !webkit && !opera && (/MSIE/gi).test(userAgent) && (/Explorer/gi).test(nav.appName); + ie = ie && /MSIE (\w+)\./.exec(userAgent)[1]; + ie11 = userAgent.indexOf('Trident/') != -1 && (userAgent.indexOf('rv:') != -1 || nav.appName.indexOf('Netscape') != -1) ? 11 : false; + ie = ie || ie11; + gecko = !webkit && !ie11 && /Gecko/.test(userAgent); + mac = userAgent.indexOf('Mac') != -1; + iDevice = /(iPad|iPhone)/.test(userAgent); + + // Is a iPad/iPhone and not on iOS5 sniff the WebKit version since older iOS WebKit versions + // says it has contentEditable support but there is no visible caret. + var contentEditable = !iDevice || userAgent.match(/AppleWebKit\/(\d*)/)[1] >= 534; + + return { + /** + * Constant that is true if the browser is Opera. + * + * @property opera + * @type Boolean + * @final + */ + opera: opera, + + /** + * Constant that is true if the browser is WebKit (Safari/Chrome). + * + * @property webKit + * @type Boolean + * @final + */ + webkit: webkit, + + /** + * Constant that is more than zero if the browser is IE. + * + * @property ie + * @type Boolean + * @final + */ + ie: ie, + + /** + * Constant that is true if the browser is Gecko. + * + * @property gecko + * @type Boolean + * @final + */ + gecko: gecko, + + /** + * Constant that is true if the os is Mac OS. + * + * @property mac + * @type Boolean + * @final + */ + mac: mac, + + /** + * Constant that is true if the os is iOS. + * + * @property iOS + * @type Boolean + * @final + */ + iOS: iDevice, + + /** + * Constant that is true if the browser supports editing. + * + * @property contentEditable + * @type Boolean + * @final + */ + contentEditable: contentEditable, + + /** + * Transparent image data url. + * + * @property transparentSrc + * @type Boolean + * @final + */ + transparentSrc: "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7", + + /** + * Returns true/false if the browser can or can't place the caret after a inline block like an image. + * + * @property noCaretAfter + * @type Boolean + * @final + */ + caretAfter: ie != 8, + + /** + * Constant that is true if the browser supports native DOM Ranges. IE 9+. + * + * @property range + * @type Boolean + */ + range: window.getSelection && "Range" in window, + + /** + * Returns the IE document mode for non IE browsers this will fake IE 10. + * + * @property documentMode + * @type Number + */ + documentMode: ie ? (document.documentMode || 7) : 10 + }; +}); diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/FocusManager.js b/common/static/js/vendor/tinymce/js/tinymce/classes/FocusManager.js new file mode 100755 index 0000000000..dca96befc6 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/FocusManager.js @@ -0,0 +1,230 @@ +/** + * FocusManager.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class manages the focus/blur state of the editor. This class is needed since some + * browsers fire false focus/blur states when the selection is moved to a UI dialog or similar. + * + * This class will fire two events focus and blur on the editor instances that got affected. + * It will also handle the restore of selection when the focus is lost and returned. + * + * @class tinymce.FocusManager + */ +define("tinymce/FocusManager", [ + "tinymce/dom/DOMUtils", + "tinymce/Env" +], function(DOMUtils, Env) { + var selectionChangeHandler, documentFocusInHandler, DOM = DOMUtils.DOM; + + /** + * Constructs a new focus manager instance. + * + * @constructor FocusManager + * @param {tinymce.EditorManager} editorManager Editor manager instance to handle focus for. + */ + function FocusManager(editorManager) { + function getActiveElement() { + try { + return document.activeElement; + } catch (ex) { + // IE sometimes fails to get the activeElement when resizing table + // TODO: Investigate this + return document.body; + } + } + + // We can't store a real range on IE 11 since it gets mutated so we need to use a bookmark object + // TODO: Move this to a separate range utils class since it's it's logic is present in Selection as well. + function createBookmark(rng) { + if (rng && rng.startContainer) { + return { + startContainer: rng.startContainer, + startOffset: rng.startOffset, + endContainer: rng.endContainer, + endOffset: rng.endOffset + }; + } + + return rng; + } + + function bookmarkToRng(editor, bookmark) { + var rng; + + if (bookmark.startContainer) { + rng = editor.getDoc().createRange(); + rng.setStart(bookmark.startContainer, bookmark.startOffset); + rng.setEnd(bookmark.endContainer, bookmark.endOffset); + } else { + rng = bookmark; + } + + return rng; + } + + function isUIElement(elm) { + return !!DOM.getParent(elm, FocusManager.isEditorUIElement); + } + + function isNodeInBodyOfEditor(node, editor) { + var body = editor.getBody(); + + while (node) { + if (node == body) { + return true; + } + + node = node.parentNode; + } + } + + function registerEvents(e) { + var editor = e.editor; + + editor.on('init', function() { + // Gecko/WebKit has ghost selections in iframes and IE only has one selection per browser tab + if (editor.inline || Env.ie) { + // On other browsers take snapshot on nodechange in inline mode since they have Ghost selections for iframes + editor.on('nodechange keyup', function() { + var node = document.activeElement; + + // IE 11 reports active element as iframe not body of iframe + if (node && node.id == editor.id + '_ifr') { + node = editor.getBody(); + } + + if (isNodeInBodyOfEditor(node, editor)) { + editor.lastRng = editor.selection.getRng(); + } + }); + + // Handles the issue with WebKit not retaining selection within inline document + // If the user releases the mouse out side the body since a mouse up event wont occur on the body + if (Env.webkit && !selectionChangeHandler) { + selectionChangeHandler = function() { + var activeEditor = editorManager.activeEditor; + + if (activeEditor && activeEditor.selection) { + var rng = activeEditor.selection.getRng(); + + // Store when it's non collapsed + if (rng && !rng.collapsed) { + editor.lastRng = rng; + } + } + }; + + DOM.bind(document, 'selectionchange', selectionChangeHandler); + } + } + }); + + editor.on('setcontent', function() { + editor.lastRng = null; + }); + + // Remove last selection bookmark on mousedown see #6305 + editor.on('mousedown', function() { + editor.selection.lastFocusBookmark = null; + }); + + editor.on('focusin', function() { + var focusedEditor = editorManager.focusedEditor; + + if (editor.selection.lastFocusBookmark) { + editor.selection.setRng(bookmarkToRng(editor, editor.selection.lastFocusBookmark)); + editor.selection.lastFocusBookmark = null; + } + + if (focusedEditor != editor) { + if (focusedEditor) { + focusedEditor.fire('blur', {focusedEditor: editor}); + } + + editorManager.activeEditor = editor; + editorManager.focusedEditor = editor; + editor.fire('focus', {blurredEditor: focusedEditor}); + editor.focus(true); + } + + editor.lastRng = null; + }); + + editor.on('focusout', function() { + window.setTimeout(function() { + var focusedEditor = editorManager.focusedEditor; + + // Still the same editor the the blur was outside any editor UI + if (!isUIElement(getActiveElement()) && focusedEditor == editor) { + editor.fire('blur', {focusedEditor: null}); + editorManager.focusedEditor = null; + + // Make sure selection is valid could be invalid if the editor is blured and removed before the timeout occurs + if (editor.selection) { + editor.selection.lastFocusBookmark = null; + } + } + }, 0); + }); + + if (!documentFocusInHandler) { + documentFocusInHandler = function(e) { + var activeEditor = editorManager.activeEditor; + + if (activeEditor && e.target.ownerDocument == document) { + // Check to make sure we have a valid selection + if (activeEditor.selection) { + activeEditor.selection.lastFocusBookmark = createBookmark(activeEditor.lastRng); + } + + // Fire a blur event if the element isn't a UI element + if (!isUIElement(e.target) && editorManager.focusedEditor == activeEditor) { + activeEditor.fire('blur', {focusedEditor: null}); + editorManager.focusedEditor = null; + } + } + }; + + // Check if focus is moved to an element outside the active editor by checking if the target node + // isn't within the body of the activeEditor nor a UI element such as a dialog child control + DOM.bind(document, 'focusin', documentFocusInHandler); + } + } + + function unregisterDocumentEvents(e) { + if (editorManager.focusedEditor == e.editor) { + editorManager.focusedEditor = null; + } + + if (!editorManager.activeEditor) { + DOM.unbind(document, 'selectionchange', selectionChangeHandler); + DOM.unbind(document, 'focusin', documentFocusInHandler); + selectionChangeHandler = documentFocusInHandler = null; + } + } + + editorManager.on('AddEditor', registerEvents); + editorManager.on('RemoveEditor', unregisterDocumentEvents); + } + + /** + * Returns true if the specified element is part of the UI for example an button or text input. + * + * @method isEditorUIElement + * @param {Element} elm Element to check if it's part of the UI or not. + * @return {Boolean} True/false state if the element is part of the UI or not. + */ + FocusManager.isEditorUIElement = function(elm) { + // Needs to be converted to string since svg can have focus: #6776 + return elm.className.toString().indexOf('mce-') !== -1; + }; + + return FocusManager; +}); diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ForceBlocks.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ForceBlocks.js new file mode 100755 index 0000000000..3a56b44111 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ForceBlocks.js @@ -0,0 +1,132 @@ +/** + * ForceBlocks.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +define("tinymce/ForceBlocks", [], function() { + return function(editor) { + var settings = editor.settings, dom = editor.dom, selection = editor.selection; + var schema = editor.schema, blockElements = schema.getBlockElements(); + + function addRootBlocks() { + var node = selection.getStart(), rootNode = editor.getBody(), rng; + var startContainer, startOffset, endContainer, endOffset, rootBlockNode; + var tempNode, offset = -0xFFFFFF, wrapped, restoreSelection; + var tmpRng, rootNodeName, forcedRootBlock; + + forcedRootBlock = settings.forced_root_block; + + if (!node || node.nodeType !== 1 || !forcedRootBlock) { + return; + } + + // Check if node is wrapped in block + while (node && node != rootNode) { + if (blockElements[node.nodeName]) { + return; + } + + node = node.parentNode; + } + + // Get current selection + rng = selection.getRng(); + if (rng.setStart) { + startContainer = rng.startContainer; + startOffset = rng.startOffset; + endContainer = rng.endContainer; + endOffset = rng.endOffset; + + try { + restoreSelection = editor.getDoc().activeElement === rootNode; + } catch (ex) { + // IE throws unspecified error here sometimes + } + } else { + // Force control range into text range + if (rng.item) { + node = rng.item(0); + rng = editor.getDoc().body.createTextRange(); + rng.moveToElementText(node); + } + + restoreSelection = rng.parentElement().ownerDocument === editor.getDoc(); + tmpRng = rng.duplicate(); + tmpRng.collapse(true); + startOffset = tmpRng.move('character', offset) * -1; + + if (!tmpRng.collapsed) { + tmpRng = rng.duplicate(); + tmpRng.collapse(false); + endOffset = (tmpRng.move('character', offset) * -1) - startOffset; + } + } + + // Wrap non block elements and text nodes + node = rootNode.firstChild; + rootNodeName = rootNode.nodeName.toLowerCase(); + while (node) { + // TODO: Break this up, too complex + if (((node.nodeType === 3 || (node.nodeType == 1 && !blockElements[node.nodeName]))) && + schema.isValidChild(rootNodeName, forcedRootBlock.toLowerCase())) { + // Remove empty text nodes + if (node.nodeType === 3 && node.nodeValue.length === 0) { + tempNode = node; + node = node.nextSibling; + dom.remove(tempNode); + continue; + } + + if (!rootBlockNode) { + rootBlockNode = dom.create(forcedRootBlock, editor.settings.forced_root_block_attrs); + node.parentNode.insertBefore(rootBlockNode, node); + wrapped = true; + } + + tempNode = node; + node = node.nextSibling; + rootBlockNode.appendChild(tempNode); + } else { + rootBlockNode = null; + node = node.nextSibling; + } + } + + if (wrapped && restoreSelection) { + if (rng.setStart) { + rng.setStart(startContainer, startOffset); + rng.setEnd(endContainer, endOffset); + selection.setRng(rng); + } else { + // Only select if the previous selection was inside the document to prevent auto focus in quirks mode + try { + rng = editor.getDoc().body.createTextRange(); + rng.moveToElementText(rootNode); + rng.collapse(true); + rng.moveStart('character', startOffset); + + if (endOffset > 0) { + rng.moveEnd('character', endOffset); + } + + rng.select(); + } catch (ex) { + // Ignore + } + } + + editor.nodeChanged(); + } + } + + // Force root blocks + if (settings.forced_root_block) { + editor.on('NodeChange', addRootBlocks); + } + }; +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/Formatter.js b/common/static/js/vendor/tinymce/js/tinymce/classes/Formatter.js new file mode 100755 index 0000000000..baa0b8a417 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/Formatter.js @@ -0,0 +1,2426 @@ +/** + * Formatter.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Text formatter engine class. This class is used to apply formats like bold, italic, font size + * etc to the current selection or specific nodes. This engine was build to replace the browsers + * default formatting logic for execCommand due to it's inconsistent and buggy behavior. + * + * @class tinymce.Formatter + * @example + * tinymce.activeEditor.formatter.register('mycustomformat', { + * inline: 'span', + * styles: {color: '#ff0000'} + * }); + * + * tinymce.activeEditor.formatter.apply('mycustomformat'); + */ +define("tinymce/Formatter", [ + "tinymce/dom/TreeWalker", + "tinymce/dom/RangeUtils", + "tinymce/util/Tools" +], function(TreeWalker, RangeUtils, Tools) { + /** + * Constructs a new formatter instance. + * + * @constructor Formatter + * @param {tinymce.Editor} ed Editor instance to construct the formatter engine to. + */ + return function(ed) { + var formats = {}, + dom = ed.dom, + selection = ed.selection, + rangeUtils = new RangeUtils(dom), + isValid = ed.schema.isValidChild, + isBlock = dom.isBlock, + forcedRootBlock = ed.settings.forced_root_block, + nodeIndex = dom.nodeIndex, + INVISIBLE_CHAR = '\uFEFF', + MCE_ATTR_RE = /^(src|href|style)$/, + FALSE = false, + TRUE = true, + formatChangeData, + undef, + getContentEditable = dom.getContentEditable, + disableCaretContainer, + markCaretContainersBogus; + + var each = Tools.each, + grep = Tools.grep, + walk = Tools.walk, + extend = Tools.extend; + + function isTextBlock(name) { + if (name.nodeType) { + name = name.nodeName; + } + + return !!ed.schema.getTextBlockElements()[name.toLowerCase()]; + } + + function getParents(node, selector) { + return dom.getParents(node, selector, dom.getRoot()); + } + + function isCaretNode(node) { + return node.nodeType === 1 && node.id === '_mce_caret'; + } + + function defaultFormats() { + register({ + alignleft: [ + {selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li', styles: {textAlign: 'left'}, defaultBlock: 'div'}, + {selector: 'img,table', collapsed: false, styles: {'float': 'left'}} + ], + + aligncenter: [ + {selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li', styles: {textAlign: 'center'}, defaultBlock: 'div'}, + {selector: 'img', collapsed: false, styles: {display: 'block', marginLeft: 'auto', marginRight: 'auto'}}, + {selector: 'table', collapsed: false, styles: {marginLeft: 'auto', marginRight: 'auto'}} + ], + + alignright: [ + {selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li', styles: {textAlign: 'right'}, defaultBlock: 'div'}, + {selector: 'img,table', collapsed: false, styles: {'float': 'right'}} + ], + + alignjustify: [ + {selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li', styles: {textAlign: 'justify'}, defaultBlock: 'div'} + ], + + bold: [ + {inline: 'strong', remove: 'all'}, + {inline: 'span', styles: {fontWeight: 'bold'}}, + {inline: 'b', remove: 'all'} + ], + + italic: [ + {inline: 'em', remove: 'all'}, + {inline: 'span', styles: {fontStyle: 'italic'}}, + {inline: 'i', remove: 'all'} + ], + + underline: [ + {inline: 'span', styles: {textDecoration: 'underline'}, exact: true}, + {inline: 'u', remove: 'all'} + ], + + strikethrough: [ + {inline: 'span', styles: {textDecoration: 'line-through'}, exact: true}, + {inline: 'strike', remove: 'all'} + ], + + forecolor: {inline: 'span', styles: {color: '%value'}, wrap_links: false}, + hilitecolor: {inline: 'span', styles: {backgroundColor: '%value'}, wrap_links: false}, + fontname: {inline: 'span', styles: {fontFamily: '%value'}}, + fontsize: {inline: 'span', styles: {fontSize: '%value'}}, + fontsize_class: {inline: 'span', attributes: {'class': '%value'}}, + blockquote: {block: 'blockquote', wrapper: 1, remove: 'all'}, + subscript: {inline: 'sub'}, + superscript: {inline: 'sup'}, + code: {inline: 'code'}, + + link: {inline: 'a', selector: 'a', remove: 'all', split: true, deep: true, + onmatch: function() { + return true; + }, + + onformat: function(elm, fmt, vars) { + each(vars, function(value, key) { + dom.setAttrib(elm, key, value); + }); + } + }, + + removeformat: [ + { + selector: 'b,strong,em,i,font,u,strike,sub,sup,dfn,code,samp,kbd,var,cite,mark,q', + remove: 'all', + split: true, + expand: false, + block_expand: true, + deep: true + }, + {selector: 'span', attributes: ['style', 'class'], remove: 'empty', split: true, expand: false, deep: true}, + {selector: '*', attributes: ['style', 'class'], split: false, expand: false, deep: true} + ] + }); + + // Register default block formats + each('p h1 h2 h3 h4 h5 h6 div address pre div dt dd samp'.split(/\s/), function(name) { + register(name, {block: name, remove: 'all'}); + }); + + // Register user defined formats + register(ed.settings.formats); + } + + function addKeyboardShortcuts() { + // Add some inline shortcuts + ed.addShortcut('ctrl+b', 'bold_desc', 'Bold'); + ed.addShortcut('ctrl+i', 'italic_desc', 'Italic'); + ed.addShortcut('ctrl+u', 'underline_desc', 'Underline'); + + // BlockFormat shortcuts keys + for (var i = 1; i <= 6; i++) { + ed.addShortcut('ctrl+' + i, '', ['FormatBlock', false, 'h' + i]); + } + + ed.addShortcut('ctrl+7', '', ['FormatBlock', false, 'p']); + ed.addShortcut('ctrl+8', '', ['FormatBlock', false, 'div']); + ed.addShortcut('ctrl+9', '', ['FormatBlock', false, 'address']); + } + + // Public functions + + /** + * Returns the format by name or all formats if no name is specified. + * + * @method get + * @param {String} name Optional name to retrive by. + * @return {Array/Object} Array/Object with all registred formats or a specific format. + */ + function get(name) { + return name ? formats[name] : formats; + } + + /** + * Registers a specific format by name. + * + * @method register + * @param {Object/String} name Name of the format for example "bold". + * @param {Object/Array} format Optional format object or array of format variants + * can only be omitted if the first arg is an object. + */ + function register(name, format) { + if (name) { + if (typeof(name) !== 'string') { + each(name, function(format, name) { + register(name, format); + }); + } else { + // Force format into array and add it to internal collection + format = format.length ? format : [format]; + + each(format, function(format) { + // Set deep to false by default on selector formats this to avoid removing + // alignment on images inside paragraphs when alignment is changed on paragraphs + if (format.deep === undef) { + format.deep = !format.selector; + } + + // Default to true + if (format.split === undef) { + format.split = !format.selector || format.inline; + } + + // Default to true + if (format.remove === undef && format.selector && !format.inline) { + format.remove = 'none'; + } + + // Mark format as a mixed format inline + block level + if (format.selector && format.inline) { + format.mixed = true; + format.block_expand = true; + } + + // Split classes if needed + if (typeof(format.classes) === 'string') { + format.classes = format.classes.split(/\s+/); + } + }); + + formats[name] = format; + } + } + } + + function getTextDecoration(node) { + var decoration; + + ed.dom.getParent(node, function(n) { + decoration = ed.dom.getStyle(n, 'text-decoration'); + return decoration && decoration !== 'none'; + }); + + return decoration; + } + + function processUnderlineAndColor(node) { + var textDecoration; + if (node.nodeType === 1 && node.parentNode && node.parentNode.nodeType === 1) { + textDecoration = getTextDecoration(node.parentNode); + if (ed.dom.getStyle(node, 'color') && textDecoration) { + ed.dom.setStyle(node, 'text-decoration', textDecoration); + } else if (ed.dom.getStyle(node, 'textdecoration') === textDecoration) { + ed.dom.setStyle(node, 'text-decoration', null); + } + } + } + + /** + * Applies the specified format to the current selection or specified node. + * + * @method apply + * @param {String} name Name of format to apply. + * @param {Object} vars Optional list of variables to replace within format before applying it. + * @param {Node} node Optional node to apply the format to defaults to current selection. + */ + function apply(name, vars, node) { + var formatList = get(name), format = formatList[0], bookmark, rng, isCollapsed = !node && selection.isCollapsed(); + + function setElementFormat(elm, fmt) { + fmt = fmt || format; + + if (elm) { + if (fmt.onformat) { + fmt.onformat(elm, fmt, vars, node); + } + + each(fmt.styles, function(value, name) { + dom.setStyle(elm, name, replaceVars(value, vars)); + }); + + each(fmt.attributes, function(value, name) { + dom.setAttrib(elm, name, replaceVars(value, vars)); + }); + + each(fmt.classes, function(value) { + value = replaceVars(value, vars); + + if (!dom.hasClass(elm, value)) { + dom.addClass(elm, value); + } + }); + } + } + + function adjustSelectionToVisibleSelection() { + function findSelectionEnd(start, end) { + var walker = new TreeWalker(end); + for (node = walker.current(); node; node = walker.prev()) { + if (node.childNodes.length > 1 || node == start || node.tagName == 'BR') { + return node; + } + } + } + + // Adjust selection so that a end container with a end offset of zero is not included in the selection + // as this isn't visible to the user. + var rng = ed.selection.getRng(); + var start = rng.startContainer; + var end = rng.endContainer; + + if (start != end && rng.endOffset === 0) { + var newEnd = findSelectionEnd(start, end); + var endOffset = newEnd.nodeType == 3 ? newEnd.length : newEnd.childNodes.length; + + rng.setEnd(newEnd, endOffset); + } + + return rng; + } + + function applyStyleToList(node, bookmark, wrapElm, newWrappers, process){ + var nodes = [], listIndex = -1, list, startIndex = -1, endIndex = -1, currentWrapElm; + + // find the index of the first child list. + each(node.childNodes, function(n, index) { + if (n.nodeName === "UL" || n.nodeName === "OL") { + listIndex = index; + list = n; + return false; + } + }); + + // get the index of the bookmarks + each(node.childNodes, function(n, index) { + if (n.nodeName === "SPAN" && dom.getAttrib(n, "data-mce-type") == "bookmark") { + if (n.id == bookmark.id + "_start") { + startIndex = index; + } else if (n.id == bookmark.id + "_end") { + endIndex = index; + } + } + }); + + // if the selection spans across an embedded list, or there isn't an embedded list - handle processing normally + if (listIndex <= 0 || (startIndex < listIndex && endIndex > listIndex)) { + each(grep(node.childNodes), process); + return 0; + } else { + currentWrapElm = dom.clone(wrapElm, FALSE); + + // create a list of the nodes on the same side of the list as the selection + each(grep(node.childNodes), function(n, index) { + if ((startIndex < listIndex && index < listIndex) || (startIndex > listIndex && index > listIndex)) { + nodes.push(n); + n.parentNode.removeChild(n); + } + }); + + // insert the wrapping element either before or after the list. + if (startIndex < listIndex) { + node.insertBefore(currentWrapElm, list); + } else if (startIndex > listIndex) { + node.insertBefore(currentWrapElm, list.nextSibling); + } + + // add the new nodes to the list. + newWrappers.push(currentWrapElm); + + each(nodes, function(node) { + currentWrapElm.appendChild(node); + }); + + return currentWrapElm; + } + } + + function applyRngStyle(rng, bookmark, node_specific) { + var newWrappers = [], wrapName, wrapElm, contentEditable = true; + + // Setup wrapper element + wrapName = format.inline || format.block; + wrapElm = dom.create(wrapName); + setElementFormat(wrapElm); + + rangeUtils.walk(rng, function(nodes) { + var currentWrapElm; + + /** + * Process a list of nodes wrap them. + */ + function process(node) { + var nodeName, parentName, found, hasContentEditableState, lastContentEditable; + + lastContentEditable = contentEditable; + nodeName = node.nodeName.toLowerCase(); + parentName = node.parentNode.nodeName.toLowerCase(); + + // Node has a contentEditable value + if (node.nodeType === 1 && getContentEditable(node)) { + lastContentEditable = contentEditable; + contentEditable = getContentEditable(node) === "true"; + hasContentEditableState = true; // We don't want to wrap the container only it's children + } + + // Stop wrapping on br elements + if (isEq(nodeName, 'br')) { + currentWrapElm = 0; + + // Remove any br elements when we wrap things + if (format.block) { + dom.remove(node); + } + + return; + } + + // If node is wrapper type + if (format.wrapper && matchNode(node, name, vars)) { + currentWrapElm = 0; + return; + } + + // Can we rename the block + // TODO: Break this if up, too complex + if (contentEditable && !hasContentEditableState && format.block && + !format.wrapper && isTextBlock(nodeName) && isValid(parentName, wrapName)) { + node = dom.rename(node, wrapName); + setElementFormat(node); + newWrappers.push(node); + currentWrapElm = 0; + return; + } + + // Handle selector patterns + if (format.selector) { + // Look for matching formats + each(formatList, function(format) { + // Check collapsed state if it exists + if ('collapsed' in format && format.collapsed !== isCollapsed) { + return; + } + + if (dom.is(node, format.selector) && !isCaretNode(node)) { + setElementFormat(node, format); + found = true; + } + }); + + // Continue processing if a selector match wasn't found and a inline element is defined + if (!format.inline || found) { + currentWrapElm = 0; + return; + } + } + + // Is it valid to wrap this item + // TODO: Break this if up, too complex + if (contentEditable && !hasContentEditableState && isValid(wrapName, nodeName) && isValid(parentName, wrapName) && + !(!node_specific && node.nodeType === 3 && + node.nodeValue.length === 1 && + node.nodeValue.charCodeAt(0) === 65279) && + !isCaretNode(node) && + (!format.inline || !isBlock(node))) { + // Start wrapping + if (!currentWrapElm) { + // Wrap the node + currentWrapElm = dom.clone(wrapElm, FALSE); + node.parentNode.insertBefore(currentWrapElm, node); + newWrappers.push(currentWrapElm); + } + + currentWrapElm.appendChild(node); + } else if (nodeName == 'li' && bookmark) { + // Start wrapping - if we are in a list node and have a bookmark, then + // we will always begin by wrapping in a new element. + currentWrapElm = applyStyleToList(node, bookmark, wrapElm, newWrappers, process); + } else { + // Start a new wrapper for possible children + currentWrapElm = 0; + + each(grep(node.childNodes), process); + + if (hasContentEditableState) { + contentEditable = lastContentEditable; // Restore last contentEditable state from stack + } + + // End the last wrapper + currentWrapElm = 0; + } + } + + // Process siblings from range + each(nodes, process); + }); + + // Wrap links inside as well, for example color inside a link when the wrapper is around the link + if (format.wrap_links === false) { + each(newWrappers, function(node) { + function process(node) { + var i, currentWrapElm, children; + + if (node.nodeName === 'A') { + currentWrapElm = dom.clone(wrapElm, FALSE); + newWrappers.push(currentWrapElm); + + children = grep(node.childNodes); + for (i = 0; i < children.length; i++) { + currentWrapElm.appendChild(children[i]); + } + + node.appendChild(currentWrapElm); + } + + each(grep(node.childNodes), process); + } + + process(node); + }); + } + + // Cleanup + each(newWrappers, function(node) { + var childCount; + + function getChildCount(node) { + var count = 0; + + each(node.childNodes, function(node) { + if (!isWhiteSpaceNode(node) && !isBookmarkNode(node)) { + count++; + } + }); + + return count; + } + + function mergeStyles(node) { + var child, clone; + + each(node.childNodes, function(node) { + if (node.nodeType == 1 && !isBookmarkNode(node) && !isCaretNode(node)) { + child = node; + return FALSE; // break loop + } + }); + + // If child was found and of the same type as the current node + if (child && !isBookmarkNode(child) && matchName(child, format)) { + clone = dom.clone(child, FALSE); + setElementFormat(clone); + + dom.replace(clone, node, TRUE); + dom.remove(child, 1); + } + + return clone || node; + } + + childCount = getChildCount(node); + + // Remove empty nodes but only if there is multiple wrappers and they are not block + // elements so never remove single

    since that would remove the + // currrent empty block element where the caret is at + if ((newWrappers.length > 1 || !isBlock(node)) && childCount === 0) { + dom.remove(node, 1); + return; + } + + if (format.inline || format.wrapper) { + // Merges the current node with it's children of similar type to reduce the number of elements + if (!format.exact && childCount === 1) { + node = mergeStyles(node); + } + + // Remove/merge children + each(formatList, function(format) { + // Merge all children of similar type will move styles from child to parent + // this: text + // will become: text + each(dom.select(format.inline, node), function(child) { + var parent; + + if (isBookmarkNode(child)) { + return; + } + + // When wrap_links is set to false we don't want + // to remove the format on children within links + if (format.wrap_links === false) { + parent = child.parentNode; + + do { + if (parent.nodeName === 'A') { + return; + } + } while ((parent = parent.parentNode)); + } + + removeFormat(format, vars, child, format.exact ? child : null); + }); + }); + + // Remove child if direct parent is of same type + if (matchNode(node.parentNode, name, vars)) { + dom.remove(node, 1); + node = 0; + return TRUE; + } + + // Look for parent with similar style format + if (format.merge_with_parents) { + dom.getParent(node.parentNode, function(parent) { + if (matchNode(parent, name, vars)) { + dom.remove(node, 1); + node = 0; + return TRUE; + } + }); + } + + // Merge next and previous siblings if they are similar texttext becomes texttext + if (node && format.merge_siblings !== false) { + node = mergeSiblings(getNonWhiteSpaceSibling(node), node); + node = mergeSiblings(node, getNonWhiteSpaceSibling(node, TRUE)); + } + } + }); + } + + if (format) { + if (node) { + if (node.nodeType) { + rng = dom.createRng(); + rng.setStartBefore(node); + rng.setEndAfter(node); + applyRngStyle(expandRng(rng, formatList), null, true); + } else { + applyRngStyle(node, null, true); + } + } else { + if (!isCollapsed || !format.inline || dom.select('td.mce-item-selected,th.mce-item-selected').length) { + // Obtain selection node before selection is unselected by applyRngStyle() + var curSelNode = ed.selection.getNode(); + + // If the formats have a default block and we can't find a parent block then + // start wrapping it with a DIV this is for forced_root_blocks: false + // It's kind of a hack but people should be using the default block type P since all desktop editors work that way + if (!forcedRootBlock && formatList[0].defaultBlock && !dom.getParent(curSelNode, dom.isBlock)) { + apply(formatList[0].defaultBlock); + } + + // Apply formatting to selection + ed.selection.setRng(adjustSelectionToVisibleSelection()); + bookmark = selection.getBookmark(); + applyRngStyle(expandRng(selection.getRng(TRUE), formatList), bookmark); + + // Colored nodes should be underlined so that the color of the underline matches the text color. + if (format.styles && (format.styles.color || format.styles.textDecoration)) { + walk(curSelNode, processUnderlineAndColor, 'childNodes'); + processUnderlineAndColor(curSelNode); + } + + selection.moveToBookmark(bookmark); + moveStart(selection.getRng(TRUE)); + ed.nodeChanged(); + } else { + performCaretAction('apply', name, vars); + } + } + } + } + + /** + * Removes the specified format from the current selection or specified node. + * + * @method remove + * @param {String} name Name of format to remove. + * @param {Object} vars Optional list of variables to replace within format before removing it. + * @param {Node/Range} node Optional node or DOM range to remove the format from defaults to current selection. + */ + function remove(name, vars, node) { + var formatList = get(name), format = formatList[0], bookmark, rng, contentEditable = true; + + // Merges the styles for each node + function process(node) { + var children, i, l, lastContentEditable, hasContentEditableState; + + // Node has a contentEditable value + if (node.nodeType === 1 && getContentEditable(node)) { + lastContentEditable = contentEditable; + contentEditable = getContentEditable(node) === "true"; + hasContentEditableState = true; // We don't want to wrap the container only it's children + } + + // Grab the children first since the nodelist might be changed + children = grep(node.childNodes); + + // Process current node + if (contentEditable && !hasContentEditableState) { + for (i = 0, l = formatList.length; i < l; i++) { + if (removeFormat(formatList[i], vars, node, node)) { + break; + } + } + } + + // Process the children + if (format.deep) { + if (children.length) { + for (i = 0, l = children.length; i < l; i++) { + process(children[i]); + } + + if (hasContentEditableState) { + contentEditable = lastContentEditable; // Restore last contentEditable state from stack + } + } + } + } + + function findFormatRoot(container) { + var formatRoot; + + // Find format root + each(getParents(container.parentNode).reverse(), function(parent) { + var format; + + // Find format root element + if (!formatRoot && parent.id != '_start' && parent.id != '_end') { + // Is the node matching the format we are looking for + format = matchNode(parent, name, vars); + if (format && format.split !== false) { + formatRoot = parent; + } + } + }); + + return formatRoot; + } + + function wrapAndSplit(format_root, container, target, split) { + var parent, clone, lastClone, firstClone, i, formatRootParent; + + // Format root found then clone formats and split it + if (format_root) { + formatRootParent = format_root.parentNode; + + for (parent = container.parentNode; parent && parent != formatRootParent; parent = parent.parentNode) { + clone = dom.clone(parent, FALSE); + + for (i = 0; i < formatList.length; i++) { + if (removeFormat(formatList[i], vars, clone, clone)) { + clone = 0; + break; + } + } + + // Build wrapper node + if (clone) { + if (lastClone) { + clone.appendChild(lastClone); + } + + if (!firstClone) { + firstClone = clone; + } + + lastClone = clone; + } + } + + // Never split block elements if the format is mixed + if (split && (!format.mixed || !isBlock(format_root))) { + container = dom.split(format_root, container); + } + + // Wrap container in cloned formats + if (lastClone) { + target.parentNode.insertBefore(lastClone, target); + firstClone.appendChild(target); + } + } + + return container; + } + + function splitToFormatRoot(container) { + return wrapAndSplit(findFormatRoot(container), container, container, true); + } + + function unwrap(start) { + var node = dom.get(start ? '_start' : '_end'), + out = node[start ? 'firstChild' : 'lastChild']; + + // If the end is placed within the start the result will be removed + // So this checks if the out node is a bookmark node if it is it + // checks for another more suitable node + if (isBookmarkNode(out)) { + out = out[start ? 'firstChild' : 'lastChild']; + } + + dom.remove(node, true); + + return out; + } + + function removeRngStyle(rng) { + var startContainer, endContainer; + var commonAncestorContainer = rng.commonAncestorContainer; + + rng = expandRng(rng, formatList, TRUE); + + if (format.split) { + startContainer = getContainer(rng, TRUE); + endContainer = getContainer(rng); + + if (startContainer != endContainer) { + // WebKit will render the table incorrectly if we wrap a TH or TD in a SPAN + // so let's see if we can use the first child instead + // This will happen if you triple click a table cell and use remove formatting + if (/^(TR|TH|TD)$/.test(startContainer.nodeName) && startContainer.firstChild) { + if (startContainer.nodeName == "TR") { + startContainer = startContainer.firstChild.firstChild || startContainer; + } else { + startContainer = startContainer.firstChild || startContainer; + } + } + + // Try to adjust endContainer as well if cells on the same row were selected - bug #6410 + if (commonAncestorContainer && + /^T(HEAD|BODY|FOOT|R)$/.test(commonAncestorContainer.nodeName) && + /^(TH|TD)$/.test(endContainer.nodeName) && endContainer.firstChild) { + endContainer = endContainer.firstChild || endContainer; + } + + // Wrap start/end nodes in span element since these might be cloned/moved + startContainer = wrap(startContainer, 'span', {id: '_start', 'data-mce-type': 'bookmark'}); + endContainer = wrap(endContainer, 'span', {id: '_end', 'data-mce-type': 'bookmark'}); + + // Split start/end + splitToFormatRoot(startContainer); + splitToFormatRoot(endContainer); + + // Unwrap start/end to get real elements again + startContainer = unwrap(TRUE); + endContainer = unwrap(); + } else { + startContainer = endContainer = splitToFormatRoot(startContainer); + } + + // Update range positions since they might have changed after the split operations + rng.startContainer = startContainer.parentNode; + rng.startOffset = nodeIndex(startContainer); + rng.endContainer = endContainer.parentNode; + rng.endOffset = nodeIndex(endContainer) + 1; + } + + // Remove items between start/end + rangeUtils.walk(rng, function(nodes) { + each(nodes, function(node) { + process(node); + + // Remove parent span if it only contains text-decoration: underline, yet a parent node is also underlined. + if (node.nodeType === 1 && ed.dom.getStyle(node, 'text-decoration') === 'underline' && + node.parentNode && getTextDecoration(node.parentNode) === 'underline') { + removeFormat({ + 'deep': false, + 'exact': true, + 'inline': 'span', + 'styles': { + 'textDecoration': 'underline' + } + }, null, node); + } + }); + }); + } + + // Handle node + if (node) { + if (node.nodeType) { + rng = dom.createRng(); + rng.setStartBefore(node); + rng.setEndAfter(node); + removeRngStyle(rng); + } else { + removeRngStyle(node); + } + + return; + } + + if (!selection.isCollapsed() || !format.inline || dom.select('td.mce-item-selected,th.mce-item-selected').length) { + bookmark = selection.getBookmark(); + removeRngStyle(selection.getRng(TRUE)); + selection.moveToBookmark(bookmark); + + // Check if start element still has formatting then we are at: "text|text" + // and need to move the start into the next text node + if (format.inline && match(name, vars, selection.getStart())) { + moveStart(selection.getRng(true)); + } + + ed.nodeChanged(); + } else { + performCaretAction('remove', name, vars); + } + } + + /** + * Toggles the specified format on/off. + * + * @method toggle + * @param {String} name Name of format to apply/remove. + * @param {Object} vars Optional list of variables to replace within format before applying/removing it. + * @param {Node} node Optional node to apply the format to or remove from. Defaults to current selection. + */ + function toggle(name, vars, node) { + var fmt = get(name); + + if (match(name, vars, node) && (!('toggle' in fmt[0]) || fmt[0].toggle)) { + remove(name, vars, node); + } else { + apply(name, vars, node); + } + } + + /** + * Return true/false if the specified node has the specified format. + * + * @method matchNode + * @param {Node} node Node to check the format on. + * @param {String} name Format name to check. + * @param {Object} vars Optional list of variables to replace before checking it. + * @param {Boolean} similar Match format that has similar properties. + * @return {Object} Returns the format object it matches or undefined if it doesn't match. + */ + function matchNode(node, name, vars, similar) { + var formatList = get(name), format, i, classes; + + function matchItems(node, format, item_name) { + var key, value, items = format[item_name], i; + + // Custom match + if (format.onmatch) { + return format.onmatch(node, format, item_name); + } + + // Check all items + if (items) { + // Non indexed object + if (items.length === undef) { + for (key in items) { + if (items.hasOwnProperty(key)) { + if (item_name === 'attributes') { + value = dom.getAttrib(node, key); + } else { + value = getStyle(node, key); + } + + if (similar && !value && !format.exact) { + return; + } + + if ((!similar || format.exact) && !isEq(value, normalizeStyleValue(replaceVars(items[key], vars), key))) { + return; + } + } + } + } else { + // Only one match needed for indexed arrays + for (i = 0; i < items.length; i++) { + if (item_name === 'attributes' ? dom.getAttrib(node, items[i]) : getStyle(node, items[i])) { + return format; + } + } + } + } + + return format; + } + + if (formatList && node) { + // Check each format in list + for (i = 0; i < formatList.length; i++) { + format = formatList[i]; + + // Name name, attributes, styles and classes + if (matchName(node, format) && matchItems(node, format, 'attributes') && matchItems(node, format, 'styles')) { + // Match classes + if ((classes = format.classes)) { + for (i = 0; i < classes.length; i++) { + if (!dom.hasClass(node, classes[i])) { + return; + } + } + } + + return format; + } + } + } + } + + /** + * Matches the current selection or specified node against the specified format name. + * + * @method match + * @param {String} name Name of format to match. + * @param {Object} vars Optional list of variables to replace before checking it. + * @param {Node} node Optional node to check. + * @return {boolean} true/false if the specified selection/node matches the format. + */ + function match(name, vars, node) { + var startNode; + + function matchParents(node) { + var root = dom.getRoot(); + + if (node === root) { + return false; + } + + // Find first node with similar format settings + node = dom.getParent(node, function(node) { + return node.parentNode === root || !!matchNode(node, name, vars, true); + }); + + // Do an exact check on the similar format element + return matchNode(node, name, vars); + } + + // Check specified node + if (node) { + return matchParents(node); + } + + // Check selected node + node = selection.getNode(); + if (matchParents(node)) { + return TRUE; + } + + // Check start node if it's different + startNode = selection.getStart(); + if (startNode != node) { + if (matchParents(startNode)) { + return TRUE; + } + } + + return FALSE; + } + + /** + * Matches the current selection against the array of formats and returns a new array with matching formats. + * + * @method matchAll + * @param {Array} names Name of format to match. + * @param {Object} vars Optional list of variables to replace before checking it. + * @return {Array} Array with matched formats. + */ + function matchAll(names, vars) { + var startElement, matchedFormatNames = [], checkedMap = {}; + + // Check start of selection for formats + startElement = selection.getStart(); + dom.getParent(startElement, function(node) { + var i, name; + + for (i = 0; i < names.length; i++) { + name = names[i]; + + if (!checkedMap[name] && matchNode(node, name, vars)) { + checkedMap[name] = true; + matchedFormatNames.push(name); + } + } + }, dom.getRoot()); + + return matchedFormatNames; + } + + /** + * Returns true/false if the specified format can be applied to the current selection or not. It + * will currently only check the state for selector formats, it returns true on all other format types. + * + * @method canApply + * @param {String} name Name of format to check. + * @return {boolean} true/false if the specified format can be applied to the current selection/node. + */ + function canApply(name) { + var formatList = get(name), startNode, parents, i, x, selector; + + if (formatList) { + startNode = selection.getStart(); + parents = getParents(startNode); + + for (x = formatList.length - 1; x >= 0; x--) { + selector = formatList[x].selector; + + // Format is not selector based then always return TRUE + // Is it has a defaultBlock then it's likely it can be applied for example align on a non block element line + if (!selector || formatList[x].defaultBlock) { + return TRUE; + } + + for (i = parents.length - 1; i >= 0; i--) { + if (dom.is(parents[i], selector)) { + return TRUE; + } + } + } + } + + return FALSE; + } + + /** + * Executes the specified callback when the current selection matches the formats or not. + * + * @method formatChanged + * @param {String} formats Comma separated list of formats to check for. + * @param {function} callback Callback with state and args when the format is changed/toggled on/off. + * @param {Boolean} similar True/false state if the match should handle similar or exact formats. + */ + function formatChanged(formats, callback, similar) { + var currentFormats; + + // Setup format node change logic + if (!formatChangeData) { + formatChangeData = {}; + currentFormats = {}; + + ed.on('NodeChange', function(e) { + var parents = getParents(e.element), matchedFormats = {}; + + // Check for new formats + each(formatChangeData, function(callbacks, format) { + each(parents, function(node) { + if (matchNode(node, format, {}, callbacks.similar)) { + if (!currentFormats[format]) { + // Execute callbacks + each(callbacks, function(callback) { + callback(true, {node: node, format: format, parents: parents}); + }); + + currentFormats[format] = callbacks; + } + + matchedFormats[format] = callbacks; + return false; + } + }); + }); + + // Check if current formats still match + each(currentFormats, function(callbacks, format) { + if (!matchedFormats[format]) { + delete currentFormats[format]; + + each(callbacks, function(callback) { + callback(false, {node: e.element, format: format, parents: parents}); + }); + } + }); + }); + } + + // Add format listeners + each(formats.split(','), function(format) { + if (!formatChangeData[format]) { + formatChangeData[format] = []; + formatChangeData[format].similar = similar; + } + + formatChangeData[format].push(callback); + }); + + return this; + } + + // Expose to public + extend(this, { + get: get, + register: register, + apply: apply, + remove: remove, + toggle: toggle, + match: match, + matchAll: matchAll, + matchNode: matchNode, + canApply: canApply, + formatChanged: formatChanged + }); + + // Initialize + defaultFormats(); + addKeyboardShortcuts(); + ed.on('BeforeGetContent', function() { + if (markCaretContainersBogus) { + markCaretContainersBogus(); + } + }); + ed.on('mouseup keydown', function(e) { + if (disableCaretContainer) { + disableCaretContainer(e); + } + }); + + // Private functions + + /** + * Checks if the specified nodes name matches the format inline/block or selector. + * + * @private + * @param {Node} node Node to match against the specified format. + * @param {Object} format Format object o match with. + * @return {boolean} true/false if the format matches. + */ + function matchName(node, format) { + // Check for inline match + if (isEq(node, format.inline)) { + return TRUE; + } + + // Check for block match + if (isEq(node, format.block)) { + return TRUE; + } + + // Check for selector match + if (format.selector) { + return node.nodeType == 1 && dom.is(node, format.selector); + } + } + + /** + * Compares two string/nodes regardless of their case. + * + * @private + * @param {String/Node} Node or string to compare. + * @param {String/Node} Node or string to compare. + * @return {boolean} True/false if they match. + */ + function isEq(str1, str2) { + str1 = str1 || ''; + str2 = str2 || ''; + + str1 = '' + (str1.nodeName || str1); + str2 = '' + (str2.nodeName || str2); + + return str1.toLowerCase() == str2.toLowerCase(); + } + + /** + * Returns the style by name on the specified node. This method modifies the style + * contents to make it more easy to match. This will resolve a few browser issues. + * + * @private + * @param {Node} node to get style from. + * @param {String} name Style name to get. + * @return {String} Style item value. + */ + function getStyle(node, name) { + return normalizeStyleValue(dom.getStyle(node, name), name); + } + + /** + * Normalize style value by name. This method modifies the style contents + * to make it more easy to match. This will resolve a few browser issues. + * + * @private + * @param {Node} node to get style from. + * @param {String} name Style name to get. + * @return {String} Style item value. + */ + function normalizeStyleValue(value, name) { + // Force the format to hex + if (name == 'color' || name == 'backgroundColor') { + value = dom.toHex(value); + } + + // Opera will return bold as 700 + if (name == 'fontWeight' && value == 700) { + value = 'bold'; + } + + // Normalize fontFamily so "'Font name', Font" becomes: "Font name,Font" + if (name == 'fontFamily') { + value = value.replace(/[\'\"]/g, '').replace(/,\s+/g, ','); + } + + return '' + value; + } + + /** + * Replaces variables in the value. The variable format is %var. + * + * @private + * @param {String} value Value to replace variables in. + * @param {Object} vars Name/value array with variables to replace. + * @return {String} New value with replaced variables. + */ + function replaceVars(value, vars) { + if (typeof(value) != "string") { + value = value(vars); + } else if (vars) { + value = value.replace(/%(\w+)/g, function(str, name) { + return vars[name] || str; + }); + } + + return value; + } + + function isWhiteSpaceNode(node) { + return node && node.nodeType === 3 && /^([\t \r\n]+|)$/.test(node.nodeValue); + } + + function wrap(node, name, attrs) { + var wrapper = dom.create(name, attrs); + + node.parentNode.insertBefore(wrapper, node); + wrapper.appendChild(node); + + return wrapper; + } + + /** + * Expands the specified range like object to depending on format. + * + * For example on block formats it will move the start/end position + * to the beginning of the current block. + * + * @private + * @param {Object} rng Range like object. + * @param {Array} formats Array with formats to expand by. + * @return {Object} Expanded range like object. + */ + function expandRng(rng, format, remove) { + var lastIdx, leaf, endPoint, + startContainer = rng.startContainer, + startOffset = rng.startOffset, + endContainer = rng.endContainer, + endOffset = rng.endOffset; + + // This function walks up the tree if there is no siblings before/after the node + function findParentContainer(start) { + var container, parent, sibling, siblingName, root; + + container = parent = start ? startContainer : endContainer; + siblingName = start ? 'previousSibling' : 'nextSibling'; + root = dom.getRoot(); + + function isBogusBr(node) { + return node.nodeName == "BR" && node.getAttribute('data-mce-bogus') && !node.nextSibling; + } + + // If it's a text node and the offset is inside the text + if (container.nodeType == 3 && !isWhiteSpaceNode(container)) { + if (start ? startOffset > 0 : endOffset < container.nodeValue.length) { + return container; + } + } + + /*eslint no-constant-condition:0 */ + while (true) { + // Stop expanding on block elements + if (!format[0].block_expand && isBlock(parent)) { + return parent; + } + + // Walk left/right + for (sibling = parent[siblingName]; sibling; sibling = sibling[siblingName]) { + if (!isBookmarkNode(sibling) && !isWhiteSpaceNode(sibling) && !isBogusBr(sibling)) { + return parent; + } + } + + // Check if we can move up are we at root level or body level + if (parent.parentNode == root) { + container = parent; + break; + } + + parent = parent.parentNode; + } + + return container; + } + + // This function walks down the tree to find the leaf at the selection. + // The offset is also returned as if node initially a leaf, the offset may be in the middle of the text node. + function findLeaf(node, offset) { + if (offset === undef) { + offset = node.nodeType === 3 ? node.length : node.childNodes.length; + } + + while (node && node.hasChildNodes()) { + node = node.childNodes[offset]; + if (node) { + offset = node.nodeType === 3 ? node.length : node.childNodes.length; + } + } + return { node: node, offset: offset }; + } + + // If index based start position then resolve it + if (startContainer.nodeType == 1 && startContainer.hasChildNodes()) { + lastIdx = startContainer.childNodes.length - 1; + startContainer = startContainer.childNodes[startOffset > lastIdx ? lastIdx : startOffset]; + + if (startContainer.nodeType == 3) { + startOffset = 0; + } + } + + // If index based end position then resolve it + if (endContainer.nodeType == 1 && endContainer.hasChildNodes()) { + lastIdx = endContainer.childNodes.length - 1; + endContainer = endContainer.childNodes[endOffset > lastIdx ? lastIdx : endOffset - 1]; + + if (endContainer.nodeType == 3) { + endOffset = endContainer.nodeValue.length; + } + } + + // Expands the node to the closes contentEditable false element if it exists + function findParentContentEditable(node) { + var parent = node; + + while (parent) { + if (parent.nodeType === 1 && getContentEditable(parent)) { + return getContentEditable(parent) === "false" ? parent : node; + } + + parent = parent.parentNode; + } + + return node; + } + + function findWordEndPoint(container, offset, start) { + var walker, node, pos, lastTextNode; + + function findSpace(node, offset) { + var pos, pos2, str = node.nodeValue; + + if (typeof(offset) == "undefined") { + offset = start ? str.length : 0; + } + + if (start) { + pos = str.lastIndexOf(' ', offset); + pos2 = str.lastIndexOf('\u00a0', offset); + pos = pos > pos2 ? pos : pos2; + + // Include the space on remove to avoid tag soup + if (pos !== -1 && !remove) { + pos++; + } + } else { + pos = str.indexOf(' ', offset); + pos2 = str.indexOf('\u00a0', offset); + pos = pos !== -1 && (pos2 === -1 || pos < pos2) ? pos : pos2; + } + + return pos; + } + + if (container.nodeType === 3) { + pos = findSpace(container, offset); + + if (pos !== -1) { + return {container: container, offset: pos}; + } + + lastTextNode = container; + } + + // Walk the nodes inside the block + walker = new TreeWalker(container, dom.getParent(container, isBlock) || ed.getBody()); + while ((node = walker[start ? 'prev' : 'next']())) { + if (node.nodeType === 3) { + lastTextNode = node; + pos = findSpace(node); + + if (pos !== -1) { + return {container: node, offset: pos}; + } + } else if (isBlock(node)) { + break; + } + } + + if (lastTextNode) { + if (start) { + offset = 0; + } else { + offset = lastTextNode.length; + } + + return {container: lastTextNode, offset: offset}; + } + } + + function findSelectorEndPoint(container, sibling_name) { + var parents, i, y, curFormat; + + if (container.nodeType == 3 && container.nodeValue.length === 0 && container[sibling_name]) { + container = container[sibling_name]; + } + + parents = getParents(container); + for (i = 0; i < parents.length; i++) { + for (y = 0; y < format.length; y++) { + curFormat = format[y]; + + // If collapsed state is set then skip formats that doesn't match that + if ("collapsed" in curFormat && curFormat.collapsed !== rng.collapsed) { + continue; + } + + if (dom.is(parents[i], curFormat.selector)) { + return parents[i]; + } + } + } + + return container; + } + + function findBlockEndPoint(container, sibling_name) { + var node, root = dom.getRoot(); + + // Expand to block of similar type + if (!format[0].wrapper) { + node = dom.getParent(container, format[0].block, root); + } + + // Expand to first wrappable block element or any block element + if (!node) { + node = dom.getParent(container.nodeType == 3 ? container.parentNode : container, function(node) { + // Fixes #6183 where it would expand to editable parent element in inline mode + return node != root && isTextBlock(node); + }); + } + + // Exclude inner lists from wrapping + if (node && format[0].wrapper) { + node = getParents(node, 'ul,ol').reverse()[0] || node; + } + + // Didn't find a block element look for first/last wrappable element + if (!node) { + node = container; + + while (node[sibling_name] && !isBlock(node[sibling_name])) { + node = node[sibling_name]; + + // Break on BR but include it will be removed later on + // we can't remove it now since we need to check if it can be wrapped + if (isEq(node, 'br')) { + break; + } + } + } + + return node || container; + } + + // Expand to closest contentEditable element + startContainer = findParentContentEditable(startContainer); + endContainer = findParentContentEditable(endContainer); + + // Exclude bookmark nodes if possible + if (isBookmarkNode(startContainer.parentNode) || isBookmarkNode(startContainer)) { + startContainer = isBookmarkNode(startContainer) ? startContainer : startContainer.parentNode; + startContainer = startContainer.nextSibling || startContainer; + + if (startContainer.nodeType == 3) { + startOffset = 0; + } + } + + if (isBookmarkNode(endContainer.parentNode) || isBookmarkNode(endContainer)) { + endContainer = isBookmarkNode(endContainer) ? endContainer : endContainer.parentNode; + endContainer = endContainer.previousSibling || endContainer; + + if (endContainer.nodeType == 3) { + endOffset = endContainer.length; + } + } + + if (format[0].inline) { + if (rng.collapsed) { + // Expand left to closest word boundary + endPoint = findWordEndPoint(startContainer, startOffset, true); + if (endPoint) { + startContainer = endPoint.container; + startOffset = endPoint.offset; + } + + // Expand right to closest word boundary + endPoint = findWordEndPoint(endContainer, endOffset); + if (endPoint) { + endContainer = endPoint.container; + endOffset = endPoint.offset; + } + } + + // Avoid applying formatting to a trailing space. + leaf = findLeaf(endContainer, endOffset); + if (leaf.node) { + while (leaf.node && leaf.offset === 0 && leaf.node.previousSibling) { + leaf = findLeaf(leaf.node.previousSibling); + } + + if (leaf.node && leaf.offset > 0 && leaf.node.nodeType === 3 && + leaf.node.nodeValue.charAt(leaf.offset - 1) === ' ') { + + if (leaf.offset > 1) { + endContainer = leaf.node; + endContainer.splitText(leaf.offset - 1); + } + } + } + } + + // Move start/end point up the tree if the leaves are sharp and if we are in different containers + // Example * becomes !: !

    *texttext*

    ! + // This will reduce the number of wrapper elements that needs to be created + // Move start point up the tree + if (format[0].inline || format[0].block_expand) { + if (!format[0].inline || (startContainer.nodeType != 3 || startOffset === 0)) { + startContainer = findParentContainer(true); + } + + if (!format[0].inline || (endContainer.nodeType != 3 || endOffset === endContainer.nodeValue.length)) { + endContainer = findParentContainer(); + } + } + + // Expand start/end container to matching selector + if (format[0].selector && format[0].expand !== FALSE && !format[0].inline) { + // Find new startContainer/endContainer if there is better one + startContainer = findSelectorEndPoint(startContainer, 'previousSibling'); + endContainer = findSelectorEndPoint(endContainer, 'nextSibling'); + } + + // Expand start/end container to matching block element or text node + if (format[0].block || format[0].selector) { + // Find new startContainer/endContainer if there is better one + startContainer = findBlockEndPoint(startContainer, 'previousSibling'); + endContainer = findBlockEndPoint(endContainer, 'nextSibling'); + + // Non block element then try to expand up the leaf + if (format[0].block) { + if (!isBlock(startContainer)) { + startContainer = findParentContainer(true); + } + + if (!isBlock(endContainer)) { + endContainer = findParentContainer(); + } + } + } + + // Setup index for startContainer + if (startContainer.nodeType == 1) { + startOffset = nodeIndex(startContainer); + startContainer = startContainer.parentNode; + } + + // Setup index for endContainer + if (endContainer.nodeType == 1) { + endOffset = nodeIndex(endContainer) + 1; + endContainer = endContainer.parentNode; + } + + // Return new range like object + return { + startContainer: startContainer, + startOffset: startOffset, + endContainer: endContainer, + endOffset: endOffset + }; + } + + /** + * Removes the specified format for the specified node. It will also remove the node if it doesn't have + * any attributes if the format specifies it to do so. + * + * @private + * @param {Object} format Format object with items to remove from node. + * @param {Object} vars Name/value object with variables to apply to format. + * @param {Node} node Node to remove the format styles on. + * @param {Node} compare_node Optional compare node, if specified the styles will be compared to that node. + * @return {Boolean} True/false if the node was removed or not. + */ + function removeFormat(format, vars, node, compare_node) { + var i, attrs, stylesModified; + + // Check if node matches format + if (!matchName(node, format)) { + return FALSE; + } + + // Should we compare with format attribs and styles + if (format.remove != 'all') { + // Remove styles + each(format.styles, function(value, name) { + value = normalizeStyleValue(replaceVars(value, vars), name); + + // Indexed array + if (typeof(name) === 'number') { + name = value; + compare_node = 0; + } + + if (!compare_node || isEq(getStyle(compare_node, name), value)) { + dom.setStyle(node, name, ''); + } + + stylesModified = 1; + }); + + // Remove style attribute if it's empty + if (stylesModified && dom.getAttrib(node, 'style') === '') { + node.removeAttribute('style'); + node.removeAttribute('data-mce-style'); + } + + // Remove attributes + each(format.attributes, function(value, name) { + var valueOut; + + value = replaceVars(value, vars); + + // Indexed array + if (typeof(name) === 'number') { + name = value; + compare_node = 0; + } + + if (!compare_node || isEq(dom.getAttrib(compare_node, name), value)) { + // Keep internal classes + if (name == 'class') { + value = dom.getAttrib(node, name); + if (value) { + // Build new class value where everything is removed except the internal prefixed classes + valueOut = ''; + each(value.split(/\s+/), function(cls) { + if (/mce\w+/.test(cls)) { + valueOut += (valueOut ? ' ' : '') + cls; + } + }); + + // We got some internal classes left + if (valueOut) { + dom.setAttrib(node, name, valueOut); + return; + } + } + } + + // IE6 has a bug where the attribute doesn't get removed correctly + if (name == "class") { + node.removeAttribute('className'); + } + + // Remove mce prefixed attributes + if (MCE_ATTR_RE.test(name)) { + node.removeAttribute('data-mce-' + name); + } + + node.removeAttribute(name); + } + }); + + // Remove classes + each(format.classes, function(value) { + value = replaceVars(value, vars); + + if (!compare_node || dom.hasClass(compare_node, value)) { + dom.removeClass(node, value); + } + }); + + // Check for non internal attributes + attrs = dom.getAttribs(node); + for (i = 0; i < attrs.length; i++) { + if (attrs[i].nodeName.indexOf('_') !== 0) { + return FALSE; + } + } + } + + // Remove the inline child if it's empty for example or + if (format.remove != 'none') { + removeNode(node, format); + return TRUE; + } + } + + /** + * Removes the node and wrap it's children in paragraphs before doing so or + * appends BR elements to the beginning/end of the block element if forcedRootBlocks is disabled. + * + * If the div in the node below gets removed: + * text
    text
    text + * + * Output becomes: + * text

    text
    text + * + * So when the div is removed the result is: + * text
    text
    text + * + * @private + * @param {Node} node Node to remove + apply BR/P elements to. + * @param {Object} format Format rule. + * @return {Node} Input node. + */ + function removeNode(node, format) { + var parentNode = node.parentNode, rootBlockElm; + + function find(node, next, inc) { + node = getNonWhiteSpaceSibling(node, next, inc); + + return !node || (node.nodeName == 'BR' || isBlock(node)); + } + + if (format.block) { + if (!forcedRootBlock) { + // Append BR elements if needed before we remove the block + if (isBlock(node) && !isBlock(parentNode)) { + if (!find(node, FALSE) && !find(node.firstChild, TRUE, 1)) { + node.insertBefore(dom.create('br'), node.firstChild); + } + + if (!find(node, TRUE) && !find(node.lastChild, FALSE, 1)) { + node.appendChild(dom.create('br')); + } + } + } else { + // Wrap the block in a forcedRootBlock if we are at the root of document + if (parentNode == dom.getRoot()) { + if (!format.list_block || !isEq(node, format.list_block)) { + each(grep(node.childNodes), function(node) { + if (isValid(forcedRootBlock, node.nodeName.toLowerCase())) { + if (!rootBlockElm) { + rootBlockElm = wrap(node, forcedRootBlock); + dom.setAttribs(rootBlockElm, ed.settings.forced_root_block_attrs); + } else { + rootBlockElm.appendChild(node); + } + } else { + rootBlockElm = 0; + } + }); + } + } + } + } + + // Never remove nodes that isn't the specified inline element if a selector is specified too + if (format.selector && format.inline && !isEq(format.inline, node)) { + return; + } + + dom.remove(node, 1); + } + + /** + * Returns the next/previous non whitespace node. + * + * @private + * @param {Node} node Node to start at. + * @param {boolean} next (Optional) Include next or previous node defaults to previous. + * @param {boolean} inc (Optional) Include the current node in checking. Defaults to false. + * @return {Node} Next or previous node or undefined if it wasn't found. + */ + function getNonWhiteSpaceSibling(node, next, inc) { + if (node) { + next = next ? 'nextSibling' : 'previousSibling'; + + for (node = inc ? node : node[next]; node; node = node[next]) { + if (node.nodeType == 1 || !isWhiteSpaceNode(node)) { + return node; + } + } + } + } + + /** + * Checks if the specified node is a bookmark node or not. + * + * @private + * @param {Node} node Node to check if it's a bookmark node or not. + * @return {Boolean} true/false if the node is a bookmark node. + */ + function isBookmarkNode(node) { + return node && node.nodeType == 1 && node.getAttribute('data-mce-type') == 'bookmark'; + } + + /** + * Merges the next/previous sibling element if they match. + * + * @private + * @param {Node} prev Previous node to compare/merge. + * @param {Node} next Next node to compare/merge. + * @return {Node} Next node if we didn't merge and prev node if we did. + */ + function mergeSiblings(prev, next) { + var sibling, tmpSibling; + + /** + * Compares two nodes and checks if it's attributes and styles matches. + * This doesn't compare classes as items since their order is significant. + * + * @private + * @param {Node} node1 First node to compare with. + * @param {Node} node2 Second node to compare with. + * @return {boolean} True/false if the nodes are the same or not. + */ + function compareElements(node1, node2) { + // Not the same name + if (node1.nodeName != node2.nodeName) { + return FALSE; + } + + /** + * Returns all the nodes attributes excluding internal ones, styles and classes. + * + * @private + * @param {Node} node Node to get attributes from. + * @return {Object} Name/value object with attributes and attribute values. + */ + function getAttribs(node) { + var attribs = {}; + + each(dom.getAttribs(node), function(attr) { + var name = attr.nodeName.toLowerCase(); + + // Don't compare internal attributes or style + if (name.indexOf('_') !== 0 && name !== 'style' && name !== 'data-mce-style') { + attribs[name] = dom.getAttrib(node, name); + } + }); + + return attribs; + } + + /** + * Compares two objects checks if it's key + value exists in the other one. + * + * @private + * @param {Object} obj1 First object to compare. + * @param {Object} obj2 Second object to compare. + * @return {boolean} True/false if the objects matches or not. + */ + function compareObjects(obj1, obj2) { + var value, name; + + for (name in obj1) { + // Obj1 has item obj2 doesn't have + if (obj1.hasOwnProperty(name)) { + value = obj2[name]; + + // Obj2 doesn't have obj1 item + if (value === undef) { + return FALSE; + } + + // Obj2 item has a different value + if (obj1[name] != value) { + return FALSE; + } + + // Delete similar value + delete obj2[name]; + } + } + + // Check if obj 2 has something obj 1 doesn't have + for (name in obj2) { + // Obj2 has item obj1 doesn't have + if (obj2.hasOwnProperty(name)) { + return FALSE; + } + } + + return TRUE; + } + + // Attribs are not the same + if (!compareObjects(getAttribs(node1), getAttribs(node2))) { + return FALSE; + } + + // Styles are not the same + if (!compareObjects(dom.parseStyle(dom.getAttrib(node1, 'style')), dom.parseStyle(dom.getAttrib(node2, 'style')))) { + return FALSE; + } + + return !isBookmarkNode(node1) && !isBookmarkNode(node2); + } + + function findElementSibling(node, sibling_name) { + for (sibling = node; sibling; sibling = sibling[sibling_name]) { + if (sibling.nodeType == 3 && sibling.nodeValue.length !== 0) { + return node; + } + + if (sibling.nodeType == 1 && !isBookmarkNode(sibling)) { + return sibling; + } + } + + return node; + } + + // Check if next/prev exists and that they are elements + if (prev && next) { + // If previous sibling is empty then jump over it + prev = findElementSibling(prev, 'previousSibling'); + next = findElementSibling(next, 'nextSibling'); + + // Compare next and previous nodes + if (compareElements(prev, next)) { + // Append nodes between + for (sibling = prev.nextSibling; sibling && sibling != next;) { + tmpSibling = sibling; + sibling = sibling.nextSibling; + prev.appendChild(tmpSibling); + } + + // Remove next node + dom.remove(next); + + // Move children into prev node + each(grep(next.childNodes), function(node) { + prev.appendChild(node); + }); + + return prev; + } + } + + return next; + } + + function getContainer(rng, start) { + var container, offset, lastIdx; + + container = rng[start ? 'startContainer' : 'endContainer']; + offset = rng[start ? 'startOffset' : 'endOffset']; + + if (container.nodeType == 1) { + lastIdx = container.childNodes.length - 1; + + if (!start && offset) { + offset--; + } + + container = container.childNodes[offset > lastIdx ? lastIdx : offset]; + } + + // If start text node is excluded then walk to the next node + if (container.nodeType === 3 && start && offset >= container.nodeValue.length) { + container = new TreeWalker(container, ed.getBody()).next() || container; + } + + // If end text node is excluded then walk to the previous node + if (container.nodeType === 3 && !start && offset === 0) { + container = new TreeWalker(container, ed.getBody()).prev() || container; + } + + return container; + } + + function performCaretAction(type, name, vars) { + var caretContainerId = '_mce_caret', debug = ed.settings.caret_debug; + + // Creates a caret container bogus element + function createCaretContainer(fill) { + var caretContainer = dom.create('span', {id: caretContainerId, 'data-mce-bogus': true, style: debug ? 'color:red' : ''}); + + if (fill) { + caretContainer.appendChild(ed.getDoc().createTextNode(INVISIBLE_CHAR)); + } + + return caretContainer; + } + + function isCaretContainerEmpty(node, nodes) { + while (node) { + if ((node.nodeType === 3 && node.nodeValue !== INVISIBLE_CHAR) || node.childNodes.length > 1) { + return false; + } + + // Collect nodes + if (nodes && node.nodeType === 1) { + nodes.push(node); + } + + node = node.firstChild; + } + + return true; + } + + // Returns any parent caret container element + function getParentCaretContainer(node) { + while (node) { + if (node.id === caretContainerId) { + return node; + } + + node = node.parentNode; + } + } + + // Finds the first text node in the specified node + function findFirstTextNode(node) { + var walker; + + if (node) { + walker = new TreeWalker(node, node); + + for (node = walker.current(); node; node = walker.next()) { + if (node.nodeType === 3) { + return node; + } + } + } + } + + // Removes the caret container for the specified node or all on the current document + function removeCaretContainer(node, move_caret) { + var child, rng; + + if (!node) { + node = getParentCaretContainer(selection.getStart()); + + if (!node) { + while ((node = dom.get(caretContainerId))) { + removeCaretContainer(node, false); + } + } + } else { + rng = selection.getRng(true); + + if (isCaretContainerEmpty(node)) { + if (move_caret !== false) { + rng.setStartBefore(node); + rng.setEndBefore(node); + } + + dom.remove(node); + } else { + child = findFirstTextNode(node); + + if (child.nodeValue.charAt(0) === INVISIBLE_CHAR) { + child = child.deleteData(0, 1); + } + + dom.remove(node, 1); + } + + selection.setRng(rng); + } + } + + // Applies formatting to the caret postion + function applyCaretFormat() { + var rng, caretContainer, textNode, offset, bookmark, container, text; + + rng = selection.getRng(true); + offset = rng.startOffset; + container = rng.startContainer; + text = container.nodeValue; + + caretContainer = getParentCaretContainer(selection.getStart()); + if (caretContainer) { + textNode = findFirstTextNode(caretContainer); + } + + // Expand to word is caret is in the middle of a text node and the char before/after is a alpha numeric character + if (text && offset > 0 && offset < text.length && /\w/.test(text.charAt(offset)) && /\w/.test(text.charAt(offset - 1))) { + // Get bookmark of caret position + bookmark = selection.getBookmark(); + + // Collapse bookmark range (WebKit) + rng.collapse(true); + + // Expand the range to the closest word and split it at those points + rng = expandRng(rng, get(name)); + rng = rangeUtils.split(rng); + + // Apply the format to the range + apply(name, vars, rng); + + // Move selection back to caret position + selection.moveToBookmark(bookmark); + } else { + if (!caretContainer || textNode.nodeValue !== INVISIBLE_CHAR) { + caretContainer = createCaretContainer(true); + textNode = caretContainer.firstChild; + + rng.insertNode(caretContainer); + offset = 1; + + apply(name, vars, caretContainer); + } else { + apply(name, vars, caretContainer); + } + + // Move selection to text node + selection.setCursorLocation(textNode, offset); + } + } + + function removeCaretFormat() { + var rng = selection.getRng(true), container, offset, bookmark, + hasContentAfter, node, formatNode, parents = [], i, caretContainer; + + container = rng.startContainer; + offset = rng.startOffset; + node = container; + + if (container.nodeType == 3) { + if (offset != container.nodeValue.length || container.nodeValue === INVISIBLE_CHAR) { + hasContentAfter = true; + } + + node = node.parentNode; + } + + while (node) { + if (matchNode(node, name, vars)) { + formatNode = node; + break; + } + + if (node.nextSibling) { + hasContentAfter = true; + } + + parents.push(node); + node = node.parentNode; + } + + // Node doesn't have the specified format + if (!formatNode) { + return; + } + + // Is there contents after the caret then remove the format on the element + if (hasContentAfter) { + // Get bookmark of caret position + bookmark = selection.getBookmark(); + + // Collapse bookmark range (WebKit) + rng.collapse(true); + + // Expand the range to the closest word and split it at those points + rng = expandRng(rng, get(name), true); + rng = rangeUtils.split(rng); + + // Remove the format from the range + remove(name, vars, rng); + + // Move selection back to caret position + selection.moveToBookmark(bookmark); + } else { + caretContainer = createCaretContainer(); + + node = caretContainer; + for (i = parents.length - 1; i >= 0; i--) { + node.appendChild(dom.clone(parents[i], false)); + node = node.firstChild; + } + + // Insert invisible character into inner most format element + node.appendChild(dom.doc.createTextNode(INVISIBLE_CHAR)); + node = node.firstChild; + + var block = dom.getParent(formatNode, isTextBlock); + + if (block && dom.isEmpty(block)) { + // Replace formatNode with caretContainer when removing format from empty block like

    |

    + formatNode.parentNode.replaceChild(caretContainer, formatNode); + } else { + // Insert caret container after the formated node + dom.insertAfter(caretContainer, formatNode); + } + + // Move selection to text node + selection.setCursorLocation(node, 1); + + // If the formatNode is empty, we can remove it safely. + if (dom.isEmpty(formatNode)) { + dom.remove(formatNode); + } + } + } + + // Checks if the parent caret container node isn't empty if that is the case it + // will remove the bogus state on all children that isn't empty + function unmarkBogusCaretParents() { + var caretContainer; + + caretContainer = getParentCaretContainer(selection.getStart()); + if (caretContainer && !dom.isEmpty(caretContainer)) { + walk(caretContainer, function(node) { + if (node.nodeType == 1 && node.id !== caretContainerId && !dom.isEmpty(node)) { + dom.setAttrib(node, 'data-mce-bogus', null); + } + }, 'childNodes'); + } + } + + // Only bind the caret events once + if (!ed._hasCaretEvents) { + // Mark current caret container elements as bogus when getting the contents so we don't end up with empty elements + markCaretContainersBogus = function() { + var nodes = [], i; + + if (isCaretContainerEmpty(getParentCaretContainer(selection.getStart()), nodes)) { + // Mark children + i = nodes.length; + while (i--) { + dom.setAttrib(nodes[i], 'data-mce-bogus', '1'); + } + } + }; + + disableCaretContainer = function(e) { + var keyCode = e.keyCode; + + removeCaretContainer(); + + // Remove caret container on keydown and it's a backspace, enter or left/right arrow keys + if (keyCode == 8 || keyCode == 37 || keyCode == 39) { + removeCaretContainer(getParentCaretContainer(selection.getStart())); + } + + unmarkBogusCaretParents(); + }; + + // Remove bogus state if they got filled by contents using editor.selection.setContent + ed.on('SetContent', function(e) { + if (e.selection) { + unmarkBogusCaretParents(); + } + }); + ed._hasCaretEvents = true; + } + + // Do apply or remove caret format + if (type == "apply") { + applyCaretFormat(); + } else { + removeCaretFormat(); + } + } + + /** + * Moves the start to the first suitable text node. + */ + function moveStart(rng) { + var container = rng.startContainer, + offset = rng.startOffset, isAtEndOfText, + walker, node, nodes, tmpNode; + + // Convert text node into index if possible + if (container.nodeType == 3 && offset >= container.nodeValue.length) { + // Get the parent container location and walk from there + offset = nodeIndex(container); + container = container.parentNode; + isAtEndOfText = true; + } + + // Move startContainer/startOffset in to a suitable node + if (container.nodeType == 1) { + nodes = container.childNodes; + container = nodes[Math.min(offset, nodes.length - 1)]; + walker = new TreeWalker(container, dom.getParent(container, dom.isBlock)); + + // If offset is at end of the parent node walk to the next one + if (offset > nodes.length - 1 || isAtEndOfText) { + walker.next(); + } + + for (node = walker.current(); node; node = walker.next()) { + if (node.nodeType == 3 && !isWhiteSpaceNode(node)) { + // IE has a "neat" feature where it moves the start node into the closest element + // we can avoid this by inserting an element before it and then remove it after we set the selection + tmpNode = dom.create('a', null, INVISIBLE_CHAR); + node.parentNode.insertBefore(tmpNode, node); + + // Set selection and remove tmpNode + rng.setStart(node, 0); + selection.setRng(rng); + dom.remove(tmpNode); + + return; + } + } + } + } + }; +}); diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/LegacyInput.js b/common/static/js/vendor/tinymce/js/tinymce/classes/LegacyInput.js new file mode 100755 index 0000000000..2f3f55985c --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/LegacyInput.js @@ -0,0 +1,73 @@ +/** + * LegacyInput.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +define("tinymce/LegacyInput", [ + "tinymce/EditorManager", + "tinymce/util/Tools" +], function(EditorManager, Tools) { + var each = Tools.each, explode = Tools.explode; + + EditorManager.on('AddEditor', function(e) { + var editor = e.editor; + + editor.on('preInit', function() { + var filters, fontSizes, dom, settings = editor.settings; + + function replaceWithSpan(node, styles) { + each(styles, function(value, name) { + if (value) { + dom.setStyle(node, name, value); + } + }); + + dom.rename(node, 'span'); + } + + function convert(e) { + dom = editor.dom; + + if (settings.convert_fonts_to_spans) { + each(dom.select('font,u,strike', e.node), function(node) { + filters[node.nodeName.toLowerCase()](dom, node); + }); + } + } + + if (settings.inline_styles) { + fontSizes = explode(settings.font_size_legacy_values); + + filters = { + font: function(dom, node) { + replaceWithSpan(node, { + backgroundColor: node.style.backgroundColor, + color: node.color, + fontFamily: node.face, + fontSize: fontSizes[parseInt(node.size, 10) - 1] + }); + }, + + u: function(dom, node) { + replaceWithSpan(node, { + textDecoration: 'underline' + }); + }, + + strike: function(dom, node) { + replaceWithSpan(node, { + textDecoration: 'line-through' + }); + } + }; + + editor.on('PreProcess SetContent', convert); + } + }); + }); +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/Shortcuts.js b/common/static/js/vendor/tinymce/js/tinymce/classes/Shortcuts.js new file mode 100755 index 0000000000..03051d8e5e --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/Shortcuts.js @@ -0,0 +1,111 @@ +/** + * Shortcuts.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Contains all logic for handling of keyboard shortcuts. + */ +define("tinymce/Shortcuts", [ + "tinymce/util/Tools", + "tinymce/Env" +], function(Tools, Env) { + var each = Tools.each, explode = Tools.explode; + + var keyCodeLookup = { + "f9": 120, + "f10": 121, + "f11": 122 + }; + + return function(editor) { + var self = this, shortcuts = {}; + + editor.on('keyup keypress keydown', function(e) { + if (e.altKey || e.ctrlKey || e.metaKey) { + each(shortcuts, function(shortcut) { + var ctrlKey = Env.mac ? e.metaKey : e.ctrlKey; + + if (shortcut.ctrl != ctrlKey || shortcut.alt != e.altKey || shortcut.shift != e.shiftKey) { + return; + } + + if (e.keyCode == shortcut.keyCode || (e.charCode && e.charCode == shortcut.charCode)) { + e.preventDefault(); + + if (e.type == "keydown") { + shortcut.func.call(shortcut.scope); + } + + return true; + } + }); + } + }); + + /** + * Adds a keyboard shortcut for some command or function. + * + * @method addShortcut + * @param {String} pattern Shortcut pattern. Like for example: ctrl+alt+o. + * @param {String} desc Text description for the command. + * @param {String/Function} cmdFunc Command name string or function to execute when the key is pressed. + * @param {Object} sc Optional scope to execute the function in. + * @return {Boolean} true/false state if the shortcut was added or not. + */ + self.add = function(pattern, desc, cmdFunc, scope) { + var cmd; + + cmd = cmdFunc; + + if (typeof(cmdFunc) === 'string') { + cmdFunc = function() { + editor.execCommand(cmd, false, null); + }; + } else if (Tools.isArray(cmd)) { + cmdFunc = function() { + editor.execCommand(cmd[0], cmd[1], cmd[2]); + }; + } + + each(explode(pattern.toLowerCase()), function(pattern) { + var shortcut = { + func: cmdFunc, + scope: scope || editor, + desc: editor.translate(desc), + alt: false, + ctrl: false, + shift: false + }; + + each(explode(pattern, '+'), function(value) { + switch (value) { + case 'alt': + case 'ctrl': + case 'shift': + shortcut[value] = true; + break; + + default: + shortcut.charCode = value.charCodeAt(0); + shortcut.keyCode = keyCodeLookup[value] || value.toUpperCase().charCodeAt(0); + } + }); + + shortcuts[ + (shortcut.ctrl ? 'ctrl' : '') + ',' + + (shortcut.alt ? 'alt' : '') + ',' + + (shortcut.shift ? 'shift' : '') + ',' + + shortcut.keyCode + ] = shortcut; + }); + + return true; + }; + }; +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/UndoManager.js b/common/static/js/vendor/tinymce/js/tinymce/classes/UndoManager.js new file mode 100755 index 0000000000..ebe43b4b83 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/UndoManager.js @@ -0,0 +1,337 @@ +/** + * UndoManager.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class handles the undo/redo history levels for the editor. Since the build in undo/redo has major drawbacks a custom one was needed. + * + * @class tinymce.UndoManager + */ +define("tinymce/UndoManager", [ + "tinymce/Env", + "tinymce/util/Tools" +], function(Env, Tools) { + var trim = Tools.trim, trimContentRegExp; + + trimContentRegExp = new RegExp([ + ']+data-mce-bogus[^>]+>[\u200B\uFEFF]+<\\/span>', // Trim bogus spans like caret containers + ']+data-mce-bogus[^>]+><\\/div>', // Trim bogus divs like resize handles + '\\s?data-mce-selected="[^"]+"' // Trim temporaty data-mce prefixed attributes like data-mce-selected + ].join('|'), 'gi'); + + return function(editor) { + var self = this, index = 0, data = [], beforeBookmark, isFirstTypedCharacter, lock; + + // Returns a trimmed version of the current editor contents + function getContent() { + return trim(editor.getContent({format: 'raw', no_events: 1}).replace(trimContentRegExp, '')); + } + + function addNonTypingUndoLevel(e) { + self.typing = false; + self.add({}, e); + } + + // Add initial undo level when the editor is initialized + editor.on('init', function() { + self.add(); + }); + + // Get position before an execCommand is processed + editor.on('BeforeExecCommand', function(e) { + var cmd = e.command; + + if (cmd != 'Undo' && cmd != 'Redo' && cmd != 'mceRepaint') { + self.beforeChange(); + } + }); + + // Add undo level after an execCommand call was made + editor.on('ExecCommand', function(e) { + var cmd = e.command; + + if (cmd != 'Undo' && cmd != 'Redo' && cmd != 'mceRepaint') { + addNonTypingUndoLevel(e); + } + }); + + editor.on('ObjectResizeStart', function() { + self.beforeChange(); + }); + + editor.on('SaveContent ObjectResized blur', addNonTypingUndoLevel); + editor.dom.bind(editor.dom.getRoot(), 'dragend', addNonTypingUndoLevel); + + editor.on('KeyUp', function(e) { + var keyCode = e.keyCode; + + if ((keyCode >= 33 && keyCode <= 36) || (keyCode >= 37 && keyCode <= 40) || keyCode == 45 || keyCode == 13 || e.ctrlKey) { + addNonTypingUndoLevel(); + editor.nodeChanged(); + } + + if (keyCode == 46 || keyCode == 8 || (Env.mac && (keyCode == 91 || keyCode == 93))) { + editor.nodeChanged(); + } + + // Fire a TypingUndo event on the first character entered + if (isFirstTypedCharacter && self.typing) { + // Make the it dirty if the content was changed after typing the first character + if (!editor.isDirty()) { + editor.isNotDirty = !data[0] || getContent() == data[0].content; + + // Fire initial change event + if (!editor.isNotDirty) { + editor.fire('change', {level: data[0], lastLevel: null}); + } + } + + editor.fire('TypingUndo'); + isFirstTypedCharacter = false; + editor.nodeChanged(); + } + }); + + editor.on('KeyDown', function(e) { + var keyCode = e.keyCode; + + // Is caracter positon keys left,right,up,down,home,end,pgdown,pgup,enter + if ((keyCode >= 33 && keyCode <= 36) || (keyCode >= 37 && keyCode <= 40) || keyCode == 45) { + if (self.typing) { + addNonTypingUndoLevel(e); + } + + return; + } + + // If key isn't shift,ctrl,alt,capslock,metakey + if ((keyCode < 16 || keyCode > 20) && keyCode != 224 && keyCode != 91 && !self.typing) { + self.beforeChange(); + self.typing = true; + self.add({}, e); + isFirstTypedCharacter = true; + } + }); + + editor.on('MouseDown', function(e) { + if (self.typing) { + addNonTypingUndoLevel(e); + } + }); + + // Add keyboard shortcuts for undo/redo keys + editor.addShortcut('ctrl+z', '', 'Undo'); + editor.addShortcut('ctrl+y,ctrl+shift+z', '', 'Redo'); + + editor.on('AddUndo Undo Redo ClearUndos MouseUp', function(e) { + if (!e.isDefaultPrevented()) { + editor.nodeChanged(); + } + }); + + self = { + // Explose for debugging reasons + data: data, + + /** + * State if the user is currently typing or not. This will add a typing operation into one undo + * level instead of one new level for each keystroke. + * + * @field {Boolean} typing + */ + typing: false, + + /** + * Stores away a bookmark to be used when performing an undo action so that the selection is before + * the change has been made. + * + * @method beforeChange + */ + beforeChange: function() { + if (!lock) { + beforeBookmark = editor.selection.getBookmark(2, true); + } + }, + + /** + * Adds a new undo level/snapshot to the undo list. + * + * @method add + * @param {Object} level Optional undo level object to add. + * @param {DOMEvent} Event Optional event responsible for the creation of the undo level. + * @return {Object} Undo level that got added or null it a level wasn't needed. + */ + add: function(level, event) { + var i, settings = editor.settings, lastLevel; + + level = level || {}; + level.content = getContent(); + + if (lock || editor.removed) { + return null; + } + + if (editor.fire('BeforeAddUndo', {level: level, originalEvent: event}).isDefaultPrevented()) { + return null; + } + + // Add undo level if needed + lastLevel = data[index]; + if (lastLevel && lastLevel.content == level.content) { + return null; + } + + // Set before bookmark on previous level + if (data[index]) { + data[index].beforeBookmark = beforeBookmark; + } + + // Time to compress + if (settings.custom_undo_redo_levels) { + if (data.length > settings.custom_undo_redo_levels) { + for (i = 0; i < data.length - 1; i++) { + data[i] = data[i + 1]; + } + + data.length--; + index = data.length; + } + } + + // Get a non intrusive normalized bookmark + level.bookmark = editor.selection.getBookmark(2, true); + + // Crop array if needed + if (index < data.length - 1) { + data.length = index + 1; + } + + data.push(level); + index = data.length - 1; + + var args = {level: level, lastLevel: lastLevel, originalEvent: event}; + + editor.fire('AddUndo', args); + + if (index > 0) { + editor.isNotDirty = false; + editor.fire('change', args); + } + + return level; + }, + + /** + * Undoes the last action. + * + * @method undo + * @return {Object} Undo level or null if no undo was performed. + */ + undo: function() { + var level; + + if (self.typing) { + self.add(); + self.typing = false; + } + + if (index > 0) { + level = data[--index]; + + // Undo to first index then set dirty state to false + if (index === 0) { + editor.isNotDirty = true; + } + + editor.setContent(level.content, {format: 'raw'}); + editor.selection.moveToBookmark(level.beforeBookmark); + + editor.fire('undo', {level: level}); + } + + return level; + }, + + /** + * Redoes the last action. + * + * @method redo + * @return {Object} Redo level or null if no redo was performed. + */ + redo: function() { + var level; + + if (index < data.length - 1) { + level = data[++index]; + + editor.setContent(level.content, {format: 'raw'}); + editor.selection.moveToBookmark(level.bookmark); + + editor.fire('redo', {level: level}); + } + + return level; + }, + + /** + * Removes all undo levels. + * + * @method clear + */ + clear: function() { + data = []; + index = 0; + self.typing = false; + editor.fire('ClearUndos'); + }, + + /** + * Returns true/false if the undo manager has any undo levels. + * + * @method hasUndo + * @return {Boolean} true/false if the undo manager has any undo levels. + */ + hasUndo: function() { + // Has undo levels or typing and content isn't the same as the initial level + return index > 0 || (self.typing && data[0] && getContent() != data[0].content); + }, + + /** + * Returns true/false if the undo manager has any redo levels. + * + * @method hasRedo + * @return {Boolean} true/false if the undo manager has any redo levels. + */ + hasRedo: function() { + return index < data.length - 1 && !this.typing; + }, + + /** + * Executes the specified function in an undo transation. The selection + * before the modification will be stored to the undo stack and if the DOM changes + * it will add a new undo level. Any methods within the transation that adds undo levels will + * be ignored. So a transation can include calls to execCommand or editor.insertContent. + * + * @method transact + * @param {function} callback Function to execute dom manipulation logic in. + */ + transact: function(callback) { + self.beforeChange(); + + lock = true; + callback(); + lock = false; + + self.add(); + } + }; + + return self; + }; +}); diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/WindowManager.js b/common/static/js/vendor/tinymce/js/tinymce/classes/WindowManager.js new file mode 100755 index 0000000000..d864f15cd2 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/WindowManager.js @@ -0,0 +1,221 @@ +/** + * WindowManager.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class handles the creation of native windows and dialogs. This class can be extended to provide for example inline dialogs. + * + * @class tinymce.WindowManager + * @example + * // Opens a new dialog with the file.htm file and the size 320x240 + * // It also adds a custom parameter this can be retrieved by using tinyMCEPopup.getWindowArg inside the dialog. + * tinymce.activeEditor.windowManager.open({ + * url: 'file.htm', + * width: 320, + * height: 240 + * }, { + * custom_param: 1 + * }); + * + * // Displays an alert box using the active editors window manager instance + * tinymce.activeEditor.windowManager.alert('Hello world!'); + * + * // Displays an confirm box and an alert message will be displayed depending on what you choose in the confirm + * tinymce.activeEditor.windowManager.confirm("Do you want to do something", function(s) { + * if (s) + * tinymce.activeEditor.windowManager.alert("Ok"); + * else + * tinymce.activeEditor.windowManager.alert("Cancel"); + * }); + */ +define("tinymce/WindowManager", [ + "tinymce/ui/Window", + "tinymce/ui/MessageBox" +], function(Window, MessageBox) { + return function(editor) { + var self = this, windows = []; + + function getTopMostWindow() { + if (windows.length) { + return windows[windows.length - 1]; + } + } + + self.windows = windows; + + /** + * Opens a new window. + * + * @method open + * @param {Object} args Optional name/value settings collection contains things like width/height/url etc. + * @option {String} title Window title. + * @option {String} file URL of the file to open in the window. + * @option {Number} width Width in pixels. + * @option {Number} height Height in pixels. + * @option {Boolean} resizable Specifies whether the popup window is resizable or not. + * @option {Boolean} maximizable Specifies whether the popup window has a "maximize" button and can get maximized or not. + * @option {String/Boolean} scrollbars Specifies whether the popup window can have scrollbars if required (i.e. content + * larger than the popup size specified). + */ + self.open = function(args, params) { + var win; + + editor.editorManager.activeEditor = editor; + + args.title = args.title || ' '; + + // Handle URL + args.url = args.url || args.file; // Legacy + if (args.url) { + args.width = parseInt(args.width || 320, 10); + args.height = parseInt(args.height || 240, 10); + } + + // Handle body + if (args.body) { + args.items = { + defaults: args.defaults, + type: args.bodyType || 'form', + items: args.body + }; + } + + if (!args.url && !args.buttons) { + args.buttons = [ + {text: 'Ok', subtype: 'primary', onclick: function() { + win.find('form')[0].submit(); + }}, + + {text: 'Cancel', onclick: function() { + win.close(); + }} + ]; + } + + win = new Window(args); + windows.push(win); + + win.on('close', function() { + var i = windows.length; + + while (i--) { + if (windows[i] === win) { + windows.splice(i, 1); + } + } + + editor.focus(); + }); + + // Handle data + if (args.data) { + win.on('postRender', function() { + this.find('*').each(function(ctrl) { + var name = ctrl.name(); + + if (name in args.data) { + ctrl.value(args.data[name]); + } + }); + }); + } + + // store args and parameters + win.features = args || {}; + win.params = params || {}; + + // Takes a snapshot in the FocusManager of the selection before focus is lost to dialog + editor.nodeChanged(); + + return win.renderTo(document.body).reflow(); + }; + + /** + * Creates a alert dialog. Please don't use the blocking behavior of this + * native version use the callback method instead then it can be extended. + * + * @method alert + * @param {String} message Text to display in the new alert dialog. + * @param {function} callback Callback function to be executed after the user has selected ok. + * @param {Object} scope Optional scope to execute the callback in. + * @example + * // Displays an alert box using the active editors window manager instance + * tinymce.activeEditor.windowManager.alert('Hello world!'); + */ + self.alert = function(message, callback, scope) { + MessageBox.alert(message, function() { + if (callback) { + callback.call(scope || this); + } else { + editor.focus(); + } + }); + }; + + /** + * Creates a confirm dialog. Please don't use the blocking behavior of this + * native version use the callback method instead then it can be extended. + * + * @method confirm + * @param {String} messageText to display in the new confirm dialog. + * @param {function} callback Callback function to be executed after the user has selected ok or cancel. + * @param {Object} scope Optional scope to execute the callback in. + * @example + * // Displays an confirm box and an alert message will be displayed depending on what you choose in the confirm + * tinymce.activeEditor.windowManager.confirm("Do you want to do something", function(s) { + * if (s) + * tinymce.activeEditor.windowManager.alert("Ok"); + * else + * tinymce.activeEditor.windowManager.alert("Cancel"); + * }); + */ + self.confirm = function(message, callback, scope) { + MessageBox.confirm(message, function(state) { + callback.call(scope || this, state); + }); + }; + + /** + * Closes the top most window. + * + * @method close + */ + self.close = function() { + if (getTopMostWindow()) { + getTopMostWindow().close(); + } + }; + + /** + * Returns the params of the last window open call. This can be used in iframe based + * dialog to get params passed from the tinymce plugin. + * + * @example + * var dialogArguments = top.tinymce.activeEditor.windowManager.getParams(); + * + * @method getParams + * @return {Object} Name/value object with parameters passed from windowManager.open call. + */ + self.getParams = function() { + return getTopMostWindow() ? getTopMostWindow().params : null; + }; + + /** + * Sets the params of the last opened window. + * + * @method setParams + * @param {Object} params Params object to set for the last opened window. + */ + self.setParams = function(params) { + if (getTopMostWindow()) { + getTopMostWindow().params = params; + } + }; + }; +}); diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/dom/ControlSelection.js b/common/static/js/vendor/tinymce/js/tinymce/classes/dom/ControlSelection.js new file mode 100755 index 0000000000..3e1d6e306b --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/dom/ControlSelection.js @@ -0,0 +1,519 @@ +/** + * ControlSelection.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class handles control selection of elements. Controls are elements + * that can be resized and needs to be selected as a whole. It adds custom resize handles + * to all browser engines that support properly disabling the built in resize logic. + * + * @class tinymce.dom.ControlSelection + */ +define("tinymce/dom/ControlSelection", [ + "tinymce/util/VK", + "tinymce/util/Tools", + "tinymce/Env" +], function(VK, Tools, Env) { + return function(selection, editor) { + var dom = editor.dom, each = Tools.each; + var selectedElm, selectedElmGhost, resizeHandles, selectedHandle, lastMouseDownEvent; + var startX, startY, selectedElmX, selectedElmY, startW, startH, ratio, resizeStarted; + var width, height, editableDoc = editor.getDoc(), rootDocument = document, isIE = Env.ie && Env.ie < 11; + + // Details about each resize handle how to scale etc + resizeHandles = { + // Name: x multiplier, y multiplier, delta size x, delta size y + n: [0.5, 0, 0, -1], + e: [1, 0.5, 1, 0], + s: [0.5, 1, 0, 1], + w: [0, 0.5, -1, 0], + nw: [0, 0, -1, -1], + ne: [1, 0, 1, -1], + se: [1, 1, 1, 1], + sw: [0, 1, -1, 1] + }; + + // Add CSS for resize handles, cloned element and selected + var rootClass = '.mce-content-body'; + editor.contentStyles.push( + rootClass + ' div.mce-resizehandle {' + + 'position: absolute;' + + 'border: 1px solid black;' + + 'background: #FFF;' + + 'width: 5px;' + + 'height: 5px;' + + 'z-index: 10000' + + '}' + + rootClass + ' .mce-resizehandle:hover {' + + 'background: #000' + + '}' + + rootClass + ' img[data-mce-selected], hr[data-mce-selected] {' + + 'outline: 1px solid black;' + + 'resize: none' + // Have been talks about implementing this in browsers + '}' + + rootClass + ' .mce-clonedresizable {' + + 'position: absolute;' + + (Env.gecko ? '' : 'outline: 1px dashed black;') + // Gecko produces trails while resizing + 'opacity: .5;' + + 'filter: alpha(opacity=50);' + + 'z-index: 10000' + + '}' + ); + + function isResizable(elm) { + var selector = editor.settings.object_resizing; + + if (selector === false || Env.iOS) { + return false; + } + + if (typeof selector != 'string') { + selector = 'table,img,div'; + } + + if (elm.getAttribute('data-mce-resize') === 'false') { + return false; + } + + return editor.dom.is(elm, selector); + } + + function resizeGhostElement(e) { + var deltaX, deltaY; + + // Calc new width/height + deltaX = e.screenX - startX; + deltaY = e.screenY - startY; + + // Calc new size + width = deltaX * selectedHandle[2] + startW; + height = deltaY * selectedHandle[3] + startH; + + // Never scale down lower than 5 pixels + width = width < 5 ? 5 : width; + height = height < 5 ? 5 : height; + + // Constrain proportions when modifier key is pressed or if the nw, ne, sw, se corners are moved on an image + if (VK.modifierPressed(e) || (selectedElm.nodeName == "IMG" && selectedHandle[2] * selectedHandle[3] !== 0)) { + width = Math.round(height / ratio); + height = Math.round(width * ratio); + } + + // Update ghost size + dom.setStyles(selectedElmGhost, { + width: width, + height: height + }); + + // Update ghost X position if needed + if (selectedHandle[2] < 0 && selectedElmGhost.clientWidth <= width) { + dom.setStyle(selectedElmGhost, 'left', selectedElmX + (startW - width)); + } + + // Update ghost Y position if needed + if (selectedHandle[3] < 0 && selectedElmGhost.clientHeight <= height) { + dom.setStyle(selectedElmGhost, 'top', selectedElmY + (startH - height)); + } + + if (!resizeStarted) { + editor.fire('ObjectResizeStart', {target: selectedElm, width: startW, height: startH}); + resizeStarted = true; + } + } + + function endGhostResize() { + resizeStarted = false; + + function setSizeProp(name, value) { + if (value) { + // Resize by using style or attribute + if (selectedElm.style[name] || !editor.schema.isValid(selectedElm.nodeName.toLowerCase(), name)) { + dom.setStyle(selectedElm, name, value); + } else { + dom.setAttrib(selectedElm, name, value); + } + } + } + + // Set width/height properties + setSizeProp('width', width); + setSizeProp('height', height); + + dom.unbind(editableDoc, 'mousemove', resizeGhostElement); + dom.unbind(editableDoc, 'mouseup', endGhostResize); + + if (rootDocument != editableDoc) { + dom.unbind(rootDocument, 'mousemove', resizeGhostElement); + dom.unbind(rootDocument, 'mouseup', endGhostResize); + } + + // Remove ghost and update resize handle positions + dom.remove(selectedElmGhost); + + if (!isIE || selectedElm.nodeName == "TABLE") { + showResizeRect(selectedElm); + } + + editor.fire('ObjectResized', {target: selectedElm, width: width, height: height}); + editor.nodeChanged(); + } + + function showResizeRect(targetElm, mouseDownHandleName, mouseDownEvent) { + var position, targetWidth, targetHeight, e, rect, offsetParent = editor.getBody(); + + unbindResizeHandleEvents(); + + // Get position and size of target + position = dom.getPos(targetElm, offsetParent); + selectedElmX = position.x; + selectedElmY = position.y; + rect = targetElm.getBoundingClientRect(); // Fix for Gecko offsetHeight for table with caption + targetWidth = rect.width || (rect.right - rect.left); + targetHeight = rect.height || (rect.bottom - rect.top); + + // Reset width/height if user selects a new image/table + if (selectedElm != targetElm) { + detachResizeStartListener(); + selectedElm = targetElm; + width = height = 0; + } + + // Makes it possible to disable resizing + e = editor.fire('ObjectSelected', {target: targetElm}); + + if (isResizable(targetElm) && !e.isDefaultPrevented()) { + each(resizeHandles, function(handle, name) { + var handleElm, handlerContainerElm; + + function startDrag(e) { + startX = e.screenX; + startY = e.screenY; + startW = selectedElm.clientWidth; + startH = selectedElm.clientHeight; + ratio = startH / startW; + selectedHandle = handle; + + selectedElmGhost = selectedElm.cloneNode(true); + dom.addClass(selectedElmGhost, 'mce-clonedresizable'); + selectedElmGhost.contentEditable = false; // Hides IE move layer cursor + selectedElmGhost.unSelectabe = true; + dom.setStyles(selectedElmGhost, { + left: selectedElmX, + top: selectedElmY, + margin: 0 + }); + + selectedElmGhost.removeAttribute('data-mce-selected'); + editor.getBody().appendChild(selectedElmGhost); + + dom.bind(editableDoc, 'mousemove', resizeGhostElement); + dom.bind(editableDoc, 'mouseup', endGhostResize); + + if (rootDocument != editableDoc) { + dom.bind(rootDocument, 'mousemove', resizeGhostElement); + dom.bind(rootDocument, 'mouseup', endGhostResize); + } + } + + if (mouseDownHandleName) { + // Drag started by IE native resizestart + if (name == mouseDownHandleName) { + startDrag(mouseDownEvent); + } + + return; + } + + // Get existing or render resize handle + handleElm = dom.get('mceResizeHandle' + name); + if (!handleElm) { + handlerContainerElm = editor.getBody(); + + handleElm = dom.add(handlerContainerElm, 'div', { + id: 'mceResizeHandle' + name, + 'data-mce-bogus': true, + 'class': 'mce-resizehandle', + unselectable: true, + style: 'cursor:' + name + '-resize; margin:0; padding:0' + }); + + // Hides IE move layer cursor + // If we set it on Chrome we get this wounderful bug: #6725 + if (Env.ie) { + handleElm.contentEditable = false; + } + } else { + dom.show(handleElm); + } + + if (!handle.elm) { + dom.bind(handleElm, 'mousedown', function(e) { + e.stopImmediatePropagation(); + e.preventDefault(); + startDrag(e); + }); + + handle.elm = handleElm; + } + + /* + var halfHandleW = handleElm.offsetWidth / 2; + var halfHandleH = handleElm.offsetHeight / 2; + + // Position element + dom.setStyles(handleElm, { + left: Math.floor((targetWidth * handle[0] + selectedElmX) - halfHandleW + (handle[2] * halfHandleW)), + top: Math.floor((targetHeight * handle[1] + selectedElmY) - halfHandleH + (handle[3] * halfHandleH)) + }); + */ + + // Position element + dom.setStyles(handleElm, { + left: (targetWidth * handle[0] + selectedElmX) - (handleElm.offsetWidth / 2), + top: (targetHeight * handle[1] + selectedElmY) - (handleElm.offsetHeight / 2) + }); + }); + } else { + hideResizeRect(); + } + + selectedElm.setAttribute('data-mce-selected', '1'); + } + + function hideResizeRect() { + var name, handleElm; + + unbindResizeHandleEvents(); + + if (selectedElm) { + selectedElm.removeAttribute('data-mce-selected'); + } + + for (name in resizeHandles) { + handleElm = dom.get('mceResizeHandle' + name); + if (handleElm) { + dom.unbind(handleElm); + dom.remove(handleElm); + } + } + } + + function updateResizeRect(e) { + var controlElm; + + function isChildOrEqual(node, parent) { + if (node) { + do { + if (node === parent) { + return true; + } + } while ((node = node.parentNode)); + } + } + + // Remove data-mce-selected from all elements since they might have been copied using Ctrl+c/v + each(dom.select('img[data-mce-selected],hr[data-mce-selected]'), function(img) { + img.removeAttribute('data-mce-selected'); + }); + + controlElm = e.type == 'mousedown' ? e.target : selection.getNode(); + controlElm = dom.getParent(controlElm, isIE ? 'table' : 'table,img,hr'); + + if (isChildOrEqual(controlElm, editor.getBody())) { + disableGeckoResize(); + + if (isChildOrEqual(selection.getStart(), controlElm) && isChildOrEqual(selection.getEnd(), controlElm)) { + if (!isIE || (controlElm != selection.getStart() && selection.getStart().nodeName !== 'IMG')) { + showResizeRect(controlElm); + return; + } + } + } + + hideResizeRect(); + } + + function attachEvent(elm, name, func) { + if (elm && elm.attachEvent) { + elm.attachEvent('on' + name, func); + } + } + + function detachEvent(elm, name, func) { + if (elm && elm.detachEvent) { + elm.detachEvent('on' + name, func); + } + } + + function resizeNativeStart(e) { + var target = e.srcElement, pos, name, corner, cornerX, cornerY, relativeX, relativeY; + + pos = target.getBoundingClientRect(); + relativeX = lastMouseDownEvent.clientX - pos.left; + relativeY = lastMouseDownEvent.clientY - pos.top; + + // Figure out what corner we are draging on + for (name in resizeHandles) { + corner = resizeHandles[name]; + + cornerX = target.offsetWidth * corner[0]; + cornerY = target.offsetHeight * corner[1]; + + if (Math.abs(cornerX - relativeX) < 8 && Math.abs(cornerY - relativeY) < 8) { + selectedHandle = corner; + break; + } + } + + // Remove native selection and let the magic begin + resizeStarted = true; + editor.getDoc().selection.empty(); + showResizeRect(target, name, lastMouseDownEvent); + } + + function nativeControlSelect(e) { + var target = e.srcElement; + + if (target != selectedElm) { + detachResizeStartListener(); + + if (target.id.indexOf('mceResizeHandle') === 0) { + e.returnValue = false; + return; + } + + if (target.nodeName == 'IMG' || target.nodeName == 'TABLE') { + hideResizeRect(); + selectedElm = target; + attachEvent(target, 'resizestart', resizeNativeStart); + } + } + } + + function detachResizeStartListener() { + detachEvent(selectedElm, 'resizestart', resizeNativeStart); + } + + function unbindResizeHandleEvents() { + for (var name in resizeHandles) { + var handle = resizeHandles[name]; + + if (handle.elm) { + dom.unbind(handle.elm); + delete handle.elm; + } + } + } + + function disableGeckoResize() { + try { + // Disable object resizing on Gecko + editor.getDoc().execCommand('enableObjectResizing', false, false); + } catch (ex) { + // Ignore + } + } + + function controlSelect(elm) { + var ctrlRng; + + if (!isIE) { + return; + } + + ctrlRng = editableDoc.body.createControlRange(); + + try { + ctrlRng.addElement(elm); + ctrlRng.select(); + return true; + } catch (ex) { + // Ignore since the element can't be control selected for example a P tag + } + } + + editor.on('init', function() { + if (isIE) { + // Hide the resize rect on resize and reselect the image + editor.on('ObjectResized', function(e) { + if (e.target.nodeName != 'TABLE') { + hideResizeRect(); + controlSelect(e.target); + } + }); + + attachEvent(editor.getBody(), 'controlselect', nativeControlSelect); + + editor.on('mousedown', function(e) { + lastMouseDownEvent = e; + }); + } else { + disableGeckoResize(); + + if (Env.ie >= 11) { + // TODO: Drag/drop doesn't work + editor.on('mouseup', function(e) { + var nodeName = e.target.nodeName; + + if (/^(TABLE|IMG|HR)$/.test(nodeName)) { + editor.selection.select(e.target, nodeName == 'TABLE'); + editor.nodeChanged(); + } + }); + + editor.dom.bind(editor.getBody(), 'mscontrolselect', function(e) { + if (/^(TABLE|IMG|HR)$/.test(e.target.nodeName)) { + e.preventDefault(); + + // This moves the selection from being a control selection to a text like selection like in WebKit #6753 + // TODO: Fix this the day IE works like other browsers without this nasty native ugly control selections. + if (e.target.tagName == 'IMG') { + window.setTimeout(function() { + editor.selection.select(e.target); + }, 0); + } + } + }); + } + } + + editor.on('nodechange mousedown mouseup ResizeEditor', updateResizeRect); + + // Update resize rect while typing in a table + editor.on('keydown keyup', function(e) { + if (selectedElm && selectedElm.nodeName == "TABLE") { + updateResizeRect(e); + } + }); + + // Hide rect on focusout since it would float on top of windows otherwise + //editor.on('focusout', hideResizeRect); + }); + + editor.on('remove', unbindResizeHandleEvents); + + function destroy() { + selectedElm = selectedElmGhost = null; + + if (isIE) { + detachResizeStartListener(); + detachEvent(editor.getBody(), 'controlselect', nativeControlSelect); + } + } + + return { + isResizable: isResizable, + showResizeRect: showResizeRect, + hideResizeRect: hideResizeRect, + updateResizeRect: updateResizeRect, + controlSelect: controlSelect, + destroy: destroy + }; + }; +}); diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/dom/DOMUtils.js b/common/static/js/vendor/tinymce/js/tinymce/classes/dom/DOMUtils.js new file mode 100755 index 0000000000..904d3720fe --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/dom/DOMUtils.js @@ -0,0 +1,2078 @@ +/** + * DOMUtils.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Utility class for various DOM manipulation and retrieval functions. + * + * @class tinymce.dom.DOMUtils + * @example + * // Add a class to an element by id in the page + * tinymce.DOM.addClass('someid', 'someclass'); + * + * // Add a class to an element by id inside the editor + * tinymce.activeEditor.dom.addClass('someid', 'someclass'); + */ +define("tinymce/dom/DOMUtils", [ + "tinymce/dom/Sizzle", + "tinymce/html/Styles", + "tinymce/dom/EventUtils", + "tinymce/dom/TreeWalker", + "tinymce/dom/Range", + "tinymce/html/Entities", + "tinymce/Env", + "tinymce/util/Tools", + "tinymce/dom/StyleSheetLoader" +], function(Sizzle, Styles, EventUtils, TreeWalker, Range, Entities, Env, Tools, StyleSheetLoader) { + // Shorten names + var each = Tools.each, is = Tools.is, grep = Tools.grep, trim = Tools.trim, extend = Tools.extend; + var isWebKit = Env.webkit, isIE = Env.ie; + var simpleSelectorRe = /^([a-z0-9],?)+$/i; + var whiteSpaceRegExp = /^[ \t\r\n]*$/; + var numericCssMap = Tools.makeMap('fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom', ' '); + + /** + * Constructs a new DOMUtils instance. Consult the Wiki for more details on settings etc for this class. + * + * @constructor + * @method DOMUtils + * @param {Document} d Document reference to bind the utility class to. + * @param {settings} s Optional settings collection. + */ + function DOMUtils(doc, settings) { + var self = this, blockElementsMap; + + self.doc = doc; + self.win = window; + self.files = {}; + self.counter = 0; + self.stdMode = !isIE || doc.documentMode >= 8; + self.boxModel = !isIE || doc.compatMode == "CSS1Compat" || self.stdMode; + self.hasOuterHTML = "outerHTML" in doc.createElement("a"); + self.styleSheetLoader = new StyleSheetLoader(doc); + this.boundEvents = []; + + self.settings = settings = extend({ + keep_values: false, + hex_colors: 1 + }, settings); + + self.schema = settings.schema; + self.styles = new Styles({ + url_converter: settings.url_converter, + url_converter_scope: settings.url_converter_scope + }, settings.schema); + + self.fixDoc(doc); + self.events = settings.ownEvents ? new EventUtils(settings.proxy) : EventUtils.Event; + blockElementsMap = settings.schema ? settings.schema.getBlockElements() : {}; + + /** + * Returns true/false if the specified element is a block element or not. + * + * @method isBlock + * @param {Node/String} node Element/Node to check. + * @return {Boolean} True/False state if the node is a block element or not. + */ + self.isBlock = function(node) { + // Fix for #5446 + if (!node) { + return false; + } + + // This function is called in module pattern style since it might be executed with the wrong this scope + var type = node.nodeType; + + // If it's a node then check the type and use the nodeName + if (type) { + return !!(type === 1 && blockElementsMap[node.nodeName]); + } + + return !!blockElementsMap[node]; + }; + } + + DOMUtils.prototype = { + root: null, + props: { + "for": "htmlFor", + "class": "className", + className: "className", + checked: "checked", + disabled: "disabled", + maxlength: "maxLength", + readonly: "readOnly", + selected: "selected", + value: "value", + id: "id", + name: "name", + type: "type" + }, + + fixDoc: function(doc) { + var settings = this.settings, name; + + if (isIE && settings.schema) { + // Add missing HTML 4/5 elements to IE + ('abbr article aside audio canvas ' + + 'details figcaption figure footer ' + + 'header hgroup mark menu meter nav ' + + 'output progress section summary ' + + 'time video').replace(/\w+/g, function(name) { + doc.createElement(name); + }); + + // Create all custom elements + for (name in settings.schema.getCustomElements()) { + doc.createElement(name); + } + } + }, + + clone: function(node, deep) { + var self = this, clone, doc; + + // TODO: Add feature detection here in the future + if (!isIE || node.nodeType !== 1 || deep) { + return node.cloneNode(deep); + } + + doc = self.doc; + + // Make a HTML5 safe shallow copy + if (!deep) { + clone = doc.createElement(node.nodeName); + + // Copy attribs + each(self.getAttribs(node), function(attr) { + self.setAttrib(clone, attr.nodeName, self.getAttrib(node, attr.nodeName)); + }); + + return clone; + } +/* + // Setup HTML5 patched document fragment + if (!self.frag) { + self.frag = doc.createDocumentFragment(); + self.fixDoc(self.frag); + } + + // Make a deep copy by adding it to the document fragment then removing it this removed the :section + clone = doc.createElement('div'); + self.frag.appendChild(clone); + clone.innerHTML = node.outerHTML; + self.frag.removeChild(clone); +*/ + return clone.firstChild; + }, + + /** + * Returns the root node of the document. This is normally the body but might be a DIV. Parents like getParent will not + * go above the point of this root node. + * + * @method getRoot + * @return {Element} Root element for the utility class. + */ + getRoot: function() { + var self = this; + + return self.get(self.settings.root_element) || self.doc.body; + }, + + /** + * Returns the viewport of the window. + * + * @method getViewPort + * @param {Window} win Optional window to get viewport of. + * @return {Object} Viewport object with fields x, y, w and h. + */ + getViewPort: function(win) { + var doc, rootElm; + + win = !win ? this.win : win; + doc = win.document; + rootElm = this.boxModel ? doc.documentElement : doc.body; + + // Returns viewport size excluding scrollbars + return { + x: win.pageXOffset || rootElm.scrollLeft, + y: win.pageYOffset || rootElm.scrollTop, + w: win.innerWidth || rootElm.clientWidth, + h: win.innerHeight || rootElm.clientHeight + }; + }, + + /** + * Returns the rectangle for a specific element. + * + * @method getRect + * @param {Element/String} elm Element object or element ID to get rectangle from. + * @return {object} Rectangle for specified element object with x, y, w, h fields. + */ + getRect: function(elm) { + var self = this, pos, size; + + elm = self.get(elm); + pos = self.getPos(elm); + size = self.getSize(elm); + + return { + x: pos.x, y: pos.y, + w: size.w, h: size.h + }; + }, + + /** + * Returns the size dimensions of the specified element. + * + * @method getSize + * @param {Element/String} elm Element object or element ID to get rectangle from. + * @return {object} Rectangle for specified element object with w, h fields. + */ + getSize: function(elm) { + var self = this, w, h; + + elm = self.get(elm); + w = self.getStyle(elm, 'width'); + h = self.getStyle(elm, 'height'); + + // Non pixel value, then force offset/clientWidth + if (w.indexOf('px') === -1) { + w = 0; + } + + // Non pixel value, then force offset/clientWidth + if (h.indexOf('px') === -1) { + h = 0; + } + + return { + w: parseInt(w, 10) || elm.offsetWidth || elm.clientWidth, + h: parseInt(h, 10) || elm.offsetHeight || elm.clientHeight + }; + }, + + /** + * Returns a node by the specified selector function. This function will + * loop through all parent nodes and call the specified function for each node. + * If the function then returns true indicating that it has found what it was looking for, the loop execution will then end + * and the node it found will be returned. + * + * @method getParent + * @param {Node/String} node DOM node to search parents on or ID string. + * @param {function} selector Selection function or CSS selector to execute on each node. + * @param {Node} root Optional root element, never go below this point. + * @return {Node} DOM Node or null if it wasn't found. + */ + getParent: function(node, selector, root) { + return this.getParents(node, selector, root, false); + }, + + /** + * Returns a node list of all parents matching the specified selector function or pattern. + * If the function then returns true indicating that it has found what it was looking for and that node will be collected. + * + * @method getParents + * @param {Node/String} node DOM node to search parents on or ID string. + * @param {function} selector Selection function to execute on each node or CSS pattern. + * @param {Node} root Optional root element, never go below this point. + * @return {Array} Array of nodes or null if it wasn't found. + */ + getParents: function(node, selector, root, collect) { + var self = this, selectorVal, result = []; + + node = self.get(node); + collect = collect === undefined; + + // Default root on inline mode + root = root || (self.getRoot().nodeName != 'BODY' ? self.getRoot().parentNode : null); + + // Wrap node name as func + if (is(selector, 'string')) { + selectorVal = selector; + + if (selector === '*') { + selector = function(node) {return node.nodeType == 1;}; + } else { + selector = function(node) { + return self.is(node, selectorVal); + }; + } + } + + while (node) { + if (node == root || !node.nodeType || node.nodeType === 9) { + break; + } + + if (!selector || selector(node)) { + if (collect) { + result.push(node); + } else { + return node; + } + } + + node = node.parentNode; + } + + return collect ? result : null; + }, + + /** + * Returns the specified element by ID or the input element if it isn't a string. + * + * @method get + * @param {String/Element} n Element id to look for or element to just pass though. + * @return {Element} Element matching the specified id or null if it wasn't found. + */ + get: function(elm) { + var name; + + if (elm && this.doc && typeof(elm) == 'string') { + name = elm; + elm = this.doc.getElementById(elm); + + // IE and Opera returns meta elements when they match the specified input ID, but getElementsByName seems to do the trick + if (elm && elm.id !== name) { + return this.doc.getElementsByName(name)[1]; + } + } + + return elm; + }, + + /** + * Returns the next node that matches selector or function + * + * @method getNext + * @param {Node} node Node to find siblings from. + * @param {String/function} selector Selector CSS expression or function. + * @return {Node} Next node item matching the selector or null if it wasn't found. + */ + getNext: function(node, selector) { + return this._findSib(node, selector, 'nextSibling'); + }, + + /** + * Returns the previous node that matches selector or function + * + * @method getPrev + * @param {Node} node Node to find siblings from. + * @param {String/function} selector Selector CSS expression or function. + * @return {Node} Previous node item matching the selector or null if it wasn't found. + */ + getPrev: function(node, selector) { + return this._findSib(node, selector, 'previousSibling'); + }, + + // #ifndef jquery + + /** + * Selects specific elements by a CSS level 3 pattern. For example "div#a1 p.test". + * This function is optimized for the most common patterns needed in TinyMCE but it also performs well enough + * on more complex patterns. + * + * @method select + * @param {String} selector CSS level 3 pattern to select/find elements by. + * @param {Object} scope Optional root element/scope element to search in. + * @return {Array} Array with all matched elements. + * @example + * // Adds a class to all paragraphs in the currently active editor + * tinymce.activeEditor.dom.addClass(tinymce.activeEditor.dom.select('p'), 'someclass'); + * + * // Adds a class to all spans that have the test class in the currently active editor + * tinymce.activeEditor.dom.addClass(tinymce.activeEditor.dom.select('span.test'), 'someclass') + */ + select: function(selector, scope) { + var self = this; + + //Sizzle.selectors.cacheLength = 0; + return Sizzle(selector, self.get(scope) || self.get(self.settings.root_element) || self.doc, []); + }, + + /** + * Returns true/false if the specified element matches the specified css pattern. + * + * @method is + * @param {Node/NodeList} elm DOM node to match or an array of nodes to match. + * @param {String} selector CSS pattern to match the element against. + */ + is: function(elm, selector) { + var i; + + // If it isn't an array then try to do some simple selectors instead of Sizzle for to boost performance + if (elm.length === undefined) { + // Simple all selector + if (selector === '*') { + return elm.nodeType == 1; + } + + // Simple selector just elements + if (simpleSelectorRe.test(selector)) { + selector = selector.toLowerCase().split(/,/); + elm = elm.nodeName.toLowerCase(); + + for (i = selector.length - 1; i >= 0; i--) { + if (selector[i] == elm) { + return true; + } + } + + return false; + } + } + + // Is non element + if (elm.nodeType && elm.nodeType != 1) { + return false; + } + + var elms = elm.nodeType ? [elm] : elm; + return Sizzle(selector, elms[0].ownerDocument || elms[0], null, elms).length > 0; + }, + + // #endif + + /** + * Adds the specified element to another element or elements. + * + * @method add + * @param {String/Element/Array} parentElm Element id string, DOM node element or array of ids or elements to add to. + * @param {String/Element} name Name of new element to add or existing element to add. + * @param {Object} attrs Optional object collection with arguments to add to the new element(s). + * @param {String} html Optional inner HTML contents to add for each element. + * @return {Element/Array} Element that got created, or an array of created elements if multiple input elements + * were passed in. + * @example + * // Adds a new paragraph to the end of the active editor + * tinymce.activeEditor.dom.add(tinymce.activeEditor.getBody(), 'p', {title: 'my title'}, 'Some content'); + */ + add: function(parentElm, name, attrs, html, create) { + var self = this; + + return this.run(parentElm, function(parentElm) { + var newElm; + + newElm = is(name, 'string') ? self.doc.createElement(name) : name; + self.setAttribs(newElm, attrs); + + if (html) { + if (html.nodeType) { + newElm.appendChild(html); + } else { + self.setHTML(newElm, html); + } + } + + return !create ? parentElm.appendChild(newElm) : newElm; + }); + }, + + /** + * Creates a new element. + * + * @method create + * @param {String} name Name of new element. + * @param {Object} attrs Optional object name/value collection with element attributes. + * @param {String} html Optional HTML string to set as inner HTML of the element. + * @return {Element} HTML DOM node element that got created. + * @example + * // Adds an element where the caret/selection is in the active editor + * var el = tinymce.activeEditor.dom.create('div', {id: 'test', 'class': 'myclass'}, 'some content'); + * tinymce.activeEditor.selection.setNode(el); + */ + create: function(name, attrs, html) { + return this.add(this.doc.createElement(name), name, attrs, html, 1); + }, + + /** + * Creates HTML string for element. The element will be closed unless an empty inner HTML string is passed in. + * + * @method createHTML + * @param {String} name Name of new element. + * @param {Object} attrs Optional object name/value collection with element attributes. + * @param {String} html Optional HTML string to set as inner HTML of the element. + * @return {String} String with new HTML element, for example: test. + * @example + * // Creates a html chunk and inserts it at the current selection/caret location + * tinymce.activeEditor.selection.setContent(tinymce.activeEditor.dom.createHTML('a', {href: 'test.html'}, 'some line')); + */ + createHTML: function(name, attrs, html) { + var outHtml = '', key; + + outHtml += '<' + name; + + for (key in attrs) { + if (attrs.hasOwnProperty(key) && attrs[key] !== null) { + outHtml += ' ' + key + '="' + this.encode(attrs[key]) + '"'; + } + } + + // A call to tinymce.is doesn't work for some odd reason on IE9 possible bug inside their JS runtime + if (typeof(html) != "undefined") { + return outHtml + '>' + html + ''; + } + + return outHtml + ' />'; + }, + + /** + * Creates a document fragment out of the specified HTML string. + * + * @method createFragment + * @param {String} html Html string to create fragment from. + * @return {DocumentFragment} Document fragment node. + */ + createFragment: function(html) { + var frag, node, doc = this.doc, container; + + container = doc.createElement("div"); + frag = doc.createDocumentFragment(); + + if (html) { + container.innerHTML = html; + } + + while ((node = container.firstChild)) { + frag.appendChild(node); + } + + return frag; + }, + + /** + * Removes/deletes the specified element(s) from the DOM. + * + * @method remove + * @param {String/Element/Array} node ID of element or DOM element object or array containing multiple elements/ids. + * @param {Boolean} keep_children Optional state to keep children or not. If set to true all children will be + * placed at the location of the removed element. + * @return {Element/Array} HTML DOM element that got removed, or an array of removed elements if multiple input elements + * were passed in. + * @example + * // Removes all paragraphs in the active editor + * tinymce.activeEditor.dom.remove(tinymce.activeEditor.dom.select('p')); + * + * // Removes an element by id in the document + * tinymce.DOM.remove('mydiv'); + */ + remove: function(node, keep_children) { + return this.run(node, function(node) { + var child, parent = node.parentNode; + + if (!parent) { + return null; + } + + if (keep_children) { + while ((child = node.firstChild)) { + // IE 8 will crash if you don't remove completely empty text nodes + if (!isIE || child.nodeType !== 3 || child.nodeValue) { + parent.insertBefore(child, node); + } else { + node.removeChild(child); + } + } + } + + return parent.removeChild(node); + }); + }, + + /** + * Sets the CSS style value on a HTML element. The name can be a camelcase string + * or the CSS style name like background-color. + * + * @method setStyle + * @param {String/Element/Array} n HTML element/Element ID or Array of elements/ids to set CSS style value on. + * @param {String} na Name of the style value to set. + * @param {String} v Value to set on the style. + * @example + * // Sets a style value on all paragraphs in the currently active editor + * tinymce.activeEditor.dom.setStyle(tinymce.activeEditor.dom.select('p'), 'background-color', 'red'); + * + * // Sets a style value to an element by id in the current document + * tinymce.DOM.setStyle('mydiv', 'background-color', 'red'); + */ + setStyle: function(elm, name, value) { + return this.run(elm, function(elm) { + var self = this, style, key; + + if (name) { + if (typeof(name) === 'string') { + style = elm.style; + + // Camelcase it, if needed + name = name.replace(/-(\D)/g, function(a, b) { + return b.toUpperCase(); + }); + + // Default px suffix on these + if (typeof(value) === 'number' && !numericCssMap[name]) { + value += 'px'; + } + + // IE specific opacity + if (name === "opacity" && elm.runtimeStyle && typeof(elm.runtimeStyle.opacity) === "undefined") { + style.filter = value === '' ? '' : "alpha(opacity=" + (value * 100) + ")"; + } + + if (name == "float") { + // Old IE vs modern browsers + name = "cssFloat" in elm.style ? "cssFloat" : "styleFloat"; + } + + try { + style[name] = value; + } catch (ex) { + // Ignore IE errors + } + + // Force update of the style data + if (self.settings.update_styles) { + elm.removeAttribute('data-mce-style'); + } + } else { + for (key in name) { + self.setStyle(elm, key, name[key]); + } + } + } + }); + }, + + /** + * Returns the current style or runtime/computed value of an element. + * + * @method getStyle + * @param {String/Element} elm HTML element or element id string to get style from. + * @param {String} name Style name to return. + * @param {Boolean} computed Computed style. + * @return {String} Current style or computed style value of an element. + */ + getStyle: function(elm, name, computed) { + elm = this.get(elm); + + if (!elm) { + return; + } + + // W3C + if (this.doc.defaultView && computed) { + // Remove camelcase + name = name.replace(/[A-Z]/g, function(a){ + return '-' + a; + }); + + try { + return this.doc.defaultView.getComputedStyle(elm, null).getPropertyValue(name); + } catch (ex) { + // Old safari might fail + return null; + } + } + + // Camelcase it, if needed + name = name.replace(/-(\D)/g, function(a, b) { + return b.toUpperCase(); + }); + + if (name == 'float') { + name = isIE ? 'styleFloat' : 'cssFloat'; + } + + // IE & Opera + if (elm.currentStyle && computed) { + return elm.currentStyle[name]; + } + + return elm.style ? elm.style[name] : undefined; + }, + + /** + * Sets multiple styles on the specified element(s). + * + * @method setStyles + * @param {Element/String/Array} e DOM element, element id string or array of elements/ids to set styles on. + * @param {Object} o Name/Value collection of style items to add to the element(s). + * @example + * // Sets styles on all paragraphs in the currently active editor + * tinymce.activeEditor.dom.setStyles(tinymce.activeEditor.dom.select('p'), {'background-color': 'red', 'color': 'green'}); + * + * // Sets styles to an element by id in the current document + * tinymce.DOM.setStyles('mydiv', {'background-color': 'red', 'color': 'green'}); + */ + setStyles: function(elm, styles) { + this.setStyle(elm, styles); + }, + + css: function(elm, name, value) { + this.setStyle(elm, name, value); + }, + + /** + * Removes all attributes from an element or elements. + * + * @method removeAllAttribs + * @param {Element/String/Array} e DOM element, element id string or array of elements/ids to remove attributes from. + */ + removeAllAttribs: function(e) { + return this.run(e, function(e) { + var i, attrs = e.attributes; + for (i = attrs.length - 1; i >= 0; i--) { + e.removeAttributeNode(attrs.item(i)); + } + }); + }, + + /** + * Sets the specified attribute of an element or elements. + * + * @method setAttrib + * @param {Element/String/Array} e DOM element, element id string or array of elements/ids to set attribute on. + * @param {String} n Name of attribute to set. + * @param {String} v Value to set on the attribute - if this value is falsy like null, 0 or '' it will remove the attribute instead. + * @example + * // Sets class attribute on all paragraphs in the active editor + * tinymce.activeEditor.dom.setAttrib(tinymce.activeEditor.dom.select('p'), 'class', 'myclass'); + * + * // Sets class attribute on a specific element in the current page + * tinymce.dom.setAttrib('mydiv', 'class', 'myclass'); + */ + setAttrib: function(e, n, v) { + var self = this; + + // What's the point + if (!e || !n) { + return; + } + + return this.run(e, function(e) { + var s = self.settings; + var originalValue = e.getAttribute(n); + if (v !== null) { + switch (n) { + case "style": + if (!is(v, 'string')) { + each(v, function(v, n) { + self.setStyle(e, n, v); + }); + + return; + } + + // No mce_style for elements with these since they might get resized by the user + if (s.keep_values) { + if (v) { + e.setAttribute('data-mce-style', v, 2); + } else { + e.removeAttribute('data-mce-style', 2); + } + } + + e.style.cssText = v; + break; + + case "class": + e.className = v || ''; // Fix IE null bug + break; + + case "src": + case "href": + if (s.keep_values) { + if (s.url_converter) { + v = s.url_converter.call(s.url_converter_scope || self, v, n, e); + } + + self.setAttrib(e, 'data-mce-' + n, v, 2); + } + + break; + + case "shape": + e.setAttribute('data-mce-style', v); + break; + } + } + if (is(v) && v !== null && v.length !== 0) { + e.setAttribute(n, '' + v, 2); + } else { + e.removeAttribute(n, 2); + } + + // fire onChangeAttrib event for attributes that have changed + if (originalValue != v && s.onSetAttrib) { + s.onSetAttrib({attrElm: e, attrName: n, attrValue: v}); + } + }); + }, + + /** + * Sets two or more specified attributes of an element or elements. + * + * @method setAttribs + * @param {Element/String/Array} elm DOM element, element id string or array of elements/ids to set attributes on. + * @param {Object} attrs Name/Value collection of attribute items to add to the element(s). + * @example + * // Sets class and title attributes on all paragraphs in the active editor + * tinymce.activeEditor.dom.setAttribs(tinymce.activeEditor.dom.select('p'), {'class': 'myclass', title: 'some title'}); + * + * // Sets class and title attributes on a specific element in the current page + * tinymce.DOM.setAttribs('mydiv', {'class': 'myclass', title: 'some title'}); + */ + setAttribs: function(elm, attrs) { + var self = this; + + return this.run(elm, function(elm) { + each(attrs, function(value, name) { + self.setAttrib(elm, name, value); + }); + }); + }, + + /** + * Returns the specified attribute by name. + * + * @method getAttrib + * @param {String/Element} elm Element string id or DOM element to get attribute from. + * @param {String} name Name of attribute to get. + * @param {String} defaultVal Optional default value to return if the attribute didn't exist. + * @return {String} Attribute value string, default value or null if the attribute wasn't found. + */ + getAttrib: function(elm, name, defaultVal) { + var value, self = this, undef; + + elm = self.get(elm); + + if (!elm || elm.nodeType !== 1) { + return defaultVal === undef ? false : defaultVal; + } + + if (!is(defaultVal)) { + defaultVal = ''; + } + + // Try the mce variant for these + if (/^(src|href|style|coords|shape)$/.test(name)) { + value = elm.getAttribute("data-mce-" + name); + + if (value) { + return value; + } + } + + if (isIE && self.props[name]) { + value = elm[self.props[name]]; + value = value && value.nodeValue ? value.nodeValue : value; + } + + if (!value) { + value = elm.getAttribute(name, 2); + } + + // Check boolean attribs + if (/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(name)) { + if (elm[self.props[name]] === true && value === '') { + return name; + } + + return value ? name : ''; + } + + // Inner input elements will override attributes on form elements + if (elm.nodeName === "FORM" && elm.getAttributeNode(name)) { + return elm.getAttributeNode(name).nodeValue; + } + + if (name === 'style') { + value = value || elm.style.cssText; + + if (value) { + value = self.serializeStyle(self.parseStyle(value), elm.nodeName); + + if (self.settings.keep_values) { + elm.setAttribute('data-mce-style', value); + } + } + } + + // Remove Apple and WebKit stuff + if (isWebKit && name === "class" && value) { + value = value.replace(/(apple|webkit)\-[a-z\-]+/gi, ''); + } + + // Handle IE issues + if (isIE) { + switch (name) { + case 'rowspan': + case 'colspan': + // IE returns 1 as default value + if (value === 1) { + value = ''; + } + + break; + + case 'size': + // IE returns +0 as default value for size + if (value === '+0' || value === 20 || value === 0) { + value = ''; + } + + break; + + case 'width': + case 'height': + case 'vspace': + case 'checked': + case 'disabled': + case 'readonly': + if (value === 0) { + value = ''; + } + + break; + + case 'hspace': + // IE returns -1 as default value + if (value === -1) { + value = ''; + } + + break; + + case 'maxlength': + case 'tabindex': + // IE returns default value + if (value === 32768 || value === 2147483647 || value === '32768') { + value = ''; + } + + break; + + case 'multiple': + case 'compact': + case 'noshade': + case 'nowrap': + if (value === 65535) { + return name; + } + + return defaultVal; + + case 'shape': + value = value.toLowerCase(); + break; + + default: + // IE has odd anonymous function for event attributes + if (name.indexOf('on') === 0 && value) { + value = ('' + value).replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/, '$1'); + } + } + } + + return (value !== undef && value !== null && value !== '') ? '' + value : defaultVal; + }, + + /** + * Returns the absolute x, y position of a node. The position will be returned in an object with x, y fields. + * + * @method getPos + * @param {Element/String} elm HTML element or element id to get x, y position from. + * @param {Element} rootElm Optional root element to stop calculations at. + * @return {object} Absolute position of the specified element object with x, y fields. + */ + getPos: function(elm, rootElm) { + var self = this, x = 0, y = 0, offsetParent, doc = self.doc, pos; + + elm = self.get(elm); + rootElm = rootElm || doc.body; + + if (elm) { + // Use getBoundingClientRect if it exists since it's faster than looping offset nodes + if (rootElm === doc.body && elm.getBoundingClientRect) { + pos = elm.getBoundingClientRect(); + rootElm = self.boxModel ? doc.documentElement : doc.body; + + // Add scroll offsets from documentElement or body since IE with the wrong box model will use d.body and so do WebKit + // Also remove the body/documentelement clientTop/clientLeft on IE 6, 7 since they offset the position + x = pos.left + (doc.documentElement.scrollLeft || doc.body.scrollLeft) - rootElm.clientLeft; + y = pos.top + (doc.documentElement.scrollTop || doc.body.scrollTop) - rootElm.clientTop; + + return {x: x, y: y}; + } + + offsetParent = elm; + while (offsetParent && offsetParent != rootElm && offsetParent.nodeType) { + x += offsetParent.offsetLeft || 0; + y += offsetParent.offsetTop || 0; + offsetParent = offsetParent.offsetParent; + } + + offsetParent = elm.parentNode; + while (offsetParent && offsetParent != rootElm && offsetParent.nodeType) { + x -= offsetParent.scrollLeft || 0; + y -= offsetParent.scrollTop || 0; + offsetParent = offsetParent.parentNode; + } + } + + return {x: x, y: y}; + }, + + /** + * Parses the specified style value into an object collection. This parser will also + * merge and remove any redundant items that browsers might have added. It will also convert non-hex + * colors to hex values. Urls inside the styles will also be converted to absolute/relative based on settings. + * + * @method parseStyle + * @param {String} cssText Style value to parse, for example: border:1px solid red;. + * @return {Object} Object representation of that style, for example: {border: '1px solid red'} + */ + parseStyle: function(cssText) { + return this.styles.parse(cssText); + }, + + /** + * Serializes the specified style object into a string. + * + * @method serializeStyle + * @param {Object} styles Object to serialize as string, for example: {border: '1px solid red'} + * @param {String} name Optional element name. + * @return {String} String representation of the style object, for example: border: 1px solid red. + */ + serializeStyle: function(styles, name) { + return this.styles.serialize(styles, name); + }, + + /** + * Adds a style element at the top of the document with the specified cssText content. + * + * @method addStyle + * @param {String} cssText CSS Text style to add to top of head of document. + */ + addStyle: function(cssText) { + var self = this, doc = self.doc, head, styleElm; + + // Prevent inline from loading the same styles twice + if (self !== DOMUtils.DOM && doc === document) { + var addedStyles = DOMUtils.DOM.addedStyles; + + addedStyles = addedStyles || []; + if (addedStyles[cssText]) { + return; + } + + addedStyles[cssText] = true; + DOMUtils.DOM.addedStyles = addedStyles; + } + + // Create style element if needed + styleElm = doc.getElementById('mceDefaultStyles'); + if (!styleElm) { + styleElm = doc.createElement('style'); + styleElm.id = 'mceDefaultStyles'; + styleElm.type = 'text/css'; + + head = doc.getElementsByTagName('head')[0]; + if (head.firstChild) { + head.insertBefore(styleElm, head.firstChild); + } else { + head.appendChild(styleElm); + } + } + + // Append style data to old or new style element + if (styleElm.styleSheet) { + styleElm.styleSheet.cssText += cssText; + } else { + styleElm.appendChild(doc.createTextNode(cssText)); + } + }, + + /** + * Imports/loads the specified CSS file into the document bound to the class. + * + * @method loadCSS + * @param {String} u URL to CSS file to load. + * @example + * // Loads a CSS file dynamically into the current document + * tinymce.DOM.loadCSS('somepath/some.css'); + * + * // Loads a CSS file into the currently active editor instance + * tinymce.activeEditor.dom.loadCSS('somepath/some.css'); + * + * // Loads a CSS file into an editor instance by id + * tinymce.get('someid').dom.loadCSS('somepath/some.css'); + * + * // Loads multiple CSS files into the current document + * tinymce.DOM.loadCSS('somepath/some.css,somepath/someother.css'); + */ + loadCSS: function(url) { + var self = this, doc = self.doc, head; + + // Prevent inline from loading the same CSS file twice + if (self !== DOMUtils.DOM && doc === document) { + DOMUtils.DOM.loadCSS(url); + return; + } + + if (!url) { + url = ''; + } + + head = doc.getElementsByTagName('head')[0]; + + each(url.split(','), function(url) { + var link; + + if (self.files[url]) { + return; + } + + self.files[url] = true; + link = self.create('link', {rel: 'stylesheet', href: url}); + + // IE 8 has a bug where dynamically loading stylesheets would produce a 1 item remaining bug + // This fix seems to resolve that issue by recalcing the document once a stylesheet finishes loading + // It's ugly but it seems to work fine. + if (isIE && doc.documentMode && doc.recalc) { + link.onload = function() { + if (doc.recalc) { + doc.recalc(); + } + + link.onload = null; + }; + } + + head.appendChild(link); + }); + }, + + /** + * Adds a class to the specified element or elements. + * + * @method addClass + * @param {String/Element/Array} elm Element ID string or DOM element or array with elements or IDs. + * @param {String} cls Class name to add to each element. + * @return {String/Array} String with new class value or array with new class values for all elements. + * @example + * // Adds a class to all paragraphs in the active editor + * tinymce.activeEditor.dom.addClass(tinymce.activeEditor.dom.select('p'), 'myclass'); + * + * // Adds a class to a specific element in the current page + * tinymce.DOM.addClass('mydiv', 'myclass'); + */ + addClass: function(elm, cls) { + return this.run(elm, function(elm) { + var clsVal; + + if (!cls) { + return 0; + } + + if (this.hasClass(elm, cls)) { + return elm.className; + } + + clsVal = this.removeClass(elm, cls); + elm.className = clsVal = (clsVal !== '' ? (clsVal + ' ') : '') + cls; + + return clsVal; + }); + }, + + /** + * Removes a class from the specified element or elements. + * + * @method removeClass + * @param {String/Element/Array} elm Element ID string or DOM element or array with elements or IDs. + * @param {String} cls Class name to remove from each element. + * @return {String/Array} String of remaining class name(s), or an array of strings if multiple input elements + * were passed in. + * @example + * // Removes a class from all paragraphs in the active editor + * tinymce.activeEditor.dom.removeClass(tinymce.activeEditor.dom.select('p'), 'myclass'); + * + * // Removes a class from a specific element in the current page + * tinymce.DOM.removeClass('mydiv', 'myclass'); + */ + removeClass: function(elm, cls) { + var self = this, re; + + return self.run(elm, function(elm) { + var val; + + if (self.hasClass(elm, cls)) { + if (!re) { + re = new RegExp("(^|\\s+)" + cls + "(\\s+|$)", "g"); + } + + val = elm.className.replace(re, ' '); + val = trim(val != ' ' ? val : ''); + + elm.className = val; + + // Empty class attr + if (!val) { + elm.removeAttribute('class'); + elm.removeAttribute('className'); + } + + return val; + } + + return elm.className; + }); + }, + + /** + * Returns true if the specified element has the specified class. + * + * @method hasClass + * @param {String/Element} n HTML element or element id string to check CSS class on. + * @param {String} c CSS class to check for. + * @return {Boolean} true/false if the specified element has the specified class. + */ + hasClass: function(elm, cls) { + elm = this.get(elm); + + if (!elm || !cls) { + return false; + } + + return (' ' + elm.className + ' ').indexOf(' ' + cls + ' ') !== -1; + }, + + /** + * Toggles the specified class on/off. + * + * @method toggleClass + * @param {Element} elm Element to toggle class on. + * @param {[type]} cls Class to toggle on/off. + * @param {[type]} state Optional state to set. + */ + toggleClass: function(elm, cls, state) { + state = state === undefined ? !this.hasClass(elm, cls) : state; + + if (this.hasClass(elm, cls) !== state) { + if (state) { + this.addClass(elm, cls); + } else { + this.removeClass(elm, cls); + } + } + }, + + /** + * Shows the specified element(s) by ID by setting the "display" style. + * + * @method show + * @param {String/Element/Array} elm ID of DOM element or DOM element or array with elements or IDs to show. + */ + show: function(elm) { + return this.setStyle(elm, 'display', 'block'); + }, + + /** + * Hides the specified element(s) by ID by setting the "display" style. + * + * @method hide + * @param {String/Element/Array} e ID of DOM element or DOM element or array with elements or IDs to hide. + * @example + * // Hides an element by id in the document + * tinymce.DOM.hide('myid'); + */ + hide: function(elm) { + return this.setStyle(elm, 'display', 'none'); + }, + + /** + * Returns true/false if the element is hidden or not by checking the "display" style. + * + * @method isHidden + * @param {String/Element} e Id or element to check display state on. + * @return {Boolean} true/false if the element is hidden or not. + */ + isHidden: function(elm) { + elm = this.get(elm); + + return !elm || elm.style.display == 'none' || this.getStyle(elm, 'display') == 'none'; + }, + + /** + * Returns a unique id. This can be useful when generating elements on the fly. + * This method will not check if the element already exists. + * + * @method uniqueId + * @param {String} prefix Optional prefix to add in front of all ids - defaults to "mce_". + * @return {String} Unique id. + */ + uniqueId: function(prefix) { + return (!prefix ? 'mce_' : prefix) + (this.counter++); + }, + + /** + * Sets the specified HTML content inside the element or elements. The HTML will first be processed. This means + * URLs will get converted, hex color values fixed etc. Check processHTML for details. + * + * @method setHTML + * @param {Element/String/Array} e DOM element, element id string or array of elements/ids to set HTML inside of. + * @param {String} h HTML content to set as inner HTML of the element. + * @example + * // Sets the inner HTML of all paragraphs in the active editor + * tinymce.activeEditor.dom.setHTML(tinymce.activeEditor.dom.select('p'), 'some inner html'); + * + * // Sets the inner HTML of an element by id in the document + * tinymce.DOM.setHTML('mydiv', 'some inner html'); + */ + setHTML: function(element, html) { + var self = this; + + return self.run(element, function(element) { + if (isIE) { + // Remove all child nodes, IE keeps empty text nodes in DOM + while (element.firstChild) { + element.removeChild(element.firstChild); + } + + try { + // IE will remove comments from the beginning + // unless you padd the contents with something + element.innerHTML = '
    ' + html; + element.removeChild(element.firstChild); + } catch (ex) { + // IE sometimes produces an unknown runtime error on innerHTML if it's a block element + // within a block element for example a div inside a p + // This seems to fix this problem + + // Create new div with HTML contents and a BR in front to keep comments + var newElement = self.create('div'); + newElement.innerHTML = '
    ' + html; + + // Add all children from div to target + each(grep(newElement.childNodes), function(node, i) { + // Skip br element + if (i && element.canHaveHTML) { + element.appendChild(node); + } + }); + } + } else { + element.innerHTML = html; + } + + return html; + }); + }, + + /** + * Returns the outer HTML of an element. + * + * @method getOuterHTML + * @param {String/Element} elm Element ID or element object to get outer HTML from. + * @return {String} Outer HTML string. + * @example + * tinymce.DOM.getOuterHTML(editorElement); + * tinymce.activeEditor.getOuterHTML(tinymce.activeEditor.getBody()); + */ + getOuterHTML: function(elm) { + var doc, self = this; + + elm = self.get(elm); + + if (!elm) { + return null; + } + + if (elm.nodeType === 1 && self.hasOuterHTML) { + return elm.outerHTML; + } + + doc = (elm.ownerDocument || self.doc).createElement("body"); + doc.appendChild(elm.cloneNode(true)); + + return doc.innerHTML; + }, + + /** + * Sets the specified outer HTML on an element or elements. + * + * @method setOuterHTML + * @param {Element/String/Array} elm DOM element, element id string or array of elements/ids to set outer HTML on. + * @param {Object} html HTML code to set as outer value for the element. + * @param {Document} doc Optional document scope to use in this process - defaults to the document of the DOM class. + * @example + * // Sets the outer HTML of all paragraphs in the active editor + * tinymce.activeEditor.dom.setOuterHTML(tinymce.activeEditor.dom.select('p'), '
    some html
    '); + * + * // Sets the outer HTML of an element by id in the document + * tinymce.DOM.setOuterHTML('mydiv', '
    some html
    '); + */ + setOuterHTML: function(elm, html, doc) { + var self = this; + + return self.run(elm, function(elm) { + function set() { + var node, tempElm; + + tempElm = doc.createElement("body"); + tempElm.innerHTML = html; + + node = tempElm.lastChild; + while (node) { + self.insertAfter(node.cloneNode(true), elm); + node = node.previousSibling; + } + + self.remove(elm); + } + + // Only set HTML on elements + if (elm.nodeType == 1) { + doc = doc || elm.ownerDocument || self.doc; + + if (isIE) { + try { + // Try outerHTML for IE it sometimes produces an unknown runtime error + if (elm.nodeType == 1 && self.hasOuterHTML) { + elm.outerHTML = html; + } else { + set(); + } + } catch (ex) { + // Fix for unknown runtime error + set(); + } + } else { + set(); + } + } + }); + }, + + /** + * Entity decodes a string. This method decodes any HTML entities, such as å. + * + * @method decode + * @param {String} s String to decode entities on. + * @return {String} Entity decoded string. + */ + decode: Entities.decode, + + /** + * Entity encodes a string. This method encodes the most common entities, such as <>"&. + * + * @method encode + * @param {String} text String to encode with entities. + * @return {String} Entity encoded string. + */ + encode: Entities.encodeAllRaw, + + /** + * Inserts an element after the reference element. + * + * @method insertAfter + * @param {Element} node Element to insert after the reference. + * @param {Element/String/Array} reference_node Reference element, element id or array of elements to insert after. + * @return {Element/Array} Element that got added or an array with elements. + */ + insertAfter: function(node, reference_node) { + reference_node = this.get(reference_node); + + return this.run(node, function(node) { + var parent, nextSibling; + + parent = reference_node.parentNode; + nextSibling = reference_node.nextSibling; + + if (nextSibling) { + parent.insertBefore(node, nextSibling); + } else { + parent.appendChild(node); + } + + return node; + }); + }, + + /** + * Replaces the specified element or elements with the new element specified. The new element will + * be cloned if multiple input elements are passed in. + * + * @method replace + * @param {Element} newElm New element to replace old ones with. + * @param {Element/String/Array} oldELm Element DOM node, element id or array of elements or ids to replace. + * @param {Boolean} k Optional keep children state, if set to true child nodes from the old object will be added to new ones. + */ + replace: function(newElm, oldElm, keepChildren) { + var self = this; + + return self.run(oldElm, function(oldElm) { + if (is(oldElm, 'array')) { + newElm = newElm.cloneNode(true); + } + + if (keepChildren) { + each(grep(oldElm.childNodes), function(node) { + newElm.appendChild(node); + }); + } + + return oldElm.parentNode.replaceChild(newElm, oldElm); + }); + }, + + /** + * Renames the specified element and keeps its attributes and children. + * + * @method rename + * @param {Element} elm Element to rename. + * @param {String} name Name of the new element. + * @return {Element} New element or the old element if it needed renaming. + */ + rename: function(elm, name) { + var self = this, newElm; + + if (elm.nodeName != name.toUpperCase()) { + // Rename block element + newElm = self.create(name); + + // Copy attribs to new block + each(self.getAttribs(elm), function(attr_node) { + self.setAttrib(newElm, attr_node.nodeName, self.getAttrib(elm, attr_node.nodeName)); + }); + + // Replace block + self.replace(newElm, elm, 1); + } + + return newElm || elm; + }, + + /** + * Find the common ancestor of two elements. This is a shorter method than using the DOM Range logic. + * + * @method findCommonAncestor + * @param {Element} a Element to find common ancestor of. + * @param {Element} b Element to find common ancestor of. + * @return {Element} Common ancestor element of the two input elements. + */ + findCommonAncestor: function(a, b) { + var ps = a, pe; + + while (ps) { + pe = b; + + while (pe && ps != pe) { + pe = pe.parentNode; + } + + if (ps == pe) { + break; + } + + ps = ps.parentNode; + } + + if (!ps && a.ownerDocument) { + return a.ownerDocument.documentElement; + } + + return ps; + }, + + /** + * Parses the specified RGB color value and returns a hex version of that color. + * + * @method toHex + * @param {String} rgbVal RGB string value like rgb(1,2,3) + * @return {String} Hex version of that RGB value like #FF00FF. + */ + toHex: function(rgbVal) { + return this.styles.toHex(Tools.trim(rgbVal)); + }, + + /** + * Executes the specified function on the element by id or dom element node or array of elements/id. + * + * @method run + * @param {String/Element/Array} Element ID or DOM element object or array with ids or elements. + * @param {function} f Function to execute for each item. + * @param {Object} s Optional scope to execute the function in. + * @return {Object/Array} Single object, or an array of objects if multiple input elements were passed in. + */ + run: function(elm, func, scope) { + var self = this, result; + + if (typeof(elm) === 'string') { + elm = self.get(elm); + } + + if (!elm) { + return false; + } + + scope = scope || this; + if (!elm.nodeType && (elm.length || elm.length === 0)) { + result = []; + + each(elm, function(elm, i) { + if (elm) { + if (typeof(elm) == 'string') { + elm = self.get(elm); + } + + result.push(func.call(scope, elm, i)); + } + }); + + return result; + } + + return func.call(scope, elm); + }, + + /** + * Returns a NodeList with attributes for the element. + * + * @method getAttribs + * @param {HTMLElement/string} elm Element node or string id to get attributes from. + * @return {NodeList} NodeList with attributes. + */ + getAttribs: function(elm) { + var attrs; + + elm = this.get(elm); + + if (!elm) { + return []; + } + + if (isIE) { + attrs = []; + + // Object will throw exception in IE + if (elm.nodeName == 'OBJECT') { + return elm.attributes; + } + + // IE doesn't keep the selected attribute if you clone option elements + if (elm.nodeName === 'OPTION' && this.getAttrib(elm, 'selected')) { + attrs.push({specified: 1, nodeName: 'selected'}); + } + + // It's crazy that this is faster in IE but it's because it returns all attributes all the time + var attrRegExp = /<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi; + elm.cloneNode(false).outerHTML.replace(attrRegExp, '').replace(/[\w:\-]+/gi, function(a) { + attrs.push({specified: 1, nodeName: a}); + }); + + return attrs; + } + + return elm.attributes; + }, + + /** + * Returns true/false if the specified node is to be considered empty or not. + * + * @example + * tinymce.DOM.isEmpty(node, {img: true}); + * @method isEmpty + * @param {Object} elements Optional name/value object with elements that are automatically treated as non-empty elements. + * @return {Boolean} true/false if the node is empty or not. + */ + isEmpty: function(node, elements) { + var self = this, i, attributes, type, walker, name, brCount = 0; + + node = node.firstChild; + if (node) { + walker = new TreeWalker(node, node.parentNode); + elements = elements || self.schema ? self.schema.getNonEmptyElements() : null; + + do { + type = node.nodeType; + + if (type === 1) { + // Ignore bogus elements + if (node.getAttribute('data-mce-bogus')) { + continue; + } + + // Keep empty elements like + name = node.nodeName.toLowerCase(); + if (elements && elements[name]) { + // Ignore single BR elements in blocks like


    or


    + if (name === 'br') { + brCount++; + continue; + } + + return false; + } + + // Keep elements with data-bookmark attributes or name attribute like + attributes = self.getAttribs(node); + i = node.attributes.length; + while (i--) { + name = node.attributes[i].nodeName; + if (name === "name" || name === 'data-mce-bookmark') { + return false; + } + } + } + + // Keep comment nodes + if (type == 8) { + return false; + } + + // Keep non whitespace text nodes + if ((type === 3 && !whiteSpaceRegExp.test(node.nodeValue))) { + return false; + } + } while ((node = walker.next())); + } + + return brCount <= 1; + }, + + /** + * Creates a new DOM Range object. This will use the native DOM Range API if it's + * available. If it's not, it will fall back to the custom TinyMCE implementation. + * + * @method createRng + * @return {DOMRange} DOM Range object. + * @example + * var rng = tinymce.DOM.createRng(); + * alert(rng.startContainer + "," + rng.startOffset); + */ + createRng: function() { + var doc = this.doc; + + return doc.createRange ? doc.createRange() : new Range(this); + }, + + /** + * Returns the index of the specified node within its parent. + * + * @method nodeIndex + * @param {Node} node Node to look for. + * @param {boolean} normalized Optional true/false state if the index is what it would be after a normalization. + * @return {Number} Index of the specified node. + */ + nodeIndex: function(node, normalized) { + var idx = 0, lastNodeType, nodeType; + + if (node) { + for (lastNodeType = node.nodeType, node = node.previousSibling; node; node = node.previousSibling) { + nodeType = node.nodeType; + + // Normalize text nodes + if (normalized && nodeType == 3) { + if (nodeType == lastNodeType || !node.nodeValue.length) { + continue; + } + } + idx++; + lastNodeType = nodeType; + } + } + + return idx; + }, + + /** + * Splits an element into two new elements and places the specified split + * element or elements between the new ones. For example splitting the paragraph at the bold element in + * this example

    abcabc123

    would produce

    abc

    abc

    123

    . + * + * @method split + * @param {Element} parentElm Parent element to split. + * @param {Element} splitElm Element to split at. + * @param {Element} replacementElm Optional replacement element to replace the split element with. + * @return {Element} Returns the split element or the replacement element if that is specified. + */ + split: function(parentElm, splitElm, replacementElm) { + var self = this, r = self.createRng(), bef, aft, pa; + + // W3C valid browsers tend to leave empty nodes to the left/right side of the contents - this makes sense + // but we don't want that in our code since it serves no purpose for the end user + // For example splitting this html at the bold element: + //

    text 1CHOPtext 2

    + // would produce: + //

    text 1

    CHOP

    text 2

    + // this function will then trim off empty edges and produce: + //

    text 1

    CHOP

    text 2

    + function trimNode(node) { + var i, children = node.childNodes, type = node.nodeType; + + function surroundedBySpans(node) { + var previousIsSpan = node.previousSibling && node.previousSibling.nodeName == 'SPAN'; + var nextIsSpan = node.nextSibling && node.nextSibling.nodeName == 'SPAN'; + return previousIsSpan && nextIsSpan; + } + + if (type == 1 && node.getAttribute('data-mce-type') == 'bookmark') { + return; + } + + for (i = children.length - 1; i >= 0; i--) { + trimNode(children[i]); + } + + if (type != 9) { + // Keep non whitespace text nodes + if (type == 3 && node.nodeValue.length > 0) { + // If parent element isn't a block or there isn't any useful contents for example "

    " + // Also keep text nodes with only spaces if surrounded by spans. + // eg. "

    a b

    " should keep space between a and b + var trimmedLength = trim(node.nodeValue).length; + if (!self.isBlock(node.parentNode) || trimmedLength > 0 || trimmedLength === 0 && surroundedBySpans(node)) { + return; + } + } else if (type == 1) { + // If the only child is a bookmark then move it up + children = node.childNodes; + + // TODO fix this complex if + if (children.length == 1 && children[0] && children[0].nodeType == 1 && + children[0].getAttribute('data-mce-type') == 'bookmark') { + node.parentNode.insertBefore(children[0], node); + } + + // Keep non empty elements or img, hr etc + if (children.length || /^(br|hr|input|img)$/i.test(node.nodeName)) { + return; + } + } + + self.remove(node); + } + + return node; + } + + if (parentElm && splitElm) { + // Get before chunk + r.setStart(parentElm.parentNode, self.nodeIndex(parentElm)); + r.setEnd(splitElm.parentNode, self.nodeIndex(splitElm)); + bef = r.extractContents(); + + // Get after chunk + r = self.createRng(); + r.setStart(splitElm.parentNode, self.nodeIndex(splitElm) + 1); + r.setEnd(parentElm.parentNode, self.nodeIndex(parentElm) + 1); + aft = r.extractContents(); + + // Insert before chunk + pa = parentElm.parentNode; + pa.insertBefore(trimNode(bef), parentElm); + + // Insert middle chunk + if (replacementElm) { + pa.replaceChild(replacementElm, splitElm); + } else { + pa.insertBefore(splitElm, parentElm); + } + + // Insert after chunk + pa.insertBefore(trimNode(aft), parentElm); + self.remove(parentElm); + + return replacementElm || splitElm; + } + }, + + /** + * Adds an event handler to the specified object. + * + * @method bind + * @param {Element/Document/Window/Array} target Target element to bind events to. + * handler to or an array of elements/ids/documents. + * @param {String} name Name of event handler to add, for example: click. + * @param {function} func Function to execute when the event occurs. + * @param {Object} scope Optional scope to execute the function in. + * @return {function} Function callback handler the same as the one passed in. + */ + bind: function(target, name, func, scope) { + var self = this; + + if (Tools.isArray(target)) { + var i = target.length; + + while (i--) { + target[i] = self.bind(target[i], name, func, scope); + } + + return target; + } + + // Collect all window/document events bound by editor instance + if (self.settings.collect && (target === self.doc || target === self.win)) { + self.boundEvents.push([target, name, func, scope]); + } + + return self.events.bind(target, name, func, scope || self); + }, + + /** + * Removes the specified event handler by name and function from an element or collection of elements. + * + * @method unbind + * @param {Element/Document/Window/Array} target Target element to unbind events on. + * @param {String} name Event handler name, for example: "click" + * @param {function} func Function to remove. + * @return {bool/Array} Bool state of true if the handler was removed, or an array of states if multiple input elements + * were passed in. + */ + unbind: function(target, name, func) { + var self = this, i; + + if (Tools.isArray(target)) { + i = target.length; + + while (i--) { + target[i] = self.unbind(target[i], name, func); + } + + return target; + } + + // Remove any bound events matching the input + if (self.boundEvents && (target === self.doc || target === self.win)) { + i = self.boundEvents.length; + + while (i--) { + var item = self.boundEvents[i]; + + if (target == item[0] && (!name || name == item[1]) && (!func || func == item[2])) { + this.events.unbind(item[0], item[1], item[2]); + } + } + } + + return this.events.unbind(target, name, func); + }, + + /** + * Fires the specified event name with object on target. + * + * @method fire + * @param {Node/Document/Window} target Target element or object to fire event on. + * @param {String} name Name of the event to fire. + * @param {Object} evt Event object to send. + * @return {Event} Event object. + */ + fire: function(target, name, evt) { + return this.events.fire(target, name, evt); + }, + + // Returns the content editable state of a node + getContentEditable: function(node) { + var contentEditable; + + // Check type + if (node.nodeType != 1) { + return null; + } + + // Check for fake content editable + contentEditable = node.getAttribute("data-mce-contenteditable"); + if (contentEditable && contentEditable !== "inherit") { + return contentEditable; + } + + // Check for real content editable + return node.contentEditable !== "inherit" ? node.contentEditable : null; + }, + + /** + * Destroys all internal references to the DOM to solve IE leak issues. + * + * @method destroy + */ + destroy: function() { + var self = this; + + // Unbind all events bound to window/document by editor instance + if (self.boundEvents) { + var i = self.boundEvents.length; + + while (i--) { + var item = self.boundEvents[i]; + this.events.unbind(item[0], item[1], item[2]); + } + + self.boundEvents = null; + } + + // Restore sizzle document to window.document + // Since the current document might be removed producing "Permission denied" on IE see #6325 + if (Sizzle.setDocument) { + Sizzle.setDocument(); + } + + self.win = self.doc = self.root = self.events = self.frag = null; + }, + + // #ifdef debug + + dumpRng: function(r) { + return ( + 'startContainer: ' + r.startContainer.nodeName + + ', startOffset: ' + r.startOffset + + ', endContainer: ' + r.endContainer.nodeName + + ', endOffset: ' + r.endOffset + ); + }, + + // #endif + + _findSib: function(node, selector, name) { + var self = this, func = selector; + + if (node) { + // If expression make a function of it using is + if (typeof(func) == 'string') { + func = function(node) { + return self.is(node, selector); + }; + } + + // Loop all siblings + for (node = node[name]; node; node = node[name]) { + if (func(node)) { + return node; + } + } + } + + return null; + } + }; + + /** + * Instance of DOMUtils for the current document. + * + * @static + * @property DOM + * @type tinymce.dom.DOMUtils + * @example + * // Example of how to add a class to some element by id + * tinymce.DOM.addClass('someid', 'someclass'); + */ + DOMUtils.DOM = new DOMUtils(document); + + return DOMUtils; +}); diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/dom/DomQuery.js b/common/static/js/vendor/tinymce/js/tinymce/classes/dom/DomQuery.js new file mode 100755 index 0000000000..838c98256f --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/dom/DomQuery.js @@ -0,0 +1,730 @@ +/** + * DomQuery.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + * + * Some of this logic is based on jQuery code that is released under + * MIT license that grants us to sublicense it under LGPL. + * + * @ignore-file + */ + +/** + * @class tinymce.dom.DomQuery + */ +define("tinymce/dom/DomQuery", [ + "tinymce/dom/EventUtils", + "tinymce/dom/Sizzle" +], function(EventUtils, Sizzle) { + var doc = document, push = Array.prototype.push, slice = Array.prototype.slice; + var rquickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/; + var Event = EventUtils.Event; + + function isDefined(obj) { + return typeof obj !== "undefined"; + } + + function isString(obj) { + return typeof obj === "string"; + } + + function createFragment(html) { + var frag, node, container; + + container = doc.createElement("div"); + frag = doc.createDocumentFragment(); + container.innerHTML = html; + + while ((node = container.firstChild)) { + frag.appendChild(node); + } + + return frag; + } + + function domManipulate(targetNodes, sourceItem, callback) { + var i; + + if (typeof sourceItem === "string") { + sourceItem = createFragment(sourceItem); + } else if (sourceItem.length) { + for (i = 0; i < sourceItem.length; i++) { + domManipulate(targetNodes, sourceItem[i], callback); + } + + return targetNodes; + } + + i = targetNodes.length; + while (i--) { + callback.call(targetNodes[i], sourceItem.parentNode ? sourceItem : sourceItem); + } + + return targetNodes; + } + + function hasClass(node, className) { + return node && className && (' ' + node.className + ' ').indexOf(' ' + className + ' ') !== -1; + } + + /** + * Makes a map object out of a string that gets separated by a delimiter. + * + * @method makeMap + * @param {String} items Item string to split. + * @param {Object} map Optional object to add items to. + * @return {Object} name/value object with items as keys. + */ + function makeMap(items, map) { + var i; + + items = items || []; + + if (typeof(items) == "string") { + items = items.split(' '); + } + + map = map || {}; + + i = items.length; + while (i--) { + map[items[i]] = {}; + } + + return map; + } + + var numericCssMap = makeMap('fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom'); + + function DomQuery(selector, context) { + /*eslint new-cap:0 */ + return new DomQuery.fn.init(selector, context); + } + + /** + * Extends the specified object with another object. + * + * @method extend + * @param {Object} target Object to extend. + * @param {Object..} obj Multiple objects to extend with. + * @return {Object} Same as target, the extended object. + */ + function extend(target) { + var args = arguments, arg, i, key; + + for (i = 1; i < args.length; i++) { + arg = args[i]; + + for (key in arg) { + target[key] = arg[key]; + } + } + + return target; + } + + /** + * Converts the specified object into a real JavaScript array. + * + * @method toArray + * @param {Object} obj Object to convert into array. + * @return {Array} Array object based in input. + */ + function toArray(obj) { + var array = [], i, l; + + for (i = 0, l = obj.length; i < l; i++) { + array[i] = obj[i]; + } + + return array; + } + + /** + * Returns the index of the specified item inside the array. + * + * @method inArray + * @param {Object} item Item to look for. + * @param {Array} array Array to look for item in. + * @return {Number} Index of the item or -1. + */ + function inArray(item, array) { + var i; + + if (array.indexOf) { + return array.indexOf(item); + } + + i = array.length; + while (i--) { + if (array[i] === item) { + return i; + } + } + + return -1; + } + + /** + * Returns true/false if the specified object is an array. + * + * @method isArray + * @param {Object} obj Object to check if it's an array. + * @return {Boolean} true/false if the input object is array or not. + */ + var isArray = Array.isArray || function(obj) { + return Object.prototype.toString.call(obj) === "[object Array]"; + }; + + var whiteSpaceRegExp = /^\s*|\s*$/g; + + function trim(str) { + return (str === null || str === undefined) ? '' : ("" + str).replace(whiteSpaceRegExp, ''); + } + + /** + * Executes the callback function for each item in array/object. If you return false in the + * callback it will break the loop. + * + * @method each + * @param {Object} obj Object to iterate. + * @param {function} callback Callback function to execute for each item. + */ + function each(obj, callback) { + var length, key, i, undef, value; + + if (obj) { + length = obj.length; + + if (length === undef) { + // Loop object items + for (key in obj) { + if (obj.hasOwnProperty(key)) { + value = obj[key]; + if (callback.call(value, value, key) === false) { + break; + } + } + } + } else { + // Loop array items + for (i = 0; i < length; i++) { + value = obj[i]; + if (callback.call(value, value, key) === false) { + break; + } + } + } + } + + return obj; + } + + DomQuery.fn = DomQuery.prototype = { + constructor: DomQuery, + selector: "", + length: 0, + + init: function(selector, context) { + var self = this, match, node; + + if (!selector) { + return self; + } + + if (selector.nodeType) { + self.context = self[0] = selector; + self.length = 1; + + return self; + } + + if (isString(selector)) { + if (selector.charAt(0) === "<" && selector.charAt(selector.length - 1) === ">" && selector.length >= 3) { + match = [null, selector, null]; + } else { + match = rquickExpr.exec(selector); + } + + if (match) { + if (match[1]) { + node = createFragment(selector).firstChild; + while (node) { + this.add(node); + node = node.nextSibling; + } + } else { + node = doc.getElementById(match[2]); + + if (node.id !== match[2]) { + return self.find(selector); + } + + self.length = 1; + self[0] = node; + } + } else { + return DomQuery(context || document).find(selector); + } + } else { + this.add(selector); + } + + return self; + }, + + toArray: function() { + return toArray(this); + }, + + add: function(items) { + var self = this; + + // Force single item into array + if (!isArray(items)) { + if (items instanceof DomQuery) { + self.add(items.toArray()); + } else { + push.call(self, items); + } + } else { + push.apply(self, items); + } + + return self; + }, + + attr: function(name, value) { + var self = this; + + if (typeof name === "object") { + each(name, function(value, name) { + self.attr(name, value); + }); + } else if (isDefined(value)) { + this.each(function() { + if (this.nodeType === 1) { + this.setAttribute(name, value); + } + }); + } else { + return self[0] && self[0].nodeType === 1 ? self[0].getAttribute(name) : undefined; + } + + return self; + }, + + css: function(name, value) { + var self = this; + + if (typeof name === "object") { + each(name, function(value, name) { + self.css(name, value); + }); + } else { + // Camelcase it, if needed + name = name.replace(/-(\D)/g, function(a, b) { + return b.toUpperCase(); + }); + + if (isDefined(value)) { + // Default px suffix on these + if (typeof(value) === 'number' && !numericCssMap[name]) { + value += 'px'; + } + + self.each(function() { + var style = this.style; + + // IE specific opacity + if (name === "opacity" && this.runtimeStyle && typeof(this.runtimeStyle.opacity) === "undefined") { + style.filter = value === '' ? '' : "alpha(opacity=" + (value * 100) + ")"; + } + + try { + style[name] = value; + } catch (ex) { + // Ignore + } + }); + } else { + return self[0] ? self[0].style[name] : undefined; + } + } + + return self; + }, + + remove: function() { + var self = this, node, i = this.length; + + while (i--) { + node = self[i]; + Event.clean(node); + + if (node.parentNode) { + node.parentNode.removeChild(node); + } + } + + return this; + }, + + empty: function() { + var self = this, node, i = this.length; + + while (i--) { + node = self[i]; + while (node.firstChild) { + node.removeChild(node.firstChild); + } + } + + return this; + }, + + html: function(value) { + var self = this, i; + + if (isDefined(value)) { + i = self.length; + while (i--) { + self[i].innerHTML = value; + } + + return self; + } + + return self[0] ? self[0].innerHTML : ''; + }, + + text: function(value) { + var self = this, i; + + if (isDefined(value)) { + i = self.length; + while (i--) { + self[i].innerText = self[0].textContent = value; + } + + return self; + } + + return self[0] ? self[0].innerText || self[0].textContent : ''; + }, + + append: function() { + return domManipulate(this, arguments, function(node) { + if (this.nodeType === 1) { + this.appendChild(node); + } + }); + }, + + prepend: function() { + return domManipulate(this, arguments, function(node) { + if (this.nodeType === 1) { + this.insertBefore(node, this.firstChild); + } + }); + }, + + before: function() { + var self = this; + + if (self[0] && self[0].parentNode) { + return domManipulate(self, arguments, function(node) { + this.parentNode.insertBefore(node, this.nextSibling); + }); + } + + return self; + }, + + after: function() { + var self = this; + + if (self[0] && self[0].parentNode) { + return domManipulate(self, arguments, function(node) { + this.parentNode.insertBefore(node, this); + }); + } + + return self; + }, + + appendTo: function(val) { + DomQuery(val).append(this); + + return this; + }, + + addClass: function(className) { + return this.toggleClass(className, true); + }, + + removeClass: function(className) { + return this.toggleClass(className, false); + }, + + toggleClass: function(className, state) { + var self = this; + + if (className.indexOf(' ') !== -1) { + each(className.split(' '), function() { + self.toggleClass(this, state); + }); + } else { + self.each(function(node) { + var existingClassName; + + if (hasClass(node, className) !== state) { + existingClassName = node.className; + + if (state) { + node.className += existingClassName ? ' ' + className : className; + } else { + node.className = trim((" " + existingClassName + " ").replace(' ' + className + ' ', ' ')); + } + } + }); + } + + return self; + }, + + hasClass: function(className) { + return hasClass(this[0], className); + }, + + each: function(callback) { + return each(this, callback); + }, + + on: function(name, callback) { + return this.each(function() { + Event.bind(this, name, callback); + }); + }, + + off: function(name, callback) { + return this.each(function() { + Event.unbind(this, name, callback); + }); + }, + + show: function() { + return this.css('display', ''); + }, + + hide: function() { + return this.css('display', 'none'); + }, + + slice: function() { + return new DomQuery(slice.apply(this, arguments)); + }, + + eq: function(index) { + return index === -1 ? this.slice(index) : this.slice(index, +index + 1); + }, + + first: function() { + return this.eq(0); + }, + + last: function() { + return this.eq(-1); + }, + + replaceWith: function(content) { + var self = this; + + if (self[0]) { + self[0].parentNode.replaceChild(DomQuery(content)[0], self[0]); + } + + return self; + }, + + wrap: function(wrapper) { + wrapper = DomQuery(wrapper)[0]; + + return this.each(function() { + var self = this, newWrapper = wrapper.cloneNode(false); + self.parentNode.insertBefore(newWrapper, self); + newWrapper.appendChild(self); + }); + }, + + unwrap: function() { + return this.each(function() { + var self = this, node = self.firstChild, currentNode; + + while (node) { + currentNode = node; + node = node.nextSibling; + self.parentNode.insertBefore(currentNode, self); + } + }); + }, + + clone: function() { + var result = []; + + this.each(function() { + result.push(this.cloneNode(true)); + }); + + return DomQuery(result); + }, + + find: function(selector) { + var i, l, ret = []; + + for (i = 0, l = this.length; i < l; i++) { + DomQuery.find(selector, this[i], ret); + } + + return DomQuery(ret); + }, + + push: push, + sort: [].sort, + splice: [].splice + }; + + // Static members + extend(DomQuery, { + extend: extend, + toArray: toArray, + inArray: inArray, + isArray: isArray, + each: each, + trim: trim, + makeMap: makeMap, + + // Sizzle + find: Sizzle, + expr: Sizzle.selectors, + unique: Sizzle.uniqueSort, + text: Sizzle.getText, + isXMLDoc: Sizzle.isXML, + contains: Sizzle.contains, + filter: function(expr, elems, not) { + if (not) { + expr = ":not(" + expr + ")"; + } + + if (elems.length === 1) { + elems = DomQuery.find.matchesSelector(elems[0], expr) ? [elems[0]] : []; + } else { + elems = DomQuery.find.matches(expr, elems); + } + + return elems; + } + }); + + function dir(el, prop, until) { + var matched = [], cur = el[prop]; + + while (cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !DomQuery(cur).is(until))) { + if (cur.nodeType === 1) { + matched.push(cur); + } + + cur = cur[prop]; + } + + return matched; + } + + function sibling(n, el, siblingName, nodeType) { + var r = []; + + for(; n; n = n[siblingName]) { + if ((!nodeType || n.nodeType === nodeType) && n !== el) { + r.push(n); + } + } + + return r; + } + + each({ + parent: function(node) { + var parent = node.parentNode; + + return parent && parent.nodeType !== 11 ? parent : null; + }, + + parents: function(node) { + return dir(node, "parentNode"); + }, + + parentsUntil: function(node, until) { + return dir(node, "parentNode", until); + }, + + next: function(node) { + return sibling(node, 'nextSibling', 1); + }, + + prev: function(node) { + return sibling(node, 'previousSibling', 1); + }, + + nextNodes: function(node) { + return sibling(node, 'nextSibling'); + }, + + prevNodes: function(node) { + return sibling(node, 'previousSibling'); + }, + + children: function(node) { + return sibling(node.firstChild, 'nextSibling', 1); + }, + + contents: function(node) { + return toArray((node.nodeName === "iframe" ? node.contentDocument || node.contentWindow.document : node).childNodes); + } + }, function(name, fn){ + DomQuery.fn[name] = function(selector) { + var self = this, result; + + if (self.length > 1) { + throw new Error("DomQuery only supports traverse functions on a single node."); + } + + if (self[0]) { + result = fn(self[0], selector); + } + + result = DomQuery(result); + + if (selector && name !== "parentsUntil") { + return result.filter(selector); + } + + return result; + }; + }); + + DomQuery.fn.filter = function(selector) { + return DomQuery.filter(selector); + }; + + DomQuery.fn.is = function(selector) { + return !!selector && this.filter(selector).length > 0; + }; + + DomQuery.fn.init.prototype = DomQuery.fn; + + return DomQuery; +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/dom/EventUtils.js b/common/static/js/vendor/tinymce/js/tinymce/classes/dom/EventUtils.js new file mode 100755 index 0000000000..e3a21cdd88 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/dom/EventUtils.js @@ -0,0 +1,557 @@ +/** + * EventUtils.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*jshint loopfunc:true*/ +/*eslint no-loop-func:0 */ + +define("tinymce/dom/EventUtils", [], function() { + "use strict"; + + var eventExpandoPrefix = "mce-data-"; + var mouseEventRe = /^(?:mouse|contextmenu)|click/; + var deprecated = {keyLocation: 1, layerX: 1, layerY: 1, returnValue: 1}; + + /** + * Binds a native event to a callback on the speified target. + */ + function addEvent(target, name, callback, capture) { + if (target.addEventListener) { + target.addEventListener(name, callback, capture || false); + } else if (target.attachEvent) { + target.attachEvent('on' + name, callback); + } + } + + /** + * Unbinds a native event callback on the specified target. + */ + function removeEvent(target, name, callback, capture) { + if (target.removeEventListener) { + target.removeEventListener(name, callback, capture || false); + } else if (target.detachEvent) { + target.detachEvent('on' + name, callback); + } + } + + /** + * Normalizes a native event object or just adds the event specific methods on a custom event. + */ + function fix(originalEvent, data) { + var name, event = data || {}, undef; + + // Dummy function that gets replaced on the delegation state functions + function returnFalse() { + return false; + } + + // Dummy function that gets replaced on the delegation state functions + function returnTrue() { + return true; + } + + // Copy all properties from the original event + for (name in originalEvent) { + // layerX/layerY is deprecated in Chrome and produces a warning + if (!deprecated[name]) { + event[name] = originalEvent[name]; + } + } + + // Normalize target IE uses srcElement + if (!event.target) { + event.target = event.srcElement || document; + } + + // Calculate pageX/Y if missing and clientX/Y available + if (originalEvent && mouseEventRe.test(originalEvent.type) && originalEvent.pageX === undef && originalEvent.clientX !== undef) { + var eventDoc = event.target.ownerDocument || document; + var doc = eventDoc.documentElement; + var body = eventDoc.body; + + event.pageX = originalEvent.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - + ( doc && doc.clientLeft || body && body.clientLeft || 0); + + event.pageY = originalEvent.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0 ) - + ( doc && doc.clientTop || body && body.clientTop || 0); + } + + // Add preventDefault method + event.preventDefault = function() { + event.isDefaultPrevented = returnTrue; + + // Execute preventDefault on the original event object + if (originalEvent) { + if (originalEvent.preventDefault) { + originalEvent.preventDefault(); + } else { + originalEvent.returnValue = false; // IE + } + } + }; + + // Add stopPropagation + event.stopPropagation = function() { + event.isPropagationStopped = returnTrue; + + // Execute stopPropagation on the original event object + if (originalEvent) { + if (originalEvent.stopPropagation) { + originalEvent.stopPropagation(); + } else { + originalEvent.cancelBubble = true; // IE + } + } + }; + + // Add stopImmediatePropagation + event.stopImmediatePropagation = function() { + event.isImmediatePropagationStopped = returnTrue; + event.stopPropagation(); + }; + + // Add event delegation states + if (!event.isDefaultPrevented) { + event.isDefaultPrevented = returnFalse; + event.isPropagationStopped = returnFalse; + event.isImmediatePropagationStopped = returnFalse; + } + + return event; + } + + /** + * Bind a DOMContentLoaded event across browsers and executes the callback once the page DOM is initialized. + * It will also set/check the domLoaded state of the event_utils instance so ready isn't called multiple times. + */ + function bindOnReady(win, callback, eventUtils) { + var doc = win.document, event = {type: 'ready'}; + + if (eventUtils.domLoaded) { + callback(event); + return; + } + + // Gets called when the DOM is ready + function readyHandler() { + if (!eventUtils.domLoaded) { + eventUtils.domLoaded = true; + callback(event); + } + } + + function waitForDomLoaded() { + // Check complete or interactive state if there is a body + // element on some iframes IE 8 will produce a null body + if (doc.readyState === "complete" || (doc.readyState === "interactive" && doc.body)) { + removeEvent(doc, "readystatechange", waitForDomLoaded); + readyHandler(); + } + } + + function tryScroll() { + try { + // If IE is used, use the trick by Diego Perini licensed under MIT by request to the author. + // http://javascript.nwbox.com/IEContentLoaded/ + doc.documentElement.doScroll("left"); + } catch (ex) { + setTimeout(tryScroll, 0); + return; + } + + readyHandler(); + } + + // Use W3C method + if (doc.addEventListener) { + if (doc.readyState === "complete") { + readyHandler(); + } else { + addEvent(win, 'DOMContentLoaded', readyHandler); + } + } else { + // Use IE method + addEvent(doc, "readystatechange", waitForDomLoaded); + + // Wait until we can scroll, when we can the DOM is initialized + if (doc.documentElement.doScroll && win.self === win.top) { + tryScroll(); + } + } + + // Fallback if any of the above methods should fail for some odd reason + addEvent(win, 'load', readyHandler); + } + + /** + * This class enables you to bind/unbind native events to elements and normalize it's behavior across browsers. + */ + function EventUtils() { + var self = this, events = {}, count, expando, hasFocusIn, hasMouseEnterLeave, mouseEnterLeave; + + expando = eventExpandoPrefix + (+new Date()).toString(32); + hasMouseEnterLeave = "onmouseenter" in document.documentElement; + hasFocusIn = "onfocusin" in document.documentElement; + mouseEnterLeave = {mouseenter: 'mouseover', mouseleave: 'mouseout'}; + count = 1; + + // State if the DOMContentLoaded was executed or not + self.domLoaded = false; + self.events = events; + + /** + * Executes all event handler callbacks for a specific event. + * + * @private + * @param {Event} evt Event object. + * @param {String} id Expando id value to look for. + */ + function executeHandlers(evt, id) { + var callbackList, i, l, callback, container = events[id]; + + callbackList = container && container[evt.type]; + if (callbackList) { + for (i = 0, l = callbackList.length; i < l; i++) { + callback = callbackList[i]; + + // Check if callback exists might be removed if a unbind is called inside the callback + if (callback && callback.func.call(callback.scope, evt) === false) { + evt.preventDefault(); + } + + // Should we stop propagation to immediate listeners + if (evt.isImmediatePropagationStopped()) { + return; + } + } + } + } + + /** + * Binds a callback to an event on the specified target. + * + * @method bind + * @param {Object} target Target node/window or custom object. + * @param {String} names Name of the event to bind. + * @param {function} callback Callback function to execute when the event occurs. + * @param {Object} scope Scope to call the callback function on, defaults to target. + * @return {function} Callback function that got bound. + */ + self.bind = function(target, names, callback, scope) { + var id, callbackList, i, name, fakeName, nativeHandler, capture, win = window; + + // Native event handler function patches the event and executes the callbacks for the expando + function defaultNativeHandler(evt) { + executeHandlers(fix(evt || win.event), id); + } + + // Don't bind to text nodes or comments + if (!target || target.nodeType === 3 || target.nodeType === 8) { + return; + } + + // Create or get events id for the target + if (!target[expando]) { + id = count++; + target[expando] = id; + events[id] = {}; + } else { + id = target[expando]; + } + + // Setup the specified scope or use the target as a default + scope = scope || target; + + // Split names and bind each event, enables you to bind multiple events with one call + names = names.split(' '); + i = names.length; + while (i--) { + name = names[i]; + nativeHandler = defaultNativeHandler; + fakeName = capture = false; + + // Use ready instead of DOMContentLoaded + if (name === "DOMContentLoaded") { + name = "ready"; + } + + // DOM is already ready + if (self.domLoaded && name === "ready" && target.readyState == 'complete') { + callback.call(scope, fix({type: name})); + continue; + } + + // Handle mouseenter/mouseleaver + if (!hasMouseEnterLeave) { + fakeName = mouseEnterLeave[name]; + + if (fakeName) { + nativeHandler = function(evt) { + var current, related; + + current = evt.currentTarget; + related = evt.relatedTarget; + + // Check if related is inside the current target if it's not then the event should + // be ignored since it's a mouseover/mouseout inside the element + if (related && current.contains) { + // Use contains for performance + related = current.contains(related); + } else { + while (related && related !== current) { + related = related.parentNode; + } + } + + // Fire fake event + if (!related) { + evt = fix(evt || win.event); + evt.type = evt.type === 'mouseout' ? 'mouseleave' : 'mouseenter'; + evt.target = current; + executeHandlers(evt, id); + } + }; + } + } + + // Fake bubbeling of focusin/focusout + if (!hasFocusIn && (name === "focusin" || name === "focusout")) { + capture = true; + fakeName = name === "focusin" ? "focus" : "blur"; + nativeHandler = function(evt) { + evt = fix(evt || win.event); + evt.type = evt.type === 'focus' ? 'focusin' : 'focusout'; + executeHandlers(evt, id); + }; + } + + // Setup callback list and bind native event + callbackList = events[id][name]; + if (!callbackList) { + events[id][name] = callbackList = [{func: callback, scope: scope}]; + callbackList.fakeName = fakeName; + callbackList.capture = capture; + + // Add the nativeHandler to the callback list so that we can later unbind it + callbackList.nativeHandler = nativeHandler; + + // Check if the target has native events support + + if (name === "ready") { + bindOnReady(target, nativeHandler, self); + } else { + addEvent(target, fakeName || name, nativeHandler, capture); + } + } else { + if (name === "ready" && self.domLoaded) { + callback({type: name}); + } else { + // If it already has an native handler then just push the callback + callbackList.push({func: callback, scope: scope}); + } + } + } + + target = callbackList = 0; // Clean memory for IE + + return callback; + }; + + /** + * Unbinds the specified event by name, name and callback or all events on the target. + * + * @method unbind + * @param {Object} target Target node/window or custom object. + * @param {String} names Optional event name to unbind. + * @param {function} callback Optional callback function to unbind. + * @return {EventUtils} Event utils instance. + */ + self.unbind = function(target, names, callback) { + var id, callbackList, i, ci, name, eventMap; + + // Don't bind to text nodes or comments + if (!target || target.nodeType === 3 || target.nodeType === 8) { + return self; + } + + // Unbind event or events if the target has the expando + id = target[expando]; + if (id) { + eventMap = events[id]; + + // Specific callback + if (names) { + names = names.split(' '); + i = names.length; + while (i--) { + name = names[i]; + callbackList = eventMap[name]; + + // Unbind the event if it exists in the map + if (callbackList) { + // Remove specified callback + if (callback) { + ci = callbackList.length; + while (ci--) { + if (callbackList[ci].func === callback) { + var nativeHandler = callbackList.nativeHandler; + var fakeName = callbackList.fakeName, capture = callbackList.capture; + + // Clone callbackList since unbind inside a callback would otherwise break the handlers loop + callbackList = callbackList.slice(0, ci).concat(callbackList.slice(ci + 1)); + callbackList.nativeHandler = nativeHandler; + callbackList.fakeName = fakeName; + callbackList.capture = capture; + + eventMap[name] = callbackList; + } + } + } + + // Remove all callbacks if there isn't a specified callback or there is no callbacks left + if (!callback || callbackList.length === 0) { + delete eventMap[name]; + removeEvent(target, callbackList.fakeName || name, callbackList.nativeHandler, callbackList.capture); + } + } + } + } else { + // All events for a specific element + for (name in eventMap) { + callbackList = eventMap[name]; + removeEvent(target, callbackList.fakeName || name, callbackList.nativeHandler, callbackList.capture); + } + + eventMap = {}; + } + + // Check if object is empty, if it isn't then we won't remove the expando map + for (name in eventMap) { + return self; + } + + // Delete event object + delete events[id]; + + // Remove expando from target + try { + // IE will fail here since it can't delete properties from window + delete target[expando]; + } catch (ex) { + // IE will set it to null + target[expando] = null; + } + } + + return self; + }; + + /** + * Fires the specified event on the specified target. + * + * @method fire + * @param {Object} target Target node/window or custom object. + * @param {String} name Event name to fire. + * @param {Object} args Optional arguments to send to the observers. + * @return {EventUtils} Event utils instance. + */ + self.fire = function(target, name, args) { + var id; + + // Don't bind to text nodes or comments + if (!target || target.nodeType === 3 || target.nodeType === 8) { + return self; + } + + // Build event object by patching the args + args = fix(null, args); + args.type = name; + args.target = target; + + do { + // Found an expando that means there is listeners to execute + id = target[expando]; + if (id) { + executeHandlers(args, id); + } + + // Walk up the DOM + target = target.parentNode || target.ownerDocument || target.defaultView || target.parentWindow; + } while (target && !args.isPropagationStopped()); + + return self; + }; + + /** + * Removes all bound event listeners for the specified target. This will also remove any bound + * listeners to child nodes within that target. + * + * @method clean + * @param {Object} target Target node/window object. + * @return {EventUtils} Event utils instance. + */ + self.clean = function(target) { + var i, children, unbind = self.unbind; + + // Don't bind to text nodes or comments + if (!target || target.nodeType === 3 || target.nodeType === 8) { + return self; + } + + // Unbind any element on the specificed target + if (target[expando]) { + unbind(target); + } + + // Target doesn't have getElementsByTagName it's probably a window object then use it's document to find the children + if (!target.getElementsByTagName) { + target = target.document; + } + + // Remove events from each child element + if (target && target.getElementsByTagName) { + unbind(target); + + children = target.getElementsByTagName('*'); + i = children.length; + while (i--) { + target = children[i]; + + if (target[expando]) { + unbind(target); + } + } + } + + return self; + }; + + /** + * Destroys the event object. Call this on IE to remove memory leaks. + */ + self.destroy = function() { + events = {}; + }; + + // Legacy function for canceling events + self.cancel = function(e) { + if (e) { + e.preventDefault(); + e.stopImmediatePropagation(); + } + + return false; + }; + } + + EventUtils.Event = new EventUtils(); + EventUtils.Event.bind(window, 'ready', function() {}); + + return EventUtils; +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/dom/Range.js b/common/static/js/vendor/tinymce/js/tinymce/classes/dom/Range.js new file mode 100755 index 0000000000..d9aab1674f --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/dom/Range.js @@ -0,0 +1,777 @@ +/** + * Range.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +define("tinymce/dom/Range", [ + "tinymce/util/Tools" +], function(Tools) { + // Range constructor + function Range(dom) { + var self = this, + doc = dom.doc, + EXTRACT = 0, + CLONE = 1, + DELETE = 2, + TRUE = true, + FALSE = false, + START_OFFSET = 'startOffset', + START_CONTAINER = 'startContainer', + END_CONTAINER = 'endContainer', + END_OFFSET = 'endOffset', + extend = Tools.extend, + nodeIndex = dom.nodeIndex; + + function createDocumentFragment() { + return doc.createDocumentFragment(); + } + + function setStart(n, o) { + _setEndPoint(TRUE, n, o); + } + + function setEnd(n, o) { + _setEndPoint(FALSE, n, o); + } + + function setStartBefore(n) { + setStart(n.parentNode, nodeIndex(n)); + } + + function setStartAfter(n) { + setStart(n.parentNode, nodeIndex(n) + 1); + } + + function setEndBefore(n) { + setEnd(n.parentNode, nodeIndex(n)); + } + + function setEndAfter(n) { + setEnd(n.parentNode, nodeIndex(n) + 1); + } + + function collapse(ts) { + if (ts) { + self[END_CONTAINER] = self[START_CONTAINER]; + self[END_OFFSET] = self[START_OFFSET]; + } else { + self[START_CONTAINER] = self[END_CONTAINER]; + self[START_OFFSET] = self[END_OFFSET]; + } + + self.collapsed = TRUE; + } + + function selectNode(n) { + setStartBefore(n); + setEndAfter(n); + } + + function selectNodeContents(n) { + setStart(n, 0); + setEnd(n, n.nodeType === 1 ? n.childNodes.length : n.nodeValue.length); + } + + function compareBoundaryPoints(h, r) { + var sc = self[START_CONTAINER], so = self[START_OFFSET], ec = self[END_CONTAINER], eo = self[END_OFFSET], + rsc = r.startContainer, rso = r.startOffset, rec = r.endContainer, reo = r.endOffset; + + // Check START_TO_START + if (h === 0) { + return _compareBoundaryPoints(sc, so, rsc, rso); + } + + // Check START_TO_END + if (h === 1) { + return _compareBoundaryPoints(ec, eo, rsc, rso); + } + + // Check END_TO_END + if (h === 2) { + return _compareBoundaryPoints(ec, eo, rec, reo); + } + + // Check END_TO_START + if (h === 3) { + return _compareBoundaryPoints(sc, so, rec, reo); + } + } + + function deleteContents() { + _traverse(DELETE); + } + + function extractContents() { + return _traverse(EXTRACT); + } + + function cloneContents() { + return _traverse(CLONE); + } + + function insertNode(n) { + var startContainer = this[START_CONTAINER], + startOffset = this[START_OFFSET], nn, o; + + // Node is TEXT_NODE or CDATA + if ((startContainer.nodeType === 3 || startContainer.nodeType === 4) && startContainer.nodeValue) { + if (!startOffset) { + // At the start of text + startContainer.parentNode.insertBefore(n, startContainer); + } else if (startOffset >= startContainer.nodeValue.length) { + // At the end of text + dom.insertAfter(n, startContainer); + } else { + // Middle, need to split + nn = startContainer.splitText(startOffset); + startContainer.parentNode.insertBefore(n, nn); + } + } else { + // Insert element node + if (startContainer.childNodes.length > 0) { + o = startContainer.childNodes[startOffset]; + } + + if (o) { + startContainer.insertBefore(n, o); + } else { + if (startContainer.nodeType == 3) { + dom.insertAfter(n, startContainer); + } else { + startContainer.appendChild(n); + } + } + } + } + + function surroundContents(n) { + var f = self.extractContents(); + + self.insertNode(n); + n.appendChild(f); + self.selectNode(n); + } + + function cloneRange() { + return extend(new Range(dom), { + startContainer: self[START_CONTAINER], + startOffset: self[START_OFFSET], + endContainer: self[END_CONTAINER], + endOffset: self[END_OFFSET], + collapsed: self.collapsed, + commonAncestorContainer: self.commonAncestorContainer + }); + } + + // Private methods + + function _getSelectedNode(container, offset) { + var child; + + if (container.nodeType == 3 /* TEXT_NODE */) { + return container; + } + + if (offset < 0) { + return container; + } + + child = container.firstChild; + while (child && offset > 0) { + --offset; + child = child.nextSibling; + } + + if (child) { + return child; + } + + return container; + } + + function _isCollapsed() { + return (self[START_CONTAINER] == self[END_CONTAINER] && self[START_OFFSET] == self[END_OFFSET]); + } + + function _compareBoundaryPoints(containerA, offsetA, containerB, offsetB) { + var c, offsetC, n, cmnRoot, childA, childB; + + // In the first case the boundary-points have the same container. A is before B + // if its offset is less than the offset of B, A is equal to B if its offset is + // equal to the offset of B, and A is after B if its offset is greater than the + // offset of B. + if (containerA == containerB) { + if (offsetA == offsetB) { + return 0; // equal + } + + if (offsetA < offsetB) { + return -1; // before + } + + return 1; // after + } + + // In the second case a child node C of the container of A is an ancestor + // container of B. In this case, A is before B if the offset of A is less than or + // equal to the index of the child node C and A is after B otherwise. + c = containerB; + while (c && c.parentNode != containerA) { + c = c.parentNode; + } + + if (c) { + offsetC = 0; + n = containerA.firstChild; + + while (n != c && offsetC < offsetA) { + offsetC++; + n = n.nextSibling; + } + + if (offsetA <= offsetC) { + return -1; // before + } + + return 1; // after + } + + // In the third case a child node C of the container of B is an ancestor container + // of A. In this case, A is before B if the index of the child node C is less than + // the offset of B and A is after B otherwise. + c = containerA; + while (c && c.parentNode != containerB) { + c = c.parentNode; + } + + if (c) { + offsetC = 0; + n = containerB.firstChild; + + while (n != c && offsetC < offsetB) { + offsetC++; + n = n.nextSibling; + } + + if (offsetC < offsetB) { + return -1; // before + } + + return 1; // after + } + + // In the fourth case, none of three other cases hold: the containers of A and B + // are siblings or descendants of sibling nodes. In this case, A is before B if + // the container of A is before the container of B in a pre-order traversal of the + // Ranges' context tree and A is after B otherwise. + cmnRoot = dom.findCommonAncestor(containerA, containerB); + childA = containerA; + + while (childA && childA.parentNode != cmnRoot) { + childA = childA.parentNode; + } + + if (!childA) { + childA = cmnRoot; + } + + childB = containerB; + while (childB && childB.parentNode != cmnRoot) { + childB = childB.parentNode; + } + + if (!childB) { + childB = cmnRoot; + } + + if (childA == childB) { + return 0; // equal + } + + n = cmnRoot.firstChild; + while (n) { + if (n == childA) { + return -1; // before + } + + if (n == childB) { + return 1; // after + } + + n = n.nextSibling; + } + } + + function _setEndPoint(st, n, o) { + var ec, sc; + + if (st) { + self[START_CONTAINER] = n; + self[START_OFFSET] = o; + } else { + self[END_CONTAINER] = n; + self[END_OFFSET] = o; + } + + // If one boundary-point of a Range is set to have a root container + // other than the current one for the Range, the Range is collapsed to + // the new position. This enforces the restriction that both boundary- + // points of a Range must have the same root container. + ec = self[END_CONTAINER]; + while (ec.parentNode) { + ec = ec.parentNode; + } + + sc = self[START_CONTAINER]; + while (sc.parentNode) { + sc = sc.parentNode; + } + + if (sc == ec) { + // The start position of a Range is guaranteed to never be after the + // end position. To enforce this restriction, if the start is set to + // be at a position after the end, the Range is collapsed to that + // position. + if (_compareBoundaryPoints(self[START_CONTAINER], self[START_OFFSET], self[END_CONTAINER], self[END_OFFSET]) > 0) { + self.collapse(st); + } + } else { + self.collapse(st); + } + + self.collapsed = _isCollapsed(); + self.commonAncestorContainer = dom.findCommonAncestor(self[START_CONTAINER], self[END_CONTAINER]); + } + + function _traverse(how) { + var c, endContainerDepth = 0, startContainerDepth = 0, p, depthDiff, startNode, endNode, sp, ep; + + if (self[START_CONTAINER] == self[END_CONTAINER]) { + return _traverseSameContainer(how); + } + + for (c = self[END_CONTAINER], p = c.parentNode; p; c = p, p = p.parentNode) { + if (p == self[START_CONTAINER]) { + return _traverseCommonStartContainer(c, how); + } + + ++endContainerDepth; + } + + for (c = self[START_CONTAINER], p = c.parentNode; p; c = p, p = p.parentNode) { + if (p == self[END_CONTAINER]) { + return _traverseCommonEndContainer(c, how); + } + + ++startContainerDepth; + } + + depthDiff = startContainerDepth - endContainerDepth; + + startNode = self[START_CONTAINER]; + while (depthDiff > 0) { + startNode = startNode.parentNode; + depthDiff--; + } + + endNode = self[END_CONTAINER]; + while (depthDiff < 0) { + endNode = endNode.parentNode; + depthDiff++; + } + + // ascend the ancestor hierarchy until we have a common parent. + for (sp = startNode.parentNode, ep = endNode.parentNode; sp != ep; sp = sp.parentNode, ep = ep.parentNode) { + startNode = sp; + endNode = ep; + } + + return _traverseCommonAncestors(startNode, endNode, how); + } + + function _traverseSameContainer(how) { + var frag, s, sub, n, cnt, sibling, xferNode, start, len; + + if (how != DELETE) { + frag = createDocumentFragment(); + } + + // If selection is empty, just return the fragment + if (self[START_OFFSET] == self[END_OFFSET]) { + return frag; + } + + // Text node needs special case handling + if (self[START_CONTAINER].nodeType == 3 /* TEXT_NODE */) { + // get the substring + s = self[START_CONTAINER].nodeValue; + sub = s.substring(self[START_OFFSET], self[END_OFFSET]); + + // set the original text node to its new value + if (how != CLONE) { + n = self[START_CONTAINER]; + start = self[START_OFFSET]; + len = self[END_OFFSET] - self[START_OFFSET]; + + if (start === 0 && len >= n.nodeValue.length - 1) { + n.parentNode.removeChild(n); + } else { + n.deleteData(start, len); + } + + // Nothing is partially selected, so collapse to start point + self.collapse(TRUE); + } + + if (how == DELETE) { + return; + } + + if (sub.length > 0) { + frag.appendChild(doc.createTextNode(sub)); + } + + return frag; + } + + // Copy nodes between the start/end offsets. + n = _getSelectedNode(self[START_CONTAINER], self[START_OFFSET]); + cnt = self[END_OFFSET] - self[START_OFFSET]; + + while (n && cnt > 0) { + sibling = n.nextSibling; + xferNode = _traverseFullySelected(n, how); + + if (frag) { + frag.appendChild(xferNode); + } + + --cnt; + n = sibling; + } + + // Nothing is partially selected, so collapse to start point + if (how != CLONE) { + self.collapse(TRUE); + } + + return frag; + } + + function _traverseCommonStartContainer(endAncestor, how) { + var frag, n, endIdx, cnt, sibling, xferNode; + + if (how != DELETE) { + frag = createDocumentFragment(); + } + + n = _traverseRightBoundary(endAncestor, how); + + if (frag) { + frag.appendChild(n); + } + + endIdx = nodeIndex(endAncestor); + cnt = endIdx - self[START_OFFSET]; + + if (cnt <= 0) { + // Collapse to just before the endAncestor, which + // is partially selected. + if (how != CLONE) { + self.setEndBefore(endAncestor); + self.collapse(FALSE); + } + + return frag; + } + + n = endAncestor.previousSibling; + while (cnt > 0) { + sibling = n.previousSibling; + xferNode = _traverseFullySelected(n, how); + + if (frag) { + frag.insertBefore(xferNode, frag.firstChild); + } + + --cnt; + n = sibling; + } + + // Collapse to just before the endAncestor, which + // is partially selected. + if (how != CLONE) { + self.setEndBefore(endAncestor); + self.collapse(FALSE); + } + + return frag; + } + + function _traverseCommonEndContainer(startAncestor, how) { + var frag, startIdx, n, cnt, sibling, xferNode; + + if (how != DELETE) { + frag = createDocumentFragment(); + } + + n = _traverseLeftBoundary(startAncestor, how); + if (frag) { + frag.appendChild(n); + } + + startIdx = nodeIndex(startAncestor); + ++startIdx; // Because we already traversed it + + cnt = self[END_OFFSET] - startIdx; + n = startAncestor.nextSibling; + while (n && cnt > 0) { + sibling = n.nextSibling; + xferNode = _traverseFullySelected(n, how); + + if (frag) { + frag.appendChild(xferNode); + } + + --cnt; + n = sibling; + } + + if (how != CLONE) { + self.setStartAfter(startAncestor); + self.collapse(TRUE); + } + + return frag; + } + + function _traverseCommonAncestors(startAncestor, endAncestor, how) { + var n, frag, startOffset, endOffset, cnt, sibling, nextSibling; + + if (how != DELETE) { + frag = createDocumentFragment(); + } + + n = _traverseLeftBoundary(startAncestor, how); + if (frag) { + frag.appendChild(n); + } + + startOffset = nodeIndex(startAncestor); + endOffset = nodeIndex(endAncestor); + ++startOffset; + + cnt = endOffset - startOffset; + sibling = startAncestor.nextSibling; + + while (cnt > 0) { + nextSibling = sibling.nextSibling; + n = _traverseFullySelected(sibling, how); + + if (frag) { + frag.appendChild(n); + } + + sibling = nextSibling; + --cnt; + } + + n = _traverseRightBoundary(endAncestor, how); + + if (frag) { + frag.appendChild(n); + } + + if (how != CLONE) { + self.setStartAfter(startAncestor); + self.collapse(TRUE); + } + + return frag; + } + + function _traverseRightBoundary(root, how) { + var next = _getSelectedNode(self[END_CONTAINER], self[END_OFFSET] - 1), parent, clonedParent; + var prevSibling, clonedChild, clonedGrandParent, isFullySelected = next != self[END_CONTAINER]; + + if (next == root) { + return _traverseNode(next, isFullySelected, FALSE, how); + } + + parent = next.parentNode; + clonedParent = _traverseNode(parent, FALSE, FALSE, how); + + while (parent) { + while (next) { + prevSibling = next.previousSibling; + clonedChild = _traverseNode(next, isFullySelected, FALSE, how); + + if (how != DELETE) { + clonedParent.insertBefore(clonedChild, clonedParent.firstChild); + } + + isFullySelected = TRUE; + next = prevSibling; + } + + if (parent == root) { + return clonedParent; + } + + next = parent.previousSibling; + parent = parent.parentNode; + + clonedGrandParent = _traverseNode(parent, FALSE, FALSE, how); + + if (how != DELETE) { + clonedGrandParent.appendChild(clonedParent); + } + + clonedParent = clonedGrandParent; + } + } + + function _traverseLeftBoundary(root, how) { + var next = _getSelectedNode(self[START_CONTAINER], self[START_OFFSET]), isFullySelected = next != self[START_CONTAINER]; + var parent, clonedParent, nextSibling, clonedChild, clonedGrandParent; + + if (next == root) { + return _traverseNode(next, isFullySelected, TRUE, how); + } + + parent = next.parentNode; + clonedParent = _traverseNode(parent, FALSE, TRUE, how); + + while (parent) { + while (next) { + nextSibling = next.nextSibling; + clonedChild = _traverseNode(next, isFullySelected, TRUE, how); + + if (how != DELETE) { + clonedParent.appendChild(clonedChild); + } + + isFullySelected = TRUE; + next = nextSibling; + } + + if (parent == root) { + return clonedParent; + } + + next = parent.nextSibling; + parent = parent.parentNode; + + clonedGrandParent = _traverseNode(parent, FALSE, TRUE, how); + + if (how != DELETE) { + clonedGrandParent.appendChild(clonedParent); + } + + clonedParent = clonedGrandParent; + } + } + + function _traverseNode(n, isFullySelected, isLeft, how) { + var txtValue, newNodeValue, oldNodeValue, offset, newNode; + + if (isFullySelected) { + return _traverseFullySelected(n, how); + } + + if (n.nodeType == 3 /* TEXT_NODE */) { + txtValue = n.nodeValue; + + if (isLeft) { + offset = self[START_OFFSET]; + newNodeValue = txtValue.substring(offset); + oldNodeValue = txtValue.substring(0, offset); + } else { + offset = self[END_OFFSET]; + newNodeValue = txtValue.substring(0, offset); + oldNodeValue = txtValue.substring(offset); + } + + if (how != CLONE) { + n.nodeValue = oldNodeValue; + } + + if (how == DELETE) { + return; + } + + newNode = dom.clone(n, FALSE); + newNode.nodeValue = newNodeValue; + + return newNode; + } + + if (how == DELETE) { + return; + } + + return dom.clone(n, FALSE); + } + + function _traverseFullySelected(n, how) { + if (how != DELETE) { + return how == CLONE ? dom.clone(n, TRUE) : n; + } + + n.parentNode.removeChild(n); + } + + function toStringIE() { + return dom.create('body', null, cloneContents()).outerText; + } + + extend(self, { + // Inital states + startContainer: doc, + startOffset: 0, + endContainer: doc, + endOffset: 0, + collapsed: TRUE, + commonAncestorContainer: doc, + + // Range constants + START_TO_START: 0, + START_TO_END: 1, + END_TO_END: 2, + END_TO_START: 3, + + // Public methods + setStart: setStart, + setEnd: setEnd, + setStartBefore: setStartBefore, + setStartAfter: setStartAfter, + setEndBefore: setEndBefore, + setEndAfter: setEndAfter, + collapse: collapse, + selectNode: selectNode, + selectNodeContents: selectNodeContents, + compareBoundaryPoints: compareBoundaryPoints, + deleteContents: deleteContents, + extractContents: extractContents, + cloneContents: cloneContents, + insertNode: insertNode, + surroundContents: surroundContents, + cloneRange: cloneRange, + toStringIE: toStringIE + }); + + return self; + } + + // Older IE versions doesn't let you override toString by it's constructor so we have to stick it in the prototype + Range.prototype.toString = function() { + return this.toStringIE(); + }; + + return Range; +}); diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/dom/RangeUtils.js b/common/static/js/vendor/tinymce/js/tinymce/classes/dom/RangeUtils.js new file mode 100755 index 0000000000..42d39f91f8 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/dom/RangeUtils.js @@ -0,0 +1,476 @@ +/** + * Range.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * RangeUtils + * + * @class tinymce.dom.RangeUtils + * @private + */ +define("tinymce/dom/RangeUtils", [ + "tinymce/util/Tools", + "tinymce/dom/TreeWalker" +], function(Tools, TreeWalker) { + var each = Tools.each; + + function RangeUtils(dom) { + /** + * Walks the specified range like object and executes the callback for each sibling collection it finds. + * + * @method walk + * @param {Object} rng Range like object. + * @param {function} callback Callback function to execute for each sibling collection. + */ + this.walk = function(rng, callback) { + var startContainer = rng.startContainer, + startOffset = rng.startOffset, + endContainer = rng.endContainer, + endOffset = rng.endOffset, + ancestor, startPoint, + endPoint, node, parent, siblings, nodes; + + // Handle table cell selection the table plugin enables + // you to fake select table cells and perform formatting actions on them + nodes = dom.select('td.mce-item-selected,th.mce-item-selected'); + if (nodes.length > 0) { + each(nodes, function(node) { + callback([node]); + }); + + return; + } + + /** + * Excludes start/end text node if they are out side the range + * + * @private + * @param {Array} nodes Nodes to exclude items from. + * @return {Array} Array with nodes excluding the start/end container if needed. + */ + function exclude(nodes) { + var node; + + // First node is excluded + node = nodes[0]; + if (node.nodeType === 3 && node === startContainer && startOffset >= node.nodeValue.length) { + nodes.splice(0, 1); + } + + // Last node is excluded + node = nodes[nodes.length - 1]; + if (endOffset === 0 && nodes.length > 0 && node === endContainer && node.nodeType === 3) { + nodes.splice(nodes.length - 1, 1); + } + + return nodes; + } + + /** + * Collects siblings + * + * @private + * @param {Node} node Node to collect siblings from. + * @param {String} name Name of the sibling to check for. + * @return {Array} Array of collected siblings. + */ + function collectSiblings(node, name, end_node) { + var siblings = []; + + for (; node && node != end_node; node = node[name]) { + siblings.push(node); + } + + return siblings; + } + + /** + * Find an end point this is the node just before the common ancestor root. + * + * @private + * @param {Node} node Node to start at. + * @param {Node} root Root/ancestor element to stop just before. + * @return {Node} Node just before the root element. + */ + function findEndPoint(node, root) { + do { + if (node.parentNode == root) { + return node; + } + + node = node.parentNode; + } while(node); + } + + function walkBoundary(start_node, end_node, next) { + var siblingName = next ? 'nextSibling' : 'previousSibling'; + + for (node = start_node, parent = node.parentNode; node && node != end_node; node = parent) { + parent = node.parentNode; + siblings = collectSiblings(node == start_node ? node : node[siblingName], siblingName); + + if (siblings.length) { + if (!next) { + siblings.reverse(); + } + + callback(exclude(siblings)); + } + } + } + + // If index based start position then resolve it + if (startContainer.nodeType == 1 && startContainer.hasChildNodes()) { + startContainer = startContainer.childNodes[startOffset]; + } + + // If index based end position then resolve it + if (endContainer.nodeType == 1 && endContainer.hasChildNodes()) { + endContainer = endContainer.childNodes[Math.min(endOffset - 1, endContainer.childNodes.length - 1)]; + } + + // Same container + if (startContainer == endContainer) { + return callback(exclude([startContainer])); + } + + // Find common ancestor and end points + ancestor = dom.findCommonAncestor(startContainer, endContainer); + + // Process left side + for (node = startContainer; node; node = node.parentNode) { + if (node === endContainer) { + return walkBoundary(startContainer, ancestor, true); + } + + if (node === ancestor) { + break; + } + } + + // Process right side + for (node = endContainer; node; node = node.parentNode) { + if (node === startContainer) { + return walkBoundary(endContainer, ancestor); + } + + if (node === ancestor) { + break; + } + } + + // Find start/end point + startPoint = findEndPoint(startContainer, ancestor) || startContainer; + endPoint = findEndPoint(endContainer, ancestor) || endContainer; + + // Walk left leaf + walkBoundary(startContainer, startPoint, true); + + // Walk the middle from start to end point + siblings = collectSiblings( + startPoint == startContainer ? startPoint : startPoint.nextSibling, + 'nextSibling', + endPoint == endContainer ? endPoint.nextSibling : endPoint + ); + + if (siblings.length) { + callback(exclude(siblings)); + } + + // Walk right leaf + walkBoundary(endContainer, endPoint); + }; + + /** + * Splits the specified range at it's start/end points. + * + * @private + * @param {Range/RangeObject} rng Range to split. + * @return {Object} Range position object. + */ + this.split = function(rng) { + var startContainer = rng.startContainer, + startOffset = rng.startOffset, + endContainer = rng.endContainer, + endOffset = rng.endOffset; + + function splitText(node, offset) { + return node.splitText(offset); + } + + // Handle single text node + if (startContainer == endContainer && startContainer.nodeType == 3) { + if (startOffset > 0 && startOffset < startContainer.nodeValue.length) { + endContainer = splitText(startContainer, startOffset); + startContainer = endContainer.previousSibling; + + if (endOffset > startOffset) { + endOffset = endOffset - startOffset; + startContainer = endContainer = splitText(endContainer, endOffset).previousSibling; + endOffset = endContainer.nodeValue.length; + startOffset = 0; + } else { + endOffset = 0; + } + } + } else { + // Split startContainer text node if needed + if (startContainer.nodeType == 3 && startOffset > 0 && startOffset < startContainer.nodeValue.length) { + startContainer = splitText(startContainer, startOffset); + startOffset = 0; + } + + // Split endContainer text node if needed + if (endContainer.nodeType == 3 && endOffset > 0 && endOffset < endContainer.nodeValue.length) { + endContainer = splitText(endContainer, endOffset).previousSibling; + endOffset = endContainer.nodeValue.length; + } + } + + return { + startContainer: startContainer, + startOffset: startOffset, + endContainer: endContainer, + endOffset: endOffset + }; + }; + + /** + * Normalizes the specified range by finding the closest best suitable caret location. + * + * @private + * @param {Range} rng Range to normalize. + * @return {Boolean} True/false if the specified range was normalized or not. + */ + this.normalize = function(rng) { + var normalized, collapsed; + + function normalizeEndPoint(start) { + var container, offset, walker, body = dom.getRoot(), node, nonEmptyElementsMap, nodeName; + var directionLeft, isAfterNode; + + function hasBrBeforeAfter(node, left) { + var walker = new TreeWalker(node, dom.getParent(node.parentNode, dom.isBlock) || body); + + while ((node = walker[left ? 'prev' : 'next']())) { + if (node.nodeName === "BR") { + return true; + } + } + } + + function isPrevNode(node, name) { + return node.previousSibling && node.previousSibling.nodeName == name; + } + + // Walks the dom left/right to find a suitable text node to move the endpoint into + // It will only walk within the current parent block or body and will stop if it hits a block or a BR/IMG + function findTextNodeRelative(left, startNode) { + var walker, lastInlineElement, parentBlockContainer; + + startNode = startNode || container; + parentBlockContainer = dom.getParent(startNode.parentNode, dom.isBlock) || body; + + // Lean left before the BR element if it's the only BR within a block element. Gecko bug: #6680 + // This:


    |

    becomes

    |

    + if (left && startNode.nodeName == 'BR' && isAfterNode && dom.isEmpty(parentBlockContainer)) { + container = startNode.parentNode; + offset = dom.nodeIndex(startNode); + normalized = true; + return; + } + + // Walk left until we hit a text node we can move to or a block/br/img + walker = new TreeWalker(startNode, parentBlockContainer); + while ((node = walker[left ? 'prev' : 'next']())) { + // Found text node that has a length + if (node.nodeType === 3 && node.nodeValue.length > 0) { + container = node; + offset = left ? node.nodeValue.length : 0; + normalized = true; + return; + } + + // Break if we find a block or a BR/IMG/INPUT etc + if (dom.isBlock(node) || nonEmptyElementsMap[node.nodeName.toLowerCase()]) { + return; + } + + lastInlineElement = node; + } + + // Only fetch the last inline element when in caret mode for now + if (collapsed && lastInlineElement) { + container = lastInlineElement; + normalized = true; + offset = 0; + } + } + + container = rng[(start ? 'start' : 'end') + 'Container']; + offset = rng[(start ? 'start' : 'end') + 'Offset']; + isAfterNode = container.nodeType == 1 && offset === container.childNodes.length; + nonEmptyElementsMap = dom.schema.getNonEmptyElements(); + directionLeft = start; + + if (container.nodeType == 1 && offset > container.childNodes.length - 1) { + directionLeft = false; + } + + // If the container is a document move it to the body element + if (container.nodeType === 9) { + container = dom.getRoot(); + offset = 0; + } + + // If the container is body try move it into the closest text node or position + if (container === body) { + // If start is before/after a image, table etc + if (directionLeft) { + node = container.childNodes[offset > 0 ? offset - 1 : 0]; + if (node) { + nodeName = node.nodeName.toLowerCase(); + if (nonEmptyElementsMap[node.nodeName] || node.nodeName == "TABLE") { + return; + } + } + } + + // Resolve the index + if (container.hasChildNodes()) { + offset = Math.min(!directionLeft && offset > 0 ? offset - 1 : offset, container.childNodes.length - 1); + container = container.childNodes[offset]; + offset = 0; + + // Don't walk into elements that doesn't have any child nodes like a IMG + if (container.hasChildNodes() && !/TABLE/.test(container.nodeName)) { + // Walk the DOM to find a text node to place the caret at or a BR + node = container; + walker = new TreeWalker(container, body); + + do { + // Found a text node use that position + if (node.nodeType === 3 && node.nodeValue.length > 0) { + offset = directionLeft ? 0 : node.nodeValue.length; + container = node; + normalized = true; + break; + } + + // Found a BR/IMG element that we can place the caret before + if (nonEmptyElementsMap[node.nodeName.toLowerCase()]) { + offset = dom.nodeIndex(node); + container = node.parentNode; + + // Put caret after image when moving the end point + if (node.nodeName == "IMG" && !directionLeft) { + offset++; + } + + normalized = true; + break; + } + } while ((node = (directionLeft ? walker.next() : walker.prev()))); + } + } + } + + // Lean the caret to the left if possible + if (collapsed) { + // So this: x|x + // Becomes: x|x + // Seems that only gecko has issues with this + if (container.nodeType === 3 && offset === 0) { + findTextNodeRelative(true); + } + + // Lean left into empty inline elements when the caret is before a BR + // So this: |
    + // Becomes: |
    + // Seems that only gecko has issues with this. + // Special edge case for

    x|

    since we don't want

    x|

    + if (container.nodeType === 1) { + node = container.childNodes[offset]; + + // Offset is after the containers last child + // then use the previous child for normalization + if (!node) { + node = container.childNodes[offset - 1]; + } + + if (node && node.nodeName === 'BR' && !isPrevNode(node, 'A') && + !hasBrBeforeAfter(node) && !hasBrBeforeAfter(node, true)) { + findTextNodeRelative(true, node); + } + } + } + + // Lean the start of the selection right if possible + // So this: x[x] + // Becomes: x[x] + if (directionLeft && !collapsed && container.nodeType === 3 && offset === container.nodeValue.length) { + findTextNodeRelative(false); + } + + // Set endpoint if it was normalized + if (normalized) { + rng['set' + (start ? 'Start' : 'End')](container, offset); + } + } + + collapsed = rng.collapsed; + + normalizeEndPoint(true); + + if (!collapsed) { + normalizeEndPoint(); + } + + // If it was collapsed then make sure it still is + if (normalized && collapsed) { + rng.collapse(true); + } + + return normalized; + }; + } + + /** + * Compares two ranges and checks if they are equal. + * + * @static + * @method compareRanges + * @param {DOMRange} rng1 First range to compare. + * @param {DOMRange} rng2 First range to compare. + * @return {Boolean} true/false if the ranges are equal. + */ + RangeUtils.compareRanges = function(rng1, rng2) { + if (rng1 && rng2) { + // Compare native IE ranges + if (rng1.item || rng1.duplicate) { + // Both are control ranges and the selected element matches + if (rng1.item && rng2.item && rng1.item(0) === rng2.item(0)) { + return true; + } + + // Both are text ranges and the range matches + if (rng1.isEqual && rng2.isEqual && rng2.isEqual(rng1)) { + return true; + } + } else { + // Compare w3c ranges + return rng1.startContainer == rng2.startContainer && rng1.startOffset == rng2.startOffset; + } + } + + return false; + }; + + return RangeUtils; +}); diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/dom/ScriptLoader.js b/common/static/js/vendor/tinymce/js/tinymce/classes/dom/ScriptLoader.js new file mode 100755 index 0000000000..89c0466971 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/dom/ScriptLoader.js @@ -0,0 +1,255 @@ +/** + * ScriptLoader.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*globals console*/ + +/** + * This class handles asynchronous/synchronous loading of JavaScript files it will execute callbacks + * when various items gets loaded. This class is useful to load external JavaScript files. + * + * @class tinymce.dom.ScriptLoader + * @example + * // Load a script from a specific URL using the global script loader + * tinymce.ScriptLoader.load('somescript.js'); + * + * // Load a script using a unique instance of the script loader + * var scriptLoader = new tinymce.dom.ScriptLoader(); + * + * scriptLoader.load('somescript.js'); + * + * // Load multiple scripts + * var scriptLoader = new tinymce.dom.ScriptLoader(); + * + * scriptLoader.add('somescript1.js'); + * scriptLoader.add('somescript2.js'); + * scriptLoader.add('somescript3.js'); + * + * scriptLoader.loadQueue(function() { + * alert('All scripts are now loaded.'); + * }); + */ +define("tinymce/dom/ScriptLoader", [ + "tinymce/dom/DOMUtils", + "tinymce/util/Tools" +], function(DOMUtils, Tools) { + var DOM = DOMUtils.DOM; + var each = Tools.each, grep = Tools.grep; + + function ScriptLoader() { + var QUEUED = 0, + LOADING = 1, + LOADED = 2, + states = {}, + queue = [], + scriptLoadedCallbacks = {}, + queueLoadedCallbacks = [], + loading = 0, + undef; + + /** + * Loads a specific script directly without adding it to the load queue. + * + * @method load + * @param {String} url Absolute URL to script to add. + * @param {function} callback Optional callback function to execute ones this script gets loaded. + * @param {Object} scope Optional scope to execute callback in. + */ + function loadScript(url, callback) { + var dom = DOM, elm, id; + + // Execute callback when script is loaded + function done() { + dom.remove(id); + + if (elm) { + elm.onreadystatechange = elm.onload = elm = null; + } + + callback(); + } + + function error() { + /*eslint no-console:0 */ + + // Report the error so it's easier for people to spot loading errors + if (typeof(console) !== "undefined" && console.log) { + console.log("Failed to load: " + url); + } + + // We can't mark it as done if there is a load error since + // A) We don't want to produce 404 errors on the server and + // B) the onerror event won't fire on all browsers. + // done(); + } + + id = dom.uniqueId(); + + // Create new script element + elm = document.createElement('script'); + elm.id = id; + elm.type = 'text/javascript'; + elm.src = url; + + // Seems that onreadystatechange works better on IE 10 onload seems to fire incorrectly + if ("onreadystatechange" in elm) { + elm.onreadystatechange = function() { + if (/loaded|complete/.test(elm.readyState)) { + done(); + } + }; + } else { + elm.onload = done; + } + + // Add onerror event will get fired on some browsers but not all of them + elm.onerror = error; + + // Add script to document + (document.getElementsByTagName('head')[0] || document.body).appendChild(elm); + } + + /** + * Returns true/false if a script has been loaded or not. + * + * @method isDone + * @param {String} url URL to check for. + * @return {Boolean} true/false if the URL is loaded. + */ + this.isDone = function(url) { + return states[url] == LOADED; + }; + + /** + * Marks a specific script to be loaded. This can be useful if a script got loaded outside + * the script loader or to skip it from loading some script. + * + * @method markDone + * @param {string} u Absolute URL to the script to mark as loaded. + */ + this.markDone = function(url) { + states[url] = LOADED; + }; + + /** + * Adds a specific script to the load queue of the script loader. + * + * @method add + * @param {String} url Absolute URL to script to add. + * @param {function} callback Optional callback function to execute ones this script gets loaded. + * @param {Object} scope Optional scope to execute callback in. + */ + this.add = this.load = function(url, callback, scope) { + var state = states[url]; + + // Add url to load queue + if (state == undef) { + queue.push(url); + states[url] = QUEUED; + } + + if (callback) { + // Store away callback for later execution + if (!scriptLoadedCallbacks[url]) { + scriptLoadedCallbacks[url] = []; + } + + scriptLoadedCallbacks[url].push({ + func: callback, + scope: scope || this + }); + } + }; + + /** + * Starts the loading of the queue. + * + * @method loadQueue + * @param {function} callback Optional callback to execute when all queued items are loaded. + * @param {Object} scope Optional scope to execute the callback in. + */ + this.loadQueue = function(callback, scope) { + this.loadScripts(queue, callback, scope); + }; + + /** + * Loads the specified queue of files and executes the callback ones they are loaded. + * This method is generally not used outside this class but it might be useful in some scenarios. + * + * @method loadScripts + * @param {Array} scripts Array of queue items to load. + * @param {function} callback Optional callback to execute ones all items are loaded. + * @param {Object} scope Optional scope to execute callback in. + */ + this.loadScripts = function(scripts, callback, scope) { + var loadScripts; + + function execScriptLoadedCallbacks(url) { + // Execute URL callback functions + each(scriptLoadedCallbacks[url], function(callback) { + callback.func.call(callback.scope); + }); + + scriptLoadedCallbacks[url] = undef; + } + + queueLoadedCallbacks.push({ + func: callback, + scope: scope || this + }); + + loadScripts = function() { + var loadingScripts = grep(scripts); + + // Current scripts has been handled + scripts.length = 0; + + // Load scripts that needs to be loaded + each(loadingScripts, function(url) { + // Script is already loaded then execute script callbacks directly + if (states[url] == LOADED) { + execScriptLoadedCallbacks(url); + return; + } + + // Is script not loading then start loading it + if (states[url] != LOADING) { + states[url] = LOADING; + loading++; + + loadScript(url, function() { + states[url] = LOADED; + loading--; + + execScriptLoadedCallbacks(url); + + // Load more scripts if they where added by the recently loaded script + loadScripts(); + }); + } + }); + + // No scripts are currently loading then execute all pending queue loaded callbacks + if (!loading) { + each(queueLoadedCallbacks, function(callback) { + callback.func.call(callback.scope); + }); + + queueLoadedCallbacks.length = 0; + } + }; + + loadScripts(); + }; + } + + ScriptLoader.ScriptLoader = new ScriptLoader(); + + return ScriptLoader; +}); diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/dom/Selection.js b/common/static/js/vendor/tinymce/js/tinymce/classes/dom/Selection.js new file mode 100755 index 0000000000..aa132875d5 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/dom/Selection.js @@ -0,0 +1,1259 @@ +/** + * Selection.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class handles text and control selection it's an crossbrowser utility class. + * Consult the TinyMCE Wiki API for more details and examples on how to use this class. + * + * @class tinymce.dom.Selection + * @example + * // Getting the currently selected node for the active editor + * alert(tinymce.activeEditor.selection.getNode().nodeName); + */ +define("tinymce/dom/Selection", [ + "tinymce/dom/TreeWalker", + "tinymce/dom/TridentSelection", + "tinymce/dom/ControlSelection", + "tinymce/dom/RangeUtils", + "tinymce/Env", + "tinymce/util/Tools" +], function(TreeWalker, TridentSelection, ControlSelection, RangeUtils, Env, Tools) { + var each = Tools.each, grep = Tools.grep, trim = Tools.trim; + var isIE = Env.ie, isOpera = Env.opera; + + /** + * Constructs a new selection instance. + * + * @constructor + * @method Selection + * @param {tinymce.dom.DOMUtils} dom DOMUtils object reference. + * @param {Window} win Window to bind the selection object to. + * @param {tinymce.dom.Serializer} serializer DOM serialization class to use for getContent. + */ + function Selection(dom, win, serializer, editor) { + var self = this; + + self.dom = dom; + self.win = win; + self.serializer = serializer; + self.editor = editor; + + self.controlSelection = new ControlSelection(self, editor); + + // No W3C Range support + if (!self.win.getSelection) { + self.tridentSel = new TridentSelection(self); + } + } + + Selection.prototype = { + /** + * Move the selection cursor range to the specified node and offset. + * If there is no node specified it will move it to the first suitable location within the body. + * + * @method setCursorLocation + * @param {Node} node Optional node to put the cursor in. + * @param {Number} offset Optional offset from the start of the node to put the cursor at. + */ + setCursorLocation: function(node, offset) { + var self = this, rng = self.dom.createRng(); + + if (!node) { + self._moveEndPoint(rng, self.editor.getBody(), true); + self.setRng(rng); + } else { + rng.setStart(node, offset); + rng.setEnd(node, offset); + self.setRng(rng); + self.collapse(false); + } + }, + + /** + * Returns the selected contents using the DOM serializer passed in to this class. + * + * @method getContent + * @param {Object} s Optional settings class with for example output format text or html. + * @return {String} Selected contents in for example HTML format. + * @example + * // Alerts the currently selected contents + * alert(tinymce.activeEditor.selection.getContent()); + * + * // Alerts the currently selected contents as plain text + * alert(tinymce.activeEditor.selection.getContent({format: 'text'})); + */ + getContent: function(args) { + var self = this, rng = self.getRng(), tmpElm = self.dom.create("body"); + var se = self.getSel(), whiteSpaceBefore, whiteSpaceAfter, fragment; + + args = args || {}; + whiteSpaceBefore = whiteSpaceAfter = ''; + args.get = true; + args.format = args.format || 'html'; + args.selection = true; + self.editor.fire('BeforeGetContent', args); + + if (args.format == 'text') { + return self.isCollapsed() ? '' : (rng.text || (se.toString ? se.toString() : '')); + } + + if (rng.cloneContents) { + fragment = rng.cloneContents(); + + if (fragment) { + tmpElm.appendChild(fragment); + } + } else if (rng.item !== undefined || rng.htmlText !== undefined) { + // IE will produce invalid markup if elements are present that + // it doesn't understand like custom elements or HTML5 elements. + // Adding a BR in front of the contents and then remoiving it seems to fix it though. + tmpElm.innerHTML = '
    ' + (rng.item ? rng.item(0).outerHTML : rng.htmlText); + tmpElm.removeChild(tmpElm.firstChild); + } else { + tmpElm.innerHTML = rng.toString(); + } + + // Keep whitespace before and after + if (/^\s/.test(tmpElm.innerHTML)) { + whiteSpaceBefore = ' '; + } + + if (/\s+$/.test(tmpElm.innerHTML)) { + whiteSpaceAfter = ' '; + } + + args.getInner = true; + + args.content = self.isCollapsed() ? '' : whiteSpaceBefore + self.serializer.serialize(tmpElm, args) + whiteSpaceAfter; + self.editor.fire('GetContent', args); + + return args.content; + }, + + /** + * Sets the current selection to the specified content. If any contents is selected it will be replaced + * with the contents passed in to this function. If there is no selection the contents will be inserted + * where the caret is placed in the editor/page. + * + * @method setContent + * @param {String} content HTML contents to set could also be other formats depending on settings. + * @param {Object} args Optional settings object with for example data format. + * @example + * // Inserts some HTML contents at the current selection + * tinymce.activeEditor.selection.setContent('Some contents'); + */ + setContent: function(content, args) { + var self = this, rng = self.getRng(), caretNode, doc = self.win.document, frag, temp; + + args = args || {format: 'html'}; + args.set = true; + args.selection = true; + content = args.content = content; + + // Dispatch before set content event + if (!args.no_events) { + self.editor.fire('BeforeSetContent', args); + } + + content = args.content; + + if (rng.insertNode) { + // Make caret marker since insertNode places the caret in the beginning of text after insert + content += '_'; + + // Delete and insert new node + if (rng.startContainer == doc && rng.endContainer == doc) { + // WebKit will fail if the body is empty since the range is then invalid and it can't insert contents + doc.body.innerHTML = content; + } else { + rng.deleteContents(); + + if (doc.body.childNodes.length === 0) { + doc.body.innerHTML = content; + } else { + // createContextualFragment doesn't exists in IE 9 DOMRanges + if (rng.createContextualFragment) { + rng.insertNode(rng.createContextualFragment(content)); + } else { + // Fake createContextualFragment call in IE 9 + frag = doc.createDocumentFragment(); + temp = doc.createElement('div'); + + frag.appendChild(temp); + temp.outerHTML = content; + + rng.insertNode(frag); + } + } + } + + // Move to caret marker + caretNode = self.dom.get('__caret'); + + // Make sure we wrap it compleatly, Opera fails with a simple select call + rng = doc.createRange(); + rng.setStartBefore(caretNode); + rng.setEndBefore(caretNode); + self.setRng(rng); + + // Remove the caret position + self.dom.remove('__caret'); + + try { + self.setRng(rng); + } catch (ex) { + // Might fail on Opera for some odd reason + } + } else { + if (rng.item) { + // Delete content and get caret text selection + doc.execCommand('Delete', false, null); + rng = self.getRng(); + } + + // Explorer removes spaces from the beginning of pasted contents + if (/^\s+/.test(content)) { + rng.pasteHTML('_' + content); + self.dom.remove('__mce_tmp'); + } else { + rng.pasteHTML(content); + } + } + + // Dispatch set content event + if (!args.no_events) { + self.editor.fire('SetContent', args); + } + }, + + /** + * Returns the start element of a selection range. If the start is in a text + * node the parent element will be returned. + * + * @method getStart + * @return {Element} Start element of selection range. + */ + getStart: function() { + var self = this, rng = self.getRng(), startElement, parentElement, checkRng, node; + + if (rng.duplicate || rng.item) { + // Control selection, return first item + if (rng.item) { + return rng.item(0); + } + + // Get start element + checkRng = rng.duplicate(); + checkRng.collapse(1); + startElement = checkRng.parentElement(); + if (startElement.ownerDocument !== self.dom.doc) { + startElement = self.dom.getRoot(); + } + + // Check if range parent is inside the start element, then return the inner parent element + // This will fix issues when a single element is selected, IE would otherwise return the wrong start element + parentElement = node = rng.parentElement(); + while ((node = node.parentNode)) { + if (node == startElement) { + startElement = parentElement; + break; + } + } + + return startElement; + } else { + startElement = rng.startContainer; + + if (startElement.nodeType == 1 && startElement.hasChildNodes()) { + startElement = startElement.childNodes[Math.min(startElement.childNodes.length - 1, rng.startOffset)]; + } + + if (startElement && startElement.nodeType == 3) { + return startElement.parentNode; + } + + return startElement; + } + }, + + /** + * Returns the end element of a selection range. If the end is in a text + * node the parent element will be returned. + * + * @method getEnd + * @return {Element} End element of selection range. + */ + getEnd: function() { + var self = this, rng = self.getRng(), endElement, endOffset; + + if (rng.duplicate || rng.item) { + if (rng.item) { + return rng.item(0); + } + + rng = rng.duplicate(); + rng.collapse(0); + endElement = rng.parentElement(); + if (endElement.ownerDocument !== self.dom.doc) { + endElement = self.dom.getRoot(); + } + + if (endElement && endElement.nodeName == 'BODY') { + return endElement.lastChild || endElement; + } + + return endElement; + } else { + endElement = rng.endContainer; + endOffset = rng.endOffset; + + if (endElement.nodeType == 1 && endElement.hasChildNodes()) { + endElement = endElement.childNodes[endOffset > 0 ? endOffset - 1 : endOffset]; + } + + if (endElement && endElement.nodeType == 3) { + return endElement.parentNode; + } + + return endElement; + } + }, + + /** + * Returns a bookmark location for the current selection. This bookmark object + * can then be used to restore the selection after some content modification to the document. + * + * @method getBookmark + * @param {Number} type Optional state if the bookmark should be simple or not. Default is complex. + * @param {Boolean} normalized Optional state that enables you to get a position that it would be after normalization. + * @return {Object} Bookmark object, use moveToBookmark with this object to restore the selection. + * @example + * // Stores a bookmark of the current selection + * var bm = tinymce.activeEditor.selection.getBookmark(); + * + * tinymce.activeEditor.setContent(tinymce.activeEditor.getContent() + 'Some new content'); + * + * // Restore the selection bookmark + * tinymce.activeEditor.selection.moveToBookmark(bm); + */ + getBookmark: function(type, normalized) { + var self = this, dom = self.dom, rng, rng2, id, collapsed, name, element, chr = '', styles; + + function findIndex(name, element) { + var index = 0; + + each(dom.select(name), function(node, i) { + if (node == element) { + index = i; + } + }); + + return index; + } + + function normalizeTableCellSelection(rng) { + function moveEndPoint(start) { + var container, offset, childNodes, prefix = start ? 'start' : 'end'; + + container = rng[prefix + 'Container']; + offset = rng[prefix + 'Offset']; + + if (container.nodeType == 1 && container.nodeName == "TR") { + childNodes = container.childNodes; + container = childNodes[Math.min(start ? offset : offset - 1, childNodes.length - 1)]; + if (container) { + offset = start ? 0 : container.childNodes.length; + rng['set' + (start ? 'Start' : 'End')](container, offset); + } + } + } + + moveEndPoint(true); + moveEndPoint(); + + return rng; + } + + function getLocation() { + var rng = self.getRng(true), root = dom.getRoot(), bookmark = {}; + + function getPoint(rng, start) { + var container = rng[start ? 'startContainer' : 'endContainer'], + offset = rng[start ? 'startOffset' : 'endOffset'], point = [], node, childNodes, after = 0; + + if (container.nodeType == 3) { + if (normalized) { + for (node = container.previousSibling; node && node.nodeType == 3; node = node.previousSibling) { + offset += node.nodeValue.length; + } + } + + point.push(offset); + } else { + childNodes = container.childNodes; + + if (offset >= childNodes.length && childNodes.length) { + after = 1; + offset = Math.max(0, childNodes.length - 1); + } + + point.push(self.dom.nodeIndex(childNodes[offset], normalized) + after); + } + + for (; container && container != root; container = container.parentNode) { + point.push(self.dom.nodeIndex(container, normalized)); + } + + return point; + } + + bookmark.start = getPoint(rng, true); + + if (!self.isCollapsed()) { + bookmark.end = getPoint(rng); + } + + return bookmark; + } + + if (type == 2) { + element = self.getNode(); + name = element ? element.nodeName : null; + + if (name == 'IMG') { + return {name: name, index: findIndex(name, element)}; + } + + if (self.tridentSel) { + return self.tridentSel.getBookmark(type); + } + + return getLocation(); + } + + // Handle simple range + if (type) { + return {rng: self.getRng()}; + } + + rng = self.getRng(); + id = dom.uniqueId(); + collapsed = self.isCollapsed(); + styles = 'overflow:hidden;line-height:0px'; + + // Explorer method + if (rng.duplicate || rng.item) { + // Text selection + if (!rng.item) { + rng2 = rng.duplicate(); + + try { + // Insert start marker + rng.collapse(); + rng.pasteHTML('' + chr + ''); + + // Insert end marker + if (!collapsed) { + rng2.collapse(false); + + // Detect the empty space after block elements in IE and move the + // end back one character

    ] becomes

    ]

    + rng.moveToElementText(rng2.parentElement()); + if (rng.compareEndPoints('StartToEnd', rng2) === 0) { + rng2.move('character', -1); + } + + rng2.pasteHTML('' + chr + ''); + } + } catch (ex) { + // IE might throw unspecified error so lets ignore it + return null; + } + } else { + // Control selection + element = rng.item(0); + name = element.nodeName; + + return {name: name, index: findIndex(name, element)}; + } + } else { + element = self.getNode(); + name = element.nodeName; + if (name == 'IMG') { + return {name: name, index: findIndex(name, element)}; + } + + // W3C method + rng2 = normalizeTableCellSelection(rng.cloneRange()); + + // Insert end marker + if (!collapsed) { + rng2.collapse(false); + rng2.insertNode(dom.create('span', {'data-mce-type': "bookmark", id: id + '_end', style: styles}, chr)); + } + + rng = normalizeTableCellSelection(rng); + rng.collapse(true); + rng.insertNode(dom.create('span', {'data-mce-type': "bookmark", id: id + '_start', style: styles}, chr)); + } + + self.moveToBookmark({id: id, keep: 1}); + + return {id: id}; + }, + + /** + * Restores the selection to the specified bookmark. + * + * @method moveToBookmark + * @param {Object} bookmark Bookmark to restore selection from. + * @return {Boolean} true/false if it was successful or not. + * @example + * // Stores a bookmark of the current selection + * var bm = tinymce.activeEditor.selection.getBookmark(); + * + * tinymce.activeEditor.setContent(tinymce.activeEditor.getContent() + 'Some new content'); + * + * // Restore the selection bookmark + * tinymce.activeEditor.selection.moveToBookmark(bm); + */ + moveToBookmark: function(bookmark) { + var self = this, dom = self.dom, rng, root, startContainer, endContainer, startOffset, endOffset; + + function setEndPoint(start) { + var point = bookmark[start ? 'start' : 'end'], i, node, offset, children; + + if (point) { + offset = point[0]; + + // Find container node + for (node = root, i = point.length - 1; i >= 1; i--) { + children = node.childNodes; + + if (point[i] > children.length - 1) { + return; + } + + node = children[point[i]]; + } + + // Move text offset to best suitable location + if (node.nodeType === 3) { + offset = Math.min(point[0], node.nodeValue.length); + } + + // Move element offset to best suitable location + if (node.nodeType === 1) { + offset = Math.min(point[0], node.childNodes.length); + } + + // Set offset within container node + if (start) { + rng.setStart(node, offset); + } else { + rng.setEnd(node, offset); + } + } + + return true; + } + + function restoreEndPoint(suffix) { + var marker = dom.get(bookmark.id + '_' + suffix), node, idx, next, prev, keep = bookmark.keep; + + if (marker) { + node = marker.parentNode; + + if (suffix == 'start') { + if (!keep) { + idx = dom.nodeIndex(marker); + } else { + node = marker.firstChild; + idx = 1; + } + + startContainer = endContainer = node; + startOffset = endOffset = idx; + } else { + if (!keep) { + idx = dom.nodeIndex(marker); + } else { + node = marker.firstChild; + idx = 1; + } + + endContainer = node; + endOffset = idx; + } + + if (!keep) { + prev = marker.previousSibling; + next = marker.nextSibling; + + // Remove all marker text nodes + each(grep(marker.childNodes), function(node) { + if (node.nodeType == 3) { + node.nodeValue = node.nodeValue.replace(/\uFEFF/g, ''); + } + }); + + // Remove marker but keep children if for example contents where inserted into the marker + // Also remove duplicated instances of the marker for example by a + // split operation or by WebKit auto split on paste feature + while ((marker = dom.get(bookmark.id + '_' + suffix))) { + dom.remove(marker, 1); + } + + // If siblings are text nodes then merge them unless it's Opera since it some how removes the node + // and we are sniffing since adding a lot of detection code for a browser with 3% of the market + // isn't worth the effort. Sorry, Opera but it's just a fact + if (prev && next && prev.nodeType == next.nodeType && prev.nodeType == 3 && !isOpera) { + idx = prev.nodeValue.length; + prev.appendData(next.nodeValue); + dom.remove(next); + + if (suffix == 'start') { + startContainer = endContainer = prev; + startOffset = endOffset = idx; + } else { + endContainer = prev; + endOffset = idx; + } + } + } + } + } + + function addBogus(node) { + // Adds a bogus BR element for empty block elements + if (dom.isBlock(node) && !node.innerHTML && !isIE) { + node.innerHTML = '
    '; + } + + return node; + } + + if (bookmark) { + if (bookmark.start) { + rng = dom.createRng(); + root = dom.getRoot(); + + if (self.tridentSel) { + return self.tridentSel.moveToBookmark(bookmark); + } + + if (setEndPoint(true) && setEndPoint()) { + self.setRng(rng); + } + } else if (bookmark.id) { + // Restore start/end points + restoreEndPoint('start'); + restoreEndPoint('end'); + + if (startContainer) { + rng = dom.createRng(); + rng.setStart(addBogus(startContainer), startOffset); + rng.setEnd(addBogus(endContainer), endOffset); + self.setRng(rng); + } + } else if (bookmark.name) { + self.select(dom.select(bookmark.name)[bookmark.index]); + } else if (bookmark.rng) { + self.setRng(bookmark.rng); + } + } + }, + + /** + * Selects the specified element. This will place the start and end of the selection range around the element. + * + * @method select + * @param {Element} node HMTL DOM element to select. + * @param {Boolean} content Optional bool state if the contents should be selected or not on non IE browser. + * @return {Element} Selected element the same element as the one that got passed in. + * @example + * // Select the first paragraph in the active editor + * tinymce.activeEditor.selection.select(tinymce.activeEditor.dom.select('p')[0]); + */ + select: function(node, content) { + var self = this, dom = self.dom, rng = dom.createRng(), idx; + + // Clear stored range set by FocusManager + self.lastFocusBookmark = null; + + if (node) { + if (!content && self.controlSelection.controlSelect(node)) { + return; + } + + idx = dom.nodeIndex(node); + rng.setStart(node.parentNode, idx); + rng.setEnd(node.parentNode, idx + 1); + + // Find first/last text node or BR element + if (content) { + self._moveEndPoint(rng, node, true); + self._moveEndPoint(rng, node); + } + + self.setRng(rng); + } + + return node; + }, + + /** + * Returns true/false if the selection range is collapsed or not. Collapsed means if it's a caret or a larger selection. + * + * @method isCollapsed + * @return {Boolean} true/false state if the selection range is collapsed or not. + * Collapsed means if it's a caret or a larger selection. + */ + isCollapsed: function() { + var self = this, rng = self.getRng(), sel = self.getSel(); + + if (!rng || rng.item) { + return false; + } + + if (rng.compareEndPoints) { + return rng.compareEndPoints('StartToEnd', rng) === 0; + } + + return !sel || rng.collapsed; + }, + + /** + * Collapse the selection to start or end of range. + * + * @method collapse + * @param {Boolean} to_start Optional boolean state if to collapse to end or not. Defaults to start. + */ + collapse: function(to_start) { + var self = this, rng = self.getRng(), node; + + // Control range on IE + if (rng.item) { + node = rng.item(0); + rng = self.win.document.body.createTextRange(); + rng.moveToElementText(node); + } + + rng.collapse(!!to_start); + self.setRng(rng); + }, + + /** + * Returns the browsers internal selection object. + * + * @method getSel + * @return {Selection} Internal browser selection object. + */ + getSel: function() { + var win = this.win; + + return win.getSelection ? win.getSelection() : win.document.selection; + }, + + /** + * Returns the browsers internal range object. + * + * @method getRng + * @param {Boolean} w3c Forces a compatible W3C range on IE. + * @return {Range} Internal browser range object. + * @see http://www.quirksmode.org/dom/range_intro.html + * @see http://www.dotvoid.com/2001/03/using-the-range-object-in-mozilla/ + */ + getRng: function(w3c) { + var self = this, selection, rng, elm, doc = self.win.document, ieRng; + + function tryCompareBounderyPoints(how, sourceRange, destinationRange) { + try { + return sourceRange.compareBoundaryPoints(how, destinationRange); + } catch (ex) { + // Gecko throws wrong document exception if the range points + // to nodes that where removed from the dom #6690 + // Browsers should mutate existing DOMRange instances so that they always point + // to something in the document this is not the case in Gecko works fine in IE/WebKit/Blink + // For performance reasons just return -1 + return -1; + } + } + + // Use last rng passed from FocusManager if it's available this enables + // calls to editor.selection.getStart() to work when caret focus is lost on IE + if (!w3c && self.lastFocusBookmark) { + var bookmark = self.lastFocusBookmark; + + // Convert bookmark to range IE 11 fix + if (bookmark.startContainer) { + rng = doc.createRange(); + rng.setStart(bookmark.startContainer, bookmark.startOffset); + rng.setEnd(bookmark.endContainer, bookmark.endOffset); + } else { + rng = bookmark; + } + + return rng; + } + + // Found tridentSel object then we need to use that one + if (w3c && self.tridentSel) { + return self.tridentSel.getRangeAt(0); + } + + try { + if ((selection = self.getSel())) { + if (selection.rangeCount > 0) { + rng = selection.getRangeAt(0); + } else { + rng = selection.createRange ? selection.createRange() : doc.createRange(); + } + } + } catch (ex) { + // IE throws unspecified error here if TinyMCE is placed in a frame/iframe + } + + // We have W3C ranges and it's IE then fake control selection since IE9 doesn't handle that correctly yet + // IE 11 doesn't support the selection object so we check for that as well + if (isIE && rng && rng.setStart && doc.selection) { + try { + // IE will sometimes throw an exception here + ieRng = doc.selection.createRange(); + } catch (ex) { + + } + + if (ieRng && ieRng.item) { + elm = ieRng.item(0); + rng = doc.createRange(); + rng.setStartBefore(elm); + rng.setEndAfter(elm); + } + } + + // No range found then create an empty one + // This can occur when the editor is placed in a hidden container element on Gecko + // Or on IE when there was an exception + if (!rng) { + rng = doc.createRange ? doc.createRange() : doc.body.createTextRange(); + } + + // If range is at start of document then move it to start of body + if (rng.setStart && rng.startContainer.nodeType === 9 && rng.collapsed) { + elm = self.dom.getRoot(); + rng.setStart(elm, 0); + rng.setEnd(elm, 0); + } + + if (self.selectedRange && self.explicitRange) { + if (tryCompareBounderyPoints(rng.START_TO_START, rng, self.selectedRange) === 0 && + tryCompareBounderyPoints(rng.END_TO_END, rng, self.selectedRange) === 0) { + // Safari, Opera and Chrome only ever select text which causes the range to change. + // This lets us use the originally set range if the selection hasn't been changed by the user. + rng = self.explicitRange; + } else { + self.selectedRange = null; + self.explicitRange = null; + } + } + + return rng; + }, + + /** + * Changes the selection to the specified DOM range. + * + * @method setRng + * @param {Range} rng Range to select. + */ + setRng: function(rng, forward) { + var self = this, sel; + + // Is IE specific range + if (rng.select) { + try { + rng.select(); + } catch (ex) { + // Needed for some odd IE bug #1843306 + } + + return; + } + + if (!self.tridentSel) { + sel = self.getSel(); + + if (sel) { + self.explicitRange = rng; + + try { + sel.removeAllRanges(); + sel.addRange(rng); + } catch (ex) { + // IE might throw errors here if the editor is within a hidden container and selection is changed + } + + // Forward is set to false and we have an extend function + if (forward === false && sel.extend) { + sel.collapse(rng.endContainer, rng.endOffset); + sel.extend(rng.startContainer, rng.startOffset); + } + + // adding range isn't always successful so we need to check range count otherwise an exception can occur + self.selectedRange = sel.rangeCount > 0 ? sel.getRangeAt(0) : null; + } + } else { + // Is W3C Range fake range on IE + if (rng.cloneRange) { + try { + self.tridentSel.addRange(rng); + return; + } catch (ex) { + //IE9 throws an error here if called before selection is placed in the editor + } + } + } + }, + + /** + * Sets the current selection to the specified DOM element. + * + * @method setNode + * @param {Element} elm Element to set as the contents of the selection. + * @return {Element} Returns the element that got passed in. + * @example + * // Inserts a DOM node at current selection/caret location + * tinymce.activeEditor.selection.setNode(tinymce.activeEditor.dom.create('img', {src: 'some.gif', title: 'some title'})); + */ + setNode: function(elm) { + var self = this; + + self.setContent(self.dom.getOuterHTML(elm)); + + return elm; + }, + + /** + * Returns the currently selected element or the common ancestor element for both start and end of the selection. + * + * @method getNode + * @return {Element} Currently selected element or common ancestor element. + * @example + * // Alerts the currently selected elements node name + * alert(tinymce.activeEditor.selection.getNode().nodeName); + */ + getNode: function() { + var self = this, rng = self.getRng(), elm; + var startContainer = rng.startContainer, endContainer = rng.endContainer; + var startOffset = rng.startOffset, endOffset = rng.endOffset, root = self.dom.getRoot(); + + function skipEmptyTextNodes(node, forwards) { + var orig = node; + + while (node && node.nodeType === 3 && node.length === 0) { + node = forwards ? node.nextSibling : node.previousSibling; + } + + return node || orig; + } + + // Range maybe lost after the editor is made visible again + if (!rng) { + return root; + } + + if (rng.setStart) { + elm = rng.commonAncestorContainer; + + // Handle selection a image or other control like element such as anchors + if (!rng.collapsed) { + if (startContainer == endContainer) { + if (endOffset - startOffset < 2) { + if (startContainer.hasChildNodes()) { + elm = startContainer.childNodes[startOffset]; + } + } + } + + // If the anchor node is a element instead of a text node then return this element + //if (tinymce.isWebKit && sel.anchorNode && sel.anchorNode.nodeType == 1) + // return sel.anchorNode.childNodes[sel.anchorOffset]; + + // Handle cases where the selection is immediately wrapped around a node and return that node instead of it's parent. + // This happens when you double click an underlined word in FireFox. + if (startContainer.nodeType === 3 && endContainer.nodeType === 3) { + if (startContainer.length === startOffset) { + startContainer = skipEmptyTextNodes(startContainer.nextSibling, true); + } else { + startContainer = startContainer.parentNode; + } + + if (endOffset === 0) { + endContainer = skipEmptyTextNodes(endContainer.previousSibling, false); + } else { + endContainer = endContainer.parentNode; + } + + if (startContainer && startContainer === endContainer) { + return startContainer; + } + } + } + + if (elm && elm.nodeType == 3) { + return elm.parentNode; + } + + return elm; + } + + elm = rng.item ? rng.item(0) : rng.parentElement(); + + // IE 7 might return elements outside the iframe + if (elm.ownerDocument !== self.win.document) { + elm = root; + } + + return elm; + }, + + getSelectedBlocks: function(startElm, endElm) { + var self = this, dom = self.dom, node, root, selectedBlocks = []; + + root = dom.getRoot(); + startElm = dom.getParent(startElm || self.getStart(), dom.isBlock); + endElm = dom.getParent(endElm || self.getEnd(), dom.isBlock); + + if (startElm && startElm != root) { + selectedBlocks.push(startElm); + } + + if (startElm && endElm && startElm != endElm) { + node = startElm; + + var walker = new TreeWalker(startElm, root); + while ((node = walker.next()) && node != endElm) { + if (dom.isBlock(node)) { + selectedBlocks.push(node); + } + } + } + + if (endElm && startElm != endElm && endElm != root) { + selectedBlocks.push(endElm); + } + + return selectedBlocks; + }, + + isForward: function() { + var dom = this.dom, sel = this.getSel(), anchorRange, focusRange; + + // No support for selection direction then always return true + if (!sel || !sel.anchorNode || !sel.focusNode) { + return true; + } + + anchorRange = dom.createRng(); + anchorRange.setStart(sel.anchorNode, sel.anchorOffset); + anchorRange.collapse(true); + + focusRange = dom.createRng(); + focusRange.setStart(sel.focusNode, sel.focusOffset); + focusRange.collapse(true); + + return anchorRange.compareBoundaryPoints(anchorRange.START_TO_START, focusRange) <= 0; + }, + + normalize: function() { + var self = this, rng = self.getRng(); + + if (!isIE && new RangeUtils(self.dom).normalize(rng)) { + self.setRng(rng, self.isForward()); + } + + return rng; + }, + + /** + * Executes callback of the current selection matches the specified selector or not and passes the state and args to the callback. + * + * @method selectorChanged + * @param {String} selector CSS selector to check for. + * @param {function} callback Callback with state and args when the selector is matches or not. + */ + selectorChanged: function(selector, callback) { + var self = this, currentSelectors; + + if (!self.selectorChangedData) { + self.selectorChangedData = {}; + currentSelectors = {}; + + self.editor.on('NodeChange', function(e) { + var node = e.element, dom = self.dom, parents = dom.getParents(node, null, dom.getRoot()), matchedSelectors = {}; + + // Check for new matching selectors + each(self.selectorChangedData, function(callbacks, selector) { + each(parents, function(node) { + if (dom.is(node, selector)) { + if (!currentSelectors[selector]) { + // Execute callbacks + each(callbacks, function(callback) { + callback(true, {node: node, selector: selector, parents: parents}); + }); + + currentSelectors[selector] = callbacks; + } + + matchedSelectors[selector] = callbacks; + return false; + } + }); + }); + + // Check if current selectors still match + each(currentSelectors, function(callbacks, selector) { + if (!matchedSelectors[selector]) { + delete currentSelectors[selector]; + + each(callbacks, function(callback) { + callback(false, {node: node, selector: selector, parents: parents}); + }); + } + }); + }); + } + + // Add selector listeners + if (!self.selectorChangedData[selector]) { + self.selectorChangedData[selector] = []; + } + + self.selectorChangedData[selector].push(callback); + + return self; + }, + + getScrollContainer: function() { + var scrollContainer, node = this.dom.getRoot(); + + while (node && node.nodeName != 'BODY') { + if (node.scrollHeight > node.clientHeight) { + scrollContainer = node; + break; + } + + node = node.parentNode; + } + + return scrollContainer; + }, + + scrollIntoView: function(elm) { + var y, viewPort, self = this, dom = self.dom, root = dom.getRoot(), viewPortY, viewPortH; + + function getPos(elm) { + var x = 0, y = 0; + + var offsetParent = elm; + while (offsetParent && offsetParent.nodeType) { + x += offsetParent.offsetLeft || 0; + y += offsetParent.offsetTop || 0; + offsetParent = offsetParent.offsetParent; + } + + return {x: x, y: y}; + } + + if (root.nodeName != 'BODY') { + var scrollContainer = self.getScrollContainer(); + if (scrollContainer) { + y = getPos(elm).y - getPos(scrollContainer).y; + viewPortH = scrollContainer.clientHeight; + viewPortY = scrollContainer.scrollTop; + if (y < viewPortY || y + 25 > viewPortY + viewPortH) { + scrollContainer.scrollTop = y < viewPortY ? y : y - viewPortH + 25; + } + + return; + } + } + + viewPort = dom.getViewPort(self.editor.getWin()); + y = dom.getPos(elm).y; + viewPortY = viewPort.y; + viewPortH = viewPort.h; + if (y < viewPort.y || y + 25 > viewPortY + viewPortH) { + self.editor.getWin().scrollTo(0, y < viewPortY ? y : y - viewPortH + 25); + } + }, + + _moveEndPoint: function(rng, node, start) { + var root = node, walker = new TreeWalker(node, root); + var nonEmptyElementsMap = this.dom.schema.getNonEmptyElements(); + + do { + // Text node + if (node.nodeType == 3 && trim(node.nodeValue).length !== 0) { + if (start) { + rng.setStart(node, 0); + } else { + rng.setEnd(node, node.nodeValue.length); + } + + return; + } + + // BR/IMG/INPUT elements + if (nonEmptyElementsMap[node.nodeName]) { + if (start) { + rng.setStartBefore(node); + } else { + if (node.nodeName == 'BR') { + rng.setEndBefore(node); + } else { + rng.setEndAfter(node); + } + } + + return; + } + + // Found empty text block old IE can place the selection inside those + if (Env.ie && Env.ie < 11 && this.dom.isBlock(node) && this.dom.isEmpty(node)) { + if (start) { + rng.setStart(node, 0); + } else { + rng.setEnd(node, 0); + } + + return; + } + } while ((node = (start ? walker.next() : walker.prev()))); + + // Failed to find any text node or other suitable location then move to the root of body + if (root.nodeName == 'BODY') { + if (start) { + rng.setStart(root, 0); + } else { + rng.setEnd(root, root.childNodes.length); + } + } + }, + + destroy: function() { + this.win = null; + this.controlSelection.destroy(); + } + }; + + return Selection; +}); diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/dom/Serializer.js b/common/static/js/vendor/tinymce/js/tinymce/classes/dom/Serializer.js new file mode 100755 index 0000000000..6607497bd3 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/dom/Serializer.js @@ -0,0 +1,387 @@ +/** + * Serializer.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class is used to serialize DOM trees into a string. Consult the TinyMCE Wiki API for + * more details and examples on how to use this class. + * + * @class tinymce.dom.Serializer + */ +define("tinymce/dom/Serializer", [ + "tinymce/dom/DOMUtils", + "tinymce/html/DomParser", + "tinymce/html/Entities", + "tinymce/html/Serializer", + "tinymce/html/Node", + "tinymce/html/Schema", + "tinymce/Env", + "tinymce/util/Tools" +], function(DOMUtils, DomParser, Entities, Serializer, Node, Schema, Env, Tools) { + var each = Tools.each, trim = Tools.trim; + var DOM = DOMUtils.DOM; + + /** + * Constructs a new DOM serializer class. + * + * @constructor + * @method Serializer + * @param {Object} settings Serializer settings object. + * @param {tinymce.Editor} editor Optional editor to bind events to and get schema/dom from. + */ + return function(settings, editor) { + var dom, schema, htmlParser; + + if (editor) { + dom = editor.dom; + schema = editor.schema; + } + + // Default DOM and Schema if they are undefined + dom = dom || DOM; + schema = schema || new Schema(settings); + settings.entity_encoding = settings.entity_encoding || 'named'; + settings.remove_trailing_brs = "remove_trailing_brs" in settings ? settings.remove_trailing_brs : true; + + htmlParser = new DomParser(settings, schema); + + // Convert move data-mce-src, data-mce-href and data-mce-style into nodes or process them if needed + htmlParser.addAttributeFilter('src,href,style', function(nodes, name) { + var i = nodes.length, node, value, internalName = 'data-mce-' + name; + var urlConverter = settings.url_converter, urlConverterScope = settings.url_converter_scope, undef; + + while (i--) { + node = nodes[i]; + + value = node.attributes.map[internalName]; + if (value !== undef) { + // Set external name to internal value and remove internal + node.attr(name, value.length > 0 ? value : null); + node.attr(internalName, null); + } else { + // No internal attribute found then convert the value we have in the DOM + value = node.attributes.map[name]; + + if (name === "style") { + value = dom.serializeStyle(dom.parseStyle(value), node.name); + } else if (urlConverter) { + value = urlConverter.call(urlConverterScope, value, name, node.name); + } + + node.attr(name, value.length > 0 ? value : null); + } + } + }); + + // Remove internal classes mceItem<..> or mceSelected + htmlParser.addAttributeFilter('class', function(nodes) { + var i = nodes.length, node, value; + + while (i--) { + node = nodes[i]; + value = node.attr('class').replace(/(?:^|\s)mce-item-\w+(?!\S)/g, ''); + node.attr('class', value.length > 0 ? value : null); + } + }); + + // Remove bookmark elements + htmlParser.addAttributeFilter('data-mce-type', function(nodes, name, args) { + var i = nodes.length, node; + + while (i--) { + node = nodes[i]; + + if (node.attributes.map['data-mce-type'] === 'bookmark' && !args.cleanup) { + node.remove(); + } + } + }); + + // Remove expando attributes + htmlParser.addAttributeFilter('data-mce-expando', function(nodes, name) { + var i = nodes.length; + + while (i--) { + nodes[i].attr(name, null); + } + }); + + htmlParser.addNodeFilter('noscript', function(nodes) { + var i = nodes.length, node; + + while (i--) { + node = nodes[i].firstChild; + + if (node) { + node.value = Entities.decode(node.value); + } + } + }); + + // Force script into CDATA sections and remove the mce- prefix also add comments around styles + htmlParser.addNodeFilter('script,style', function(nodes, name) { + var i = nodes.length, node, value; + + function trim(value) { + /*jshint maxlen:255 */ + /*eslint max-len:0 */ + return value.replace(/()/g, '\n') + .replace(/^[\r\n]*|[\r\n]*$/g, '') + .replace(/^\s*(()?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g, ''); + } + + while (i--) { + node = nodes[i]; + value = node.firstChild ? node.firstChild.value : ''; + + if (name === "script") { + // Remove mce- prefix from script elements and remove default text/javascript mime type (HTML5) + var type = (node.attr('type') || 'text/javascript').replace(/^mce\-/, ''); + node.attr('type', type === 'text/javascript' ? null : type); + + if (value.length > 0) { + node.firstChild.value = '// '; + } + } else { + if (value.length > 0) { + node.firstChild.value = ''; + } + } + } + }); + + // Convert comments to cdata and handle protected comments + htmlParser.addNodeFilter('#comment', function(nodes) { + var i = nodes.length, node; + + while (i--) { + node = nodes[i]; + + if (node.value.indexOf('[CDATA[') === 0) { + node.name = '#cdata'; + node.type = 4; + node.value = node.value.replace(/^\[CDATA\[|\]\]$/g, ''); + } else if (node.value.indexOf('mce:protected ') === 0) { + node.name = "#text"; + node.type = 3; + node.raw = true; + node.value = unescape(node.value).substr(14); + } + } + }); + + htmlParser.addNodeFilter('xml:namespace,input', function(nodes, name) { + var i = nodes.length, node; + + while (i--) { + node = nodes[i]; + if (node.type === 7) { + node.remove(); + } else if (node.type === 1) { + if (name === "input" && !("type" in node.attributes.map)) { + node.attr('type', 'text'); + } + } + } + }); + + // Fix list elements, TODO: Replace this later + if (settings.fix_list_elements) { + htmlParser.addNodeFilter('ul,ol', function(nodes) { + var i = nodes.length, node, parentNode; + + while (i--) { + node = nodes[i]; + parentNode = node.parent; + + if (parentNode.name === 'ul' || parentNode.name === 'ol') { + if (node.prev && node.prev.name === 'li') { + node.prev.append(node); + } + } + } + }); + } + + // Remove internal data attributes + htmlParser.addAttributeFilter('data-mce-src,data-mce-href,data-mce-style,data-mce-selected', function(nodes, name) { + var i = nodes.length; + + while (i--) { + nodes[i].attr(name, null); + } + }); + + // Return public methods + return { + /** + * Schema instance that was used to when the Serializer was constructed. + * + * @field {tinymce.html.Schema} schema + */ + schema: schema, + + /** + * Adds a node filter function to the parser used by the serializer, the parser will collect the specified nodes by name + * and then execute the callback ones it has finished parsing the document. + * + * @example + * parser.addNodeFilter('p,h1', function(nodes, name) { + * for (var i = 0; i < nodes.length; i++) { + * console.log(nodes[i].name); + * } + * }); + * @method addNodeFilter + * @method {String} name Comma separated list of nodes to collect. + * @param {function} callback Callback function to execute once it has collected nodes. + */ + addNodeFilter: htmlParser.addNodeFilter, + + /** + * Adds a attribute filter function to the parser used by the serializer, the parser will + * collect nodes that has the specified attributes + * and then execute the callback ones it has finished parsing the document. + * + * @example + * parser.addAttributeFilter('src,href', function(nodes, name) { + * for (var i = 0; i < nodes.length; i++) { + * console.log(nodes[i].name); + * } + * }); + * @method addAttributeFilter + * @method {String} name Comma separated list of nodes to collect. + * @param {function} callback Callback function to execute once it has collected nodes. + */ + addAttributeFilter: htmlParser.addAttributeFilter, + + /** + * Serializes the specified browser DOM node into a HTML string. + * + * @method serialize + * @param {DOMNode} node DOM node to serialize. + * @param {Object} args Arguments option that gets passed to event handlers. + */ + serialize: function(node, args) { + var self = this, impl, doc, oldDoc, htmlSerializer, content; + + // Explorer won't clone contents of script and style and the + // selected index of select elements are cleared on a clone operation. + if (Env.ie && dom.select('script,style,select,map').length > 0) { + content = node.innerHTML; + node = node.cloneNode(false); + dom.setHTML(node, content); + } else { + node = node.cloneNode(true); + } + + // Nodes needs to be attached to something in WebKit/Opera + // This fix will make DOM ranges and make Sizzle happy! + impl = node.ownerDocument.implementation; + if (impl.createHTMLDocument) { + // Create an empty HTML document + doc = impl.createHTMLDocument(""); + + // Add the element or it's children if it's a body element to the new document + each(node.nodeName == 'BODY' ? node.childNodes : [node], function(node) { + doc.body.appendChild(doc.importNode(node, true)); + }); + + // Grab first child or body element for serialization + if (node.nodeName != 'BODY') { + node = doc.body.firstChild; + } else { + node = doc.body; + } + + // set the new document in DOMUtils so createElement etc works + oldDoc = dom.doc; + dom.doc = doc; + } + + args = args || {}; + args.format = args.format || 'html'; + + // Don't wrap content if we want selected html + if (args.selection) { + args.forced_root_block = ''; + } + + // Pre process + if (!args.no_events) { + args.node = node; + self.onPreProcess(args); + } + + // Setup serializer + htmlSerializer = new Serializer(settings, schema); + + // Parse and serialize HTML + args.content = htmlSerializer.serialize( + htmlParser.parse(trim(args.getInner ? node.innerHTML : dom.getOuterHTML(node)), args) + ); + + // Replace all BOM characters for now until we can find a better solution + if (!args.cleanup) { + args.content = args.content.replace(/\uFEFF/g, ''); + } + + // Post process + if (!args.no_events) { + self.onPostProcess(args); + } + + // Restore the old document if it was changed + if (oldDoc) { + dom.doc = oldDoc; + } + + args.node = null; + + return args.content; + }, + + /** + * Adds valid elements rules to the serializers schema instance this enables you to specify things + * like what elements should be outputted and what attributes specific elements might have. + * Consult the Wiki for more details on this format. + * + * @method addRules + * @param {String} rules Valid elements rules string to add to schema. + */ + addRules: function(rules) { + schema.addValidElements(rules); + }, + + /** + * Sets the valid elements rules to the serializers schema instance this enables you to specify things + * like what elements should be outputted and what attributes specific elements might have. + * Consult the Wiki for more details on this format. + * + * @method setRules + * @param {String} rules Valid elements rules string. + */ + setRules: function(rules) { + schema.setValidElements(rules); + }, + + onPreProcess: function(args) { + if (editor) { + editor.fire('PreProcess', args); + } + }, + + onPostProcess: function(args) { + if (editor) { + editor.fire('PostProcess', args); + } + } + }; + }; +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/dom/Sizzle.jQuery.js b/common/static/js/vendor/tinymce/js/tinymce/classes/dom/Sizzle.jQuery.js new file mode 100755 index 0000000000..8b9e2a16a6 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/dom/Sizzle.jQuery.js @@ -0,0 +1,23 @@ +/** + * Sizzle.jQuery.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*global jQuery:true */ + +/* + * Fake Sizzle using jQuery. + */ +define("tinymce/dom/Sizzle", [], function() { + // Detect if jQuery is loaded + if (!window.jQuery) { + throw new Error("Load jQuery first"); + } + + return jQuery.find; +}); diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/dom/Sizzle.js b/common/static/js/vendor/tinymce/js/tinymce/classes/dom/Sizzle.js new file mode 100755 index 0000000000..4eaa7bae52 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/dom/Sizzle.js @@ -0,0 +1,1928 @@ +/** + * Sizzle.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + * + * @ignore-file + */ + +/*jshint bitwise:false, expr:true, noempty:false, sub:true, eqnull:true, latedef:false, maxlen:255 */ +/*eslint dot-notation:0, no-empty:0, no-cond-assign:0, no-unused-expressions:0, new-cap:0, no-nested-ternary:0, func-style:0, no-bitwise: 0 */ + +/* + * Sizzle CSS Selector Engine + * Copyright, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +define("tinymce/dom/Sizzle", [], function() { +var i, + cachedruns, + Expr, + getText, + isXML, + compile, + outermostContext, + recompare, + sortInput, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + -(new Date()), + preferredDoc = window.document, + support = {}, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + hasDuplicate = false, + sortOrder = function() { return 0; }, + + // General-purpose constants + strundefined = typeof undefined, + MAX_NEGATIVE = 1 << 31, + + // Array methods + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf if we can't use a native one + indexOf = arr.indexOf || function( elem ) { + var i = 0, + len = this.length; + for ( ; i < len; i++ ) { + if ( this[i] === elem ) { + return i; + } + } + return -1; + }, + + + // Regular expressions + + // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + // http://www.w3.org/TR/css3-syntax/#characters + characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + // Loosely modeled on CSS identifier characters + // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors + // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = characterEncoding.replace( "w", "w#" ), + + // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors + operators = "([*^$|!~]?=)", + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace + + "*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]", + + // Prefer arguments quoted, + // then not containing pseudos/brackets, + // then attribute selectors/non-parenthetical expressions, + // then anything else + // These preferences are here to reduce the number of selectors + // needing tokenize in the PSEUDO preFilter + pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ), + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + characterEncoding + ")" ), + "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), + "NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ), + "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rsibling = /[\x20\t\r\n\f]*[+~]/, + + rnative = /^[^{]+\{\s*\[native code/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rescape = /'|\\/g, + rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g, + + // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = /\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g, + funescape = function( _, escaped ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + return high !== high ? + escaped : + // BMP codepoint + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }; + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +/** + * For feature detection + * @param {Function} fn The function to test for native support + */ +function isNative( fn ) { + return rnative.test( fn + "" ); +} + +/** + * Create key-value caches of limited size + * @returns {Function(string, Object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var cache, + keys = []; + + cache = function( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key += " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + cache[ key ] = value; + return value; + }; + + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ +function assert( fn ) { + var div = document.createElement("div"); + + try { + return !!fn( div ); + } catch (e) { + return false; + } finally { + // release memory in IE + div = null; + } +} + +function Sizzle( selector, context, results, seed ) { + var match, elem, m, nodeType, + // QSA vars + i, groups, old, nid, newContext, newSelector; + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + + context = context || document; + results = results || []; + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { + return []; + } + + if ( documentIsHTML && !seed ) { + + // Shortcuts + if ( (match = rquickExpr.exec( selector )) ) { + // Speed-up: Sizzle("#ID") + if ( (m = match[1]) ) { + if ( nodeType === 9 ) { + elem = context.getElementById( m ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE, Opera, and Webkit return items + // by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + } else { + // Context is not a document + if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && + contains( context, elem ) && elem.id === m ) { + results.push( elem ); + return results; + } + } + + // Speed-up: Sizzle("TAG") + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Speed-up: Sizzle(".CLASS") + } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) { + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // QSA path + if ( support.qsa && !rbuggyQSA.test(selector) ) { + old = true; + nid = expando; + newContext = context; + newSelector = nodeType === 9 && selector; + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + groups = tokenize( selector ); + + if ( (old = context.getAttribute("id")) ) { + nid = old.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", nid ); + } + nid = "[id='" + nid + "'] "; + + i = groups.length; + while ( i-- ) { + groups[i] = nid + toSelector( groups[i] ); + } + newContext = rsibling.test( selector ) && context.parentNode || context; + newSelector = groups.join(","); + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch(qsaError) { + } finally { + if ( !old ) { + context.removeAttribute("id"); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Detect xml + * @param {Element|Object} elem An element or a document + */ +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var doc = node ? node.ownerDocument || node : preferredDoc; + + // If no document and documentElement is available, return + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Set our document + document = doc; + docElem = doc.documentElement; + + // Support tests + documentIsHTML = !isXML( doc ); + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( div ) { + div.appendChild( doc.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + // Check if attributes should be retrieved by attribute nodes + support.attributes = assert(function( div ) { + div.innerHTML = ""; + var type = typeof div.lastChild.getAttribute("multiple"); + // IE8 returns a string for some attributes even when not present + return type !== "boolean" && type !== "string"; + }); + + // Check if getElementsByClassName can be trusted + support.getElementsByClassName = assert(function( div ) { + // Opera can't find a second classname (in 9.6) + div.innerHTML = ""; + if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) { + return false; + } + + // Safari 3.2 caches class attributes and doesn't catch changes + div.lastChild.className = "e"; + return div.getElementsByClassName("e").length === 2; + }); + + // Check if getElementsByName privileges form controls or returns elements by ID + // If so, assume (for broader support) that getElementById returns elements by name + support.getByName = assert(function( div ) { + // Inject content + div.id = expando + 0; + // Support: Windows 8 Native Apps + // Assigning innerHTML with "name" attributes throws uncatchable exceptions + // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx + div.appendChild( document.createElement("a") ).setAttribute( "name", expando ); + div.appendChild( document.createElement("i") ).setAttribute( "name", expando ); + docElem.appendChild( div ); + + // Test + var pass = doc.getElementsByName && + // buggy browsers will return fewer than the correct 2 + doc.getElementsByName( expando ).length === 2 + + // buggy browsers will return more than the correct 0 + doc.getElementsByName( expando + 0 ).length; + + // Cleanup + docElem.removeChild( div ); + + return pass; + }); + + // Support: Webkit<537.32 + // Detached nodes confoundingly follow *each other* + support.sortDetached = assert(function( div1 ) { + return div1.compareDocumentPosition && + // Should return 1, but Webkit returns 4 (following) + (div1.compareDocumentPosition( document.createElement("div") ) & 1); + }); + + // IE6/7 return modified attributes + Expr.attrHandle = assert(function( div ) { + div.innerHTML = ""; + return div.firstChild && typeof div.firstChild.getAttribute !== strundefined && + div.firstChild.getAttribute("href") === "#"; + }) ? + {} : + { + "href": function( elem ) { + return elem.getAttribute( "href", 2 ); + }, + "type": function( elem ) { + return elem.getAttribute("type"); + } + }; + + // ID find and filter + if ( support.getByName ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== strundefined && documentIsHTML ) { + var m = context.getElementById( id ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [m] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== strundefined && documentIsHTML ) { + var m = context.getElementById( id ); + + return m ? + m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ? + [m] : + undefined : + []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== strundefined ) { + return context.getElementsByTagName( tag ); + } + } : + function( tag, context ) { + var elem, + tmp = [], + i = 0, + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Name + Expr.find["NAME"] = support.getByName && function( tag, context ) { + if ( typeof context.getElementsByName !== strundefined ) { + return context.getElementsByName( name ); + } + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21), + // no need to also add to buggyMatches since matches checks buggyQSA + // A support test would require too much code (would include document ready) + rbuggyQSA = [ ":focus" ]; + + if ( (support.qsa = isNative(doc.querySelectorAll)) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // http://bugs.jquery.com/ticket/12359 + div.innerHTML = ""; + + // IE8 - Some boolean attributes are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + }); + + assert(function( div ) { + + // Opera 10-12/IE8 - ^= $= *= and empty values + // Should not select anything + div.innerHTML = ""; + if ( div.querySelectorAll("[i^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = isNative( (matches = docElem.matchesSelector || + docElem.mozMatchesSelector || + docElem.webkitMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + // Element contains another + // Purposefully does not implement inclusive descendant + // As in, an element does not contain itself + contains = isNative(docElem.contains) || docElem.compareDocumentPosition ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + // Document order sorting + sortOrder = docElem.compareDocumentPosition ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b ); + + if ( compare ) { + // Disconnected nodes + if ( compare & 1 || + (recompare && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === doc || contains(preferredDoc, a) ) { + return -1; + } + if ( b === doc || contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } + + // Not directly comparable, sort on existence of method + return a.compareDocumentPosition ? -1 : 1; + } : + function( a, b ) { + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + + // Parentless nodes are either documents or disconnected + } else if ( !aup || !bup ) { + return a === doc ? -1 : + b === doc ? 1 : + aup ? -1 : + bup ? 1 : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + // rbuggyQSA always contains :focus, so no need for an existence check + if ( support.matchesSelector && documentIsHTML && (!rbuggyMatches || !rbuggyMatches.test(expr)) && !rbuggyQSA.test(expr) ) { + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch(e) {} + } + + return Sizzle( expr, document, null, [elem] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + var val; + + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + if ( documentIsHTML ) { + name = name.toLowerCase(); + } + if ( (val = Expr.attrHandle[ name ]) ) { + return val( elem ); + } + if ( !documentIsHTML || support.attributes ) { + return elem.getAttribute( name ); + } + return ( (val = elem.getAttributeNode( name )) || elem.getAttribute( name ) ) && elem[ name ] === true ? + name : + val && val.specified ? val.value : null; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +// Document sorting and removing duplicates +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + // Compensate for sort limitations + recompare = !support.sortDetached; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + return results; +}; + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns Returns -1 if a precedes b, 1 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && ( ~b.sourceIndex || MAX_NEGATIVE ) - ( ~a.sourceIndex || MAX_NEGATIVE ); + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +// Returns a function to use in pseudos for input types +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +// Returns a function to use in pseudos for buttons +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +// Returns a function to use in pseudos for positionals +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + for ( ; (node = elem[i]); i++ ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (see #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[5] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[4] ) { + match[2] = match[4]; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeName ) { + if ( nodeName === "*" ) { + return function() { return true; }; + } + + nodeName = nodeName.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, outerCache, node, diff, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + // Seek `elem` from a previously-cached index + outerCache = parent[ expando ] || (parent[ expando ] = {}); + cache = outerCache[ type ] || []; + nodeIndex = cache[0] === dirruns && cache[1]; + diff = cache[0] === dirruns && cache[2]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + outerCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + // Use previously-cached element index if available + } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { + diff = cache[1]; + + // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...) + } else { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { + // Cache the index of each encountered element + if ( useCache ) { + (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf.call( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)), + // not comment, processing instructions, or others + // Thanks to Diego Perini for the nodeName shortcut + // Greater than "@" means alpha characters (specifically not starting with "#" or "?") + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) + // use getAttribute instead to test this case + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +function tokenize( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( tokens = [] ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push( { + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +} + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var data, cache, outerCache, + dirkey = dirruns + " " + doneName; + + // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) { + if ( (data = cache[1]) === true || data === cachedruns ) { + return data === true; + } + } else { + cache = outerCache[ dir ] = [ dirkey ]; + cache[1] = matcher( elem, context, xml ) || cachedruns; + if ( cache[1] === true ) { + return true; + } + } + } + } + } + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf.call( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( tokens.slice( 0, i - 1 ) ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + // A counter to specify which element is currently being matched + var matcherCachedRuns = 0, + bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, expandContext ) { + var elem, j, matcher, + setMatched = [], + matchedCount = 0, + i = "0", + unmatched = seed && [], + outermost = expandContext != null, + contextBackup = outermostContext, + // We must always have either seed elements or context + elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1); + + if ( outermost ) { + outermostContext = context !== document && context; + cachedruns = matcherCachedRuns; + } + + // Add elements passing elementMatchers directly to results + // Keep `i` a string if there are no elements so `matchedCount` will be "00" below + for ( ; (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + cachedruns = ++matcherCachedRuns; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // Apply set filters to unmatched elements + matchedCount += i; + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !group ) { + group = tokenize( selector ); + } + i = group.length; + while ( i-- ) { + cached = matcherFromTokens( group[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + } + return cached; +}; + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function select( selector, context, results, seed ) { + var i, tokens, token, type, find, + match = tokenize( selector ); + + if ( !seed ) { + // Try to minimize operations if there is only one group + if ( match.length === 1 ) { + + // Take a shortcut and set the context if the root selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + context.nodeType === 9 && documentIsHTML && + Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && context.parentNode || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + } + + // Compile and execute a filtering function + // Provide `match` to avoid retokenization if we modified the selector above + compile( selector, match )( + seed, + context, + !documentIsHTML, + results, + rsibling.test( selector ) + ); + return results; +} + +// Deprecated +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +// Check sort stability +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +// Initialize with the default document +setDocument(); + +// Always assume the presence of duplicates if sort doesn't +// pass them to our comparison function (as in Google Chrome). +[0, 0].sort( sortOrder ); +support.detectDuplicates = hasDuplicate; + +/* +// EXPOSE +if ( typeof define === "function" && define.amd ) { + define(function() { return Sizzle; }); +} else { + window.Sizzle = Sizzle; +} +*/ + +// EXPOSE +return Sizzle; +}); diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/dom/StyleSheetLoader.js b/common/static/js/vendor/tinymce/js/tinymce/classes/dom/StyleSheetLoader.js new file mode 100755 index 0000000000..cf385acb34 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/dom/StyleSheetLoader.js @@ -0,0 +1,185 @@ +/** + * StyleSheetLoader.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class handles loading of external stylesheets and fires events when these are loaded. + * + * @class tinymce.dom.StyleSheetLoader + * @private + */ +define("tinymce/dom/StyleSheetLoader", [], function() { + "use strict"; + + return function(document, settings) { + var idCount = 0, loadedStates = {}, maxLoadTime; + + settings = settings || {}; + maxLoadTime = settings.maxLoadTime || 5000; + + function appendToHead(node) { + document.getElementsByTagName('head')[0].appendChild(node); + } + + /** + * Loads the specified css style sheet file and call the loadedCallback once it's finished loading. + * + * @method load + * @param {String} url Url to be loaded. + * @param {Function} loadedCallback Callback to be executed when loaded. + * @param {Function} errorCallback Callback to be executed when failed loading. + */ + function load(url, loadedCallback, errorCallback) { + var link, style, startTime, state; + + function passed() { + var callbacks = state.passed, i = callbacks.length; + + while (i--) { + callbacks[i](); + } + + state.status = 2; + state.passed = []; + state.failed = []; + } + + function failed() { + var callbacks = state.failed, i = callbacks.length; + + while (i--) { + callbacks[i](); + } + + state.status = 3; + state.passed = []; + state.failed = []; + } + + // Sniffs for older WebKit versions that have the link.onload but a broken one + function isOldWebKit() { + var webKitChunks = navigator.userAgent.match(/WebKit\/(\d*)/); + return !!(webKitChunks && webKitChunks[1] < 536); + } + + // Calls the waitCallback until the test returns true or the timeout occurs + function wait(testCallback, waitCallback) { + if (!testCallback()) { + // Wait for timeout + if ((new Date().getTime()) - startTime < maxLoadTime) { + window.setTimeout(waitCallback, 0); + } else { + failed(); + } + } + } + + // Workaround for WebKit that doesn't properly support the onload event for link elements + // Or WebKit that fires the onload event before the StyleSheet is added to the document + function waitForWebKitLinkLoaded() { + wait(function() { + var styleSheets = document.styleSheets, styleSheet, i = styleSheets.length, owner; + + while (i--) { + styleSheet = styleSheets[i]; + owner = styleSheet.ownerNode ? styleSheet.ownerNode : styleSheet.owningElement; + if (owner && owner.id === link.id) { + passed(); + return true; + } + } + }, waitForWebKitLinkLoaded); + } + + // Workaround for older Geckos that doesn't have any onload event for StyleSheets + function waitForGeckoLinkLoaded() { + wait(function() { + try { + // Accessing the cssRules will throw an exception until the CSS file is loaded + var cssRules = style.sheet.cssRules; + passed(); + return !!cssRules; + } catch (ex) { + // Ignore + } + }, waitForGeckoLinkLoaded); + } + + if (!loadedStates[url]) { + state = { + passed: [], + failed: [] + }; + + loadedStates[url] = state; + } else { + state = loadedStates[url]; + } + + if (loadedCallback) { + state.passed.push(loadedCallback); + } + + if (errorCallback) { + state.failed.push(errorCallback); + } + + // Is loading wait for it to pass + if (state.status == 1) { + return; + } + + // Has finished loading and was success + if (state.status == 2) { + passed(); + return; + } + + // Has finished loading and was a failure + if (state.status == 3) { + failed(); + return; + } + + // Start loading + state.status = 1; + link = document.createElement('link'); + link.rel = 'stylesheet'; + link.type = 'text/css'; + link.id = 'u' + (idCount++); + link.async = false; + link.defer = false; + startTime = new Date().getTime(); + + // Feature detect onload on link element and sniff older webkits since it has an broken onload event + if ("onload" in link && !isOldWebKit()) { + link.onload = waitForWebKitLinkLoaded; + link.onerror = failed; + } else { + // Sniff for old Firefox that doesn't support the onload event on link elements + // TODO: Remove this in the future when everyone uses modern browsers + if (navigator.userAgent.indexOf("Firefox") > 0) { + style = document.createElement('style'); + style.textContent = '@import "' + url + '"'; + waitForGeckoLinkLoaded(); + appendToHead(style); + return; + } else { + // Use the id owner on older webkits + waitForWebKitLinkLoaded(); + } + } + + appendToHead(link); + link.href = url; + } + + this.load = load; + }; +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/dom/TreeWalker.js b/common/static/js/vendor/tinymce/js/tinymce/classes/dom/TreeWalker.js new file mode 100755 index 0000000000..ffe8f0439d --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/dom/TreeWalker.js @@ -0,0 +1,79 @@ +/** + * TreeWalker.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * TreeWalker class enables you to walk the DOM in a linear manner. + * + * @class tinymce.dom.TreeWalker + */ +define("tinymce/dom/TreeWalker", [], function() { + return function(start_node, root_node) { + var node = start_node; + + function findSibling(node, start_name, sibling_name, shallow) { + var sibling, parent; + + if (node) { + // Walk into nodes if it has a start + if (!shallow && node[start_name]) { + return node[start_name]; + } + + // Return the sibling if it has one + if (node != root_node) { + sibling = node[sibling_name]; + if (sibling) { + return sibling; + } + + // Walk up the parents to look for siblings + for (parent = node.parentNode; parent && parent != root_node; parent = parent.parentNode) { + sibling = parent[sibling_name]; + if (sibling) { + return sibling; + } + } + } + } + } + + /** + * Returns the current node. + * + * @method current + * @return {Node} Current node where the walker is. + */ + this.current = function() { + return node; + }; + + /** + * Walks to the next node in tree. + * + * @method next + * @return {Node} Current node where the walker is after moving to the next node. + */ + this.next = function(shallow) { + node = findSibling(node, 'firstChild', 'nextSibling', shallow); + return node; + }; + + /** + * Walks to the previous node in tree. + * + * @method prev + * @return {Node} Current node where the walker is after moving to the previous node. + */ + this.prev = function(shallow) { + node = findSibling(node, 'lastChild', 'previousSibling', shallow); + return node; + }; + }; +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/dom/TridentSelection.js b/common/static/js/vendor/tinymce/js/tinymce/classes/dom/TridentSelection.js new file mode 100755 index 0000000000..1edb9208c2 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/dom/TridentSelection.js @@ -0,0 +1,502 @@ +/** + * TridentSelection.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Selection class for old explorer versions. This one fakes the + * native selection object available on modern browsers. + * + * @class tinymce.dom.TridentSelection + */ +define("tinymce/dom/TridentSelection", [], function() { + function Selection(selection) { + var self = this, dom = selection.dom, FALSE = false; + + function getPosition(rng, start) { + var checkRng, startIndex = 0, endIndex, inside, + children, child, offset, index, position = -1, parent; + + // Setup test range, collapse it and get the parent + checkRng = rng.duplicate(); + checkRng.collapse(start); + parent = checkRng.parentElement(); + + // Check if the selection is within the right document + if (parent.ownerDocument !== selection.dom.doc) { + return; + } + + // IE will report non editable elements as it's parent so look for an editable one + while (parent.contentEditable === "false") { + parent = parent.parentNode; + } + + // If parent doesn't have any children then return that we are inside the element + if (!parent.hasChildNodes()) { + return {node: parent, inside: 1}; + } + + // Setup node list and endIndex + children = parent.children; + endIndex = children.length - 1; + + // Perform a binary search for the position + while (startIndex <= endIndex) { + index = Math.floor((startIndex + endIndex) / 2); + + // Move selection to node and compare the ranges + child = children[index]; + checkRng.moveToElementText(child); + position = checkRng.compareEndPoints(start ? 'StartToStart' : 'EndToEnd', rng); + + // Before/after or an exact match + if (position > 0) { + endIndex = index - 1; + } else if (position < 0) { + startIndex = index + 1; + } else { + return {node: child}; + } + } + + // Check if child position is before or we didn't find a position + if (position < 0) { + // No element child was found use the parent element and the offset inside that + if (!child) { + checkRng.moveToElementText(parent); + checkRng.collapse(true); + child = parent; + inside = true; + } else { + checkRng.collapse(false); + } + + // Walk character by character in text node until we hit the selected range endpoint, + // hit the end of document or parent isn't the right one + // We need to walk char by char since rng.text or rng.htmlText will trim line endings + offset = 0; + while (checkRng.compareEndPoints(start ? 'StartToStart' : 'StartToEnd', rng) !== 0) { + if (checkRng.move('character', 1) === 0 || parent != checkRng.parentElement()) { + break; + } + + offset++; + } + } else { + // Child position is after the selection endpoint + checkRng.collapse(true); + + // Walk character by character in text node until we hit the selected range endpoint, hit + // the end of document or parent isn't the right one + offset = 0; + while (checkRng.compareEndPoints(start ? 'StartToStart' : 'StartToEnd', rng) !== 0) { + if (checkRng.move('character', -1) === 0 || parent != checkRng.parentElement()) { + break; + } + + offset++; + } + } + + return {node: child, position: position, offset: offset, inside: inside}; + } + + // Returns a W3C DOM compatible range object by using the IE Range API + function getRange() { + var ieRange = selection.getRng(), domRange = dom.createRng(), element, collapsed, tmpRange, element2, bookmark; + + // If selection is outside the current document just return an empty range + element = ieRange.item ? ieRange.item(0) : ieRange.parentElement(); + if (element.ownerDocument != dom.doc) { + return domRange; + } + + collapsed = selection.isCollapsed(); + + // Handle control selection + if (ieRange.item) { + domRange.setStart(element.parentNode, dom.nodeIndex(element)); + domRange.setEnd(domRange.startContainer, domRange.startOffset + 1); + + return domRange; + } + + function findEndPoint(start) { + var endPoint = getPosition(ieRange, start), container, offset, textNodeOffset = 0, sibling, undef, nodeValue; + + container = endPoint.node; + offset = endPoint.offset; + + if (endPoint.inside && !container.hasChildNodes()) { + domRange[start ? 'setStart' : 'setEnd'](container, 0); + return; + } + + if (offset === undef) { + domRange[start ? 'setStartBefore' : 'setEndAfter'](container); + return; + } + + if (endPoint.position < 0) { + sibling = endPoint.inside ? container.firstChild : container.nextSibling; + + if (!sibling) { + domRange[start ? 'setStartAfter' : 'setEndAfter'](container); + return; + } + + if (!offset) { + if (sibling.nodeType == 3) { + domRange[start ? 'setStart' : 'setEnd'](sibling, 0); + } else { + domRange[start ? 'setStartBefore' : 'setEndBefore'](sibling); + } + + return; + } + + // Find the text node and offset + while (sibling) { + nodeValue = sibling.nodeValue; + textNodeOffset += nodeValue.length; + + // We are at or passed the position we where looking for + if (textNodeOffset >= offset) { + container = sibling; + textNodeOffset -= offset; + textNodeOffset = nodeValue.length - textNodeOffset; + break; + } + + sibling = sibling.nextSibling; + } + } else { + // Find the text node and offset + sibling = container.previousSibling; + + if (!sibling) { + return domRange[start ? 'setStartBefore' : 'setEndBefore'](container); + } + + // If there isn't any text to loop then use the first position + if (!offset) { + if (container.nodeType == 3) { + domRange[start ? 'setStart' : 'setEnd'](sibling, container.nodeValue.length); + } else { + domRange[start ? 'setStartAfter' : 'setEndAfter'](sibling); + } + + return; + } + + while (sibling) { + textNodeOffset += sibling.nodeValue.length; + + // We are at or passed the position we where looking for + if (textNodeOffset >= offset) { + container = sibling; + textNodeOffset -= offset; + break; + } + + sibling = sibling.previousSibling; + } + } + + domRange[start ? 'setStart' : 'setEnd'](container, textNodeOffset); + } + + try { + // Find start point + findEndPoint(true); + + // Find end point if needed + if (!collapsed) { + findEndPoint(); + } + } catch (ex) { + // IE has a nasty bug where text nodes might throw "invalid argument" when you + // access the nodeValue or other properties of text nodes. This seems to happend when + // text nodes are split into two nodes by a delete/backspace call. So lets detect it and try to fix it. + if (ex.number == -2147024809) { + // Get the current selection + bookmark = self.getBookmark(2); + + // Get start element + tmpRange = ieRange.duplicate(); + tmpRange.collapse(true); + element = tmpRange.parentElement(); + + // Get end element + if (!collapsed) { + tmpRange = ieRange.duplicate(); + tmpRange.collapse(false); + element2 = tmpRange.parentElement(); + element2.innerHTML = element2.innerHTML; + } + + // Remove the broken elements + element.innerHTML = element.innerHTML; + + // Restore the selection + self.moveToBookmark(bookmark); + + // Since the range has moved we need to re-get it + ieRange = selection.getRng(); + + // Find start point + findEndPoint(true); + + // Find end point if needed + if (!collapsed) { + findEndPoint(); + } + } else { + throw ex; // Throw other errors + } + } + + return domRange; + } + + this.getBookmark = function(type) { + var rng = selection.getRng(), bookmark = {}; + + function getIndexes(node) { + var parent, root, children, i, indexes = []; + + parent = node.parentNode; + root = dom.getRoot().parentNode; + + while (parent != root && parent.nodeType !== 9) { + children = parent.children; + + i = children.length; + while (i--) { + if (node === children[i]) { + indexes.push(i); + break; + } + } + + node = parent; + parent = parent.parentNode; + } + + return indexes; + } + + function getBookmarkEndPoint(start) { + var position; + + position = getPosition(rng, start); + if (position) { + return { + position: position.position, + offset: position.offset, + indexes: getIndexes(position.node), + inside: position.inside + }; + } + } + + // Non ubstructive bookmark + if (type === 2) { + // Handle text selection + if (!rng.item) { + bookmark.start = getBookmarkEndPoint(true); + + if (!selection.isCollapsed()) { + bookmark.end = getBookmarkEndPoint(); + } + } else { + bookmark.start = {ctrl: true, indexes: getIndexes(rng.item(0))}; + } + } + + return bookmark; + }; + + this.moveToBookmark = function(bookmark) { + var rng, body = dom.doc.body; + + function resolveIndexes(indexes) { + var node, i, idx, children; + + node = dom.getRoot(); + for (i = indexes.length - 1; i >= 0; i--) { + children = node.children; + idx = indexes[i]; + + if (idx <= children.length - 1) { + node = children[idx]; + } + } + + return node; + } + + function setBookmarkEndPoint(start) { + var endPoint = bookmark[start ? 'start' : 'end'], moveLeft, moveRng, undef, offset; + + if (endPoint) { + moveLeft = endPoint.position > 0; + + moveRng = body.createTextRange(); + moveRng.moveToElementText(resolveIndexes(endPoint.indexes)); + + offset = endPoint.offset; + if (offset !== undef) { + moveRng.collapse(endPoint.inside || moveLeft); + moveRng.moveStart('character', moveLeft ? -offset : offset); + } else { + moveRng.collapse(start); + } + + rng.setEndPoint(start ? 'StartToStart' : 'EndToStart', moveRng); + + if (start) { + rng.collapse(true); + } + } + } + + if (bookmark.start) { + if (bookmark.start.ctrl) { + rng = body.createControlRange(); + rng.addElement(resolveIndexes(bookmark.start.indexes)); + rng.select(); + } else { + rng = body.createTextRange(); + setBookmarkEndPoint(true); + setBookmarkEndPoint(); + rng.select(); + } + } + }; + + this.addRange = function(rng) { + var ieRng, ctrlRng, startContainer, startOffset, endContainer, endOffset, sibling, + doc = selection.dom.doc, body = doc.body, nativeRng, ctrlElm; + + function setEndPoint(start) { + var container, offset, marker, tmpRng, nodes; + + marker = dom.create('a'); + container = start ? startContainer : endContainer; + offset = start ? startOffset : endOffset; + tmpRng = ieRng.duplicate(); + + if (container == doc || container == doc.documentElement) { + container = body; + offset = 0; + } + + if (container.nodeType == 3) { + container.parentNode.insertBefore(marker, container); + tmpRng.moveToElementText(marker); + tmpRng.moveStart('character', offset); + dom.remove(marker); + ieRng.setEndPoint(start ? 'StartToStart' : 'EndToEnd', tmpRng); + } else { + nodes = container.childNodes; + + if (nodes.length) { + if (offset >= nodes.length) { + dom.insertAfter(marker, nodes[nodes.length - 1]); + } else { + container.insertBefore(marker, nodes[offset]); + } + + tmpRng.moveToElementText(marker); + } else if (container.canHaveHTML) { + // Empty node selection for example
    |
    + // Setting innerHTML with a span marker then remove that marker seems to keep empty block elements open + container.innerHTML = ''; + marker = container.firstChild; + tmpRng.moveToElementText(marker); + tmpRng.collapse(FALSE); // Collapse false works better than true for some odd reason + } + + ieRng.setEndPoint(start ? 'StartToStart' : 'EndToEnd', tmpRng); + dom.remove(marker); + } + } + + // Setup some shorter versions + startContainer = rng.startContainer; + startOffset = rng.startOffset; + endContainer = rng.endContainer; + endOffset = rng.endOffset; + ieRng = body.createTextRange(); + + // If single element selection then try making a control selection out of it + if (startContainer == endContainer && startContainer.nodeType == 1) { + // Trick to place the caret inside an empty block element like

    + if (startOffset == endOffset && !startContainer.hasChildNodes()) { + if (startContainer.canHaveHTML) { + // Check if previous sibling is an empty block if it is then we need to render it + // IE would otherwise move the caret into the sibling instead of the empty startContainer see: #5236 + // Example this:

    |

    would become this:

    |

    + sibling = startContainer.previousSibling; + if (sibling && !sibling.hasChildNodes() && dom.isBlock(sibling)) { + sibling.innerHTML = ''; + } else { + sibling = null; + } + + startContainer.innerHTML = ''; + ieRng.moveToElementText(startContainer.lastChild); + ieRng.select(); + dom.doc.selection.clear(); + startContainer.innerHTML = ''; + + if (sibling) { + sibling.innerHTML = ''; + } + return; + } else { + startOffset = dom.nodeIndex(startContainer); + startContainer = startContainer.parentNode; + } + } + + if (startOffset == endOffset - 1) { + try { + ctrlElm = startContainer.childNodes[startOffset]; + ctrlRng = body.createControlRange(); + ctrlRng.addElement(ctrlElm); + ctrlRng.select(); + + // Check if the range produced is on the correct element and is a control range + // On IE 8 it will select the parent contentEditable container if you select an inner element see: #5398 + nativeRng = selection.getRng(); + if (nativeRng.item && ctrlElm === nativeRng.item(0)) { + return; + } + } catch (ex) { + // Ignore + } + } + } + + // Set start/end point of selection + setEndPoint(true); + setEndPoint(); + + // Select the new range and scroll it into view + ieRng.select(); + }; + + // Expose range method + this.getRangeAt = getRange; + } + + return Selection; +}); diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/html/DomParser.js b/common/static/js/vendor/tinymce/js/tinymce/classes/html/DomParser.js new file mode 100755 index 0000000000..bc494adde3 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/html/DomParser.js @@ -0,0 +1,756 @@ +/** + * DomParser.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class parses HTML code into a DOM like structure of nodes it will remove redundant whitespace and make + * sure that the node tree is valid according to the specified schema. + * So for example:

    a

    b

    c

    will become

    a

    b

    c

    + * + * @example + * var parser = new tinymce.html.DomParser({validate: true}, schema); + * var rootNode = parser.parse('

    content

    '); + * + * @class tinymce.html.DomParser + * @version 3.4 + */ +define("tinymce/html/DomParser", [ + "tinymce/html/Node", + "tinymce/html/Schema", + "tinymce/html/SaxParser", + "tinymce/util/Tools" +], function(Node, Schema, SaxParser, Tools) { + var makeMap = Tools.makeMap, each = Tools.each, explode = Tools.explode, extend = Tools.extend; + + /** + * Constructs a new DomParser instance. + * + * @constructor + * @method DomParser + * @param {Object} settings Name/value collection of settings. comment, cdata, text, start and end are callbacks. + * @param {tinymce.html.Schema} schema HTML Schema class to use when parsing. + */ + return function(settings, schema) { + var self = this, nodeFilters = {}, attributeFilters = [], matchedNodes = {}, matchedAttributes = {}; + + settings = settings || {}; + settings.validate = "validate" in settings ? settings.validate : true; + settings.root_name = settings.root_name || 'body'; + self.schema = schema = schema || new Schema(); + + function fixInvalidChildren(nodes) { + var ni, node, parent, parents, newParent, currentNode, tempNode, childNode, i; + var nonEmptyElements, nonSplitableElements, textBlockElements, sibling, nextNode; + + nonSplitableElements = makeMap('tr,td,th,tbody,thead,tfoot,table'); + nonEmptyElements = schema.getNonEmptyElements(); + textBlockElements = schema.getTextBlockElements(); + + for (ni = 0; ni < nodes.length; ni++) { + node = nodes[ni]; + + // Already removed or fixed + if (!node.parent || node.fixed) { + continue; + } + + // If the invalid element is a text block and the text block is within a parent LI element + // Then unwrap the first text block and convert other sibling text blocks to LI elements similar to Word/Open Office + if (textBlockElements[node.name] && node.parent.name == 'li') { + // Move sibling text blocks after LI element + sibling = node.next; + while (sibling) { + if (textBlockElements[sibling.name]) { + sibling.name = 'li'; + sibling.fixed = true; + node.parent.insert(sibling, node.parent); + } else { + break; + } + + sibling = sibling.next; + } + + // Unwrap current text block + node.unwrap(node); + continue; + } + + // Get list of all parent nodes until we find a valid parent to stick the child into + parents = [node]; + for (parent = node.parent; parent && !schema.isValidChild(parent.name, node.name) && + !nonSplitableElements[parent.name]; parent = parent.parent) { + parents.push(parent); + } + + // Found a suitable parent + if (parent && parents.length > 1) { + // Reverse the array since it makes looping easier + parents.reverse(); + + // Clone the related parent and insert that after the moved node + newParent = currentNode = self.filterNode(parents[0].clone()); + + // Start cloning and moving children on the left side of the target node + for (i = 0; i < parents.length - 1; i++) { + if (schema.isValidChild(currentNode.name, parents[i].name)) { + tempNode = self.filterNode(parents[i].clone()); + currentNode.append(tempNode); + } else { + tempNode = currentNode; + } + + for (childNode = parents[i].firstChild; childNode && childNode != parents[i + 1]; ) { + nextNode = childNode.next; + tempNode.append(childNode); + childNode = nextNode; + } + + currentNode = tempNode; + } + + if (!newParent.isEmpty(nonEmptyElements)) { + parent.insert(newParent, parents[0], true); + parent.insert(node, newParent); + } else { + parent.insert(node, parents[0], true); + } + + // Check if the element is empty by looking through it's contents and special treatment for


    + parent = parents[0]; + if (parent.isEmpty(nonEmptyElements) || parent.firstChild === parent.lastChild && parent.firstChild.name === 'br') { + parent.empty().remove(); + } + } else if (node.parent) { + // If it's an LI try to find a UL/OL for it or wrap it + if (node.name === 'li') { + sibling = node.prev; + if (sibling && (sibling.name === 'ul' || sibling.name === 'ul')) { + sibling.append(node); + continue; + } + + sibling = node.next; + if (sibling && (sibling.name === 'ul' || sibling.name === 'ul')) { + sibling.insert(node, sibling.firstChild, true); + continue; + } + + node.wrap(self.filterNode(new Node('ul', 1))); + continue; + } + + // Try wrapping the element in a DIV + if (schema.isValidChild(node.parent.name, 'div') && schema.isValidChild('div', node.name)) { + node.wrap(self.filterNode(new Node('div', 1))); + } else { + // We failed wrapping it, then remove or unwrap it + if (node.name === 'style' || node.name === 'script') { + node.empty().remove(); + } else { + node.unwrap(); + } + } + } + } + } + + /** + * Runs the specified node though the element and attributes filters. + * + * @method filterNode + * @param {tinymce.html.Node} Node the node to run filters on. + * @return {tinymce.html.Node} The passed in node. + */ + self.filterNode = function(node) { + var i, name, list; + + // Run element filters + if (name in nodeFilters) { + list = matchedNodes[name]; + + if (list) { + list.push(node); + } else { + matchedNodes[name] = [node]; + } + } + + // Run attribute filters + i = attributeFilters.length; + while (i--) { + name = attributeFilters[i].name; + + if (name in node.attributes.map) { + list = matchedAttributes[name]; + + if (list) { + list.push(node); + } else { + matchedAttributes[name] = [node]; + } + } + } + + return node; + }; + + /** + * Adds a node filter function to the parser, the parser will collect the specified nodes by name + * and then execute the callback ones it has finished parsing the document. + * + * @example + * parser.addNodeFilter('p,h1', function(nodes, name) { + * for (var i = 0; i < nodes.length; i++) { + * console.log(nodes[i].name); + * } + * }); + * @method addNodeFilter + * @method {String} name Comma separated list of nodes to collect. + * @param {function} callback Callback function to execute once it has collected nodes. + */ + self.addNodeFilter = function(name, callback) { + each(explode(name), function(name) { + var list = nodeFilters[name]; + + if (!list) { + nodeFilters[name] = list = []; + } + + list.push(callback); + }); + }; + + /** + * Adds a attribute filter function to the parser, the parser will collect nodes that has the specified attributes + * and then execute the callback ones it has finished parsing the document. + * + * @example + * parser.addAttributeFilter('src,href', function(nodes, name) { + * for (var i = 0; i < nodes.length; i++) { + * console.log(nodes[i].name); + * } + * }); + * @method addAttributeFilter + * @method {String} name Comma separated list of nodes to collect. + * @param {function} callback Callback function to execute once it has collected nodes. + */ + self.addAttributeFilter = function(name, callback) { + each(explode(name), function(name) { + var i; + + for (i = 0; i < attributeFilters.length; i++) { + if (attributeFilters[i].name === name) { + attributeFilters[i].callbacks.push(callback); + return; + } + } + + attributeFilters.push({name: name, callbacks: [callback]}); + }); + }; + + /** + * Parses the specified HTML string into a DOM like node tree and returns the result. + * + * @example + * var rootNode = new DomParser({...}).parse('text'); + * @method parse + * @param {String} html Html string to sax parse. + * @param {Object} args Optional args object that gets passed to all filter functions. + * @return {tinymce.html.Node} Root node containing the tree. + */ + self.parse = function(html, args) { + var parser, rootNode, node, nodes, i, l, fi, fl, list, name, validate; + var blockElements, startWhiteSpaceRegExp, invalidChildren = [], isInWhiteSpacePreservedElement; + var endWhiteSpaceRegExp, allWhiteSpaceRegExp, isAllWhiteSpaceRegExp, whiteSpaceElements; + var children, nonEmptyElements, rootBlockName; + + args = args || {}; + matchedNodes = {}; + matchedAttributes = {}; + blockElements = extend(makeMap('script,style,head,html,body,title,meta,param'), schema.getBlockElements()); + nonEmptyElements = schema.getNonEmptyElements(); + children = schema.children; + validate = settings.validate; + rootBlockName = "forced_root_block" in args ? args.forced_root_block : settings.forced_root_block; + + whiteSpaceElements = schema.getWhiteSpaceElements(); + startWhiteSpaceRegExp = /^[ \t\r\n]+/; + endWhiteSpaceRegExp = /[ \t\r\n]+$/; + allWhiteSpaceRegExp = /[ \t\r\n]+/g; + isAllWhiteSpaceRegExp = /^[ \t\r\n]+$/; + + function addRootBlocks() { + var node = rootNode.firstChild, next, rootBlockNode; + + // Removes whitespace at beginning and end of block so: + //

    x

    ->

    x

    + function trim(rootBlockNode) { + if (rootBlockNode) { + node = rootBlockNode.firstChild; + if (node && node.type == 3) { + node.value = node.value.replace(startWhiteSpaceRegExp, ''); + } + + node = rootBlockNode.lastChild; + if (node && node.type == 3) { + node.value = node.value.replace(endWhiteSpaceRegExp, ''); + } + } + } + + // Check if rootBlock is valid within rootNode for example if P is valid in H1 if H1 is the contentEditabe root + if (!schema.isValidChild(rootNode.name, rootBlockName.toLowerCase())) { + return; + } + + while (node) { + next = node.next; + + if (node.type == 3 || (node.type == 1 && node.name !== 'p' && + !blockElements[node.name] && !node.attr('data-mce-type'))) { + if (!rootBlockNode) { + // Create a new root block element + rootBlockNode = createNode(rootBlockName, 1); + rootBlockNode.attr(settings.forced_root_block_attrs); + rootNode.insert(rootBlockNode, node); + rootBlockNode.append(node); + } else { + rootBlockNode.append(node); + } + } else { + trim(rootBlockNode); + rootBlockNode = null; + } + + node = next; + } + + trim(rootBlockNode); + } + + function createNode(name, type) { + var node = new Node(name, type), list; + + if (name in nodeFilters) { + list = matchedNodes[name]; + + if (list) { + list.push(node); + } else { + matchedNodes[name] = [node]; + } + } + + return node; + } + + function removeWhitespaceBefore(node) { + var textNode, textVal, sibling; + + for (textNode = node.prev; textNode && textNode.type === 3; ) { + textVal = textNode.value.replace(endWhiteSpaceRegExp, ''); + + if (textVal.length > 0) { + textNode.value = textVal; + textNode = textNode.prev; + } else { + sibling = textNode.prev; + textNode.remove(); + textNode = sibling; + } + } + } + + function cloneAndExcludeBlocks(input) { + var name, output = {}; + + for (name in input) { + if (name !== 'li' && name != 'p') { + output[name] = input[name]; + } + } + + return output; + } + + parser = new SaxParser({ + validate: validate, + allow_script_urls: settings.allow_script_urls, + allow_conditional_comments: settings.allow_conditional_comments, + + // Exclude P and LI from DOM parsing since it's treated better by the DOM parser + self_closing_elements: cloneAndExcludeBlocks(schema.getSelfClosingElements()), + + cdata: function(text) { + node.append(createNode('#cdata', 4)).value = text; + }, + + text: function(text, raw) { + var textNode; + + // Trim all redundant whitespace on non white space elements + if (!isInWhiteSpacePreservedElement) { + text = text.replace(allWhiteSpaceRegExp, ' '); + + if (node.lastChild && blockElements[node.lastChild.name]) { + text = text.replace(startWhiteSpaceRegExp, ''); + } + } + + // Do we need to create the node + if (text.length !== 0) { + textNode = createNode('#text', 3); + textNode.raw = !!raw; + node.append(textNode).value = text; + } + }, + + comment: function(text) { + node.append(createNode('#comment', 8)).value = text; + }, + + pi: function(name, text) { + node.append(createNode(name, 7)).value = text; + removeWhitespaceBefore(node); + }, + + doctype: function(text) { + var newNode; + + newNode = node.append(createNode('#doctype', 10)); + newNode.value = text; + removeWhitespaceBefore(node); + }, + + start: function(name, attrs, empty) { + var newNode, attrFiltersLen, elementRule, attrName, parent; + + elementRule = validate ? schema.getElementRule(name) : {}; + if (elementRule) { + newNode = createNode(elementRule.outputName || name, 1); + newNode.attributes = attrs; + newNode.shortEnded = empty; + + node.append(newNode); + + // Check if node is valid child of the parent node is the child is + // unknown we don't collect it since it's probably a custom element + parent = children[node.name]; + if (parent && children[newNode.name] && !parent[newNode.name]) { + invalidChildren.push(newNode); + } + + attrFiltersLen = attributeFilters.length; + while (attrFiltersLen--) { + attrName = attributeFilters[attrFiltersLen].name; + + if (attrName in attrs.map) { + list = matchedAttributes[attrName]; + + if (list) { + list.push(newNode); + } else { + matchedAttributes[attrName] = [newNode]; + } + } + } + + // Trim whitespace before block + if (blockElements[name]) { + removeWhitespaceBefore(newNode); + } + + // Change current node if the element wasn't empty i.e not
    or + if (!empty) { + node = newNode; + } + + // Check if we are inside a whitespace preserved element + if (!isInWhiteSpacePreservedElement && whiteSpaceElements[name]) { + isInWhiteSpacePreservedElement = true; + } + } + }, + + end: function(name) { + var textNode, elementRule, text, sibling, tempNode; + + elementRule = validate ? schema.getElementRule(name) : {}; + if (elementRule) { + if (blockElements[name]) { + if (!isInWhiteSpacePreservedElement) { + // Trim whitespace of the first node in a block + textNode = node.firstChild; + if (textNode && textNode.type === 3) { + text = textNode.value.replace(startWhiteSpaceRegExp, ''); + + // Any characters left after trim or should we remove it + if (text.length > 0) { + textNode.value = text; + textNode = textNode.next; + } else { + sibling = textNode.next; + textNode.remove(); + textNode = sibling; + + // Remove any pure whitespace siblings + while (textNode && textNode.type === 3) { + text = textNode.value; + sibling = textNode.next; + + if (text.length === 0 || isAllWhiteSpaceRegExp.test(text)) { + textNode.remove(); + textNode = sibling; + } + + textNode = sibling; + } + } + } + + // Trim whitespace of the last node in a block + textNode = node.lastChild; + if (textNode && textNode.type === 3) { + text = textNode.value.replace(endWhiteSpaceRegExp, ''); + + // Any characters left after trim or should we remove it + if (text.length > 0) { + textNode.value = text; + textNode = textNode.prev; + } else { + sibling = textNode.prev; + textNode.remove(); + textNode = sibling; + + // Remove any pure whitespace siblings + while (textNode && textNode.type === 3) { + text = textNode.value; + sibling = textNode.prev; + + if (text.length === 0 || isAllWhiteSpaceRegExp.test(text)) { + textNode.remove(); + textNode = sibling; + } + + textNode = sibling; + } + } + } + } + + // Trim start white space + // Removed due to: #5424 + /*textNode = node.prev; + if (textNode && textNode.type === 3) { + text = textNode.value.replace(startWhiteSpaceRegExp, ''); + + if (text.length > 0) + textNode.value = text; + else + textNode.remove(); + }*/ + } + + // Check if we exited a whitespace preserved element + if (isInWhiteSpacePreservedElement && whiteSpaceElements[name]) { + isInWhiteSpacePreservedElement = false; + } + + // Handle empty nodes + if (elementRule.removeEmpty || elementRule.paddEmpty) { + if (node.isEmpty(nonEmptyElements)) { + if (elementRule.paddEmpty) { + node.empty().append(new Node('#text', '3')).value = '\u00a0'; + } else { + // Leave nodes that have a name like + if (!node.attributes.map.name && !node.attributes.map.id) { + tempNode = node.parent; + node.empty().remove(); + node = tempNode; + return; + } + } + } + } + + node = node.parent; + } + } + }, schema); + + rootNode = node = new Node(args.context || settings.root_name, 11); + + parser.parse(html); + + // Fix invalid children or report invalid children in a contextual parsing + if (validate && invalidChildren.length) { + if (!args.context) { + fixInvalidChildren(invalidChildren); + } else { + args.invalid = true; + } + } + + // Wrap nodes in the root into block elements if the root is body + if (rootBlockName && (rootNode.name == 'body' || args.isRootContent)) { + addRootBlocks(); + } + + // Run filters only when the contents is valid + if (!args.invalid) { + // Run node filters + for (name in matchedNodes) { + list = nodeFilters[name]; + nodes = matchedNodes[name]; + + // Remove already removed children + fi = nodes.length; + while (fi--) { + if (!nodes[fi].parent) { + nodes.splice(fi, 1); + } + } + + for (i = 0, l = list.length; i < l; i++) { + list[i](nodes, name, args); + } + } + + // Run attribute filters + for (i = 0, l = attributeFilters.length; i < l; i++) { + list = attributeFilters[i]; + + if (list.name in matchedAttributes) { + nodes = matchedAttributes[list.name]; + + // Remove already removed children + fi = nodes.length; + while (fi--) { + if (!nodes[fi].parent) { + nodes.splice(fi, 1); + } + } + + for (fi = 0, fl = list.callbacks.length; fi < fl; fi++) { + list.callbacks[fi](nodes, list.name, args); + } + } + } + } + + return rootNode; + }; + + // Remove
    at end of block elements Gecko and WebKit injects BR elements to + // make it possible to place the caret inside empty blocks. This logic tries to remove + // these elements and keep br elements that where intended to be there intact + if (settings.remove_trailing_brs) { + self.addNodeFilter('br', function(nodes) { + var i, l = nodes.length, node, blockElements = extend({}, schema.getBlockElements()); + var nonEmptyElements = schema.getNonEmptyElements(), parent, lastParent, prev, prevName; + var elementRule, textNode; + + // Remove brs from body element as well + blockElements.body = 1; + + // Must loop forwards since it will otherwise remove all brs in

    a


    + for (i = 0; i < l; i++) { + node = nodes[i]; + parent = node.parent; + + if (blockElements[node.parent.name] && node === parent.lastChild) { + // Loop all nodes to the left of the current node and check for other BR elements + // excluding bookmarks since they are invisible + prev = node.prev; + while (prev) { + prevName = prev.name; + + // Ignore bookmarks + if (prevName !== "span" || prev.attr('data-mce-type') !== 'bookmark') { + // Found a non BR element + if (prevName !== "br") { + break; + } + + // Found another br it's a

    structure then don't remove anything + if (prevName === 'br') { + node = null; + break; + } + } + + prev = prev.prev; + } + + if (node) { + node.remove(); + + // Is the parent to be considered empty after we removed the BR + if (parent.isEmpty(nonEmptyElements)) { + elementRule = schema.getElementRule(parent.name); + + // Remove or padd the element depending on schema rule + if (elementRule) { + if (elementRule.removeEmpty) { + parent.remove(); + } else if (elementRule.paddEmpty) { + parent.empty().append(new Node('#text', 3)).value = '\u00a0'; + } + } + } + } + } else { + // Replaces BR elements inside inline elements like


    + // so they become

     

    + lastParent = node; + while (parent && parent.firstChild === lastParent && parent.lastChild === lastParent) { + lastParent = parent; + + if (blockElements[parent.name]) { + break; + } + + parent = parent.parent; + } + + if (lastParent === parent) { + textNode = new Node('#text', 3); + textNode.value = '\u00a0'; + node.replace(textNode); + } + } + } + }); + } + + // Force anchor names closed, unless the setting "allow_html_in_named_anchor" is explicitly included. + if (!settings.allow_html_in_named_anchor) { + self.addAttributeFilter('id,name', function(nodes) { + var i = nodes.length, sibling, prevSibling, parent, node; + + while (i--) { + node = nodes[i]; + if (node.name === 'a' && node.firstChild && !node.attr('href')) { + parent = node.parent; + + // Move children after current node + sibling = node.lastChild; + do { + prevSibling = sibling.prev; + parent.insert(sibling, node); + sibling = prevSibling; + } while (sibling); + } + } + }); + } + }; +}); diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/html/Entities.js b/common/static/js/vendor/tinymce/js/tinymce/classes/html/Entities.js new file mode 100755 index 0000000000..71430a9dfc --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/html/Entities.js @@ -0,0 +1,263 @@ +/** + * Entities.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*jshint bitwise:false */ +/*eslint no-bitwise:0 */ + +/** + * Entity encoder class. + * + * @class tinymce.html.Entities + * @static + * @version 3.4 + */ +define("tinymce/html/Entities", [ + "tinymce/util/Tools" +], function(Tools) { + var makeMap = Tools.makeMap; + + var namedEntities, baseEntities, reverseEntities, + attrsCharsRegExp = /[&<>\"\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g, + textCharsRegExp = /[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g, + rawCharsRegExp = /[<>&\"\']/g, + entityRegExp = /&(#x|#)?([\w]+);/g, + asciiMap = { + 128: "\u20AC", 130: "\u201A", 131: "\u0192", 132: "\u201E", 133: "\u2026", 134: "\u2020", + 135: "\u2021", 136: "\u02C6", 137: "\u2030", 138: "\u0160", 139: "\u2039", 140: "\u0152", + 142: "\u017D", 145: "\u2018", 146: "\u2019", 147: "\u201C", 148: "\u201D", 149: "\u2022", + 150: "\u2013", 151: "\u2014", 152: "\u02DC", 153: "\u2122", 154: "\u0161", 155: "\u203A", + 156: "\u0153", 158: "\u017E", 159: "\u0178" + }; + + // Raw entities + baseEntities = { + '\"': '"', // Needs to be escaped since the YUI compressor would otherwise break the code + "'": ''', + '<': '<', + '>': '>', + '&': '&' + }; + + // Reverse lookup table for raw entities + reverseEntities = { + '<': '<', + '>': '>', + '&': '&', + '"': '"', + ''': "'" + }; + + // Decodes text by using the browser + function nativeDecode(text) { + var elm; + + elm = document.createElement("div"); + elm.innerHTML = text; + + return elm.textContent || elm.innerText || text; + } + + // Build a two way lookup table for the entities + function buildEntitiesLookup(items, radix) { + var i, chr, entity, lookup = {}; + + if (items) { + items = items.split(','); + radix = radix || 10; + + // Build entities lookup table + for (i = 0; i < items.length; i += 2) { + chr = String.fromCharCode(parseInt(items[i], radix)); + + // Only add non base entities + if (!baseEntities[chr]) { + entity = '&' + items[i + 1] + ';'; + lookup[chr] = entity; + lookup[entity] = chr; + } + } + + return lookup; + } + } + + // Unpack entities lookup where the numbers are in radix 32 to reduce the size + namedEntities = buildEntitiesLookup( + '50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,' + + '5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,' + + '5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,' + + '5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,' + + '68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,' + + '6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,' + + '6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,' + + '75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,' + + '7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,' + + '7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,' + + 'sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,' + + 'st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,' + + 't9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,' + + 'tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,' + + 'u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,' + + '81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,' + + '8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,' + + '8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,' + + '8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,' + + '8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,' + + 'nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,' + + 'rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,' + + 'Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,' + + '80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,' + + '811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro', 32); + + var Entities = { + /** + * Encodes the specified string using raw entities. This means only the required XML base entities will be endoded. + * + * @method encodeRaw + * @param {String} text Text to encode. + * @param {Boolean} attr Optional flag to specify if the text is attribute contents. + * @return {String} Entity encoded text. + */ + encodeRaw: function(text, attr) { + return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function(chr) { + return baseEntities[chr] || chr; + }); + }, + + /** + * Encoded the specified text with both the attributes and text entities. This function will produce larger text contents + * since it doesn't know if the context is within a attribute or text node. This was added for compatibility + * and is exposed as the DOMUtils.encode function. + * + * @method encodeAllRaw + * @param {String} text Text to encode. + * @return {String} Entity encoded text. + */ + encodeAllRaw: function(text) { + return ('' + text).replace(rawCharsRegExp, function(chr) { + return baseEntities[chr] || chr; + }); + }, + + /** + * Encodes the specified string using numeric entities. The core entities will be + * encoded as named ones but all non lower ascii characters will be encoded into numeric entities. + * + * @method encodeNumeric + * @param {String} text Text to encode. + * @param {Boolean} attr Optional flag to specify if the text is attribute contents. + * @return {String} Entity encoded text. + */ + encodeNumeric: function(text, attr) { + return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function(chr) { + // Multi byte sequence convert it to a single entity + if (chr.length > 1) { + return '&#' + (((chr.charCodeAt(0) - 0xD800) * 0x400) + (chr.charCodeAt(1) - 0xDC00) + 0x10000) + ';'; + } + + return baseEntities[chr] || '&#' + chr.charCodeAt(0) + ';'; + }); + }, + + /** + * Encodes the specified string using named entities. The core entities will be encoded + * as named ones but all non lower ascii characters will be encoded into named entities. + * + * @method encodeNamed + * @param {String} text Text to encode. + * @param {Boolean} attr Optional flag to specify if the text is attribute contents. + * @param {Object} entities Optional parameter with entities to use. + * @return {String} Entity encoded text. + */ + encodeNamed: function(text, attr, entities) { + entities = entities || namedEntities; + + return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function(chr) { + return baseEntities[chr] || entities[chr] || chr; + }); + }, + + /** + * Returns an encode function based on the name(s) and it's optional entities. + * + * @method getEncodeFunc + * @param {String} name Comma separated list of encoders for example named,numeric. + * @param {String} entities Optional parameter with entities to use instead of the built in set. + * @return {function} Encode function to be used. + */ + getEncodeFunc: function(name, entities) { + entities = buildEntitiesLookup(entities) || namedEntities; + + function encodeNamedAndNumeric(text, attr) { + return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function(chr) { + return baseEntities[chr] || entities[chr] || '&#' + chr.charCodeAt(0) + ';' || chr; + }); + } + + function encodeCustomNamed(text, attr) { + return Entities.encodeNamed(text, attr, entities); + } + + // Replace + with , to be compatible with previous TinyMCE versions + name = makeMap(name.replace(/\+/g, ',')); + + // Named and numeric encoder + if (name.named && name.numeric) { + return encodeNamedAndNumeric; + } + + // Named encoder + if (name.named) { + // Custom names + if (entities) { + return encodeCustomNamed; + } + + return Entities.encodeNamed; + } + + // Numeric + if (name.numeric) { + return Entities.encodeNumeric; + } + + // Raw encoder + return Entities.encodeRaw; + }, + + /** + * Decodes the specified string, this will replace entities with raw UTF characters. + * + * @method decode + * @param {String} text Text to entity decode. + * @return {String} Entity decoded string. + */ + decode: function(text) { + return text.replace(entityRegExp, function(all, numeric, value) { + if (numeric) { + value = parseInt(value, numeric.length === 2 ? 16 : 10); + + // Support upper UTF + if (value > 0xFFFF) { + value -= 0x10000; + + return String.fromCharCode(0xD800 + (value >> 10), 0xDC00 + (value & 0x3FF)); + } else { + return asciiMap[value] || String.fromCharCode(value); + } + } + + return reverseEntities[all] || namedEntities[all] || nativeDecode(all); + }); + } + }; + + return Entities; +}); diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/html/Node.js b/common/static/js/vendor/tinymce/js/tinymce/classes/html/Node.js new file mode 100755 index 0000000000..acfc57a9fb --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/html/Node.js @@ -0,0 +1,496 @@ +/** + * Node.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class is a minimalistic implementation of a DOM like node used by the DomParser class. + * + * @example + * var node = new tinymce.html.Node('strong', 1); + * someRoot.append(node); + * + * @class tinymce.html.Node + * @version 3.4 + */ +define("tinymce/html/Node", [], function() { + var whiteSpaceRegExp = /^[ \t\r\n]*$/, typeLookup = { + '#text': 3, + '#comment': 8, + '#cdata': 4, + '#pi': 7, + '#doctype': 10, + '#document-fragment': 11 + }; + + // Walks the tree left/right + function walk(node, root_node, prev) { + var sibling, parent, startName = prev ? 'lastChild' : 'firstChild', siblingName = prev ? 'prev' : 'next'; + + // Walk into nodes if it has a start + if (node[startName]) { + return node[startName]; + } + + // Return the sibling if it has one + if (node !== root_node) { + sibling = node[siblingName]; + + if (sibling) { + return sibling; + } + + // Walk up the parents to look for siblings + for (parent = node.parent; parent && parent !== root_node; parent = parent.parent) { + sibling = parent[siblingName]; + + if (sibling) { + return sibling; + } + } + } + } + + /** + * Constructs a new Node instance. + * + * @constructor + * @method Node + * @param {String} name Name of the node type. + * @param {Number} type Numeric type representing the node. + */ + function Node(name, type) { + this.name = name; + this.type = type; + + if (type === 1) { + this.attributes = []; + this.attributes.map = {}; + } + } + + Node.prototype = { + /** + * Replaces the current node with the specified one. + * + * @example + * someNode.replace(someNewNode); + * + * @method replace + * @param {tinymce.html.Node} node Node to replace the current node with. + * @return {tinymce.html.Node} The old node that got replaced. + */ + replace: function(node) { + var self = this; + + if (node.parent) { + node.remove(); + } + + self.insert(node, self); + self.remove(); + + return self; + }, + + /** + * Gets/sets or removes an attribute by name. + * + * @example + * someNode.attr("name", "value"); // Sets an attribute + * console.log(someNode.attr("name")); // Gets an attribute + * someNode.attr("name", null); // Removes an attribute + * + * @method attr + * @param {String} name Attribute name to set or get. + * @param {String} value Optional value to set. + * @return {String/tinymce.html.Node} String or undefined on a get operation or the current node on a set operation. + */ + attr: function(name, value) { + var self = this, attrs, i, undef; + + if (typeof name !== "string") { + for (i in name) { + self.attr(i, name[i]); + } + + return self; + } + + if ((attrs = self.attributes)) { + if (value !== undef) { + // Remove attribute + if (value === null) { + if (name in attrs.map) { + delete attrs.map[name]; + + i = attrs.length; + while (i--) { + if (attrs[i].name === name) { + attrs = attrs.splice(i, 1); + return self; + } + } + } + + return self; + } + + // Set attribute + if (name in attrs.map) { + // Set attribute + i = attrs.length; + while (i--) { + if (attrs[i].name === name) { + attrs[i].value = value; + break; + } + } + } else { + attrs.push({name: name, value: value}); + } + + attrs.map[name] = value; + + return self; + } else { + return attrs.map[name]; + } + } + }, + + /** + * Does a shallow clones the node into a new node. It will also exclude id attributes since + * there should only be one id per document. + * + * @example + * var clonedNode = node.clone(); + * + * @method clone + * @return {tinymce.html.Node} New copy of the original node. + */ + clone: function() { + var self = this, clone = new Node(self.name, self.type), i, l, selfAttrs, selfAttr, cloneAttrs; + + // Clone element attributes + if ((selfAttrs = self.attributes)) { + cloneAttrs = []; + cloneAttrs.map = {}; + + for (i = 0, l = selfAttrs.length; i < l; i++) { + selfAttr = selfAttrs[i]; + + // Clone everything except id + if (selfAttr.name !== 'id') { + cloneAttrs[cloneAttrs.length] = {name: selfAttr.name, value: selfAttr.value}; + cloneAttrs.map[selfAttr.name] = selfAttr.value; + } + } + + clone.attributes = cloneAttrs; + } + + clone.value = self.value; + clone.shortEnded = self.shortEnded; + + return clone; + }, + + /** + * Wraps the node in in another node. + * + * @example + * node.wrap(wrapperNode); + * + * @method wrap + */ + wrap: function(wrapper) { + var self = this; + + self.parent.insert(wrapper, self); + wrapper.append(self); + + return self; + }, + + /** + * Unwraps the node in other words it removes the node but keeps the children. + * + * @example + * node.unwrap(); + * + * @method unwrap + */ + unwrap: function() { + var self = this, node, next; + + for (node = self.firstChild; node; ) { + next = node.next; + self.insert(node, self, true); + node = next; + } + + self.remove(); + }, + + /** + * Removes the node from it's parent. + * + * @example + * node.remove(); + * + * @method remove + * @return {tinymce.html.Node} Current node that got removed. + */ + remove: function() { + var self = this, parent = self.parent, next = self.next, prev = self.prev; + + if (parent) { + if (parent.firstChild === self) { + parent.firstChild = next; + + if (next) { + next.prev = null; + } + } else { + prev.next = next; + } + + if (parent.lastChild === self) { + parent.lastChild = prev; + + if (prev) { + prev.next = null; + } + } else { + next.prev = prev; + } + + self.parent = self.next = self.prev = null; + } + + return self; + }, + + /** + * Appends a new node as a child of the current node. + * + * @example + * node.append(someNode); + * + * @method append + * @param {tinymce.html.Node} node Node to append as a child of the current one. + * @return {tinymce.html.Node} The node that got appended. + */ + append: function(node) { + var self = this, last; + + if (node.parent) { + node.remove(); + } + + last = self.lastChild; + if (last) { + last.next = node; + node.prev = last; + self.lastChild = node; + } else { + self.lastChild = self.firstChild = node; + } + + node.parent = self; + + return node; + }, + + /** + * Inserts a node at a specific position as a child of the current node. + * + * @example + * parentNode.insert(newChildNode, oldChildNode); + * + * @method insert + * @param {tinymce.html.Node} node Node to insert as a child of the current node. + * @param {tinymce.html.Node} ref_node Reference node to set node before/after. + * @param {Boolean} before Optional state to insert the node before the reference node. + * @return {tinymce.html.Node} The node that got inserted. + */ + insert: function(node, ref_node, before) { + var parent; + + if (node.parent) { + node.remove(); + } + + parent = ref_node.parent || this; + + if (before) { + if (ref_node === parent.firstChild) { + parent.firstChild = node; + } else { + ref_node.prev.next = node; + } + + node.prev = ref_node.prev; + node.next = ref_node; + ref_node.prev = node; + } else { + if (ref_node === parent.lastChild) { + parent.lastChild = node; + } else { + ref_node.next.prev = node; + } + + node.next = ref_node.next; + node.prev = ref_node; + ref_node.next = node; + } + + node.parent = parent; + + return node; + }, + + /** + * Get all children by name. + * + * @method getAll + * @param {String} name Name of the child nodes to collect. + * @return {Array} Array with child nodes matchin the specified name. + */ + getAll: function(name) { + var self = this, node, collection = []; + + for (node = self.firstChild; node; node = walk(node, self)) { + if (node.name === name) { + collection.push(node); + } + } + + return collection; + }, + + /** + * Removes all children of the current node. + * + * @method empty + * @return {tinymce.html.Node} The current node that got cleared. + */ + empty: function() { + var self = this, nodes, i, node; + + // Remove all children + if (self.firstChild) { + nodes = []; + + // Collect the children + for (node = self.firstChild; node; node = walk(node, self)) { + nodes.push(node); + } + + // Remove the children + i = nodes.length; + while (i--) { + node = nodes[i]; + node.parent = node.firstChild = node.lastChild = node.next = node.prev = null; + } + } + + self.firstChild = self.lastChild = null; + + return self; + }, + + /** + * Returns true/false if the node is to be considered empty or not. + * + * @example + * node.isEmpty({img: true}); + * @method isEmpty + * @param {Object} elements Name/value object with elements that are automatically treated as non empty elements. + * @return {Boolean} true/false if the node is empty or not. + */ + isEmpty: function(elements) { + var self = this, node = self.firstChild, i, name; + + if (node) { + do { + if (node.type === 1) { + // Ignore bogus elements + if (node.attributes.map['data-mce-bogus']) { + continue; + } + + // Keep empty elements like + if (elements[node.name]) { + return false; + } + + // Keep elements with data attributes or name attribute like
    + i = node.attributes.length; + while (i--) { + name = node.attributes[i].name; + if (name === "name" || name.indexOf('data-mce-') === 0) { + return false; + } + } + } + + // Keep comments + if (node.type === 8) { + return false; + } + + // Keep non whitespace text nodes + if ((node.type === 3 && !whiteSpaceRegExp.test(node.value))) { + return false; + } + } while ((node = walk(node, self))); + } + + return true; + }, + + /** + * Walks to the next or previous node and returns that node or null if it wasn't found. + * + * @method walk + * @param {Boolean} prev Optional previous node state defaults to false. + * @return {tinymce.html.Node} Node that is next to or previous of the current node. + */ + walk: function(prev) { + return walk(this, null, prev); + } + }; + + /** + * Creates a node of a specific type. + * + * @static + * @method create + * @param {String} name Name of the node type to create for example "b" or "#text". + * @param {Object} attrs Name/value collection of attributes that will be applied to elements. + */ + Node.create = function(name, attrs) { + var node, attrName; + + // Create node + node = new Node(name, typeLookup[name] || 1); + + // Add attributes if needed + if (attrs) { + for (attrName in attrs) { + node.attr(attrName, attrs[attrName]); + } + } + + return node; + }; + + return Node; +}); diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/html/SaxParser.js b/common/static/js/vendor/tinymce/js/tinymce/classes/html/SaxParser.js new file mode 100755 index 0000000000..80258fde18 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/html/SaxParser.js @@ -0,0 +1,423 @@ +/** + * SaxParser.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*eslint max-depth:[2, 9] */ + +/** + * This class parses HTML code using pure JavaScript and executes various events for each item it finds. It will + * always execute the events in the right order for tag soup code like

    . It will also remove elements + * and attributes that doesn't fit the schema if the validate setting is enabled. + * + * @example + * var parser = new tinymce.html.SaxParser({ + * validate: true, + * + * comment: function(text) { + * console.log('Comment:', text); + * }, + * + * cdata: function(text) { + * console.log('CDATA:', text); + * }, + * + * text: function(text, raw) { + * console.log('Text:', text, 'Raw:', raw); + * }, + * + * start: function(name, attrs, empty) { + * console.log('Start:', name, attrs, empty); + * }, + * + * end: function(name) { + * console.log('End:', name); + * }, + * + * pi: function(name, text) { + * console.log('PI:', name, text); + * }, + * + * doctype: function(text) { + * console.log('DocType:', text); + * } + * }, schema); + * @class tinymce.html.SaxParser + * @version 3.4 + */ +define("tinymce/html/SaxParser", [ + "tinymce/html/Schema", + "tinymce/html/Entities", + "tinymce/util/Tools" +], function(Schema, Entities, Tools) { + var each = Tools.each; + + /** + * Constructs a new SaxParser instance. + * + * @constructor + * @method SaxParser + * @param {Object} settings Name/value collection of settings. comment, cdata, text, start and end are callbacks. + * @param {tinymce.html.Schema} schema HTML Schema class to use when parsing. + */ + return function(settings, schema) { + var self = this; + + function noop() {} + + settings = settings || {}; + self.schema = schema = schema || new Schema(); + + if (settings.fix_self_closing !== false) { + settings.fix_self_closing = true; + } + + // Add handler functions from settings and setup default handlers + each('comment cdata text start end pi doctype'.split(' '), function(name) { + if (name) { + self[name] = settings[name] || noop; + } + }); + + /** + * Parses the specified HTML string and executes the callbacks for each item it finds. + * + * @example + * new SaxParser({...}).parse('text'); + * @method parse + * @param {String} html Html string to sax parse. + */ + self.parse = function(html) { + var self = this, matches, index = 0, value, endRegExp, stack = [], attrList, i, text, name; + var isInternalElement, removeInternalElements, shortEndedElements, fillAttrsMap, isShortEnded; + var validate, elementRule, isValidElement, attr, attribsValue, validAttributesMap, validAttributePatterns; + var attributesRequired, attributesDefault, attributesForced; + var anyAttributesRequired, selfClosing, tokenRegExp, attrRegExp, specialElements, attrValue, idCount = 0; + var decode = Entities.decode, fixSelfClosing, filteredUrlAttrs = Tools.makeMap('src,href'); + var scriptUriRegExp = /(java|vb)script:/i; + + function processEndTag(name) { + var pos, i; + + // Find position of parent of the same type + pos = stack.length; + while (pos--) { + if (stack[pos].name === name) { + break; + } + } + + // Found parent + if (pos >= 0) { + // Close all the open elements + for (i = stack.length - 1; i >= pos; i--) { + name = stack[i]; + + if (name.valid) { + self.end(name.name); + } + } + + // Remove the open elements from the stack + stack.length = pos; + } + } + + function parseAttribute(match, name, value, val2, val3) { + var attrRule, i, trimRegExp = /[\s\u0000-\u001F]+/g; + + name = name.toLowerCase(); + value = name in fillAttrsMap ? name : decode(value || val2 || val3 || ''); // Handle boolean attribute than value attribute + + // Validate name and value pass through all data- attributes + if (validate && !isInternalElement && name.indexOf('data-') !== 0) { + attrRule = validAttributesMap[name]; + + // Find rule by pattern matching + if (!attrRule && validAttributePatterns) { + i = validAttributePatterns.length; + while (i--) { + attrRule = validAttributePatterns[i]; + if (attrRule.pattern.test(name)) { + break; + } + } + + // No rule matched + if (i === -1) { + attrRule = null; + } + } + + // No attribute rule found + if (!attrRule) { + return; + } + + // Validate value + if (attrRule.validValues && !(value in attrRule.validValues)) { + return; + } + } + + // Block any javascript: urls + if (filteredUrlAttrs[name] && !settings.allow_script_urls) { + var uri = value.replace(trimRegExp, ''); + + try { + // Might throw malformed URI sequence + uri = decodeURIComponent(uri); + if (scriptUriRegExp.test(uri)) { + return; + } + } catch (ex) { + // Fallback to non UTF-8 decoder + uri = unescape(uri); + if (scriptUriRegExp.test(uri)) { + return; + } + } + } + + // Add attribute to list and map + attrList.map[name] = value; + attrList.push({ + name: name, + value: value + }); + } + + // Precompile RegExps and map objects + tokenRegExp = new RegExp('<(?:' + + '(?:!--([\\w\\W]*?)-->)|' + // Comment + '(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|' + // CDATA + '(?:!DOCTYPE([\\w\\W]*?)>)|' + // DOCTYPE + '(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|' + // PI + '(?:\\/([^>]+)>)|' + // End element + '(?:([A-Za-z0-9\\-\\:\\.]+)((?:\\s+[^"\'>]+(?:(?:"[^"]*")|(?:\'[^\']*\')|[^>]*))*|\\/|\\s+)>)' + // Start element + ')', 'g'); + + attrRegExp = /([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g; + + // Setup lookup tables for empty elements and boolean attributes + shortEndedElements = schema.getShortEndedElements(); + selfClosing = settings.self_closing_elements || schema.getSelfClosingElements(); + fillAttrsMap = schema.getBoolAttrs(); + validate = settings.validate; + removeInternalElements = settings.remove_internals; + fixSelfClosing = settings.fix_self_closing; + specialElements = schema.getSpecialElements(); + + while ((matches = tokenRegExp.exec(html))) { + // Text + if (index < matches.index) { + self.text(decode(html.substr(index, matches.index - index))); + } + + if ((value = matches[6])) { // End element + value = value.toLowerCase(); + + // IE will add a ":" in front of elements it doesn't understand like custom elements or HTML5 elements + if (value.charAt(0) === ':') { + value = value.substr(1); + } + + processEndTag(value); + } else if ((value = matches[7])) { // Start element + value = value.toLowerCase(); + + // IE will add a ":" in front of elements it doesn't understand like custom elements or HTML5 elements + if (value.charAt(0) === ':') { + value = value.substr(1); + } + + isShortEnded = value in shortEndedElements; + + // Is self closing tag for example an
  • after an open
  • + if (fixSelfClosing && selfClosing[value] && stack.length > 0 && stack[stack.length - 1].name === value) { + processEndTag(value); + } + + // Validate element + if (!validate || (elementRule = schema.getElementRule(value))) { + isValidElement = true; + + // Grab attributes map and patters when validation is enabled + if (validate) { + validAttributesMap = elementRule.attributes; + validAttributePatterns = elementRule.attributePatterns; + } + + // Parse attributes + if ((attribsValue = matches[8])) { + isInternalElement = attribsValue.indexOf('data-mce-type') !== -1; // Check if the element is an internal element + + // If the element has internal attributes then remove it if we are told to do so + if (isInternalElement && removeInternalElements) { + isValidElement = false; + } + + attrList = []; + attrList.map = {}; + + attribsValue.replace(attrRegExp, parseAttribute); + } else { + attrList = []; + attrList.map = {}; + } + + // Process attributes if validation is enabled + if (validate && !isInternalElement) { + attributesRequired = elementRule.attributesRequired; + attributesDefault = elementRule.attributesDefault; + attributesForced = elementRule.attributesForced; + anyAttributesRequired = elementRule.removeEmptyAttrs; + + // Check if any attribute exists + if (anyAttributesRequired && !attrList.length) { + isValidElement = false; + } + + // Handle forced attributes + if (attributesForced) { + i = attributesForced.length; + while (i--) { + attr = attributesForced[i]; + name = attr.name; + attrValue = attr.value; + + if (attrValue === '{$uid}') { + attrValue = 'mce_' + idCount++; + } + + attrList.map[name] = attrValue; + attrList.push({name: name, value: attrValue}); + } + } + + // Handle default attributes + if (attributesDefault) { + i = attributesDefault.length; + while (i--) { + attr = attributesDefault[i]; + name = attr.name; + + if (!(name in attrList.map)) { + attrValue = attr.value; + + if (attrValue === '{$uid}') { + attrValue = 'mce_' + idCount++; + } + + attrList.map[name] = attrValue; + attrList.push({name: name, value: attrValue}); + } + } + } + + // Handle required attributes + if (attributesRequired) { + i = attributesRequired.length; + while (i--) { + if (attributesRequired[i] in attrList.map) { + break; + } + } + + // None of the required attributes where found + if (i === -1) { + isValidElement = false; + } + } + + // Invalidate element if it's marked as bogus + if (attrList.map['data-mce-bogus']) { + isValidElement = false; + } + } + + if (isValidElement) { + self.start(value, attrList, isShortEnded); + } + } else { + isValidElement = false; + } + + // Treat script, noscript and style a bit different since they may include code that looks like elements + if ((endRegExp = specialElements[value])) { + endRegExp.lastIndex = index = matches.index + matches[0].length; + + if ((matches = endRegExp.exec(html))) { + if (isValidElement) { + text = html.substr(index, matches.index - index); + } + + index = matches.index + matches[0].length; + } else { + text = html.substr(index); + index = html.length; + } + + if (isValidElement) { + if (text.length > 0) { + self.text(text, true); + } + + self.end(value); + } + + tokenRegExp.lastIndex = index; + continue; + } + + // Push value on to stack + if (!isShortEnded) { + if (!attribsValue || attribsValue.indexOf('/') != attribsValue.length - 1) { + stack.push({name: value, valid: isValidElement}); + } else if (isValidElement) { + self.end(value); + } + } + } else if ((value = matches[1])) { // Comment + // Padd comment value to avoid browsers from parsing invalid comments as HTML + if (value.charAt(0) === '>') { + value = ' ' + value; + } + + if (!settings.allow_conditional_comments && value.substr(0, 3) === '[if') { + value = ' ' + value; + } + + self.comment(value); + } else if ((value = matches[2])) { // CDATA + self.cdata(value); + } else if ((value = matches[3])) { // DOCTYPE + self.doctype(value); + } else if ((value = matches[4])) { // PI + self.pi(value, matches[5]); + } + + index = matches.index + matches[0].length; + } + + // Text + if (index < html.length) { + self.text(decode(html.substr(index))); + } + + // Close any open elements + for (i = stack.length - 1; i >= 0; i--) { + value = stack[i]; + + if (value.valid) { + self.end(value.name); + } + } + }; + }; +}); diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/html/Schema.js b/common/static/js/vendor/tinymce/js/tinymce/classes/html/Schema.js new file mode 100755 index 0000000000..40b44e56d2 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/html/Schema.js @@ -0,0 +1,938 @@ +/** + * Schema.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Schema validator class. + * + * @class tinymce.html.Schema + * @example + * if (tinymce.activeEditor.schema.isValidChild('p', 'span')) + * alert('span is valid child of p.'); + * + * if (tinymce.activeEditor.schema.getElementRule('p')) + * alert('P is a valid element.'); + * + * @class tinymce.html.Schema + * @version 3.4 + */ +define("tinymce/html/Schema", [ + "tinymce/util/Tools" +], function(Tools) { + var mapCache = {}; + var makeMap = Tools.makeMap, each = Tools.each, extend = Tools.extend, explode = Tools.explode, inArray = Tools.inArray; + + function split(items, delim) { + return items ? items.split(delim || ' ') : []; + } + + /** + * Builds a schema lookup table + * + * @private + * @param {String} type html4, html5 or html5-strict schema type. + * @return {Object} Schema lookup table. + */ + function compileSchema(type) { + var schema = {}, globalAttributes, blockContent; + var phrasingContent, flowContent, html4BlockContent, html4PhrasingContent; + + function add(name, attributes, children) { + var ni, i, attributesOrder, args = arguments; + + function arrayToMap(array) { + var map = {}, i, l; + + for (i = 0, l = array.length; i < l; i++) { + map[array[i]] = {}; + } + + return map; + } + + children = children || []; + attributes = attributes || ""; + + if (typeof(children) === "string") { + children = split(children); + } + + // Split string children + for (i = 3; i < args.length; i++) { + if (typeof(args[i]) === "string") { + args[i] = split(args[i]); + } + + children.push.apply(children, args[i]); + } + + name = split(name); + ni = name.length; + while (ni--) { + attributesOrder = [].concat(globalAttributes, split(attributes)); + schema[name[ni]] = { + attributes: arrayToMap(attributesOrder), + attributesOrder: attributesOrder, + children: arrayToMap(children) + }; + } + } + + function addAttrs(name, attributes) { + var ni, schemaItem, i, l; + + name = split(name); + ni = name.length; + attributes = split(attributes); + while (ni--) { + schemaItem = schema[name[ni]]; + for (i = 0, l = attributes.length; i < l; i++) { + schemaItem.attributes[attributes[i]] = {}; + schemaItem.attributesOrder.push(attributes[i]); + } + } + } + + // Use cached schema + if (mapCache[type]) { + return mapCache[type]; + } + + // Attributes present on all elements + globalAttributes = split("id accesskey class dir lang style tabindex title"); + + // Event attributes can be opt-in/opt-out + /*eventAttributes = split("onabort onblur oncancel oncanplay oncanplaythrough onchange onclick onclose oncontextmenu oncuechange " + + "ondblclick ondrag ondragend ondragenter ondragleave ondragover ondragstart ondrop ondurationchange onemptied onended " + + "onerror onfocus oninput oninvalid onkeydown onkeypress onkeyup onload onloadeddata onloadedmetadata onloadstart " + + "onmousedown onmousemove onmouseout onmouseover onmouseup onmousewheel onpause onplay onplaying onprogress onratechange " + + "onreset onscroll onseeked onseeking onseeking onselect onshow onstalled onsubmit onsuspend ontimeupdate onvolumechange " + + "onwaiting" + );*/ + + // Block content elements + blockContent = split( + "address blockquote div dl fieldset form h1 h2 h3 h4 h5 h6 hr menu ol p pre table ul" + ); + + // Phrasing content elements from the HTML5 spec (inline) + phrasingContent = split( + "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" + ); + + // Add HTML5 items to globalAttributes, blockContent, phrasingContent + if (type != "html4") { + globalAttributes.push.apply(globalAttributes, split("contenteditable contextmenu draggable dropzone " + + "hidden spellcheck translate")); + blockContent.push.apply(blockContent, split("article aside details dialog figure header footer hgroup section nav")); + phrasingContent.push.apply(phrasingContent, split("audio canvas command datalist mark meter output progress time wbr " + + "video ruby bdi keygen")); + } + + // Add HTML4 elements unless it's html5-strict + if (type != "html5-strict") { + globalAttributes.push("xml:lang"); + + html4PhrasingContent = split("acronym applet basefont big font strike tt"); + phrasingContent.push.apply(phrasingContent, html4PhrasingContent); + + each(html4PhrasingContent, function(name) { + add(name, "", phrasingContent); + }); + + html4BlockContent = split("center dir isindex noframes"); + blockContent.push.apply(blockContent, html4BlockContent); + + // Flow content elements from the HTML5 spec (block+inline) + flowContent = [].concat(blockContent, phrasingContent); + + each(html4BlockContent, function(name) { + add(name, "", flowContent); + }); + } + + // Flow content elements from the HTML5 spec (block+inline) + flowContent = flowContent || [].concat(blockContent, phrasingContent); + + // HTML4 base schema TODO: Move HTML5 specific attributes to HTML5 specific if statement + // Schema items , , + add("html", "manifest", "head body"); + add("head", "", "base command link meta noscript script style title"); + add("title hr noscript br"); + add("base", "href target"); + add("link", "href rel media hreflang type sizes hreflang"); + add("meta", "name http-equiv content charset"); + add("style", "media type scoped"); + add("script", "src async defer type charset"); + add("body", "onafterprint onbeforeprint onbeforeunload onblur onerror onfocus " + + "onhashchange onload onmessage onoffline ononline onpagehide onpageshow " + + "onpopstate onresize onscroll onstorage onunload", flowContent); + add("address dt dd div caption", "", flowContent); + add("h1 h2 h3 h4 h5 h6 pre p abbr code var samp kbd sub sup i b u bdo span legend em strong small s cite dfn", "", phrasingContent); + add("blockquote", "cite", flowContent); + add("ol", "reversed start type", "li"); + add("ul", "", "li"); + add("li", "value", flowContent); + add("dl", "", "dt dd"); + add("a", "href target rel media hreflang type", phrasingContent); + add("q", "cite", phrasingContent); + add("ins del", "cite datetime", flowContent); + add("img", "src alt usemap ismap width height"); + add("iframe", "src name width height", flowContent); + add("embed", "src type width height"); + add("object", "data type typemustmatch name usemap form width height", flowContent, "param"); + add("param", "name value"); + add("map", "name", flowContent, "area"); + add("area", "alt coords shape href target rel media hreflang type"); + add("table", "border", "caption colgroup thead tfoot tbody tr" + (type == "html4" ? " col" : "")); + add("colgroup", "span", "col"); + add("col", "span"); + add("tbody thead tfoot", "", "tr"); + add("tr", "", "td th"); + add("td", "colspan rowspan headers", flowContent); + add("th", "colspan rowspan headers scope abbr", flowContent); + add("form", "accept-charset action autocomplete enctype method name novalidate target", flowContent); + add("fieldset", "disabled form name", flowContent, "legend"); + add("label", "form for", phrasingContent); + add("input", "accept alt autocomplete checked dirname disabled form formaction formenctype formmethod formnovalidate " + + "formtarget height list max maxlength min multiple name pattern readonly required size src step type value width" + ); + add("button", "disabled form formaction formenctype formmethod formnovalidate formtarget name type value", + type == "html4" ? flowContent : phrasingContent); + add("select", "disabled form multiple name required size", "option optgroup"); + add("optgroup", "disabled label", "option"); + add("option", "disabled label selected value"); + add("textarea", "cols dirname disabled form maxlength name readonly required rows wrap"); + add("menu", "type label", flowContent, "li"); + add("noscript", "", flowContent); + + // Extend with HTML5 elements + if (type != "html4") { + add("wbr"); + add("ruby", "", phrasingContent, "rt rp"); + add("figcaption", "", flowContent); + add("mark rt rp summary bdi", "", phrasingContent); + add("canvas", "width height", flowContent); + add("video", "src crossorigin poster preload autoplay mediagroup loop " + + "muted controls width height", flowContent, "track source"); + add("audio", "src crossorigin preload autoplay mediagroup loop muted controls", flowContent, "track source"); + add("source", "src type media"); + add("track", "kind src srclang label default"); + add("datalist", "", phrasingContent, "option"); + add("article section nav aside header footer", "", flowContent); + add("hgroup", "", "h1 h2 h3 h4 h5 h6"); + add("figure", "", flowContent, "figcaption"); + add("time", "datetime", phrasingContent); + add("dialog", "open", flowContent); + add("command", "type label icon disabled checked radiogroup command"); + add("output", "for form name", phrasingContent); + add("progress", "value max", phrasingContent); + add("meter", "value min max low high optimum", phrasingContent); + add("details", "open", flowContent, "summary"); + add("keygen", "autofocus challenge disabled form keytype name"); + } + + // Extend with HTML4 attributes unless it's html5-strict + if (type != "html5-strict") { + addAttrs("script", "language xml:space"); + addAttrs("style", "xml:space"); + addAttrs("object", "declare classid codebase codetype archive standby align border hspace vspace"); + addAttrs("param", "valuetype type"); + addAttrs("a", "charset name rev shape coords"); + addAttrs("br", "clear"); + addAttrs("applet", "codebase archive code object alt name width height align hspace vspace"); + addAttrs("img", "name longdesc align border hspace vspace"); + addAttrs("iframe", "longdesc frameborder marginwidth marginheight scrolling align"); + addAttrs("font basefont", "size color face"); + addAttrs("input", "usemap align"); + addAttrs("select", "onchange"); + addAttrs("textarea"); + addAttrs("h1 h2 h3 h4 h5 h6 div p legend caption", "align"); + addAttrs("ul", "type compact"); + addAttrs("li", "type"); + addAttrs("ol dl menu dir", "compact"); + addAttrs("pre", "width xml:space"); + addAttrs("hr", "align noshade size width"); + addAttrs("isindex", "prompt"); + addAttrs("table", "summary width frame rules cellspacing cellpadding align bgcolor"); + addAttrs("col", "width align char charoff valign"); + addAttrs("colgroup", "width align char charoff valign"); + addAttrs("thead", "align char charoff valign"); + addAttrs("tr", "align char charoff valign bgcolor"); + addAttrs("th", "axis align char charoff valign nowrap bgcolor width height"); + addAttrs("form", "accept"); + addAttrs("td", "abbr axis scope align char charoff valign nowrap bgcolor width height"); + addAttrs("tfoot", "align char charoff valign"); + addAttrs("tbody", "align char charoff valign"); + addAttrs("area", "nohref"); + addAttrs("body", "background bgcolor text link vlink alink"); + } + + // Extend with HTML5 attributes unless it's html4 + if (type != "html4") { + addAttrs("input button select textarea", "autofocus"); + addAttrs("input textarea", "placeholder"); + addAttrs("a", "download"); + addAttrs("link script img", "crossorigin"); + addAttrs("iframe", "srcdoc sandbox seamless allowfullscreen"); + } + + // Special: iframe, ruby, video, audio, label + + // Delete children of the same name from it's parent + // For example: form can't have a child of the name form + each(split('a form meter progress dfn'), function(name) { + if (schema[name]) { + delete schema[name].children[name]; + } + }); + + // Delete header, footer, sectioning and heading content descendants + /*each('dt th address', function(name) { + delete schema[name].children[name]; + });*/ + + // Caption can't have tables + delete schema.caption.children.table; + + // TODO: LI:s can only have value if parent is OL + + // TODO: Handle transparent elements + // a ins del canvas map + + mapCache[type] = schema; + + return schema; + } + + /** + * Constructs a new Schema instance. + * + * @constructor + * @method Schema + * @param {Object} settings Name/value settings object. + */ + return function(settings) { + var self = this, elements = {}, children = {}, patternElements = [], validStyles, schemaItems; + var whiteSpaceElementsMap, selfClosingElementsMap, shortEndedElementsMap, boolAttrMap; + var blockElementsMap, nonEmptyElementsMap, textBlockElementsMap, customElementsMap = {}, specialElements = {}; + + // Creates an lookup table map object for the specified option or the default value + function createLookupTable(option, default_value, extendWith) { + var value = settings[option]; + + if (!value) { + // Get cached default map or make it if needed + value = mapCache[option]; + + if (!value) { + value = makeMap(default_value, ' ', makeMap(default_value.toUpperCase(), ' ')); + value = extend(value, extendWith); + + mapCache[option] = value; + } + } else { + // Create custom map + value = makeMap(value, ',', makeMap(value.toUpperCase(), ' ')); + } + + return value; + } + + settings = settings || {}; + schemaItems = compileSchema(settings.schema); + + // Allow all elements and attributes if verify_html is set to false + if (settings.verify_html === false) { + settings.valid_elements = '*[*]'; + } + + // Build styles list + if (settings.valid_styles) { + validStyles = {}; + + // Convert styles into a rule list + each(settings.valid_styles, function(value, key) { + validStyles[key] = explode(value); + }); + } + + // Setup map objects + whiteSpaceElementsMap = createLookupTable('whitespace_elements', 'pre script noscript style textarea video audio iframe object'); + selfClosingElementsMap = createLookupTable('self_closing_elements', 'colgroup dd dt li option p td tfoot th thead tr'); + shortEndedElementsMap = createLookupTable('short_ended_elements', 'area base basefont br col frame hr img input isindex link ' + + 'meta param embed source wbr track'); + boolAttrMap = createLookupTable('boolean_attributes', 'checked compact declare defer disabled ismap multiple nohref noresize ' + + 'noshade nowrap readonly selected autoplay loop controls'); + nonEmptyElementsMap = createLookupTable('non_empty_elements', 'td th iframe video audio object script', shortEndedElementsMap); + 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 nav figure'); + blockElementsMap = createLookupTable('block_elements', 'hr table tbody thead tfoot ' + + 'th tr td li ol ul caption dl dt dd noscript menu isindex option ' + + 'datalist select optgroup', textBlockElementsMap); + + each((settings.special || 'script noscript style textarea').split(' '), function(name) { + specialElements[name] = new RegExp('<\/' + name + '[^>]*>','gi'); + }); + + // Converts a wildcard expression string to a regexp for example *a will become /.*a/. + function patternToRegExp(str) { + return new RegExp('^' + str.replace(/([?+*])/g, '.$1') + '$'); + } + + // Parses the specified valid_elements string and adds to the current rules + // This function is a bit hard to read since it's heavily optimized for speed + function addValidElements(valid_elements) { + var ei, el, ai, al, matches, element, attr, attrData, elementName, attrName, attrType, attributes, attributesOrder, + prefix, outputName, globalAttributes, globalAttributesOrder, key, value, + elementRuleRegExp = /^([#+\-])?([^\[!\/]+)(?:\/([^\[!]+))?(?:(!?)\[([^\]]+)\])?$/, + attrRuleRegExp = /^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/, + hasPatternsRegExp = /[*?+]/; + + if (valid_elements) { + // Split valid elements into an array with rules + valid_elements = split(valid_elements, ','); + + if (elements['@']) { + globalAttributes = elements['@'].attributes; + globalAttributesOrder = elements['@'].attributesOrder; + } + + // Loop all rules + for (ei = 0, el = valid_elements.length; ei < el; ei++) { + // Parse element rule + matches = elementRuleRegExp.exec(valid_elements[ei]); + if (matches) { + // Setup local names for matches + prefix = matches[1]; + elementName = matches[2]; + outputName = matches[3]; + attrData = matches[5]; + + // Create new attributes and attributesOrder + attributes = {}; + attributesOrder = []; + + // Create the new element + element = { + attributes: attributes, + attributesOrder: attributesOrder + }; + + // Padd empty elements prefix + if (prefix === '#') { + element.paddEmpty = true; + } + + // Remove empty elements prefix + if (prefix === '-') { + element.removeEmpty = true; + } + + if (matches[4] === '!') { + element.removeEmptyAttrs = true; + } + + // Copy attributes from global rule into current rule + if (globalAttributes) { + for (key in globalAttributes) { + attributes[key] = globalAttributes[key]; + } + + attributesOrder.push.apply(attributesOrder, globalAttributesOrder); + } + + // Attributes defined + if (attrData) { + attrData = split(attrData, '|'); + for (ai = 0, al = attrData.length; ai < al; ai++) { + matches = attrRuleRegExp.exec(attrData[ai]); + if (matches) { + attr = {}; + attrType = matches[1]; + attrName = matches[2].replace(/::/g, ':'); + prefix = matches[3]; + value = matches[4]; + + // Required + if (attrType === '!') { + element.attributesRequired = element.attributesRequired || []; + element.attributesRequired.push(attrName); + attr.required = true; + } + + // Denied from global + if (attrType === '-') { + delete attributes[attrName]; + attributesOrder.splice(inArray(attributesOrder, attrName), 1); + continue; + } + + // Default value + if (prefix) { + // Default value + if (prefix === '=') { + element.attributesDefault = element.attributesDefault || []; + element.attributesDefault.push({name: attrName, value: value}); + attr.defaultValue = value; + } + + // Forced value + if (prefix === ':') { + element.attributesForced = element.attributesForced || []; + element.attributesForced.push({name: attrName, value: value}); + attr.forcedValue = value; + } + + // Required values + if (prefix === '<') { + attr.validValues = makeMap(value, '?'); + } + } + + // Check for attribute patterns + if (hasPatternsRegExp.test(attrName)) { + element.attributePatterns = element.attributePatterns || []; + attr.pattern = patternToRegExp(attrName); + element.attributePatterns.push(attr); + } else { + // Add attribute to order list if it doesn't already exist + if (!attributes[attrName]) { + attributesOrder.push(attrName); + } + + attributes[attrName] = attr; + } + } + } + } + + // Global rule, store away these for later usage + if (!globalAttributes && elementName == '@') { + globalAttributes = attributes; + globalAttributesOrder = attributesOrder; + } + + // Handle substitute elements such as b/strong + if (outputName) { + element.outputName = elementName; + elements[outputName] = element; + } + + // Add pattern or exact element + if (hasPatternsRegExp.test(elementName)) { + element.pattern = patternToRegExp(elementName); + patternElements.push(element); + } else { + elements[elementName] = element; + } + } + } + } + } + + function setValidElements(valid_elements) { + elements = {}; + patternElements = []; + + addValidElements(valid_elements); + + each(schemaItems, function(element, name) { + children[name] = element.children; + }); + } + + // Adds custom non HTML elements to the schema + function addCustomElements(custom_elements) { + var customElementRegExp = /^(~)?(.+)$/; + + if (custom_elements) { + // Flush cached items since we are altering the default maps + mapCache.text_block_elements = mapCache.block_elements = null; + + each(split(custom_elements, ','), function(rule) { + var matches = customElementRegExp.exec(rule), + inline = matches[1] === '~', + cloneName = inline ? 'span' : 'div', + name = matches[2]; + + children[name] = children[cloneName]; + customElementsMap[name] = cloneName; + + // If it's not marked as inline then add it to valid block elements + if (!inline) { + blockElementsMap[name.toUpperCase()] = {}; + blockElementsMap[name] = {}; + } + + // Add elements clone if needed + if (!elements[name]) { + var customRule = elements[cloneName]; + + customRule = extend({}, customRule); + delete customRule.removeEmptyAttrs; + delete customRule.removeEmpty; + + elements[name] = customRule; + } + + // Add custom elements at span/div positions + each(children, function(element, elmName) { + if (element[cloneName]) { + children[elmName] = element = extend({}, children[elmName]); + element[name] = element[cloneName]; + } + }); + }); + } + } + + // Adds valid children to the schema object + function addValidChildren(valid_children) { + var childRuleRegExp = /^([+\-]?)(\w+)\[([^\]]+)\]$/; + + if (valid_children) { + each(split(valid_children, ','), function(rule) { + var matches = childRuleRegExp.exec(rule), parent, prefix; + + if (matches) { + prefix = matches[1]; + + // Add/remove items from default + if (prefix) { + parent = children[matches[2]]; + } else { + parent = children[matches[2]] = {'#comment': {}}; + } + + parent = children[matches[2]]; + + each(split(matches[3], '|'), function(child) { + if (prefix === '-') { + // Clone the element before we delete + // things in it to not mess up default schemas + children[matches[2]] = parent = extend({}, children[matches[2]]); + + delete parent[child]; + } else { + parent[child] = {}; + } + }); + } + }); + } + } + + function getElementRule(name) { + var element = elements[name], i; + + // Exact match found + if (element) { + return element; + } + + // No exact match then try the patterns + i = patternElements.length; + while (i--) { + element = patternElements[i]; + + if (element.pattern.test(name)) { + return element; + } + } + } + + if (!settings.valid_elements) { + // No valid elements defined then clone the elements from the schema spec + each(schemaItems, function(element, name) { + elements[name] = { + attributes: element.attributes, + attributesOrder: element.attributesOrder + }; + + children[name] = element.children; + }); + + // Switch these on HTML4 + if (settings.schema != "html5") { + each(split('strong/b em/i'), function(item) { + item = split(item, '/'); + elements[item[1]].outputName = item[0]; + }); + } + + // Add default alt attribute for images + elements.img.attributesDefault = [{name: 'alt', value: ''}]; + + // Remove these if they are empty by default + each(split('ol ul sub sup blockquote span font a table tbody tr strong em b i'), function(name) { + if (elements[name]) { + elements[name].removeEmpty = true; + } + }); + + // Padd these by default + each(split('p h1 h2 h3 h4 h5 h6 th td pre div address caption'), function(name) { + elements[name].paddEmpty = true; + }); + + // Remove these if they have no attributes + each(split('span'), function(name) { + elements[name].removeEmptyAttrs = true; + }); + + // Remove these by default + // TODO: Reenable in 4.1 + /*each(split('script style'), function(name) { + delete elements[name]; + });*/ + } else { + setValidElements(settings.valid_elements); + } + + addCustomElements(settings.custom_elements); + addValidChildren(settings.valid_children); + addValidElements(settings.extended_valid_elements); + + // Todo: Remove this when we fix list handling to be valid + addValidChildren('+ol[ul|ol],+ul[ul|ol]'); + + // Delete invalid elements + if (settings.invalid_elements) { + each(explode(settings.invalid_elements), function(item) { + if (elements[item]) { + delete elements[item]; + } + }); + } + + // If the user didn't allow span only allow internal spans + if (!getElementRule('span')) { + addValidElements('span[!data-mce-type|*]'); + } + + /** + * Name/value map object with valid parents and children to those parents. + * + * @example + * children = { + * div:{p:{}, h1:{}} + * }; + * @field children + * @type Object + */ + self.children = children; + + /** + * Name/value map object with valid styles for each element. + * + * @field styles + * @type Object + */ + self.styles = validStyles; + + /** + * Returns a map with boolean attributes. + * + * @method getBoolAttrs + * @return {Object} Name/value lookup map for boolean attributes. + */ + self.getBoolAttrs = function() { + return boolAttrMap; + }; + + /** + * Returns a map with block elements. + * + * @method getBlockElements + * @return {Object} Name/value lookup map for block elements. + */ + self.getBlockElements = function() { + return blockElementsMap; + }; + + /** + * Returns a map with text block elements. Such as: p,h1-h6,div,address + * + * @method getTextBlockElements + * @return {Object} Name/value lookup map for block elements. + */ + self.getTextBlockElements = function() { + return textBlockElementsMap; + }; + + /** + * Returns a map with short ended elements such as BR or IMG. + * + * @method getShortEndedElements + * @return {Object} Name/value lookup map for short ended elements. + */ + self.getShortEndedElements = function() { + return shortEndedElementsMap; + }; + + /** + * Returns a map with self closing tags such as
  • . + * + * @method getSelfClosingElements + * @return {Object} Name/value lookup map for self closing tags elements. + */ + self.getSelfClosingElements = function() { + return selfClosingElementsMap; + }; + + /** + * Returns a map with elements that should be treated as contents regardless if it has text + * content in them or not such as TD, VIDEO or IMG. + * + * @method getNonEmptyElements + * @return {Object} Name/value lookup map for non empty elements. + */ + self.getNonEmptyElements = function() { + return nonEmptyElementsMap; + }; + + /** + * Returns a map with elements where white space is to be preserved like PRE or SCRIPT. + * + * @method getWhiteSpaceElements + * @return {Object} Name/value lookup map for white space elements. + */ + self.getWhiteSpaceElements = function() { + return whiteSpaceElementsMap; + }; + + /** + * Returns a map with special elements. These are elements that needs to be parsed + * in a special way such as script, style, textarea etc. The map object values + * are regexps used to find the end of the element. + * + * @method getSpecialElements + * @return {Object} Name/value lookup map for special elements. + */ + self.getSpecialElements = function() { + return specialElements; + }; + + /** + * Returns true/false if the specified element and it's child is valid or not + * according to the schema. + * + * @method isValidChild + * @param {String} name Element name to check for. + * @param {String} child Element child to verify. + * @return {Boolean} True/false if the element is a valid child of the specified parent. + */ + self.isValidChild = function(name, child) { + var parent = children[name]; + + return !!(parent && parent[child]); + }; + + /** + * Returns true/false if the specified element name and optional attribute is + * valid according to the schema. + * + * @method isValid + * @param {String} name Name of element to check. + * @param {String} attr Optional attribute name to check for. + * @return {Boolean} True/false if the element and attribute is valid. + */ + self.isValid = function(name, attr) { + var attrPatterns, i, rule = getElementRule(name); + + // Check if it's a valid element + if (rule) { + if (attr) { + // Check if attribute name exists + if (rule.attributes[attr]) { + return true; + } + + // Check if attribute matches a regexp pattern + attrPatterns = rule.attributePatterns; + if (attrPatterns) { + i = attrPatterns.length; + while (i--) { + if (attrPatterns[i].pattern.test(name)) { + return true; + } + } + } + } else { + return true; + } + } + + // No match + return false; + }; + + /** + * Returns true/false if the specified element is valid or not + * according to the schema. + * + * @method getElementRule + * @param {String} name Element name to check for. + * @return {Object} Element object or undefined if the element isn't valid. + */ + self.getElementRule = getElementRule; + + /** + * Returns an map object of all custom elements. + * + * @method getCustomElements + * @return {Object} Name/value map object of all custom elements. + */ + self.getCustomElements = function() { + return customElementsMap; + }; + + /** + * Parses a valid elements string and adds it to the schema. The valid elements + * format is for example "element[attr=default|otherattr]". + * Existing rules will be replaced with the ones specified, so this extends the schema. + * + * @method addValidElements + * @param {String} valid_elements String in the valid elements format to be parsed. + */ + self.addValidElements = addValidElements; + + /** + * Parses a valid elements string and sets it to the schema. The valid elements + * format is for example "element[attr=default|otherattr]". + * Existing rules will be replaced with the ones specified, so this extends the schema. + * + * @method setValidElements + * @param {String} valid_elements String in the valid elements format to be parsed. + */ + self.setValidElements = setValidElements; + + /** + * Adds custom non HTML elements to the schema. + * + * @method addCustomElements + * @param {String} custom_elements Comma separated list of custom elements to add. + */ + self.addCustomElements = addCustomElements; + + /** + * Parses a valid children string and adds them to the schema structure. The valid children + * format is for example: "element[child1|child2]". + * + * @method addValidChildren + * @param {String} valid_children Valid children elements string to parse + */ + self.addValidChildren = addValidChildren; + + self.elements = elements; + }; +}); diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/html/Serializer.js b/common/static/js/vendor/tinymce/js/tinymce/classes/html/Serializer.js new file mode 100755 index 0000000000..041272af76 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/html/Serializer.js @@ -0,0 +1,156 @@ +/** + * Serializer.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class is used to serialize down the DOM tree into a string using a Writer instance. + * + * + * @example + * new tinymce.html.Serializer().serialize(new tinymce.html.DomParser().parse('

    text

    ')); + * @class tinymce.html.Serializer + * @version 3.4 + */ +define("tinymce/html/Serializer", [ + "tinymce/html/Writer", + "tinymce/html/Schema" +], function(Writer, Schema) { + /** + * Constructs a new Serializer instance. + * + * @constructor + * @method Serializer + * @param {Object} settings Name/value settings object. + * @param {tinymce.html.Schema} schema Schema instance to use. + */ + return function(settings, schema) { + var self = this, writer = new Writer(settings); + + settings = settings || {}; + settings.validate = "validate" in settings ? settings.validate : true; + + self.schema = schema = schema || new Schema(); + self.writer = writer; + + /** + * Serializes the specified node into a string. + * + * @example + * new tinymce.html.Serializer().serialize(new tinymce.html.DomParser().parse('

    text

    ')); + * @method serialize + * @param {tinymce.html.Node} node Node instance to serialize. + * @return {String} String with HTML based on DOM tree. + */ + self.serialize = function(node) { + var handlers, validate; + + validate = settings.validate; + + handlers = { + // #text + 3: function(node) { + writer.text(node.value, node.raw); + }, + + // #comment + 8: function(node) { + writer.comment(node.value); + }, + + // Processing instruction + 7: function(node) { + writer.pi(node.name, node.value); + }, + + // Doctype + 10: function(node) { + writer.doctype(node.value); + }, + + // CDATA + 4: function(node) { + writer.cdata(node.value); + }, + + // Document fragment + 11: function(node) { + if ((node = node.firstChild)) { + do { + walk(node); + } while ((node = node.next)); + } + } + }; + + writer.reset(); + + function walk(node) { + var handler = handlers[node.type], name, isEmpty, attrs, attrName, attrValue, sortedAttrs, i, l, elementRule; + + if (!handler) { + name = node.name; + isEmpty = node.shortEnded; + attrs = node.attributes; + + // Sort attributes + if (validate && attrs && attrs.length > 1) { + sortedAttrs = []; + sortedAttrs.map = {}; + + elementRule = schema.getElementRule(node.name); + for (i = 0, l = elementRule.attributesOrder.length; i < l; i++) { + attrName = elementRule.attributesOrder[i]; + + if (attrName in attrs.map) { + attrValue = attrs.map[attrName]; + sortedAttrs.map[attrName] = attrValue; + sortedAttrs.push({name: attrName, value: attrValue}); + } + } + + for (i = 0, l = attrs.length; i < l; i++) { + attrName = attrs[i].name; + + if (!(attrName in sortedAttrs.map)) { + attrValue = attrs.map[attrName]; + sortedAttrs.map[attrName] = attrValue; + sortedAttrs.push({name: attrName, value: attrValue}); + } + } + + attrs = sortedAttrs; + } + + writer.start(node.name, attrs, isEmpty); + + if (!isEmpty) { + if ((node = node.firstChild)) { + do { + walk(node); + } while ((node = node.next)); + } + + writer.end(name); + } + } else { + handler(node); + } + } + + // Serialize element and treat all non elements as fragments + if (node.type == 1 && !settings.inner) { + walk(node); + } else { + handlers[11](node); + } + + return writer.getContent(); + }; + }; +}); diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/html/Styles.js b/common/static/js/vendor/tinymce/js/tinymce/classes/html/Styles.js new file mode 100755 index 0000000000..51b6f4621c --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/html/Styles.js @@ -0,0 +1,324 @@ +/** + * Styles.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class is used to parse CSS styles it also compresses styles to reduce the output size. + * + * @example + * var Styles = new tinymce.html.Styles({ + * url_converter: function(url) { + * return url; + * } + * }); + * + * styles = Styles.parse('border: 1px solid red'); + * styles.color = 'red'; + * + * console.log(new tinymce.html.StyleSerializer().serialize(styles)); + * + * @class tinymce.html.Styles + * @version 3.4 + */ +define("tinymce/html/Styles", [], function() { + return function(settings, schema) { + /*jshint maxlen:255 */ + /*eslint max-len:0 */ + var rgbRegExp = /rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi, + urlOrStrRegExp = /(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi, + styleRegExp = /\s*([^:]+):\s*([^;]+);?/g, + trimRightRegExp = /\s+$/, + undef, i, encodingLookup = {}, encodingItems, invisibleChar = '\uFEFF'; + + settings = settings || {}; + + encodingItems = ('\\" \\\' \\; \\: ; : ' + invisibleChar).split(' '); + for (i = 0; i < encodingItems.length; i++) { + encodingLookup[encodingItems[i]] = invisibleChar + i; + encodingLookup[invisibleChar + i] = encodingItems[i]; + } + + function toHex(match, r, g, b) { + function hex(val) { + val = parseInt(val, 10).toString(16); + + return val.length > 1 ? val : '0' + val; // 0 -> 00 + } + + return '#' + hex(r) + hex(g) + hex(b); + } + + return { + /** + * Parses the specified RGB color value and returns a hex version of that color. + * + * @method toHex + * @param {String} color RGB string value like rgb(1,2,3) + * @return {String} Hex version of that RGB value like #FF00FF. + */ + toHex: function(color) { + return color.replace(rgbRegExp, toHex); + }, + + /** + * Parses the specified style value into an object collection. This parser will also + * merge and remove any redundant items that browsers might have added. It will also convert non hex + * colors to hex values. Urls inside the styles will also be converted to absolute/relative based on settings. + * + * @method parse + * @param {String} css Style value to parse for example: border:1px solid red;. + * @return {Object} Object representation of that style like {border: '1px solid red'} + */ + parse: function(css) { + var styles = {}, matches, name, value, isEncoded, urlConverter = settings.url_converter; + var urlConverterScope = settings.url_converter_scope || this; + + function compress(prefix, suffix, noJoin) { + var top, right, bottom, left; + + top = styles[prefix + '-top' + suffix]; + if (!top) { + return; + } + + right = styles[prefix + '-right' + suffix]; + if (!right) { + return; + } + + bottom = styles[prefix + '-bottom' + suffix]; + if (!bottom) { + return; + } + + left = styles[prefix + '-left' + suffix]; + if (!left) { + return; + } + + var box = [top, right, bottom, left]; + i = box.length - 1; + while (i--) { + if (box[i] !== box[i + 1]) { + break; + } + } + + if (i > -1 && noJoin) { + return; + } + + styles[prefix + suffix] = i == -1 ? box[0] : box.join(' '); + delete styles[prefix + '-top' + suffix]; + delete styles[prefix + '-right' + suffix]; + delete styles[prefix + '-bottom' + suffix]; + delete styles[prefix + '-left' + suffix]; + } + + /** + * Checks if the specific style can be compressed in other words if all border-width are equal. + */ + function canCompress(key) { + var value = styles[key], i; + + if (!value) { + return; + } + + value = value.split(' '); + i = value.length; + while (i--) { + if (value[i] !== value[0]) { + return false; + } + } + + styles[key] = value[0]; + + return true; + } + + /** + * Compresses multiple styles into one style. + */ + function compress2(target, a, b, c) { + if (!canCompress(a)) { + return; + } + + if (!canCompress(b)) { + return; + } + + if (!canCompress(c)) { + return; + } + + // Compress + styles[target] = styles[a] + ' ' + styles[b] + ' ' + styles[c]; + delete styles[a]; + delete styles[b]; + delete styles[c]; + } + + // Encodes the specified string by replacing all \" \' ; : with _ + function encode(str) { + isEncoded = true; + + return encodingLookup[str]; + } + + // Decodes the specified string by replacing all _ with it's original value \" \' etc + // It will also decode the \" \' if keep_slashes is set to fale or omitted + function decode(str, keep_slashes) { + if (isEncoded) { + str = str.replace(/\uFEFF[0-9]/g, function(str) { + return encodingLookup[str]; + }); + } + + if (!keep_slashes) { + str = str.replace(/\\([\'\";:])/g, "$1"); + } + + return str; + } + + function processUrl(match, url, url2, url3, str, str2) { + str = str || str2; + + if (str) { + str = decode(str); + + // Force strings into single quote format + return "'" + str.replace(/\'/g, "\\'") + "'"; + } + + url = decode(url || url2 || url3); + + if (!settings.allow_script_urls && /(java|vb)script:/i.test(url.replace(/[\s\r\n]+/, ''))) { + return ""; + } + + // Convert the URL to relative/absolute depending on config + if (urlConverter) { + url = urlConverter.call(urlConverterScope, url, 'style'); + } + + // Output new URL format + return "url('" + url.replace(/\'/g, "\\'") + "')"; + } + + if (css) { + css = css.replace(/[\u0000-\u001F]/g, ''); + + // Encode \" \' % and ; and : inside strings so they don't interfere with the style parsing + css = css.replace(/\\[\"\';:\uFEFF]/g, encode).replace(/\"[^\"]+\"|\'[^\']+\'/g, function(str) { + return str.replace(/[;:]/g, encode); + }); + + // Parse styles + while ((matches = styleRegExp.exec(css))) { + name = matches[1].replace(trimRightRegExp, '').toLowerCase(); + value = matches[2].replace(trimRightRegExp, ''); + + if (name && value.length > 0) { + if (!settings.allow_script_urls && (name == "behavior" || /expression\s*\(/.test(value))) { + continue; + } + + // Opera will produce 700 instead of bold in their style values + if (name === 'font-weight' && value === '700') { + value = 'bold'; + } else if (name === 'color' || name === 'background-color') { // Lowercase colors like RED + value = value.toLowerCase(); + } + + // Convert RGB colors to HEX + value = value.replace(rgbRegExp, toHex); + + // Convert URLs and force them into url('value') format + value = value.replace(urlOrStrRegExp, processUrl); + styles[name] = isEncoded ? decode(value, true) : value; + } + + styleRegExp.lastIndex = matches.index + matches[0].length; + } + // Compress the styles to reduce it's size for example IE will expand styles + compress("border", "", true); + compress("border", "-width"); + compress("border", "-color"); + compress("border", "-style"); + compress("padding", ""); + compress("margin", ""); + compress2('border', 'border-width', 'border-style', 'border-color'); + + // Remove pointless border, IE produces these + if (styles.border === 'medium none') { + delete styles.border; + } + + // IE 11 will produce a border-image: none when getting the style attribute from

    + // So lets asume it shouldn't be there + if (styles['border-image'] === 'none') { + delete styles['border-image']; + } + } + + return styles; + }, + + /** + * Serializes the specified style object into a string. + * + * @method serialize + * @param {Object} styles Object to serialize as string for example: {border: '1px solid red'} + * @param {String} element_name Optional element name, if specified only the styles that matches the schema will be serialized. + * @return {String} String representation of the style object for example: border: 1px solid red. + */ + serialize: function(styles, element_name) { + var css = '', name, value; + + function serializeStyles(name) { + var styleList, i, l, value; + + styleList = schema.styles[name]; + if (styleList) { + for (i = 0, l = styleList.length; i < l; i++) { + name = styleList[i]; + value = styles[name]; + + if (value !== undef && value.length > 0) { + css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';'; + } + } + } + } + + // Serialize styles according to schema + if (element_name && schema && schema.styles) { + // Serialize global styles and element specific styles + serializeStyles('*'); + serializeStyles(element_name); + } else { + // Output the styles in the order they are inside the object + for (name in styles) { + value = styles[name]; + + if (value !== undef && value.length > 0) { + css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';'; + } + } + } + + return css; + } + }; + }; +}); diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/html/Writer.js b/common/static/js/vendor/tinymce/js/tinymce/classes/html/Writer.js new file mode 100755 index 0000000000..0f9eaaef4b --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/html/Writer.js @@ -0,0 +1,199 @@ +/** + * Writer.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class is used to write HTML tags out it can be used with the Serializer or the SaxParser. + * + * @class tinymce.html.Writer + * @example + * var writer = new tinymce.html.Writer({indent: true}); + * var parser = new tinymce.html.SaxParser(writer).parse('


    '); + * console.log(writer.getContent()); + * + * @class tinymce.html.Writer + * @version 3.4 + */ +define("tinymce/html/Writer", [ + "tinymce/html/Entities", + "tinymce/util/Tools" +], function(Entities, Tools) { + var makeMap = Tools.makeMap; + + /** + * Constructs a new Writer instance. + * + * @constructor + * @method Writer + * @param {Object} settings Name/value settings object. + */ + return function(settings) { + var html = [], indent, indentBefore, indentAfter, encode, htmlOutput; + + settings = settings || {}; + indent = settings.indent; + indentBefore = makeMap(settings.indent_before || ''); + indentAfter = makeMap(settings.indent_after || ''); + encode = Entities.getEncodeFunc(settings.entity_encoding || 'raw', settings.entities); + htmlOutput = settings.element_format == "html"; + + return { + /** + * Writes the a start element such as

    . + * + * @method start + * @param {String} name Name of the element. + * @param {Array} attrs Optional attribute array or undefined if it hasn't any. + * @param {Boolean} empty Optional empty state if the tag should end like
    . + */ + start: function(name, attrs, empty) { + var i, l, attr, value; + + if (indent && indentBefore[name] && html.length > 0) { + value = html[html.length - 1]; + + if (value.length > 0 && value !== '\n') { + html.push('\n'); + } + } + + html.push('<', name); + + if (attrs) { + for (i = 0, l = attrs.length; i < l; i++) { + attr = attrs[i]; + html.push(' ', attr.name, '="', encode(attr.value, true), '"'); + } + } + + if (!empty || htmlOutput) { + html[html.length] = '>'; + } else { + html[html.length] = ' />'; + } + + if (empty && indent && indentAfter[name] && html.length > 0) { + value = html[html.length - 1]; + + if (value.length > 0 && value !== '\n') { + html.push('\n'); + } + } + }, + + /** + * Writes the a end element such as

    . + * + * @method end + * @param {String} name Name of the element. + */ + end: function(name) { + var value; + + /*if (indent && indentBefore[name] && html.length > 0) { + value = html[html.length - 1]; + + if (value.length > 0 && value !== '\n') + html.push('\n'); + }*/ + + html.push(''); + + if (indent && indentAfter[name] && html.length > 0) { + value = html[html.length - 1]; + + if (value.length > 0 && value !== '\n') { + html.push('\n'); + } + } + }, + + /** + * Writes a text node. + * + * @method text + * @param {String} text String to write out. + * @param {Boolean} raw Optional raw state if true the contents wont get encoded. + */ + text: function(text, raw) { + if (text.length > 0) { + html[html.length] = raw ? text : encode(text); + } + }, + + /** + * Writes a cdata node such as . + * + * @method cdata + * @param {String} text String to write out inside the cdata. + */ + cdata: function(text) { + html.push(''); + }, + + /** + * Writes a comment node such as . + * + * @method cdata + * @param {String} text String to write out inside the comment. + */ + comment: function(text) { + html.push(''); + }, + + /** + * Writes a PI node such as . + * + * @method pi + * @param {String} name Name of the pi. + * @param {String} text String to write out inside the pi. + */ + pi: function(name, text) { + if (text) { + html.push(''); + } else { + html.push(''); + } + + if (indent) { + html.push('\n'); + } + }, + + /** + * Writes a doctype node such as . + * + * @method doctype + * @param {String} text String to write out inside the doctype. + */ + doctype: function(text) { + html.push('', indent ? '\n' : ''); + }, + + /** + * Resets the internal buffer if one wants to reuse the writer. + * + * @method reset + */ + reset: function() { + html.length = 0; + }, + + /** + * Returns the contents that got serialized. + * + * @method getContent + * @return {String} HTML contents that got written down. + */ + getContent: function() { + return html.join('').replace(/\n$/, ''); + } + }; + }; +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/jquery.tinymce.js b/common/static/js/vendor/tinymce/js/tinymce/classes/jquery.tinymce.js new file mode 100755 index 0000000000..495e88a826 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/jquery.tinymce.js @@ -0,0 +1,364 @@ +/** + * jquery.tinymce.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*global tinymce:true, jQuery */ + +(function($) { + var undef, + lazyLoading, + delayedInits = [], + win = window; + + $.fn.tinymce = function(settings) { + var self = this, url, base, lang, suffix = "", patchApplied; + + // No match then just ignore the call + if (!self.length) { + return self; + } + + // Get editor instance + if (!settings) { + return window.tinymce ? tinymce.get(self[0].id) : null; + } + + self.css('visibility', 'hidden'); // Hide textarea to avoid flicker + + function init() { + var editors = [], initCount = 0; + + // Apply patches to the jQuery object, only once + if (!patchApplied) { + applyPatch(); + patchApplied = true; + } + + // Create an editor instance for each matched node + self.each(function(i, node) { + var ed, id = node.id, oninit = settings.oninit; + + // Generate unique id for target element if needed + if (!id) { + node.id = id = tinymce.DOM.uniqueId(); + } + + // Only init the editor once + if (tinymce.get(id)) { + return; + } + + // Create editor instance and render it + ed = new tinymce.Editor(id, settings, tinymce.EditorManager); + editors.push(ed); + + ed.on('init', function() { + var scope, func = oninit; + + self.css('visibility', ''); + + // Run this if the oninit setting is defined + // this logic will fire the oninit callback ones each + // matched editor instance is initialized + if (oninit) { + // Fire the oninit event ones each editor instance is initialized + if (++initCount == editors.length) { + if (typeof(func) === "string") { + scope = (func.indexOf(".") === -1) ? null : tinymce.resolve(func.replace(/\.\w+$/, "")); + func = tinymce.resolve(func); + } + + // Call the oninit function with the object + func.apply(scope || tinymce, editors); + } + } + }); + }); + + // Render the editor instances in a separate loop since we + // need to have the full editors array used in the onInit calls + $.each(editors, function(i, ed) { + ed.render(); + }); + } + + // Load TinyMCE on demand, if we need to + if (!win.tinymce && !lazyLoading && (url = settings.script_url)) { + lazyLoading = 1; + base = url.substring(0, url.lastIndexOf("/")); + + // Check if it's a dev/src version they want to load then + // make sure that all plugins, themes etc are loaded in source mode as well + if (url.indexOf('.min') != -1) { + suffix = ".min"; + } + + // Setup tinyMCEPreInit object this will later be used by the TinyMCE + // core script to locate other resources like CSS files, dialogs etc + // You can also predefined a tinyMCEPreInit object and then it will use that instead + win.tinymce = win.tinyMCEPreInit || { + base: base, + suffix: suffix + }; + + // url contains gzip then we assume it's a compressor + if (url.indexOf('gzip') != -1) { + lang = settings.language || "en"; + url = url + (/\?/.test(url) ? '&' : '?') + "js=true&core=true&suffix=" + escape(suffix) + + "&themes=" + escape(settings.theme || 'modern') + "&plugins=" + + escape(settings.plugins || '') + "&languages=" + (lang || ''); + + // Check if compressor script is already loaded otherwise setup a basic one + if (!win.tinyMCE_GZ) { + win.tinyMCE_GZ = { + start: function() { + function load(url) { + tinymce.ScriptLoader.markDone(tinymce.baseURI.toAbsolute(url)); + } + + // Add core languages + load("langs/" + lang + ".js"); + + // Add themes with languages + load("themes/" + settings.theme + "/theme" + suffix + ".js"); + load("themes/" + settings.theme + "/langs/" + lang + ".js"); + + // Add plugins with languages + $.each(settings.plugins.split(","), function(i, name) { + if (name) { + load("plugins/" + name + "/plugin" + suffix + ".js"); + load("plugins/" + name + "/langs/" + lang + ".js"); + } + }); + }, + + end: function() { + } + }; + } + } + + var script = document.createElement('script'); + script.type = 'text/javascript'; + script.onload = script.onreadystatechange = function(e) { + e = e || window.event; + + if (lazyLoading !== 2 && (e.type == 'load' || /complete|loaded/.test(script.readyState))) { + tinymce.dom.Event.domLoaded = 1; + lazyLoading = 2; + + // Execute callback after mainscript has been loaded and before the initialization occurs + if (settings.script_loaded) { + settings.script_loaded(); + } + + init(); + + $.each(delayedInits, function(i, init) { + init(); + }); + } + }; + script.src = url; + document.body.appendChild(script); + } else { + // Delay the init call until tinymce is loaded + if (lazyLoading === 1) { + delayedInits.push(init); + } else { + init(); + } + } + + return self; + }; + + // Add :tinymce psuedo selector this will select elements that has been converted into editor instances + // it's now possible to use things like $('*:tinymce') to get all TinyMCE bound elements. + $.extend($.expr[":"], { + tinymce: function(e) { + return !!(e.id && "tinymce" in window && tinymce.get(e.id)); + } + }); + + // This function patches internal jQuery functions so that if + // you for example remove an div element containing an editor it's + // automatically destroyed by the TinyMCE API + function applyPatch() { + // Removes any child editor instances by looking for editor wrapper elements + function removeEditors(name) { + // If the function is remove + if (name === "remove") { + this.each(function(i, node) { + var ed = tinyMCEInstance(node); + + if (ed) { + ed.remove(); + } + }); + } + + this.find("span.mceEditor,div.mceEditor").each(function(i, node) { + var ed = tinymce.get(node.id.replace(/_parent$/, "")); + + if (ed) { + ed.remove(); + } + }); + } + + // Loads or saves contents from/to textarea if the value + // argument is defined it will set the TinyMCE internal contents + function loadOrSave(value) { + var self = this, ed; + + // Handle set value + /*jshint eqnull:true */ + if (value != null) { + removeEditors.call(self); + + // Saves the contents before get/set value of textarea/div + self.each(function(i, node) { + var ed; + + if ((ed = tinymce.get(node.id))) { + ed.setContent(value); + } + }); + } else if (self.length > 0) { + // Handle get value + if ((ed = tinymce.get(self[0].id))) { + return ed.getContent(); + } + } + } + + // Returns tinymce instance for the specified element or null if it wasn't found + function tinyMCEInstance(element) { + var ed = null; + + if (element && element.id && win.tinymce) { + ed = tinymce.get(element.id); + } + + return ed; + } + + // Checks if the specified set contains tinymce instances + function containsTinyMCE(matchedSet) { + return !!((matchedSet) && (matchedSet.length) && (win.tinymce) && (matchedSet.is(":tinymce"))); + } + + // Patch various jQuery functions + var jQueryFn = {}; + + // Patch some setter/getter functions these will + // now be able to set/get the contents of editor instances for + // example $('#editorid').html('Content'); will update the TinyMCE iframe instance + $.each(["text", "html", "val"], function(i, name) { + var origFn = jQueryFn[name] = $.fn[name], + textProc = (name === "text"); + + $.fn[name] = function(value) { + var self = this; + + if (!containsTinyMCE(self)) { + return origFn.apply(self, arguments); + } + + if (value !== undef) { + loadOrSave.call(self.filter(":tinymce"), value); + origFn.apply(self.not(":tinymce"), arguments); + + return self; // return original set for chaining + } else { + var ret = ""; + var args = arguments; + + (textProc ? self : self.eq(0)).each(function(i, node) { + var ed = tinyMCEInstance(node); + + if (ed) { + ret += textProc ? ed.getContent().replace(/<(?:"[^"]*"|'[^']*'|[^'">])*>/g, "") : ed.getContent({save: true}); + } else { + ret += origFn.apply($(node), args); + } + }); + + return ret; + } + }; + }); + + // Makes it possible to use $('#id').append("content"); to append contents to the TinyMCE editor iframe + $.each(["append", "prepend"], function(i, name) { + var origFn = jQueryFn[name] = $.fn[name], + prepend = (name === "prepend"); + + $.fn[name] = function(value) { + var self = this; + + if (!containsTinyMCE(self)) { + return origFn.apply(self, arguments); + } + + if (value !== undef) { + self.filter(":tinymce").each(function(i, node) { + var ed = tinyMCEInstance(node); + + if (ed) { + ed.setContent(prepend ? value + ed.getContent() : ed.getContent() + value); + } + }); + + origFn.apply(self.not(":tinymce"), arguments); + + return self; // return original set for chaining + } + }; + }); + + // Makes sure that the editor instance gets properly destroyed when the parent element is removed + $.each(["remove", "replaceWith", "replaceAll", "empty"], function(i, name) { + var origFn = jQueryFn[name] = $.fn[name]; + + $.fn[name] = function() { + removeEditors.call(this, name); + + return origFn.apply(this, arguments); + }; + }); + + jQueryFn.attr = $.fn.attr; + + // Makes sure that $('#tinymce_id').attr('value') gets the editors current HTML contents + $.fn.attr = function(name, value) { + var self = this, args = arguments; + + if ((!name) || (name !== "value") || (!containsTinyMCE(self))) { + if (value !== undef) { + return jQueryFn.attr.apply(self, args); + } else { + return jQueryFn.attr.apply(self, args); + } + } + + if (value !== undef) { + loadOrSave.call(self.filter(":tinymce"), value); + jQueryFn.attr.apply(self.not(":tinymce"), args); + + return self; // return original set for chaining + } else { + var node = self[0], ed = tinyMCEInstance(node); + + return ed ? ed.getContent({save: true}) : jQueryFn.attr.apply($(node), args); + } + }; + } +})(jQuery); diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/AbsoluteLayout.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/AbsoluteLayout.js new file mode 100755 index 0000000000..8d286a13e3 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/AbsoluteLayout.js @@ -0,0 +1,63 @@ +/** + * AbsoluteLayout.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * LayoutManager for absolute positioning. This layout manager is more of + * a base class for other layouts but can be created and used directly. + * + * @-x-less AbsoluteLayout.less + * @class tinymce.ui.AbsoluteLayout + * @extends tinymce.ui.Layout + */ +define("tinymce/ui/AbsoluteLayout", [ + "tinymce/ui/Layout" +], function(Layout) { + "use strict"; + + return Layout.extend({ + Defaults: { + containerClass: 'abs-layout', + controlClass: 'abs-layout-item' + }, + + /** + * Recalculates the positions of the controls in the specified container. + * + * @method recalc + * @param {tinymce.ui.Container} container Container instance to recalc. + */ + recalc: function(container) { + container.items().filter(':visible').each(function(ctrl) { + var settings = ctrl.settings; + + ctrl.layoutRect({ + x: settings.x, + y: settings.y, + w: settings.w, + h: settings.h + }); + + if (ctrl.recalc) { + ctrl.recalc(); + } + }); + }, + + /** + * Renders the specified container and any layout specific HTML. + * + * @method renderHtml + * @param {tinymce.ui.Container} container Container to render HTML for. + */ + renderHtml: function(container) { + return '
    ' + this._super(container); + } + }); +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Button.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Button.js new file mode 100755 index 0000000000..c2ecf347b8 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Button.js @@ -0,0 +1,141 @@ +/** + * Button.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class is used to create buttons. You can create them directly or through the Factory. + * + * @example + * // Create and render a button to the body element + * tinymce.ui.Factory.create({ + * type: 'button', + * text: 'My button' + * }).renderTo(document.body); + * + * @-x-less Button.less + * @class tinymce.ui.Button + * @extends tinymce.ui.Widget + */ +define("tinymce/ui/Button", [ + "tinymce/ui/Widget" +], function(Widget) { + "use strict"; + + return Widget.extend({ + Defaults: { + classes: "widget btn", + role: "button" + }, + + /** + * Constructs a new button instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + * @setting {String} size Size of the button small|medium|large. + * @setting {String} image Image to use for icon. + * @setting {String} icon Icon to use for button. + */ + init: function(settings) { + var self = this, size; + + self.on('click mousedown', function(e) { + e.preventDefault(); + }); + + self._super(settings); + size = settings.size; + + if (settings.subtype) { + self.addClass(settings.subtype); + } + + if (size) { + self.addClass('btn-' + size); + } + }, + + /** + * Sets/gets the current button icon. + * + * @method icon + * @param {String} [icon] New icon identifier. + * @return {String|tinymce.ui.MenuButton} Current icon or current MenuButton instance. + */ + icon: function(icon) { + var self = this, prefix = self.classPrefix; + + if (typeof(icon) == 'undefined') { + return self.settings.icon; + } + + self.settings.icon = icon; + icon = icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : ''; + + if (self._rendered) { + var btnElm = self.getEl().firstChild, iconElm = btnElm.getElementsByTagName('i')[0]; + + if (icon) { + if (!iconElm || iconElm != btnElm.firstChild) { + iconElm = document.createElement('i'); + btnElm.insertBefore(iconElm, btnElm.firstChild); + } + + iconElm.className = icon; + } else if (iconElm) { + btnElm.removeChild(iconElm); + } + + self.text(self._text); // Set text again to fix whitespace between icon + text + } + + return self; + }, + + /** + * Repaints the button for example after it's been resizes by a layout engine. + * + * @method repaint + */ + repaint: function() { + var btnStyle = this.getEl().firstChild.style; + + btnStyle.width = btnStyle.height = "100%"; + + this._super(); + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, id = self._id, prefix = self.classPrefix; + var icon = self.settings.icon, image = ''; + + if (self.settings.image) { + icon = 'none'; + image = ' style="background-image: url(\'' + self.settings.image + '\')"'; + } + + icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + icon : ''; + + return ( + '
    ' + + '' + + '
    ' + ); + } + }); +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/ButtonGroup.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/ButtonGroup.js new file mode 100755 index 0000000000..f58fe6ce56 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/ButtonGroup.js @@ -0,0 +1,62 @@ +/** + * ButtonGroup.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This control enables you to put multiple buttons into a group. This is + * useful when you want to combine similar toolbar buttons into a group. + * + * @example + * // Create and render a buttongroup with two buttons to the body element + * tinymce.ui.Factory.create({ + * type: 'buttongroup', + * items: [ + * {text: 'Button A'}, + * {text: 'Button B'} + * ] + * }).renderTo(document.body); + * + * @-x-less ButtonGroup.less + * @class tinymce.ui.ButtonGroup + * @extends tinymce.ui.Container + */ +define("tinymce/ui/ButtonGroup", [ + "tinymce/ui/Container" +], function(Container) { + "use strict"; + + return Container.extend({ + Defaults: { + defaultType: 'button', + role: 'group' + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, layout = self._layout; + + self.addClass('btn-group'); + self.preRender(); + layout.preRender(self); + + return ( + '
    ' + + '
    ' + + (self.settings.html || '') + layout.renderHtml(self) + + '
    ' + + '
    ' + ); + } + }); +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Checkbox.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Checkbox.js new file mode 100755 index 0000000000..1bbdf1f1b6 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Checkbox.js @@ -0,0 +1,119 @@ +/** + * Checkbox.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This control creates a custom checkbox. + * + * @example + * // Create and render a checkbox to the body element + * tinymce.ui.Factory.create({ + * type: 'checkbox', + * checked: true, + * text: 'My checkbox' + * }).renderTo(document.body); + * + * @-x-less Checkbox.less + * @class tinymce.ui.Checkbox + * @extends tinymce.ui.Widget + */ +define("tinymce/ui/Checkbox", [ + "tinymce/ui/Widget" +], function(Widget) { + "use strict"; + + return Widget.extend({ + Defaults: { + classes: "checkbox", + role: "checkbox", + checked: false + }, + + /** + * Constructs a new Checkbox instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + * @setting {Boolean} checked True if the checkbox should be checked by default. + */ + init: function(settings) { + var self = this; + + self._super(settings); + + self.on('click mousedown', function(e) { + e.preventDefault(); + }); + + self.on('click', function(e) { + e.preventDefault(); + + if (!self.disabled()) { + self.checked(!self.checked()); + } + }); + + self.checked(self.settings.checked); + }, + + /** + * Getter/setter function for the checked state. + * + * @method checked + * @param {Boolean} [state] State to be set. + * @return {Boolean|tinymce.ui.Checkbox} True/false or checkbox if it's a set operation. + */ + checked: function(state) { + var self = this; + + if (typeof state != "undefined") { + if (state) { + self.addClass('checked'); + } else { + self.removeClass('checked'); + } + + self._checked = state; + self.aria('checked', state); + + return self; + } + + return self._checked; + }, + + /** + * Getter/setter function for the value state. + * + * @method value + * @param {Boolean} [state] State to be set. + * @return {Boolean|tinymce.ui.Checkbox} True/false or checkbox if it's a set operation. + */ + value: function(state) { + return this.checked(state); + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, id = self._id, prefix = self.classPrefix; + + return ( + '
    ' + + '' + + '' + self.encode(self._text) + '' + + '
    ' + ); + } + }); +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Collection.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Collection.js new file mode 100755 index 0000000000..285d0c8368 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Collection.js @@ -0,0 +1,430 @@ +/** + * Collection.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Control collection, this class contains control instances and it enables you to + * perform actions on all the contained items. This is very similar to how jQuery works. + * + * @example + * someCollection.show().disabled(true); + * + * @class tinymce.ui.Collection + */ +define("tinymce/ui/Collection", [ + "tinymce/util/Tools", + "tinymce/ui/Selector", + "tinymce/util/Class" +], function(Tools, Selector, Class) { + "use strict"; + + var Collection, proto, push = Array.prototype.push, slice = Array.prototype.slice; + + proto = { + /** + * Current number of contained control instances. + * + * @field length + * @type Number + */ + length: 0, + + /** + * Constructor for the collection. + * + * @constructor + * @method init + * @param {Array} items Optional array with items to add. + */ + init: function(items) { + if (items) { + this.add(items); + } + }, + + /** + * Adds new items to the control collection. + * + * @method add + * @param {Array} items Array if items to add to collection. + * @return {tinymce.ui.Collection} Current collection instance. + */ + add: function(items) { + var self = this; + + // Force single item into array + if (!Tools.isArray(items)) { + if (items instanceof Collection) { + self.add(items.toArray()); + } else { + push.call(self, items); + } + } else { + push.apply(self, items); + } + + return self; + }, + + /** + * Sets the contents of the collection. This will remove any existing items + * and replace them with the ones specified in the input array. + * + * @method set + * @param {Array} items Array with items to set into the Collection. + * @return {tinymce.ui.Collection} Collection instance. + */ + set: function(items) { + var self = this, len = self.length, i; + + self.length = 0; + self.add(items); + + // Remove old entries + for (i = self.length; i < len; i++) { + delete self[i]; + } + + return self; + }, + + /** + * Filters the collection item based on the specified selector expression or selector function. + * + * @method filter + * @param {String} selector Selector expression to filter items by. + * @return {tinymce.ui.Collection} Collection containing the filtered items. + */ + filter: function(selector) { + var self = this, i, l, matches = [], item, match; + + // Compile string into selector expression + if (typeof(selector) === "string") { + selector = new Selector(selector); + + match = function(item) { + return selector.match(item); + }; + } else { + // Use selector as matching function + match = selector; + } + + for (i = 0, l = self.length; i < l; i++) { + item = self[i]; + + if (match(item)) { + matches.push(item); + } + } + + return new Collection(matches); + }, + + /** + * Slices the items within the collection. + * + * @method slice + * @param {Number} index Index to slice at. + * @param {Number} len Optional length to slice. + * @return {tinymce.ui.Collection} Current collection. + */ + slice: function() { + return new Collection(slice.apply(this, arguments)); + }, + + /** + * Makes the current collection equal to the specified index. + * + * @method eq + * @param {Number} index Index of the item to set the collection to. + * @return {tinymce.ui.Collection} Current collection. + */ + eq: function(index) { + return index === -1 ? this.slice(index) : this.slice(index, +index + 1); + }, + + /** + * Executes the specified callback on each item in collection. + * + * @method each + * @param {function} callback Callback to execute for each item in collection. + * @return {tinymce.ui.Collection} Current collection instance. + */ + each: function(callback) { + Tools.each(this, callback); + + return this; + }, + + /** + * Returns an JavaScript array object of the contents inside the collection. + * + * @method toArray + * @return {Array} Array with all items from collection. + */ + toArray: function() { + return Tools.toArray(this); + }, + + /** + * Finds the index of the specified control or return -1 if it isn't in the collection. + * + * @method indexOf + * @param {Control} ctrl Control instance to look for. + * @return {Number} Index of the specified control or -1. + */ + indexOf: function(ctrl) { + var self = this, i = self.length; + + while (i--) { + if (self[i] === ctrl) { + break; + } + } + + return i; + }, + + /** + * Returns a new collection of the contents in reverse order. + * + * @method reverse + * @return {tinymce.ui.Collection} Collection instance with reversed items. + */ + reverse: function() { + return new Collection(Tools.toArray(this).reverse()); + }, + + /** + * Returns true/false if the class exists or not. + * + * @method hasClass + * @param {String} cls Class to check for. + * @return {Boolean} true/false state if the class exists or not. + */ + hasClass: function(cls) { + return this[0] ? this[0].hasClass(cls) : false; + }, + + /** + * Sets/gets the specific property on the items in the collection. The same as executing control.(); + * + * @method prop + * @param {String} name Property name to get/set. + * @param {Object} value Optional object value to set. + * @return {tinymce.ui.Collection} Current collection instance or value of the first item on a get operation. + */ + prop: function(name, value) { + var self = this, undef, item; + + if (value !== undef) { + self.each(function(item) { + if (item[name]) { + item[name](value); + } + }); + + return self; + } + + item = self[0]; + + if (item && item[name]) { + return item[name](); + } + }, + + /** + * Executes the specific function name with optional arguments an all items in collection if it exists. + * + * @example collection.exec("myMethod", arg1, arg2, arg3); + * @method exec + * @param {String} name Name of the function to execute. + * @param {Object} ... Multiple arguments to pass to each function. + * @return {tinymce.ui.Collection} Current collection. + */ + exec: function(name) { + var self = this, args = Tools.toArray(arguments).slice(1); + + self.each(function(item) { + if (item[name]) { + item[name].apply(item, args); + } + }); + + return self; + }, + + /** + * Remove all items from collection and DOM. + * + * @method remove + * @return {tinymce.ui.Collection} Current collection. + */ + remove: function() { + var i = this.length; + + while (i--) { + this[i].remove(); + } + + return this; + } + + /** + * Fires the specified event by name and arguments on the control. This will execute all + * bound event handlers. + * + * @method fire + * @param {String} name Name of the event to fire. + * @param {Object} args Optional arguments to pass to the event. + * @return {tinymce.ui.Collection} Current collection instance. + */ + // fire: function(event, args) {}, -- Generated by code below + + /** + * Binds a callback to the specified event. This event can both be + * native browser events like "click" or custom ones like PostRender. + * + * The callback function will have two parameters the first one being the control that received the event + * the second one will be the event object either the browsers native event object or a custom JS object. + * + * @method on + * @param {String} name Name of the event to bind. For example "click". + * @param {String/function} callback Callback function to execute ones the event occurs. + * @return {tinymce.ui.Collection} Current collection instance. + */ + // on: function(name, callback) {}, -- Generated by code below + + /** + * Unbinds the specified event and optionally a specific callback. If you omit the name + * parameter all event handlers will be removed. If you omit the callback all event handles + * by the specified name will be removed. + * + * @method off + * @param {String} name Optional name for the event to unbind. + * @param {function} callback Optional callback function to unbind. + * @return {tinymce.ui.Collection} Current collection instance. + */ + // off: function(name, callback) {}, -- Generated by code below + + /** + * Shows the items in the current collection. + * + * @method show + * @return {tinymce.ui.Collection} Current collection instance. + */ + // show: function() {}, -- Generated by code below + + /** + * Hides the items in the current collection. + * + * @method hide + * @return {tinymce.ui.Collection} Current collection instance. + */ + // hide: function() {}, -- Generated by code below + + /** + * Sets/gets the text contents of the items in the current collection. + * + * @method text + * @return {tinymce.ui.Collection} Current collection instance or text value of the first item on a get operation. + */ + // text: function(value) {}, -- Generated by code below + + /** + * Sets/gets the name contents of the items in the current collection. + * + * @method name + * @return {tinymce.ui.Collection} Current collection instance or name value of the first item on a get operation. + */ + // name: function(value) {}, -- Generated by code below + + /** + * Sets/gets the disabled state on the items in the current collection. + * + * @method disabled + * @return {tinymce.ui.Collection} Current collection instance or disabled state of the first item on a get operation. + */ + // disabled: function(state) {}, -- Generated by code below + + /** + * Sets/gets the active state on the items in the current collection. + * + * @method active + * @return {tinymce.ui.Collection} Current collection instance or active state of the first item on a get operation. + */ + // active: function(state) {}, -- Generated by code below + + /** + * Sets/gets the selected state on the items in the current collection. + * + * @method selected + * @return {tinymce.ui.Collection} Current collection instance or selected state of the first item on a get operation. + */ + // selected: function(state) {}, -- Generated by code below + + /** + * Sets/gets the selected state on the items in the current collection. + * + * @method visible + * @return {tinymce.ui.Collection} Current collection instance or visible state of the first item on a get operation. + */ + // visible: function(state) {}, -- Generated by code below + + /** + * Adds a class to all items in the collection. + * + * @method addClass + * @param {String} cls Class to add to each item. + * @return {tinymce.ui.Collection} Current collection instance. + */ + // addClass: function(cls) {}, -- Generated by code below + + /** + * Removes the specified class from all items in collection. + * + * @method removeClass + * @param {String} cls Class to remove from each item. + * @return {tinymce.ui.Collection} Current collection instance. + */ + // removeClass: function(cls) {}, -- Generated by code below + }; + + // Extend tinymce.ui.Collection prototype with some generated control specific methods + Tools.each('fire on off show hide addClass removeClass append prepend before after reflow'.split(' '), function(name) { + proto[name] = function() { + var args = Tools.toArray(arguments); + + this.each(function(ctrl) { + if (name in ctrl) { + ctrl[name].apply(ctrl, args); + } + }); + + return this; + }; + }); + + // Extend tinymce.ui.Collection prototype with some property methods + Tools.each('text name disabled active selected checked visible parent value data'.split(' '), function(name) { + proto[name] = function(value) { + return this.prop(name, value); + }; + }); + + // Create class based on the new prototype + Collection = Class.extend(proto); + + // Stick Collection into Selector to prevent circual references + Selector.Collection = Collection; + + return Collection; +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/ColorButton.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/ColorButton.js new file mode 100755 index 0000000000..f4b36c3f2d --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/ColorButton.js @@ -0,0 +1,107 @@ +/** + * ColorButton.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class creates a color button control. This is a split button in which the main + * button has a visual representation of the currently selected color. When clicked + * the caret button displays a color picker, allowing the user to select a new color. + * + * @-x-less ColorButton.less + * @class tinymce.ui.ColorButton + * @extends tinymce.ui.PanelButton + */ +define("tinymce/ui/ColorButton", [ + "tinymce/ui/PanelButton", + "tinymce/dom/DOMUtils" +], function(PanelButton, DomUtils) { + "use strict"; + + var DOM = DomUtils.DOM; + + return PanelButton.extend({ + /** + * Constructs a new ColorButton instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + */ + init: function(settings) { + this._super(settings); + this.addClass('colorbutton'); + }, + + /** + * Getter/setter for the current color. + * + * @method color + * @param {String} [color] Color to set. + * @return {String|tinymce.ui.ColorButton} Current color or current instance. + */ + color: function(color) { + if (color) { + this._color = color; + this.getEl('preview').style.backgroundColor = color; + return this; + } + + return this._color; + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, id = self._id, prefix = self.classPrefix; + var icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : ''; + var image = self.settings.image ? ' style="background-image: url(\'' + self.settings.image + '\')"' : ''; + + return ( + '
    ' + + '' + + '' + + '
    ' + ); + }, + + /** + * Called after the control has been rendered. + * + * @method postRender + */ + postRender: function() { + var self = this, onClickHandler = self.settings.onclick; + + self.on('click', function(e) { + if (e.aria && e.aria.key == 'down') { + return; + } + + if (e.control == self && !DOM.getParent(e.target, '.' + self.classPrefix + 'open')) { + e.stopImmediatePropagation(); + onClickHandler.call(self, e); + } + }); + + delete self.settings.onclick; + + return self._super(); + } + + }); +}); diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/ComboBox.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/ComboBox.js new file mode 100755 index 0000000000..c174bf67c6 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/ComboBox.js @@ -0,0 +1,332 @@ +/** + * ComboBox.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class creates a combobox control. Select box that you select a value from or + * type a value into. + * + * @-x-less ComboBox.less + * @class tinymce.ui.ComboBox + * @extends tinymce.ui.Widget + */ +define("tinymce/ui/ComboBox", [ + "tinymce/ui/Widget", + "tinymce/ui/Factory", + "tinymce/ui/DomUtils" +], function(Widget, Factory, DomUtils) { + "use strict"; + + return Widget.extend({ + /** + * Constructs a new control instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + * @setting {String} placeholder Placeholder text to display. + */ + init: function(settings) { + var self = this; + + self._super(settings); + self.addClass('combobox'); + self.subinput = true; + self.ariaTarget = 'inp'; // TODO: Figure out a better way + + settings = self.settings; + settings.menu = settings.menu || settings.values; + + if (settings.menu) { + settings.icon = 'caret'; + } + + self.on('click', function(e) { + var elm = e.target, root = self.getEl(); + + while (elm && elm != root) { + if (elm.id && elm.id.indexOf('-open') != -1) { + self.fire('action'); + + if (settings.menu) { + self.showMenu(); + + if (e.aria) { + self.menu.items()[0].focus(); + } + } + } + + elm = elm.parentNode; + } + }); + + // TODO: Rework this + self.on('keydown', function(e) { + if (e.target.nodeName == "INPUT" && e.keyCode == 13) { + self.parents().reverse().each(function(ctrl) { + e.preventDefault(); + self.fire('change'); + + if (ctrl.hasEventListeners('submit') && ctrl.toJSON) { + ctrl.fire('submit', {data: ctrl.toJSON()}); + return false; + } + }); + } + }); + + if (settings.placeholder) { + self.addClass('placeholder'); + + self.on('focusin', function() { + if (!self._hasOnChange) { + DomUtils.on(self.getEl('inp'), 'change', function() { + self.fire('change'); + }); + + self._hasOnChange = true; + } + + if (self.hasClass('placeholder')) { + self.getEl('inp').value = ''; + self.removeClass('placeholder'); + } + }); + + self.on('focusout', function() { + if (self.value().length === 0) { + self.getEl('inp').value = settings.placeholder; + self.addClass('placeholder'); + } + }); + } + }, + + showMenu: function() { + var self = this, settings = self.settings, menu; + + if (!self.menu) { + menu = settings.menu || []; + + // Is menu array then auto constuct menu control + if (menu.length) { + menu = { + type: 'menu', + items: menu + }; + } else { + menu.type = menu.type || 'menu'; + } + + self.menu = Factory.create(menu).parent(self).renderTo(self.getContainerElm()); + self.fire('createmenu'); + self.menu.reflow(); + self.menu.on('cancel', function(e) { + if (e.control === self.menu) { + self.focus(); + } + }); + + self.menu.on('show hide', function(e) { + e.control.items().each(function(ctrl) { + ctrl.active(ctrl.value() == self.value()); + }); + }).fire('show'); + + self.menu.on('select', function(e) { + self.value(e.control.value()); + }); + + self.on('focusin', function(e) { + if (e.target.tagName == 'INPUT') { + self.menu.hide(); + } + }); + + self.aria('expanded', true); + } + + self.menu.show(); + self.menu.layoutRect({w: self.layoutRect().w}); + self.menu.moveRel(self.getEl(), self.isRtl() ? ['br-tr', 'tr-br'] : ['bl-tl', 'tl-bl']); + }, + + /** + * Getter/setter function for the control value. + * + * @method value + * @param {String} [value] Value to be set. + * @return {String|tinymce.ui.ComboBox} Value or self if it's a set operation. + */ + value: function(value) { + var self = this; + + if (typeof(value) != "undefined") { + self._value = value; + self.removeClass('placeholder'); + + if (self._rendered) { + self.getEl('inp').value = value; + } + + return self; + } + + if (self._rendered) { + value = self.getEl('inp').value; + + if (value != self.settings.placeholder) { + return value; + } + + return ''; + } + + return self._value; + }, + + /** + * Getter/setter function for the disabled state. + * + * @method value + * @param {Boolean} [state] State to be set. + * @return {Boolean|tinymce.ui.ComboBox} True/false or self if it's a set operation. + */ + disabled: function(state) { + var self = this; + + if (self._rendered && typeof(state) != 'undefined') { + self.getEl('inp').disabled = state; + } + + return self._super(state); + }, + + /** + * Focuses the input area of the control. + * + * @method focus + */ + focus: function() { + this.getEl('inp').focus(); + }, + + /** + * Repaints the control after a layout operation. + * + * @method repaint + */ + repaint: function() { + var self = this, elm = self.getEl(), openElm = self.getEl('open'), rect = self.layoutRect(); + var width, lineHeight; + + if (openElm) { + width = rect.w - DomUtils.getSize(openElm).width - 10; + } else { + width = rect.w - 10; + } + + // Detect old IE 7+8 add lineHeight to align caret vertically in the middle + var doc = document; + if (doc.all && (!doc.documentMode || doc.documentMode <= 8)) { + lineHeight = (self.layoutRect().h - 2) + 'px'; + } + + DomUtils.css(elm.firstChild, { + width: width, + lineHeight: lineHeight + }); + + self._super(); + + return self; + }, + + /** + * Post render method. Called after the control has been rendered to the target. + * + * @method postRender + * @return {tinymce.ui.ComboBox} Current combobox instance. + */ + postRender: function() { + var self = this; + + DomUtils.on(this.getEl('inp'), 'change', function() { + self.fire('change'); + }); + + return self._super(); + }, + + remove: function() { + DomUtils.off(this.getEl('inp')); + this._super(); + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, id = self._id, settings = self.settings, prefix = self.classPrefix; + var value = settings.value || settings.placeholder || ''; + var icon, text, openBtnHtml = '', extraAttrs = ''; + + if ("spellcheck" in settings) { + extraAttrs += ' spellcheck="' + settings.spellcheck + '"'; + } + + if (settings.maxLength) { + extraAttrs += ' maxlength="' + settings.maxLength + '"'; + } + + if (settings.size) { + extraAttrs += ' size="' + settings.size + '"'; + } + + if (settings.subtype) { + extraAttrs += ' type="' + settings.subtype + '"'; + } + + if (self.disabled()) { + extraAttrs += ' disabled="disabled"'; + } + + icon = settings.icon; + if (icon && icon != 'caret') { + icon = prefix + 'ico ' + prefix + 'i-' + settings.icon; + } + + text = self._text; + + if (icon || text) { + openBtnHtml = ( + '
    ' + + '' + + '
    ' + ); + + self.addClass('has-open'); + } + + return ( + '
    ' + + '' + + openBtnHtml + + '
    ' + ); + } + }); +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Container.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Container.js new file mode 100755 index 0000000000..f47ae9fc66 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Container.js @@ -0,0 +1,495 @@ +/** + * Container.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Container control. This is extended by all controls that can have + * children such as panels etc. You can also use this class directly as an + * generic container instance. The container doesn't have any specific role or style. + * + * @-x-less Container.less + * @class tinymce.ui.Container + * @extends tinymce.ui.Control + */ +define("tinymce/ui/Container", [ + "tinymce/ui/Control", + "tinymce/ui/Collection", + "tinymce/ui/Selector", + "tinymce/ui/Factory", + "tinymce/ui/KeyboardNavigation", + "tinymce/util/Tools", + "tinymce/ui/DomUtils" +], function(Control, Collection, Selector, Factory, KeyboardNavigation, Tools, DomUtils) { + "use strict"; + + var selectorCache = {}; + + return Control.extend({ + layout: '', + innerClass: 'container-inner', + + /** + * Constructs a new control instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + * @setting {Array} items Items to add to container in JSON format or control instances. + * @setting {String} layout Layout manager by name to use. + * @setting {Object} defaults Default settings to apply to all items. + */ + init: function(settings) { + var self = this; + + self._super(settings); + settings = self.settings; + self._fixed = settings.fixed; + self._items = new Collection(); + + if (self.isRtl()) { + self.addClass('rtl'); + } + + self.addClass('container'); + self.addClass('container-body', 'body'); + + if (settings.containerCls) { + self.addClass(settings.containerCls); + } + + self._layout = Factory.create((settings.layout || self.layout) + 'layout'); + + if (self.settings.items) { + self.add(self.settings.items); + } + + // TODO: Fix this! + self._hasBody = true; + }, + + /** + * Returns a collection of child items that the container currently have. + * + * @method items + * @return {tinymce.ui.Collection} Control collection direct child controls. + */ + items: function() { + return this._items; + }, + + /** + * Find child controls by selector. + * + * @method find + * @param {String} selector Selector CSS pattern to find children by. + * @return {tinymce.ui.Collection} Control collection with child controls. + */ + find: function(selector) { + selector = selectorCache[selector] = selectorCache[selector] || new Selector(selector); + + return selector.find(this); + }, + + /** + * Adds one or many items to the current container. This will create instances of + * the object representations if needed. + * + * @method add + * @param {Array/Object/tinymce.ui.Control} items Array or item that will be added to the container. + * @return {tinymce.ui.Collection} Current collection control. + */ + add: function(items) { + var self = this; + + self.items().add(self.create(items)).parent(self); + + return self; + }, + + /** + * Focuses the current container instance. This will look + * for the first control in the container and focus that. + * + * @method focus + * @param {Boolean} keyboard Optional true/false if the focus was a keyboard focus or not. + * @return {tinymce.ui.Collection} Current instance. + */ + focus: function(keyboard) { + var self = this, focusCtrl, keyboardNav, items; + + if (keyboard) { + keyboardNav = self.keyboardNav || self.parents().eq(-1)[0].keyboardNav; + + if (keyboardNav) { + keyboardNav.focusFirst(self); + return; + } + } + + items = self.find('*'); + + // TODO: Figure out a better way to auto focus alert dialog buttons + if (self.statusbar) { + items.add(self.statusbar.items()); + } + + items.each(function(ctrl) { + if (ctrl.settings.autofocus) { + focusCtrl = null; + return false; + } + + if (ctrl.canFocus) { + focusCtrl = focusCtrl || ctrl; + } + }); + + if (focusCtrl) { + focusCtrl.focus(); + } + + return self; + }, + + /** + * Replaces the specified child control with a new control. + * + * @method replace + * @param {tinymce.ui.Control} oldItem Old item to be replaced. + * @param {tinymce.ui.Control} newItem New item to be inserted. + */ + replace: function(oldItem, newItem) { + var ctrlElm, items = this.items(), i = items.length; + + // Replace the item in collection + while (i--) { + if (items[i] === oldItem) { + items[i] = newItem; + break; + } + } + + if (i >= 0) { + // Remove new item from DOM + ctrlElm = newItem.getEl(); + if (ctrlElm) { + ctrlElm.parentNode.removeChild(ctrlElm); + } + + // Remove old item from DOM + ctrlElm = oldItem.getEl(); + if (ctrlElm) { + ctrlElm.parentNode.removeChild(ctrlElm); + } + } + + // Adopt the item + newItem.parent(this); + }, + + /** + * Creates the specified items. If any of the items is plain JSON style objects + * it will convert these into real tinymce.ui.Control instances. + * + * @method create + * @param {Array} items Array of items to convert into control instances. + * @return {Array} Array with control instances. + */ + create: function(items) { + var self = this, settings, ctrlItems = []; + + // Non array structure, then force it into an array + if (!Tools.isArray(items)) { + items = [items]; + } + + // Add default type to each child control + Tools.each(items, function(item) { + if (item) { + // Construct item if needed + if (!(item instanceof Control)) { + // Name only then convert it to an object + if (typeof(item) == "string") { + item = {type: item}; + } + + // Create control instance based on input settings and default settings + settings = Tools.extend({}, self.settings.defaults, item); + item.type = settings.type = settings.type || item.type || self.settings.defaultType || + (settings.defaults ? settings.defaults.type : null); + item = Factory.create(settings); + } + + ctrlItems.push(item); + } + }); + + return ctrlItems; + }, + + /** + * Renders new control instances. + * + * @private + */ + renderNew: function() { + var self = this; + + // Render any new items + self.items().each(function(ctrl, index) { + var containerElm, fragment; + + ctrl.parent(self); + + if (!ctrl._rendered) { + containerElm = self.getEl('body'); + fragment = DomUtils.createFragment(ctrl.renderHtml()); + + // Insert or append the item + if (containerElm.hasChildNodes() && index <= containerElm.childNodes.length - 1) { + containerElm.insertBefore(fragment, containerElm.childNodes[index]); + } else { + containerElm.appendChild(fragment); + } + + ctrl.postRender(); + } + }); + + self._layout.applyClasses(self); + self._lastRect = null; + + return self; + }, + + /** + * Appends new instances to the current container. + * + * @method append + * @param {Array/tinymce.ui.Collection} items Array if controls to append. + * @return {tinymce.ui.Container} Current container instance. + */ + append: function(items) { + return this.add(items).renderNew(); + }, + + /** + * Prepends new instances to the current container. + * + * @method prepend + * @param {Array/tinymce.ui.Collection} items Array if controls to prepend. + * @return {tinymce.ui.Container} Current container instance. + */ + prepend: function(items) { + var self = this; + + self.items().set(self.create(items).concat(self.items().toArray())); + + return self.renderNew(); + }, + + /** + * Inserts an control at a specific index. + * + * @method insert + * @param {Array/tinymce.ui.Collection} items Array if controls to insert. + * @param {Number} index Index to insert controls at. + * @param {Boolean} [before=false] Inserts controls before the index. + */ + insert: function(items, index, before) { + var self = this, curItems, beforeItems, afterItems; + + items = self.create(items); + curItems = self.items(); + + if (!before && index < curItems.length - 1) { + index += 1; + } + + if (index >= 0 && index < curItems.length) { + beforeItems = curItems.slice(0, index).toArray(); + afterItems = curItems.slice(index).toArray(); + curItems.set(beforeItems.concat(items, afterItems)); + } + + return self.renderNew(); + }, + + /** + * Populates the form fields from the specified JSON data object. + * + * Control items in the form that matches the data will have it's value set. + * + * @method fromJSON + * @param {Object} data JSON data object to set control values by. + * @return {tinymce.ui.Container} Current form instance. + */ + fromJSON: function(data) { + var self = this; + + for (var name in data) { + self.find('#' + name).value(data[name]); + } + + return self; + }, + + /** + * Serializes the form into a JSON object by getting all items + * that has a name and a value. + * + * @method toJSON + * @return {Object} JSON object with form data. + */ + toJSON: function() { + var self = this, data = {}; + + self.find('*').each(function(ctrl) { + var name = ctrl.name(), value = ctrl.value(); + + if (name && typeof(value) != "undefined") { + data[name] = value; + } + }); + + return data; + }, + + preRender: function() { + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, layout = self._layout, role = this.settings.role; + + self.preRender(); + layout.preRender(self); + + return ( + '
    ' + + '
    ' + + (self.settings.html || '') + layout.renderHtml(self) + + '
    ' + + '
    ' + ); + }, + + /** + * Post render method. Called after the control has been rendered to the target. + * + * @method postRender + * @return {tinymce.ui.Container} Current combobox instance. + */ + postRender: function() { + var self = this, box; + + self.items().exec('postRender'); + self._super(); + + self._layout.postRender(self); + self._rendered = true; + + if (self.settings.style) { + DomUtils.css(self.getEl(), self.settings.style); + } + + if (self.settings.border) { + box = self.borderBox(); + DomUtils.css(self.getEl(), { + 'border-top-width': box.top, + 'border-right-width': box.right, + 'border-bottom-width': box.bottom, + 'border-left-width': box.left + }); + } + + if (!self.parent()) { + self.keyboardNav = new KeyboardNavigation({ + root: self + }); + } + + return self; + }, + + /** + * Initializes the current controls layout rect. + * This will be executed by the layout managers to determine the + * default minWidth/minHeight etc. + * + * @method initLayoutRect + * @return {Object} Layout rect instance. + */ + initLayoutRect: function() { + var self = this, layoutRect = self._super(); + + // Recalc container size by asking layout manager + self._layout.recalc(self); + + return layoutRect; + }, + + /** + * Recalculates the positions of the controls in the current container. + * This is invoked by the reflow method and shouldn't be called directly. + * + * @method recalc + */ + recalc: function() { + var self = this, rect = self._layoutRect, lastRect = self._lastRect; + + if (!lastRect || lastRect.w != rect.w || lastRect.h != rect.h) { + self._layout.recalc(self); + rect = self.layoutRect(); + self._lastRect = {x: rect.x, y: rect.y, w: rect.w, h: rect.h}; + return true; + } + }, + + /** + * Reflows the current container and it's children and possible parents. + * This should be used after you for example append children to the current control so + * that the layout managers know that they need to reposition everything. + * + * @example + * container.append({type: 'button', text: 'My button'}).reflow(); + * + * @method reflow + * @return {tinymce.ui.Container} Current container instance. + */ + reflow: function() { + var i; + + if (this.visible()) { + Control.repaintControls = []; + Control.repaintControls.map = {}; + + this.recalc(); + i = Control.repaintControls.length; + + while (i--) { + Control.repaintControls[i].repaint(); + } + + // TODO: Fix me! + if (this.settings.layout !== "flow" && this.settings.layout !== "stack") { + this.repaint(); + } + + Control.repaintControls = []; + } + + return this; + } + }); +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Control.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Control.js new file mode 100755 index 0000000000..599916f229 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Control.js @@ -0,0 +1,1559 @@ +/** + * Control.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*eslint consistent-this:0 */ + +/** + * This is the base class for all controls and containers. All UI control instances inherit + * from this one as it has the base logic needed by all of them. + * + * @class tinymce.ui.Control + */ +define("tinymce/ui/Control", [ + "tinymce/util/Class", + "tinymce/util/Tools", + "tinymce/ui/Collection", + "tinymce/ui/DomUtils" +], function(Class, Tools, Collection, DomUtils) { + "use strict"; + + var nativeEvents = Tools.makeMap("focusin focusout scroll click dblclick mousedown mouseup mousemove mouseover" + + " mouseout mouseenter mouseleave wheel keydown keypress keyup contextmenu", " "); + + var elementIdCache = {}; + var hasMouseWheelEventSupport = "onmousewheel" in document; + var hasWheelEventSupport = false; + + var Control = Class.extend({ + Statics: { + elementIdCache: elementIdCache + }, + + isRtl: function() { + return Control.rtl; + }, + + /** + * Class/id prefix to use for all controls. + * + * @final + * @field {String} classPrefix + */ + classPrefix: "mce-", + + /** + * Constructs a new control instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + * @setting {String} style Style CSS properties to add. + * @setting {String} border Border box values example: 1 1 1 1 + * @setting {String} padding Padding box values example: 1 1 1 1 + * @setting {String} margin Margin box values example: 1 1 1 1 + * @setting {Number} minWidth Minimal width for the control. + * @setting {Number} minHeight Minimal height for the control. + * @setting {String} classes Space separated list of classes to add. + * @setting {String} role WAI-ARIA role to use for control. + * @setting {Boolean} hidden Is the control hidden by default. + * @setting {Boolean} disabled Is the control disabled by default. + * @setting {String} name Name of the control instance. + */ + init: function(settings) { + var self = this, classes, i; + + self.settings = settings = Tools.extend({}, self.Defaults, settings); + + // Initial states + self._id = settings.id || DomUtils.id(); + self._text = self._name = ''; + self._width = self._height = 0; + self._aria = {role: settings.role}; + + // Setup classes + classes = settings.classes; + if (classes) { + classes = classes.split(' '); + classes.map = {}; + i = classes.length; + while (i--) { + classes.map[classes[i]] = true; + } + } + + self._classes = classes || []; + self.visible(true); + + // Set some properties + Tools.each('title text width height name classes visible disabled active value'.split(' '), function(name) { + var value = settings[name], undef; + + if (value !== undef) { + self[name](value); + } else if (self['_' + name] === undef) { + self['_' + name] = false; + } + }); + + self.on('click', function() { + if (self.disabled()) { + return false; + } + }); + + // TODO: Is this needed duplicate code see above? + if (settings.classes) { + Tools.each(settings.classes.split(' '), function(cls) { + self.addClass(cls); + }); + } + + /** + * Name/value object with settings for the current control. + * + * @field {Object} settings + */ + self.settings = settings; + + self._borderBox = self.parseBox(settings.border); + self._paddingBox = self.parseBox(settings.padding); + self._marginBox = self.parseBox(settings.margin); + + if (settings.hidden) { + self.hide(); + } + }, + + // Will generate getter/setter methods for these properties + Properties: 'parent,title,text,width,height,disabled,active,name,value', + + // Will generate empty dummy functions for these + Methods: 'renderHtml', + + /** + * Returns the root element to render controls into. + * + * @method getContainerElm + * @return {Element} HTML DOM element to render into. + */ + getContainerElm: function() { + return document.body; + }, + + /** + * Returns a control instance for the current DOM element. + * + * @method getParentCtrl + * @param {Element} elm HTML dom element to get parent control from. + * @return {tinymce.ui.Control} Control instance or undefined. + */ + getParentCtrl: function(elm) { + var ctrl, lookup = this.getRoot().controlIdLookup; + + while (elm && lookup) { + ctrl = lookup[elm.id]; + if (ctrl) { + break; + } + + elm = elm.parentNode; + } + + return ctrl; + }, + + /** + * Parses the specified box value. A box value contains 1-4 properties in clockwise order. + * + * @method parseBox + * @param {String/Number} value Box value "0 1 2 3" or "0" etc. + * @return {Object} Object with top/right/bottom/left properties. + * @private + */ + parseBox: function(value) { + var len, radix = 10; + + if (!value) { + return; + } + + if (typeof(value) === "number") { + value = value || 0; + + return { + top: value, + left: value, + bottom: value, + right: value + }; + } + + value = value.split(' '); + len = value.length; + + if (len === 1) { + value[1] = value[2] = value[3] = value[0]; + } else if (len === 2) { + value[2] = value[0]; + value[3] = value[1]; + } else if (len === 3) { + value[3] = value[1]; + } + + return { + top: parseInt(value[0], radix) || 0, + right: parseInt(value[1], radix) || 0, + bottom: parseInt(value[2], radix) || 0, + left: parseInt(value[3], radix) || 0 + }; + }, + + borderBox: function() { + return this._borderBox; + }, + + paddingBox: function() { + return this._paddingBox; + }, + + marginBox: function() { + return this._marginBox; + }, + + measureBox: function(elm, prefix) { + function getStyle(name) { + var defaultView = document.defaultView; + + if (defaultView) { + // Remove camelcase + name = name.replace(/[A-Z]/g, function(a) { + return '-' + a; + }); + + return defaultView.getComputedStyle(elm, null).getPropertyValue(name); + } + + return elm.currentStyle[name]; + } + + function getSide(name) { + var val = parseFloat(getStyle(name), 10); + + return isNaN(val) ? 0 : val; + } + + return { + top: getSide(prefix + "TopWidth"), + right: getSide(prefix + "RightWidth"), + bottom: getSide(prefix + "BottomWidth"), + left: getSide(prefix + "LeftWidth") + }; + }, + + /** + * Initializes the current controls layout rect. + * This will be executed by the layout managers to determine the + * default minWidth/minHeight etc. + * + * @method initLayoutRect + * @return {Object} Layout rect instance. + */ + initLayoutRect: function() { + var self = this, settings = self.settings, borderBox, layoutRect; + var elm = self.getEl(), width, height, minWidth, minHeight, autoResize; + var startMinWidth, startMinHeight, initialSize; + + // Measure the current element + borderBox = self._borderBox = self._borderBox || self.measureBox(elm, 'border'); + self._paddingBox = self._paddingBox || self.measureBox(elm, 'padding'); + self._marginBox = self._marginBox || self.measureBox(elm, 'margin'); + initialSize = DomUtils.getSize(elm); + + // Setup minWidth/minHeight and width/height + startMinWidth = settings.minWidth; + startMinHeight = settings.minHeight; + minWidth = startMinWidth || initialSize.width; + minHeight = startMinHeight || initialSize.height; + width = settings.width; + height = settings.height; + autoResize = settings.autoResize; + autoResize = typeof(autoResize) != "undefined" ? autoResize : !width && !height; + + width = width || minWidth; + height = height || minHeight; + + var deltaW = borderBox.left + borderBox.right; + var deltaH = borderBox.top + borderBox.bottom; + + var maxW = settings.maxWidth || 0xFFFF; + var maxH = settings.maxHeight || 0xFFFF; + + // Setup initial layout rect + self._layoutRect = layoutRect = { + x: settings.x || 0, + y: settings.y || 0, + w: width, + h: height, + deltaW: deltaW, + deltaH: deltaH, + contentW: width - deltaW, + contentH: height - deltaH, + innerW: width - deltaW, + innerH: height - deltaH, + startMinWidth: startMinWidth || 0, + startMinHeight: startMinHeight || 0, + minW: Math.min(minWidth, maxW), + minH: Math.min(minHeight, maxH), + maxW: maxW, + maxH: maxH, + autoResize: autoResize, + scrollW: 0 + }; + + self._lastLayoutRect = {}; + + return layoutRect; + }, + + /** + * Getter/setter for the current layout rect. + * + * @method layoutRect + * @param {Object} [newRect] Optional new layout rect. + * @return {tinymce.ui.Control/Object} Current control or rect object. + */ + layoutRect: function(newRect) { + var self = this, curRect = self._layoutRect, lastLayoutRect, size, deltaWidth, deltaHeight, undef, repaintControls; + + // Initialize default layout rect + if (!curRect) { + curRect = self.initLayoutRect(); + } + + // Set new rect values + if (newRect) { + // Calc deltas between inner and outer sizes + deltaWidth = curRect.deltaW; + deltaHeight = curRect.deltaH; + + // Set x position + if (newRect.x !== undef) { + curRect.x = newRect.x; + } + + // Set y position + if (newRect.y !== undef) { + curRect.y = newRect.y; + } + + // Set minW + if (newRect.minW !== undef) { + curRect.minW = newRect.minW; + } + + // Set minH + if (newRect.minH !== undef) { + curRect.minH = newRect.minH; + } + + // Set new width and calculate inner width + size = newRect.w; + if (size !== undef) { + size = size < curRect.minW ? curRect.minW : size; + size = size > curRect.maxW ? curRect.maxW : size; + curRect.w = size; + curRect.innerW = size - deltaWidth; + } + + // Set new height and calculate inner height + size = newRect.h; + if (size !== undef) { + size = size < curRect.minH ? curRect.minH : size; + size = size > curRect.maxH ? curRect.maxH : size; + curRect.h = size; + curRect.innerH = size - deltaHeight; + } + + // Set new inner width and calculate width + size = newRect.innerW; + if (size !== undef) { + size = size < curRect.minW - deltaWidth ? curRect.minW - deltaWidth : size; + size = size > curRect.maxW - deltaWidth ? curRect.maxW - deltaWidth : size; + curRect.innerW = size; + curRect.w = size + deltaWidth; + } + + // Set new height and calculate inner height + size = newRect.innerH; + if (size !== undef) { + size = size < curRect.minH - deltaHeight ? curRect.minH - deltaHeight : size; + size = size > curRect.maxH - deltaHeight ? curRect.maxH - deltaHeight : size; + curRect.innerH = size; + curRect.h = size + deltaHeight; + } + + // Set new contentW + if (newRect.contentW !== undef) { + curRect.contentW = newRect.contentW; + } + + // Set new contentH + if (newRect.contentH !== undef) { + curRect.contentH = newRect.contentH; + } + + // Compare last layout rect with the current one to see if we need to repaint or not + lastLayoutRect = self._lastLayoutRect; + if (lastLayoutRect.x !== curRect.x || lastLayoutRect.y !== curRect.y || + lastLayoutRect.w !== curRect.w || lastLayoutRect.h !== curRect.h) { + repaintControls = Control.repaintControls; + + if (repaintControls) { + if (repaintControls.map && !repaintControls.map[self._id]) { + repaintControls.push(self); + repaintControls.map[self._id] = true; + } + } + + lastLayoutRect.x = curRect.x; + lastLayoutRect.y = curRect.y; + lastLayoutRect.w = curRect.w; + lastLayoutRect.h = curRect.h; + } + + return self; + } + + return curRect; + }, + + /** + * Repaints the control after a layout operation. + * + * @method repaint + */ + repaint: function() { + var self = this, style, bodyStyle, rect, borderBox, borderW = 0, borderH = 0, lastRepaintRect, round; + + // Use Math.round on all values on IE < 9 + round = !document.createRange ? Math.round : function(value) { + return value; + }; + + style = self.getEl().style; + rect = self._layoutRect; + lastRepaintRect = self._lastRepaintRect || {}; + + borderBox = self._borderBox; + borderW = borderBox.left + borderBox.right; + borderH = borderBox.top + borderBox.bottom; + + if (rect.x !== lastRepaintRect.x) { + style.left = round(rect.x) + 'px'; + lastRepaintRect.x = rect.x; + } + + if (rect.y !== lastRepaintRect.y) { + style.top = round(rect.y) + 'px'; + lastRepaintRect.y = rect.y; + } + + if (rect.w !== lastRepaintRect.w) { + style.width = round(rect.w - borderW) + 'px'; + lastRepaintRect.w = rect.w; + } + + if (rect.h !== lastRepaintRect.h) { + style.height = round(rect.h - borderH) + 'px'; + lastRepaintRect.h = rect.h; + } + + // Update body if needed + if (self._hasBody && rect.innerW !== lastRepaintRect.innerW) { + bodyStyle = self.getEl('body').style; + bodyStyle.width = round(rect.innerW) + 'px'; + lastRepaintRect.innerW = rect.innerW; + } + + if (self._hasBody && rect.innerH !== lastRepaintRect.innerH) { + bodyStyle = bodyStyle || self.getEl('body').style; + bodyStyle.height = round(rect.innerH) + 'px'; + lastRepaintRect.innerH = rect.innerH; + } + + self._lastRepaintRect = lastRepaintRect; + self.fire('repaint', {}, false); + }, + + /** + * Binds a callback to the specified event. This event can both be + * native browser events like "click" or custom ones like PostRender. + * + * The callback function will be passed a DOM event like object that enables yout do stop propagation. + * + * @method on + * @param {String} name Name of the event to bind. For example "click". + * @param {String/function} callback Callback function to execute ones the event occurs. + * @return {tinymce.ui.Control} Current control object. + */ + on: function(name, callback) { + var self = this, bindings, handlers, names, i; + + function resolveCallbackName(name) { + var callback, scope; + + return function(e) { + if (!callback) { + self.parents().each(function(ctrl) { + var callbacks = ctrl.settings.callbacks; + + if (callbacks && (callback = callbacks[name])) { + scope = ctrl; + return false; + } + }); + } + + return callback.call(scope, e); + }; + } + + if (callback) { + if (typeof(callback) == 'string') { + callback = resolveCallbackName(callback); + } + + names = name.toLowerCase().split(' '); + i = names.length; + while (i--) { + name = names[i]; + + bindings = self._bindings; + if (!bindings) { + bindings = self._bindings = {}; + } + + handlers = bindings[name]; + if (!handlers) { + handlers = bindings[name] = []; + } + + handlers.push(callback); + + if (nativeEvents[name]) { + if (!self._nativeEvents) { + self._nativeEvents = {name: true}; + } else { + self._nativeEvents[name] = true; + } + + if (self._rendered) { + self.bindPendingEvents(); + } + } + } + } + + return self; + }, + + /** + * Unbinds the specified event and optionally a specific callback. If you omit the name + * parameter all event handlers will be removed. If you omit the callback all event handles + * by the specified name will be removed. + * + * @method off + * @param {String} [name] Name for the event to unbind. + * @param {function} [callback] Callback function to unbind. + * @return {mxex.ui.Control} Current control object. + */ + off: function(name, callback) { + var self = this, i, bindings = self._bindings, handlers, bindingName, names, hi; + + if (bindings) { + if (name) { + names = name.toLowerCase().split(' '); + i = names.length; + while (i--) { + name = names[i]; + handlers = bindings[name]; + + // Unbind all handlers + if (!name) { + for (bindingName in bindings) { + bindings[bindingName].length = 0; + } + + return self; + } + + if (handlers) { + // Unbind all by name + if (!callback) { + handlers.length = 0; + } else { + // Unbind specific ones + hi = handlers.length; + while (hi--) { + if (handlers[hi] === callback) { + handlers.splice(hi, 1); + } + } + } + } + } + } else { + self._bindings = []; + } + } + + return self; + }, + + /** + * Fires the specified event by name and arguments on the control. This will execute all + * bound event handlers. + * + * @method fire + * @param {String} name Name of the event to fire. + * @param {Object} [args] Arguments to pass to the event. + * @param {Boolean} [bubble] Value to control bubbeling. Defaults to true. + * @return {Object} Current arguments object. + */ + fire: function(name, args, bubble) { + var self = this, i, l, handlers, parentCtrl; + + name = name.toLowerCase(); + + // Dummy function that gets replaced on the delegation state functions + function returnFalse() { + return false; + } + + // Dummy function that gets replaced on the delegation state functions + function returnTrue() { + return true; + } + + // Setup empty object if args is omited + args = args || {}; + + // Stick type into event object + if (!args.type) { + args.type = name; + } + + // Stick control into event + if (!args.control) { + args.control = self; + } + + // Add event delegation methods if they are missing + if (!args.preventDefault) { + // Add preventDefault method + args.preventDefault = function() { + args.isDefaultPrevented = returnTrue; + }; + + // Add stopPropagation + args.stopPropagation = function() { + args.isPropagationStopped = returnTrue; + }; + + // Add stopImmediatePropagation + args.stopImmediatePropagation = function() { + args.isImmediatePropagationStopped = returnTrue; + }; + + // Add event delegation states + args.isDefaultPrevented = returnFalse; + args.isPropagationStopped = returnFalse; + args.isImmediatePropagationStopped = returnFalse; + } + + if (self._bindings) { + handlers = self._bindings[name]; + + if (handlers) { + for (i = 0, l = handlers.length; i < l; i++) { + // Execute callback and break if the callback returns a false + if (!args.isImmediatePropagationStopped() && handlers[i].call(self, args) === false) { + break; + } + } + } + } + + // Bubble event up to parent controls + if (bubble !== false) { + parentCtrl = self.parent(); + while (parentCtrl && !args.isPropagationStopped()) { + parentCtrl.fire(name, args, false); + parentCtrl = parentCtrl.parent(); + } + } + + return args; + }, + + /** + * Returns true/false if the specified event has any listeners. + * + * @method hasEventListeners + * @param {String} name Name of the event to check for. + * @return {Boolean} True/false state if the event has listeners. + */ + hasEventListeners: function(name) { + return name in this._bindings; + }, + + /** + * Returns a control collection with all parent controls. + * + * @method parents + * @param {String} selector Optional selector expression to find parents. + * @return {tinymce.ui.Collection} Collection with all parent controls. + */ + parents: function(selector) { + var self = this, ctrl, parents = new Collection(); + + // Add each parent to collection + for (ctrl = self.parent(); ctrl; ctrl = ctrl.parent()) { + parents.add(ctrl); + } + + // Filter away everything that doesn't match the selector + if (selector) { + parents = parents.filter(selector); + } + + return parents; + }, + + /** + * Returns the control next to the current control. + * + * @method next + * @return {tinymce.ui.Control} Next control instance. + */ + next: function() { + var parentControls = this.parent().items(); + + return parentControls[parentControls.indexOf(this) + 1]; + }, + + /** + * Returns the control previous to the current control. + * + * @method prev + * @return {tinymce.ui.Control} Previous control instance. + */ + prev: function() { + var parentControls = this.parent().items(); + + return parentControls[parentControls.indexOf(this) - 1]; + }, + + /** + * Find the common ancestor for two control instances. + * + * @method findCommonAncestor + * @param {tinymce.ui.Control} ctrl1 First control. + * @param {tinymce.ui.Control} ctrl2 Second control. + * @return {tinymce.ui.Control} Ancestor control instance. + */ + findCommonAncestor: function(ctrl1, ctrl2) { + var parentCtrl; + + while (ctrl1) { + parentCtrl = ctrl2; + + while (parentCtrl && ctrl1 != parentCtrl) { + parentCtrl = parentCtrl.parent(); + } + + if (ctrl1 == parentCtrl) { + break; + } + + ctrl1 = ctrl1.parent(); + } + + return ctrl1; + }, + + /** + * Returns true/false if the specific control has the specific class. + * + * @method hasClass + * @param {String} cls Class to check for. + * @param {String} [group] Sub element group name. + * @return {Boolean} True/false if the control has the specified class. + */ + hasClass: function(cls, group) { + var classes = this._classes[group || 'control']; + + cls = this.classPrefix + cls; + + return classes && !!classes.map[cls]; + }, + + /** + * Adds the specified class to the control + * + * @method addClass + * @param {String} cls Class to check for. + * @param {String} [group] Sub element group name. + * @return {tinymce.ui.Control} Current control object. + */ + addClass: function(cls, group) { + var self = this, classes, elm; + + cls = this.classPrefix + cls; + classes = self._classes[group || 'control']; + + if (!classes) { + classes = []; + classes.map = {}; + self._classes[group || 'control'] = classes; + } + + if (!classes.map[cls]) { + classes.map[cls] = cls; + classes.push(cls); + + if (self._rendered) { + elm = self.getEl(group); + + if (elm) { + elm.className = classes.join(' '); + } + } + } + + return self; + }, + + /** + * Removes the specified class from the control. + * + * @method removeClass + * @param {String} cls Class to remove. + * @param {String} [group] Sub element group name. + * @return {tinymce.ui.Control} Current control object. + */ + removeClass: function(cls, group) { + var self = this, classes, i, elm; + + cls = this.classPrefix + cls; + classes = self._classes[group || 'control']; + if (classes && classes.map[cls]) { + delete classes.map[cls]; + + i = classes.length; + while (i--) { + if (classes[i] === cls) { + classes.splice(i, 1); + } + } + } + + if (self._rendered) { + elm = self.getEl(group); + + if (elm) { + elm.className = classes.join(' '); + } + } + + return self; + }, + + /** + * Toggles the specified class on the control. + * + * @method toggleClass + * @param {String} cls Class to remove. + * @param {Boolean} state True/false state to add/remove class. + * @param {String} [group] Sub element group name. + * @return {tinymce.ui.Control} Current control object. + */ + toggleClass: function(cls, state, group) { + var self = this; + + if (state) { + self.addClass(cls, group); + } else { + self.removeClass(cls, group); + } + + return self; + }, + + /** + * Returns the class string for the specified group name. + * + * @method classes + * @param {String} [group] Group to get clases by. + * @return {String} Classes for the specified group. + */ + classes: function(group) { + var classes = this._classes[group || 'control']; + + return classes ? classes.join(' ') : ''; + }, + + /** + * Sets the inner HTML of the control element. + * + * @method innerHtml + * @param {String} html Html string to set as inner html. + * @return {tinymce.ui.Control} Current control object. + */ + innerHtml: function(html) { + DomUtils.innerHtml(this.getEl(), html); + return this; + }, + + /** + * Returns the control DOM element or sub element. + * + * @method getEl + * @param {String} [suffix] Suffix to get element by. + * @param {Boolean} [dropCache] True if the cache for the element should be dropped. + * @return {Element} HTML DOM element for the current control or it's children. + */ + getEl: function(suffix, dropCache) { + var elm, id = suffix ? this._id + '-' + suffix : this._id; + + elm = elementIdCache[id] = (dropCache === true ? null : elementIdCache[id]) || DomUtils.get(id); + + return elm; + }, + + /** + * Sets/gets the visible for the control. + * + * @method visible + * @param {Boolean} state Value to set to control. + * @return {Boolean/tinymce.ui.Control} Current control on a set operation or current state on a get. + */ + visible: function(state) { + var self = this, parentCtrl; + + if (typeof(state) !== "undefined") { + if (self._visible !== state) { + if (self._rendered) { + self.getEl().style.display = state ? '' : 'none'; + } + + self._visible = state; + + // Parent container needs to reflow + parentCtrl = self.parent(); + if (parentCtrl) { + parentCtrl._lastRect = null; + } + + self.fire(state ? 'show' : 'hide'); + } + + return self; + } + + return self._visible; + }, + + /** + * Sets the visible state to true. + * + * @method show + * @return {tinymce.ui.Control} Current control instance. + */ + show: function() { + return this.visible(true); + }, + + /** + * Sets the visible state to false. + * + * @method hide + * @return {tinymce.ui.Control} Current control instance. + */ + hide: function() { + return this.visible(false); + }, + + /** + * Focuses the current control. + * + * @method focus + * @return {tinymce.ui.Control} Current control instance. + */ + focus: function() { + try { + this.getEl().focus(); + } catch (ex) { + // Ignore IE error + } + + return this; + }, + + /** + * Blurs the current control. + * + * @method blur + * @return {tinymce.ui.Control} Current control instance. + */ + blur: function() { + this.getEl().blur(); + + return this; + }, + + /** + * Sets the specified aria property. + * + * @method aria + * @param {String} name Name of the aria property to set. + * @param {String} value Value of the aria property. + * @return {tinymce.ui.Control} Current control instance. + */ + aria: function(name, value) { + var self = this, elm = self.getEl(self.ariaTarget); + + if (typeof(value) === "undefined") { + return self._aria[name]; + } else { + self._aria[name] = value; + } + + if (self._rendered) { + elm.setAttribute(name == 'role' ? name : 'aria-' + name, value); + } + + return self; + }, + + /** + * Encodes the specified string with HTML entities. It will also + * translate the string to different languages. + * + * @method encode + * @param {String/Object/Array} text Text to entity encode. + * @param {Boolean} [translate=true] False if the contents shouldn't be translated. + * @return {String} Encoded and possible traslated string. + */ + encode: function(text, translate) { + if (translate !== false && Control.translate) { + text = Control.translate(text); + } + + return (text || '').replace(/[&<>"]/g, function(match) { + return '&#' + match.charCodeAt(0) + ';'; + }); + }, + + /** + * Adds items before the current control. + * + * @method before + * @param {Array/tinymce.ui.Collection} items Array of items to prepend before this control. + * @return {tinymce.ui.Control} Current control instance. + */ + before: function(items) { + var self = this, parent = self.parent(); + + if (parent) { + parent.insert(items, parent.items().indexOf(self), true); + } + + return self; + }, + + /** + * Adds items after the current control. + * + * @method after + * @param {Array/tinymce.ui.Collection} items Array of items to append after this control. + * @return {tinymce.ui.Control} Current control instance. + */ + after: function(items) { + var self = this, parent = self.parent(); + + if (parent) { + parent.insert(items, parent.items().indexOf(self)); + } + + return self; + }, + + /** + * Removes the current control from DOM and from UI collections. + * + * @method remove + * @return {tinymce.ui.Control} Current control instance. + */ + remove: function() { + var self = this, elm = self.getEl(), parent = self.parent(), newItems, i; + + if (self.items) { + var controls = self.items().toArray(); + i = controls.length; + while (i--) { + controls[i].remove(); + } + } + + if (parent && parent.items) { + newItems = []; + + parent.items().each(function(item) { + if (item !== self) { + newItems.push(item); + } + }); + + parent.items().set(newItems); + parent._lastRect = null; + } + + if (self._eventsRoot && self._eventsRoot == self) { + DomUtils.off(elm); + } + + var lookup = self.getRoot().controlIdLookup; + if (lookup) { + delete lookup[self._id]; + } + + delete elementIdCache[self._id]; + + if (elm && elm.parentNode) { + var nodes = elm.getElementsByTagName('*'); + + i = nodes.length; + while (i--) { + delete elementIdCache[nodes[i].id]; + } + + elm.parentNode.removeChild(elm); + } + + self._rendered = false; + + return self; + }, + + /** + * Renders the control before the specified element. + * + * @method renderBefore + * @param {Element} elm Element to render before. + * @return {tinymce.ui.Control} Current control instance. + */ + renderBefore: function(elm) { + var self = this; + + elm.parentNode.insertBefore(DomUtils.createFragment(self.renderHtml()), elm); + self.postRender(); + + return self; + }, + + /** + * Renders the control to the specified element. + * + * @method renderBefore + * @param {Element} elm Element to render to. + * @return {tinymce.ui.Control} Current control instance. + */ + renderTo: function(elm) { + var self = this; + + elm = elm || self.getContainerElm(); + elm.appendChild(DomUtils.createFragment(self.renderHtml())); + self.postRender(); + + return self; + }, + + /** + * Post render method. Called after the control has been rendered to the target. + * + * @method postRender + * @return {tinymce.ui.Control} Current control instance. + */ + postRender: function() { + var self = this, settings = self.settings, elm, box, parent, name, parentEventsRoot; + + // Bind on settings + for (name in settings) { + if (name.indexOf("on") === 0) { + self.on(name.substr(2), settings[name]); + } + } + + if (self._eventsRoot) { + for (parent = self.parent(); !parentEventsRoot && parent; parent = parent.parent()) { + parentEventsRoot = parent._eventsRoot; + } + + if (parentEventsRoot) { + for (name in parentEventsRoot._nativeEvents) { + self._nativeEvents[name] = true; + } + } + } + + self.bindPendingEvents(); + + if (settings.style) { + elm = self.getEl(); + if (elm) { + elm.setAttribute('style', settings.style); + elm.style.cssText = settings.style; + } + } + + if (!self._visible) { + DomUtils.css(self.getEl(), 'display', 'none'); + } + + if (self.settings.border) { + box = self.borderBox(); + DomUtils.css(self.getEl(), { + 'border-top-width': box.top, + 'border-right-width': box.right, + 'border-bottom-width': box.bottom, + 'border-left-width': box.left + }); + } + + // Add instance to lookup + var root = self.getRoot(); + if (!root.controlIdLookup) { + root.controlIdLookup = {}; + } + + root.controlIdLookup[self._id] = self; + + for (var key in self._aria) { + self.aria(key, self._aria[key]); + } + + self.fire('postrender', {}, false); + }, + + /** + * Scrolls the current control into view. + * + * @method scrollIntoView + * @param {String} align Alignment in view top|center|bottom. + * @return {tinymce.ui.Control} Current control instance. + */ + scrollIntoView: function(align) { + function getOffset(elm, rootElm) { + var x, y, parent = elm; + + x = y = 0; + while (parent && parent != rootElm && parent.nodeType) { + x += parent.offsetLeft || 0; + y += parent.offsetTop || 0; + parent = parent.offsetParent; + } + + return {x: x, y: y}; + } + + var elm = this.getEl(), parentElm = elm.parentNode; + var x, y, width, height, parentWidth, parentHeight; + var pos = getOffset(elm, parentElm); + + x = pos.x; + y = pos.y; + width = elm.offsetWidth; + height = elm.offsetHeight; + parentWidth = parentElm.clientWidth; + parentHeight = parentElm.clientHeight; + + if (align == "end") { + x -= parentWidth - width; + y -= parentHeight - height; + } else if (align == "center") { + x -= (parentWidth / 2) - (width / 2); + y -= (parentHeight / 2) - (height / 2); + } + + parentElm.scrollLeft = x; + parentElm.scrollTop = y; + + return this; + }, + + /** + * Binds pending DOM events. + * + * @private + */ + bindPendingEvents: function() { + var self = this, i, l, parents, eventRootCtrl, nativeEvents, name; + + function delegate(e) { + var control = self.getParentCtrl(e.target); + + if (control) { + control.fire(e.type, e); + } + } + + function mouseLeaveHandler() { + var ctrl = eventRootCtrl._lastHoverCtrl; + + if (ctrl) { + ctrl.fire("mouseleave", {target: ctrl.getEl()}); + + ctrl.parents().each(function(ctrl) { + ctrl.fire("mouseleave", {target: ctrl.getEl()}); + }); + + eventRootCtrl._lastHoverCtrl = null; + } + } + + function mouseEnterHandler(e) { + var ctrl = self.getParentCtrl(e.target), lastCtrl = eventRootCtrl._lastHoverCtrl, idx = 0, i, parents, lastParents; + + // Over on a new control + if (ctrl !== lastCtrl) { + eventRootCtrl._lastHoverCtrl = ctrl; + + parents = ctrl.parents().toArray().reverse(); + parents.push(ctrl); + + if (lastCtrl) { + lastParents = lastCtrl.parents().toArray().reverse(); + lastParents.push(lastCtrl); + + for (idx = 0; idx < lastParents.length; idx++) { + if (parents[idx] !== lastParents[idx]) { + break; + } + } + + for (i = lastParents.length - 1; i >= idx; i--) { + lastCtrl = lastParents[i]; + lastCtrl.fire("mouseleave", { + target : lastCtrl.getEl() + }); + } + } + + for (i = idx; i < parents.length; i++) { + ctrl = parents[i]; + ctrl.fire("mouseenter", { + target : ctrl.getEl() + }); + } + } + } + + function fixWheelEvent(e) { + e.preventDefault(); + + if (e.type == "mousewheel") { + e.deltaY = -1 / 40 * e.wheelDelta; + + if (e.wheelDeltaX) { + e.deltaX = -1 / 40 * e.wheelDeltaX; + } + } else { + e.deltaX = 0; + e.deltaY = e.detail; + } + + e = self.fire("wheel", e); + } + + self._rendered = true; + + nativeEvents = self._nativeEvents; + if (nativeEvents) { + // Find event root element if it exists + parents = self.parents().toArray(); + parents.unshift(self); + for (i = 0, l = parents.length; !eventRootCtrl && i < l; i++) { + eventRootCtrl = parents[i]._eventsRoot; + } + + // Event root wasn't found the use the root control + if (!eventRootCtrl) { + eventRootCtrl = parents[parents.length - 1] || self; + } + + // Set the eventsRoot property on children that didn't have it + self._eventsRoot = eventRootCtrl; + for (l = i, i = 0; i < l; i++) { + parents[i]._eventsRoot = eventRootCtrl; + } + + // Bind native event delegates + for (name in nativeEvents) { + if (!nativeEvents) { + return false; + } + + if (name === "wheel" && !hasWheelEventSupport) { + if (hasMouseWheelEventSupport) { + DomUtils.on(self.getEl(), "mousewheel", fixWheelEvent); + } else { + DomUtils.on(self.getEl(), "DOMMouseScroll", fixWheelEvent); + } + + continue; + } + + // Special treatment for mousenter/mouseleave since these doesn't bubble + if (name === "mouseenter" || name === "mouseleave") { + // Fake mousenter/mouseleave + if (!eventRootCtrl._hasMouseEnter) { + DomUtils.on(eventRootCtrl.getEl(), "mouseleave", mouseLeaveHandler); + DomUtils.on(eventRootCtrl.getEl(), "mouseover", mouseEnterHandler); + eventRootCtrl._hasMouseEnter = 1; + } + } else if (!eventRootCtrl[name]) { + DomUtils.on(eventRootCtrl.getEl(), name, delegate); + eventRootCtrl[name] = true; + } + + // Remove the event once it's bound + nativeEvents[name] = false; + } + } + }, + + getRoot: function() { + var ctrl = this, rootControl, parents = []; + + while (ctrl) { + if (ctrl.rootControl) { + rootControl = ctrl.rootControl; + break; + } + + parents.push(ctrl); + rootControl = ctrl; + ctrl = ctrl.parent(); + } + + if (!rootControl) { + rootControl = this; + } + + var i = parents.length; + while (i--) { + parents[i].rootControl = rootControl; + } + + return rootControl; + }, + + /** + * Reflows the current control and it's parents. + * This should be used after you for example append children to the current control so + * that the layout managers know that they need to reposition everything. + * + * @example + * container.append({type: 'button', text: 'My button'}).reflow(); + * + * @method reflow + * @return {tinymce.ui.Control} Current control instance. + */ + reflow: function() { + this.repaint(); + + return this; + } + + /** + * Sets/gets the parent container for the control. + * + * @method parent + * @param {tinymce.ui.Container} parent Optional parent to set. + * @return {tinymce.ui.Control} Parent control or the current control on a set action. + */ + // parent: function(parent) {} -- Generated + + /** + * Sets/gets the text for the control. + * + * @method text + * @param {String} value Value to set to control. + * @return {String/tinymce.ui.Control} Current control on a set operation or current value on a get. + */ + // text: function(value) {} -- Generated + + /** + * Sets/gets the width for the control. + * + * @method width + * @param {Number} value Value to set to control. + * @return {Number/tinymce.ui.Control} Current control on a set operation or current value on a get. + */ + // width: function(value) {} -- Generated + + /** + * Sets/gets the height for the control. + * + * @method height + * @param {Number} value Value to set to control. + * @return {Number/tinymce.ui.Control} Current control on a set operation or current value on a get. + */ + // height: function(value) {} -- Generated + + /** + * Sets/gets the disabled state on the control. + * + * @method disabled + * @param {Boolean} state Value to set to control. + * @return {Boolean/tinymce.ui.Control} Current control on a set operation or current state on a get. + */ + // disabled: function(state) {} -- Generated + + /** + * Sets/gets the active for the control. + * + * @method active + * @param {Boolean} state Value to set to control. + * @return {Boolean/tinymce.ui.Control} Current control on a set operation or current state on a get. + */ + // active: function(state) {} -- Generated + + /** + * Sets/gets the name for the control. + * + * @method name + * @param {String} value Value to set to control. + * @return {String/tinymce.ui.Control} Current control on a set operation or current value on a get. + */ + // name: function(value) {} -- Generated + + /** + * Sets/gets the title for the control. + * + * @method title + * @param {String} value Value to set to control. + * @return {String/tinymce.ui.Control} Current control on a set operation or current value on a get. + */ + // title: function(value) {} -- Generated + }); + + return Control; +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/DomUtils.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/DomUtils.js new file mode 100755 index 0000000000..cbe3d40de9 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/DomUtils.js @@ -0,0 +1,95 @@ +/** + * DOMUtils.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +define("tinymce/ui/DomUtils", [ + "tinymce/util/Tools", + "tinymce/dom/DOMUtils" +], function(Tools, DOMUtils) { + "use strict"; + + return { + id: function() { + return DOMUtils.DOM.uniqueId(); + }, + + createFragment: function(html) { + return DOMUtils.DOM.createFragment(html); + }, + + getWindowSize: function() { + return DOMUtils.DOM.getViewPort(); + }, + + getSize: function(elm) { + var width, height; + + if (elm.getBoundingClientRect) { + var rect = elm.getBoundingClientRect(); + + width = Math.max(rect.width || (rect.right - rect.left), elm.offsetWidth); + height = Math.max(rect.height || (rect.bottom - rect.bottom), elm.offsetHeight); + } else { + width = elm.offsetWidth; + height = elm.offsetHeight; + } + + return {width: width, height: height}; + }, + + getPos: function(elm, root) { + return DOMUtils.DOM.getPos(elm, root); + }, + + getViewPort: function(win) { + return DOMUtils.DOM.getViewPort(win); + }, + + get: function(id) { + return document.getElementById(id); + }, + + addClass : function(elm, cls) { + return DOMUtils.DOM.addClass(elm, cls); + }, + + removeClass : function(elm, cls) { + return DOMUtils.DOM.removeClass(elm, cls); + }, + + hasClass : function(elm, cls) { + return DOMUtils.DOM.hasClass(elm, cls); + }, + + toggleClass: function(elm, cls, state) { + return DOMUtils.DOM.toggleClass(elm, cls, state); + }, + + css: function(elm, name, value) { + return DOMUtils.DOM.setStyle(elm, name, value); + }, + + on: function(target, name, callback, scope) { + return DOMUtils.DOM.bind(target, name, callback, scope); + }, + + off: function(target, name, callback) { + return DOMUtils.DOM.unbind(target, name, callback); + }, + + fire: function(target, name, args) { + return DOMUtils.DOM.fire(target, name, args); + }, + + innerHtml: function(elm, html) { + // Workaround for
    in

    bug on IE 8 #6178 + DOMUtils.DOM.setHTML(elm, html); + } + }; +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/DragHelper.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/DragHelper.js new file mode 100755 index 0000000000..c7c2850b26 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/DragHelper.js @@ -0,0 +1,136 @@ +/** + * DragHelper.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Drag/drop helper class. + * + * @example + * var dragHelper = new tinymce.ui.DragHelper('mydiv', { + * start: function(evt) { + * }, + * + * drag: function(evt) { + * }, + * + * end: function(evt) { + * } + * }); + * + * @class tinymce.ui.DragHelper + */ +define("tinymce/ui/DragHelper", [ + "tinymce/ui/DomUtils" +], function(DomUtils) { + "use strict"; + + function getDocumentSize() { + var doc = document, documentElement, body, scrollWidth, clientWidth; + var offsetWidth, scrollHeight, clientHeight, offsetHeight, max = Math.max; + + documentElement = doc.documentElement; + body = doc.body; + + scrollWidth = max(documentElement.scrollWidth, body.scrollWidth); + clientWidth = max(documentElement.clientWidth, body.clientWidth); + offsetWidth = max(documentElement.offsetWidth, body.offsetWidth); + + scrollHeight = max(documentElement.scrollHeight, body.scrollHeight); + clientHeight = max(documentElement.clientHeight, body.clientHeight); + offsetHeight = max(documentElement.offsetHeight, body.offsetHeight); + + return { + width: scrollWidth < offsetWidth ? clientWidth : scrollWidth, + height: scrollHeight < offsetHeight ? clientHeight : scrollHeight + }; + } + + return function(id, settings) { + var eventOverlayElm, doc = document, downButton, start, stop, drag, startX, startY; + + settings = settings || {}; + + function getHandleElm() { + return doc.getElementById(settings.handle || id); + } + + start = function(e) { + var docSize = getDocumentSize(), handleElm, cursor; + + e.preventDefault(); + downButton = e.button; + handleElm = getHandleElm(); + startX = e.screenX; + startY = e.screenY; + + // Grab cursor from handle + if (window.getComputedStyle) { + cursor = window.getComputedStyle(handleElm, null).getPropertyValue("cursor"); + } else { + cursor = handleElm.runtimeStyle.cursor; + } + + // Create event overlay and add it to document + eventOverlayElm = doc.createElement('div'); + DomUtils.css(eventOverlayElm, { + position: "absolute", + top: 0, left: 0, + width: docSize.width, + height: docSize.height, + zIndex: 0x7FFFFFFF, + opacity: 0.0001, + background: 'red', + cursor: cursor + }); + + doc.body.appendChild(eventOverlayElm); + + // Bind mouse events + DomUtils.on(doc, 'mousemove', drag); + DomUtils.on(doc, 'mouseup', stop); + + // Begin drag + settings.start(e); + }; + + drag = function(e) { + if (e.button !== downButton) { + return stop(e); + } + + e.deltaX = e.screenX - startX; + e.deltaY = e.screenY - startY; + + e.preventDefault(); + settings.drag(e); + }; + + stop = function(e) { + DomUtils.off(doc, 'mousemove', drag); + DomUtils.off(doc, 'mouseup', stop); + + eventOverlayElm.parentNode.removeChild(eventOverlayElm); + + if (settings.stop) { + settings.stop(e); + } + }; + + /** + * Destroys the drag/drop helper instance. + * + * @method destroy + */ + this.destroy = function() { + DomUtils.off(getHandleElm()); + }; + + DomUtils.on(getHandleElm(), 'mousedown', start); + }; +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/ElementPath.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/ElementPath.js new file mode 100755 index 0000000000..5b9d7fbcec --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/ElementPath.js @@ -0,0 +1,83 @@ +/** + * ElementPath.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This control creates an path for the current selections parent elements in TinyMCE. + * + * @class tinymce.ui.ElementPath + * @extends tinymce.ui.Path + */ +define("tinymce/ui/ElementPath", [ + "tinymce/ui/Path", + "tinymce/EditorManager" +], function(Path, EditorManager) { + return Path.extend({ + /** + * Post render method. Called after the control has been rendered to the target. + * + * @method postRender + * @return {tinymce.ui.ElementPath} Current combobox instance. + */ + postRender: function() { + var self = this, editor = EditorManager.activeEditor; + + function isHidden(elm) { + if (elm.nodeType === 1) { + if (elm.nodeName == "BR" || !!elm.getAttribute('data-mce-bogus')) { + return true; + } + + if (elm.getAttribute('data-mce-type') === 'bookmark') { + return true; + } + } + + return false; + } + + self.on('select', function(e) { + var parents = [], node, body = editor.getBody(); + + editor.focus(); + + node = editor.selection.getStart(); + while (node && node != body) { + if (!isHidden(node)) { + parents.push(node); + } + + node = node.parentNode; + } + + editor.selection.select(parents[parents.length - 1 - e.index]); + editor.nodeChanged(); + }); + + editor.on('nodeChange', function(e) { + var parents = [], selectionParents = e.parents, i = selectionParents.length; + + while (i--) { + if (selectionParents[i].nodeType == 1 && !isHidden(selectionParents[i])) { + var args = editor.fire('ResolveName', { + name: selectionParents[i].nodeName.toLowerCase(), + target: selectionParents[i] + }); + + parents.push({name: args.name}); + } + } + + self.data(parents); + }); + + return self._super(); + } + }); +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Factory.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Factory.js new file mode 100755 index 0000000000..6e4fc1c513 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Factory.js @@ -0,0 +1,105 @@ +/** + * Factory.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*global tinymce:true */ + +/** + * This class is a factory for control instances. This enables you + * to create instances of controls without having to require the UI controls directly. + * + * It also allow you to override or add new control types. + * + * @class tinymce.ui.Factory + */ +define("tinymce/ui/Factory", [], function() { + "use strict"; + + var types = {}, namespaceInit; + + return { + /** + * Adds a new control instance type to the factory. + * + * @method add + * @param {String} type Type name for example "button". + * @param {function} typeClass Class type function. + */ + add: function(type, typeClass) { + types[type.toLowerCase()] = typeClass; + }, + + /** + * Returns true/false if the specified type exists or not. + * + * @method has + * @param {String} type Type to look for. + * @return {Boolean} true/false if the control by name exists. + */ + has: function(type) { + return !!types[type.toLowerCase()]; + }, + + /** + * Creates a new control instance based on the settings provided. The instance created will be + * based on the specified type property it can also create whole structures of components out of + * the specified JSON object. + * + * @example + * tinymce.ui.Factory.create({ + * type: 'button', + * text: 'Hello world!' + * }); + * + * @method create + * @param {Object/String} settings Name/Value object with items used to create the type. + * @return {tinymce.ui.Control} Control instance based on the specified type. + */ + create: function(type, settings) { + var ControlType, name, namespace; + + // Build type lookup + if (!namespaceInit) { + namespace = tinymce.ui; + + for (name in namespace) { + types[name.toLowerCase()] = namespace[name]; + } + + namespaceInit = true; + } + + // If string is specified then use it as the type + if (typeof(type) == 'string') { + settings = settings || {}; + settings.type = type; + } else { + settings = type; + type = settings.type; + } + + // Find control type + type = type.toLowerCase(); + ControlType = types[type]; + + // #if debug + + if (!ControlType) { + throw new Error("Could not find control by type: " + type); + } + + // #endif + + ControlType = new ControlType(settings); + ControlType.type = type; // Set the type on the instance, this will be used by the Selector engine + + return ControlType; + } + }; +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/FieldSet.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/FieldSet.js new file mode 100755 index 0000000000..4142890cb0 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/FieldSet.js @@ -0,0 +1,59 @@ +/** + * FieldSet.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class creates fieldset containers. + * + * @-x-less FieldSet.less + * @class tinymce.ui.FieldSet + * @extends tinymce.ui.Form + */ +define("tinymce/ui/FieldSet", [ + "tinymce/ui/Form" +], function(Form) { + "use strict"; + + return Form.extend({ + Defaults: { + containerCls: 'fieldset', + layout: 'flex', + direction: 'column', + align: 'stretch', + flex: 1, + padding: "25 15 5 15", + labelGap: 30, + spacing: 10, + border: 1 + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, layout = self._layout, prefix = self.classPrefix; + + self.preRender(); + layout.preRender(self); + + return ( + '

    ' + + (self.settings.title ? ('' + + self.settings.title + '') : '') + + '
    ' + + (self.settings.html || '') + layout.renderHtml(self) + + '
    ' + + '
    ' + ); + } + }); +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/FilePicker.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/FilePicker.js new file mode 100755 index 0000000000..b95bf603de --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/FilePicker.js @@ -0,0 +1,53 @@ +/** + * FilePicker.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*global tinymce:true */ + +/** + * This class creates a file picker control. + * + * @class tinymce.ui.FilePicker + * @extends tinymce.ui.ComboBox + */ +define("tinymce/ui/FilePicker", [ + "tinymce/ui/ComboBox" +], function(ComboBox) { + "use strict"; + + return ComboBox.extend({ + /** + * Constructs a new control instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + */ + init: function(settings) { + var self = this, editor = tinymce.activeEditor, fileBrowserCallback; + + settings.spellcheck = false; + + fileBrowserCallback = editor.settings.file_browser_callback; + if (fileBrowserCallback) { + settings.icon = 'browse'; + + settings.onaction = function() { + fileBrowserCallback( + self.getEl('inp').id, + self.getEl('inp').value, + settings.filetype, + window + ); + }; + } + + self._super(settings); + } + }); +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/FitLayout.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/FitLayout.js new file mode 100755 index 0000000000..6809204441 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/FitLayout.js @@ -0,0 +1,48 @@ +/** + * FitLayout.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This layout manager will resize the control to be the size of it's parent container. + * In other words width: 100% and height: 100%. + * + * @-x-less FitLayout.less + * @class tinymce.ui.FitLayout + * @extends tinymce.ui.AbsoluteLayout + */ +define("tinymce/ui/FitLayout", [ + "tinymce/ui/AbsoluteLayout" +], function(AbsoluteLayout) { + "use strict"; + + return AbsoluteLayout.extend({ + /** + * Recalculates the positions of the controls in the specified container. + * + * @method recalc + * @param {tinymce.ui.Container} container Container instance to recalc. + */ + recalc: function(container) { + var contLayoutRect = container.layoutRect(), paddingBox = container.paddingBox(); + + container.items().filter(':visible').each(function(ctrl) { + ctrl.layoutRect({ + x: paddingBox.left, + y: paddingBox.top, + w: contLayoutRect.innerW - paddingBox.right - paddingBox.left, + h: contLayoutRect.innerH - paddingBox.top - paddingBox.bottom + }); + + if (ctrl.recalc) { + ctrl.recalc(); + } + }); + } + }); +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/FlexLayout.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/FlexLayout.js new file mode 100755 index 0000000000..99761c8068 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/FlexLayout.js @@ -0,0 +1,246 @@ +/** + * FlexLayout.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This layout manager works similar to the CSS flex box. + * + * @setting {String} direction row|row-reverse|column|column-reverse + * @setting {Number} flex A positive-number to flex by. + * @setting {String} align start|end|center|stretch + * @setting {String} pack start|end|justify + * + * @class tinymce.ui.FlexLayout + * @extends tinymce.ui.AbsoluteLayout + */ +define("tinymce/ui/FlexLayout", [ + "tinymce/ui/AbsoluteLayout" +], function(AbsoluteLayout) { + "use strict"; + + return AbsoluteLayout.extend({ + /** + * Recalculates the positions of the controls in the specified container. + * + * @method recalc + * @param {tinymce.ui.Container} container Container instance to recalc. + */ + recalc: function(container) { + // A ton of variables, needs to be in the same scope for performance + var i, l, items, contLayoutRect, contPaddingBox, contSettings, align, pack, spacing, totalFlex, availableSpace, direction; + var ctrl, ctrlLayoutRect, ctrlSettings, flex, maxSizeItems = [], size, maxSize, ratio, rect, pos, maxAlignEndPos; + var sizeName, minSizeName, posName, maxSizeName, beforeName, innerSizeName, deltaSizeName, contentSizeName; + var alignAxisName, alignInnerSizeName, alignSizeName, alignMinSizeName, alignBeforeName, alignAfterName; + var alignDeltaSizeName, alignContentSizeName; + var max = Math.max, min = Math.min; + + // Get container items, properties and settings + items = container.items().filter(':visible'); + contLayoutRect = container.layoutRect(); + contPaddingBox = container._paddingBox; + contSettings = container.settings; + direction = container.isRtl() ? (contSettings.direction || 'row-reversed') : contSettings.direction; + align = contSettings.align; + pack = container.isRtl() ? (contSettings.pack || 'end') : contSettings.pack; + spacing = contSettings.spacing || 0; + + if (direction == "row-reversed" || direction == "column-reverse") { + items = items.set(items.toArray().reverse()); + direction = direction.split('-')[0]; + } + + // Setup axis variable name for row/column direction since the calculations is the same + if (direction == "column") { + posName = "y"; + sizeName = "h"; + minSizeName = "minH"; + maxSizeName = "maxH"; + innerSizeName = "innerH"; + beforeName = 'top'; + deltaSizeName = "deltaH"; + contentSizeName = "contentH"; + + alignBeforeName = "left"; + alignSizeName = "w"; + alignAxisName = "x"; + alignInnerSizeName = "innerW"; + alignMinSizeName = "minW"; + alignAfterName = "right"; + alignDeltaSizeName = "deltaW"; + alignContentSizeName = "contentW"; + } else { + posName = "x"; + sizeName = "w"; + minSizeName = "minW"; + maxSizeName = "maxW"; + innerSizeName = "innerW"; + beforeName = 'left'; + deltaSizeName = "deltaW"; + contentSizeName = "contentW"; + + alignBeforeName = "top"; + alignSizeName = "h"; + alignAxisName = "y"; + alignInnerSizeName = "innerH"; + alignMinSizeName = "minH"; + alignAfterName = "bottom"; + alignDeltaSizeName = "deltaH"; + alignContentSizeName = "contentH"; + } + + // Figure out total flex, availableSpace and collect any max size elements + availableSpace = contLayoutRect[innerSizeName] - contPaddingBox[beforeName] - contPaddingBox[beforeName]; + maxAlignEndPos = totalFlex = 0; + for (i = 0, l = items.length; i < l; i++) { + ctrl = items[i]; + ctrlLayoutRect = ctrl.layoutRect(); + ctrlSettings = ctrl.settings; + flex = ctrlSettings.flex; + availableSpace -= (i < l - 1 ? spacing : 0); + + if (flex > 0) { + totalFlex += flex; + + // Flexed item has a max size then we need to check if we will hit that size + if (ctrlLayoutRect[maxSizeName]) { + maxSizeItems.push(ctrl); + } + + ctrlLayoutRect.flex = flex; + } + + availableSpace -= ctrlLayoutRect[minSizeName]; + + // Calculate the align end position to be used to check for overflow/underflow + size = contPaddingBox[alignBeforeName] + ctrlLayoutRect[alignMinSizeName] + contPaddingBox[alignAfterName]; + if (size > maxAlignEndPos) { + maxAlignEndPos = size; + } + } + + // Calculate minW/minH + rect = {}; + if (availableSpace < 0) { + rect[minSizeName] = contLayoutRect[minSizeName] - availableSpace + contLayoutRect[deltaSizeName]; + } else { + rect[minSizeName] = contLayoutRect[innerSizeName] - availableSpace + contLayoutRect[deltaSizeName]; + } + + rect[alignMinSizeName] = maxAlignEndPos + contLayoutRect[alignDeltaSizeName]; + + rect[contentSizeName] = contLayoutRect[innerSizeName] - availableSpace; + rect[alignContentSizeName] = maxAlignEndPos; + rect.minW = min(rect.minW, contLayoutRect.maxW); + rect.minH = min(rect.minH, contLayoutRect.maxH); + rect.minW = max(rect.minW, contLayoutRect.startMinWidth); + rect.minH = max(rect.minH, contLayoutRect.startMinHeight); + + // Resize container container if minSize was changed + if (contLayoutRect.autoResize && (rect.minW != contLayoutRect.minW || rect.minH != contLayoutRect.minH)) { + rect.w = rect.minW; + rect.h = rect.minH; + + container.layoutRect(rect); + this.recalc(container); + + // Forced recalc for example if items are hidden/shown + if (container._lastRect === null) { + var parentCtrl = container.parent(); + if (parentCtrl) { + parentCtrl._lastRect = null; + parentCtrl.recalc(); + } + } + + return; + } + + // Handle max size elements, check if they will become to wide with current options + ratio = availableSpace / totalFlex; + for (i = 0, l = maxSizeItems.length; i < l; i++) { + ctrl = maxSizeItems[i]; + ctrlLayoutRect = ctrl.layoutRect(); + maxSize = ctrlLayoutRect[maxSizeName]; + size = ctrlLayoutRect[minSizeName] + ctrlLayoutRect.flex * ratio; + + if (size > maxSize) { + availableSpace -= (ctrlLayoutRect[maxSizeName] - ctrlLayoutRect[minSizeName]); + totalFlex -= ctrlLayoutRect.flex; + ctrlLayoutRect.flex = 0; + ctrlLayoutRect.maxFlexSize = maxSize; + } else { + ctrlLayoutRect.maxFlexSize = 0; + } + } + + // Setup new ratio, target layout rect, start position + ratio = availableSpace / totalFlex; + pos = contPaddingBox[beforeName]; + rect = {}; + + // Handle pack setting moves the start position to end, center + if (totalFlex === 0) { + if (pack == "end") { + pos = availableSpace + contPaddingBox[beforeName]; + } else if (pack == "center") { + pos = Math.round( + (contLayoutRect[innerSizeName] / 2) - ((contLayoutRect[innerSizeName] - availableSpace) / 2) + ) + contPaddingBox[beforeName]; + + if (pos < 0) { + pos = contPaddingBox[beforeName]; + } + } else if (pack == "justify") { + pos = contPaddingBox[beforeName]; + spacing = Math.floor(availableSpace / (items.length - 1)); + } + } + + // Default aligning (start) the other ones needs to be calculated while doing the layout + rect[alignAxisName] = contPaddingBox[alignBeforeName]; + + // Start laying out controls + for (i = 0, l = items.length; i < l; i++) { + ctrl = items[i]; + ctrlLayoutRect = ctrl.layoutRect(); + size = ctrlLayoutRect.maxFlexSize || ctrlLayoutRect[minSizeName]; + + // Align the control on the other axis + if (align === "center") { + rect[alignAxisName] = Math.round((contLayoutRect[alignInnerSizeName] / 2) - (ctrlLayoutRect[alignSizeName] / 2)); + } else if (align === "stretch") { + rect[alignSizeName] = max( + ctrlLayoutRect[alignMinSizeName] || 0, + contLayoutRect[alignInnerSizeName] - contPaddingBox[alignBeforeName] - contPaddingBox[alignAfterName] + ); + rect[alignAxisName] = contPaddingBox[alignBeforeName]; + } else if (align === "end") { + rect[alignAxisName] = contLayoutRect[alignInnerSizeName] - ctrlLayoutRect[alignSizeName] - contPaddingBox.top; + } + + // Calculate new size based on flex + if (ctrlLayoutRect.flex > 0) { + size += ctrlLayoutRect.flex * ratio; + } + + rect[sizeName] = size; + rect[posName] = pos; + ctrl.layoutRect(rect); + + // Recalculate containers + if (ctrl.recalc) { + ctrl.recalc(); + } + + // Move x/y position + pos += size + spacing; + } + } + }); +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/FloatPanel.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/FloatPanel.js new file mode 100755 index 0000000000..27457eee0e --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/FloatPanel.js @@ -0,0 +1,366 @@ +/** + * FloatPanel.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class creates a floating panel. + * + * @-x-less FloatPanel.less + * @class tinymce.ui.FloatPanel + * @extends tinymce.ui.Panel + * @mixes tinymce.ui.Movable + * @mixes tinymce.ui.Resizable + */ +define("tinymce/ui/FloatPanel", [ + "tinymce/ui/Panel", + "tinymce/ui/Movable", + "tinymce/ui/Resizable", + "tinymce/ui/DomUtils" +], function(Panel, Movable, Resizable, DomUtils) { + "use strict"; + + var documentClickHandler, documentScrollHandler, visiblePanels = []; + var zOrder = [], hasModal; + + var FloatPanel = Panel.extend({ + Mixins: [Movable, Resizable], + + /** + * Constructs a new control instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + * @setting {Boolean} autohide Automatically hide the panel. + */ + init: function(settings) { + var self = this; + + function reorder() { + var i, zIndex = FloatPanel.zIndex || 0xFFFF, topModal; + + if (zOrder.length) { + for (i = 0; i < zOrder.length; i++) { + if (zOrder[i].modal) { + zIndex++; + topModal = zOrder[i]; + } + + zOrder[i].getEl().style.zIndex = zIndex; + zOrder[i].zIndex = zIndex; + zIndex++; + } + } + + var modalBlockEl = document.getElementById(self.classPrefix + 'modal-block'); + + if (topModal) { + DomUtils.css(modalBlockEl, 'z-index', topModal.zIndex - 1); + } else if (modalBlockEl) { + modalBlockEl.parentNode.removeChild(modalBlockEl); + hasModal = false; + } + + FloatPanel.currentZIndex = zIndex; + } + + function isChildOf(ctrl, parent) { + while (ctrl) { + if (ctrl == parent) { + return true; + } + + ctrl = ctrl.parent(); + } + } + + /** + * Repositions the panel to the top of page if the panel is outside of the visual viewport. It will + * also reposition all child panels of the current panel. + */ + function repositionPanel(panel) { + var scrollY = DomUtils.getViewPort().y; + + function toggleFixedChildPanels(fixed, deltaY) { + var parent; + + for (var i = 0; i < visiblePanels.length; i++) { + if (visiblePanels[i] != panel) { + parent = visiblePanels[i].parent(); + + while (parent && (parent = parent.parent())) { + if (parent == panel) { + visiblePanels[i].fixed(fixed).moveBy(0, deltaY).repaint(); + } + } + } + } + } + + if (panel.settings.autofix) { + if (!panel._fixed) { + panel._autoFixY = panel.layoutRect().y; + + if (panel._autoFixY < scrollY) { + panel.fixed(true).layoutRect({y: 0}).repaint(); + toggleFixedChildPanels(true, scrollY - panel._autoFixY); + } + } else { + if (panel._autoFixY > scrollY) { + panel.fixed(false).layoutRect({y: panel._autoFixY}).repaint(); + toggleFixedChildPanels(false, panel._autoFixY - scrollY); + } + } + } + } + + self._super(settings); + self._eventsRoot = self; + + self.addClass('floatpanel'); + + // Hide floatpanes on click out side the root button + if (settings.autohide) { + if (!documentClickHandler) { + documentClickHandler = function(e) { + // Hide any float panel when a click is out side that float panel and the + // float panels direct parent for example a click on a menu button + var i = visiblePanels.length; + while (i--) { + var panel = visiblePanels[i], clickCtrl = panel.getParentCtrl(e.target); + + if (panel.settings.autohide) { + if (clickCtrl) { + if (isChildOf(clickCtrl, panel) || panel.parent() === clickCtrl) { + continue; + } + } + + e = panel.fire('autohide', {target: e.target}); + if (!e.isDefaultPrevented()) { + panel.hide(); + } + } + } + }; + + DomUtils.on(document, 'click', documentClickHandler); + } + + visiblePanels.push(self); + } + + if (settings.autofix) { + if (!documentScrollHandler) { + documentScrollHandler = function() { + var i; + + i = visiblePanels.length; + while (i--) { + repositionPanel(visiblePanels[i]); + } + }; + + DomUtils.on(window, 'scroll', documentScrollHandler); + } + + self.on('move', function() { + repositionPanel(this); + }); + } + + self.on('postrender show', function(e) { + if (e.control == self) { + var modalBlockEl, prefix = self.classPrefix; + + if (self.modal && !hasModal) { + modalBlockEl = DomUtils.createFragment('
    '); + modalBlockEl = modalBlockEl.firstChild; + + self.getContainerElm().appendChild(modalBlockEl); + + setTimeout(function() { + DomUtils.addClass(modalBlockEl, prefix + 'in'); + DomUtils.addClass(self.getEl(), prefix + 'in'); + }, 0); + + hasModal = true; + } + + zOrder.push(self); + reorder(); + } + }); + + self.on('close hide', function(e) { + if (e.control == self) { + var i = zOrder.length; + + while (i--) { + if (zOrder[i] === self) { + zOrder.splice(i, 1); + } + } + + reorder(); + } + }); + + self.on('show', function() { + self.parents().each(function(ctrl) { + if (ctrl._fixed) { + self.fixed(true); + return false; + } + }); + }); + + if (settings.popover) { + self._preBodyHtml = '
    '; + self.addClass('popover').addClass('bottom').addClass(self.isRtl() ? 'end' : 'start'); + } + }, + + fixed: function(state) { + var self = this; + + if (self._fixed != state) { + if (self._rendered) { + var viewport = DomUtils.getViewPort(); + + if (state) { + self.layoutRect().y -= viewport.y; + } else { + self.layoutRect().y += viewport.y; + } + } + + self.toggleClass('fixed', state); + self._fixed = state; + } + + return self; + }, + + /** + * Shows the current float panel. + * + * @method show + * @return {tinymce.ui.FloatPanel} Current floatpanel instance. + */ + show: function() { + var self = this, i, state = self._super(); + + i = visiblePanels.length; + while (i--) { + if (visiblePanels[i] === self) { + break; + } + } + + if (i === -1) { + visiblePanels.push(self); + } + + return state; + }, + + /** + * Hides the current float panel. + * + * @method hide + * @return {tinymce.ui.FloatPanel} Current floatpanel instance. + */ + hide: function() { + removeVisiblePanel(this); + return this._super(); + }, + + /** + * Hides all visible the float panels. + * + * @method hideAll + */ + hideAll: function() { + FloatPanel.hideAll(); + }, + + /** + * Closes the float panel. This will remove the float panel from page and fire the close event. + * + * @method close + */ + close: function() { + var self = this; + + self.fire('close'); + + return self.remove(); + }, + + /** + * Removes the float panel from page. + * + * @method remove + */ + remove: function() { + removeVisiblePanel(this); + this._super(); + }, + + postRender: function() { + var self = this; + + if (self.settings.bodyRole) { + this.getEl('body').setAttribute('role', self.settings.bodyRole); + } + + return self._super(); + } + }); + + /** + * Hides all visible the float panels. + * + * @static + * @method hideAll + */ + FloatPanel.hideAll = function() { + var i = visiblePanels.length; + + while (i--) { + var panel = visiblePanels[i]; + + if (panel && panel.settings.autohide) { + panel.hide(); + visiblePanels.splice(i, 1); + } + } + }; + + function removeVisiblePanel(panel) { + var i; + + i = visiblePanels.length; + while (i--) { + if (visiblePanels[i] === panel) { + visiblePanels.splice(i, 1); + } + } + + i = zOrder.length; + while (i--) { + if (zOrder[i] === panel) { + zOrder.splice(i, 1); + } + } + } + + return FloatPanel; +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/FlowLayout.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/FlowLayout.js new file mode 100755 index 0000000000..cc40c22b74 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/FlowLayout.js @@ -0,0 +1,42 @@ +/** + * FlowLayout.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This layout manager will place the controls by using the browsers native layout. + * + * @-x-less FlowLayout.less + * @class tinymce.ui.FlowLayout + * @extends tinymce.ui.Layout + */ +define("tinymce/ui/FlowLayout", [ + "tinymce/ui/Layout" +], function(Layout) { + return Layout.extend({ + Defaults: { + containerClass: 'flow-layout', + controlClass: 'flow-layout-item', + endClass : 'break' + }, + + /** + * Recalculates the positions of the controls in the specified container. + * + * @method recalc + * @param {tinymce.ui.Container} container Container instance to recalc. + */ + recalc: function(container) { + container.items().filter(':visible').each(function(ctrl) { + if (ctrl.recalc) { + ctrl.recalc(); + } + }); + } + }); +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Form.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Form.js new file mode 100755 index 0000000000..074ebc2832 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Form.js @@ -0,0 +1,154 @@ +/** + * Form.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class creates a form container. A form container has the ability + * to automatically wrap items in tinymce.ui.FormItem instances. + * + * Each FormItem instance is a container for the label and the item. + * + * @example + * tinymce.ui.Factory.create({ + * type: 'form', + * items: [ + * {type: 'textbox', label: 'My text box'} + * ] + * }).renderTo(document.body); + * + * @class tinymce.ui.Form + * @extends tinymce.ui.Container + */ +define("tinymce/ui/Form", [ + "tinymce/ui/Container", + "tinymce/ui/FormItem" +], function(Container, FormItem) { + "use strict"; + + return Container.extend({ + Defaults: { + containerCls: 'form', + layout: 'flex', + direction: 'column', + align: 'stretch', + flex: 1, + padding: 20, + labelGap: 30, + spacing: 10, + callbacks: { + submit: function() { + this.submit(); + } + } + }, + + /** + * This method gets invoked before the control is rendered. + * + * @method preRender + */ + preRender: function() { + var self = this, items = self.items(); + + // Wrap any labeled items in FormItems + items.each(function(ctrl) { + var formItem, label = ctrl.settings.label; + + if (label) { + formItem = new FormItem({ + layout: 'flex', + autoResize: "overflow", + defaults: {flex: 1}, + items: [ + {type: 'label', id: ctrl._id + '-l', text: label, flex: 0, forId: ctrl._id, disabled: ctrl.disabled()} + ] + }); + + formItem.type = 'formitem'; + ctrl.aria('labelledby', ctrl._id + '-l'); + + if (typeof(ctrl.settings.flex) == "undefined") { + ctrl.settings.flex = 1; + } + + self.replace(ctrl, formItem); + formItem.add(ctrl); + } + }); + }, + + /** + * Recalcs label widths. + * + * @private + */ + recalcLabels: function() { + var self = this, maxLabelWidth = 0, labels = [], i, labelGap; + + if (self.settings.labelGapCalc === false) { + return; + } + + self.items().filter('formitem').each(function(item) { + var labelCtrl = item.items()[0], labelWidth = labelCtrl.getEl().clientWidth; + + maxLabelWidth = labelWidth > maxLabelWidth ? labelWidth : maxLabelWidth; + labels.push(labelCtrl); + }); + + labelGap = self.settings.labelGap || 0; + + i = labels.length; + while (i--) { + labels[i].settings.minWidth = maxLabelWidth + labelGap; + } + }, + + /** + * Getter/setter for the visibility state. + * + * @method visible + * @param {Boolean} [state] True/false state to show/hide. + * @return {tinymce.ui.Form|Boolean} True/false state or current control. + */ + visible: function(state) { + var val = this._super(state); + + if (state === true && this._rendered) { + this.recalcLabels(); + } + + return val; + }, + + /** + * Fires a submit event with the serialized form. + * + * @method submit + * @return {Object} Event arguments object. + */ + submit: function() { + return this.fire('submit', {data: this.toJSON()}); + }, + + /** + * Post render method. Called after the control has been rendered to the target. + * + * @method postRender + * @return {tinymce.ui.ComboBox} Current combobox instance. + */ + postRender: function() { + var self = this; + + self._super(); + self.recalcLabels(); + self.fromJSON(self.settings.data); + } + }); +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/FormItem.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/FormItem.js new file mode 100755 index 0000000000..56408db8ac --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/FormItem.js @@ -0,0 +1,56 @@ +/** + * FormItem.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class is a container created by the form element with + * a label and control item. + * + * @class tinymce.ui.FormItem + * @extends tinymce.ui.Container + * @setting {String} label Label to display for the form item. + */ +define("tinymce/ui/FormItem", [ + "tinymce/ui/Container" +], function(Container) { + "use strict"; + + return Container.extend({ + Defaults: { + layout: 'flex', + align: 'center', + defaults: { + flex: 1 + } + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, layout = self._layout, prefix = self.classPrefix; + + self.addClass('formitem'); + layout.preRender(self); + + return ( + '
    ' + + (self.settings.title ? ('
    ' + + self.settings.title + '
    ') : '') + + '
    ' + + (self.settings.html || '') + layout.renderHtml(self) + + '
    ' + + '
    ' + ); + } + }); +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/FormatControls.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/FormatControls.js new file mode 100755 index 0000000000..cce53fbf15 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/FormatControls.js @@ -0,0 +1,652 @@ +/** + * FormatControls.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Internal class containing all TinyMCE specific control types such as + * format listboxes, fontlist boxes, toolbar buttons etc. + * + * @class tinymce.ui.FormatControls + */ +define("tinymce/ui/FormatControls", [ + "tinymce/ui/Control", + "tinymce/ui/Widget", + "tinymce/ui/FloatPanel", + "tinymce/util/Tools", + "tinymce/EditorManager", + "tinymce/Env" +], function(Control, Widget, FloatPanel, Tools, EditorManager, Env) { + var each = Tools.each; + + EditorManager.on('AddEditor', function(e) { + if (e.editor.rtl) { + Control.rtl = true; + } + + registerControls(e.editor); + }); + + Control.translate = function(text) { + return EditorManager.translate(text); + }; + + Widget.tooltips = !Env.iOS; + + function registerControls(editor) { + var formatMenu; + + // Generates a preview for a format + function getPreviewCss(format) { + var name, previewElm, dom = editor.dom; + var previewCss = '', parentFontSize, previewStyles; + + previewStyles = editor.settings.preview_styles; + + // No preview forced + if (previewStyles === false) { + return ''; + } + + // Default preview + if (!previewStyles) { + previewStyles = 'font-family font-size font-weight font-style text-decoration ' + + 'text-transform color background-color border border-radius outline text-shadow'; + } + + // Removes any variables since these can't be previewed + function removeVars(val) { + return val.replace(/%(\w+)/g, ''); + } + + // Create block/inline element to use for preview + format = editor.formatter.get(format); + if (!format) { + return; + } + + format = format[0]; + name = format.block || format.inline || 'span'; + previewElm = dom.create(name); + + // Add format styles to preview element + each(format.styles, function(value, name) { + value = removeVars(value); + + if (value) { + dom.setStyle(previewElm, name, value); + } + }); + + // Add attributes to preview element + each(format.attributes, function(value, name) { + value = removeVars(value); + + if (value) { + dom.setAttrib(previewElm, name, value); + } + }); + + // Add classes to preview element + each(format.classes, function(value) { + value = removeVars(value); + + if (!dom.hasClass(previewElm, value)) { + dom.addClass(previewElm, value); + } + }); + + editor.fire('PreviewFormats'); + + // Add the previewElm outside the visual area + dom.setStyles(previewElm, {position: 'absolute', left: -0xFFFF}); + editor.getBody().appendChild(previewElm); + + // Get parent container font size so we can compute px values out of em/% for older IE:s + parentFontSize = dom.getStyle(editor.getBody(), 'fontSize', true); + parentFontSize = /px$/.test(parentFontSize) ? parseInt(parentFontSize, 10) : 0; + + each(previewStyles.split(' '), function(name) { + var value = dom.getStyle(previewElm, name, true); + + // If background is transparent then check if the body has a background color we can use + if (name == 'background-color' && /transparent|rgba\s*\([^)]+,\s*0\)/.test(value)) { + value = dom.getStyle(editor.getBody(), name, true); + + // Ignore white since it's the default color, not the nicest fix + // TODO: Fix this by detecting runtime style + if (dom.toHex(value).toLowerCase() == '#ffffff') { + return; + } + } + + if (name == 'color') { + // Ignore black since it's the default color, not the nicest fix + // TODO: Fix this by detecting runtime style + if (dom.toHex(value).toLowerCase() == '#000000') { + return; + } + } + + // Old IE won't calculate the font size so we need to do that manually + if (name == 'font-size') { + if (/em|%$/.test(value)) { + if (parentFontSize === 0) { + return; + } + + // Convert font size from em/% to px + value = parseFloat(value, 10) / (/%$/.test(value) ? 100 : 1); + value = (value * parentFontSize) + 'px'; + } + } + + if (name == "border" && value) { + previewCss += 'padding:0 2px;'; + } + + previewCss += name + ':' + value + ';'; + }); + + editor.fire('AfterPreviewFormats'); + + //previewCss += 'line-height:normal'; + + dom.remove(previewElm); + + return previewCss; + } + + function createListBoxChangeHandler(items, formatName) { + return function() { + var self = this; + + editor.on('nodeChange', function(e) { + var formatter = editor.formatter; + var value = null; + + each(e.parents, function(node) { + each(items, function(item) { + if (formatName) { + if (formatter.matchNode(node, formatName, {value: item.value})) { + value = item.value; + } + } else { + if (formatter.matchNode(node, item.value)) { + value = item.value; + } + } + + if (value) { + return false; + } + }); + + if (value) { + return false; + } + }); + + self.value(value); + }); + }; + } + + function createFormats(formats) { + formats = formats.split(';'); + + var i = formats.length; + while (i--) { + formats[i] = formats[i].split('='); + } + + return formats; + } + + function createFormatMenu() { + var count = 0, newFormats = []; + + var defaultStyleFormats = [ + {title: 'Headers', items: [ + {title: 'Header 1', format: 'h1'}, + {title: 'Header 2', format: 'h2'}, + {title: 'Header 3', format: 'h3'}, + {title: 'Header 4', format: 'h4'}, + {title: 'Header 5', format: 'h5'}, + {title: 'Header 6', format: 'h6'} + ]}, + + {title: 'Inline', items: [ + {title: 'Bold', icon: 'bold', format: 'bold'}, + {title: 'Italic', icon: 'italic', format: 'italic'}, + {title: 'Underline', icon: 'underline', format: 'underline'}, + {title: 'Strikethrough', icon: 'strikethrough', format: 'strikethrough'}, + {title: 'Superscript', icon: 'superscript', format: 'superscript'}, + {title: 'Subscript', icon: 'subscript', format: 'subscript'}, + {title: 'Code', icon: 'code', format: 'code'} + ]}, + + {title: 'Blocks', items: [ + {title: 'Paragraph', format: 'p'}, + {title: 'Blockquote', format: 'blockquote'}, + {title: 'Div', format: 'div'}, + {title: 'Pre', format: 'pre'} + ]}, + + {title: 'Alignment', items: [ + {title: 'Left', icon: 'alignleft', format: 'alignleft'}, + {title: 'Center', icon: 'aligncenter', format: 'aligncenter'}, + {title: 'Right', icon: 'alignright', format: 'alignright'}, + {title: 'Justify', icon: 'alignjustify', format: 'alignjustify'} + ]} + ]; + + function createMenu(formats) { + var menu = []; + + if (!formats) { + return; + } + + each(formats, function(format) { + var menuItem = { + text: format.title, + icon: format.icon + }; + + if (format.items) { + menuItem.menu = createMenu(format.items); + } else { + var formatName = format.format || "custom" + count++; + + if (!format.format) { + format.name = formatName; + newFormats.push(format); + } + + menuItem.format = formatName; + } + + menu.push(menuItem); + }); + + return menu; + } + + function createStylesMenu() { + var menu; + + if (editor.settings.style_formats_merge) { + if (editor.settings.style_formats) { + menu = createMenu(defaultStyleFormats.concat(editor.settings.style_formats)); + } else { + menu = createMenu(defaultStyleFormats); + } + } else { + menu = createMenu(editor.settings.style_formats || defaultStyleFormats); + } + + return menu; + } + + editor.on('init', function() { + each(newFormats, function(format) { + editor.formatter.register(format.name, format); + }); + }); + + return { + type: 'menu', + items: createStylesMenu(), + onPostRender: function(e) { + editor.fire('renderFormatsMenu', {control: e.control}); + }, + itemDefaults: { + preview: true, + + textStyle: function() { + if (this.settings.format) { + return getPreviewCss(this.settings.format); + } + }, + + onPostRender: function() { + var self = this, formatName = this.settings.format; + + if (formatName) { + self.parent().on('show', function() { + self.disabled(!editor.formatter.canApply(formatName)); + self.active(editor.formatter.match(formatName)); + }); + } + }, + + onclick: function() { + if (this.settings.format) { + toggleFormat(this.settings.format); + } + } + } + }; + } + + formatMenu = createFormatMenu(); + + // Simple format controls : + each({ + bold: 'Bold', + italic: 'Italic', + underline: 'Underline', + strikethrough: 'Strikethrough', + subscript: 'Subscript', + superscript: 'Superscript' + }, function(text, name) { + editor.addButton(name, { + tooltip: text, + onPostRender: function() { + var self = this; + + // TODO: Fix this + if (editor.formatter) { + editor.formatter.formatChanged(name, function(state) { + self.active(state); + }); + } else { + editor.on('init', function() { + editor.formatter.formatChanged(name, function(state) { + self.active(state); + }); + }); + } + }, + onclick: function() { + toggleFormat(name); + } + }); + }); + + // Simple command controls :[,] + each({ + outdent: ['Decrease indent', 'Outdent'], + indent: ['Increase indent', 'Indent'], + cut: ['Cut', 'Cut'], + copy: ['Copy', 'Copy'], + paste: ['Paste', 'Paste'], + help: ['Help', 'mceHelp'], + selectall: ['Select all', 'SelectAll'], + hr: ['Insert horizontal rule', 'InsertHorizontalRule'], + removeformat: ['Clear formatting', 'RemoveFormat'], + visualaid: ['Visual aids', 'mceToggleVisualAid'], + newdocument: ['New document', 'mceNewDocument'] + }, function(item, name) { + editor.addButton(name, { + tooltip: item[0], + cmd: item[1] + }); + }); + + // Simple command controls with format state + each({ + blockquote: ['Blockquote', 'mceBlockQuote'], + numlist: ['Numbered list', 'InsertOrderedList'], + bullist: ['Bullet list', 'InsertUnorderedList'], + subscript: ['Subscript', 'Subscript'], + superscript: ['Superscript', 'Superscript'], + alignleft: ['Align left', 'JustifyLeft'], + aligncenter: ['Align center', 'JustifyCenter'], + alignright: ['Align right', 'JustifyRight'], + alignjustify: ['Justify', 'JustifyFull'] + }, function(item, name) { + editor.addButton(name, { + tooltip: item[0], + cmd: item[1], + onPostRender: function() { + var self = this; + + // TODO: Fix this + if (editor.formatter) { + editor.formatter.formatChanged(name, function(state) { + self.active(state); + }); + } else { + editor.on('init', function() { + editor.formatter.formatChanged(name, function(state) { + self.active(state); + }); + }); + } + } + }); + }); + + function hasUndo() { + return editor.undoManager ? editor.undoManager.hasUndo() : false; + } + + function hasRedo() { + return editor.undoManager ? editor.undoManager.hasRedo() : false; + } + + function toggleUndoState() { + var self = this; + + self.disabled(!hasUndo()); + editor.on('Undo Redo AddUndo TypingUndo', function() { + self.disabled(!hasUndo()); + }); + } + + function toggleRedoState() { + var self = this; + + self.disabled(!hasRedo()); + editor.on('Undo Redo AddUndo TypingUndo', function() { + self.disabled(!hasRedo()); + }); + } + + function toggleVisualAidState() { + var self = this; + + editor.on('VisualAid', function(e) { + self.active(e.hasVisual); + }); + + self.active(editor.hasVisual); + } + + editor.addButton('undo', { + tooltip: 'Undo', + onPostRender: toggleUndoState, + cmd: 'undo' + }); + + editor.addButton('redo', { + tooltip: 'Redo', + onPostRender: toggleRedoState, + cmd: 'redo' + }); + + editor.addMenuItem('newdocument', { + text: 'New document', + shortcut: 'Ctrl+N', + icon: 'newdocument', + cmd: 'mceNewDocument' + }); + + editor.addMenuItem('undo', { + text: 'Undo', + icon: 'undo', + shortcut: 'Ctrl+Z', + onPostRender: toggleUndoState, + cmd: 'undo' + }); + + editor.addMenuItem('redo', { + text: 'Redo', + icon: 'redo', + shortcut: 'Ctrl+Y', + onPostRender: toggleRedoState, + cmd: 'redo' + }); + + editor.addMenuItem('visualaid', { + text: 'Visual aids', + selectable: true, + onPostRender: toggleVisualAidState, + cmd: 'mceToggleVisualAid' + }); + + each({ + cut: ['Cut', 'Cut', 'Ctrl+X'], + copy: ['Copy', 'Copy', 'Ctrl+C'], + paste: ['Paste', 'Paste', 'Ctrl+V'], + selectall: ['Select all', 'SelectAll', 'Ctrl+A'], + bold: ['Bold', 'Bold', 'Ctrl+B'], + italic: ['Italic', 'Italic', 'Ctrl+I'], + underline: ['Underline', 'Underline'], + strikethrough: ['Strikethrough', 'Strikethrough'], + subscript: ['Subscript', 'Subscript'], + superscript: ['Superscript', 'Superscript'], + removeformat: ['Clear formatting', 'RemoveFormat'] + }, function(item, name) { + editor.addMenuItem(name, { + text: item[0], + icon: name, + shortcut: item[2], + cmd: item[1] + }); + }); + + editor.on('mousedown', function() { + FloatPanel.hideAll(); + }); + + function toggleFormat(fmt) { + if (fmt.control) { + fmt = fmt.control.value(); + } + + if (fmt) { + editor.execCommand('mceToggleFormat', false, fmt); + } + } + + editor.addButton('styleselect', { + type: 'menubutton', + text: 'Formats', + menu: formatMenu + }); + + editor.addButton('formatselect', function() { + var items = [], blocks = createFormats(editor.settings.block_formats || + 'Paragraph=p;' + + 'Address=address;' + + 'Pre=pre;' + + 'Header 1=h1;' + + 'Header 2=h2;' + + 'Header 3=h3;' + + 'Header 4=h4;' + + 'Header 5=h5;' + + 'Header 6=h6' + ); + + each(blocks, function(block) { + items.push({ + text: block[0], + value: block[1], + textStyle: function() { + return getPreviewCss(block[1]); + } + }); + }); + + return { + type: 'listbox', + text: blocks[0][0], + values: items, + fixedWidth: true, + onselect: toggleFormat, + onPostRender: createListBoxChangeHandler(items) + }; + }); + + editor.addButton('fontselect', function() { + var defaultFontsFormats = + 'Andale Mono=andale mono,times;' + + 'Arial=arial,helvetica,sans-serif;' + + 'Arial Black=arial black,avant garde;' + + 'Book Antiqua=book antiqua,palatino;' + + 'Comic Sans MS=comic sans ms,sans-serif;' + + 'Courier New=courier new,courier;' + + 'Georgia=georgia,palatino;' + + 'Helvetica=helvetica;' + + 'Impact=impact,chicago;' + + 'Symbol=symbol;' + + 'Tahoma=tahoma,arial,helvetica,sans-serif;' + + 'Terminal=terminal,monaco;' + + 'Times New Roman=times new roman,times;' + + 'Trebuchet MS=trebuchet ms,geneva;' + + 'Verdana=verdana,geneva;' + + 'Webdings=webdings;' + + 'Wingdings=wingdings,zapf dingbats'; + + var items = [], fonts = createFormats(editor.settings.font_formats || defaultFontsFormats); + + each(fonts, function(font) { + items.push({ + text: {raw: font[0]}, + value: font[1], + textStyle: font[1].indexOf('dings') == -1 ? 'font-family:' + font[1] : '' + }); + }); + + return { + type: 'listbox', + text: 'Font Family', + tooltip: 'Font Family', + values: items, + fixedWidth: true, + onPostRender: createListBoxChangeHandler(items, 'fontname'), + onselect: function(e) { + if (e.control.settings.value) { + editor.execCommand('FontName', false, e.control.settings.value); + } + } + }; + }); + + editor.addButton('fontsizeselect', function() { + var items = [], defaultFontsizeFormats = '8pt 10pt 12pt 14pt 18pt 24pt 36pt'; + var fontsize_formats = editor.settings.fontsize_formats || defaultFontsizeFormats; + + each(fontsize_formats.split(' '), function(item) { + items.push({text: item, value: item}); + }); + + return { + type: 'listbox', + text: 'Font Sizes', + tooltip: 'Font Sizes', + values: items, + fixedWidth: true, + onPostRender: createListBoxChangeHandler(items, 'fontsize'), + onclick: function(e) { + if (e.control.settings.value) { + editor.execCommand('FontSize', false, e.control.settings.value); + } + } + }; + }); + + editor.addMenuItem('formats', { + text: 'Formats', + menu: formatMenu + }); + } +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/GridLayout.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/GridLayout.js new file mode 100755 index 0000000000..b428971227 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/GridLayout.js @@ -0,0 +1,226 @@ +/** + * GridLayout.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This layout manager places controls in a grid. + * + * @setting {Number} spacing Spacing between controls. + * @setting {Number} spacingH Horizontal spacing between controls. + * @setting {Number} spacingV Vertical spacing between controls. + * @setting {Number} columns Number of columns to use. + * @setting {String/Array} alignH start|end|center|stretch or array of values for each column. + * @setting {String/Array} alignV start|end|center|stretch or array of values for each column. + * @setting {String} pack start|end + * + * @class tinymce.ui.GridLayout + * @extends tinymce.ui.AbsoluteLayout + */ +define("tinymce/ui/GridLayout", [ + "tinymce/ui/AbsoluteLayout" +], function(AbsoluteLayout) { + "use strict"; + + return AbsoluteLayout.extend({ + /** + * Recalculates the positions of the controls in the specified container. + * + * @method recalc + * @param {tinymce.ui.Container} container Container instance to recalc. + */ + recalc: function(container) { + var settings = container.settings, rows, cols, items, contLayoutRect, width, height, rect, + ctrlLayoutRect, ctrl, x, y, posX, posY, ctrlSettings, contPaddingBox, align, spacingH, spacingV, alignH, alignV, maxX, maxY, + colWidths = [], rowHeights = [], ctrlMinWidth, ctrlMinHeight, availableWidth, availableHeight; + + // Get layout settings + settings = container.settings; + items = container.items().filter(':visible'); + contLayoutRect = container.layoutRect(); + cols = settings.columns || Math.ceil(Math.sqrt(items.length)); + rows = Math.ceil(items.length / cols); + spacingH = settings.spacingH || settings.spacing || 0; + spacingV = settings.spacingV || settings.spacing || 0; + alignH = settings.alignH || settings.align; + alignV = settings.alignV || settings.align; + contPaddingBox = container._paddingBox; + + if (alignH && typeof(alignH) == "string") { + alignH = [alignH]; + } + + if (alignV && typeof(alignV) == "string") { + alignV = [alignV]; + } + + // Zero padd columnWidths + for (x = 0; x < cols; x++) { + colWidths.push(0); + } + + // Zero padd rowHeights + for (y = 0; y < rows; y++) { + rowHeights.push(0); + } + + // Calculate columnWidths and rowHeights + for (y = 0; y < rows; y++) { + for (x = 0; x < cols; x++) { + ctrl = items[y * cols + x]; + + // Out of bounds + if (!ctrl) { + break; + } + + ctrlLayoutRect = ctrl.layoutRect(); + ctrlMinWidth = ctrlLayoutRect.minW; + ctrlMinHeight = ctrlLayoutRect.minH; + + colWidths[x] = ctrlMinWidth > colWidths[x] ? ctrlMinWidth : colWidths[x]; + rowHeights[y] = ctrlMinHeight > rowHeights[y] ? ctrlMinHeight : rowHeights[y]; + } + } + + // Calculate maxX + availableWidth = contLayoutRect.innerW - contPaddingBox.left - contPaddingBox.right; + for (maxX = 0, x = 0; x < cols; x++) { + maxX += colWidths[x] + (x > 0 ? spacingH : 0); + availableWidth -= (x > 0 ? spacingH : 0) + colWidths[x]; + } + + // Calculate maxY + availableHeight = contLayoutRect.innerH - contPaddingBox.top - contPaddingBox.bottom; + for (maxY = 0, y = 0; y < rows; y++) { + maxY += rowHeights[y] + (y > 0 ? spacingV : 0); + availableHeight -= (y > 0 ? spacingV : 0) + rowHeights[y]; + } + + maxX += contPaddingBox.left + contPaddingBox.right; + maxY += contPaddingBox.top + contPaddingBox.bottom; + + // Calculate minW/minH + rect = {}; + rect.minW = maxX + (contLayoutRect.w - contLayoutRect.innerW); + rect.minH = maxY + (contLayoutRect.h - contLayoutRect.innerH); + + rect.contentW = rect.minW - contLayoutRect.deltaW; + rect.contentH = rect.minH - contLayoutRect.deltaH; + rect.minW = Math.min(rect.minW, contLayoutRect.maxW); + rect.minH = Math.min(rect.minH, contLayoutRect.maxH); + rect.minW = Math.max(rect.minW, contLayoutRect.startMinWidth); + rect.minH = Math.max(rect.minH, contLayoutRect.startMinHeight); + + // Resize container container if minSize was changed + if (contLayoutRect.autoResize && (rect.minW != contLayoutRect.minW || rect.minH != contLayoutRect.minH)) { + rect.w = rect.minW; + rect.h = rect.minH; + + container.layoutRect(rect); + this.recalc(container); + + // Forced recalc for example if items are hidden/shown + if (container._lastRect === null) { + var parentCtrl = container.parent(); + if (parentCtrl) { + parentCtrl._lastRect = null; + parentCtrl.recalc(); + } + } + + return; + } + + // Update contentW/contentH so absEnd moves correctly + if (contLayoutRect.autoResize) { + rect = container.layoutRect(rect); + rect.contentW = rect.minW - contLayoutRect.deltaW; + rect.contentH = rect.minH - contLayoutRect.deltaH; + } + + var flexV; + + if (settings.packV == 'start') { + flexV = 0; + } else { + flexV = availableHeight > 0 ? Math.floor(availableHeight / rows) : 0; + } + + // Calculate totalFlex + var totalFlex = 0; + var flexWidths = settings.flexWidths; + if (flexWidths) { + for (x = 0; x < flexWidths.length; x++) { + totalFlex += flexWidths[x]; + } + } else { + totalFlex = cols; + } + + // Calculate new column widths based on flex values + var ratio = availableWidth / totalFlex; + for (x = 0; x < cols; x++) { + colWidths[x] += flexWidths ? flexWidths[x] * ratio : ratio; + } + + // Move/resize controls + posY = contPaddingBox.top; + for (y = 0; y < rows; y++) { + posX = contPaddingBox.left; + height = rowHeights[y] + flexV; + + for (x = 0; x < cols; x++) { + ctrl = items[y * cols + x]; + + // No more controls to render then break + if (!ctrl) { + break; + } + + // Get control settings and calculate x, y + ctrlSettings = ctrl.settings; + ctrlLayoutRect = ctrl.layoutRect(); + width = Math.max(colWidths[x], ctrlLayoutRect.startMinWidth); + ctrlLayoutRect.x = posX; + ctrlLayoutRect.y = posY; + + // Align control horizontal + align = ctrlSettings.alignH || (alignH ? (alignH[x] || alignH[0]) : null); + if (align == "center") { + ctrlLayoutRect.x = posX + (width / 2) - (ctrlLayoutRect.w / 2); + } else if (align == "right") { + ctrlLayoutRect.x = posX + width - ctrlLayoutRect.w; + } else if (align == "stretch") { + ctrlLayoutRect.w = width; + } + + // Align control vertical + align = ctrlSettings.alignV || (alignV ? (alignV[x] || alignV[0]) : null); + if (align == "center") { + ctrlLayoutRect.y = posY + (height / 2) - (ctrlLayoutRect.h / 2); + } else if (align == "bottom") { + ctrlLayoutRect.y = posY + height - ctrlLayoutRect.h; + } else if (align == "stretch") { + ctrlLayoutRect.h = height; + } + + ctrl.layoutRect(ctrlLayoutRect); + + posX += width + spacingH; + + if (ctrl.recalc) { + ctrl.recalc(); + } + } + + posY += height + spacingV; + } + } + }); +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Iframe.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Iframe.js new file mode 100755 index 0000000000..93ad3a29a0 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Iframe.js @@ -0,0 +1,83 @@ +/** + * Iframe.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*jshint scripturl:true */ + +/** + * This class creates an iframe. + * + * @setting {String} url Url to open in the iframe. + * + * @-x-less Iframe.less + * @class tinymce.ui.Iframe + * @extends tinymce.ui.Widget + */ +define("tinymce/ui/Iframe", [ + "tinymce/ui/Widget" +], function(Widget) { + "use strict"; + + return Widget.extend({ + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this; + + self.addClass('iframe'); + self.canFocus = false; + + return ( + '' + ); + }, + + /** + * Setter for the iframe source. + * + * @method src + * @param {String} src Source URL for iframe. + */ + src: function(src) { + this.getEl().src = src; + }, + + /** + * Inner HTML for the iframe. + * + * @method html + * @param {String} html HTML string to set as HTML inside the iframe. + * @param {function} callback Optional callback to execute when the iframe body is filled with contents. + * @return {tinymce.ui.Iframe} Current iframe control. + */ + html: function(html, callback) { + var self = this, body = this.getEl().contentWindow.document.body; + + // Wait for iframe to initialize IE 10 takes time + if (!body) { + setTimeout(function() { + self.html(html); + }, 0); + } else { + body.innerHTML = html; + + if (callback) { + callback(); + } + } + + return this; + } + }); +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/KeyboardNavigation.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/KeyboardNavigation.js new file mode 100755 index 0000000000..61acb384e1 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/KeyboardNavigation.js @@ -0,0 +1,390 @@ +/** + * KeyboardNavigation.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class handles keyboard navigation of controls and elements. + * + * @class tinymce.ui.KeyboardNavigation + */ +define("tinymce/ui/KeyboardNavigation", [ +], function() { + "use strict"; + + /** + * This class handles all keyboard navigation for WAI-ARIA support. Each root container + * gets an instance of this class. + * + * @constructor + */ + return function(settings) { + var root = settings.root, focusedElement, focusedControl; + + focusedElement = document.activeElement; + focusedControl = root.getParentCtrl(focusedElement); + + /** + * Returns the currently focused elements wai aria role of the currently + * focused element or specified element. + * + * @private + * @param {Element} elm Optional element to get role from. + * @return {String} Role of specified element. + */ + function getRole(elm) { + elm = elm || focusedElement; + + return elm && elm.getAttribute('role'); + } + + /** + * Returns the wai role of the parent element of the currently + * focused element or specified element. + * + * @private + * @param {Element} elm Optional element to get parent role from. + * @return {String} Role of the first parent that has a role. + */ + function getParentRole(elm) { + var role, parent = elm || focusedElement; + + while ((parent = parent.parentNode)) { + if ((role = getRole(parent))) { + return role; + } + } + } + + /** + * Returns a wai aria property by name for example aria-selected. + * + * @private + * @param {String} name Name of the aria property to get for example "disabled". + * @return {String} Aria property value. + */ + function getAriaProp(name) { + var elm = focusedElement; + + if (elm) { + return elm.getAttribute('aria-' + name); + } + } + + /** + * Is the element a text input element or not. + * + * @private + * @param {Element} elm Element to check if it's an text input element or not. + * @return {Boolean} True/false if the element is a text element or not. + */ + function isTextInputElement(elm) { + // Notice: since type can be "email" etc we don't check the type + // So all input elements gets treated as text input elements + return elm.tagName == "INPUT" || elm.tagName == "TEXTAREA"; + } + + /** + * Returns true/false if the specified element can be focused or not. + * + * @private + * @param {Element} elm DOM element to check if it can be focused or not. + * @return {Boolean} True/false if the element can have focus. + */ + function canFocus(elm) { + if (isTextInputElement(elm) && !elm.hidden) { + return true; + } + + if (/^(button|menuitem|checkbox|tab|menuitemcheckbox|option|gridcell)$/.test(getRole(elm))) { + return true; + } + + return false; + } + + /** + * Returns an array of focusable visible elements within the specified container element. + * + * @private + * @param {Element} elm DOM element to find focusable elements within. + * @return {Array} Array of focusable elements. + */ + function getFocusElements(elm) { + var elements = []; + + function collect(elm) { + if (elm.nodeType != 1 || elm.style.display == 'none') { + return; + } + + if (canFocus(elm)) { + elements.push(elm); + } + + for (var i = 0; i < elm.childNodes.length; i++) { + collect(elm.childNodes[i]); + } + } + + collect(elm || root.getEl()); + + return elements; + } + + /** + * Returns the navigation root control for the specified control. The navigation root + * is the control that the keyboard navigation gets scoped to for example a menubar or toolbar group. + * It will look for parents of the specified target control or the currenty focused control if this option is omitted. + * + * @private + * @param {tinymce.ui.Control} targetControl Optional target control to find root of. + * @return {tinymce.ui.Control} Navigation root control. + */ + function getNavigationRoot(targetControl) { + var navigationRoot, controls; + + targetControl = targetControl || focusedControl; + controls = targetControl.parents().toArray(); + controls.unshift(targetControl); + + for (var i = 0; i < controls.length; i++) { + navigationRoot = controls[i]; + + if (navigationRoot.settings.ariaRoot) { + break; + } + } + + return navigationRoot; + } + + /** + * Focuses the first item in the specified targetControl element or the last aria index if the + * navigation root has the ariaRemember option enabled. + * + * @private + * @param {tinymce.ui.Control} targetControl Target control to focus the first item in. + */ + function focusFirst(targetControl) { + var navigationRoot = getNavigationRoot(targetControl); + var focusElements = getFocusElements(navigationRoot.getEl()); + + if (navigationRoot.settings.ariaRemember && "lastAriaIndex" in navigationRoot) { + moveFocusToIndex(navigationRoot.lastAriaIndex, focusElements); + } else { + moveFocusToIndex(0, focusElements); + } + } + + /** + * Moves the focus to the specified index within the elements list. + * This will scope the index to the size of the element list if it changed. + * + * @private + * @param {Number} idx Specified index to move to. + * @param {Array} elements Array with dom elements to move focus within. + * @return {Number} Input index or a changed index if it was out of range. + */ + function moveFocusToIndex(idx, elements) { + if (idx < 0) { + idx = elements.length - 1; + } else if (idx >= elements.length) { + idx = 0; + } + + if (elements[idx]) { + elements[idx].focus(); + } + + return idx; + } + + /** + * Moves the focus forwards or backwards. + * + * @private + * @param {Number} dir Direction to move in positive means forward, negative means backwards. + * @param {Array} elements Optional array of elements to move within defaults to the current navigation roots elements. + */ + function moveFocus(dir, elements) { + var idx = -1, navigationRoot = getNavigationRoot(); + + elements = elements || getFocusElements(navigationRoot.getEl()); + + for (var i = 0; i < elements.length; i++) { + if (elements[i] === focusedElement) { + idx = i; + } + } + + idx += dir; + navigationRoot.lastAriaIndex = moveFocusToIndex(idx, elements); + } + + /** + * Moves the focus to the left this is called by the left key. + * + * @private + */ + function left() { + var parentRole = getParentRole(); + + if (parentRole == "tablist") { + moveFocus(-1, getFocusElements(focusedElement.parentNode)); + } else if (focusedControl.parent().submenu) { + cancel(); + } else { + moveFocus(-1); + } + } + + /** + * Moves the focus to the right this is called by the right key. + * + * @private + */ + function right() { + var role = getRole(), parentRole = getParentRole(); + + if (parentRole == "tablist") { + moveFocus(1, getFocusElements(focusedElement.parentNode)); + } else if (role == "menuitem" && parentRole == "menu" && getAriaProp('haspopup')) { + enter(); + } else { + moveFocus(1); + } + } + + /** + * Moves the focus to the up this is called by the up key. + * + * @private + */ + function up() { + moveFocus(-1); + } + + /** + * Moves the focus to the up this is called by the down key. + * + * @private + */ + function down() { + var role = getRole(), parentRole = getParentRole(); + + if (role == "menuitem" && parentRole == "menubar") { + enter(); + } else if (role == "button" && getAriaProp('haspopup')) { + enter({key: 'down'}); + } else { + moveFocus(1); + } + } + + /** + * Moves the focus to the next item or previous item depending on shift key. + * + * @private + * @param {DOMEvent} e DOM event object. + */ + function tab(e) { + var parentRole = getParentRole(); + + if (parentRole == "tablist") { + var elm = getFocusElements(focusedControl.getEl('body'))[0]; + + if (elm) { + elm.focus(); + } + } else { + moveFocus(e.shiftKey ? -1 : 1); + } + } + + /** + * Calls the cancel event on the currently focused control. This is normally done using the Esc key. + * + * @private + */ + function cancel() { + focusedControl.fire('cancel'); + } + + /** + * Calls the click event on the currently focused control. This is normally done using the Enter/Space keys. + * + * @private + * @param {Object} aria Optional aria data to pass along with the enter event. + */ + function enter(aria) { + aria = aria || {}; + focusedControl.fire('click', {target: focusedElement, aria: aria}); + } + + root.on('keydown', function(e) { + function handleNonTabEvent(e, handler) { + // Ignore non tab keys for text elements + if (isTextInputElement(focusedElement)) { + return; + } + + if (handler(e) !== false) { + e.preventDefault(); + } + } + + if (e.isDefaultPrevented()) { + return; + } + + switch (e.keyCode) { + case 37: // DOM_VK_LEFT + handleNonTabEvent(e, left); + break; + + case 39: // DOM_VK_RIGHT + handleNonTabEvent(e, right); + break; + + case 38: // DOM_VK_UP + handleNonTabEvent(e, up); + break; + + case 40: // DOM_VK_DOWN + handleNonTabEvent(e, down); + break; + + case 27: // DOM_VK_ESCAPE + handleNonTabEvent(e, cancel); + break; + + case 14: // DOM_VK_ENTER + case 13: // DOM_VK_RETURN + case 32: // DOM_VK_SPACE + handleNonTabEvent(e, enter); + break; + + case 9: // DOM_VK_TAB + if (tab(e) !== false) { + e.preventDefault(); + } + break; + } + }); + + root.on('focusin', function(e) { + focusedElement = e.target; + focusedControl = e.control; + }); + + return { + focusFirst: focusFirst + }; + }; +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Label.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Label.js new file mode 100755 index 0000000000..1ecb81081b --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Label.js @@ -0,0 +1,125 @@ +/** + * Label.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class creates a label element. A label is a simple text control + * that can be bound to other controls. + * + * @-x-less Label.less + * @class tinymce.ui.Label + * @extends tinymce.ui.Widget + */ +define("tinymce/ui/Label", [ + "tinymce/ui/Widget", + "tinymce/ui/DomUtils" +], function(Widget, DomUtils) { + "use strict"; + + return Widget.extend({ + /** + * Constructs a instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + * @param {Boolean} multiline Multiline label. + */ + init: function(settings) { + var self = this; + + self._super(settings); + self.addClass('widget'); + self.addClass('label'); + self.canFocus = false; + + if (settings.multiline) { + self.addClass('autoscroll'); + } + + if (settings.strong) { + self.addClass('strong'); + } + }, + + /** + * Initializes the current controls layout rect. + * This will be executed by the layout managers to determine the + * default minWidth/minHeight etc. + * + * @method initLayoutRect + * @return {Object} Layout rect instance. + */ + initLayoutRect: function() { + var self = this, layoutRect = self._super(); + + if (self.settings.multiline) { + var size = DomUtils.getSize(self.getEl()); + + // Check if the text fits within maxW if not then try word wrapping it + if (size.width > layoutRect.maxW) { + layoutRect.minW = layoutRect.maxW; + self.addClass('multiline'); + } + + self.getEl().style.width = layoutRect.minW + 'px'; + layoutRect.startMinH = layoutRect.h = layoutRect.minH = Math.min(layoutRect.maxH, DomUtils.getSize(self.getEl()).height); + } + + return layoutRect; + }, + + /** + * Repaints the control after a layout operation. + * + * @method repaint + */ + repaint: function() { + var self = this; + + if (!self.settings.multiline) { + self.getEl().style.lineHeight = self.layoutRect().h + 'px'; + } + + return self._super(); + }, + + /** + * Sets/gets the current label text. + * + * @method text + * @param {String} [text] New label text. + * @return {String|tinymce.ui.Label} Current text or current label instance. + */ + text: function(text) { + var self = this; + + if (self._rendered && text) { + this.innerHtml(self.encode(text)); + } + + return self._super(text); + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, forId = self.settings.forId; + + return ( + '' + ); + } + }); +}); diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Layout.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Layout.js new file mode 100755 index 0000000000..7fd3f1d93b --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Layout.js @@ -0,0 +1,114 @@ +/** + * Layout.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Base layout manager class. + * + * @class tinymce.ui.Layout + */ +define("tinymce/ui/Layout", [ + "tinymce/util/Class", + "tinymce/util/Tools" +], function(Class, Tools) { + "use strict"; + + return Class.extend({ + Defaults: { + firstControlClass: 'first', + lastControlClass: 'last' + }, + + /** + * Constructs a layout instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + */ + init: function(settings) { + this.settings = Tools.extend({}, this.Defaults, settings); + }, + + /** + * This method gets invoked before the layout renders the controls. + * + * @method preRender + * @param {tinymce.ui.Container} container Container instance to preRender. + */ + preRender: function(container) { + container.addClass(this.settings.containerClass, 'body'); + }, + + /** + * Applies layout classes to the container. + * + * @private + */ + applyClasses: function(container) { + var self = this, settings = self.settings, items, firstClass, lastClass; + + items = container.items().filter(':visible'); + firstClass = settings.firstControlClass; + lastClass = settings.lastControlClass; + + items.each(function(item) { + item.removeClass(firstClass).removeClass(lastClass); + + if (settings.controlClass) { + item.addClass(settings.controlClass); + } + }); + + items.eq(0).addClass(firstClass); + items.eq(-1).addClass(lastClass); + }, + + /** + * Renders the specified container and any layout specific HTML. + * + * @method renderHtml + * @param {tinymce.ui.Container} container Container to render HTML for. + */ + renderHtml: function(container) { + var self = this, settings = self.settings, items, html = ''; + + items = container.items(); + items.eq(0).addClass(settings.firstControlClass); + items.eq(-1).addClass(settings.lastControlClass); + + items.each(function(item) { + if (settings.controlClass) { + item.addClass(settings.controlClass); + } + + html += item.renderHtml(); + }); + + return html; + }, + + /** + * Recalculates the positions of the controls in the specified container. + * + * @method recalc + * @param {tinymce.ui.Container} container Container instance to recalc. + */ + recalc: function() { + }, + + /** + * This method gets invoked after the layout renders the controls. + * + * @method postRender + * @param {tinymce.ui.Container} container Container instance to postRender. + */ + postRender: function() { + } + }); +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/ListBox.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/ListBox.js new file mode 100755 index 0000000000..d42fc9da3b --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/ListBox.js @@ -0,0 +1,125 @@ +/** + * ListBox.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a new list box control. + * + * @-x-less ListBox.less + * @class tinymce.ui.ListBox + * @extends tinymce.ui.MenuButton + */ +define("tinymce/ui/ListBox", [ + "tinymce/ui/MenuButton" +], function(MenuButton) { + "use strict"; + + return MenuButton.extend({ + /** + * Constructs a instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + * @setting {Array} values Array with values to add to list box. + */ + init: function(settings) { + var self = this, values, i, selected, selectedText, lastItemCtrl; + + self._values = values = settings.values; + if (values) { + for (i = 0; i < values.length; i++) { + selected = values[i].selected || settings.value === values[i].value; + + if (selected) { + selectedText = selectedText || values[i].text; + self._value = values[i].value; + break; + } + } + + // Default with first item + if (!selected && values.length > 0) { + selectedText = values[0].text; + self._value = values[0].value; + } + + settings.menu = values; + } + + settings.text = settings.text || selectedText || values[0].text; + + self._super(settings); + self.addClass('listbox'); + + self.on('select', function(e) { + var ctrl = e.control; + + if (lastItemCtrl) { + e.lastControl = lastItemCtrl; + } + + if (settings.multiple) { + ctrl.active(!ctrl.active()); + } else { + self.value(e.control.settings.value); + } + + lastItemCtrl = ctrl; + }); + }, + + /** + * Getter/setter function for the control value. + * + * @method value + * @param {String} [value] Value to be set. + * @return {Boolean/tinymce.ui.ListBox} Value or self if it's a set operation. + */ + value: function(value) { + var self = this, active, selectedText, menu, i; + + function activateByValue(menu, value) { + menu.items().each(function(ctrl) { + active = ctrl.value() === value; + + if (active) { + selectedText = selectedText || ctrl.text(); + } + + ctrl.active(active); + + if (ctrl.menu) { + activateByValue(ctrl.menu, value); + } + }); + } + + if (typeof(value) != "undefined") { + if (self.menu) { + activateByValue(self.menu, value); + } else { + menu = self.settings.menu; + for (i = 0; i < menu.length; i++) { + active = menu[i].value == value; + + if (active) { + selectedText = selectedText || menu[i].text; + } + + menu[i].active = active; + } + } + + self.text(selectedText || this.settings.text); + } + + return self._super(value); + } + }); +}); diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Menu.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Menu.js new file mode 100755 index 0000000000..5efdd3f7ae --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Menu.js @@ -0,0 +1,140 @@ +/** + * Menu.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a new menu. + * + * @-x-less Menu.less + * @class tinymce.ui.Menu + * @extends tinymce.ui.FloatPanel + */ +define("tinymce/ui/Menu", [ + "tinymce/ui/FloatPanel", + "tinymce/ui/MenuItem", + "tinymce/util/Tools" +], function(FloatPanel, MenuItem, Tools) { + "use strict"; + + var Menu = FloatPanel.extend({ + Defaults: { + defaultType: 'menuitem', + border: 1, + layout: 'stack', + role: 'application', + bodyRole: 'menu', + ariaRoot: true + }, + + /** + * Constructs a instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + */ + init: function(settings) { + var self = this; + + settings.autohide = true; + settings.constrainToViewport = true; + + if (settings.itemDefaults) { + var items = settings.items, i = items.length; + + while (i--) { + items[i] = Tools.extend({}, settings.itemDefaults, items[i]); + } + } + + self._super(settings); + self.addClass('menu'); + }, + + /** + * Repaints the control after a layout operation. + * + * @method repaint + */ + repaint: function() { + this.toggleClass('menu-align', true); + + this._super(); + + this.getEl().style.height = ''; + this.getEl('body').style.height = ''; + + return this; + }, + + /** + * Hides/closes the menu. + * + * @method cancel + */ + cancel: function() { + var self = this; + + self.hideAll(); + self.fire('select'); + }, + + /** + * Hide menu and all sub menus. + * + * @method hideAll + */ + hideAll: function() { + var self = this; + + this.find('menuitem').exec('hideMenu'); + + return self._super(); + }, +/* + getContainerElm: function() { + var doc = document, id = this.classPrefix + 'menucontainer'; + + var elm = doc.getElementById(id); + if (!elm) { + elm = doc.createElement('div'); + elm.id = id; + elm.setAttribute('role', 'application'); + elm.className = this.classPrefix + '-reset'; + elm.style.position = 'absolute'; + elm.style.top = elm.style.left = '0'; + elm.style.overflow = 'visible'; + doc.body.appendChild(elm); + } + + return elm; + }, +*/ + /** + * Invoked before the menu is rendered. + * + * @method preRender + */ + preRender: function() { + var self = this; + + self.items().each(function(ctrl) { + var settings = ctrl.settings; + + if (settings.icon || settings.selectable) { + self._hasIcons = true; + return false; + } + }); + + return self._super(); + } + }); + + return Menu; +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/MenuBar.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/MenuBar.js new file mode 100755 index 0000000000..385f30984c --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/MenuBar.js @@ -0,0 +1,33 @@ +/** + * MenuBar.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a new menubar. + * + * @-x-less MenuBar.less + * @class tinymce.ui.MenuBar + * @extends tinymce.ui.Container + */ +define("tinymce/ui/MenuBar", [ + "tinymce/ui/Toolbar" +], function(Toolbar) { + "use strict"; + + return Toolbar.extend({ + Defaults: { + role: 'menubar', + containerCls: 'menubar', + ariaRoot: true, + defaults: { + type: 'menubutton' + } + } + }); +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/MenuButton.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/MenuButton.js new file mode 100755 index 0000000000..385916e277 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/MenuButton.js @@ -0,0 +1,244 @@ +/** + * MenuButton.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a new menu button. + * + * @-x-less MenuButton.less + * @class tinymce.ui.MenuButton + * @extends tinymce.ui.Button + */ +define("tinymce/ui/MenuButton", [ + "tinymce/ui/Button", + "tinymce/ui/Factory", + "tinymce/ui/MenuBar" +], function(Button, Factory, MenuBar) { + "use strict"; + + // TODO: Maybe add as some global function + function isChildOf(node, parent) { + while (node) { + if (parent === node) { + return true; + } + + node = node.parentNode; + } + + return false; + } + + var MenuButton = Button.extend({ + /** + * Constructs a instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + */ + init: function(settings) { + var self = this; + + self._renderOpen = true; + self._super(settings); + + self.addClass('menubtn'); + + if (settings.fixedWidth) { + self.addClass('fixed-width'); + } + + self.aria('haspopup', true); + self.hasPopup = true; + }, + + /** + * Shows the menu for the button. + * + * @method showMenu + */ + showMenu: function() { + var self = this, settings = self.settings, menu; + + if (self.menu && self.menu.visible()) { + return self.hideMenu(); + } + + if (!self.menu) { + menu = settings.menu || []; + + // Is menu array then auto constuct menu control + if (menu.length) { + menu = { + type: 'menu', + items: menu + }; + } else { + menu.type = menu.type || 'menu'; + } + + self.menu = Factory.create(menu).parent(self).renderTo(); + self.fire('createmenu'); + self.menu.reflow(); + self.menu.on('cancel', function(e) { + if (e.control.parent() === self.menu) { + e.stopPropagation(); + self.focus(); + self.hideMenu(); + } + }); + + // Move focus to button when a menu item is selected/clicked + self.menu.on('select', function() { + self.focus(); + }); + + self.menu.on('show hide', function(e) { + if (e.control == self.menu) { + self.activeMenu(e.type == 'show'); + } + + self.aria('expanded', e.type == 'show'); + }).fire('show'); + } + + self.menu.show(); + self.menu.layoutRect({w: self.layoutRect().w}); + self.menu.moveRel(self.getEl(), self.isRtl() ? ['br-tr', 'tr-br'] : ['bl-tl', 'tl-bl']); + }, + + /** + * Hides the menu for the button. + * + * @method hideMenu + */ + hideMenu: function() { + var self = this; + + if (self.menu) { + self.menu.items().each(function(item) { + if (item.hideMenu) { + item.hideMenu(); + } + }); + + self.menu.hide(); + } + }, + + /** + * Sets the active menu state. + * + * @private + */ + activeMenu: function(state) { + this.toggleClass('active', state); + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, id = self._id, prefix = self.classPrefix; + var icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : ''; + + self.aria('role', self.parent() instanceof MenuBar ? 'menuitem' : 'button'); + + return ( + '
    ' + + '' + + '
    ' + ); + }, + + /** + * Gets invoked after the control has been rendered. + * + * @method postRender + */ + postRender: function() { + var self = this; + + self.on('click', function(e) { + if (e.control === self && isChildOf(e.target, self.getEl())) { + self.showMenu(); + + if (e.aria) { + self.menu.items()[0].focus(); + } + } + }); + + self.on('mouseenter', function(e) { + var overCtrl = e.control, parent = self.parent(), hasVisibleSiblingMenu; + + if (overCtrl && parent && overCtrl instanceof MenuButton && overCtrl.parent() == parent) { + parent.items().filter('MenuButton').each(function(ctrl) { + if (ctrl.hideMenu && ctrl != overCtrl) { + if (ctrl.menu && ctrl.menu.visible()) { + hasVisibleSiblingMenu = true; + } + + ctrl.hideMenu(); + } + }); + + if (hasVisibleSiblingMenu) { + overCtrl.focus(); // Fix for: #5887 + overCtrl.showMenu(); + } + } + }); + + return self._super(); + }, + + /** + * Sets/gets the current button text. + * + * @method text + * @param {String} [text] New button text. + * @return {String|tinymce.ui.MenuButton} Current text or current MenuButton instance. + */ + text: function(text) { + var self = this, i, children; + + if (self._rendered) { + children = self.getEl('open').getElementsByTagName('span'); + for (i = 0; i < children.length; i++) { + children[i].innerHTML = (self.settings.icon && text ? '\u00a0' : '') + self.encode(text); + } + } + + return this._super(text); + }, + + /** + * Removes the control and it's menus. + * + * @method remove + */ + remove: function() { + this._super(); + + if (this.menu) { + this.menu.remove(); + } + } + }); + + return MenuButton; +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/MenuItem.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/MenuItem.js new file mode 100755 index 0000000000..dac8af1a7e --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/MenuItem.js @@ -0,0 +1,292 @@ +/** + * MenuItem.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a new menu item. + * + * @-x-less MenuItem.less + * @class tinymce.ui.MenuItem + * @extends tinymce.ui.Control + */ +define("tinymce/ui/MenuItem", [ + "tinymce/ui/Widget", + "tinymce/ui/Factory", + "tinymce/Env" +], function(Widget, Factory, Env) { + "use strict"; + + return Widget.extend({ + Defaults: { + border: 0, + role: 'menuitem' + }, + + /** + * Constructs a instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + * @setting {Boolean} selectable Selectable menu. + * @setting {Array} menu Submenu array with items. + * @setting {String} shortcut Shortcut to display for menu item. Example: Ctrl+X + */ + init: function(settings) { + var self = this; + + self.hasPopup = true; + + self._super(settings); + + settings = self.settings; + + self.addClass('menu-item'); + + if (settings.menu) { + self.addClass('menu-item-expand'); + } + + if (settings.preview) { + self.addClass('menu-item-preview'); + } + + if (self._text === '-' || self._text === '|') { + self.addClass('menu-item-sep'); + self.aria('role', 'separator'); + self._text = '-'; + } + + if (settings.selectable) { + self.aria('role', 'menuitemcheckbox'); + self.addClass('menu-item-checkbox'); + settings.icon = 'selected'; + } + + if (!settings.preview && !settings.selectable) { + self.addClass('menu-item-normal'); + } + + self.on('mousedown', function(e) { + e.preventDefault(); + }); + + if (settings.menu) { + self.aria('haspopup', true); + } + }, + + /** + * Returns true/false if the menuitem has sub menu. + * + * @method hasMenus + * @return {Boolean} True/false state if it has submenu. + */ + hasMenus: function() { + return !!this.settings.menu; + }, + + /** + * Shows the menu for the menu item. + * + * @method showMenu + */ + showMenu: function() { + var self = this, settings = self.settings, menu, parent = self.parent(); + + parent.items().each(function(ctrl) { + if (ctrl !== self) { + ctrl.hideMenu(); + } + }); + + if (settings.menu) { + menu = self.menu; + + if (!menu) { + menu = settings.menu; + + // Is menu array then auto constuct menu control + if (menu.length) { + menu = { + type: 'menu', + items: menu + }; + } else { + menu.type = menu.type || 'menu'; + } + + if (parent.settings.itemDefaults) { + menu.itemDefaults = parent.settings.itemDefaults; + } + + menu = self.menu = Factory.create(menu).parent(self).renderTo(); + menu.reflow(); + menu.fire('show'); + menu.on('cancel', function(e) { + e.stopPropagation(); + self.focus(); + menu.hide(); + }); + + menu.on('hide', function(e) { + if (e.control === menu) { + self.removeClass('selected'); + } + }); + + menu.submenu = true; + } else { + menu.show(); + } + + menu._parentMenu = parent; + + menu.addClass('menu-sub'); + + var rel = menu.testMoveRel( + self.getEl(), + self.isRtl() ? ['tl-tr', 'bl-br', 'tr-tl', 'br-bl'] : ['tr-tl', 'br-bl', 'tl-tr', 'bl-br'] + ); + + menu.moveRel(self.getEl(), rel); + menu.rel = rel; + + rel = 'menu-sub-' + rel; + menu.removeClass(menu._lastRel); + menu.addClass(rel); + menu._lastRel = rel; + + self.addClass('selected'); + self.aria('expanded', true); + } + }, + + /** + * Hides the menu for the menu item. + * + * @method hideMenu + */ + hideMenu: function() { + var self = this; + + if (self.menu) { + self.menu.items().each(function(item) { + if (item.hideMenu) { + item.hideMenu(); + } + }); + + self.menu.hide(); + self.aria('expanded', false); + } + + return self; + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, id = self._id, settings = self.settings, prefix = self.classPrefix, text = self.encode(self._text); + var icon = self.settings.icon, image = '', shortcut = settings.shortcut; + + if (icon) { + self.parent().addClass('menu-has-icons'); + } + + if (settings.image) { + icon = 'none'; + image = ' style="background-image: url(\'' + settings.image + '\')"'; + } + + if (shortcut && Env.mac) { + // format shortcut for Mac + shortcut = shortcut.replace(/ctrl\+alt\+/i, '⌥⌘'); // ctrl+cmd + shortcut = shortcut.replace(/ctrl\+/i, '⌘'); // ctrl symbol + shortcut = shortcut.replace(/alt\+/i, '⌥'); // cmd symbol + shortcut = shortcut.replace(/shift\+/i, '⇧'); // shift symbol + } + + icon = prefix + 'ico ' + prefix + 'i-' + (self.settings.icon || 'none'); + + return ( + '
    ' + + (text !== '-' ? ' ' : '') + + (text !== '-' ? '' + text + '' : '') + + (shortcut ? '
    ' + shortcut + '
    ' : '') + + (settings.menu ? '
    ' : '') + + '
    ' + ); + }, + + /** + * Gets invoked after the control has been rendered. + * + * @method postRender + */ + postRender: function() { + var self = this, settings = self.settings; + + var textStyle = settings.textStyle; + if (typeof(textStyle) == "function") { + textStyle = textStyle.call(this); + } + + if (textStyle) { + var textElm = self.getEl('text'); + if (textElm) { + textElm.setAttribute('style', textStyle); + } + } + + self.on('mouseenter click', function(e) { + if (e.control === self) { + if (!settings.menu && e.type === 'click') { + self.fire('select'); + self.parent().hideAll(); + } else { + self.showMenu(); + + if (e.aria) { + self.menu.focus(true); + } + } + } + }); + + self._super(); + + return self; + }, + + active: function(state) { + if (typeof(state) != "undefined") { + this.aria('checked', state); + } + + return this._super(state); + }, + + /** + * Removes the control and it's menus. + * + * @method remove + */ + remove: function() { + this._super(); + + if (this.menu) { + this.menu.remove(); + } + } + }); +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/MessageBox.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/MessageBox.js new file mode 100755 index 0000000000..5da41817a0 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/MessageBox.js @@ -0,0 +1,205 @@ +/** + * MessageBox.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class is used to create MessageBoxes like alerts/confirms etc. + * + * @class tinymce.ui.Window + * @extends tinymce.ui.FloatPanel + */ +define("tinymce/ui/MessageBox", [ + "tinymce/ui/Window" +], function(Window) { + "use strict"; + + var MessageBox = Window.extend({ + /** + * Constructs a instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + */ + init: function(settings) { + settings = { + border: 1, + padding: 20, + layout: 'flex', + pack: "center", + align: "center", + containerCls: 'panel', + autoScroll: true, + buttons: {type: "button", text: "Ok", action: "ok"}, + items: { + type: "label", + multiline: true, + maxWidth: 500, + maxHeight: 200 + } + }; + + this._super(settings); + }, + + Statics: { + /** + * Ok buttons constant. + * + * @static + * @final + * @field {Number} OK + */ + OK: 1, + + /** + * Ok/cancel buttons constant. + * + * @static + * @final + * @field {Number} OK_CANCEL + */ + OK_CANCEL: 2, + + /** + * yes/no buttons constant. + * + * @static + * @final + * @field {Number} YES_NO + */ + YES_NO: 3, + + /** + * yes/no/cancel buttons constant. + * + * @static + * @final + * @field {Number} YES_NO_CANCEL + */ + YES_NO_CANCEL: 4, + + /** + * Constructs a new message box and renders it to the body element. + * + * @static + * @method msgBox + * @param {Object} settings Name/value object with settings. + */ + msgBox: function(settings) { + var buttons, callback = settings.callback || function() {}; + + switch (settings.buttons) { + case MessageBox.OK_CANCEL: + buttons = [ + {type: "button", text: "Ok", subtype: "primary", onClick: function(e) { + e.control.parents()[1].close(); + callback(true); + }}, + + {type: "button", text: "Cancel", onClick: function(e) { + e.control.parents()[1].close(); + callback(false); + }} + ]; + break; + + case MessageBox.YES_NO: + buttons = [ + {type: "button", text: "Ok", subtype: "primary", onClick: function(e) { + e.control.parents()[1].close(); + callback(true); + }} + ]; + break; + + case MessageBox.YES_NO_CANCEL: + buttons = [ + {type: "button", text: "Ok", subtype: "primary", onClick: function(e) { + e.control.parents()[1].close(); + }} + ]; + break; + + default: + buttons = [ + {type: "button", text: "Ok", subtype: "primary", onClick: function(e) { + e.control.parents()[1].close(); + callback(true); + }} + ]; + break; + } + + return new Window({ + padding: 20, + x: settings.x, + y: settings.y, + minWidth: 300, + minHeight: 100, + layout: "flex", + pack: "center", + align: "center", + buttons: buttons, + title: settings.title, + role: 'alertdialog', + items: { + type: "label", + multiline: true, + maxWidth: 500, + maxHeight: 200, + text: settings.text + }, + onPostRender: function() { + this.aria('describedby', this.items()[0]._id); + }, + onClose: settings.onClose, + onCancel: function() { + callback(false); + } + }).renderTo(document.body).reflow(); + }, + + /** + * Creates a new alert dialog. + * + * @method alert + * @param {Object} settings Settings for the alert dialog. + * @param {function} [callback] Callback to execute when the user makes a choice. + */ + alert: function(settings, callback) { + if (typeof(settings) == "string") { + settings = {text: settings}; + } + + settings.callback = callback; + return MessageBox.msgBox(settings); + }, + + /** + * Creates a new confirm dialog. + * + * @method confirm + * @param {Object} settings Settings for the confirm dialog. + * @param {function} [callback] Callback to execute when the user makes a choice. + */ + confirm: function(settings, callback) { + if (typeof(settings) == "string") { + settings = {text: settings}; + } + + settings.callback = callback; + settings.buttons = MessageBox.OK_CANCEL; + + return MessageBox.msgBox(settings); + } + } + }); + + return MessageBox; +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Movable.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Movable.js new file mode 100755 index 0000000000..8370354e2c --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Movable.js @@ -0,0 +1,200 @@ +/** + * Movable.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Movable mixin. Makes controls movable absolute and relative to other elements. + * + * @mixin tinymce.ui.Movable + */ +define("tinymce/ui/Movable", [ + "tinymce/ui/DomUtils" +], function(DomUtils) { + "use strict"; + + function calculateRelativePosition(ctrl, targetElm, rel) { + var ctrlElm, pos, x, y, selfW, selfH, targetW, targetH, viewport, size; + + viewport = DomUtils.getViewPort(); + + // Get pos of target + pos = DomUtils.getPos(targetElm); + x = pos.x; + y = pos.y; + + if (ctrl._fixed) { + x -= viewport.x; + y -= viewport.y; + } + + // Get size of self + ctrlElm = ctrl.getEl(); + size = DomUtils.getSize(ctrlElm); + selfW = size.width; + selfH = size.height; + + // Get size of target + size = DomUtils.getSize(targetElm); + targetW = size.width; + targetH = size.height; + + // Parse align string + rel = (rel || '').split(''); + + // Target corners + if (rel[0] === 'b') { + y += targetH; + } + + if (rel[1] === 'r') { + x += targetW; + } + + if (rel[0] === 'c') { + y += Math.round(targetH / 2); + } + + if (rel[1] === 'c') { + x += Math.round(targetW / 2); + } + + // Self corners + if (rel[3] === 'b') { + y -= selfH; + } + + if (rel[4] === 'r') { + x -= selfW; + } + + if (rel[3] === 'c') { + y -= Math.round(selfH / 2); + } + + if (rel[4] === 'c') { + x -= Math.round(selfW / 2); + } + + return { + x: x, + y: y, + w: selfW, + h: selfH + }; + } + + return { + /** + * Tests various positions to get the most suitable one. + * + * @method testMoveRel + * @param {DOMElement} elm Element to position against. + * @param {Array} rels Array with relative positions. + * @return {String} Best suitable relative position. + */ + testMoveRel: function(elm, rels) { + var viewPortRect = DomUtils.getViewPort(); + + for (var i = 0; i < rels.length; i++) { + var pos = calculateRelativePosition(this, elm, rels[i]); + + if (this._fixed) { + if (pos.x > 0 && pos.x + pos.w < viewPortRect.w && pos.y > 0 && pos.y + pos.h < viewPortRect.h) { + return rels[i]; + } + } else { + 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) { + return rels[i]; + } + } + } + + return rels[0]; + }, + + /** + * Move relative to the specified element. + * + * @method moveRel + * @param {Element} elm Element to move relative to. + * @param {String} rel Relative mode. For example: br-tl. + * @return {tinymce.ui.Control} Current control instance. + */ + moveRel: function(elm, rel) { + if (typeof(rel) != 'string') { + rel = this.testMoveRel(elm, rel); + } + + var pos = calculateRelativePosition(this, elm, rel); + return this.moveTo(pos.x, pos.y); + }, + + /** + * Move by a relative x, y values. + * + * @method moveBy + * @param {Number} dx Relative x position. + * @param {Number} dy Relative y position. + * @return {tinymce.ui.Control} Current control instance. + */ + moveBy: function(dx, dy) { + var self = this, rect = self.layoutRect(); + + self.moveTo(rect.x + dx, rect.y + dy); + + return self; + }, + + /** + * Move to absolute position. + * + * @method moveTo + * @param {Number} x Absolute x position. + * @param {Number} y Absolute y position. + * @return {tinymce.ui.Control} Current control instance. + */ + moveTo: function(x, y) { + var self = this; + + // TODO: Move this to some global class + function contrain(value, max, size) { + if (value < 0) { + return 0; + } + + if (value + size > max) { + value = max - size; + return value < 0 ? 0 : value; + } + + return value; + } + + if (self.settings.constrainToViewport) { + var viewPortRect = DomUtils.getViewPort(window); + var layoutRect = self.layoutRect(); + + x = contrain(x, viewPortRect.w + viewPortRect.x, layoutRect.w); + y = contrain(y, viewPortRect.h + viewPortRect.y, layoutRect.h); + } + + if (self._rendered) { + self.layoutRect({x: x, y: y}).repaint(); + } else { + self.settings.x = x; + self.settings.y = y; + } + + self.fire('move', {x: x, y: y}); + + return self; + } + }; +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Panel.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Panel.js new file mode 100755 index 0000000000..1420ecd0cc --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Panel.js @@ -0,0 +1,67 @@ +/** + * Panel.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a new panel. + * + * @-x-less Panel.less + * @class tinymce.ui.Panel + * @extends tinymce.ui.Container + * @mixes tinymce.ui.Scrollable + */ +define("tinymce/ui/Panel", [ + "tinymce/ui/Container", + "tinymce/ui/Scrollable" +], function(Container, Scrollable) { + "use strict"; + + return Container.extend({ + Defaults: { + layout: 'fit', + containerCls: 'panel' + }, + + Mixins: [Scrollable], + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, layout = self._layout, innerHtml = self.settings.html; + + self.preRender(); + layout.preRender(self); + + if (typeof(innerHtml) == "undefined") { + innerHtml = ( + '
    ' + + layout.renderHtml(self) + + '
    ' + ); + } else { + if (typeof(innerHtml) == 'function') { + innerHtml = innerHtml.call(self); + } + + self._hasBody = false; + } + + return ( + '
    ' + + (self._preBodyHtml || '') + + innerHtml + + '
    ' + ); + } + }); +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/PanelButton.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/PanelButton.js new file mode 100755 index 0000000000..9505d3398f --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/PanelButton.js @@ -0,0 +1,105 @@ +/** + * PanelButton.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a new panel button. + * + * @class tinymce.ui.PanelButton + * @extends tinymce.ui.Button + */ +define("tinymce/ui/PanelButton", [ + "tinymce/ui/Button", + "tinymce/ui/FloatPanel" +], function(Button, FloatPanel) { + "use strict"; + + return Button.extend({ + /** + * Shows the panel for the button. + * + * @method showPanel + */ + showPanel: function() { + var self = this, settings = self.settings; + + self.active(true); + + if (!self.panel) { + var panelSettings = settings.panel; + + // Wrap panel in grid layout if type if specified + // This makes it possible to add forms or other containers directly in the panel option + if (panelSettings.type) { + panelSettings = { + layout: 'grid', + items: panelSettings + }; + } + + panelSettings.role = panelSettings.role || 'dialog'; + panelSettings.popover = true; + panelSettings.autohide = true; + panelSettings.ariaRoot = true; + + self.panel = new FloatPanel(panelSettings).on('hide', function() { + self.active(false); + }).on('cancel', function(e) { + e.stopPropagation(); + self.focus(); + self.hidePanel(); + }).parent(self).renderTo(self.getContainerElm()); + + self.panel.fire('show'); + self.panel.reflow(); + } else { + self.panel.show(); + } + + self.panel.moveRel(self.getEl(), settings.popoverAlign || (self.isRtl() ? ['bc-tr', 'bc-tc'] : ['bc-tl', 'bc-tc'])); + }, + + /** + * Hides the panel for the button. + * + * @method hidePanel + */ + hidePanel: function() { + var self = this; + + if (self.panel) { + self.panel.hide(); + } + }, + + /** + * Called after the control has been rendered. + * + * @method postRender + */ + postRender: function() { + var self = this; + + self.aria('haspopup', true); + + self.on('click', function(e) { + if (e.control === self) { + if (self.panel && self.panel.visible()) { + self.hidePanel(); + } else { + self.showPanel(); + self.panel.focus(!!e.aria); + } + } + }); + + return self._super(); + } + }); +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Path.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Path.js new file mode 100755 index 0000000000..edf516304d --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Path.js @@ -0,0 +1,140 @@ +/** + * Path.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a new path control. + * + * @-x-less Path.less + * @class tinymce.ui.Path + * @extends tinymce.ui.Widget + */ +define("tinymce/ui/Path", [ + "tinymce/ui/Widget" +], function(Widget) { + "use strict"; + + return Widget.extend({ + /** + * Constructs a instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + * @setting {String} delimiter Delimiter to display between items in path. + */ + init: function(settings) { + var self = this; + + if (!settings.delimiter) { + settings.delimiter = '\u00BB'; + } + + self._super(settings); + self.addClass('path'); + self.canFocus = true; + + self.on('click', function(e) { + var index, target = e.target; + + if ((index = target.getAttribute('data-index'))) { + self.fire('select', {value: self.data()[index], index: index}); + } + }); + }, + + /** + * Focuses the current control. + * + * @method focus + * @return {tinymce.ui.Control} Current control instance. + */ + focus: function() { + var self = this; + + self.getEl().firstChild.focus(); + + return self; + }, + + /** + * Sets/gets the data to be used for the path. + * + * @method data + * @param {Array} data Array with items name is rendered to path. + */ + data: function(data) { + var self = this; + + if (typeof(data) !== "undefined") { + self._data = data; + self.update(); + + return self; + } + + return self._data; + }, + + /** + * Updated the path. + * + * @private + */ + update: function() { + this.innerHtml(this._getPathHtml()); + }, + + /** + * Called after the control has been rendered. + * + * @method postRender + */ + postRender: function() { + var self = this; + + self._super(); + + self.data(self.settings.data); + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this; + + return ( + '
    ' + + self._getPathHtml() + + '
    ' + ); + }, + + _getPathHtml: function() { + var self = this, parts = self._data || [], i, l, html = '', prefix = self.classPrefix; + + for (i = 0, l = parts.length; i < l; i++) { + html += ( + (i > 0 ? '' : '') + + '
    ' + parts[i].name + '
    ' + ); + } + + if (!html) { + html = '
     
    '; + } + + return html; + } + }); +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Radio.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Radio.js new file mode 100755 index 0000000000..056968c99d --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Radio.js @@ -0,0 +1,29 @@ +/** + * Radio.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a new radio button. + * + * @-x-less Radio.less + * @class tinymce.ui.Radio + * @extends tinymce.ui.Checkbox + */ +define("tinymce/ui/Radio", [ + "tinymce/ui/Checkbox" +], function(Checkbox) { + "use strict"; + + return Checkbox.extend({ + Defaults: { + classes: "radio", + role: "radio" + } + }); +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Resizable.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Resizable.js new file mode 100755 index 0000000000..5933efbddc --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Resizable.js @@ -0,0 +1,68 @@ +/** + * Resizable.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Resizable mixin. Enables controls to be resized. + * + * @mixin tinymce.ui.Resizable + */ +define("tinymce/ui/Resizable", [ + "tinymce/ui/DomUtils" +], function(DomUtils) { + "use strict"; + + return { + /** + * Resizes the control to contents. + * + * @method resizeToContent + */ + resizeToContent: function() { + this._layoutRect.autoResize = true; + this._lastRect = null; + this.reflow(); + }, + + /** + * Resizes the control to a specific width/height. + * + * @method resizeTo + * @param {Number} w Control width. + * @param {Number} h Control height. + * @return {tinymce.ui.Control} Current control instance. + */ + resizeTo: function(w, h) { + // TODO: Fix hack + if (w <= 1 || h <= 1) { + var rect = DomUtils.getWindowSize(); + + w = w <= 1 ? w * rect.w : w; + h = h <= 1 ? h * rect.h : h; + } + + this._layoutRect.autoResize = false; + return this.layoutRect({minW: w, minH: h, w: w, h: h}).reflow(); + }, + + /** + * Resizes the control to a specific relative width/height. + * + * @method resizeBy + * @param {Number} dw Relative control width. + * @param {Number} dh Relative control height. + * @return {tinymce.ui.Control} Current control instance. + */ + resizeBy: function(dw, dh) { + var self = this, rect = self.layoutRect(); + + return self.resizeTo(rect.w + dw, rect.h + dh); + } + }; +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/ResizeHandle.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/ResizeHandle.js new file mode 100755 index 0000000000..b09c699c69 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/ResizeHandle.js @@ -0,0 +1,86 @@ +/** + * ResizeHandle.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Renders a resize handle that fires ResizeStart, Resize and ResizeEnd events. + * + * @-x-less ResizeHandle.less + * @class tinymce.ui.ResizeHandle + * @extends tinymce.ui.Widget + */ +define("tinymce/ui/ResizeHandle", [ + "tinymce/ui/Widget", + "tinymce/ui/DragHelper" +], function(Widget, DragHelper) { + "use strict"; + + return Widget.extend({ + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, prefix = self.classPrefix; + + self.addClass('resizehandle'); + + if (self.settings.direction == "both") { + self.addClass('resizehandle-both'); + } + + self.canFocus = false; + + return ( + '
    ' + + '' + + '
    ' + ); + }, + + /** + * Called after the control has been rendered. + * + * @method postRender + */ + postRender: function() { + var self = this; + + self._super(); + + self.resizeDragHelper = new DragHelper(this._id, { + start: function() { + self.fire('ResizeStart'); + }, + + drag: function(e) { + if (self.settings.direction != "both") { + e.deltaX = 0; + } + + self.fire('Resize', e); + }, + + stop: function() { + self.fire('ResizeEnd'); + } + }); + }, + + remove: function() { + if (this.resizeDragHelper) { + this.resizeDragHelper.destroy(); + } + + return this._super(); + } + }); +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Scrollable.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Scrollable.js new file mode 100755 index 0000000000..b3d375ff6d --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Scrollable.js @@ -0,0 +1,149 @@ +/** + * Scrollable.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This mixin makes controls scrollable using custom scrollbars. + * + * @-x-less Scrollable.less + * @mixin tinymce.ui.Scrollable + */ +define("tinymce/ui/Scrollable", [ + "tinymce/ui/DomUtils", + "tinymce/ui/DragHelper" +], function(DomUtils, DragHelper) { + "use strict"; + + return { + init: function() { + var self = this; + self.on('repaint', self.renderScroll); + }, + + renderScroll: function() { + var self = this, margin = 2; + + function repaintScroll() { + var hasScrollH, hasScrollV, bodyElm; + + function repaintAxis(axisName, posName, sizeName, contentSizeName, hasScroll, ax) { + var containerElm, scrollBarElm, scrollThumbElm; + var containerSize, scrollSize, ratio, rect; + var posNameLower, sizeNameLower; + + scrollBarElm = self.getEl('scroll' + axisName); + if (scrollBarElm) { + posNameLower = posName.toLowerCase(); + sizeNameLower = sizeName.toLowerCase(); + + if (self.getEl('absend')) { + DomUtils.css(self.getEl('absend'), posNameLower, self.layoutRect()[contentSizeName] - 1); + } + + if (!hasScroll) { + DomUtils.css(scrollBarElm, 'display', 'none'); + return; + } + + DomUtils.css(scrollBarElm, 'display', 'block'); + containerElm = self.getEl('body'); + scrollThumbElm = self.getEl('scroll' + axisName + "t"); + containerSize = containerElm["client" + sizeName] - (margin * 2); + containerSize -= hasScrollH && hasScrollV ? scrollBarElm["client" + ax] : 0; + scrollSize = containerElm["scroll" + sizeName]; + ratio = containerSize / scrollSize; + + rect = {}; + rect[posNameLower] = containerElm["offset" + posName] + margin; + rect[sizeNameLower] = containerSize; + DomUtils.css(scrollBarElm, rect); + + rect = {}; + rect[posNameLower] = containerElm["scroll" + posName] * ratio; + rect[sizeNameLower] = containerSize * ratio; + DomUtils.css(scrollThumbElm, rect); + } + } + + bodyElm = self.getEl('body'); + hasScrollH = bodyElm.scrollWidth > bodyElm.clientWidth; + hasScrollV = bodyElm.scrollHeight > bodyElm.clientHeight; + + repaintAxis("h", "Left", "Width", "contentW", hasScrollH, "Height"); + repaintAxis("v", "Top", "Height", "contentH", hasScrollV, "Width"); + } + + function addScroll() { + function addScrollAxis(axisName, posName, sizeName, deltaPosName, ax) { + var scrollStart, axisId = self._id + '-scroll' + axisName, prefix = self.classPrefix; + + self.getEl().appendChild(DomUtils.createFragment( + '
    ' + + '
    ' + + '
    ' + )); + + self.draghelper = new DragHelper(axisId + 't', { + start: function() { + scrollStart = self.getEl('body')["scroll" + posName]; + DomUtils.addClass(DomUtils.get(axisId), prefix + 'active'); + }, + + drag: function(e) { + var ratio, hasScrollH, hasScrollV, containerSize, layoutRect = self.layoutRect(); + + hasScrollH = layoutRect.contentW > layoutRect.innerW; + hasScrollV = layoutRect.contentH > layoutRect.innerH; + containerSize = self.getEl('body')["client" + sizeName] - (margin * 2); + containerSize -= hasScrollH && hasScrollV ? self.getEl('scroll' + axisName)["client" + ax] : 0; + + ratio = containerSize / self.getEl('body')["scroll" + sizeName]; + self.getEl('body')["scroll" + posName] = scrollStart + (e["delta" + deltaPosName] / ratio); + }, + + stop: function() { + DomUtils.removeClass(DomUtils.get(axisId), prefix + 'active'); + } + }); +/* + self.on('click', function(e) { + if (e.target.id == self._id + '-scrollv') { + + } + });*/ + } + + self.addClass('scroll'); + + addScrollAxis("v", "Top", "Height", "Y", "Width"); + addScrollAxis("h", "Left", "Width", "X", "Height"); + } + + if (self.settings.autoScroll) { + if (!self._hasScroll) { + self._hasScroll = true; + addScroll(); + + self.on('wheel', function(e) { + var bodyEl = self.getEl('body'); + + bodyEl.scrollLeft += (e.deltaX || 0) * 10; + bodyEl.scrollTop += e.deltaY * 10; + + repaintScroll(); + }); + + DomUtils.on(self.getEl('body'), "scroll", repaintScroll); + } + + repaintScroll(); + } + } + }; +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Selector.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Selector.js new file mode 100755 index 0000000000..63bde042ee --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Selector.js @@ -0,0 +1,369 @@ +/** + * Selector.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*eslint no-nested-ternary:0 */ + +/** + * Selector engine, enables you to select controls by using CSS like expressions. + * We currently only support basic CSS expressions to reduce the size of the core + * and the ones we support should be enough for most cases. + * + * @example + * Supported expressions: + * element + * element#name + * element.class + * element[attr] + * element[attr*=value] + * element[attr~=value] + * element[attr!=value] + * element[attr^=value] + * element[attr$=value] + * element: + * element:not() + * element:first + * element:last + * element:odd + * element:even + * element element + * element > element + * + * @class tinymce.ui.Selector + */ +define("tinymce/ui/Selector", [ + "tinymce/util/Class" +], function(Class) { + "use strict"; + + /** + * Produces an array with a unique set of objects. It will not compare the values + * but the references of the objects. + * + * @private + * @method unqiue + * @param {Array} array Array to make into an array with unique items. + * @return {Array} Array with unique items. + */ + function unique(array) { + var uniqueItems = [], i = array.length, item; + + while (i--) { + item = array[i]; + + if (!item.__checked) { + uniqueItems.push(item); + item.__checked = 1; + } + } + + i = uniqueItems.length; + while (i--) { + delete uniqueItems[i].__checked; + } + + return uniqueItems; + } + + var expression = /^([\w\\*]+)?(?:#([\w\\]+))?(?:\.([\w\\\.]+))?(?:\[\@?([\w\\]+)([\^\$\*!~]?=)([\w\\]+)\])?(?:\:(.+))?/i; + + /*jshint maxlen:255 */ + /*eslint max-len:0 */ + var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, + whiteSpace = /^\s*|\s*$/g, + Collection; + + var Selector = Class.extend({ + /** + * Constructs a new Selector instance. + * + * @constructor + * @method init + * @param {String} selector CSS like selector expression. + */ + init: function(selector) { + var match = this.match; + + function compileNameFilter(name) { + if (name) { + name = name.toLowerCase(); + + return function(item) { + return name === '*' || item.type === name; + }; + } + } + + function compileIdFilter(id) { + if (id) { + return function(item) { + return item._name === id; + }; + } + } + + function compileClassesFilter(classes) { + if (classes) { + classes = classes.split('.'); + + return function(item) { + var i = classes.length; + + while (i--) { + if (!item.hasClass(classes[i])) { + return false; + } + } + + return true; + }; + } + } + + function compileAttrFilter(name, cmp, check) { + if (name) { + return function(item) { + var value = item[name] ? item[name]() : ''; + + 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; + }; + } + } + + function compilePsuedoFilter(name) { + var notSelectors; + + if (name) { + name = /(?:not\((.+)\))|(.+)/i.exec(name); + + if (!name[1]) { + name = name[2]; + + return function(item, index, length) { + 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; + }; + } else { + // Compile not expression + notSelectors = parseChunks(name[1], []); + + return function(item) { + return !match(item, notSelectors); + }; + } + } + } + + function compile(selector, filters, direct) { + var parts; + + function add(filter) { + if (filter) { + filters.push(filter); + } + } + + // Parse expression into parts + parts = expression.exec(selector.replace(whiteSpace, '')); + + add(compileNameFilter(parts[1])); + add(compileIdFilter(parts[2])); + add(compileClassesFilter(parts[3])); + add(compileAttrFilter(parts[4], parts[5], parts[6])); + add(compilePsuedoFilter(parts[7])); + + // Mark the filter with psuedo for performance + filters.psuedo = !!parts[7]; + filters.direct = direct; + + return filters; + } + + // Parser logic based on Sizzle by John Resig + function parseChunks(selector, selectors) { + var parts = [], extra, matches, i; + + do { + chunker.exec(""); + matches = chunker.exec(selector); + + if (matches) { + selector = matches[3]; + parts.push(matches[1]); + + if (matches[2]) { + extra = matches[3]; + break; + } + } + } while (matches); + + if (extra) { + parseChunks(extra, selectors); + } + + selector = []; + for (i = 0; i < parts.length; i++) { + if (parts[i] != '>') { + selector.push(compile(parts[i], [], parts[i - 1] === '>')); + } + } + + selectors.push(selector); + + return selectors; + } + + this._selectors = parseChunks(selector, []); + }, + + /** + * Returns true/false if the selector matches the specified control. + * + * @method match + * @param {tinymce.ui.Control} control Control to match agains the selector. + * @param {Array} selectors Optional array of selectors, mostly used internally. + * @return {Boolean} true/false state if the control matches or not. + */ + match: function(control, selectors) { + var i, l, si, sl, selector, fi, fl, filters, index, length, siblings, count, item; + + selectors = selectors || this._selectors; + for (i = 0, l = selectors.length; i < l; i++) { + selector = selectors[i]; + sl = selector.length; + item = control; + count = 0; + + for (si = sl - 1; si >= 0; si--) { + filters = selector[si]; + + while (item) { + // Find the index and length since a psuedo filter like :first needs it + if (filters.psuedo) { + siblings = item.parent().items(); + index = length = siblings.length; + while (index--) { + if (siblings[index] === item) { + break; + } + } + } + + for (fi = 0, fl = filters.length; fi < fl; fi++) { + if (!filters[fi](item, index, length)) { + fi = fl + 1; + break; + } + } + + if (fi === fl) { + count++; + break; + } else { + // If it didn't match the right most expression then + // break since it's no point looking at the parents + if (si === sl - 1) { + break; + } + } + + item = item.parent(); + } + } + + // If we found all selectors then return true otherwise continue looking + if (count === sl) { + return true; + } + } + + return false; + }, + + /** + * Returns a tinymce.ui.Collection with matches of the specified selector inside the specified container. + * + * @method find + * @param {tinymce.ui.Control} container Container to look for items in. + * @return {tinymce.ui.Collection} Collection with matched elements. + */ + find: function(container) { + var matches = [], i, l, selectors = this._selectors; + + function collect(items, selector, index) { + var i, l, fi, fl, item, filters = selector[index]; + + for (i = 0, l = items.length; i < l; i++) { + item = items[i]; + + // Run each filter agains the item + for (fi = 0, fl = filters.length; fi < fl; fi++) { + if (!filters[fi](item, i, l)) { + fi = fl + 1; + break; + } + } + + // All filters matched the item + if (fi === fl) { + // Matched item is on the last expression like: panel toolbar [button] + if (index == selector.length - 1) { + matches.push(item); + } else { + // Collect next expression type + if (item.items) { + collect(item.items(), selector, index + 1); + } + } + } else if (filters.direct) { + return; + } + + // Collect child items + if (item.items) { + collect(item.items(), selector, index); + } + } + } + + if (container.items) { + for (i = 0, l = selectors.length; i < l; i++) { + collect(container.items(), selectors[i], 0); + } + + // Unique the matches if needed + if (l > 1) { + matches = unique(matches); + } + } + + // Fix for circular reference + if (!Collection) { + // TODO: Fix me! + Collection = Selector.Collection; + } + + return new Collection(matches); + } + }); + + return Selector; +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Spacer.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Spacer.js new file mode 100755 index 0000000000..7536994f83 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Spacer.js @@ -0,0 +1,39 @@ +/** + * Spacer.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a spacer. This control is used in flex layouts for example. + * + * @-x-less Spacer.less + * @class tinymce.ui.Spacer + * @extends tinymce.ui.Widget + */ +define("tinymce/ui/Spacer", [ + "tinymce/ui/Widget" +], function(Widget) { + "use strict"; + + return Widget.extend({ + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this; + + self.addClass('spacer'); + self.canFocus = false; + + return '
    '; + } + }); +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/SplitButton.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/SplitButton.js new file mode 100755 index 0000000000..9263063d1b --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/SplitButton.js @@ -0,0 +1,119 @@ +/** + * SplitButton.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a split button. + * + * @-x-less SplitButton.less + * @class tinymce.ui.SplitButton + * @extends tinymce.ui.Button + */ +define("tinymce/ui/SplitButton", [ + "tinymce/ui/MenuButton", + "tinymce/ui/DomUtils" +], function(MenuButton, DomUtils) { + return MenuButton.extend({ + Defaults: { + classes: "widget btn splitbtn", + role: "button" + }, + + /** + * Repaints the control after a layout operation. + * + * @method repaint + */ + repaint: function() { + var self = this, elm = self.getEl(), rect = self.layoutRect(), mainButtonElm, menuButtonElm; + + self._super(); + + mainButtonElm = elm.firstChild; + menuButtonElm = elm.lastChild; + + DomUtils.css(mainButtonElm, { + width: rect.w - DomUtils.getSize(menuButtonElm).width, + height: rect.h - 2 + }); + + DomUtils.css(menuButtonElm, { + height: rect.h - 2 + }); + + return self; + }, + + /** + * Sets the active menu state. + * + * @private + */ + activeMenu: function(state) { + var self = this; + + DomUtils.toggleClass(self.getEl().lastChild, self.classPrefix + 'active', state); + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, id = self._id, prefix = self.classPrefix; + var icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : ''; + + return ( + '
    ' + + '' + + '' + + '
    ' + ); + }, + + /** + * Called after the control has been rendered. + * + * @method postRender + */ + postRender: function() { + var self = this, onClickHandler = self.settings.onclick; + + self.on('click', function(e) { + var node = e.target; + + if (e.control == this) { + // Find clicks that is on the main button + while (node) { + if ((e.aria && e.aria.key != 'down') || (node.nodeName == 'BUTTON' && node.className.indexOf('open') == -1)) { + e.stopImmediatePropagation(); + onClickHandler.call(this, e); + return; + } + + node = node.parentNode; + } + } + }); + + delete self.settings.onclick; + + return self._super(); + } + }); +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/StackLayout.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/StackLayout.js new file mode 100755 index 0000000000..32fcbf481c --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/StackLayout.js @@ -0,0 +1,30 @@ +/** + * StackLayout.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This layout uses the browsers layout when the items are blocks. + * + * @-x-less StackLayout.less + * @class tinymce.ui.StackLayout + * @extends tinymce.ui.FlowLayout + */ +define("tinymce/ui/StackLayout", [ + "tinymce/ui/FlowLayout" +], function(FlowLayout) { + "use strict"; + + return FlowLayout.extend({ + Defaults: { + containerClass: 'stack-layout', + controlClass: 'stack-layout-item', + endClass : 'break' + } + }); +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/TabPanel.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/TabPanel.js new file mode 100755 index 0000000000..1f379be969 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/TabPanel.js @@ -0,0 +1,180 @@ +/** + * TabPanel.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a tab panel control. + * + * @-x-less TabPanel.less + * @class tinymce.ui.TabPanel + * @extends tinymce.ui.Panel + * + * @setting {Number} activeTab Active tab index. + */ +define("tinymce/ui/TabPanel", [ + "tinymce/ui/Panel", + "tinymce/ui/DomUtils" +], function(Panel, DomUtils) { + "use strict"; + + return Panel.extend({ + lastIdx: 0, + + Defaults: { + layout: 'absolute', + defaults: { + type: 'panel' + } + }, + + /** + * Activates the specified tab by index. + * + * @method activateTab + * @param {Number} idx Index of the tab to activate. + */ + activateTab: function(idx) { + var activeTabElm; + + if (this.activeTabId) { + activeTabElm = this.getEl(this.activeTabId); + DomUtils.removeClass(activeTabElm, this.classPrefix + 'active'); + activeTabElm.setAttribute('aria-selected', "false"); + } + + this.activeTabId = 't' + idx; + + activeTabElm = this.getEl('t' + idx); + activeTabElm.setAttribute('aria-selected', "true"); + DomUtils.addClass(activeTabElm, this.classPrefix + 'active'); + + if (idx != this.lastIdx) { + this.items()[this.lastIdx].hide(); + this.lastIdx = idx; + } + + this.items()[idx].show().fire('showtab'); + this.reflow(); + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, layout = self._layout, tabsHtml = '', prefix = self.classPrefix; + + self.preRender(); + layout.preRender(self); + + self.items().each(function(ctrl, i) { + var id = self._id + '-t' + i; + + ctrl.aria('role', 'tabpanel'); + ctrl.aria('labelledby', id); + + tabsHtml += ( + '' + ); + }); + + return ( + '
    ' + + '
    ' + + tabsHtml + + '
    ' + + '
    ' + + layout.renderHtml(self) + + '
    ' + + '
    ' + ); + }, + + /** + * Called after the control has been rendered. + * + * @method postRender + */ + postRender: function() { + var self = this; + + self._super(); + + self.settings.activeTab = self.settings.activeTab || 0; + self.activateTab(self.settings.activeTab); + + this.on('click', function(e) { + var targetParent = e.target.parentNode; + + if (e.target.parentNode.id == self._id + '-head') { + var i = targetParent.childNodes.length; + + while (i--) { + if (targetParent.childNodes[i] == e.target) { + self.activateTab(i); + } + } + } + }); + }, + + /** + * Initializes the current controls layout rect. + * This will be executed by the layout managers to determine the + * default minWidth/minHeight etc. + * + * @method initLayoutRect + * @return {Object} Layout rect instance. + */ + initLayoutRect: function() { + var self = this, rect, minW, minH; + + minW = DomUtils.getSize(self.getEl('head')).width; + minW = minW < 0 ? 0 : minW; + minH = 0; + self.items().each(function(item, i) { + minW = Math.max(minW, item.layoutRect().minW); + minH = Math.max(minH, item.layoutRect().minH); + if (self.settings.activeTab != i) { + item.hide(); + } + }); + + self.items().each(function(ctrl) { + ctrl.settings.x = 0; + ctrl.settings.y = 0; + ctrl.settings.w = minW; + ctrl.settings.h = minH; + + ctrl.layoutRect({ + x: 0, + y: 0, + w: minW, + h: minH + }); + }); + + var headH = DomUtils.getSize(self.getEl('head')).height; + + self.settings.minWidth = minW; + self.settings.minHeight = minH + headH; + + rect = self._super(); + rect.deltaH += headH; + rect.innerH = rect.h - rect.deltaH; + + return rect; + } + }); +}); diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/TextBox.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/TextBox.js new file mode 100755 index 0000000000..a11f72de53 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/TextBox.js @@ -0,0 +1,214 @@ +/** + * TextBox.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a new textbox. + * + * @-x-less TextBox.less + * @class tinymce.ui.TextBox + * @extends tinymce.ui.Widget + */ +define("tinymce/ui/TextBox", [ + "tinymce/ui/Widget", + "tinymce/ui/DomUtils" +], function(Widget, DomUtils) { + "use strict"; + + return Widget.extend({ + /** + * Constructs a instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + * @setting {Boolean} multiline True if the textbox is a multiline control. + * @setting {Number} maxLength Max length for the textbox. + * @setting {Number} size Size of the textbox in characters. + */ + init: function(settings) { + var self = this; + + self._super(settings); + + self._value = settings.value || ''; + self.addClass('textbox'); + + if (settings.multiline) { + self.addClass('multiline'); + } else { + // TODO: Rework this + self.on('keydown', function(e) { + if (e.keyCode == 13) { + self.parents().reverse().each(function(ctrl) { + e.preventDefault(); + + if (ctrl.hasEventListeners('submit') && ctrl.toJSON) { + ctrl.fire('submit', {data: ctrl.toJSON()}); + return false; + } + }); + } + }); + } + }, + + /** + * Getter/setter function for the disabled state. + * + * @method value + * @param {Boolean} [state] State to be set. + * @return {Boolean|tinymce.ui.ComboBox} True/false or self if it's a set operation. + */ + disabled: function(state) { + var self = this; + + if (self._rendered && typeof(state) != 'undefined') { + self.getEl().disabled = state; + } + + return self._super(state); + }, + + /** + * Getter/setter function for the control value. + * + * @method value + * @param {String} [value] Value to be set. + * @return {String|tinymce.ui.ComboBox} Value or self if it's a set operation. + */ + value: function(value) { + var self = this; + + if (typeof(value) != "undefined") { + self._value = value; + + if (self._rendered) { + self.getEl().value = value; + } + + return self; + } + + if (self._rendered) { + return self.getEl().value; + } + + return self._value; + }, + + /** + * Repaints the control after a layout operation. + * + * @method repaint + */ + repaint: function() { + var self = this, style, rect, borderBox, borderW = 0, borderH = 0, lastRepaintRect; + + style = self.getEl().style; + rect = self._layoutRect; + lastRepaintRect = self._lastRepaintRect || {}; + + // Detect old IE 7+8 add lineHeight to align caret vertically in the middle + var doc = document; + if (!self.settings.multiline && doc.all && (!doc.documentMode || doc.documentMode <= 8)) { + style.lineHeight = (rect.h - borderH) + 'px'; + } + + borderBox = self._borderBox; + borderW = borderBox.left + borderBox.right + 8; + borderH = borderBox.top + borderBox.bottom + (self.settings.multiline ? 8 : 0); + + if (rect.x !== lastRepaintRect.x) { + style.left = rect.x + 'px'; + lastRepaintRect.x = rect.x; + } + + if (rect.y !== lastRepaintRect.y) { + style.top = rect.y + 'px'; + lastRepaintRect.y = rect.y; + } + + if (rect.w !== lastRepaintRect.w) { + style.width = (rect.w - borderW) + 'px'; + lastRepaintRect.w = rect.w; + } + + if (rect.h !== lastRepaintRect.h) { + style.height = (rect.h - borderH) + 'px'; + lastRepaintRect.h = rect.h; + } + + self._lastRepaintRect = lastRepaintRect; + self.fire('repaint', {}, false); + + return self; + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, id = self._id, settings = self.settings, value = self.encode(self._value, false), extraAttrs = ''; + + if ("spellcheck" in settings) { + extraAttrs += ' spellcheck="' + settings.spellcheck + '"'; + } + + if (settings.maxLength) { + extraAttrs += ' maxlength="' + settings.maxLength + '"'; + } + + if (settings.size) { + extraAttrs += ' size="' + settings.size + '"'; + } + + if (settings.subtype) { + extraAttrs += ' type="' + settings.subtype + '"'; + } + + if (self.disabled()) { + extraAttrs += ' disabled="disabled"'; + } + + if (settings.multiline) { + return ( + '' + ); + } + + return ''; + }, + + /** + * Called after the control has been rendered. + * + * @method postRender + */ + postRender: function() { + var self = this; + + DomUtils.on(self.getEl(), 'change', function(e) { + self.fire('change', e); + }); + + return self._super(); + }, + + remove: function() { + DomUtils.off(this.getEl()); + this._super(); + } + }); +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Throbber.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Throbber.js new file mode 100755 index 0000000000..b56e2cc7ca --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Throbber.js @@ -0,0 +1,70 @@ +/** + * Throbber.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class enables you to display a Throbber for any element. + * + * @-x-less Throbber.less + * @class tinymce.ui.Throbber + */ +define("tinymce/ui/Throbber", [ + "tinymce/ui/DomUtils" +], function(DomUtils) { + "use strict"; + + /** + * Constructs a new throbber. + * + * @constructor + * @param {Element} elm DOM Html element to display throbber in. + */ + return function(elm) { + var self = this, state; + + /** + * Shows the throbber. + * + * @method show + * @param {Number} [time] Time to wait before showing. + * @return {tinymce.ui.Throbber} Current throbber instance. + */ + self.show = function(time) { + self.hide(); + + state = true; + + window.setTimeout(function() { + if (state) { + elm.appendChild(DomUtils.createFragment('
    ')); + } + }, time || 0); + + return self; + }; + + /** + * Hides the throbber. + * + * @method hide + * @return {tinymce.ui.Throbber} Current throbber instance. + */ + self.hide = function() { + var child = elm.lastChild; + + if (child && child.className.indexOf('throbber') != -1) { + child.parentNode.removeChild(child); + } + + state = false; + + return self; + }; + }; +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Toolbar.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Toolbar.js new file mode 100755 index 0000000000..55b6210e03 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Toolbar.js @@ -0,0 +1,54 @@ +/** + * Toolbar.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a new toolbar. + * + * @class tinymce.ui.Toolbar + * @extends tinymce.ui.Container + */ +define("tinymce/ui/Toolbar", [ + "tinymce/ui/Container" +], function(Container) { + "use strict"; + + return Container.extend({ + Defaults: { + role: 'toolbar', + layout: 'flow' + }, + + /** + * Constructs a instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + */ + init: function(settings) { + var self = this; + + self._super(settings); + self.addClass('toolbar'); + }, + + /** + * Called after the control has been rendered. + * + * @method postRender + */ + postRender: function() { + var self = this; + + self.items().addClass('toolbar-item'); + + return self._super(); + } + }); +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Tooltip.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Tooltip.js new file mode 100755 index 0000000000..2d01d49120 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Tooltip.js @@ -0,0 +1,86 @@ +/** + * Tooltip.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a tooltip instance. + * + * @-x-less ToolTip.less + * @class tinymce.ui.ToolTip + * @extends tinymce.ui.Control + * @mixes tinymce.ui.Movable + */ +define("tinymce/ui/Tooltip", [ + "tinymce/ui/Control", + "tinymce/ui/Movable" +], function(Control, Movable) { + return Control.extend({ + Mixins: [Movable], + + Defaults: { + classes: 'widget tooltip tooltip-n' + }, + + /** + * Sets/gets the current label text. + * + * @method text + * @param {String} [text] New label text. + * @return {String|tinymce.ui.Tooltip} Current text or current label instance. + */ + text: function(value) { + var self = this; + + if (typeof(value) != "undefined") { + self._value = value; + + if (self._rendered) { + self.getEl().lastChild.innerHTML = self.encode(value); + } + + return self; + } + + return self._value; + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, prefix = self.classPrefix; + + return ( + '' + ); + }, + + /** + * Repaints the control after a layout operation. + * + * @method repaint + */ + repaint: function() { + var self = this, style, rect; + + style = self.getEl().style; + rect = self._layoutRect; + + style.left = rect.x + 'px'; + style.top = rect.y + 'px'; + style.zIndex = 0xFFFF + 0xFFFF; + } + }); +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Widget.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Widget.js new file mode 100755 index 0000000000..274b937e1c --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Widget.js @@ -0,0 +1,156 @@ +/** + * Widget.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Widget base class a widget is a control that has a tooltip and some basic states. + * + * @class tinymce.ui.Widget + * @extends tinymce.ui.Control + */ +define("tinymce/ui/Widget", [ + "tinymce/ui/Control", + "tinymce/ui/Tooltip" +], function(Control, Tooltip) { + "use strict"; + + var tooltip; + + var Widget = Control.extend({ + /** + * Constructs a instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + * @setting {String} tooltip Tooltip text to display when hovering. + * @setting {Boolean} autofocus True if the control should be focused when rendered. + * @setting {String} text Text to display inside widget. + */ + init: function(settings) { + var self = this; + + self._super(settings); + self.canFocus = true; + + if (settings.tooltip && Widget.tooltips !== false) { + self.on('mouseenter', function(e) { + var tooltip = self.tooltip().moveTo(-0xFFFF); + + if (e.control == self) { + var rel = tooltip.text(settings.tooltip).show().testMoveRel(self.getEl(), ['bc-tc', 'bc-tl', 'bc-tr']); + + tooltip.toggleClass('tooltip-n', rel == 'bc-tc'); + tooltip.toggleClass('tooltip-nw', rel == 'bc-tl'); + tooltip.toggleClass('tooltip-ne', rel == 'bc-tr'); + + tooltip.moveRel(self.getEl(), rel); + } else { + tooltip.hide(); + } + }); + + self.on('mouseleave mousedown click', function() { + self.tooltip().hide(); + }); + } + + self.aria('label', settings.ariaLabel || settings.tooltip); + }, + + /** + * Returns the current tooltip instance. + * + * @method tooltip + * @return {tinymce.ui.Tooltip} Tooltip instance. + */ + tooltip: function() { + if (!tooltip) { + tooltip = new Tooltip({type: 'tooltip'}); + tooltip.renderTo(); + } + + return tooltip; + }, + + /** + * Sets/gets the active state of the widget. + * + * @method active + * @param {Boolean} [state] State if the control is active. + * @return {Boolean|tinymce.ui.Widget} True/false or current widget instance. + */ + active: function(state) { + var self = this, undef; + + if (state !== undef) { + self.aria('pressed', state); + self.toggleClass('active', state); + } + + return self._super(state); + }, + + /** + * Sets/gets the disabled state of the widget. + * + * @method disabled + * @param {Boolean} [state] State if the control is disabled. + * @return {Boolean|tinymce.ui.Widget} True/false or current widget instance. + */ + disabled: function(state) { + var self = this, undef; + + if (state !== undef) { + self.aria('disabled', state); + self.toggleClass('disabled', state); + } + + return self._super(state); + }, + + /** + * Called after the control has been rendered. + * + * @method postRender + */ + postRender: function() { + var self = this, settings = self.settings; + + self._rendered = true; + + self._super(); + + if (!self.parent() && (settings.width || settings.height)) { + self.initLayoutRect(); + self.repaint(); + } + + if (settings.autofocus) { + self.focus(); + } + }, + + /** + * Removes the current control from DOM and from UI collections. + * + * @method remove + * @return {tinymce.ui.Control} Current control instance. + */ + remove: function() { + this._super(); + + if (tooltip) { + tooltip.remove(); + tooltip = null; + } + } + }); + + return Widget; +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Window.js b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Window.js new file mode 100755 index 0000000000..00d841b09c --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/ui/Window.js @@ -0,0 +1,373 @@ +/** + * Window.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a new window. + * + * @-x-less Window.less + * @class tinymce.ui.Window + * @extends tinymce.ui.FloatPanel + */ +define("tinymce/ui/Window", [ + "tinymce/ui/FloatPanel", + "tinymce/ui/Panel", + "tinymce/ui/DomUtils", + "tinymce/ui/DragHelper" +], function(FloatPanel, Panel, DomUtils, DragHelper) { + "use strict"; + + var Window = FloatPanel.extend({ + modal: true, + + Defaults: { + border: 1, + layout: 'flex', + containerCls: 'panel', + role: 'dialog', + callbacks: { + submit: function() { + this.fire('submit', {data: this.toJSON()}); + }, + + close: function() { + this.close(); + } + } + }, + + /** + * Constructs a instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + */ + init: function(settings) { + var self = this; + + self._super(settings); + + if (self.isRtl()) { + self.addClass('rtl'); + } + + self.addClass('window'); + self._fixed = true; + + // Create statusbar + if (settings.buttons) { + self.statusbar = new Panel({ + layout: 'flex', + border: '1 0 0 0', + spacing: 3, + padding: 10, + align: 'center', + pack: self.isRtl() ? 'start' : 'end', + defaults: { + type: 'button' + }, + items: settings.buttons + }); + + self.statusbar.addClass('foot'); + self.statusbar.parent(self); + } + + self.on('click', function(e) { + if (e.target.className.indexOf(self.classPrefix + 'close') != -1) { + self.close(); + } + }); + + self.on('cancel', function() { + self.close(); + }); + + self.aria('describedby', self.describedBy || self._id + '-none'); + self.aria('label', settings.title); + self._fullscreen = false; + }, + + /** + * Recalculates the positions of the controls in the current container. + * This is invoked by the reflow method and shouldn't be called directly. + * + * @method recalc + */ + recalc: function() { + var self = this, statusbar = self.statusbar, layoutRect, width, x, needsRecalc; + + if (self._fullscreen) { + self.layoutRect(DomUtils.getWindowSize()); + self.layoutRect().contentH = self.layoutRect().innerH; + } + + self._super(); + + layoutRect = self.layoutRect(); + + // Resize window based on title width + if (self.settings.title && !self._fullscreen) { + width = layoutRect.headerW; + if (width > layoutRect.w) { + x = layoutRect.x - Math.max(0, width / 2); + self.layoutRect({w: width, x: x}); + needsRecalc = true; + } + } + + // Resize window based on statusbar width + if (statusbar) { + statusbar.layoutRect({w: self.layoutRect().innerW}).recalc(); + + width = statusbar.layoutRect().minW + layoutRect.deltaW; + if (width > layoutRect.w) { + x = layoutRect.x - Math.max(0, width - layoutRect.w); + self.layoutRect({w: width, x: x}); + needsRecalc = true; + } + } + + // Recalc body and disable auto resize + if (needsRecalc) { + self.recalc(); + } + }, + + /** + * Initializes the current controls layout rect. + * This will be executed by the layout managers to determine the + * default minWidth/minHeight etc. + * + * @method initLayoutRect + * @return {Object} Layout rect instance. + */ + initLayoutRect: function() { + var self = this, layoutRect = self._super(), deltaH = 0, headEl; + + // Reserve vertical space for title + if (self.settings.title && !self._fullscreen) { + headEl = self.getEl('head'); + + var size = DomUtils.getSize(headEl); + + layoutRect.headerW = size.width; + layoutRect.headerH = size.height; + + deltaH += layoutRect.headerH; + } + + // Reserve vertical space for statusbar + if (self.statusbar) { + deltaH += self.statusbar.layoutRect().h; + } + + layoutRect.deltaH += deltaH; + layoutRect.minH += deltaH; + //layoutRect.innerH -= deltaH; + layoutRect.h += deltaH; + + var rect = DomUtils.getWindowSize(); + + layoutRect.x = Math.max(0, rect.w / 2 - layoutRect.w / 2); + layoutRect.y = Math.max(0, rect.h / 2 - layoutRect.h / 2); + + return layoutRect; + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, layout = self._layout, id = self._id, prefix = self.classPrefix; + var settings = self.settings, headerHtml = '', footerHtml = '', html = settings.html; + + self.preRender(); + layout.preRender(self); + + if (settings.title) { + headerHtml = ( + '
    ' + + '
    ' + self.encode(settings.title) + '
    ' + + '' + + '
    ' + + '
    ' + ); + } + + if (settings.url) { + html = ''; + } + + if (typeof(html) == "undefined") { + html = layout.renderHtml(self); + } + + if (self.statusbar) { + footerHtml = self.statusbar.renderHtml(); + } + + return ( + '
    ' + + '
    ' + + headerHtml + + '
    ' + + html + + '
    ' + + footerHtml + + '
    ' + + '
    ' + ); + }, + + /** + * Switches the window fullscreen mode. + * + * @method fullscreen + * @param {Boolean} state True/false state. + * @return {tinymce.ui.Window} Current window instance. + */ + fullscreen: function(state) { + var self = this, documentElement = document.documentElement, slowRendering, prefix = self.classPrefix, layoutRect; + + if (state != self._fullscreen) { + DomUtils.on(window, 'resize', function() { + var time; + + if (self._fullscreen) { + // Time the layout time if it's to slow use a timeout to not hog the CPU + if (!slowRendering) { + time = new Date().getTime(); + + var rect = DomUtils.getWindowSize(); + self.moveTo(0, 0).resizeTo(rect.w, rect.h); + + if ((new Date().getTime()) - time > 50) { + slowRendering = true; + } + } else { + if (!self._timer) { + self._timer = setTimeout(function() { + var rect = DomUtils.getWindowSize(); + self.moveTo(0, 0).resizeTo(rect.w, rect.h); + + self._timer = 0; + }, 50); + } + } + } + }); + + layoutRect = self.layoutRect(); + self._fullscreen = state; + + if (!state) { + self._borderBox = self.parseBox(self.settings.border); + self.getEl('head').style.display = ''; + layoutRect.deltaH += layoutRect.headerH; + DomUtils.removeClass(documentElement, prefix + 'fullscreen'); + DomUtils.removeClass(document.body, prefix + 'fullscreen'); + self.removeClass('fullscreen'); + self.moveTo(self._initial.x, self._initial.y).resizeTo(self._initial.w, self._initial.h); + } else { + self._initial = {x: layoutRect.x, y: layoutRect.y, w: layoutRect.w, h: layoutRect.h}; + + self._borderBox = self.parseBox('0'); + self.getEl('head').style.display = 'none'; + layoutRect.deltaH -= layoutRect.headerH + 2; + DomUtils.addClass(documentElement, prefix + 'fullscreen'); + DomUtils.addClass(document.body, prefix + 'fullscreen'); + self.addClass('fullscreen'); + + var rect = DomUtils.getWindowSize(); + self.moveTo(0, 0).resizeTo(rect.w, rect.h); + } + } + + return self.reflow(); + }, + + /** + * Called after the control has been rendered. + * + * @method postRender + */ + postRender: function() { + var self = this, startPos; + + setTimeout(function() { + self.addClass('in'); + }, 0); + + self._super(); + + if (self.statusbar) { + self.statusbar.postRender(); + } + + self.focus(); + + this.dragHelper = new DragHelper(self._id + '-dragh', { + start: function() { + startPos = { + x: self.layoutRect().x, + y: self.layoutRect().y + }; + }, + + drag: function(e) { + self.moveTo(startPos.x + e.deltaX, startPos.y + e.deltaY); + } + }); + + self.on('submit', function(e) { + if (!e.isDefaultPrevented()) { + self.close(); + } + }); + }, + + /** + * Fires a submit event with the serialized form. + * + * @method submit + * @return {Object} Event arguments object. + */ + submit: function() { + return this.fire('submit', {data: this.toJSON()}); + }, + + /** + * Removes the current control from DOM and from UI collections. + * + * @method remove + * @return {tinymce.ui.Control} Current control instance. + */ + remove: function() { + var self = this, prefix = self.classPrefix; + + self.dragHelper.destroy(); + self._super(); + + if (self.statusbar) { + this.statusbar.remove(); + } + + if (self._fullscreen) { + DomUtils.removeClass(document.documentElement, prefix + 'fullscreen'); + DomUtils.removeClass(document.body, prefix + 'fullscreen'); + } + } + }); + + return Window; +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/util/Class.js b/common/static/js/vendor/tinymce/js/tinymce/classes/util/Class.js new file mode 100755 index 0000000000..787c69c77c --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/util/Class.js @@ -0,0 +1,163 @@ +/** + * Class.js + * + * Copyright 2003-2012, Moxiecode Systems AB, All rights reserved. + */ + +/** + * This utilitiy class is used for easier inheritage. + * + * Features: + * * Exposed super functions: this._super(); + * * Mixins + * * Dummy functions + * * Property functions: var value = object.value(); and object.value(newValue); + * * Static functions + * * Defaults settings + */ +define("tinymce/util/Class", [ + "tinymce/util/Tools" +], function(Tools) { + var each = Tools.each, extend = Tools.extend; + + var extendClass, initializing; + + function Class() { + } + + // Provides classical inheritance, based on code made by John Resig + Class.extend = extendClass = function(prop) { + var self = this, _super = self.prototype, prototype, name, member; + + // The dummy class constructor + function Class() { + var i, mixins, mixin, self = this; + + // All construction is actually done in the init method + if (!initializing) { + // Run class constuctor + if (self.init) { + self.init.apply(self, arguments); + } + + // Run mixin constructors + mixins = self.Mixins; + if (mixins) { + i = mixins.length; + while (i--) { + mixin = mixins[i]; + if (mixin.init) { + mixin.init.apply(self, arguments); + } + } + } + } + } + + // Dummy function, needs to be extended in order to provide functionality + function dummy() { + return this; + } + + // Creates a overloaded method for the class + // this enables you to use this._super(); to call the super function + function createMethod(name, fn) { + return function(){ + var self = this, tmp = self._super, ret; + + self._super = _super[name]; + ret = fn.apply(self, arguments); + self._super = tmp; + + return ret; + }; + } + + // Instantiate a base class (but only create the instance, + // don't run the init constructor) + initializing = true; + prototype = new self(); + initializing = false; + + // Add mixins + if (prop.Mixins) { + each(prop.Mixins, function(mixin) { + mixin = mixin; + + for (var name in mixin) { + if (name !== "init") { + prop[name] = mixin[name]; + } + } + }); + + if (_super.Mixins) { + prop.Mixins = _super.Mixins.concat(prop.Mixins); + } + } + + // Generate dummy methods + if (prop.Methods) { + each(prop.Methods.split(','), function(name) { + prop[name] = dummy; + }); + } + + // Generate property methods + if (prop.Properties) { + each(prop.Properties.split(','), function(name) { + var fieldName = '_' + name; + + prop[name] = function(value) { + var self = this, undef; + + // Set value + if (value !== undef) { + self[fieldName] = value; + + return self; + } + + // Get value + return self[fieldName]; + }; + }); + } + + // Static functions + if (prop.Statics) { + each(prop.Statics, function(func, name) { + Class[name] = func; + }); + } + + // Default settings + if (prop.Defaults && _super.Defaults) { + prop.Defaults = extend({}, _super.Defaults, prop.Defaults); + } + + // Copy the properties over onto the new prototype + for (name in prop) { + member = prop[name]; + + if (typeof member == "function" && _super[name]) { + prototype[name] = createMethod(name, member); + } else { + prototype[name] = member; + } + } + + // Populate our constructed prototype object + Class.prototype = prototype; + + // Enforce the constructor to be what we expect + Class.constructor = Class; + + // And make this class extendible + Class.extend = extendClass; + + return Class; + }; + + return Class; +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/util/I18n.js b/common/static/js/vendor/tinymce/js/tinymce/classes/util/I18n.js new file mode 100755 index 0000000000..27a8dad64a --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/util/I18n.js @@ -0,0 +1,80 @@ +/** + * I18n.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * I18n class that handles translation of TinyMCE UI. + * Uses po style with csharp style parameters. + * + * @class tinymce.util.I18n + */ +define("tinymce/util/I18n", [], function() { + "use strict"; + + var data = {}; + + return { + /** + * Property gets set to true if a RTL language pack was loaded. + * + * @property rtl + * @type Boolean + */ + rtl: false, + + /** + * Adds translations for a specific language code. + * + * @method add + * @param {String} code Language code like sv_SE. + * @param {Array} items Name/value array with English en_US to sv_SE. + */ + add: function(code, items) { + for (var name in items) { + data[name] = items[name]; + } + + this.rtl = this.rtl || data._dir === 'rtl'; + }, + + /** + * Translates the specified text. + * + * It has a few formats: + * I18n.translate("Text"); + * I18n.translate(["Text {0}/{1}", 0, 1]); + * I18n.translate({raw: "Raw string"}); + * + * @method translate + * @param {String/Object/Array} text Text to translate. + * @return {String} String that got translated. + */ + translate: function(text) { + if (typeof(text) == "undefined") { + return text; + } + + if (typeof(text) != "string" && text.raw) { + return text.raw; + } + + if (text.push) { + var values = text.slice(1); + + text = (data[text[0]] || text[0]).replace(/\{([^\}]+)\}/g, function(match1, match2) { + return values[match2]; + }); + } + + return data[text] || text; + }, + + data: data + }; +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/util/JSON.js b/common/static/js/vendor/tinymce/js/tinymce/classes/util/JSON.js new file mode 100755 index 0000000000..623b5df35e --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/util/JSON.js @@ -0,0 +1,109 @@ +/** + * JSON.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * JSON parser and serializer class. + * + * @class tinymce.util.JSON + * @static + * @example + * // JSON parse a string into an object + * var obj = tinymce.util.JSON.parse(somestring); + * + * // JSON serialize a object into an string + * var str = tinymce.util.JSON.serialize(obj); + */ +define("tinymce/util/JSON", [], function() { + function serialize(o, quote) { + var i, v, t, name; + + quote = quote || '"'; + + if (o === null) { + return 'null'; + } + + t = typeof o; + + if (t == 'string') { + v = '\bb\tt\nn\ff\rr\""\'\'\\\\'; + + return quote + o.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g, function(a, b) { + // Make sure single quotes never get encoded inside double quotes for JSON compatibility + if (quote === '"' && a === "'") { + return a; + } + + i = v.indexOf(b); + + if (i + 1) { + return '\\' + v.charAt(i + 1); + } + + a = b.charCodeAt().toString(16); + + return '\\u' + '0000'.substring(a.length) + a; + }) + quote; + } + + if (t == 'object') { + if (o.hasOwnProperty && Object.prototype.toString.call(o) === '[object Array]') { + for (i = 0, v = '['; i < o.length; i++) { + v += (i > 0 ? ',' : '') + serialize(o[i], quote); + } + + return v + ']'; + } + + v = '{'; + + for (name in o) { + if (o.hasOwnProperty(name)) { + v += typeof o[name] != 'function' ? (v.length > 1 ? ',' + quote : quote) + name + + quote + ':' + serialize(o[name], quote) : ''; + } + } + + return v + '}'; + } + + return '' + o; + } + + return { + /** + * Serializes the specified object as a JSON string. + * + * @method serialize + * @param {Object} obj Object to serialize as a JSON string. + * @param {String} quote Optional quote string defaults to ". + * @return {string} JSON string serialized from input. + */ + serialize: serialize, + + /** + * Unserializes/parses the specified JSON string into a object. + * + * @method parse + * @param {string} s JSON String to parse into a JavaScript object. + * @return {Object} Object from input JSON string or undefined if it failed. + */ + parse: function(text) { + try { + // Trick uglify JS + return window[String.fromCharCode(101) + 'val']('(' + text + ')'); + } catch (ex) { + // Ignore + } + } + + /**#@-*/ + }; +}); diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/util/JSONP.js b/common/static/js/vendor/tinymce/js/tinymce/classes/util/JSONP.js new file mode 100755 index 0000000000..3c0bf67dd6 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/util/JSONP.js @@ -0,0 +1,38 @@ +/** + * JSONP.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +define("tinymce/util/JSONP", [ + "tinymce/dom/DOMUtils" +], function(DOMUtils) { + return { + callbacks: {}, + count: 0, + + send: function(settings) { + var self = this, dom = DOMUtils.DOM, count = settings.count !== undefined ? settings.count : self.count; + var id = 'tinymce_jsonp_' + count; + + self.callbacks[count] = function(json) { + dom.remove(id); + delete self.callbacks[count]; + + settings.callback(json); + }; + + dom.add(dom.doc.body, 'script', { + id: id, + src: settings.url, + type: 'text/javascript' + }); + + self.count++; + } + }; +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/util/JSONRequest.js b/common/static/js/vendor/tinymce/js/tinymce/classes/util/JSONRequest.js new file mode 100755 index 0000000000..0277a66cb8 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/util/JSONRequest.js @@ -0,0 +1,110 @@ +/** + * JSONRequest.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class enables you to use JSON-RPC to call backend methods. + * + * @class tinymce.util.JSONRequest + * @example + * var json = new tinymce.util.JSONRequest({ + * url: 'somebackend.php' + * }); + * + * // Send RPC call 1 + * json.send({ + * method: 'someMethod1', + * params: ['a', 'b'], + * success: function(result) { + * console.dir(result); + * } + * }); + * + * // Send RPC call 2 + * json.send({ + * method: 'someMethod2', + * params: ['a', 'b'], + * success: function(result) { + * console.dir(result); + * } + * }); + */ +define("tinymce/util/JSONRequest", [ + "tinymce/util/JSON", + "tinymce/util/XHR", + "tinymce/util/Tools" +], function(JSON, XHR, Tools) { + var extend = Tools.extend; + + function JSONRequest(settings) { + this.settings = extend({}, settings); + this.count = 0; + } + + /** + * Simple helper function to send a JSON-RPC request without the need to initialize an object. + * Consult the Wiki API documentation for more details on what you can pass to this function. + * + * @method sendRPC + * @static + * @param {Object} o Call object where there are three field id, method and params this object should also contain callbacks etc. + */ + JSONRequest.sendRPC = function(o) { + return new JSONRequest().send(o); + }; + + JSONRequest.prototype = { + /** + * Sends a JSON-RPC call. Consult the Wiki API documentation for more details on what you can pass to this function. + * + * @method send + * @param {Object} args Call object where there are three field id, method and params this object should also contain callbacks etc. + */ + send: function(args) { + var ecb = args.error, scb = args.success; + + args = extend(this.settings, args); + + args.success = function(c, x) { + c = JSON.parse(c); + + if (typeof(c) == 'undefined') { + c = { + error : 'JSON Parse error.' + }; + } + + if (c.error) { + ecb.call(args.error_scope || args.scope, c.error, x); + } else { + scb.call(args.success_scope || args.scope, c.result); + } + }; + + args.error = function(ty, x) { + if (ecb) { + ecb.call(args.error_scope || args.scope, ty, x); + } + }; + + args.data = JSON.serialize({ + id: args.id || 'c' + (this.count++), + method: args.method, + params: args.params + }); + + // JSON content type for Ruby on rails. Bug: #1883287 + args.content_type = 'application/json'; + + XHR.send(args); + } + }; + + return JSONRequest; +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/util/LocalStorage.js b/common/static/js/vendor/tinymce/js/tinymce/classes/util/LocalStorage.js new file mode 100755 index 0000000000..6a6d890c7e --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/util/LocalStorage.js @@ -0,0 +1,213 @@ +/** + * LocalStorage.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class will simulate LocalStorage on IE 7 and return the native version on modern browsers. + * Storage is done using userData on IE 7 and a special serialization format. The format is designed + * to be as small as possible by making sure that the keys and values doesn't need to be encoded. This + * makes it possible to store for example HTML data. + * + * Storage format for userData: + * ,,,,... + * + * For example this data key1=value1,key2=value2 would be: + * 4,key1,6,value1,4,key2,6,value2 + * + * @class tinymce.util.LocalStorage + * @static + * @version 4.0 + * @example + * tinymce.util.LocalStorage.setItem('key', 'value'); + * var value = tinymce.util.LocalStorage.getItem('key'); + */ +define("tinymce/util/LocalStorage", [], function() { + var LocalStorage, storageElm, items, keys, userDataKey, hasOldIEDataSupport; + + // Check for native support + try { + if (window.localStorage) { + return localStorage; + } + } catch (ex) { + // Ignore + } + + userDataKey = "tinymce"; + storageElm = document.documentElement; + hasOldIEDataSupport = !!storageElm.addBehavior; + + if (hasOldIEDataSupport) { + storageElm.addBehavior('#default#userData'); + } + + /** + * Gets the keys names and updates LocalStorage.length property. Since IE7 doesn't have any getters/setters. + */ + function updateKeys() { + keys = []; + + for (var key in items) { + keys.push(key); + } + + LocalStorage.length = keys.length; + } + + /** + * Loads the userData string and parses it into the items structure. + */ + function load() { + var key, data, value, pos = 0; + + items = {}; + + // localStorage can be disabled on WebKit/Gecko so make a dummy storage + if (!hasOldIEDataSupport) { + return; + } + + function next(end) { + var value, nextPos; + + nextPos = end !== undefined ? pos + end : data.indexOf(',', pos); + if (nextPos === -1 || nextPos > data.length) { + return null; + } + + value = data.substring(pos, nextPos); + pos = nextPos + 1; + + return value; + } + + storageElm.load(userDataKey); + data = storageElm.getAttribute(userDataKey) || ''; + + do { + var offset = next(); + if (offset === null) { + break; + } + + key = next(parseInt(offset, 32) || 0); + if (key !== null) { + offset = next(); + if (offset === null) { + break; + } + + value = next(parseInt(offset, 32) || 0); + + if (key) { + items[key] = value; + } + } + } while (key !== null); + + updateKeys(); + } + + /** + * Saves the items structure into a the userData format. + */ + function save() { + var value, data = ''; + + // localStorage can be disabled on WebKit/Gecko so make a dummy storage + if (!hasOldIEDataSupport) { + return; + } + + for (var key in items) { + value = items[key]; + data += (data ? ',' : '') + key.length.toString(32) + ',' + key + ',' + value.length.toString(32) + ',' + value; + } + + storageElm.setAttribute(userDataKey, data); + + try { + storageElm.save(userDataKey); + } catch (ex) { + // Ignore disk full + } + + updateKeys(); + } + + LocalStorage = { + /** + * Length of the number of items in storage. + * + * @property length + * @type Number + * @return {Number} Number of items in storage. + */ + //length:0, + + /** + * Returns the key name by index. + * + * @method key + * @param {Number} index Index of key to return. + * @return {String} Key value or null if it wasn't found. + */ + key: function(index) { + return keys[index]; + }, + + /** + * Returns the value if the specified key or null if it wasn't found. + * + * @method getItem + * @param {String} key Key of item to retrive. + * @return {String} Value of the specified item or null if it wasn't found. + */ + getItem: function(key) { + return key in items ? items[key] : null; + }, + + /** + * Sets the value of the specified item by it's key. + * + * @method setItem + * @param {String} key Key of the item to set. + * @param {String} value Value of the item to set. + */ + setItem: function(key, value) { + items[key] = "" + value; + save(); + }, + + /** + * Removes the specified item by key. + * + * @method removeItem + * @param {String} key Key of item to remove. + */ + removeItem: function(key) { + delete items[key]; + save(); + }, + + /** + * Removes all items. + * + * @method clear + */ + clear: function() { + items = {}; + save(); + } + }; + + load(); + + return LocalStorage; +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/util/Observable.js b/common/static/js/vendor/tinymce/js/tinymce/classes/util/Observable.js new file mode 100755 index 0000000000..ca17e677c5 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/util/Observable.js @@ -0,0 +1,250 @@ +/** + * Observable.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This mixin will add event binding logic to classes. + * + * @mixin tinymce.util.Observable + */ +define("tinymce/util/Observable", [ + "tinymce/util/Tools" +], function(Tools) { + var bindingsName = "__bindings"; + var nativeEvents = Tools.makeMap( + "focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange" + + " mouseout mouseenter mouseleave keydown keypress keyup contextmenu dragstart dragend dragover draggesture dragdrop drop drag", ' ' + ); + + function returnFalse() { + return false; + } + + function returnTrue() { + return true; + } + + return { + /** + * Fires the specified event by name. + * + * @method fire + * @param {String} name Name of the event to fire. + * @param {tinymce.Event/Object?} args Event arguments. + * @param {Boolean?} bubble True/false if the event is to be bubbled. + * @return {tinymce.Event} Event instance passed in converted into tinymce.Event instance. + * @example + * instance.fire('event', {...}); + */ + fire: function(name, args, bubble) { + var self = this, handlers, i, l, callback, parent; + + if (self.removed) { + return; + } + + name = name.toLowerCase(); + args = args || {}; + args.type = name; + + // Setup target is there isn't one + if (!args.target) { + args.target = self; + } + + // Add event delegation methods if they are missing + if (!args.preventDefault) { + // Add preventDefault method + args.preventDefault = function() { + args.isDefaultPrevented = returnTrue; + }; + + // Add stopPropagation + args.stopPropagation = function() { + args.isPropagationStopped = returnTrue; + }; + + // Add stopImmediatePropagation + args.stopImmediatePropagation = function() { + args.isImmediatePropagationStopped = returnTrue; + }; + + // Add event delegation states + args.isDefaultPrevented = returnFalse; + args.isPropagationStopped = returnFalse; + args.isImmediatePropagationStopped = returnFalse; + } + + //console.log(name, args); + + if (self[bindingsName]) { + handlers = self[bindingsName][name]; + + if (handlers) { + for (i = 0, l = handlers.length; i < l; i++) { + handlers[i] = callback = handlers[i]; + + // Stop immediate propagation if needed + if (args.isImmediatePropagationStopped()) { + break; + } + + // If callback returns false then prevent default and stop all propagation + if (callback.call(self, args) === false) { + args.preventDefault(); + return args; + } + } + } + } + + // Bubble event up to parents + if (bubble !== false && self.parent) { + parent = self.parent(); + while (parent && !args.isPropagationStopped()) { + parent.fire(name, args, false); + parent = parent.parent(); + } + } + + return args; + }, + + /** + * Binds an event listener to a specific event by name. + * + * @method on + * @param {String} name Event name or space separated list of events to bind. + * @param {callback} callback Callback to be executed when the event occurs. + * @param {Boolean} first Optional flag if the event should be prepended. Use this with care. + * @return {Object} Current class instance. + * @example + * instance.on('event', function(e) { + * // Callback logic + * }); + */ + on: function(name, callback, prepend) { + var self = this, bindings, handlers, names, i; + + if (callback === false) { + callback = function() { + return false; + }; + } + + if (callback) { + names = name.toLowerCase().split(' '); + i = names.length; + while (i--) { + name = names[i]; + + bindings = self[bindingsName]; + if (!bindings) { + bindings = self[bindingsName] = {}; + } + + handlers = bindings[name]; + if (!handlers) { + handlers = bindings[name] = []; + if (self.bindNative && nativeEvents[name]) { + self.bindNative(name); + } + } + + if (prepend) { + handlers.unshift(callback); + } else { + handlers.push(callback); + } + } + } + + return self; + }, + + /** + * Unbinds an event listener to a specific event by name. + * + * @method off + * @param {String?} name Name of the event to unbind. + * @param {callback?} callback Callback to unbind. + * @return {Object} Current class instance. + * @example + * // Unbind specific callback + * instance.off('event', handler); + * + * // Unbind all listeners by name + * instance.off('event'); + * + * // Unbind all events + * instance.off(); + */ + off: function(name, callback) { + var self = this, i, bindings = self[bindingsName], handlers, bindingName, names, hi; + + if (bindings) { + if (name) { + names = name.toLowerCase().split(' '); + i = names.length; + while (i--) { + name = names[i]; + handlers = bindings[name]; + + // Unbind all handlers + if (!name) { + for (bindingName in bindings) { + bindings[name].length = 0; + } + + return self; + } + + if (handlers) { + // Unbind all by name + if (!callback) { + handlers.length = 0; + } else { + // Unbind specific ones + hi = handlers.length; + while (hi--) { + if (handlers[hi] === callback) { + handlers.splice(hi, 1); + } + } + } + + if (!handlers.length && self.unbindNative && nativeEvents[name]) { + self.unbindNative(name); + delete bindings[name]; + } + } + } + } else { + if (self.unbindNative) { + for (name in bindings) { + self.unbindNative(name); + } + } + + self[bindingsName] = []; + } + } + + return self; + }, + + hasEventListeners: function(name) { + var bindings = this[bindingsName]; + + name = name.toLowerCase(); + + return !(!bindings || !bindings[name] || bindings[name].length === 0); + } + }; +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/util/Quirks.js b/common/static/js/vendor/tinymce/js/tinymce/classes/util/Quirks.js new file mode 100755 index 0000000000..27b610c551 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/util/Quirks.js @@ -0,0 +1,1139 @@ +/** + * Quirks.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + * + * @ignore-file + */ + +/** + * This file includes fixes for various browser quirks it's made to make it easy to add/remove browser specific fixes. + * + * @class tinymce.util.Quirks + */ +define("tinymce/util/Quirks", [ + "tinymce/util/VK", + "tinymce/dom/RangeUtils", + "tinymce/html/Node", + "tinymce/html/Entities", + "tinymce/Env", + "tinymce/util/Tools" +], function(VK, RangeUtils, Node, Entities, Env, Tools) { + return function(editor) { + var each = Tools.each; + var BACKSPACE = VK.BACKSPACE, DELETE = VK.DELETE, dom = editor.dom, selection = editor.selection, + settings = editor.settings, parser = editor.parser, serializer = editor.serializer; + var isGecko = Env.gecko, isIE = Env.ie, isWebKit = Env.webkit; + + /** + * Executes a command with a specific state this can be to enable/disable browser editing features. + */ + function setEditorCommandState(cmd, state) { + try { + editor.getDoc().execCommand(cmd, false, state); + } catch (ex) { + // Ignore + } + } + + /** + * Returns current IE document mode. + */ + function getDocumentMode() { + var documentMode = editor.getDoc().documentMode; + + return documentMode ? documentMode : 6; + } + + /** + * Returns true/false if the event is prevented or not. + * + * @private + * @param {Event} e Event object. + * @return {Boolean} true/false if the event is prevented or not. + */ + function isDefaultPrevented(e) { + return e.isDefaultPrevented(); + } + + /** + * Fixes a WebKit bug when deleting contents using backspace or delete key. + * WebKit will produce a span element if you delete across two block elements. + * + * Example: + *

    a

    |b

    + * + * Will produce this on backspace: + *

    ab

    + * + * This fixes the backspace to produce: + *

    a|b

    + * + * See bug: https://bugs.webkit.org/show_bug.cgi?id=45784 + * + * This fixes the following delete scenarios: + * 1. Delete by pressing backspace key. + * 2. Delete by pressing delete key. + * 3. Delete by pressing backspace key with ctrl/cmd (Word delete). + * 4. Delete by pressing delete key with ctrl/cmd (Word delete). + * 5. Delete by drag/dropping contents inside the editor. + * 6. Delete by using Cut Ctrl+X/Cmd+X. + * 7. Delete by selecting contents and writing a character.' + * + * This code is a ugly hack since writing full custom delete logic for just this bug + * fix seemed like a huge task. I hope we can remove this before the year 2030. + */ + function cleanupStylesWhenDeleting() { + var doc = editor.getDoc(), urlPrefix = 'data:text/mce-internal,'; + var MutationObserver = window.MutationObserver, olderWebKit; + + // Add mini polyfill for older WebKits + // TODO: Remove this when old Safari versions gets updated + if (!MutationObserver) { + olderWebKit = true; + + MutationObserver = function() { + var records = [], target; + + function nodeInsert(e) { + var target = e.relatedNode || e.target; + records.push({target: target, addedNodes: [target]}); + } + + function attrModified(e) { + var target = e.relatedNode || e.target; + records.push({target: target, attributeName: e.attrName}); + } + + this.observe = function(node) { + target = node; + target.addEventListener('DOMSubtreeModified', nodeInsert, false); + target.addEventListener('DOMNodeInsertedIntoDocument', nodeInsert, false); + target.addEventListener('DOMNodeInserted', nodeInsert, false); + target.addEventListener('DOMAttrModified', attrModified, false); + }; + + this.disconnect = function() { + target.removeEventListener('DOMNodeInserted', nodeInsert); + target.removeEventListener('DOMAttrModified', attrModified); + target.removeEventListener('DOMSubtreeModified', nodeInsert, false); + }; + + this.takeRecords = function() { + return records; + }; + }; + } + + function customDelete(isForward) { + var mutationObserver = new MutationObserver(function() {}); + + Tools.each(editor.getBody().getElementsByTagName('*'), function(elm) { + // Mark existing spans + if (elm.tagName == 'SPAN') { + elm.setAttribute('mce-data-marked', 1); + } + + // Make sure all elements has a data-mce-style attribute + if (!elm.hasAttribute('data-mce-style') && elm.hasAttribute('style')) { + editor.dom.setAttrib(elm, 'style', elm.getAttribute('style')); + } + }); + + // Observe added nodes and style attribute changes + mutationObserver.observe(editor.getDoc(), { + childList: true, + attributes: true, + subtree: true, + attributeFilter: ['style'] + }); + + editor.getDoc().execCommand(isForward ? 'ForwardDelete' : 'Delete', false, null); + + var rng = editor.selection.getRng(); + var caretElement = rng.startContainer.parentNode; + + Tools.each(mutationObserver.takeRecords(), function(record) { + // Restore style attribute to previous value + if (record.attributeName == "style") { + var oldValue = record.target.getAttribute('data-mce-style'); + + if (oldValue) { + record.target.setAttribute("style", oldValue); + } else { + record.target.removeAttribute("style"); + } + } + + // Remove all spans that isn't maked and retain selection + Tools.each(record.addedNodes, function(node) { + if (node.nodeName == "SPAN" && !node.getAttribute('mce-data-marked')) { + var offset, container; + + if (node == caretElement) { + offset = rng.startOffset; + container = node.firstChild; + } + + dom.remove(node, true); + + if (container) { + rng.setStart(container, offset); + rng.setEnd(container, offset); + editor.selection.setRng(rng); + } + } + }); + }); + + mutationObserver.disconnect(); + + // Remove any left over marks + Tools.each(editor.dom.select('span[mce-data-marked]'), function(span) { + span.removeAttribute('mce-data-marked'); + }); + } + + editor.on('keydown', function(e) { + var isForward = e.keyCode == DELETE, isMeta = VK.metaKeyPressed(e); + + if (!isDefaultPrevented(e) && (isForward || e.keyCode == BACKSPACE)) { + var rng = editor.selection.getRng(), container = rng.startContainer, offset = rng.startOffset; + + // Ignore non meta delete in the where there is text before/after the caret + if (!isMeta && rng.collapsed && container.nodeType == 3) { + if (isForward ? offset < container.data.length : offset > 0) { + return; + } + } + + e.preventDefault(); + + if (isMeta) { + editor.selection.getSel().modify("extend", isForward ? "forward" : "backward", "word"); + } + + customDelete(isForward); + } + }); + + editor.on('keypress', function(e) { + if (!isDefaultPrevented(e) && !selection.isCollapsed() && e.charCode && !VK.metaKeyPressed(e)) { + e.preventDefault(); + customDelete(true); + editor.selection.setContent(String.fromCharCode(e.charCode)); + } + }); + + editor.addCommand('Delete', function() { + customDelete(); + }); + + editor.addCommand('ForwardDelete', function() { + customDelete(true); + }); + + // Older WebKits doesn't properly handle the clipboard so we can't add the rest + if (olderWebKit) { + return; + } + + editor.on('dragstart', function(e) { + // Safari doesn't support custom dataTransfer items so we can only use URL and Text + e.dataTransfer.setData('URL', 'data:text/mce-internal,' + escape(editor.selection.getContent())); + }); + + editor.on('drop', function(e) { + if (!isDefaultPrevented(e)) { + var internalContent = e.dataTransfer.getData('URL'); + + if (!internalContent || internalContent.indexOf(urlPrefix) == -1 || !doc.caretRangeFromPoint) { + return; + } + + internalContent = unescape(internalContent.substr(urlPrefix.length)); + if (doc.caretRangeFromPoint) { + e.preventDefault(); + customDelete(); + editor.selection.setRng(doc.caretRangeFromPoint(e.x, e.y)); + editor.insertContent(internalContent); + } + } + }); + + editor.on('cut', function(e) { + if (!isDefaultPrevented(e) && e.clipboardData) { + e.preventDefault(); + e.clipboardData.clearData(); + e.clipboardData.setData('text/html', editor.selection.getContent()); + e.clipboardData.setData('text/plain', editor.selection.getContent({format: 'text'})); + customDelete(true); + } + }); + } + + /** + * Makes sure that the editor body becomes empty when backspace or delete is pressed in empty editors. + * + * For example: + *

    |

    + * + * Or: + *

    |

    + * + * Or: + * [

    ] + */ + function emptyEditorWhenDeleting() { + function serializeRng(rng) { + var body = dom.create("body"); + var contents = rng.cloneContents(); + body.appendChild(contents); + return selection.serializer.serialize(body, {format: 'html'}); + } + + function allContentsSelected(rng) { + if (!rng.setStart) { + if (rng.item) { + return false; + } + + var bodyRng = rng.duplicate(); + bodyRng.moveToElementText(editor.getBody()); + return RangeUtils.compareRanges(rng, bodyRng); + } + + var selection = serializeRng(rng); + + var allRng = dom.createRng(); + allRng.selectNode(editor.getBody()); + + var allSelection = serializeRng(allRng); + return selection === allSelection; + } + + editor.on('keydown', function(e) { + var keyCode = e.keyCode, isCollapsed, body; + + // Empty the editor if it's needed for example backspace at

    |

    + if (!isDefaultPrevented(e) && (keyCode == DELETE || keyCode == BACKSPACE)) { + isCollapsed = editor.selection.isCollapsed(); + body = editor.getBody(); + + // Selection is collapsed but the editor isn't empty + if (isCollapsed && !dom.isEmpty(body)) { + return; + } + + // Selection isn't collapsed but not all the contents is selected + if (!isCollapsed && !allContentsSelected(editor.selection.getRng())) { + return; + } + + // Manually empty the editor + e.preventDefault(); + editor.setContent(''); + + if (body.firstChild && dom.isBlock(body.firstChild)) { + editor.selection.setCursorLocation(body.firstChild, 0); + } else { + editor.selection.setCursorLocation(body, 0); + } + + editor.nodeChanged(); + } + }); + } + + /** + * WebKit doesn't select all the nodes in the body when you press Ctrl+A. + * IE selects more than the contents [

    a

    ] instead of

    [a] see bug #6438 + * This selects the whole body so that backspace/delete logic will delete everything + */ + function selectAll() { + editor.on('keydown', function(e) { + if (!isDefaultPrevented(e) && e.keyCode == 65 && VK.metaKeyPressed(e)) { + e.preventDefault(); + editor.execCommand('SelectAll'); + } + }); + } + + /** + * WebKit has a weird issue where it some times fails to properly convert keypresses to input method keystrokes. + * The IME on Mac doesn't initialize when it doesn't fire a proper focus event. + * + * This seems to happen when the user manages to click the documentElement element then the window doesn't get proper focus until + * you enter a character into the editor. + * + * It also happens when the first focus in made to the body. + * + * See: https://bugs.webkit.org/show_bug.cgi?id=83566 + */ + function inputMethodFocus() { + if (!editor.settings.content_editable) { + // Case 1 IME doesn't initialize if you focus the document + dom.bind(editor.getDoc(), 'focusin', function() { + selection.setRng(selection.getRng()); + }); + + // Case 2 IME doesn't initialize if you click the documentElement it also doesn't properly fire the focusin event + dom.bind(editor.getDoc(), 'mousedown', function(e) { + if (e.target == editor.getDoc().documentElement) { + editor.getBody().focus(); + selection.setRng(selection.getRng()); + } + }); + } + } + + /** + * Backspacing in FireFox/IE from a paragraph into a horizontal rule results in a floating text node because the + * browser just deletes the paragraph - the browser fails to merge the text node with a horizontal rule so it is + * left there. TinyMCE sees a floating text node and wraps it in a paragraph on the key up event (ForceBlocks.js + * addRootBlocks), meaning the action does nothing. With this code, FireFox/IE matche the behaviour of other + * browsers. + * + * It also fixes a bug on Firefox where it's impossible to delete HR elements. + */ + function removeHrOnBackspace() { + editor.on('keydown', function(e) { + if (!isDefaultPrevented(e) && e.keyCode === BACKSPACE) { + if (selection.isCollapsed() && selection.getRng(true).startOffset === 0) { + var node = selection.getNode(); + var previousSibling = node.previousSibling; + + if (node.nodeName == 'HR') { + dom.remove(node); + e.preventDefault(); + return; + } + + if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === "hr") { + dom.remove(previousSibling); + e.preventDefault(); + } + } + } + }); + } + + /** + * Firefox 3.x has an issue where the body element won't get proper focus if you click out + * side it's rectangle. + */ + function focusBody() { + // Fix for a focus bug in FF 3.x where the body element + // wouldn't get proper focus if the user clicked on the HTML element + if (!window.Range.prototype.getClientRects) { // Detect getClientRects got introduced in FF 4 + editor.on('mousedown', function(e) { + if (!isDefaultPrevented(e) && e.target.nodeName === "HTML") { + var body = editor.getBody(); + + // Blur the body it's focused but not correctly focused + body.blur(); + + // Refocus the body after a little while + setTimeout(function() { + body.focus(); + }, 0); + } + }); + } + } + + /** + * WebKit has a bug where it isn't possible to select image, hr or anchor elements + * by clicking on them so we need to fake that. + */ + function selectControlElements() { + editor.on('click', function(e) { + e = e.target; + + // Workaround for bug, http://bugs.webkit.org/show_bug.cgi?id=12250 + // WebKit can't even do simple things like selecting an image + // Needs tobe the setBaseAndExtend or it will fail to select floated images + if (/^(IMG|HR)$/.test(e.nodeName)) { + selection.getSel().setBaseAndExtent(e, 0, e, 1); + } + + if (e.nodeName == 'A' && dom.hasClass(e, 'mce-item-anchor')) { + selection.select(e); + } + + editor.nodeChanged(); + }); + } + + /** + * Fixes a Gecko bug where the style attribute gets added to the wrong element when deleting between two block elements. + * + * Fixes do backspace/delete on this: + *

    bla[ck

    r]ed

    + * + * Would become: + *

    bla|ed

    + * + * Instead of: + *

    bla|ed

    + */ + function removeStylesWhenDeletingAcrossBlockElements() { + function getAttributeApplyFunction() { + var template = dom.getAttribs(selection.getStart().cloneNode(false)); + + return function() { + var target = selection.getStart(); + + if (target !== editor.getBody()) { + dom.setAttrib(target, "style", null); + + each(template, function(attr) { + target.setAttributeNode(attr.cloneNode(true)); + }); + } + }; + } + + function isSelectionAcrossElements() { + return !selection.isCollapsed() && + dom.getParent(selection.getStart(), dom.isBlock) != dom.getParent(selection.getEnd(), dom.isBlock); + } + + editor.on('keypress', function(e) { + var applyAttributes; + + if (!isDefaultPrevented(e) && (e.keyCode == 8 || e.keyCode == 46) && isSelectionAcrossElements()) { + applyAttributes = getAttributeApplyFunction(); + editor.getDoc().execCommand('delete', false, null); + applyAttributes(); + e.preventDefault(); + return false; + } + }); + + dom.bind(editor.getDoc(), 'cut', function(e) { + var applyAttributes; + + if (!isDefaultPrevented(e) && isSelectionAcrossElements()) { + applyAttributes = getAttributeApplyFunction(); + + setTimeout(function() { + applyAttributes(); + }, 0); + } + }); + } + + /** + * Fire a nodeChanged when the selection is changed on WebKit this fixes selection issues on iOS5. It only fires the nodeChange + * event every 50ms since it would other wise update the UI when you type and it hogs the CPU. + */ + function selectionChangeNodeChanged() { + var lastRng, selectionTimer; + + editor.on('selectionchange', function() { + if (selectionTimer) { + clearTimeout(selectionTimer); + selectionTimer = 0; + } + + selectionTimer = window.setTimeout(function() { + if (editor.removed) { + return; + } + + var rng = selection.getRng(); + + // Compare the ranges to see if it was a real change or not + if (!lastRng || !RangeUtils.compareRanges(rng, lastRng)) { + editor.nodeChanged(); + lastRng = rng; + } + }, 50); + }); + } + + /** + * Screen readers on IE needs to have the role application set on the body. + */ + function ensureBodyHasRoleApplication() { + document.body.setAttribute("role", "application"); + } + + /** + * Backspacing into a table behaves differently depending upon browser type. + * Therefore, disable Backspace when cursor immediately follows a table. + */ + function disableBackspaceIntoATable() { + editor.on('keydown', function(e) { + if (!isDefaultPrevented(e) && e.keyCode === BACKSPACE) { + if (selection.isCollapsed() && selection.getRng(true).startOffset === 0) { + var previousSibling = selection.getNode().previousSibling; + if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === "table") { + e.preventDefault(); + return false; + } + } + } + }); + } + + /** + * Old IE versions can't properly render BR elements in PRE tags white in contentEditable mode. So this + * logic adds a \n before the BR so that it will get rendered. + */ + function addNewLinesBeforeBrInPre() { + // IE8+ rendering mode does the right thing with BR in PRE + if (getDocumentMode() > 7) { + return; + } + + // Enable display: none in area and add a specific class that hides all BR elements in PRE to + // avoid the caret from getting stuck at the BR elements while pressing the right arrow key + setEditorCommandState('RespectVisibilityInDesign', true); + editor.contentStyles.push('.mceHideBrInPre pre br {display: none}'); + dom.addClass(editor.getBody(), 'mceHideBrInPre'); + + // Adds a \n before all BR elements in PRE to get them visual + parser.addNodeFilter('pre', function(nodes) { + var i = nodes.length, brNodes, j, brElm, sibling; + + while (i--) { + brNodes = nodes[i].getAll('br'); + j = brNodes.length; + while (j--) { + brElm = brNodes[j]; + + // Add \n before BR in PRE elements on older IE:s so the new lines get rendered + sibling = brElm.prev; + if (sibling && sibling.type === 3 && sibling.value.charAt(sibling.value - 1) != '\n') { + sibling.value += '\n'; + } else { + brElm.parent.insert(new Node('#text', 3), brElm, true).value = '\n'; + } + } + } + }); + + // Removes any \n before BR elements in PRE since other browsers and in contentEditable=false mode they will be visible + serializer.addNodeFilter('pre', function(nodes) { + var i = nodes.length, brNodes, j, brElm, sibling; + + while (i--) { + brNodes = nodes[i].getAll('br'); + j = brNodes.length; + while (j--) { + brElm = brNodes[j]; + sibling = brElm.prev; + if (sibling && sibling.type == 3) { + sibling.value = sibling.value.replace(/\r?\n$/, ''); + } + } + } + }); + } + + /** + * Moves style width/height to attribute width/height when the user resizes an image on IE. + */ + function removePreSerializedStylesWhenSelectingControls() { + dom.bind(editor.getBody(), 'mouseup', function() { + var value, node = selection.getNode(); + + // Moved styles to attributes on IMG eements + if (node.nodeName == 'IMG') { + // Convert style width to width attribute + if ((value = dom.getStyle(node, 'width'))) { + dom.setAttrib(node, 'width', value.replace(/[^0-9%]+/g, '')); + dom.setStyle(node, 'width', ''); + } + + // Convert style height to height attribute + if ((value = dom.getStyle(node, 'height'))) { + dom.setAttrib(node, 'height', value.replace(/[^0-9%]+/g, '')); + dom.setStyle(node, 'height', ''); + } + } + }); + } + + /** + * Removes a blockquote when backspace is pressed at the beginning of it. + * + * For example: + *

    |x

    + * + * Becomes: + *

    |x

    + */ + function removeBlockQuoteOnBackSpace() { + // Add block quote deletion handler + editor.on('keydown', function(e) { + var rng, container, offset, root, parent; + + if (isDefaultPrevented(e) || e.keyCode != VK.BACKSPACE) { + return; + } + + rng = selection.getRng(); + container = rng.startContainer; + offset = rng.startOffset; + root = dom.getRoot(); + parent = container; + + if (!rng.collapsed || offset !== 0) { + return; + } + + while (parent && parent.parentNode && parent.parentNode.firstChild == parent && parent.parentNode != root) { + parent = parent.parentNode; + } + + // Is the cursor at the beginning of a blockquote? + if (parent.tagName === 'BLOCKQUOTE') { + // Remove the blockquote + editor.formatter.toggle('blockquote', null, parent); + + // Move the caret to the beginning of container + rng = dom.createRng(); + rng.setStart(container, 0); + rng.setEnd(container, 0); + selection.setRng(rng); + } + }); + } + + /** + * Sets various Gecko editing options on mouse down and before a execCommand to disable inline table editing that is broken etc. + */ + function setGeckoEditingOptions() { + function setOpts() { + editor._refreshContentEditable(); + + setEditorCommandState("StyleWithCSS", false); + setEditorCommandState("enableInlineTableEditing", false); + + if (!settings.object_resizing) { + setEditorCommandState("enableObjectResizing", false); + } + } + + if (!settings.readonly) { + editor.on('BeforeExecCommand MouseDown', setOpts); + } + } + + /** + * Fixes a gecko link bug, when a link is placed at the end of block elements there is + * no way to move the caret behind the link. This fix adds a bogus br element after the link. + * + * For example this: + *

    x

    + * + * Becomes this: + *

    x

    + */ + function addBrAfterLastLinks() { + function fixLinks() { + each(dom.select('a'), function(node) { + var parentNode = node.parentNode, root = dom.getRoot(); + + if (parentNode.lastChild === node) { + while (parentNode && !dom.isBlock(parentNode)) { + if (parentNode.parentNode.lastChild !== parentNode || parentNode === root) { + return; + } + + parentNode = parentNode.parentNode; + } + + dom.add(parentNode, 'br', {'data-mce-bogus': 1}); + } + }); + } + + editor.on('SetContent ExecCommand', function(e) { + if (e.type == "setcontent" || e.command === 'mceInsertLink') { + fixLinks(); + } + }); + } + + /** + * WebKit will produce DIV elements here and there by default. But since TinyMCE uses paragraphs by + * default we want to change that behavior. + */ + function setDefaultBlockType() { + if (settings.forced_root_block) { + editor.on('init', function() { + setEditorCommandState('DefaultParagraphSeparator', settings.forced_root_block); + }); + } + } + + /** + * Removes ghost selections from images/tables on Gecko. + */ + function removeGhostSelection() { + editor.on('Undo Redo SetContent', function(e) { + if (!e.initial) { + editor.execCommand('mceRepaint'); + } + }); + } + + /** + * Deletes the selected image on IE instead of navigating to previous page. + */ + function deleteControlItemOnBackSpace() { + editor.on('keydown', function(e) { + var rng; + + if (!isDefaultPrevented(e) && e.keyCode == BACKSPACE) { + rng = editor.getDoc().selection.createRange(); + if (rng && rng.item) { + e.preventDefault(); + editor.undoManager.beforeChange(); + dom.remove(rng.item(0)); + editor.undoManager.add(); + } + } + }); + } + + /** + * IE10 doesn't properly render block elements with the right height until you add contents to them. + * This fixes that by adding a padding-right to all empty text block elements. + * See: https://connect.microsoft.com/IE/feedback/details/743881 + */ + function renderEmptyBlocksFix() { + var emptyBlocksCSS; + + // IE10+ + if (getDocumentMode() >= 10) { + emptyBlocksCSS = ''; + each('p div h1 h2 h3 h4 h5 h6'.split(' '), function(name, i) { + emptyBlocksCSS += (i > 0 ? ',' : '') + name + ':empty'; + }); + + editor.contentStyles.push(emptyBlocksCSS + '{padding-right: 1px !important}'); + } + } + + /** + * Old IE versions can't retain contents within noscript elements so this logic will store the contents + * as a attribute and the insert that value as it's raw text when the DOM is serialized. + */ + function keepNoScriptContents() { + if (getDocumentMode() < 9) { + parser.addNodeFilter('noscript', function(nodes) { + var i = nodes.length, node, textNode; + + while (i--) { + node = nodes[i]; + textNode = node.firstChild; + + if (textNode) { + node.attr('data-mce-innertext', textNode.value); + } + } + }); + + serializer.addNodeFilter('noscript', function(nodes) { + var i = nodes.length, node, textNode, value; + + while (i--) { + node = nodes[i]; + textNode = nodes[i].firstChild; + + if (textNode) { + textNode.value = Entities.decode(textNode.value); + } else { + // Old IE can't retain noscript value so an attribute is used to store it + value = node.attributes.map['data-mce-innertext']; + if (value) { + node.attr('data-mce-innertext', null); + textNode = new Node('#text', 3); + textNode.value = value; + textNode.raw = true; + node.append(textNode); + } + } + } + }); + } + } + + /** + * IE has an issue where you can't select/move the caret by clicking outside the body if the document is in standards mode. + */ + function fixCaretSelectionOfDocumentElementOnIe() { + var doc = dom.doc, body = doc.body, started, startRng, htmlElm; + + // Return range from point or null if it failed + function rngFromPoint(x, y) { + var rng = body.createTextRange(); + + try { + rng.moveToPoint(x, y); + } catch (ex) { + // IE sometimes throws and exception, so lets just ignore it + rng = null; + } + + return rng; + } + + // Fires while the selection is changing + function selectionChange(e) { + var pointRng; + + // Check if the button is down or not + if (e.button) { + // Create range from mouse position + pointRng = rngFromPoint(e.x, e.y); + + if (pointRng) { + // Check if pointRange is before/after selection then change the endPoint + if (pointRng.compareEndPoints('StartToStart', startRng) > 0) { + pointRng.setEndPoint('StartToStart', startRng); + } else { + pointRng.setEndPoint('EndToEnd', startRng); + } + + pointRng.select(); + } + } else { + endSelection(); + } + } + + // Removes listeners + function endSelection() { + var rng = doc.selection.createRange(); + + // If the range is collapsed then use the last start range + if (startRng && !rng.item && rng.compareEndPoints('StartToEnd', rng) === 0) { + startRng.select(); + } + + dom.unbind(doc, 'mouseup', endSelection); + dom.unbind(doc, 'mousemove', selectionChange); + startRng = started = 0; + } + + // Make HTML element unselectable since we are going to handle selection by hand + doc.documentElement.unselectable = true; + + // Detect when user selects outside BODY + dom.bind(doc, 'mousedown contextmenu', function(e) { + if (e.target.nodeName === 'HTML') { + if (started) { + endSelection(); + } + + // Detect vertical scrollbar, since IE will fire a mousedown on the scrollbar and have target set as HTML + htmlElm = doc.documentElement; + if (htmlElm.scrollHeight > htmlElm.clientHeight) { + return; + } + + started = 1; + // Setup start position + startRng = rngFromPoint(e.x, e.y); + if (startRng) { + // Listen for selection change events + dom.bind(doc, 'mouseup', endSelection); + dom.bind(doc, 'mousemove', selectionChange); + + dom.getRoot().focus(); + startRng.select(); + } + } + }); + } + + /** + * Fixes selection issues where the caret can be placed between two inline elements like a|b + * this fix will lean the caret right into the closest inline element. + */ + function normalizeSelection() { + // Normalize selection for example a|a becomes a|a except for Ctrl+A since it selects everything + editor.on('keyup focusin mouseup', function(e) { + if (e.keyCode != 65 || !VK.metaKeyPressed(e)) { + selection.normalize(); + } + }, true); + } + + /** + * Forces Gecko to render a broken image icon if it fails to load an image. + */ + function showBrokenImageIcon() { + editor.contentStyles.push( + 'img:-moz-broken {' + + '-moz-force-broken-image-icon:1;' + + 'min-width:24px;' + + 'min-height:24px' + + '}' + ); + } + + /** + * iOS has a bug where it's impossible to type if the document has a touchstart event + * bound and the user touches the document while having the on screen keyboard visible. + * + * The touch event moves the focus to the parent document while having the caret inside the iframe + * this fix moves the focus back into the iframe document. + */ + function restoreFocusOnKeyDown() { + if (!editor.inline) { + editor.on('keydown', function() { + if (document.activeElement == document.body) { + editor.getWin().focus(); + } + }); + } + } + + /** + * IE 11 has an annoying issue where you can't move focus into the editor + * by clicking on the white area HTML element. We used to be able to to fix this with + * the fixCaretSelectionOfDocumentElementOnIe fix. But since M$ removed the selection + * object it's not possible anymore. So we need to hack in a ungly CSS to force the + * body to be at least 150px. If the user clicks the HTML element out side this 150px region + * we simply move the focus into the first paragraph. Not ideal since you loose the + * positioning of the caret but goot enough for most cases. + */ + function bodyHeight() { + if (!editor.inline) { + editor.contentStyles.push('body {min-height: 150px}'); + editor.on('click', function(e) { + if (e.target.nodeName == 'HTML') { + editor.getBody().focus(); + editor.selection.normalize(); + editor.nodeChanged(); + } + }); + } + } + + /** + * Firefox on Mac OS will move the browser back to the previous page if you press CMD+Left arrow. + * You might then loose all your work so we need to block that behavior and replace it with our own. + */ + function blockCmdArrowNavigation() { + if (Env.mac) { + editor.on('keydown', function(e) { + if (VK.metaKeyPressed(e) && (e.keyCode == 37 || e.keyCode == 39)) { + e.preventDefault(); + editor.selection.getSel().modify('move', e.keyCode == 37 ? 'backward' : 'forward', 'word'); + } + }); + } + } + + /** + * Disables the autolinking in IE 9+ this is then re-enabled by the autolink plugin. + */ + function disableAutoUrlDetect() { + setEditorCommandState("AutoUrlDetect", false); + } + + /** + * IE 11 has a fantastic bug where it will produce two trailing BR elements to iframe bodies when + * the iframe is hidden by display: none on a parent container. The DOM is actually out of sync + * with innerHTML in this case. It's like IE adds shadow DOM BR elements that appears on innerHTML + * but not as the lastChild of the body. However is we add a BR element to the body then remove it + * it doesn't seem to add these BR elements makes sence right?! + * + * Example of what happens: text becomes text

    + */ + function doubleTrailingBrElements() { + if (!editor.inline) { + editor.on('focus blur', function() { + var br = editor.dom.create('br'); + editor.getBody().appendChild(br); + br.parentNode.removeChild(br); + }, true); + } + } + + /** + * iOS 7.1 introduced two new bugs: + * 1) It's possible to open links within a contentEditable area by clicking on them. + * 2) If you hold down the finger it will display the link/image touch callout menu. + */ + function tapLinksAndImages() { + editor.on('click', function(e) { + if (e.target.tagName === 'A') { + e.preventDefault(); + } + }); + + editor.contentStyles.push('.mce-content-body {-webkit-touch-callout: none}'); + } + + // All browsers + disableBackspaceIntoATable(); + removeBlockQuoteOnBackSpace(); + emptyEditorWhenDeleting(); + normalizeSelection(); + + // WebKit + if (isWebKit) { + cleanupStylesWhenDeleting(); + inputMethodFocus(); + selectControlElements(); + setDefaultBlockType(); + + // iOS + if (Env.iOS) { + selectionChangeNodeChanged(); + restoreFocusOnKeyDown(); + bodyHeight(); + tapLinksAndImages(); + } else { + selectAll(); + } + } + + // IE + if (isIE && Env.ie < 11) { + removeHrOnBackspace(); + ensureBodyHasRoleApplication(); + addNewLinesBeforeBrInPre(); + removePreSerializedStylesWhenSelectingControls(); + deleteControlItemOnBackSpace(); + renderEmptyBlocksFix(); + keepNoScriptContents(); + fixCaretSelectionOfDocumentElementOnIe(); + } + + if (Env.ie >= 11) { + bodyHeight(); + doubleTrailingBrElements(); + } + + if (Env.ie) { + selectAll(); + disableAutoUrlDetect(); + } + + // Gecko + if (isGecko) { + removeHrOnBackspace(); + focusBody(); + removeStylesWhenDeletingAcrossBlockElements(); + setGeckoEditingOptions(); + addBrAfterLastLinks(); + removeGhostSelection(); + showBrokenImageIcon(); + blockCmdArrowNavigation(); + } + }; +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/util/Tools.js b/common/static/js/vendor/tinymce/js/tinymce/classes/util/Tools.js new file mode 100755 index 0000000000..c30101b5e3 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/util/Tools.js @@ -0,0 +1,503 @@ +/** + * Tools.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class contains various utlity functions. These are also exposed + * directly on the tinymce namespace. + * + * @class tinymce.util.Tools + */ +define("tinymce/util/Tools", [], function() { + /** + * Removes whitespace from the beginning and end of a string. + * + * @method trim + * @param {String} s String to remove whitespace from. + * @return {String} New string with removed whitespace. + */ + var whiteSpaceRegExp = /^\s*|\s*$/g; + + function trim(str) { + return (str === null || str === undefined) ? '' : ("" + str).replace(whiteSpaceRegExp, ''); + } + + /** + * Returns true/false if the object is an array or not. + * + * @method isArray + * @param {Object} obj Object to check. + * @return {boolean} true/false state if the object is an array or not. + */ + var isArray = Array.isArray || function(obj) { + return Object.prototype.toString.call(obj) === "[object Array]"; + }; + + /** + * Checks if a object is of a specific type for example an array. + * + * @method is + * @param {Object} o Object to check type of. + * @param {string} t Optional type to check for. + * @return {Boolean} true/false if the object is of the specified type. + */ + function is(o, t) { + if (!t) { + return o !== undefined; + } + + if (t == 'array' && isArray(o)) { + return true; + } + + return typeof(o) == t; + } + + /** + * Converts the specified object into a real JavaScript array. + * + * @method toArray + * @param {Object} obj Object to convert into array. + * @return {Array} Array object based in input. + */ + function toArray(obj) { + var array = [], i, l; + + for (i = 0, l = obj.length; i < l; i++) { + array[i] = obj[i]; + } + + return array; + } + + /** + * Makes a name/object map out of an array with names. + * + * @method makeMap + * @param {Array/String} items Items to make map out of. + * @param {String} delim Optional delimiter to split string by. + * @param {Object} map Optional map to add items to. + * @return {Object} Name/value map of items. + */ + function makeMap(items, delim, map) { + var i; + + items = items || []; + delim = delim || ','; + + if (typeof(items) == "string") { + items = items.split(delim); + } + + map = map || {}; + + i = items.length; + while (i--) { + map[items[i]] = {}; + } + + return map; + } + + /** + * Performs an iteration of all items in a collection such as an object or array. This method will execure the + * callback function for each item in the collection, if the callback returns false the iteration will terminate. + * The callback has the following format: cb(value, key_or_index). + * + * @method each + * @param {Object} o Collection to iterate. + * @param {function} cb Callback function to execute for each item. + * @param {Object} s Optional scope to execute the callback in. + * @example + * // Iterate an array + * tinymce.each([1,2,3], function(v, i) { + * console.debug("Value: " + v + ", Index: " + i); + * }); + * + * // Iterate an object + * tinymce.each({a: 1, b: 2, c: 3], function(v, k) { + * console.debug("Value: " + v + ", Key: " + k); + * }); + */ + function each(o, cb, s) { + var n, l; + + if (!o) { + return 0; + } + + s = s || o; + + if (o.length !== undefined) { + // Indexed arrays, needed for Safari + for (n = 0, l = o.length; n < l; n++) { + if (cb.call(s, o[n], n, o) === false) { + return 0; + } + } + } else { + // Hashtables + for (n in o) { + if (o.hasOwnProperty(n)) { + if (cb.call(s, o[n], n, o) === false) { + return 0; + } + } + } + } + + return 1; + } + + /** + * Creates a new array by the return value of each iteration function call. This enables you to convert + * one array list into another. + * + * @method map + * @param {Array} a Array of items to iterate. + * @param {function} f Function to call for each item. It's return value will be the new value. + * @return {Array} Array with new values based on function return values. + */ + function map(a, f) { + var o = []; + + each(a, function(v) { + o.push(f(v)); + }); + + return o; + } + + /** + * Filters out items from the input array by calling the specified function for each item. + * If the function returns false the item will be excluded if it returns true it will be included. + * + * @method grep + * @param {Array} a Array of items to loop though. + * @param {function} f Function to call for each item. Include/exclude depends on it's return value. + * @return {Array} New array with values imported and filtered based in input. + * @example + * // Filter out some items, this will return an array with 4 and 5 + * var items = tinymce.grep([1,2,3,4,5], function(v) {return v > 3;}); + */ + function grep(a, f) { + var o = []; + + each(a, function(v) { + if (!f || f(v)) { + o.push(v); + } + }); + + return o; + } + + /** + * Creates a class, subclass or static singleton. + * More details on this method can be found in the Wiki. + * + * @method create + * @param {String} s Class name, inheritage and prefix. + * @param {Object} p Collection of methods to add to the class. + * @param {Object} root Optional root object defaults to the global window object. + * @example + * // Creates a basic class + * tinymce.create('tinymce.somepackage.SomeClass', { + * SomeClass: function() { + * // Class constructor + * }, + * + * method: function() { + * // Some method + * } + * }); + * + * // Creates a basic subclass class + * tinymce.create('tinymce.somepackage.SomeSubClass:tinymce.somepackage.SomeClass', { + * SomeSubClass: function() { + * // Class constructor + * this.parent(); // Call parent constructor + * }, + * + * method: function() { + * // Some method + * this.parent(); // Call parent method + * }, + * + * 'static': { + * staticMethod: function() { + * // Static method + * } + * } + * }); + * + * // Creates a singleton/static class + * tinymce.create('static tinymce.somepackage.SomeSingletonClass', { + * method: function() { + * // Some method + * } + * }); + */ + function create(s, p, root) { + var self = this, sp, ns, cn, scn, c, de = 0; + + // Parse : : + s = /^((static) )?([\w.]+)(:([\w.]+))?/.exec(s); + cn = s[3].match(/(^|\.)(\w+)$/i)[2]; // Class name + + // Create namespace for new class + ns = self.createNS(s[3].replace(/\.\w+$/, ''), root); + + // Class already exists + if (ns[cn]) { + return; + } + + // Make pure static class + if (s[2] == 'static') { + ns[cn] = p; + + if (this.onCreate) { + this.onCreate(s[2], s[3], ns[cn]); + } + + return; + } + + // Create default constructor + if (!p[cn]) { + p[cn] = function() {}; + de = 1; + } + + // Add constructor and methods + ns[cn] = p[cn]; + self.extend(ns[cn].prototype, p); + + // Extend + if (s[5]) { + sp = self.resolve(s[5]).prototype; + scn = s[5].match(/\.(\w+)$/i)[1]; // Class name + + // Extend constructor + c = ns[cn]; + if (de) { + // Add passthrough constructor + ns[cn] = function() { + return sp[scn].apply(this, arguments); + }; + } else { + // Add inherit constructor + ns[cn] = function() { + this.parent = sp[scn]; + return c.apply(this, arguments); + }; + } + ns[cn].prototype[cn] = ns[cn]; + + // Add super methods + self.each(sp, function(f, n) { + ns[cn].prototype[n] = sp[n]; + }); + + // Add overridden methods + self.each(p, function(f, n) { + // Extend methods if needed + if (sp[n]) { + ns[cn].prototype[n] = function() { + this.parent = sp[n]; + return f.apply(this, arguments); + }; + } else { + if (n != cn) { + ns[cn].prototype[n] = f; + } + } + }); + } + + // Add static methods + /*jshint sub:true*/ + self.each(p['static'], function(f, n) { + ns[cn][n] = f; + }); + } + + /** + * Returns the index of a value in an array, this method will return -1 if the item wasn't found. + * + * @method inArray + * @param {Array} a Array/Object to search for value in. + * @param {Object} v Value to check for inside the array. + * @return {Number/String} Index of item inside the array inside an object. Or -1 if it wasn't found. + * @example + * // Get index of value in array this will alert 1 since 2 is at that index + * alert(tinymce.inArray([1,2,3], 2)); + */ + function inArray(a, v) { + var i, l; + + if (a) { + for (i = 0, l = a.length; i < l; i++) { + if (a[i] === v) { + return i; + } + } + } + + return -1; + } + + function extend(obj, ext) { + var i, l, name, args = arguments, value; + + for (i = 1, l = args.length; i < l; i++) { + ext = args[i]; + for (name in ext) { + if (ext.hasOwnProperty(name)) { + value = ext[name]; + + if (value !== undefined) { + obj[name] = value; + } + } + } + } + + return obj; + } + + /** + * Executed the specified function for each item in a object tree. + * + * @method walk + * @param {Object} o Object tree to walk though. + * @param {function} f Function to call for each item. + * @param {String} n Optional name of collection inside the objects to walk for example childNodes. + * @param {String} s Optional scope to execute the function in. + */ + function walk(o, f, n, s) { + s = s || this; + + if (o) { + if (n) { + o = o[n]; + } + + each(o, function(o, i) { + if (f.call(s, o, i, n) === false) { + return false; + } + + walk(o, f, n, s); + }); + } + } + + /** + * Creates a namespace on a specific object. + * + * @method createNS + * @param {String} n Namespace to create for example a.b.c.d. + * @param {Object} o Optional object to add namespace to, defaults to window. + * @return {Object} New namespace object the last item in path. + * @example + * // Create some namespace + * tinymce.createNS('tinymce.somepackage.subpackage'); + * + * // Add a singleton + * var tinymce.somepackage.subpackage.SomeSingleton = { + * method: function() { + * // Some method + * } + * }; + */ + function createNS(n, o) { + var i, v; + + o = o || window; + + n = n.split('.'); + for (i = 0; i < n.length; i++) { + v = n[i]; + + if (!o[v]) { + o[v] = {}; + } + + o = o[v]; + } + + return o; + } + + /** + * Resolves a string and returns the object from a specific structure. + * + * @method resolve + * @param {String} n Path to resolve for example a.b.c.d. + * @param {Object} o Optional object to search though, defaults to window. + * @return {Object} Last object in path or null if it couldn't be resolved. + * @example + * // Resolve a path into an object reference + * var obj = tinymce.resolve('a.b.c.d'); + */ + function resolve(n, o) { + var i, l; + + o = o || window; + + n = n.split('.'); + for (i = 0, l = n.length; i < l; i++) { + o = o[n[i]]; + + if (!o) { + break; + } + } + + return o; + } + + /** + * Splits a string but removes the whitespace before and after each value. + * + * @method explode + * @param {string} s String to split. + * @param {string} d Delimiter to split by. + * @example + * // Split a string into an array with a,b,c + * var arr = tinymce.explode('a, b, c'); + */ + function explode(s, d) { + if (!s || is(s, 'array')) { + return s; + } + + return map(s.split(d || ','), trim); + } + + return { + trim: trim, + isArray: isArray, + is: is, + toArray: toArray, + makeMap: makeMap, + each: each, + map: map, + grep: grep, + inArray: inArray, + extend: extend, + create: create, + walk: walk, + createNS: createNS, + resolve: resolve, + explode: explode + }; +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/util/URI.js b/common/static/js/vendor/tinymce/js/tinymce/classes/util/URI.js new file mode 100755 index 0000000000..5529ad0207 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/util/URI.js @@ -0,0 +1,366 @@ +/** + * URI.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class handles parsing, modification and serialization of URI/URL strings. + * @class tinymce.util.URI + */ +define("tinymce/util/URI", [ + "tinymce/util/Tools" +], function(Tools) { + var each = Tools.each, trim = Tools.trim; + + /** + * Constructs a new URI instance. + * + * @constructor + * @method URI + * @param {String} url URI string to parse. + * @param {Object} settings Optional settings object. + */ + function URI(url, settings) { + var self = this, baseUri, base_url; + + // Trim whitespace + url = trim(url); + + // Default settings + settings = self.settings = settings || {}; + + // Strange app protocol that isn't http/https or local anchor + // For example: mailto,skype,tel etc. + if (/^([\w\-]+):([^\/]{2})/i.test(url) || /^\s*#/.test(url)) { + self.source = url; + return; + } + + var isProtocolRelative = url.indexOf('//') === 0; + + // Absolute path with no host, fake host and protocol + if (url.indexOf('/') === 0 && !isProtocolRelative) { + url = (settings.base_uri ? settings.base_uri.protocol || 'http' : 'http') + '://mce_host' + url; + } + + // Relative path http:// or protocol relative //path + if (!/^[\w\-]*:?\/\//.test(url)) { + base_url = settings.base_uri ? settings.base_uri.path : new URI(location.href).directory; + if (settings.base_uri.protocol === "") { + url = '//mce_host' + self.toAbsPath(base_url, url); + } else { + url = ((settings.base_uri && settings.base_uri.protocol) || 'http') + '://mce_host' + self.toAbsPath(base_url, url); + } + } + + // Parse URL (Credits goes to Steave, http://blog.stevenlevithan.com/archives/parseuri) + url = url.replace(/@@/g, '(mce_at)'); // Zope 3 workaround, they use @@something + + /*jshint maxlen: 255 */ + /*eslint max-len: 0 */ + url = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(url); + + each(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"], function(v, i) { + var part = url[i]; + + // Zope 3 workaround, they use @@something + if (part) { + part = part.replace(/\(mce_at\)/g, '@@'); + } + + self[v] = part; + }); + + baseUri = settings.base_uri; + if (baseUri) { + if (!self.protocol) { + self.protocol = baseUri.protocol; + } + + if (!self.userInfo) { + self.userInfo = baseUri.userInfo; + } + + if (!self.port && self.host === 'mce_host') { + self.port = baseUri.port; + } + + if (!self.host || self.host === 'mce_host') { + self.host = baseUri.host; + } + + self.source = ''; + } + + if (isProtocolRelative) { + self.protocol = ''; + } + + //t.path = t.path || '/'; + } + + URI.prototype = { + /** + * Sets the internal path part of the URI. + * + * @method setPath + * @param {string} path Path string to set. + */ + setPath: function(path) { + var self = this; + + path = /^(.*?)\/?(\w+)?$/.exec(path); + + // Update path parts + self.path = path[0]; + self.directory = path[1]; + self.file = path[2]; + + // Rebuild source + self.source = ''; + self.getURI(); + }, + + /** + * Converts the specified URI into a relative URI based on the current URI instance location. + * + * @method toRelative + * @param {String} uri URI to convert into a relative path/URI. + * @return {String} Relative URI from the point specified in the current URI instance. + * @example + * // Converts an absolute URL to an relative URL url will be somedir/somefile.htm + * var url = new tinymce.util.URI('http://www.site.com/dir/').toRelative('http://www.site.com/dir/somedir/somefile.htm'); + */ + toRelative: function(uri) { + var self = this, output; + + if (uri === "./") { + return uri; + } + + uri = new URI(uri, {base_uri: self}); + + // Not on same domain/port or protocol + if ((uri.host != 'mce_host' && self.host != uri.host && uri.host) || self.port != uri.port || + (self.protocol != uri.protocol && uri.protocol !== "")) { + return uri.getURI(); + } + + var tu = self.getURI(), uu = uri.getURI(); + + // Allow usage of the base_uri when relative_urls = true + if (tu == uu || (tu.charAt(tu.length - 1) == "/" && tu.substr(0, tu.length - 1) == uu)) { + return tu; + } + + output = self.toRelPath(self.path, uri.path); + + // Add query + if (uri.query) { + output += '?' + uri.query; + } + + // Add anchor + if (uri.anchor) { + output += '#' + uri.anchor; + } + + return output; + }, + + /** + * Converts the specified URI into a absolute URI based on the current URI instance location. + * + * @method toAbsolute + * @param {String} uri URI to convert into a relative path/URI. + * @param {Boolean} noHost No host and protocol prefix. + * @return {String} Absolute URI from the point specified in the current URI instance. + * @example + * // Converts an relative URL to an absolute URL url will be http://www.site.com/dir/somedir/somefile.htm + * var url = new tinymce.util.URI('http://www.site.com/dir/').toAbsolute('somedir/somefile.htm'); + */ + toAbsolute: function(uri, noHost) { + uri = new URI(uri, {base_uri: this}); + + return uri.getURI(this.host == uri.host && this.protocol == uri.protocol ? noHost : 0); + }, + + /** + * Converts a absolute path into a relative path. + * + * @method toRelPath + * @param {String} base Base point to convert the path from. + * @param {String} path Absolute path to convert into a relative path. + */ + toRelPath: function(base, path) { + var items, breakPoint = 0, out = '', i, l; + + // Split the paths + base = base.substring(0, base.lastIndexOf('/')); + base = base.split('/'); + items = path.split('/'); + + if (base.length >= items.length) { + for (i = 0, l = base.length; i < l; i++) { + if (i >= items.length || base[i] != items[i]) { + breakPoint = i + 1; + break; + } + } + } + + if (base.length < items.length) { + for (i = 0, l = items.length; i < l; i++) { + if (i >= base.length || base[i] != items[i]) { + breakPoint = i + 1; + break; + } + } + } + + if (breakPoint === 1) { + return path; + } + + for (i = 0, l = base.length - (breakPoint - 1); i < l; i++) { + out += "../"; + } + + for (i = breakPoint - 1, l = items.length; i < l; i++) { + if (i != breakPoint - 1) { + out += "/" + items[i]; + } else { + out += items[i]; + } + } + + return out; + }, + + /** + * Converts a relative path into a absolute path. + * + * @method toAbsPath + * @param {String} base Base point to convert the path from. + * @param {String} path Relative path to convert into an absolute path. + */ + toAbsPath: function(base, path) { + var i, nb = 0, o = [], tr, outPath; + + // Split paths + tr = /\/$/.test(path) ? '/' : ''; + base = base.split('/'); + path = path.split('/'); + + // Remove empty chunks + each(base, function(k) { + if (k) { + o.push(k); + } + }); + + base = o; + + // Merge relURLParts chunks + for (i = path.length - 1, o = []; i >= 0; i--) { + // Ignore empty or . + if (path[i].length === 0 || path[i] === ".") { + continue; + } + + // Is parent + if (path[i] === '..') { + nb++; + continue; + } + + // Move up + if (nb > 0) { + nb--; + continue; + } + + o.push(path[i]); + } + + i = base.length - nb; + + // If /a/b/c or / + if (i <= 0) { + outPath = o.reverse().join('/'); + } else { + outPath = base.slice(0, i).join('/') + '/' + o.reverse().join('/'); + } + + // Add front / if it's needed + if (outPath.indexOf('/') !== 0) { + outPath = '/' + outPath; + } + + // Add traling / if it's needed + if (tr && outPath.lastIndexOf('/') !== outPath.length - 1) { + outPath += tr; + } + + return outPath; + }, + + /** + * Returns the full URI of the internal structure. + * + * @method getURI + * @param {Boolean} noProtoHost Optional no host and protocol part. Defaults to false. + */ + getURI: function(noProtoHost) { + var s, self = this; + + // Rebuild source + if (!self.source || noProtoHost) { + s = ''; + + if (!noProtoHost) { + if (self.protocol) { + s += self.protocol + '://'; + } else { + s += '//'; + } + + if (self.userInfo) { + s += self.userInfo + '@'; + } + + if (self.host) { + s += self.host; + } + + if (self.port) { + s += ':' + self.port; + } + } + + if (self.path) { + s += self.path; + } + + if (self.query) { + s += '?' + self.query; + } + + if (self.anchor) { + s += '#' + self.anchor; + } + + self.source = s; + } + + return self.source; + } + }; + + return URI; +}); diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/util/VK.js b/common/static/js/vendor/tinymce/js/tinymce/classes/util/VK.js new file mode 100755 index 0000000000..9640bc6dc8 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/util/VK.js @@ -0,0 +1,37 @@ +/** + * VK.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This file exposes a set of the common KeyCodes for use. Please grow it as needed. + */ +define("tinymce/util/VK", [ + "tinymce/Env" +], function(Env) { + return { + BACKSPACE: 8, + DELETE: 46, + DOWN: 40, + ENTER: 13, + LEFT: 37, + RIGHT: 39, + SPACEBAR: 32, + TAB: 9, + UP: 38, + + modifierPressed: function(e) { + return e.shiftKey || e.ctrlKey || e.altKey; + }, + + metaKeyPressed: function(e) { + // Check if ctrl or meta key is pressed also check if alt is false for Polish users + return (Env.mac ? e.metaKey : e.ctrlKey) && !e.altKey; + } + }; +}); diff --git a/common/static/js/vendor/tinymce/js/tinymce/classes/util/XHR.js b/common/static/js/vendor/tinymce/js/tinymce/classes/util/XHR.js new file mode 100755 index 0000000000..7b87fbc463 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/classes/util/XHR.js @@ -0,0 +1,84 @@ +/** + * XHR.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class enables you to send XMLHTTPRequests cross browser. + * @class tinymce.util.XHR + * @static + * @example + * // Sends a low level Ajax request + * tinymce.util.XHR.send({ + * url: 'someurl', + * success: function(text) { + * console.debug(text); + * } + * }); + */ +define("tinymce/util/XHR", [], function() { + return { + /** + * Sends a XMLHTTPRequest. + * Consult the Wiki for details on what settings this method takes. + * + * @method send + * @param {Object} settings Object will target URL, callbacks and other info needed to make the request. + */ + send: function(settings) { + var xhr, count = 0; + + function ready() { + if (!settings.async || xhr.readyState == 4 || count++ > 10000) { + if (settings.success && count < 10000 && xhr.status == 200) { + settings.success.call(settings.success_scope, '' + xhr.responseText, xhr, settings); + } else if (settings.error) { + settings.error.call(settings.error_scope, count > 10000 ? 'TIMED_OUT' : 'GENERAL', xhr, settings); + } + + xhr = null; + } else { + setTimeout(ready, 10); + } + } + + // Default settings + settings.scope = settings.scope || this; + settings.success_scope = settings.success_scope || settings.scope; + settings.error_scope = settings.error_scope || settings.scope; + settings.async = settings.async === false ? false : true; + settings.data = settings.data || ''; + + xhr = new XMLHttpRequest(); + + if (xhr) { + if (xhr.overrideMimeType) { + xhr.overrideMimeType(settings.content_type); + } + + xhr.open(settings.type || (settings.data ? 'POST' : 'GET'), settings.url, settings.async); + + if (settings.content_type) { + xhr.setRequestHeader('Content-Type', settings.content_type); + } + + xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); + + xhr.send(settings.data); + + // Syncronous request + if (!settings.async) { + return ready(); + } + + // Wait for response, onReadyStateChange can not be used since it leaks memory in IE + setTimeout(ready, 10); + } + } + }; +}); diff --git a/common/static/js/vendor/tinymce/js/tinymce/jquery.tinymce.min.js b/common/static/js/vendor/tinymce/js/tinymce/jquery.tinymce.min.js new file mode 100755 index 0000000000..17c44e6ae7 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/jquery.tinymce.min.js @@ -0,0 +1 @@ +!function(e){function t(){function t(e){"remove"===e&&this.each(function(e,t){var n=r(t);n&&n.remove()}),this.find("span.mceEditor,div.mceEditor").each(function(e,t){var n=tinymce.get(t.id.replace(/_parent$/,""));n&&n.remove()})}function i(e){var n,i=this;if(null!=e)t.call(i),i.each(function(t,n){var i;(i=tinymce.get(n.id))&&i.setContent(e)});else if(i.length>0&&(n=tinymce.get(i[0].id)))return n.getContent()}function r(e){var t=null;return e&&e.id&&a.tinymce&&(t=tinymce.get(e.id)),t}function c(e){return!!(e&&e.length&&a.tinymce&&e.is(":tinymce"))}var o={};e.each(["text","html","val"],function(t,a){var u=o[a]=e.fn[a],s="text"===a;e.fn[a]=function(t){var a=this;if(!c(a))return u.apply(a,arguments);if(t!==n)return i.call(a.filter(":tinymce"),t),u.apply(a.not(":tinymce"),arguments),a;var o="",l=arguments;return(s?a:a.eq(0)).each(function(t,n){var i=r(n);o+=i?s?i.getContent().replace(/<(?:"[^"]*"|'[^']*'|[^'">])*>/g,""):i.getContent({save:!0}):u.apply(e(n),l)}),o}}),e.each(["append","prepend"],function(t,i){var a=o[i]=e.fn[i],u="prepend"===i;e.fn[i]=function(e){var t=this;return c(t)?e!==n?(t.filter(":tinymce").each(function(t,n){var i=r(n);i&&i.setContent(u?e+i.getContent():i.getContent()+e)}),a.apply(t.not(":tinymce"),arguments),t):void 0:a.apply(t,arguments)}}),e.each(["remove","replaceWith","replaceAll","empty"],function(n,i){var r=o[i]=e.fn[i];e.fn[i]=function(){return t.call(this,i),r.apply(this,arguments)}}),o.attr=e.fn.attr,e.fn.attr=function(t,a){var u=this,s=arguments;if(!t||"value"!==t||!c(u))return a!==n?o.attr.apply(u,s):o.attr.apply(u,s);if(a!==n)return i.call(u.filter(":tinymce"),a),o.attr.apply(u.not(":tinymce"),s),u;var l=u[0],m=r(l);return m?m.getContent({save:!0}):o.attr.apply(e(l),s)}}var n,i,r=[],a=window;e.fn.tinymce=function(n){function c(){var i=[],r=0;l||(t(),l=!0),m.each(function(e,t){var a,c=t.id,o=n.oninit;c||(t.id=c=tinymce.DOM.uniqueId()),tinymce.get(c)||(a=new tinymce.Editor(c,n,tinymce.EditorManager),i.push(a),a.on("init",function(){var e,t=o;m.css("visibility",""),o&&++r==i.length&&("string"==typeof t&&(e=-1===t.indexOf(".")?null:tinymce.resolve(t.replace(/\.\w+$/,"")),t=tinymce.resolve(t)),t.apply(e||tinymce,i))}))}),e.each(i,function(e,t){t.render()})}var o,u,s,l,m=this,p="";if(!m.length)return m;if(!n)return window.tinymce?tinymce.get(m[0].id):null;if(m.css("visibility","hidden"),a.tinymce||i||!(o=n.script_url))1===i?r.push(c):c();else{i=1,u=o.substring(0,o.lastIndexOf("/")),-1!=o.indexOf(".min")&&(p=".min"),a.tinymce=a.tinyMCEPreInit||{base:u,suffix:p},-1!=o.indexOf("gzip")&&(s=n.language||"en",o=o+(/\?/.test(o)?"&":"?")+"js=true&core=true&suffix="+escape(p)+"&themes="+escape(n.theme||"modern")+"&plugins="+escape(n.plugins||"")+"&languages="+(s||""),a.tinyMCE_GZ||(a.tinyMCE_GZ={start:function(){function t(e){tinymce.ScriptLoader.markDone(tinymce.baseURI.toAbsolute(e))}t("langs/"+s+".js"),t("themes/"+n.theme+"/theme"+p+".js"),t("themes/"+n.theme+"/langs/"+s+".js"),e.each(n.plugins.split(","),function(e,n){n&&(t("plugins/"+n+"/plugin"+p+".js"),t("plugins/"+n+"/langs/"+s+".js"))})},end:function(){}}));var f=document.createElement("script");f.type="text/javascript",f.onload=f.onreadystatechange=function(t){t=t||window.event,2===i||"load"!=t.type&&!/complete|loaded/.test(f.readyState)||(tinymce.dom.Event.domLoaded=1,i=2,n.script_loaded&&n.script_loaded(),c(),e.each(r,function(e,t){t()}))},f.src=o,document.body.appendChild(f)}return m},e.extend(e.expr[":"],{tinymce:function(e){return!!(e.id&&"tinymce"in window&&tinymce.get(e.id))}})}(jQuery); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/langs/readme.md b/common/static/js/vendor/tinymce/js/tinymce/langs/readme.md old mode 100644 new mode 100755 similarity index 100% rename from common/static/js/vendor/tiny_mce/langs/readme.md rename to common/static/js/vendor/tinymce/js/tinymce/langs/readme.md diff --git a/common/static/js/vendor/tiny_mce/license.txt b/common/static/js/vendor/tinymce/js/tinymce/license.txt old mode 100644 new mode 100755 similarity index 100% rename from common/static/js/vendor/tiny_mce/license.txt rename to common/static/js/vendor/tinymce/js/tinymce/license.txt diff --git a/common/static/js/vendor/tiny_mce/plugins/codemirror/LICENSE.txt b/common/static/js/vendor/tinymce/js/tinymce/plugins/codemirror/LICENSE.txt similarity index 100% rename from common/static/js/vendor/tiny_mce/plugins/codemirror/LICENSE.txt rename to common/static/js/vendor/tinymce/js/tinymce/plugins/codemirror/LICENSE.txt diff --git a/common/static/js/vendor/tiny_mce/plugins/codemirror/README.txt b/common/static/js/vendor/tinymce/js/tinymce/plugins/codemirror/README.txt similarity index 100% rename from common/static/js/vendor/tiny_mce/plugins/codemirror/README.txt rename to common/static/js/vendor/tinymce/js/tinymce/plugins/codemirror/README.txt diff --git a/common/static/js/vendor/tiny_mce/plugins/codemirror/langs/en.js b/common/static/js/vendor/tinymce/js/tinymce/plugins/codemirror/langs/en.js similarity index 100% rename from common/static/js/vendor/tiny_mce/plugins/codemirror/langs/en.js rename to common/static/js/vendor/tinymce/js/tinymce/plugins/codemirror/langs/en.js diff --git a/common/static/js/vendor/tiny_mce/plugins/codemirror/langs/nl.js b/common/static/js/vendor/tinymce/js/tinymce/plugins/codemirror/langs/nl.js similarity index 100% rename from common/static/js/vendor/tiny_mce/plugins/codemirror/langs/nl.js rename to common/static/js/vendor/tinymce/js/tinymce/plugins/codemirror/langs/nl.js diff --git a/common/static/js/vendor/tiny_mce/plugins/codemirror/plugin.js b/common/static/js/vendor/tinymce/js/tinymce/plugins/codemirror/plugin.js similarity index 100% rename from common/static/js/vendor/tiny_mce/plugins/codemirror/plugin.js rename to common/static/js/vendor/tinymce/js/tinymce/plugins/codemirror/plugin.js diff --git a/common/static/js/vendor/tiny_mce/plugins/codemirror/source.html b/common/static/js/vendor/tinymce/js/tinymce/plugins/codemirror/source.html similarity index 100% rename from common/static/js/vendor/tiny_mce/plugins/codemirror/source.html rename to common/static/js/vendor/tinymce/js/tinymce/plugins/codemirror/source.html diff --git a/common/static/js/vendor/tiny_mce/plugins/image/plugin.min.js b/common/static/js/vendor/tinymce/js/tinymce/plugins/image/plugin.min.js similarity index 100% rename from common/static/js/vendor/tiny_mce/plugins/image/plugin.min.js rename to common/static/js/vendor/tinymce/js/tinymce/plugins/image/plugin.min.js diff --git a/common/static/js/vendor/tiny_mce/plugins/link/plugin.min.js b/common/static/js/vendor/tinymce/js/tinymce/plugins/link/plugin.min.js similarity index 100% rename from common/static/js/vendor/tiny_mce/plugins/link/plugin.min.js rename to common/static/js/vendor/tinymce/js/tinymce/plugins/link/plugin.min.js diff --git a/common/static/js/vendor/tinymce/js/tinymce/plugins/paste/classes/Clipboard.js b/common/static/js/vendor/tinymce/js/tinymce/plugins/paste/classes/Clipboard.js new file mode 100755 index 0000000000..3a447b3d9e --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/plugins/paste/classes/Clipboard.js @@ -0,0 +1,489 @@ +/** + * Clipboard.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class contains logic for getting HTML contents out of the clipboard. + * + * We need to make a lot of ugly hacks to get the contents out of the clipboard since + * the W3C Clipboard API is broken in all browsers that have it: Gecko/WebKit/Blink. + * We might rewrite this the way those API:s stabilize. Browsers doesn't handle pasting + * from applications like Word the same way as it does when pasting into a contentEditable area + * so we need to do lots of extra work to try to get to this clipboard data. + * + * Current implementation steps: + * 1. On keydown with paste keys Ctrl+V or Shift+Insert create + * a paste bin element and move focus to that element. + * 2. Wait for the browser to fire a "paste" event and get the contents out of the paste bin. + * 3. Check if the paste was successful if true, process the HTML. + * (4). If the paste was unsuccessful use IE execCommand, Clipboard API, document.dataTransfer old WebKit API etc. + * + * @class tinymce.pasteplugin.Clipboard + * @private + */ +define("tinymce/pasteplugin/Clipboard", [ + "tinymce/Env", + "tinymce/util/VK", + "tinymce/pasteplugin/Utils" +], function(Env, VK, Utils) { + return function(editor) { + var self = this, pasteBinElm, lastRng, keyboardPasteTimeStamp = 0; + var pasteBinDefaultContent = '%MCEPASTEBIN%', keyboardPastePlainTextState; + + /** + * Pastes the specified HTML. This means that the HTML is filtered and then + * inserted at the current selection in the editor. It will also fire paste events + * for custom user filtering. + * + * @param {String} html HTML code to paste into the current selection. + */ + function pasteHtml(html) { + var args, dom = editor.dom; + + args = editor.fire('BeforePastePreProcess', {content: html}); // Internal event used by Quirks + args = editor.fire('PastePreProcess', args); + html = args.content; + + if (!args.isDefaultPrevented()) { + // User has bound PastePostProcess events then we need to pass it through a DOM node + // This is not ideal but we don't want to let the browser mess up the HTML for example + // some browsers add   to P tags etc + if (editor.hasEventListeners('PastePostProcess') && !args.isDefaultPrevented()) { + // We need to attach the element to the DOM so Sizzle selectors work on the contents + var tempBody = dom.add(editor.getBody(), 'div', {style: 'display:none'}, html); + args = editor.fire('PastePostProcess', {node: tempBody}); + dom.remove(tempBody); + html = args.node.innerHTML; + } + + if (!args.isDefaultPrevented()) { + editor.insertContent(html); + } + } + } + + /** + * Pastes the specified text. This means that the plain text is processed + * and converted into BR and P elements. It will fire paste events for custom filtering. + * + * @param {String} text Text to paste as the current selection location. + */ + function pasteText(text) { + text = editor.dom.encode(text).replace(/\r\n/g, '\n'); + + var startBlock = editor.dom.getParent(editor.selection.getStart(), editor.dom.isBlock); + + // Create start block html for example

    + var forcedRootBlockName = editor.settings.forced_root_block; + var forcedRootBlockStartHtml; + if (forcedRootBlockName) { + forcedRootBlockStartHtml = editor.dom.createHTML(forcedRootBlockName, editor.settings.forced_root_block_attrs); + forcedRootBlockStartHtml = forcedRootBlockStartHtml.substr(0, forcedRootBlockStartHtml.length - 3) + '>'; + } + + if ((startBlock && /^(PRE|DIV)$/.test(startBlock.nodeName)) || !forcedRootBlockName) { + text = Utils.filter(text, [ + [/\n/g, "
    "] + ]); + } else { + text = Utils.filter(text, [ + [/\n\n/g, "

    " + forcedRootBlockStartHtml], + [/^(.*<\/p>)(

    )$/, forcedRootBlockStartHtml + '$1'], + [/\n/g, "
    "] + ]); + + if (text.indexOf('

    ') != -1) { + text = forcedRootBlockStartHtml + text; + } + } + + pasteHtml(text); + } + + /** + * Creates a paste bin element as close as possible to the current caret location and places the focus inside that element + * so that when the real paste event occurs the contents gets inserted into this element + * instead of the current editor selection element. + */ + function createPasteBin() { + var dom = editor.dom, body = editor.getBody(); + var viewport = editor.dom.getViewPort(editor.getWin()), scrollTop = viewport.y, top = 20; + var scrollContainer; + + lastRng = editor.selection.getRng(); + + if (editor.inline) { + scrollContainer = editor.selection.getScrollContainer(); + + if (scrollContainer) { + scrollTop = scrollContainer.scrollTop; + } + } + + // Calculate top cordinate this is needed to avoid scrolling to top of document + // We want the paste bin to be as close to the caret as possible to avoid scrolling + if (lastRng.getClientRects) { + var rects = lastRng.getClientRects(); + + if (rects.length) { + // Client rects gets us closes to the actual + // caret location in for example a wrapped paragraph block + top = scrollTop + (rects[0].top - dom.getPos(body).y); + } else { + top = scrollTop; + + // Check if we can find a closer location by checking the range element + var container = lastRng.startContainer; + if (container) { + if (container.nodeType == 3 && container.parentNode != body) { + container = container.parentNode; + } + + if (container.nodeType == 1) { + top = dom.getPos(container, scrollContainer || body).y; + } + } + } + } + + // Create a pastebin + pasteBinElm = dom.add(editor.getBody(), 'div', { + id: "mcepastebin", + contentEditable: true, + "data-mce-bogus": "1", + style: 'position: absolute; top: ' + top + 'px;' + + 'width: 10px; height: 10px; overflow: hidden; opacity: 0' + }, pasteBinDefaultContent); + + // Move paste bin out of sight since the controlSelection rect gets displayed otherwise on IE and Gecko + if (Env.ie || Env.gecko) { + dom.setStyle(pasteBinElm, 'left', dom.getStyle(body, 'direction', true) == 'rtl' ? 0xFFFF : -0xFFFF); + } + + // Prevent focus events from bubbeling fixed FocusManager issues + dom.bind(pasteBinElm, 'beforedeactivate focusin focusout', function(e) { + e.stopPropagation(); + }); + + pasteBinElm.focus(); + editor.selection.select(pasteBinElm, true); + } + + /** + * Removes the paste bin if it exists. + */ + function removePasteBin() { + if (pasteBinElm) { + var pasteBinClone; + + // WebKit/Blink might clone the div so + // lets make sure we remove all clones + // TODO: Man o man is this ugly. WebKit is the new IE! Remove this if they ever fix it! + while ((pasteBinClone = editor.dom.get('mcepastebin'))) { + editor.dom.remove(pasteBinClone); + editor.dom.unbind(pasteBinClone); + } + + if (lastRng) { + editor.selection.setRng(lastRng); + } + } + + keyboardPastePlainTextState = false; + pasteBinElm = lastRng = null; + } + + /** + * Returns the contents of the paste bin as a HTML string. + * + * @return {String} Get the contents of the paste bin. + */ + function getPasteBinHtml() { + var html = pasteBinDefaultContent, pasteBinClones, i; + + // Since WebKit/Chrome might clone the paste bin when pasting + // for example: we need to check if any of them contains some useful html. + // TODO: Man o man is this ugly. WebKit is the new IE! Remove this if they ever fix it! + pasteBinClones = editor.dom.select('div[id=mcepastebin]'); + i = pasteBinClones.length; + while (i--) { + var cloneHtml = pasteBinClones[i].innerHTML; + + if (html == pasteBinDefaultContent) { + html = ''; + } + + if (cloneHtml.length > html.length) { + html = cloneHtml; + } + } + + return html; + } + + /** + * Gets various content types out of a datatransfer object. + * + * @param {DataTransfer} dataTransfer Event fired on paste. + * @return {Object} Object with mime types and data for those mime types. + */ + function getDataTransferItems(dataTransfer) { + var data = {}; + + if (dataTransfer && dataTransfer.types) { + // Use old WebKit API + var legacyText = dataTransfer.getData('Text'); + if (legacyText && legacyText.length > 0) { + data['text/plain'] = legacyText; + } + + for (var i = 0; i < dataTransfer.types.length; i++) { + var contentType = dataTransfer.types[i]; + data[contentType] = dataTransfer.getData(contentType); + } + } + + return data; + } + + /** + * Gets various content types out of the Clipboard API. It will also get the + * plain text using older IE and WebKit API:s. + * + * @param {ClipboardEvent} clipboardEvent Event fired on paste. + * @return {Object} Object with mime types and data for those mime types. + */ + function getClipboardContent(clipboardEvent) { + return getDataTransferItems(clipboardEvent.clipboardData || editor.getDoc().dataTransfer); + } + + /** + * Checks if the clipboard contains image data if it does it will take that data + * and convert it into a data url image and paste that image at the caret location. + * + * @param {ClipboardEvent} e Paste event object. + * @param {Object} clipboardContent Collection of clipboard contents. + * @return {Boolean} true/false if the image data was found or not. + */ + function pasteImageData(e, clipboardContent) { + function pasteImage(item) { + if (items[i].type == 'image/png') { + var reader = new FileReader(); + + reader.onload = function() { + pasteHtml(''); + }; + + reader.readAsDataURL(item.getAsFile()); + + return true; + } + } + + // If paste data images are disabled or there is HTML or plain text + // contents then proceed with the normal paste process + if (!editor.settings.paste_data_images || "text/html" in clipboardContent || "text/plain" in clipboardContent) { + return; + } + + if (e.clipboardData) { + var items = e.clipboardData.items; + + if (items) { + for (var i = 0; i < items.length; i++) { + if (pasteImage(items[i])) { + return true; + } + } + } + } + } + + function getCaretRangeFromEvent(e) { + var doc = editor.getDoc(), rng; + + if (doc.caretPositionFromPoint) { + var point = doc.caretPositionFromPoint(e.clientX, e.clientY); + rng = doc.createRange(); + rng.setStart(point.offsetNode, point.offset); + rng.collapse(true); + } else if (doc.caretRangeFromPoint) { + rng = doc.caretRangeFromPoint(e.clientX, e.clientY); + } + + return rng; + } + + function hasContentType(clipboardContent, mimeType) { + return mimeType in clipboardContent && clipboardContent[mimeType].length > 0; + } + + function registerEventHandlers() { + editor.on('keydown', function(e) { + if (e.isDefaultPrevented()) { + return; + } + + // Ctrl+V or Shift+Insert + if ((VK.metaKeyPressed(e) && e.keyCode == 86) || (e.shiftKey && e.keyCode == 45)) { + keyboardPastePlainTextState = e.shiftKey && e.keyCode == 86; + + // Prevent undoManager keydown handler from making an undo level with the pastebin in it + e.stopImmediatePropagation(); + + keyboardPasteTimeStamp = new Date().getTime(); + + // IE doesn't support Ctrl+Shift+V and it doesn't even produce a paste event + // so lets fake a paste event and let IE use the execCommand/dataTransfer methods + if (Env.ie && keyboardPastePlainTextState) { + e.preventDefault(); + editor.fire('paste', {ieFake: true}); + return; + } + + removePasteBin(); + createPasteBin(); + } + }); + + editor.on('paste', function(e) { + var clipboardContent = getClipboardContent(e); + var isKeyBoardPaste = new Date().getTime() - keyboardPasteTimeStamp < 1000; + var plainTextMode = self.pasteFormat == "text" || keyboardPastePlainTextState; + + if (e.isDefaultPrevented()) { + removePasteBin(); + return; + } + + if (pasteImageData(e, clipboardContent)) { + removePasteBin(); + return; + } + + // Not a keyboard paste prevent default paste and try to grab the clipboard contents using different APIs + if (!isKeyBoardPaste) { + e.preventDefault(); + } + + // Try IE only method if paste isn't a keyboard paste + if (Env.ie && (!isKeyBoardPaste || e.ieFake)) { + createPasteBin(); + + editor.dom.bind(pasteBinElm, 'paste', function(e) { + e.stopPropagation(); + }); + + editor.getDoc().execCommand('Paste', false, null); + clipboardContent["text/html"] = getPasteBinHtml(); + } + + setTimeout(function() { + var html = getPasteBinHtml(); + + // WebKit has a nice bug where it clones the paste bin if you paste from for example notepad + if (pasteBinElm && pasteBinElm.firstChild && pasteBinElm.firstChild.id === 'mcepastebin') { + plainTextMode = true; + } + + removePasteBin(); + + if (html == pasteBinDefaultContent || !isKeyBoardPaste) { + html = clipboardContent['text/html'] || clipboardContent['text/plain'] || pasteBinDefaultContent; + + if (html == pasteBinDefaultContent) { + if (!isKeyBoardPaste) { + editor.windowManager.alert('Please use Ctrl+V/Cmd+V keyboard shortcuts to paste contents.'); + } + + return; + } + } + + // Force plain text mode if we only got a text/plain content type + if (!hasContentType(clipboardContent, 'text/html') && hasContentType(clipboardContent, 'text/plain')) { + plainTextMode = true; + } + + if (plainTextMode) { + pasteText(clipboardContent['text/plain'] || Utils.innerText(html)); + } else { + pasteHtml(html); + } + }, 0); + }); + + editor.on('dragstart', function(e) { + if (e.dataTransfer.types) { + try { + e.dataTransfer.setData('mce-internal', editor.selection.getContent()); + } catch (ex) { + // IE 10 throws an error since it doesn't support custom data items + } + } + }); + + editor.on('drop', function(e) { + var rng = getCaretRangeFromEvent(e); + + if (rng && !e.isDefaultPrevented()) { + var dropContent = getDataTransferItems(e.dataTransfer); + var content = dropContent['mce-internal'] || dropContent['text/html'] || dropContent['text/plain']; + + if (content) { + e.preventDefault(); + + editor.undoManager.transact(function() { + if (dropContent['mce-internal']) { + editor.execCommand('Delete'); + } + + editor.selection.setRng(rng); + + if (!dropContent['text/html']) { + pasteText(content); + } else { + pasteHtml(content); + } + }); + } + } + }); + } + + self.pasteHtml = pasteHtml; + self.pasteText = pasteText; + + editor.on('preInit', function() { + registerEventHandlers(); + + // Remove all data images from paste for example from Gecko + // except internal images like video elements + editor.parser.addNodeFilter('img', function(nodes) { + if (!editor.settings.paste_data_images) { + var i = nodes.length; + + while (i--) { + var src = nodes[i].attributes.map.src; + if (src && src.indexOf('data:image') === 0) { + if (!nodes[i].attr('data-mce-object') && src !== Env.transparentSrc) { + nodes[i].remove(); + } + } + } + } + }); + }); + + // Fix for #6504 we need to remove the paste bin on IE if the user paste in a file + editor.on('PreProcess', function() { + editor.dom.remove(editor.dom.get('mcepastebin')); + }); + }; +}); diff --git a/common/static/js/vendor/tinymce/js/tinymce/plugins/paste/classes/Plugin.js b/common/static/js/vendor/tinymce/js/tinymce/plugins/paste/classes/Plugin.js new file mode 100755 index 0000000000..c968b45d7b --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/plugins/paste/classes/Plugin.js @@ -0,0 +1,110 @@ +/** + * Plugin.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class contains the tinymce plugin logic for the paste plugin. + * + * @class tinymce.pasteplugin.Plugin + * @private + */ +define("tinymce/pasteplugin/Plugin", [ + "tinymce/PluginManager", + "tinymce/pasteplugin/Clipboard", + "tinymce/pasteplugin/WordFilter", + "tinymce/pasteplugin/Quirks" +], function(PluginManager, Clipboard, WordFilter, Quirks) { + var userIsInformed; + + PluginManager.add('paste', function(editor) { + var self = this, clipboard, settings = editor.settings; + + function togglePlainTextPaste() { + if (clipboard.pasteFormat == "text") { + this.active(false); + clipboard.pasteFormat = "html"; + } else { + clipboard.pasteFormat = "text"; + this.active(true); + + if (!userIsInformed) { + editor.windowManager.alert( + 'Paste is now in plain text mode. Contents will now ' + + 'be pasted as plain text until you toggle this option off.' + ); + + userIsInformed = true; + } + } + } + + self.clipboard = clipboard = new Clipboard(editor); + self.quirks = new Quirks(editor); + self.wordFilter = new WordFilter(editor); + + if (editor.settings.paste_as_text) { + self.clipboard.pasteFormat = "text"; + } + + if (settings.paste_preprocess) { + editor.on('PastePreProcess', function(e) { + settings.paste_preprocess.call(self, self, e); + }); + } + + if (settings.paste_postprocess) { + editor.on('PastePostProcess', function(e) { + settings.paste_postprocess.call(self, self, e); + }); + } + + editor.addCommand('mceInsertClipboardContent', function(ui, value) { + if (value.content) { + self.clipboard.pasteHtml(value.content); + } + + if (value.text) { + self.clipboard.pasteText(value.text); + } + }); + + // Block all drag/drop events + if (editor.paste_block_drop) { + editor.on('dragend dragover draggesture dragdrop drop drag', function(e) { + e.preventDefault(); + e.stopPropagation(); + }); + } + + // Prevent users from dropping data images on Gecko + if (!editor.settings.paste_data_images) { + editor.on('drop', function(e) { + var dataTransfer = e.dataTransfer; + + if (dataTransfer && dataTransfer.files && dataTransfer.files.length > 0) { + e.preventDefault(); + } + }); + } + + editor.addButton('pastetext', { + icon: 'pastetext', + tooltip: 'Paste as text', + onclick: togglePlainTextPaste, + active: self.clipboard.pasteFormat == "text" + }); + + editor.addMenuItem('pastetext', { + text: 'Paste as text', + selectable: true, + active: clipboard.pasteFormat, + onclick: togglePlainTextPaste + }); + }); +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/plugins/paste/classes/Quirks.js b/common/static/js/vendor/tinymce/js/tinymce/plugins/paste/classes/Quirks.js new file mode 100755 index 0000000000..48f033cad3 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/plugins/paste/classes/Quirks.js @@ -0,0 +1,123 @@ +/** + * Quirks.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class contains various fixes for browsers. These issues can not be feature + * detected since we have no direct control over the clipboard. However we might be able + * to remove some of these fixes once the browsers gets updated/fixed. + * + * @class tinymce.pasteplugin.Quirks + * @private + */ +define("tinymce/pasteplugin/Quirks", [ + "tinymce/Env", + "tinymce/util/Tools", + "tinymce/pasteplugin/WordFilter", + "tinymce/pasteplugin/Utils" +], function(Env, Tools, WordFilter, Utils) { + "use strict"; + + return function(editor) { + function addPreProcessFilter(filterFunc) { + editor.on('BeforePastePreProcess', function(e) { + e.content = filterFunc(e.content); + }); + } + + /** + * Removes WebKit fragment comments and converted-space spans. + * + * This: + * a b + * + * Becomes: + * a b + */ + function removeWebKitFragments(html) { + html = Utils.filter(html, [ + /^[\s\S]*|[\s\S]*$/g, // WebKit fragment + [/\u00a0<\/span>/g, '\u00a0'], // WebKit   + /
    $/i // Traling BR elements + ]); + + return html; + } + + /** + * Removes BR elements after block elements. IE9 has a nasty bug where it puts a BR element after each + * block element when pasting from word. This removes those elements. + * + * This: + *

    a


    b

    + * + * Becomes: + *

    a

    b

    + */ + function removeExplorerBrElementsAfterBlocks(html) { + // Only filter word specific content + if (!WordFilter.isWordContent(html)) { + return html; + } + + // Produce block regexp based on the block elements in schema + var blockElements = []; + + Tools.each(editor.schema.getBlockElements(), function(block, blockName) { + blockElements.push(blockName); + }); + + var explorerBlocksRegExp = new RegExp( + '(?:
     [\\s\\r\\n]+|
    )*(<\\/?(' + blockElements.join('|') + ')[^>]*>)(?:
     [\\s\\r\\n]+|
    )*', + 'g' + ); + + // Remove BR:s from: X
    + html = Utils.filter(html, [ + [explorerBlocksRegExp, '$1'] + ]); + + // IE9 also adds an extra BR element for each soft-linefeed and it also adds a BR for each word wrap break + html = Utils.filter(html, [ + [/

    /g, '

    '], // Replace multiple BR elements with uppercase BR to keep them intact + [/
    /g, ' '], // Replace single br elements with space since they are word wrap BR:s + [/

    /g, '
    '] // Replace back the double brs but into a single BR + ]); + + return html; + } + + /** + * WebKit has a nasty bug where the all runtime styles gets added to style attributes when copy/pasting contents. + * This fix solves that by simply removing the whole style attribute. + * + * Todo: This can be made smarter. Keeping styles that override existing ones etc. + * + * @param {String} content Content that needs to be processed. + * @return {String} Processed contents. + */ + function removeWebKitStyles(content) { + if (editor.settings.paste_remove_styles || editor.settings.paste_remove_styles_if_webkit !== false) { + content = content.replace(/ style=\"[^\"]+\"/g, ''); + } + + return content; + } + + // Sniff browsers and apply fixes since we can't feature detect + if (Env.webkit) { + addPreProcessFilter(removeWebKitStyles); + addPreProcessFilter(removeWebKitFragments); + } + + if (Env.ie) { + addPreProcessFilter(removeExplorerBrElementsAfterBlocks); + } + }; +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/plugins/paste/classes/Utils.js b/common/static/js/vendor/tinymce/js/tinymce/plugins/paste/classes/Utils.js new file mode 100755 index 0000000000..3c4a80aff8 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/plugins/paste/classes/Utils.js @@ -0,0 +1,98 @@ +/** + * Utils.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class contails various utility functions for the paste plugin. + * + * @class tinymce.pasteplugin.Clipboard + * @private + */ +define("tinymce/pasteplugin/Utils", [ + "tinymce/util/Tools", + "tinymce/html/DomParser", + "tinymce/html/Schema" +], function(Tools, DomParser, Schema) { + function filter(content, items) { + Tools.each(items, function(v) { + if (v.constructor == RegExp) { + content = content.replace(v, ''); + } else { + content = content.replace(v[0], v[1]); + } + }); + + return content; + } + + /** + * Gets the innerText of the specified element. It will handle edge cases + * and works better than textContent on Gecko. + * + * @param {String} html HTML string to get text from. + * @return {String} String of text with line feeds. + */ + function innerText(html) { + var schema = new Schema(), domParser = new DomParser({}, schema), text = ''; + var shortEndedElements = schema.getShortEndedElements(); + var ignoreElements = Tools.makeMap('script noscript style textarea video audio iframe object', ' '); + var blockElements = schema.getBlockElements(); + + function walk(node) { + var name = node.name, currentNode = node; + + if (name === 'br') { + text += '\n'; + return; + } + + // img/input/hr + if (shortEndedElements[name]) { + text += ' '; + } + + // Ingore script, video contents + if (ignoreElements[name]) { + text += ' '; + return; + } + + if (node.type == 3) { + text += node.value; + } + + // Walk all children + if (!node.shortEnded) { + if ((node = node.firstChild)) { + do { + walk(node); + } while ((node = node.next)); + } + } + + // Add \n or \n\n for blocks or P + if (blockElements[name] && currentNode.next) { + text += '\n'; + + if (name == 'p') { + text += '\n'; + } + } + } + + walk(domParser.parse(html)); + + return text; + } + + return { + filter: filter, + innerText: innerText + }; +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/plugins/paste/classes/WordFilter.js b/common/static/js/vendor/tinymce/js/tinymce/plugins/paste/classes/WordFilter.js new file mode 100755 index 0000000000..566fe15af2 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/plugins/paste/classes/WordFilter.js @@ -0,0 +1,287 @@ +/** + * WordFilter.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class parses word HTML into proper TinyMCE markup. + * + * @class tinymce.pasteplugin.Quirks + * @private + */ +define("tinymce/pasteplugin/WordFilter", [ + "tinymce/util/Tools", + "tinymce/html/DomParser", + "tinymce/html/Schema", + "tinymce/html/Serializer", + "tinymce/html/Node", + "tinymce/pasteplugin/Utils" +], function(Tools, DomParser, Schema, Serializer, Node, Utils) { + function isWordContent(content) { + return (/ 1) { + currentListNode.attr('start', '' + start); + } + + paragraphNode.wrap(currentListNode); + } else { + currentListNode.append(paragraphNode); + } + + paragraphNode.name = 'li'; + listStartTextNode.value = ''; + + var nextNode = listStartTextNode.next; + if (nextNode && nextNode.type == 3) { + nextNode.value = nextNode.value.replace(/^\u00a0+/, ''); + } + + // Append list to previous list if it exists + if (level > lastLevel && prevListNode) { + prevListNode.lastChild.append(currentListNode); + } + + lastLevel = level; + } + + var paragraphs = node.getAll('p'); + + for (var i = 0; i < paragraphs.length; i++) { + node = paragraphs[i]; + + if (node.name == 'p' && node.firstChild) { + // Find first text node in paragraph + var nodeText = ''; + var listStartTextNode = node.firstChild; + + while (listStartTextNode) { + nodeText = listStartTextNode.value; + if (nodeText) { + break; + } + + listStartTextNode = listStartTextNode.firstChild; + } + + // Detect unordered lists look for bullets + if (/^\s*[\u2022\u00b7\u00a7\u00d8\u25CF]\s*$/.test(nodeText)) { + convertParagraphToLi(node, listStartTextNode, 'ul'); + continue; + } + + // Detect ordered lists 1., a. or ixv. + if (/^\s*\w+\.$/.test(nodeText)) { + // Parse OL start number + var matches = /([0-9])\./.exec(nodeText); + var start = 1; + if (matches) { + start = parseInt(matches[1], 10); + } + + convertParagraphToLi(node, listStartTextNode, 'ol', start); + continue; + } + + currentListNode = null; + } + } + } + + function filterStyles(node, styleValue) { + // Parse out list indent level for lists + if (node.name === 'p') { + var matches = /mso-list:\w+ \w+([0-9]+)/.exec(styleValue); + + if (matches) { + node._listLevel = parseInt(matches[1], 10); + } + } + + if (editor.getParam("paste_retain_style_properties", "none")) { + var outputStyle = ""; + + Tools.each(editor.dom.parseStyle(styleValue), function(value, name) { + // Convert various MS styles to W3C styles + switch (name) { + case "horiz-align": + name = "text-align"; + return; + + case "vert-align": + name = "vertical-align"; + return; + + case "font-color": + case "mso-foreground": + name = "color"; + return; + + case "mso-background": + case "mso-highlight": + name = "background"; + break; + } + + // Output only valid styles + if (retainStyleProperties == "all" || (validStyles && validStyles[name])) { + outputStyle += name + ':' + value + ';'; + } + }); + + if (outputStyle) { + return outputStyle; + } + } + + return null; + } + + if (settings.paste_enable_default_filters === false) { + return; + } + + // Detect is the contents is Word junk HTML + if (isWordContent(e.content)) { + e.wordContent = true; // Mark it for other processors + + // Remove basic Word junk + content = Utils.filter(content, [ + // Word comments like conditional comments etc + //gi, + + // Remove comments, scripts (e.g., msoShowComment), XML tag, VML content, + // MS Office namespaced tags, and a few other tags + /<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi, + + // Convert into for line-though + [/<(\/?)s>/gi, "<$1strike>"], + + // Replace nsbp entites to char since it's easier to handle + [/ /gi, "\u00a0"], + + // Convert ___ to string of alternating + // breaking/non-breaking spaces of same length + [/([\s\u00a0]*)<\/span>/gi, + function(str, spaces) { + return (spaces.length > 0) ? + spaces.replace(/./, " ").slice(Math.floor(spaces.length / 2)).split("").join("\u00a0") : ""; + } + ] + ]); + + var validElements = settings.paste_word_valid_elements; + if (!validElements) { + validElements = '@[style],-strong/b,-em/i,-span,-p,-ol,-ul,-li,-h1,-h2,-h3,-h4,-h5,-h6,' + + '-table[width],-tr,-td[colspan|rowspan|width],-th,-thead,-tfoot,-tbody,-a[href|name],sub,sup,strike,br'; + } + + // Setup strict schema + var schema = new Schema({ + valid_elements: validElements + }); + + // Parse HTML into DOM structure + var domParser = new DomParser({}, schema); + + domParser.addAttributeFilter('style', function(nodes) { + var i = nodes.length, node; + + while (i--) { + node = nodes[i]; + node.attr('style', filterStyles(node, node.attr('style'))); + + // Remove pointess spans + if (node.name == 'span' && !node.attributes.length) { + node.unwrap(); + } + } + }); + + domParser.addNodeFilter('a', function(nodes) { + var i = nodes.length, node, href, name; + + while (i--) { + node = nodes[i]; + href = node.attr('href'); + name = node.attr('name'); + + if (href && href.indexOf('file://') === 0) { + href = href.split('#')[1]; + if (href) { + href = '#' + href; + } + } + + if (!href && !name) { + node.unwrap(); + } else { + node.attr({ + href: href, + name: name + }); + } + } + }); + // Parse into DOM structure + var rootNode = domParser.parse(content); + + // Process DOM + convertFakeListsToProperLists(rootNode); + + // Serialize DOM back to HTML + e.content = new Serializer({}, schema).serialize(rootNode); + } + }); + } + + WordFilter.isWordContent = isWordContent; + + return WordFilter; +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/plugins/paste/plugin.dev.js b/common/static/js/vendor/tinymce/js/tinymce/plugins/paste/plugin.dev.js new file mode 100755 index 0000000000..557269ef75 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/plugins/paste/plugin.dev.js @@ -0,0 +1,120 @@ +/** + * Inline development version. Only to be used while developing since it uses document.write to load scripts. + */ + +/*jshint smarttabs:true, undef:true, latedef:true, curly:true, bitwise:true, camelcase:true */ +/*globals $code */ + +(function(exports) { + "use strict"; + + var html = "", baseDir; + var modules = {}, exposedModules = [], moduleCount = 0; + + var scripts = document.getElementsByTagName('script'); + for (var i = 0; i < scripts.length; i++) { + var src = scripts[i].src; + + if (src.indexOf('/plugin.dev.js') != -1) { + baseDir = src.substring(0, src.lastIndexOf('/')); + } + } + + function require(ids, callback) { + var module, defs = []; + + for (var i = 0; i < ids.length; ++i) { + module = modules[ids[i]] || resolve(ids[i]); + if (!module) { + throw 'module definition dependecy not found: ' + ids[i]; + } + + defs.push(module); + } + + callback.apply(null, defs); + } + + function resolve(id) { + var target = exports; + var fragments = id.split(/[.\/]/); + + for (var fi = 0; fi < fragments.length; ++fi) { + if (!target[fragments[fi]]) { + return; + } + + target = target[fragments[fi]]; + } + + return target; + } + + function register(id) { + var target = exports; + var fragments = id.split(/[.\/]/); + + for (var fi = 0; fi < fragments.length - 1; ++fi) { + if (target[fragments[fi]] === undefined) { + target[fragments[fi]] = {}; + } + + target = target[fragments[fi]]; + } + + target[fragments[fragments.length - 1]] = modules[id]; + } + + function define(id, dependencies, definition) { + if (typeof id !== 'string') { + throw 'invalid module definition, module id must be defined and be a string'; + } + + if (dependencies === undefined) { + throw 'invalid module definition, dependencies must be specified'; + } + + if (definition === undefined) { + throw 'invalid module definition, definition function must be specified'; + } + + require(dependencies, function() { + modules[id] = definition.apply(null, arguments); + }); + + if (--moduleCount === 0) { + for (var i = 0; i < exposedModules.length; i++) { + register(exposedModules[i]); + } + } + } + + function expose(ids) { + exposedModules = ids; + } + + function writeScripts() { + document.write(html); + } + + function load(path) { + html += '\n'; + moduleCount++; + } + + // Expose globally + exports.define = define; + exports.require = require; + + expose(["tinymce/pasteplugin/Utils","tinymce/pasteplugin/Clipboard","tinymce/pasteplugin/WordFilter","tinymce/pasteplugin/Quirks","tinymce/pasteplugin/Plugin"]); + + load('classes/Utils.js'); + load('classes/Clipboard.js'); + load('classes/WordFilter.js'); + load('classes/Quirks.js'); + load('classes/Plugin.js'); + + writeScripts(); +})(this); + +// $hash: d99d9b748c4f7521874d185c37bfd19a \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/plugins/paste/plugin.js b/common/static/js/vendor/tinymce/js/tinymce/plugins/paste/plugin.js new file mode 100755 index 0000000000..3a03879820 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/plugins/paste/plugin.js @@ -0,0 +1,1206 @@ +/** + * Compiled inline version. (Library mode) + */ + +/*jshint smarttabs:true, undef:true, latedef:true, curly:true, bitwise:true, camelcase:true */ +/*globals $code */ + +(function(exports, undefined) { + "use strict"; + + var modules = {}; + + function require(ids, callback) { + var module, defs = []; + + for (var i = 0; i < ids.length; ++i) { + module = modules[ids[i]] || resolve(ids[i]); + if (!module) { + throw 'module definition dependecy not found: ' + ids[i]; + } + + defs.push(module); + } + + callback.apply(null, defs); + } + + function define(id, dependencies, definition) { + if (typeof id !== 'string') { + throw 'invalid module definition, module id must be defined and be a string'; + } + + if (dependencies === undefined) { + throw 'invalid module definition, dependencies must be specified'; + } + + if (definition === undefined) { + throw 'invalid module definition, definition function must be specified'; + } + + require(dependencies, function() { + modules[id] = definition.apply(null, arguments); + }); + } + + function defined(id) { + return !!modules[id]; + } + + function resolve(id) { + var target = exports; + var fragments = id.split(/[.\/]/); + + for (var fi = 0; fi < fragments.length; ++fi) { + if (!target[fragments[fi]]) { + return; + } + + target = target[fragments[fi]]; + } + + return target; + } + + function expose(ids) { + for (var i = 0; i < ids.length; i++) { + var target = exports; + var id = ids[i]; + var fragments = id.split(/[.\/]/); + + for (var fi = 0; fi < fragments.length - 1; ++fi) { + if (target[fragments[fi]] === undefined) { + target[fragments[fi]] = {}; + } + + target = target[fragments[fi]]; + } + + target[fragments[fragments.length - 1]] = modules[id]; + } + } + +// Included from: js/tinymce/plugins/paste/classes/Utils.js + +/** + * Utils.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class contails various utility functions for the paste plugin. + * + * @class tinymce.pasteplugin.Clipboard + * @private + */ +define("tinymce/pasteplugin/Utils", [ + "tinymce/util/Tools", + "tinymce/html/DomParser", + "tinymce/html/Schema" +], function(Tools, DomParser, Schema) { + function filter(content, items) { + Tools.each(items, function(v) { + if (v.constructor == RegExp) { + content = content.replace(v, ''); + } else { + content = content.replace(v[0], v[1]); + } + }); + + return content; + } + + /** + * Gets the innerText of the specified element. It will handle edge cases + * and works better than textContent on Gecko. + * + * @param {String} html HTML string to get text from. + * @return {String} String of text with line feeds. + */ + function innerText(html) { + var schema = new Schema(), domParser = new DomParser({}, schema), text = ''; + var shortEndedElements = schema.getShortEndedElements(); + var ignoreElements = Tools.makeMap('script noscript style textarea video audio iframe object', ' '); + var blockElements = schema.getBlockElements(); + + function walk(node) { + var name = node.name, currentNode = node; + + if (name === 'br') { + text += '\n'; + return; + } + + // img/input/hr + if (shortEndedElements[name]) { + text += ' '; + } + + // Ingore script, video contents + if (ignoreElements[name]) { + text += ' '; + return; + } + + if (node.type == 3) { + text += node.value; + } + + // Walk all children + if (!node.shortEnded) { + if ((node = node.firstChild)) { + do { + walk(node); + } while ((node = node.next)); + } + } + + // Add \n or \n\n for blocks or P + if (blockElements[name] && currentNode.next) { + text += '\n'; + + if (name == 'p') { + text += '\n'; + } + } + } + + walk(domParser.parse(html)); + + return text; + } + + return { + filter: filter, + innerText: innerText + }; +}); + +// Included from: js/tinymce/plugins/paste/classes/Clipboard.js + +/** + * Clipboard.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class contains logic for getting HTML contents out of the clipboard. + * + * We need to make a lot of ugly hacks to get the contents out of the clipboard since + * the W3C Clipboard API is broken in all browsers that have it: Gecko/WebKit/Blink. + * We might rewrite this the way those API:s stabilize. Browsers doesn't handle pasting + * from applications like Word the same way as it does when pasting into a contentEditable area + * so we need to do lots of extra work to try to get to this clipboard data. + * + * Current implementation steps: + * 1. On keydown with paste keys Ctrl+V or Shift+Insert create + * a paste bin element and move focus to that element. + * 2. Wait for the browser to fire a "paste" event and get the contents out of the paste bin. + * 3. Check if the paste was successful if true, process the HTML. + * (4). If the paste was unsuccessful use IE execCommand, Clipboard API, document.dataTransfer old WebKit API etc. + * + * @class tinymce.pasteplugin.Clipboard + * @private + */ +define("tinymce/pasteplugin/Clipboard", [ + "tinymce/Env", + "tinymce/util/VK", + "tinymce/pasteplugin/Utils" +], function(Env, VK, Utils) { + return function(editor) { + var self = this, pasteBinElm, lastRng, keyboardPasteTimeStamp = 0; + var pasteBinDefaultContent = '%MCEPASTEBIN%', keyboardPastePlainTextState; + + /** + * Pastes the specified HTML. This means that the HTML is filtered and then + * inserted at the current selection in the editor. It will also fire paste events + * for custom user filtering. + * + * @param {String} html HTML code to paste into the current selection. + */ + function pasteHtml(html) { + var args, dom = editor.dom; + + args = editor.fire('BeforePastePreProcess', {content: html}); // Internal event used by Quirks + args = editor.fire('PastePreProcess', args); + html = args.content; + + if (!args.isDefaultPrevented()) { + // User has bound PastePostProcess events then we need to pass it through a DOM node + // This is not ideal but we don't want to let the browser mess up the HTML for example + // some browsers add   to P tags etc + if (editor.hasEventListeners('PastePostProcess') && !args.isDefaultPrevented()) { + // We need to attach the element to the DOM so Sizzle selectors work on the contents + var tempBody = dom.add(editor.getBody(), 'div', {style: 'display:none'}, html); + args = editor.fire('PastePostProcess', {node: tempBody}); + dom.remove(tempBody); + html = args.node.innerHTML; + } + + if (!args.isDefaultPrevented()) { + editor.insertContent(html); + } + } + } + + /** + * Pastes the specified text. This means that the plain text is processed + * and converted into BR and P elements. It will fire paste events for custom filtering. + * + * @param {String} text Text to paste as the current selection location. + */ + function pasteText(text) { + text = editor.dom.encode(text).replace(/\r\n/g, '\n'); + + var startBlock = editor.dom.getParent(editor.selection.getStart(), editor.dom.isBlock); + + // Create start block html for example

    + var forcedRootBlockName = editor.settings.forced_root_block; + var forcedRootBlockStartHtml; + if (forcedRootBlockName) { + forcedRootBlockStartHtml = editor.dom.createHTML(forcedRootBlockName, editor.settings.forced_root_block_attrs); + forcedRootBlockStartHtml = forcedRootBlockStartHtml.substr(0, forcedRootBlockStartHtml.length - 3) + '>'; + } + + if ((startBlock && /^(PRE|DIV)$/.test(startBlock.nodeName)) || !forcedRootBlockName) { + text = Utils.filter(text, [ + [/\n/g, "
    "] + ]); + } else { + text = Utils.filter(text, [ + [/\n\n/g, "

    " + forcedRootBlockStartHtml], + [/^(.*<\/p>)(

    )$/, forcedRootBlockStartHtml + '$1'], + [/\n/g, "
    "] + ]); + + if (text.indexOf('

    ') != -1) { + text = forcedRootBlockStartHtml + text; + } + } + + pasteHtml(text); + } + + /** + * Creates a paste bin element as close as possible to the current caret location and places the focus inside that element + * so that when the real paste event occurs the contents gets inserted into this element + * instead of the current editor selection element. + */ + function createPasteBin() { + var dom = editor.dom, body = editor.getBody(); + var viewport = editor.dom.getViewPort(editor.getWin()), scrollTop = viewport.y, top = 20; + var scrollContainer; + + lastRng = editor.selection.getRng(); + + if (editor.inline) { + scrollContainer = editor.selection.getScrollContainer(); + + if (scrollContainer) { + scrollTop = scrollContainer.scrollTop; + } + } + + // Calculate top cordinate this is needed to avoid scrolling to top of document + // We want the paste bin to be as close to the caret as possible to avoid scrolling + if (lastRng.getClientRects) { + var rects = lastRng.getClientRects(); + + if (rects.length) { + // Client rects gets us closes to the actual + // caret location in for example a wrapped paragraph block + top = scrollTop + (rects[0].top - dom.getPos(body).y); + } else { + top = scrollTop; + + // Check if we can find a closer location by checking the range element + var container = lastRng.startContainer; + if (container) { + if (container.nodeType == 3 && container.parentNode != body) { + container = container.parentNode; + } + + if (container.nodeType == 1) { + top = dom.getPos(container, scrollContainer || body).y; + } + } + } + } + + // Create a pastebin + pasteBinElm = dom.add(editor.getBody(), 'div', { + id: "mcepastebin", + contentEditable: true, + "data-mce-bogus": "1", + style: 'position: absolute; top: ' + top + 'px;' + + 'width: 10px; height: 10px; overflow: hidden; opacity: 0' + }, pasteBinDefaultContent); + + // Move paste bin out of sight since the controlSelection rect gets displayed otherwise on IE and Gecko + if (Env.ie || Env.gecko) { + dom.setStyle(pasteBinElm, 'left', dom.getStyle(body, 'direction', true) == 'rtl' ? 0xFFFF : -0xFFFF); + } + + // Prevent focus events from bubbeling fixed FocusManager issues + dom.bind(pasteBinElm, 'beforedeactivate focusin focusout', function(e) { + e.stopPropagation(); + }); + + pasteBinElm.focus(); + editor.selection.select(pasteBinElm, true); + } + + /** + * Removes the paste bin if it exists. + */ + function removePasteBin() { + if (pasteBinElm) { + var pasteBinClone; + + // WebKit/Blink might clone the div so + // lets make sure we remove all clones + // TODO: Man o man is this ugly. WebKit is the new IE! Remove this if they ever fix it! + while ((pasteBinClone = editor.dom.get('mcepastebin'))) { + editor.dom.remove(pasteBinClone); + editor.dom.unbind(pasteBinClone); + } + + if (lastRng) { + editor.selection.setRng(lastRng); + } + } + + keyboardPastePlainTextState = false; + pasteBinElm = lastRng = null; + } + + /** + * Returns the contents of the paste bin as a HTML string. + * + * @return {String} Get the contents of the paste bin. + */ + function getPasteBinHtml() { + var html = pasteBinDefaultContent, pasteBinClones, i; + + // Since WebKit/Chrome might clone the paste bin when pasting + // for example: we need to check if any of them contains some useful html. + // TODO: Man o man is this ugly. WebKit is the new IE! Remove this if they ever fix it! + pasteBinClones = editor.dom.select('div[id=mcepastebin]'); + i = pasteBinClones.length; + while (i--) { + var cloneHtml = pasteBinClones[i].innerHTML; + + if (html == pasteBinDefaultContent) { + html = ''; + } + + if (cloneHtml.length > html.length) { + html = cloneHtml; + } + } + + return html; + } + + /** + * Gets various content types out of a datatransfer object. + * + * @param {DataTransfer} dataTransfer Event fired on paste. + * @return {Object} Object with mime types and data for those mime types. + */ + function getDataTransferItems(dataTransfer) { + var data = {}; + + if (dataTransfer && dataTransfer.types) { + // Use old WebKit API + var legacyText = dataTransfer.getData('Text'); + if (legacyText && legacyText.length > 0) { + data['text/plain'] = legacyText; + } + + for (var i = 0; i < dataTransfer.types.length; i++) { + var contentType = dataTransfer.types[i]; + data[contentType] = dataTransfer.getData(contentType); + } + } + + return data; + } + + /** + * Gets various content types out of the Clipboard API. It will also get the + * plain text using older IE and WebKit API:s. + * + * @param {ClipboardEvent} clipboardEvent Event fired on paste. + * @return {Object} Object with mime types and data for those mime types. + */ + function getClipboardContent(clipboardEvent) { + return getDataTransferItems(clipboardEvent.clipboardData || editor.getDoc().dataTransfer); + } + + /** + * Checks if the clipboard contains image data if it does it will take that data + * and convert it into a data url image and paste that image at the caret location. + * + * @param {ClipboardEvent} e Paste event object. + * @param {Object} clipboardContent Collection of clipboard contents. + * @return {Boolean} true/false if the image data was found or not. + */ + function pasteImageData(e, clipboardContent) { + function pasteImage(item) { + if (items[i].type == 'image/png') { + var reader = new FileReader(); + + reader.onload = function() { + pasteHtml(''); + }; + + reader.readAsDataURL(item.getAsFile()); + + return true; + } + } + + // If paste data images are disabled or there is HTML or plain text + // contents then proceed with the normal paste process + if (!editor.settings.paste_data_images || "text/html" in clipboardContent || "text/plain" in clipboardContent) { + return; + } + + if (e.clipboardData) { + var items = e.clipboardData.items; + + if (items) { + for (var i = 0; i < items.length; i++) { + if (pasteImage(items[i])) { + return true; + } + } + } + } + } + + function getCaretRangeFromEvent(e) { + var doc = editor.getDoc(), rng; + + if (doc.caretPositionFromPoint) { + var point = doc.caretPositionFromPoint(e.clientX, e.clientY); + rng = doc.createRange(); + rng.setStart(point.offsetNode, point.offset); + rng.collapse(true); + } else if (doc.caretRangeFromPoint) { + rng = doc.caretRangeFromPoint(e.clientX, e.clientY); + } + + return rng; + } + + function hasContentType(clipboardContent, mimeType) { + return mimeType in clipboardContent && clipboardContent[mimeType].length > 0; + } + + function registerEventHandlers() { + editor.on('keydown', function(e) { + if (e.isDefaultPrevented()) { + return; + } + + // Ctrl+V or Shift+Insert + if ((VK.metaKeyPressed(e) && e.keyCode == 86) || (e.shiftKey && e.keyCode == 45)) { + keyboardPastePlainTextState = e.shiftKey && e.keyCode == 86; + + // Prevent undoManager keydown handler from making an undo level with the pastebin in it + e.stopImmediatePropagation(); + + keyboardPasteTimeStamp = new Date().getTime(); + + // IE doesn't support Ctrl+Shift+V and it doesn't even produce a paste event + // so lets fake a paste event and let IE use the execCommand/dataTransfer methods + if (Env.ie && keyboardPastePlainTextState) { + e.preventDefault(); + editor.fire('paste', {ieFake: true}); + return; + } + + removePasteBin(); + createPasteBin(); + } + }); + + editor.on('paste', function(e) { + var clipboardContent = getClipboardContent(e); + var isKeyBoardPaste = new Date().getTime() - keyboardPasteTimeStamp < 1000; + var plainTextMode = self.pasteFormat == "text" || keyboardPastePlainTextState; + + if (e.isDefaultPrevented()) { + removePasteBin(); + return; + } + + if (pasteImageData(e, clipboardContent)) { + removePasteBin(); + return; + } + + // Not a keyboard paste prevent default paste and try to grab the clipboard contents using different APIs + if (!isKeyBoardPaste) { + e.preventDefault(); + } + + // Try IE only method if paste isn't a keyboard paste + if (Env.ie && (!isKeyBoardPaste || e.ieFake)) { + createPasteBin(); + + editor.dom.bind(pasteBinElm, 'paste', function(e) { + e.stopPropagation(); + }); + + editor.getDoc().execCommand('Paste', false, null); + clipboardContent["text/html"] = getPasteBinHtml(); + } + + setTimeout(function() { + var html = getPasteBinHtml(); + + // WebKit has a nice bug where it clones the paste bin if you paste from for example notepad + if (pasteBinElm && pasteBinElm.firstChild && pasteBinElm.firstChild.id === 'mcepastebin') { + plainTextMode = true; + } + + removePasteBin(); + + if (html == pasteBinDefaultContent || !isKeyBoardPaste) { + html = clipboardContent['text/html'] || clipboardContent['text/plain'] || pasteBinDefaultContent; + + if (html == pasteBinDefaultContent) { + if (!isKeyBoardPaste) { + editor.windowManager.alert('Please use Ctrl+V/Cmd+V keyboard shortcuts to paste contents.'); + } + + return; + } + } + + // Force plain text mode if we only got a text/plain content type + if (!hasContentType(clipboardContent, 'text/html') && hasContentType(clipboardContent, 'text/plain')) { + plainTextMode = true; + } + + if (plainTextMode) { + pasteText(clipboardContent['text/plain'] || Utils.innerText(html)); + } else { + pasteHtml(html); + } + }, 0); + }); + + editor.on('dragstart', function(e) { + if (e.dataTransfer.types) { + try { + e.dataTransfer.setData('mce-internal', editor.selection.getContent()); + } catch (ex) { + // IE 10 throws an error since it doesn't support custom data items + } + } + }); + + editor.on('drop', function(e) { + var rng = getCaretRangeFromEvent(e); + + if (rng && !e.isDefaultPrevented()) { + var dropContent = getDataTransferItems(e.dataTransfer); + var content = dropContent['mce-internal'] || dropContent['text/html'] || dropContent['text/plain']; + + if (content) { + e.preventDefault(); + + editor.undoManager.transact(function() { + if (dropContent['mce-internal']) { + editor.execCommand('Delete'); + } + + editor.selection.setRng(rng); + + if (!dropContent['text/html']) { + pasteText(content); + } else { + pasteHtml(content); + } + }); + } + } + }); + } + + self.pasteHtml = pasteHtml; + self.pasteText = pasteText; + + editor.on('preInit', function() { + registerEventHandlers(); + + // Remove all data images from paste for example from Gecko + // except internal images like video elements + editor.parser.addNodeFilter('img', function(nodes) { + if (!editor.settings.paste_data_images) { + var i = nodes.length; + + while (i--) { + var src = nodes[i].attributes.map.src; + if (src && src.indexOf('data:image') === 0) { + if (!nodes[i].attr('data-mce-object') && src !== Env.transparentSrc) { + nodes[i].remove(); + } + } + } + } + }); + }); + + // Fix for #6504 we need to remove the paste bin on IE if the user paste in a file + editor.on('PreProcess', function() { + editor.dom.remove(editor.dom.get('mcepastebin')); + }); + }; +}); + +// Included from: js/tinymce/plugins/paste/classes/WordFilter.js + +/** + * WordFilter.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class parses word HTML into proper TinyMCE markup. + * + * @class tinymce.pasteplugin.Quirks + * @private + */ +define("tinymce/pasteplugin/WordFilter", [ + "tinymce/util/Tools", + "tinymce/html/DomParser", + "tinymce/html/Schema", + "tinymce/html/Serializer", + "tinymce/html/Node", + "tinymce/pasteplugin/Utils" +], function(Tools, DomParser, Schema, Serializer, Node, Utils) { + function isWordContent(content) { + return (/ 1) { + currentListNode.attr('start', '' + start); + } + + paragraphNode.wrap(currentListNode); + } else { + currentListNode.append(paragraphNode); + } + + paragraphNode.name = 'li'; + listStartTextNode.value = ''; + + var nextNode = listStartTextNode.next; + if (nextNode && nextNode.type == 3) { + nextNode.value = nextNode.value.replace(/^\u00a0+/, ''); + } + + // Append list to previous list if it exists + if (level > lastLevel && prevListNode) { + prevListNode.lastChild.append(currentListNode); + } + + lastLevel = level; + } + + var paragraphs = node.getAll('p'); + + for (var i = 0; i < paragraphs.length; i++) { + node = paragraphs[i]; + + if (node.name == 'p' && node.firstChild) { + // Find first text node in paragraph + var nodeText = ''; + var listStartTextNode = node.firstChild; + + while (listStartTextNode) { + nodeText = listStartTextNode.value; + if (nodeText) { + break; + } + + listStartTextNode = listStartTextNode.firstChild; + } + + // Detect unordered lists look for bullets + if (/^\s*[\u2022\u00b7\u00a7\u00d8\u25CF]\s*$/.test(nodeText)) { + convertParagraphToLi(node, listStartTextNode, 'ul'); + continue; + } + + // Detect ordered lists 1., a. or ixv. + if (/^\s*\w+\.$/.test(nodeText)) { + // Parse OL start number + var matches = /([0-9])\./.exec(nodeText); + var start = 1; + if (matches) { + start = parseInt(matches[1], 10); + } + + convertParagraphToLi(node, listStartTextNode, 'ol', start); + continue; + } + + currentListNode = null; + } + } + } + + function filterStyles(node, styleValue) { + // Parse out list indent level for lists + if (node.name === 'p') { + var matches = /mso-list:\w+ \w+([0-9]+)/.exec(styleValue); + + if (matches) { + node._listLevel = parseInt(matches[1], 10); + } + } + + if (editor.getParam("paste_retain_style_properties", "none")) { + var outputStyle = ""; + + Tools.each(editor.dom.parseStyle(styleValue), function(value, name) { + // Convert various MS styles to W3C styles + switch (name) { + case "horiz-align": + name = "text-align"; + return; + + case "vert-align": + name = "vertical-align"; + return; + + case "font-color": + case "mso-foreground": + name = "color"; + return; + + case "mso-background": + case "mso-highlight": + name = "background"; + break; + } + + // Output only valid styles + if (retainStyleProperties == "all" || (validStyles && validStyles[name])) { + outputStyle += name + ':' + value + ';'; + } + }); + + if (outputStyle) { + return outputStyle; + } + } + + return null; + } + + if (settings.paste_enable_default_filters === false) { + return; + } + + // Detect is the contents is Word junk HTML + if (isWordContent(e.content)) { + e.wordContent = true; // Mark it for other processors + + // Remove basic Word junk + content = Utils.filter(content, [ + // Word comments like conditional comments etc + //gi, + + // Remove comments, scripts (e.g., msoShowComment), XML tag, VML content, + // MS Office namespaced tags, and a few other tags + /<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi, + + // Convert into for line-though + [/<(\/?)s>/gi, "<$1strike>"], + + // Replace nsbp entites to char since it's easier to handle + [/ /gi, "\u00a0"], + + // Convert ___ to string of alternating + // breaking/non-breaking spaces of same length + [/([\s\u00a0]*)<\/span>/gi, + function(str, spaces) { + return (spaces.length > 0) ? + spaces.replace(/./, " ").slice(Math.floor(spaces.length / 2)).split("").join("\u00a0") : ""; + } + ] + ]); + + var validElements = settings.paste_word_valid_elements; + if (!validElements) { + validElements = '@[style],-strong/b,-em/i,-span,-p,-ol,-ul,-li,-h1,-h2,-h3,-h4,-h5,-h6,' + + '-table[width],-tr,-td[colspan|rowspan|width],-th,-thead,-tfoot,-tbody,-a[href|name],sub,sup,strike,br'; + } + + // Setup strict schema + var schema = new Schema({ + valid_elements: validElements + }); + + // Parse HTML into DOM structure + var domParser = new DomParser({}, schema); + + domParser.addAttributeFilter('style', function(nodes) { + var i = nodes.length, node; + + while (i--) { + node = nodes[i]; + node.attr('style', filterStyles(node, node.attr('style'))); + + // Remove pointess spans + if (node.name == 'span' && !node.attributes.length) { + node.unwrap(); + } + } + }); + + domParser.addNodeFilter('a', function(nodes) { + var i = nodes.length, node, href, name; + + while (i--) { + node = nodes[i]; + href = node.attr('href'); + name = node.attr('name'); + + if (href && href.indexOf('file://') === 0) { + href = href.split('#')[1]; + if (href) { + href = '#' + href; + } + } + + if (!href && !name) { + node.unwrap(); + } else { + node.attr({ + href: href, + name: name + }); + } + } + }); + // Parse into DOM structure + var rootNode = domParser.parse(content); + + // Process DOM + convertFakeListsToProperLists(rootNode); + + // Serialize DOM back to HTML + e.content = new Serializer({}, schema).serialize(rootNode); + } + }); + } + + WordFilter.isWordContent = isWordContent; + + return WordFilter; +}); + +// Included from: js/tinymce/plugins/paste/classes/Quirks.js + +/** + * Quirks.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class contains various fixes for browsers. These issues can not be feature + * detected since we have no direct control over the clipboard. However we might be able + * to remove some of these fixes once the browsers gets updated/fixed. + * + * @class tinymce.pasteplugin.Quirks + * @private + */ +define("tinymce/pasteplugin/Quirks", [ + "tinymce/Env", + "tinymce/util/Tools", + "tinymce/pasteplugin/WordFilter", + "tinymce/pasteplugin/Utils" +], function(Env, Tools, WordFilter, Utils) { + "use strict"; + + return function(editor) { + function addPreProcessFilter(filterFunc) { + editor.on('BeforePastePreProcess', function(e) { + e.content = filterFunc(e.content); + }); + } + + /** + * Removes WebKit fragment comments and converted-space spans. + * + * This: + * a b + * + * Becomes: + * a b + */ + function removeWebKitFragments(html) { + html = Utils.filter(html, [ + /^[\s\S]*|[\s\S]*$/g, // WebKit fragment + [/\u00a0<\/span>/g, '\u00a0'], // WebKit   + /
    $/i // Traling BR elements + ]); + + return html; + } + + /** + * Removes BR elements after block elements. IE9 has a nasty bug where it puts a BR element after each + * block element when pasting from word. This removes those elements. + * + * This: + *

    a


    b

    + * + * Becomes: + *

    a

    b

    + */ + function removeExplorerBrElementsAfterBlocks(html) { + // Only filter word specific content + if (!WordFilter.isWordContent(html)) { + return html; + } + + // Produce block regexp based on the block elements in schema + var blockElements = []; + + Tools.each(editor.schema.getBlockElements(), function(block, blockName) { + blockElements.push(blockName); + }); + + var explorerBlocksRegExp = new RegExp( + '(?:
     [\\s\\r\\n]+|
    )*(<\\/?(' + blockElements.join('|') + ')[^>]*>)(?:
     [\\s\\r\\n]+|
    )*', + 'g' + ); + + // Remove BR:s from: X
    + html = Utils.filter(html, [ + [explorerBlocksRegExp, '$1'] + ]); + + // IE9 also adds an extra BR element for each soft-linefeed and it also adds a BR for each word wrap break + html = Utils.filter(html, [ + [/

    /g, '

    '], // Replace multiple BR elements with uppercase BR to keep them intact + [/
    /g, ' '], // Replace single br elements with space since they are word wrap BR:s + [/

    /g, '
    '] // Replace back the double brs but into a single BR + ]); + + return html; + } + + /** + * WebKit has a nasty bug where the all runtime styles gets added to style attributes when copy/pasting contents. + * This fix solves that by simply removing the whole style attribute. + * + * Todo: This can be made smarter. Keeping styles that override existing ones etc. + * + * @param {String} content Content that needs to be processed. + * @return {String} Processed contents. + */ + function removeWebKitStyles(content) { + if (editor.settings.paste_remove_styles || editor.settings.paste_remove_styles_if_webkit !== false) { + content = content.replace(/ style=\"[^\"]+\"/g, ''); + } + + return content; + } + + // Sniff browsers and apply fixes since we can't feature detect + if (Env.webkit) { + addPreProcessFilter(removeWebKitStyles); + addPreProcessFilter(removeWebKitFragments); + } + + if (Env.ie) { + addPreProcessFilter(removeExplorerBrElementsAfterBlocks); + } + }; +}); + +// Included from: js/tinymce/plugins/paste/classes/Plugin.js + +/** + * Plugin.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class contains the tinymce plugin logic for the paste plugin. + * + * @class tinymce.pasteplugin.Plugin + * @private + */ +define("tinymce/pasteplugin/Plugin", [ + "tinymce/PluginManager", + "tinymce/pasteplugin/Clipboard", + "tinymce/pasteplugin/WordFilter", + "tinymce/pasteplugin/Quirks" +], function(PluginManager, Clipboard, WordFilter, Quirks) { + var userIsInformed; + + PluginManager.add('paste', function(editor) { + var self = this, clipboard, settings = editor.settings; + + function togglePlainTextPaste() { + if (clipboard.pasteFormat == "text") { + this.active(false); + clipboard.pasteFormat = "html"; + } else { + clipboard.pasteFormat = "text"; + this.active(true); + + if (!userIsInformed) { + editor.windowManager.alert( + 'Paste is now in plain text mode. Contents will now ' + + 'be pasted as plain text until you toggle this option off.' + ); + + userIsInformed = true; + } + } + } + + self.clipboard = clipboard = new Clipboard(editor); + self.quirks = new Quirks(editor); + self.wordFilter = new WordFilter(editor); + + if (editor.settings.paste_as_text) { + self.clipboard.pasteFormat = "text"; + } + + if (settings.paste_preprocess) { + editor.on('PastePreProcess', function(e) { + settings.paste_preprocess.call(self, self, e); + }); + } + + if (settings.paste_postprocess) { + editor.on('PastePostProcess', function(e) { + settings.paste_postprocess.call(self, self, e); + }); + } + + editor.addCommand('mceInsertClipboardContent', function(ui, value) { + if (value.content) { + self.clipboard.pasteHtml(value.content); + } + + if (value.text) { + self.clipboard.pasteText(value.text); + } + }); + + // Block all drag/drop events + if (editor.paste_block_drop) { + editor.on('dragend dragover draggesture dragdrop drop drag', function(e) { + e.preventDefault(); + e.stopPropagation(); + }); + } + + // Prevent users from dropping data images on Gecko + if (!editor.settings.paste_data_images) { + editor.on('drop', function(e) { + var dataTransfer = e.dataTransfer; + + if (dataTransfer && dataTransfer.files && dataTransfer.files.length > 0) { + e.preventDefault(); + } + }); + } + + editor.addButton('pastetext', { + icon: 'pastetext', + tooltip: 'Paste as text', + onclick: togglePlainTextPaste, + active: self.clipboard.pasteFormat == "text" + }); + + editor.addMenuItem('pastetext', { + text: 'Paste as text', + selectable: true, + active: clipboard.pasteFormat, + onclick: togglePlainTextPaste + }); + }); +}); + +expose(["tinymce/pasteplugin/Utils","tinymce/pasteplugin/Clipboard","tinymce/pasteplugin/WordFilter","tinymce/pasteplugin/Quirks","tinymce/pasteplugin/Plugin"]); +})(this); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/plugins/paste/plugin.min.js b/common/static/js/vendor/tinymce/js/tinymce/plugins/paste/plugin.min.js new file mode 100755 index 0000000000..2a759d034a --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/plugins/paste/plugin.min.js @@ -0,0 +1 @@ +!function(e,t){"use strict";function n(e,t){for(var n,r=[],i=0;i"),t&&/^(PRE|DIV)$/.test(t.nodeName)||!o?e=n.filter(e,[[/\n/g,"
    "]]):(e=n.filter(e,[[/\n\n/g,"

    "+a],[/^(.*<\/p>)(

    )$/,a+"$1"],[/\n/g,"
    "]]),-1!=e.indexOf("

    ")&&(e=a+e)),i(e)}function a(){var t=r.dom,n=r.getBody(),i=r.dom.getViewPort(r.getWin()),o=i.y,a=20,s;if(v=r.selection.getRng(),r.inline&&(s=r.selection.getScrollContainer(),s&&(o=s.scrollTop)),v.getClientRects){var l=v.getClientRects();if(l.length)a=o+(l[0].top-t.getPos(n).y);else{a=o;var c=v.startContainer;c&&(3==c.nodeType&&c.parentNode!=n&&(c=c.parentNode),1==c.nodeType&&(a=t.getPos(c,s||n).y))}}g=t.add(r.getBody(),"div",{id:"mcepastebin",contentEditable:!0,"data-mce-bogus":"1",style:"position: absolute; top: "+a+"px;width: 10px; height: 10px; overflow: hidden; opacity: 0"},b),(e.ie||e.gecko)&&t.setStyle(g,"left","rtl"==t.getStyle(n,"direction",!0)?65535:-65535),t.bind(g,"beforedeactivate focusin focusout",function(e){e.stopPropagation()}),g.focus(),r.selection.select(g,!0)}function s(){if(g){for(var e;e=r.dom.get("mcepastebin");)r.dom.remove(e),r.dom.unbind(e);v&&r.selection.setRng(v)}C=!1,g=v=null}function l(){var e=b,t,n;for(t=r.dom.select("div[id=mcepastebin]"),n=t.length;n--;){var i=t[n].innerHTML;e==b&&(e=""),i.length>e.length&&(e=i)}return e}function c(e){var t={};if(e&&e.types){var n=e.getData("Text");n&&n.length>0&&(t["text/plain"]=n);for(var r=0;r')},t.readAsDataURL(e.getAsFile()),!0}}if(!(!r.settings.paste_data_images||"text/html"in t||"text/plain"in t)&&e.clipboardData){var o=e.clipboardData.items;if(o)for(var a=0;a0}function m(){r.on("keydown",function(n){if(!n.isDefaultPrevented()&&(t.metaKeyPressed(n)&&86==n.keyCode||n.shiftKey&&45==n.keyCode)){if(C=n.shiftKey&&86==n.keyCode,n.stopImmediatePropagation(),y=(new Date).getTime(),e.ie&&C)return n.preventDefault(),void r.fire("paste",{ieFake:!0});s(),a()}}),r.on("paste",function(t){var c=d(t),f=(new Date).getTime()-y<1e3,m="text"==h.pasteFormat||C;return t.isDefaultPrevented()?void s():u(t,c)?void s():(f||t.preventDefault(),!e.ie||f&&!t.ieFake||(a(),r.dom.bind(g,"paste",function(e){e.stopPropagation()}),r.getDoc().execCommand("Paste",!1,null),c["text/html"]=l()),void setTimeout(function(){var e=l();return g&&g.firstChild&&"mcepastebin"===g.firstChild.id&&(m=!0),s(),e!=b&&f||(e=c["text/html"]||c["text/plain"]||b,e!=b)?(!p(c,"text/html")&&p(c,"text/plain")&&(m=!0),void(m?o(c["text/plain"]||n.innerText(e)):i(e))):void(f||r.windowManager.alert("Please use Ctrl+V/Cmd+V keyboard shortcuts to paste contents."))},0))}),r.on("dragstart",function(e){if(e.dataTransfer.types)try{e.dataTransfer.setData("mce-internal",r.selection.getContent())}catch(t){}}),r.on("drop",function(e){var t=f(e);if(t&&!e.isDefaultPrevented()){var n=c(e.dataTransfer),a=n["mce-internal"]||n["text/html"]||n["text/plain"];a&&(e.preventDefault(),r.undoManager.transact(function(){n["mce-internal"]&&r.execCommand("Delete"),r.selection.setRng(t),n["text/html"]?i(a):o(a)}))}})}var h=this,g,v,y=0,b="%MCEPASTEBIN%",C;h.pasteHtml=i,h.pasteText=o,r.on("preInit",function(){m(),r.parser.addNodeFilter("img",function(t){if(!r.settings.paste_data_images)for(var n=t.length;n--;){var i=t[n].attributes.map.src;i&&0===i.indexOf("data:image")&&(t[n].attr("data-mce-object")||i===e.transparentSrc||t[n].remove())}})}),r.on("PreProcess",function(){r.dom.remove(r.dom.get("mcepastebin"))})}}),r(h,[c,d,u,g,v,l],function(e,t,n,r,i,o){function a(e){return/l?n&&(n=n.parent.parent):(r=n,n=null)),n&&n.name==a?n.append(e):(r=r||n,n=new i(a,1),s>1&&n.attr("start",""+s),e.wrap(n)),e.name="li",t.value="";var c=t.next;c&&3==c.type&&(c.value=c.value.replace(/^\u00a0+/,"")),l>o&&r&&r.lastChild.append(n),o=l}for(var n,r,o=1,a=e.getAll("p"),s=0;s/gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/ /gi,"\xa0"],[/([\s\u00a0]*)<\/span>/gi,function(e,t){return t.length>0?t.replace(/./," ").slice(Math.floor(t.length/2)).split("").join("\xa0"):""}]]);var h=l.paste_word_valid_elements;h||(h="@[style],-strong/b,-em/i,-span,-p,-ol,-ul,-li,-h1,-h2,-h3,-h4,-h5,-h6,-table[width],-tr,-td[colspan|rowspan|width],-th,-thead,-tfoot,-tbody,-a[href|name],sub,sup,strike,br");var g=new n({valid_elements:h}),v=new t({},g);v.addAttributeFilter("style",function(e){for(var t=e.length,n;t--;)n=e[t],n.attr("style",u(n,n.attr("style"))),"span"!=n.name||n.attributes.length||n.unwrap()}),v.addNodeFilter("a",function(e){for(var t=e.length,n,r,i;t--;)n=e[t],r=n.attr("href"),i=n.attr("name"),r&&0===r.indexOf("file://")&&(r=r.split("#")[1],r&&(r="#"+r)),r||i?n.attr({href:r,name:i}):n.unwrap()});var y=v.parse(f);d(y),c.content=new r({},g).serialize(y)}})}return s.isWordContent=a,s}),r(y,[p,c,h,l],function(e,t,n,r){return function(i){function o(e){i.on("BeforePastePreProcess",function(t){t.content=e(t.content)})}function a(e){return e=r.filter(e,[/^[\s\S]*|[\s\S]*$/g,[/\u00a0<\/span>/g,"\xa0"],/
    $/i])}function s(e){if(!n.isWordContent(e))return e;var o=[];t.each(i.schema.getBlockElements(),function(e,t){o.push(t)});var a=new RegExp("(?:
     [\\s\\r\\n]+|
    )*(<\\/?("+o.join("|")+")[^>]*>)(?:
     [\\s\\r\\n]+|
    )*","g");return e=r.filter(e,[[a,"$1"]]),e=r.filter(e,[[/

    /g,"

    "],[/
    /g," "],[/

    /g,"
    "]])}function l(e){return(i.settings.paste_remove_styles||i.settings.paste_remove_styles_if_webkit!==!1)&&(e=e.replace(/ style=\"[^\"]+\"/g,"")),e}e.webkit&&(o(l),o(a)),e.ie&&o(s)}}),r(b,[C,f,h,y],function(e,t,n,r){var i;e.add("paste",function(e){function o(){"text"==s.pasteFormat?(this.active(!1),s.pasteFormat="html"):(s.pasteFormat="text",this.active(!0),i||(e.windowManager.alert("Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off."),i=!0))}var a=this,s,l=e.settings;a.clipboard=s=new t(e),a.quirks=new r(e),a.wordFilter=new n(e),e.settings.paste_as_text&&(a.clipboard.pasteFormat="text"),l.paste_preprocess&&e.on("PastePreProcess",function(e){l.paste_preprocess.call(a,a,e)}),l.paste_postprocess&&e.on("PastePostProcess",function(e){l.paste_postprocess.call(a,a,e)}),e.addCommand("mceInsertClipboardContent",function(e,t){t.content&&a.clipboard.pasteHtml(t.content),t.text&&a.clipboard.pasteText(t.text)}),e.paste_block_drop&&e.on("dragend dragover draggesture dragdrop drop drag",function(e){e.preventDefault(),e.stopPropagation()}),e.settings.paste_data_images||e.on("drop",function(e){var t=e.dataTransfer;t&&t.files&&t.files.length>0&&e.preventDefault()}),e.addButton("pastetext",{icon:"pastetext",tooltip:"Paste as text",onclick:o,active:"text"==a.clipboard.pasteFormat}),e.addMenuItem("pastetext",{text:"Paste as text",selectable:!0,active:s.pasteFormat,onclick:o})})}),a([l,f,h,y,b])}(this); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/plugins/spellchecker/classes/DomTextMatcher.js b/common/static/js/vendor/tinymce/js/tinymce/plugins/spellchecker/classes/DomTextMatcher.js new file mode 100755 index 0000000000..f6bdf06a48 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/plugins/spellchecker/classes/DomTextMatcher.js @@ -0,0 +1,470 @@ +/** + * DomTextMatcher.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*eslint no-labels:0, no-constant-condition: 0 */ + +/** + * This class logic for filtering text and matching words. + * + * @class tinymce.spellcheckerplugin.TextFilter + * @private + */ +define("tinymce/spellcheckerplugin/DomTextMatcher", [], function() { + // Based on work developed by: James Padolsey http://james.padolsey.com + // released under UNLICENSE that is compatible with LGPL + // TODO: Handle contentEditable edgecase: + //

    texttexttexttexttext

    + return function(node, editor) { + var m, matches = [], text, dom = editor.dom; + var blockElementsMap, hiddenTextElementsMap, shortEndedElementsMap; + + blockElementsMap = editor.schema.getBlockElements(); // H1-H6, P, TD etc + hiddenTextElementsMap = editor.schema.getWhiteSpaceElements(); // TEXTAREA, PRE, STYLE, SCRIPT + shortEndedElementsMap = editor.schema.getShortEndedElements(); // BR, IMG, INPUT + + function createMatch(m, data) { + if (!m[0]) { + throw 'findAndReplaceDOMText cannot handle zero-length matches'; + } + + return { + start: m.index, + end: m.index + m[0].length, + text: m[0], + data: data + }; + } + + function getText(node) { + var txt; + + if (node.nodeType === 3) { + return node.data; + } + + if (hiddenTextElementsMap[node.nodeName] && !blockElementsMap[node.nodeName]) { + return ''; + } + + txt = ''; + + if (blockElementsMap[node.nodeName] || shortEndedElementsMap[node.nodeName]) { + txt += '\n'; + } + + if ((node = node.firstChild)) { + do { + txt += getText(node); + } while ((node = node.nextSibling)); + } + + return txt; + } + + function stepThroughMatches(node, matches, replaceFn) { + var startNode, endNode, startNodeIndex, + endNodeIndex, innerNodes = [], atIndex = 0, curNode = node, + matchLocation, matchIndex = 0; + + matches = matches.slice(0); + matches.sort(function(a, b) { + return a.start - b.start; + }); + + matchLocation = matches.shift(); + + out: while (true) { + if (blockElementsMap[curNode.nodeName] || shortEndedElementsMap[curNode.nodeName]) { + atIndex++; + } + + if (curNode.nodeType === 3) { + if (!endNode && curNode.length + atIndex >= matchLocation.end) { + // We've found the ending + endNode = curNode; + endNodeIndex = matchLocation.end - atIndex; + } else if (startNode) { + // Intersecting node + innerNodes.push(curNode); + } + + if (!startNode && curNode.length + atIndex > matchLocation.start) { + // We've found the match start + startNode = curNode; + startNodeIndex = matchLocation.start - atIndex; + } + + atIndex += curNode.length; + } + + if (startNode && endNode) { + curNode = replaceFn({ + startNode: startNode, + startNodeIndex: startNodeIndex, + endNode: endNode, + endNodeIndex: endNodeIndex, + innerNodes: innerNodes, + match: matchLocation.text, + matchIndex: matchIndex + }); + + // replaceFn has to return the node that replaced the endNode + // and then we step back so we can continue from the end of the + // match: + atIndex -= (endNode.length - endNodeIndex); + startNode = null; + endNode = null; + innerNodes = []; + matchLocation = matches.shift(); + matchIndex++; + + if (!matchLocation) { + break; // no more matches + } + } else if ((!hiddenTextElementsMap[curNode.nodeName] || blockElementsMap[curNode.nodeName]) && curNode.firstChild) { + // Move down + curNode = curNode.firstChild; + continue; + } else if (curNode.nextSibling) { + // Move forward: + curNode = curNode.nextSibling; + continue; + } + + // Move forward or up: + while (true) { + if (curNode.nextSibling) { + curNode = curNode.nextSibling; + break; + } else if (curNode.parentNode !== node) { + curNode = curNode.parentNode; + } else { + break out; + } + } + } + } + + /** + * Generates the actual replaceFn which splits up text nodes + * and inserts the replacement element. + */ + function genReplacer(callback) { + function makeReplacementNode(fill, matchIndex) { + var match = matches[matchIndex]; + + if (!match.stencil) { + match.stencil = callback(match); + } + + var clone = match.stencil.cloneNode(false); + clone.setAttribute('data-mce-index', matchIndex); + + if (fill) { + clone.appendChild(dom.doc.createTextNode(fill)); + } + + return clone; + } + + return function(range) { + var before, after, parentNode, startNode = range.startNode, + endNode = range.endNode, matchIndex = range.matchIndex, + doc = dom.doc; + + if (startNode === endNode) { + var node = startNode; + + parentNode = node.parentNode; + if (range.startNodeIndex > 0) { + // Add "before" text node (before the match) + before = doc.createTextNode(node.data.substring(0, range.startNodeIndex)); + parentNode.insertBefore(before, node); + } + + // Create the replacement node: + var el = makeReplacementNode(range.match, matchIndex); + parentNode.insertBefore(el, node); + if (range.endNodeIndex < node.length) { + // Add "after" text node (after the match) + after = doc.createTextNode(node.data.substring(range.endNodeIndex)); + parentNode.insertBefore(after, node); + } + + node.parentNode.removeChild(node); + + return el; + } else { + // Replace startNode -> [innerNodes...] -> endNode (in that order) + before = doc.createTextNode(startNode.data.substring(0, range.startNodeIndex)); + after = doc.createTextNode(endNode.data.substring(range.endNodeIndex)); + var elA = makeReplacementNode(startNode.data.substring(range.startNodeIndex), matchIndex); + var innerEls = []; + + for (var i = 0, l = range.innerNodes.length; i < l; ++i) { + var innerNode = range.innerNodes[i]; + var innerEl = makeReplacementNode(innerNode.data, matchIndex); + innerNode.parentNode.replaceChild(innerEl, innerNode); + innerEls.push(innerEl); + } + + var elB = makeReplacementNode(endNode.data.substring(0, range.endNodeIndex), matchIndex); + + parentNode = startNode.parentNode; + parentNode.insertBefore(before, startNode); + parentNode.insertBefore(elA, startNode); + parentNode.removeChild(startNode); + + parentNode = endNode.parentNode; + parentNode.insertBefore(elB, endNode); + parentNode.insertBefore(after, endNode); + parentNode.removeChild(endNode); + + return elB; + } + }; + } + + function unwrapElement(element) { + var parentNode = element.parentNode; + parentNode.insertBefore(element.firstChild, element); + element.parentNode.removeChild(element); + } + + function getWrappersByIndex(index) { + var elements = node.getElementsByTagName('*'), wrappers = []; + + index = typeof(index) == "number" ? "" + index : null; + + for (var i = 0; i < elements.length; i++) { + var element = elements[i], dataIndex = element.getAttribute('data-mce-index'); + + if (dataIndex !== null && dataIndex.length) { + if (dataIndex === index || index === null) { + wrappers.push(element); + } + } + } + + return wrappers; + } + + /** + * Returns the index of a specific match object or -1 if it isn't found. + * + * @param {Match} match Text match object. + * @return {Number} Index of match or -1 if it isn't found. + */ + function indexOf(match) { + var i = matches.length; + while (i--) { + if (matches[i] === match) { + return i; + } + } + + return -1; + } + + /** + * Filters the matches. If the callback returns true it stays if not it gets removed. + * + * @param {Function} callback Callback to execute for each match. + * @return {DomTextMatcher} Current DomTextMatcher instance. + */ + function filter(callback) { + var filteredMatches = []; + + each(function(match, i) { + if (callback(match, i)) { + filteredMatches.push(match); + } + }); + + matches = filteredMatches; + + /*jshint validthis:true*/ + return this; + } + + /** + * Executes the specified callback for each match. + * + * @param {Function} callback Callback to execute for each match. + * @return {DomTextMatcher} Current DomTextMatcher instance. + */ + function each(callback) { + for (var i = 0, l = matches.length; i < l; i++) { + if (callback(matches[i], i) === false) { + break; + } + } + + /*jshint validthis:true*/ + return this; + } + + /** + * Wraps the current matches with nodes created by the specified callback. + * Multiple clones of these matches might occur on matches that are on multiple nodex. + * + * @param {Function} callback Callback to execute in order to create elements for matches. + * @return {DomTextMatcher} Current DomTextMatcher instance. + */ + function wrap(callback) { + if (matches.length) { + stepThroughMatches(node, matches, genReplacer(callback)); + } + + /*jshint validthis:true*/ + return this; + } + + /** + * Finds the specified regexp and adds them to the matches collection. + * + * @param {RegExp} regex Global regexp to search the current node by. + * @param {Object} [data] Optional custom data element for the match. + * @return {DomTextMatcher} Current DomTextMatcher instance. + */ + function find(regex, data) { + if (text && regex.global) { + while ((m = regex.exec(text))) { + matches.push(createMatch(m, data)); + } + } + + return this; + } + + /** + * Unwraps the specified match object or all matches if unspecified. + * + * @param {Object} [match] Optional match object. + * @return {DomTextMatcher} Current DomTextMatcher instance. + */ + function unwrap(match) { + var i, elements = getWrappersByIndex(match ? indexOf(match) : null); + + i = elements.length; + while (i--) { + unwrapElement(elements[i]); + } + + return this; + } + + /** + * Returns a match object by the specified DOM element. + * + * @param {DOMElement} element Element to return match object for. + * @return {Object} Match object for the specified element. + */ + function matchFromElement(element) { + return matches[element.getAttribute('data-mce-index')]; + } + + /** + * Returns a DOM element from the specified match element. This will be the first element if it's split + * on multiple nodes. + * + * @param {Object} match Match element to get first element of. + * @return {DOMElement} DOM element for the specified match object. + */ + function elementFromMatch(match) { + return getWrappersByIndex(indexOf(match))[0]; + } + + /** + * Adds match the specified range for example a grammar line. + * + * @param {Number} start Start offset. + * @param {Number} length Length of the text. + * @param {Object} data Custom data object for match. + * @return {DomTextMatcher} Current DomTextMatcher instance. + */ + function add(start, length, data) { + matches.push({ + start: start, + end: start + length, + text: text.substr(start, length), + data: data + }); + + return this; + } + + /** + * Returns a DOM range for the specified match. + * + * @param {Object} match Match object to get range for. + * @return {DOMRange} DOM Range for the specified match. + */ + function rangeFromMatch(match) { + var wrappers = getWrappersByIndex(indexOf(match)); + + var rng = editor.dom.createRng(); + rng.setStartBefore(wrappers[0]); + rng.setEndAfter(wrappers[wrappers.length - 1]); + + return rng; + } + + /** + * Replaces the specified match with the specified text. + * + * @param {Object} match Match object to replace. + * @param {String} text Text to replace the match with. + * @return {DOMRange} DOM range produced after the replace. + */ + function replace(match, text) { + var rng = rangeFromMatch(match); + + rng.deleteContents(); + + if (text.length > 0) { + rng.insertNode(editor.dom.doc.createTextNode(text)); + } + + return rng; + } + + /** + * Resets the DomTextMatcher instance. This will remove any wrapped nodes and remove any matches. + * + * @return {[type]} [description] + */ + function reset() { + matches.splice(0, matches.length); + unwrap(); + + return this; + } + + text = getText(node); + + return { + text: text, + matches: matches, + each: each, + filter: filter, + reset: reset, + matchFromElement: matchFromElement, + elementFromMatch: elementFromMatch, + find: find, + add: add, + wrap: wrap, + unwrap: unwrap, + replace: replace, + rangeFromMatch: rangeFromMatch, + indexOf: indexOf + }; + }; +}); diff --git a/common/static/js/vendor/tinymce/js/tinymce/plugins/spellchecker/classes/Plugin.js b/common/static/js/vendor/tinymce/js/tinymce/plugins/spellchecker/classes/Plugin.js new file mode 100755 index 0000000000..2fc99cf691 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/plugins/spellchecker/classes/Plugin.js @@ -0,0 +1,343 @@ +/** + * Plugin.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*jshint camelcase:false */ + +/** + * This class contains all core logic for the spellchecker plugin. + * + * @class tinymce.spellcheckerplugin.Plugin + * @private + */ +define("tinymce/spellcheckerplugin/Plugin", [ + "tinymce/spellcheckerplugin/DomTextMatcher", + "tinymce/PluginManager", + "tinymce/util/Tools", + "tinymce/ui/Menu", + "tinymce/dom/DOMUtils", + "tinymce/util/JSONRequest", + "tinymce/util/URI" +], function(DomTextMatcher, PluginManager, Tools, Menu, DOMUtils, JSONRequest, URI) { + PluginManager.add('spellchecker', function(editor, url) { + var languageMenuItems, self = this, lastSuggestions, started, suggestionsMenu, settings = editor.settings; + + function getTextMatcher() { + if (!self.textMatcher) { + self.textMatcher = new DomTextMatcher(editor.getBody(), editor); + } + + return self.textMatcher; + } + + function buildMenuItems(listName, languageValues) { + var items = []; + + Tools.each(languageValues, function(languageValue) { + items.push({ + selectable: true, + text: languageValue.name, + data: languageValue.value + }); + }); + + return items; + } + + var languagesString = settings.spellchecker_languages || + 'English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr_FR,' + + 'German=de,Italian=it,Polish=pl,Portuguese=pt_BR,' + + 'Spanish=es,Swedish=sv'; + + languageMenuItems = buildMenuItems('Language', + Tools.map(languagesString.split(','), + function(lang_pair) { + var lang = lang_pair.split('='); + + return { + name: lang[0], + value: lang[1] + }; + } + ) + ); + + function isEmpty(obj) { + /*jshint unused:false*/ + /*eslint no-unused-vars:0 */ + for (var name in obj) { + return false; + } + + return true; + } + + function showSuggestions(match) { + var items = [], suggestions = lastSuggestions[match.text]; + + Tools.each(suggestions, function(suggestion) { + items.push({ + text: suggestion, + onclick: function() { + var rng = getTextMatcher().replace(match, suggestion); + rng.collapse(false); + editor.selection.setRng(rng); + checkIfFinished(); + } + }); + }); + + items.push.apply(items, [ + {text: '-'}, + + {text: 'Ignore', onclick: function() { + ignoreWord(match); + }}, + + {text: 'Ignore all', onclick: function() { + ignoreWord(match, true); + }}, + + {text: 'Finish', onclick: finish} + ]); + + // Render menu + suggestionsMenu = new Menu({ + items: items, + context: 'contextmenu', + onautohide: function(e) { + if (e.target.className.indexOf('spellchecker') != -1) { + e.preventDefault(); + } + }, + onhide: function() { + suggestionsMenu.remove(); + suggestionsMenu = null; + } + }); + + suggestionsMenu.renderTo(document.body); + + // Position menu + var matchNode = getTextMatcher().elementFromMatch(match); + var pos = DOMUtils.DOM.getPos(editor.getContentAreaContainer()); + var targetPos = editor.dom.getPos(matchNode); + var root = editor.dom.getRoot(); + + // Adjust targetPos for scrolling in the editor + if (root.nodeName == 'BODY') { + targetPos.x -= root.ownerDocument.documentElement.scrollLeft || root.scrollLeft; + targetPos.y -= root.ownerDocument.documentElement.scrollTop || root.scrollTop; + } else { + targetPos.x -= root.scrollLeft; + targetPos.y -= root.scrollTop; + } + + pos.x += targetPos.x; + pos.y += targetPos.y; + + suggestionsMenu.moveTo(pos.x, pos.y + matchNode.offsetHeight); + } + + function spellcheck() { + var words = [], uniqueWords = {}; + + if (started) { + finish(); + return; + } else { + finish(); + } + + started = true; + + function doneCallback(suggestions) { + editor.setProgressState(false); + + if (isEmpty(suggestions)) { + editor.windowManager.alert('No misspellings found'); + started = false; + return; + } + + lastSuggestions = suggestions; + + getTextMatcher().filter(function(match) { + return !!suggestions[match.text]; + }).wrap(function() { + return editor.dom.create('span', { + "class": 'mce-spellchecker-word', + "data-mce-bogus": 1 + }); + }); + + editor.fire('SpellcheckStart'); + } + + // Regexp for finding word specific characters this will split words by + // spaces, quotes, copy right characters etc. It's escaped with unicode characters + // to make it easier to output scripts on servers using different encodings + // so if you add any characters outside the 128 byte range make sure to escape it + var nonWordSeparatorCharacters = editor.getParam('spellchecker_wordchar_pattern') || new RegExp("[^" + + "\\s!\"#$%&()*+,-./:;<=>?@[\\]^_{|}`" + + "\u00a7\u00a9\u00ab\u00ae\u00b1\u00b6\u00b7\u00b8\u00bb" + + "\u00bc\u00bd\u00be\u00bf\u00d7\u00f7\u00a4\u201d\u201c\u201e" + + "]+", "g"); + + // Find all words and make an unique words array + getTextMatcher().find(nonWordSeparatorCharacters).each(function(match) { + var word = match.text; + + // TODO: Fix so it remembers correctly spelled words + if (!uniqueWords[word]) { + // Ignore numbers and single character words + if (/^\d+$/.test(word) || word.length == 1) { + return; + } + + words.push(word); + uniqueWords[word] = true; + } + }); + + function defaultSpellcheckCallback(method, words, doneCallback) { + JSONRequest.sendRPC({ + url: new URI(url).toAbsolute(settings.spellchecker_rpc_url), + method: method, + params: { + lang: settings.spellchecker_language || "en", + words: words + }, + success: function(result) { + doneCallback(result); + }, + error: function(error, xhr) { + if (error == "JSON Parse error.") { + error = "Non JSON response:" + xhr.responseText; + } else { + error = "Error: " + error; + } + + editor.windowManager.alert(error); + editor.setProgressState(false); + finish(); + } + }); + } + + editor.setProgressState(true); + + var spellCheckCallback = settings.spellchecker_callback || defaultSpellcheckCallback; + spellCheckCallback("spellcheck", words, doneCallback); + + editor.focus(); + } + + function checkIfFinished() { + if (!editor.dom.select('span.mce-spellchecker-word').length) { + finish(); + } + } + + function ignoreWord(wordMatch, all) { + editor.selection.collapse(); + + if (all) { + getTextMatcher().each(function(match) { + if (match.text == wordMatch.text) { + getTextMatcher().unwrap(match); + } + }); + } else { + getTextMatcher().unwrap(wordMatch); + } + + checkIfFinished(); + } + + function finish() { + getTextMatcher().reset(); + self.textMatcher = null; + + if (started) { + started = false; + editor.fire('SpellcheckEnd'); + } + } + + editor.on('click', function(e) { + if (e.target.className == "mce-spellchecker-word") { + e.preventDefault(); + + var match = getTextMatcher().matchFromElement(e.target); + editor.selection.setRng(getTextMatcher().rangeFromMatch(match)); + + showSuggestions(match); + } + }); + + editor.addMenuItem('spellchecker', { + text: 'Spellcheck', + context: 'tools', + onclick: spellcheck, + selectable: true, + onPostRender: function() { + var self = this; + + editor.on('SpellcheckStart SpellcheckEnd', function() { + self.active(started); + }); + } + }); + + function updateSelection(e) { + var selectedLanguage = settings.spellchecker_language; + + e.control.items().each(function(ctrl) { + ctrl.active(ctrl.settings.data === selectedLanguage); + }); + } + + var buttonArgs = { + tooltip: 'Spellcheck', + onclick: spellcheck, + onPostRender: function() { + var self = this; + + editor.on('SpellcheckStart SpellcheckEnd', function() { + self.active(started); + }); + } + }; + + if (languageMenuItems.length > 1) { + buttonArgs.type = 'splitbutton'; + buttonArgs.menu = languageMenuItems; + buttonArgs.onshow = updateSelection; + buttonArgs.onselect = function(e) { + settings.spellchecker_language = e.control.settings.data; + }; + } + + editor.addButton('spellchecker', buttonArgs); + editor.addCommand('mceSpellCheck', spellcheck); + + editor.on('remove', function() { + if (suggestionsMenu) { + suggestionsMenu.remove(); + suggestionsMenu = null; + } + }); + + this.getTextMatcher = getTextMatcher; + + // Set default spellchecker language if it's not specified + settings.spellchecker_language = settings.spellchecker_language || settings.language || 'en'; + }); +}); diff --git a/common/static/js/vendor/tinymce/js/tinymce/plugins/spellchecker/plugin.dev.js b/common/static/js/vendor/tinymce/js/tinymce/plugins/spellchecker/plugin.dev.js new file mode 100755 index 0000000000..60bd6c7ce4 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/plugins/spellchecker/plugin.dev.js @@ -0,0 +1,117 @@ +/** + * Inline development version. Only to be used while developing since it uses document.write to load scripts. + */ + +/*jshint smarttabs:true, undef:true, latedef:true, curly:true, bitwise:true, camelcase:true */ +/*globals $code */ + +(function(exports) { + "use strict"; + + var html = "", baseDir; + var modules = {}, exposedModules = [], moduleCount = 0; + + var scripts = document.getElementsByTagName('script'); + for (var i = 0; i < scripts.length; i++) { + var src = scripts[i].src; + + if (src.indexOf('/plugin.dev.js') != -1) { + baseDir = src.substring(0, src.lastIndexOf('/')); + } + } + + function require(ids, callback) { + var module, defs = []; + + for (var i = 0; i < ids.length; ++i) { + module = modules[ids[i]] || resolve(ids[i]); + if (!module) { + throw 'module definition dependecy not found: ' + ids[i]; + } + + defs.push(module); + } + + callback.apply(null, defs); + } + + function resolve(id) { + var target = exports; + var fragments = id.split(/[.\/]/); + + for (var fi = 0; fi < fragments.length; ++fi) { + if (!target[fragments[fi]]) { + return; + } + + target = target[fragments[fi]]; + } + + return target; + } + + function register(id) { + var target = exports; + var fragments = id.split(/[.\/]/); + + for (var fi = 0; fi < fragments.length - 1; ++fi) { + if (target[fragments[fi]] === undefined) { + target[fragments[fi]] = {}; + } + + target = target[fragments[fi]]; + } + + target[fragments[fragments.length - 1]] = modules[id]; + } + + function define(id, dependencies, definition) { + if (typeof id !== 'string') { + throw 'invalid module definition, module id must be defined and be a string'; + } + + if (dependencies === undefined) { + throw 'invalid module definition, dependencies must be specified'; + } + + if (definition === undefined) { + throw 'invalid module definition, definition function must be specified'; + } + + require(dependencies, function() { + modules[id] = definition.apply(null, arguments); + }); + + if (--moduleCount === 0) { + for (var i = 0; i < exposedModules.length; i++) { + register(exposedModules[i]); + } + } + } + + function expose(ids) { + exposedModules = ids; + } + + function writeScripts() { + document.write(html); + } + + function load(path) { + html += '\n'; + moduleCount++; + } + + // Expose globally + exports.define = define; + exports.require = require; + + expose(["tinymce/spellcheckerplugin/DomTextMatcher","tinymce/spellcheckerplugin/Plugin"]); + + load('classes/DomTextMatcher.js'); + load('classes/Plugin.js'); + + writeScripts(); +})(this); + +// $hash: 251b042e64f9ee017e1974a6737a818f \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/plugins/spellchecker/plugin.js b/common/static/js/vendor/tinymce/js/tinymce/plugins/spellchecker/plugin.js new file mode 100755 index 0000000000..01061c1b36 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/plugins/spellchecker/plugin.js @@ -0,0 +1,903 @@ +/** + * Compiled inline version. (Library mode) + */ + +/*jshint smarttabs:true, undef:true, latedef:true, curly:true, bitwise:true, camelcase:true */ +/*globals $code */ + +(function(exports, undefined) { + "use strict"; + + var modules = {}; + + function require(ids, callback) { + var module, defs = []; + + for (var i = 0; i < ids.length; ++i) { + module = modules[ids[i]] || resolve(ids[i]); + if (!module) { + throw 'module definition dependecy not found: ' + ids[i]; + } + + defs.push(module); + } + + callback.apply(null, defs); + } + + function define(id, dependencies, definition) { + if (typeof id !== 'string') { + throw 'invalid module definition, module id must be defined and be a string'; + } + + if (dependencies === undefined) { + throw 'invalid module definition, dependencies must be specified'; + } + + if (definition === undefined) { + throw 'invalid module definition, definition function must be specified'; + } + + require(dependencies, function() { + modules[id] = definition.apply(null, arguments); + }); + } + + function defined(id) { + return !!modules[id]; + } + + function resolve(id) { + var target = exports; + var fragments = id.split(/[.\/]/); + + for (var fi = 0; fi < fragments.length; ++fi) { + if (!target[fragments[fi]]) { + return; + } + + target = target[fragments[fi]]; + } + + return target; + } + + function expose(ids) { + for (var i = 0; i < ids.length; i++) { + var target = exports; + var id = ids[i]; + var fragments = id.split(/[.\/]/); + + for (var fi = 0; fi < fragments.length - 1; ++fi) { + if (target[fragments[fi]] === undefined) { + target[fragments[fi]] = {}; + } + + target = target[fragments[fi]]; + } + + target[fragments[fragments.length - 1]] = modules[id]; + } + } + +// Included from: js/tinymce/plugins/spellchecker/classes/DomTextMatcher.js + +/** + * DomTextMatcher.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*eslint no-labels:0, no-constant-condition: 0 */ + +/** + * This class logic for filtering text and matching words. + * + * @class tinymce.spellcheckerplugin.TextFilter + * @private + */ +define("tinymce/spellcheckerplugin/DomTextMatcher", [], function() { + // Based on work developed by: James Padolsey http://james.padolsey.com + // released under UNLICENSE that is compatible with LGPL + // TODO: Handle contentEditable edgecase: + //

    texttexttexttexttext

    + return function(node, editor) { + var m, matches = [], text, dom = editor.dom; + var blockElementsMap, hiddenTextElementsMap, shortEndedElementsMap; + + blockElementsMap = editor.schema.getBlockElements(); // H1-H6, P, TD etc + hiddenTextElementsMap = editor.schema.getWhiteSpaceElements(); // TEXTAREA, PRE, STYLE, SCRIPT + shortEndedElementsMap = editor.schema.getShortEndedElements(); // BR, IMG, INPUT + + function createMatch(m, data) { + if (!m[0]) { + throw 'findAndReplaceDOMText cannot handle zero-length matches'; + } + + return { + start: m.index, + end: m.index + m[0].length, + text: m[0], + data: data + }; + } + + function getText(node) { + var txt; + + if (node.nodeType === 3) { + return node.data; + } + + if (hiddenTextElementsMap[node.nodeName] && !blockElementsMap[node.nodeName]) { + return ''; + } + + txt = ''; + + if (blockElementsMap[node.nodeName] || shortEndedElementsMap[node.nodeName]) { + txt += '\n'; + } + + if ((node = node.firstChild)) { + do { + txt += getText(node); + } while ((node = node.nextSibling)); + } + + return txt; + } + + function stepThroughMatches(node, matches, replaceFn) { + var startNode, endNode, startNodeIndex, + endNodeIndex, innerNodes = [], atIndex = 0, curNode = node, + matchLocation, matchIndex = 0; + + matches = matches.slice(0); + matches.sort(function(a, b) { + return a.start - b.start; + }); + + matchLocation = matches.shift(); + + out: while (true) { + if (blockElementsMap[curNode.nodeName] || shortEndedElementsMap[curNode.nodeName]) { + atIndex++; + } + + if (curNode.nodeType === 3) { + if (!endNode && curNode.length + atIndex >= matchLocation.end) { + // We've found the ending + endNode = curNode; + endNodeIndex = matchLocation.end - atIndex; + } else if (startNode) { + // Intersecting node + innerNodes.push(curNode); + } + + if (!startNode && curNode.length + atIndex > matchLocation.start) { + // We've found the match start + startNode = curNode; + startNodeIndex = matchLocation.start - atIndex; + } + + atIndex += curNode.length; + } + + if (startNode && endNode) { + curNode = replaceFn({ + startNode: startNode, + startNodeIndex: startNodeIndex, + endNode: endNode, + endNodeIndex: endNodeIndex, + innerNodes: innerNodes, + match: matchLocation.text, + matchIndex: matchIndex + }); + + // replaceFn has to return the node that replaced the endNode + // and then we step back so we can continue from the end of the + // match: + atIndex -= (endNode.length - endNodeIndex); + startNode = null; + endNode = null; + innerNodes = []; + matchLocation = matches.shift(); + matchIndex++; + + if (!matchLocation) { + break; // no more matches + } + } else if ((!hiddenTextElementsMap[curNode.nodeName] || blockElementsMap[curNode.nodeName]) && curNode.firstChild) { + // Move down + curNode = curNode.firstChild; + continue; + } else if (curNode.nextSibling) { + // Move forward: + curNode = curNode.nextSibling; + continue; + } + + // Move forward or up: + while (true) { + if (curNode.nextSibling) { + curNode = curNode.nextSibling; + break; + } else if (curNode.parentNode !== node) { + curNode = curNode.parentNode; + } else { + break out; + } + } + } + } + + /** + * Generates the actual replaceFn which splits up text nodes + * and inserts the replacement element. + */ + function genReplacer(callback) { + function makeReplacementNode(fill, matchIndex) { + var match = matches[matchIndex]; + + if (!match.stencil) { + match.stencil = callback(match); + } + + var clone = match.stencil.cloneNode(false); + clone.setAttribute('data-mce-index', matchIndex); + + if (fill) { + clone.appendChild(dom.doc.createTextNode(fill)); + } + + return clone; + } + + return function(range) { + var before, after, parentNode, startNode = range.startNode, + endNode = range.endNode, matchIndex = range.matchIndex, + doc = dom.doc; + + if (startNode === endNode) { + var node = startNode; + + parentNode = node.parentNode; + if (range.startNodeIndex > 0) { + // Add "before" text node (before the match) + before = doc.createTextNode(node.data.substring(0, range.startNodeIndex)); + parentNode.insertBefore(before, node); + } + + // Create the replacement node: + var el = makeReplacementNode(range.match, matchIndex); + parentNode.insertBefore(el, node); + if (range.endNodeIndex < node.length) { + // Add "after" text node (after the match) + after = doc.createTextNode(node.data.substring(range.endNodeIndex)); + parentNode.insertBefore(after, node); + } + + node.parentNode.removeChild(node); + + return el; + } else { + // Replace startNode -> [innerNodes...] -> endNode (in that order) + before = doc.createTextNode(startNode.data.substring(0, range.startNodeIndex)); + after = doc.createTextNode(endNode.data.substring(range.endNodeIndex)); + var elA = makeReplacementNode(startNode.data.substring(range.startNodeIndex), matchIndex); + var innerEls = []; + + for (var i = 0, l = range.innerNodes.length; i < l; ++i) { + var innerNode = range.innerNodes[i]; + var innerEl = makeReplacementNode(innerNode.data, matchIndex); + innerNode.parentNode.replaceChild(innerEl, innerNode); + innerEls.push(innerEl); + } + + var elB = makeReplacementNode(endNode.data.substring(0, range.endNodeIndex), matchIndex); + + parentNode = startNode.parentNode; + parentNode.insertBefore(before, startNode); + parentNode.insertBefore(elA, startNode); + parentNode.removeChild(startNode); + + parentNode = endNode.parentNode; + parentNode.insertBefore(elB, endNode); + parentNode.insertBefore(after, endNode); + parentNode.removeChild(endNode); + + return elB; + } + }; + } + + function unwrapElement(element) { + var parentNode = element.parentNode; + parentNode.insertBefore(element.firstChild, element); + element.parentNode.removeChild(element); + } + + function getWrappersByIndex(index) { + var elements = node.getElementsByTagName('*'), wrappers = []; + + index = typeof(index) == "number" ? "" + index : null; + + for (var i = 0; i < elements.length; i++) { + var element = elements[i], dataIndex = element.getAttribute('data-mce-index'); + + if (dataIndex !== null && dataIndex.length) { + if (dataIndex === index || index === null) { + wrappers.push(element); + } + } + } + + return wrappers; + } + + /** + * Returns the index of a specific match object or -1 if it isn't found. + * + * @param {Match} match Text match object. + * @return {Number} Index of match or -1 if it isn't found. + */ + function indexOf(match) { + var i = matches.length; + while (i--) { + if (matches[i] === match) { + return i; + } + } + + return -1; + } + + /** + * Filters the matches. If the callback returns true it stays if not it gets removed. + * + * @param {Function} callback Callback to execute for each match. + * @return {DomTextMatcher} Current DomTextMatcher instance. + */ + function filter(callback) { + var filteredMatches = []; + + each(function(match, i) { + if (callback(match, i)) { + filteredMatches.push(match); + } + }); + + matches = filteredMatches; + + /*jshint validthis:true*/ + return this; + } + + /** + * Executes the specified callback for each match. + * + * @param {Function} callback Callback to execute for each match. + * @return {DomTextMatcher} Current DomTextMatcher instance. + */ + function each(callback) { + for (var i = 0, l = matches.length; i < l; i++) { + if (callback(matches[i], i) === false) { + break; + } + } + + /*jshint validthis:true*/ + return this; + } + + /** + * Wraps the current matches with nodes created by the specified callback. + * Multiple clones of these matches might occur on matches that are on multiple nodex. + * + * @param {Function} callback Callback to execute in order to create elements for matches. + * @return {DomTextMatcher} Current DomTextMatcher instance. + */ + function wrap(callback) { + if (matches.length) { + stepThroughMatches(node, matches, genReplacer(callback)); + } + + /*jshint validthis:true*/ + return this; + } + + /** + * Finds the specified regexp and adds them to the matches collection. + * + * @param {RegExp} regex Global regexp to search the current node by. + * @param {Object} [data] Optional custom data element for the match. + * @return {DomTextMatcher} Current DomTextMatcher instance. + */ + function find(regex, data) { + if (text && regex.global) { + while ((m = regex.exec(text))) { + matches.push(createMatch(m, data)); + } + } + + return this; + } + + /** + * Unwraps the specified match object or all matches if unspecified. + * + * @param {Object} [match] Optional match object. + * @return {DomTextMatcher} Current DomTextMatcher instance. + */ + function unwrap(match) { + var i, elements = getWrappersByIndex(match ? indexOf(match) : null); + + i = elements.length; + while (i--) { + unwrapElement(elements[i]); + } + + return this; + } + + /** + * Returns a match object by the specified DOM element. + * + * @param {DOMElement} element Element to return match object for. + * @return {Object} Match object for the specified element. + */ + function matchFromElement(element) { + return matches[element.getAttribute('data-mce-index')]; + } + + /** + * Returns a DOM element from the specified match element. This will be the first element if it's split + * on multiple nodes. + * + * @param {Object} match Match element to get first element of. + * @return {DOMElement} DOM element for the specified match object. + */ + function elementFromMatch(match) { + return getWrappersByIndex(indexOf(match))[0]; + } + + /** + * Adds match the specified range for example a grammar line. + * + * @param {Number} start Start offset. + * @param {Number} length Length of the text. + * @param {Object} data Custom data object for match. + * @return {DomTextMatcher} Current DomTextMatcher instance. + */ + function add(start, length, data) { + matches.push({ + start: start, + end: start + length, + text: text.substr(start, length), + data: data + }); + + return this; + } + + /** + * Returns a DOM range for the specified match. + * + * @param {Object} match Match object to get range for. + * @return {DOMRange} DOM Range for the specified match. + */ + function rangeFromMatch(match) { + var wrappers = getWrappersByIndex(indexOf(match)); + + var rng = editor.dom.createRng(); + rng.setStartBefore(wrappers[0]); + rng.setEndAfter(wrappers[wrappers.length - 1]); + + return rng; + } + + /** + * Replaces the specified match with the specified text. + * + * @param {Object} match Match object to replace. + * @param {String} text Text to replace the match with. + * @return {DOMRange} DOM range produced after the replace. + */ + function replace(match, text) { + var rng = rangeFromMatch(match); + + rng.deleteContents(); + + if (text.length > 0) { + rng.insertNode(editor.dom.doc.createTextNode(text)); + } + + return rng; + } + + /** + * Resets the DomTextMatcher instance. This will remove any wrapped nodes and remove any matches. + * + * @return {[type]} [description] + */ + function reset() { + matches.splice(0, matches.length); + unwrap(); + + return this; + } + + text = getText(node); + + return { + text: text, + matches: matches, + each: each, + filter: filter, + reset: reset, + matchFromElement: matchFromElement, + elementFromMatch: elementFromMatch, + find: find, + add: add, + wrap: wrap, + unwrap: unwrap, + replace: replace, + rangeFromMatch: rangeFromMatch, + indexOf: indexOf + }; + }; +}); + +// Included from: js/tinymce/plugins/spellchecker/classes/Plugin.js + +/** + * Plugin.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*jshint camelcase:false */ + +/** + * This class contains all core logic for the spellchecker plugin. + * + * @class tinymce.spellcheckerplugin.Plugin + * @private + */ +define("tinymce/spellcheckerplugin/Plugin", [ + "tinymce/spellcheckerplugin/DomTextMatcher", + "tinymce/PluginManager", + "tinymce/util/Tools", + "tinymce/ui/Menu", + "tinymce/dom/DOMUtils", + "tinymce/util/JSONRequest", + "tinymce/util/URI" +], function(DomTextMatcher, PluginManager, Tools, Menu, DOMUtils, JSONRequest, URI) { + PluginManager.add('spellchecker', function(editor, url) { + var languageMenuItems, self = this, lastSuggestions, started, suggestionsMenu, settings = editor.settings; + + function getTextMatcher() { + if (!self.textMatcher) { + self.textMatcher = new DomTextMatcher(editor.getBody(), editor); + } + + return self.textMatcher; + } + + function buildMenuItems(listName, languageValues) { + var items = []; + + Tools.each(languageValues, function(languageValue) { + items.push({ + selectable: true, + text: languageValue.name, + data: languageValue.value + }); + }); + + return items; + } + + var languagesString = settings.spellchecker_languages || + 'English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr_FR,' + + 'German=de,Italian=it,Polish=pl,Portuguese=pt_BR,' + + 'Spanish=es,Swedish=sv'; + + languageMenuItems = buildMenuItems('Language', + Tools.map(languagesString.split(','), + function(lang_pair) { + var lang = lang_pair.split('='); + + return { + name: lang[0], + value: lang[1] + }; + } + ) + ); + + function isEmpty(obj) { + /*jshint unused:false*/ + /*eslint no-unused-vars:0 */ + for (var name in obj) { + return false; + } + + return true; + } + + function showSuggestions(match) { + var items = [], suggestions = lastSuggestions[match.text]; + + Tools.each(suggestions, function(suggestion) { + items.push({ + text: suggestion, + onclick: function() { + var rng = getTextMatcher().replace(match, suggestion); + rng.collapse(false); + editor.selection.setRng(rng); + checkIfFinished(); + } + }); + }); + + items.push.apply(items, [ + {text: '-'}, + + {text: 'Ignore', onclick: function() { + ignoreWord(match); + }}, + + {text: 'Ignore all', onclick: function() { + ignoreWord(match, true); + }}, + + {text: 'Finish', onclick: finish} + ]); + + // Render menu + suggestionsMenu = new Menu({ + items: items, + context: 'contextmenu', + onautohide: function(e) { + if (e.target.className.indexOf('spellchecker') != -1) { + e.preventDefault(); + } + }, + onhide: function() { + suggestionsMenu.remove(); + suggestionsMenu = null; + } + }); + + suggestionsMenu.renderTo(document.body); + + // Position menu + var matchNode = getTextMatcher().elementFromMatch(match); + var pos = DOMUtils.DOM.getPos(editor.getContentAreaContainer()); + var targetPos = editor.dom.getPos(matchNode); + var root = editor.dom.getRoot(); + + // Adjust targetPos for scrolling in the editor + if (root.nodeName == 'BODY') { + targetPos.x -= root.ownerDocument.documentElement.scrollLeft || root.scrollLeft; + targetPos.y -= root.ownerDocument.documentElement.scrollTop || root.scrollTop; + } else { + targetPos.x -= root.scrollLeft; + targetPos.y -= root.scrollTop; + } + + pos.x += targetPos.x; + pos.y += targetPos.y; + + suggestionsMenu.moveTo(pos.x, pos.y + matchNode.offsetHeight); + } + + function spellcheck() { + var words = [], uniqueWords = {}; + + if (started) { + finish(); + return; + } else { + finish(); + } + + started = true; + + function doneCallback(suggestions) { + editor.setProgressState(false); + + if (isEmpty(suggestions)) { + editor.windowManager.alert('No misspellings found'); + started = false; + return; + } + + lastSuggestions = suggestions; + + getTextMatcher().filter(function(match) { + return !!suggestions[match.text]; + }).wrap(function() { + return editor.dom.create('span', { + "class": 'mce-spellchecker-word', + "data-mce-bogus": 1 + }); + }); + + editor.fire('SpellcheckStart'); + } + + // Regexp for finding word specific characters this will split words by + // spaces, quotes, copy right characters etc. It's escaped with unicode characters + // to make it easier to output scripts on servers using different encodings + // so if you add any characters outside the 128 byte range make sure to escape it + var nonWordSeparatorCharacters = editor.getParam('spellchecker_wordchar_pattern') || new RegExp("[^" + + "\\s!\"#$%&()*+,-./:;<=>?@[\\]^_{|}`" + + "\u00a7\u00a9\u00ab\u00ae\u00b1\u00b6\u00b7\u00b8\u00bb" + + "\u00bc\u00bd\u00be\u00bf\u00d7\u00f7\u00a4\u201d\u201c\u201e" + + "]+", "g"); + + // Find all words and make an unique words array + getTextMatcher().find(nonWordSeparatorCharacters).each(function(match) { + var word = match.text; + + // TODO: Fix so it remembers correctly spelled words + if (!uniqueWords[word]) { + // Ignore numbers and single character words + if (/^\d+$/.test(word) || word.length == 1) { + return; + } + + words.push(word); + uniqueWords[word] = true; + } + }); + + function defaultSpellcheckCallback(method, words, doneCallback) { + JSONRequest.sendRPC({ + url: new URI(url).toAbsolute(settings.spellchecker_rpc_url), + method: method, + params: { + lang: settings.spellchecker_language || "en", + words: words + }, + success: function(result) { + doneCallback(result); + }, + error: function(error, xhr) { + if (error == "JSON Parse error.") { + error = "Non JSON response:" + xhr.responseText; + } else { + error = "Error: " + error; + } + + editor.windowManager.alert(error); + editor.setProgressState(false); + finish(); + } + }); + } + + editor.setProgressState(true); + + var spellCheckCallback = settings.spellchecker_callback || defaultSpellcheckCallback; + spellCheckCallback("spellcheck", words, doneCallback); + + editor.focus(); + } + + function checkIfFinished() { + if (!editor.dom.select('span.mce-spellchecker-word').length) { + finish(); + } + } + + function ignoreWord(wordMatch, all) { + editor.selection.collapse(); + + if (all) { + getTextMatcher().each(function(match) { + if (match.text == wordMatch.text) { + getTextMatcher().unwrap(match); + } + }); + } else { + getTextMatcher().unwrap(wordMatch); + } + + checkIfFinished(); + } + + function finish() { + getTextMatcher().reset(); + self.textMatcher = null; + + if (started) { + started = false; + editor.fire('SpellcheckEnd'); + } + } + + editor.on('click', function(e) { + if (e.target.className == "mce-spellchecker-word") { + e.preventDefault(); + + var match = getTextMatcher().matchFromElement(e.target); + editor.selection.setRng(getTextMatcher().rangeFromMatch(match)); + + showSuggestions(match); + } + }); + + editor.addMenuItem('spellchecker', { + text: 'Spellcheck', + context: 'tools', + onclick: spellcheck, + selectable: true, + onPostRender: function() { + var self = this; + + editor.on('SpellcheckStart SpellcheckEnd', function() { + self.active(started); + }); + } + }); + + function updateSelection(e) { + var selectedLanguage = settings.spellchecker_language; + + e.control.items().each(function(ctrl) { + ctrl.active(ctrl.settings.data === selectedLanguage); + }); + } + + var buttonArgs = { + tooltip: 'Spellcheck', + onclick: spellcheck, + onPostRender: function() { + var self = this; + + editor.on('SpellcheckStart SpellcheckEnd', function() { + self.active(started); + }); + } + }; + + if (languageMenuItems.length > 1) { + buttonArgs.type = 'splitbutton'; + buttonArgs.menu = languageMenuItems; + buttonArgs.onshow = updateSelection; + buttonArgs.onselect = function(e) { + settings.spellchecker_language = e.control.settings.data; + }; + } + + editor.addButton('spellchecker', buttonArgs); + editor.addCommand('mceSpellCheck', spellcheck); + + editor.on('remove', function() { + if (suggestionsMenu) { + suggestionsMenu.remove(); + suggestionsMenu = null; + } + }); + + this.getTextMatcher = getTextMatcher; + + // Set default spellchecker language if it's not specified + settings.spellchecker_language = settings.spellchecker_language || settings.language || 'en'; + }); +}); + +expose(["tinymce/spellcheckerplugin/DomTextMatcher","tinymce/spellcheckerplugin/Plugin"]); +})(this); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/plugins/spellchecker/plugin.min.js b/common/static/js/vendor/tinymce/js/tinymce/plugins/spellchecker/plugin.min.js new file mode 100755 index 0000000000..0a0e1aa8cd --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/plugins/spellchecker/plugin.min.js @@ -0,0 +1 @@ +!function(e,t){"use strict";function n(e,t){for(var n,r=[],i=0;i=d.end?(i=c,a=d.end-l):r&&s.push(c),!r&&c.length+l>d.start&&(r=c,o=d.start-l),l+=c.length),r&&i){if(c=n({startNode:r,startNodeIndex:o,endNode:i,endNodeIndex:a,innerNodes:s,match:d.text,matchIndex:u}),l-=i.length-a,r=null,i=null,s=[],d=t.shift(),u++,!d)break}else{if((!E[c.nodeName]||N[c.nodeName])&&c.firstChild){c=c.firstChild;continue}if(c.nextSibling){c=c.nextSibling;continue}}for(;;){if(c.nextSibling){c=c.nextSibling;break}if(c.parentNode===e)break e;c=c.parentNode}}}function o(e){function t(t,n){var r=x[n];r.stencil||(r.stencil=e(r));var i=r.stencil.cloneNode(!1);return i.setAttribute("data-mce-index",n),t&&i.appendChild(_.doc.createTextNode(t)),i}return function(e){var n,r,i,o=e.startNode,a=e.endNode,s=e.matchIndex,l=_.doc;if(o===a){var c=o;i=c.parentNode,e.startNodeIndex>0&&(n=l.createTextNode(c.data.substring(0,e.startNodeIndex)),i.insertBefore(n,c));var d=t(e.match,s);return i.insertBefore(d,c),e.endNodeIndexp;++p){var h=e.innerNodes[p],g=t(h.data,s);h.parentNode.replaceChild(g,h),f.push(g)}var v=t(a.data.substring(0,e.endNodeIndex),s);return i=o.parentNode,i.insertBefore(n,o),i.insertBefore(u,o),i.removeChild(o),i=a.parentNode,i.insertBefore(v,a),i.insertBefore(r,a),i.removeChild(a),v}}function a(e){var t=e.parentNode;t.insertBefore(e.firstChild,e),e.parentNode.removeChild(e)}function s(t){var n=e.getElementsByTagName("*"),r=[];t="number"==typeof t?""+t:null;for(var i=0;it&&e(x[t],t)!==!1;t++);return this}function u(t){return x.length&&i(e,x,o(t)),this}function f(e,t){if(w&&e.global)for(;C=e.exec(w);)x.push(n(C,t));return this}function p(e){var t,n=s(e?l(e):null);for(t=n.length;t--;)a(n[t]);return this}function m(e){return x[e.getAttribute("data-mce-index")]}function h(e){return s(l(e))[0]}function g(e,t,n){return x.push({start:e,end:e+t,text:w.substr(e,t),data:n}),this}function v(e){var n=s(l(e)),r=t.dom.createRng();return r.setStartBefore(n[0]),r.setEndAfter(n[n.length-1]),r}function y(e,n){var r=v(e);return r.deleteContents(),n.length>0&&r.insertNode(t.dom.doc.createTextNode(n)),r}function b(){return x.splice(0,x.length),p(),this}var C,x=[],w,_=t.dom,N,E,k;return N=t.schema.getBlockElements(),E=t.schema.getWhiteSpaceElements(),k=t.schema.getShortEndedElements(),w=r(e),{text:w,matches:x,each:d,filter:c,reset:b,matchFromElement:m,elementFromMatch:h,find:f,add:g,wrap:u,unwrap:p,replace:y,rangeFromMatch:v,indexOf:l}}}),r(c,[l,d,u,f,p,m,h],function(e,t,n,r,i,o,a){t.add("spellchecker",function(t,s){function l(){return y.textMatcher||(y.textMatcher=new e(t.getBody(),t)),y.textMatcher}function c(e,t){var r=[];return n.each(t,function(e){r.push({selectable:!0,text:e.name,data:e.value})}),r}function d(e){for(var t in e)return!1;return!0}function u(e){var o=[],a=b[e.text];n.each(a,function(n){o.push({text:n,onclick:function(){var r=l().replace(e,n);r.collapse(!1),t.selection.setRng(r),p()}})}),o.push.apply(o,[{text:"-"},{text:"Ignore",onclick:function(){m(e)}},{text:"Ignore all",onclick:function(){m(e,!0)}},{text:"Finish",onclick:h}]),x=new r({items:o,context:"contextmenu",onautohide:function(e){-1!=e.target.className.indexOf("spellchecker")&&e.preventDefault()},onhide:function(){x.remove(),x=null}}),x.renderTo(document.body);var s=l().elementFromMatch(e),c=i.DOM.getPos(t.getContentAreaContainer()),d=t.dom.getPos(s),u=t.dom.getRoot();"BODY"==u.nodeName?(d.x-=u.ownerDocument.documentElement.scrollLeft||u.scrollLeft,d.y-=u.ownerDocument.documentElement.scrollTop||u.scrollTop):(d.x-=u.scrollLeft,d.y-=u.scrollTop),c.x+=d.x,c.y+=d.y,x.moveTo(c.x,c.y+s.offsetHeight)}function f(){function e(e){return t.setProgressState(!1),d(e)?(t.windowManager.alert("No misspellings found"),void(C=!1)):(b=e,l().filter(function(t){return!!e[t.text]}).wrap(function(){return t.dom.create("span",{"class":"mce-spellchecker-word","data-mce-bogus":1})}),void t.fire("SpellcheckStart"))}function n(e,n,r){o.sendRPC({url:new a(s).toAbsolute(w.spellchecker_rpc_url),method:e,params:{lang:w.spellchecker_language||"en",words:n},success:function(e){r(e)},error:function(e,n){e="JSON Parse error."==e?"Non JSON response:"+n.responseText:"Error: "+e,t.windowManager.alert(e),t.setProgressState(!1),h()}})}var r=[],i={};if(C)return void h();h(),C=!0;var c=t.getParam("spellchecker_wordchar_pattern")||new RegExp('[^\\s!"#$%&()*+,-./:;<=>?@[\\]^_{|}`\xa7\xa9\xab\xae\xb1\xb6\xb7\xb8\xbb\xbc\xbd\xbe\xbf\xd7\xf7\xa4\u201d\u201c\u201e]+',"g");l().find(c).each(function(e){var t=e.text;if(!i[t]){if(/^\d+$/.test(t)||1==t.length)return;r.push(t),i[t]=!0}}),t.setProgressState(!0);var u=w.spellchecker_callback||n;u("spellcheck",r,e),t.focus()}function p(){t.dom.select("span.mce-spellchecker-word").length||h()}function m(e,n){t.selection.collapse(),n?l().each(function(t){t.text==e.text&&l().unwrap(t)}):l().unwrap(e),p()}function h(){l().reset(),y.textMatcher=null,C&&(C=!1,t.fire("SpellcheckEnd"))}function g(e){var t=w.spellchecker_language;e.control.items().each(function(e){e.active(e.settings.data===t)})}var v,y=this,b,C,x,w=t.settings,_=w.spellchecker_languages||"English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr_FR,German=de,Italian=it,Polish=pl,Portuguese=pt_BR,Spanish=es,Swedish=sv";v=c("Language",n.map(_.split(","),function(e){var t=e.split("=");return{name:t[0],value:t[1]}})),t.on("click",function(e){if("mce-spellchecker-word"==e.target.className){e.preventDefault();var n=l().matchFromElement(e.target);t.selection.setRng(l().rangeFromMatch(n)),u(n)}}),t.addMenuItem("spellchecker",{text:"Spellcheck",context:"tools",onclick:f,selectable:!0,onPostRender:function(){var e=this;t.on("SpellcheckStart SpellcheckEnd",function(){e.active(C)})}});var N={tooltip:"Spellcheck",onclick:f,onPostRender:function(){var e=this;t.on("SpellcheckStart SpellcheckEnd",function(){e.active(C)})}};v.length>1&&(N.type="splitbutton",N.menu=v,N.onshow=g,N.onselect=function(e){w.spellchecker_language=e.control.settings.data}),t.addButton("spellchecker",N),t.addCommand("mceSpellCheck",f),t.on("remove",function(){x&&(x.remove(),x=null)}),this.getTextMatcher=l,w.spellchecker_language=w.spellchecker_language||w.language||"en"})}),a([l,c])}(this); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/plugins/table/classes/CellSelection.js b/common/static/js/vendor/tinymce/js/tinymce/plugins/table/classes/CellSelection.js new file mode 100755 index 0000000000..9ec550160a --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/plugins/table/classes/CellSelection.js @@ -0,0 +1,167 @@ +/** + * CellSelection.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class handles table cell selection by faking it using a css class that gets applied + * to cells when dragging the mouse from one cell to another. + * + * @class tinymce.tableplugin.CellSelection + * @private + */ +define("tinymce/tableplugin/CellSelection", [ + "tinymce/tableplugin/TableGrid", + "tinymce/dom/TreeWalker", + "tinymce/util/Tools" +], function(TableGrid, TreeWalker, Tools) { + return function(editor) { + var dom = editor.dom, tableGrid, startCell, startTable, hasCellSelection = true; + + function clear() { + // Restore selection possibilities + editor.getBody().style.webkitUserSelect = ''; + + if (hasCellSelection) { + editor.dom.removeClass( + editor.dom.select('td.mce-item-selected,th.mce-item-selected'), + 'mce-item-selected' + ); + + hasCellSelection = false; + } + } + + function cellSelectionHandler(e) { + var sel, table, target = e.target; + + if (startCell && (tableGrid || target != startCell) && (target.nodeName == 'TD' || target.nodeName == 'TH')) { + table = dom.getParent(target, 'table'); + if (table == startTable) { + if (!tableGrid) { + tableGrid = new TableGrid(editor, table); + tableGrid.setStartCell(startCell); + + editor.getBody().style.webkitUserSelect = 'none'; + } + + tableGrid.setEndCell(target); + hasCellSelection = true; + } + + // Remove current selection + sel = editor.selection.getSel(); + + try { + if (sel.removeAllRanges) { + sel.removeAllRanges(); + } else { + sel.empty(); + } + } catch (ex) { + // IE9 might throw errors here + } + + e.preventDefault(); + } + } + + // Add cell selection logic + editor.on('MouseDown', function(e) { + if (e.button != 2) { + clear(); + + startCell = dom.getParent(e.target, 'td,th'); + startTable = dom.getParent(startCell, 'table'); + } + }); + + editor.on('mouseover', cellSelectionHandler); + + editor.on('remove', function() { + dom.unbind(editor.getDoc(), 'mouseover', cellSelectionHandler); + }); + + editor.on('MouseUp', function() { + var rng, sel = editor.selection, selectedCells, walker, node, lastNode, endNode; + + function setPoint(node, start) { + var walker = new TreeWalker(node, node); + + do { + // Text node + if (node.nodeType == 3 && Tools.trim(node.nodeValue).length !== 0) { + if (start) { + rng.setStart(node, 0); + } else { + rng.setEnd(node, node.nodeValue.length); + } + + return; + } + + // BR element + if (node.nodeName == 'BR') { + if (start) { + rng.setStartBefore(node); + } else { + rng.setEndBefore(node); + } + + return; + } + } while ((node = (start ? walker.next() : walker.prev()))); + } + + // Move selection to startCell + if (startCell) { + if (tableGrid) { + editor.getBody().style.webkitUserSelect = ''; + } + + // Try to expand text selection as much as we can only Gecko supports cell selection + selectedCells = dom.select('td.mce-item-selected,th.mce-item-selected'); + if (selectedCells.length > 0) { + rng = dom.createRng(); + node = selectedCells[0]; + endNode = selectedCells[selectedCells.length - 1]; + rng.setStartBefore(node); + rng.setEndAfter(node); + + setPoint(node, 1); + walker = new TreeWalker(node, dom.getParent(selectedCells[0], 'table')); + + do { + if (node.nodeName == 'TD' || node.nodeName == 'TH') { + if (!dom.hasClass(node, 'mce-item-selected')) { + break; + } + + lastNode = node; + } + } while ((node = walker.next())); + + setPoint(lastNode); + + sel.setRng(rng); + } + + editor.nodeChanged(); + startCell = tableGrid = startTable = null; + } + }); + + editor.on('KeyUp', function() { + clear(); + }); + + return { + clear: clear + }; + }; +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/plugins/table/classes/Plugin.js b/common/static/js/vendor/tinymce/js/tinymce/plugins/table/classes/Plugin.js new file mode 100755 index 0000000000..a0d87ea578 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/plugins/table/classes/Plugin.js @@ -0,0 +1,794 @@ +/** + * Plugin.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class contains all core logic for the table plugin. + * + * @class tinymce.tableplugin.Plugin + * @private + */ +define("tinymce/tableplugin/Plugin", [ + "tinymce/tableplugin/TableGrid", + "tinymce/tableplugin/Quirks", + "tinymce/tableplugin/CellSelection", + "tinymce/util/Tools", + "tinymce/dom/TreeWalker", + "tinymce/Env", + "tinymce/PluginManager" +], function(TableGrid, Quirks, CellSelection, Tools, TreeWalker, Env, PluginManager) { + var each = Tools.each; + + function Plugin(editor) { + var winMan, clipboardRows, self = this; // Might be selected cells on reload + + function removePxSuffix(size) { + return size ? size.replace(/px$/, '') : ""; + } + + function addSizeSuffix(size) { + if (/^[0-9]+$/.test(size)) { + size += "px"; + } + + return size; + } + + function unApplyAlign(elm) { + each('left center right'.split(' '), function(name) { + editor.formatter.remove('align' + name, {}, elm); + }); + } + + function tableDialog() { + var dom = editor.dom, tableElm, data; + + tableElm = dom.getParent(editor.selection.getStart(), 'table'); + + data = { + width: removePxSuffix(dom.getStyle(tableElm, 'width') || dom.getAttrib(tableElm, 'width')), + height: removePxSuffix(dom.getStyle(tableElm, 'height') || dom.getAttrib(tableElm, 'height')), + cellspacing: dom.getAttrib(tableElm, 'cellspacing'), + cellpadding: dom.getAttrib(tableElm, 'cellpadding'), + border: dom.getAttrib(tableElm, 'border'), + caption: !!dom.select('caption', tableElm)[0] + }; + + each('left center right'.split(' '), function(name) { + if (editor.formatter.matchNode(tableElm, 'align' + name)) { + data.align = name; + } + }); + + editor.windowManager.open({ + title: "Table properties", + items: { + type: 'form', + layout: 'grid', + columns: 2, + data: data, + defaults: { + type: 'textbox', + maxWidth: 50 + }, + items: [ + {label: 'Width', name: 'width'}, + {label: 'Height', name: 'height'}, + {label: 'Cell spacing', name: 'cellspacing'}, + {label: 'Cell padding', name: 'cellpadding'}, + {label: 'Border', name: 'border'}, + {label: 'Caption', name: 'caption', type: 'checkbox'}, + { + label: 'Alignment', + minWidth: 90, + name: 'align', + type: 'listbox', + text: 'None', + maxWidth: null, + values: [ + {text: 'None', value: ''}, + {text: 'Left', value: 'left'}, + {text: 'Center', value: 'center'}, + {text: 'Right', value: 'right'} + ] + } + ] + }, + + onsubmit: function() { + var data = this.toJSON(), captionElm; + + editor.undoManager.transact(function() { + editor.dom.setAttribs(tableElm, { + cellspacing: data.cellspacing, + cellpadding: data.cellpadding, + border: data.border + }); + + editor.dom.setStyles(tableElm, { + width: addSizeSuffix(data.width), + height: addSizeSuffix(data.height) + }); + + // Toggle caption on/off + captionElm = dom.select('caption', tableElm)[0]; + + if (captionElm && !data.caption) { + dom.remove(captionElm); + } + + if (!captionElm && data.caption) { + captionElm = dom.create('caption'); + captionElm.innerHTML = !Env.ie ? '
    ' : '\u00a0'; + tableElm.insertBefore(captionElm, tableElm.firstChild); + } + + unApplyAlign(tableElm); + if (data.align) { + editor.formatter.apply('align' + data.align, {}, tableElm); + } + + editor.focus(); + editor.addVisual(); + }); + } + }); + } + + function mergeDialog(grid, cell) { + editor.windowManager.open({ + title: "Merge cells", + body: [ + {label: 'Cols', name: 'cols', type: 'textbox', size: 10}, + {label: 'Rows', name: 'rows', type: 'textbox', size: 10} + ], + onsubmit: function() { + var data = this.toJSON(); + + editor.undoManager.transact(function() { + grid.merge(cell, data.cols, data.rows); + }); + } + }); + } + + function cellDialog() { + var dom = editor.dom, cellElm, data, cells = []; + + // Get selected cells or the current cell + cells = editor.dom.select('td.mce-item-selected,th.mce-item-selected'); + cellElm = editor.dom.getParent(editor.selection.getStart(), 'td,th'); + if (!cells.length && cellElm) { + cells.push(cellElm); + } + + cellElm = cellElm || cells[0]; + + if (!cellElm) { + // If this element is null, return now to avoid crashing. + return; + } + + data = { + width: removePxSuffix(dom.getStyle(cellElm, 'width') || dom.getAttrib(cellElm, 'width')), + height: removePxSuffix(dom.getStyle(cellElm, 'height') || dom.getAttrib(cellElm, 'height')), + scope: dom.getAttrib(cellElm, 'scope') + }; + + data.type = cellElm.nodeName.toLowerCase(); + + each('left center right'.split(' '), function(name) { + if (editor.formatter.matchNode(cellElm, 'align' + name)) { + data.align = name; + } + }); + + editor.windowManager.open({ + title: "Cell properties", + items: { + type: 'form', + data: data, + layout: 'grid', + columns: 2, + defaults: { + type: 'textbox', + maxWidth: 50 + }, + items: [ + {label: 'Width', name: 'width'}, + {label: 'Height', name: 'height'}, + { + label: 'Cell type', + name: 'type', + type: 'listbox', + text: 'None', + minWidth: 90, + maxWidth: null, + values: [ + {text: 'Cell', value: 'td'}, + {text: 'Header cell', value: 'th'} + ] + }, + { + label: 'Scope', + name: 'scope', + type: 'listbox', + text: 'None', + minWidth: 90, + maxWidth: null, + values: [ + {text: 'None', value: ''}, + {text: 'Row', value: 'row'}, + {text: 'Column', value: 'col'}, + {text: 'Row group', value: 'rowgroup'}, + {text: 'Column group', value: 'colgroup'} + ] + }, + { + label: 'Alignment', + name: 'align', + type: 'listbox', + text: 'None', + minWidth: 90, + maxWidth: null, + values: [ + {text: 'None', value: ''}, + {text: 'Left', value: 'left'}, + {text: 'Center', value: 'center'}, + {text: 'Right', value: 'right'} + ] + } + ] + }, + + onsubmit: function() { + var data = this.toJSON(); + + editor.undoManager.transact(function() { + each(cells, function(cellElm) { + editor.dom.setAttrib(cellElm, 'scope', data.scope); + + editor.dom.setStyles(cellElm, { + width: addSizeSuffix(data.width), + height: addSizeSuffix(data.height) + }); + + // Switch cell type + if (data.type && cellElm.nodeName.toLowerCase() != data.type) { + cellElm = dom.rename(cellElm, data.type); + } + + // Apply/remove alignment + unApplyAlign(cellElm); + if (data.align) { + editor.formatter.apply('align' + data.align, {}, cellElm); + } + }); + + editor.focus(); + }); + } + }); + } + + function rowDialog() { + var dom = editor.dom, tableElm, cellElm, rowElm, data, rows = []; + + tableElm = editor.dom.getParent(editor.selection.getStart(), 'table'); + cellElm = editor.dom.getParent(editor.selection.getStart(), 'td,th'); + + each(tableElm.rows, function(row) { + each(row.cells, function(cell) { + if (dom.hasClass(cell, 'mce-item-selected') || cell == cellElm) { + rows.push(row); + return false; + } + }); + }); + + rowElm = rows[0]; + if (!rowElm) { + // If this element is null, return now to avoid crashing. + return; + } + + data = { + height: removePxSuffix(dom.getStyle(rowElm, 'height') || dom.getAttrib(rowElm, 'height')), + scope: dom.getAttrib(rowElm, 'scope') + }; + + data.type = rowElm.parentNode.nodeName.toLowerCase(); + + each('left center right'.split(' '), function(name) { + if (editor.formatter.matchNode(rowElm, 'align' + name)) { + data.align = name; + } + }); + + editor.windowManager.open({ + title: "Row properties", + items: { + type: 'form', + data: data, + columns: 2, + defaults: { + type: 'textbox' + }, + items: [ + { + type: 'listbox', + name: 'type', + label: 'Row type', + text: 'None', + maxWidth: null, + values: [ + {text: 'Header', value: 'thead'}, + {text: 'Body', value: 'tbody'}, + {text: 'Footer', value: 'tfoot'} + ] + }, + { + type: 'listbox', + name: 'align', + label: 'Alignment', + text: 'None', + maxWidth: null, + values: [ + {text: 'None', value: ''}, + {text: 'Left', value: 'left'}, + {text: 'Center', value: 'center'}, + {text: 'Right', value: 'right'} + ] + }, + {label: 'Height', name: 'height'} + ] + }, + + onsubmit: function() { + var data = this.toJSON(), tableElm, oldParentElm, parentElm; + + editor.undoManager.transact(function() { + var toType = data.type; + + each(rows, function(rowElm) { + editor.dom.setAttrib(rowElm, 'scope', data.scope); + + editor.dom.setStyles(rowElm, { + height: addSizeSuffix(data.height) + }); + + if (toType != rowElm.parentNode.nodeName.toLowerCase()) { + tableElm = dom.getParent(rowElm, 'table'); + + oldParentElm = rowElm.parentNode; + parentElm = dom.select(toType, tableElm)[0]; + if (!parentElm) { + parentElm = dom.create(toType); + if (tableElm.firstChild) { + tableElm.insertBefore(parentElm, tableElm.firstChild); + } else { + tableElm.appendChild(parentElm); + } + } + + parentElm.appendChild(rowElm); + + if (!oldParentElm.hasChildNodes()) { + dom.remove(oldParentElm); + } + } + + // Apply/remove alignment + unApplyAlign(rowElm); + if (data.align) { + editor.formatter.apply('align' + data.align, {}, rowElm); + } + }); + + editor.focus(); + }); + } + }); + } + + function cmd(command) { + return function() { + editor.execCommand(command); + }; + } + + function insertTable(cols, rows) { + var y, x, html; + + html = ''; + + for (y = 0; y < rows; y++) { + html += ''; + + for (x = 0; x < cols; x++) { + html += ''; + } + + html += ''; + } + + html += '
    ' + (Env.ie ? " " : '
    ') + '
    '; + + editor.insertContent(html); + } + + function handleDisabledState(ctrl, selector) { + function bindStateListener() { + ctrl.disabled(!editor.dom.getParent(editor.selection.getStart(), selector)); + + editor.selection.selectorChanged(selector, function(state) { + ctrl.disabled(!state); + }); + } + + if (editor.initialized) { + bindStateListener(); + } else { + editor.on('init', bindStateListener); + } + } + + function postRender() { + /*jshint validthis:true*/ + handleDisabledState(this, 'table'); + } + + function postRenderCell() { + /*jshint validthis:true*/ + handleDisabledState(this, 'td,th'); + } + + function generateTableGrid() { + var html = ''; + + html = ''; + + for (var y = 0; y < 10; y++) { + html += ''; + + for (var x = 0; x < 10; x++) { + html += ''; + } + + html += ''; + } + + html += '
    '; + + html += ''; + + return html; + } + + function selectGrid(tx, ty, control) { + var table = control.getEl().getElementsByTagName('table')[0]; + var rel = control.parent().rel, x, y, focusCell, cell; + + if (control.isRtl() || rel == 'tl-tr') { + for (y = 9; y >= 0; y--) { + for (x = 0; x < 10; x++) { + cell = table.rows[y].childNodes[x].firstChild; + + editor.dom.toggleClass( + cell, + 'mce-active', + x >= tx && y <= ty + ); + + if (x >= tx && y <= ty) { + focusCell = cell; + } + } + } + + tx = 9 - tx; + table.nextSibling.innerHTML = tx + ' x ' + (ty + 1); + } else { + for (y = 0; y < 10; y++) { + for (x = 0; x < 10; x++) { + cell = table.rows[y].childNodes[x].firstChild; + + editor.dom.toggleClass( + cell, + 'mce-active', + x <= tx && y <= ty + ); + + if (x <= tx && y <= ty) { + focusCell = cell; + } + } + } + + table.nextSibling.innerHTML = (tx + 1) + ' x ' + (ty + 1); + } + + return focusCell.parentNode; + } + + editor.addMenuItem('inserttable', { + text: 'Insert table', + icon: 'table', + context: 'table', + onhide: function() { + var elements = this.menu.items()[0].getEl().getElementsByTagName('a'); + editor.dom.removeClass(elements, 'mce-active'); + editor.dom.addClass(elements[0], 'mce-active'); + }, + menu: [ + { + type: 'container', + html: generateTableGrid(), + + onPostRender: function() { + this.lastX = this.lastY = 0; + }, + + onmousemove: function(e) { + var target = e.target, x, y; + + if (target.nodeName == 'A') { + x = parseInt(target.getAttribute('data-mce-x'), 10); + y = parseInt(target.getAttribute('data-mce-y'), 10); + + if (x !== this.lastX || y !== this.lastY) { + selectGrid(x, y, e.control); + + this.lastX = x; + this.lastY = y; + } + } + }, + + onkeydown: function(e) { + var x = this.lastX, y = this.lastY, isHandled; + + switch (e.keyCode) { + case 37: // DOM_VK_LEFT + if (x > 0) { + x--; + isHandled = true; + } + break; + + case 39: // DOM_VK_RIGHT + isHandled = true; + + if (x < 9) { + x++; + } + break; + + case 38: // DOM_VK_UP + isHandled = true; + + if (y > 0) { + y--; + } + break; + + case 40: // DOM_VK_DOWN + isHandled = true; + + if (y < 9) { + y++; + } + break; + } + + if (isHandled) { + e.preventDefault(); + e.stopPropagation(); + + selectGrid(x, y, e.control).focus(); + + this.lastX = x; + this.lastY = y; + } + }, + + onclick: function(e) { + if (e.target.nodeName == 'A') { + e.preventDefault(); + e.stopPropagation(); + this.parent().cancel(); + + insertTable(this.lastX + 1, this.lastY + 1); + } + } + } + ] + }); + + editor.addMenuItem('tableprops', { + text: 'Table properties', + context: 'table', + onPostRender: postRender, + onclick: tableDialog + }); + + editor.addMenuItem('deletetable', { + text: 'Delete table', + context: 'table', + onPostRender: postRender, + cmd: 'mceTableDelete' + }); + + editor.addMenuItem('cell', { + separator: 'before', + text: 'Cell', + context: 'table', + menu: [ + {text: 'Cell properties', onclick: cmd('mceTableCellProps'), onPostRender: postRenderCell}, + {text: 'Merge cells', onclick: cmd('mceTableMergeCells'), onPostRender: postRenderCell}, + {text: 'Split cell', onclick: cmd('mceTableSplitCells'), onPostRender: postRenderCell} + ] + }); + + editor.addMenuItem('row', { + text: 'Row', + context: 'table', + menu: [ + {text: 'Insert row before', onclick: cmd('mceTableInsertRowBefore'), onPostRender: postRenderCell}, + {text: 'Insert row after', onclick: cmd('mceTableInsertRowAfter'), onPostRender: postRenderCell}, + {text: 'Delete row', onclick: cmd('mceTableDeleteRow'), onPostRender: postRenderCell}, + {text: 'Row properties', onclick: cmd('mceTableRowProps'), onPostRender: postRenderCell}, + {text: '-'}, + {text: 'Cut row', onclick: cmd('mceTableCutRow'), onPostRender: postRenderCell}, + {text: 'Copy row', onclick: cmd('mceTableCopyRow'), onPostRender: postRenderCell}, + {text: 'Paste row before', onclick: cmd('mceTablePasteRowBefore'), onPostRender: postRenderCell}, + {text: 'Paste row after', onclick: cmd('mceTablePasteRowAfter'), onPostRender: postRenderCell} + ] + }); + + editor.addMenuItem('column', { + text: 'Column', + context: 'table', + menu: [ + {text: 'Insert column before', onclick: cmd('mceTableInsertColBefore'), onPostRender: postRenderCell}, + {text: 'Insert column after', onclick: cmd('mceTableInsertColAfter'), onPostRender: postRenderCell}, + {text: 'Delete column', onclick: cmd('mceTableDeleteCol'), onPostRender: postRenderCell} + ] + }); + + var menuItems = []; + each("inserttable tableprops deletetable | cell row column".split(' '), function(name) { + if (name == '|') { + menuItems.push({text: '-'}); + } else { + menuItems.push(editor.menuItems[name]); + } + }); + + editor.addButton("table", { + type: "menubutton", + title: "Table", + menu: menuItems + }); + + // Select whole table is a table border is clicked + if (!Env.isIE) { + editor.on('click', function(e) { + e = e.target; + + if (e.nodeName === 'TABLE') { + editor.selection.select(e); + editor.nodeChanged(); + } + }); + } + + self.quirks = new Quirks(editor); + + editor.on('Init', function() { + winMan = editor.windowManager; + self.cellSelection = new CellSelection(editor); + }); + + // Register action commands + each({ + mceTableSplitCells: function(grid) { + grid.split(); + }, + + mceTableMergeCells: function(grid) { + var rowSpan, colSpan, cell; + + cell = editor.dom.getParent(editor.selection.getStart(), 'th,td'); + if (cell) { + rowSpan = cell.rowSpan; + colSpan = cell.colSpan; + } + + if (!editor.dom.select('td.mce-item-selected,th.mce-item-selected').length) { + mergeDialog(grid, cell); + } else { + grid.merge(); + } + }, + + mceTableInsertRowBefore: function(grid) { + grid.insertRow(true); + }, + + mceTableInsertRowAfter: function(grid) { + grid.insertRow(); + }, + + mceTableInsertColBefore: function(grid) { + grid.insertCol(true); + }, + + mceTableInsertColAfter: function(grid) { + grid.insertCol(); + }, + + mceTableDeleteCol: function(grid) { + grid.deleteCols(); + }, + + mceTableDeleteRow: function(grid) { + grid.deleteRows(); + }, + + mceTableCutRow: function(grid) { + clipboardRows = grid.cutRows(); + }, + + mceTableCopyRow: function(grid) { + clipboardRows = grid.copyRows(); + }, + + mceTablePasteRowBefore: function(grid) { + grid.pasteRows(clipboardRows, true); + }, + + mceTablePasteRowAfter: function(grid) { + grid.pasteRows(clipboardRows); + }, + + mceTableDelete: function(grid) { + grid.deleteTable(); + } + }, function(func, name) { + editor.addCommand(name, function() { + var grid = new TableGrid(editor); + + if (grid) { + func(grid); + editor.execCommand('mceRepaint'); + self.cellSelection.clear(); + } + }); + }); + + // Register dialog commands + each({ + mceInsertTable: function() { + tableDialog(); + }, + + mceTableRowProps: rowDialog, + mceTableCellProps: cellDialog + }, function(func, name) { + editor.addCommand(name, function(ui, val) { + func(val); + }); + }); + } + + PluginManager.add('table', Plugin); +}); diff --git a/common/static/js/vendor/tinymce/js/tinymce/plugins/table/classes/Quirks.js b/common/static/js/vendor/tinymce/js/tinymce/plugins/table/classes/Quirks.js new file mode 100755 index 0000000000..61e2a52553 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/plugins/table/classes/Quirks.js @@ -0,0 +1,370 @@ +/** + * Quirks.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class includes fixes for various browser quirks. + * + * @class tinymce.tableplugin.Quirks + * @private + */ +define("tinymce/tableplugin/Quirks", [ + "tinymce/util/VK", + "tinymce/Env", + "tinymce/util/Tools" +], function(VK, Env, Tools) { + var each = Tools.each; + + function getSpanVal(td, name) { + return parseInt(td.getAttribute(name) || 1, 10); + } + + return function(editor) { + /** + * Fixed caret movement around tables on WebKit. + */ + function moveWebKitSelection() { + function eventHandler(e) { + var key = e.keyCode; + + function handle(upBool, sourceNode) { + var siblingDirection = upBool ? 'previousSibling' : 'nextSibling'; + var currentRow = editor.dom.getParent(sourceNode, 'tr'); + var siblingRow = currentRow[siblingDirection]; + + if (siblingRow) { + moveCursorToRow(editor, sourceNode, siblingRow, upBool); + e.preventDefault(); + return true; + } else { + var tableNode = editor.dom.getParent(currentRow, 'table'); + var middleNode = currentRow.parentNode; + var parentNodeName = middleNode.nodeName.toLowerCase(); + if (parentNodeName === 'tbody' || parentNodeName === (upBool ? 'tfoot' : 'thead')) { + var targetParent = getTargetParent(upBool, tableNode, middleNode, 'tbody'); + if (targetParent !== null) { + return moveToRowInTarget(upBool, targetParent, sourceNode); + } + } + return escapeTable(upBool, currentRow, siblingDirection, tableNode); + } + } + + function getTargetParent(upBool, topNode, secondNode, nodeName) { + var tbodies = editor.dom.select('>' + nodeName, topNode); + var position = tbodies.indexOf(secondNode); + if (upBool && position === 0 || !upBool && position === tbodies.length - 1) { + return getFirstHeadOrFoot(upBool, topNode); + } else if (position === -1) { + var topOrBottom = secondNode.tagName.toLowerCase() === 'thead' ? 0 : tbodies.length - 1; + return tbodies[topOrBottom]; + } else { + return tbodies[position + (upBool ? -1 : 1)]; + } + } + + function getFirstHeadOrFoot(upBool, parent) { + var tagName = upBool ? 'thead' : 'tfoot'; + var headOrFoot = editor.dom.select('>' + tagName, parent); + return headOrFoot.length !== 0 ? headOrFoot[0] : null; + } + + function moveToRowInTarget(upBool, targetParent, sourceNode) { + var targetRow = getChildForDirection(targetParent, upBool); + + if (targetRow) { + moveCursorToRow(editor, sourceNode, targetRow, upBool); + } + + e.preventDefault(); + return true; + } + + function escapeTable(upBool, currentRow, siblingDirection, table) { + var tableSibling = table[siblingDirection]; + + if (tableSibling) { + moveCursorToStartOfElement(tableSibling); + return true; + } else { + var parentCell = editor.dom.getParent(table, 'td,th'); + if (parentCell) { + return handle(upBool, parentCell, e); + } else { + var backUpSibling = getChildForDirection(currentRow, !upBool); + moveCursorToStartOfElement(backUpSibling); + e.preventDefault(); + return false; + } + } + } + + function getChildForDirection(parent, up) { + var child = parent && parent[up ? 'lastChild' : 'firstChild']; + // BR is not a valid table child to return in this case we return the table cell + return child && child.nodeName === 'BR' ? editor.dom.getParent(child, 'td,th') : child; + } + + function moveCursorToStartOfElement(n) { + editor.selection.setCursorLocation(n, 0); + } + + function isVerticalMovement() { + return key == VK.UP || key == VK.DOWN; + } + + function isInTable(editor) { + var node = editor.selection.getNode(); + var currentRow = editor.dom.getParent(node, 'tr'); + return currentRow !== null; + } + + function columnIndex(column) { + var colIndex = 0; + var c = column; + while (c.previousSibling) { + c = c.previousSibling; + colIndex = colIndex + getSpanVal(c, "colspan"); + } + return colIndex; + } + + function findColumn(rowElement, columnIndex) { + var c = 0, r = 0; + + each(rowElement.children, function(cell, i) { + c = c + getSpanVal(cell, "colspan"); + r = i; + if (c > columnIndex) { + return false; + } + }); + return r; + } + + function moveCursorToRow(ed, node, row, upBool) { + var srcColumnIndex = columnIndex(editor.dom.getParent(node, 'td,th')); + var tgtColumnIndex = findColumn(row, srcColumnIndex); + var tgtNode = row.childNodes[tgtColumnIndex]; + var rowCellTarget = getChildForDirection(tgtNode, upBool); + moveCursorToStartOfElement(rowCellTarget || tgtNode); + } + + function shouldFixCaret(preBrowserNode) { + var newNode = editor.selection.getNode(); + var newParent = editor.dom.getParent(newNode, 'td,th'); + var oldParent = editor.dom.getParent(preBrowserNode, 'td,th'); + + return newParent && newParent !== oldParent && checkSameParentTable(newParent, oldParent); + } + + function checkSameParentTable(nodeOne, NodeTwo) { + return editor.dom.getParent(nodeOne, 'TABLE') === editor.dom.getParent(NodeTwo, 'TABLE'); + } + + if (isVerticalMovement() && isInTable(editor)) { + var preBrowserNode = editor.selection.getNode(); + setTimeout(function() { + if (shouldFixCaret(preBrowserNode)) { + handle(!e.shiftKey && key === VK.UP, preBrowserNode, e); + } + }, 0); + } + } + + editor.on('KeyDown', function(e) { + eventHandler(e); + }); + } + + function fixBeforeTableCaretBug() { + // Checks if the selection/caret is at the start of the specified block element + function isAtStart(rng, par) { + var doc = par.ownerDocument, rng2 = doc.createRange(), elm; + + rng2.setStartBefore(par); + rng2.setEnd(rng.endContainer, rng.endOffset); + + elm = doc.createElement('body'); + elm.appendChild(rng2.cloneContents()); + + // Check for text characters of other elements that should be treated as content + return elm.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi, '-').replace(/<[^>]+>/g, '').length === 0; + } + + // Fixes an bug where it's impossible to place the caret before a table in Gecko + // this fix solves it by detecting when the caret is at the beginning of such a table + // and then manually moves the caret infront of the table + editor.on('KeyDown', function(e) { + var rng, table, dom = editor.dom; + + // On gecko it's not possible to place the caret before a table + if (e.keyCode == 37 || e.keyCode == 38) { + rng = editor.selection.getRng(); + table = dom.getParent(rng.startContainer, 'table'); + + if (table && editor.getBody().firstChild == table) { + if (isAtStart(rng, table)) { + rng = dom.createRng(); + + rng.setStartBefore(table); + rng.setEndBefore(table); + + editor.selection.setRng(rng); + + e.preventDefault(); + } + } + } + }); + } + + // Fixes an issue on Gecko where it's impossible to place the caret behind a table + // This fix will force a paragraph element after the table but only when the forced_root_block setting is enabled + function fixTableCaretPos() { + editor.on('KeyDown SetContent VisualAid', function() { + var last; + + // Skip empty text nodes from the end + for (last = editor.getBody().lastChild; last; last = last.previousSibling) { + if (last.nodeType == 3) { + if (last.nodeValue.length > 0) { + break; + } + } else if (last.nodeType == 1 && !last.getAttribute('data-mce-bogus')) { + break; + } + } + + if (last && last.nodeName == 'TABLE') { + if (editor.settings.forced_root_block) { + editor.dom.add( + editor.getBody(), + editor.settings.forced_root_block, + editor.settings.forced_root_block_attrs, + Env.ie && Env.ie < 11 ? ' ' : '
    ' + ); + } else { + editor.dom.add(editor.getBody(), 'br', {'data-mce-bogus': '1'}); + } + } + }); + + editor.on('PreProcess', function(o) { + var last = o.node.lastChild; + + if (last && (last.nodeName == "BR" || (last.childNodes.length == 1 && + (last.firstChild.nodeName == 'BR' || last.firstChild.nodeValue == '\u00a0'))) && + last.previousSibling && last.previousSibling.nodeName == "TABLE") { + editor.dom.remove(last); + } + }); + } + + // this nasty hack is here to work around some WebKit selection bugs. + function fixTableCellSelection() { + function tableCellSelected(ed, rng, n, currentCell) { + // The decision of when a table cell is selected is somewhat involved. The fact that this code is + // required is actually a pointer to the root cause of this bug. A cell is selected when the start + // and end offsets are 0, the start container is a text, and the selection node is either a TR (most cases) + // or the parent of the table (in the case of the selection containing the last cell of a table). + var TEXT_NODE = 3, table = ed.dom.getParent(rng.startContainer, 'TABLE'); + var tableParent, allOfCellSelected, tableCellSelection; + + if (table) { + tableParent = table.parentNode; + } + + allOfCellSelected = rng.startContainer.nodeType == TEXT_NODE && + rng.startOffset === 0 && + rng.endOffset === 0 && + currentCell && + (n.nodeName == "TR" || n == tableParent); + + tableCellSelection = (n.nodeName == "TD" || n.nodeName == "TH") && !currentCell; + + return allOfCellSelected || tableCellSelection; + } + + function fixSelection() { + var rng = editor.selection.getRng(); + var n = editor.selection.getNode(); + var currentCell = editor.dom.getParent(rng.startContainer, 'TD,TH'); + + if (!tableCellSelected(editor, rng, n, currentCell)) { + return; + } + + if (!currentCell) { + currentCell = n; + } + + // Get the very last node inside the table cell + var end = currentCell.lastChild; + while (end.lastChild) { + end = end.lastChild; + } + + // Select the entire table cell. Nothing outside of the table cell should be selected. + rng.setEnd(end, end.nodeValue.length); + editor.selection.setRng(rng); + } + + editor.on('KeyDown', function() { + fixSelection(); + }); + + editor.on('MouseDown', function(e) { + if (e.button != 2) { + fixSelection(); + } + }); + } + + /** + * Delete table if all cells are selected. + */ + function deleteTable() { + editor.on('keydown', function(e) { + if ((e.keyCode == VK.DELETE || e.keyCode == VK.BACKSPACE) && !e.isDefaultPrevented()) { + var table = editor.dom.getParent(editor.selection.getStart(), 'table'); + + if (table) { + var cells = editor.dom.select('td,th', table), i = cells.length; + while (i--) { + if (!editor.dom.hasClass(cells[i], 'mce-item-selected')) { + return; + } + } + + e.preventDefault(); + editor.execCommand('mceTableDelete'); + } + } + }); + } + + deleteTable(); + + if (Env.webkit) { + moveWebKitSelection(); + fixTableCellSelection(); + } + + if (Env.gecko) { + fixBeforeTableCaretBug(); + fixTableCaretPos(); + } + + if (Env.ie > 10) { + fixBeforeTableCaretBug(); + fixTableCaretPos(); + } + }; +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/plugins/table/classes/TableGrid.js b/common/static/js/vendor/tinymce/js/tinymce/plugins/table/classes/TableGrid.js new file mode 100755 index 0000000000..eea3cd23d9 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/plugins/table/classes/TableGrid.js @@ -0,0 +1,833 @@ +/** + * TableGrid.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class creates a grid out of a table element. This + * makes it a whole lot easier to handle complex tables with + * col/row spans. + * + * @class tinymce.tableplugin.TableGrid + * @private + */ +define("tinymce/tableplugin/TableGrid", [ + "tinymce/util/Tools", + "tinymce/Env" +], function(Tools, Env) { + var each = Tools.each; + + function getSpanVal(td, name) { + return parseInt(td.getAttribute(name) || 1, 10); + } + + return function(editor, table) { + var grid, startPos, endPos, selectedCell, selection = editor.selection, dom = selection.dom; + + function buildGrid() { + var startY = 0; + + grid = []; + + each(['thead', 'tbody', 'tfoot'], function(part) { + var rows = dom.select('> ' + part + ' tr', table); + + each(rows, function(tr, y) { + y += startY; + + each(dom.select('> td, > th', tr), function(td, x) { + var x2, y2, rowspan, colspan; + + // Skip over existing cells produced by rowspan + if (grid[y]) { + while (grid[y][x]) { + x++; + } + } + + // Get col/rowspan from cell + rowspan = getSpanVal(td, 'rowspan'); + colspan = getSpanVal(td, 'colspan'); + + // Fill out rowspan/colspan right and down + for (y2 = y; y2 < y + rowspan; y2++) { + if (!grid[y2]) { + grid[y2] = []; + } + + for (x2 = x; x2 < x + colspan; x2++) { + grid[y2][x2] = { + part: part, + real: y2 == y && x2 == x, + elm: td, + rowspan: rowspan, + colspan: colspan + }; + } + } + }); + }); + + startY += rows.length; + }); + } + + function cloneNode(node, children) { + node = node.cloneNode(children); + node.removeAttribute('id'); + + return node; + } + + function getCell(x, y) { + var row; + + row = grid[y]; + if (row) { + return row[x]; + } + } + + function setSpanVal(td, name, val) { + if (td) { + val = parseInt(val, 10); + + if (val === 1) { + td.removeAttribute(name, 1); + } else { + td.setAttribute(name, val, 1); + } + } + } + + function isCellSelected(cell) { + return cell && (dom.hasClass(cell.elm, 'mce-item-selected') || cell == selectedCell); + } + + function getSelectedRows() { + var rows = []; + + each(table.rows, function(row) { + each(row.cells, function(cell) { + if (dom.hasClass(cell, 'mce-item-selected') || (selectedCell && cell == selectedCell.elm)) { + rows.push(row); + return false; + } + }); + }); + + return rows; + } + + function deleteTable() { + var rng = dom.createRng(); + + rng.setStartAfter(table); + rng.setEndAfter(table); + + selection.setRng(rng); + + dom.remove(table); + } + + function cloneCell(cell) { + var formatNode, cloneFormats = {}; + + if (editor.settings.table_clone_elements !== false) { + cloneFormats = Tools.makeMap( + (editor.settings.table_clone_elements || 'strong em b i span font h1 h2 h3 h4 h5 h6 p div').toUpperCase(), + /[ ,]/ + ); + } + + // Clone formats + Tools.walk(cell, function(node) { + var curNode; + + if (node.nodeType == 3) { + each(dom.getParents(node.parentNode, null, cell).reverse(), function(node) { + if (!cloneFormats[node.nodeName]) { + return; + } + + node = cloneNode(node, false); + + if (!formatNode) { + formatNode = curNode = node; + } else if (curNode) { + curNode.appendChild(node); + } + + curNode = node; + }); + + // Add something to the inner node + if (curNode) { + curNode.innerHTML = Env.ie ? ' ' : '
    '; + } + + return false; + } + }, 'childNodes'); + + cell = cloneNode(cell, false); + setSpanVal(cell, 'rowSpan', 1); + setSpanVal(cell, 'colSpan', 1); + + if (formatNode) { + cell.appendChild(formatNode); + } else { + if (!Env.ie) { + cell.innerHTML = '
    '; + } + } + + return cell; + } + + function cleanup() { + var rng = dom.createRng(), row; + + // Empty rows + each(dom.select('tr', table), function(tr) { + if (tr.cells.length === 0) { + dom.remove(tr); + } + }); + + // Empty table + if (dom.select('tr', table).length === 0) { + rng.setStartBefore(table); + rng.setEndBefore(table); + selection.setRng(rng); + dom.remove(table); + return; + } + + // Empty header/body/footer + each(dom.select('thead,tbody,tfoot', table), function(part) { + if (part.rows.length === 0) { + dom.remove(part); + } + }); + + // Restore selection to start position if it still exists + buildGrid(); + + // If we have a valid startPos object + if (startPos) { + // Restore the selection to the closest table position + row = grid[Math.min(grid.length - 1, startPos.y)]; + if (row) { + selection.select(row[Math.min(row.length - 1, startPos.x)].elm, true); + selection.collapse(true); + } + } + } + + function fillLeftDown(x, y, rows, cols) { + var tr, x2, r, c, cell; + + tr = grid[y][x].elm.parentNode; + for (r = 1; r <= rows; r++) { + tr = dom.getNext(tr, 'tr'); + + if (tr) { + // Loop left to find real cell + for (x2 = x; x2 >= 0; x2--) { + cell = grid[y + r][x2].elm; + + if (cell.parentNode == tr) { + // Append clones after + for (c = 1; c <= cols; c++) { + dom.insertAfter(cloneCell(cell), cell); + } + + break; + } + } + + if (x2 == -1) { + // Insert nodes before first cell + for (c = 1; c <= cols; c++) { + tr.insertBefore(cloneCell(tr.cells[0]), tr.cells[0]); + } + } + } + } + } + + function split() { + each(grid, function(row, y) { + each(row, function(cell, x) { + var colSpan, rowSpan, i; + + if (isCellSelected(cell)) { + cell = cell.elm; + colSpan = getSpanVal(cell, 'colspan'); + rowSpan = getSpanVal(cell, 'rowspan'); + + if (colSpan > 1 || rowSpan > 1) { + setSpanVal(cell, 'rowSpan', 1); + setSpanVal(cell, 'colSpan', 1); + + // Insert cells right + for (i = 0; i < colSpan - 1; i++) { + dom.insertAfter(cloneCell(cell), cell); + } + + fillLeftDown(x, y, rowSpan - 1, colSpan); + } + } + }); + }); + } + + function merge(cell, cols, rows) { + var pos, startX, startY, endX, endY, x, y, startCell, endCell, children, count; + + // Use specified cell and cols/rows + if (cell) { + pos = getPos(cell); + startX = pos.x; + startY = pos.y; + endX = startX + (cols - 1); + endY = startY + (rows - 1); + } else { + startPos = endPos = null; + + // Calculate start/end pos by checking for selected cells in grid works better with context menu + each(grid, function(row, y) { + each(row, function(cell, x) { + if (isCellSelected(cell)) { + if (!startPos) { + startPos = {x: x, y: y}; + } + + endPos = {x: x, y: y}; + } + }); + }); + + // Use selection, but make sure startPos is valid before accessing + if (startPos) { + startX = startPos.x; + startY = startPos.y; + endX = endPos.x; + endY = endPos.y; + } + } + + // Find start/end cells + startCell = getCell(startX, startY); + endCell = getCell(endX, endY); + + // Check if the cells exists and if they are of the same part for example tbody = tbody + if (startCell && endCell && startCell.part == endCell.part) { + // Split and rebuild grid + split(); + buildGrid(); + + // Set row/col span to start cell + startCell = getCell(startX, startY).elm; + setSpanVal(startCell, 'colSpan', (endX - startX) + 1); + setSpanVal(startCell, 'rowSpan', (endY - startY) + 1); + + // Remove other cells and add it's contents to the start cell + for (y = startY; y <= endY; y++) { + for (x = startX; x <= endX; x++) { + if (!grid[y] || !grid[y][x]) { + continue; + } + + cell = grid[y][x].elm; + + /*jshint loopfunc:true */ + /*eslint loop-func:0 */ + if (cell != startCell) { + // Move children to startCell + children = Tools.grep(cell.childNodes); + each(children, function(node) { + startCell.appendChild(node); + }); + + // Remove bogus nodes if there is children in the target cell + if (children.length) { + children = Tools.grep(startCell.childNodes); + count = 0; + each(children, function(node) { + if (node.nodeName == 'BR' && dom.getAttrib(node, 'data-mce-bogus') && count++ < children.length - 1) { + startCell.removeChild(node); + } + }); + } + + dom.remove(cell); + } + } + } + + // Remove empty rows etc and restore caret location + cleanup(); + } + } + + function insertRow(before) { + var posY, cell, lastCell, x, rowElm, newRow, newCell, otherCell, rowSpan; + + // Find first/last row + each(grid, function(row, y) { + each(row, function(cell) { + if (isCellSelected(cell)) { + cell = cell.elm; + rowElm = cell.parentNode; + newRow = cloneNode(rowElm, false); + posY = y; + + if (before) { + return false; + } + } + }); + + if (before) { + return !posY; + } + }); + + // If posY is undefined there is nothing for us to do here...just return to avoid crashing below + if (posY === undefined) { + return; + } + + for (x = 0; x < grid[0].length; x++) { + // Cell not found could be because of an invalid table structure + if (!grid[posY][x]) { + continue; + } + + cell = grid[posY][x].elm; + + if (cell != lastCell) { + if (!before) { + rowSpan = getSpanVal(cell, 'rowspan'); + if (rowSpan > 1) { + setSpanVal(cell, 'rowSpan', rowSpan + 1); + continue; + } + } else { + // Check if cell above can be expanded + if (posY > 0 && grid[posY - 1][x]) { + otherCell = grid[posY - 1][x].elm; + rowSpan = getSpanVal(otherCell, 'rowSpan'); + if (rowSpan > 1) { + setSpanVal(otherCell, 'rowSpan', rowSpan + 1); + continue; + } + } + } + + // Insert new cell into new row + newCell = cloneCell(cell); + setSpanVal(newCell, 'colSpan', cell.colSpan); + + newRow.appendChild(newCell); + + lastCell = cell; + } + } + + if (newRow.hasChildNodes()) { + if (!before) { + dom.insertAfter(newRow, rowElm); + } else { + rowElm.parentNode.insertBefore(newRow, rowElm); + } + } + } + + function insertCol(before) { + var posX, lastCell; + + // Find first/last column + each(grid, function(row) { + each(row, function(cell, x) { + if (isCellSelected(cell)) { + posX = x; + + if (before) { + return false; + } + } + }); + + if (before) { + return !posX; + } + }); + + each(grid, function(row, y) { + var cell, rowSpan, colSpan; + + if (!row[posX]) { + return; + } + + cell = row[posX].elm; + if (cell != lastCell) { + colSpan = getSpanVal(cell, 'colspan'); + rowSpan = getSpanVal(cell, 'rowspan'); + + if (colSpan == 1) { + if (!before) { + dom.insertAfter(cloneCell(cell), cell); + fillLeftDown(posX, y, rowSpan - 1, colSpan); + } else { + cell.parentNode.insertBefore(cloneCell(cell), cell); + fillLeftDown(posX, y, rowSpan - 1, colSpan); + } + } else { + setSpanVal(cell, 'colSpan', cell.colSpan + 1); + } + + lastCell = cell; + } + }); + } + + function deleteCols() { + var cols = []; + + // Get selected column indexes + each(grid, function(row) { + each(row, function(cell, x) { + if (isCellSelected(cell) && Tools.inArray(cols, x) === -1) { + each(grid, function(row) { + var cell = row[x].elm, colSpan; + + colSpan = getSpanVal(cell, 'colSpan'); + + if (colSpan > 1) { + setSpanVal(cell, 'colSpan', colSpan - 1); + } else { + dom.remove(cell); + } + }); + + cols.push(x); + } + }); + }); + + cleanup(); + } + + function deleteRows() { + var rows; + + function deleteRow(tr) { + var nextTr, pos, lastCell; + + nextTr = dom.getNext(tr, 'tr'); + + // Move down row spanned cells + each(tr.cells, function(cell) { + var rowSpan = getSpanVal(cell, 'rowSpan'); + + if (rowSpan > 1) { + setSpanVal(cell, 'rowSpan', rowSpan - 1); + pos = getPos(cell); + fillLeftDown(pos.x, pos.y, 1, 1); + } + }); + + // Delete cells + pos = getPos(tr.cells[0]); + each(grid[pos.y], function(cell) { + var rowSpan; + + cell = cell.elm; + + if (cell != lastCell) { + rowSpan = getSpanVal(cell, 'rowSpan'); + + if (rowSpan <= 1) { + dom.remove(cell); + } else { + setSpanVal(cell, 'rowSpan', rowSpan - 1); + } + + lastCell = cell; + } + }); + } + + // Get selected rows and move selection out of scope + rows = getSelectedRows(); + + // Delete all selected rows + each(rows.reverse(), function(tr) { + deleteRow(tr); + }); + + cleanup(); + } + + function cutRows() { + var rows = getSelectedRows(); + + dom.remove(rows); + cleanup(); + + return rows; + } + + function copyRows() { + var rows = getSelectedRows(); + + each(rows, function(row, i) { + rows[i] = cloneNode(row, true); + }); + + return rows; + } + + function pasteRows(rows, before) { + var selectedRows = getSelectedRows(), + targetRow = selectedRows[before ? 0 : selectedRows.length - 1], + targetCellCount = targetRow.cells.length; + + // Nothing to paste + if (!rows) { + return; + } + + // Calc target cell count + each(grid, function(row) { + var match; + + targetCellCount = 0; + each(row, function(cell) { + if (cell.real) { + targetCellCount += cell.colspan; + } + + if (cell.elm.parentNode == targetRow) { + match = 1; + } + }); + + if (match) { + return false; + } + }); + + if (!before) { + rows.reverse(); + } + + each(rows, function(row) { + var i, cellCount = row.cells.length, cell; + + // Remove col/rowspans + for (i = 0; i < cellCount; i++) { + cell = row.cells[i]; + setSpanVal(cell, 'colSpan', 1); + setSpanVal(cell, 'rowSpan', 1); + } + + // Needs more cells + for (i = cellCount; i < targetCellCount; i++) { + row.appendChild(cloneCell(row.cells[cellCount - 1])); + } + + // Needs less cells + for (i = targetCellCount; i < cellCount; i++) { + dom.remove(row.cells[i]); + } + + // Add before/after + if (before) { + targetRow.parentNode.insertBefore(row, targetRow); + } else { + dom.insertAfter(row, targetRow); + } + }); + + // Remove current selection + dom.removeClass(dom.select('td.mce-item-selected,th.mce-item-selected'), 'mce-item-selected'); + } + + function getPos(target) { + var pos; + + each(grid, function(row, y) { + each(row, function(cell, x) { + if (cell.elm == target) { + pos = {x : x, y : y}; + return false; + } + }); + + return !pos; + }); + + return pos; + } + + function setStartCell(cell) { + startPos = getPos(cell); + } + + function findEndPos() { + var maxX, maxY; + + maxX = maxY = 0; + + each(grid, function(row, y) { + each(row, function(cell, x) { + var colSpan, rowSpan; + + if (isCellSelected(cell)) { + cell = grid[y][x]; + + if (x > maxX) { + maxX = x; + } + + if (y > maxY) { + maxY = y; + } + + if (cell.real) { + colSpan = cell.colspan - 1; + rowSpan = cell.rowspan - 1; + + if (colSpan) { + if (x + colSpan > maxX) { + maxX = x + colSpan; + } + } + + if (rowSpan) { + if (y + rowSpan > maxY) { + maxY = y + rowSpan; + } + } + } + } + }); + }); + + return {x : maxX, y : maxY}; + } + + function setEndCell(cell) { + var startX, startY, endX, endY, maxX, maxY, colSpan, rowSpan, x, y; + + endPos = getPos(cell); + + if (startPos && endPos) { + // Get start/end positions + startX = Math.min(startPos.x, endPos.x); + startY = Math.min(startPos.y, endPos.y); + endX = Math.max(startPos.x, endPos.x); + endY = Math.max(startPos.y, endPos.y); + + // Expand end positon to include spans + maxX = endX; + maxY = endY; + + // Expand startX + for (y = startY; y <= maxY; y++) { + cell = grid[y][startX]; + + if (!cell.real) { + if (startX - (cell.colspan - 1) < startX) { + startX -= cell.colspan - 1; + } + } + } + + // Expand startY + for (x = startX; x <= maxX; x++) { + cell = grid[startY][x]; + + if (!cell.real) { + if (startY - (cell.rowspan - 1) < startY) { + startY -= cell.rowspan - 1; + } + } + } + + // Find max X, Y + for (y = startY; y <= endY; y++) { + for (x = startX; x <= endX; x++) { + cell = grid[y][x]; + + if (cell.real) { + colSpan = cell.colspan - 1; + rowSpan = cell.rowspan - 1; + + if (colSpan) { + if (x + colSpan > maxX) { + maxX = x + colSpan; + } + } + + if (rowSpan) { + if (y + rowSpan > maxY) { + maxY = y + rowSpan; + } + } + } + } + } + + // Remove current selection + dom.removeClass(dom.select('td.mce-item-selected,th.mce-item-selected'), 'mce-item-selected'); + + // Add new selection + for (y = startY; y <= maxY; y++) { + for (x = startX; x <= maxX; x++) { + if (grid[y][x]) { + dom.addClass(grid[y][x].elm, 'mce-item-selected'); + } + } + } + } + } + + table = table || dom.getParent(selection.getStart(), 'table'); + + buildGrid(); + + selectedCell = dom.getParent(selection.getStart(), 'th,td'); + if (selectedCell) { + startPos = getPos(selectedCell); + endPos = findEndPos(); + selectedCell = getCell(startPos.x, startPos.y); + } + + Tools.extend(this, { + deleteTable: deleteTable, + split: split, + merge: merge, + insertRow: insertRow, + insertCol: insertCol, + deleteCols: deleteCols, + deleteRows: deleteRows, + cutRows: cutRows, + copyRows: copyRows, + pasteRows: pasteRows, + getPos: getPos, + setStartCell: setStartCell, + setEndCell: setEndCell + }); + }; +}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/plugins/table/plugin.dev.js b/common/static/js/vendor/tinymce/js/tinymce/plugins/table/plugin.dev.js new file mode 100755 index 0000000000..b507f28595 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/plugins/table/plugin.dev.js @@ -0,0 +1,119 @@ +/** + * Inline development version. Only to be used while developing since it uses document.write to load scripts. + */ + +/*jshint smarttabs:true, undef:true, latedef:true, curly:true, bitwise:true, camelcase:true */ +/*globals $code */ + +(function(exports) { + "use strict"; + + var html = "", baseDir; + var modules = {}, exposedModules = [], moduleCount = 0; + + var scripts = document.getElementsByTagName('script'); + for (var i = 0; i < scripts.length; i++) { + var src = scripts[i].src; + + if (src.indexOf('/plugin.dev.js') != -1) { + baseDir = src.substring(0, src.lastIndexOf('/')); + } + } + + function require(ids, callback) { + var module, defs = []; + + for (var i = 0; i < ids.length; ++i) { + module = modules[ids[i]] || resolve(ids[i]); + if (!module) { + throw 'module definition dependecy not found: ' + ids[i]; + } + + defs.push(module); + } + + callback.apply(null, defs); + } + + function resolve(id) { + var target = exports; + var fragments = id.split(/[.\/]/); + + for (var fi = 0; fi < fragments.length; ++fi) { + if (!target[fragments[fi]]) { + return; + } + + target = target[fragments[fi]]; + } + + return target; + } + + function register(id) { + var target = exports; + var fragments = id.split(/[.\/]/); + + for (var fi = 0; fi < fragments.length - 1; ++fi) { + if (target[fragments[fi]] === undefined) { + target[fragments[fi]] = {}; + } + + target = target[fragments[fi]]; + } + + target[fragments[fragments.length - 1]] = modules[id]; + } + + function define(id, dependencies, definition) { + if (typeof id !== 'string') { + throw 'invalid module definition, module id must be defined and be a string'; + } + + if (dependencies === undefined) { + throw 'invalid module definition, dependencies must be specified'; + } + + if (definition === undefined) { + throw 'invalid module definition, definition function must be specified'; + } + + require(dependencies, function() { + modules[id] = definition.apply(null, arguments); + }); + + if (--moduleCount === 0) { + for (var i = 0; i < exposedModules.length; i++) { + register(exposedModules[i]); + } + } + } + + function expose(ids) { + exposedModules = ids; + } + + function writeScripts() { + document.write(html); + } + + function load(path) { + html += '\n'; + moduleCount++; + } + + // Expose globally + exports.define = define; + exports.require = require; + + expose(["tinymce/tableplugin/TableGrid","tinymce/tableplugin/Quirks","tinymce/tableplugin/CellSelection","tinymce/tableplugin/Plugin"]); + + load('classes/TableGrid.js'); + load('classes/Quirks.js'); + load('classes/CellSelection.js'); + load('classes/Plugin.js'); + + writeScripts(); +})(this); + +// $hash: a7dd468b88f17972bfbd56fb01359c08 \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/plugins/table/plugin.js b/common/static/js/vendor/tinymce/js/tinymce/plugins/table/plugin.js new file mode 100755 index 0000000000..ff9bfe82f1 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/plugins/table/plugin.js @@ -0,0 +1,2260 @@ +/** + * Compiled inline version. (Library mode) + */ + +/*jshint smarttabs:true, undef:true, latedef:true, curly:true, bitwise:true, camelcase:true */ +/*globals $code */ + +(function(exports, undefined) { + "use strict"; + + var modules = {}; + + function require(ids, callback) { + var module, defs = []; + + for (var i = 0; i < ids.length; ++i) { + module = modules[ids[i]] || resolve(ids[i]); + if (!module) { + throw 'module definition dependecy not found: ' + ids[i]; + } + + defs.push(module); + } + + callback.apply(null, defs); + } + + function define(id, dependencies, definition) { + if (typeof id !== 'string') { + throw 'invalid module definition, module id must be defined and be a string'; + } + + if (dependencies === undefined) { + throw 'invalid module definition, dependencies must be specified'; + } + + if (definition === undefined) { + throw 'invalid module definition, definition function must be specified'; + } + + require(dependencies, function() { + modules[id] = definition.apply(null, arguments); + }); + } + + function defined(id) { + return !!modules[id]; + } + + function resolve(id) { + var target = exports; + var fragments = id.split(/[.\/]/); + + for (var fi = 0; fi < fragments.length; ++fi) { + if (!target[fragments[fi]]) { + return; + } + + target = target[fragments[fi]]; + } + + return target; + } + + function expose(ids) { + for (var i = 0; i < ids.length; i++) { + var target = exports; + var id = ids[i]; + var fragments = id.split(/[.\/]/); + + for (var fi = 0; fi < fragments.length - 1; ++fi) { + if (target[fragments[fi]] === undefined) { + target[fragments[fi]] = {}; + } + + target = target[fragments[fi]]; + } + + target[fragments[fragments.length - 1]] = modules[id]; + } + } + +// Included from: js/tinymce/plugins/table/classes/TableGrid.js + +/** + * TableGrid.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class creates a grid out of a table element. This + * makes it a whole lot easier to handle complex tables with + * col/row spans. + * + * @class tinymce.tableplugin.TableGrid + * @private + */ +define("tinymce/tableplugin/TableGrid", [ + "tinymce/util/Tools", + "tinymce/Env" +], function(Tools, Env) { + var each = Tools.each; + + function getSpanVal(td, name) { + return parseInt(td.getAttribute(name) || 1, 10); + } + + return function(editor, table) { + var grid, startPos, endPos, selectedCell, selection = editor.selection, dom = selection.dom; + + function buildGrid() { + var startY = 0; + + grid = []; + + each(['thead', 'tbody', 'tfoot'], function(part) { + var rows = dom.select('> ' + part + ' tr', table); + + each(rows, function(tr, y) { + y += startY; + + each(dom.select('> td, > th', tr), function(td, x) { + var x2, y2, rowspan, colspan; + + // Skip over existing cells produced by rowspan + if (grid[y]) { + while (grid[y][x]) { + x++; + } + } + + // Get col/rowspan from cell + rowspan = getSpanVal(td, 'rowspan'); + colspan = getSpanVal(td, 'colspan'); + + // Fill out rowspan/colspan right and down + for (y2 = y; y2 < y + rowspan; y2++) { + if (!grid[y2]) { + grid[y2] = []; + } + + for (x2 = x; x2 < x + colspan; x2++) { + grid[y2][x2] = { + part: part, + real: y2 == y && x2 == x, + elm: td, + rowspan: rowspan, + colspan: colspan + }; + } + } + }); + }); + + startY += rows.length; + }); + } + + function cloneNode(node, children) { + node = node.cloneNode(children); + node.removeAttribute('id'); + + return node; + } + + function getCell(x, y) { + var row; + + row = grid[y]; + if (row) { + return row[x]; + } + } + + function setSpanVal(td, name, val) { + if (td) { + val = parseInt(val, 10); + + if (val === 1) { + td.removeAttribute(name, 1); + } else { + td.setAttribute(name, val, 1); + } + } + } + + function isCellSelected(cell) { + return cell && (dom.hasClass(cell.elm, 'mce-item-selected') || cell == selectedCell); + } + + function getSelectedRows() { + var rows = []; + + each(table.rows, function(row) { + each(row.cells, function(cell) { + if (dom.hasClass(cell, 'mce-item-selected') || (selectedCell && cell == selectedCell.elm)) { + rows.push(row); + return false; + } + }); + }); + + return rows; + } + + function deleteTable() { + var rng = dom.createRng(); + + rng.setStartAfter(table); + rng.setEndAfter(table); + + selection.setRng(rng); + + dom.remove(table); + } + + function cloneCell(cell) { + var formatNode, cloneFormats = {}; + + if (editor.settings.table_clone_elements !== false) { + cloneFormats = Tools.makeMap( + (editor.settings.table_clone_elements || 'strong em b i span font h1 h2 h3 h4 h5 h6 p div').toUpperCase(), + /[ ,]/ + ); + } + + // Clone formats + Tools.walk(cell, function(node) { + var curNode; + + if (node.nodeType == 3) { + each(dom.getParents(node.parentNode, null, cell).reverse(), function(node) { + if (!cloneFormats[node.nodeName]) { + return; + } + + node = cloneNode(node, false); + + if (!formatNode) { + formatNode = curNode = node; + } else if (curNode) { + curNode.appendChild(node); + } + + curNode = node; + }); + + // Add something to the inner node + if (curNode) { + curNode.innerHTML = Env.ie ? ' ' : '
    '; + } + + return false; + } + }, 'childNodes'); + + cell = cloneNode(cell, false); + setSpanVal(cell, 'rowSpan', 1); + setSpanVal(cell, 'colSpan', 1); + + if (formatNode) { + cell.appendChild(formatNode); + } else { + if (!Env.ie) { + cell.innerHTML = '
    '; + } + } + + return cell; + } + + function cleanup() { + var rng = dom.createRng(), row; + + // Empty rows + each(dom.select('tr', table), function(tr) { + if (tr.cells.length === 0) { + dom.remove(tr); + } + }); + + // Empty table + if (dom.select('tr', table).length === 0) { + rng.setStartBefore(table); + rng.setEndBefore(table); + selection.setRng(rng); + dom.remove(table); + return; + } + + // Empty header/body/footer + each(dom.select('thead,tbody,tfoot', table), function(part) { + if (part.rows.length === 0) { + dom.remove(part); + } + }); + + // Restore selection to start position if it still exists + buildGrid(); + + // If we have a valid startPos object + if (startPos) { + // Restore the selection to the closest table position + row = grid[Math.min(grid.length - 1, startPos.y)]; + if (row) { + selection.select(row[Math.min(row.length - 1, startPos.x)].elm, true); + selection.collapse(true); + } + } + } + + function fillLeftDown(x, y, rows, cols) { + var tr, x2, r, c, cell; + + tr = grid[y][x].elm.parentNode; + for (r = 1; r <= rows; r++) { + tr = dom.getNext(tr, 'tr'); + + if (tr) { + // Loop left to find real cell + for (x2 = x; x2 >= 0; x2--) { + cell = grid[y + r][x2].elm; + + if (cell.parentNode == tr) { + // Append clones after + for (c = 1; c <= cols; c++) { + dom.insertAfter(cloneCell(cell), cell); + } + + break; + } + } + + if (x2 == -1) { + // Insert nodes before first cell + for (c = 1; c <= cols; c++) { + tr.insertBefore(cloneCell(tr.cells[0]), tr.cells[0]); + } + } + } + } + } + + function split() { + each(grid, function(row, y) { + each(row, function(cell, x) { + var colSpan, rowSpan, i; + + if (isCellSelected(cell)) { + cell = cell.elm; + colSpan = getSpanVal(cell, 'colspan'); + rowSpan = getSpanVal(cell, 'rowspan'); + + if (colSpan > 1 || rowSpan > 1) { + setSpanVal(cell, 'rowSpan', 1); + setSpanVal(cell, 'colSpan', 1); + + // Insert cells right + for (i = 0; i < colSpan - 1; i++) { + dom.insertAfter(cloneCell(cell), cell); + } + + fillLeftDown(x, y, rowSpan - 1, colSpan); + } + } + }); + }); + } + + function merge(cell, cols, rows) { + var pos, startX, startY, endX, endY, x, y, startCell, endCell, children, count; + + // Use specified cell and cols/rows + if (cell) { + pos = getPos(cell); + startX = pos.x; + startY = pos.y; + endX = startX + (cols - 1); + endY = startY + (rows - 1); + } else { + startPos = endPos = null; + + // Calculate start/end pos by checking for selected cells in grid works better with context menu + each(grid, function(row, y) { + each(row, function(cell, x) { + if (isCellSelected(cell)) { + if (!startPos) { + startPos = {x: x, y: y}; + } + + endPos = {x: x, y: y}; + } + }); + }); + + // Use selection, but make sure startPos is valid before accessing + if (startPos) { + startX = startPos.x; + startY = startPos.y; + endX = endPos.x; + endY = endPos.y; + } + } + + // Find start/end cells + startCell = getCell(startX, startY); + endCell = getCell(endX, endY); + + // Check if the cells exists and if they are of the same part for example tbody = tbody + if (startCell && endCell && startCell.part == endCell.part) { + // Split and rebuild grid + split(); + buildGrid(); + + // Set row/col span to start cell + startCell = getCell(startX, startY).elm; + setSpanVal(startCell, 'colSpan', (endX - startX) + 1); + setSpanVal(startCell, 'rowSpan', (endY - startY) + 1); + + // Remove other cells and add it's contents to the start cell + for (y = startY; y <= endY; y++) { + for (x = startX; x <= endX; x++) { + if (!grid[y] || !grid[y][x]) { + continue; + } + + cell = grid[y][x].elm; + + /*jshint loopfunc:true */ + /*eslint loop-func:0 */ + if (cell != startCell) { + // Move children to startCell + children = Tools.grep(cell.childNodes); + each(children, function(node) { + startCell.appendChild(node); + }); + + // Remove bogus nodes if there is children in the target cell + if (children.length) { + children = Tools.grep(startCell.childNodes); + count = 0; + each(children, function(node) { + if (node.nodeName == 'BR' && dom.getAttrib(node, 'data-mce-bogus') && count++ < children.length - 1) { + startCell.removeChild(node); + } + }); + } + + dom.remove(cell); + } + } + } + + // Remove empty rows etc and restore caret location + cleanup(); + } + } + + function insertRow(before) { + var posY, cell, lastCell, x, rowElm, newRow, newCell, otherCell, rowSpan; + + // Find first/last row + each(grid, function(row, y) { + each(row, function(cell) { + if (isCellSelected(cell)) { + cell = cell.elm; + rowElm = cell.parentNode; + newRow = cloneNode(rowElm, false); + posY = y; + + if (before) { + return false; + } + } + }); + + if (before) { + return !posY; + } + }); + + // If posY is undefined there is nothing for us to do here...just return to avoid crashing below + if (posY === undefined) { + return; + } + + for (x = 0; x < grid[0].length; x++) { + // Cell not found could be because of an invalid table structure + if (!grid[posY][x]) { + continue; + } + + cell = grid[posY][x].elm; + + if (cell != lastCell) { + if (!before) { + rowSpan = getSpanVal(cell, 'rowspan'); + if (rowSpan > 1) { + setSpanVal(cell, 'rowSpan', rowSpan + 1); + continue; + } + } else { + // Check if cell above can be expanded + if (posY > 0 && grid[posY - 1][x]) { + otherCell = grid[posY - 1][x].elm; + rowSpan = getSpanVal(otherCell, 'rowSpan'); + if (rowSpan > 1) { + setSpanVal(otherCell, 'rowSpan', rowSpan + 1); + continue; + } + } + } + + // Insert new cell into new row + newCell = cloneCell(cell); + setSpanVal(newCell, 'colSpan', cell.colSpan); + + newRow.appendChild(newCell); + + lastCell = cell; + } + } + + if (newRow.hasChildNodes()) { + if (!before) { + dom.insertAfter(newRow, rowElm); + } else { + rowElm.parentNode.insertBefore(newRow, rowElm); + } + } + } + + function insertCol(before) { + var posX, lastCell; + + // Find first/last column + each(grid, function(row) { + each(row, function(cell, x) { + if (isCellSelected(cell)) { + posX = x; + + if (before) { + return false; + } + } + }); + + if (before) { + return !posX; + } + }); + + each(grid, function(row, y) { + var cell, rowSpan, colSpan; + + if (!row[posX]) { + return; + } + + cell = row[posX].elm; + if (cell != lastCell) { + colSpan = getSpanVal(cell, 'colspan'); + rowSpan = getSpanVal(cell, 'rowspan'); + + if (colSpan == 1) { + if (!before) { + dom.insertAfter(cloneCell(cell), cell); + fillLeftDown(posX, y, rowSpan - 1, colSpan); + } else { + cell.parentNode.insertBefore(cloneCell(cell), cell); + fillLeftDown(posX, y, rowSpan - 1, colSpan); + } + } else { + setSpanVal(cell, 'colSpan', cell.colSpan + 1); + } + + lastCell = cell; + } + }); + } + + function deleteCols() { + var cols = []; + + // Get selected column indexes + each(grid, function(row) { + each(row, function(cell, x) { + if (isCellSelected(cell) && Tools.inArray(cols, x) === -1) { + each(grid, function(row) { + var cell = row[x].elm, colSpan; + + colSpan = getSpanVal(cell, 'colSpan'); + + if (colSpan > 1) { + setSpanVal(cell, 'colSpan', colSpan - 1); + } else { + dom.remove(cell); + } + }); + + cols.push(x); + } + }); + }); + + cleanup(); + } + + function deleteRows() { + var rows; + + function deleteRow(tr) { + var nextTr, pos, lastCell; + + nextTr = dom.getNext(tr, 'tr'); + + // Move down row spanned cells + each(tr.cells, function(cell) { + var rowSpan = getSpanVal(cell, 'rowSpan'); + + if (rowSpan > 1) { + setSpanVal(cell, 'rowSpan', rowSpan - 1); + pos = getPos(cell); + fillLeftDown(pos.x, pos.y, 1, 1); + } + }); + + // Delete cells + pos = getPos(tr.cells[0]); + each(grid[pos.y], function(cell) { + var rowSpan; + + cell = cell.elm; + + if (cell != lastCell) { + rowSpan = getSpanVal(cell, 'rowSpan'); + + if (rowSpan <= 1) { + dom.remove(cell); + } else { + setSpanVal(cell, 'rowSpan', rowSpan - 1); + } + + lastCell = cell; + } + }); + } + + // Get selected rows and move selection out of scope + rows = getSelectedRows(); + + // Delete all selected rows + each(rows.reverse(), function(tr) { + deleteRow(tr); + }); + + cleanup(); + } + + function cutRows() { + var rows = getSelectedRows(); + + dom.remove(rows); + cleanup(); + + return rows; + } + + function copyRows() { + var rows = getSelectedRows(); + + each(rows, function(row, i) { + rows[i] = cloneNode(row, true); + }); + + return rows; + } + + function pasteRows(rows, before) { + var selectedRows = getSelectedRows(), + targetRow = selectedRows[before ? 0 : selectedRows.length - 1], + targetCellCount = targetRow.cells.length; + + // Nothing to paste + if (!rows) { + return; + } + + // Calc target cell count + each(grid, function(row) { + var match; + + targetCellCount = 0; + each(row, function(cell) { + if (cell.real) { + targetCellCount += cell.colspan; + } + + if (cell.elm.parentNode == targetRow) { + match = 1; + } + }); + + if (match) { + return false; + } + }); + + if (!before) { + rows.reverse(); + } + + each(rows, function(row) { + var i, cellCount = row.cells.length, cell; + + // Remove col/rowspans + for (i = 0; i < cellCount; i++) { + cell = row.cells[i]; + setSpanVal(cell, 'colSpan', 1); + setSpanVal(cell, 'rowSpan', 1); + } + + // Needs more cells + for (i = cellCount; i < targetCellCount; i++) { + row.appendChild(cloneCell(row.cells[cellCount - 1])); + } + + // Needs less cells + for (i = targetCellCount; i < cellCount; i++) { + dom.remove(row.cells[i]); + } + + // Add before/after + if (before) { + targetRow.parentNode.insertBefore(row, targetRow); + } else { + dom.insertAfter(row, targetRow); + } + }); + + // Remove current selection + dom.removeClass(dom.select('td.mce-item-selected,th.mce-item-selected'), 'mce-item-selected'); + } + + function getPos(target) { + var pos; + + each(grid, function(row, y) { + each(row, function(cell, x) { + if (cell.elm == target) { + pos = {x : x, y : y}; + return false; + } + }); + + return !pos; + }); + + return pos; + } + + function setStartCell(cell) { + startPos = getPos(cell); + } + + function findEndPos() { + var maxX, maxY; + + maxX = maxY = 0; + + each(grid, function(row, y) { + each(row, function(cell, x) { + var colSpan, rowSpan; + + if (isCellSelected(cell)) { + cell = grid[y][x]; + + if (x > maxX) { + maxX = x; + } + + if (y > maxY) { + maxY = y; + } + + if (cell.real) { + colSpan = cell.colspan - 1; + rowSpan = cell.rowspan - 1; + + if (colSpan) { + if (x + colSpan > maxX) { + maxX = x + colSpan; + } + } + + if (rowSpan) { + if (y + rowSpan > maxY) { + maxY = y + rowSpan; + } + } + } + } + }); + }); + + return {x : maxX, y : maxY}; + } + + function setEndCell(cell) { + var startX, startY, endX, endY, maxX, maxY, colSpan, rowSpan, x, y; + + endPos = getPos(cell); + + if (startPos && endPos) { + // Get start/end positions + startX = Math.min(startPos.x, endPos.x); + startY = Math.min(startPos.y, endPos.y); + endX = Math.max(startPos.x, endPos.x); + endY = Math.max(startPos.y, endPos.y); + + // Expand end positon to include spans + maxX = endX; + maxY = endY; + + // Expand startX + for (y = startY; y <= maxY; y++) { + cell = grid[y][startX]; + + if (!cell.real) { + if (startX - (cell.colspan - 1) < startX) { + startX -= cell.colspan - 1; + } + } + } + + // Expand startY + for (x = startX; x <= maxX; x++) { + cell = grid[startY][x]; + + if (!cell.real) { + if (startY - (cell.rowspan - 1) < startY) { + startY -= cell.rowspan - 1; + } + } + } + + // Find max X, Y + for (y = startY; y <= endY; y++) { + for (x = startX; x <= endX; x++) { + cell = grid[y][x]; + + if (cell.real) { + colSpan = cell.colspan - 1; + rowSpan = cell.rowspan - 1; + + if (colSpan) { + if (x + colSpan > maxX) { + maxX = x + colSpan; + } + } + + if (rowSpan) { + if (y + rowSpan > maxY) { + maxY = y + rowSpan; + } + } + } + } + } + + // Remove current selection + dom.removeClass(dom.select('td.mce-item-selected,th.mce-item-selected'), 'mce-item-selected'); + + // Add new selection + for (y = startY; y <= maxY; y++) { + for (x = startX; x <= maxX; x++) { + if (grid[y][x]) { + dom.addClass(grid[y][x].elm, 'mce-item-selected'); + } + } + } + } + } + + table = table || dom.getParent(selection.getStart(), 'table'); + + buildGrid(); + + selectedCell = dom.getParent(selection.getStart(), 'th,td'); + if (selectedCell) { + startPos = getPos(selectedCell); + endPos = findEndPos(); + selectedCell = getCell(startPos.x, startPos.y); + } + + Tools.extend(this, { + deleteTable: deleteTable, + split: split, + merge: merge, + insertRow: insertRow, + insertCol: insertCol, + deleteCols: deleteCols, + deleteRows: deleteRows, + cutRows: cutRows, + copyRows: copyRows, + pasteRows: pasteRows, + getPos: getPos, + setStartCell: setStartCell, + setEndCell: setEndCell + }); + }; +}); + +// Included from: js/tinymce/plugins/table/classes/Quirks.js + +/** + * Quirks.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class includes fixes for various browser quirks. + * + * @class tinymce.tableplugin.Quirks + * @private + */ +define("tinymce/tableplugin/Quirks", [ + "tinymce/util/VK", + "tinymce/Env", + "tinymce/util/Tools" +], function(VK, Env, Tools) { + var each = Tools.each; + + function getSpanVal(td, name) { + return parseInt(td.getAttribute(name) || 1, 10); + } + + return function(editor) { + /** + * Fixed caret movement around tables on WebKit. + */ + function moveWebKitSelection() { + function eventHandler(e) { + var key = e.keyCode; + + function handle(upBool, sourceNode) { + var siblingDirection = upBool ? 'previousSibling' : 'nextSibling'; + var currentRow = editor.dom.getParent(sourceNode, 'tr'); + var siblingRow = currentRow[siblingDirection]; + + if (siblingRow) { + moveCursorToRow(editor, sourceNode, siblingRow, upBool); + e.preventDefault(); + return true; + } else { + var tableNode = editor.dom.getParent(currentRow, 'table'); + var middleNode = currentRow.parentNode; + var parentNodeName = middleNode.nodeName.toLowerCase(); + if (parentNodeName === 'tbody' || parentNodeName === (upBool ? 'tfoot' : 'thead')) { + var targetParent = getTargetParent(upBool, tableNode, middleNode, 'tbody'); + if (targetParent !== null) { + return moveToRowInTarget(upBool, targetParent, sourceNode); + } + } + return escapeTable(upBool, currentRow, siblingDirection, tableNode); + } + } + + function getTargetParent(upBool, topNode, secondNode, nodeName) { + var tbodies = editor.dom.select('>' + nodeName, topNode); + var position = tbodies.indexOf(secondNode); + if (upBool && position === 0 || !upBool && position === tbodies.length - 1) { + return getFirstHeadOrFoot(upBool, topNode); + } else if (position === -1) { + var topOrBottom = secondNode.tagName.toLowerCase() === 'thead' ? 0 : tbodies.length - 1; + return tbodies[topOrBottom]; + } else { + return tbodies[position + (upBool ? -1 : 1)]; + } + } + + function getFirstHeadOrFoot(upBool, parent) { + var tagName = upBool ? 'thead' : 'tfoot'; + var headOrFoot = editor.dom.select('>' + tagName, parent); + return headOrFoot.length !== 0 ? headOrFoot[0] : null; + } + + function moveToRowInTarget(upBool, targetParent, sourceNode) { + var targetRow = getChildForDirection(targetParent, upBool); + + if (targetRow) { + moveCursorToRow(editor, sourceNode, targetRow, upBool); + } + + e.preventDefault(); + return true; + } + + function escapeTable(upBool, currentRow, siblingDirection, table) { + var tableSibling = table[siblingDirection]; + + if (tableSibling) { + moveCursorToStartOfElement(tableSibling); + return true; + } else { + var parentCell = editor.dom.getParent(table, 'td,th'); + if (parentCell) { + return handle(upBool, parentCell, e); + } else { + var backUpSibling = getChildForDirection(currentRow, !upBool); + moveCursorToStartOfElement(backUpSibling); + e.preventDefault(); + return false; + } + } + } + + function getChildForDirection(parent, up) { + var child = parent && parent[up ? 'lastChild' : 'firstChild']; + // BR is not a valid table child to return in this case we return the table cell + return child && child.nodeName === 'BR' ? editor.dom.getParent(child, 'td,th') : child; + } + + function moveCursorToStartOfElement(n) { + editor.selection.setCursorLocation(n, 0); + } + + function isVerticalMovement() { + return key == VK.UP || key == VK.DOWN; + } + + function isInTable(editor) { + var node = editor.selection.getNode(); + var currentRow = editor.dom.getParent(node, 'tr'); + return currentRow !== null; + } + + function columnIndex(column) { + var colIndex = 0; + var c = column; + while (c.previousSibling) { + c = c.previousSibling; + colIndex = colIndex + getSpanVal(c, "colspan"); + } + return colIndex; + } + + function findColumn(rowElement, columnIndex) { + var c = 0, r = 0; + + each(rowElement.children, function(cell, i) { + c = c + getSpanVal(cell, "colspan"); + r = i; + if (c > columnIndex) { + return false; + } + }); + return r; + } + + function moveCursorToRow(ed, node, row, upBool) { + var srcColumnIndex = columnIndex(editor.dom.getParent(node, 'td,th')); + var tgtColumnIndex = findColumn(row, srcColumnIndex); + var tgtNode = row.childNodes[tgtColumnIndex]; + var rowCellTarget = getChildForDirection(tgtNode, upBool); + moveCursorToStartOfElement(rowCellTarget || tgtNode); + } + + function shouldFixCaret(preBrowserNode) { + var newNode = editor.selection.getNode(); + var newParent = editor.dom.getParent(newNode, 'td,th'); + var oldParent = editor.dom.getParent(preBrowserNode, 'td,th'); + + return newParent && newParent !== oldParent && checkSameParentTable(newParent, oldParent); + } + + function checkSameParentTable(nodeOne, NodeTwo) { + return editor.dom.getParent(nodeOne, 'TABLE') === editor.dom.getParent(NodeTwo, 'TABLE'); + } + + if (isVerticalMovement() && isInTable(editor)) { + var preBrowserNode = editor.selection.getNode(); + setTimeout(function() { + if (shouldFixCaret(preBrowserNode)) { + handle(!e.shiftKey && key === VK.UP, preBrowserNode, e); + } + }, 0); + } + } + + editor.on('KeyDown', function(e) { + eventHandler(e); + }); + } + + function fixBeforeTableCaretBug() { + // Checks if the selection/caret is at the start of the specified block element + function isAtStart(rng, par) { + var doc = par.ownerDocument, rng2 = doc.createRange(), elm; + + rng2.setStartBefore(par); + rng2.setEnd(rng.endContainer, rng.endOffset); + + elm = doc.createElement('body'); + elm.appendChild(rng2.cloneContents()); + + // Check for text characters of other elements that should be treated as content + return elm.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi, '-').replace(/<[^>]+>/g, '').length === 0; + } + + // Fixes an bug where it's impossible to place the caret before a table in Gecko + // this fix solves it by detecting when the caret is at the beginning of such a table + // and then manually moves the caret infront of the table + editor.on('KeyDown', function(e) { + var rng, table, dom = editor.dom; + + // On gecko it's not possible to place the caret before a table + if (e.keyCode == 37 || e.keyCode == 38) { + rng = editor.selection.getRng(); + table = dom.getParent(rng.startContainer, 'table'); + + if (table && editor.getBody().firstChild == table) { + if (isAtStart(rng, table)) { + rng = dom.createRng(); + + rng.setStartBefore(table); + rng.setEndBefore(table); + + editor.selection.setRng(rng); + + e.preventDefault(); + } + } + } + }); + } + + // Fixes an issue on Gecko where it's impossible to place the caret behind a table + // This fix will force a paragraph element after the table but only when the forced_root_block setting is enabled + function fixTableCaretPos() { + editor.on('KeyDown SetContent VisualAid', function() { + var last; + + // Skip empty text nodes from the end + for (last = editor.getBody().lastChild; last; last = last.previousSibling) { + if (last.nodeType == 3) { + if (last.nodeValue.length > 0) { + break; + } + } else if (last.nodeType == 1 && !last.getAttribute('data-mce-bogus')) { + break; + } + } + + if (last && last.nodeName == 'TABLE') { + if (editor.settings.forced_root_block) { + editor.dom.add( + editor.getBody(), + editor.settings.forced_root_block, + editor.settings.forced_root_block_attrs, + Env.ie && Env.ie < 11 ? ' ' : '
    ' + ); + } else { + editor.dom.add(editor.getBody(), 'br', {'data-mce-bogus': '1'}); + } + } + }); + + editor.on('PreProcess', function(o) { + var last = o.node.lastChild; + + if (last && (last.nodeName == "BR" || (last.childNodes.length == 1 && + (last.firstChild.nodeName == 'BR' || last.firstChild.nodeValue == '\u00a0'))) && + last.previousSibling && last.previousSibling.nodeName == "TABLE") { + editor.dom.remove(last); + } + }); + } + + // this nasty hack is here to work around some WebKit selection bugs. + function fixTableCellSelection() { + function tableCellSelected(ed, rng, n, currentCell) { + // The decision of when a table cell is selected is somewhat involved. The fact that this code is + // required is actually a pointer to the root cause of this bug. A cell is selected when the start + // and end offsets are 0, the start container is a text, and the selection node is either a TR (most cases) + // or the parent of the table (in the case of the selection containing the last cell of a table). + var TEXT_NODE = 3, table = ed.dom.getParent(rng.startContainer, 'TABLE'); + var tableParent, allOfCellSelected, tableCellSelection; + + if (table) { + tableParent = table.parentNode; + } + + allOfCellSelected = rng.startContainer.nodeType == TEXT_NODE && + rng.startOffset === 0 && + rng.endOffset === 0 && + currentCell && + (n.nodeName == "TR" || n == tableParent); + + tableCellSelection = (n.nodeName == "TD" || n.nodeName == "TH") && !currentCell; + + return allOfCellSelected || tableCellSelection; + } + + function fixSelection() { + var rng = editor.selection.getRng(); + var n = editor.selection.getNode(); + var currentCell = editor.dom.getParent(rng.startContainer, 'TD,TH'); + + if (!tableCellSelected(editor, rng, n, currentCell)) { + return; + } + + if (!currentCell) { + currentCell = n; + } + + // Get the very last node inside the table cell + var end = currentCell.lastChild; + while (end.lastChild) { + end = end.lastChild; + } + + // Select the entire table cell. Nothing outside of the table cell should be selected. + rng.setEnd(end, end.nodeValue.length); + editor.selection.setRng(rng); + } + + editor.on('KeyDown', function() { + fixSelection(); + }); + + editor.on('MouseDown', function(e) { + if (e.button != 2) { + fixSelection(); + } + }); + } + + /** + * Delete table if all cells are selected. + */ + function deleteTable() { + editor.on('keydown', function(e) { + if ((e.keyCode == VK.DELETE || e.keyCode == VK.BACKSPACE) && !e.isDefaultPrevented()) { + var table = editor.dom.getParent(editor.selection.getStart(), 'table'); + + if (table) { + var cells = editor.dom.select('td,th', table), i = cells.length; + while (i--) { + if (!editor.dom.hasClass(cells[i], 'mce-item-selected')) { + return; + } + } + + e.preventDefault(); + editor.execCommand('mceTableDelete'); + } + } + }); + } + + deleteTable(); + + if (Env.webkit) { + moveWebKitSelection(); + fixTableCellSelection(); + } + + if (Env.gecko) { + fixBeforeTableCaretBug(); + fixTableCaretPos(); + } + + if (Env.ie > 10) { + fixBeforeTableCaretBug(); + fixTableCaretPos(); + } + }; +}); + +// Included from: js/tinymce/plugins/table/classes/CellSelection.js + +/** + * CellSelection.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class handles table cell selection by faking it using a css class that gets applied + * to cells when dragging the mouse from one cell to another. + * + * @class tinymce.tableplugin.CellSelection + * @private + */ +define("tinymce/tableplugin/CellSelection", [ + "tinymce/tableplugin/TableGrid", + "tinymce/dom/TreeWalker", + "tinymce/util/Tools" +], function(TableGrid, TreeWalker, Tools) { + return function(editor) { + var dom = editor.dom, tableGrid, startCell, startTable, hasCellSelection = true; + + function clear() { + // Restore selection possibilities + editor.getBody().style.webkitUserSelect = ''; + + if (hasCellSelection) { + editor.dom.removeClass( + editor.dom.select('td.mce-item-selected,th.mce-item-selected'), + 'mce-item-selected' + ); + + hasCellSelection = false; + } + } + + function cellSelectionHandler(e) { + var sel, table, target = e.target; + + if (startCell && (tableGrid || target != startCell) && (target.nodeName == 'TD' || target.nodeName == 'TH')) { + table = dom.getParent(target, 'table'); + if (table == startTable) { + if (!tableGrid) { + tableGrid = new TableGrid(editor, table); + tableGrid.setStartCell(startCell); + + editor.getBody().style.webkitUserSelect = 'none'; + } + + tableGrid.setEndCell(target); + hasCellSelection = true; + } + + // Remove current selection + sel = editor.selection.getSel(); + + try { + if (sel.removeAllRanges) { + sel.removeAllRanges(); + } else { + sel.empty(); + } + } catch (ex) { + // IE9 might throw errors here + } + + e.preventDefault(); + } + } + + // Add cell selection logic + editor.on('MouseDown', function(e) { + if (e.button != 2) { + clear(); + + startCell = dom.getParent(e.target, 'td,th'); + startTable = dom.getParent(startCell, 'table'); + } + }); + + editor.on('mouseover', cellSelectionHandler); + + editor.on('remove', function() { + dom.unbind(editor.getDoc(), 'mouseover', cellSelectionHandler); + }); + + editor.on('MouseUp', function() { + var rng, sel = editor.selection, selectedCells, walker, node, lastNode, endNode; + + function setPoint(node, start) { + var walker = new TreeWalker(node, node); + + do { + // Text node + if (node.nodeType == 3 && Tools.trim(node.nodeValue).length !== 0) { + if (start) { + rng.setStart(node, 0); + } else { + rng.setEnd(node, node.nodeValue.length); + } + + return; + } + + // BR element + if (node.nodeName == 'BR') { + if (start) { + rng.setStartBefore(node); + } else { + rng.setEndBefore(node); + } + + return; + } + } while ((node = (start ? walker.next() : walker.prev()))); + } + + // Move selection to startCell + if (startCell) { + if (tableGrid) { + editor.getBody().style.webkitUserSelect = ''; + } + + // Try to expand text selection as much as we can only Gecko supports cell selection + selectedCells = dom.select('td.mce-item-selected,th.mce-item-selected'); + if (selectedCells.length > 0) { + rng = dom.createRng(); + node = selectedCells[0]; + endNode = selectedCells[selectedCells.length - 1]; + rng.setStartBefore(node); + rng.setEndAfter(node); + + setPoint(node, 1); + walker = new TreeWalker(node, dom.getParent(selectedCells[0], 'table')); + + do { + if (node.nodeName == 'TD' || node.nodeName == 'TH') { + if (!dom.hasClass(node, 'mce-item-selected')) { + break; + } + + lastNode = node; + } + } while ((node = walker.next())); + + setPoint(lastNode); + + sel.setRng(rng); + } + + editor.nodeChanged(); + startCell = tableGrid = startTable = null; + } + }); + + editor.on('KeyUp', function() { + clear(); + }); + + return { + clear: clear + }; + }; +}); + +// Included from: js/tinymce/plugins/table/classes/Plugin.js + +/** + * Plugin.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class contains all core logic for the table plugin. + * + * @class tinymce.tableplugin.Plugin + * @private + */ +define("tinymce/tableplugin/Plugin", [ + "tinymce/tableplugin/TableGrid", + "tinymce/tableplugin/Quirks", + "tinymce/tableplugin/CellSelection", + "tinymce/util/Tools", + "tinymce/dom/TreeWalker", + "tinymce/Env", + "tinymce/PluginManager" +], function(TableGrid, Quirks, CellSelection, Tools, TreeWalker, Env, PluginManager) { + var each = Tools.each; + + function Plugin(editor) { + var winMan, clipboardRows, self = this; // Might be selected cells on reload + + function removePxSuffix(size) { + return size ? size.replace(/px$/, '') : ""; + } + + function addSizeSuffix(size) { + if (/^[0-9]+$/.test(size)) { + size += "px"; + } + + return size; + } + + function unApplyAlign(elm) { + each('left center right'.split(' '), function(name) { + editor.formatter.remove('align' + name, {}, elm); + }); + } + + function tableDialog() { + var dom = editor.dom, tableElm, data; + + tableElm = dom.getParent(editor.selection.getStart(), 'table'); + + data = { + width: removePxSuffix(dom.getStyle(tableElm, 'width') || dom.getAttrib(tableElm, 'width')), + height: removePxSuffix(dom.getStyle(tableElm, 'height') || dom.getAttrib(tableElm, 'height')), + cellspacing: dom.getAttrib(tableElm, 'cellspacing'), + cellpadding: dom.getAttrib(tableElm, 'cellpadding'), + border: dom.getAttrib(tableElm, 'border'), + caption: !!dom.select('caption', tableElm)[0] + }; + + each('left center right'.split(' '), function(name) { + if (editor.formatter.matchNode(tableElm, 'align' + name)) { + data.align = name; + } + }); + + editor.windowManager.open({ + title: "Table properties", + items: { + type: 'form', + layout: 'grid', + columns: 2, + data: data, + defaults: { + type: 'textbox', + maxWidth: 50 + }, + items: [ + {label: 'Width', name: 'width'}, + {label: 'Height', name: 'height'}, + {label: 'Cell spacing', name: 'cellspacing'}, + {label: 'Cell padding', name: 'cellpadding'}, + {label: 'Border', name: 'border'}, + {label: 'Caption', name: 'caption', type: 'checkbox'}, + { + label: 'Alignment', + minWidth: 90, + name: 'align', + type: 'listbox', + text: 'None', + maxWidth: null, + values: [ + {text: 'None', value: ''}, + {text: 'Left', value: 'left'}, + {text: 'Center', value: 'center'}, + {text: 'Right', value: 'right'} + ] + } + ] + }, + + onsubmit: function() { + var data = this.toJSON(), captionElm; + + editor.undoManager.transact(function() { + editor.dom.setAttribs(tableElm, { + cellspacing: data.cellspacing, + cellpadding: data.cellpadding, + border: data.border + }); + + editor.dom.setStyles(tableElm, { + width: addSizeSuffix(data.width), + height: addSizeSuffix(data.height) + }); + + // Toggle caption on/off + captionElm = dom.select('caption', tableElm)[0]; + + if (captionElm && !data.caption) { + dom.remove(captionElm); + } + + if (!captionElm && data.caption) { + captionElm = dom.create('caption'); + captionElm.innerHTML = !Env.ie ? '
    ' : '\u00a0'; + tableElm.insertBefore(captionElm, tableElm.firstChild); + } + + unApplyAlign(tableElm); + if (data.align) { + editor.formatter.apply('align' + data.align, {}, tableElm); + } + + editor.focus(); + editor.addVisual(); + }); + } + }); + } + + function mergeDialog(grid, cell) { + editor.windowManager.open({ + title: "Merge cells", + body: [ + {label: 'Cols', name: 'cols', type: 'textbox', size: 10}, + {label: 'Rows', name: 'rows', type: 'textbox', size: 10} + ], + onsubmit: function() { + var data = this.toJSON(); + + editor.undoManager.transact(function() { + grid.merge(cell, data.cols, data.rows); + }); + } + }); + } + + function cellDialog() { + var dom = editor.dom, cellElm, data, cells = []; + + // Get selected cells or the current cell + cells = editor.dom.select('td.mce-item-selected,th.mce-item-selected'); + cellElm = editor.dom.getParent(editor.selection.getStart(), 'td,th'); + if (!cells.length && cellElm) { + cells.push(cellElm); + } + + cellElm = cellElm || cells[0]; + + if (!cellElm) { + // If this element is null, return now to avoid crashing. + return; + } + + data = { + width: removePxSuffix(dom.getStyle(cellElm, 'width') || dom.getAttrib(cellElm, 'width')), + height: removePxSuffix(dom.getStyle(cellElm, 'height') || dom.getAttrib(cellElm, 'height')), + scope: dom.getAttrib(cellElm, 'scope') + }; + + data.type = cellElm.nodeName.toLowerCase(); + + each('left center right'.split(' '), function(name) { + if (editor.formatter.matchNode(cellElm, 'align' + name)) { + data.align = name; + } + }); + + editor.windowManager.open({ + title: "Cell properties", + items: { + type: 'form', + data: data, + layout: 'grid', + columns: 2, + defaults: { + type: 'textbox', + maxWidth: 50 + }, + items: [ + {label: 'Width', name: 'width'}, + {label: 'Height', name: 'height'}, + { + label: 'Cell type', + name: 'type', + type: 'listbox', + text: 'None', + minWidth: 90, + maxWidth: null, + values: [ + {text: 'Cell', value: 'td'}, + {text: 'Header cell', value: 'th'} + ] + }, + { + label: 'Scope', + name: 'scope', + type: 'listbox', + text: 'None', + minWidth: 90, + maxWidth: null, + values: [ + {text: 'None', value: ''}, + {text: 'Row', value: 'row'}, + {text: 'Column', value: 'col'}, + {text: 'Row group', value: 'rowgroup'}, + {text: 'Column group', value: 'colgroup'} + ] + }, + { + label: 'Alignment', + name: 'align', + type: 'listbox', + text: 'None', + minWidth: 90, + maxWidth: null, + values: [ + {text: 'None', value: ''}, + {text: 'Left', value: 'left'}, + {text: 'Center', value: 'center'}, + {text: 'Right', value: 'right'} + ] + } + ] + }, + + onsubmit: function() { + var data = this.toJSON(); + + editor.undoManager.transact(function() { + each(cells, function(cellElm) { + editor.dom.setAttrib(cellElm, 'scope', data.scope); + + editor.dom.setStyles(cellElm, { + width: addSizeSuffix(data.width), + height: addSizeSuffix(data.height) + }); + + // Switch cell type + if (data.type && cellElm.nodeName.toLowerCase() != data.type) { + cellElm = dom.rename(cellElm, data.type); + } + + // Apply/remove alignment + unApplyAlign(cellElm); + if (data.align) { + editor.formatter.apply('align' + data.align, {}, cellElm); + } + }); + + editor.focus(); + }); + } + }); + } + + function rowDialog() { + var dom = editor.dom, tableElm, cellElm, rowElm, data, rows = []; + + tableElm = editor.dom.getParent(editor.selection.getStart(), 'table'); + cellElm = editor.dom.getParent(editor.selection.getStart(), 'td,th'); + + each(tableElm.rows, function(row) { + each(row.cells, function(cell) { + if (dom.hasClass(cell, 'mce-item-selected') || cell == cellElm) { + rows.push(row); + return false; + } + }); + }); + + rowElm = rows[0]; + if (!rowElm) { + // If this element is null, return now to avoid crashing. + return; + } + + data = { + height: removePxSuffix(dom.getStyle(rowElm, 'height') || dom.getAttrib(rowElm, 'height')), + scope: dom.getAttrib(rowElm, 'scope') + }; + + data.type = rowElm.parentNode.nodeName.toLowerCase(); + + each('left center right'.split(' '), function(name) { + if (editor.formatter.matchNode(rowElm, 'align' + name)) { + data.align = name; + } + }); + + editor.windowManager.open({ + title: "Row properties", + items: { + type: 'form', + data: data, + columns: 2, + defaults: { + type: 'textbox' + }, + items: [ + { + type: 'listbox', + name: 'type', + label: 'Row type', + text: 'None', + maxWidth: null, + values: [ + {text: 'Header', value: 'thead'}, + {text: 'Body', value: 'tbody'}, + {text: 'Footer', value: 'tfoot'} + ] + }, + { + type: 'listbox', + name: 'align', + label: 'Alignment', + text: 'None', + maxWidth: null, + values: [ + {text: 'None', value: ''}, + {text: 'Left', value: 'left'}, + {text: 'Center', value: 'center'}, + {text: 'Right', value: 'right'} + ] + }, + {label: 'Height', name: 'height'} + ] + }, + + onsubmit: function() { + var data = this.toJSON(), tableElm, oldParentElm, parentElm; + + editor.undoManager.transact(function() { + var toType = data.type; + + each(rows, function(rowElm) { + editor.dom.setAttrib(rowElm, 'scope', data.scope); + + editor.dom.setStyles(rowElm, { + height: addSizeSuffix(data.height) + }); + + if (toType != rowElm.parentNode.nodeName.toLowerCase()) { + tableElm = dom.getParent(rowElm, 'table'); + + oldParentElm = rowElm.parentNode; + parentElm = dom.select(toType, tableElm)[0]; + if (!parentElm) { + parentElm = dom.create(toType); + if (tableElm.firstChild) { + tableElm.insertBefore(parentElm, tableElm.firstChild); + } else { + tableElm.appendChild(parentElm); + } + } + + parentElm.appendChild(rowElm); + + if (!oldParentElm.hasChildNodes()) { + dom.remove(oldParentElm); + } + } + + // Apply/remove alignment + unApplyAlign(rowElm); + if (data.align) { + editor.formatter.apply('align' + data.align, {}, rowElm); + } + }); + + editor.focus(); + }); + } + }); + } + + function cmd(command) { + return function() { + editor.execCommand(command); + }; + } + + function insertTable(cols, rows) { + var y, x, html; + + html = ''; + + for (y = 0; y < rows; y++) { + html += ''; + + for (x = 0; x < cols; x++) { + html += ''; + } + + html += ''; + } + + html += '
    ' + (Env.ie ? " " : '
    ') + '
    '; + + editor.insertContent(html); + } + + function handleDisabledState(ctrl, selector) { + function bindStateListener() { + ctrl.disabled(!editor.dom.getParent(editor.selection.getStart(), selector)); + + editor.selection.selectorChanged(selector, function(state) { + ctrl.disabled(!state); + }); + } + + if (editor.initialized) { + bindStateListener(); + } else { + editor.on('init', bindStateListener); + } + } + + function postRender() { + /*jshint validthis:true*/ + handleDisabledState(this, 'table'); + } + + function postRenderCell() { + /*jshint validthis:true*/ + handleDisabledState(this, 'td,th'); + } + + function generateTableGrid() { + var html = ''; + + html = ''; + + for (var y = 0; y < 10; y++) { + html += ''; + + for (var x = 0; x < 10; x++) { + html += ''; + } + + html += ''; + } + + html += '
    '; + + html += ''; + + return html; + } + + function selectGrid(tx, ty, control) { + var table = control.getEl().getElementsByTagName('table')[0]; + var rel = control.parent().rel, x, y, focusCell, cell; + + if (control.isRtl() || rel == 'tl-tr') { + for (y = 9; y >= 0; y--) { + for (x = 0; x < 10; x++) { + cell = table.rows[y].childNodes[x].firstChild; + + editor.dom.toggleClass( + cell, + 'mce-active', + x >= tx && y <= ty + ); + + if (x >= tx && y <= ty) { + focusCell = cell; + } + } + } + + tx = 9 - tx; + table.nextSibling.innerHTML = tx + ' x ' + (ty + 1); + } else { + for (y = 0; y < 10; y++) { + for (x = 0; x < 10; x++) { + cell = table.rows[y].childNodes[x].firstChild; + + editor.dom.toggleClass( + cell, + 'mce-active', + x <= tx && y <= ty + ); + + if (x <= tx && y <= ty) { + focusCell = cell; + } + } + } + + table.nextSibling.innerHTML = (tx + 1) + ' x ' + (ty + 1); + } + + return focusCell.parentNode; + } + + editor.addMenuItem('inserttable', { + text: 'Insert table', + icon: 'table', + context: 'table', + onhide: function() { + var elements = this.menu.items()[0].getEl().getElementsByTagName('a'); + editor.dom.removeClass(elements, 'mce-active'); + editor.dom.addClass(elements[0], 'mce-active'); + }, + menu: [ + { + type: 'container', + html: generateTableGrid(), + + onPostRender: function() { + this.lastX = this.lastY = 0; + }, + + onmousemove: function(e) { + var target = e.target, x, y; + + if (target.nodeName == 'A') { + x = parseInt(target.getAttribute('data-mce-x'), 10); + y = parseInt(target.getAttribute('data-mce-y'), 10); + + if (x !== this.lastX || y !== this.lastY) { + selectGrid(x, y, e.control); + + this.lastX = x; + this.lastY = y; + } + } + }, + + onkeydown: function(e) { + var x = this.lastX, y = this.lastY, isHandled; + + switch (e.keyCode) { + case 37: // DOM_VK_LEFT + if (x > 0) { + x--; + isHandled = true; + } + break; + + case 39: // DOM_VK_RIGHT + isHandled = true; + + if (x < 9) { + x++; + } + break; + + case 38: // DOM_VK_UP + isHandled = true; + + if (y > 0) { + y--; + } + break; + + case 40: // DOM_VK_DOWN + isHandled = true; + + if (y < 9) { + y++; + } + break; + } + + if (isHandled) { + e.preventDefault(); + e.stopPropagation(); + + selectGrid(x, y, e.control).focus(); + + this.lastX = x; + this.lastY = y; + } + }, + + onclick: function(e) { + if (e.target.nodeName == 'A') { + e.preventDefault(); + e.stopPropagation(); + this.parent().cancel(); + + insertTable(this.lastX + 1, this.lastY + 1); + } + } + } + ] + }); + + editor.addMenuItem('tableprops', { + text: 'Table properties', + context: 'table', + onPostRender: postRender, + onclick: tableDialog + }); + + editor.addMenuItem('deletetable', { + text: 'Delete table', + context: 'table', + onPostRender: postRender, + cmd: 'mceTableDelete' + }); + + editor.addMenuItem('cell', { + separator: 'before', + text: 'Cell', + context: 'table', + menu: [ + {text: 'Cell properties', onclick: cmd('mceTableCellProps'), onPostRender: postRenderCell}, + {text: 'Merge cells', onclick: cmd('mceTableMergeCells'), onPostRender: postRenderCell}, + {text: 'Split cell', onclick: cmd('mceTableSplitCells'), onPostRender: postRenderCell} + ] + }); + + editor.addMenuItem('row', { + text: 'Row', + context: 'table', + menu: [ + {text: 'Insert row before', onclick: cmd('mceTableInsertRowBefore'), onPostRender: postRenderCell}, + {text: 'Insert row after', onclick: cmd('mceTableInsertRowAfter'), onPostRender: postRenderCell}, + {text: 'Delete row', onclick: cmd('mceTableDeleteRow'), onPostRender: postRenderCell}, + {text: 'Row properties', onclick: cmd('mceTableRowProps'), onPostRender: postRenderCell}, + {text: '-'}, + {text: 'Cut row', onclick: cmd('mceTableCutRow'), onPostRender: postRenderCell}, + {text: 'Copy row', onclick: cmd('mceTableCopyRow'), onPostRender: postRenderCell}, + {text: 'Paste row before', onclick: cmd('mceTablePasteRowBefore'), onPostRender: postRenderCell}, + {text: 'Paste row after', onclick: cmd('mceTablePasteRowAfter'), onPostRender: postRenderCell} + ] + }); + + editor.addMenuItem('column', { + text: 'Column', + context: 'table', + menu: [ + {text: 'Insert column before', onclick: cmd('mceTableInsertColBefore'), onPostRender: postRenderCell}, + {text: 'Insert column after', onclick: cmd('mceTableInsertColAfter'), onPostRender: postRenderCell}, + {text: 'Delete column', onclick: cmd('mceTableDeleteCol'), onPostRender: postRenderCell} + ] + }); + + var menuItems = []; + each("inserttable tableprops deletetable | cell row column".split(' '), function(name) { + if (name == '|') { + menuItems.push({text: '-'}); + } else { + menuItems.push(editor.menuItems[name]); + } + }); + + editor.addButton("table", { + type: "menubutton", + title: "Table", + menu: menuItems + }); + + // Select whole table is a table border is clicked + if (!Env.isIE) { + editor.on('click', function(e) { + e = e.target; + + if (e.nodeName === 'TABLE') { + editor.selection.select(e); + editor.nodeChanged(); + } + }); + } + + self.quirks = new Quirks(editor); + + editor.on('Init', function() { + winMan = editor.windowManager; + self.cellSelection = new CellSelection(editor); + }); + + // Register action commands + each({ + mceTableSplitCells: function(grid) { + grid.split(); + }, + + mceTableMergeCells: function(grid) { + var rowSpan, colSpan, cell; + + cell = editor.dom.getParent(editor.selection.getStart(), 'th,td'); + if (cell) { + rowSpan = cell.rowSpan; + colSpan = cell.colSpan; + } + + if (!editor.dom.select('td.mce-item-selected,th.mce-item-selected').length) { + mergeDialog(grid, cell); + } else { + grid.merge(); + } + }, + + mceTableInsertRowBefore: function(grid) { + grid.insertRow(true); + }, + + mceTableInsertRowAfter: function(grid) { + grid.insertRow(); + }, + + mceTableInsertColBefore: function(grid) { + grid.insertCol(true); + }, + + mceTableInsertColAfter: function(grid) { + grid.insertCol(); + }, + + mceTableDeleteCol: function(grid) { + grid.deleteCols(); + }, + + mceTableDeleteRow: function(grid) { + grid.deleteRows(); + }, + + mceTableCutRow: function(grid) { + clipboardRows = grid.cutRows(); + }, + + mceTableCopyRow: function(grid) { + clipboardRows = grid.copyRows(); + }, + + mceTablePasteRowBefore: function(grid) { + grid.pasteRows(clipboardRows, true); + }, + + mceTablePasteRowAfter: function(grid) { + grid.pasteRows(clipboardRows); + }, + + mceTableDelete: function(grid) { + grid.deleteTable(); + } + }, function(func, name) { + editor.addCommand(name, function() { + var grid = new TableGrid(editor); + + if (grid) { + func(grid); + editor.execCommand('mceRepaint'); + self.cellSelection.clear(); + } + }); + }); + + // Register dialog commands + each({ + mceInsertTable: function() { + tableDialog(); + }, + + mceTableRowProps: rowDialog, + mceTableCellProps: cellDialog + }, function(func, name) { + editor.addCommand(name, function(ui, val) { + func(val); + }); + }); + } + + PluginManager.add('table', Plugin); +}); + +expose(["tinymce/tableplugin/TableGrid","tinymce/tableplugin/Quirks","tinymce/tableplugin/CellSelection","tinymce/tableplugin/Plugin"]); +})(this); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/plugins/table/plugin.min.js b/common/static/js/vendor/tinymce/js/tinymce/plugins/table/plugin.min.js new file mode 100755 index 0000000000..bf5554bb4e --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/plugins/table/plugin.min.js @@ -0,0 +1 @@ +!function(e,t){"use strict";function n(e,t){for(var n,r=[],i=0;i "+t+" tr",a);i(n,function(n,o){o+=e,i(M.select("> td, > th",n),function(e,n){var i,a,s,l;if(A[o])for(;A[o][n];)n++;for(s=r(e,"rowspan"),l=r(e,"colspan"),a=o;o+s>a;a++)for(A[a]||(A[a]=[]),i=n;n+l>i;i++)A[a][i]={part:t,real:a==o&&i==n,elm:e,rowspan:s,colspan:l}})}),e+=n.length})}function l(e,t){return e=e.cloneNode(t),e.removeAttribute("id"),e}function c(e,t){var n;return n=A[t],n?n[e]:void 0}function d(e,t,n){e&&(n=parseInt(n,10),1===n?e.removeAttribute(t,1):e.setAttribute(t,n,1))}function u(e){return e&&(M.hasClass(e.elm,"mce-item-selected")||e==D)}function f(){var e=[];return i(a.rows,function(t){i(t.cells,function(n){return M.hasClass(n,"mce-item-selected")||D&&n==D.elm?(e.push(t),!1):void 0})}),e}function p(){var e=M.createRng();e.setStartAfter(a),e.setEndAfter(a),L.setRng(e),M.remove(a)}function m(t){var r,a={};return o.settings.table_clone_elements!==!1&&(a=e.makeMap((o.settings.table_clone_elements||"strong em b i span font h1 h2 h3 h4 h5 h6 p div").toUpperCase(),/[ ,]/)),e.walk(t,function(e){var o;return 3==e.nodeType?(i(M.getParents(e.parentNode,null,t).reverse(),function(e){a[e.nodeName]&&(e=l(e,!1),r?o&&o.appendChild(e):r=o=e,o=e)}),o&&(o.innerHTML=n.ie?" ":'
    '),!1):void 0},"childNodes"),t=l(t,!1),d(t,"rowSpan",1),d(t,"colSpan",1),r?t.appendChild(r):n.ie||(t.innerHTML='
    '),t}function h(){var e=M.createRng(),t;return i(M.select("tr",a),function(e){0===e.cells.length&&M.remove(e)}),0===M.select("tr",a).length?(e.setStartBefore(a),e.setEndBefore(a),L.setRng(e),void M.remove(a)):(i(M.select("thead,tbody,tfoot",a),function(e){0===e.rows.length&&M.remove(e)}),s(),void(B&&(t=A[Math.min(A.length-1,B.y)],t&&(L.select(t[Math.min(t.length-1,B.x)].elm,!0),L.collapse(!0)))))}function g(e,t,n,r){var i,o,a,s,l;for(i=A[t][e].elm.parentNode,a=1;n>=a;a++)if(i=M.getNext(i,"tr")){for(o=e;o>=0;o--)if(l=A[t+a][o].elm,l.parentNode==i){for(s=1;r>=s;s++)M.insertAfter(m(l),l);break}if(-1==o)for(s=1;r>=s;s++)i.insertBefore(m(i.cells[0]),i.cells[0])}}function v(){i(A,function(e,t){i(e,function(e,n){var i,o,a;if(u(e)&&(e=e.elm,i=r(e,"colspan"),o=r(e,"rowspan"),i>1||o>1)){for(d(e,"rowSpan",1),d(e,"colSpan",1),a=0;i-1>a;a++)M.insertAfter(m(e),e);g(n,t,o-1,i)}})})}function y(t,n,r){var o,a,l,f,p,m,g,y,b,C,x;if(t?(o=k(t),a=o.x,l=o.y,f=a+(n-1),p=l+(r-1)):(B=P=null,i(A,function(e,t){i(e,function(e,n){u(e)&&(B||(B={x:n,y:t}),P={x:n,y:t})})}),B&&(a=B.x,l=B.y,f=P.x,p=P.y)),y=c(a,l),b=c(f,p),y&&b&&y.part==b.part){for(v(),s(),y=c(a,l).elm,d(y,"colSpan",f-a+1),d(y,"rowSpan",p-l+1),g=l;p>=g;g++)for(m=a;f>=m;m++)A[g]&&A[g][m]&&(t=A[g][m].elm,t!=y&&(C=e.grep(t.childNodes),i(C,function(e){y.appendChild(e)}),C.length&&(C=e.grep(y.childNodes),x=0,i(C,function(e){"BR"==e.nodeName&&M.getAttrib(e,"data-mce-bogus")&&x++0&&A[n-1][s]&&(h=A[n-1][s].elm,g=r(h,"rowSpan"),g>1)){d(h,"rowSpan",g+1);continue}}else if(g=r(o,"rowspan"),g>1){d(o,"rowSpan",g+1);continue}p=m(o),d(p,"colSpan",o.colSpan),f.appendChild(p),a=o}f.hasChildNodes()&&(e?c.parentNode.insertBefore(f,c):M.insertAfter(f,c))}}function C(e){var t,n;i(A,function(n){return i(n,function(n,r){return u(n)&&(t=r,e)?!1:void 0}),e?!t:void 0}),i(A,function(i,o){var a,s,l;i[t]&&(a=i[t].elm,a!=n&&(l=r(a,"colspan"),s=r(a,"rowspan"),1==l?e?(a.parentNode.insertBefore(m(a),a),g(t,o,s-1,l)):(M.insertAfter(m(a),a),g(t,o,s-1,l)):d(a,"colSpan",a.colSpan+1),n=a))})}function x(){var t=[];i(A,function(n){i(n,function(n,o){u(n)&&-1===e.inArray(t,o)&&(i(A,function(e){var t=e[o].elm,n;n=r(t,"colSpan"),n>1?d(t,"colSpan",n-1):M.remove(t)}),t.push(o))})}),h()}function w(){function e(e){var t,n,o;t=M.getNext(e,"tr"),i(e.cells,function(e){var t=r(e,"rowSpan");t>1&&(d(e,"rowSpan",t-1),n=k(e),g(n.x,n.y,1,1))}),n=k(e.cells[0]),i(A[n.y],function(e){var t;e=e.elm,e!=o&&(t=r(e,"rowSpan"),1>=t?M.remove(e):d(e,"rowSpan",t-1),o=e)})}var t;t=f(),i(t.reverse(),function(t){e(t)}),h()}function _(){var e=f();return M.remove(e),h(),e}function N(){var e=f();return i(e,function(t,n){e[n]=l(t,!0)}),e}function E(e,t){var n=f(),r=n[t?0:n.length-1],o=r.cells.length;e&&(i(A,function(e){var t;return o=0,i(e,function(e){e.real&&(o+=e.colspan),e.elm.parentNode==r&&(t=1)}),t?!1:void 0}),t||e.reverse(),i(e,function(e){var n,i=e.cells.length,a;for(n=0;i>n;n++)a=e.cells[n],d(a,"colSpan",1),d(a,"rowSpan",1);for(n=i;o>n;n++)e.appendChild(m(e.cells[i-1]));for(n=o;i>n;n++)M.remove(e.cells[n]);t?r.parentNode.insertBefore(e,r):M.insertAfter(e,r)}),M.removeClass(M.select("td.mce-item-selected,th.mce-item-selected"),"mce-item-selected"))}function k(e){var t;return i(A,function(n,r){return i(n,function(n,i){return n.elm==e?(t={x:i,y:r},!1):void 0}),!t}),t}function S(e){B=k(e)}function T(){var e,t;return e=t=0,i(A,function(n,r){i(n,function(n,i){var o,a;u(n)&&(n=A[r][i],i>e&&(e=i),r>t&&(t=r),n.real&&(o=n.colspan-1,a=n.rowspan-1,o&&i+o>e&&(e=i+o),a&&r+a>t&&(t=r+a)))})}),{x:e,y:t}}function R(e){var t,n,r,i,o,a,s,l,c,d;if(P=k(e),B&&P){for(t=Math.min(B.x,P.x),n=Math.min(B.y,P.y),r=Math.max(B.x,P.x),i=Math.max(B.y,P.y),o=r,a=i,d=n;a>=d;d++)e=A[d][t],e.real||t-(e.colspan-1)=c;c++)e=A[n][c],e.real||n-(e.rowspan-1)=d;d++)for(c=t;r>=c;c++)e=A[d][c],e.real&&(s=e.colspan-1,l=e.rowspan-1,s&&c+s>o&&(o=c+s),l&&d+l>a&&(a=d+l));for(M.removeClass(M.select("td.mce-item-selected,th.mce-item-selected"),"mce-item-selected"),d=n;a>=d;d++)for(c=t;o>=c;c++)A[d][c]&&M.addClass(A[d][c].elm,"mce-item-selected")}}var A,B,P,D,L=o.selection,M=L.dom;a=a||M.getParent(L.getStart(),"table"),s(),D=M.getParent(L.getStart(),"th,td"),D&&(B=k(D),P=T(),D=c(B.x,B.y)),e.extend(this,{deleteTable:p,split:v,merge:y,insertRow:b,insertCol:C,deleteCols:x,deleteRows:w,cutRows:_,copyRows:N,pasteRows:E,getPos:k,setStartCell:S,setEndCell:R})}}),r(u,[f,d,c],function(e,t,n){function r(e,t){return parseInt(e.getAttribute(t)||1,10)}var i=n.each;return function(n){function o(){function t(t){function o(e,r){var i=e?"previousSibling":"nextSibling",o=n.dom.getParent(r,"tr"),s=o[i];if(s)return g(n,r,s,e),t.preventDefault(),!0;var d=n.dom.getParent(o,"table"),u=o.parentNode,f=u.nodeName.toLowerCase();if("tbody"===f||f===(e?"tfoot":"thead")){var p=a(e,d,u,"tbody");if(null!==p)return l(e,p,r)}return c(e,o,i,d)}function a(e,t,r,i){var o=n.dom.select(">"+i,t),a=o.indexOf(r);if(e&&0===a||!e&&a===o.length-1)return s(e,t);if(-1===a){var l="thead"===r.tagName.toLowerCase()?0:o.length-1;return o[l]}return o[a+(e?-1:1)]}function s(e,t){var r=e?"thead":"tfoot",i=n.dom.select(">"+r,t);return 0!==i.length?i[0]:null}function l(e,r,i){var o=d(r,e);return o&&g(n,i,o,e),t.preventDefault(),!0}function c(e,r,i,a){var s=a[i];if(s)return u(s),!0;var l=n.dom.getParent(a,"td,th");if(l)return o(e,l,t);var c=d(r,!e);return u(c),t.preventDefault(),!1}function d(e,t){var r=e&&e[t?"lastChild":"firstChild"];return r&&"BR"===r.nodeName?n.dom.getParent(r,"td,th"):r}function u(e){n.selection.setCursorLocation(e,0)}function f(){return b==e.UP||b==e.DOWN}function p(e){var t=e.selection.getNode(),n=e.dom.getParent(t,"tr");return null!==n}function m(e){for(var t=0,n=e;n.previousSibling;)n=n.previousSibling,t+=r(n,"colspan");return t}function h(e,t){var n=0,o=0;return i(e.children,function(e,i){return n+=r(e,"colspan"),o=i,n>t?!1:void 0}),o}function g(e,t,r,i){var o=m(n.dom.getParent(t,"td,th")),a=h(r,o),s=r.childNodes[a],l=d(s,i);u(l||s)}function v(e){var t=n.selection.getNode(),r=n.dom.getParent(t,"td,th"),i=n.dom.getParent(e,"td,th");return r&&r!==i&&y(r,i)}function y(e,t){return n.dom.getParent(e,"TABLE")===n.dom.getParent(t,"TABLE")}var b=t.keyCode;if(f()&&p(n)){var C=n.selection.getNode();setTimeout(function(){v(C)&&o(!t.shiftKey&&b===e.UP,C,t)},0)}}n.on("KeyDown",function(e){t(e)})}function a(){function e(e,t){var n=t.ownerDocument,r=n.createRange(),i;return r.setStartBefore(t),r.setEnd(e.endContainer,e.endOffset),i=n.createElement("body"),i.appendChild(r.cloneContents()),0===i.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi,"-").replace(/<[^>]+>/g,"").length}n.on("KeyDown",function(t){var r,i,o=n.dom;(37==t.keyCode||38==t.keyCode)&&(r=n.selection.getRng(),i=o.getParent(r.startContainer,"table"),i&&n.getBody().firstChild==i&&e(r,i)&&(r=o.createRng(),r.setStartBefore(i),r.setEndBefore(i),n.selection.setRng(r),t.preventDefault()))})}function s(){n.on("KeyDown SetContent VisualAid",function(){var e;for(e=n.getBody().lastChild;e;e=e.previousSibling)if(3==e.nodeType){if(e.nodeValue.length>0)break}else if(1==e.nodeType&&!e.getAttribute("data-mce-bogus"))break;e&&"TABLE"==e.nodeName&&(n.settings.forced_root_block?n.dom.add(n.getBody(),n.settings.forced_root_block,n.settings.forced_root_block_attrs,t.ie&&t.ie<11?" ":'
    '):n.dom.add(n.getBody(),"br",{"data-mce-bogus":"1"}))}),n.on("PreProcess",function(e){var t=e.node.lastChild;t&&("BR"==t.nodeName||1==t.childNodes.length&&("BR"==t.firstChild.nodeName||"\xa0"==t.firstChild.nodeValue))&&t.previousSibling&&"TABLE"==t.previousSibling.nodeName&&n.dom.remove(t)})}function l(){function e(e,t,n,r){var i=3,o=e.dom.getParent(t.startContainer,"TABLE"),a,s,l;return o&&(a=o.parentNode),s=t.startContainer.nodeType==i&&0===t.startOffset&&0===t.endOffset&&r&&("TR"==n.nodeName||n==a),l=("TD"==n.nodeName||"TH"==n.nodeName)&&!r,s||l}function t(){var t=n.selection.getRng(),r=n.selection.getNode(),i=n.dom.getParent(t.startContainer,"TD,TH");if(e(n,t,r,i)){i||(i=r);for(var o=i.lastChild;o.lastChild;)o=o.lastChild;t.setEnd(o,o.nodeValue.length),n.selection.setRng(t)}}n.on("KeyDown",function(){t()}),n.on("MouseDown",function(e){2!=e.button&&t()})}function c(){n.on("keydown",function(t){if((t.keyCode==e.DELETE||t.keyCode==e.BACKSPACE)&&!t.isDefaultPrevented()){var r=n.dom.getParent(n.selection.getStart(),"table");if(r){for(var i=n.dom.select("td,th",r),o=i.length;o--;)if(!n.dom.hasClass(i[o],"mce-item-selected"))return;t.preventDefault(),n.execCommand("mceTableDelete")}}})}c(),t.webkit&&(o(),l()),t.gecko&&(a(),s()),t.ie>10&&(a(),s())}}),r(p,[l,m,c],function(e,t,n){return function(r){function i(){r.getBody().style.webkitUserSelect="",d&&(r.dom.removeClass(r.dom.select("td.mce-item-selected,th.mce-item-selected"),"mce-item-selected"),d=!1)}function o(t){var n,i,o=t.target;if(l&&(s||o!=l)&&("TD"==o.nodeName||"TH"==o.nodeName)){i=a.getParent(o,"table"),i==c&&(s||(s=new e(r,i),s.setStartCell(l),r.getBody().style.webkitUserSelect="none"),s.setEndCell(o),d=!0),n=r.selection.getSel();try{n.removeAllRanges?n.removeAllRanges():n.empty()}catch(u){}t.preventDefault()}}var a=r.dom,s,l,c,d=!0;return r.on("MouseDown",function(e){2!=e.button&&(i(),l=a.getParent(e.target,"td,th"),c=a.getParent(l,"table"))}),r.on("mouseover",o),r.on("remove",function(){a.unbind(r.getDoc(),"mouseover",o)}),r.on("MouseUp",function(){function e(e,r){var o=new t(e,e);do{if(3==e.nodeType&&0!==n.trim(e.nodeValue).length)return void(r?i.setStart(e,0):i.setEnd(e,e.nodeValue.length));if("BR"==e.nodeName)return void(r?i.setStartBefore(e):i.setEndBefore(e))}while(e=r?o.next():o.prev())}var i,o=r.selection,d,u,f,p,m;if(l){if(s&&(r.getBody().style.webkitUserSelect=""),d=a.select("td.mce-item-selected,th.mce-item-selected"),d.length>0){i=a.createRng(),f=d[0],m=d[d.length-1],i.setStartBefore(f),i.setEndAfter(f),e(f,1),u=new t(f,a.getParent(d[0],"table"));do if("TD"==f.nodeName||"TH"==f.nodeName){if(!a.hasClass(f,"mce-item-selected"))break;p=f}while(f=u.next());e(p),o.setRng(i)}r.nodeChanged(),l=s=c=null}}),r.on("KeyUp",function(){i()}),{clear:i}}}),r(h,[l,u,p,c,m,d,g],function(e,t,n,r,i,o,a){function s(r){function i(e){return e?e.replace(/px$/,""):""}function a(e){return/^[0-9]+$/.test(e)&&(e+="px"),e}function s(e){l("left center right".split(" "),function(t){r.formatter.remove("align"+t,{},e)})}function c(){var e=r.dom,t,n;t=e.getParent(r.selection.getStart(),"table"),n={width:i(e.getStyle(t,"width")||e.getAttrib(t,"width")),height:i(e.getStyle(t,"height")||e.getAttrib(t,"height")),cellspacing:e.getAttrib(t,"cellspacing"),cellpadding:e.getAttrib(t,"cellpadding"),border:e.getAttrib(t,"border"),caption:!!e.select("caption",t)[0]},l("left center right".split(" "),function(e){r.formatter.matchNode(t,"align"+e)&&(n.align=e)}),r.windowManager.open({title:"Table properties",items:{type:"form",layout:"grid",columns:2,data:n,defaults:{type:"textbox",maxWidth:50},items:[{label:"Width",name:"width"},{label:"Height",name:"height"},{label:"Cell spacing",name:"cellspacing"},{label:"Cell padding",name:"cellpadding"},{label:"Border",name:"border"},{label:"Caption",name:"caption",type:"checkbox"},{label:"Alignment",minWidth:90,name:"align",type:"listbox",text:"None",maxWidth:null,values:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]}]},onsubmit:function(){var n=this.toJSON(),i;r.undoManager.transact(function(){r.dom.setAttribs(t,{cellspacing:n.cellspacing,cellpadding:n.cellpadding,border:n.border}),r.dom.setStyles(t,{width:a(n.width),height:a(n.height)}),i=e.select("caption",t)[0],i&&!n.caption&&e.remove(i),!i&&n.caption&&(i=e.create("caption"),i.innerHTML=o.ie?"\xa0":'
    ',t.insertBefore(i,t.firstChild)),s(t),n.align&&r.formatter.apply("align"+n.align,{},t),r.focus(),r.addVisual()})}})}function d(e,t){r.windowManager.open({title:"Merge cells",body:[{label:"Cols",name:"cols",type:"textbox",size:10},{label:"Rows",name:"rows",type:"textbox",size:10}],onsubmit:function(){var n=this.toJSON();r.undoManager.transact(function(){e.merge(t,n.cols,n.rows)})}})}function u(){var e=r.dom,t,n,o=[];o=r.dom.select("td.mce-item-selected,th.mce-item-selected"),t=r.dom.getParent(r.selection.getStart(),"td,th"),!o.length&&t&&o.push(t),t=t||o[0],t&&(n={width:i(e.getStyle(t,"width")||e.getAttrib(t,"width")),height:i(e.getStyle(t,"height")||e.getAttrib(t,"height")),scope:e.getAttrib(t,"scope")},n.type=t.nodeName.toLowerCase(),l("left center right".split(" "),function(e){r.formatter.matchNode(t,"align"+e)&&(n.align=e)}),r.windowManager.open({title:"Cell properties",items:{type:"form",data:n,layout:"grid",columns:2,defaults:{type:"textbox",maxWidth:50},items:[{label:"Width",name:"width"},{label:"Height",name:"height"},{label:"Cell type",name:"type",type:"listbox",text:"None",minWidth:90,maxWidth:null,values:[{text:"Cell",value:"td"},{text:"Header cell",value:"th"}]},{label:"Scope",name:"scope",type:"listbox",text:"None",minWidth:90,maxWidth:null,values:[{text:"None",value:""},{text:"Row",value:"row"},{text:"Column",value:"col"},{text:"Row group",value:"rowgroup"},{text:"Column group",value:"colgroup"}]},{label:"Alignment",name:"align",type:"listbox",text:"None",minWidth:90,maxWidth:null,values:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]}]},onsubmit:function(){var t=this.toJSON();r.undoManager.transact(function(){l(o,function(n){r.dom.setAttrib(n,"scope",t.scope),r.dom.setStyles(n,{width:a(t.width),height:a(t.height)}),t.type&&n.nodeName.toLowerCase()!=t.type&&(n=e.rename(n,t.type)),s(n),t.align&&r.formatter.apply("align"+t.align,{},n)}),r.focus()})}}))}function f(){var e=r.dom,t,n,o,c,d=[];t=r.dom.getParent(r.selection.getStart(),"table"),n=r.dom.getParent(r.selection.getStart(),"td,th"),l(t.rows,function(t){l(t.cells,function(r){return e.hasClass(r,"mce-item-selected")||r==n?(d.push(t),!1):void 0})}),o=d[0],o&&(c={height:i(e.getStyle(o,"height")||e.getAttrib(o,"height")),scope:e.getAttrib(o,"scope")},c.type=o.parentNode.nodeName.toLowerCase(),l("left center right".split(" "),function(e){r.formatter.matchNode(o,"align"+e)&&(c.align=e)}),r.windowManager.open({title:"Row properties",items:{type:"form",data:c,columns:2,defaults:{type:"textbox"},items:[{type:"listbox",name:"type",label:"Row type",text:"None",maxWidth:null,values:[{text:"Header",value:"thead"},{text:"Body",value:"tbody"},{text:"Footer",value:"tfoot"}]},{type:"listbox",name:"align",label:"Alignment",text:"None",maxWidth:null,values:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]},{label:"Height",name:"height"}]},onsubmit:function(){var t=this.toJSON(),n,i,o;r.undoManager.transact(function(){var c=t.type;l(d,function(l){r.dom.setAttrib(l,"scope",t.scope),r.dom.setStyles(l,{height:a(t.height)}),c!=l.parentNode.nodeName.toLowerCase()&&(n=e.getParent(l,"table"),i=l.parentNode,o=e.select(c,n)[0],o||(o=e.create(c),n.firstChild?n.insertBefore(o,n.firstChild):n.appendChild(o)),o.appendChild(l),i.hasChildNodes()||e.remove(i)),s(l),t.align&&r.formatter.apply("align"+t.align,{},l)}),r.focus()})}}))}function p(e){return function(){r.execCommand(e)}}function m(e,t){var n,i,a;for(a="",n=0;t>n;n++){for(a+="",i=0;e>i;i++)a+="";a+=""}a+="
    "+(o.ie?" ":"
    ")+"
    ",r.insertContent(a)}function h(e,t){function n(){e.disabled(!r.dom.getParent(r.selection.getStart(),t)),r.selection.selectorChanged(t,function(t){e.disabled(!t)})}r.initialized?n():r.on("init",n)}function g(){h(this,"table")}function v(){h(this,"td,th")}function y(){var e="";e='';for(var t=0;10>t;t++){e+="";for(var n=0;10>n;n++)e+='";e+=""}return e+="
    ",e+=''}function b(e,t,n){var i=n.getEl().getElementsByTagName("table")[0],o=n.parent().rel,a,s,l,c;if(n.isRtl()||"tl-tr"==o){for(s=9;s>=0;s--)for(a=0;10>a;a++)c=i.rows[s].childNodes[a].firstChild,r.dom.toggleClass(c,"mce-active",a>=e&&t>=s),a>=e&&t>=s&&(l=c);e=9-e,i.nextSibling.innerHTML=e+" x "+(t+1)}else{for(s=0;10>s;s++)for(a=0;10>a;a++)c=i.rows[s].childNodes[a].firstChild,r.dom.toggleClass(c,"mce-active",e>=a&&t>=s),e>=a&&t>=s&&(l=c);i.nextSibling.innerHTML=e+1+" x "+(t+1)}return l.parentNode}var C,x,w=this;r.addMenuItem("inserttable",{text:"Insert table",icon:"table",context:"table",onhide:function(){var e=this.menu.items()[0].getEl().getElementsByTagName("a");r.dom.removeClass(e,"mce-active"),r.dom.addClass(e[0],"mce-active")},menu:[{type:"container",html:y(),onPostRender:function(){this.lastX=this.lastY=0},onmousemove:function(e){var t=e.target,n,r;"A"==t.nodeName&&(n=parseInt(t.getAttribute("data-mce-x"),10),r=parseInt(t.getAttribute("data-mce-y"),10),(n!==this.lastX||r!==this.lastY)&&(b(n,r,e.control),this.lastX=n,this.lastY=r))},onkeydown:function(e){var t=this.lastX,n=this.lastY,r;switch(e.keyCode){case 37:t>0&&(t--,r=!0);break;case 39:r=!0,9>t&&t++;break;case 38:r=!0,n>0&&n--;break;case 40:r=!0,9>n&&n++}r&&(e.preventDefault(),e.stopPropagation(),b(t,n,e.control).focus(),this.lastX=t,this.lastY=n)},onclick:function(e){"A"==e.target.nodeName&&(e.preventDefault(),e.stopPropagation(),this.parent().cancel(),m(this.lastX+1,this.lastY+1))}}]}),r.addMenuItem("tableprops",{text:"Table properties",context:"table",onPostRender:g,onclick:c}),r.addMenuItem("deletetable",{text:"Delete table",context:"table",onPostRender:g,cmd:"mceTableDelete"}),r.addMenuItem("cell",{separator:"before",text:"Cell",context:"table",menu:[{text:"Cell properties",onclick:p("mceTableCellProps"),onPostRender:v},{text:"Merge cells",onclick:p("mceTableMergeCells"),onPostRender:v},{text:"Split cell",onclick:p("mceTableSplitCells"),onPostRender:v}]}),r.addMenuItem("row",{text:"Row",context:"table",menu:[{text:"Insert row before",onclick:p("mceTableInsertRowBefore"),onPostRender:v},{text:"Insert row after",onclick:p("mceTableInsertRowAfter"),onPostRender:v},{text:"Delete row",onclick:p("mceTableDeleteRow"),onPostRender:v},{text:"Row properties",onclick:p("mceTableRowProps"),onPostRender:v},{text:"-"},{text:"Cut row",onclick:p("mceTableCutRow"),onPostRender:v},{text:"Copy row",onclick:p("mceTableCopyRow"),onPostRender:v},{text:"Paste row before",onclick:p("mceTablePasteRowBefore"),onPostRender:v},{text:"Paste row after",onclick:p("mceTablePasteRowAfter"),onPostRender:v}]}),r.addMenuItem("column",{text:"Column",context:"table",menu:[{text:"Insert column before",onclick:p("mceTableInsertColBefore"),onPostRender:v},{text:"Insert column after",onclick:p("mceTableInsertColAfter"),onPostRender:v},{text:"Delete column",onclick:p("mceTableDeleteCol"),onPostRender:v}]});var _=[];l("inserttable tableprops deletetable | cell row column".split(" "),function(e){_.push("|"==e?{text:"-"}:r.menuItems[e])}),r.addButton("table",{type:"menubutton",title:"Table",menu:_}),o.isIE||r.on("click",function(e){e=e.target,"TABLE"===e.nodeName&&(r.selection.select(e),r.nodeChanged())}),w.quirks=new t(r),r.on("Init",function(){C=r.windowManager,w.cellSelection=new n(r)}),l({mceTableSplitCells:function(e){e.split()},mceTableMergeCells:function(e){var t,n,i;i=r.dom.getParent(r.selection.getStart(),"th,td"),i&&(t=i.rowSpan,n=i.colSpan),r.dom.select("td.mce-item-selected,th.mce-item-selected").length?e.merge():d(e,i)},mceTableInsertRowBefore:function(e){e.insertRow(!0)},mceTableInsertRowAfter:function(e){e.insertRow()},mceTableInsertColBefore:function(e){e.insertCol(!0)},mceTableInsertColAfter:function(e){e.insertCol()},mceTableDeleteCol:function(e){e.deleteCols()},mceTableDeleteRow:function(e){e.deleteRows()},mceTableCutRow:function(e){x=e.cutRows()},mceTableCopyRow:function(e){x=e.copyRows()},mceTablePasteRowBefore:function(e){e.pasteRows(x,!0)},mceTablePasteRowAfter:function(e){e.pasteRows(x)},mceTableDelete:function(e){e.deleteTable()}},function(t,n){r.addCommand(n,function(){var n=new e(r);n&&(t(n),r.execCommand("mceRepaint"),w.cellSelection.clear())})}),l({mceInsertTable:function(){c()},mceTableRowProps:f,mceTableCellProps:u},function(e,t){r.addCommand(t,function(t,n){e(n)})})}var l=r.each;a.add("table",s)}),a([l,u,p,h])}(this); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/plugins/textcolor/plugin.js b/common/static/js/vendor/tinymce/js/tinymce/plugins/textcolor/plugin.js new file mode 100755 index 0000000000..a3a01e790b --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/plugins/textcolor/plugin.js @@ -0,0 +1,164 @@ +/** + * plugin.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*global tinymce:true */ +/*eslint consistent-this:0 */ + +tinymce.PluginManager.add('textcolor', function(editor) { + function mapColors() { + var i, colors = [], colorMap; + + colorMap = editor.settings.textcolor_map || [ + "000000", "Black", + "993300", "Burnt orange", + "333300", "Dark olive", + "003300", "Dark green", + "003366", "Dark azure", + "000080", "Navy Blue", + "333399", "Indigo", + "333333", "Very dark gray", + "800000", "Maroon", + "FF6600", "Orange", + "808000", "Olive", + "008000", "Green", + "008080", "Teal", + "0000FF", "Blue", + "666699", "Grayish blue", + "808080", "Gray", + "FF0000", "Red", + "FF9900", "Amber", + "99CC00", "Yellow green", + "339966", "Sea green", + "33CCCC", "Turquoise", + "3366FF", "Royal blue", + "800080", "Purple", + "999999", "Medium gray", + "FF00FF", "Magenta", + "FFCC00", "Gold", + "FFFF00", "Yellow", + "00FF00", "Lime", + "00FFFF", "Aqua", + "00CCFF", "Sky blue", + "993366", "Brown", + "C0C0C0", "Silver", + "FF99CC", "Pink", + "FFCC99", "Peach", + "FFFF99", "Light yellow", + "CCFFCC", "Pale green", + "CCFFFF", "Pale cyan", + "99CCFF", "Light sky blue", + "CC99FF", "Plum", + "FFFFFF", "White" + ]; + + for (i = 0; i < colorMap.length; i += 2) { + colors.push({ + text: colorMap[i + 1], + color: colorMap[i] + }); + } + + return colors; + } + + function renderColorPicker() { + var ctrl = this, colors, color, html, last, rows, cols, x, y, i; + + colors = mapColors(); + + html = ''; + last = colors.length - 1; + rows = editor.settings.textcolor_rows || 5; + cols = editor.settings.textcolor_cols || 8; + + for (y = 0; y < rows; y++) { + html += ''; + + for (x = 0; x < cols; x++) { + i = y * cols + x; + + if (i > last) { + html += ''; + } else { + color = colors[i]; + html += ( + '' + ); + } + } + + html += ''; + } + + html += '
    ' + + '
    ' + + '
    ' + + '
    '; + + return html; + } + + function onPanelClick(e) { + var buttonCtrl = this.parent(), value; + + if ((value = e.target.getAttribute('data-mce-color'))) { + if (this.lastId) { + document.getElementById(this.lastId).setAttribute('aria-selected', false); + } + + e.target.setAttribute('aria-selected', true); + this.lastId = e.target.id; + + buttonCtrl.hidePanel(); + value = '#' + value; + buttonCtrl.color(value); + editor.execCommand(buttonCtrl.settings.selectcmd, false, value); + } + } + + function onButtonClick() { + var self = this; + + if (self._color) { + editor.execCommand(self.settings.selectcmd, false, self._color); + } + } + + editor.addButton('forecolor', { + type: 'colorbutton', + tooltip: 'Text color', + selectcmd: 'ForeColor', + panel: { + role: 'application', + ariaRemember: true, + html: renderColorPicker, + onclick: onPanelClick + }, + onclick: onButtonClick + }); + + editor.addButton('backcolor', { + type: 'colorbutton', + tooltip: 'Background color', + selectcmd: 'HiliteColor', + panel: { + role: 'application', + ariaRemember: true, + html: renderColorPicker, + onclick: onPanelClick + }, + onclick: onButtonClick + }); +}); diff --git a/common/static/js/vendor/tinymce/js/tinymce/plugins/textcolor/plugin.min.js b/common/static/js/vendor/tinymce/js/tinymce/plugins/textcolor/plugin.min.js new file mode 100755 index 0000000000..8f49254def --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/plugins/textcolor/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("textcolor",function(e){function t(){var t,o,r=[];for(o=e.settings.textcolor_map||["000000","Black","993300","Burnt orange","333300","Dark olive","003300","Dark green","003366","Dark azure","000080","Navy Blue","333399","Indigo","333333","Very dark gray","800000","Maroon","FF6600","Orange","808000","Olive","008000","Green","008080","Teal","0000FF","Blue","666699","Grayish blue","808080","Gray","FF0000","Red","FF9900","Amber","99CC00","Yellow green","339966","Sea green","33CCCC","Turquoise","3366FF","Royal blue","800080","Purple","999999","Medium gray","FF00FF","Magenta","FFCC00","Gold","FFFF00","Yellow","00FF00","Lime","00FFFF","Aqua","00CCFF","Sky blue","993366","Brown","C0C0C0","Silver","FF99CC","Pink","FFCC99","Peach","FFFF99","Light yellow","CCFFCC","Pale green","CCFFFF","Pale cyan","99CCFF","Light sky blue","CC99FF","Plum","FFFFFF","White"],t=0;t',a=o.length-1,c=e.settings.textcolor_rows||5,i=e.settings.textcolor_cols||8,F=0;c>F;F++){for(l+="",n=0;i>n;n++)d=F*i+n,d>a?l+="":(r=o[d],l+='
    ');l+=""}return l+=""}function r(t){var o,r=this.parent();(o=t.target.getAttribute("data-mce-color"))&&(this.lastId&&document.getElementById(this.lastId).setAttribute("aria-selected",!1),t.target.setAttribute("aria-selected",!0),this.lastId=t.target.id,r.hidePanel(),o="#"+o,r.color(o),e.execCommand(r.settings.selectcmd,!1,o))}function l(){var t=this;t._color&&e.execCommand(t.settings.selectcmd,!1,t._color)}e.addButton("forecolor",{type:"colorbutton",tooltip:"Text color",selectcmd:"ForeColor",panel:{role:"application",ariaRemember:!0,html:o,onclick:r},onclick:l}),e.addButton("backcolor",{type:"colorbutton",tooltip:"Background color",selectcmd:"HiliteColor",panel:{role:"application",ariaRemember:!0,html:o,onclick:r},onclick:l})}); \ No newline at end of file diff --git a/common/static/js/vendor/tiny_mce/skins/studio-tmce4/content.inline.min.css b/common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/content.inline.min.css similarity index 100% rename from common/static/js/vendor/tiny_mce/skins/studio-tmce4/content.inline.min.css rename to common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/content.inline.min.css diff --git a/common/static/js/vendor/tiny_mce/skins/studio-tmce4/content.min.css b/common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/content.min.css similarity index 100% rename from common/static/js/vendor/tiny_mce/skins/studio-tmce4/content.min.css rename to common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/content.min.css diff --git a/common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon-small.eot b/common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/fonts/icomoon-small.eot similarity index 100% rename from common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon-small.eot rename to common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/fonts/icomoon-small.eot diff --git a/common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon-small.svg b/common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/fonts/icomoon-small.svg similarity index 100% rename from common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon-small.svg rename to common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/fonts/icomoon-small.svg diff --git a/common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon-small.ttf b/common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/fonts/icomoon-small.ttf similarity index 100% rename from common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon-small.ttf rename to common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/fonts/icomoon-small.ttf diff --git a/common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon-small.woff b/common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/fonts/icomoon-small.woff similarity index 100% rename from common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon-small.woff rename to common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/fonts/icomoon-small.woff diff --git a/common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon.eot b/common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/fonts/icomoon.eot similarity index 100% rename from common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon.eot rename to common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/fonts/icomoon.eot diff --git a/common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon.svg b/common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/fonts/icomoon.svg similarity index 100% rename from common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon.svg rename to common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/fonts/icomoon.svg diff --git a/common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon.ttf b/common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/fonts/icomoon.ttf similarity index 100% rename from common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon.ttf rename to common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/fonts/icomoon.ttf diff --git a/common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon.woff b/common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/fonts/icomoon.woff similarity index 100% rename from common/static/js/vendor/tiny_mce/skins/studio-tmce4/fonts/icomoon.woff rename to common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/fonts/icomoon.woff diff --git a/common/static/js/vendor/tiny_mce/skins/lightgray/fonts/readme.md b/common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/fonts/readme.md old mode 100644 new mode 100755 similarity index 100% rename from common/static/js/vendor/tiny_mce/skins/lightgray/fonts/readme.md rename to common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/fonts/readme.md diff --git a/common/static/js/vendor/tiny_mce/skins/lightgray/img/anchor.gif b/common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/img/anchor.gif old mode 100644 new mode 100755 similarity index 100% rename from common/static/js/vendor/tiny_mce/skins/lightgray/img/anchor.gif rename to common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/img/anchor.gif diff --git a/common/static/js/vendor/tiny_mce/skins/lightgray/img/loader.gif b/common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/img/loader.gif old mode 100644 new mode 100755 similarity index 100% rename from common/static/js/vendor/tiny_mce/skins/lightgray/img/loader.gif rename to common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/img/loader.gif diff --git a/common/static/js/vendor/tiny_mce/skins/lightgray/img/object.gif b/common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/img/object.gif old mode 100644 new mode 100755 similarity index 100% rename from common/static/js/vendor/tiny_mce/skins/lightgray/img/object.gif rename to common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/img/object.gif diff --git a/common/static/js/vendor/tiny_mce/skins/lightgray/img/trans.gif b/common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/img/trans.gif old mode 100644 new mode 100755 similarity index 100% rename from common/static/js/vendor/tiny_mce/skins/lightgray/img/trans.gif rename to common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/img/trans.gif diff --git a/common/static/js/vendor/tiny_mce/skins/studio-tmce4/img/wline.gif b/common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/img/wline.gif similarity index 100% rename from common/static/js/vendor/tiny_mce/skins/studio-tmce4/img/wline.gif rename to common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/img/wline.gif diff --git a/common/static/js/vendor/tiny_mce/skins/studio-tmce4/skin.ie7.min.css b/common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/skin.ie7.min.css similarity index 100% rename from common/static/js/vendor/tiny_mce/skins/studio-tmce4/skin.ie7.min.css rename to common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/skin.ie7.min.css diff --git a/common/static/js/vendor/tiny_mce/skins/studio-tmce4/skin.json b/common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/skin.json similarity index 100% rename from common/static/js/vendor/tiny_mce/skins/studio-tmce4/skin.json rename to common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/skin.json diff --git a/common/static/js/vendor/tiny_mce/skins/studio-tmce4/skin.min.css b/common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/skin.min.css similarity index 100% rename from common/static/js/vendor/tiny_mce/skins/studio-tmce4/skin.min.css rename to common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/skin.min.css diff --git a/common/static/js/vendor/tinymce/js/tinymce/themes/modern/theme.js b/common/static/js/vendor/tinymce/js/tinymce/themes/modern/theme.js new file mode 100755 index 0000000000..c5334f0259 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/themes/modern/theme.js @@ -0,0 +1,599 @@ +/** + * theme.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*global tinymce:true */ + +tinymce.ThemeManager.add('modern', function(editor) { + var self = this, settings = editor.settings, Factory = tinymce.ui.Factory, each = tinymce.each, DOM = tinymce.DOM; + + // Default menus + var defaultMenus = { + file: {title: 'File', items: 'newdocument'}, + edit: {title: 'Edit', items: 'undo redo | cut copy paste pastetext | selectall'}, + insert: {title: 'Insert', items: '|'}, + view: {title: 'View', items: 'visualaid |'}, + format: {title: 'Format', items: 'bold italic underline strikethrough superscript subscript | formats | removeformat'}, + table: {title: 'Table'}, + tools: {title: 'Tools'} + }; + + var defaultToolbar = "undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | " + + "bullist numlist outdent indent | link image"; + + /** + * Creates the toolbars from config and returns a toolbar array. + * + * @return {Array} Array with toolbars. + */ + function createToolbars() { + var toolbars = []; + + function addToolbar(items) { + var toolbarItems = [], buttonGroup; + + if (!items) { + return; + } + + each(items.split(/[ ,]/), function(item) { + var itemName; + + function bindSelectorChanged() { + var selection = editor.selection; + + if (itemName == "bullist") { + selection.selectorChanged('ul > li', function(state, args) { + var nodeName, i = args.parents.length; + + while (i--) { + nodeName = args.parents[i].nodeName; + if (nodeName == "OL" || nodeName == "UL") { + break; + } + } + + item.active(state && nodeName == "UL"); + }); + } + + if (itemName == "numlist") { + selection.selectorChanged('ol > li', function(state, args) { + var nodeName, i = args.parents.length; + + while (i--) { + nodeName = args.parents[i].nodeName; + if (nodeName == "OL" || nodeName == "UL") { + break; + } + } + + item.active(state && nodeName == "OL"); + }); + } + + if (item.settings.stateSelector) { + selection.selectorChanged(item.settings.stateSelector, function(state) { + item.active(state); + }, true); + } + + if (item.settings.disabledStateSelector) { + selection.selectorChanged(item.settings.disabledStateSelector, function(state) { + item.disabled(state); + }); + } + } + + if (item == "|") { + buttonGroup = null; + } else { + if (Factory.has(item)) { + item = {type: item}; + + if (settings.toolbar_items_size) { + item.size = settings.toolbar_items_size; + } + + toolbarItems.push(item); + buttonGroup = null; + } else { + if (!buttonGroup) { + buttonGroup = {type: 'buttongroup', items: []}; + toolbarItems.push(buttonGroup); + } + + if (editor.buttons[item]) { + // TODO: Move control creation to some UI class + itemName = item; + item = editor.buttons[itemName]; + + if (typeof(item) == "function") { + item = item(); + } + + item.type = item.type || 'button'; + + if (settings.toolbar_items_size) { + item.size = settings.toolbar_items_size; + } + + item = Factory.create(item); + buttonGroup.items.push(item); + + if (editor.initialized) { + bindSelectorChanged(); + } else { + editor.on('init', bindSelectorChanged); + } + } + } + } + }); + + toolbars.push({type: 'toolbar', layout: 'flow', items: toolbarItems}); + + return true; + } + + // Generate toolbar + for (var i = 1; i < 10; i++) { + if (!addToolbar(settings["toolbar" + i])) { + break; + } + } + + // Generate toolbar or default toolbar + if (!toolbars.length) { + addToolbar(settings.toolbar || defaultToolbar); + } + + return toolbars; + } + + /** + * Creates the menu buttons based on config. + * + * @return {Array} Menu buttons array. + */ + function createMenuButtons() { + var name, menuButtons = []; + + function createMenuItem(name) { + var menuItem; + + if (name == '|') { + return {text: '|'}; + } + + menuItem = editor.menuItems[name]; + + return menuItem; + } + + function createMenu(context) { + var menuButton, menu, menuItems, isUserDefined, removedMenuItems; + + removedMenuItems = tinymce.makeMap((settings.removed_menuitems || '').split(/[ ,]/)); + + // User defined menu + if (settings.menu) { + menu = settings.menu[context]; + isUserDefined = true; + } else { + menu = defaultMenus[context]; + } + + if (menu) { + menuButton = {text: menu.title}; + menuItems = []; + + // Default/user defined items + each((menu.items || '').split(/[ ,]/), function(item) { + var menuItem = createMenuItem(item); + + if (menuItem && !removedMenuItems[item]) { + menuItems.push(createMenuItem(item)); + } + }); + + // Added though context + if (!isUserDefined) { + each(editor.menuItems, function(menuItem) { + if (menuItem.context == context) { + if (menuItem.separator == 'before') { + menuItems.push({text: '|'}); + } + + if (menuItem.prependToContext) { + menuItems.unshift(menuItem); + } else { + menuItems.push(menuItem); + } + + if (menuItem.separator == 'after') { + menuItems.push({text: '|'}); + } + } + }); + } + + for (var i = 0; i < menuItems.length; i++) { + if (menuItems[i].text == '|') { + if (i === 0 || i == menuItems.length - 1) { + menuItems.splice(i, 1); + } + } + } + + menuButton.menu = menuItems; + + if (!menuButton.menu.length) { + return null; + } + } + + return menuButton; + } + + var defaultMenuBar = []; + if (settings.menu) { + for (name in settings.menu) { + defaultMenuBar.push(name); + } + } else { + for (name in defaultMenus) { + defaultMenuBar.push(name); + } + } + + var enabledMenuNames = typeof(settings.menubar) == "string" ? settings.menubar.split(/[ ,]/) : defaultMenuBar; + for (var i = 0; i < enabledMenuNames.length; i++) { + var menu = enabledMenuNames[i]; + menu = createMenu(menu); + + if (menu) { + menuButtons.push(menu); + } + } + + return menuButtons; + } + + /** + * Adds accessibility shortcut keys to panel. + * + * @param {tinymce.ui.Panel} panel Panel to add focus to. + */ + function addAccessibilityKeys(panel) { + function focus(type) { + var item = panel.find(type)[0]; + + if (item) { + item.focus(true); + } + } + + editor.shortcuts.add('Alt+F9', '', function() { + focus('menubar'); + }); + + editor.shortcuts.add('Alt+F10', '', function() { + focus('toolbar'); + }); + + editor.shortcuts.add('Alt+F11', '', function() { + focus('elementpath'); + }); + + panel.on('cancel', function() { + editor.focus(); + }); + } + + /** + * Resizes the editor to the specified width, height. + */ + function resizeTo(width, height) { + var containerElm, iframeElm, containerSize, iframeSize; + + function getSize(elm) { + return { + width: elm.clientWidth, + height: elm.clientHeight + }; + } + + containerElm = editor.getContainer(); + iframeElm = editor.getContentAreaContainer().firstChild; + containerSize = getSize(containerElm); + iframeSize = getSize(iframeElm); + + if (width !== null) { + width = Math.max(settings.min_width || 100, width); + width = Math.min(settings.max_width || 0xFFFF, width); + + DOM.css(containerElm, 'width', width + (containerSize.width - iframeSize.width)); + DOM.css(iframeElm, 'width', width); + } + + height = Math.max(settings.min_height || 100, height); + height = Math.min(settings.max_height || 0xFFFF, height); + DOM.css(iframeElm, 'height', height); + + editor.fire('ResizeEditor'); + } + + function resizeBy(dw, dh) { + var elm = editor.getContentAreaContainer(); + self.resizeTo(elm.clientWidth + dw, elm.clientHeight + dh); + } + + /** + * Renders the inline editor UI. + * + * @return {Object} Name/value object with theme data. + */ + function renderInlineUI(args) { + var panel, inlineToolbarContainer; + + if (settings.fixed_toolbar_container) { + inlineToolbarContainer = DOM.select(settings.fixed_toolbar_container)[0]; + } + + function reposition() { + if (panel && panel.moveRel && panel.visible() && !panel._fixed) { + // TODO: This is kind of ugly and doesn't handle multiple scrollable elements + var scrollContainer = editor.selection.getScrollContainer(), body = editor.getBody(); + var deltaX = 0, deltaY = 0; + + if (scrollContainer) { + var bodyPos = DOM.getPos(body), scrollContainerPos = DOM.getPos(scrollContainer); + + deltaX = Math.max(0, scrollContainerPos.x - bodyPos.x); + deltaY = Math.max(0, scrollContainerPos.y - bodyPos.y); + } + + panel.fixed(false).moveRel(body, editor.rtl ? ['tr-br', 'br-tr'] : ['tl-bl', 'bl-tl']).moveBy(deltaX, deltaY); + } + } + + function show() { + if (panel) { + panel.show(); + reposition(); + DOM.addClass(editor.getBody(), 'mce-edit-focus'); + } + } + + function hide() { + if (panel) { + panel.hide(); + DOM.removeClass(editor.getBody(), 'mce-edit-focus'); + } + } + + function render() { + if (panel) { + if (!panel.visible()) { + show(); + } + + return; + } + + // Render a plain panel inside the inlineToolbarContainer if it's defined + panel = self.panel = Factory.create({ + type: inlineToolbarContainer ? 'panel' : 'floatpanel', + role: 'application', + classes: 'tinymce tinymce-inline', + layout: 'flex', + direction: 'column', + align: 'stretch', + autohide: false, + autofix: true, + fixed: !!inlineToolbarContainer, + border: 1, + items: [ + settings.menubar === false ? null : {type: 'menubar', border: '0 0 1 0', items: createMenuButtons()}, + settings.toolbar === false ? null : { + type: 'panel', layout: 'stack', classes: "toolbar-grp", ariaRoot: true, ariaRemember: true, items: createToolbars() + } + ] + }); + + // Add statusbar + /*if (settings.statusbar !== false) { + panel.add({type: 'panel', classes: 'statusbar', layout: 'flow', border: '1 0 0 0', items: [ + {type: 'elementpath'} + ]}); + }*/ + + editor.fire('BeforeRenderUI'); + panel.renderTo(inlineToolbarContainer || document.body).reflow(); + + addAccessibilityKeys(panel); + show(); + + editor.on('nodeChange', reposition); + editor.on('activate', show); + editor.on('deactivate', hide); + + editor.nodeChanged(); + } + + settings.content_editable = true; + + editor.on('focus', function() { + // Render only when the CSS file has been loaded + if (args.skinUiCss) { + tinymce.DOM.styleSheetLoader.load(args.skinUiCss, render, render); + } else { + render(); + } + }); + + editor.on('blur', hide); + + // Remove the panel when the editor is removed + editor.on('remove', function() { + if (panel) { + panel.remove(); + panel = null; + } + }); + + // Preload skin css + if (args.skinUiCss) { + tinymce.DOM.styleSheetLoader.load(args.skinUiCss); + } + + return {}; + } + + /** + * Renders the iframe editor UI. + * + * @param {Object} args Details about target element etc. + * @return {Object} Name/value object with theme data. + */ + function renderIframeUI(args) { + var panel, resizeHandleCtrl, startSize; + + if (args.skinUiCss) { + tinymce.DOM.loadCSS(args.skinUiCss); + } + + // Basic UI layout + panel = self.panel = Factory.create({ + type: 'panel', + role: 'application', + classes: 'tinymce', + style: 'visibility: hidden', + layout: 'stack', + border: 1, + items: [ + settings.menubar === false ? null : {type: 'menubar', border: '0 0 1 0', items: createMenuButtons()}, + settings.toolbar === false ? null : { + type: 'panel', layout: 'stack', classes: "toolbar-grp", ariaRoot: true, ariaRemember: true, items: createToolbars() + }, + {type: 'panel', name: 'iframe', layout: 'stack', classes: 'edit-area', html: '', border: '1 0 0 0'} + ] + }); + + if (settings.resize !== false) { + resizeHandleCtrl = { + type: 'resizehandle', + direction: settings.resize, + + onResizeStart: function() { + var elm = editor.getContentAreaContainer().firstChild; + + startSize = { + width: elm.clientWidth, + height: elm.clientHeight + }; + }, + + onResize: function(e) { + if (settings.resize == 'both') { + resizeTo(startSize.width + e.deltaX, startSize.height + e.deltaY); + } else { + resizeTo(null, startSize.height + e.deltaY); + } + } + }; + } + + // Add statusbar if needed + if (settings.statusbar !== false) { + panel.add({type: 'panel', name: 'statusbar', classes: 'statusbar', layout: 'flow', border: '1 0 0 0', ariaRoot: true, items: [ + {type: 'elementpath'}, + resizeHandleCtrl + ]}); + } + + if (settings.readonly) { + panel.find('*').disabled(true); + } + + editor.fire('BeforeRenderUI'); + panel.renderBefore(args.targetNode).reflow(); + + if (settings.width) { + tinymce.DOM.setStyle(panel.getEl(), 'width', settings.width); + } + + // Remove the panel when the editor is removed + editor.on('remove', function() { + panel.remove(); + panel = null; + }); + + // Add accesibility shortkuts + addAccessibilityKeys(panel); + + return { + iframeContainer: panel.find('#iframe')[0].getEl(), + editorContainer: panel.getEl() + }; + } + + /** + * Renders the UI for the theme. This gets called by the editor. + * + * @param {Object} args Details about target element etc. + * @return {Object} Theme UI data items. + */ + self.renderUI = function(args) { + var skin = settings.skin !== false ? settings.skin || 'lightgray' : false; + + if (skin) { + var skinUrl = settings.skin_url; + + if (skinUrl) { + skinUrl = editor.documentBaseURI.toAbsolute(skinUrl); + } else { + skinUrl = tinymce.baseURL + '/skins/' + skin; + } + + // Load special skin for IE7 + // TODO: Remove this when we drop IE7 support + // EDX - Disable dynamic loading of CSS files in favor of hashed files from our Django pipeline +// if (tinymce.Env.documentMode <= 7) { +// args.skinUiCss = skinUrl + '/skin.ie7.min.css'; +// } else { +// args.skinUiCss = skinUrl + '/skin.min.css'; +// } + + // Load content.min.css or content.inline.min.css +// editor.contentCSS.push(skinUrl + '/content' + (editor.inline ? '.inline' : '') + '.min.css'); + } + + // Handle editor setProgressState change + editor.on('ProgressState', function(e) { + self.throbber = self.throbber || new tinymce.ui.Throbber(self.panel.getEl('body')); + + if (e.state) { + self.throbber.show(e.time); + } else { + self.throbber.hide(); + } + }); + + if (settings.inline) { + return renderInlineUI(args); + } + + return renderIframeUI(args); + }; + + self.resizeTo = resizeTo; + self.resizeBy = resizeBy; +}); diff --git a/common/static/js/vendor/tinymce/js/tinymce/themes/modern/theme.min.js b/common/static/js/vendor/tinymce/js/tinymce/themes/modern/theme.min.js new file mode 100755 index 0000000000..3997489bcf --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/themes/modern/theme.min.js @@ -0,0 +1 @@ +tinymce.ThemeManager.add("modern",function(e){function t(){function t(t){var n,o=[];if(t)return d(t.split(/[ ,]/),function(t){function i(){var i=e.selection;"bullist"==r&&i.selectorChanged("ul > li",function(e,i){for(var n,o=i.parents.length;o--&&(n=i.parents[o].nodeName,"OL"!=n&&"UL"!=n););t.active(e&&"UL"==n)}),"numlist"==r&&i.selectorChanged("ol > li",function(e,i){for(var n,o=i.parents.length;o--&&(n=i.parents[o].nodeName,"OL"!=n&&"UL"!=n););t.active(e&&"OL"==n)}),t.settings.stateSelector&&i.selectorChanged(t.settings.stateSelector,function(e){t.active(e)},!0),t.settings.disabledStateSelector&&i.selectorChanged(t.settings.disabledStateSelector,function(e){t.disabled(e)})}var r;"|"==t?n=null:c.has(t)?(t={type:t},u.toolbar_items_size&&(t.size=u.toolbar_items_size),o.push(t),n=null):(n||(n={type:"buttongroup",items:[]},o.push(n)),e.buttons[t]&&(r=t,t=e.buttons[r],"function"==typeof t&&(t=t()),t.type=t.type||"button",u.toolbar_items_size&&(t.size=u.toolbar_items_size),t=c.create(t),n.items.push(t),e.initialized?i():e.on("init",i)))}),i.push({type:"toolbar",layout:"flow",items:o}),!0}for(var i=[],n=1;10>n&&t(u["toolbar"+n]);n++);return i.length||t(u.toolbar||f),i}function i(){function t(t){var i;return"|"==t?{text:"|"}:i=e.menuItems[t]}function i(i){var n,o,r,a,s;if(s=tinymce.makeMap((u.removed_menuitems||"").split(/[ ,]/)),u.menu?(o=u.menu[i],a=!0):o=h[i],o){n={text:o.title},r=[],d((o.items||"").split(/[ ,]/),function(e){var i=t(e);i&&!s[e]&&r.push(t(e))}),a||d(e.menuItems,function(e){e.context==i&&("before"==e.separator&&r.push({text:"|"}),e.prependToContext?r.unshift(e):r.push(e),"after"==e.separator&&r.push({text:"|"}))});for(var l=0;l\n'; + moduleCount++; + } + + // Expose globally + exports.define = define; + exports.require = require; + + expose(["tinymce/dom/EventUtils","tinymce/dom/Sizzle","tinymce/dom/DomQuery","tinymce/html/Styles","tinymce/dom/TreeWalker","tinymce/util/Tools","tinymce/dom/Range","tinymce/html/Entities","tinymce/Env","tinymce/dom/StyleSheetLoader","tinymce/dom/DOMUtils","tinymce/dom/ScriptLoader","tinymce/AddOnManager","tinymce/html/Node","tinymce/html/Schema","tinymce/html/SaxParser","tinymce/html/DomParser","tinymce/html/Writer","tinymce/html/Serializer","tinymce/dom/Serializer","tinymce/dom/TridentSelection","tinymce/util/VK","tinymce/dom/ControlSelection","tinymce/dom/RangeUtils","tinymce/dom/Selection","tinymce/Formatter","tinymce/UndoManager","tinymce/EnterKey","tinymce/ForceBlocks","tinymce/EditorCommands","tinymce/util/URI","tinymce/util/Class","tinymce/ui/Selector","tinymce/ui/Collection","tinymce/ui/DomUtils","tinymce/ui/Control","tinymce/ui/Factory","tinymce/ui/KeyboardNavigation","tinymce/ui/Container","tinymce/ui/DragHelper","tinymce/ui/Scrollable","tinymce/ui/Panel","tinymce/ui/Movable","tinymce/ui/Resizable","tinymce/ui/FloatPanel","tinymce/ui/Window","tinymce/ui/MessageBox","tinymce/WindowManager","tinymce/util/Quirks","tinymce/util/Observable","tinymce/Shortcuts","tinymce/Editor","tinymce/util/I18n","tinymce/FocusManager","tinymce/EditorManager","tinymce/LegacyInput","tinymce/util/XHR","tinymce/util/JSON","tinymce/util/JSONRequest","tinymce/util/JSONP","tinymce/util/LocalStorage","tinymce/Compat","tinymce/ui/Layout","tinymce/ui/AbsoluteLayout","tinymce/ui/Tooltip","tinymce/ui/Widget","tinymce/ui/Button","tinymce/ui/ButtonGroup","tinymce/ui/Checkbox","tinymce/ui/PanelButton","tinymce/ui/ColorButton","tinymce/ui/ComboBox","tinymce/ui/Path","tinymce/ui/ElementPath","tinymce/ui/FormItem","tinymce/ui/Form","tinymce/ui/FieldSet","tinymce/ui/FilePicker","tinymce/ui/FitLayout","tinymce/ui/FlexLayout","tinymce/ui/FlowLayout","tinymce/ui/FormatControls","tinymce/ui/GridLayout","tinymce/ui/Iframe","tinymce/ui/Label","tinymce/ui/Toolbar","tinymce/ui/MenuBar","tinymce/ui/MenuButton","tinymce/ui/ListBox","tinymce/ui/MenuItem","tinymce/ui/Menu","tinymce/ui/Radio","tinymce/ui/ResizeHandle","tinymce/ui/Spacer","tinymce/ui/SplitButton","tinymce/ui/StackLayout","tinymce/ui/TabPanel","tinymce/ui/TextBox","tinymce/ui/Throbber"]); + + load('classes/dom/EventUtils.js'); + load('classes/dom/Sizzle.js'); + load('classes/dom/DomQuery.js'); + load('classes/html/Styles.js'); + load('classes/dom/TreeWalker.js'); + load('classes/util/Tools.js'); + load('classes/dom/Range.js'); + load('classes/html/Entities.js'); + load('classes/Env.js'); + load('classes/dom/StyleSheetLoader.js'); + load('classes/dom/DOMUtils.js'); + load('classes/dom/ScriptLoader.js'); + load('classes/AddOnManager.js'); + load('classes/html/Node.js'); + load('classes/html/Schema.js'); + load('classes/html/SaxParser.js'); + load('classes/html/DomParser.js'); + load('classes/html/Writer.js'); + load('classes/html/Serializer.js'); + load('classes/dom/Serializer.js'); + load('classes/dom/TridentSelection.js'); + load('classes/util/VK.js'); + load('classes/dom/ControlSelection.js'); + load('classes/dom/RangeUtils.js'); + load('classes/dom/Selection.js'); + load('classes/Formatter.js'); + load('classes/UndoManager.js'); + load('classes/EnterKey.js'); + load('classes/ForceBlocks.js'); + load('classes/EditorCommands.js'); + load('classes/util/URI.js'); + load('classes/util/Class.js'); + load('classes/ui/Selector.js'); + load('classes/ui/Collection.js'); + load('classes/ui/DomUtils.js'); + load('classes/ui/Control.js'); + load('classes/ui/Factory.js'); + load('classes/ui/KeyboardNavigation.js'); + load('classes/ui/Container.js'); + load('classes/ui/DragHelper.js'); + load('classes/ui/Scrollable.js'); + load('classes/ui/Panel.js'); + load('classes/ui/Movable.js'); + load('classes/ui/Resizable.js'); + load('classes/ui/FloatPanel.js'); + load('classes/ui/Window.js'); + load('classes/ui/MessageBox.js'); + load('classes/WindowManager.js'); + load('classes/util/Quirks.js'); + load('classes/util/Observable.js'); + load('classes/Shortcuts.js'); + load('classes/Editor.js'); + load('classes/util/I18n.js'); + load('classes/FocusManager.js'); + load('classes/EditorManager.js'); + load('classes/LegacyInput.js'); + load('classes/util/XHR.js'); + load('classes/util/JSON.js'); + load('classes/util/JSONRequest.js'); + load('classes/util/JSONP.js'); + load('classes/util/LocalStorage.js'); + load('classes/Compat.js'); + load('classes/ui/Layout.js'); + load('classes/ui/AbsoluteLayout.js'); + load('classes/ui/Tooltip.js'); + load('classes/ui/Widget.js'); + load('classes/ui/Button.js'); + load('classes/ui/ButtonGroup.js'); + load('classes/ui/Checkbox.js'); + load('classes/ui/PanelButton.js'); + load('classes/ui/ColorButton.js'); + load('classes/ui/ComboBox.js'); + load('classes/ui/Path.js'); + load('classes/ui/ElementPath.js'); + load('classes/ui/FormItem.js'); + load('classes/ui/Form.js'); + load('classes/ui/FieldSet.js'); + load('classes/ui/FilePicker.js'); + load('classes/ui/FitLayout.js'); + load('classes/ui/FlexLayout.js'); + load('classes/ui/FlowLayout.js'); + load('classes/ui/FormatControls.js'); + load('classes/ui/GridLayout.js'); + load('classes/ui/Iframe.js'); + load('classes/ui/Label.js'); + load('classes/ui/Toolbar.js'); + load('classes/ui/MenuBar.js'); + load('classes/ui/MenuButton.js'); + load('classes/ui/ListBox.js'); + load('classes/ui/MenuItem.js'); + load('classes/ui/Menu.js'); + load('classes/ui/Radio.js'); + load('classes/ui/ResizeHandle.js'); + load('classes/ui/Spacer.js'); + load('classes/ui/SplitButton.js'); + load('classes/ui/StackLayout.js'); + load('classes/ui/TabPanel.js'); + load('classes/ui/TextBox.js'); + load('classes/ui/Throbber.js'); + + writeScripts(); +})(this); + +// $hash: 05926848bb50eefb8b0a63bc5141644e \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/tinymce.full.min.js b/common/static/js/vendor/tinymce/js/tinymce/tinymce.full.min.js new file mode 100644 index 0000000000..33946a1185 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/tinymce.full.min.js @@ -0,0 +1,17 @@ +// 4.0.20 (2014-03-18) +!function(e,t){"use strict";function n(e,t){for(var n,r=[],i=0;ir;r++)if(o=n[r],o&&o.func.call(o.scope,e)===!1&&e.preventDefault(),e.isImmediatePropagationStopped())return}var a=this,s={},l,c,u,d,f;c=o+(+new Date).toString(32),d="onmouseenter"in document.documentElement,u="onfocusin"in document.documentElement,f={mouseenter:"mouseover",mouseleave:"mouseout"},l=1,a.domLoaded=!1,a.events=s,a.bind=function(t,o,p,m){function h(e){i(n(e||_.event),g)}var g,v,y,b,C,x,w,_=window;if(t&&3!==t.nodeType&&8!==t.nodeType){for(t[c]?g=t[c]:(g=l++,t[c]=g,s[g]={}),m=m||t,o=o.split(" "),y=o.length;y--;)b=o[y],x=h,C=w=!1,"DOMContentLoaded"===b&&(b="ready"),a.domLoaded&&"ready"===b&&"complete"==t.readyState?p.call(m,n({type:b})):(d||(C=f[b],C&&(x=function(e){var t,r;if(t=e.currentTarget,r=e.relatedTarget,r&&t.contains)r=t.contains(r);else for(;r&&r!==t;)r=r.parentNode;r||(e=n(e||_.event),e.type="mouseout"===e.type?"mouseleave":"mouseenter",e.target=t,i(e,g))})),u||"focusin"!==b&&"focusout"!==b||(w=!0,C="focusin"===b?"focus":"blur",x=function(e){e=n(e||_.event),e.type="focus"===e.type?"focusin":"focusout",i(e,g)}),v=s[g][b],v?"ready"===b&&a.domLoaded?p({type:b}):v.push({func:p,scope:m}):(s[g][b]=v=[{func:p,scope:m}],v.fakeName=C,v.capture=w,v.nativeHandler=x,"ready"===b?r(t,x,a):e(t,C||b,x,w)));return t=v=0,p}},a.unbind=function(e,n,r){var i,o,l,u,d,f;if(!e||3===e.nodeType||8===e.nodeType)return a;if(i=e[c]){if(f=s[i],n){for(n=n.split(" "),l=n.length;l--;)if(d=n[l],o=f[d]){if(r)for(u=o.length;u--;)if(o[u].func===r){var p=o.nativeHandler,m=o.fakeName,h=o.capture;o=o.slice(0,u).concat(o.slice(u+1)),o.nativeHandler=p,o.fakeName=m,o.capture=h,f[d]=o}r&&0!==o.length||(delete f[d],t(e,o.fakeName||d,o.nativeHandler,o.capture))}}else{for(d in f)o=f[d],t(e,o.fakeName||d,o.nativeHandler,o.capture);f={}}for(d in f)return a;delete s[i];try{delete e[c]}catch(g){e[c]=null}}return a},a.fire=function(e,t,r){var o;if(!e||3===e.nodeType||8===e.nodeType)return a;r=n(null,r),r.type=t,r.target=e;do o=e[c],o&&i(r,o),e=e.parentNode||e.ownerDocument||e.defaultView||e.parentWindow;while(e&&!r.isPropagationStopped());return a},a.clean=function(e){var t,n,r=a.unbind;if(!e||3===e.nodeType||8===e.nodeType)return a;if(e[c]&&r(e),e.getElementsByTagName||(e=e.document),e&&e.getElementsByTagName)for(r(e),n=e.getElementsByTagName("*"),t=n.length;t--;)e=n[t],e[c]&&r(e);return a},a.destroy=function(){s={}},a.cancel=function(e){return e&&(e.preventDefault(),e.stopImmediatePropagation()),!1}}var o="mce-data-",a=/^(?:mouse|contextmenu)|click/,s={keyLocation:1,layerX:1,layerY:1,returnValue:1};return i.Event=new i,i.Event.bind(window,"ready",function(){}),i}),r(c,[],function(){function e(e){return ht.test(e+"")}function n(){var e,t=[];return e=function(n,r){return t.push(n+=" ")>_.cacheLength&&delete e[t.shift()],e[n]=r,r}}function r(e){return e[I]=!0,e}function i(e){var t=B.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t=null}}function o(e,t,n,r){var i,o,a,s,l,c,f,p,m,h;if((t?t.ownerDocument||t:F)!==B&&A(t),t=t||B,n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=t.nodeType)&&9!==s)return[];if(D&&!r){if(i=gt.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(a))&&O(t,o)&&o.id===a)return n.push(o),n}else{if(i[2])return Z.apply(n,t.getElementsByTagName(e)),n;if((a=i[3])&&z.getElementsByClassName&&t.getElementsByClassName)return Z.apply(n,t.getElementsByClassName(a)),n}if(z.qsa&&!M.test(e)){if(f=!0,p=I,m=t,h=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){for(c=u(e),(f=t.getAttribute("id"))?p=f.replace(bt,"\\$&"):t.setAttribute("id",p),p="[id='"+p+"'] ",l=c.length;l--;)c[l]=p+d(c[l]);m=mt.test(e)&&t.parentNode||t,h=c.join(",")}if(h)try{return Z.apply(n,m.querySelectorAll(h)),n}catch(g){}finally{f||t.removeAttribute("id")}}}return b(e.replace(lt,"$1"),t,n,r)}function a(e,t){var n=t&&e,r=n&&(~t.sourceIndex||G)-(~e.sourceIndex||G);if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function s(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function l(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function c(e){return r(function(t){return t=+t,r(function(n,r){for(var i,o=e([],n.length,t),a=o.length;a--;)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function u(e,t){var n,r,i,a,s,l,c,u=q[e+" "];if(u)return t?0:u.slice(0);for(s=e,l=[],c=_.preFilter;s;){(!n||(r=ct.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=ut.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(lt," ")}),s=s.slice(n.length));for(a in _.filter)!(r=pt[a].exec(s))||c[a]&&!(r=c[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?o.error(e):q(e,l).slice(0)}function d(e){for(var t=0,n=e.length,r="";n>t;t++)r+=e[t].value;return r}function f(e,t,n){var r=t.dir,i=n&&"parentNode"===r,o=V++;return t.first?function(t,n,o){for(;t=t[r];)if(1===t.nodeType||i)return e(t,n,o)}:function(t,n,a){var s,l,c,u=W+" "+o;if(a){for(;t=t[r];)if((1===t.nodeType||i)&&e(t,n,a))return!0}else for(;t=t[r];)if(1===t.nodeType||i)if(c=t[I]||(t[I]={}),(l=c[r])&&l[0]===u){if((s=l[1])===!0||s===w)return s===!0}else if(l=c[r]=[u],l[1]=e(t,n,a)||w,l[1]===!0)return!0}}function p(e){return e.length>1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function m(e,t,n,r,i){for(var o,a=[],s=0,l=e.length,c=null!=t;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),c&&t.push(s));return a}function h(e,t,n,i,o,a){return i&&!i[I]&&(i=h(i)),o&&!o[I]&&(o=h(o,a)),r(function(r,a,s,l){var c,u,d,f=[],p=[],h=a.length,g=r||y(t||"*",s.nodeType?[s]:s,[]),v=!e||!r&&t?g:m(g,f,e,s,l),b=n?o||(r?e:h||i)?[]:a:v;if(n&&n(v,b,s,l),i)for(c=m(b,p),i(c,[],s,l),u=c.length;u--;)(d=c[u])&&(b[p[u]]=!(v[p[u]]=d));if(r){if(o||e){if(o){for(c=[],u=b.length;u--;)(d=b[u])&&c.push(v[u]=d);o(null,b=[],c,l)}for(u=b.length;u--;)(d=b[u])&&(c=o?tt.call(r,d):f[u])>-1&&(r[c]=!(a[c]=d))}}else b=m(b===a?b.splice(h,b.length):b),o?o(null,a,b,l):Z.apply(a,b)})}function g(e){for(var t,n,r,i=e.length,o=_.relative[e[0].type],a=o||_.relative[" "],s=o?1:0,l=f(function(e){return e===t},a,!0),c=f(function(e){return tt.call(t,e)>-1},a,!0),u=[function(e,n,r){return!o&&(r||n!==k)||((t=n).nodeType?l(e,n,r):c(e,n,r))}];i>s;s++)if(n=_.relative[e[s].type])u=[f(p(u),n)];else{if(n=_.filter[e[s].type].apply(null,e[s].matches),n[I]){for(r=++s;i>r&&!_.relative[e[r].type];r++);return h(s>1&&p(u),s>1&&d(e.slice(0,s-1)).replace(lt,"$1"),n,r>s&&g(e.slice(s,r)),i>r&&g(e=e.slice(r)),i>r&&d(e))}u.push(n)}return p(u)}function v(e,t){var n=0,i=t.length>0,a=e.length>0,s=function(r,s,l,c,u){var d,f,p,h=[],g=0,v="0",y=r&&[],b=null!=u,C=k,x=r||a&&_.find.TAG("*",u&&s.parentNode||s),N=W+=null==C?1:Math.random()||.1;for(b&&(k=s!==B&&s,w=n);null!=(d=x[v]);v++){if(a&&d){for(f=0;p=e[f++];)if(p(d,s,l)){c.push(d);break}b&&(W=N,w=++n)}i&&((d=!p&&d)&&g--,r&&y.push(d))}if(g+=v,i&&v!==g){for(f=0;p=t[f++];)p(y,h,s,l);if(r){if(g>0)for(;v--;)y[v]||h[v]||(h[v]=J.call(c));h=m(h)}Z.apply(c,h),b&&!r&&h.length>0&&g+t.length>1&&o.uniqueSort(c)}return b&&(W=N,k=C),y};return i?r(s):s}function y(e,t,n){for(var r=0,i=t.length;i>r;r++)o(e,t[r],n);return n}function b(e,t,n,r){var i,o,a,s,l,c=u(e);if(!r&&1===c.length){if(o=c[0]=c[0].slice(0),o.length>2&&"ID"===(a=o[0]).type&&9===t.nodeType&&D&&_.relative[o[1].type]){if(t=(_.find.ID(a.matches[0].replace(xt,wt),t)||[])[0],!t)return n;e=e.slice(o.shift().value.length)}for(i=pt.needsContext.test(e)?0:o.length;i--&&(a=o[i],!_.relative[s=a.type]);)if((l=_.find[s])&&(r=l(a.matches[0].replace(xt,wt),mt.test(o[0].type)&&t.parentNode||t))){if(o.splice(i,1),e=r.length&&d(o),!e)return Z.apply(n,r),n;break}}return S(e,c)(r,t,!D,n,mt.test(e)),n}function C(){}var x,w,_,N,E,S,k,T,R,A,B,L,D,M,H,P,O,I="sizzle"+-new Date,F=window.document,z={},W=0,V=0,U=n(),q=n(),$=n(),j=!1,K=function(){return 0},Y=typeof t,G=1<<31,X=[],J=X.pop,Q=X.push,Z=X.push,et=X.slice,tt=X.indexOf||function(e){for(var t=0,n=this.length;n>t;t++)if(this[t]===e)return t;return-1},nt="[\\x20\\t\\r\\n\\f]",rt="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",it=rt.replace("w","w#"),ot="([*^$|!~]?=)",at="\\["+nt+"*("+rt+")"+nt+"*(?:"+ot+nt+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+it+")|)|)"+nt+"*\\]",st=":("+rt+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+at.replace(3,8)+")*)|.*)\\)|)",lt=new RegExp("^"+nt+"+|((?:^|[^\\\\])(?:\\\\.)*)"+nt+"+$","g"),ct=new RegExp("^"+nt+"*,"+nt+"*"),ut=new RegExp("^"+nt+"*([\\x20\\t\\r\\n\\f>+~])"+nt+"*"),dt=new RegExp(st),ft=new RegExp("^"+it+"$"),pt={ID:new RegExp("^#("+rt+")"),CLASS:new RegExp("^\\.("+rt+")"),NAME:new RegExp("^\\[name=['\"]?("+rt+")['\"]?\\]"),TAG:new RegExp("^("+rt.replace("w","w*")+")"),ATTR:new RegExp("^"+at),PSEUDO:new RegExp("^"+st),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+nt+"*(even|odd|(([+-]|)(\\d*)n|)"+nt+"*(?:([+-]|)"+nt+"*(\\d+)|))"+nt+"*\\)|)","i"),needsContext:new RegExp("^"+nt+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+nt+"*((?:-\\d)?\\d*)"+nt+"*\\)|)(?=[^-]|$)","i")},mt=/[\x20\t\r\n\f]*[+~]/,ht=/^[^{]+\{\s*\[native code/,gt=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,vt=/^(?:input|select|textarea|button)$/i,yt=/^h\d$/i,bt=/'|\\/g,Ct=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,xt=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,wt=function(e,t){var n="0x"+t-65536;return n!==n?t:0>n?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320)};try{Z.apply(X=et.call(F.childNodes),F.childNodes),X[F.childNodes.length].nodeType}catch(_t){Z={apply:X.length?function(e,t){Q.apply(e,et.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}E=o.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},A=o.setDocument=function(n){var r=n?n.ownerDocument||n:F;return r!==B&&9===r.nodeType&&r.documentElement?(B=r,L=r.documentElement,D=!E(r),z.getElementsByTagName=i(function(e){return e.appendChild(r.createComment("")),!e.getElementsByTagName("*").length}),z.attributes=i(function(e){e.innerHTML="";var t=typeof e.lastChild.getAttribute("multiple");return"boolean"!==t&&"string"!==t}),z.getElementsByClassName=i(function(e){return e.innerHTML="",e.getElementsByClassName&&e.getElementsByClassName("e").length?(e.lastChild.className="e",2===e.getElementsByClassName("e").length):!1}),z.getByName=i(function(e){e.id=I+0,e.appendChild(B.createElement("a")).setAttribute("name",I),e.appendChild(B.createElement("i")).setAttribute("name",I),L.appendChild(e);var t=r.getElementsByName&&r.getElementsByName(I).length===2+r.getElementsByName(I+0).length;return L.removeChild(e),t}),z.sortDetached=i(function(e){return e.compareDocumentPosition&&1&e.compareDocumentPosition(B.createElement("div"))}),_.attrHandle=i(function(e){return e.innerHTML="",e.firstChild&&typeof e.firstChild.getAttribute!==Y&&"#"===e.firstChild.getAttribute("href")})?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},z.getByName?(_.find.ID=function(e,t){if(typeof t.getElementById!==Y&&D){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},_.filter.ID=function(e){var t=e.replace(xt,wt);return function(e){return e.getAttribute("id")===t}}):(_.find.ID=function(e,n){if(typeof n.getElementById!==Y&&D){var r=n.getElementById(e);return r?r.id===e||typeof r.getAttributeNode!==Y&&r.getAttributeNode("id").value===e?[r]:t:[]}},_.filter.ID=function(e){var t=e.replace(xt,wt);return function(e){var n=typeof e.getAttributeNode!==Y&&e.getAttributeNode("id");return n&&n.value===t}}),_.find.TAG=z.getElementsByTagName?function(e,t){return typeof t.getElementsByTagName!==Y?t.getElementsByTagName(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},_.find.NAME=z.getByName&&function(e,t){return typeof t.getElementsByName!==Y?t.getElementsByName(name):void 0},_.find.CLASS=z.getElementsByClassName&&function(e,t){return typeof t.getElementsByClassName!==Y&&D?t.getElementsByClassName(e):void 0},H=[],M=[":focus"],(z.qsa=e(r.querySelectorAll))&&(i(function(e){e.innerHTML="",e.querySelectorAll("[selected]").length||M.push("\\["+nt+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||M.push(":checked")}),i(function(e){e.innerHTML="",e.querySelectorAll("[i^='']").length&&M.push("[*^$]="+nt+"*(?:\"\"|'')"),e.querySelectorAll(":enabled").length||M.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),M.push(",.*:")})),(z.matchesSelector=e(P=L.matchesSelector||L.mozMatchesSelector||L.webkitMatchesSelector||L.oMatchesSelector||L.msMatchesSelector))&&i(function(e){z.disconnectedMatch=P.call(e,"div"),P.call(e,"[s!='']:x"),H.push("!=",st)}),M=new RegExp(M.join("|")),H=H.length&&new RegExp(H.join("|")),O=e(L.contains)||L.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},K=L.compareDocumentPosition?function(e,t){if(e===t)return j=!0,0;var n=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return n?1&n||T&&t.compareDocumentPosition(e)===n?e===r||O(F,e)?-1:t===r||O(F,t)?1:R?tt.call(R,e)-tt.call(R,t):0:4&n?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var n,i=0,o=e.parentNode,s=t.parentNode,l=[e],c=[t];if(e===t)return j=!0,0;if(!o||!s)return e===r?-1:t===r?1:o?-1:s?1:0;if(o===s)return a(e,t);for(n=e;n=n.parentNode;)l.unshift(n);for(n=t;n=n.parentNode;)c.unshift(n);for(;l[i]===c[i];)i++;return i?a(l[i],c[i]):l[i]===F?-1:c[i]===F?1:0},B):B},o.matches=function(e,t){return o(e,null,null,t)},o.matchesSelector=function(e,t){if((e.ownerDocument||e)!==B&&A(e),t=t.replace(Ct,"='$1']"),z.matchesSelector&&D&&(!H||!H.test(t))&&!M.test(t))try{var n=P.call(e,t);if(n||z.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(r){}return o(t,B,null,[e]).length>0},o.contains=function(e,t){return(e.ownerDocument||e)!==B&&A(e),O(e,t)},o.attr=function(e,t){var n;return(e.ownerDocument||e)!==B&&A(e),D&&(t=t.toLowerCase()),(n=_.attrHandle[t])?n(e):!D||z.attributes?e.getAttribute(t):((n=e.getAttributeNode(t))||e.getAttribute(t))&&e[t]===!0?t:n&&n.specified?n.value:null},o.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},o.uniqueSort=function(e){var t,n=[],r=0,i=0;if(j=!z.detectDuplicates,T=!z.sortDetached,R=!z.sortStable&&e.slice(0),e.sort(K),j){for(;t=e[i++];)t===e[i]&&(r=n.push(i));for(;r--;)e.splice(n[r],1)}return e},N=o.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=N(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=N(t);return n},_=o.selectors={cacheLength:50,createPseudo:r,match:pt,find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(xt,wt),e[3]=(e[4]||e[5]||"").replace(xt,wt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||o.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&o.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return pt.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&&dt.test(n)&&(t=u(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){return"*"===e?function(){return!0}:(e=e.replace(xt,wt).toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=U[e+" "];return t||(t=new RegExp("(^|"+nt+")"+e+"("+nt+"|$)"))&&U(e,function(e){return t.test(e.className||typeof e.getAttribute!==Y&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=o.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var c,u,d,f,p,m,h=o!==a?"nextSibling":"previousSibling",g=t.parentNode,v=s&&t.nodeName.toLowerCase(),y=!l&&!s;if(g){if(o){for(;h;){for(d=t;d=d[h];)if(s?d.nodeName.toLowerCase()===v:1===d.nodeType)return!1;m=h="only"===e&&!m&&"nextSibling"}return!0}if(m=[a?g.firstChild:g.lastChild],a&&y){for(u=g[I]||(g[I]={}),c=u[e]||[],p=c[0]===W&&c[1],f=c[0]===W&&c[2],d=p&&g.childNodes[p];d=++p&&d&&d[h]||(f=p=0)||m.pop();)if(1===d.nodeType&&++f&&d===t){u[e]=[W,p,f];break}}else if(y&&(c=(t[I]||(t[I]={}))[e])&&c[0]===W)f=c[1];else for(;(d=++p&&d&&d[h]||(f=p=0)||m.pop())&&((s?d.nodeName.toLowerCase()!==v:1!==d.nodeType)||!++f||(y&&((d[I]||(d[I]={}))[e]=[W,f]),d!==t)););return f-=i,f===r||f%r===0&&f/r>=0}}},PSEUDO:function(e,t){var n,i=_.pseudos[e]||_.setFilters[e.toLowerCase()]||o.error("unsupported pseudo: "+e);return i[I]?i(t):i.length>1?(n=[e,e,"",t],_.setFilters.hasOwnProperty(e.toLowerCase())?r(function(e,n){for(var r,o=i(e,t),a=o.length;a--;)r=tt.call(e,o[a]),e[r]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:r(function(e){var t=[],n=[],i=S(e.replace(lt,"$1"));return i[I]?r(function(e,t,n,r){for(var o,a=i(e,null,r,[]),s=e.length;s--;)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,r,o){return t[0]=e,i(t,null,o,n),!n.pop()}}),has:r(function(e){return function(t){return o(e,t).length>0}}),contains:r(function(e){return function(t){return(t.textContent||t.innerText||N(t)).indexOf(e)>-1}}),lang:r(function(e){return ft.test(e||"")||o.error("unsupported lang: "+e),e=e.replace(xt,wt).toLowerCase(),function(t){var n;do if(n=D?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(e){var t=window.location&&window.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===L},focus:function(e){return e===B.activeElement&&(!B.hasFocus||B.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!_.pseudos.empty(e)},header:function(e){return yt.test(e.nodeName)},input:function(e){return vt.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:c(function(){return[0]}),last:c(function(e,t){return[t-1]}),eq:c(function(e,t,n){return[0>n?n+t:n]}),even:c(function(e,t){for(var n=0;t>n;n+=2)e.push(n);return e}),odd:c(function(e,t){for(var n=1;t>n;n+=2)e.push(n);return e}),lt:c(function(e,t,n){for(var r=0>n?n+t:n;--r>=0;)e.push(r);return e}),gt:c(function(e,t,n){for(var r=0>n?n+t:n;++rn;n++)t[n]=e[n];return t}function f(e,t){var n;if(t.indexOf)return t.indexOf(e);for(n=t.length;n--;)if(t[n]===e)return n;return-1}function p(e){return null===e||e===t?"":(""+e).replace(N,"")}function m(e,t){var n,r,i,o,a;if(e)if(n=e.length,n===o){for(r in e)if(e.hasOwnProperty(r)&&(a=e[r],t.call(a,a,r)===!1))break}else for(i=0;n>i&&(a=e[i],t.call(a,a,r)!==!1);i++);return e}function h(e,n,r){for(var i=[],o=e[n];o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!c(o).is(r));)1===o.nodeType&&i.push(o),o=o[n];return i}function g(e,t,n,r){for(var i=[];e;e=e[n])r&&e.nodeType!==r||e===t||i.push(e);return i}var v=document,y=Array.prototype.push,b=Array.prototype.slice,C=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,x=e.Event,w=l("fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom"),_=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},N=/^\s*|\s*$/g;return c.fn=c.prototype={constructor:c,selector:"",length:0,init:function(e,t){var n=this,r,a;if(!e)return n;if(e.nodeType)return n.context=n[0]=e,n.length=1,n;if(i(e)){if(r="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:C.exec(e),!r)return c(t||document).find(e);if(r[1])for(a=o(e).firstChild;a;)this.add(a),a=a.nextSibling;else{if(a=v.getElementById(r[2]),a.id!==r[2])return n.find(e);n.length=1,n[0]=a}}else this.add(e);return n},toArray:function(){return d(this)},add:function(e){var t=this;return _(e)?y.apply(t,e):e instanceof c?t.add(e.toArray()):y.call(t,e),t},attr:function(e,n){var i=this;if("object"==typeof e)m(e,function(e,t){i.attr(t,e)});else{if(!r(n))return i[0]&&1===i[0].nodeType?i[0].getAttribute(e):t;this.each(function(){1===this.nodeType&&this.setAttribute(e,n)})}return i},css:function(e,n){var i=this;if("object"==typeof e)m(e,function(e,t){i.css(t,e)});else{if(e=e.replace(/-(\D)/g,function(e,t){return t.toUpperCase()}),!r(n))return i[0]?i[0].style[e]:t;"number"!=typeof n||w[e]||(n+="px"),i.each(function(){var t=this.style;"opacity"===e&&this.runtimeStyle&&"undefined"==typeof this.runtimeStyle.opacity&&(t.filter=""===n?"":"alpha(opacity="+100*n+")");try{t[e]=n}catch(r){}})}return i},remove:function(){for(var e=this,t,n=this.length;n--;)t=e[n],x.clean(t),t.parentNode&&t.parentNode.removeChild(t);return this},empty:function(){for(var e=this,t,n=this.length;n--;)for(t=e[n];t.firstChild;)t.removeChild(t.firstChild);return this},html:function(e){var t=this,n;if(r(e)){for(n=t.length;n--;)t[n].innerHTML=e;return t}return t[0]?t[0].innerHTML:""},text:function(e){var t=this,n;if(r(e)){for(n=t.length;n--;)t[n].innerText=t[0].textContent=e;return t}return t[0]?t[0].innerText||t[0].textContent:""},append:function(){return a(this,arguments,function(e){1===this.nodeType&&this.appendChild(e)})},prepend:function(){return a(this,arguments,function(e){1===this.nodeType&&this.insertBefore(e,this.firstChild)})},before:function(){var e=this;return e[0]&&e[0].parentNode?a(e,arguments,function(e){this.parentNode.insertBefore(e,this.nextSibling)}):e},after:function(){var e=this;return e[0]&&e[0].parentNode?a(e,arguments,function(e){this.parentNode.insertBefore(e,this)}):e},appendTo:function(e){return c(e).append(this),this},addClass:function(e){return this.toggleClass(e,!0)},removeClass:function(e){return this.toggleClass(e,!1)},toggleClass:function(e,t){var n=this;return-1!==e.indexOf(" ")?m(e.split(" "),function(){n.toggleClass(this,t)}):n.each(function(n){var r;s(n,e)!==t&&(r=n.className,t?n.className+=r?" "+e:e:n.className=p((" "+r+" ").replace(" "+e+" "," ")))}),n},hasClass:function(e){return s(this[0],e)},each:function(e){return m(this,e)},on:function(e,t){return this.each(function(){x.bind(this,e,t)})},off:function(e,t){return this.each(function(){x.unbind(this,e,t)})},show:function(){return this.css("display","")},hide:function(){return this.css("display","none")},slice:function(){return new c(b.apply(this,arguments))},eq:function(e){return-1===e?this.slice(e):this.slice(e,+e+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},replaceWith:function(e){var t=this;return t[0]&&t[0].parentNode.replaceChild(c(e)[0],t[0]),t},wrap:function(e){return e=c(e)[0],this.each(function(){var t=this,n=e.cloneNode(!1);t.parentNode.insertBefore(n,t),n.appendChild(t)})},unwrap:function(){return this.each(function(){for(var e=this,t=e.firstChild,n;t;)n=t,t=t.nextSibling,e.parentNode.insertBefore(n,e)})},clone:function(){var e=[];return this.each(function(){e.push(this.cloneNode(!0))}),c(e)},find:function(e){var t,n,r=[];for(t=0,n=this.length;n>t;t++)c.find(e,this[t],r);return c(r)},push:y,sort:[].sort,splice:[].splice},u(c,{extend:u,toArray:d,inArray:f,isArray:_,each:m,trim:p,makeMap:l,find:n,expr:n.selectors,unique:n.uniqueSort,text:n.getText,isXMLDoc:n.isXML,contains:n.contains,filter:function(e,t,n){return n&&(e=":not("+e+")"),t=1===t.length?c.find.matchesSelector(t[0],e)?[t[0]]:[]:c.find.matches(e,t)}}),m({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t){return h(e,"parentNode",t)},next:function(e){return g(e,"nextSibling",1)},prev:function(e){return g(e,"previousSibling",1)},nextNodes:function(e){return g(e,"nextSibling")},prevNodes:function(e){return g(e,"previousSibling")},children:function(e){return g(e.firstChild,"nextSibling",1)},contents:function(e){return d(("iframe"===e.nodeName?e.contentDocument||e.contentWindow.document:e).childNodes)}},function(e,t){c.fn[e]=function(n){var r=this,i;if(r.length>1)throw new Error("DomQuery only supports traverse functions on a single node.");return r[0]&&(i=t(r[0],n)),i=c(i),n&&"parentsUntil"!==e?i.filter(n):i}}),c.fn.filter=function(e){return c.filter(e)},c.fn.is=function(e){return!!e&&this.filter(e).length>0},c.fn.init.prototype=c.fn,c}),r(d,[],function(){return function(e,t){function n(e,t,n,r){function i(e){return e=parseInt(e,10).toString(16),e.length>1?e:"0"+e}return"#"+i(t)+i(n)+i(r)}var r=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,i=/(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,o=/\s*([^:]+):\s*([^;]+);?/g,a=/\s+$/,s,l,c={},u,d="\ufeff"; +for(e=e||{},u=("\\\" \\' \\; \\: ; : "+d).split(" "),l=0;l-1&&n||(h[e+t]=-1==l?s[0]:s.join(" "),delete h[e+"-top"+t],delete h[e+"-right"+t],delete h[e+"-bottom"+t],delete h[e+"-left"+t])}}function u(e){var t=h[e],n;if(t){for(t=t.split(" "),n=t.length;n--;)if(t[n]!==t[0])return!1;return h[e]=t[0],!0}}function d(e,t,n,r){u(t)&&u(n)&&u(r)&&(h[e]=h[t]+" "+h[n]+" "+h[r],delete h[t],delete h[n],delete h[r])}function f(e){return b=!0,c[e]}function p(e,t){return b&&(e=e.replace(/\uFEFF[0-9]/g,function(e){return c[e]})),t||(e=e.replace(/\\([\'\";:])/g,"$1")),e}function m(t,n,r,i,o,a){return(o=o||a)?(o=p(o),"'"+o.replace(/\'/g,"\\'")+"'"):(n=p(n||r||i),!e.allow_script_urls&&/(java|vb)script:/i.test(n.replace(/[\s\r\n]+/,""))?"":(C&&(n=C.call(x,n,"style")),"url('"+n.replace(/\'/g,"\\'")+"')"))}var h={},g,v,y,b,C=e.url_converter,x=e.url_converter_scope||this;if(t){for(t=t.replace(/[\u0000-\u001F]/g,""),t=t.replace(/\\[\"\';:\uFEFF]/g,f).replace(/\"[^\"]+\"|\'[^\']+\'/g,function(e){return e.replace(/[;:]/g,f)});g=o.exec(t);){if(v=g[1].replace(a,"").toLowerCase(),y=g[2].replace(a,""),v&&y.length>0){if(!e.allow_script_urls&&("behavior"==v||/expression\s*\(/.test(y)))continue;"font-weight"===v&&"700"===y?y="bold":("color"===v||"background-color"===v)&&(y=y.toLowerCase()),y=y.replace(r,n),y=y.replace(i,m),h[v]=b?p(y,!0):y}o.lastIndex=g.index+g[0].length}s("border","",!0),s("border","-width"),s("border","-color"),s("border","-style"),s("padding",""),s("margin",""),d("border","border-width","border-style","border-color"),"medium none"===h.border&&delete h.border,"none"===h["border-image"]&&delete h["border-image"]}return h},serialize:function(e,n){function r(n){var r,o,a,l;if(r=t.styles[n])for(o=0,a=r.length;a>o;o++)n=r[o],l=e[n],l!==s&&l.length>0&&(i+=(i.length>0?" ":"")+n+": "+l+";")}var i="",o,a;if(n&&t&&t.styles)r("*"),r(n);else for(o in e)a=e[o],a!==s&&a.length>0&&(i+=(i.length>0?" ":"")+o+": "+a+";");return i}}}}),r(f,[],function(){return function(e,t){function n(e,n,r,i){var o,a;if(e){if(!i&&e[n])return e[n];if(e!=t){if(o=e[r])return o;for(a=e.parentNode;a&&a!=t;a=a.parentNode)if(o=a[r])return o}}}var r=e;this.current=function(){return r},this.next=function(e){return r=n(r,"firstChild","nextSibling",e)},this.prev=function(e){return r=n(r,"lastChild","previousSibling",e)}}}),r(p,[],function(){function e(e){return null===e||e===t?"":(""+e).replace(h,"")}function n(e,n){return n?"array"==n&&g(e)?!0:typeof e==n:e!==t}function r(e){var t=[],n,r;for(n=0,r=e.length;r>n;n++)t[n]=e[n];return t}function i(e,t,n){var r;for(e=e||[],t=t||",","string"==typeof e&&(e=e.split(t)),n=n||{},r=e.length;r--;)n[e[r]]={};return n}function o(e,n,r){var i,o;if(!e)return 0;if(r=r||e,e.length!==t){for(i=0,o=e.length;o>i;i++)if(n.call(r,e[i],i,e)===!1)return 0}else for(i in e)if(e.hasOwnProperty(i)&&n.call(r,e[i],i,e)===!1)return 0;return 1}function a(e,t){var n=[];return o(e,function(e){n.push(t(e))}),n}function s(e,t){var n=[];return o(e,function(e){(!t||t(e))&&n.push(e)}),n}function l(e,t,n){var r=this,i,o,a,s,l,c=0;if(e=/^((static) )?([\w.]+)(:([\w.]+))?/.exec(e),a=e[3].match(/(^|\.)(\w+)$/i)[2],o=r.createNS(e[3].replace(/\.\w+$/,""),n),!o[a]){if("static"==e[2])return o[a]=t,void(this.onCreate&&this.onCreate(e[2],e[3],o[a]));t[a]||(t[a]=function(){},c=1),o[a]=t[a],r.extend(o[a].prototype,t),e[5]&&(i=r.resolve(e[5]).prototype,s=e[5].match(/\.(\w+)$/i)[1],l=o[a],o[a]=c?function(){return i[s].apply(this,arguments)}:function(){return this.parent=i[s],l.apply(this,arguments)},o[a].prototype[a]=o[a],r.each(i,function(e,t){o[a].prototype[t]=i[t]}),r.each(t,function(e,t){i[t]?o[a].prototype[t]=function(){return this.parent=i[t],e.apply(this,arguments)}:t!=a&&(o[a].prototype[t]=e)})),r.each(t["static"],function(e,t){o[a][t]=e})}}function c(e,t){var n,r;if(e)for(n=0,r=e.length;r>n;n++)if(e[n]===t)return n;return-1}function u(e,n){var r,i,o,a=arguments,s;for(r=1,i=a.length;i>r;r++){n=a[r];for(o in n)n.hasOwnProperty(o)&&(s=n[o],s!==t&&(e[o]=s))}return e}function d(e,t,n,r){r=r||this,e&&(n&&(e=e[n]),o(e,function(e,i){return t.call(r,e,i,n)===!1?!1:void d(e,t,n,r)}))}function f(e,t){var n,r;for(t=t||window,e=e.split("."),n=0;nn&&(t=t[e[n]],t);n++);return t}function m(t,r){return!t||n(t,"array")?t:a(t.split(r||","),e)}var h=/^\s*|\s*$/g,g=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)};return{trim:e,isArray:g,is:n,toArray:r,makeMap:i,each:o,map:a,grep:s,inArray:c,extend:u,create:l,walk:d,createNS:f,resolve:p,explode:m}}),r(m,[p],function(e){function t(n){function r(){return H.createDocumentFragment()}function i(e,t){_(F,e,t)}function o(e,t){_(z,e,t)}function a(e){i(e.parentNode,j(e))}function s(e){i(e.parentNode,j(e)+1)}function l(e){o(e.parentNode,j(e))}function c(e){o(e.parentNode,j(e)+1)}function u(e){e?(M[U]=M[V],M[q]=M[W]):(M[V]=M[U],M[W]=M[q]),M.collapsed=F}function d(e){a(e),c(e)}function f(e){i(e,0),o(e,1===e.nodeType?e.childNodes.length:e.nodeValue.length)}function p(e,t){var n=M[V],r=M[W],i=M[U],o=M[q],a=t.startContainer,s=t.startOffset,l=t.endContainer,c=t.endOffset;return 0===e?w(n,r,a,s):1===e?w(i,o,a,s):2===e?w(i,o,l,c):3===e?w(n,r,l,c):void 0}function m(){N(I)}function h(){return N(P)}function g(){return N(O)}function v(e){var t=this[V],r=this[W],i,o;3!==t.nodeType&&4!==t.nodeType||!t.nodeValue?(t.childNodes.length>0&&(o=t.childNodes[r]),o?t.insertBefore(e,o):3==t.nodeType?n.insertAfter(e,t):t.appendChild(e)):r?r>=t.nodeValue.length?n.insertAfter(e,t):(i=t.splitText(r),t.parentNode.insertBefore(e,i)):t.parentNode.insertBefore(e,t)}function y(e){var t=M.extractContents();M.insertNode(e),e.appendChild(t),M.selectNode(e)}function b(){return $(new t(n),{startContainer:M[V],startOffset:M[W],endContainer:M[U],endOffset:M[q],collapsed:M.collapsed,commonAncestorContainer:M.commonAncestorContainer})}function C(e,t){var n;if(3==e.nodeType)return e;if(0>t)return e;for(n=e.firstChild;n&&t>0;)--t,n=n.nextSibling;return n?n:e}function x(){return M[V]==M[U]&&M[W]==M[q]}function w(e,t,r,i){var o,a,s,l,c,u;if(e==r)return t==i?0:i>t?-1:1;for(o=r;o&&o.parentNode!=e;)o=o.parentNode;if(o){for(a=0,s=e.firstChild;s!=o&&t>a;)a++,s=s.nextSibling;return a>=t?-1:1}for(o=e;o&&o.parentNode!=r;)o=o.parentNode;if(o){for(a=0,s=r.firstChild;s!=o&&i>a;)a++,s=s.nextSibling;return i>a?-1:1}for(l=n.findCommonAncestor(e,r),c=e;c&&c.parentNode!=l;)c=c.parentNode;for(c||(c=l),u=r;u&&u.parentNode!=l;)u=u.parentNode;if(u||(u=l),c==u)return 0;for(s=l.firstChild;s;){if(s==c)return-1;if(s==u)return 1;s=s.nextSibling}}function _(e,t,r){var i,o;for(e?(M[V]=t,M[W]=r):(M[U]=t,M[q]=r),i=M[U];i.parentNode;)i=i.parentNode;for(o=M[V];o.parentNode;)o=o.parentNode;o==i?w(M[V],M[W],M[U],M[q])>0&&M.collapse(e):M.collapse(e),M.collapsed=x(),M.commonAncestorContainer=n.findCommonAncestor(M[V],M[U])}function N(e){var t,n=0,r=0,i,o,a,s,l,c;if(M[V]==M[U])return E(e);for(t=M[U],i=t.parentNode;i;t=i,i=i.parentNode){if(i==M[V])return S(t,e);++n}for(t=M[V],i=t.parentNode;i;t=i,i=i.parentNode){if(i==M[U])return k(t,e);++r}for(o=r-n,a=M[V];o>0;)a=a.parentNode,o--;for(s=M[U];0>o;)s=s.parentNode,o++;for(l=a.parentNode,c=s.parentNode;l!=c;l=l.parentNode,c=c.parentNode)a=l,s=c;return T(a,s,e)}function E(e){var t,n,i,o,a,s,l,c,u;if(e!=I&&(t=r()),M[W]==M[q])return t;if(3==M[V].nodeType){if(n=M[V].nodeValue,i=n.substring(M[W],M[q]),e!=O&&(o=M[V],c=M[W],u=M[q]-M[W],0===c&&u>=o.nodeValue.length-1?o.parentNode.removeChild(o):o.deleteData(c,u),M.collapse(F)),e==I)return;return i.length>0&&t.appendChild(H.createTextNode(i)),t}for(o=C(M[V],M[W]),a=M[q]-M[W];o&&a>0;)s=o.nextSibling,l=L(o,e),t&&t.appendChild(l),--a,o=s;return e!=O&&M.collapse(F),t}function S(e,t){var n,i,o,a,s,l;if(t!=I&&(n=r()),i=R(e,t),n&&n.appendChild(i),o=j(e),a=o-M[W],0>=a)return t!=O&&(M.setEndBefore(e),M.collapse(z)),n;for(i=e.previousSibling;a>0;)s=i.previousSibling,l=L(i,t),n&&n.insertBefore(l,n.firstChild),--a,i=s;return t!=O&&(M.setEndBefore(e),M.collapse(z)),n}function k(e,t){var n,i,o,a,s,l;for(t!=I&&(n=r()),o=A(e,t),n&&n.appendChild(o),i=j(e),++i,a=M[q]-i,o=e.nextSibling;o&&a>0;)s=o.nextSibling,l=L(o,t),n&&n.appendChild(l),--a,o=s;return t!=O&&(M.setStartAfter(e),M.collapse(F)),n}function T(e,t,n){var i,o,a,s,l,c,u;for(n!=I&&(o=r()),i=A(e,n),o&&o.appendChild(i),a=j(e),s=j(t),++a,l=s-a,c=e.nextSibling;l>0;)u=c.nextSibling,i=L(c,n),o&&o.appendChild(i),c=u,--l;return i=R(t,n),o&&o.appendChild(i),n!=O&&(M.setStartAfter(e),M.collapse(F)),o}function R(e,t){var n=C(M[U],M[q]-1),r,i,o,a,s,l=n!=M[U];if(n==e)return B(n,l,z,t);for(r=n.parentNode,i=B(r,z,z,t);r;){for(;n;)o=n.previousSibling,a=B(n,l,z,t),t!=I&&i.insertBefore(a,i.firstChild),l=F,n=o;if(r==e)return i;n=r.previousSibling,r=r.parentNode,s=B(r,z,z,t),t!=I&&s.appendChild(i),i=s}}function A(e,t){var n=C(M[V],M[W]),r=n!=M[V],i,o,a,s,l;if(n==e)return B(n,r,F,t);for(i=n.parentNode,o=B(i,z,F,t);i;){for(;n;)a=n.nextSibling,s=B(n,r,F,t),t!=I&&o.appendChild(s),r=F,n=a;if(i==e)return o;n=i.nextSibling,i=i.parentNode,l=B(i,z,F,t),t!=I&&l.appendChild(o),o=l}}function B(e,t,r,i){var o,a,s,l,c;if(t)return L(e,i);if(3==e.nodeType){if(o=e.nodeValue,r?(l=M[W],a=o.substring(l),s=o.substring(0,l)):(l=M[q],a=o.substring(0,l),s=o.substring(l)),i!=O&&(e.nodeValue=s),i==I)return;return c=n.clone(e,z),c.nodeValue=a,c}if(i!=I)return n.clone(e,z)}function L(e,t){return t!=I?t==O?n.clone(e,F):e:void e.parentNode.removeChild(e)}function D(){return n.create("body",null,g()).outerText}var M=this,H=n.doc,P=0,O=1,I=2,F=!0,z=!1,W="startOffset",V="startContainer",U="endContainer",q="endOffset",$=e.extend,j=n.nodeIndex;return $(M,{startContainer:H,startOffset:0,endContainer:H,endOffset:0,collapsed:F,commonAncestorContainer:H,START_TO_START:0,START_TO_END:1,END_TO_END:2,END_TO_START:3,setStart:i,setEnd:o,setStartBefore:a,setStartAfter:s,setEndBefore:l,setEndAfter:c,collapse:u,selectNode:d,selectNodeContents:f,compareBoundaryPoints:p,deleteContents:m,extractContents:h,cloneContents:g,insertNode:v,surroundContents:y,cloneRange:b,toStringIE:D}),M}return t.prototype.toString=function(){return this.toStringIE()},t}),r(h,[p],function(e){function t(e){var t;return t=document.createElement("div"),t.innerHTML=e,t.textContent||t.innerText||e}function n(e,t){var n,r,i,a={};if(e){for(e=e.split(","),t=t||10,n=0;n\"\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,l=/[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,c=/[<>&\"\']/g,u=/&(#x|#)?([\w]+);/g,d={128:"\u20ac",130:"\u201a",131:"\u0192",132:"\u201e",133:"\u2026",134:"\u2020",135:"\u2021",136:"\u02c6",137:"\u2030",138:"\u0160",139:"\u2039",140:"\u0152",142:"\u017d",145:"\u2018",146:"\u2019",147:"\u201c",148:"\u201d",149:"\u2022",150:"\u2013",151:"\u2014",152:"\u02dc",153:"\u2122",154:"\u0161",155:"\u203a",156:"\u0153",158:"\u017e",159:"\u0178"};o={'"':""","'":"'","<":"<",">":">","&":"&"},a={"<":"<",">":">","&":"&",""":'"',"'":"'"},i=n("50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,t9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro",32);var f={encodeRaw:function(e,t){return e.replace(t?s:l,function(e){return o[e]||e})},encodeAllRaw:function(e){return(""+e).replace(c,function(e){return o[e]||e})},encodeNumeric:function(e,t){return e.replace(t?s:l,function(e){return e.length>1?"&#"+(1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320)+65536)+";":o[e]||"&#"+e.charCodeAt(0)+";"})},encodeNamed:function(e,t,n){return n=n||i,e.replace(t?s:l,function(e){return o[e]||n[e]||e})},getEncodeFunc:function(e,t){function a(e,n){return e.replace(n?s:l,function(e){return o[e]||t[e]||"&#"+e.charCodeAt(0)+";"||e})}function c(e,n){return f.encodeNamed(e,n,t)}return t=n(t)||i,e=r(e.replace(/\+/g,",")),e.named&&e.numeric?a:e.named?t?c:f.encodeNamed:e.numeric?f.encodeNumeric:f.encodeRaw},decode:function(e){return e.replace(u,function(e,n,r){return n?(r=parseInt(r,2===n.length?16:10),r>65535?(r-=65536,String.fromCharCode(55296+(r>>10),56320+(1023&r))):d[r]||String.fromCharCode(r)):a[e]||i[e]||t(e)})}};return f}),r(g,[],function(){var e=navigator,t=e.userAgent,n,r,i,o,a,s,l;n=window.opera&&window.opera.buildNumber,r=/WebKit/.test(t),i=!r&&!n&&/MSIE/gi.test(t)&&/Explorer/gi.test(e.appName),i=i&&/MSIE (\w+)\./.exec(t)[1],o=-1==t.indexOf("Trident/")||-1==t.indexOf("rv:")&&-1==e.appName.indexOf("Netscape")?!1:11,i=i||o,a=!r&&!o&&/Gecko/.test(t),s=-1!=t.indexOf("Mac"),l=/(iPad|iPhone)/.test(t);var c=!l||t.match(/AppleWebKit\/(\d*)/)[1]>=534;return{opera:n,webkit:r,ie:i,gecko:a,mac:s,iOS:l,contentEditable:c,transparentSrc:"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",caretAfter:8!=i,range:window.getSelection&&"Range"in window,documentMode:i?document.documentMode||7:10}}),r(v,[],function(){return function(e,t){function n(t){e.getElementsByTagName("head")[0].appendChild(t)}function r(t,r,s){function l(){for(var e=v.passed,t=e.length;t--;)e[t]();v.status=2,v.passed=[],v.failed=[]}function c(){for(var e=v.failed,t=e.length;t--;)e[t]();v.status=3,v.passed=[],v.failed=[]}function u(){var e=navigator.userAgent.match(/WebKit\/(\d*)/);return!!(e&&e[1]<536)}function d(e,t){e()||((new Date).getTime()-g0)return h=e.createElement("style"),h.textContent='@import "'+t+'"',p(),void n(h);f()}n(m),m.href=t}}var i=0,o={},a;t=t||{},a=t.maxLoadTime||5e3,this.load=r}}),r(y,[c,d,l,f,m,h,g,p,v],function(e,n,r,i,o,a,s,l,c){function u(e,t){var i=this,o;i.doc=e,i.win=window,i.files={},i.counter=0,i.stdMode=!v||e.documentMode>=8,i.boxModel=!v||"CSS1Compat"==e.compatMode||i.stdMode,i.hasOuterHTML="outerHTML"in e.createElement("a"),i.styleSheetLoader=new c(e),this.boundEvents=[],i.settings=t=h({keep_values:!1,hex_colors:1},t),i.schema=t.schema,i.styles=new n({url_converter:t.url_converter,url_converter_scope:t.url_converter_scope},t.schema),i.fixDoc(e),i.events=t.ownEvents?new r(t.proxy):r.Event,o=t.schema?t.schema.getBlockElements():{},i.isBlock=function(e){if(!e)return!1;var t=e.nodeType;return t?!(1!==t||!o[e.nodeName]):!!o[e]}}var d=l.each,f=l.is,p=l.grep,m=l.trim,h=l.extend,g=s.webkit,v=s.ie,y=/^([a-z0-9],?)+$/i,b=/^[ \t\r\n]*$/,C=l.makeMap("fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom"," ");return u.prototype={root:null,props:{"for":"htmlFor","class":"className",className:"className",checked:"checked",disabled:"disabled",maxlength:"maxLength",readonly:"readOnly",selected:"selected",value:"value",id:"id",name:"name",type:"type"},fixDoc:function(e){var t=this.settings,n;if(v&&t.schema){"abbr article aside audio canvas details figcaption figure footer header hgroup mark menu meter nav output progress section summary time video".replace(/\w+/g,function(t){e.createElement(t)});for(n in t.schema.getCustomElements())e.createElement(n)}},clone:function(e,t){var n=this,r,i;return!v||1!==e.nodeType||t?e.cloneNode(t):(i=n.doc,t?r.firstChild:(r=i.createElement(e.nodeName),d(n.getAttribs(e),function(t){n.setAttrib(r,t.nodeName,n.getAttrib(e,t.nodeName))}),r))},getRoot:function(){var e=this;return e.get(e.settings.root_element)||e.doc.body},getViewPort:function(e){var t,n;return e=e?e:this.win,t=e.document,n=this.boxModel?t.documentElement:t.body,{x:e.pageXOffset||n.scrollLeft,y:e.pageYOffset||n.scrollTop,w:e.innerWidth||n.clientWidth,h:e.innerHeight||n.clientHeight}},getRect:function(e){var t=this,n,r;return e=t.get(e),n=t.getPos(e),r=t.getSize(e),{x:n.x,y:n.y,w:r.w,h:r.h}},getSize:function(e){var t=this,n,r;return e=t.get(e),n=t.getStyle(e,"width"),r=t.getStyle(e,"height"),-1===n.indexOf("px")&&(n=0),-1===r.indexOf("px")&&(r=0),{w:parseInt(n,10)||e.offsetWidth||e.clientWidth,h:parseInt(r,10)||e.offsetHeight||e.clientHeight}},getParent:function(e,t,n){return this.getParents(e,t,n,!1)},getParents:function(e,n,r,i){var o=this,a,s=[];for(e=o.get(e),i=i===t,r=r||("BODY"!=o.getRoot().nodeName?o.getRoot().parentNode:null),f(n,"string")&&(a=n,n="*"===n?function(e){return 1==e.nodeType}:function(e){return o.is(e,a)});e&&e!=r&&e.nodeType&&9!==e.nodeType;){if(!n||n(e)){if(!i)return e;s.push(e)}e=e.parentNode}return i?s:null},get:function(e){var t;return e&&this.doc&&"string"==typeof e&&(t=e,e=this.doc.getElementById(e),e&&e.id!==t)?this.doc.getElementsByName(t)[1]:e},getNext:function(e,t){return this._findSib(e,t,"nextSibling")},getPrev:function(e,t){return this._findSib(e,t,"previousSibling")},select:function(t,n){var r=this;return e(t,r.get(n)||r.get(r.settings.root_element)||r.doc,[])},is:function(n,r){var i;if(n.length===t){if("*"===r)return 1==n.nodeType;if(y.test(r)){for(r=r.toLowerCase().split(/,/),n=n.nodeName.toLowerCase(),i=r.length-1;i>=0;i--)if(r[i]==n)return!0;return!1}}if(n.nodeType&&1!=n.nodeType)return!1;var o=n.nodeType?[n]:n;return e(r,o[0].ownerDocument||o[0],null,o).length>0},add:function(e,t,n,r,i){var o=this;return this.run(e,function(e){var a;return a=f(t,"string")?o.doc.createElement(t):t,o.setAttribs(a,n),r&&(r.nodeType?a.appendChild(r):o.setHTML(a,r)),i?a:e.appendChild(a)})},create:function(e,t,n){return this.add(this.doc.createElement(e),e,t,n,1)},createHTML:function(e,t,n){var r="",i;r+="<"+e;for(i in t)t.hasOwnProperty(i)&&null!==t[i]&&(r+=" "+i+'="'+this.encode(t[i])+'"');return"undefined"!=typeof n?r+">"+n+"":r+" />"},createFragment:function(e){var t,n,r=this.doc,i;for(i=r.createElement("div"),t=r.createDocumentFragment(),e&&(i.innerHTML=e);n=i.firstChild;)t.appendChild(n);return t},remove:function(e,t){return this.run(e,function(e){var n,r=e.parentNode;if(!r)return null;if(t)for(;n=e.firstChild;)!v||3!==n.nodeType||n.nodeValue?r.insertBefore(n,e):e.removeChild(n);return r.removeChild(e)})},setStyle:function(e,t,n){return this.run(e,function(e){var r=this,i,o;if(t)if("string"==typeof t){i=e.style,t=t.replace(/-(\D)/g,function(e,t){return t.toUpperCase()}),"number"!=typeof n||C[t]||(n+="px"),"opacity"===t&&e.runtimeStyle&&"undefined"==typeof e.runtimeStyle.opacity&&(i.filter=""===n?"":"alpha(opacity="+100*n+")"),"float"==t&&(t="cssFloat"in e.style?"cssFloat":"styleFloat");try{i[t]=n}catch(a){}r.settings.update_styles&&e.removeAttribute("data-mce-style")}else for(o in t)r.setStyle(e,o,t[o])})},getStyle:function(e,n,r){if(e=this.get(e)){if(this.doc.defaultView&&r){n=n.replace(/[A-Z]/g,function(e){return"-"+e});try{return this.doc.defaultView.getComputedStyle(e,null).getPropertyValue(n)}catch(i){return null}}return n=n.replace(/-(\D)/g,function(e,t){return t.toUpperCase()}),"float"==n&&(n=v?"styleFloat":"cssFloat"),e.currentStyle&&r?e.currentStyle[n]:e.style?e.style[n]:t}},setStyles:function(e,t){this.setStyle(e,t)},css:function(e,t,n){this.setStyle(e,t,n)},removeAllAttribs:function(e){return this.run(e,function(e){var t,n=e.attributes;for(t=n.length-1;t>=0;t--)e.removeAttributeNode(n.item(t))})},setAttrib:function(e,t,n){var r=this;if(e&&t)return this.run(e,function(e){var i=r.settings,o=e.getAttribute(t);if(null!==n)switch(t){case"style":if(!f(n,"string"))return void d(n,function(t,n){r.setStyle(e,n,t)});i.keep_values&&(n?e.setAttribute("data-mce-style",n,2):e.removeAttribute("data-mce-style",2)),e.style.cssText=n;break;case"class":e.className=n||"";break;case"src":case"href":i.keep_values&&(i.url_converter&&(n=i.url_converter.call(i.url_converter_scope||r,n,t,e)),r.setAttrib(e,"data-mce-"+t,n,2));break;case"shape":e.setAttribute("data-mce-style",n)}f(n)&&null!==n&&0!==n.length?e.setAttribute(t,""+n,2):e.removeAttribute(t,2),o!=n&&i.onSetAttrib&&i.onSetAttrib({attrElm:e,attrName:t,attrValue:n})})},setAttribs:function(e,t){var n=this;return this.run(e,function(e){d(t,function(t,r){n.setAttrib(e,r,t)})})},getAttrib:function(e,t,n){var r,i=this,o;if(e=i.get(e),!e||1!==e.nodeType)return n===o?!1:n;if(f(n)||(n=""),/^(src|href|style|coords|shape)$/.test(t)&&(r=e.getAttribute("data-mce-"+t)))return r;if(v&&i.props[t]&&(r=e[i.props[t]],r=r&&r.nodeValue?r.nodeValue:r),r||(r=e.getAttribute(t,2)),/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(t))return e[i.props[t]]===!0&&""===r?t:r?t:"";if("FORM"===e.nodeName&&e.getAttributeNode(t))return e.getAttributeNode(t).nodeValue;if("style"===t&&(r=r||e.style.cssText,r&&(r=i.serializeStyle(i.parseStyle(r),e.nodeName),i.settings.keep_values&&e.setAttribute("data-mce-style",r))),g&&"class"===t&&r&&(r=r.replace(/(apple|webkit)\-[a-z\-]+/gi,"")),v)switch(t){case"rowspan":case"colspan":1===r&&(r="");break;case"size":("+0"===r||20===r||0===r)&&(r="");break;case"width":case"height":case"vspace":case"checked":case"disabled":case"readonly":0===r&&(r="");break;case"hspace":-1===r&&(r="");break;case"maxlength":case"tabindex":(32768===r||2147483647===r||"32768"===r)&&(r="");break;case"multiple":case"compact":case"noshade":case"nowrap":return 65535===r?t:n;case"shape":r=r.toLowerCase();break;default:0===t.indexOf("on")&&r&&(r=(""+r).replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/,"$1"))}return r!==o&&null!==r&&""!==r?""+r:n},getPos:function(e,t){var n=this,r=0,i=0,o,a=n.doc,s;if(e=n.get(e),t=t||a.body,e){if(t===a.body&&e.getBoundingClientRect)return s=e.getBoundingClientRect(),t=n.boxModel?a.documentElement:a.body,r=s.left+(a.documentElement.scrollLeft||a.body.scrollLeft)-t.clientLeft,i=s.top+(a.documentElement.scrollTop||a.body.scrollTop)-t.clientTop,{x:r,y:i};for(o=e;o&&o!=t&&o.nodeType;)r+=o.offsetLeft||0,i+=o.offsetTop||0,o=o.offsetParent;for(o=e.parentNode;o&&o!=t&&o.nodeType;)r-=o.scrollLeft||0,i-=o.scrollTop||0,o=o.parentNode}return{x:r,y:i}},parseStyle:function(e){return this.styles.parse(e)},serializeStyle:function(e,t){return this.styles.serialize(e,t)},addStyle:function(e){var t=this,n=t.doc,r,i;if(t!==u.DOM&&n===document){var o=u.DOM.addedStyles;if(o=o||[],o[e])return;o[e]=!0,u.DOM.addedStyles=o}i=n.getElementById("mceDefaultStyles"),i||(i=n.createElement("style"),i.id="mceDefaultStyles",i.type="text/css",r=n.getElementsByTagName("head")[0],r.firstChild?r.insertBefore(i,r.firstChild):r.appendChild(i)),i.styleSheet?i.styleSheet.cssText+=e:i.appendChild(n.createTextNode(e))},loadCSS:function(e){var t=this,n=t.doc,r;return t!==u.DOM&&n===document?void u.DOM.loadCSS(e):(e||(e=""),r=n.getElementsByTagName("head")[0],void d(e.split(","),function(e){var i;t.files[e]||(t.files[e]=!0,i=t.create("link",{rel:"stylesheet",href:e}),v&&n.documentMode&&n.recalc&&(i.onload=function(){n.recalc&&n.recalc(),i.onload=null}),r.appendChild(i))}))},addClass:function(e,t){return this.run(e,function(e){var n;return t?this.hasClass(e,t)?e.className:(n=this.removeClass(e,t),e.className=n=(""!==n?n+" ":"")+t,n):0})},removeClass:function(e,t){var n=this,r;return n.run(e,function(e){var i;return n.hasClass(e,t)?(r||(r=new RegExp("(^|\\s+)"+t+"(\\s+|$)","g")),i=e.className.replace(r," "),i=m(" "!=i?i:""),e.className=i,i||(e.removeAttribute("class"),e.removeAttribute("className")),i):e.className})},hasClass:function(e,t){return e=this.get(e),e&&t?-1!==(" "+e.className+" ").indexOf(" "+t+" "):!1},toggleClass:function(e,n,r){r=r===t?!this.hasClass(e,n):r,this.hasClass(e,n)!==r&&(r?this.addClass(e,n):this.removeClass(e,n))},show:function(e){return this.setStyle(e,"display","block")},hide:function(e){return this.setStyle(e,"display","none")},isHidden:function(e){return e=this.get(e),!e||"none"==e.style.display||"none"==this.getStyle(e,"display")},uniqueId:function(e){return(e?e:"mce_")+this.counter++},setHTML:function(e,t){var n=this;return n.run(e,function(e){if(v){for(;e.firstChild;)e.removeChild(e.firstChild);try{e.innerHTML="
    "+t,e.removeChild(e.firstChild)}catch(r){var i=n.create("div");i.innerHTML="
    "+t,d(p(i.childNodes),function(t,n){n&&e.canHaveHTML&&e.appendChild(t)})}}else e.innerHTML=t;return t})},getOuterHTML:function(e){var t,n=this;return(e=n.get(e))?1===e.nodeType&&n.hasOuterHTML?e.outerHTML:(t=(e.ownerDocument||n.doc).createElement("body"),t.appendChild(e.cloneNode(!0)),t.innerHTML):null},setOuterHTML:function(e,t,n){var r=this;return r.run(e,function(e){function i(){var i,o;for(o=n.createElement("body"),o.innerHTML=t,i=o.lastChild;i;)r.insertAfter(i.cloneNode(!0),e),i=i.previousSibling;r.remove(e)}if(1==e.nodeType)if(n=n||e.ownerDocument||r.doc,v)try{1==e.nodeType&&r.hasOuterHTML?e.outerHTML=t:i()}catch(o){i()}else i()})},decode:a.decode,encode:a.encodeAllRaw,insertAfter:function(e,t){return t=this.get(t),this.run(e,function(e){var n,r;return n=t.parentNode,r=t.nextSibling,r?n.insertBefore(e,r):n.appendChild(e),e})},replace:function(e,t,n){var r=this;return r.run(t,function(t){return f(t,"array")&&(e=e.cloneNode(!0)),n&&d(p(t.childNodes),function(t){e.appendChild(t)}),t.parentNode.replaceChild(e,t)})},rename:function(e,t){var n=this,r;return e.nodeName!=t.toUpperCase()&&(r=n.create(t),d(n.getAttribs(e),function(t){n.setAttrib(r,t.nodeName,n.getAttrib(e,t.nodeName))}),n.replace(r,e,1)),r||e},findCommonAncestor:function(e,t){for(var n=e,r;n;){for(r=t;r&&n!=r;)r=r.parentNode;if(n==r)break;n=n.parentNode}return!n&&e.ownerDocument?e.ownerDocument.documentElement:n},toHex:function(e){return this.styles.toHex(l.trim(e))},run:function(e,t,n){var r=this,i;return"string"==typeof e&&(e=r.get(e)),e?(n=n||this,e.nodeType||!e.length&&0!==e.length?t.call(n,e):(i=[],d(e,function(e,o){e&&("string"==typeof e&&(e=r.get(e)),i.push(t.call(n,e,o)))}),i)):!1},getAttribs:function(e){var t;if(e=this.get(e),!e)return[];if(v){if(t=[],"OBJECT"==e.nodeName)return e.attributes;"OPTION"===e.nodeName&&this.getAttrib(e,"selected")&&t.push({specified:1,nodeName:"selected"});var n=/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi;return e.cloneNode(!1).outerHTML.replace(n,"").replace(/[\w:\-]+/gi,function(e){t.push({specified:1,nodeName:e})}),t}return e.attributes},isEmpty:function(e,t){var n=this,r,o,a,s,l,c=0;if(e=e.firstChild){s=new i(e,e.parentNode),t=t||n.schema?n.schema.getNonEmptyElements():null;do{if(a=e.nodeType,1===a){if(e.getAttribute("data-mce-bogus"))continue;if(l=e.nodeName.toLowerCase(),t&&t[l]){if("br"===l){c++;continue}return!1}for(o=n.getAttribs(e),r=e.attributes.length;r--;)if(l=e.attributes[r].nodeName,"name"===l||"data-mce-bookmark"===l)return!1}if(8==a)return!1;if(3===a&&!b.test(e.nodeValue))return!1}while(e=s.next())}return 1>=c},createRng:function(){var e=this.doc;return e.createRange?e.createRange():new o(this)},nodeIndex:function(e,t){var n=0,r,i;if(e)for(r=e.nodeType,e=e.previousSibling;e;e=e.previousSibling)i=e.nodeType,(!t||3!=i||i!=r&&e.nodeValue.length)&&(n++,r=i);return n},split:function(e,t,n){function r(e){function t(e){var t=e.previousSibling&&"SPAN"==e.previousSibling.nodeName,n=e.nextSibling&&"SPAN"==e.nextSibling.nodeName;return t&&n}var n,o=e.childNodes,a=e.nodeType;if(1!=a||"bookmark"!=e.getAttribute("data-mce-type")){for(n=o.length-1;n>=0;n--)r(o[n]);if(9!=a){if(3==a&&e.nodeValue.length>0){var s=m(e.nodeValue).length;if(!i.isBlock(e.parentNode)||s>0||0===s&&t(e))return}else if(1==a&&(o=e.childNodes,1==o.length&&o[0]&&1==o[0].nodeType&&"bookmark"==o[0].getAttribute("data-mce-type")&&e.parentNode.insertBefore(o[0],e),o.length||/^(br|hr|input|img)$/i.test(e.nodeName)))return;i.remove(e)}return e}}var i=this,o=i.createRng(),a,s,l;return e&&t?(o.setStart(e.parentNode,i.nodeIndex(e)),o.setEnd(t.parentNode,i.nodeIndex(t)),a=o.extractContents(),o=i.createRng(),o.setStart(t.parentNode,i.nodeIndex(t)+1),o.setEnd(e.parentNode,i.nodeIndex(e)+1),s=o.extractContents(),l=e.parentNode,l.insertBefore(r(a),e),n?l.replaceChild(n,t):l.insertBefore(t,e),l.insertBefore(r(s),e),i.remove(e),n||t):void 0},bind:function(e,t,n,r){var i=this;if(l.isArray(e)){for(var o=e.length;o--;)e[o]=i.bind(e[o],t,n,r);return e}return!i.settings.collect||e!==i.doc&&e!==i.win||i.boundEvents.push([e,t,n,r]),i.events.bind(e,t,n,r||i)},unbind:function(e,t,n){var r=this,i;if(l.isArray(e)){for(i=e.length;i--;)e[i]=r.unbind(e[i],t,n);return e}if(r.boundEvents&&(e===r.doc||e===r.win))for(i=r.boundEvents.length;i--;){var o=r.boundEvents[i];e!=o[0]||t&&t!=o[1]||n&&n!=o[2]||this.events.unbind(o[0],o[1],o[2])}return this.events.unbind(e,t,n)},fire:function(e,t,n){return this.events.fire(e,t,n)},getContentEditable:function(e){var t;return 1!=e.nodeType?null:(t=e.getAttribute("data-mce-contenteditable"),t&&"inherit"!==t?t:"inherit"!==e.contentEditable?e.contentEditable:null)},destroy:function(){var t=this;if(t.boundEvents){for(var n=t.boundEvents.length;n--;){var r=t.boundEvents[n];this.events.unbind(r[0],r[1],r[2])}t.boundEvents=null}e.setDocument&&e.setDocument(),t.win=t.doc=t.root=t.events=t.frag=null},dumpRng:function(e){return"startContainer: "+e.startContainer.nodeName+", startOffset: "+e.startOffset+", endContainer: "+e.endContainer.nodeName+", endOffset: "+e.endOffset},_findSib:function(e,t,n){var r=this,i=t;if(e)for("string"==typeof i&&(i=function(e){return r.is(e,t)}),e=e[n];e;e=e[n])if(i(e))return e;return null}},u.DOM=new u(document),u}),r(b,[y,p],function(e,t){function n(){function e(e,t){function n(){o.remove(s),a&&(a.onreadystatechange=a.onload=a=null),t() +}function i(){"undefined"!=typeof console&&console.log&&console.log("Failed to load: "+e)}var o=r,a,s;s=o.uniqueId(),a=document.createElement("script"),a.id=s,a.type="text/javascript",a.src=e,"onreadystatechange"in a?a.onreadystatechange=function(){/loaded|complete/.test(a.readyState)&&n()}:a.onload=n,a.onerror=i,(document.getElementsByTagName("head")[0]||document.body).appendChild(a)}var t=0,n=1,a=2,s={},l=[],c={},u=[],d=0,f;this.isDone=function(e){return s[e]==a},this.markDone=function(e){s[e]=a},this.add=this.load=function(e,n,r){var i=s[e];i==f&&(l.push(e),s[e]=t),n&&(c[e]||(c[e]=[]),c[e].push({func:n,scope:r||this}))},this.loadQueue=function(e,t){this.loadScripts(l,e,t)},this.loadScripts=function(t,r,l){function p(e){i(c[e],function(e){e.func.call(e.scope)}),c[e]=f}var m;u.push({func:r,scope:l||this}),(m=function(){var r=o(t);t.length=0,i(r,function(t){return s[t]==a?void p(t):void(s[t]!=n&&(s[t]=n,d++,e(t,function(){s[t]=a,d--,p(t),m()})))}),d||(i(u,function(e){e.func.call(e.scope)}),u.length=0)})()}}var r=e.DOM,i=t.each,o=t.grep;return n.ScriptLoader=new n,n}),r(C,[b,p],function(e,n){function r(){var e=this;e.items=[],e.urls={},e.lookup={}}var i=n.each;return r.prototype={get:function(e){return this.lookup[e]?this.lookup[e].instance:t},dependencies:function(e){var t;return this.lookup[e]&&(t=this.lookup[e].dependencies),t||[]},requireLangPack:function(t,n){if(r.language&&r.languageLoad!==!1){if(n&&new RegExp("([, ]|\\b)"+r.language+"([, ]|\\b)").test(n)===!1)return;e.ScriptLoader.add(this.urls[t]+"/langs/"+r.language+".js")}},add:function(e,t,n){return this.items.push(t),this.lookup[e]={instance:t,dependencies:n},t},createUrl:function(e,t){return"object"==typeof t?t:{prefix:e.prefix,resource:t,suffix:e.suffix}},addComponents:function(t,n){var r=this.urls[t];i(n,function(t){e.ScriptLoader.add(r+"/"+t)})},load:function(n,o,a,s){function l(){var r=c.dependencies(n);i(r,function(e){var n=c.createUrl(o,e);c.load(n.resource,n,t,t)}),a&&a.call(s?s:e)}var c=this,u=o;c.urls[n]||("object"==typeof o&&(u=o.prefix+o.resource+o.suffix),0!==u.indexOf("/")&&-1==u.indexOf("://")&&(u=r.baseURL+"/"+u),c.urls[n]=u.substring(0,u.lastIndexOf("/")),c.lookup[n]?l():e.ScriptLoader.add(u,l,s))}},r.PluginManager=new r,r.ThemeManager=new r,r}),r(x,[],function(){function e(e,t,n){var r,i,o=n?"lastChild":"firstChild",a=n?"prev":"next";if(e[o])return e[o];if(e!==t){if(r=e[a])return r;for(i=e.parent;i&&i!==t;i=i.parent)if(r=i[a])return r}}function t(e,t){this.name=e,this.type=t,1===t&&(this.attributes=[],this.attributes.map={})}var n=/^[ \t\r\n]*$/,r={"#text":3,"#comment":8,"#cdata":4,"#pi":7,"#doctype":10,"#document-fragment":11};return t.prototype={replace:function(e){var t=this;return e.parent&&e.remove(),t.insert(e,t),t.remove(),t},attr:function(e,t){var n=this,r,i,o;if("string"!=typeof e){for(i in e)n.attr(i,e[i]);return n}if(r=n.attributes){if(t!==o){if(null===t){if(e in r.map)for(delete r.map[e],i=r.length;i--;)if(r[i].name===e)return r=r.splice(i,1),n;return n}if(e in r.map){for(i=r.length;i--;)if(r[i].name===e){r[i].value=t;break}}else r.push({name:e,value:t});return r.map[e]=t,n}return r.map[e]}},clone:function(){var e=this,n=new t(e.name,e.type),r,i,o,a,s;if(o=e.attributes){for(s=[],s.map={},r=0,i=o.length;i>r;r++)a=o[r],"id"!==a.name&&(s[s.length]={name:a.name,value:a.value},s.map[a.name]=a.value);n.attributes=s}return n.value=e.value,n.shortEnded=e.shortEnded,n},wrap:function(e){var t=this;return t.parent.insert(e,t),e.append(t),t},unwrap:function(){var e=this,t,n;for(t=e.firstChild;t;)n=t.next,e.insert(t,e,!0),t=n;e.remove()},remove:function(){var e=this,t=e.parent,n=e.next,r=e.prev;return t&&(t.firstChild===e?(t.firstChild=n,n&&(n.prev=null)):r.next=n,t.lastChild===e?(t.lastChild=r,r&&(r.next=null)):n.prev=r,e.parent=e.next=e.prev=null),e},append:function(e){var t=this,n;return e.parent&&e.remove(),n=t.lastChild,n?(n.next=e,e.prev=n,t.lastChild=e):t.lastChild=t.firstChild=e,e.parent=t,e},insert:function(e,t,n){var r;return e.parent&&e.remove(),r=t.parent||this,n?(t===r.firstChild?r.firstChild=e:t.prev.next=e,e.prev=t.prev,e.next=t,t.prev=e):(t===r.lastChild?r.lastChild=e:t.next.prev=e,e.next=t.next,e.prev=t,t.next=e),e.parent=r,e},getAll:function(t){var n=this,r,i=[];for(r=n.firstChild;r;r=e(r,n))r.name===t&&i.push(r);return i},empty:function(){var t=this,n,r,i;if(t.firstChild){for(n=[],i=t.firstChild;i;i=e(i,t))n.push(i);for(r=n.length;r--;)i=n[r],i.parent=i.firstChild=i.lastChild=i.next=i.prev=null}return t.firstChild=t.lastChild=null,t},isEmpty:function(t){var r=this,i=r.firstChild,o,a;if(i)do{if(1===i.type){if(i.attributes.map["data-mce-bogus"])continue;if(t[i.name])return!1;for(o=i.attributes.length;o--;)if(a=i.attributes[o].name,"name"===a||0===a.indexOf("data-mce-"))return!1}if(8===i.type)return!1;if(3===i.type&&!n.test(i.value))return!1}while(i=e(i,r));return!0},walk:function(t){return e(this,null,t)}},t.create=function(e,n){var i,o;if(i=new t(e,r[e]||1),n)for(o in n)i.attr(o,n[o]);return i},t}),r(w,[p],function(e){function t(e,t){return e?e.split(t||" "):[]}function n(e){function n(e,n,r){function i(e){var t={},n,r;for(n=0,r=e.length;r>n;n++)t[e[n]]={};return t}var o,l,c,u=arguments;for(r=r||[],n=n||"","string"==typeof r&&(r=t(r)),l=3;lo;o++)i.attributes[n[o]]={},i.attributesOrder.push(n[o])}var a={},s,l,c,u,d,f;return r[e]?r[e]:(s=t("id accesskey class dir lang style tabindex title"),l=t("address blockquote div dl fieldset form h1 h2 h3 h4 h5 h6 hr menu ol p pre table ul"),c=t("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"),"html4"!=e&&(s.push.apply(s,t("contenteditable contextmenu draggable dropzone hidden spellcheck translate")),l.push.apply(l,t("article aside details dialog figure header footer hgroup section nav")),c.push.apply(c,t("audio canvas command datalist mark meter output progress time wbr video ruby bdi keygen"))),"html5-strict"!=e&&(s.push("xml:lang"),f=t("acronym applet basefont big font strike tt"),c.push.apply(c,f),o(f,function(e){n(e,"",c)}),d=t("center dir isindex noframes"),l.push.apply(l,d),u=[].concat(l,c),o(d,function(e){n(e,"",u)})),u=u||[].concat(l,c),n("html","manifest","head body"),n("head","","base command link meta noscript script style title"),n("title hr noscript br"),n("base","href target"),n("link","href rel media hreflang type sizes hreflang"),n("meta","name http-equiv content charset"),n("style","media type scoped"),n("script","src async defer type charset"),n("body","onafterprint onbeforeprint onbeforeunload onblur onerror onfocus onhashchange onload onmessage onoffline ononline onpagehide onpageshow onpopstate onresize onscroll onstorage onunload",u),n("address dt dd div caption","",u),n("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","",c),n("blockquote","cite",u),n("ol","reversed start type","li"),n("ul","","li"),n("li","value",u),n("dl","","dt dd"),n("a","href target rel media hreflang type",c),n("q","cite",c),n("ins del","cite datetime",u),n("img","src alt usemap ismap width height"),n("iframe","src name width height",u),n("embed","src type width height"),n("object","data type typemustmatch name usemap form width height",u,"param"),n("param","name value"),n("map","name",u,"area"),n("area","alt coords shape href target rel media hreflang type"),n("table","border","caption colgroup thead tfoot tbody tr"+("html4"==e?" col":"")),n("colgroup","span","col"),n("col","span"),n("tbody thead tfoot","","tr"),n("tr","","td th"),n("td","colspan rowspan headers",u),n("th","colspan rowspan headers scope abbr",u),n("form","accept-charset action autocomplete enctype method name novalidate target",u),n("fieldset","disabled form name",u,"legend"),n("label","form for",c),n("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("button","disabled form formaction formenctype formmethod formnovalidate formtarget name type value","html4"==e?u:c),n("select","disabled form multiple name required size","option optgroup"),n("optgroup","disabled label","option"),n("option","disabled label selected value"),n("textarea","cols dirname disabled form maxlength name readonly required rows wrap"),n("menu","type label",u,"li"),n("noscript","",u),"html4"!=e&&(n("wbr"),n("ruby","",c,"rt rp"),n("figcaption","",u),n("mark rt rp summary bdi","",c),n("canvas","width height",u),n("video","src crossorigin poster preload autoplay mediagroup loop muted controls width height",u,"track source"),n("audio","src crossorigin preload autoplay mediagroup loop muted controls",u,"track source"),n("source","src type media"),n("track","kind src srclang label default"),n("datalist","",c,"option"),n("article section nav aside header footer","",u),n("hgroup","","h1 h2 h3 h4 h5 h6"),n("figure","",u,"figcaption"),n("time","datetime",c),n("dialog","open",u),n("command","type label icon disabled checked radiogroup command"),n("output","for form name",c),n("progress","value max",c),n("meter","value min max low high optimum",c),n("details","open",u,"summary"),n("keygen","autofocus challenge disabled form keytype name")),"html5-strict"!=e&&(i("script","language xml:space"),i("style","xml:space"),i("object","declare classid codebase codetype archive standby align border hspace vspace"),i("param","valuetype type"),i("a","charset name rev shape coords"),i("br","clear"),i("applet","codebase archive code object alt name width height align hspace vspace"),i("img","name longdesc align border hspace vspace"),i("iframe","longdesc frameborder marginwidth marginheight scrolling align"),i("font basefont","size color face"),i("input","usemap align"),i("select","onchange"),i("textarea"),i("h1 h2 h3 h4 h5 h6 div p legend caption","align"),i("ul","type compact"),i("li","type"),i("ol dl menu dir","compact"),i("pre","width xml:space"),i("hr","align noshade size width"),i("isindex","prompt"),i("table","summary width frame rules cellspacing cellpadding align bgcolor"),i("col","width align char charoff valign"),i("colgroup","width align char charoff valign"),i("thead","align char charoff valign"),i("tr","align char charoff valign bgcolor"),i("th","axis align char charoff valign nowrap bgcolor width height"),i("form","accept"),i("td","abbr axis scope align char charoff valign nowrap bgcolor width height"),i("tfoot","align char charoff valign"),i("tbody","align char charoff valign"),i("area","nohref"),i("body","background bgcolor text link vlink alink")),"html4"!=e&&(i("input button select textarea","autofocus"),i("input textarea","placeholder"),i("a","download"),i("link script img","crossorigin"),i("iframe","srcdoc sandbox seamless allowfullscreen")),o(t("a form meter progress dfn"),function(e){a[e]&&delete a[e].children[e]}),delete a.caption.children.table,r[e]=a,a)}var r={},i=e.makeMap,o=e.each,a=e.extend,s=e.explode,l=e.inArray;return function(e){function c(t,n,o){var s=e[t];return s?s=i(s,",",i(s.toUpperCase()," ")):(s=r[t],s||(s=i(n," ",i(n.toUpperCase()," ")),s=a(s,o),r[t]=s)),s}function u(e){return new RegExp("^"+e.replace(/([?+*])/g,".$1")+"$")}function d(e){var n,r,o,a,s,c,d,f,p,m,h,g,y,C,x,w,_,N,E,S=/^([#+\-])?([^\[!\/]+)(?:\/([^\[!]+))?(?:(!?)\[([^\]]+)\])?$/,k=/^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/,T=/[*?+]/;if(e)for(e=t(e,","),v["@"]&&(w=v["@"].attributes,_=v["@"].attributesOrder),n=0,r=e.length;r>n;n++)if(s=S.exec(e[n])){if(C=s[1],p=s[2],x=s[3],f=s[5],g={},y=[],c={attributes:g,attributesOrder:y},"#"===C&&(c.paddEmpty=!0),"-"===C&&(c.removeEmpty=!0),"!"===s[4]&&(c.removeEmptyAttrs=!0),w){for(N in w)g[N]=w[N];y.push.apply(y,_)}if(f)for(f=t(f,"|"),o=0,a=f.length;a>o;o++)if(s=k.exec(f[o])){if(d={},h=s[1],m=s[2].replace(/::/g,":"),C=s[3],E=s[4],"!"===h&&(c.attributesRequired=c.attributesRequired||[],c.attributesRequired.push(m),d.required=!0),"-"===h){delete g[m],y.splice(l(y,m),1);continue}C&&("="===C&&(c.attributesDefault=c.attributesDefault||[],c.attributesDefault.push({name:m,value:E}),d.defaultValue=E),":"===C&&(c.attributesForced=c.attributesForced||[],c.attributesForced.push({name:m,value:E}),d.forcedValue=E),"<"===C&&(d.validValues=i(E,"?"))),T.test(m)?(c.attributePatterns=c.attributePatterns||[],d.pattern=u(m),c.attributePatterns.push(d)):(g[m]||y.push(m),g[m]=d)}w||"@"!=p||(w=g,_=y),x&&(c.outputName=p,v[x]=c),T.test(p)?(c.pattern=u(p),b.push(c)):v[p]=c}}function f(e){v={},b=[],d(e),o(x,function(e,t){y[t]=e.children})}function p(e){var n=/^(~)?(.+)$/;e&&(r.text_block_elements=r.block_elements=null,o(t(e,","),function(e){var t=n.exec(e),r="~"===t[1],i=r?"span":"div",s=t[2];if(y[s]=y[i],R[s]=i,r||(S[s.toUpperCase()]={},S[s]={}),!v[s]){var l=v[i];l=a({},l),delete l.removeEmptyAttrs,delete l.removeEmpty,v[s]=l}o(y,function(e,t){e[i]&&(y[t]=e=a({},y[t]),e[s]=e[i])})}))}function m(e){var n=/^([+\-]?)(\w+)\[([^\]]+)\]$/;e&&o(t(e,","),function(e){var r=n.exec(e),i,s;r&&(s=r[1],i=s?y[r[2]]:y[r[2]]={"#comment":{}},i=y[r[2]],o(t(r[3],"|"),function(e){"-"===s?(y[r[2]]=i=a({},y[r[2]]),delete i[e]):i[e]={}}))})}function h(e){var t=v[e],n;if(t)return t;for(n=b.length;n--;)if(t=b[n],t.pattern.test(e))return t}var g=this,v={},y={},b=[],C,x,w,_,N,E,S,k,T,R={},A={};e=e||{},x=n(e.schema),e.verify_html===!1&&(e.valid_elements="*[*]"),e.valid_styles&&(C={},o(e.valid_styles,function(e,t){C[t]=s(e)})),w=c("whitespace_elements","pre script noscript style textarea video audio iframe object"),_=c("self_closing_elements","colgroup dd dt li option p td tfoot th thead tr"),N=c("short_ended_elements","area base basefont br col frame hr img input isindex link meta param embed source wbr track"),E=c("boolean_attributes","checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls"),k=c("non_empty_elements","td th iframe video audio object script",N),T=c("text_block_elements","h1 h2 h3 h4 h5 h6 p div address pre form blockquote center dir fieldset header footer article section hgroup aside nav figure"),S=c("block_elements","hr table tbody thead tfoot th tr td li ol ul caption dl dt dd noscript menu isindex option datalist select optgroup",T),o((e.special||"script noscript style textarea").split(" "),function(e){A[e]=new RegExp("]*>","gi")}),e.valid_elements?f(e.valid_elements):(o(x,function(e,t){v[t]={attributes:e.attributes,attributesOrder:e.attributesOrder},y[t]=e.children}),"html5"!=e.schema&&o(t("strong/b em/i"),function(e){e=t(e,"/"),v[e[1]].outputName=e[0]}),v.img.attributesDefault=[{name:"alt",value:""}],o(t("ol ul sub sup blockquote span font a table tbody tr strong em b i"),function(e){v[e]&&(v[e].removeEmpty=!0)}),o(t("p h1 h2 h3 h4 h5 h6 th td pre div address caption"),function(e){v[e].paddEmpty=!0}),o(t("span"),function(e){v[e].removeEmptyAttrs=!0})),p(e.custom_elements),m(e.valid_children),d(e.extended_valid_elements),m("+ol[ul|ol],+ul[ul|ol]"),e.invalid_elements&&o(s(e.invalid_elements),function(e){v[e]&&delete v[e]}),h("span")||d("span[!data-mce-type|*]"),g.children=y,g.styles=C,g.getBoolAttrs=function(){return E},g.getBlockElements=function(){return S},g.getTextBlockElements=function(){return T},g.getShortEndedElements=function(){return N},g.getSelfClosingElements=function(){return _},g.getNonEmptyElements=function(){return k},g.getWhiteSpaceElements=function(){return w},g.getSpecialElements=function(){return A},g.isValidChild=function(e,t){var n=y[e];return!(!n||!n[t])},g.isValid=function(e,t){var n,r,i=h(e);if(i){if(!t)return!0;if(i.attributes[t])return!0;if(n=i.attributePatterns)for(r=n.length;r--;)if(n[r].pattern.test(e))return!0}return!1},g.getElementRule=h,g.getCustomElements=function(){return R},g.addValidElements=d,g.setValidElements=f,g.addCustomElements=p,g.addValidChildren=m,g.elements=v}}),r(_,[w,h,p],function(e,t,n){var r=n.each;return function(i,o){function a(){}var s=this;i=i||{},s.schema=o=o||new e,i.fix_self_closing!==!1&&(i.fix_self_closing=!0),r("comment cdata text start end pi doctype".split(" "),function(e){e&&(s[e]=i[e]||a)}),s.parse=function(e){function r(e){var t,n;for(t=f.length;t--&&f[t].name!==e;);if(t>=0){for(n=f.length-1;n>=t;n--)e=f[n],e.valid&&s.end(e.name);f.length=t}}function a(e,t,n,r,o){var a,s,l=/[\s\u0000-\u001F]+/g;if(t=t.toLowerCase(),n=t in C?t:F(n||r||o||""),w&&!v&&0!==t.indexOf("data-")){if(a=k[t],!a&&T){for(s=T.length;s--&&(a=T[s],!a.pattern.test(t)););-1===s&&(a=null)}if(!a)return;if(a.validValues&&!(n in a.validValues))return}if(W[t]&&!i.allow_script_urls){var c=n.replace(l,"");try{if(c=decodeURIComponent(c),V.test(c))return}catch(u){if(c=unescape(c),V.test(c))return}}p.map[t]=n,p.push({name:t,value:n})}var s=this,l,c=0,u,d,f=[],p,m,h,g,v,y,b,C,x,w,_,N,E,S,k,T,R,A,B,L,D,M,H,P,O,I=0,F=t.decode,z,W=n.makeMap("src,href"),V=/(java|vb)script:/i;for(M=new RegExp("<(?:(?:!--([\\w\\W]*?)-->)|(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|(?:!DOCTYPE([\\w\\W]*?)>)|(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|(?:\\/([^>]+)>)|(?:([A-Za-z0-9\\-\\:\\.]+)((?:\\s+[^\"'>]+(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>]*))*|\\/|\\s+)>))","g"),H=/([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g,b=o.getShortEndedElements(),D=i.self_closing_elements||o.getSelfClosingElements(),C=o.getBoolAttrs(),w=i.validate,y=i.remove_internals,z=i.fix_self_closing,P=o.getSpecialElements();l=M.exec(e);){if(c0&&f[f.length-1].name===u&&r(u),!w||(_=o.getElementRule(u))){if(N=!0,w&&(k=_.attributes,T=_.attributePatterns),(S=l[8])?(v=-1!==S.indexOf("data-mce-type"),v&&y&&(N=!1),p=[],p.map={},S.replace(H,a)):(p=[],p.map={}),w&&!v){if(R=_.attributesRequired,A=_.attributesDefault,B=_.attributesForced,L=_.removeEmptyAttrs,L&&!p.length&&(N=!1),B)for(m=B.length;m--;)E=B[m],g=E.name,O=E.value,"{$uid}"===O&&(O="mce_"+I++),p.map[g]=O,p.push({name:g,value:O});if(A)for(m=A.length;m--;)E=A[m],g=E.name,g in p.map||(O=E.value,"{$uid}"===O&&(O="mce_"+I++),p.map[g]=O,p.push({name:g,value:O}));if(R){for(m=R.length;m--&&!(R[m]in p.map););-1===m&&(N=!1)}p.map["data-mce-bogus"]&&(N=!1)}N&&s.start(u,p,x)}else N=!1;if(d=P[u]){d.lastIndex=c=l.index+l[0].length,(l=d.exec(e))?(N&&(h=e.substr(c,l.index-c)),c=l.index+l[0].length):(h=e.substr(c),c=e.length),N&&(h.length>0&&s.text(h,!0),s.end(u)),M.lastIndex=c;continue}x||(S&&S.indexOf("/")==S.length-1?N&&s.end(u):f.push({name:u,valid:N}))}else(u=l[1])?(">"===u.charAt(0)&&(u=" "+u),i.allow_conditional_comments||"[if"!==u.substr(0,3)||(u=" "+u),s.comment(u)):(u=l[2])?s.cdata(u):(u=l[3])?s.doctype(u):(u=l[4])&&s.pi(u,l[5]);c=l.index+l[0].length}for(c=0;m--)u=f[m],u.valid&&s.end(u.name)}}}),r(N,[x,w,_,p],function(e,t,n,r){var i=r.makeMap,o=r.each,a=r.explode,s=r.extend;return function(r,l){function c(t){var n,r,o,a,s,c,d,f,p,m,h,g,v,y;for(h=i("tr,td,th,tbody,thead,tfoot,table"),m=l.getNonEmptyElements(),g=l.getTextBlockElements(),n=0;n1){for(a.reverse(),s=c=u.filterNode(a[0].clone()),p=0;p0?(t.value=n,t=t.prev):(r=t.prev,t.remove(),t=r)}function g(e){var t,n={};for(t in e)"li"!==t&&"p"!=t&&(n[t]=e[t]);return n}var v,y,b,C,x,w,_,N,E,S,k,T,R,A=[],B,L,D,M,H,P,O,I;if(o=o||{},p={},m={},T=s(i("script,style,head,html,body,title,meta,param"),l.getBlockElements()),O=l.getNonEmptyElements(),P=l.children,k=r.validate,I="forced_root_block"in o?o.forced_root_block:r.forced_root_block,H=l.getWhiteSpaceElements(),R=/^[ \t\r\n]+/,L=/[ \t\r\n]+$/,D=/[ \t\r\n]+/g,M=/^[ \t\r\n]+$/,v=new n({validate:k,allow_script_urls:r.allow_script_urls,allow_conditional_comments:r.allow_conditional_comments,self_closing_elements:g(l.getSelfClosingElements()),cdata:function(e){b.append(u("#cdata",4)).value=e},text:function(e,t){var n;B||(e=e.replace(D," "),b.lastChild&&T[b.lastChild.name]&&(e=e.replace(R,""))),0!==e.length&&(n=u("#text",3),n.raw=!!t,b.append(n).value=e)},comment:function(e){b.append(u("#comment",8)).value=e},pi:function(e,t){b.append(u(e,7)).value=t,h(b)},doctype:function(e){var t;t=b.append(u("#doctype",10)),t.value=e,h(b)},start:function(e,t,n){var r,i,o,a,s;if(o=k?l.getElementRule(e):{}){for(r=u(o.outputName||e,1),r.attributes=t,r.shortEnded=n,b.append(r),s=P[b.name],s&&P[r.name]&&!s[r.name]&&A.push(r),i=f.length;i--;)a=f[i].name,a in t.map&&(E=m[a],E?E.push(r):m[a]=[r]);T[e]&&h(r),n||(b=r),!B&&H[e]&&(B=!0)}},end:function(t){var n,r,i,o,a;if(r=k?l.getElementRule(t):{}){if(T[t]&&!B){if(n=b.firstChild,n&&3===n.type)if(i=n.value.replace(R,""),i.length>0)n.value=i,n=n.next;else for(o=n.next,n.remove(),n=o;n&&3===n.type;)i=n.value,o=n.next,(0===i.length||M.test(i))&&(n.remove(),n=o),n=o;if(n=b.lastChild,n&&3===n.type)if(i=n.value.replace(L,""),i.length>0)n.value=i,n=n.prev;else for(o=n.prev,n.remove(),n=o;n&&3===n.type;)i=n.value,o=n.prev,(0===i.length||M.test(i))&&(n.remove(),n=o),n=o}if(B&&H[t]&&(B=!1),(r.removeEmpty||r.paddEmpty)&&b.isEmpty(O))if(r.paddEmpty)b.empty().append(new e("#text","3")).value="\xa0";else if(!b.attributes.map.name&&!b.attributes.map.id)return a=b.parent,b.empty().remove(),void(b=a);b=b.parent}}},l),y=b=new e(o.context||r.root_name,11),v.parse(t),k&&A.length&&(o.context?o.invalid=!0:c(A)),I&&("body"==y.name||o.isRootContent)&&a(),!o.invalid){for(S in p){for(E=d[S],C=p[S],_=C.length;_--;)C[_].parent||C.splice(_,1);for(x=0,w=E.length;w>x;x++)E[x](C,S,o)}for(x=0,w=f.length;w>x;x++)if(E=f[x],E.name in m){for(C=m[E.name],_=C.length;_--;)C[_].parent||C.splice(_,1);for(_=0,N=E.callbacks.length;N>_;_++)E.callbacks[_](C,E.name,o)}}return y},r.remove_trailing_brs&&u.addNodeFilter("br",function(t){var n,r=t.length,i,o=s({},l.getBlockElements()),a=l.getNonEmptyElements(),c,u,d,f,p,m;for(o.body=1,n=0;r>n;n++)if(i=t[n],c=i.parent,o[i.parent.name]&&i===c.lastChild){for(d=i.prev;d;){if(f=d.name,"span"!==f||"bookmark"!==d.attr("data-mce-type")){if("br"!==f)break;if("br"===f){i=null;break}}d=d.prev}i&&(i.remove(),c.isEmpty(a)&&(p=l.getElementRule(c.name),p&&(p.removeEmpty?c.remove():p.paddEmpty&&(c.empty().append(new e("#text",3)).value="\xa0"))))}else{for(u=i;c&&c.firstChild===u&&c.lastChild===u&&(u=c,!o[c.name]);)c=c.parent;u===c&&(m=new e("#text",3),m.value="\xa0",i.replace(m))}}),r.allow_html_in_named_anchor||u.addAttributeFilter("id,name",function(e){for(var t=e.length,n,r,i,o;t--;)if(o=e[t],"a"===o.name&&o.firstChild&&!o.attr("href")){i=o.parent,n=o.lastChild;do r=n.prev,i.insert(n,o),n=r;while(n)}})}}),r(E,[h,p],function(e,t){var n=t.makeMap;return function(t){var r=[],i,o,a,s,l;return t=t||{},i=t.indent,o=n(t.indent_before||""),a=n(t.indent_after||""),s=e.getEncodeFunc(t.entity_encoding||"raw",t.entities),l="html"==t.element_format,{start:function(e,t,n){var c,u,d,f;if(i&&o[e]&&r.length>0&&(f=r[r.length-1],f.length>0&&"\n"!==f&&r.push("\n")),r.push("<",e),t)for(c=0,u=t.length;u>c;c++)d=t[c],r.push(" ",d.name,'="',s(d.value,!0),'"');r[r.length]=!n||l?">":" />",n&&i&&a[e]&&r.length>0&&(f=r[r.length-1],f.length>0&&"\n"!==f&&r.push("\n"))},end:function(e){var t;r.push(""),i&&a[e]&&r.length>0&&(t=r[r.length-1],t.length>0&&"\n"!==t&&r.push("\n"))},text:function(e,t){e.length>0&&(r[r.length]=t?e:s(e))},cdata:function(e){r.push("")},comment:function(e){r.push("")},pi:function(e,t){t?r.push(""):r.push(""),i&&r.push("\n")},doctype:function(e){r.push("",i?"\n":"")},reset:function(){r.length=0},getContent:function(){return r.join("").replace(/\n$/,"")}}}}),r(S,[E,w],function(e,t){return function(n,r){var i=this,o=new e(n);n=n||{},n.validate="validate"in n?n.validate:!0,i.schema=r=r||new t,i.writer=o,i.serialize=function(e){function t(e){var n=i[e.type],s,l,c,u,d,f,p,m,h;if(n)n(e);else{if(s=e.name,l=e.shortEnded,c=e.attributes,a&&c&&c.length>1){for(f=[],f.map={},h=r.getElementRule(e.name),p=0,m=h.attributesOrder.length;m>p;p++)u=h.attributesOrder[p],u in c.map&&(d=c.map[u],f.map[u]=d,f.push({name:u,value:d}));for(p=0,m=c.length;m>p;p++)u=c[p].name,u in f.map||(d=c.map[u],f.map[u]=d,f.push({name:u,value:d}));c=f}if(o.start(e.name,c,l),!l){if(e=e.firstChild)do t(e);while(e=e.next);o.end(s)}}}var i,a;return a=n.validate,i={3:function(e){o.text(e.value,e.raw)},8:function(e){o.comment(e.value)},7:function(e){o.pi(e.name,e.value)},10:function(e){o.doctype(e.value)},4:function(e){o.cdata(e.value)},11:function(e){if(e=e.firstChild)do t(e);while(e=e.next)}},o.reset(),1!=e.type||n.inner?i[11](e):t(e),o.getContent()}}}),r(k,[y,N,h,S,x,w,g,p],function(e,t,n,r,i,o,a,s){var l=s.each,c=s.trim,u=e.DOM;return function(e,i){var s,d,f;return i&&(s=i.dom,d=i.schema),s=s||u,d=d||new o(e),e.entity_encoding=e.entity_encoding||"named",e.remove_trailing_brs="remove_trailing_brs"in e?e.remove_trailing_brs:!0,f=new t(e,d),f.addAttributeFilter("src,href,style",function(t,n){for(var r=t.length,i,o,a="data-mce-"+n,l=e.url_converter,c=e.url_converter_scope,u;r--;)i=t[r],o=i.attributes.map[a],o!==u?(i.attr(n,o.length>0?o:null),i.attr(a,null)):(o=i.attributes.map[n],"style"===n?o=s.serializeStyle(s.parseStyle(o),i.name):l&&(o=l.call(c,o,n,i.name)),i.attr(n,o.length>0?o:null))}),f.addAttributeFilter("class",function(e){for(var t=e.length,n,r;t--;)n=e[t],r=n.attr("class").replace(/(?:^|\s)mce-item-\w+(?!\S)/g,""),n.attr("class",r.length>0?r:null)}),f.addAttributeFilter("data-mce-type",function(e,t,n){for(var r=e.length,i;r--;)i=e[r],"bookmark"!==i.attributes.map["data-mce-type"]||n.cleanup||i.remove()}),f.addAttributeFilter("data-mce-expando",function(e,t){for(var n=e.length;n--;)e[n].attr(t,null)}),f.addNodeFilter("noscript",function(e){for(var t=e.length,r;t--;)r=e[t].firstChild,r&&(r.value=n.decode(r.value))}),f.addNodeFilter("script,style",function(e,t){function n(e){return e.replace(/()/g,"\n").replace(/^[\r\n]*|[\r\n]*$/g,"").replace(/^\s*(()?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g,"")}for(var r=e.length,i,o;r--;)if(i=e[r],o=i.firstChild?i.firstChild.value:"","script"===t){var a=(i.attr("type")||"text/javascript").replace(/^mce\-/,"");i.attr("type","text/javascript"===a?null:a),o.length>0&&(i.firstChild.value="// ")}else o.length>0&&(i.firstChild.value="")}),f.addNodeFilter("#comment",function(e){for(var t=e.length,n;t--;)n=e[t],0===n.value.indexOf("[CDATA[")?(n.name="#cdata",n.type=4,n.value=n.value.replace(/^\[CDATA\[|\]\]$/g,"")):0===n.value.indexOf("mce:protected ")&&(n.name="#text",n.type=3,n.raw=!0,n.value=unescape(n.value).substr(14))}),f.addNodeFilter("xml:namespace,input",function(e,t){for(var n=e.length,r;n--;)r=e[n],7===r.type?r.remove():1===r.type&&("input"!==t||"type"in r.attributes.map||r.attr("type","text"))}),e.fix_list_elements&&f.addNodeFilter("ul,ol",function(e){for(var t=e.length,n,r;t--;)n=e[t],r=n.parent,("ul"===r.name||"ol"===r.name)&&n.prev&&"li"===n.prev.name&&n.prev.append(n)}),f.addAttributeFilter("data-mce-src,data-mce-href,data-mce-style,data-mce-selected",function(e,t){for(var n=e.length;n--;)e[n].attr(t,null)}),{schema:d,addNodeFilter:f.addNodeFilter,addAttributeFilter:f.addAttributeFilter,serialize:function(t,n){var i=this,o,u,p,m,h;return a.ie&&s.select("script,style,select,map").length>0?(h=t.innerHTML,t=t.cloneNode(!1),s.setHTML(t,h)):t=t.cloneNode(!0),o=t.ownerDocument.implementation,o.createHTMLDocument&&(u=o.createHTMLDocument(""),l("BODY"==t.nodeName?t.childNodes:[t],function(e){u.body.appendChild(u.importNode(e,!0))}),t="BODY"!=t.nodeName?u.body.firstChild:u.body,p=s.doc,s.doc=u),n=n||{},n.format=n.format||"html",n.selection&&(n.forced_root_block=""),n.no_events||(n.node=t,i.onPreProcess(n)),m=new r(e,d),n.content=m.serialize(f.parse(c(n.getInner?t.innerHTML:s.getOuterHTML(t)),n)),n.cleanup||(n.content=n.content.replace(/\uFEFF/g,"")),n.no_events||i.onPostProcess(n),p&&(s.doc=p),n.node=null,n.content},addRules:function(e){d.addValidElements(e)},setRules:function(e){d.setValidElements(e)},onPreProcess:function(e){i&&i.fire("PreProcess",e)},onPostProcess:function(e){i&&i.fire("PostProcess",e)}}}}),r(T,[],function(){function e(e){function t(t,n){var r,i=0,o,a,s,l,c,u,d=-1,f;if(r=t.duplicate(),r.collapse(n),f=r.parentElement(),f.ownerDocument===e.dom.doc){for(;"false"===f.contentEditable;)f=f.parentNode;if(!f.hasChildNodes())return{node:f,inside:1};for(s=f.children,o=s.length-1;o>=i;)if(u=Math.floor((i+o)/2),l=s[u],r.moveToElementText(l),d=r.compareEndPoints(n?"StartToStart":"EndToEnd",t),d>0)o=u-1;else{if(!(0>d))return{node:l};i=u+1}if(0>d)for(l?r.collapse(!1):(r.moveToElementText(f),r.collapse(!0),l=f,a=!0),c=0;0!==r.compareEndPoints(n?"StartToStart":"StartToEnd",t)&&0!==r.move("character",1)&&f==r.parentElement();)c++;else for(r.collapse(!0),c=0;0!==r.compareEndPoints(n?"StartToStart":"StartToEnd",t)&&0!==r.move("character",-1)&&f==r.parentElement();)c++;return{node:l,position:d,offset:c,inside:a}}}function n(){function n(e){var n=t(o,e),r,i,s=0,l,c,u;if(r=n.node,i=n.offset,n.inside&&!r.hasChildNodes())return void a[e?"setStart":"setEnd"](r,0);if(i===c)return void a[e?"setStartBefore":"setEndAfter"](r);if(n.position<0){if(l=n.inside?r.firstChild:r.nextSibling,!l)return void a[e?"setStartAfter":"setEndAfter"](r);if(!i)return void(3==l.nodeType?a[e?"setStart":"setEnd"](l,0):a[e?"setStartBefore":"setEndBefore"](l)); +for(;l;){if(u=l.nodeValue,s+=u.length,s>=i){r=l,s-=i,s=u.length-s;break}l=l.nextSibling}}else{if(l=r.previousSibling,!l)return a[e?"setStartBefore":"setEndBefore"](r);if(!i)return void(3==r.nodeType?a[e?"setStart":"setEnd"](l,r.nodeValue.length):a[e?"setStartAfter":"setEndAfter"](l));for(;l;){if(s+=l.nodeValue.length,s>=i){r=l,s-=i;break}l=l.previousSibling}}a[e?"setStart":"setEnd"](r,s)}var o=e.getRng(),a=i.createRng(),s,l,c,u,d;if(s=o.item?o.item(0):o.parentElement(),s.ownerDocument!=i.doc)return a;if(l=e.isCollapsed(),o.item)return a.setStart(s.parentNode,i.nodeIndex(s)),a.setEnd(a.startContainer,a.startOffset+1),a;try{n(!0),l||n()}catch(f){if(-2147024809!=f.number)throw f;d=r.getBookmark(2),c=o.duplicate(),c.collapse(!0),s=c.parentElement(),l||(c=o.duplicate(),c.collapse(!1),u=c.parentElement(),u.innerHTML=u.innerHTML),s.innerHTML=s.innerHTML,r.moveToBookmark(d),o=e.getRng(),n(!0),l||n()}return a}var r=this,i=e.dom,o=!1;this.getBookmark=function(n){function r(e){var t,n,r,o,a=[];for(t=e.parentNode,n=i.getRoot().parentNode;t!=n&&9!==t.nodeType;){for(r=t.children,o=r.length;o--;)if(e===r[o]){a.push(o);break}e=t,t=t.parentNode}return a}function o(e){var n;return n=t(a,e),n?{position:n.position,offset:n.offset,indexes:r(n.node),inside:n.inside}:void 0}var a=e.getRng(),s={};return 2===n&&(a.item?s.start={ctrl:!0,indexes:r(a.item(0))}:(s.start=o(!0),e.isCollapsed()||(s.end=o()))),s},this.moveToBookmark=function(e){function t(e){var t,n,r,o;for(t=i.getRoot(),n=e.length-1;n>=0;n--)o=t.children,r=e[n],r<=o.length-1&&(t=o[r]);return t}function n(n){var i=e[n?"start":"end"],a,s,l,c;i&&(a=i.position>0,s=o.createTextRange(),s.moveToElementText(t(i.indexes)),c=i.offset,c!==l?(s.collapse(i.inside||a),s.moveStart("character",a?-c:c)):s.collapse(n),r.setEndPoint(n?"StartToStart":"EndToStart",s),n&&r.collapse(!0))}var r,o=i.doc.body;e.start&&(e.start.ctrl?(r=o.createControlRange(),r.addElement(t(e.start.indexes)),r.select()):(r=o.createTextRange(),n(!0),n(),r.select()))},this.addRange=function(t){function n(e){var t,n,a,d,m;a=i.create("a"),t=e?s:c,n=e?l:u,d=r.duplicate(),(t==f||t==f.documentElement)&&(t=p,n=0),3==t.nodeType?(t.parentNode.insertBefore(a,t),d.moveToElementText(a),d.moveStart("character",n),i.remove(a),r.setEndPoint(e?"StartToStart":"EndToEnd",d)):(m=t.childNodes,m.length?(n>=m.length?i.insertAfter(a,m[m.length-1]):t.insertBefore(a,m[n]),d.moveToElementText(a)):t.canHaveHTML&&(t.innerHTML="",a=t.firstChild,d.moveToElementText(a),d.collapse(o)),r.setEndPoint(e?"StartToStart":"EndToEnd",d),i.remove(a))}var r,a,s,l,c,u,d,f=e.dom.doc,p=f.body,m,h;if(s=t.startContainer,l=t.startOffset,c=t.endContainer,u=t.endOffset,r=p.createTextRange(),s==c&&1==s.nodeType){if(l==u&&!s.hasChildNodes()){if(s.canHaveHTML)return d=s.previousSibling,d&&!d.hasChildNodes()&&i.isBlock(d)?d.innerHTML="":d=null,s.innerHTML="",r.moveToElementText(s.lastChild),r.select(),i.doc.selection.clear(),s.innerHTML="",void(d&&(d.innerHTML=""));l=i.nodeIndex(s),s=s.parentNode}if(l==u-1)try{if(h=s.childNodes[l],a=p.createControlRange(),a.addElement(h),a.select(),m=e.getRng(),m.item&&h===m.item(0))return}catch(g){}}n(!0),n(),r.select()},this.getRangeAt=n}return e}),r(R,[g],function(e){return{BACKSPACE:8,DELETE:46,DOWN:40,ENTER:13,LEFT:37,RIGHT:39,SPACEBAR:32,TAB:9,UP:38,modifierPressed:function(e){return e.shiftKey||e.ctrlKey||e.altKey},metaKeyPressed:function(t){return(e.mac?t.metaKey:t.ctrlKey)&&!t.altKey}}}),r(A,[R,p,g],function(e,t,n){return function(r,i){function o(e){var t=i.settings.object_resizing;return t===!1||n.iOS?!1:("string"!=typeof t&&(t="table,img,div"),"false"===e.getAttribute("data-mce-resize")?!1:i.dom.is(e,t))}function a(t){var n,r;n=t.screenX-k,r=t.screenY-T,H=n*E[2]+B,P=r*E[3]+L,H=5>H?5:H,P=5>P?5:P,(e.modifierPressed(t)||"IMG"==w.nodeName&&E[2]*E[3]!==0)&&(H=Math.round(P/D),P=Math.round(H*D)),C.setStyles(_,{width:H,height:P}),E[2]<0&&_.clientWidth<=H&&C.setStyle(_,"left",R+(B-H)),E[3]<0&&_.clientHeight<=P&&C.setStyle(_,"top",A+(L-P)),M||(i.fire("ObjectResizeStart",{target:w,width:B,height:L}),M=!0)}function s(){function e(e,t){t&&(w.style[e]||!i.schema.isValid(w.nodeName.toLowerCase(),e)?C.setStyle(w,e,t):C.setAttrib(w,e,t))}M=!1,e("width",H),e("height",P),C.unbind(O,"mousemove",a),C.unbind(O,"mouseup",s),I!=O&&(C.unbind(I,"mousemove",a),C.unbind(I,"mouseup",s)),C.remove(_),F&&"TABLE"!=w.nodeName||l(w),i.fire("ObjectResized",{target:w,width:H,height:P}),i.nodeChanged()}function l(e,t,r){var l,u,d,f,p,m=i.getBody();g(),l=C.getPos(e,m),R=l.x,A=l.y,p=e.getBoundingClientRect(),u=p.width||p.right-p.left,d=p.height||p.bottom-p.top,w!=e&&(h(),w=e,H=P=0),f=i.fire("ObjectSelected",{target:e}),o(e)&&!f.isDefaultPrevented()?x(N,function(e,o){function l(t){k=t.screenX,T=t.screenY,B=w.clientWidth,L=w.clientHeight,D=L/B,E=e,_=w.cloneNode(!0),C.addClass(_,"mce-clonedresizable"),_.contentEditable=!1,_.unSelectabe=!0,C.setStyles(_,{left:R,top:A,margin:0}),_.removeAttribute("data-mce-selected"),i.getBody().appendChild(_),C.bind(O,"mousemove",a),C.bind(O,"mouseup",s),I!=O&&(C.bind(I,"mousemove",a),C.bind(I,"mouseup",s))}var c,f;return t?void(o==t&&l(r)):(c=C.get("mceResizeHandle"+o),c?C.show(c):(f=i.getBody(),c=C.add(f,"div",{id:"mceResizeHandle"+o,"data-mce-bogus":!0,"class":"mce-resizehandle",unselectable:!0,style:"cursor:"+o+"-resize; margin:0; padding:0"}),n.ie&&(c.contentEditable=!1)),e.elm||(C.bind(c,"mousedown",function(e){e.stopImmediatePropagation(),e.preventDefault(),l(e)}),e.elm=c),void C.setStyles(c,{left:u*e[0]+R-c.offsetWidth/2,top:d*e[1]+A-c.offsetHeight/2}))}):c(),w.setAttribute("data-mce-selected","1")}function c(){var e,t;g(),w&&w.removeAttribute("data-mce-selected");for(e in N)t=C.get("mceResizeHandle"+e),t&&(C.unbind(t),C.remove(t))}function u(e){function t(e,t){if(e)do if(e===t)return!0;while(e=e.parentNode)}var n;return x(C.select("img[data-mce-selected],hr[data-mce-selected]"),function(e){e.removeAttribute("data-mce-selected")}),n="mousedown"==e.type?e.target:r.getNode(),n=C.getParent(n,F?"table":"table,img,hr"),t(n,i.getBody())&&(v(),t(r.getStart(),n)&&t(r.getEnd(),n)&&(!F||n!=r.getStart()&&"IMG"!==r.getStart().nodeName))?void l(n):void c()}function d(e,t,n){e&&e.attachEvent&&e.attachEvent("on"+t,n)}function f(e,t,n){e&&e.detachEvent&&e.detachEvent("on"+t,n)}function p(e){var t=e.srcElement,n,r,o,a,s,c,u;n=t.getBoundingClientRect(),c=S.clientX-n.left,u=S.clientY-n.top;for(r in N)if(o=N[r],a=t.offsetWidth*o[0],s=t.offsetHeight*o[1],Math.abs(a-c)<8&&Math.abs(s-u)<8){E=o;break}M=!0,i.getDoc().selection.empty(),l(t,r,S)}function m(e){var t=e.srcElement;if(t!=w){if(h(),0===t.id.indexOf("mceResizeHandle"))return void(e.returnValue=!1);("IMG"==t.nodeName||"TABLE"==t.nodeName)&&(c(),w=t,d(t,"resizestart",p))}}function h(){f(w,"resizestart",p)}function g(){for(var e in N){var t=N[e];t.elm&&(C.unbind(t.elm),delete t.elm)}}function v(){try{i.getDoc().execCommand("enableObjectResizing",!1,!1)}catch(e){}}function y(e){var t;if(F){t=O.body.createControlRange();try{return t.addElement(e),t.select(),!0}catch(n){}}}function b(){w=_=null,F&&(h(),f(i.getBody(),"controlselect",m))}var C=i.dom,x=t.each,w,_,N,E,S,k,T,R,A,B,L,D,M,H,P,O=i.getDoc(),I=document,F=n.ie&&n.ie<11;N={n:[.5,0,0,-1],e:[1,.5,1,0],s:[.5,1,0,1],w:[0,.5,-1,0],nw:[0,0,-1,-1],ne:[1,0,1,-1],se:[1,1,1,1],sw:[0,1,-1,1]};var z=".mce-content-body";return i.contentStyles.push(z+" div.mce-resizehandle {position: absolute;border: 1px solid black;background: #FFF;width: 5px;height: 5px;z-index: 10000}"+z+" .mce-resizehandle:hover {background: #000}"+z+" img[data-mce-selected], hr[data-mce-selected] {outline: 1px solid black;resize: none}"+z+" .mce-clonedresizable {position: absolute;"+(n.gecko?"":"outline: 1px dashed black;")+"opacity: .5;filter: alpha(opacity=50);z-index: 10000}"),i.on("init",function(){F?(i.on("ObjectResized",function(e){"TABLE"!=e.target.nodeName&&(c(),y(e.target))}),d(i.getBody(),"controlselect",m),i.on("mousedown",function(e){S=e})):(v(),n.ie>=11&&(i.on("mouseup",function(e){var t=e.target.nodeName;/^(TABLE|IMG|HR)$/.test(t)&&(i.selection.select(e.target,"TABLE"==t),i.nodeChanged())}),i.dom.bind(i.getBody(),"mscontrolselect",function(e){/^(TABLE|IMG|HR)$/.test(e.target.nodeName)&&(e.preventDefault(),"IMG"==e.target.tagName&&window.setTimeout(function(){i.selection.select(e.target)},0))}))),i.on("nodechange mousedown mouseup ResizeEditor",u),i.on("keydown keyup",function(e){w&&"TABLE"==w.nodeName&&u(e)})}),i.on("remove",g),{isResizable:o,showResizeRect:l,hideResizeRect:c,updateResizeRect:u,controlSelect:y,destroy:b}}}),r(B,[p,f],function(e,t){function n(e){this.walk=function(t,n){function i(e){var t;return t=e[0],3===t.nodeType&&t===l&&c>=t.nodeValue.length&&e.splice(0,1),t=e[e.length-1],0===d&&e.length>0&&t===u&&3===t.nodeType&&e.splice(e.length-1,1),e}function o(e,t,n){for(var r=[];e&&e!=n;e=e[t])r.push(e);return r}function a(e,t){do{if(e.parentNode==t)return e;e=e.parentNode}while(e)}function s(e,t,r){var a=r?"nextSibling":"previousSibling";for(h=e,g=h.parentNode;h&&h!=t;h=g)g=h.parentNode,v=o(h==e?h:h[a],a),v.length&&(r||v.reverse(),n(i(v)))}var l=t.startContainer,c=t.startOffset,u=t.endContainer,d=t.endOffset,f,p,m,h,g,v,y;if(y=e.select("td.mce-item-selected,th.mce-item-selected"),y.length>0)return void r(y,function(e){n([e])});if(1==l.nodeType&&l.hasChildNodes()&&(l=l.childNodes[c]),1==u.nodeType&&u.hasChildNodes()&&(u=u.childNodes[Math.min(d-1,u.childNodes.length-1)]),l==u)return n(i([l]));for(f=e.findCommonAncestor(l,u),h=l;h;h=h.parentNode){if(h===u)return s(l,f,!0);if(h===f)break}for(h=u;h;h=h.parentNode){if(h===l)return s(u,f);if(h===f)break}p=a(l,f)||l,m=a(u,f)||u,s(l,p,!0),v=o(p==l?p:p.nextSibling,"nextSibling",m==u?m.nextSibling:m),v.length&&n(i(v)),s(u,m)},this.split=function(e){function t(e,t){return e.splitText(t)}var n=e.startContainer,r=e.startOffset,i=e.endContainer,o=e.endOffset;return n==i&&3==n.nodeType?r>0&&rr?(o-=r,n=i=t(i,o).previousSibling,o=i.nodeValue.length,r=0):o=0):(3==n.nodeType&&r>0&&r0&&o0)return c=p,u=n?p.nodeValue.length:0,void(i=!0);if(e.isBlock(p)||m[p.nodeName.toLowerCase()])return;s=p}o&&s&&(c=s,i=!0,u=0)}var c,u,d,f=e.getRoot(),p,m,h,g,v;if(c=n[(r?"start":"end")+"Container"],u=n[(r?"start":"end")+"Offset"],v=1==c.nodeType&&u===c.childNodes.length,m=e.schema.getNonEmptyElements(),g=r,1==c.nodeType&&u>c.childNodes.length-1&&(g=!1),9===c.nodeType&&(c=e.getRoot(),u=0),c===f){if(g&&(p=c.childNodes[u>0?u-1:0],p&&(h=p.nodeName.toLowerCase(),m[p.nodeName]||"TABLE"==p.nodeName)))return;if(c.hasChildNodes()&&(u=Math.min(!g&&u>0?u-1:u,c.childNodes.length-1),c=c.childNodes[u],u=0,c.hasChildNodes()&&!/TABLE/.test(c.nodeName))){p=c,d=new t(c,f);do{if(3===p.nodeType&&p.nodeValue.length>0){u=g?0:p.nodeValue.length,c=p,i=!0;break}if(m[p.nodeName.toLowerCase()]){u=e.nodeIndex(p),c=p.parentNode,"IMG"!=p.nodeName||g||u++,i=!0;break}}while(p=g?d.next():d.prev())}}o&&(3===c.nodeType&&0===u&&l(!0),1===c.nodeType&&(p=c.childNodes[u],p||(p=c.childNodes[u-1]),!p||"BR"!==p.nodeName||s(p,"A")||a(p)||a(p,!0)||l(!0,p))),g&&!o&&3===c.nodeType&&u===c.nodeValue.length&&l(!1),i&&n["set"+(r?"Start":"End")](c,u)}var i,o;return o=n.collapsed,r(!0),o||r(),i&&o&&n.collapse(!0),i}}var r=e.each;return n.compareRanges=function(e,t){if(e&&t){if(!e.item&&!e.duplicate)return e.startContainer==t.startContainer&&e.startOffset==t.startOffset;if(e.item&&t.item&&e.item(0)===t.item(0))return!0;if(e.isEqual&&t.isEqual&&t.isEqual(e))return!0}return!1},n}),r(L,[f,T,A,B,g,p],function(e,n,r,i,o,a){function s(e,t,i,o){var a=this;a.dom=e,a.win=t,a.serializer=i,a.editor=o,a.controlSelection=new r(a,o),a.win.getSelection||(a.tridentSel=new n(a))}var l=a.each,c=a.grep,u=a.trim,d=o.ie,f=o.opera;return s.prototype={setCursorLocation:function(e,t){var n=this,r=n.dom.createRng();e?(r.setStart(e,t),r.setEnd(e,t),n.setRng(r),n.collapse(!1)):(n._moveEndPoint(r,n.editor.getBody(),!0),n.setRng(r))},getContent:function(e){var n=this,r=n.getRng(),i=n.dom.create("body"),o=n.getSel(),a,s,l;return e=e||{},a=s="",e.get=!0,e.format=e.format||"html",e.selection=!0,n.editor.fire("BeforeGetContent",e),"text"==e.format?n.isCollapsed()?"":r.text||(o.toString?o.toString():""):(r.cloneContents?(l=r.cloneContents(),l&&i.appendChild(l)):r.item!==t||r.htmlText!==t?(i.innerHTML="
    "+(r.item?r.item(0).outerHTML:r.htmlText),i.removeChild(i.firstChild)):i.innerHTML=r.toString(),/^\s/.test(i.innerHTML)&&(a=" "),/\s+$/.test(i.innerHTML)&&(s=" "),e.getInner=!0,e.content=n.isCollapsed()?"":a+n.serializer.serialize(i,e)+s,n.editor.fire("GetContent",e),e.content)},setContent:function(e,t){var n=this,r=n.getRng(),i,o=n.win.document,a,s;if(t=t||{format:"html"},t.set=!0,t.selection=!0,e=t.content=e,t.no_events||n.editor.fire("BeforeSetContent",t),e=t.content,r.insertNode){e+='_',r.startContainer==o&&r.endContainer==o?o.body.innerHTML=e:(r.deleteContents(),0===o.body.childNodes.length?o.body.innerHTML=e:r.createContextualFragment?r.insertNode(r.createContextualFragment(e)):(a=o.createDocumentFragment(),s=o.createElement("div"),a.appendChild(s),s.outerHTML=e,r.insertNode(a))),i=n.dom.get("__caret"),r=o.createRange(),r.setStartBefore(i),r.setEndBefore(i),n.setRng(r),n.dom.remove("__caret");try{n.setRng(r)}catch(l){}}else r.item&&(o.execCommand("Delete",!1,null),r=n.getRng()),/^\s+/.test(e)?(r.pasteHTML('_'+e),n.dom.remove("__mce_tmp")):r.pasteHTML(e);t.no_events||n.editor.fire("SetContent",t)},getStart:function(){var e=this,t=e.getRng(),n,r,i,o;if(t.duplicate||t.item){if(t.item)return t.item(0);for(i=t.duplicate(),i.collapse(1),n=i.parentElement(),n.ownerDocument!==e.dom.doc&&(n=e.dom.getRoot()),r=o=t.parentElement();o=o.parentNode;)if(o==n){n=r;break}return n}return n=t.startContainer,1==n.nodeType&&n.hasChildNodes()&&(n=n.childNodes[Math.min(n.childNodes.length-1,t.startOffset)]),n&&3==n.nodeType?n.parentNode:n},getEnd:function(){var e=this,t=e.getRng(),n,r;return t.duplicate||t.item?t.item?t.item(0):(t=t.duplicate(),t.collapse(0),n=t.parentElement(),n.ownerDocument!==e.dom.doc&&(n=e.dom.getRoot()),n&&"BODY"==n.nodeName?n.lastChild||n:n):(n=t.endContainer,r=t.endOffset,1==n.nodeType&&n.hasChildNodes()&&(n=n.childNodes[r>0?r-1:r]),n&&3==n.nodeType?n.parentNode:n)},getBookmark:function(e,t){function n(e,t){var n=0;return l(a.select(e),function(e,r){e==t&&(n=r)}),n}function r(e){function t(t){var n,r,i,o=t?"start":"end";n=e[o+"Container"],r=e[o+"Offset"],1==n.nodeType&&"TR"==n.nodeName&&(i=n.childNodes,n=i[Math.min(t?r:r-1,i.length-1)],n&&(r=t?0:n.childNodes.length,e["set"+(t?"Start":"End")](n,r)))}return t(!0),t(),e}function i(){function e(e,n){var i=e[n?"startContainer":"endContainer"],a=e[n?"startOffset":"endOffset"],s=[],l,c,u=0;if(3==i.nodeType){if(t)for(l=i.previousSibling;l&&3==l.nodeType;l=l.previousSibling)a+=l.nodeValue.length;s.push(a)}else c=i.childNodes,a>=c.length&&c.length&&(u=1,a=Math.max(0,c.length-1)),s.push(o.dom.nodeIndex(c[a],t)+u);for(;i&&i!=r;i=i.parentNode)s.push(o.dom.nodeIndex(i,t));return s}var n=o.getRng(!0),r=a.getRoot(),i={};return i.start=e(n,!0),o.isCollapsed()||(i.end=e(n)),i}var o=this,a=o.dom,s,c,u,d,f,p,m="",h;if(2==e)return p=o.getNode(),f=p?p.nodeName:null,"IMG"==f?{name:f,index:n(f,p)}:o.tridentSel?o.tridentSel.getBookmark(e):i();if(e)return{rng:o.getRng()};if(s=o.getRng(),u=a.uniqueId(),d=o.isCollapsed(),h="overflow:hidden;line-height:0px",s.duplicate||s.item){if(s.item)return p=s.item(0),f=p.nodeName,{name:f,index:n(f,p)};c=s.duplicate();try{s.collapse(),s.pasteHTML(''+m+""),d||(c.collapse(!1),s.moveToElementText(c.parentElement()),0===s.compareEndPoints("StartToEnd",c)&&c.move("character",-1),c.pasteHTML(''+m+""))}catch(g){return null}}else{if(p=o.getNode(),f=p.nodeName,"IMG"==f)return{name:f,index:n(f,p)};c=r(s.cloneRange()),d||(c.collapse(!1),c.insertNode(a.create("span",{"data-mce-type":"bookmark",id:u+"_end",style:h},m))),s=r(s),s.collapse(!0),s.insertNode(a.create("span",{"data-mce-type":"bookmark",id:u+"_start",style:h},m))}return o.moveToBookmark({id:u,keep:1}),{id:u}},moveToBookmark:function(e){function t(t){var n=e[t?"start":"end"],r,i,o,l;if(n){for(o=n[0],i=s,r=n.length-1;r>=1;r--){if(l=i.childNodes,n[r]>l.length-1)return;i=l[n[r]]}3===i.nodeType&&(o=Math.min(n[0],i.nodeValue.length)),1===i.nodeType&&(o=Math.min(n[0],i.childNodes.length)),t?a.setStart(i,o):a.setEnd(i,o)}return!0}function n(t){var n=o.get(e.id+"_"+t),r,i,a,s,d=e.keep;if(n&&(r=n.parentNode,"start"==t?(d?(r=n.firstChild,i=1):i=o.nodeIndex(n),u=p=r,m=h=i):(d?(r=n.firstChild,i=1):i=o.nodeIndex(n),p=r,h=i),!d)){for(s=n.previousSibling,a=n.nextSibling,l(c(n.childNodes),function(e){3==e.nodeType&&(e.nodeValue=e.nodeValue.replace(/\uFEFF/g,""))});n=o.get(e.id+"_"+t);)o.remove(n,1);s&&a&&s.nodeType==a.nodeType&&3==s.nodeType&&!f&&(i=s.nodeValue.length,s.appendData(a.nodeValue),o.remove(a),"start"==t?(u=p=s,m=h=i):(p=s,h=i))}}function r(e){return!o.isBlock(e)||e.innerHTML||d||(e.innerHTML='
    '),e}var i=this,o=i.dom,a,s,u,p,m,h;if(e)if(e.start){if(a=o.createRng(),s=o.getRoot(),i.tridentSel)return i.tridentSel.moveToBookmark(e);t(!0)&&t()&&i.setRng(a)}else e.id?(n("start"),n("end"),u&&(a=o.createRng(),a.setStart(r(u),m),a.setEnd(r(p),h),i.setRng(a))):e.name?i.select(o.select(e.name)[e.index]):e.rng&&i.setRng(e.rng)},select:function(e,t){var n=this,r=n.dom,i=r.createRng(),o;if(n.lastFocusBookmark=null,e){if(!t&&n.controlSelection.controlSelect(e))return;o=r.nodeIndex(e),i.setStart(e.parentNode,o),i.setEnd(e.parentNode,o+1),t&&(n._moveEndPoint(i,e,!0),n._moveEndPoint(i,e)),n.setRng(i)}return e},isCollapsed:function(){var e=this,t=e.getRng(),n=e.getSel();return!t||t.item?!1:t.compareEndPoints?0===t.compareEndPoints("StartToEnd",t):!n||t.collapsed},collapse:function(e){var t=this,n=t.getRng(),r;n.item&&(r=n.item(0),n=t.win.document.body.createTextRange(),n.moveToElementText(r)),n.collapse(!!e),t.setRng(n)},getSel:function(){var e=this.win;return e.getSelection?e.getSelection():e.document.selection},getRng:function(e){function t(e,t,n){try{return t.compareBoundaryPoints(e,n)}catch(r){return-1}}var n=this,r,i,o,a=n.win.document,s;if(!e&&n.lastFocusBookmark){var l=n.lastFocusBookmark;return l.startContainer?(i=a.createRange(),i.setStart(l.startContainer,l.startOffset),i.setEnd(l.endContainer,l.endOffset)):i=l,i}if(e&&n.tridentSel)return n.tridentSel.getRangeAt(0);try{(r=n.getSel())&&(i=r.rangeCount>0?r.getRangeAt(0):r.createRange?r.createRange():a.createRange())}catch(c){}if(d&&i&&i.setStart&&a.selection){try{s=a.selection.createRange()}catch(c){}s&&s.item&&(o=s.item(0),i=a.createRange(),i.setStartBefore(o),i.setEndAfter(o))}return i||(i=a.createRange?a.createRange():a.body.createTextRange()),i.setStart&&9===i.startContainer.nodeType&&i.collapsed&&(o=n.dom.getRoot(),i.setStart(o,0),i.setEnd(o,0)),n.selectedRange&&n.explicitRange&&(0===t(i.START_TO_START,i,n.selectedRange)&&0===t(i.END_TO_END,i,n.selectedRange)?i=n.explicitRange:(n.selectedRange=null,n.explicitRange=null)),i},setRng:function(e,t){var n=this,r;if(e.select)try{e.select()}catch(i){}else if(n.tridentSel){if(e.cloneRange)try{return void n.tridentSel.addRange(e)}catch(i){}}else if(r=n.getSel()){n.explicitRange=e;try{r.removeAllRanges(),r.addRange(e)}catch(i){}t===!1&&r.extend&&(r.collapse(e.endContainer,e.endOffset),r.extend(e.startContainer,e.startOffset)),n.selectedRange=r.rangeCount>0?r.getRangeAt(0):null}},setNode:function(e){var t=this;return t.setContent(t.dom.getOuterHTML(e)),e},getNode:function(){function e(e,t){for(var n=e;e&&3===e.nodeType&&0===e.length;)e=t?e.nextSibling:e.previousSibling;return e||n}var t=this,n=t.getRng(),r,i=n.startContainer,o=n.endContainer,a=n.startOffset,s=n.endOffset,l=t.dom.getRoot();return n?n.setStart?(r=n.commonAncestorContainer,!n.collapsed&&(i==o&&2>s-a&&i.hasChildNodes()&&(r=i.childNodes[a]),3===i.nodeType&&3===o.nodeType&&(i=i.length===a?e(i.nextSibling,!0):i.parentNode,o=0===s?e(o.previousSibling,!1):o.parentNode,i&&i===o))?i:r&&3==r.nodeType?r.parentNode:r):(r=n.item?n.item(0):n.parentElement(),r.ownerDocument!==t.win.document&&(r=l),r):l},getSelectedBlocks:function(t,n){var r=this,i=r.dom,o,a,s=[];if(a=i.getRoot(),t=i.getParent(t||r.getStart(),i.isBlock),n=i.getParent(n||r.getEnd(),i.isBlock),t&&t!=a&&s.push(t),t&&n&&t!=n){o=t;for(var l=new e(t,a);(o=l.next())&&o!=n;)i.isBlock(o)&&s.push(o)}return n&&t!=n&&n!=a&&s.push(n),s},isForward:function(){var e=this.dom,t=this.getSel(),n,r;return t&&t.anchorNode&&t.focusNode?(n=e.createRng(),n.setStart(t.anchorNode,t.anchorOffset),n.collapse(!0),r=e.createRng(),r.setStart(t.focusNode,t.focusOffset),r.collapse(!0),n.compareBoundaryPoints(n.START_TO_START,r)<=0):!0},normalize:function(){var e=this,t=e.getRng();return!d&&new i(e.dom).normalize(t)&&e.setRng(t,e.isForward()),t},selectorChanged:function(e,t){var n=this,r;return n.selectorChangedData||(n.selectorChangedData={},r={},n.editor.on("NodeChange",function(e){var t=e.element,i=n.dom,o=i.getParents(t,null,i.getRoot()),a={};l(n.selectorChangedData,function(e,t){l(o,function(n){return i.is(n,t)?(r[t]||(l(e,function(e){e(!0,{node:n,selector:t,parents:o})}),r[t]=e),a[t]=e,!1):void 0})}),l(r,function(e,n){a[n]||(delete r[n],l(e,function(e){e(!1,{node:t,selector:n,parents:o})}))})})),n.selectorChangedData[e]||(n.selectorChangedData[e]=[]),n.selectorChangedData[e].push(t),n},getScrollContainer:function(){for(var e,t=this.dom.getRoot();t&&"BODY"!=t.nodeName;){if(t.scrollHeight>t.clientHeight){e=t;break}t=t.parentNode}return e},scrollIntoView:function(e){function t(e){for(var t=0,n=0,r=e;r&&r.nodeType;)t+=r.offsetLeft||0,n+=r.offsetTop||0,r=r.offsetParent;return{x:t,y:n}}var n,r,i=this,o=i.dom,a=o.getRoot(),s,l;if("BODY"!=a.nodeName){var c=i.getScrollContainer();if(c)return n=t(e).y-t(c).y,l=c.clientHeight,s=c.scrollTop,void((s>n||n+25>s+l)&&(c.scrollTop=s>n?n:n-l+25))}r=o.getViewPort(i.editor.getWin()),n=o.getPos(e).y,s=r.y,l=r.h,(ns+l)&&i.editor.getWin().scrollTo(0,s>n?n:n-l+25)},_moveEndPoint:function(t,n,r){var i=n,a=new e(n,i),s=this.dom.schema.getNonEmptyElements();do{if(3==n.nodeType&&0!==u(n.nodeValue).length)return void(r?t.setStart(n,0):t.setEnd(n,n.nodeValue.length));if(s[n.nodeName])return void(r?t.setStartBefore(n):"BR"==n.nodeName?t.setEndBefore(n):t.setEndAfter(n));if(o.ie&&o.ie<11&&this.dom.isBlock(n)&&this.dom.isEmpty(n))return void(r?t.setStart(n,0):t.setEnd(n,0))}while(n=r?a.next():a.prev());"BODY"==i.nodeName&&(r?t.setStart(i,0):t.setEnd(i,i.childNodes.length))},destroy:function(){this.win=null,this.controlSelection.destroy()}},s}),r(D,[f,B,p],function(e,t,n){return function(r){function i(e){return e.nodeType&&(e=e.nodeName),!!r.schema.getTextBlockElements()[e.toLowerCase()]}function o(e,t){return I.getParents(e,t,I.getRoot())}function a(e){return 1===e.nodeType&&"_mce_caret"===e.id}function s(){u({alignleft:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"left"},defaultBlock:"div"},{selector:"img,table",collapsed:!1,styles:{"float":"left"}}],aligncenter:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"center"},defaultBlock:"div"},{selector:"img",collapsed:!1,styles:{display:"block",marginLeft:"auto",marginRight:"auto"}},{selector:"table",collapsed:!1,styles:{marginLeft:"auto",marginRight:"auto"}}],alignright:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"right"},defaultBlock:"div"},{selector:"img,table",collapsed:!1,styles:{"float":"right"}}],alignjustify:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"justify"},defaultBlock:"div"}],bold:[{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}},{inline:"b",remove:"all"}],italic:[{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}},{inline:"i",remove:"all"}],underline:[{inline:"span",styles:{textDecoration:"underline"},exact:!0},{inline:"u",remove:"all"}],strikethrough:[{inline:"span",styles:{textDecoration:"line-through"},exact:!0},{inline:"strike",remove:"all"}],forecolor:{inline:"span",styles:{color:"%value"},wrap_links:!1},hilitecolor:{inline:"span",styles:{backgroundColor:"%value"},wrap_links:!1},fontname:{inline:"span",styles:{fontFamily:"%value"}},fontsize:{inline:"span",styles:{fontSize:"%value"}},fontsize_class:{inline:"span",attributes:{"class":"%value"}},blockquote:{block:"blockquote",wrapper:1,remove:"all"},subscript:{inline:"sub"},superscript:{inline:"sup"},code:{inline:"code"},link:{inline:"a",selector:"a",remove:"all",split:!0,deep:!0,onmatch:function(){return!0},onformat:function(e,t,n){et(n,function(t,n){I.setAttrib(e,n,t)})}},removeformat:[{selector:"b,strong,em,i,font,u,strike,sub,sup,dfn,code,samp,kbd,var,cite,mark,q",remove:"all",split:!0,expand:!1,block_expand:!0,deep:!0},{selector:"span",attributes:["style","class"],remove:"empty",split:!0,expand:!1,deep:!0},{selector:"*",attributes:["style","class"],split:!1,expand:!1,deep:!0}]}),et("p h1 h2 h3 h4 h5 h6 div address pre div dt dd samp".split(/\s/),function(e){u(e,{block:e,remove:"all"})}),u(r.settings.formats)}function l(){r.addShortcut("ctrl+b","bold_desc","Bold"),r.addShortcut("ctrl+i","italic_desc","Italic"),r.addShortcut("ctrl+u","underline_desc","Underline");for(var e=1;6>=e;e++)r.addShortcut("ctrl+"+e,"",["FormatBlock",!1,"h"+e]);r.addShortcut("ctrl+7","",["FormatBlock",!1,"p"]),r.addShortcut("ctrl+8","",["FormatBlock",!1,"div"]),r.addShortcut("ctrl+9","",["FormatBlock",!1,"address"])}function c(e){return e?O[e]:O}function u(e,t){e&&("string"!=typeof e?et(e,function(e,t){u(t,e)}):(t=t.length?t:[t],et(t,function(e){e.deep===X&&(e.deep=!e.selector),e.split===X&&(e.split=!e.selector||e.inline),e.remove===X&&e.selector&&!e.inline&&(e.remove="none"),e.selector&&e.inline&&(e.mixed=!0,e.block_expand=!0),"string"==typeof e.classes&&(e.classes=e.classes.split(/\s+/))}),O[e]=t))}function d(e){var t;return r.dom.getParent(e,function(e){return t=r.dom.getStyle(e,"text-decoration"),t&&"none"!==t}),t}function f(e){var t;1===e.nodeType&&e.parentNode&&1===e.parentNode.nodeType&&(t=d(e.parentNode),r.dom.getStyle(e,"color")&&t?r.dom.setStyle(e,"text-decoration",t):r.dom.getStyle(e,"textdecoration")===t&&r.dom.setStyle(e,"text-decoration",null))}function p(t,n,o){function s(e,t){t=t||h,e&&(t.onformat&&t.onformat(e,t,n,o),et(t.styles,function(t,r){I.setStyle(e,r,E(t,n))}),et(t.attributes,function(t,r){I.setAttrib(e,r,E(t,n))}),et(t.classes,function(t){t=E(t,n),I.hasClass(e,t)||I.addClass(e,t)}))}function l(){function t(t,n){var r=new e(n);for(o=r.current();o;o=r.prev())if(o.childNodes.length>1||o==t||"BR"==o.tagName)return o}var n=r.selection.getRng(),i=n.startContainer,a=n.endContainer;if(i!=a&&0===n.endOffset){var s=t(i,a),l=3==s.nodeType?s.length:s.childNodes.length;n.setEnd(s,l)}return n}function u(e,t,n,r,i){var o=[],a=-1,s,l=-1,c=-1,u;return et(e.childNodes,function(e,t){return"UL"===e.nodeName||"OL"===e.nodeName?(a=t,s=e,!1):void 0}),et(e.childNodes,function(e,n){"SPAN"===e.nodeName&&"bookmark"==I.getAttrib(e,"data-mce-type")&&(e.id==t.id+"_start"?l=n:e.id==t.id+"_end"&&(c=n))}),0>=a||a>l&&c>a?(et(tt(e.childNodes),i),0):(u=I.clone(n,K),et(tt(e.childNodes),function(e,t){(a>l&&a>t||l>a&&t>a)&&(o.push(e),e.parentNode.removeChild(e))}),a>l?e.insertBefore(u,s):l>a&&e.insertBefore(u,s.nextSibling),r.push(u),et(o,function(e){u.appendChild(e)}),u)}function d(e,r,o){var l=[],c,d,f=!0;c=h.inline||h.block,d=I.create(c),s(d),z.walk(e,function(e){function p(e){var y,C,x,_,N;return N=f,y=e.nodeName.toLowerCase(),C=e.parentNode.nodeName.toLowerCase(),1===e.nodeType&&J(e)&&(N=f,f="true"===J(e),_=!0),w(y,"br")?(v=0,void(h.block&&I.remove(e))):h.wrapper&&g(e,t,n)?void(v=0):f&&!_&&h.block&&!h.wrapper&&i(y)&&W(C,c)?(e=I.rename(e,c),s(e),l.push(e),void(v=0)):h.selector&&(et(m,function(t){"collapsed"in t&&t.collapsed!==b||I.is(e,t.selector)&&!a(e)&&(s(e,t),x=!0)}),!h.inline||x)?void(v=0):void(!f||_||!W(c,y)||!W(C,c)||!o&&3===e.nodeType&&1===e.nodeValue.length&&65279===e.nodeValue.charCodeAt(0)||a(e)||h.inline&&V(e)?"li"==y&&r?v=u(e,r,d,l,p):(v=0,et(tt(e.childNodes),p),_&&(f=N),v=0):(v||(v=I.clone(d,K),e.parentNode.insertBefore(v,e),l.push(v)),v.appendChild(e)))}var v;et(e,p)}),h.wrap_links===!1&&et(l,function(e){function t(e){var n,r,i;if("A"===e.nodeName){for(r=I.clone(d,K),l.push(r),i=tt(e.childNodes),n=0;n1||!V(e))&&0===o)return void I.remove(e,1);if(h.inline||h.wrapper){if(h.exact||1!==o||(e=i(e)),et(m,function(t){et(I.select(t.inline,e),function(e){var r;if(!L(e)){if(t.wrap_links===!1){r=e.parentNode;do if("A"===r.nodeName)return;while(r=r.parentNode)}R(t,n,e,t.exact?e:null)}})}),g(e.parentNode,t,n))return I.remove(e,1),e=0,Y;h.merge_with_parents&&I.getParent(e.parentNode,function(r){return g(r,t,n)?(I.remove(e,1),e=0,Y):void 0}),e&&h.merge_siblings!==!1&&(e=D(B(e),e),e=D(e,B(e,Y)))}})}var m=c(t),h=m[0],v,y,b=!o&&F.isCollapsed();if(h)if(o)o.nodeType?(y=I.createRng(),y.setStartBefore(o),y.setEndAfter(o),d(T(y,m),null,!0)):d(o,null,!0);else if(b&&h.inline&&!I.select("td.mce-item-selected,th.mce-item-selected").length)H("apply",t,n);else{var C=r.selection.getNode();U||!m[0].defaultBlock||I.getParent(C,I.isBlock)||p(m[0].defaultBlock),r.selection.setRng(l()),v=F.getBookmark(),d(T(F.getRng(Y),m),v),h.styles&&(h.styles.color||h.styles.textDecoration)&&(nt(C,f,"childNodes"),f(C)),F.moveToBookmark(v),P(F.getRng(Y)),r.nodeChanged()}}function m(e,t,n){function i(e){var n,r,o,a,s;if(1===e.nodeType&&J(e)&&(a=b,b="true"===J(e),s=!0),n=tt(e.childNodes),b&&!s)for(r=0,o=p.length;o>r&&!R(p[r],t,e,e);r++);if(m.deep&&n.length){for(r=0,o=n.length;o>r;r++)i(n[r]);s&&(b=a)}}function a(n){var r;return et(o(n.parentNode).reverse(),function(n){var i;r||"_start"==n.id||"_end"==n.id||(i=g(n,e,t),i&&i.split!==!1&&(r=n))}),r}function s(e,n,r,i){var o,a,s,l,c,u;if(e){for(u=e.parentNode,o=n.parentNode;o&&o!=u;o=o.parentNode){for(a=I.clone(o,K),c=0;c=0;a--){if(s=t[a].selector,!s||t[a].defaultBlock)return Y;for(i=r.length-1;i>=0;i--)if(I.is(r[i],s))return Y}return K}function C(e,t,n){var i;return G||(G={},i={},r.on("NodeChange",function(e){var t=o(e.element),n={};et(G,function(e,r){et(t,function(o){return g(o,r,{},e.similar)?(i[r]||(et(e,function(e){e(!0,{node:o,format:r,parents:t})}),i[r]=e),n[r]=e,!1):void 0})}),et(i,function(r,o){n[o]||(delete i[o],et(r,function(n){n(!1,{node:e.element,format:o,parents:t})}))})})),et(e.split(","),function(e){G[e]||(G[e]=[],G[e].similar=n),G[e].push(t)}),this}function x(e,t){return w(e,t.inline)?Y:w(e,t.block)?Y:t.selector?1==e.nodeType&&I.is(e,t.selector):void 0}function w(e,t){return e=e||"",t=t||"",e=""+(e.nodeName||e),t=""+(t.nodeName||t),e.toLowerCase()==t.toLowerCase()}function _(e,t){return N(I.getStyle(e,t),t)}function N(e,t){return("color"==t||"backgroundColor"==t)&&(e=I.toHex(e)),"fontWeight"==t&&700==e&&(e="bold"),"fontFamily"==t&&(e=e.replace(/[\'\"]/g,"").replace(/,\s+/g,",")),""+e}function E(e,t){return"string"!=typeof e?e=e(t):t&&(e=e.replace(/%(\w+)/g,function(e,n){return t[n]||e})),e}function S(e){return e&&3===e.nodeType&&/^([\t \r\n]+|)$/.test(e.nodeValue)}function k(e,t,n){var r=I.create(t,n);return e.parentNode.insertBefore(r,e),r.appendChild(e),r}function T(t,n,a){function s(e){function t(e){return"BR"==e.nodeName&&e.getAttribute("data-mce-bogus")&&!e.nextSibling}var r,i,o,a,s;if(r=i=e?g:y,a=e?"previousSibling":"nextSibling",s=I.getRoot(),3==r.nodeType&&!S(r)&&(e?v>0:br?n:r,-1===n||a||n++):(n=o.indexOf(" ",t),r=o.indexOf("\xa0",t),n=-1!==n&&(-1===r||r>n)?n:r),n}var s,l,c,u;if(3===t.nodeType){if(c=o(t,n),-1!==c)return{container:t,offset:c};u=t}for(s=new e(t,I.getParent(t,V)||r.getBody());l=s[i?"prev":"next"]();)if(3===l.nodeType){if(u=l,c=o(l),-1!==c)return{container:l,offset:c}}else if(V(l))break;return u?(n=i?0:u.length,{container:u,offset:n}):void 0}function d(e,r){var i,a,s,l;for(3==e.nodeType&&0===e.nodeValue.length&&e[r]&&(e=e[r]),i=o(e),a=0;ap?p:v],3==g.nodeType&&(v=0)),1==y.nodeType&&y.hasChildNodes()&&(p=y.childNodes.length-1,y=y.childNodes[b>p?p:b-1],3==y.nodeType&&(b=y.nodeValue.length)),g=c(g),y=c(y),(L(g.parentNode)||L(g))&&(g=L(g)?g:g.parentNode,g=g.nextSibling||g,3==g.nodeType&&(v=0)),(L(y.parentNode)||L(y))&&(y=L(y)?y:y.parentNode,y=y.previousSibling||y,3==y.nodeType&&(b=y.length)),n[0].inline&&(t.collapsed&&(h=u(g,v,!0),h&&(g=h.container,v=h.offset),h=u(y,b),h&&(y=h.container,b=h.offset)),m=l(y,b),m.node)){for(;m.node&&0===m.offset&&m.node.previousSibling;)m=l(m.node.previousSibling);m.node&&m.offset>0&&3===m.node.nodeType&&" "===m.node.nodeValue.charAt(m.offset-1)&&m.offset>1&&(y=m.node,y.splitText(m.offset-1))}return(n[0].inline||n[0].block_expand)&&(n[0].inline&&3==g.nodeType&&0!==v||(g=s(!0)),n[0].inline&&3==y.nodeType&&b!==y.nodeValue.length||(y=s())),n[0].selector&&n[0].expand!==K&&!n[0].inline&&(g=d(g,"previousSibling"),y=d(y,"nextSibling")),(n[0].block||n[0].selector)&&(g=f(g,"previousSibling"),y=f(y,"nextSibling"),n[0].block&&(V(g)||(g=s(!0)),V(y)||(y=s()))),1==g.nodeType&&(v=q(g),g=g.parentNode),1==y.nodeType&&(b=q(y)+1,y=y.parentNode),{startContainer:g,startOffset:v,endContainer:y,endOffset:b}}function R(e,t,n,r){var i,o,a;if(!x(n,e))return K;if("all"!=e.remove)for(et(e.styles,function(e,i){e=N(E(e,t),i),"number"==typeof i&&(i=e,r=0),(!r||w(_(r,i),e))&&I.setStyle(n,i,""),a=1}),a&&""===I.getAttrib(n,"style")&&(n.removeAttribute("style"),n.removeAttribute("data-mce-style")),et(e.attributes,function(e,i){var o;if(e=E(e,t),"number"==typeof i&&(i=e,r=0),!r||w(I.getAttrib(r,i),e)){if("class"==i&&(e=I.getAttrib(n,i),e&&(o="",et(e.split(/\s+/),function(e){/mce\w+/.test(e)&&(o+=(o?" ":"")+e)}),o)))return void I.setAttrib(n,i,o);"class"==i&&n.removeAttribute("className"),j.test(i)&&n.removeAttribute("data-mce-"+i),n.removeAttribute(i)}}),et(e.classes,function(e){e=E(e,t),(!r||I.hasClass(r,e))&&I.removeClass(n,e)}),o=I.getAttribs(n),i=0;ia?a:o]),3===i.nodeType&&n&&o>=i.nodeValue.length&&(i=new e(i,r.getBody()).next()||i),3!==i.nodeType||n||0!==o||(i=new e(i,r.getBody()).prev()||i),i}function H(t,n,o){function a(e){var t=I.create("span",{id:y,"data-mce-bogus":!0,style:b?"color:red":""});return e&&t.appendChild(r.getDoc().createTextNode($)),t}function s(e,t){for(;e;){if(3===e.nodeType&&e.nodeValue!==$||e.childNodes.length>1)return!1;t&&1===e.nodeType&&t.push(e),e=e.firstChild}return!0}function l(e){for(;e;){if(e.id===y)return e;e=e.parentNode}}function u(t){var n;if(t)for(n=new e(t,t),t=n.current();t;t=n.next())if(3===t.nodeType)return t}function d(e,t){var n,r;if(e)r=F.getRng(!0),s(e)?(t!==!1&&(r.setStartBefore(e),r.setEndBefore(e)),I.remove(e)):(n=u(e),n.nodeValue.charAt(0)===$&&(n=n.deleteData(0,1)),I.remove(e,1)),F.setRng(r);else if(e=l(F.getStart()),!e)for(;e=I.get(y);)d(e,!1)}function f(){var e,t,r,i,s,d,f;e=F.getRng(!0),i=e.startOffset,d=e.startContainer,f=d.nodeValue,t=l(F.getStart()),t&&(r=u(t)),f&&i>0&&i=0;p--)u.appendChild(I.clone(f[p],!1)),u=u.firstChild;u.appendChild(I.doc.createTextNode($)),u=u.firstChild;var v=I.getParent(d,i);v&&I.isEmpty(v)?d.parentNode.replaceChild(h,d):I.insertAfter(h,d),F.setCursorLocation(u,1),I.isEmpty(d)&&I.remove(d)}}function v(){var e;e=l(F.getStart()),e&&!I.isEmpty(e)&&nt(e,function(e){1!=e.nodeType||e.id===y||I.isEmpty(e)||I.setAttrib(e,"data-mce-bogus",null)},"childNodes")}var y="_mce_caret",b=r.settings.caret_debug;r._hasCaretEvents||(Z=function(){var e=[],t;if(s(l(F.getStart()),e))for(t=e.length;t--;)I.setAttrib(e[t],"data-mce-bogus","1")},Q=function(e){var t=e.keyCode;d(),(8==t||37==t||39==t)&&d(l(F.getStart())),v()},r.on("SetContent",function(e){e.selection&&v()}),r._hasCaretEvents=!0),"apply"==t?f():h()}function P(t){var n=t.startContainer,r=t.startOffset,i,o,a,s,l;if(3==n.nodeType&&r>=n.nodeValue.length&&(r=q(n),n=n.parentNode,i=!0),1==n.nodeType)for(s=n.childNodes,n=s[Math.min(r,s.length-1)],o=new e(n,I.getParent(n,I.isBlock)),(r>s.length-1||i)&&o.next(),a=o.current();a;a=o.next())if(3==a.nodeType&&!S(a))return l=I.create("a",null,$),a.parentNode.insertBefore(l,a),t.setStart(a,0),F.setRng(t),void I.remove(l)}var O={},I=r.dom,F=r.selection,z=new t(I),W=r.schema.isValidChild,V=I.isBlock,U=r.settings.forced_root_block,q=I.nodeIndex,$="\ufeff",j=/^(src|href|style)$/,K=!1,Y=!0,G,X,J=I.getContentEditable,Q,Z,et=n.each,tt=n.grep,nt=n.walk,rt=n.extend;rt(this,{get:c,register:u,apply:p,remove:m,toggle:h,match:v,matchAll:y,matchNode:g,canApply:b,formatChanged:C}),s(),l(),r.on("BeforeGetContent",function(){Z&&Z()}),r.on("mouseup keydown",function(e){Q&&Q(e)})}}),r(M,[g,p],function(e,t){var n=t.trim,r;return r=new RegExp(["]+data-mce-bogus[^>]+>[\u200b\ufeff]+<\\/span>","]+data-mce-bogus[^>]+><\\/div>",'\\s?data-mce-selected="[^"]+"'].join("|"),"gi"),function(t){function i(){return n(t.getContent({format:"raw",no_events:1}).replace(r,""))}function o(e){a.typing=!1,a.add({},e)}var a=this,s=0,l=[],c,u,d;return t.on("init",function(){a.add()}),t.on("BeforeExecCommand",function(e){var t=e.command;"Undo"!=t&&"Redo"!=t&&"mceRepaint"!=t&&a.beforeChange()}),t.on("ExecCommand",function(e){var t=e.command;"Undo"!=t&&"Redo"!=t&&"mceRepaint"!=t&&o(e)}),t.on("ObjectResizeStart",function(){a.beforeChange()}),t.on("SaveContent ObjectResized blur",o),t.dom.bind(t.dom.getRoot(),"dragend",o),t.on("KeyUp",function(n){var r=n.keyCode;(r>=33&&36>=r||r>=37&&40>=r||45==r||13==r||n.ctrlKey)&&(o(),t.nodeChanged()),(46==r||8==r||e.mac&&(91==r||93==r))&&t.nodeChanged(),u&&a.typing&&(t.isDirty()||(t.isNotDirty=!l[0]||i()==l[0].content,t.isNotDirty||t.fire("change",{level:l[0],lastLevel:null})),t.fire("TypingUndo"),u=!1,t.nodeChanged())}),t.on("KeyDown",function(e){var t=e.keyCode;return t>=33&&36>=t||t>=37&&40>=t||45==t?void(a.typing&&o(e)):void((16>t||t>20)&&224!=t&&91!=t&&!a.typing&&(a.beforeChange(),a.typing=!0,a.add({},e),u=!0))}),t.on("MouseDown",function(e){a.typing&&o(e)}),t.addShortcut("ctrl+z","","Undo"),t.addShortcut("ctrl+y,ctrl+shift+z","","Redo"),t.on("AddUndo Undo Redo ClearUndos MouseUp",function(e){e.isDefaultPrevented()||t.nodeChanged()}),a={data:l,typing:!1,beforeChange:function(){d||(c=t.selection.getBookmark(2,!0))},add:function(e,n){var r,o=t.settings,a;if(e=e||{},e.content=i(),d||t.removed)return null;if(t.fire("BeforeAddUndo",{level:e,originalEvent:n}).isDefaultPrevented())return null;if(a=l[s],a&&a.content==e.content)return null;if(l[s]&&(l[s].beforeBookmark=c),o.custom_undo_redo_levels&&l.length>o.custom_undo_redo_levels){for(r=0;r0&&(t.isNotDirty=!1,t.fire("change",u)),e},undo:function(){var e;return a.typing&&(a.add(),a.typing=!1),s>0&&(e=l[--s],0===s&&(t.isNotDirty=!0),t.setContent(e.content,{format:"raw"}),t.selection.moveToBookmark(e.beforeBookmark),t.fire("undo",{level:e})),e},redo:function(){var e;return s0||a.typing&&l[0]&&i()!=l[0].content},hasRedo:function(){return sL)&&(u=a.create("br"),t.parentNode.insertBefore(u,t)),l.setStartBefore(t),l.setEndBefore(t)):(l.setStartAfter(t),l.setEndAfter(t)):(l.setStart(t,0),l.setEnd(t,0));s.setRng(l),a.remove(u),s.scrollIntoView(t)}function g(e){var t=l.forced_root_block;t&&t.toLowerCase()===e.tagName.toLowerCase()&&a.setAttribs(e,l.forced_root_block_attrs)}function v(e){var t=R,n,i,o;if(e||"TABLE"==O?(n=a.create(e||F),g(n)):n=B.cloneNode(!1),o=n,l.keep_styles!==!1)do if(/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U|VAR|CITE|DFN|CODE|MARK|Q|SUP|SUB|SAMP)$/.test(t.nodeName)){if("_mce_caret"==t.id)continue;i=t.cloneNode(!1),a.setAttrib(i,"id",""),n.hasChildNodes()?(i.appendChild(n.firstChild),n.appendChild(i)):(o=i,n.appendChild(i))}while(t=t.parentNode);return r||(o.innerHTML='
    '),n}function y(t){var n,r,i;if(3==R.nodeType&&(t?A>0:A0)return!0}function w(){var e,t,n;R&&3==R.nodeType&&A>=R.nodeValue.length&&(r||x()||(e=a.create("br"),S.insertNode(e),S.setStartAfter(e),S.setEndAfter(e),t=!0)),e=a.create("br"),S.insertNode(e),r&&"PRE"==O&&(!L||8>L)&&e.parentNode.insertBefore(a.doc.createTextNode("\r"),e),n=a.create("span",{}," "),e.parentNode.insertBefore(n,e),s.scrollIntoView(n),a.remove(n),t?(S.setStartBefore(e),S.setEndBefore(e)):(S.setStartAfter(e),S.setEndAfter(e)),s.setRng(S),c.add()}function _(e){do 3===e.nodeType&&(e.nodeValue=e.nodeValue.replace(/^[\r\n]+/,"")),e=e.firstChild;while(e)}function N(e){var t=a.getRoot(),n,r;for(n=e;n!==t&&"false"!==a.getContentEditable(n);)"true"===a.getContentEditable(n)&&(r=n),n=n.parentNode;return n!==t?r:t}function E(e){var t;r||(e.normalize(),t=e.lastChild,(!t||/^(left|right)$/gi.test(a.getStyle(t,"float",!0)))&&a.add(e,"br"))}var S,k,T,R,A,B,L,D,M,H,P,O,I,F,z;if(S=s.getRng(!0),!o.isDefaultPrevented()){if(!S.collapsed)return void i.execCommand("Delete");if(new t(a).normalize(S),R=S.startContainer,A=S.startOffset,F=(l.force_p_newlines?"p":"")||l.forced_root_block,F=F?F.toUpperCase():"",L=a.doc.documentMode,D=o.shiftKey,1==R.nodeType&&R.hasChildNodes()&&(z=A>R.childNodes.length-1,R=R.childNodes[Math.min(A,R.childNodes.length-1)]||R,A=z&&3==R.nodeType?R.nodeValue.length:0),T=N(R)){if(c.beforeChange(),!a.isBlock(T)&&T!=a.getRoot())return void((!F||D)&&w());if((F&&!D||!F&&D)&&(R=b(R,A)),B=a.getParent(R,a.isBlock),P=B?a.getParent(B.parentNode,a.isBlock):null,O=B?B.nodeName.toUpperCase():"",I=P?P.nodeName.toUpperCase():"","LI"!=I||o.ctrlKey||(B=P,O=I),"LI"==O){if(!F&&D)return void w();if(a.isEmpty(B))return void C()}if("PRE"==O&&l.br_in_pre!==!1){if(!D)return void w()}else if(!F&&!D&&"LI"!=O||F&&D)return void w();F&&B===i.getBody()||(F=F||"P",y()?(M=/^(H[1-6]|PRE|FIGURE)$/.test(O)&&"HGROUP"!=I?v(F):v(),l.end_container_on_empty_block&&f(P)&&a.isEmpty(B)?M=a.split(P,B):a.insertAfter(M,B),h(M)):y(!0)?(M=B.parentNode.insertBefore(v(),B),p(M),h(B)):(k=S.cloneRange(),k.setEndAfter(B),H=k.extractContents(),_(H),M=H.firstChild,a.insertAfter(H,B),m(M),E(B),h(M)),a.setAttrib(M,"id",""),i.fire("NewBlock",{newBlock:M}),c.add())}}}var a=i.dom,s=i.selection,l=i.settings,c=i.undoManager,u=i.schema,d=u.getNonEmptyElements();i.on("keydown",function(e){13==e.keyCode&&o(e)!==!1&&e.preventDefault()})}}),r(P,[],function(){return function(e){function t(){var t=i.getStart(),s=e.getBody(),l,c,u,d,f,p,m,h=-16777215,g,v,y,b,C;if(C=n.forced_root_block,t&&1===t.nodeType&&C){for(;t&&t!=s;){if(a[t.nodeName])return;t=t.parentNode}if(l=i.getRng(),l.setStart){c=l.startContainer,u=l.startOffset,d=l.endContainer,f=l.endOffset;try{v=e.getDoc().activeElement===s}catch(x){}}else l.item&&(t=l.item(0),l=e.getDoc().body.createTextRange(),l.moveToElementText(t)),v=l.parentElement().ownerDocument===e.getDoc(),y=l.duplicate(),y.collapse(!0),u=-1*y.move("character",h),y.collapsed||(y=l.duplicate(),y.collapse(!1),f=-1*y.move("character",h)-u);for(t=s.firstChild,b=s.nodeName.toLowerCase();t;)if((3===t.nodeType||1==t.nodeType&&!a[t.nodeName])&&o.isValidChild(b,C.toLowerCase())){if(3===t.nodeType&&0===t.nodeValue.length){m=t,t=t.nextSibling,r.remove(m);continue}p||(p=r.create(C,e.settings.forced_root_block_attrs),t.parentNode.insertBefore(p,t),g=!0),m=t,t=t.nextSibling,p.appendChild(m)}else p=null,t=t.nextSibling;if(g&&v){if(l.setStart)l.setStart(c,u),l.setEnd(d,f),i.setRng(l);else try{l=e.getDoc().body.createTextRange(),l.moveToElementText(s),l.collapse(!0),l.moveStart("character",u),f>0&&l.moveEnd("character",f),l.select()}catch(x){}e.nodeChanged()}}}var n=e.settings,r=e.dom,i=e.selection,o=e.schema,a=o.getBlockElements();n.forced_root_block&&e.on("NodeChange",t)}}),r(O,[S,g,p],function(e,n,r){var i=r.each,o=r.extend,a=r.map,s=r.inArray,l=r.explode,c=n.gecko,u=n.ie,d=!0,f=!1;return function(r){function p(e,t,n){var r;return e=e.toLowerCase(),(r=N.exec[e])?(r(e,t,n),d):f}function m(e){var t;return e=e.toLowerCase(),(t=N.state[e])?t(e):-1}function h(e){var t;return e=e.toLowerCase(),(t=N.value[e])?t(e):f}function g(e,t){t=t||"exec",i(e,function(e,n){i(n.toLowerCase().split(","),function(n){N[t][n]=e})})}function v(e,n,i){return n===t&&(n=f),i===t&&(i=null),r.getDoc().execCommand(e,n,i)}function y(e){return S.match(e)}function b(e,n){S.toggle(e,n?{value:n}:t),r.nodeChanged()}function C(e){k=_.getBookmark(e)}function x(){_.moveToBookmark(k)}var w=r.dom,_=r.selection,N={state:{},exec:{},value:{}},E=r.settings,S=r.formatter,k;o(this,{execCommand:p,queryCommandState:m,queryCommandValue:h,addCommands:g}),g({"mceResetDesignMode,mceBeginUndoLevel":function(){},"mceEndUndoLevel,mceAddUndoLevel":function(){r.undoManager.add()},"Cut,Copy,Paste":function(e){var t=r.getDoc(),i;try{v(e)}catch(o){i=d}if(i||!t.queryCommandSupported(e)){var a=r.translate("Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.");n.mac&&(a=a.replace(/Ctrl\+/g,"\u2318+")),r.windowManager.alert(a)}},unlink:function(){if(_.isCollapsed()){var e=_.getNode();return void("A"==e.tagName&&r.dom.remove(e,!0))}S.remove("link")},"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(e){var t=e.substring(7);"full"==t&&(t="justify"),i("left,center,right,justify".split(","),function(e){t!=e&&S.remove("align"+e)}),b("align"+t),p("mceRepaint")},"InsertUnorderedList,InsertOrderedList":function(e){var t,n;v(e),t=w.getParent(_.getNode(),"ol,ul"),t&&(n=t.parentNode,/^(H[1-6]|P|ADDRESS|PRE)$/.test(n.nodeName)&&(C(),w.split(n,t),x()))},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(e){b(e)},"ForeColor,HiliteColor,FontName":function(e,t,n){b(e,n)},FontSize:function(e,t,n){var r,i;n>=1&&7>=n&&(i=l(E.font_size_style_values),r=l(E.font_size_classes),n=r?r[n-1]||n:i[n-1]||n),b(e,n)},RemoveFormat:function(e){S.remove(e)},mceBlockQuote:function(){b("blockquote")},FormatBlock:function(e,t,n){return b(n||"p")},mceCleanup:function(){var e=_.getBookmark();r.setContent(r.getContent({cleanup:d}),{cleanup:d}),_.moveToBookmark(e)},mceRemoveNode:function(e,t,n){var i=n||_.getNode();i!=r.getBody()&&(C(),r.dom.remove(i,d),x())},mceSelectNodeDepth:function(e,t,n){var i=0;w.getParent(_.getNode(),function(e){return 1==e.nodeType&&i++==n?(_.select(e),f):void 0},r.getBody())},mceSelectNode:function(e,t,n){_.select(n)},mceInsertContent:function(t,n,i){function o(e){function t(e){return r[e]&&3==r[e].nodeType}var n,r,i;return n=_.getRng(!0),r=n.startContainer,i=n.startOffset,3==r.nodeType&&(i>0?e=e.replace(/^ /," "):t("previousSibling")||(e=e.replace(/^ /," ")),i|)$/," "):t("nextSibling")||(e=e.replace(/( | )(
    |)$/," "))),e}var a,s,l,c,d,f,p,m,h,g,v;/^ | $/.test(i)&&(i=o(i)),a=r.parser,s=new e({},r.schema),v='ÈB;',f={content:i,format:"html",selection:!0},r.fire("BeforeSetContent",f),i=f.content,-1==i.indexOf("{$caret}")&&(i+="{$caret}"),i=i.replace(/\{\$caret\}/,v),m=_.getRng();var y=m.startContainer||(m.parentElement?m.parentElement():null),b=r.getBody();y===b&&_.isCollapsed()&&w.isBlock(b.firstChild)&&w.isEmpty(b.firstChild)&&(m=w.createRng(),m.setStart(b.firstChild,0),m.setEnd(b.firstChild,0),_.setRng(m)),_.isCollapsed()||r.getDoc().execCommand("Delete",!1,null),l=_.getNode();var C={context:l.nodeName.toLowerCase()};if(d=a.parse(i,C),h=d.lastChild,"mce_marker"==h.attr("id"))for(p=h,h=h.prev;h;h=h.walk(!0))if(3==h.type||!w.isBlock(h.name)){h.parent.insert(p,h,"br"===h.name);break}if(C.invalid){for(_.setContent(v),l=_.getNode(),c=r.getBody(),9==l.nodeType?l=h=c:h=l;h!==c;)l=h,h=h.parentNode;i=l==c?c.innerHTML:w.getOuterHTML(l),i=s.serialize(a.parse(i.replace(//i,function(){return s.serialize(d)}))),l==c?w.setHTML(c,i):w.setOuterHTML(l,i)}else i=s.serialize(d),h=l.firstChild,g=l.lastChild,!h||h===g&&"BR"===h.nodeName?w.setHTML(l,i):_.setContent(i);p=w.get("mce_marker"),_.scrollIntoView(p),m=w.createRng(),h=p.previousSibling,h&&3==h.nodeType?(m.setStart(h,h.nodeValue.length),u||(g=p.nextSibling,g&&3==g.nodeType&&(h.appendData(g.data),g.parentNode.removeChild(g)))):(m.setStartBefore(p),m.setEndBefore(p)),w.remove(p),_.setRng(m),r.fire("SetContent",f),r.addVisual()},mceInsertRawHTML:function(e,t,n){_.setContent("tiny_mce_marker"),r.setContent(r.getContent().replace(/tiny_mce_marker/g,function(){return n}))},mceToggleFormat:function(e,t,n){b(n)},mceSetContent:function(e,t,n){r.setContent(n)},"Indent,Outdent":function(e){var t,n,o;t=E.indentation,n=/[a-z%]+$/i.exec(t),t=parseInt(t,10),m("InsertUnorderedList")||m("InsertOrderedList")?v(e):(E.forced_root_block||w.getParent(_.getNode(),w.isBlock)||S.apply("div"),i(_.getSelectedBlocks(),function(i){if("LI"!=i.nodeName){var a=r.getParam("indent_use_margin",!1)?"margin":"padding";a+="rtl"==w.getStyle(i,"direction",!0)?"Right":"Left","outdent"==e?(o=Math.max(0,parseInt(i.style[a]||0,10)-t),w.setStyle(i,a,o?o+n:"")):(o=parseInt(i.style[a]||0,10)+t+n,w.setStyle(i,a,o))}}))},mceRepaint:function(){if(c)try{C(d),_.getSel()&&_.getSel().selectAllChildren(r.getBody()),_.collapse(d),x()}catch(e){}},InsertHorizontalRule:function(){r.execCommand("mceInsertContent",!1,"
    ")},mceToggleVisualAid:function(){r.hasVisual=!r.hasVisual,r.addVisual()},mceReplaceContent:function(e,t,n){r.execCommand("mceInsertContent",!1,n.replace(/\{\$selection\}/g,_.getContent({format:"text"})))},mceInsertLink:function(e,t,n){var r;"string"==typeof n&&(n={href:n}),r=w.getParent(_.getNode(),"a"),n.href=n.href.replace(" ","%20"),r&&n.href||S.remove("link"),n.href&&S.apply("link",n,r)},selectAll:function(){var e=w.getRoot(),t;_.getRng().setStart?(t=w.createRng(),t.setStart(e,0),t.setEnd(e,e.childNodes.length),_.setRng(t)):(t=_.getRng(),t.item||(t.moveToElementText(e),t.select()))},"delete":function(){v("Delete");var e=r.getBody();w.isEmpty(e)&&(r.setContent(""),e.firstChild&&w.isBlock(e.firstChild)?r.selection.setCursorLocation(e.firstChild,0):r.selection.setCursorLocation(e,0))},mceNewDocument:function(){r.setContent("")}}),g({"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(e){var t="align"+e.substring(7),n=_.isCollapsed()?[w.getParent(_.getNode(),w.isBlock)]:_.getSelectedBlocks(),r=a(n,function(e){return!!S.matchNode(e,t)});return-1!==s(r,d)},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(e){return y(e)},mceBlockQuote:function(){return y("blockquote")},Outdent:function(){var e;if(E.inline_styles){if((e=w.getParent(_.getStart(),w.isBlock))&&parseInt(e.style.paddingLeft,10)>0)return d;if((e=w.getParent(_.getEnd(),w.isBlock))&&parseInt(e.style.paddingLeft,10)>0)return d}return m("InsertUnorderedList")||m("InsertOrderedList")||!E.inline_styles&&!!w.getParent(_.getNode(),"BLOCKQUOTE")},"InsertUnorderedList,InsertOrderedList":function(e){var t=w.getParent(_.getNode(),"ul,ol");return t&&("insertunorderedlist"===e&&"UL"===t.tagName||"insertorderedlist"===e&&"OL"===t.tagName)}},"state"),g({"FontSize,FontName":function(e){var t=0,n;return(n=w.getParent(_.getNode(),"span"))&&(t="fontsize"==e?n.style.fontSize:n.style.fontFamily.replace(/, /g,",").replace(/[\'\"]/g,"").toLowerCase()),t}},"value"),g({Undo:function(){r.undoManager.undo()},Redo:function(){r.undoManager.redo()}})}}),r(I,[p],function(e){function t(e,i){var o=this,a,s;if(e=r(e),i=o.settings=i||{},/^([\w\-]+):([^\/]{2})/i.test(e)||/^\s*#/.test(e))return void(o.source=e);var l=0===e.indexOf("//");0!==e.indexOf("/")||l||(e=(i.base_uri?i.base_uri.protocol||"http":"http")+"://mce_host"+e),/^[\w\-]*:?\/\//.test(e)||(s=i.base_uri?i.base_uri.path:new t(location.href).directory,e=""===i.base_uri.protocol?"//mce_host"+o.toAbsPath(s,e):(i.base_uri&&i.base_uri.protocol||"http")+"://mce_host"+o.toAbsPath(s,e)),e=e.replace(/@@/g,"(mce_at)"),e=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(e),n(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],function(t,n){var r=e[n];r&&(r=r.replace(/\(mce_at\)/g,"@@")),o[t]=r}),a=i.base_uri,a&&(o.protocol||(o.protocol=a.protocol),o.userInfo||(o.userInfo=a.userInfo),o.port||"mce_host"!==o.host||(o.port=a.port),o.host&&"mce_host"!==o.host||(o.host=a.host),o.source=""),l&&(o.protocol="")}var n=e.each,r=e.trim;return t.prototype={setPath:function(e){var t=this;e=/^(.*?)\/?(\w+)?$/.exec(e),t.path=e[0],t.directory=e[1],t.file=e[2],t.source="",t.getURI()},toRelative:function(e){var n=this,r;if("./"===e)return e;if(e=new t(e,{base_uri:n}),"mce_host"!=e.host&&n.host!=e.host&&e.host||n.port!=e.port||n.protocol!=e.protocol&&""!==e.protocol)return e.getURI();var i=n.getURI(),o=e.getURI();return i==o||"/"==i.charAt(i.length-1)&&i.substr(0,i.length-1)==o?i:(r=n.toRelPath(n.path,e.path),e.query&&(r+="?"+e.query),e.anchor&&(r+="#"+e.anchor),r)},toAbsolute:function(e,n){return e=new t(e,{base_uri:this}),e.getURI(this.host==e.host&&this.protocol==e.protocol?n:0)},toRelPath:function(e,t){var n,r=0,i="",o,a;if(e=e.substring(0,e.lastIndexOf("/")),e=e.split("/"),n=t.split("/"),e.length>=n.length)for(o=0,a=e.length;a>o;o++)if(o>=n.length||e[o]!=n[o]){r=o+1;break}if(e.lengtho;o++)if(o>=e.length||e[o]!=n[o]){r=o+1;break}if(1===r)return t;for(o=0,a=e.length-(r-1);a>o;o++)i+="../";for(o=r-1,a=n.length;a>o;o++)i+=o!=r-1?"/"+n[o]:n[o]; +return i},toAbsPath:function(e,t){var r,i=0,o=[],a,s;for(a=/\/$/.test(t)?"/":"",e=e.split("/"),t=t.split("/"),n(e,function(e){e&&o.push(e)}),e=o,r=t.length-1,o=[];r>=0;r--)0!==t[r].length&&"."!==t[r]&&(".."!==t[r]?i>0?i--:o.push(t[r]):i++);return r=e.length-i,s=0>=r?o.reverse().join("/"):e.slice(0,r).join("/")+"/"+o.reverse().join("/"),0!==s.indexOf("/")&&(s="/"+s),a&&s.lastIndexOf("/")!==s.length-1&&(s+=a),s},getURI:function(e){var t,n=this;return(!n.source||e)&&(t="",e||(t+=n.protocol?n.protocol+"://":"//",n.userInfo&&(t+=n.userInfo+"@"),n.host&&(t+=n.host),n.port&&(t+=":"+n.port)),n.path&&(t+=n.path),n.query&&(t+="?"+n.query),n.anchor&&(t+="#"+n.anchor),n.source=t),n.source}},t}),r(F,[p],function(e){function t(){}var n=e.each,r=e.extend,i,o;return t.extend=i=function(e){function t(){var e,t,n,r=this;if(!o&&(r.init&&r.init.apply(r,arguments),t=r.Mixins))for(e=t.length;e--;)n=t[e],n.init&&n.init.apply(r,arguments)}function a(){return this}function s(e,t){return function(){var n=this,r=n._super,i;return n._super=c[e],i=t.apply(n,arguments),n._super=r,i}}var l=this,c=l.prototype,u,d,f;o=!0,u=new l,o=!1,e.Mixins&&(n(e.Mixins,function(t){t=t;for(var n in t)"init"!==n&&(e[n]=t[n])}),c.Mixins&&(e.Mixins=c.Mixins.concat(e.Mixins))),e.Methods&&n(e.Methods.split(","),function(t){e[t]=a}),e.Properties&&n(e.Properties.split(","),function(t){var n="_"+t;e[t]=function(e){var t=this,r;return e!==r?(t[n]=e,t):t[n]}}),e.Statics&&n(e.Statics,function(e,n){t[n]=e}),e.Defaults&&c.Defaults&&(e.Defaults=r({},c.Defaults,e.Defaults));for(d in e)f=e[d],u[d]="function"==typeof f&&c[d]?s(d,f):f;return t.prototype=u,t.constructor=t,t.extend=i,t},t}),r(z,[F],function(e){function t(e){for(var t=[],n=e.length,r;n--;)r=e[n],r.__checked||(t.push(r),r.__checked=1);for(n=t.length;n--;)delete t[n].__checked;return t}var n=/^([\w\\*]+)?(?:#([\w\\]+))?(?:\.([\w\\\.]+))?(?:\[\@?([\w\\]+)([\^\$\*!~]?=)([\w\\]+)\])?(?:\:(.+))?/i,r=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,i=/^\s*|\s*$/g,o,a=e.extend({init:function(e){function t(e){return e?(e=e.toLowerCase(),function(t){return"*"===e||t.type===e}):void 0}function o(e){return e?function(t){return t._name===e}:void 0}function a(e){return e?(e=e.split("."),function(t){for(var n=e.length;n--;)if(!t.hasClass(e[n]))return!1;return!0}):void 0}function s(e,t,n){return e?function(r){var i=r[e]?r[e]():"";return t?"="===t?i===n:"*="===t?i.indexOf(n)>=0:"~="===t?(" "+i+" ").indexOf(" "+n+" ")>=0:"!="===t?i!=n:"^="===t?0===i.indexOf(n):"$="===t?i.substr(i.length-n.length)===n:!1:!!n}:void 0}function l(e){var t;return e?(e=/(?:not\((.+)\))|(.+)/i.exec(e),e[1]?(t=u(e[1],[]),function(e){return!d(e,t)}):(e=e[2],function(t,n,r){return"first"===e?0===n:"last"===e?n===r-1:"even"===e?n%2===0:"odd"===e?n%2===1:t[e]?t[e]():!1})):void 0}function c(e,r,c){function u(e){e&&r.push(e)}var d;return d=n.exec(e.replace(i,"")),u(t(d[1])),u(o(d[2])),u(a(d[3])),u(s(d[4],d[5],d[6])),u(l(d[7])),r.psuedo=!!d[7],r.direct=c,r}function u(e,t){var n=[],i,o,a;do if(r.exec(""),o=r.exec(e),o&&(e=o[3],n.push(o[1]),o[2])){i=o[3];break}while(o);for(i&&u(i,t),e=[],a=0;a"!=n[a]&&e.push(c(n[a],[],">"===n[a-1]));return t.push(e),t}var d=this.match;this._selectors=u(e,[])},match:function(e,t){var n,r,i,o,a,s,l,c,u,d,f,p,m;for(t=t||this._selectors,n=0,r=t.length;r>n;n++){for(a=t[n],o=a.length,m=e,p=0,i=o-1;i>=0;i--)for(c=a[i];m;){if(c.psuedo)for(f=m.parent().items(),u=d=f.length;u--&&f[u]!==m;);for(s=0,l=c.length;l>s;s++)if(!c[s](m,u,d)){s=l+1;break}if(s===l){p++;break}if(i===o-1)break;m=m.parent()}if(p===o)return!0}return!1},find:function(e){function n(e,t,i){var o,a,s,l,c,u=t[i];for(o=0,a=e.length;a>o;o++){for(c=e[o],s=0,l=u.length;l>s;s++)if(!u[s](c,o,a)){s=l+1;break}if(s===l)i==t.length-1?r.push(c):c.items&&n(c.items(),t,i+1);else if(u.direct)return;c.items&&n(c.items(),t,i)}}var r=[],i,s,l=this._selectors;if(e.items){for(i=0,s=l.length;s>i;i++)n(e.items(),l[i],0);s>1&&(r=t(r))}return o||(o=a.Collection),new o(r)}});return a}),r(W,[p,z,F],function(e,t,n){var r,i,o=Array.prototype.push,a=Array.prototype.slice;return i={length:0,init:function(e){e&&this.add(e)},add:function(t){var n=this;return e.isArray(t)?o.apply(n,t):t instanceof r?n.add(t.toArray()):o.call(n,t),n},set:function(e){var t=this,n=t.length,r;for(t.length=0,t.add(e),r=t.length;n>r;r++)delete t[r];return t},filter:function(e){var n=this,i,o,a=[],s,l;for("string"==typeof e?(e=new t(e),l=function(t){return e.match(t)}):l=e,i=0,o=n.length;o>i;i++)s=n[i],l(s)&&a.push(s);return new r(a)},slice:function(){return new r(a.apply(this,arguments))},eq:function(e){return-1===e?this.slice(e):this.slice(e,+e+1)},each:function(t){return e.each(this,t),this},toArray:function(){return e.toArray(this)},indexOf:function(e){for(var t=this,n=t.length;n--&&t[n]!==e;);return n},reverse:function(){return new r(e.toArray(this).reverse())},hasClass:function(e){return this[0]?this[0].hasClass(e):!1},prop:function(e,t){var n=this,r,i;return t!==r?(n.each(function(n){n[e]&&n[e](t)}),n):(i=n[0],i&&i[e]?i[e]():void 0)},exec:function(t){var n=this,r=e.toArray(arguments).slice(1);return n.each(function(e){e[t]&&e[t].apply(e,r)}),n},remove:function(){for(var e=this.length;e--;)this[e].remove();return this}},e.each("fire on off show hide addClass removeClass append prepend before after reflow".split(" "),function(t){i[t]=function(){var n=e.toArray(arguments);return this.each(function(e){t in e&&e[t].apply(e,n)}),this}}),e.each("text name disabled active selected checked visible parent value data".split(" "),function(e){i[e]=function(t){return this.prop(e,t)}}),r=n.extend(i),t.Collection=r,r}),r(V,[p,y],function(e,t){return{id:function(){return t.DOM.uniqueId()},createFragment:function(e){return t.DOM.createFragment(e)},getWindowSize:function(){return t.DOM.getViewPort()},getSize:function(e){var t,n;if(e.getBoundingClientRect){var r=e.getBoundingClientRect();t=Math.max(r.width||r.right-r.left,e.offsetWidth),n=Math.max(r.height||r.bottom-r.bottom,e.offsetHeight)}else t=e.offsetWidth,n=e.offsetHeight;return{width:t,height:n}},getPos:function(e,n){return t.DOM.getPos(e,n)},getViewPort:function(e){return t.DOM.getViewPort(e)},get:function(e){return document.getElementById(e)},addClass:function(e,n){return t.DOM.addClass(e,n)},removeClass:function(e,n){return t.DOM.removeClass(e,n)},hasClass:function(e,n){return t.DOM.hasClass(e,n)},toggleClass:function(e,n,r){return t.DOM.toggleClass(e,n,r)},css:function(e,n,r){return t.DOM.setStyle(e,n,r)},on:function(e,n,r,i){return t.DOM.bind(e,n,r,i)},off:function(e,n,r){return t.DOM.unbind(e,n,r)},fire:function(e,n,r){return t.DOM.fire(e,n,r)},innerHtml:function(e,n){t.DOM.setHTML(e,n)}}}),r(U,[F,p,W,V],function(e,t,n,r){var i=t.makeMap("focusin focusout scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave wheel keydown keypress keyup contextmenu"," "),o={},a="onmousewheel"in document,s=!1,l=e.extend({Statics:{elementIdCache:o},isRtl:function(){return l.rtl},classPrefix:"mce-",init:function(e){var n=this,i,o;if(n.settings=e=t.extend({},n.Defaults,e),n._id=e.id||r.id(),n._text=n._name="",n._width=n._height=0,n._aria={role:e.role},i=e.classes)for(i=i.split(" "),i.map={},o=i.length;o--;)i.map[i[o]]=!0;n._classes=i||[],n.visible(!0),t.each("title text width height name classes visible disabled active value".split(" "),function(t){var r=e[t],i;r!==i?n[t](r):n["_"+t]===i&&(n["_"+t]=!1)}),n.on("click",function(){return n.disabled()?!1:void 0}),e.classes&&t.each(e.classes.split(" "),function(e){n.addClass(e)}),n.settings=e,n._borderBox=n.parseBox(e.border),n._paddingBox=n.parseBox(e.padding),n._marginBox=n.parseBox(e.margin),e.hidden&&n.hide()},Properties:"parent,title,text,width,height,disabled,active,name,value",Methods:"renderHtml",getContainerElm:function(){return document.body},getParentCtrl:function(e){for(var t,n=this.getRoot().controlIdLookup;e&&n&&!(t=n[e.id]);)e=e.parentNode;return t},parseBox:function(e){var t,n=10;if(e)return"number"==typeof e?(e=e||0,{top:e,left:e,bottom:e,right:e}):(e=e.split(" "),t=e.length,1===t?e[1]=e[2]=e[3]=e[0]:2===t?(e[2]=e[0],e[3]=e[1]):3===t&&(e[3]=e[1]),{top:parseInt(e[0],n)||0,right:parseInt(e[1],n)||0,bottom:parseInt(e[2],n)||0,left:parseInt(e[3],n)||0})},borderBox:function(){return this._borderBox},paddingBox:function(){return this._paddingBox},marginBox:function(){return this._marginBox},measureBox:function(e,t){function n(t){var n=document.defaultView;return n?(t=t.replace(/[A-Z]/g,function(e){return"-"+e}),n.getComputedStyle(e,null).getPropertyValue(t)):e.currentStyle[t]}function r(e){var t=parseFloat(n(e),10);return isNaN(t)?0:t}return{top:r(t+"TopWidth"),right:r(t+"RightWidth"),bottom:r(t+"BottomWidth"),left:r(t+"LeftWidth")}},initLayoutRect:function(){var e=this,t=e.settings,n,i,o=e.getEl(),a,s,l,c,u,d,f,p;n=e._borderBox=e._borderBox||e.measureBox(o,"border"),e._paddingBox=e._paddingBox||e.measureBox(o,"padding"),e._marginBox=e._marginBox||e.measureBox(o,"margin"),p=r.getSize(o),d=t.minWidth,f=t.minHeight,l=d||p.width,c=f||p.height,a=t.width,s=t.height,u=t.autoResize,u="undefined"!=typeof u?u:!a&&!s,a=a||l,s=s||c;var m=n.left+n.right,h=n.top+n.bottom,g=t.maxWidth||65535,v=t.maxHeight||65535;return e._layoutRect=i={x:t.x||0,y:t.y||0,w:a,h:s,deltaW:m,deltaH:h,contentW:a-m,contentH:s-h,innerW:a-m,innerH:s-h,startMinWidth:d||0,startMinHeight:f||0,minW:Math.min(l,g),minH:Math.min(c,v),maxW:g,maxH:v,autoResize:u,scrollW:0},e._lastLayoutRect={},i},layoutRect:function(e){var t=this,n=t._layoutRect,r,i,o,a,s,c;return n||(n=t.initLayoutRect()),e?(o=n.deltaW,a=n.deltaH,e.x!==s&&(n.x=e.x),e.y!==s&&(n.y=e.y),e.minW!==s&&(n.minW=e.minW),e.minH!==s&&(n.minH=e.minH),i=e.w,i!==s&&(i=in.maxW?n.maxW:i,n.w=i,n.innerW=i-o),i=e.h,i!==s&&(i=in.maxH?n.maxH:i,n.h=i,n.innerH=i-a),i=e.innerW,i!==s&&(i=in.maxW-o?n.maxW-o:i,n.innerW=i,n.w=i+o),i=e.innerH,i!==s&&(i=in.maxH-a?n.maxH-a:i,n.innerH=i,n.h=i+a),e.contentW!==s&&(n.contentW=e.contentW),e.contentH!==s&&(n.contentH=e.contentH),r=t._lastLayoutRect,(r.x!==n.x||r.y!==n.y||r.w!==n.w||r.h!==n.h)&&(c=l.repaintControls,c&&c.map&&!c.map[t._id]&&(c.push(t),c.map[t._id]=!0),r.x=n.x,r.y=n.y,r.w=n.w,r.h=n.h),t):n},repaint:function(){var e=this,t,n,r,i,o=0,a=0,s,l;l=document.createRange?function(e){return e}:Math.round,t=e.getEl().style,r=e._layoutRect,s=e._lastRepaintRect||{},i=e._borderBox,o=i.left+i.right,a=i.top+i.bottom,r.x!==s.x&&(t.left=l(r.x)+"px",s.x=r.x),r.y!==s.y&&(t.top=l(r.y)+"px",s.y=r.y),r.w!==s.w&&(t.width=l(r.w-o)+"px",s.w=r.w),r.h!==s.h&&(t.height=l(r.h-a)+"px",s.h=r.h),e._hasBody&&r.innerW!==s.innerW&&(n=e.getEl("body").style,n.width=l(r.innerW)+"px",s.innerW=r.innerW),e._hasBody&&r.innerH!==s.innerH&&(n=n||e.getEl("body").style,n.height=l(r.innerH)+"px",s.innerH=r.innerH),e._lastRepaintRect=s,e.fire("repaint",{},!1)},on:function(e,t){function n(e){var t,n;return function(i){return t||r.parents().each(function(r){var i=r.settings.callbacks;return i&&(t=i[e])?(n=r,!1):void 0}),t.call(n,i)}}var r=this,o,a,s,l;if(t)for("string"==typeof t&&(t=n(t)),s=e.toLowerCase().split(" "),l=s.length;l--;)e=s[l],o=r._bindings,o||(o=r._bindings={}),a=o[e],a||(a=o[e]=[]),a.push(t),i[e]&&(r._nativeEvents?r._nativeEvents[e]=!0:r._nativeEvents={name:!0},r._rendered&&r.bindPendingEvents());return r},off:function(e,t){var n=this,r,i=n._bindings,o,a,s,l;if(i)if(e)for(s=e.toLowerCase().split(" "),r=s.length;r--;){if(e=s[r],o=i[e],!e){for(a in i)i[a].length=0;return n}if(o)if(t)for(l=o.length;l--;)o[l]===t&&o.splice(l,1);else o.length=0}else n._bindings=[];return n},fire:function(e,t,n){function r(){return!1}function i(){return!0}var o=this,a,s,l,c;if(e=e.toLowerCase(),t=t||{},t.type||(t.type=e),t.control||(t.control=o),t.preventDefault||(t.preventDefault=function(){t.isDefaultPrevented=i},t.stopPropagation=function(){t.isPropagationStopped=i},t.stopImmediatePropagation=function(){t.isImmediatePropagationStopped=i},t.isDefaultPrevented=r,t.isPropagationStopped=r,t.isImmediatePropagationStopped=r),o._bindings&&(l=o._bindings[e]))for(a=0,s=l.length;s>a&&(t.isImmediatePropagationStopped()||l[a].call(o,t)!==!1);a++);if(n!==!1)for(c=o.parent();c&&!t.isPropagationStopped();)c.fire(e,t,!1),c=c.parent();return t},hasEventListeners:function(e){return e in this._bindings},parents:function(e){var t=this,r,i=new n;for(r=t.parent();r;r=r.parent())i.add(r);return e&&(i=i.filter(e)),i},next:function(){var e=this.parent().items();return e[e.indexOf(this)+1]},prev:function(){var e=this.parent().items();return e[e.indexOf(this)-1]},findCommonAncestor:function(e,t){for(var n;e;){for(n=t;n&&e!=n;)n=n.parent();if(e==n)break;e=e.parent()}return e},hasClass:function(e,t){var n=this._classes[t||"control"];return e=this.classPrefix+e,n&&!!n.map[e]},addClass:function(e,t){var n=this,r,i;return e=this.classPrefix+e,r=n._classes[t||"control"],r||(r=[],r.map={},n._classes[t||"control"]=r),r.map[e]||(r.map[e]=e,r.push(e),n._rendered&&(i=n.getEl(t),i&&(i.className=r.join(" ")))),n},removeClass:function(e,t){var n=this,r,i,o;if(e=this.classPrefix+e,r=n._classes[t||"control"],r&&r.map[e])for(delete r.map[e],i=r.length;i--;)r[i]===e&&r.splice(i,1);return n._rendered&&(o=n.getEl(t),o&&(o.className=r.join(" "))),n},toggleClass:function(e,t,n){var r=this;return t?r.addClass(e,n):r.removeClass(e,n),r},classes:function(e){var t=this._classes[e||"control"];return t?t.join(" "):""},innerHtml:function(e){return r.innerHtml(this.getEl(),e),this},getEl:function(e,t){var n,i=e?this._id+"-"+e:this._id;return n=o[i]=(t===!0?null:o[i])||r.get(i)},visible:function(e){var t=this,n;return"undefined"!=typeof e?(t._visible!==e&&(t._rendered&&(t.getEl().style.display=e?"":"none"),t._visible=e,n=t.parent(),n&&(n._lastRect=null),t.fire(e?"show":"hide")),t):t._visible},show:function(){return this.visible(!0)},hide:function(){return this.visible(!1)},focus:function(){try{this.getEl().focus()}catch(e){}return this},blur:function(){return this.getEl().blur(),this},aria:function(e,t){var n=this,r=n.getEl(n.ariaTarget);return"undefined"==typeof t?n._aria[e]:(n._aria[e]=t,n._rendered&&r.setAttribute("role"==e?e:"aria-"+e,t),n)},encode:function(e,t){return t!==!1&&l.translate&&(e=l.translate(e)),(e||"").replace(/[&<>"]/g,function(e){return"&#"+e.charCodeAt(0)+";"})},before:function(e){var t=this,n=t.parent();return n&&n.insert(e,n.items().indexOf(t),!0),t},after:function(e){var t=this,n=t.parent();return n&&n.insert(e,n.items().indexOf(t)),t},remove:function(){var e=this,t=e.getEl(),n=e.parent(),i,a;if(e.items){var s=e.items().toArray();for(a=s.length;a--;)s[a].remove()}n&&n.items&&(i=[],n.items().each(function(t){t!==e&&i.push(t)}),n.items().set(i),n._lastRect=null),e._eventsRoot&&e._eventsRoot==e&&r.off(t);var l=e.getRoot().controlIdLookup;if(l&&delete l[e._id],delete o[e._id],t&&t.parentNode){var c=t.getElementsByTagName("*");for(a=c.length;a--;)delete o[c[a].id];t.parentNode.removeChild(t)}return e._rendered=!1,e},renderBefore:function(e){var t=this;return e.parentNode.insertBefore(r.createFragment(t.renderHtml()),e),t.postRender(),t},renderTo:function(e){var t=this;return e=e||t.getContainerElm(),e.appendChild(r.createFragment(t.renderHtml())),t.postRender(),t},postRender:function(){var e=this,t=e.settings,n,i,o,a,s;for(a in t)0===a.indexOf("on")&&e.on(a.substr(2),t[a]);if(e._eventsRoot){for(o=e.parent();!s&&o;o=o.parent())s=o._eventsRoot;if(s)for(a in s._nativeEvents)e._nativeEvents[a]=!0}e.bindPendingEvents(),t.style&&(n=e.getEl(),n&&(n.setAttribute("style",t.style),n.style.cssText=t.style)),e._visible||r.css(e.getEl(),"display","none"),e.settings.border&&(i=e.borderBox(),r.css(e.getEl(),{"border-top-width":i.top,"border-right-width":i.right,"border-bottom-width":i.bottom,"border-left-width":i.left}));var l=e.getRoot();l.controlIdLookup||(l.controlIdLookup={}),l.controlIdLookup[e._id]=e;for(var c in e._aria)e.aria(c,e._aria[c]);e.fire("postrender",{},!1)},scrollIntoView:function(e){function t(e,t){var n,r,i=e;for(n=r=0;i&&i!=t&&i.nodeType;)n+=i.offsetLeft||0,r+=i.offsetTop||0,i=i.offsetParent;return{x:n,y:r}}var n=this.getEl(),r=n.parentNode,i,o,a,s,l,c,u=t(n,r);return i=u.x,o=u.y,a=n.offsetWidth,s=n.offsetHeight,l=r.clientWidth,c=r.clientHeight,"end"==e?(i-=l-a,o-=c-s):"center"==e&&(i-=l/2-a/2,o-=c/2-s/2),r.scrollLeft=i,r.scrollTop=o,this},bindPendingEvents:function(){function e(e){var t=o.getParentCtrl(e.target);t&&t.fire(e.type,e)}function t(){var e=d._lastHoverCtrl;e&&(e.fire("mouseleave",{target:e.getEl()}),e.parents().each(function(e){e.fire("mouseleave",{target:e.getEl()})}),d._lastHoverCtrl=null)}function n(e){var t=o.getParentCtrl(e.target),n=d._lastHoverCtrl,r=0,i,a,s;if(t!==n){if(d._lastHoverCtrl=t,a=t.parents().toArray().reverse(),a.push(t),n){for(s=n.parents().toArray().reverse(),s.push(n),r=0;r=r;i--)n=s[i],n.fire("mouseleave",{target:n.getEl()})}for(i=r;il;l++)d=u[l]._eventsRoot;for(d||(d=u[u.length-1]||o),o._eventsRoot=d,c=l,l=0;c>l;l++)u[l]._eventsRoot=d;for(p in f){if(!f)return!1;"wheel"!==p||s?("mouseenter"===p||"mouseleave"===p?d._hasMouseEnter||(r.on(d.getEl(),"mouseleave",t),r.on(d.getEl(),"mouseover",n),d._hasMouseEnter=1):d[p]||(r.on(d.getEl(),p,e),d[p]=!0),f[p]=!1):a?r.on(o.getEl(),"mousewheel",i):r.on(o.getEl(),"DOMMouseScroll",i)}}},getRoot:function(){for(var e=this,t,n=[];e;){if(e.rootControl){t=e.rootControl;break}n.push(e),t=e,e=e.parent()}t||(t=this);for(var r=n.length;r--;)n[r].rootControl=t;return t},reflow:function(){return this.repaint(),this}});return l}),r(q,[],function(){var e={},t;return{add:function(t,n){e[t.toLowerCase()]=n},has:function(t){return!!e[t.toLowerCase()]},create:function(n,r){var i,o,a;if(!t){a=tinymce.ui;for(o in a)e[o.toLowerCase()]=a[o];t=!0}if("string"==typeof n?(r=r||{},r.type=n):(r=n,n=r.type),n=n.toLowerCase(),i=e[n],!i)throw new Error("Could not find control by type: "+n);return i=new i(r),i.type=n,i}}}),r($,[],function(){return function(e){function t(e){return e=e||b,e&&e.getAttribute("role")}function n(e){for(var n,r=e||b;r=r.parentNode;)if(n=t(r))return n}function r(e){var t=b;return t?t.getAttribute("aria-"+e):void 0}function i(e){return"INPUT"==e.tagName||"TEXTAREA"==e.tagName}function o(e){return i(e)&&!e.hidden?!0:/^(button|menuitem|checkbox|tab|menuitemcheckbox|option|gridcell)$/.test(t(e))?!0:!1}function a(e){function t(e){if(1==e.nodeType&&"none"!=e.style.display){o(e)&&n.push(e);for(var r=0;re?e=t.length-1:e>=t.length&&(e=0),t[e]&&t[e].focus(),e}function u(e,t){var n=-1,r=s();t=t||a(r.getEl());for(var i=0;i=0&&(n=t.getEl(),n&&n.parentNode.removeChild(n),n=e.getEl(),n&&n.parentNode.removeChild(n)),t.parent(this)},create:function(t){var n=this,i,a=[];return o.isArray(t)||(t=[t]),o.each(t,function(t){t&&(t instanceof e||("string"==typeof t&&(t={type:t}),i=o.extend({},n.settings.defaults,t),t.type=i.type=i.type||t.type||n.settings.defaultType||(i.defaults?i.defaults.type:null),t=r.create(i)),a.push(t))}),a},renderNew:function(){var e=this;return e.items().each(function(t,n){var r,i;t.parent(e),t._rendered||(r=e.getEl("body"),i=a.createFragment(t.renderHtml()),r.hasChildNodes()&&n<=r.childNodes.length-1?r.insertBefore(i,r.childNodes[n]):r.appendChild(i),t.postRender())}),e._layout.applyClasses(e),e._lastRect=null,e},append:function(e){return this.add(e).renderNew()},prepend:function(e){var t=this;return t.items().set(t.create(e).concat(t.items().toArray())),t.renderNew()},insert:function(e,t,n){var r=this,i,o,a;return e=r.create(e),i=r.items(),!n&&t=0&&t
    '+(e.settings.html||"")+t.renderHtml(e)+"
    "},postRender:function(){var e=this,t;return e.items().exec("postRender"),e._super(),e._layout.postRender(e),e._rendered=!0,e.settings.style&&a.css(e.getEl(),e.settings.style),e.settings.border&&(t=e.borderBox(),a.css(e.getEl(),{"border-top-width":t.top,"border-right-width":t.right,"border-bottom-width":t.bottom,"border-left-width":t.left})),e.parent()||(e.keyboardNav=new i({root:e})),e},initLayoutRect:function(){var e=this,t=e._super();return e._layout.recalc(e),t},recalc:function(){var e=this,t=e._layoutRect,n=e._lastRect;return n&&n.w==t.w&&n.h==t.h?void 0:(e._layout.recalc(e),t=e.layoutRect(),e._lastRect={x:t.x,y:t.y,w:t.w,h:t.h},!0)},reflow:function(){var t;if(this.visible()){for(e.repaintControls=[],e.repaintControls.map={},this.recalc(),t=e.repaintControls.length;t--;)e.repaintControls[t].repaint();"flow"!==this.settings.layout&&"stack"!==this.settings.layout&&this.repaint(),e.repaintControls=[]}return this}})}),r(K,[V],function(e){function t(){var e=document,t,n,r,i,o,a,s,l,c=Math.max;return t=e.documentElement,n=e.body,r=c(t.scrollWidth,n.scrollWidth),i=c(t.clientWidth,n.clientWidth),o=c(t.offsetWidth,n.offsetWidth),a=c(t.scrollHeight,n.scrollHeight),s=c(t.clientHeight,n.clientHeight),l=c(t.offsetHeight,n.offsetHeight),{width:o>r?i:r,height:l>a?s:a}}return function(n,r){function i(){return a.getElementById(r.handle||n)}var o,a=document,s,l,c,u,d,f;r=r||{},l=function(n){var l=t(),p,m;n.preventDefault(),s=n.button,p=i(),d=n.screenX,f=n.screenY,m=window.getComputedStyle?window.getComputedStyle(p,null).getPropertyValue("cursor"):p.runtimeStyle.cursor,o=a.createElement("div"),e.css(o,{position:"absolute",top:0,left:0,width:l.width,height:l.height,zIndex:2147483647,opacity:1e-4,background:"red",cursor:m}),a.body.appendChild(o),e.on(a,"mousemove",u),e.on(a,"mouseup",c),r.start(n)},u=function(e){return e.button!==s?c(e):(e.deltaX=e.screenX-d,e.deltaY=e.screenY-f,e.preventDefault(),void r.drag(e))},c=function(t){e.off(a,"mousemove",u),e.off(a,"mouseup",c),o.parentNode.removeChild(o),r.stop&&r.stop(t)},this.destroy=function(){e.off(i())},e.on(i(),"mousedown",l)}}),r(Y,[V,K],function(e,t){return{init:function(){var e=this;e.on("repaint",e.renderScroll)},renderScroll:function(){function n(){function t(t,a,s,l,c,u){var d,f,p,m,h,g,v,y,b;if(f=i.getEl("scroll"+t)){if(y=a.toLowerCase(),b=s.toLowerCase(),i.getEl("absend")&&e.css(i.getEl("absend"),y,i.layoutRect()[l]-1),!c)return void e.css(f,"display","none");e.css(f,"display","block"),d=i.getEl("body"),p=i.getEl("scroll"+t+"t"),m=d["client"+s]-2*o,m-=n&&r?f["client"+u]:0,h=d["scroll"+s],g=m/h,v={},v[y]=d["offset"+a]+o,v[b]=m,e.css(f,v),v={},v[y]=d["scroll"+a]*g,v[b]=m*g,e.css(p,v)}}var n,r,a;a=i.getEl("body"),n=a.scrollWidth>a.clientWidth,r=a.scrollHeight>a.clientHeight,t("h","Left","Width","contentW",n,"Height"),t("v","Top","Height","contentH",r,"Width")}function r(){function n(n,r,a,s,l){var c,u=i._id+"-scroll"+n,d=i.classPrefix;i.getEl().appendChild(e.createFragment('
    ')),i.draghelper=new t(u+"t",{start:function(){c=i.getEl("body")["scroll"+r],e.addClass(e.get(u),d+"active")},drag:function(e){var t,u,d,f,p=i.layoutRect();u=p.contentW>p.innerW,d=p.contentH>p.innerH,f=i.getEl("body")["client"+a]-2*o,f-=u&&d?i.getEl("scroll"+n)["client"+l]:0,t=f/i.getEl("body")["scroll"+a],i.getEl("body")["scroll"+r]=c+e["delta"+s]/t},stop:function(){e.removeClass(e.get(u),d+"active")}})}i.addClass("scroll"),n("v","Top","Height","Y","Width"),n("h","Left","Width","X","Height")}var i=this,o=2;i.settings.autoScroll&&(i._hasScroll||(i._hasScroll=!0,r(),i.on("wheel",function(e){var t=i.getEl("body");t.scrollLeft+=10*(e.deltaX||0),t.scrollTop+=10*e.deltaY,n()}),e.on(i.getEl("body"),"scroll",n)),n())}}}),r(G,[j,Y],function(e,t){return e.extend({Defaults:{layout:"fit",containerCls:"panel"},Mixins:[t],renderHtml:function(){var e=this,t=e._layout,n=e.settings.html;return e.preRender(),t.preRender(e),"undefined"==typeof n?n='
    '+t.renderHtml(e)+"
    ":("function"==typeof n&&(n=n.call(e)),e._hasBody=!1),'
    '+(e._preBodyHtml||"")+n+"
    "}})}),r(X,[V],function(e){function t(t,n,r){var i,o,a,s,l,c,u,d,f,p;return f=e.getViewPort(),o=e.getPos(n),a=o.x,s=o.y,t._fixed&&(a-=f.x,s-=f.y),i=t.getEl(),p=e.getSize(i),l=p.width,c=p.height,p=e.getSize(n),u=p.width,d=p.height,r=(r||"").split(""),"b"===r[0]&&(s+=d),"r"===r[1]&&(a+=u),"c"===r[0]&&(s+=Math.round(d/2)),"c"===r[1]&&(a+=Math.round(u/2)),"b"===r[3]&&(s-=c),"r"===r[4]&&(a-=l),"c"===r[3]&&(s-=Math.round(c/2)),"c"===r[4]&&(a-=Math.round(l/2)),{x:a,y:s,w:l,h:c}}return{testMoveRel:function(n,r){for(var i=e.getViewPort(),o=0;o0&&a.x+a.w0&&a.y+a.hi.x&&a.x+a.wi.y&&a.y+a.he?0:e+n>t?(e=t-n,0>e?0:e):e}var i=this;if(i.settings.constrainToViewport){var o=e.getViewPort(window),a=i.layoutRect();t=r(t,o.w+o.x,a.w),n=r(n,o.h+o.y,a.h)}return i._rendered?i.layoutRect({x:t,y:n}).repaint():(i.settings.x=t,i.settings.y=n),i.fire("move",{x:t,y:n}),i}}}),r(J,[V],function(e){return{resizeToContent:function(){this._layoutRect.autoResize=!0,this._lastRect=null,this.reflow()},resizeTo:function(t,n){if(1>=t||1>=n){var r=e.getWindowSize();t=1>=t?t*r.w:t,n=1>=n?n*r.h:n}return this._layoutRect.autoResize=!1,this.layoutRect({minW:t,minH:n,w:t,h:n}).reflow()},resizeBy:function(e,t){var n=this,r=n.layoutRect();return n.resizeTo(r.w+e,r.h+t)}}}),r(Q,[G,X,J,V],function(e,t,n,r){function i(e){var t;for(t=s.length;t--;)s[t]===e&&s.splice(t,1);for(t=l.length;t--;)l[t]===e&&l.splice(t,1)}var o,a,s=[],l=[],c,u=e.extend({Mixins:[t,n],init:function(e){function t(){var e,t=u.zIndex||65535,n;if(l.length)for(e=0;en&&(e.fixed(!1).layoutRect({y:e._autoFixY}).repaint(),t(!1,e._autoFixY-n)):(e._autoFixY=e.layoutRect().y,e._autoFixY'),n=n.firstChild,d.getContainerElm().appendChild(n),setTimeout(function(){r.addClass(n,i+"in"),r.addClass(d.getEl(),i+"in")},0),c=!0),l.push(d),t()}}),d.on("close hide",function(e){if(e.control==d){for(var n=l.length;n--;)l[n]===d&&l.splice(n,1);t()}}),d.on("show",function(){d.parents().each(function(e){return e._fixed?(d.fixed(!0),!1):void 0})}),e.popover&&(d._preBodyHtml='
    ',d.addClass("popover").addClass("bottom").addClass(d.isRtl()?"end":"start"))},fixed:function(e){var t=this;if(t._fixed!=e){if(t._rendered){var n=r.getViewPort();e?t.layoutRect().y-=n.y:t.layoutRect().y+=n.y}t.toggleClass("fixed",e),t._fixed=e}return t},show:function(){var e=this,t,n=e._super();for(t=s.length;t--&&s[t]!==e;);return-1===t&&s.push(e),n},hide:function(){return i(this),this._super()},hideAll:function(){u.hideAll()},close:function(){var e=this;return e.fire("close"),e.remove()},remove:function(){i(this),this._super()},postRender:function(){var e=this;return e.settings.bodyRole&&this.getEl("body").setAttribute("role",e.settings.bodyRole),e._super()}});return u.hideAll=function(){for(var e=s.length;e--;){var t=s[e];t&&t.settings.autohide&&(t.hide(),s.splice(e,1))}},u}),r(Z,[Q,G,V,K],function(e,t,n,r){var i=e.extend({modal:!0,Defaults:{border:1,layout:"flex",containerCls:"panel",role:"dialog",callbacks:{submit:function(){this.fire("submit",{data:this.toJSON()})},close:function(){this.close()}}},init:function(e){var n=this;n._super(e),n.isRtl()&&n.addClass("rtl"),n.addClass("window"),n._fixed=!0,e.buttons&&(n.statusbar=new t({layout:"flex",border:"1 0 0 0",spacing:3,padding:10,align:"center",pack:n.isRtl()?"start":"end",defaults:{type:"button"},items:e.buttons}),n.statusbar.addClass("foot"),n.statusbar.parent(n)),n.on("click",function(e){-1!=e.target.className.indexOf(n.classPrefix+"close")&&n.close() +}),n.on("cancel",function(){n.close()}),n.aria("describedby",n.describedBy||n._id+"-none"),n.aria("label",e.title),n._fullscreen=!1},recalc:function(){var e=this,t=e.statusbar,r,i,o,a;e._fullscreen&&(e.layoutRect(n.getWindowSize()),e.layoutRect().contentH=e.layoutRect().innerH),e._super(),r=e.layoutRect(),e.settings.title&&!e._fullscreen&&(i=r.headerW,i>r.w&&(o=r.x-Math.max(0,i/2),e.layoutRect({w:i,x:o}),a=!0)),t&&(t.layoutRect({w:e.layoutRect().innerW}).recalc(),i=t.layoutRect().minW+r.deltaW,i>r.w&&(o=r.x-Math.max(0,i-r.w),e.layoutRect({w:i,x:o}),a=!0)),a&&e.recalc()},initLayoutRect:function(){var e=this,t=e._super(),r=0,i;if(e.settings.title&&!e._fullscreen){i=e.getEl("head");var o=n.getSize(i);t.headerW=o.width,t.headerH=o.height,r+=t.headerH}e.statusbar&&(r+=e.statusbar.layoutRect().h),t.deltaH+=r,t.minH+=r,t.h+=r;var a=n.getWindowSize();return t.x=Math.max(0,a.w/2-t.w/2),t.y=Math.max(0,a.h/2-t.h/2),t},renderHtml:function(){var e=this,t=e._layout,n=e._id,r=e.classPrefix,i=e.settings,o="",a="",s=i.html;return e.preRender(),t.preRender(e),i.title&&(o='
    '+e.encode(i.title)+'
    '),i.url&&(s=''),"undefined"==typeof s&&(s=t.renderHtml(e)),e.statusbar&&(a=e.statusbar.renderHtml()),'
    '+o+'
    '+s+"
    "+a+"
    "},fullscreen:function(e){var t=this,r=document.documentElement,i,o=t.classPrefix,a;if(e!=t._fullscreen)if(n.on(window,"resize",function(){var e;if(t._fullscreen)if(i)t._timer||(t._timer=setTimeout(function(){var e=n.getWindowSize();t.moveTo(0,0).resizeTo(e.w,e.h),t._timer=0},50));else{e=(new Date).getTime();var r=n.getWindowSize();t.moveTo(0,0).resizeTo(r.w,r.h),(new Date).getTime()-e>50&&(i=!0)}}),a=t.layoutRect(),t._fullscreen=e,e){t._initial={x:a.x,y:a.y,w:a.w,h:a.h},t._borderBox=t.parseBox("0"),t.getEl("head").style.display="none",a.deltaH-=a.headerH+2,n.addClass(r,o+"fullscreen"),n.addClass(document.body,o+"fullscreen"),t.addClass("fullscreen");var s=n.getWindowSize();t.moveTo(0,0).resizeTo(s.w,s.h)}else t._borderBox=t.parseBox(t.settings.border),t.getEl("head").style.display="",a.deltaH+=a.headerH,n.removeClass(r,o+"fullscreen"),n.removeClass(document.body,o+"fullscreen"),t.removeClass("fullscreen"),t.moveTo(t._initial.x,t._initial.y).resizeTo(t._initial.w,t._initial.h);return t.reflow()},postRender:function(){var e=this,t;setTimeout(function(){e.addClass("in")},0),e._super(),e.statusbar&&e.statusbar.postRender(),e.focus(),this.dragHelper=new r(e._id+"-dragh",{start:function(){t={x:e.layoutRect().x,y:e.layoutRect().y}},drag:function(n){e.moveTo(t.x+n.deltaX,t.y+n.deltaY)}}),e.on("submit",function(t){t.isDefaultPrevented()||e.close()})},submit:function(){return this.fire("submit",{data:this.toJSON()})},remove:function(){var e=this,t=e.classPrefix;e.dragHelper.destroy(),e._super(),e.statusbar&&this.statusbar.remove(),e._fullscreen&&(n.removeClass(document.documentElement,t+"fullscreen"),n.removeClass(document.body,t+"fullscreen"))}});return i}),r(et,[Z],function(e){var t=e.extend({init:function(e){e={border:1,padding:20,layout:"flex",pack:"center",align:"center",containerCls:"panel",autoScroll:!0,buttons:{type:"button",text:"Ok",action:"ok"},items:{type:"label",multiline:!0,maxWidth:500,maxHeight:200}},this._super(e)},Statics:{OK:1,OK_CANCEL:2,YES_NO:3,YES_NO_CANCEL:4,msgBox:function(n){var r,i=n.callback||function(){};switch(n.buttons){case t.OK_CANCEL:r=[{type:"button",text:"Ok",subtype:"primary",onClick:function(e){e.control.parents()[1].close(),i(!0)}},{type:"button",text:"Cancel",onClick:function(e){e.control.parents()[1].close(),i(!1)}}];break;case t.YES_NO:r=[{type:"button",text:"Ok",subtype:"primary",onClick:function(e){e.control.parents()[1].close(),i(!0)}}];break;case t.YES_NO_CANCEL:r=[{type:"button",text:"Ok",subtype:"primary",onClick:function(e){e.control.parents()[1].close()}}];break;default:r=[{type:"button",text:"Ok",subtype:"primary",onClick:function(e){e.control.parents()[1].close(),i(!0)}}]}return new e({padding:20,x:n.x,y:n.y,minWidth:300,minHeight:100,layout:"flex",pack:"center",align:"center",buttons:r,title:n.title,role:"alertdialog",items:{type:"label",multiline:!0,maxWidth:500,maxHeight:200,text:n.text},onPostRender:function(){this.aria("describedby",this.items()[0]._id)},onClose:n.onClose,onCancel:function(){i(!1)}}).renderTo(document.body).reflow()},alert:function(e,n){return"string"==typeof e&&(e={text:e}),e.callback=n,t.msgBox(e)},confirm:function(e,n){return"string"==typeof e&&(e={text:e}),e.callback=n,e.buttons=t.OK_CANCEL,t.msgBox(e)}}});return t}),r(tt,[Z,et],function(e,t){return function(n){function r(){return o.length?o[o.length-1]:void 0}var i=this,o=[];i.windows=o,i.open=function(t,r){var i;return n.editorManager.activeEditor=n,t.title=t.title||" ",t.url=t.url||t.file,t.url&&(t.width=parseInt(t.width||320,10),t.height=parseInt(t.height||240,10)),t.body&&(t.items={defaults:t.defaults,type:t.bodyType||"form",items:t.body}),t.url||t.buttons||(t.buttons=[{text:"Ok",subtype:"primary",onclick:function(){i.find("form")[0].submit()}},{text:"Cancel",onclick:function(){i.close()}}]),i=new e(t),o.push(i),i.on("close",function(){for(var e=o.length;e--;)o[e]===i&&o.splice(e,1);n.focus()}),t.data&&i.on("postRender",function(){this.find("*").each(function(e){var n=e.name();n in t.data&&e.value(t.data[n])})}),i.features=t||{},i.params=r||{},n.nodeChanged(),i.renderTo(document.body).reflow()},i.alert=function(e,r,i){t.alert(e,function(){r?r.call(i||this):n.focus()})},i.confirm=function(e,n,r){t.confirm(e,function(e){n.call(r||this,e)})},i.close=function(){r()&&r().close()},i.getParams=function(){return r()?r().params:null},i.setParams=function(e){r()&&(r().params=e)}}}),r(nt,[R,B,x,h,g,p],function(e,t,n,r,i,o){return function(a){function s(e,t){try{a.getDoc().execCommand(e,!1,t)}catch(n){}}function l(){var e=a.getDoc().documentMode;return e?e:6}function c(e){return e.isDefaultPrevented()}function u(){function t(e){var t=new i(function(){});o.each(a.getBody().getElementsByTagName("*"),function(e){"SPAN"==e.tagName&&e.setAttribute("mce-data-marked",1),!e.hasAttribute("data-mce-style")&&e.hasAttribute("style")&&a.dom.setAttrib(e,"style",e.getAttribute("style"))}),t.observe(a.getDoc(),{childList:!0,attributes:!0,subtree:!0,attributeFilter:["style"]}),a.getDoc().execCommand(e?"ForwardDelete":"Delete",!1,null);var n=a.selection.getRng(),r=n.startContainer.parentNode;o.each(t.takeRecords(),function(e){if("style"==e.attributeName){var t=e.target.getAttribute("data-mce-style");t?e.target.setAttribute("style",t):e.target.removeAttribute("style")}o.each(e.addedNodes,function(e){if("SPAN"==e.nodeName&&!e.getAttribute("mce-data-marked")){var t,i;e==r&&(t=n.startOffset,i=e.firstChild),U.remove(e,!0),i&&(n.setStart(i,t),n.setEnd(i,t),a.selection.setRng(n))}})}),t.disconnect(),o.each(a.dom.select("span[mce-data-marked]"),function(e){e.removeAttribute("mce-data-marked")})}var n=a.getDoc(),r="data:text/mce-internal,",i=window.MutationObserver,s;i||(s=!0,i=function(){function e(e){var t=e.relatedNode||e.target;n.push({target:t,addedNodes:[t]})}function t(e){var t=e.relatedNode||e.target;n.push({target:t,attributeName:e.attrName})}var n=[],r;this.observe=function(n){r=n,r.addEventListener("DOMSubtreeModified",e,!1),r.addEventListener("DOMNodeInsertedIntoDocument",e,!1),r.addEventListener("DOMNodeInserted",e,!1),r.addEventListener("DOMAttrModified",t,!1)},this.disconnect=function(){r.removeEventListener("DOMNodeInserted",e),r.removeEventListener("DOMAttrModified",t),r.removeEventListener("DOMSubtreeModified",e,!1)},this.takeRecords=function(){return n}}),a.on("keydown",function(n){var r=n.keyCode==V,i=e.metaKeyPressed(n);if(!c(n)&&(r||n.keyCode==W)){var o=a.selection.getRng(),s=o.startContainer,l=o.startOffset;if(!i&&o.collapsed&&3==s.nodeType&&(r?l0))return;n.preventDefault(),i&&a.selection.getSel().modify("extend",r?"forward":"backward","word"),t(r)}}),a.on("keypress",function(n){c(n)||q.isCollapsed()||!n.charCode||e.metaKeyPressed(n)||(n.preventDefault(),t(!0),a.selection.setContent(String.fromCharCode(n.charCode)))}),a.addCommand("Delete",function(){t()}),a.addCommand("ForwardDelete",function(){t(!0)}),s||(a.on("dragstart",function(e){e.dataTransfer.setData("URL","data:text/mce-internal,"+escape(a.selection.getContent()))}),a.on("drop",function(e){if(!c(e)){var i=e.dataTransfer.getData("URL");if(!i||-1==i.indexOf(r)||!n.caretRangeFromPoint)return;i=unescape(i.substr(r.length)),n.caretRangeFromPoint&&(e.preventDefault(),t(),a.selection.setRng(n.caretRangeFromPoint(e.x,e.y)),a.insertContent(i))}}),a.on("cut",function(e){!c(e)&&e.clipboardData&&(e.preventDefault(),e.clipboardData.clearData(),e.clipboardData.setData("text/html",a.selection.getContent()),e.clipboardData.setData("text/plain",a.selection.getContent({format:"text"})),t(!0))}))}function d(){function e(e){var t=U.create("body"),n=e.cloneContents();return t.appendChild(n),q.serializer.serialize(t,{format:"html"})}function n(n){if(!n.setStart){if(n.item)return!1;var r=n.duplicate();return r.moveToElementText(a.getBody()),t.compareRanges(n,r)}var i=e(n),o=U.createRng();o.selectNode(a.getBody());var s=e(o);return i===s}a.on("keydown",function(e){var t=e.keyCode,r,i;if(!c(e)&&(t==V||t==W)){if(r=a.selection.isCollapsed(),i=a.getBody(),r&&!U.isEmpty(i))return;if(!r&&!n(a.selection.getRng()))return;e.preventDefault(),a.setContent(""),i.firstChild&&U.isBlock(i.firstChild)?a.selection.setCursorLocation(i.firstChild,0):a.selection.setCursorLocation(i,0),a.nodeChanged()}})}function f(){a.on("keydown",function(t){!c(t)&&65==t.keyCode&&e.metaKeyPressed(t)&&(t.preventDefault(),a.execCommand("SelectAll"))})}function p(){a.settings.content_editable||(U.bind(a.getDoc(),"focusin",function(){q.setRng(q.getRng())}),U.bind(a.getDoc(),"mousedown",function(e){e.target==a.getDoc().documentElement&&(a.getBody().focus(),q.setRng(q.getRng()))}))}function m(){a.on("keydown",function(e){if(!c(e)&&e.keyCode===W&&q.isCollapsed()&&0===q.getRng(!0).startOffset){var t=q.getNode(),n=t.previousSibling;if("HR"==t.nodeName)return U.remove(t),void e.preventDefault();n&&n.nodeName&&"hr"===n.nodeName.toLowerCase()&&(U.remove(n),e.preventDefault())}})}function h(){window.Range.prototype.getClientRects||a.on("mousedown",function(e){if(!c(e)&&"HTML"===e.target.nodeName){var t=a.getBody();t.blur(),setTimeout(function(){t.focus()},0)}})}function g(){a.on("click",function(e){e=e.target,/^(IMG|HR)$/.test(e.nodeName)&&q.getSel().setBaseAndExtent(e,0,e,1),"A"==e.nodeName&&U.hasClass(e,"mce-item-anchor")&&q.select(e),a.nodeChanged()})}function v(){function e(){var e=U.getAttribs(q.getStart().cloneNode(!1));return function(){var t=q.getStart();t!==a.getBody()&&(U.setAttrib(t,"style",null),z(e,function(e){t.setAttributeNode(e.cloneNode(!0))}))}}function t(){return!q.isCollapsed()&&U.getParent(q.getStart(),U.isBlock)!=U.getParent(q.getEnd(),U.isBlock)}a.on("keypress",function(n){var r;return c(n)||8!=n.keyCode&&46!=n.keyCode||!t()?void 0:(r=e(),a.getDoc().execCommand("delete",!1,null),r(),n.preventDefault(),!1)}),U.bind(a.getDoc(),"cut",function(n){var r;!c(n)&&t()&&(r=e(),setTimeout(function(){r()},0))})}function y(){var e,n;a.on("selectionchange",function(){n&&(clearTimeout(n),n=0),n=window.setTimeout(function(){if(!a.removed){var n=q.getRng();e&&t.compareRanges(n,e)||(a.nodeChanged(),e=n)}},50)})}function b(){document.body.setAttribute("role","application")}function C(){a.on("keydown",function(e){if(!c(e)&&e.keyCode===W&&q.isCollapsed()&&0===q.getRng(!0).startOffset){var t=q.getNode().previousSibling;if(t&&t.nodeName&&"table"===t.nodeName.toLowerCase())return e.preventDefault(),!1}})}function x(){l()>7||(s("RespectVisibilityInDesign",!0),a.contentStyles.push(".mceHideBrInPre pre br {display: none}"),U.addClass(a.getBody(),"mceHideBrInPre"),j.addNodeFilter("pre",function(e){for(var t=e.length,r,i,o,a;t--;)for(r=e[t].getAll("br"),i=r.length;i--;)o=r[i],a=o.prev,a&&3===a.type&&"\n"!=a.value.charAt(a.value-1)?a.value+="\n":o.parent.insert(new n("#text",3),o,!0).value="\n"}),K.addNodeFilter("pre",function(e){for(var t=e.length,n,r,i,o;t--;)for(n=e[t].getAll("br"),r=n.length;r--;)i=n[r],o=i.prev,o&&3==o.type&&(o.value=o.value.replace(/\r?\n$/,""))}))}function w(){U.bind(a.getBody(),"mouseup",function(){var e,t=q.getNode();"IMG"==t.nodeName&&((e=U.getStyle(t,"width"))&&(U.setAttrib(t,"width",e.replace(/[^0-9%]+/g,"")),U.setStyle(t,"width","")),(e=U.getStyle(t,"height"))&&(U.setAttrib(t,"height",e.replace(/[^0-9%]+/g,"")),U.setStyle(t,"height","")))})}function _(){a.on("keydown",function(t){var n,r,i,o,s;if(!c(t)&&t.keyCode==e.BACKSPACE&&(n=q.getRng(),r=n.startContainer,i=n.startOffset,o=U.getRoot(),s=r,n.collapsed&&0===i)){for(;s&&s.parentNode&&s.parentNode.firstChild==s&&s.parentNode!=o;)s=s.parentNode;"BLOCKQUOTE"===s.tagName&&(a.formatter.toggle("blockquote",null,s),n=U.createRng(),n.setStart(r,0),n.setEnd(r,0),q.setRng(n))}})}function N(){function e(){a._refreshContentEditable(),s("StyleWithCSS",!1),s("enableInlineTableEditing",!1),$.object_resizing||s("enableObjectResizing",!1)}$.readonly||a.on("BeforeExecCommand MouseDown",e)}function E(){function e(){z(U.select("a"),function(e){var t=e.parentNode,n=U.getRoot();if(t.lastChild===e){for(;t&&!U.isBlock(t);){if(t.parentNode.lastChild!==t||t===n)return;t=t.parentNode}U.add(t,"br",{"data-mce-bogus":1})}})}a.on("SetContent ExecCommand",function(t){("setcontent"==t.type||"mceInsertLink"===t.command)&&e()})}function S(){$.forced_root_block&&a.on("init",function(){s("DefaultParagraphSeparator",$.forced_root_block)})}function k(){a.on("Undo Redo SetContent",function(e){e.initial||a.execCommand("mceRepaint")})}function T(){a.on("keydown",function(e){var t;c(e)||e.keyCode!=W||(t=a.getDoc().selection.createRange(),t&&t.item&&(e.preventDefault(),a.undoManager.beforeChange(),U.remove(t.item(0)),a.undoManager.add()))})}function R(){var e;l()>=10&&(e="",z("p div h1 h2 h3 h4 h5 h6".split(" "),function(t,n){e+=(n>0?",":"")+t+":empty"}),a.contentStyles.push(e+"{padding-right: 1px !important}"))}function A(){l()<9&&(j.addNodeFilter("noscript",function(e){for(var t=e.length,n,r;t--;)n=e[t],r=n.firstChild,r&&n.attr("data-mce-innertext",r.value)}),K.addNodeFilter("noscript",function(e){for(var t=e.length,i,o,a;t--;)i=e[t],o=e[t].firstChild,o?o.value=r.decode(o.value):(a=i.attributes.map["data-mce-innertext"],a&&(i.attr("data-mce-innertext",null),o=new n("#text",3),o.value=a,o.raw=!0,i.append(o)))}))}function B(){function e(e,t){var n=i.createTextRange();try{n.moveToPoint(e,t)}catch(r){n=null}return n}function t(t){var r;t.button?(r=e(t.x,t.y),r&&(r.compareEndPoints("StartToStart",a)>0?r.setEndPoint("StartToStart",a):r.setEndPoint("EndToEnd",a),r.select())):n()}function n(){var e=r.selection.createRange();a&&!e.item&&0===e.compareEndPoints("StartToEnd",e)&&a.select(),U.unbind(r,"mouseup",n),U.unbind(r,"mousemove",t),a=o=0}var r=U.doc,i=r.body,o,a,s;r.documentElement.unselectable=!0,U.bind(r,"mousedown contextmenu",function(i){if("HTML"===i.target.nodeName){if(o&&n(),s=r.documentElement,s.scrollHeight>s.clientHeight)return;o=1,a=e(i.x,i.y),a&&(U.bind(r,"mouseup",n),U.bind(r,"mousemove",t),U.getRoot().focus(),a.select())}})}function L(){a.on("keyup focusin mouseup",function(t){65==t.keyCode&&e.metaKeyPressed(t)||q.normalize()},!0)}function D(){a.contentStyles.push("img:-moz-broken {-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}")}function M(){a.inline||a.on("keydown",function(){document.activeElement==document.body&&a.getWin().focus()})}function H(){a.inline||(a.contentStyles.push("body {min-height: 150px}"),a.on("click",function(e){"HTML"==e.target.nodeName&&(a.getBody().focus(),a.selection.normalize(),a.nodeChanged())}))}function P(){i.mac&&a.on("keydown",function(t){!e.metaKeyPressed(t)||37!=t.keyCode&&39!=t.keyCode||(t.preventDefault(),a.selection.getSel().modify("move",37==t.keyCode?"backward":"forward","word"))})}function O(){s("AutoUrlDetect",!1)}function I(){a.inline||a.on("focus blur",function(){var e=a.dom.create("br");a.getBody().appendChild(e),e.parentNode.removeChild(e)},!0)}function F(){a.on("click",function(e){"A"===e.target.tagName&&e.preventDefault()}),a.contentStyles.push(".mce-content-body {-webkit-touch-callout: none}")}var z=o.each,W=e.BACKSPACE,V=e.DELETE,U=a.dom,q=a.selection,$=a.settings,j=a.parser,K=a.serializer,Y=i.gecko,G=i.ie,X=i.webkit;C(),_(),d(),L(),X&&(u(),p(),g(),S(),i.iOS?(y(),M(),H(),F()):f()),G&&i.ie<11&&(m(),b(),x(),w(),T(),R(),A(),B()),i.ie>=11&&(H(),I()),i.ie&&(f(),O()),Y&&(m(),h(),v(),N(),E(),k(),D(),P())}}),r(rt,[p],function(e){function t(){return!1}function n(){return!0}var r="__bindings",i=e.makeMap("focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange mouseout mouseenter mouseleave keydown keypress keyup contextmenu dragstart dragend dragover draggesture dragdrop drop drag"," ");return{fire:function(e,i,o){var a=this,s,l,c,u,d;if(!a.removed){if(e=e.toLowerCase(),i=i||{},i.type=e,i.target||(i.target=a),i.preventDefault||(i.preventDefault=function(){i.isDefaultPrevented=n},i.stopPropagation=function(){i.isPropagationStopped=n},i.stopImmediatePropagation=function(){i.isImmediatePropagationStopped=n},i.isDefaultPrevented=t,i.isPropagationStopped=t,i.isImmediatePropagationStopped=t),a[r]&&(s=a[r][e]))for(l=0,c=s.length;c>l&&(s[l]=u=s[l],!i.isImmediatePropagationStopped());l++)if(u.call(a,i)===!1)return i.preventDefault(),i;if(o!==!1&&a.parent)for(d=a.parent();d&&!i.isPropagationStopped();)d.fire(e,i,!1),d=d.parent();return i}},on:function(e,t,n){var o=this,a,s,l,c;if(t===!1&&(t=function(){return!1}),t)for(l=e.toLowerCase().split(" "),c=l.length;c--;)e=l[c],a=o[r],a||(a=o[r]={}),s=a[e],s||(s=a[e]=[],o.bindNative&&i[e]&&o.bindNative(e)),n?s.unshift(t):s.push(t);return o},off:function(e,t){var n=this,o,a=n[r],s,l,c,u;if(a)if(e)for(c=e.toLowerCase().split(" "),o=c.length;o--;){if(e=c[o],s=a[e],!e){for(l in a)a[e].length=0;return n}if(s){if(t)for(u=s.length;u--;)s[u]===t&&s.splice(u,1);else s.length=0;!s.length&&n.unbindNative&&i[e]&&(n.unbindNative(e),delete a[e])}}else{if(n.unbindNative)for(e in a)n.unbindNative(e);n[r]=[]}return n},hasEventListeners:function(e){var t=this[r];return e=e.toLowerCase(),!(!t||!t[e]||0===t[e].length)}}}),r(it,[p,g],function(e,t){var n=e.each,r=e.explode,i={f9:120,f10:121,f11:122};return function(o){var a=this,s={};o.on("keyup keypress keydown",function(e){(e.altKey||e.ctrlKey||e.metaKey)&&n(s,function(n){var r=t.mac?e.metaKey:e.ctrlKey;if(n.ctrl==r&&n.alt==e.altKey&&n.shift==e.shiftKey)return e.keyCode==n.keyCode||e.charCode&&e.charCode==n.charCode?(e.preventDefault(),"keydown"==e.type&&n.func.call(n.scope),!0):void 0})}),a.add=function(t,a,l,c){var u;return u=l,"string"==typeof l?l=function(){o.execCommand(u,!1,null)}:e.isArray(u)&&(l=function(){o.execCommand(u[0],u[1],u[2])}),n(r(t.toLowerCase()),function(e){var t={func:l,scope:c||o,desc:o.translate(a),alt:!1,ctrl:!1,shift:!1};n(r(e,"+"),function(e){switch(e){case"alt":case"ctrl":case"shift":t[e]=!0;break;default:t.charCode=e.charCodeAt(0),t.keyCode=i[e]||e.toUpperCase().charCodeAt(0)}}),s[(t.ctrl?"ctrl":"")+","+(t.alt?"alt":"")+","+(t.shift?"shift":"")+","+t.keyCode]=t}),!0}}}),r(ot,[y,C,x,k,S,L,D,M,H,P,O,I,b,l,tt,w,N,nt,g,p,rt,it],function(e,n,r,i,o,a,s,l,c,u,d,f,p,m,h,g,v,y,b,C,x,w){function _(e,t){return"selectionchange"==t?e.getDoc():!e.inline&&/^mouse|click|contextmenu|drop/.test(t)?e.getDoc():e.getBody()}function N(e,t,r){var i=this,o,a;o=i.documentBaseUrl=r.documentBaseURL,a=r.baseURI,i.settings=t=T({id:e,theme:"modern",delta_width:0,delta_height:0,popup_css:"",plugins:"",document_base_url:o,add_form_submit_trigger:!0,submit_patch:!0,add_unload_trigger:!0,convert_urls:!0,relative_urls:!0,remove_script_host:!0,object_resizing:!0,doctype:"",visual:!0,font_size_style_values:"xx-small,x-small,small,medium,large,x-large,xx-large",font_size_legacy_values:"xx-small,small,medium,large,x-large,xx-large,300%",forced_root_block:"p",hidden_input:!0,padd_empty_editor:!0,render_ui:!0,indentation:"30px",inline_styles:!0,convert_fonts_to_spans:!0,indent:"simple",indent_before:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist",indent_after:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist",validate:!0,entity_encoding:"named",url_converter:i.convertURL,url_converter_scope:i,ie7_compat:!0},t),n.language=t.language||"en",n.languageLoad=t.language_load,n.baseURL=r.baseURL,i.id=t.id=e,i.isNotDirty=!0,i.plugins={},i.documentBaseURI=new f(t.document_base_url||o,{base_uri:a}),i.baseURI=a,i.contentCSS=[],i.contentStyles=[],i.shortcuts=new w(i),i.execCommands={},i.queryStateCommands={},i.queryValueCommands={},i.loadedCSS={},i.suffix=r.suffix,i.editorManager=r,i.inline=t.inline,r.fire("SetupEditor",i),i.execCallback("setup",i)}var E=e.DOM,S=n.ThemeManager,k=n.PluginManager,T=C.extend,R=C.each,A=C.explode,B=C.inArray,L=C.trim,D=C.resolve,M=m.Event,H=b.gecko,P=b.ie;return N.prototype={render:function(){function e(){E.unbind(window,"ready",e),n.render()}function t(){var e=p.ScriptLoader;if(r.language&&"en"!=r.language&&!r.language_url&&(r.language_url=n.editorManager.baseURL+"/langs/"+r.language+".js"),r.language_url&&e.add(r.language_url),r.theme&&"function"!=typeof r.theme&&"-"!=r.theme.charAt(0)&&!S.urls[r.theme]){var t=r.theme_url;t=t?n.documentBaseURI.toAbsolute(t):"themes/"+r.theme+"/theme"+o+".js",S.load(r.theme,t)}C.isArray(r.plugins)&&(r.plugins=r.plugins.join(" ")),R(r.external_plugins,function(e,t){k.load(t,e),r.plugins+=" "+t}),R(r.plugins.split(/[ ,]/),function(e){if(e=L(e),e&&!k.urls[e])if("-"==e.charAt(0)){e=e.substr(1,e.length);var t=k.dependencies(e);R(t,function(e){var t={prefix:"plugins/",resource:e,suffix:"/plugin"+o+".js"};e=k.createUrl(t,e),k.load(e.resource,e)})}else k.load(e,{prefix:"plugins/",resource:e,suffix:"/plugin"+o+".js"})}),e.loadQueue(function(){n.removed||n.init()})}var n=this,r=n.settings,i=n.id,o=n.suffix;if(!M.domLoaded)return void E.bind(window,"ready",e);if(n.getElement()&&b.contentEditable){r.inline?n.inline=!0:(n.orgVisibility=n.getElement().style.visibility,n.getElement().style.visibility="hidden");var a=n.getElement().form||E.getParent(i,"form");a&&(n.formElement=a,r.hidden_input&&!/TEXTAREA|INPUT/i.test(n.getElement().nodeName)&&(E.insertAfter(E.create("input",{type:"hidden",name:i}),i),n.hasHiddenInput=!0),n.formEventDelegate=function(e){n.fire(e.type,e)},E.bind(a,"submit reset",n.formEventDelegate),n.on("reset",function(){n.setContent(n.startContent,{format:"raw"})}),!r.submit_patch||a.submit.nodeType||a.submit.length||a._mceOldSubmit||(a._mceOldSubmit=a.submit,a.submit=function(){return n.editorManager.triggerSave(),n.isNotDirty=!0,a._mceOldSubmit(a)})),n.windowManager=new h(n),"xml"==r.encoding&&n.on("GetContent",function(e){e.save&&(e.content=E.encode(e.content))}),r.add_form_submit_trigger&&n.on("submit",function(){n.initialized&&n.save()}),r.add_unload_trigger&&(n._beforeUnload=function(){!n.initialized||n.destroyed||n.isHidden()||n.save({format:"raw",no_events:!0,set_dirty:!1})},n.editorManager.on("BeforeUnload",n._beforeUnload)),t()}},init:function(){function e(n){var r=k.get(n),i,o;i=k.urls[n]||t.documentBaseUrl.replace(/\/$/,""),n=L(n),r&&-1===B(h,n)&&(R(k.dependencies(n),function(t){e(t)}),o=new r(t,i),t.plugins[n]=o,o.init&&(o.init(t,i),h.push(n)))}var t=this,n=t.settings,r=t.getElement(),i,o,a,s,l,c,u,d,f,p,m,h=[];if(t.rtl=this.editorManager.i18n.rtl,t.editorManager.add(t),n.aria_label=n.aria_label||E.getAttrib(r,"aria-label",t.getLang("aria.rich_text_area")),n.theme&&("function"!=typeof n.theme?(n.theme=n.theme.replace(/-/,""),c=S.get(n.theme),t.theme=new c(t,S.urls[n.theme]),t.theme.init&&t.theme.init(t,S.urls[n.theme]||t.documentBaseUrl.replace(/\/$/,""))):t.theme=n.theme),R(n.plugins.replace(/\-/g,"").split(/[ ,]/),e),n.render_ui&&t.theme&&(t.orgDisplay=r.style.display,"function"!=typeof n.theme?(i=n.width||r.style.width||r.offsetWidth,o=n.height||r.style.height||r.offsetHeight,a=n.min_height||100,p=/^[0-9\.]+(|px)$/i,p.test(""+i)&&(i=Math.max(parseInt(i,10),100)),p.test(""+o)&&(o=Math.max(parseInt(o,10),a)),l=t.theme.renderUI({targetNode:r,width:i,height:o,deltaWidth:n.delta_width,deltaHeight:n.delta_height}),n.content_editable||(E.setStyles(l.sizeContainer||l.editorContainer,{wi2dth:i,h2eight:o}),o=(l.iframeHeight||o)+("number"==typeof o?l.deltaHeight||0:""),a>o&&(o=a))):(l=n.theme(t,r),l.editorContainer.nodeType&&(l.editorContainer=l.editorContainer.id=l.editorContainer.id||t.id+"_parent"),l.iframeContainer.nodeType&&(l.iframeContainer=l.iframeContainer.id=l.iframeContainer.id||t.id+"_iframecontainer"),o=l.iframeHeight||r.offsetHeight),t.editorContainer=l.editorContainer),n.content_css&&R(A(n.content_css),function(e){t.contentCSS.push(t.documentBaseURI.toAbsolute(e))}),n.content_style&&t.contentStyles.push(n.content_style),n.content_editable)return r=s=l=null,t.initContentBody();for(t.iframeHTML=n.doctype+"",n.document_base_url!=t.documentBaseUrl&&(t.iframeHTML+=''),!b.caretAfter&&n.ie7_compat&&(t.iframeHTML+=''),t.iframeHTML+='',m=0;m',t.loadedCSS[g]=!0}d=n.body_id||"tinymce",-1!=d.indexOf("=")&&(d=t.getParam("body_id","","hash"),d=d[t.id]||d),f=n.body_class||"",-1!=f.indexOf("=")&&(f=t.getParam("body_class","","hash"),f=f[t.id]||""),t.iframeHTML+='
    ";var v='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinymce.get("'+t.id+'");document.write(ed.iframeHTML);document.close();ed.initContentBody(true);})()';if(document.domain!=location.hostname&&(u=v),s=E.add(l.iframeContainer,"iframe",{id:t.id+"_ifr",src:u||'javascript:""',frameBorder:"0",allowTransparency:"true",title:t.editorManager.translate("Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help"),style:{width:"100%",height:o,display:"block"}}),P)try{t.getDoc()}catch(y){s.src=u=v}t.contentAreaContainer=l.iframeContainer,l.editorContainer&&(E.get(l.editorContainer).style.display=t.orgDisplay),E.get(t.id).style.display="none",E.setAttrib(t.id,"aria-hidden",!0),u||t.initContentBody(),r=s=l=null},initContentBody:function(t){var n=this,o=n.settings,f=E.get(n.id),p=n.getDoc(),m,h;o.inline||(n.getElement().style.visibility=n.orgVisibility),t||o.content_editable||(p.open(),p.write(n.iframeHTML),p.close()),o.content_editable&&(n.on("remove",function(){var e=this.getBody();E.removeClass(e,"mce-content-body"),E.removeClass(e,"mce-edit-focus"),E.setAttrib(e,"tabIndex",null),E.setAttrib(e,"contentEditable",null)}),E.addClass(f,"mce-content-body"),f.tabIndex=-1,n.contentDocument=p=o.content_document||document,n.contentWindow=o.content_window||window,n.bodyElement=f,o.content_document=o.content_window=null,o.root_name=f.nodeName.toLowerCase()),m=n.getBody(),m.disabled=!0,o.readonly||(n.inline&&"static"==E.getStyle(m,"position",!0)&&(m.style.position="relative"),m.contentEditable=n.getParam("content_editable_state",!0)),m.disabled=!1,n.schema=new g(o),n.dom=new e(p,{keep_values:!0,url_converter:n.convertURL,url_converter_scope:n,hex_colors:o.force_hex_style_colors,class_filter:o.class_filter,update_styles:!0,root_element:o.content_editable?n.id:null,collect:o.content_editable,schema:n.schema,onSetAttrib:function(e){n.fire("SetAttrib",e)}}),n.parser=new v(o,n.schema),n.parser.addAttributeFilter("src,href,style",function(e,t){for(var r=e.length,i,o=n.dom,a,s;r--;)i=e[r],a=i.attr(t),s="data-mce-"+t,i.attributes.map[s]||("style"===t?i.attr(s,o.serializeStyle(o.parseStyle(a),i.name)):i.attr(s,n.convertURL(a,t,i.name)))}),n.parser.addNodeFilter("script",function(e){for(var t=e.length,n;t--;)n=e[t],n.attr("type","mce-"+(n.attr("type")||"text/javascript"))}),n.parser.addNodeFilter("#cdata",function(e){for(var t=e.length,n;t--;)n=e[t],n.type=8,n.name="#comment",n.value="[CDATA["+n.value+"]]"}),n.parser.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div",function(e){for(var t=e.length,i,o=n.schema.getNonEmptyElements();t--;)i=e[t],i.isEmpty(o)&&(i.empty().append(new r("br",1)).shortEnded=!0)}),n.serializer=new i(o,n),n.selection=new a(n.dom,n.getWin(),n.serializer,n),n.formatter=new s(n),n.undoManager=new l(n),n.forceBlocks=new u(n),n.enterKey=new c(n),n.editorCommands=new d(n),n.fire("PreInit"),o.browser_spellcheck||o.gecko_spellcheck||(p.body.spellcheck=!1,E.setAttrib(m,"spellcheck","false")),n.fire("PostRender"),n.quirks=y(n),o.directionality&&(m.dir=o.directionality),o.nowrap&&(m.style.whiteSpace="nowrap"),o.protect&&n.on("BeforeSetContent",function(e){R(o.protect,function(t){e.content=e.content.replace(t,function(e){return""})})}),n.on("SetContent",function(){n.addVisual(n.getBody())}),o.padd_empty_editor&&n.on("PostProcess",function(e){e.content=e.content.replace(/^(]*>( | |\s|\u00a0|)<\/p>[\r\n]*|
    [\r\n]*)$/,"")}),n.load({initial:!0,format:"html"}),n.startContent=n.getContent({format:"raw"}),n.initialized=!0,R(n._pendingNativeEvents,function(e){n.dom.bind(_(n,e),e,function(e){n.fire(e.type,e)})}),n.fire("init"),n.focus(!0),n.nodeChanged({initial:!0}),n.execCallback("init_instance_callback",n),n.contentStyles.length>0&&(h="",R(n.contentStyles,function(e){h+=e+"\r\n"}),n.dom.addStyle(h)),R(n.contentCSS,function(e){n.loadedCSS[e]||(n.dom.loadCSS(e),n.loadedCSS[e]=!0)}),o.auto_focus&&setTimeout(function(){var e=n.editorManager.get(o.auto_focus);e.selection.select(e.getBody(),1),e.selection.collapse(1),e.getBody().focus(),e.getWin().focus()},100),f=p=m=null},focus:function(e){var t,n=this,r=n.selection,i=n.settings.content_editable,o,a,s=n.getDoc(),l;e||(o=r.getRng(),o.item&&(a=o.item(0)),n._refreshContentEditable(),i||(b.opera||n.getBody().focus(),n.getWin().focus()),(H||i)&&(l=n.getBody(),l.setActive&&b.ie<11?l.setActive():l.focus(),i&&r.normalize()),a&&a.ownerDocument==s&&(o=s.body.createControlRange(),o.addElement(a),o.select())),n.editorManager.activeEditor!=n&&((t=n.editorManager.activeEditor)&&t.fire("deactivate",{relatedTarget:n}),n.fire("activate",{relatedTarget:t})),n.editorManager.activeEditor=n},execCallback:function(e){var t=this,n=t.settings[e],r;if(n)return t.callbackLookup&&(r=t.callbackLookup[e])&&(n=r.func,r=r.scope),"string"==typeof n&&(r=n.replace(/\.\w+$/,""),r=r?D(r):0,n=D(n),t.callbackLookup=t.callbackLookup||{},t.callbackLookup[e]={func:n,scope:r}),n.apply(r||t,Array.prototype.slice.call(arguments,1))},translate:function(e){var t=this.settings.language||"en",n=this.editorManager.i18n;return e?n.data[t+"."+e]||e.replace(/\{\#([^\}]+)\}/g,function(e,r){return n.data[t+"."+r]||"{#"+r+"}"}):""},getLang:function(e,n){return this.editorManager.i18n.data[(this.settings.language||"en")+"."+e]||(n!==t?n:"{#"+e+"}")},getParam:function(e,t,n){var r=e in this.settings?this.settings[e]:t,i;return"hash"===n?(i={},"string"==typeof r?R(r.split(r.indexOf("=")>0?/[;,](?![^=;,]*(?:[;,]|$))/:","),function(e){e=e.split("="),i[L(e[0])]=L(e.length>1?e[1]:e)}):i=r,i):r},nodeChanged:function(){var e=this,t=e.selection,n,r,i;!e.initialized||e.settings.disable_nodechange||e.settings.readonly||(i=e.getBody(),n=t.getStart()||i,n=P&&n.ownerDocument!=e.getDoc()?e.getBody():n,"IMG"==n.nodeName&&t.isCollapsed()&&(n=n.parentNode),r=[],e.dom.getParent(n,function(e){return e===i?!0:void r.push(e) +}),e.fire("NodeChange",{element:n,parents:r}))},addButton:function(e,t){var n=this;t.cmd&&(t.onclick=function(){n.execCommand(t.cmd)}),t.text||t.icon||(t.icon=e),n.buttons=n.buttons||{},t.tooltip=t.tooltip||t.title,n.buttons[e]=t},addMenuItem:function(e,t){var n=this;t.cmd&&(t.onclick=function(){n.execCommand(t.cmd)}),n.menuItems=n.menuItems||{},n.menuItems[e]=t},addCommand:function(e,t,n){this.execCommands[e]={func:t,scope:n||this}},addQueryStateHandler:function(e,t,n){this.queryStateCommands[e]={func:t,scope:n||this}},addQueryValueHandler:function(e,t,n){this.queryValueCommands[e]={func:t,scope:n||this}},addShortcut:function(e,t,n,r){this.shortcuts.add(e,t,n,r)},execCommand:function(e,t,n,r){var i=this,o=0,a;return/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(e)||r&&r.skip_focus||i.focus(),r=T({},r),r=i.fire("BeforeExecCommand",{command:e,ui:t,value:n}),r.isDefaultPrevented()?!1:(a=i.execCommands[e])&&a.func.call(a.scope,t,n)!==!0?(i.fire("ExecCommand",{command:e,ui:t,value:n}),!0):(R(i.plugins,function(r){return r.execCommand&&r.execCommand(e,t,n)?(i.fire("ExecCommand",{command:e,ui:t,value:n}),o=!0,!1):void 0}),o?o:i.theme&&i.theme.execCommand&&i.theme.execCommand(e,t,n)?(i.fire("ExecCommand",{command:e,ui:t,value:n}),!0):i.editorCommands.execCommand(e,t,n)?(i.fire("ExecCommand",{command:e,ui:t,value:n}),!0):(i.getDoc().execCommand(e,t,n),void i.fire("ExecCommand",{command:e,ui:t,value:n})))},queryCommandState:function(e){var t=this,n,r;if(!t._isHidden()){if((n=t.queryStateCommands[e])&&(r=n.func.call(n.scope),r!==!0))return r;if(r=t.editorCommands.queryCommandState(e),-1!==r)return r;try{return t.getDoc().queryCommandState(e)}catch(i){}}},queryCommandValue:function(e){var n=this,r,i;if(!n._isHidden()){if((r=n.queryValueCommands[e])&&(i=r.func.call(r.scope),i!==!0))return i;if(i=n.editorCommands.queryCommandValue(e),i!==t)return i;try{return n.getDoc().queryCommandValue(e)}catch(o){}}},show:function(){var e=this;E.show(e.getContainer()),E.hide(e.id),e.load(),e.fire("show")},hide:function(){var e=this,t=e.getDoc();P&&t&&!e.inline&&t.execCommand("SelectAll"),e.save(),E.hide(e.getContainer()),E.setStyle(e.id,"display",e.orgDisplay),e.fire("hide")},isHidden:function(){return!E.isHidden(this.id)},setProgressState:function(e,t){this.fire("ProgressState",{state:e,time:t})},load:function(e){var n=this,r=n.getElement(),i;return r?(e=e||{},e.load=!0,i=n.setContent(r.value!==t?r.value:r.innerHTML,e),e.element=r,e.no_events||n.fire("LoadContent",e),e.element=r=null,i):void 0},save:function(e){var t=this,n=t.getElement(),r,i;if(n&&t.initialized)return e=e||{},e.save=!0,e.element=n,r=e.content=t.getContent(e),e.no_events||t.fire("SaveContent",e),r=e.content,/TEXTAREA|INPUT/i.test(n.nodeName)?n.value=r:(t.inline||(n.innerHTML=r),(i=E.getParent(t.id,"form"))&&R(i.elements,function(e){return e.name==t.id?(e.value=r,!1):void 0})),e.element=n=null,e.set_dirty!==!1&&(t.isNotDirty=!0),r},setContent:function(e,t){var n=this,r=n.getBody(),i;return t=t||{},t.format=t.format||"html",t.set=!0,t.content=e,t.no_events||n.fire("BeforeSetContent",t),e=t.content,0===e.length||/^\s+$/.test(e)?(i=n.settings.forced_root_block,i&&n.schema.isValidChild(r.nodeName.toLowerCase(),i.toLowerCase())?(e=P&&11>P?"":'
    ',e=n.dom.createHTML(i,n.settings.forced_root_block_attrs,e)):P||(e='
    '),r.innerHTML=e,n.fire("SetContent",t)):("raw"!==t.format&&(e=new o({},n.schema).serialize(n.parser.parse(e,{isRootContent:!0}))),t.content=L(e),n.dom.setHTML(r,t.content),t.no_events||n.fire("SetContent",t)),t.content},getContent:function(e){var t=this,n,r=t.getBody();return e=e||{},e.format=e.format||"html",e.get=!0,e.getInner=!0,e.no_events||t.fire("BeforeGetContent",e),n="raw"==e.format?r.innerHTML:"text"==e.format?r.innerText||r.textContent:t.serializer.serialize(r,e),e.content="text"!=e.format?L(n):n,e.no_events||t.fire("GetContent",e),e.content},insertContent:function(e){this.execCommand("mceInsertContent",!1,e)},isDirty:function(){return!this.isNotDirty},getContainer:function(){var e=this;return e.container||(e.container=E.get(e.editorContainer||e.id+"_parent")),e.container},getContentAreaContainer:function(){return this.contentAreaContainer},getElement:function(){return E.get(this.settings.content_element||this.id)},getWin:function(){var e=this,t;return e.contentWindow||(t=E.get(e.id+"_ifr"),t&&(e.contentWindow=t.contentWindow)),e.contentWindow},getDoc:function(){var e=this,t;return e.contentDocument||(t=e.getWin(),t&&(e.contentDocument=t.document)),e.contentDocument},getBody:function(){return this.bodyElement||this.getDoc().body},convertURL:function(e,t,n){var r=this,i=r.settings;return i.urlconverter_callback?r.execCallback("urlconverter_callback",e,n,!0,t):!i.convert_urls||n&&"LINK"==n.nodeName||0===e.indexOf("file:")||0===e.length?e:i.relative_urls?r.documentBaseURI.toRelative(e):e=r.documentBaseURI.toAbsolute(e,i.remove_script_host)},addVisual:function(e){var n=this,r=n.settings,i=n.dom,o;e=e||n.getBody(),n.hasVisual===t&&(n.hasVisual=r.visual),R(i.select("table,a",e),function(e){var t;switch(e.nodeName){case"TABLE":return o=r.visual_table_class||"mce-item-table",t=i.getAttrib(e,"border"),void(t&&"0"!=t||(n.hasVisual?i.addClass(e,o):i.removeClass(e,o)));case"A":return void(i.getAttrib(e,"href",!1)||(t=i.getAttrib(e,"name")||e.id,o=r.visual_anchor_class||"mce-item-anchor",t&&(n.hasVisual?i.addClass(e,o):i.removeClass(e,o))))}}),n.fire("VisualAid",{element:e,hasVisual:n.hasVisual})},remove:function(){var e=this;if(!e.removed){e.save(),e.fire("remove"),e.off(),e.removed=1,e.hasHiddenInput&&E.remove(e.getElement().nextSibling),E.setStyle(e.id,"display",e.orgDisplay),e.settings.content_editable||(M.unbind(e.getWin()),M.unbind(e.getDoc()));var t=e.getContainer();M.unbind(e.getBody()),M.unbind(t),e.editorManager.remove(e),E.remove(t),e.destroy()}},bindNative:function(e){var t=this;t.settings.readonly||(t.initialized?t.dom.bind(_(t,e),e,function(n){t.fire(e,n)}):t._pendingNativeEvents?t._pendingNativeEvents.push(e):t._pendingNativeEvents=[e])},unbindNative:function(e){var t=this;t.initialized&&t.dom.unbind(e)},destroy:function(e){var t=this,n;if(!t.destroyed){if(!e&&!t.removed)return void t.remove();e&&H&&(M.unbind(t.getDoc()),M.unbind(t.getWin()),M.unbind(t.getBody())),e||(t.editorManager.off("beforeunload",t._beforeUnload),t.theme&&t.theme.destroy&&t.theme.destroy(),t.selection.destroy(),t.dom.destroy()),n=t.formElement,n&&(n._mceOldSubmit&&(n.submit=n._mceOldSubmit,n._mceOldSubmit=null),E.unbind(n,"submit reset",t.formEventDelegate)),t.contentAreaContainer=t.formElement=t.container=t.editorContainer=null,t.settings.content_element=t.bodyElement=t.contentDocument=t.contentWindow=null,t.selection&&(t.selection=t.selection.win=t.selection.dom=t.selection.dom.doc=null),t.destroyed=1}},_refreshContentEditable:function(){var e=this,t,n;e._isHidden()&&(t=e.getBody(),n=t.parentNode,n.removeChild(t),n.appendChild(t),t.focus())},_isHidden:function(){var e;return H?(e=this.selection.getSel(),!e||!e.rangeCount||0===e.rangeCount):0}},T(N.prototype,x),N}),r(at,[],function(){var e={};return{rtl:!1,add:function(t,n){for(var r in n)e[r]=n[r];this.rtl=this.rtl||"rtl"===e._dir},translate:function(t){if("undefined"==typeof t)return t;if("string"!=typeof t&&t.raw)return t.raw;if(t.push){var n=t.slice(1);t=(e[t[0]]||t[0]).replace(/\{([^\}]+)\}/g,function(e,t){return n[t]})}return e[t]||t},data:e}}),r(st,[y,g],function(e,t){function n(e){function a(){try{return document.activeElement}catch(e){return document.body}}function s(e){return e&&e.startContainer?{startContainer:e.startContainer,startOffset:e.startOffset,endContainer:e.endContainer,endOffset:e.endOffset}:e}function l(e,t){var n;return t.startContainer?(n=e.getDoc().createRange(),n.setStart(t.startContainer,t.startOffset),n.setEnd(t.endContainer,t.endOffset)):n=t,n}function c(e){return!!o.getParent(e,n.isEditorUIElement)}function u(e,t){for(var n=t.getBody();e;){if(e==n)return!0;e=e.parentNode}}function d(n){var d=n.editor;d.on("init",function(){(d.inline||t.ie)&&(d.on("nodechange keyup",function(){var e=document.activeElement;e&&e.id==d.id+"_ifr"&&(e=d.getBody()),u(e,d)&&(d.lastRng=d.selection.getRng())}),t.webkit&&!r&&(r=function(){var t=e.activeEditor;if(t&&t.selection){var n=t.selection.getRng();n&&!n.collapsed&&(d.lastRng=n)}},o.bind(document,"selectionchange",r)))}),d.on("setcontent",function(){d.lastRng=null}),d.on("mousedown",function(){d.selection.lastFocusBookmark=null}),d.on("focusin",function(){var t=e.focusedEditor;d.selection.lastFocusBookmark&&(d.selection.setRng(l(d,d.selection.lastFocusBookmark)),d.selection.lastFocusBookmark=null),t!=d&&(t&&t.fire("blur",{focusedEditor:d}),e.activeEditor=d,e.focusedEditor=d,d.fire("focus",{blurredEditor:t}),d.focus(!0)),d.lastRng=null}),d.on("focusout",function(){window.setTimeout(function(){var t=e.focusedEditor;c(a())||t!=d||(d.fire("blur",{focusedEditor:null}),e.focusedEditor=null,d.selection&&(d.selection.lastFocusBookmark=null))},0)}),i||(i=function(t){var n=e.activeEditor;n&&t.target.ownerDocument==document&&(n.selection&&(n.selection.lastFocusBookmark=s(n.lastRng)),c(t.target)||e.focusedEditor!=n||(n.fire("blur",{focusedEditor:null}),e.focusedEditor=null))},o.bind(document,"focusin",i))}function f(t){e.focusedEditor==t.editor&&(e.focusedEditor=null),e.activeEditor||(o.unbind(document,"selectionchange",r),o.unbind(document,"focusin",i),r=i=null)}e.on("AddEditor",d),e.on("RemoveEditor",f)}var r,i,o=e.DOM;return n.isEditorUIElement=function(e){return-1!==e.className.toString().indexOf("mce-")},n}),r(lt,[ot,y,I,g,p,rt,at,st],function(e,n,r,i,o,a,s,l){var c=n.DOM,u=o.explode,d=o.each,f=o.extend,p=0,m,h={majorVersion:"4",minorVersion:"0.20",releaseDate:"2014-03-18",editors:[],i18n:s,activeEditor:null,setup:function(){var e=this,t,n,i="",o;if(n=document.location.href.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,""),/[\/\\]$/.test(n)||(n+="/"),o=window.tinymce||window.tinyMCEPreInit)t=o.base||o.baseURL,i=o.suffix;else for(var a=document.getElementsByTagName("script"),s=0;s0&&d(u(m),function(n){c.get(n)?(l=new e(n,t,a),s.push(l),l.render(!0)):d(document.forms,function(r){d(r.elements,function(r){r.name===n&&(n="mce_editor_"+p++,c.setAttrib(r,"id",n),l=new e(n,t,a),s.push(l),l.render(1))})})});break;case"textareas":case"specific_textareas":d(c.select("textarea"),function(r){t.editor_deselector&&i(r,t.editor_deselector)||(!t.editor_selector||i(r,t.editor_selector))&&(l=new e(n(r),t,a),s.push(l),l.render(!0))})}t.oninit&&(m=h=0,d(s,function(e){h++,e.initialized?m++:e.on("init",function(){m++,m==h&&r(t,"oninit")}),m==h&&r(t,"oninit")}))}var a=this,s=[],l;a.settings=t,c.bind(window,"ready",o)},get:function(e){return e===t?this.editors:this.editors[e]},add:function(e){var t=this,n=t.editors;return n[e.id]=e,n.push(e),t.activeEditor=e,t.fire("AddEditor",{editor:e}),m||(m=function(){t.fire("BeforeUnload")},c.bind(window,"beforeunload",m)),e},createEditor:function(t,n){return this.add(new e(t,n,this))},remove:function(e){var t=this,n,r=t.editors,i,o;{if(e){if("string"==typeof e)return e=e.selector||e,void d(c.select(e),function(e){t.remove(r[e.id])});if(i=e,!r[i.id])return null;for(delete r[i.id],n=0;n=0;n--)t.remove(r[n])}},execCommand:function(t,n,r){var i=this,o=i.get(r);switch(t){case"mceAddEditor":return i.get(r)||new e(r,i.settings,i).render(),!0;case"mceRemoveEditor":return o&&o.remove(),!0;case"mceToggleEditor":return o?(o.isHidden()?o.show():o.hide(),!0):(i.execCommand("mceAddEditor",0,r),!0)}return i.activeEditor?i.activeEditor.execCommand(t,n,r):!1},triggerSave:function(){d(this.editors,function(e){e.save()})},addI18n:function(e,t){s.add(e,t)},translate:function(e){return s.translate(e)}};return f(h,a),h.setup(),window.tinymce=window.tinyMCE=h,h}),r(ct,[lt,p],function(e,t){var n=t.each,r=t.explode;e.on("AddEditor",function(e){var t=e.editor;t.on("preInit",function(){function e(e,t){n(t,function(t,n){t&&s.setStyle(e,n,t)}),s.rename(e,"span")}function i(e){s=t.dom,l.convert_fonts_to_spans&&n(s.select("font,u,strike",e.node),function(e){o[e.nodeName.toLowerCase()](s,e)})}var o,a,s,l=t.settings;l.inline_styles&&(a=r(l.font_size_legacy_values),o={font:function(t,n){e(n,{backgroundColor:n.style.backgroundColor,color:n.color,fontFamily:n.face,fontSize:a[parseInt(n.size,10)-1]})},u:function(t,n){e(n,{textDecoration:"underline"})},strike:function(t,n){e(n,{textDecoration:"line-through"})}},t.on("PreProcess SetContent",i))})})}),r(ut,[],function(){return{send:function(e){function t(){!e.async||4==n.readyState||r++>1e4?(e.success&&1e4>r&&200==n.status?e.success.call(e.success_scope,""+n.responseText,n,e):e.error&&e.error.call(e.error_scope,r>1e4?"TIMED_OUT":"GENERAL",n,e),n=null):setTimeout(t,10)}var n,r=0;if(e.scope=e.scope||this,e.success_scope=e.success_scope||e.scope,e.error_scope=e.error_scope||e.scope,e.async=e.async===!1?!1:!0,e.data=e.data||"",n=new XMLHttpRequest){if(n.overrideMimeType&&n.overrideMimeType(e.content_type),n.open(e.type||(e.data?"POST":"GET"),e.url,e.async),e.content_type&&n.setRequestHeader("Content-Type",e.content_type),n.setRequestHeader("X-Requested-With","XMLHttpRequest"),n.send(e.data),!e.async)return t();setTimeout(t,10)}}}}),r(dt,[],function(){function e(t,n){var r,i,o,a;if(n=n||'"',null===t)return"null";if(o=typeof t,"string"==o)return i="\bb t\nn\ff\rr\"\"''\\\\",n+t.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g,function(e,t){return'"'===n&&"'"===e?e:(r=i.indexOf(t),r+1?"\\"+i.charAt(r+1):(e=t.charCodeAt().toString(16),"\\u"+"0000".substring(e.length)+e))})+n;if("object"==o){if(t.hasOwnProperty&&"[object Array]"===Object.prototype.toString.call(t)){for(r=0,i="[";r0?",":"")+e(t[r],n);return i+"]"}i="{";for(a in t)t.hasOwnProperty(a)&&(i+="function"!=typeof t[a]?(i.length>1?","+n:n)+a+n+":"+e(t[a],n):"");return i+"}"}return""+t}return{serialize:e,parse:function(e){try{return window[String.fromCharCode(101)+"val"]("("+e+")")}catch(t){}}}}),r(ft,[dt,ut,p],function(e,t,n){function r(e){this.settings=i({},e),this.count=0}var i=n.extend;return r.sendRPC=function(e){return(new r).send(e)},r.prototype={send:function(n){var r=n.error,o=n.success;n=i(this.settings,n),n.success=function(t,i){t=e.parse(t),"undefined"==typeof t&&(t={error:"JSON Parse error."}),t.error?r.call(n.error_scope||n.scope,t.error,i):o.call(n.success_scope||n.scope,t.result)},n.error=function(e,t){r&&r.call(n.error_scope||n.scope,e,t)},n.data=e.serialize({id:n.id||"c"+this.count++,method:n.method,params:n.params}),n.content_type="application/json",t.send(n)}},r}),r(pt,[y],function(e){return{callbacks:{},count:0,send:function(n){var r=this,i=e.DOM,o=n.count!==t?n.count:r.count,a="tinymce_jsonp_"+o;r.callbacks[o]=function(e){i.remove(a),delete r.callbacks[o],n.callback(e)},i.add(i.doc.body,"script",{id:a,src:n.url,type:"text/javascript"}),r.count++}}}),r(mt,[],function(){function e(){s=[];for(var e in a)s.push(e);i.length=s.length}function n(){function n(e){var n,r;return r=e!==t?u+e:i.indexOf(",",u),-1===r||r>i.length?null:(n=i.substring(u,r),u=r+1,n)}var r,i,s,u=0;if(a={},c){o.load(l),i=o.getAttribute(l)||"";do{var d=n();if(null===d)break;if(r=n(parseInt(d,32)||0),null!==r){if(d=n(),null===d)break;s=n(parseInt(d,32)||0),r&&(a[r]=s)}}while(null!==r);e()}}function r(){var t,n="";if(c){for(var r in a)t=a[r],n+=(n?",":"")+r.length.toString(32)+","+r+","+t.length.toString(32)+","+t;o.setAttribute(l,n);try{o.save(l)}catch(i){}e()}}var i,o,a,s,l,c;try{if(window.localStorage)return localStorage}catch(u){}return l="tinymce",o=document.documentElement,c=!!o.addBehavior,c&&o.addBehavior("#default#userData"),i={key:function(e){return s[e]},getItem:function(e){return e in a?a[e]:null},setItem:function(e,t){a[e]=""+t,r()},removeItem:function(e){delete a[e],r()},clear:function(){a={},r()}},n(),i}),r(ht,[y,l,b,C,p,g],function(e,t,n,r,i,o){var a=window.tinymce;return a.DOM=e.DOM,a.ScriptLoader=n.ScriptLoader,a.PluginManager=r.PluginManager,a.ThemeManager=r.ThemeManager,a.dom=a.dom||{},a.dom.Event=t.Event,i.each(i,function(e,t){a[t]=e}),i.each("isOpera isWebKit isIE isGecko isMac".split(" "),function(e){a[e]=o[e.substr(2).toLowerCase()]}),{}}),r(gt,[F,p],function(e,t){return e.extend({Defaults:{firstControlClass:"first",lastControlClass:"last"},init:function(e){this.settings=t.extend({},this.Defaults,e)},preRender:function(e){e.addClass(this.settings.containerClass,"body")},applyClasses:function(e){var t=this,n=t.settings,r,i,o;r=e.items().filter(":visible"),i=n.firstControlClass,o=n.lastControlClass,r.each(function(e){e.removeClass(i).removeClass(o),n.controlClass&&e.addClass(n.controlClass)}),r.eq(0).addClass(i),r.eq(-1).addClass(o)},renderHtml:function(e){var t=this,n=t.settings,r,i="";return r=e.items(),r.eq(0).addClass(n.firstControlClass),r.eq(-1).addClass(n.lastControlClass),r.each(function(e){n.controlClass&&e.addClass(n.controlClass),i+=e.renderHtml()}),i},recalc:function(){},postRender:function(){}})}),r(vt,[gt],function(e){return e.extend({Defaults:{containerClass:"abs-layout",controlClass:"abs-layout-item"},recalc:function(e){e.items().filter(":visible").each(function(e){var t=e.settings;e.layoutRect({x:t.x,y:t.y,w:t.w,h:t.h}),e.recalc&&e.recalc()})},renderHtml:function(e){return'
    '+this._super(e)}})}),r(yt,[U,X],function(e,t){return e.extend({Mixins:[t],Defaults:{classes:"widget tooltip tooltip-n"},text:function(e){var t=this;return"undefined"!=typeof e?(t._value=e,t._rendered&&(t.getEl().lastChild.innerHTML=t.encode(e)),t):t._value},renderHtml:function(){var e=this,t=e.classPrefix;return'"},repaint:function(){var e=this,t,n;t=e.getEl().style,n=e._layoutRect,t.left=n.x+"px",t.top=n.y+"px",t.zIndex=131070}})}),r(bt,[U,yt],function(e,t){var n,r=e.extend({init:function(e){var t=this;t._super(e),t.canFocus=!0,e.tooltip&&r.tooltips!==!1&&(t.on("mouseenter",function(n){var r=t.tooltip().moveTo(-65535);if(n.control==t){var i=r.text(e.tooltip).show().testMoveRel(t.getEl(),["bc-tc","bc-tl","bc-tr"]);r.toggleClass("tooltip-n","bc-tc"==i),r.toggleClass("tooltip-nw","bc-tl"==i),r.toggleClass("tooltip-ne","bc-tr"==i),r.moveRel(t.getEl(),i)}else r.hide()}),t.on("mouseleave mousedown click",function(){t.tooltip().hide()})),t.aria("label",e.ariaLabel||e.tooltip)},tooltip:function(){return n||(n=new t({type:"tooltip"}),n.renderTo()),n},active:function(e){var t=this,n;return e!==n&&(t.aria("pressed",e),t.toggleClass("active",e)),t._super(e)},disabled:function(e){var t=this,n;return e!==n&&(t.aria("disabled",e),t.toggleClass("disabled",e)),t._super(e)},postRender:function(){var e=this,t=e.settings;e._rendered=!0,e._super(),e.parent()||!t.width&&!t.height||(e.initLayoutRect(),e.repaint()),t.autofocus&&e.focus()},remove:function(){this._super(),n&&(n.remove(),n=null)}});return r}),r(Ct,[bt],function(e){return e.extend({Defaults:{classes:"widget btn",role:"button"},init:function(e){var t=this,n;t.on("click mousedown",function(e){e.preventDefault()}),t._super(e),n=e.size,e.subtype&&t.addClass(e.subtype),n&&t.addClass("btn-"+n)},icon:function(e){var t=this,n=t.classPrefix;if("undefined"==typeof e)return t.settings.icon;if(t.settings.icon=e,e=e?n+"ico "+n+"i-"+t.settings.icon:"",t._rendered){var r=t.getEl().firstChild,i=r.getElementsByTagName("i")[0];e?(i&&i==r.firstChild||(i=document.createElement("i"),r.insertBefore(i,r.firstChild)),i.className=e):i&&r.removeChild(i),t.text(t._text)}return t},repaint:function(){var e=this.getEl().firstChild.style;e.width=e.height="100%",this._super()},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,r=e.settings.icon,i="";return e.settings.image&&(r="none",i=" style=\"background-image: url('"+e.settings.image+"')\""),r=e.settings.icon?n+"ico "+n+"i-"+r:"",'
    "}})}),r(xt,[j],function(e){return e.extend({Defaults:{defaultType:"button",role:"group"},renderHtml:function(){var e=this,t=e._layout;return e.addClass("btn-group"),e.preRender(),t.preRender(e),'
    '+(e.settings.html||"")+t.renderHtml(e)+"
    "}})}),r(wt,[bt],function(e){return e.extend({Defaults:{classes:"checkbox",role:"checkbox",checked:!1},init:function(e){var t=this;t._super(e),t.on("click mousedown",function(e){e.preventDefault()}),t.on("click",function(e){e.preventDefault(),t.disabled()||t.checked(!t.checked())}),t.checked(t.settings.checked)},checked:function(e){var t=this;return"undefined"!=typeof e?(e?t.addClass("checked"):t.removeClass("checked"),t._checked=e,t.aria("checked",e),t):t._checked},value:function(e){return this.checked(e)},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix;return'
    '+e.encode(e._text)+"
    "}})}),r(_t,[Ct,Q],function(e,t){return e.extend({showPanel:function(){var e=this,n=e.settings;if(e.active(!0),e.panel)e.panel.show();else{var r=n.panel;r.type&&(r={layout:"grid",items:r}),r.role=r.role||"dialog",r.popover=!0,r.autohide=!0,r.ariaRoot=!0,e.panel=new t(r).on("hide",function(){e.active(!1)}).on("cancel",function(t){t.stopPropagation(),e.focus(),e.hidePanel()}).parent(e).renderTo(e.getContainerElm()),e.panel.fire("show"),e.panel.reflow()}e.panel.moveRel(e.getEl(),n.popoverAlign||(e.isRtl()?["bc-tr","bc-tc"]:["bc-tl","bc-tc"]))},hidePanel:function(){var e=this;e.panel&&e.panel.hide()},postRender:function(){var e=this;return e.aria("haspopup",!0),e.on("click",function(t){t.control===e&&(e.panel&&e.panel.visible()?e.hidePanel():(e.showPanel(),e.panel.focus(!!t.aria)))}),e._super()}})}),r(Nt,[_t,y],function(e,t){var n=t.DOM;return e.extend({init:function(e){this._super(e),this.addClass("colorbutton")},color:function(e){return e?(this._color=e,this.getEl("preview").style.backgroundColor=e,this):this._color},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,r=e.settings.icon?n+"ico "+n+"i-"+e.settings.icon:"",i=e.settings.image?" style=\"background-image: url('"+e.settings.image+"')\"":"";return'
    '},postRender:function(){var e=this,t=e.settings.onclick;return e.on("click",function(r){r.aria&&"down"==r.aria.key||r.control!=e||n.getParent(r.target,"."+e.classPrefix+"open")||(r.stopImmediatePropagation(),t.call(e,r))}),delete e.settings.onclick,e._super()}})}),r(Et,[bt,q,V],function(e,t,n){return e.extend({init:function(e){var t=this;t._super(e),t.addClass("combobox"),t.subinput=!0,t.ariaTarget="inp",e=t.settings,e.menu=e.menu||e.values,e.menu&&(e.icon="caret"),t.on("click",function(n){for(var r=n.target,i=t.getEl();r&&r!=i;)r.id&&-1!=r.id.indexOf("-open")&&(t.fire("action"),e.menu&&(t.showMenu(),n.aria&&t.menu.items()[0].focus())),r=r.parentNode}),t.on("keydown",function(e){"INPUT"==e.target.nodeName&&13==e.keyCode&&t.parents().reverse().each(function(n){return e.preventDefault(),t.fire("change"),n.hasEventListeners("submit")&&n.toJSON?(n.fire("submit",{data:n.toJSON()}),!1):void 0})}),e.placeholder&&(t.addClass("placeholder"),t.on("focusin",function(){t._hasOnChange||(n.on(t.getEl("inp"),"change",function(){t.fire("change")}),t._hasOnChange=!0),t.hasClass("placeholder")&&(t.getEl("inp").value="",t.removeClass("placeholder"))}),t.on("focusout",function(){0===t.value().length&&(t.getEl("inp").value=e.placeholder,t.addClass("placeholder"))}))},showMenu:function(){var e=this,n=e.settings,r;e.menu||(r=n.menu||[],r.length?r={type:"menu",items:r}:r.type=r.type||"menu",e.menu=t.create(r).parent(e).renderTo(e.getContainerElm()),e.fire("createmenu"),e.menu.reflow(),e.menu.on("cancel",function(t){t.control===e.menu&&e.focus()}),e.menu.on("show hide",function(t){t.control.items().each(function(t){t.active(t.value()==e.value())})}).fire("show"),e.menu.on("select",function(t){e.value(t.control.value())}),e.on("focusin",function(t){"INPUT"==t.target.tagName&&e.menu.hide()}),e.aria("expanded",!0)),e.menu.show(),e.menu.layoutRect({w:e.layoutRect().w}),e.menu.moveRel(e.getEl(),e.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"])},value:function(e){var t=this;return"undefined"!=typeof e?(t._value=e,t.removeClass("placeholder"),t._rendered&&(t.getEl("inp").value=e),t):t._rendered?(e=t.getEl("inp").value,e!=t.settings.placeholder?e:""):t._value},disabled:function(e){var t=this;return t._rendered&&"undefined"!=typeof e&&(t.getEl("inp").disabled=e),t._super(e)},focus:function(){this.getEl("inp").focus()},repaint:function(){var e=this,t=e.getEl(),r=e.getEl("open"),i=e.layoutRect(),o,a;o=r?i.w-n.getSize(r).width-10:i.w-10;var s=document;return s.all&&(!s.documentMode||s.documentMode<=8)&&(a=e.layoutRect().h-2+"px"),n.css(t.firstChild,{width:o,lineHeight:a}),e._super(),e},postRender:function(){var e=this;return n.on(this.getEl("inp"),"change",function(){e.fire("change")}),e._super()},remove:function(){n.off(this.getEl("inp")),this._super()},renderHtml:function(){var e=this,t=e._id,n=e.settings,r=e.classPrefix,i=n.value||n.placeholder||"",o,a,s="",l="";return"spellcheck"in n&&(l+=' spellcheck="'+n.spellcheck+'"'),n.maxLength&&(l+=' maxlength="'+n.maxLength+'"'),n.size&&(l+=' size="'+n.size+'"'),n.subtype&&(l+=' type="'+n.subtype+'"'),e.disabled()&&(l+=' disabled="disabled"'),o=n.icon,o&&"caret"!=o&&(o=r+"ico "+r+"i-"+n.icon),a=e._text,(o||a)&&(s='
    ",e.addClass("has-open")),'
    "+s+"
    "}})}),r(St,[bt],function(e){return e.extend({init:function(e){var t=this;e.delimiter||(e.delimiter="\xbb"),t._super(e),t.addClass("path"),t.canFocus=!0,t.on("click",function(e){var n,r=e.target;(n=r.getAttribute("data-index"))&&t.fire("select",{value:t.data()[n],index:n})})},focus:function(){var e=this;return e.getEl().firstChild.focus(),e},data:function(e){var t=this;return"undefined"!=typeof e?(t._data=e,t.update(),t):t._data},update:function(){this.innerHtml(this._getPathHtml())},postRender:function(){var e=this;e._super(),e.data(e.settings.data)},renderHtml:function(){var e=this;return'
    '+e._getPathHtml()+"
    "},_getPathHtml:function(){var e=this,t=e._data||[],n,r,i="",o=e.classPrefix;for(n=0,r=t.length;r>n;n++)i+=(n>0?'":"")+'
    '+t[n].name+"
    ";return i||(i='
     
    '),i}})}),r(kt,[St,lt],function(e,t){return e.extend({postRender:function(){function e(e){if(1===e.nodeType){if("BR"==e.nodeName||e.getAttribute("data-mce-bogus"))return!0;if("bookmark"===e.getAttribute("data-mce-type"))return!0}return!1}var n=this,r=t.activeEditor;return n.on("select",function(t){var n=[],i,o=r.getBody();for(r.focus(),i=r.selection.getStart();i&&i!=o;)e(i)||n.push(i),i=i.parentNode;r.selection.select(n[n.length-1-t.index]),r.nodeChanged()}),r.on("nodeChange",function(t){for(var i=[],o=t.parents,a=o.length;a--;)if(1==o[a].nodeType&&!e(o[a])){var s=r.fire("ResolveName",{name:o[a].nodeName.toLowerCase(),target:o[a]});i.push({name:s.name})}n.data(i)}),n._super()}})}),r(Tt,[j],function(e){return e.extend({Defaults:{layout:"flex",align:"center",defaults:{flex:1}},renderHtml:function(){var e=this,t=e._layout,n=e.classPrefix;return e.addClass("formitem"),t.preRender(e),'
    '+(e.settings.title?'
    '+e.settings.title+"
    ":"")+'
    '+(e.settings.html||"")+t.renderHtml(e)+"
    "}})}),r(Rt,[j,Tt],function(e,t){return e.extend({Defaults:{containerCls:"form",layout:"flex",direction:"column",align:"stretch",flex:1,padding:20,labelGap:30,spacing:10,callbacks:{submit:function(){this.submit()}}},preRender:function(){var e=this,n=e.items();n.each(function(n){var r,i=n.settings.label;i&&(r=new t({layout:"flex",autoResize:"overflow",defaults:{flex:1},items:[{type:"label",id:n._id+"-l",text:i,flex:0,forId:n._id,disabled:n.disabled()}]}),r.type="formitem",n.aria("labelledby",n._id+"-l"),"undefined"==typeof n.settings.flex&&(n.settings.flex=1),e.replace(n,r),r.add(n))})},recalcLabels:function(){var e=this,t=0,n=[],r,i;if(e.settings.labelGapCalc!==!1)for(e.items().filter("formitem").each(function(e){var r=e.items()[0],i=r.getEl().clientWidth;t=i>t?i:t,n.push(r)}),i=e.settings.labelGap||0,r=n.length;r--;)n[r].settings.minWidth=t+i},visible:function(e){var t=this._super(e);return e===!0&&this._rendered&&this.recalcLabels(),t},submit:function(){return this.fire("submit",{data:this.toJSON()})},postRender:function(){var e=this;e._super(),e.recalcLabels(),e.fromJSON(e.settings.data)}})}),r(At,[Rt],function(e){return e.extend({Defaults:{containerCls:"fieldset",layout:"flex",direction:"column",align:"stretch",flex:1,padding:"25 15 5 15",labelGap:30,spacing:10,border:1},renderHtml:function(){var e=this,t=e._layout,n=e.classPrefix;return e.preRender(),t.preRender(e),'
    '+(e.settings.title?''+e.settings.title+"":"")+'
    '+(e.settings.html||"")+t.renderHtml(e)+"
    "}})}),r(Bt,[Et],function(e){return e.extend({init:function(e){var t=this,n=tinymce.activeEditor,r;e.spellcheck=!1,r=n.settings.file_browser_callback,r&&(e.icon="browse",e.onaction=function(){r(t.getEl("inp").id,t.getEl("inp").value,e.filetype,window)}),t._super(e)}})}),r(Lt,[vt],function(e){return e.extend({recalc:function(e){var t=e.layoutRect(),n=e.paddingBox();e.items().filter(":visible").each(function(e){e.layoutRect({x:n.left,y:n.top,w:t.innerW-n.right-n.left,h:t.innerH-n.top-n.bottom}),e.recalc&&e.recalc() +})}})}),r(Dt,[vt],function(e){return e.extend({recalc:function(e){var t,n,r,i,o,a,s,l,c,u,d,f,p,m,h,g,v=[],y,b,C,x,w,_,N,E,S,k,T,R,A,B,L,D,M,H,P,O,I,F,z=Math.max,W=Math.min;for(r=e.items().filter(":visible"),i=e.layoutRect(),o=e._paddingBox,a=e.settings,f=e.isRtl()?a.direction||"row-reversed":a.direction,s=a.align,l=e.isRtl()?a.pack||"end":a.pack,c=a.spacing||0,("row-reversed"==f||"column-reverse"==f)&&(r=r.set(r.toArray().reverse()),f=f.split("-")[0]),"column"==f?(S="y",N="h",E="minH",k="maxH",R="innerH",T="top",A="deltaH",B="contentH",P="left",M="w",L="x",D="innerW",H="minW",O="right",I="deltaW",F="contentW"):(S="x",N="w",E="minW",k="maxW",R="innerW",T="left",A="deltaW",B="contentW",P="top",M="h",L="y",D="innerH",H="minH",O="bottom",I="deltaH",F="contentH"),d=i[R]-o[T]-o[T],_=u=0,t=0,n=r.length;n>t;t++)p=r[t],m=p.layoutRect(),h=p.settings,g=h.flex,d-=n-1>t?c:0,g>0&&(u+=g,m[k]&&v.push(p),m.flex=g),d-=m[E],y=o[P]+m[H]+o[O],y>_&&(_=y);if(x={},x[E]=0>d?i[E]-d+i[A]:i[R]-d+i[A],x[H]=_+i[I],x[B]=i[R]-d,x[F]=_,x.minW=W(x.minW,i.maxW),x.minH=W(x.minH,i.maxH),x.minW=z(x.minW,i.startMinWidth),x.minH=z(x.minH,i.startMinHeight),!i.autoResize||x.minW==i.minW&&x.minH==i.minH){for(C=d/u,t=0,n=v.length;n>t;t++)p=v[t],m=p.layoutRect(),b=m[k],y=m[E]+m.flex*C,y>b?(d-=m[k]-m[E],u-=m.flex,m.flex=0,m.maxFlexSize=b):m.maxFlexSize=0;for(C=d/u,w=o[T],x={},0===u&&("end"==l?w=d+o[T]:"center"==l?(w=Math.round(i[R]/2-(i[R]-d)/2)+o[T],0>w&&(w=o[T])):"justify"==l&&(w=o[T],c=Math.floor(d/(r.length-1)))),x[L]=o[P],t=0,n=r.length;n>t;t++)p=r[t],m=p.layoutRect(),y=m.maxFlexSize||m[E],"center"===s?x[L]=Math.round(i[D]/2-m[M]/2):"stretch"===s?(x[M]=z(m[H]||0,i[D]-o[P]-o[O]),x[L]=o[P]):"end"===s&&(x[L]=i[D]-m[M]-o.top),m.flex>0&&(y+=m.flex*C),x[N]=y,x[S]=w,p.layoutRect(x),p.recalc&&p.recalc(),w+=y+c}else if(x.w=x.minW,x.h=x.minH,e.layoutRect(x),this.recalc(e),null===e._lastRect){var V=e.parent();V&&(V._lastRect=null,V.recalc())}}})}),r(Mt,[gt],function(e){return e.extend({Defaults:{containerClass:"flow-layout",controlClass:"flow-layout-item",endClass:"break"},recalc:function(e){e.items().filter(":visible").each(function(e){e.recalc&&e.recalc()})}})}),r(Ht,[U,bt,Q,p,lt,g],function(e,t,n,r,i,o){function a(e){function t(t){function n(e){return e.replace(/%(\w+)/g,"")}var r,i,o=e.dom,a="",l,c;return c=e.settings.preview_styles,c===!1?"":(c||(c="font-family font-size font-weight font-style text-decoration text-transform color background-color border border-radius outline text-shadow"),(t=e.formatter.get(t))?(t=t[0],r=t.block||t.inline||"span",i=o.create(r),s(t.styles,function(e,t){e=n(e),e&&o.setStyle(i,t,e)}),s(t.attributes,function(e,t){e=n(e),e&&o.setAttrib(i,t,e)}),s(t.classes,function(e){e=n(e),o.hasClass(i,e)||o.addClass(i,e)}),e.fire("PreviewFormats"),o.setStyles(i,{position:"absolute",left:-65535}),e.getBody().appendChild(i),l=o.getStyle(e.getBody(),"fontSize",!0),l=/px$/.test(l)?parseInt(l,10):0,s(c.split(" "),function(t){var n=o.getStyle(i,t,!0);if(!("background-color"==t&&/transparent|rgba\s*\([^)]+,\s*0\)/.test(n)&&(n=o.getStyle(e.getBody(),t,!0),"#ffffff"==o.toHex(n).toLowerCase())||"color"==t&&"#000000"==o.toHex(n).toLowerCase())){if("font-size"==t&&/em|%$/.test(n)){if(0===l)return;n=parseFloat(n,10)/(/%$/.test(n)?100:1),n=n*l+"px"}"border"==t&&n&&(a+="padding:0 2px;"),a+=t+":"+n+";"}}),e.fire("AfterPreviewFormats"),o.remove(i),a):void 0)}function r(t,n){return function(){var r=this;e.on("nodeChange",function(i){var o=e.formatter,a=null;s(i.parents,function(e){return s(t,function(t){return n?o.matchNode(e,n,{value:t.value})&&(a=t.value):o.matchNode(e,t.value)&&(a=t.value),a?!1:void 0}),a?!1:void 0}),r.value(a)})}}function i(e){e=e.split(";");for(var t=e.length;t--;)e[t]=e[t].split("=");return e}function o(){function n(e){var t=[];if(e)return s(e,function(e){var r={text:e.title,icon:e.icon};if(e.items)r.menu=n(e.items);else{var a=e.format||"custom"+i++;e.format||(e.name=a,o.push(e)),r.format=a}t.push(r)}),t}function r(){var t;return t=n(e.settings.style_formats_merge?e.settings.style_formats?a.concat(e.settings.style_formats):a:e.settings.style_formats||a)}var i=0,o=[],a=[{title:"Headers",items:[{title:"Header 1",format:"h1"},{title:"Header 2",format:"h2"},{title:"Header 3",format:"h3"},{title:"Header 4",format:"h4"},{title:"Header 5",format:"h5"},{title:"Header 6",format:"h6"}]},{title:"Inline",items:[{title:"Bold",icon:"bold",format:"bold"},{title:"Italic",icon:"italic",format:"italic"},{title:"Underline",icon:"underline",format:"underline"},{title:"Strikethrough",icon:"strikethrough",format:"strikethrough"},{title:"Superscript",icon:"superscript",format:"superscript"},{title:"Subscript",icon:"subscript",format:"subscript"},{title:"Code",icon:"code",format:"code"}]},{title:"Blocks",items:[{title:"Paragraph",format:"p"},{title:"Blockquote",format:"blockquote"},{title:"Div",format:"div"},{title:"Pre",format:"pre"}]},{title:"Alignment",items:[{title:"Left",icon:"alignleft",format:"alignleft"},{title:"Center",icon:"aligncenter",format:"aligncenter"},{title:"Right",icon:"alignright",format:"alignright"},{title:"Justify",icon:"alignjustify",format:"alignjustify"}]}];return e.on("init",function(){s(o,function(t){e.formatter.register(t.name,t)})}),{type:"menu",items:r(),onPostRender:function(t){e.fire("renderFormatsMenu",{control:t.control})},itemDefaults:{preview:!0,textStyle:function(){return this.settings.format?t(this.settings.format):void 0},onPostRender:function(){var t=this,n=this.settings.format;n&&t.parent().on("show",function(){t.disabled(!e.formatter.canApply(n)),t.active(e.formatter.match(n))})},onclick:function(){this.settings.format&&f(this.settings.format)}}}}function a(){return e.undoManager?e.undoManager.hasUndo():!1}function l(){return e.undoManager?e.undoManager.hasRedo():!1}function c(){var t=this;t.disabled(!a()),e.on("Undo Redo AddUndo TypingUndo",function(){t.disabled(!a())})}function u(){var t=this;t.disabled(!l()),e.on("Undo Redo AddUndo TypingUndo",function(){t.disabled(!l())})}function d(){var t=this;e.on("VisualAid",function(e){t.active(e.hasVisual)}),t.active(e.hasVisual)}function f(t){t.control&&(t=t.control.value()),t&&e.execCommand("mceToggleFormat",!1,t)}var p;p=o(),s({bold:"Bold",italic:"Italic",underline:"Underline",strikethrough:"Strikethrough",subscript:"Subscript",superscript:"Superscript"},function(t,n){e.addButton(n,{tooltip:t,onPostRender:function(){var t=this;e.formatter?e.formatter.formatChanged(n,function(e){t.active(e)}):e.on("init",function(){e.formatter.formatChanged(n,function(e){t.active(e)})})},onclick:function(){f(n)}})}),s({outdent:["Decrease indent","Outdent"],indent:["Increase indent","Indent"],cut:["Cut","Cut"],copy:["Copy","Copy"],paste:["Paste","Paste"],help:["Help","mceHelp"],selectall:["Select all","SelectAll"],hr:["Insert horizontal rule","InsertHorizontalRule"],removeformat:["Clear formatting","RemoveFormat"],visualaid:["Visual aids","mceToggleVisualAid"],newdocument:["New document","mceNewDocument"]},function(t,n){e.addButton(n,{tooltip:t[0],cmd:t[1]})}),s({blockquote:["Blockquote","mceBlockQuote"],numlist:["Numbered list","InsertOrderedList"],bullist:["Bullet list","InsertUnorderedList"],subscript:["Subscript","Subscript"],superscript:["Superscript","Superscript"],alignleft:["Align left","JustifyLeft"],aligncenter:["Align center","JustifyCenter"],alignright:["Align right","JustifyRight"],alignjustify:["Justify","JustifyFull"]},function(t,n){e.addButton(n,{tooltip:t[0],cmd:t[1],onPostRender:function(){var t=this;e.formatter?e.formatter.formatChanged(n,function(e){t.active(e)}):e.on("init",function(){e.formatter.formatChanged(n,function(e){t.active(e)})})}})}),e.addButton("undo",{tooltip:"Undo",onPostRender:c,cmd:"undo"}),e.addButton("redo",{tooltip:"Redo",onPostRender:u,cmd:"redo"}),e.addMenuItem("newdocument",{text:"New document",shortcut:"Ctrl+N",icon:"newdocument",cmd:"mceNewDocument"}),e.addMenuItem("undo",{text:"Undo",icon:"undo",shortcut:"Ctrl+Z",onPostRender:c,cmd:"undo"}),e.addMenuItem("redo",{text:"Redo",icon:"redo",shortcut:"Ctrl+Y",onPostRender:u,cmd:"redo"}),e.addMenuItem("visualaid",{text:"Visual aids",selectable:!0,onPostRender:d,cmd:"mceToggleVisualAid"}),s({cut:["Cut","Cut","Ctrl+X"],copy:["Copy","Copy","Ctrl+C"],paste:["Paste","Paste","Ctrl+V"],selectall:["Select all","SelectAll","Ctrl+A"],bold:["Bold","Bold","Ctrl+B"],italic:["Italic","Italic","Ctrl+I"],underline:["Underline","Underline"],strikethrough:["Strikethrough","Strikethrough"],subscript:["Subscript","Subscript"],superscript:["Superscript","Superscript"],removeformat:["Clear formatting","RemoveFormat"]},function(t,n){e.addMenuItem(n,{text:t[0],icon:n,shortcut:t[2],cmd:t[1]})}),e.on("mousedown",function(){n.hideAll()}),e.addButton("styleselect",{type:"menubutton",text:"Formats",menu:p}),e.addButton("formatselect",function(){var n=[],o=i(e.settings.block_formats||"Paragraph=p;Address=address;Pre=pre;Header 1=h1;Header 2=h2;Header 3=h3;Header 4=h4;Header 5=h5;Header 6=h6");return s(o,function(e){n.push({text:e[0],value:e[1],textStyle:function(){return t(e[1])}})}),{type:"listbox",text:o[0][0],values:n,fixedWidth:!0,onselect:f,onPostRender:r(n)}}),e.addButton("fontselect",function(){var t="Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats",n=[],o=i(e.settings.font_formats||t);return s(o,function(e){n.push({text:{raw:e[0]},value:e[1],textStyle:-1==e[1].indexOf("dings")?"font-family:"+e[1]:""})}),{type:"listbox",text:"Font Family",tooltip:"Font Family",values:n,fixedWidth:!0,onPostRender:r(n,"fontname"),onselect:function(t){t.control.settings.value&&e.execCommand("FontName",!1,t.control.settings.value)}}}),e.addButton("fontsizeselect",function(){var t=[],n="8pt 10pt 12pt 14pt 18pt 24pt 36pt",i=e.settings.fontsize_formats||n;return s(i.split(" "),function(e){t.push({text:e,value:e})}),{type:"listbox",text:"Font Sizes",tooltip:"Font Sizes",values:t,fixedWidth:!0,onPostRender:r(t,"fontsize"),onclick:function(t){t.control.settings.value&&e.execCommand("FontSize",!1,t.control.settings.value)}}}),e.addMenuItem("formats",{text:"Formats",menu:p})}var s=r.each;i.on("AddEditor",function(t){t.editor.rtl&&(e.rtl=!0),a(t.editor)}),e.translate=function(e){return i.translate(e)},t.tooltips=!o.iOS}),r(Pt,[vt],function(e){return e.extend({recalc:function(e){var t=e.settings,n,r,i,o,a,s,l,c,u,d,f,p,m,h,g,v,y,b,C,x,w,_,N=[],E=[],S,k,T,R;for(t=e.settings,i=e.items().filter(":visible"),o=e.layoutRect(),r=t.columns||Math.ceil(Math.sqrt(i.length)),n=Math.ceil(i.length/r),y=t.spacingH||t.spacing||0,b=t.spacingV||t.spacing||0,C=t.alignH||t.align,x=t.alignV||t.align,g=e._paddingBox,C&&"string"==typeof C&&(C=[C]),x&&"string"==typeof x&&(x=[x]),d=0;r>d;d++)N.push(0);for(f=0;n>f;f++)E.push(0);for(f=0;n>f;f++)for(d=0;r>d&&(u=i[f*r+d],u);d++)c=u.layoutRect(),S=c.minW,k=c.minH,N[d]=S>N[d]?S:N[d],E[f]=k>E[f]?k:E[f];for(T=o.innerW-g.left-g.right,w=0,d=0;r>d;d++)w+=N[d]+(d>0?y:0),T-=(d>0?y:0)+N[d];for(R=o.innerH-g.top-g.bottom,_=0,f=0;n>f;f++)_+=E[f]+(f>0?b:0),R-=(f>0?b:0)+E[f];if(w+=g.left+g.right,_+=g.top+g.bottom,l={},l.minW=w+(o.w-o.innerW),l.minH=_+(o.h-o.innerH),l.contentW=l.minW-o.deltaW,l.contentH=l.minH-o.deltaH,l.minW=Math.min(l.minW,o.maxW),l.minH=Math.min(l.minH,o.maxH),l.minW=Math.max(l.minW,o.startMinWidth),l.minH=Math.max(l.minH,o.startMinHeight),!o.autoResize||l.minW==o.minW&&l.minH==o.minH){o.autoResize&&(l=e.layoutRect(l),l.contentW=l.minW-o.deltaW,l.contentH=l.minH-o.deltaH);var A;A="start"==t.packV?0:R>0?Math.floor(R/n):0;var B=0,L=t.flexWidths;if(L)for(d=0;dd;d++)N[d]+=L?L[d]*D:D;for(m=g.top,f=0;n>f;f++){for(p=g.left,s=E[f]+A,d=0;r>d&&(u=i[f*r+d],u);d++)h=u.settings,c=u.layoutRect(),a=Math.max(N[d],c.startMinWidth),c.x=p,c.y=m,v=h.alignH||(C?C[d]||C[0]:null),"center"==v?c.x=p+a/2-c.w/2:"right"==v?c.x=p+a-c.w:"stretch"==v&&(c.w=a),v=h.alignV||(x?x[d]||x[0]:null),"center"==v?c.y=m+s/2-c.h/2:"bottom"==v?c.y=m+s-c.h:"stretch"==v&&(c.h=s),u.layoutRect(c),p+=a+y,u.recalc&&u.recalc();m+=s+b}}else if(l.w=l.minW,l.h=l.minH,e.layoutRect(l),this.recalc(e),null===e._lastRect){var M=e.parent();M&&(M._lastRect=null,M.recalc())}}})}),r(Ot,[bt],function(e){return e.extend({renderHtml:function(){var e=this;return e.addClass("iframe"),e.canFocus=!1,''},src:function(e){this.getEl().src=e},html:function(e,t){var n=this,r=this.getEl().contentWindow.document.body;return r?(r.innerHTML=e,t&&t()):setTimeout(function(){n.html(e)},0),this}})}),r(It,[bt,V],function(e,t){return e.extend({init:function(e){var t=this;t._super(e),t.addClass("widget"),t.addClass("label"),t.canFocus=!1,e.multiline&&t.addClass("autoscroll"),e.strong&&t.addClass("strong")},initLayoutRect:function(){var e=this,n=e._super();if(e.settings.multiline){var r=t.getSize(e.getEl());r.width>n.maxW&&(n.minW=n.maxW,e.addClass("multiline")),e.getEl().style.width=n.minW+"px",n.startMinH=n.h=n.minH=Math.min(n.maxH,t.getSize(e.getEl()).height)}return n},repaint:function(){var e=this;return e.settings.multiline||(e.getEl().style.lineHeight=e.layoutRect().h+"px"),e._super()},text:function(e){var t=this;return t._rendered&&e&&this.innerHtml(t.encode(e)),t._super(e)},renderHtml:function(){var e=this,t=e.settings.forId;return'"}})}),r(Ft,[j],function(e){return e.extend({Defaults:{role:"toolbar",layout:"flow"},init:function(e){var t=this;t._super(e),t.addClass("toolbar")},postRender:function(){var e=this;return e.items().addClass("toolbar-item"),e._super()}})}),r(zt,[Ft],function(e){return e.extend({Defaults:{role:"menubar",containerCls:"menubar",ariaRoot:!0,defaults:{type:"menubutton"}}})}),r(Wt,[Ct,q,zt],function(e,t,n){function r(e,t){for(;e;){if(t===e)return!0;e=e.parentNode}return!1}var i=e.extend({init:function(e){var t=this;t._renderOpen=!0,t._super(e),t.addClass("menubtn"),e.fixedWidth&&t.addClass("fixed-width"),t.aria("haspopup",!0),t.hasPopup=!0},showMenu:function(){var e=this,n=e.settings,r;return e.menu&&e.menu.visible()?e.hideMenu():(e.menu||(r=n.menu||[],r.length?r={type:"menu",items:r}:r.type=r.type||"menu",e.menu=t.create(r).parent(e).renderTo(),e.fire("createmenu"),e.menu.reflow(),e.menu.on("cancel",function(t){t.control.parent()===e.menu&&(t.stopPropagation(),e.focus(),e.hideMenu())}),e.menu.on("select",function(){e.focus()}),e.menu.on("show hide",function(t){t.control==e.menu&&e.activeMenu("show"==t.type),e.aria("expanded","show"==t.type)}).fire("show")),e.menu.show(),e.menu.layoutRect({w:e.layoutRect().w}),void e.menu.moveRel(e.getEl(),e.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"]))},hideMenu:function(){var e=this;e.menu&&(e.menu.items().each(function(e){e.hideMenu&&e.hideMenu()}),e.menu.hide())},activeMenu:function(e){this.toggleClass("active",e)},renderHtml:function(){var e=this,t=e._id,r=e.classPrefix,i=e.settings.icon?r+"ico "+r+"i-"+e.settings.icon:"";return e.aria("role",e.parent()instanceof n?"menuitem":"button"),'
    '},postRender:function(){var e=this;return e.on("click",function(t){t.control===e&&r(t.target,e.getEl())&&(e.showMenu(),t.aria&&e.menu.items()[0].focus())}),e.on("mouseenter",function(t){var n=t.control,r=e.parent(),o;n&&r&&n instanceof i&&n.parent()==r&&(r.items().filter("MenuButton").each(function(e){e.hideMenu&&e!=n&&(e.menu&&e.menu.visible()&&(o=!0),e.hideMenu())}),o&&(n.focus(),n.showMenu()))}),e._super()},text:function(e){var t=this,n,r;if(t._rendered)for(r=t.getEl("open").getElementsByTagName("span"),n=0;n0&&(o=n[0].text,t._value=n[0].value),e.menu=n}e.text=e.text||o||n[0].text,t._super(e),t.addClass("listbox"),t.on("select",function(n){var r=n.control;a&&(n.lastControl=a),e.multiple?r.active(!r.active()):t.value(n.control.settings.value),a=r})},value:function(e){function t(e,n){e.items().each(function(e){r=e.value()===n,r&&(i=i||e.text()),e.active(r),e.menu&&t(e.menu,n)})}var n=this,r,i,o,a;if("undefined"!=typeof e){if(n.menu)t(n.menu,e);else for(o=n.settings.menu,a=0;a'+("-"!==o?' ":"")+("-"!==o?''+o+"":"")+(l?'
    '+l+"
    ":"")+(r.menu?'
    ':"")+""},postRender:function(){var e=this,t=e.settings,n=t.textStyle;if("function"==typeof n&&(n=n.call(this)),n){var r=e.getEl("text");r&&r.setAttribute("style",n)}return e.on("mouseenter click",function(n){n.control===e&&(t.menu||"click"!==n.type?(e.showMenu(),n.aria&&e.menu.focus(!0)):(e.fire("select"),e.parent().hideAll()))}),e._super(),e},active:function(e){return"undefined"!=typeof e&&this.aria("checked",e),this._super(e)},remove:function(){this._super(),this.menu&&this.menu.remove()}})}),r(qt,[Q,Ut,p],function(e,t,n){var r=e.extend({Defaults:{defaultType:"menuitem",border:1,layout:"stack",role:"application",bodyRole:"menu",ariaRoot:!0},init:function(e){var t=this;if(e.autohide=!0,e.constrainToViewport=!0,e.itemDefaults)for(var r=e.items,i=r.length;i--;)r[i]=n.extend({},e.itemDefaults,r[i]);t._super(e),t.addClass("menu")},repaint:function(){return this.toggleClass("menu-align",!0),this._super(),this.getEl().style.height="",this.getEl("body").style.height="",this},cancel:function(){var e=this;e.hideAll(),e.fire("select")},hideAll:function(){var e=this;return this.find("menuitem").exec("hideMenu"),e._super()},preRender:function(){var e=this;return e.items().each(function(t){var n=t.settings;return n.icon||n.selectable?(e._hasIcons=!0,!1):void 0}),e._super()}});return r}),r($t,[wt],function(e){return e.extend({Defaults:{classes:"radio",role:"radio"}})}),r(jt,[bt,K],function(e,t){return e.extend({renderHtml:function(){var e=this,t=e.classPrefix;return e.addClass("resizehandle"),"both"==e.settings.direction&&e.addClass("resizehandle-both"),e.canFocus=!1,'
    '},postRender:function(){var e=this;e._super(),e.resizeDragHelper=new t(this._id,{start:function(){e.fire("ResizeStart")},drag:function(t){"both"!=e.settings.direction&&(t.deltaX=0),e.fire("Resize",t)},stop:function(){e.fire("ResizeEnd")}})},remove:function(){return this.resizeDragHelper&&this.resizeDragHelper.destroy(),this._super()}})}),r(Kt,[bt],function(e){return e.extend({renderHtml:function(){var e=this;return e.addClass("spacer"),e.canFocus=!1,'
    '}})}),r(Yt,[Wt,V],function(e,t){return e.extend({Defaults:{classes:"widget btn splitbtn",role:"button"},repaint:function(){var e=this,n=e.getEl(),r=e.layoutRect(),i,o;return e._super(),i=n.firstChild,o=n.lastChild,t.css(i,{width:r.w-t.getSize(o).width,height:r.h-2}),t.css(o,{height:r.h-2}),e},activeMenu:function(e){var n=this;t.toggleClass(n.getEl().lastChild,n.classPrefix+"active",e)},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,r=e.settings.icon?n+"ico "+n+"i-"+e.settings.icon:"";return'
    '},postRender:function(){var e=this,t=e.settings.onclick;return e.on("click",function(e){var n=e.target;if(e.control==this)for(;n;){if(e.aria&&"down"!=e.aria.key||"BUTTON"==n.nodeName&&-1==n.className.indexOf("open"))return e.stopImmediatePropagation(),void t.call(this,e);n=n.parentNode}}),delete e.settings.onclick,e._super()}})}),r(Gt,[Mt],function(e){return e.extend({Defaults:{containerClass:"stack-layout",controlClass:"stack-layout-item",endClass:"break"}})}),r(Xt,[G,V],function(e,t){return e.extend({lastIdx:0,Defaults:{layout:"absolute",defaults:{type:"panel"}},activateTab:function(e){var n;this.activeTabId&&(n=this.getEl(this.activeTabId),t.removeClass(n,this.classPrefix+"active"),n.setAttribute("aria-selected","false")),this.activeTabId="t"+e,n=this.getEl("t"+e),n.setAttribute("aria-selected","true"),t.addClass(n,this.classPrefix+"active"),e!=this.lastIdx&&(this.items()[this.lastIdx].hide(),this.lastIdx=e),this.items()[e].show().fire("showtab"),this.reflow()},renderHtml:function(){var e=this,t=e._layout,n="",r=e.classPrefix;return e.preRender(),t.preRender(e),e.items().each(function(t,i){var o=e._id+"-t"+i;t.aria("role","tabpanel"),t.aria("labelledby",o),n+='"}),'
    '+n+'
    '+t.renderHtml(e)+"
    "},postRender:function(){var e=this;e._super(),e.settings.activeTab=e.settings.activeTab||0,e.activateTab(e.settings.activeTab),this.on("click",function(t){var n=t.target.parentNode;if(t.target.parentNode.id==e._id+"-head")for(var r=n.childNodes.length;r--;)n.childNodes[r]==t.target&&e.activateTab(r)})},initLayoutRect:function(){var e=this,n,r,i;r=t.getSize(e.getEl("head")).width,r=0>r?0:r,i=0,e.items().each(function(t,n){r=Math.max(r,t.layoutRect().minW),i=Math.max(i,t.layoutRect().minH),e.settings.activeTab!=n&&t.hide()}),e.items().each(function(e){e.settings.x=0,e.settings.y=0,e.settings.w=r,e.settings.h=i,e.layoutRect({x:0,y:0,w:r,h:i})});var o=t.getSize(e.getEl("head")).height;return e.settings.minWidth=r,e.settings.minHeight=i+o,n=e._super(),n.deltaH+=o,n.innerH=n.h-n.deltaH,n}})}),r(Jt,[bt,V],function(e,t){return e.extend({init:function(e){var t=this;t._super(e),t._value=e.value||"",t.addClass("textbox"),e.multiline?t.addClass("multiline"):t.on("keydown",function(e){13==e.keyCode&&t.parents().reverse().each(function(t){return e.preventDefault(),t.hasEventListeners("submit")&&t.toJSON?(t.fire("submit",{data:t.toJSON()}),!1):void 0})})},disabled:function(e){var t=this;return t._rendered&&"undefined"!=typeof e&&(t.getEl().disabled=e),t._super(e)},value:function(e){var t=this;return"undefined"!=typeof e?(t._value=e,t._rendered&&(t.getEl().value=e),t):t._rendered?t.getEl().value:t._value},repaint:function(){var e=this,t,n,r,i=0,o=0,a;t=e.getEl().style,n=e._layoutRect,a=e._lastRepaintRect||{};var s=document;return!e.settings.multiline&&s.all&&(!s.documentMode||s.documentMode<=8)&&(t.lineHeight=n.h-o+"px"),r=e._borderBox,i=r.left+r.right+8,o=r.top+r.bottom+(e.settings.multiline?8:0),n.x!==a.x&&(t.left=n.x+"px",a.x=n.x),n.y!==a.y&&(t.top=n.y+"px",a.y=n.y),n.w!==a.w&&(t.width=n.w-i+"px",a.w=n.w),n.h!==a.h&&(t.height=n.h-o+"px",a.h=n.h),e._lastRepaintRect=a,e.fire("repaint",{},!1),e},renderHtml:function(){var e=this,t=e._id,n=e.settings,r=e.encode(e._value,!1),i="";return"spellcheck"in n&&(i+=' spellcheck="'+n.spellcheck+'"'),n.maxLength&&(i+=' maxlength="'+n.maxLength+'"'),n.size&&(i+=' size="'+n.size+'"'),n.subtype&&(i+=' type="'+n.subtype+'"'),e.disabled()&&(i+=' disabled="disabled"'),n.multiline?'":'"},postRender:function(){var e=this;return t.on(e.getEl(),"change",function(t){e.fire("change",t)}),e._super()},remove:function(){t.off(this.getEl()),this._super()}})}),r(Qt,[V],function(e){return function(t){var n=this,r;n.show=function(i){return n.hide(),r=!0,window.setTimeout(function(){r&&t.appendChild(e.createFragment('
    '))},i||0),n},n.hide=function(){var e=t.lastChild;return e&&-1!=e.className.indexOf("throbber")&&e.parentNode.removeChild(e),r=!1,n}}}),a([l,c,u,d,f,p,m,h,g,v,y,b,C,x,w,_,N,E,S,k,T,R,A,B,L,D,M,H,P,O,I,F,z,W,V,U,q,$,j,K,Y,G,X,J,Q,Z,et,tt,nt,rt,it,ot,at,st,lt,ct,ut,dt,ft,pt,mt,ht,gt,vt,yt,bt,Ct,xt,wt,_t,Nt,Et,St,kt,Tt,Rt,At,Bt,Lt,Dt,Mt,Ht,Pt,Ot,It,Ft,zt,Wt,Vt,Ut,qt,$t,jt,Kt,Yt,Gt,Xt,Jt,Qt])}(this); +;tinymce.ThemeManager.add("modern",function(e){function t(){function t(t){var n,o=[];if(t)return d(t.split(/[ ,]/),function(t){function i(){var i=e.selection;"bullist"==r&&i.selectorChanged("ul > li",function(e,i){for(var n,o=i.parents.length;o--&&(n=i.parents[o].nodeName,"OL"!=n&&"UL"!=n););t.active(e&&"UL"==n)}),"numlist"==r&&i.selectorChanged("ol > li",function(e,i){for(var n,o=i.parents.length;o--&&(n=i.parents[o].nodeName,"OL"!=n&&"UL"!=n););t.active(e&&"OL"==n)}),t.settings.stateSelector&&i.selectorChanged(t.settings.stateSelector,function(e){t.active(e)},!0),t.settings.disabledStateSelector&&i.selectorChanged(t.settings.disabledStateSelector,function(e){t.disabled(e)})}var r;"|"==t?n=null:c.has(t)?(t={type:t},u.toolbar_items_size&&(t.size=u.toolbar_items_size),o.push(t),n=null):(n||(n={type:"buttongroup",items:[]},o.push(n)),e.buttons[t]&&(r=t,t=e.buttons[r],"function"==typeof t&&(t=t()),t.type=t.type||"button",u.toolbar_items_size&&(t.size=u.toolbar_items_size),t=c.create(t),n.items.push(t),e.initialized?i():e.on("init",i)))}),i.push({type:"toolbar",layout:"flow",items:o}),!0}for(var i=[],n=1;10>n&&t(u["toolbar"+n]);n++);return i.length||t(u.toolbar||f),i}function i(){function t(t){var i;return"|"==t?{text:"|"}:i=e.menuItems[t]}function i(i){var n,o,r,a,s;if(s=tinymce.makeMap((u.removed_menuitems||"").split(/[ ,]/)),u.menu?(o=u.menu[i],a=!0):o=h[i],o){n={text:o.title},r=[],d((o.items||"").split(/[ ,]/),function(e){var i=t(e);i&&!s[e]&&r.push(t(e))}),a||d(e.menuItems,function(e){e.context==i&&("before"==e.separator&&r.push({text:"|"}),e.prependToContext?r.unshift(e):r.push(e),"after"==e.separator&&r.push({text:"|"}))});for(var l=0;l0&&/^[0-9]+$/.test(e)&&(e+="px"),e}if(e.settings.image_advtab){var n=s.toJSON(),i=m.parseStyle(n.style);delete i.margin,i["margin-top"]=i["margin-bottom"]=t(n.vspace),i["margin-left"]=i["margin-right"]=t(n.hspace),i["border-width"]=t(n.border),s.find("#style").value(m.serializeStyle(m.parseStyle(m.serializeStyle(i))))}}var s,d,u,h,g={},m=e.dom,p=e.selection.getNode();d=m.getAttrib(p,"width"),u=m.getAttrib(p,"height"),"IMG"!=p.nodeName||p.getAttribute("data-mce-object")||p.getAttribute("data-mce-placeholder")?p=null:g={src:m.getAttrib(p,"src"),alt:m.getAttrib(p,"alt"),width:d,height:u},n&&(h={type:"listbox",label:"Image list",values:i(),value:g.src&&e.convertURL(g.src,"src"),onselect:function(e){var t=s.find("#alt");(!t.value()||e.lastControl&&t.value()==e.lastControl.text())&&t.value(e.control.text()),s.find("#src").value(e.control.value())},onPostRender:function(){h=this}});var y=[{name:"src",type:"filepicker",filetype:"image",label:"Source",autofocus:!0,onchange:r},h,{name:"alt",type:"textbox",label:"Image description"},{type:"container",label:"Dimensions",layout:"flex",direction:"row",align:"center",spacing:5,items:[{name:"width",type:"textbox",maxLength:5,size:3,onchange:a},{type:"label",text:"x"},{name:"height",type:"textbox",maxLength:5,size:3,onchange:a},{name:"constrain",type:"checkbox",checked:!0,text:"Constrain proportions"}]}];e.fire('EditImage', g),e.settings.image_advtab?(p&&(g.hspace=l(p.style.marginLeft||p.style.marginRight),g.vspace=l(p.style.marginTop||p.style.marginBottom),g.border=l(p.style.borderWidth),g.style=e.dom.serializeStyle(e.dom.parseStyle(e.dom.getAttrib(p,"style")))),s=e.windowManager.open({title:"Insert/edit image",data:g,bodyType:"tabpanel",body:[{title:"General",type:"form",items:y},{title:"Advanced",type:"form",pack:"start",items:[{label:"Style",name:"style",type:"textbox"},{type:"form",layout:"grid",packV:"start",columns:2,padding:0,alignH:["left","right"],defaults:{type:"textbox",maxWidth:50,onchange:c},items:[{label:"Vertical space",name:"vspace"},{label:"Horizontal space",name:"hspace"},{label:"Border",name:"border"}]}]}],onSubmit:o})):s=e.windowManager.open({title:"Insert/edit image",data:g,body:y,onSubmit:o})}e.addButton("image",{icon:"image",tooltip:"Insert/edit image",onclick:n(i),stateSelector:"img:not([data-mce-object],[data-mce-placeholder])"}),e.addMenuItem("image",{icon:"image",text:"Insert image",onclick:n(i),context:"insert",prependToContext:!0})}); +;tinymce.PluginManager.add("link",function(e){function t(t){return function(){var n=e.settings.link_list;"string"==typeof n?tinymce.util.XHR.send({url:n,success:function(e){t(tinymce.util.JSON.parse(e))}}):t(n)}}function n(t){function n(e){var t=f.find("#text");(!t.value()||e.lastControl&&t.value()==e.lastControl.text())&&t.value(e.control.text()),f.find("#href").value(e.control.value())}function l(){var n=[{text:"None",value:""}];return tinymce.each(t,function(t){n.push({text:t.text||t.title,value:e.convertURL(t.value||t.url,"href"),menu:t.menu})}),n}function i(t){var n=[{text:"None",value:""}];return tinymce.each(e.settings.rel_list,function(e){n.push({text:e.text||e.title,value:e.value,selected:t===e.value})}),n}function r(t){var n=[];return e.settings.target_list||(n.push({text:"None",value:""}),n.push({text:"New window",value:"_blank"})),tinymce.each(e.settings.target_list,function(e){n.push({text:e.text||e.title,value:e.value,selected:t===e.value})}),n}function a(t){var l=[];return tinymce.each(e.dom.select("a:not([href])"),function(e){var n=e.name||e.id;n&&l.push({text:n,value:"#"+n,selected:-1!=t.indexOf("#"+n)})}),l.length?(l.unshift({text:"None",value:""}),{name:"anchor",type:"listbox",label:"Anchors",values:l,onselect:n}):void 0}function o(){h&&h.value(e.convertURL(this.value(),"href")),!c&&0===x.text.length&&k&&this.parent().parent().find("#text")[0].value(this.value())}var u,s,c,f,d,h,v,g,x={},m=e.selection,p=e.dom;u=m.getNode(),s=p.getParent(u,"a[href]");var k=!0;if(/=0;y--)if(3!=b[y].nodeType){k=!1;break}}x.text=c=s?s.innerText||s.textContent:m.getContent({format:"text"}),x.href=s?p.getAttrib(s,"href"):"",x.target=s?p.getAttrib(s,"target"):e.settings.default_link_target||"",x.rel=s?p.getAttrib(s,"rel"):"",e.fire('EditLink', x),k&&(d={name:"text",type:"textbox",size:40,label:"Text to display",onchange:function(){x.text=this.value()}}),t&&(h={type:"listbox",label:"Link list",values:l(),onselect:n,value:e.convertURL(x.href,"href"),onPostRender:function(){h=this}}),e.settings.target_list!==!1&&(g={name:"target",type:"listbox",label:"Target",values:r(x.target)}),e.settings.rel_list&&(v={name:"rel",type:"listbox",label:"Rel",values:i(x.rel)}),f=e.windowManager.open({title:"Insert link",data:x,body:[{name:"href",type:"filepicker",filetype:"file",size:40,autofocus:!0,label:"Url",onchange:o,onkeyup:o},d,a(x.href),h,v,g],onSubmit:function(t){function n(t,n){var l=e.selection.getRng();window.setTimeout(function(){e.windowManager.confirm(t,function(t){e.selection.setRng(l),n(t)})},0)}function l(){s?(e.focus(),k&&i.text!=c&&(s.innerText=i.text),p.setAttribs(s,{href:r,target:i.target?i.target:null,rel:i.rel?i.rel:null}),m.select(s),e.undoManager.add()):k?e.insertContent(p.createHTML("a",{href:r,target:i.target?i.target:null,rel:i.rel?i.rel:null},p.encode(i.text))):e.execCommand("mceInsertLink",!1,{href:r,target:i.target,rel:i.rel?i.rel:null})}var i=t.data;e.fire('SaveLink', i);var r=i.href;return r?r.indexOf("@")>0&&-1==r.indexOf("//")&&-1==r.indexOf("mailto:")?void n("The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",function(e){e&&(r="mailto:"+r),l()}):/^\s*www\./i.test(r)?void n("The URL you entered seems to be an external link. Do you want to add the required http:// prefix?",function(e){e&&(r="http://"+r),l()}):void l():void e.execCommand("unlink")}})}e.addButton("link",{icon:"link",tooltip:"Insert/edit link",shortcut:"Ctrl+K",onclick:t(n),stateSelector:"a[href]"}),e.addButton("unlink",{icon:"unlink",tooltip:"Remove link",cmd:"unlink",stateSelector:"a[href]"}),e.addShortcut("Ctrl+K","",t(n)),this.showDialog=n,e.addMenuItem("link",{icon:"link",text:"Insert link",shortcut:"Ctrl+K",onclick:t(n),stateSelector:"a[href]",context:"insert",prependToContext:!0})}); +;tinymce.PluginManager.requireLangPack("codemirror"),tinymce.PluginManager.add("codemirror",function(e,t){function n(){e.focus(),e.selection.collapse(!0),e.selection.setContent('');var n,o=tinyMCE.baseURL.indexOf("/static/");n=o>0?tinyMCE.baseURL.substring(0,o):window.location.origin;var i="?CodeMirrorPath="+e.settings.codemirror.path+"&ParentOrigin="+window.location.origin,a=e.windowManager.open({title:"HTML source code",url:t+"/source.html"+i,width:800,height:550,resizable:!0,maximizable:!0,buttons:[{text:"OK",subtype:"primary",onclick:function(){s({type:"save"})}},{text:"Cancel",onclick:function(){s({type:"cancel"})}}]}),c=a.getEl().getElementsByTagName("iframe")[0].contentWindow,s=function(e){c.postMessage(e,n)},r=function(t){if(n===t.origin){var o;if("init"===t.data.type)o={content:e.getContent({source_view:!0})},e.fire("ShowCodeEditor",o),s({type:"init",content:o.content}),e.dom.remove(e.dom.select(".CmCaReT"));else if("setText"===t.data.type){o={content:t.data.text};var i=t.data.isDirty;e.fire("SaveCodeEditor",o),e.setContent(o.content);var c=e.dom.select("span#CmCaReT")[0];if(c)e.selection.scrollIntoView(c),e.selection.setCursorLocation(c,0),e.dom.remove(c);else{var r=e.getContent(),d=r.replace('',"");r!==d&&e.setContent(d)}e.isNotDirty=!i,i&&e.nodeChanged()}else"closeWindow"===t.data.type&&a.close()}};a.on("close",function(){window.removeEventListener("message",r)}),window.addEventListener("message",r,!1)}e.addButton("code",{title:"Edit HTML",text:"HTML",icon:!1,onclick:n}),e.addMenuItem("code",{icon:"code",text:"Edit HTML",context:"tools",onclick:n})}); +;!function(e,t){"use strict";function n(e,t){for(var n,r=[],i=0;i"),t&&/^(PRE|DIV)$/.test(t.nodeName)||!o?e=n.filter(e,[[/\n/g,"
    "]]):(e=n.filter(e,[[/\n\n/g,"

    "+a],[/^(.*<\/p>)(

    )$/,a+"$1"],[/\n/g,"
    "]]),-1!=e.indexOf("

    ")&&(e=a+e)),i(e)}function a(){var t=r.dom,n=r.getBody(),i=r.dom.getViewPort(r.getWin()),o=i.y,a=20,s;if(v=r.selection.getRng(),r.inline&&(s=r.selection.getScrollContainer(),s&&(o=s.scrollTop)),v.getClientRects){var l=v.getClientRects();if(l.length)a=o+(l[0].top-t.getPos(n).y);else{a=o;var c=v.startContainer;c&&(3==c.nodeType&&c.parentNode!=n&&(c=c.parentNode),1==c.nodeType&&(a=t.getPos(c,s||n).y))}}g=t.add(r.getBody(),"div",{id:"mcepastebin",contentEditable:!0,"data-mce-bogus":"1",style:"position: absolute; top: "+a+"px;width: 10px; height: 10px; overflow: hidden; opacity: 0"},b),(e.ie||e.gecko)&&t.setStyle(g,"left","rtl"==t.getStyle(n,"direction",!0)?65535:-65535),t.bind(g,"beforedeactivate focusin focusout",function(e){e.stopPropagation()}),g.focus(),r.selection.select(g,!0)}function s(){if(g){for(var e;e=r.dom.get("mcepastebin");)r.dom.remove(e),r.dom.unbind(e);v&&r.selection.setRng(v)}C=!1,g=v=null}function l(){var e=b,t,n;for(t=r.dom.select("div[id=mcepastebin]"),n=t.length;n--;){var i=t[n].innerHTML;e==b&&(e=""),i.length>e.length&&(e=i)}return e}function c(e){var t={};if(e&&e.types){var n=e.getData("Text");n&&n.length>0&&(t["text/plain"]=n);for(var r=0;r')},t.readAsDataURL(e.getAsFile()),!0}}if(!(!r.settings.paste_data_images||"text/html"in t||"text/plain"in t)&&e.clipboardData){var o=e.clipboardData.items;if(o)for(var a=0;a0}function m(){r.on("keydown",function(n){if(!n.isDefaultPrevented()&&(t.metaKeyPressed(n)&&86==n.keyCode||n.shiftKey&&45==n.keyCode)){if(C=n.shiftKey&&86==n.keyCode,n.stopImmediatePropagation(),y=(new Date).getTime(),e.ie&&C)return n.preventDefault(),void r.fire("paste",{ieFake:!0});s(),a()}}),r.on("paste",function(t){var c=d(t),f=(new Date).getTime()-y<1e3,m="text"==h.pasteFormat||C;return t.isDefaultPrevented()?void s():u(t,c)?void s():(f||t.preventDefault(),!e.ie||f&&!t.ieFake||(a(),r.dom.bind(g,"paste",function(e){e.stopPropagation()}),r.getDoc().execCommand("Paste",!1,null),c["text/html"]=l()),void setTimeout(function(){var e=l();return g&&g.firstChild&&"mcepastebin"===g.firstChild.id&&(m=!0),s(),e!=b&&f||(e=c["text/html"]||c["text/plain"]||b,e!=b)?(!p(c,"text/html")&&p(c,"text/plain")&&(m=!0),void(m?o(c["text/plain"]||n.innerText(e)):i(e))):void(f||r.windowManager.alert("Please use Ctrl+V/Cmd+V keyboard shortcuts to paste contents."))},0))}),r.on("dragstart",function(e){if(e.dataTransfer.types)try{e.dataTransfer.setData("mce-internal",r.selection.getContent())}catch(t){}}),r.on("drop",function(e){var t=f(e);if(t&&!e.isDefaultPrevented()){var n=c(e.dataTransfer),a=n["mce-internal"]||n["text/html"]||n["text/plain"];a&&(e.preventDefault(),r.undoManager.transact(function(){n["mce-internal"]&&r.execCommand("Delete"),r.selection.setRng(t),n["text/html"]?i(a):o(a)}))}})}var h=this,g,v,y=0,b="%MCEPASTEBIN%",C;h.pasteHtml=i,h.pasteText=o,r.on("preInit",function(){m(),r.parser.addNodeFilter("img",function(t){if(!r.settings.paste_data_images)for(var n=t.length;n--;){var i=t[n].attributes.map.src;i&&0===i.indexOf("data:image")&&(t[n].attr("data-mce-object")||i===e.transparentSrc||t[n].remove())}})}),r.on("PreProcess",function(){r.dom.remove(r.dom.get("mcepastebin"))})}}),r(h,[c,d,u,g,v,l],function(e,t,n,r,i,o){function a(e){return/l?n&&(n=n.parent.parent):(r=n,n=null)),n&&n.name==a?n.append(e):(r=r||n,n=new i(a,1),s>1&&n.attr("start",""+s),e.wrap(n)),e.name="li",t.value="";var c=t.next;c&&3==c.type&&(c.value=c.value.replace(/^\u00a0+/,"")),l>o&&r&&r.lastChild.append(n),o=l}for(var n,r,o=1,a=e.getAll("p"),s=0;s/gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/ /gi,"\xa0"],[/([\s\u00a0]*)<\/span>/gi,function(e,t){return t.length>0?t.replace(/./," ").slice(Math.floor(t.length/2)).split("").join("\xa0"):""}]]);var h=l.paste_word_valid_elements;h||(h="@[style],-strong/b,-em/i,-span,-p,-ol,-ul,-li,-h1,-h2,-h3,-h4,-h5,-h6,-table[width],-tr,-td[colspan|rowspan|width],-th,-thead,-tfoot,-tbody,-a[href|name],sub,sup,strike,br");var g=new n({valid_elements:h}),v=new t({},g);v.addAttributeFilter("style",function(e){for(var t=e.length,n;t--;)n=e[t],n.attr("style",u(n,n.attr("style"))),"span"!=n.name||n.attributes.length||n.unwrap()}),v.addNodeFilter("a",function(e){for(var t=e.length,n,r,i;t--;)n=e[t],r=n.attr("href"),i=n.attr("name"),r&&0===r.indexOf("file://")&&(r=r.split("#")[1],r&&(r="#"+r)),r||i?n.attr({href:r,name:i}):n.unwrap()});var y=v.parse(f);d(y),c.content=new r({},g).serialize(y)}})}return s.isWordContent=a,s}),r(y,[p,c,h,l],function(e,t,n,r){return function(i){function o(e){i.on("BeforePastePreProcess",function(t){t.content=e(t.content)})}function a(e){return e=r.filter(e,[/^[\s\S]*|[\s\S]*$/g,[/\u00a0<\/span>/g,"\xa0"],/
    $/i])}function s(e){if(!n.isWordContent(e))return e;var o=[];t.each(i.schema.getBlockElements(),function(e,t){o.push(t)});var a=new RegExp("(?:
     [\\s\\r\\n]+|
    )*(<\\/?("+o.join("|")+")[^>]*>)(?:
     [\\s\\r\\n]+|
    )*","g");return e=r.filter(e,[[a,"$1"]]),e=r.filter(e,[[/

    /g,"

    "],[/
    /g," "],[/

    /g,"
    "]])}function l(e){return(i.settings.paste_remove_styles||i.settings.paste_remove_styles_if_webkit!==!1)&&(e=e.replace(/ style=\"[^\"]+\"/g,"")),e}e.webkit&&(o(l),o(a)),e.ie&&o(s)}}),r(b,[C,f,h,y],function(e,t,n,r){var i;e.add("paste",function(e){function o(){"text"==s.pasteFormat?(this.active(!1),s.pasteFormat="html"):(s.pasteFormat="text",this.active(!0),i||(e.windowManager.alert("Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off."),i=!0))}var a=this,s,l=e.settings;a.clipboard=s=new t(e),a.quirks=new r(e),a.wordFilter=new n(e),e.settings.paste_as_text&&(a.clipboard.pasteFormat="text"),l.paste_preprocess&&e.on("PastePreProcess",function(e){l.paste_preprocess.call(a,a,e)}),l.paste_postprocess&&e.on("PastePostProcess",function(e){l.paste_postprocess.call(a,a,e)}),e.addCommand("mceInsertClipboardContent",function(e,t){t.content&&a.clipboard.pasteHtml(t.content),t.text&&a.clipboard.pasteText(t.text)}),e.paste_block_drop&&e.on("dragend dragover draggesture dragdrop drop drag",function(e){e.preventDefault(),e.stopPropagation()}),e.settings.paste_data_images||e.on("drop",function(e){var t=e.dataTransfer;t&&t.files&&t.files.length>0&&e.preventDefault()}),e.addButton("pastetext",{icon:"pastetext",tooltip:"Paste as text",onclick:o,active:"text"==a.clipboard.pasteFormat}),e.addMenuItem("pastetext",{text:"Paste as text",selectable:!0,active:s.pasteFormat,onclick:o})})}),a([l,f,h,y,b])}(this); +;!function(e,t){"use strict";function n(e,t){for(var n,r=[],i=0;i "+t+" tr",a);i(n,function(n,o){o+=e,i(M.select("> td, > th",n),function(e,n){var i,a,s,l;if(A[o])for(;A[o][n];)n++;for(s=r(e,"rowspan"),l=r(e,"colspan"),a=o;o+s>a;a++)for(A[a]||(A[a]=[]),i=n;n+l>i;i++)A[a][i]={part:t,real:a==o&&i==n,elm:e,rowspan:s,colspan:l}})}),e+=n.length})}function l(e,t){return e=e.cloneNode(t),e.removeAttribute("id"),e}function c(e,t){var n;return n=A[t],n?n[e]:void 0}function d(e,t,n){e&&(n=parseInt(n,10),1===n?e.removeAttribute(t,1):e.setAttribute(t,n,1))}function u(e){return e&&(M.hasClass(e.elm,"mce-item-selected")||e==D)}function f(){var e=[];return i(a.rows,function(t){i(t.cells,function(n){return M.hasClass(n,"mce-item-selected")||D&&n==D.elm?(e.push(t),!1):void 0})}),e}function p(){var e=M.createRng();e.setStartAfter(a),e.setEndAfter(a),L.setRng(e),M.remove(a)}function m(t){var r,a={};return o.settings.table_clone_elements!==!1&&(a=e.makeMap((o.settings.table_clone_elements||"strong em b i span font h1 h2 h3 h4 h5 h6 p div").toUpperCase(),/[ ,]/)),e.walk(t,function(e){var o;return 3==e.nodeType?(i(M.getParents(e.parentNode,null,t).reverse(),function(e){a[e.nodeName]&&(e=l(e,!1),r?o&&o.appendChild(e):r=o=e,o=e)}),o&&(o.innerHTML=n.ie?" ":'
    '),!1):void 0},"childNodes"),t=l(t,!1),d(t,"rowSpan",1),d(t,"colSpan",1),r?t.appendChild(r):n.ie||(t.innerHTML='
    '),t}function h(){var e=M.createRng(),t;return i(M.select("tr",a),function(e){0===e.cells.length&&M.remove(e)}),0===M.select("tr",a).length?(e.setStartBefore(a),e.setEndBefore(a),L.setRng(e),void M.remove(a)):(i(M.select("thead,tbody,tfoot",a),function(e){0===e.rows.length&&M.remove(e)}),s(),void(B&&(t=A[Math.min(A.length-1,B.y)],t&&(L.select(t[Math.min(t.length-1,B.x)].elm,!0),L.collapse(!0)))))}function g(e,t,n,r){var i,o,a,s,l;for(i=A[t][e].elm.parentNode,a=1;n>=a;a++)if(i=M.getNext(i,"tr")){for(o=e;o>=0;o--)if(l=A[t+a][o].elm,l.parentNode==i){for(s=1;r>=s;s++)M.insertAfter(m(l),l);break}if(-1==o)for(s=1;r>=s;s++)i.insertBefore(m(i.cells[0]),i.cells[0])}}function v(){i(A,function(e,t){i(e,function(e,n){var i,o,a;if(u(e)&&(e=e.elm,i=r(e,"colspan"),o=r(e,"rowspan"),i>1||o>1)){for(d(e,"rowSpan",1),d(e,"colSpan",1),a=0;i-1>a;a++)M.insertAfter(m(e),e);g(n,t,o-1,i)}})})}function y(t,n,r){var o,a,l,f,p,m,g,y,b,C,x;if(t?(o=k(t),a=o.x,l=o.y,f=a+(n-1),p=l+(r-1)):(B=P=null,i(A,function(e,t){i(e,function(e,n){u(e)&&(B||(B={x:n,y:t}),P={x:n,y:t})})}),B&&(a=B.x,l=B.y,f=P.x,p=P.y)),y=c(a,l),b=c(f,p),y&&b&&y.part==b.part){for(v(),s(),y=c(a,l).elm,d(y,"colSpan",f-a+1),d(y,"rowSpan",p-l+1),g=l;p>=g;g++)for(m=a;f>=m;m++)A[g]&&A[g][m]&&(t=A[g][m].elm,t!=y&&(C=e.grep(t.childNodes),i(C,function(e){y.appendChild(e)}),C.length&&(C=e.grep(y.childNodes),x=0,i(C,function(e){"BR"==e.nodeName&&M.getAttrib(e,"data-mce-bogus")&&x++0&&A[n-1][s]&&(h=A[n-1][s].elm,g=r(h,"rowSpan"),g>1)){d(h,"rowSpan",g+1);continue}}else if(g=r(o,"rowspan"),g>1){d(o,"rowSpan",g+1);continue}p=m(o),d(p,"colSpan",o.colSpan),f.appendChild(p),a=o}f.hasChildNodes()&&(e?c.parentNode.insertBefore(f,c):M.insertAfter(f,c))}}function C(e){var t,n;i(A,function(n){return i(n,function(n,r){return u(n)&&(t=r,e)?!1:void 0}),e?!t:void 0}),i(A,function(i,o){var a,s,l;i[t]&&(a=i[t].elm,a!=n&&(l=r(a,"colspan"),s=r(a,"rowspan"),1==l?e?(a.parentNode.insertBefore(m(a),a),g(t,o,s-1,l)):(M.insertAfter(m(a),a),g(t,o,s-1,l)):d(a,"colSpan",a.colSpan+1),n=a))})}function x(){var t=[];i(A,function(n){i(n,function(n,o){u(n)&&-1===e.inArray(t,o)&&(i(A,function(e){var t=e[o].elm,n;n=r(t,"colSpan"),n>1?d(t,"colSpan",n-1):M.remove(t)}),t.push(o))})}),h()}function w(){function e(e){var t,n,o;t=M.getNext(e,"tr"),i(e.cells,function(e){var t=r(e,"rowSpan");t>1&&(d(e,"rowSpan",t-1),n=k(e),g(n.x,n.y,1,1))}),n=k(e.cells[0]),i(A[n.y],function(e){var t;e=e.elm,e!=o&&(t=r(e,"rowSpan"),1>=t?M.remove(e):d(e,"rowSpan",t-1),o=e)})}var t;t=f(),i(t.reverse(),function(t){e(t)}),h()}function _(){var e=f();return M.remove(e),h(),e}function N(){var e=f();return i(e,function(t,n){e[n]=l(t,!0)}),e}function E(e,t){var n=f(),r=n[t?0:n.length-1],o=r.cells.length;e&&(i(A,function(e){var t;return o=0,i(e,function(e){e.real&&(o+=e.colspan),e.elm.parentNode==r&&(t=1)}),t?!1:void 0}),t||e.reverse(),i(e,function(e){var n,i=e.cells.length,a;for(n=0;i>n;n++)a=e.cells[n],d(a,"colSpan",1),d(a,"rowSpan",1);for(n=i;o>n;n++)e.appendChild(m(e.cells[i-1]));for(n=o;i>n;n++)M.remove(e.cells[n]);t?r.parentNode.insertBefore(e,r):M.insertAfter(e,r)}),M.removeClass(M.select("td.mce-item-selected,th.mce-item-selected"),"mce-item-selected"))}function k(e){var t;return i(A,function(n,r){return i(n,function(n,i){return n.elm==e?(t={x:i,y:r},!1):void 0}),!t}),t}function S(e){B=k(e)}function T(){var e,t;return e=t=0,i(A,function(n,r){i(n,function(n,i){var o,a;u(n)&&(n=A[r][i],i>e&&(e=i),r>t&&(t=r),n.real&&(o=n.colspan-1,a=n.rowspan-1,o&&i+o>e&&(e=i+o),a&&r+a>t&&(t=r+a)))})}),{x:e,y:t}}function R(e){var t,n,r,i,o,a,s,l,c,d;if(P=k(e),B&&P){for(t=Math.min(B.x,P.x),n=Math.min(B.y,P.y),r=Math.max(B.x,P.x),i=Math.max(B.y,P.y),o=r,a=i,d=n;a>=d;d++)e=A[d][t],e.real||t-(e.colspan-1)=c;c++)e=A[n][c],e.real||n-(e.rowspan-1)=d;d++)for(c=t;r>=c;c++)e=A[d][c],e.real&&(s=e.colspan-1,l=e.rowspan-1,s&&c+s>o&&(o=c+s),l&&d+l>a&&(a=d+l));for(M.removeClass(M.select("td.mce-item-selected,th.mce-item-selected"),"mce-item-selected"),d=n;a>=d;d++)for(c=t;o>=c;c++)A[d][c]&&M.addClass(A[d][c].elm,"mce-item-selected")}}var A,B,P,D,L=o.selection,M=L.dom;a=a||M.getParent(L.getStart(),"table"),s(),D=M.getParent(L.getStart(),"th,td"),D&&(B=k(D),P=T(),D=c(B.x,B.y)),e.extend(this,{deleteTable:p,split:v,merge:y,insertRow:b,insertCol:C,deleteCols:x,deleteRows:w,cutRows:_,copyRows:N,pasteRows:E,getPos:k,setStartCell:S,setEndCell:R})}}),r(u,[f,d,c],function(e,t,n){function r(e,t){return parseInt(e.getAttribute(t)||1,10)}var i=n.each;return function(n){function o(){function t(t){function o(e,r){var i=e?"previousSibling":"nextSibling",o=n.dom.getParent(r,"tr"),s=o[i];if(s)return g(n,r,s,e),t.preventDefault(),!0;var d=n.dom.getParent(o,"table"),u=o.parentNode,f=u.nodeName.toLowerCase();if("tbody"===f||f===(e?"tfoot":"thead")){var p=a(e,d,u,"tbody");if(null!==p)return l(e,p,r)}return c(e,o,i,d)}function a(e,t,r,i){var o=n.dom.select(">"+i,t),a=o.indexOf(r);if(e&&0===a||!e&&a===o.length-1)return s(e,t);if(-1===a){var l="thead"===r.tagName.toLowerCase()?0:o.length-1;return o[l]}return o[a+(e?-1:1)]}function s(e,t){var r=e?"thead":"tfoot",i=n.dom.select(">"+r,t);return 0!==i.length?i[0]:null}function l(e,r,i){var o=d(r,e);return o&&g(n,i,o,e),t.preventDefault(),!0}function c(e,r,i,a){var s=a[i];if(s)return u(s),!0;var l=n.dom.getParent(a,"td,th");if(l)return o(e,l,t);var c=d(r,!e);return u(c),t.preventDefault(),!1}function d(e,t){var r=e&&e[t?"lastChild":"firstChild"];return r&&"BR"===r.nodeName?n.dom.getParent(r,"td,th"):r}function u(e){n.selection.setCursorLocation(e,0)}function f(){return b==e.UP||b==e.DOWN}function p(e){var t=e.selection.getNode(),n=e.dom.getParent(t,"tr");return null!==n}function m(e){for(var t=0,n=e;n.previousSibling;)n=n.previousSibling,t+=r(n,"colspan");return t}function h(e,t){var n=0,o=0;return i(e.children,function(e,i){return n+=r(e,"colspan"),o=i,n>t?!1:void 0}),o}function g(e,t,r,i){var o=m(n.dom.getParent(t,"td,th")),a=h(r,o),s=r.childNodes[a],l=d(s,i);u(l||s)}function v(e){var t=n.selection.getNode(),r=n.dom.getParent(t,"td,th"),i=n.dom.getParent(e,"td,th");return r&&r!==i&&y(r,i)}function y(e,t){return n.dom.getParent(e,"TABLE")===n.dom.getParent(t,"TABLE")}var b=t.keyCode;if(f()&&p(n)){var C=n.selection.getNode();setTimeout(function(){v(C)&&o(!t.shiftKey&&b===e.UP,C,t)},0)}}n.on("KeyDown",function(e){t(e)})}function a(){function e(e,t){var n=t.ownerDocument,r=n.createRange(),i;return r.setStartBefore(t),r.setEnd(e.endContainer,e.endOffset),i=n.createElement("body"),i.appendChild(r.cloneContents()),0===i.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi,"-").replace(/<[^>]+>/g,"").length}n.on("KeyDown",function(t){var r,i,o=n.dom;(37==t.keyCode||38==t.keyCode)&&(r=n.selection.getRng(),i=o.getParent(r.startContainer,"table"),i&&n.getBody().firstChild==i&&e(r,i)&&(r=o.createRng(),r.setStartBefore(i),r.setEndBefore(i),n.selection.setRng(r),t.preventDefault()))})}function s(){n.on("KeyDown SetContent VisualAid",function(){var e;for(e=n.getBody().lastChild;e;e=e.previousSibling)if(3==e.nodeType){if(e.nodeValue.length>0)break}else if(1==e.nodeType&&!e.getAttribute("data-mce-bogus"))break;e&&"TABLE"==e.nodeName&&(n.settings.forced_root_block?n.dom.add(n.getBody(),n.settings.forced_root_block,n.settings.forced_root_block_attrs,t.ie&&t.ie<11?" ":'
    '):n.dom.add(n.getBody(),"br",{"data-mce-bogus":"1"}))}),n.on("PreProcess",function(e){var t=e.node.lastChild;t&&("BR"==t.nodeName||1==t.childNodes.length&&("BR"==t.firstChild.nodeName||"\xa0"==t.firstChild.nodeValue))&&t.previousSibling&&"TABLE"==t.previousSibling.nodeName&&n.dom.remove(t)})}function l(){function e(e,t,n,r){var i=3,o=e.dom.getParent(t.startContainer,"TABLE"),a,s,l;return o&&(a=o.parentNode),s=t.startContainer.nodeType==i&&0===t.startOffset&&0===t.endOffset&&r&&("TR"==n.nodeName||n==a),l=("TD"==n.nodeName||"TH"==n.nodeName)&&!r,s||l}function t(){var t=n.selection.getRng(),r=n.selection.getNode(),i=n.dom.getParent(t.startContainer,"TD,TH");if(e(n,t,r,i)){i||(i=r);for(var o=i.lastChild;o.lastChild;)o=o.lastChild;t.setEnd(o,o.nodeValue.length),n.selection.setRng(t)}}n.on("KeyDown",function(){t()}),n.on("MouseDown",function(e){2!=e.button&&t()})}function c(){n.on("keydown",function(t){if((t.keyCode==e.DELETE||t.keyCode==e.BACKSPACE)&&!t.isDefaultPrevented()){var r=n.dom.getParent(n.selection.getStart(),"table");if(r){for(var i=n.dom.select("td,th",r),o=i.length;o--;)if(!n.dom.hasClass(i[o],"mce-item-selected"))return;t.preventDefault(),n.execCommand("mceTableDelete")}}})}c(),t.webkit&&(o(),l()),t.gecko&&(a(),s()),t.ie>10&&(a(),s())}}),r(p,[l,m,c],function(e,t,n){return function(r){function i(){r.getBody().style.webkitUserSelect="",d&&(r.dom.removeClass(r.dom.select("td.mce-item-selected,th.mce-item-selected"),"mce-item-selected"),d=!1)}function o(t){var n,i,o=t.target;if(l&&(s||o!=l)&&("TD"==o.nodeName||"TH"==o.nodeName)){i=a.getParent(o,"table"),i==c&&(s||(s=new e(r,i),s.setStartCell(l),r.getBody().style.webkitUserSelect="none"),s.setEndCell(o),d=!0),n=r.selection.getSel();try{n.removeAllRanges?n.removeAllRanges():n.empty()}catch(u){}t.preventDefault()}}var a=r.dom,s,l,c,d=!0;return r.on("MouseDown",function(e){2!=e.button&&(i(),l=a.getParent(e.target,"td,th"),c=a.getParent(l,"table"))}),r.on("mouseover",o),r.on("remove",function(){a.unbind(r.getDoc(),"mouseover",o)}),r.on("MouseUp",function(){function e(e,r){var o=new t(e,e);do{if(3==e.nodeType&&0!==n.trim(e.nodeValue).length)return void(r?i.setStart(e,0):i.setEnd(e,e.nodeValue.length));if("BR"==e.nodeName)return void(r?i.setStartBefore(e):i.setEndBefore(e))}while(e=r?o.next():o.prev())}var i,o=r.selection,d,u,f,p,m;if(l){if(s&&(r.getBody().style.webkitUserSelect=""),d=a.select("td.mce-item-selected,th.mce-item-selected"),d.length>0){i=a.createRng(),f=d[0],m=d[d.length-1],i.setStartBefore(f),i.setEndAfter(f),e(f,1),u=new t(f,a.getParent(d[0],"table"));do if("TD"==f.nodeName||"TH"==f.nodeName){if(!a.hasClass(f,"mce-item-selected"))break;p=f}while(f=u.next());e(p),o.setRng(i)}r.nodeChanged(),l=s=c=null}}),r.on("KeyUp",function(){i()}),{clear:i}}}),r(h,[l,u,p,c,m,d,g],function(e,t,n,r,i,o,a){function s(r){function i(e){return e?e.replace(/px$/,""):""}function a(e){return/^[0-9]+$/.test(e)&&(e+="px"),e}function s(e){l("left center right".split(" "),function(t){r.formatter.remove("align"+t,{},e)})}function c(){var e=r.dom,t,n;t=e.getParent(r.selection.getStart(),"table"),n={width:i(e.getStyle(t,"width")||e.getAttrib(t,"width")),height:i(e.getStyle(t,"height")||e.getAttrib(t,"height")),cellspacing:e.getAttrib(t,"cellspacing"),cellpadding:e.getAttrib(t,"cellpadding"),border:e.getAttrib(t,"border"),caption:!!e.select("caption",t)[0]},l("left center right".split(" "),function(e){r.formatter.matchNode(t,"align"+e)&&(n.align=e)}),r.windowManager.open({title:"Table properties",items:{type:"form",layout:"grid",columns:2,data:n,defaults:{type:"textbox",maxWidth:50},items:[{label:"Width",name:"width"},{label:"Height",name:"height"},{label:"Cell spacing",name:"cellspacing"},{label:"Cell padding",name:"cellpadding"},{label:"Border",name:"border"},{label:"Caption",name:"caption",type:"checkbox"},{label:"Alignment",minWidth:90,name:"align",type:"listbox",text:"None",maxWidth:null,values:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]}]},onsubmit:function(){var n=this.toJSON(),i;r.undoManager.transact(function(){r.dom.setAttribs(t,{cellspacing:n.cellspacing,cellpadding:n.cellpadding,border:n.border}),r.dom.setStyles(t,{width:a(n.width),height:a(n.height)}),i=e.select("caption",t)[0],i&&!n.caption&&e.remove(i),!i&&n.caption&&(i=e.create("caption"),i.innerHTML=o.ie?"\xa0":'
    ',t.insertBefore(i,t.firstChild)),s(t),n.align&&r.formatter.apply("align"+n.align,{},t),r.focus(),r.addVisual()})}})}function d(e,t){r.windowManager.open({title:"Merge cells",body:[{label:"Cols",name:"cols",type:"textbox",size:10},{label:"Rows",name:"rows",type:"textbox",size:10}],onsubmit:function(){var n=this.toJSON();r.undoManager.transact(function(){e.merge(t,n.cols,n.rows)})}})}function u(){var e=r.dom,t,n,o=[];o=r.dom.select("td.mce-item-selected,th.mce-item-selected"),t=r.dom.getParent(r.selection.getStart(),"td,th"),!o.length&&t&&o.push(t),t=t||o[0],t&&(n={width:i(e.getStyle(t,"width")||e.getAttrib(t,"width")),height:i(e.getStyle(t,"height")||e.getAttrib(t,"height")),scope:e.getAttrib(t,"scope")},n.type=t.nodeName.toLowerCase(),l("left center right".split(" "),function(e){r.formatter.matchNode(t,"align"+e)&&(n.align=e)}),r.windowManager.open({title:"Cell properties",items:{type:"form",data:n,layout:"grid",columns:2,defaults:{type:"textbox",maxWidth:50},items:[{label:"Width",name:"width"},{label:"Height",name:"height"},{label:"Cell type",name:"type",type:"listbox",text:"None",minWidth:90,maxWidth:null,values:[{text:"Cell",value:"td"},{text:"Header cell",value:"th"}]},{label:"Scope",name:"scope",type:"listbox",text:"None",minWidth:90,maxWidth:null,values:[{text:"None",value:""},{text:"Row",value:"row"},{text:"Column",value:"col"},{text:"Row group",value:"rowgroup"},{text:"Column group",value:"colgroup"}]},{label:"Alignment",name:"align",type:"listbox",text:"None",minWidth:90,maxWidth:null,values:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]}]},onsubmit:function(){var t=this.toJSON();r.undoManager.transact(function(){l(o,function(n){r.dom.setAttrib(n,"scope",t.scope),r.dom.setStyles(n,{width:a(t.width),height:a(t.height)}),t.type&&n.nodeName.toLowerCase()!=t.type&&(n=e.rename(n,t.type)),s(n),t.align&&r.formatter.apply("align"+t.align,{},n)}),r.focus()})}}))}function f(){var e=r.dom,t,n,o,c,d=[];t=r.dom.getParent(r.selection.getStart(),"table"),n=r.dom.getParent(r.selection.getStart(),"td,th"),l(t.rows,function(t){l(t.cells,function(r){return e.hasClass(r,"mce-item-selected")||r==n?(d.push(t),!1):void 0})}),o=d[0],o&&(c={height:i(e.getStyle(o,"height")||e.getAttrib(o,"height")),scope:e.getAttrib(o,"scope")},c.type=o.parentNode.nodeName.toLowerCase(),l("left center right".split(" "),function(e){r.formatter.matchNode(o,"align"+e)&&(c.align=e)}),r.windowManager.open({title:"Row properties",items:{type:"form",data:c,columns:2,defaults:{type:"textbox"},items:[{type:"listbox",name:"type",label:"Row type",text:"None",maxWidth:null,values:[{text:"Header",value:"thead"},{text:"Body",value:"tbody"},{text:"Footer",value:"tfoot"}]},{type:"listbox",name:"align",label:"Alignment",text:"None",maxWidth:null,values:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]},{label:"Height",name:"height"}]},onsubmit:function(){var t=this.toJSON(),n,i,o;r.undoManager.transact(function(){var c=t.type;l(d,function(l){r.dom.setAttrib(l,"scope",t.scope),r.dom.setStyles(l,{height:a(t.height)}),c!=l.parentNode.nodeName.toLowerCase()&&(n=e.getParent(l,"table"),i=l.parentNode,o=e.select(c,n)[0],o||(o=e.create(c),n.firstChild?n.insertBefore(o,n.firstChild):n.appendChild(o)),o.appendChild(l),i.hasChildNodes()||e.remove(i)),s(l),t.align&&r.formatter.apply("align"+t.align,{},l)}),r.focus()})}}))}function p(e){return function(){r.execCommand(e)}}function m(e,t){var n,i,a;for(a="",n=0;t>n;n++){for(a+="",i=0;e>i;i++)a+="";a+=""}a+="
    "+(o.ie?" ":"
    ")+"
    ",r.insertContent(a)}function h(e,t){function n(){e.disabled(!r.dom.getParent(r.selection.getStart(),t)),r.selection.selectorChanged(t,function(t){e.disabled(!t)})}r.initialized?n():r.on("init",n)}function g(){h(this,"table")}function v(){h(this,"td,th")}function y(){var e="";e='';for(var t=0;10>t;t++){e+="";for(var n=0;10>n;n++)e+='";e+=""}return e+="
    ",e+='

    '}function b(e,t,n){var i=n.getEl().getElementsByTagName("table")[0],o=n.parent().rel,a,s,l,c;if(n.isRtl()||"tl-tr"==o){for(s=9;s>=0;s--)for(a=0;10>a;a++)c=i.rows[s].childNodes[a].firstChild,r.dom.toggleClass(c,"mce-active",a>=e&&t>=s),a>=e&&t>=s&&(l=c);e=9-e,i.nextSibling.innerHTML=e+" x "+(t+1)}else{for(s=0;10>s;s++)for(a=0;10>a;a++)c=i.rows[s].childNodes[a].firstChild,r.dom.toggleClass(c,"mce-active",e>=a&&t>=s),e>=a&&t>=s&&(l=c);i.nextSibling.innerHTML=e+1+" x "+(t+1)}return l.parentNode}var C,x,w=this;r.addMenuItem("inserttable",{text:"Insert table",icon:"table",context:"table",onhide:function(){var e=this.menu.items()[0].getEl().getElementsByTagName("a");r.dom.removeClass(e,"mce-active"),r.dom.addClass(e[0],"mce-active")},menu:[{type:"container",html:y(),onPostRender:function(){this.lastX=this.lastY=0},onmousemove:function(e){var t=e.target,n,r;"A"==t.nodeName&&(n=parseInt(t.getAttribute("data-mce-x"),10),r=parseInt(t.getAttribute("data-mce-y"),10),(n!==this.lastX||r!==this.lastY)&&(b(n,r,e.control),this.lastX=n,this.lastY=r))},onkeydown:function(e){var t=this.lastX,n=this.lastY,r;switch(e.keyCode){case 37:t>0&&(t--,r=!0);break;case 39:r=!0,9>t&&t++;break;case 38:r=!0,n>0&&n--;break;case 40:r=!0,9>n&&n++}r&&(e.preventDefault(),e.stopPropagation(),b(t,n,e.control).focus(),this.lastX=t,this.lastY=n)},onclick:function(e){"A"==e.target.nodeName&&(e.preventDefault(),e.stopPropagation(),this.parent().cancel(),m(this.lastX+1,this.lastY+1))}}]}),r.addMenuItem("tableprops",{text:"Table properties",context:"table",onPostRender:g,onclick:c}),r.addMenuItem("deletetable",{text:"Delete table",context:"table",onPostRender:g,cmd:"mceTableDelete"}),r.addMenuItem("cell",{separator:"before",text:"Cell",context:"table",menu:[{text:"Cell properties",onclick:p("mceTableCellProps"),onPostRender:v},{text:"Merge cells",onclick:p("mceTableMergeCells"),onPostRender:v},{text:"Split cell",onclick:p("mceTableSplitCells"),onPostRender:v}]}),r.addMenuItem("row",{text:"Row",context:"table",menu:[{text:"Insert row before",onclick:p("mceTableInsertRowBefore"),onPostRender:v},{text:"Insert row after",onclick:p("mceTableInsertRowAfter"),onPostRender:v},{text:"Delete row",onclick:p("mceTableDeleteRow"),onPostRender:v},{text:"Row properties",onclick:p("mceTableRowProps"),onPostRender:v},{text:"-"},{text:"Cut row",onclick:p("mceTableCutRow"),onPostRender:v},{text:"Copy row",onclick:p("mceTableCopyRow"),onPostRender:v},{text:"Paste row before",onclick:p("mceTablePasteRowBefore"),onPostRender:v},{text:"Paste row after",onclick:p("mceTablePasteRowAfter"),onPostRender:v}]}),r.addMenuItem("column",{text:"Column",context:"table",menu:[{text:"Insert column before",onclick:p("mceTableInsertColBefore"),onPostRender:v},{text:"Insert column after",onclick:p("mceTableInsertColAfter"),onPostRender:v},{text:"Delete column",onclick:p("mceTableDeleteCol"),onPostRender:v}]});var _=[];l("inserttable tableprops deletetable | cell row column".split(" "),function(e){_.push("|"==e?{text:"-"}:r.menuItems[e])}),r.addButton("table",{type:"menubutton",title:"Table",menu:_}),o.isIE||r.on("click",function(e){e=e.target,"TABLE"===e.nodeName&&(r.selection.select(e),r.nodeChanged())}),w.quirks=new t(r),r.on("Init",function(){C=r.windowManager,w.cellSelection=new n(r)}),l({mceTableSplitCells:function(e){e.split()},mceTableMergeCells:function(e){var t,n,i;i=r.dom.getParent(r.selection.getStart(),"th,td"),i&&(t=i.rowSpan,n=i.colSpan),r.dom.select("td.mce-item-selected,th.mce-item-selected").length?e.merge():d(e,i)},mceTableInsertRowBefore:function(e){e.insertRow(!0)},mceTableInsertRowAfter:function(e){e.insertRow()},mceTableInsertColBefore:function(e){e.insertCol(!0)},mceTableInsertColAfter:function(e){e.insertCol()},mceTableDeleteCol:function(e){e.deleteCols()},mceTableDeleteRow:function(e){e.deleteRows()},mceTableCutRow:function(e){x=e.cutRows()},mceTableCopyRow:function(e){x=e.copyRows()},mceTablePasteRowBefore:function(e){e.pasteRows(x,!0)},mceTablePasteRowAfter:function(e){e.pasteRows(x)},mceTableDelete:function(e){e.deleteTable()}},function(t,n){r.addCommand(n,function(){var n=new e(r);n&&(t(n),r.execCommand("mceRepaint"),w.cellSelection.clear())})}),l({mceInsertTable:function(){c()},mceTableRowProps:f,mceTableCellProps:u},function(e,t){r.addCommand(t,function(t,n){e(n)})})}var l=r.each;a.add("table",s)}),a([l,u,p,h])}(this); +;tinymce.PluginManager.add("textcolor",function(e){function t(){var t,o,r=[];for(o=e.settings.textcolor_map||["000000","Black","993300","Burnt orange","333300","Dark olive","003300","Dark green","003366","Dark azure","000080","Navy Blue","333399","Indigo","333333","Very dark gray","800000","Maroon","FF6600","Orange","808000","Olive","008000","Green","008080","Teal","0000FF","Blue","666699","Grayish blue","808080","Gray","FF0000","Red","FF9900","Amber","99CC00","Yellow green","339966","Sea green","33CCCC","Turquoise","3366FF","Royal blue","800080","Purple","999999","Medium gray","FF00FF","Magenta","FFCC00","Gold","FFFF00","Yellow","00FF00","Lime","00FFFF","Aqua","00CCFF","Sky blue","993366","Brown","C0C0C0","Silver","FF99CC","Pink","FFCC99","Peach","FFFF99","Light yellow","CCFFCC","Pale green","CCFFFF","Pale cyan","99CCFF","Light sky blue","CC99FF","Plum","FFFFFF","White"],t=0;t',a=o.length-1,c=e.settings.textcolor_rows||5,i=e.settings.textcolor_cols||8,F=0;c>F;F++){for(l+="",n=0;i>n;n++)d=F*i+n,d>a?l+="":(r=o[d],l+='
    ');l+=""}return l+=""}function r(t){var o,r=this.parent();(o=t.target.getAttribute("data-mce-color"))&&(this.lastId&&document.getElementById(this.lastId).setAttribute("aria-selected",!1),t.target.setAttribute("aria-selected",!0),this.lastId=t.target.id,r.hidePanel(),o="#"+o,r.color(o),e.execCommand(r.settings.selectcmd,!1,o))}function l(){var t=this;t._color&&e.execCommand(t.settings.selectcmd,!1,t._color)}e.addButton("forecolor",{type:"colorbutton",tooltip:"Text color",selectcmd:"ForeColor",panel:{role:"application",ariaRemember:!0,html:o,onclick:r},onclick:l}),e.addButton("backcolor",{type:"colorbutton",tooltip:"Background color",selectcmd:"HiliteColor",panel:{role:"application",ariaRemember:!0,html:o,onclick:r},onclick:l})}); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/tinymce.jquery.dev.js b/common/static/js/vendor/tinymce/js/tinymce/tinymce.jquery.dev.js new file mode 100755 index 0000000000..65580436c9 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/tinymce.jquery.dev.js @@ -0,0 +1,213 @@ +/** + * Inline development version. Only to be used while developing since it uses document.write to load scripts. + */ + +/*jshint smarttabs:true, undef:true, latedef:true, curly:true, bitwise:true, camelcase:true */ +/*globals $code */ + +(function(exports) { + "use strict"; + + var html = "", baseDir; + var modules = {}, exposedModules = [], moduleCount = 0; + + var scripts = document.getElementsByTagName('script'); + for (var i = 0; i < scripts.length; i++) { + var src = scripts[i].src; + + if (src.indexOf('/tinymce.jquery.dev.js') != -1) { + baseDir = src.substring(0, src.lastIndexOf('/')); + } + } + + function require(ids, callback) { + var module, defs = []; + + for (var i = 0; i < ids.length; ++i) { + module = modules[ids[i]] || resolve(ids[i]); + if (!module) { + throw 'module definition dependecy not found: ' + ids[i]; + } + + defs.push(module); + } + + callback.apply(null, defs); + } + + function resolve(id) { + var target = exports; + var fragments = id.split(/[.\/]/); + + for (var fi = 0; fi < fragments.length; ++fi) { + if (!target[fragments[fi]]) { + return; + } + + target = target[fragments[fi]]; + } + + return target; + } + + function register(id) { + var target = exports; + var fragments = id.split(/[.\/]/); + + for (var fi = 0; fi < fragments.length - 1; ++fi) { + if (target[fragments[fi]] === undefined) { + target[fragments[fi]] = {}; + } + + target = target[fragments[fi]]; + } + + target[fragments[fragments.length - 1]] = modules[id]; + } + + function define(id, dependencies, definition) { + if (typeof id !== 'string') { + throw 'invalid module definition, module id must be defined and be a string'; + } + + if (dependencies === undefined) { + throw 'invalid module definition, dependencies must be specified'; + } + + if (definition === undefined) { + throw 'invalid module definition, definition function must be specified'; + } + + require(dependencies, function() { + modules[id] = definition.apply(null, arguments); + }); + + if (--moduleCount === 0) { + for (var i = 0; i < exposedModules.length; i++) { + register(exposedModules[i]); + } + } + } + + function expose(ids) { + exposedModules = ids; + } + + function writeScripts() { + document.write(html); + } + + function load(path) { + html += '\n'; + moduleCount++; + } + + // Expose globally + exports.define = define; + exports.require = require; + + expose(["tinymce/dom/Sizzle","tinymce/html/Styles","tinymce/dom/EventUtils","tinymce/dom/TreeWalker","tinymce/util/Tools","tinymce/dom/Range","tinymce/html/Entities","tinymce/Env","tinymce/dom/StyleSheetLoader","tinymce/dom/DOMUtils","tinymce/dom/ScriptLoader","tinymce/AddOnManager","tinymce/html/Node","tinymce/html/Schema","tinymce/html/SaxParser","tinymce/html/DomParser","tinymce/html/Writer","tinymce/html/Serializer","tinymce/dom/Serializer","tinymce/dom/TridentSelection","tinymce/util/VK","tinymce/dom/ControlSelection","tinymce/dom/RangeUtils","tinymce/dom/Selection","tinymce/Formatter","tinymce/UndoManager","tinymce/EnterKey","tinymce/ForceBlocks","tinymce/EditorCommands","tinymce/util/URI","tinymce/util/Class","tinymce/ui/Selector","tinymce/ui/Collection","tinymce/ui/DomUtils","tinymce/ui/Control","tinymce/ui/Factory","tinymce/ui/KeyboardNavigation","tinymce/ui/Container","tinymce/ui/DragHelper","tinymce/ui/Scrollable","tinymce/ui/Panel","tinymce/ui/Movable","tinymce/ui/Resizable","tinymce/ui/FloatPanel","tinymce/ui/Window","tinymce/ui/MessageBox","tinymce/WindowManager","tinymce/util/Quirks","tinymce/util/Observable","tinymce/Shortcuts","tinymce/Editor","tinymce/util/I18n","tinymce/FocusManager","tinymce/EditorManager","tinymce/LegacyInput","tinymce/util/XHR","tinymce/util/JSON","tinymce/util/JSONRequest","tinymce/util/JSONP","tinymce/util/LocalStorage","tinymce/Compat","tinymce/ui/Layout","tinymce/ui/AbsoluteLayout","tinymce/ui/Tooltip","tinymce/ui/Widget","tinymce/ui/Button","tinymce/ui/ButtonGroup","tinymce/ui/Checkbox","tinymce/ui/PanelButton","tinymce/ui/ColorButton","tinymce/ui/ComboBox","tinymce/ui/Path","tinymce/ui/ElementPath","tinymce/ui/FormItem","tinymce/ui/Form","tinymce/ui/FieldSet","tinymce/ui/FilePicker","tinymce/ui/FitLayout","tinymce/ui/FlexLayout","tinymce/ui/FlowLayout","tinymce/ui/FormatControls","tinymce/ui/GridLayout","tinymce/ui/Iframe","tinymce/ui/Label","tinymce/ui/Toolbar","tinymce/ui/MenuBar","tinymce/ui/MenuButton","tinymce/ui/ListBox","tinymce/ui/MenuItem","tinymce/ui/Menu","tinymce/ui/Radio","tinymce/ui/ResizeHandle","tinymce/ui/Spacer","tinymce/ui/SplitButton","tinymce/ui/StackLayout","tinymce/ui/TabPanel","tinymce/ui/TextBox","tinymce/ui/Throbber"]); + + load('classes/dom/Sizzle.jQuery.js'); + load('classes/html/Styles.js'); + load('classes/dom/EventUtils.js'); + load('classes/dom/TreeWalker.js'); + load('classes/util/Tools.js'); + load('classes/dom/Range.js'); + load('classes/html/Entities.js'); + load('classes/Env.js'); + load('classes/dom/StyleSheetLoader.js'); + load('classes/dom/DOMUtils.js'); + load('classes/dom/ScriptLoader.js'); + load('classes/AddOnManager.js'); + load('classes/html/Node.js'); + load('classes/html/Schema.js'); + load('classes/html/SaxParser.js'); + load('classes/html/DomParser.js'); + load('classes/html/Writer.js'); + load('classes/html/Serializer.js'); + load('classes/dom/Serializer.js'); + load('classes/dom/TridentSelection.js'); + load('classes/util/VK.js'); + load('classes/dom/ControlSelection.js'); + load('classes/dom/RangeUtils.js'); + load('classes/dom/Selection.js'); + load('classes/Formatter.js'); + load('classes/UndoManager.js'); + load('classes/EnterKey.js'); + load('classes/ForceBlocks.js'); + load('classes/EditorCommands.js'); + load('classes/util/URI.js'); + load('classes/util/Class.js'); + load('classes/ui/Selector.js'); + load('classes/ui/Collection.js'); + load('classes/ui/DomUtils.js'); + load('classes/ui/Control.js'); + load('classes/ui/Factory.js'); + load('classes/ui/KeyboardNavigation.js'); + load('classes/ui/Container.js'); + load('classes/ui/DragHelper.js'); + load('classes/ui/Scrollable.js'); + load('classes/ui/Panel.js'); + load('classes/ui/Movable.js'); + load('classes/ui/Resizable.js'); + load('classes/ui/FloatPanel.js'); + load('classes/ui/Window.js'); + load('classes/ui/MessageBox.js'); + load('classes/WindowManager.js'); + load('classes/util/Quirks.js'); + load('classes/util/Observable.js'); + load('classes/Shortcuts.js'); + load('classes/Editor.js'); + load('classes/util/I18n.js'); + load('classes/FocusManager.js'); + load('classes/EditorManager.js'); + load('classes/LegacyInput.js'); + load('classes/util/XHR.js'); + load('classes/util/JSON.js'); + load('classes/util/JSONRequest.js'); + load('classes/util/JSONP.js'); + load('classes/util/LocalStorage.js'); + load('classes/Compat.js'); + load('classes/ui/Layout.js'); + load('classes/ui/AbsoluteLayout.js'); + load('classes/ui/Tooltip.js'); + load('classes/ui/Widget.js'); + load('classes/ui/Button.js'); + load('classes/ui/ButtonGroup.js'); + load('classes/ui/Checkbox.js'); + load('classes/ui/PanelButton.js'); + load('classes/ui/ColorButton.js'); + load('classes/ui/ComboBox.js'); + load('classes/ui/Path.js'); + load('classes/ui/ElementPath.js'); + load('classes/ui/FormItem.js'); + load('classes/ui/Form.js'); + load('classes/ui/FieldSet.js'); + load('classes/ui/FilePicker.js'); + load('classes/ui/FitLayout.js'); + load('classes/ui/FlexLayout.js'); + load('classes/ui/FlowLayout.js'); + load('classes/ui/FormatControls.js'); + load('classes/ui/GridLayout.js'); + load('classes/ui/Iframe.js'); + load('classes/ui/Label.js'); + load('classes/ui/Toolbar.js'); + load('classes/ui/MenuBar.js'); + load('classes/ui/MenuButton.js'); + load('classes/ui/ListBox.js'); + load('classes/ui/MenuItem.js'); + load('classes/ui/Menu.js'); + load('classes/ui/Radio.js'); + load('classes/ui/ResizeHandle.js'); + load('classes/ui/Spacer.js'); + load('classes/ui/SplitButton.js'); + load('classes/ui/StackLayout.js'); + load('classes/ui/TabPanel.js'); + load('classes/ui/TextBox.js'); + load('classes/ui/Throbber.js'); + + writeScripts(); +})(this); + +// $hash: 0987d954549d1d01100987db6426ea5d \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/tinymce.jquery.js b/common/static/js/vendor/tinymce/js/tinymce/tinymce.jquery.js new file mode 100755 index 0000000000..3a2a690edb --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/tinymce.jquery.js @@ -0,0 +1,32176 @@ +// 4.0.20 (2014-03-18) + +/** + * Compiled inline version. (Library mode) + */ + +/*jshint smarttabs:true, undef:true, latedef:true, curly:true, bitwise:true, camelcase:true */ +/*globals $code */ + +(function(exports, undefined) { + "use strict"; + + var modules = {}; + + function require(ids, callback) { + var module, defs = []; + + for (var i = 0; i < ids.length; ++i) { + module = modules[ids[i]] || resolve(ids[i]); + if (!module) { + throw 'module definition dependecy not found: ' + ids[i]; + } + + defs.push(module); + } + + callback.apply(null, defs); + } + + function define(id, dependencies, definition) { + if (typeof id !== 'string') { + throw 'invalid module definition, module id must be defined and be a string'; + } + + if (dependencies === undefined) { + throw 'invalid module definition, dependencies must be specified'; + } + + if (definition === undefined) { + throw 'invalid module definition, definition function must be specified'; + } + + require(dependencies, function() { + modules[id] = definition.apply(null, arguments); + }); + } + + function defined(id) { + return !!modules[id]; + } + + function resolve(id) { + var target = exports; + var fragments = id.split(/[.\/]/); + + for (var fi = 0; fi < fragments.length; ++fi) { + if (!target[fragments[fi]]) { + return; + } + + target = target[fragments[fi]]; + } + + return target; + } + + function expose(ids) { + for (var i = 0; i < ids.length; i++) { + var target = exports; + var id = ids[i]; + var fragments = id.split(/[.\/]/); + + for (var fi = 0; fi < fragments.length - 1; ++fi) { + if (target[fragments[fi]] === undefined) { + target[fragments[fi]] = {}; + } + + target = target[fragments[fi]]; + } + + target[fragments[fragments.length - 1]] = modules[id]; + } + } + +// Included from: js/tinymce/classes/dom/Sizzle.jQuery.js + +/** + * Sizzle.jQuery.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*global jQuery:true */ + +/* + * Fake Sizzle using jQuery. + */ +define("tinymce/dom/Sizzle", [], function() { + // Detect if jQuery is loaded + if (!window.jQuery) { + throw new Error("Load jQuery first"); + } + + return jQuery.find; +}); + +// Included from: js/tinymce/classes/html/Styles.js + +/** + * Styles.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class is used to parse CSS styles it also compresses styles to reduce the output size. + * + * @example + * var Styles = new tinymce.html.Styles({ + * url_converter: function(url) { + * return url; + * } + * }); + * + * styles = Styles.parse('border: 1px solid red'); + * styles.color = 'red'; + * + * console.log(new tinymce.html.StyleSerializer().serialize(styles)); + * + * @class tinymce.html.Styles + * @version 3.4 + */ +define("tinymce/html/Styles", [], function() { + return function(settings, schema) { + /*jshint maxlen:255 */ + /*eslint max-len:0 */ + var rgbRegExp = /rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi, + urlOrStrRegExp = /(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi, + styleRegExp = /\s*([^:]+):\s*([^;]+);?/g, + trimRightRegExp = /\s+$/, + undef, i, encodingLookup = {}, encodingItems, invisibleChar = '\uFEFF'; + + settings = settings || {}; + + encodingItems = ('\\" \\\' \\; \\: ; : ' + invisibleChar).split(' '); + for (i = 0; i < encodingItems.length; i++) { + encodingLookup[encodingItems[i]] = invisibleChar + i; + encodingLookup[invisibleChar + i] = encodingItems[i]; + } + + function toHex(match, r, g, b) { + function hex(val) { + val = parseInt(val, 10).toString(16); + + return val.length > 1 ? val : '0' + val; // 0 -> 00 + } + + return '#' + hex(r) + hex(g) + hex(b); + } + + return { + /** + * Parses the specified RGB color value and returns a hex version of that color. + * + * @method toHex + * @param {String} color RGB string value like rgb(1,2,3) + * @return {String} Hex version of that RGB value like #FF00FF. + */ + toHex: function(color) { + return color.replace(rgbRegExp, toHex); + }, + + /** + * Parses the specified style value into an object collection. This parser will also + * merge and remove any redundant items that browsers might have added. It will also convert non hex + * colors to hex values. Urls inside the styles will also be converted to absolute/relative based on settings. + * + * @method parse + * @param {String} css Style value to parse for example: border:1px solid red;. + * @return {Object} Object representation of that style like {border: '1px solid red'} + */ + parse: function(css) { + var styles = {}, matches, name, value, isEncoded, urlConverter = settings.url_converter; + var urlConverterScope = settings.url_converter_scope || this; + + function compress(prefix, suffix, noJoin) { + var top, right, bottom, left; + + top = styles[prefix + '-top' + suffix]; + if (!top) { + return; + } + + right = styles[prefix + '-right' + suffix]; + if (!right) { + return; + } + + bottom = styles[prefix + '-bottom' + suffix]; + if (!bottom) { + return; + } + + left = styles[prefix + '-left' + suffix]; + if (!left) { + return; + } + + var box = [top, right, bottom, left]; + i = box.length - 1; + while (i--) { + if (box[i] !== box[i + 1]) { + break; + } + } + + if (i > -1 && noJoin) { + return; + } + + styles[prefix + suffix] = i == -1 ? box[0] : box.join(' '); + delete styles[prefix + '-top' + suffix]; + delete styles[prefix + '-right' + suffix]; + delete styles[prefix + '-bottom' + suffix]; + delete styles[prefix + '-left' + suffix]; + } + + /** + * Checks if the specific style can be compressed in other words if all border-width are equal. + */ + function canCompress(key) { + var value = styles[key], i; + + if (!value) { + return; + } + + value = value.split(' '); + i = value.length; + while (i--) { + if (value[i] !== value[0]) { + return false; + } + } + + styles[key] = value[0]; + + return true; + } + + /** + * Compresses multiple styles into one style. + */ + function compress2(target, a, b, c) { + if (!canCompress(a)) { + return; + } + + if (!canCompress(b)) { + return; + } + + if (!canCompress(c)) { + return; + } + + // Compress + styles[target] = styles[a] + ' ' + styles[b] + ' ' + styles[c]; + delete styles[a]; + delete styles[b]; + delete styles[c]; + } + + // Encodes the specified string by replacing all \" \' ; : with _ + function encode(str) { + isEncoded = true; + + return encodingLookup[str]; + } + + // Decodes the specified string by replacing all _ with it's original value \" \' etc + // It will also decode the \" \' if keep_slashes is set to fale or omitted + function decode(str, keep_slashes) { + if (isEncoded) { + str = str.replace(/\uFEFF[0-9]/g, function(str) { + return encodingLookup[str]; + }); + } + + if (!keep_slashes) { + str = str.replace(/\\([\'\";:])/g, "$1"); + } + + return str; + } + + function processUrl(match, url, url2, url3, str, str2) { + str = str || str2; + + if (str) { + str = decode(str); + + // Force strings into single quote format + return "'" + str.replace(/\'/g, "\\'") + "'"; + } + + url = decode(url || url2 || url3); + + if (!settings.allow_script_urls && /(java|vb)script:/i.test(url.replace(/[\s\r\n]+/, ''))) { + return ""; + } + + // Convert the URL to relative/absolute depending on config + if (urlConverter) { + url = urlConverter.call(urlConverterScope, url, 'style'); + } + + // Output new URL format + return "url('" + url.replace(/\'/g, "\\'") + "')"; + } + + if (css) { + css = css.replace(/[\u0000-\u001F]/g, ''); + + // Encode \" \' % and ; and : inside strings so they don't interfere with the style parsing + css = css.replace(/\\[\"\';:\uFEFF]/g, encode).replace(/\"[^\"]+\"|\'[^\']+\'/g, function(str) { + return str.replace(/[;:]/g, encode); + }); + + // Parse styles + while ((matches = styleRegExp.exec(css))) { + name = matches[1].replace(trimRightRegExp, '').toLowerCase(); + value = matches[2].replace(trimRightRegExp, ''); + + if (name && value.length > 0) { + if (!settings.allow_script_urls && (name == "behavior" || /expression\s*\(/.test(value))) { + continue; + } + + // Opera will produce 700 instead of bold in their style values + if (name === 'font-weight' && value === '700') { + value = 'bold'; + } else if (name === 'color' || name === 'background-color') { // Lowercase colors like RED + value = value.toLowerCase(); + } + + // Convert RGB colors to HEX + value = value.replace(rgbRegExp, toHex); + + // Convert URLs and force them into url('value') format + value = value.replace(urlOrStrRegExp, processUrl); + styles[name] = isEncoded ? decode(value, true) : value; + } + + styleRegExp.lastIndex = matches.index + matches[0].length; + } + // Compress the styles to reduce it's size for example IE will expand styles + compress("border", "", true); + compress("border", "-width"); + compress("border", "-color"); + compress("border", "-style"); + compress("padding", ""); + compress("margin", ""); + compress2('border', 'border-width', 'border-style', 'border-color'); + + // Remove pointless border, IE produces these + if (styles.border === 'medium none') { + delete styles.border; + } + + // IE 11 will produce a border-image: none when getting the style attribute from

    + // So lets asume it shouldn't be there + if (styles['border-image'] === 'none') { + delete styles['border-image']; + } + } + + return styles; + }, + + /** + * Serializes the specified style object into a string. + * + * @method serialize + * @param {Object} styles Object to serialize as string for example: {border: '1px solid red'} + * @param {String} element_name Optional element name, if specified only the styles that matches the schema will be serialized. + * @return {String} String representation of the style object for example: border: 1px solid red. + */ + serialize: function(styles, element_name) { + var css = '', name, value; + + function serializeStyles(name) { + var styleList, i, l, value; + + styleList = schema.styles[name]; + if (styleList) { + for (i = 0, l = styleList.length; i < l; i++) { + name = styleList[i]; + value = styles[name]; + + if (value !== undef && value.length > 0) { + css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';'; + } + } + } + } + + // Serialize styles according to schema + if (element_name && schema && schema.styles) { + // Serialize global styles and element specific styles + serializeStyles('*'); + serializeStyles(element_name); + } else { + // Output the styles in the order they are inside the object + for (name in styles) { + value = styles[name]; + + if (value !== undef && value.length > 0) { + css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';'; + } + } + } + + return css; + } + }; + }; +}); + +// Included from: js/tinymce/classes/dom/EventUtils.js + +/** + * EventUtils.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*jshint loopfunc:true*/ +/*eslint no-loop-func:0 */ + +define("tinymce/dom/EventUtils", [], function() { + "use strict"; + + var eventExpandoPrefix = "mce-data-"; + var mouseEventRe = /^(?:mouse|contextmenu)|click/; + var deprecated = {keyLocation: 1, layerX: 1, layerY: 1, returnValue: 1}; + + /** + * Binds a native event to a callback on the speified target. + */ + function addEvent(target, name, callback, capture) { + if (target.addEventListener) { + target.addEventListener(name, callback, capture || false); + } else if (target.attachEvent) { + target.attachEvent('on' + name, callback); + } + } + + /** + * Unbinds a native event callback on the specified target. + */ + function removeEvent(target, name, callback, capture) { + if (target.removeEventListener) { + target.removeEventListener(name, callback, capture || false); + } else if (target.detachEvent) { + target.detachEvent('on' + name, callback); + } + } + + /** + * Normalizes a native event object or just adds the event specific methods on a custom event. + */ + function fix(originalEvent, data) { + var name, event = data || {}, undef; + + // Dummy function that gets replaced on the delegation state functions + function returnFalse() { + return false; + } + + // Dummy function that gets replaced on the delegation state functions + function returnTrue() { + return true; + } + + // Copy all properties from the original event + for (name in originalEvent) { + // layerX/layerY is deprecated in Chrome and produces a warning + if (!deprecated[name]) { + event[name] = originalEvent[name]; + } + } + + // Normalize target IE uses srcElement + if (!event.target) { + event.target = event.srcElement || document; + } + + // Calculate pageX/Y if missing and clientX/Y available + if (originalEvent && mouseEventRe.test(originalEvent.type) && originalEvent.pageX === undef && originalEvent.clientX !== undef) { + var eventDoc = event.target.ownerDocument || document; + var doc = eventDoc.documentElement; + var body = eventDoc.body; + + event.pageX = originalEvent.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - + ( doc && doc.clientLeft || body && body.clientLeft || 0); + + event.pageY = originalEvent.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0 ) - + ( doc && doc.clientTop || body && body.clientTop || 0); + } + + // Add preventDefault method + event.preventDefault = function() { + event.isDefaultPrevented = returnTrue; + + // Execute preventDefault on the original event object + if (originalEvent) { + if (originalEvent.preventDefault) { + originalEvent.preventDefault(); + } else { + originalEvent.returnValue = false; // IE + } + } + }; + + // Add stopPropagation + event.stopPropagation = function() { + event.isPropagationStopped = returnTrue; + + // Execute stopPropagation on the original event object + if (originalEvent) { + if (originalEvent.stopPropagation) { + originalEvent.stopPropagation(); + } else { + originalEvent.cancelBubble = true; // IE + } + } + }; + + // Add stopImmediatePropagation + event.stopImmediatePropagation = function() { + event.isImmediatePropagationStopped = returnTrue; + event.stopPropagation(); + }; + + // Add event delegation states + if (!event.isDefaultPrevented) { + event.isDefaultPrevented = returnFalse; + event.isPropagationStopped = returnFalse; + event.isImmediatePropagationStopped = returnFalse; + } + + return event; + } + + /** + * Bind a DOMContentLoaded event across browsers and executes the callback once the page DOM is initialized. + * It will also set/check the domLoaded state of the event_utils instance so ready isn't called multiple times. + */ + function bindOnReady(win, callback, eventUtils) { + var doc = win.document, event = {type: 'ready'}; + + if (eventUtils.domLoaded) { + callback(event); + return; + } + + // Gets called when the DOM is ready + function readyHandler() { + if (!eventUtils.domLoaded) { + eventUtils.domLoaded = true; + callback(event); + } + } + + function waitForDomLoaded() { + // Check complete or interactive state if there is a body + // element on some iframes IE 8 will produce a null body + if (doc.readyState === "complete" || (doc.readyState === "interactive" && doc.body)) { + removeEvent(doc, "readystatechange", waitForDomLoaded); + readyHandler(); + } + } + + function tryScroll() { + try { + // If IE is used, use the trick by Diego Perini licensed under MIT by request to the author. + // http://javascript.nwbox.com/IEContentLoaded/ + doc.documentElement.doScroll("left"); + } catch (ex) { + setTimeout(tryScroll, 0); + return; + } + + readyHandler(); + } + + // Use W3C method + if (doc.addEventListener) { + if (doc.readyState === "complete") { + readyHandler(); + } else { + addEvent(win, 'DOMContentLoaded', readyHandler); + } + } else { + // Use IE method + addEvent(doc, "readystatechange", waitForDomLoaded); + + // Wait until we can scroll, when we can the DOM is initialized + if (doc.documentElement.doScroll && win.self === win.top) { + tryScroll(); + } + } + + // Fallback if any of the above methods should fail for some odd reason + addEvent(win, 'load', readyHandler); + } + + /** + * This class enables you to bind/unbind native events to elements and normalize it's behavior across browsers. + */ + function EventUtils() { + var self = this, events = {}, count, expando, hasFocusIn, hasMouseEnterLeave, mouseEnterLeave; + + expando = eventExpandoPrefix + (+new Date()).toString(32); + hasMouseEnterLeave = "onmouseenter" in document.documentElement; + hasFocusIn = "onfocusin" in document.documentElement; + mouseEnterLeave = {mouseenter: 'mouseover', mouseleave: 'mouseout'}; + count = 1; + + // State if the DOMContentLoaded was executed or not + self.domLoaded = false; + self.events = events; + + /** + * Executes all event handler callbacks for a specific event. + * + * @private + * @param {Event} evt Event object. + * @param {String} id Expando id value to look for. + */ + function executeHandlers(evt, id) { + var callbackList, i, l, callback, container = events[id]; + + callbackList = container && container[evt.type]; + if (callbackList) { + for (i = 0, l = callbackList.length; i < l; i++) { + callback = callbackList[i]; + + // Check if callback exists might be removed if a unbind is called inside the callback + if (callback && callback.func.call(callback.scope, evt) === false) { + evt.preventDefault(); + } + + // Should we stop propagation to immediate listeners + if (evt.isImmediatePropagationStopped()) { + return; + } + } + } + } + + /** + * Binds a callback to an event on the specified target. + * + * @method bind + * @param {Object} target Target node/window or custom object. + * @param {String} names Name of the event to bind. + * @param {function} callback Callback function to execute when the event occurs. + * @param {Object} scope Scope to call the callback function on, defaults to target. + * @return {function} Callback function that got bound. + */ + self.bind = function(target, names, callback, scope) { + var id, callbackList, i, name, fakeName, nativeHandler, capture, win = window; + + // Native event handler function patches the event and executes the callbacks for the expando + function defaultNativeHandler(evt) { + executeHandlers(fix(evt || win.event), id); + } + + // Don't bind to text nodes or comments + if (!target || target.nodeType === 3 || target.nodeType === 8) { + return; + } + + // Create or get events id for the target + if (!target[expando]) { + id = count++; + target[expando] = id; + events[id] = {}; + } else { + id = target[expando]; + } + + // Setup the specified scope or use the target as a default + scope = scope || target; + + // Split names and bind each event, enables you to bind multiple events with one call + names = names.split(' '); + i = names.length; + while (i--) { + name = names[i]; + nativeHandler = defaultNativeHandler; + fakeName = capture = false; + + // Use ready instead of DOMContentLoaded + if (name === "DOMContentLoaded") { + name = "ready"; + } + + // DOM is already ready + if (self.domLoaded && name === "ready" && target.readyState == 'complete') { + callback.call(scope, fix({type: name})); + continue; + } + + // Handle mouseenter/mouseleaver + if (!hasMouseEnterLeave) { + fakeName = mouseEnterLeave[name]; + + if (fakeName) { + nativeHandler = function(evt) { + var current, related; + + current = evt.currentTarget; + related = evt.relatedTarget; + + // Check if related is inside the current target if it's not then the event should + // be ignored since it's a mouseover/mouseout inside the element + if (related && current.contains) { + // Use contains for performance + related = current.contains(related); + } else { + while (related && related !== current) { + related = related.parentNode; + } + } + + // Fire fake event + if (!related) { + evt = fix(evt || win.event); + evt.type = evt.type === 'mouseout' ? 'mouseleave' : 'mouseenter'; + evt.target = current; + executeHandlers(evt, id); + } + }; + } + } + + // Fake bubbeling of focusin/focusout + if (!hasFocusIn && (name === "focusin" || name === "focusout")) { + capture = true; + fakeName = name === "focusin" ? "focus" : "blur"; + nativeHandler = function(evt) { + evt = fix(evt || win.event); + evt.type = evt.type === 'focus' ? 'focusin' : 'focusout'; + executeHandlers(evt, id); + }; + } + + // Setup callback list and bind native event + callbackList = events[id][name]; + if (!callbackList) { + events[id][name] = callbackList = [{func: callback, scope: scope}]; + callbackList.fakeName = fakeName; + callbackList.capture = capture; + + // Add the nativeHandler to the callback list so that we can later unbind it + callbackList.nativeHandler = nativeHandler; + + // Check if the target has native events support + + if (name === "ready") { + bindOnReady(target, nativeHandler, self); + } else { + addEvent(target, fakeName || name, nativeHandler, capture); + } + } else { + if (name === "ready" && self.domLoaded) { + callback({type: name}); + } else { + // If it already has an native handler then just push the callback + callbackList.push({func: callback, scope: scope}); + } + } + } + + target = callbackList = 0; // Clean memory for IE + + return callback; + }; + + /** + * Unbinds the specified event by name, name and callback or all events on the target. + * + * @method unbind + * @param {Object} target Target node/window or custom object. + * @param {String} names Optional event name to unbind. + * @param {function} callback Optional callback function to unbind. + * @return {EventUtils} Event utils instance. + */ + self.unbind = function(target, names, callback) { + var id, callbackList, i, ci, name, eventMap; + + // Don't bind to text nodes or comments + if (!target || target.nodeType === 3 || target.nodeType === 8) { + return self; + } + + // Unbind event or events if the target has the expando + id = target[expando]; + if (id) { + eventMap = events[id]; + + // Specific callback + if (names) { + names = names.split(' '); + i = names.length; + while (i--) { + name = names[i]; + callbackList = eventMap[name]; + + // Unbind the event if it exists in the map + if (callbackList) { + // Remove specified callback + if (callback) { + ci = callbackList.length; + while (ci--) { + if (callbackList[ci].func === callback) { + var nativeHandler = callbackList.nativeHandler; + var fakeName = callbackList.fakeName, capture = callbackList.capture; + + // Clone callbackList since unbind inside a callback would otherwise break the handlers loop + callbackList = callbackList.slice(0, ci).concat(callbackList.slice(ci + 1)); + callbackList.nativeHandler = nativeHandler; + callbackList.fakeName = fakeName; + callbackList.capture = capture; + + eventMap[name] = callbackList; + } + } + } + + // Remove all callbacks if there isn't a specified callback or there is no callbacks left + if (!callback || callbackList.length === 0) { + delete eventMap[name]; + removeEvent(target, callbackList.fakeName || name, callbackList.nativeHandler, callbackList.capture); + } + } + } + } else { + // All events for a specific element + for (name in eventMap) { + callbackList = eventMap[name]; + removeEvent(target, callbackList.fakeName || name, callbackList.nativeHandler, callbackList.capture); + } + + eventMap = {}; + } + + // Check if object is empty, if it isn't then we won't remove the expando map + for (name in eventMap) { + return self; + } + + // Delete event object + delete events[id]; + + // Remove expando from target + try { + // IE will fail here since it can't delete properties from window + delete target[expando]; + } catch (ex) { + // IE will set it to null + target[expando] = null; + } + } + + return self; + }; + + /** + * Fires the specified event on the specified target. + * + * @method fire + * @param {Object} target Target node/window or custom object. + * @param {String} name Event name to fire. + * @param {Object} args Optional arguments to send to the observers. + * @return {EventUtils} Event utils instance. + */ + self.fire = function(target, name, args) { + var id; + + // Don't bind to text nodes or comments + if (!target || target.nodeType === 3 || target.nodeType === 8) { + return self; + } + + // Build event object by patching the args + args = fix(null, args); + args.type = name; + args.target = target; + + do { + // Found an expando that means there is listeners to execute + id = target[expando]; + if (id) { + executeHandlers(args, id); + } + + // Walk up the DOM + target = target.parentNode || target.ownerDocument || target.defaultView || target.parentWindow; + } while (target && !args.isPropagationStopped()); + + return self; + }; + + /** + * Removes all bound event listeners for the specified target. This will also remove any bound + * listeners to child nodes within that target. + * + * @method clean + * @param {Object} target Target node/window object. + * @return {EventUtils} Event utils instance. + */ + self.clean = function(target) { + var i, children, unbind = self.unbind; + + // Don't bind to text nodes or comments + if (!target || target.nodeType === 3 || target.nodeType === 8) { + return self; + } + + // Unbind any element on the specificed target + if (target[expando]) { + unbind(target); + } + + // Target doesn't have getElementsByTagName it's probably a window object then use it's document to find the children + if (!target.getElementsByTagName) { + target = target.document; + } + + // Remove events from each child element + if (target && target.getElementsByTagName) { + unbind(target); + + children = target.getElementsByTagName('*'); + i = children.length; + while (i--) { + target = children[i]; + + if (target[expando]) { + unbind(target); + } + } + } + + return self; + }; + + /** + * Destroys the event object. Call this on IE to remove memory leaks. + */ + self.destroy = function() { + events = {}; + }; + + // Legacy function for canceling events + self.cancel = function(e) { + if (e) { + e.preventDefault(); + e.stopImmediatePropagation(); + } + + return false; + }; + } + + EventUtils.Event = new EventUtils(); + EventUtils.Event.bind(window, 'ready', function() {}); + + return EventUtils; +}); + +// Included from: js/tinymce/classes/dom/TreeWalker.js + +/** + * TreeWalker.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * TreeWalker class enables you to walk the DOM in a linear manner. + * + * @class tinymce.dom.TreeWalker + */ +define("tinymce/dom/TreeWalker", [], function() { + return function(start_node, root_node) { + var node = start_node; + + function findSibling(node, start_name, sibling_name, shallow) { + var sibling, parent; + + if (node) { + // Walk into nodes if it has a start + if (!shallow && node[start_name]) { + return node[start_name]; + } + + // Return the sibling if it has one + if (node != root_node) { + sibling = node[sibling_name]; + if (sibling) { + return sibling; + } + + // Walk up the parents to look for siblings + for (parent = node.parentNode; parent && parent != root_node; parent = parent.parentNode) { + sibling = parent[sibling_name]; + if (sibling) { + return sibling; + } + } + } + } + } + + /** + * Returns the current node. + * + * @method current + * @return {Node} Current node where the walker is. + */ + this.current = function() { + return node; + }; + + /** + * Walks to the next node in tree. + * + * @method next + * @return {Node} Current node where the walker is after moving to the next node. + */ + this.next = function(shallow) { + node = findSibling(node, 'firstChild', 'nextSibling', shallow); + return node; + }; + + /** + * Walks to the previous node in tree. + * + * @method prev + * @return {Node} Current node where the walker is after moving to the previous node. + */ + this.prev = function(shallow) { + node = findSibling(node, 'lastChild', 'previousSibling', shallow); + return node; + }; + }; +}); + +// Included from: js/tinymce/classes/util/Tools.js + +/** + * Tools.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class contains various utlity functions. These are also exposed + * directly on the tinymce namespace. + * + * @class tinymce.util.Tools + */ +define("tinymce/util/Tools", [], function() { + /** + * Removes whitespace from the beginning and end of a string. + * + * @method trim + * @param {String} s String to remove whitespace from. + * @return {String} New string with removed whitespace. + */ + var whiteSpaceRegExp = /^\s*|\s*$/g; + + function trim(str) { + return (str === null || str === undefined) ? '' : ("" + str).replace(whiteSpaceRegExp, ''); + } + + /** + * Returns true/false if the object is an array or not. + * + * @method isArray + * @param {Object} obj Object to check. + * @return {boolean} true/false state if the object is an array or not. + */ + var isArray = Array.isArray || function(obj) { + return Object.prototype.toString.call(obj) === "[object Array]"; + }; + + /** + * Checks if a object is of a specific type for example an array. + * + * @method is + * @param {Object} o Object to check type of. + * @param {string} t Optional type to check for. + * @return {Boolean} true/false if the object is of the specified type. + */ + function is(o, t) { + if (!t) { + return o !== undefined; + } + + if (t == 'array' && isArray(o)) { + return true; + } + + return typeof(o) == t; + } + + /** + * Converts the specified object into a real JavaScript array. + * + * @method toArray + * @param {Object} obj Object to convert into array. + * @return {Array} Array object based in input. + */ + function toArray(obj) { + var array = [], i, l; + + for (i = 0, l = obj.length; i < l; i++) { + array[i] = obj[i]; + } + + return array; + } + + /** + * Makes a name/object map out of an array with names. + * + * @method makeMap + * @param {Array/String} items Items to make map out of. + * @param {String} delim Optional delimiter to split string by. + * @param {Object} map Optional map to add items to. + * @return {Object} Name/value map of items. + */ + function makeMap(items, delim, map) { + var i; + + items = items || []; + delim = delim || ','; + + if (typeof(items) == "string") { + items = items.split(delim); + } + + map = map || {}; + + i = items.length; + while (i--) { + map[items[i]] = {}; + } + + return map; + } + + /** + * Performs an iteration of all items in a collection such as an object or array. This method will execure the + * callback function for each item in the collection, if the callback returns false the iteration will terminate. + * The callback has the following format: cb(value, key_or_index). + * + * @method each + * @param {Object} o Collection to iterate. + * @param {function} cb Callback function to execute for each item. + * @param {Object} s Optional scope to execute the callback in. + * @example + * // Iterate an array + * tinymce.each([1,2,3], function(v, i) { + * console.debug("Value: " + v + ", Index: " + i); + * }); + * + * // Iterate an object + * tinymce.each({a: 1, b: 2, c: 3], function(v, k) { + * console.debug("Value: " + v + ", Key: " + k); + * }); + */ + function each(o, cb, s) { + var n, l; + + if (!o) { + return 0; + } + + s = s || o; + + if (o.length !== undefined) { + // Indexed arrays, needed for Safari + for (n = 0, l = o.length; n < l; n++) { + if (cb.call(s, o[n], n, o) === false) { + return 0; + } + } + } else { + // Hashtables + for (n in o) { + if (o.hasOwnProperty(n)) { + if (cb.call(s, o[n], n, o) === false) { + return 0; + } + } + } + } + + return 1; + } + + /** + * Creates a new array by the return value of each iteration function call. This enables you to convert + * one array list into another. + * + * @method map + * @param {Array} a Array of items to iterate. + * @param {function} f Function to call for each item. It's return value will be the new value. + * @return {Array} Array with new values based on function return values. + */ + function map(a, f) { + var o = []; + + each(a, function(v) { + o.push(f(v)); + }); + + return o; + } + + /** + * Filters out items from the input array by calling the specified function for each item. + * If the function returns false the item will be excluded if it returns true it will be included. + * + * @method grep + * @param {Array} a Array of items to loop though. + * @param {function} f Function to call for each item. Include/exclude depends on it's return value. + * @return {Array} New array with values imported and filtered based in input. + * @example + * // Filter out some items, this will return an array with 4 and 5 + * var items = tinymce.grep([1,2,3,4,5], function(v) {return v > 3;}); + */ + function grep(a, f) { + var o = []; + + each(a, function(v) { + if (!f || f(v)) { + o.push(v); + } + }); + + return o; + } + + /** + * Creates a class, subclass or static singleton. + * More details on this method can be found in the Wiki. + * + * @method create + * @param {String} s Class name, inheritage and prefix. + * @param {Object} p Collection of methods to add to the class. + * @param {Object} root Optional root object defaults to the global window object. + * @example + * // Creates a basic class + * tinymce.create('tinymce.somepackage.SomeClass', { + * SomeClass: function() { + * // Class constructor + * }, + * + * method: function() { + * // Some method + * } + * }); + * + * // Creates a basic subclass class + * tinymce.create('tinymce.somepackage.SomeSubClass:tinymce.somepackage.SomeClass', { + * SomeSubClass: function() { + * // Class constructor + * this.parent(); // Call parent constructor + * }, + * + * method: function() { + * // Some method + * this.parent(); // Call parent method + * }, + * + * 'static': { + * staticMethod: function() { + * // Static method + * } + * } + * }); + * + * // Creates a singleton/static class + * tinymce.create('static tinymce.somepackage.SomeSingletonClass', { + * method: function() { + * // Some method + * } + * }); + */ + function create(s, p, root) { + var self = this, sp, ns, cn, scn, c, de = 0; + + // Parse : : + s = /^((static) )?([\w.]+)(:([\w.]+))?/.exec(s); + cn = s[3].match(/(^|\.)(\w+)$/i)[2]; // Class name + + // Create namespace for new class + ns = self.createNS(s[3].replace(/\.\w+$/, ''), root); + + // Class already exists + if (ns[cn]) { + return; + } + + // Make pure static class + if (s[2] == 'static') { + ns[cn] = p; + + if (this.onCreate) { + this.onCreate(s[2], s[3], ns[cn]); + } + + return; + } + + // Create default constructor + if (!p[cn]) { + p[cn] = function() {}; + de = 1; + } + + // Add constructor and methods + ns[cn] = p[cn]; + self.extend(ns[cn].prototype, p); + + // Extend + if (s[5]) { + sp = self.resolve(s[5]).prototype; + scn = s[5].match(/\.(\w+)$/i)[1]; // Class name + + // Extend constructor + c = ns[cn]; + if (de) { + // Add passthrough constructor + ns[cn] = function() { + return sp[scn].apply(this, arguments); + }; + } else { + // Add inherit constructor + ns[cn] = function() { + this.parent = sp[scn]; + return c.apply(this, arguments); + }; + } + ns[cn].prototype[cn] = ns[cn]; + + // Add super methods + self.each(sp, function(f, n) { + ns[cn].prototype[n] = sp[n]; + }); + + // Add overridden methods + self.each(p, function(f, n) { + // Extend methods if needed + if (sp[n]) { + ns[cn].prototype[n] = function() { + this.parent = sp[n]; + return f.apply(this, arguments); + }; + } else { + if (n != cn) { + ns[cn].prototype[n] = f; + } + } + }); + } + + // Add static methods + /*jshint sub:true*/ + self.each(p['static'], function(f, n) { + ns[cn][n] = f; + }); + } + + /** + * Returns the index of a value in an array, this method will return -1 if the item wasn't found. + * + * @method inArray + * @param {Array} a Array/Object to search for value in. + * @param {Object} v Value to check for inside the array. + * @return {Number/String} Index of item inside the array inside an object. Or -1 if it wasn't found. + * @example + * // Get index of value in array this will alert 1 since 2 is at that index + * alert(tinymce.inArray([1,2,3], 2)); + */ + function inArray(a, v) { + var i, l; + + if (a) { + for (i = 0, l = a.length; i < l; i++) { + if (a[i] === v) { + return i; + } + } + } + + return -1; + } + + function extend(obj, ext) { + var i, l, name, args = arguments, value; + + for (i = 1, l = args.length; i < l; i++) { + ext = args[i]; + for (name in ext) { + if (ext.hasOwnProperty(name)) { + value = ext[name]; + + if (value !== undefined) { + obj[name] = value; + } + } + } + } + + return obj; + } + + /** + * Executed the specified function for each item in a object tree. + * + * @method walk + * @param {Object} o Object tree to walk though. + * @param {function} f Function to call for each item. + * @param {String} n Optional name of collection inside the objects to walk for example childNodes. + * @param {String} s Optional scope to execute the function in. + */ + function walk(o, f, n, s) { + s = s || this; + + if (o) { + if (n) { + o = o[n]; + } + + each(o, function(o, i) { + if (f.call(s, o, i, n) === false) { + return false; + } + + walk(o, f, n, s); + }); + } + } + + /** + * Creates a namespace on a specific object. + * + * @method createNS + * @param {String} n Namespace to create for example a.b.c.d. + * @param {Object} o Optional object to add namespace to, defaults to window. + * @return {Object} New namespace object the last item in path. + * @example + * // Create some namespace + * tinymce.createNS('tinymce.somepackage.subpackage'); + * + * // Add a singleton + * var tinymce.somepackage.subpackage.SomeSingleton = { + * method: function() { + * // Some method + * } + * }; + */ + function createNS(n, o) { + var i, v; + + o = o || window; + + n = n.split('.'); + for (i = 0; i < n.length; i++) { + v = n[i]; + + if (!o[v]) { + o[v] = {}; + } + + o = o[v]; + } + + return o; + } + + /** + * Resolves a string and returns the object from a specific structure. + * + * @method resolve + * @param {String} n Path to resolve for example a.b.c.d. + * @param {Object} o Optional object to search though, defaults to window. + * @return {Object} Last object in path or null if it couldn't be resolved. + * @example + * // Resolve a path into an object reference + * var obj = tinymce.resolve('a.b.c.d'); + */ + function resolve(n, o) { + var i, l; + + o = o || window; + + n = n.split('.'); + for (i = 0, l = n.length; i < l; i++) { + o = o[n[i]]; + + if (!o) { + break; + } + } + + return o; + } + + /** + * Splits a string but removes the whitespace before and after each value. + * + * @method explode + * @param {string} s String to split. + * @param {string} d Delimiter to split by. + * @example + * // Split a string into an array with a,b,c + * var arr = tinymce.explode('a, b, c'); + */ + function explode(s, d) { + if (!s || is(s, 'array')) { + return s; + } + + return map(s.split(d || ','), trim); + } + + return { + trim: trim, + isArray: isArray, + is: is, + toArray: toArray, + makeMap: makeMap, + each: each, + map: map, + grep: grep, + inArray: inArray, + extend: extend, + create: create, + walk: walk, + createNS: createNS, + resolve: resolve, + explode: explode + }; +}); + +// Included from: js/tinymce/classes/dom/Range.js + +/** + * Range.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +define("tinymce/dom/Range", [ + "tinymce/util/Tools" +], function(Tools) { + // Range constructor + function Range(dom) { + var self = this, + doc = dom.doc, + EXTRACT = 0, + CLONE = 1, + DELETE = 2, + TRUE = true, + FALSE = false, + START_OFFSET = 'startOffset', + START_CONTAINER = 'startContainer', + END_CONTAINER = 'endContainer', + END_OFFSET = 'endOffset', + extend = Tools.extend, + nodeIndex = dom.nodeIndex; + + function createDocumentFragment() { + return doc.createDocumentFragment(); + } + + function setStart(n, o) { + _setEndPoint(TRUE, n, o); + } + + function setEnd(n, o) { + _setEndPoint(FALSE, n, o); + } + + function setStartBefore(n) { + setStart(n.parentNode, nodeIndex(n)); + } + + function setStartAfter(n) { + setStart(n.parentNode, nodeIndex(n) + 1); + } + + function setEndBefore(n) { + setEnd(n.parentNode, nodeIndex(n)); + } + + function setEndAfter(n) { + setEnd(n.parentNode, nodeIndex(n) + 1); + } + + function collapse(ts) { + if (ts) { + self[END_CONTAINER] = self[START_CONTAINER]; + self[END_OFFSET] = self[START_OFFSET]; + } else { + self[START_CONTAINER] = self[END_CONTAINER]; + self[START_OFFSET] = self[END_OFFSET]; + } + + self.collapsed = TRUE; + } + + function selectNode(n) { + setStartBefore(n); + setEndAfter(n); + } + + function selectNodeContents(n) { + setStart(n, 0); + setEnd(n, n.nodeType === 1 ? n.childNodes.length : n.nodeValue.length); + } + + function compareBoundaryPoints(h, r) { + var sc = self[START_CONTAINER], so = self[START_OFFSET], ec = self[END_CONTAINER], eo = self[END_OFFSET], + rsc = r.startContainer, rso = r.startOffset, rec = r.endContainer, reo = r.endOffset; + + // Check START_TO_START + if (h === 0) { + return _compareBoundaryPoints(sc, so, rsc, rso); + } + + // Check START_TO_END + if (h === 1) { + return _compareBoundaryPoints(ec, eo, rsc, rso); + } + + // Check END_TO_END + if (h === 2) { + return _compareBoundaryPoints(ec, eo, rec, reo); + } + + // Check END_TO_START + if (h === 3) { + return _compareBoundaryPoints(sc, so, rec, reo); + } + } + + function deleteContents() { + _traverse(DELETE); + } + + function extractContents() { + return _traverse(EXTRACT); + } + + function cloneContents() { + return _traverse(CLONE); + } + + function insertNode(n) { + var startContainer = this[START_CONTAINER], + startOffset = this[START_OFFSET], nn, o; + + // Node is TEXT_NODE or CDATA + if ((startContainer.nodeType === 3 || startContainer.nodeType === 4) && startContainer.nodeValue) { + if (!startOffset) { + // At the start of text + startContainer.parentNode.insertBefore(n, startContainer); + } else if (startOffset >= startContainer.nodeValue.length) { + // At the end of text + dom.insertAfter(n, startContainer); + } else { + // Middle, need to split + nn = startContainer.splitText(startOffset); + startContainer.parentNode.insertBefore(n, nn); + } + } else { + // Insert element node + if (startContainer.childNodes.length > 0) { + o = startContainer.childNodes[startOffset]; + } + + if (o) { + startContainer.insertBefore(n, o); + } else { + if (startContainer.nodeType == 3) { + dom.insertAfter(n, startContainer); + } else { + startContainer.appendChild(n); + } + } + } + } + + function surroundContents(n) { + var f = self.extractContents(); + + self.insertNode(n); + n.appendChild(f); + self.selectNode(n); + } + + function cloneRange() { + return extend(new Range(dom), { + startContainer: self[START_CONTAINER], + startOffset: self[START_OFFSET], + endContainer: self[END_CONTAINER], + endOffset: self[END_OFFSET], + collapsed: self.collapsed, + commonAncestorContainer: self.commonAncestorContainer + }); + } + + // Private methods + + function _getSelectedNode(container, offset) { + var child; + + if (container.nodeType == 3 /* TEXT_NODE */) { + return container; + } + + if (offset < 0) { + return container; + } + + child = container.firstChild; + while (child && offset > 0) { + --offset; + child = child.nextSibling; + } + + if (child) { + return child; + } + + return container; + } + + function _isCollapsed() { + return (self[START_CONTAINER] == self[END_CONTAINER] && self[START_OFFSET] == self[END_OFFSET]); + } + + function _compareBoundaryPoints(containerA, offsetA, containerB, offsetB) { + var c, offsetC, n, cmnRoot, childA, childB; + + // In the first case the boundary-points have the same container. A is before B + // if its offset is less than the offset of B, A is equal to B if its offset is + // equal to the offset of B, and A is after B if its offset is greater than the + // offset of B. + if (containerA == containerB) { + if (offsetA == offsetB) { + return 0; // equal + } + + if (offsetA < offsetB) { + return -1; // before + } + + return 1; // after + } + + // In the second case a child node C of the container of A is an ancestor + // container of B. In this case, A is before B if the offset of A is less than or + // equal to the index of the child node C and A is after B otherwise. + c = containerB; + while (c && c.parentNode != containerA) { + c = c.parentNode; + } + + if (c) { + offsetC = 0; + n = containerA.firstChild; + + while (n != c && offsetC < offsetA) { + offsetC++; + n = n.nextSibling; + } + + if (offsetA <= offsetC) { + return -1; // before + } + + return 1; // after + } + + // In the third case a child node C of the container of B is an ancestor container + // of A. In this case, A is before B if the index of the child node C is less than + // the offset of B and A is after B otherwise. + c = containerA; + while (c && c.parentNode != containerB) { + c = c.parentNode; + } + + if (c) { + offsetC = 0; + n = containerB.firstChild; + + while (n != c && offsetC < offsetB) { + offsetC++; + n = n.nextSibling; + } + + if (offsetC < offsetB) { + return -1; // before + } + + return 1; // after + } + + // In the fourth case, none of three other cases hold: the containers of A and B + // are siblings or descendants of sibling nodes. In this case, A is before B if + // the container of A is before the container of B in a pre-order traversal of the + // Ranges' context tree and A is after B otherwise. + cmnRoot = dom.findCommonAncestor(containerA, containerB); + childA = containerA; + + while (childA && childA.parentNode != cmnRoot) { + childA = childA.parentNode; + } + + if (!childA) { + childA = cmnRoot; + } + + childB = containerB; + while (childB && childB.parentNode != cmnRoot) { + childB = childB.parentNode; + } + + if (!childB) { + childB = cmnRoot; + } + + if (childA == childB) { + return 0; // equal + } + + n = cmnRoot.firstChild; + while (n) { + if (n == childA) { + return -1; // before + } + + if (n == childB) { + return 1; // after + } + + n = n.nextSibling; + } + } + + function _setEndPoint(st, n, o) { + var ec, sc; + + if (st) { + self[START_CONTAINER] = n; + self[START_OFFSET] = o; + } else { + self[END_CONTAINER] = n; + self[END_OFFSET] = o; + } + + // If one boundary-point of a Range is set to have a root container + // other than the current one for the Range, the Range is collapsed to + // the new position. This enforces the restriction that both boundary- + // points of a Range must have the same root container. + ec = self[END_CONTAINER]; + while (ec.parentNode) { + ec = ec.parentNode; + } + + sc = self[START_CONTAINER]; + while (sc.parentNode) { + sc = sc.parentNode; + } + + if (sc == ec) { + // The start position of a Range is guaranteed to never be after the + // end position. To enforce this restriction, if the start is set to + // be at a position after the end, the Range is collapsed to that + // position. + if (_compareBoundaryPoints(self[START_CONTAINER], self[START_OFFSET], self[END_CONTAINER], self[END_OFFSET]) > 0) { + self.collapse(st); + } + } else { + self.collapse(st); + } + + self.collapsed = _isCollapsed(); + self.commonAncestorContainer = dom.findCommonAncestor(self[START_CONTAINER], self[END_CONTAINER]); + } + + function _traverse(how) { + var c, endContainerDepth = 0, startContainerDepth = 0, p, depthDiff, startNode, endNode, sp, ep; + + if (self[START_CONTAINER] == self[END_CONTAINER]) { + return _traverseSameContainer(how); + } + + for (c = self[END_CONTAINER], p = c.parentNode; p; c = p, p = p.parentNode) { + if (p == self[START_CONTAINER]) { + return _traverseCommonStartContainer(c, how); + } + + ++endContainerDepth; + } + + for (c = self[START_CONTAINER], p = c.parentNode; p; c = p, p = p.parentNode) { + if (p == self[END_CONTAINER]) { + return _traverseCommonEndContainer(c, how); + } + + ++startContainerDepth; + } + + depthDiff = startContainerDepth - endContainerDepth; + + startNode = self[START_CONTAINER]; + while (depthDiff > 0) { + startNode = startNode.parentNode; + depthDiff--; + } + + endNode = self[END_CONTAINER]; + while (depthDiff < 0) { + endNode = endNode.parentNode; + depthDiff++; + } + + // ascend the ancestor hierarchy until we have a common parent. + for (sp = startNode.parentNode, ep = endNode.parentNode; sp != ep; sp = sp.parentNode, ep = ep.parentNode) { + startNode = sp; + endNode = ep; + } + + return _traverseCommonAncestors(startNode, endNode, how); + } + + function _traverseSameContainer(how) { + var frag, s, sub, n, cnt, sibling, xferNode, start, len; + + if (how != DELETE) { + frag = createDocumentFragment(); + } + + // If selection is empty, just return the fragment + if (self[START_OFFSET] == self[END_OFFSET]) { + return frag; + } + + // Text node needs special case handling + if (self[START_CONTAINER].nodeType == 3 /* TEXT_NODE */) { + // get the substring + s = self[START_CONTAINER].nodeValue; + sub = s.substring(self[START_OFFSET], self[END_OFFSET]); + + // set the original text node to its new value + if (how != CLONE) { + n = self[START_CONTAINER]; + start = self[START_OFFSET]; + len = self[END_OFFSET] - self[START_OFFSET]; + + if (start === 0 && len >= n.nodeValue.length - 1) { + n.parentNode.removeChild(n); + } else { + n.deleteData(start, len); + } + + // Nothing is partially selected, so collapse to start point + self.collapse(TRUE); + } + + if (how == DELETE) { + return; + } + + if (sub.length > 0) { + frag.appendChild(doc.createTextNode(sub)); + } + + return frag; + } + + // Copy nodes between the start/end offsets. + n = _getSelectedNode(self[START_CONTAINER], self[START_OFFSET]); + cnt = self[END_OFFSET] - self[START_OFFSET]; + + while (n && cnt > 0) { + sibling = n.nextSibling; + xferNode = _traverseFullySelected(n, how); + + if (frag) { + frag.appendChild(xferNode); + } + + --cnt; + n = sibling; + } + + // Nothing is partially selected, so collapse to start point + if (how != CLONE) { + self.collapse(TRUE); + } + + return frag; + } + + function _traverseCommonStartContainer(endAncestor, how) { + var frag, n, endIdx, cnt, sibling, xferNode; + + if (how != DELETE) { + frag = createDocumentFragment(); + } + + n = _traverseRightBoundary(endAncestor, how); + + if (frag) { + frag.appendChild(n); + } + + endIdx = nodeIndex(endAncestor); + cnt = endIdx - self[START_OFFSET]; + + if (cnt <= 0) { + // Collapse to just before the endAncestor, which + // is partially selected. + if (how != CLONE) { + self.setEndBefore(endAncestor); + self.collapse(FALSE); + } + + return frag; + } + + n = endAncestor.previousSibling; + while (cnt > 0) { + sibling = n.previousSibling; + xferNode = _traverseFullySelected(n, how); + + if (frag) { + frag.insertBefore(xferNode, frag.firstChild); + } + + --cnt; + n = sibling; + } + + // Collapse to just before the endAncestor, which + // is partially selected. + if (how != CLONE) { + self.setEndBefore(endAncestor); + self.collapse(FALSE); + } + + return frag; + } + + function _traverseCommonEndContainer(startAncestor, how) { + var frag, startIdx, n, cnt, sibling, xferNode; + + if (how != DELETE) { + frag = createDocumentFragment(); + } + + n = _traverseLeftBoundary(startAncestor, how); + if (frag) { + frag.appendChild(n); + } + + startIdx = nodeIndex(startAncestor); + ++startIdx; // Because we already traversed it + + cnt = self[END_OFFSET] - startIdx; + n = startAncestor.nextSibling; + while (n && cnt > 0) { + sibling = n.nextSibling; + xferNode = _traverseFullySelected(n, how); + + if (frag) { + frag.appendChild(xferNode); + } + + --cnt; + n = sibling; + } + + if (how != CLONE) { + self.setStartAfter(startAncestor); + self.collapse(TRUE); + } + + return frag; + } + + function _traverseCommonAncestors(startAncestor, endAncestor, how) { + var n, frag, startOffset, endOffset, cnt, sibling, nextSibling; + + if (how != DELETE) { + frag = createDocumentFragment(); + } + + n = _traverseLeftBoundary(startAncestor, how); + if (frag) { + frag.appendChild(n); + } + + startOffset = nodeIndex(startAncestor); + endOffset = nodeIndex(endAncestor); + ++startOffset; + + cnt = endOffset - startOffset; + sibling = startAncestor.nextSibling; + + while (cnt > 0) { + nextSibling = sibling.nextSibling; + n = _traverseFullySelected(sibling, how); + + if (frag) { + frag.appendChild(n); + } + + sibling = nextSibling; + --cnt; + } + + n = _traverseRightBoundary(endAncestor, how); + + if (frag) { + frag.appendChild(n); + } + + if (how != CLONE) { + self.setStartAfter(startAncestor); + self.collapse(TRUE); + } + + return frag; + } + + function _traverseRightBoundary(root, how) { + var next = _getSelectedNode(self[END_CONTAINER], self[END_OFFSET] - 1), parent, clonedParent; + var prevSibling, clonedChild, clonedGrandParent, isFullySelected = next != self[END_CONTAINER]; + + if (next == root) { + return _traverseNode(next, isFullySelected, FALSE, how); + } + + parent = next.parentNode; + clonedParent = _traverseNode(parent, FALSE, FALSE, how); + + while (parent) { + while (next) { + prevSibling = next.previousSibling; + clonedChild = _traverseNode(next, isFullySelected, FALSE, how); + + if (how != DELETE) { + clonedParent.insertBefore(clonedChild, clonedParent.firstChild); + } + + isFullySelected = TRUE; + next = prevSibling; + } + + if (parent == root) { + return clonedParent; + } + + next = parent.previousSibling; + parent = parent.parentNode; + + clonedGrandParent = _traverseNode(parent, FALSE, FALSE, how); + + if (how != DELETE) { + clonedGrandParent.appendChild(clonedParent); + } + + clonedParent = clonedGrandParent; + } + } + + function _traverseLeftBoundary(root, how) { + var next = _getSelectedNode(self[START_CONTAINER], self[START_OFFSET]), isFullySelected = next != self[START_CONTAINER]; + var parent, clonedParent, nextSibling, clonedChild, clonedGrandParent; + + if (next == root) { + return _traverseNode(next, isFullySelected, TRUE, how); + } + + parent = next.parentNode; + clonedParent = _traverseNode(parent, FALSE, TRUE, how); + + while (parent) { + while (next) { + nextSibling = next.nextSibling; + clonedChild = _traverseNode(next, isFullySelected, TRUE, how); + + if (how != DELETE) { + clonedParent.appendChild(clonedChild); + } + + isFullySelected = TRUE; + next = nextSibling; + } + + if (parent == root) { + return clonedParent; + } + + next = parent.nextSibling; + parent = parent.parentNode; + + clonedGrandParent = _traverseNode(parent, FALSE, TRUE, how); + + if (how != DELETE) { + clonedGrandParent.appendChild(clonedParent); + } + + clonedParent = clonedGrandParent; + } + } + + function _traverseNode(n, isFullySelected, isLeft, how) { + var txtValue, newNodeValue, oldNodeValue, offset, newNode; + + if (isFullySelected) { + return _traverseFullySelected(n, how); + } + + if (n.nodeType == 3 /* TEXT_NODE */) { + txtValue = n.nodeValue; + + if (isLeft) { + offset = self[START_OFFSET]; + newNodeValue = txtValue.substring(offset); + oldNodeValue = txtValue.substring(0, offset); + } else { + offset = self[END_OFFSET]; + newNodeValue = txtValue.substring(0, offset); + oldNodeValue = txtValue.substring(offset); + } + + if (how != CLONE) { + n.nodeValue = oldNodeValue; + } + + if (how == DELETE) { + return; + } + + newNode = dom.clone(n, FALSE); + newNode.nodeValue = newNodeValue; + + return newNode; + } + + if (how == DELETE) { + return; + } + + return dom.clone(n, FALSE); + } + + function _traverseFullySelected(n, how) { + if (how != DELETE) { + return how == CLONE ? dom.clone(n, TRUE) : n; + } + + n.parentNode.removeChild(n); + } + + function toStringIE() { + return dom.create('body', null, cloneContents()).outerText; + } + + extend(self, { + // Inital states + startContainer: doc, + startOffset: 0, + endContainer: doc, + endOffset: 0, + collapsed: TRUE, + commonAncestorContainer: doc, + + // Range constants + START_TO_START: 0, + START_TO_END: 1, + END_TO_END: 2, + END_TO_START: 3, + + // Public methods + setStart: setStart, + setEnd: setEnd, + setStartBefore: setStartBefore, + setStartAfter: setStartAfter, + setEndBefore: setEndBefore, + setEndAfter: setEndAfter, + collapse: collapse, + selectNode: selectNode, + selectNodeContents: selectNodeContents, + compareBoundaryPoints: compareBoundaryPoints, + deleteContents: deleteContents, + extractContents: extractContents, + cloneContents: cloneContents, + insertNode: insertNode, + surroundContents: surroundContents, + cloneRange: cloneRange, + toStringIE: toStringIE + }); + + return self; + } + + // Older IE versions doesn't let you override toString by it's constructor so we have to stick it in the prototype + Range.prototype.toString = function() { + return this.toStringIE(); + }; + + return Range; +}); + +// Included from: js/tinymce/classes/html/Entities.js + +/** + * Entities.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*jshint bitwise:false */ +/*eslint no-bitwise:0 */ + +/** + * Entity encoder class. + * + * @class tinymce.html.Entities + * @static + * @version 3.4 + */ +define("tinymce/html/Entities", [ + "tinymce/util/Tools" +], function(Tools) { + var makeMap = Tools.makeMap; + + var namedEntities, baseEntities, reverseEntities, + attrsCharsRegExp = /[&<>\"\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g, + textCharsRegExp = /[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g, + rawCharsRegExp = /[<>&\"\']/g, + entityRegExp = /&(#x|#)?([\w]+);/g, + asciiMap = { + 128: "\u20AC", 130: "\u201A", 131: "\u0192", 132: "\u201E", 133: "\u2026", 134: "\u2020", + 135: "\u2021", 136: "\u02C6", 137: "\u2030", 138: "\u0160", 139: "\u2039", 140: "\u0152", + 142: "\u017D", 145: "\u2018", 146: "\u2019", 147: "\u201C", 148: "\u201D", 149: "\u2022", + 150: "\u2013", 151: "\u2014", 152: "\u02DC", 153: "\u2122", 154: "\u0161", 155: "\u203A", + 156: "\u0153", 158: "\u017E", 159: "\u0178" + }; + + // Raw entities + baseEntities = { + '\"': '"', // Needs to be escaped since the YUI compressor would otherwise break the code + "'": ''', + '<': '<', + '>': '>', + '&': '&' + }; + + // Reverse lookup table for raw entities + reverseEntities = { + '<': '<', + '>': '>', + '&': '&', + '"': '"', + ''': "'" + }; + + // Decodes text by using the browser + function nativeDecode(text) { + var elm; + + elm = document.createElement("div"); + elm.innerHTML = text; + + return elm.textContent || elm.innerText || text; + } + + // Build a two way lookup table for the entities + function buildEntitiesLookup(items, radix) { + var i, chr, entity, lookup = {}; + + if (items) { + items = items.split(','); + radix = radix || 10; + + // Build entities lookup table + for (i = 0; i < items.length; i += 2) { + chr = String.fromCharCode(parseInt(items[i], radix)); + + // Only add non base entities + if (!baseEntities[chr]) { + entity = '&' + items[i + 1] + ';'; + lookup[chr] = entity; + lookup[entity] = chr; + } + } + + return lookup; + } + } + + // Unpack entities lookup where the numbers are in radix 32 to reduce the size + namedEntities = buildEntitiesLookup( + '50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,' + + '5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,' + + '5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,' + + '5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,' + + '68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,' + + '6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,' + + '6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,' + + '75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,' + + '7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,' + + '7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,' + + 'sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,' + + 'st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,' + + 't9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,' + + 'tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,' + + 'u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,' + + '81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,' + + '8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,' + + '8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,' + + '8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,' + + '8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,' + + 'nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,' + + 'rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,' + + 'Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,' + + '80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,' + + '811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro', 32); + + var Entities = { + /** + * Encodes the specified string using raw entities. This means only the required XML base entities will be endoded. + * + * @method encodeRaw + * @param {String} text Text to encode. + * @param {Boolean} attr Optional flag to specify if the text is attribute contents. + * @return {String} Entity encoded text. + */ + encodeRaw: function(text, attr) { + return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function(chr) { + return baseEntities[chr] || chr; + }); + }, + + /** + * Encoded the specified text with both the attributes and text entities. This function will produce larger text contents + * since it doesn't know if the context is within a attribute or text node. This was added for compatibility + * and is exposed as the DOMUtils.encode function. + * + * @method encodeAllRaw + * @param {String} text Text to encode. + * @return {String} Entity encoded text. + */ + encodeAllRaw: function(text) { + return ('' + text).replace(rawCharsRegExp, function(chr) { + return baseEntities[chr] || chr; + }); + }, + + /** + * Encodes the specified string using numeric entities. The core entities will be + * encoded as named ones but all non lower ascii characters will be encoded into numeric entities. + * + * @method encodeNumeric + * @param {String} text Text to encode. + * @param {Boolean} attr Optional flag to specify if the text is attribute contents. + * @return {String} Entity encoded text. + */ + encodeNumeric: function(text, attr) { + return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function(chr) { + // Multi byte sequence convert it to a single entity + if (chr.length > 1) { + return '&#' + (((chr.charCodeAt(0) - 0xD800) * 0x400) + (chr.charCodeAt(1) - 0xDC00) + 0x10000) + ';'; + } + + return baseEntities[chr] || '&#' + chr.charCodeAt(0) + ';'; + }); + }, + + /** + * Encodes the specified string using named entities. The core entities will be encoded + * as named ones but all non lower ascii characters will be encoded into named entities. + * + * @method encodeNamed + * @param {String} text Text to encode. + * @param {Boolean} attr Optional flag to specify if the text is attribute contents. + * @param {Object} entities Optional parameter with entities to use. + * @return {String} Entity encoded text. + */ + encodeNamed: function(text, attr, entities) { + entities = entities || namedEntities; + + return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function(chr) { + return baseEntities[chr] || entities[chr] || chr; + }); + }, + + /** + * Returns an encode function based on the name(s) and it's optional entities. + * + * @method getEncodeFunc + * @param {String} name Comma separated list of encoders for example named,numeric. + * @param {String} entities Optional parameter with entities to use instead of the built in set. + * @return {function} Encode function to be used. + */ + getEncodeFunc: function(name, entities) { + entities = buildEntitiesLookup(entities) || namedEntities; + + function encodeNamedAndNumeric(text, attr) { + return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function(chr) { + return baseEntities[chr] || entities[chr] || '&#' + chr.charCodeAt(0) + ';' || chr; + }); + } + + function encodeCustomNamed(text, attr) { + return Entities.encodeNamed(text, attr, entities); + } + + // Replace + with , to be compatible with previous TinyMCE versions + name = makeMap(name.replace(/\+/g, ',')); + + // Named and numeric encoder + if (name.named && name.numeric) { + return encodeNamedAndNumeric; + } + + // Named encoder + if (name.named) { + // Custom names + if (entities) { + return encodeCustomNamed; + } + + return Entities.encodeNamed; + } + + // Numeric + if (name.numeric) { + return Entities.encodeNumeric; + } + + // Raw encoder + return Entities.encodeRaw; + }, + + /** + * Decodes the specified string, this will replace entities with raw UTF characters. + * + * @method decode + * @param {String} text Text to entity decode. + * @return {String} Entity decoded string. + */ + decode: function(text) { + return text.replace(entityRegExp, function(all, numeric, value) { + if (numeric) { + value = parseInt(value, numeric.length === 2 ? 16 : 10); + + // Support upper UTF + if (value > 0xFFFF) { + value -= 0x10000; + + return String.fromCharCode(0xD800 + (value >> 10), 0xDC00 + (value & 0x3FF)); + } else { + return asciiMap[value] || String.fromCharCode(value); + } + } + + return reverseEntities[all] || namedEntities[all] || nativeDecode(all); + }); + } + }; + + return Entities; +}); + +// Included from: js/tinymce/classes/Env.js + +/** + * Env.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class contains various environment constants like browser versions etc. + * Normally you don't want to sniff specific browser versions but sometimes you have + * to when it's impossible to feature detect. So use this with care. + * + * @class tinymce.Env + * @static + */ +define("tinymce/Env", [], function() { + var nav = navigator, userAgent = nav.userAgent; + var opera, webkit, ie, ie11, gecko, mac, iDevice; + + opera = window.opera && window.opera.buildNumber; + webkit = /WebKit/.test(userAgent); + ie = !webkit && !opera && (/MSIE/gi).test(userAgent) && (/Explorer/gi).test(nav.appName); + ie = ie && /MSIE (\w+)\./.exec(userAgent)[1]; + ie11 = userAgent.indexOf('Trident/') != -1 && (userAgent.indexOf('rv:') != -1 || nav.appName.indexOf('Netscape') != -1) ? 11 : false; + ie = ie || ie11; + gecko = !webkit && !ie11 && /Gecko/.test(userAgent); + mac = userAgent.indexOf('Mac') != -1; + iDevice = /(iPad|iPhone)/.test(userAgent); + + // Is a iPad/iPhone and not on iOS5 sniff the WebKit version since older iOS WebKit versions + // says it has contentEditable support but there is no visible caret. + var contentEditable = !iDevice || userAgent.match(/AppleWebKit\/(\d*)/)[1] >= 534; + + return { + /** + * Constant that is true if the browser is Opera. + * + * @property opera + * @type Boolean + * @final + */ + opera: opera, + + /** + * Constant that is true if the browser is WebKit (Safari/Chrome). + * + * @property webKit + * @type Boolean + * @final + */ + webkit: webkit, + + /** + * Constant that is more than zero if the browser is IE. + * + * @property ie + * @type Boolean + * @final + */ + ie: ie, + + /** + * Constant that is true if the browser is Gecko. + * + * @property gecko + * @type Boolean + * @final + */ + gecko: gecko, + + /** + * Constant that is true if the os is Mac OS. + * + * @property mac + * @type Boolean + * @final + */ + mac: mac, + + /** + * Constant that is true if the os is iOS. + * + * @property iOS + * @type Boolean + * @final + */ + iOS: iDevice, + + /** + * Constant that is true if the browser supports editing. + * + * @property contentEditable + * @type Boolean + * @final + */ + contentEditable: contentEditable, + + /** + * Transparent image data url. + * + * @property transparentSrc + * @type Boolean + * @final + */ + transparentSrc: "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7", + + /** + * Returns true/false if the browser can or can't place the caret after a inline block like an image. + * + * @property noCaretAfter + * @type Boolean + * @final + */ + caretAfter: ie != 8, + + /** + * Constant that is true if the browser supports native DOM Ranges. IE 9+. + * + * @property range + * @type Boolean + */ + range: window.getSelection && "Range" in window, + + /** + * Returns the IE document mode for non IE browsers this will fake IE 10. + * + * @property documentMode + * @type Number + */ + documentMode: ie ? (document.documentMode || 7) : 10 + }; +}); + +// Included from: js/tinymce/classes/dom/StyleSheetLoader.js + +/** + * StyleSheetLoader.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class handles loading of external stylesheets and fires events when these are loaded. + * + * @class tinymce.dom.StyleSheetLoader + * @private + */ +define("tinymce/dom/StyleSheetLoader", [], function() { + "use strict"; + + return function(document, settings) { + var idCount = 0, loadedStates = {}, maxLoadTime; + + settings = settings || {}; + maxLoadTime = settings.maxLoadTime || 5000; + + function appendToHead(node) { + document.getElementsByTagName('head')[0].appendChild(node); + } + + /** + * Loads the specified css style sheet file and call the loadedCallback once it's finished loading. + * + * @method load + * @param {String} url Url to be loaded. + * @param {Function} loadedCallback Callback to be executed when loaded. + * @param {Function} errorCallback Callback to be executed when failed loading. + */ + function load(url, loadedCallback, errorCallback) { + var link, style, startTime, state; + + function passed() { + var callbacks = state.passed, i = callbacks.length; + + while (i--) { + callbacks[i](); + } + + state.status = 2; + state.passed = []; + state.failed = []; + } + + function failed() { + var callbacks = state.failed, i = callbacks.length; + + while (i--) { + callbacks[i](); + } + + state.status = 3; + state.passed = []; + state.failed = []; + } + + // Sniffs for older WebKit versions that have the link.onload but a broken one + function isOldWebKit() { + var webKitChunks = navigator.userAgent.match(/WebKit\/(\d*)/); + return !!(webKitChunks && webKitChunks[1] < 536); + } + + // Calls the waitCallback until the test returns true or the timeout occurs + function wait(testCallback, waitCallback) { + if (!testCallback()) { + // Wait for timeout + if ((new Date().getTime()) - startTime < maxLoadTime) { + window.setTimeout(waitCallback, 0); + } else { + failed(); + } + } + } + + // Workaround for WebKit that doesn't properly support the onload event for link elements + // Or WebKit that fires the onload event before the StyleSheet is added to the document + function waitForWebKitLinkLoaded() { + wait(function() { + var styleSheets = document.styleSheets, styleSheet, i = styleSheets.length, owner; + + while (i--) { + styleSheet = styleSheets[i]; + owner = styleSheet.ownerNode ? styleSheet.ownerNode : styleSheet.owningElement; + if (owner && owner.id === link.id) { + passed(); + return true; + } + } + }, waitForWebKitLinkLoaded); + } + + // Workaround for older Geckos that doesn't have any onload event for StyleSheets + function waitForGeckoLinkLoaded() { + wait(function() { + try { + // Accessing the cssRules will throw an exception until the CSS file is loaded + var cssRules = style.sheet.cssRules; + passed(); + return !!cssRules; + } catch (ex) { + // Ignore + } + }, waitForGeckoLinkLoaded); + } + + if (!loadedStates[url]) { + state = { + passed: [], + failed: [] + }; + + loadedStates[url] = state; + } else { + state = loadedStates[url]; + } + + if (loadedCallback) { + state.passed.push(loadedCallback); + } + + if (errorCallback) { + state.failed.push(errorCallback); + } + + // Is loading wait for it to pass + if (state.status == 1) { + return; + } + + // Has finished loading and was success + if (state.status == 2) { + passed(); + return; + } + + // Has finished loading and was a failure + if (state.status == 3) { + failed(); + return; + } + + // Start loading + state.status = 1; + link = document.createElement('link'); + link.rel = 'stylesheet'; + link.type = 'text/css'; + link.id = 'u' + (idCount++); + link.async = false; + link.defer = false; + startTime = new Date().getTime(); + + // Feature detect onload on link element and sniff older webkits since it has an broken onload event + if ("onload" in link && !isOldWebKit()) { + link.onload = waitForWebKitLinkLoaded; + link.onerror = failed; + } else { + // Sniff for old Firefox that doesn't support the onload event on link elements + // TODO: Remove this in the future when everyone uses modern browsers + if (navigator.userAgent.indexOf("Firefox") > 0) { + style = document.createElement('style'); + style.textContent = '@import "' + url + '"'; + waitForGeckoLinkLoaded(); + appendToHead(style); + return; + } else { + // Use the id owner on older webkits + waitForWebKitLinkLoaded(); + } + } + + appendToHead(link); + link.href = url; + } + + this.load = load; + }; +}); + +// Included from: js/tinymce/classes/dom/DOMUtils.js + +/** + * DOMUtils.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Utility class for various DOM manipulation and retrieval functions. + * + * @class tinymce.dom.DOMUtils + * @example + * // Add a class to an element by id in the page + * tinymce.DOM.addClass('someid', 'someclass'); + * + * // Add a class to an element by id inside the editor + * tinymce.activeEditor.dom.addClass('someid', 'someclass'); + */ +define("tinymce/dom/DOMUtils", [ + "tinymce/dom/Sizzle", + "tinymce/html/Styles", + "tinymce/dom/EventUtils", + "tinymce/dom/TreeWalker", + "tinymce/dom/Range", + "tinymce/html/Entities", + "tinymce/Env", + "tinymce/util/Tools", + "tinymce/dom/StyleSheetLoader" +], function(Sizzle, Styles, EventUtils, TreeWalker, Range, Entities, Env, Tools, StyleSheetLoader) { + // Shorten names + var each = Tools.each, is = Tools.is, grep = Tools.grep, trim = Tools.trim, extend = Tools.extend; + var isWebKit = Env.webkit, isIE = Env.ie; + var simpleSelectorRe = /^([a-z0-9],?)+$/i; + var whiteSpaceRegExp = /^[ \t\r\n]*$/; + var numericCssMap = Tools.makeMap('fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom', ' '); + + /** + * Constructs a new DOMUtils instance. Consult the Wiki for more details on settings etc for this class. + * + * @constructor + * @method DOMUtils + * @param {Document} d Document reference to bind the utility class to. + * @param {settings} s Optional settings collection. + */ + function DOMUtils(doc, settings) { + var self = this, blockElementsMap; + + self.doc = doc; + self.win = window; + self.files = {}; + self.counter = 0; + self.stdMode = !isIE || doc.documentMode >= 8; + self.boxModel = !isIE || doc.compatMode == "CSS1Compat" || self.stdMode; + self.hasOuterHTML = "outerHTML" in doc.createElement("a"); + self.styleSheetLoader = new StyleSheetLoader(doc); + this.boundEvents = []; + + self.settings = settings = extend({ + keep_values: false, + hex_colors: 1 + }, settings); + + self.schema = settings.schema; + self.styles = new Styles({ + url_converter: settings.url_converter, + url_converter_scope: settings.url_converter_scope + }, settings.schema); + + self.fixDoc(doc); + self.events = settings.ownEvents ? new EventUtils(settings.proxy) : EventUtils.Event; + blockElementsMap = settings.schema ? settings.schema.getBlockElements() : {}; + + /** + * Returns true/false if the specified element is a block element or not. + * + * @method isBlock + * @param {Node/String} node Element/Node to check. + * @return {Boolean} True/False state if the node is a block element or not. + */ + self.isBlock = function(node) { + // Fix for #5446 + if (!node) { + return false; + } + + // This function is called in module pattern style since it might be executed with the wrong this scope + var type = node.nodeType; + + // If it's a node then check the type and use the nodeName + if (type) { + return !!(type === 1 && blockElementsMap[node.nodeName]); + } + + return !!blockElementsMap[node]; + }; + } + + DOMUtils.prototype = { + root: null, + props: { + "for": "htmlFor", + "class": "className", + className: "className", + checked: "checked", + disabled: "disabled", + maxlength: "maxLength", + readonly: "readOnly", + selected: "selected", + value: "value", + id: "id", + name: "name", + type: "type" + }, + + fixDoc: function(doc) { + var settings = this.settings, name; + + if (isIE && settings.schema) { + // Add missing HTML 4/5 elements to IE + ('abbr article aside audio canvas ' + + 'details figcaption figure footer ' + + 'header hgroup mark menu meter nav ' + + 'output progress section summary ' + + 'time video').replace(/\w+/g, function(name) { + doc.createElement(name); + }); + + // Create all custom elements + for (name in settings.schema.getCustomElements()) { + doc.createElement(name); + } + } + }, + + clone: function(node, deep) { + var self = this, clone, doc; + + // TODO: Add feature detection here in the future + if (!isIE || node.nodeType !== 1 || deep) { + return node.cloneNode(deep); + } + + doc = self.doc; + + // Make a HTML5 safe shallow copy + if (!deep) { + clone = doc.createElement(node.nodeName); + + // Copy attribs + each(self.getAttribs(node), function(attr) { + self.setAttrib(clone, attr.nodeName, self.getAttrib(node, attr.nodeName)); + }); + + return clone; + } +/* + // Setup HTML5 patched document fragment + if (!self.frag) { + self.frag = doc.createDocumentFragment(); + self.fixDoc(self.frag); + } + + // Make a deep copy by adding it to the document fragment then removing it this removed the :section + clone = doc.createElement('div'); + self.frag.appendChild(clone); + clone.innerHTML = node.outerHTML; + self.frag.removeChild(clone); +*/ + return clone.firstChild; + }, + + /** + * Returns the root node of the document. This is normally the body but might be a DIV. Parents like getParent will not + * go above the point of this root node. + * + * @method getRoot + * @return {Element} Root element for the utility class. + */ + getRoot: function() { + var self = this; + + return self.get(self.settings.root_element) || self.doc.body; + }, + + /** + * Returns the viewport of the window. + * + * @method getViewPort + * @param {Window} win Optional window to get viewport of. + * @return {Object} Viewport object with fields x, y, w and h. + */ + getViewPort: function(win) { + var doc, rootElm; + + win = !win ? this.win : win; + doc = win.document; + rootElm = this.boxModel ? doc.documentElement : doc.body; + + // Returns viewport size excluding scrollbars + return { + x: win.pageXOffset || rootElm.scrollLeft, + y: win.pageYOffset || rootElm.scrollTop, + w: win.innerWidth || rootElm.clientWidth, + h: win.innerHeight || rootElm.clientHeight + }; + }, + + /** + * Returns the rectangle for a specific element. + * + * @method getRect + * @param {Element/String} elm Element object or element ID to get rectangle from. + * @return {object} Rectangle for specified element object with x, y, w, h fields. + */ + getRect: function(elm) { + var self = this, pos, size; + + elm = self.get(elm); + pos = self.getPos(elm); + size = self.getSize(elm); + + return { + x: pos.x, y: pos.y, + w: size.w, h: size.h + }; + }, + + /** + * Returns the size dimensions of the specified element. + * + * @method getSize + * @param {Element/String} elm Element object or element ID to get rectangle from. + * @return {object} Rectangle for specified element object with w, h fields. + */ + getSize: function(elm) { + var self = this, w, h; + + elm = self.get(elm); + w = self.getStyle(elm, 'width'); + h = self.getStyle(elm, 'height'); + + // Non pixel value, then force offset/clientWidth + if (w.indexOf('px') === -1) { + w = 0; + } + + // Non pixel value, then force offset/clientWidth + if (h.indexOf('px') === -1) { + h = 0; + } + + return { + w: parseInt(w, 10) || elm.offsetWidth || elm.clientWidth, + h: parseInt(h, 10) || elm.offsetHeight || elm.clientHeight + }; + }, + + /** + * Returns a node by the specified selector function. This function will + * loop through all parent nodes and call the specified function for each node. + * If the function then returns true indicating that it has found what it was looking for, the loop execution will then end + * and the node it found will be returned. + * + * @method getParent + * @param {Node/String} node DOM node to search parents on or ID string. + * @param {function} selector Selection function or CSS selector to execute on each node. + * @param {Node} root Optional root element, never go below this point. + * @return {Node} DOM Node or null if it wasn't found. + */ + getParent: function(node, selector, root) { + return this.getParents(node, selector, root, false); + }, + + /** + * Returns a node list of all parents matching the specified selector function or pattern. + * If the function then returns true indicating that it has found what it was looking for and that node will be collected. + * + * @method getParents + * @param {Node/String} node DOM node to search parents on or ID string. + * @param {function} selector Selection function to execute on each node or CSS pattern. + * @param {Node} root Optional root element, never go below this point. + * @return {Array} Array of nodes or null if it wasn't found. + */ + getParents: function(node, selector, root, collect) { + var self = this, selectorVal, result = []; + + node = self.get(node); + collect = collect === undefined; + + // Default root on inline mode + root = root || (self.getRoot().nodeName != 'BODY' ? self.getRoot().parentNode : null); + + // Wrap node name as func + if (is(selector, 'string')) { + selectorVal = selector; + + if (selector === '*') { + selector = function(node) {return node.nodeType == 1;}; + } else { + selector = function(node) { + return self.is(node, selectorVal); + }; + } + } + + while (node) { + if (node == root || !node.nodeType || node.nodeType === 9) { + break; + } + + if (!selector || selector(node)) { + if (collect) { + result.push(node); + } else { + return node; + } + } + + node = node.parentNode; + } + + return collect ? result : null; + }, + + /** + * Returns the specified element by ID or the input element if it isn't a string. + * + * @method get + * @param {String/Element} n Element id to look for or element to just pass though. + * @return {Element} Element matching the specified id or null if it wasn't found. + */ + get: function(elm) { + var name; + + if (elm && this.doc && typeof(elm) == 'string') { + name = elm; + elm = this.doc.getElementById(elm); + + // IE and Opera returns meta elements when they match the specified input ID, but getElementsByName seems to do the trick + if (elm && elm.id !== name) { + return this.doc.getElementsByName(name)[1]; + } + } + + return elm; + }, + + /** + * Returns the next node that matches selector or function + * + * @method getNext + * @param {Node} node Node to find siblings from. + * @param {String/function} selector Selector CSS expression or function. + * @return {Node} Next node item matching the selector or null if it wasn't found. + */ + getNext: function(node, selector) { + return this._findSib(node, selector, 'nextSibling'); + }, + + /** + * Returns the previous node that matches selector or function + * + * @method getPrev + * @param {Node} node Node to find siblings from. + * @param {String/function} selector Selector CSS expression or function. + * @return {Node} Previous node item matching the selector or null if it wasn't found. + */ + getPrev: function(node, selector) { + return this._findSib(node, selector, 'previousSibling'); + }, + + // #ifndef jquery + + /** + * Selects specific elements by a CSS level 3 pattern. For example "div#a1 p.test". + * This function is optimized for the most common patterns needed in TinyMCE but it also performs well enough + * on more complex patterns. + * + * @method select + * @param {String} selector CSS level 3 pattern to select/find elements by. + * @param {Object} scope Optional root element/scope element to search in. + * @return {Array} Array with all matched elements. + * @example + * // Adds a class to all paragraphs in the currently active editor + * tinymce.activeEditor.dom.addClass(tinymce.activeEditor.dom.select('p'), 'someclass'); + * + * // Adds a class to all spans that have the test class in the currently active editor + * tinymce.activeEditor.dom.addClass(tinymce.activeEditor.dom.select('span.test'), 'someclass') + */ + select: function(selector, scope) { + var self = this; + + //Sizzle.selectors.cacheLength = 0; + return Sizzle(selector, self.get(scope) || self.get(self.settings.root_element) || self.doc, []); + }, + + /** + * Returns true/false if the specified element matches the specified css pattern. + * + * @method is + * @param {Node/NodeList} elm DOM node to match or an array of nodes to match. + * @param {String} selector CSS pattern to match the element against. + */ + is: function(elm, selector) { + var i; + + // If it isn't an array then try to do some simple selectors instead of Sizzle for to boost performance + if (elm.length === undefined) { + // Simple all selector + if (selector === '*') { + return elm.nodeType == 1; + } + + // Simple selector just elements + if (simpleSelectorRe.test(selector)) { + selector = selector.toLowerCase().split(/,/); + elm = elm.nodeName.toLowerCase(); + + for (i = selector.length - 1; i >= 0; i--) { + if (selector[i] == elm) { + return true; + } + } + + return false; + } + } + + // Is non element + if (elm.nodeType && elm.nodeType != 1) { + return false; + } + + var elms = elm.nodeType ? [elm] : elm; + return Sizzle(selector, elms[0].ownerDocument || elms[0], null, elms).length > 0; + }, + + // #endif + + /** + * Adds the specified element to another element or elements. + * + * @method add + * @param {String/Element/Array} parentElm Element id string, DOM node element or array of ids or elements to add to. + * @param {String/Element} name Name of new element to add or existing element to add. + * @param {Object} attrs Optional object collection with arguments to add to the new element(s). + * @param {String} html Optional inner HTML contents to add for each element. + * @return {Element/Array} Element that got created, or an array of created elements if multiple input elements + * were passed in. + * @example + * // Adds a new paragraph to the end of the active editor + * tinymce.activeEditor.dom.add(tinymce.activeEditor.getBody(), 'p', {title: 'my title'}, 'Some content'); + */ + add: function(parentElm, name, attrs, html, create) { + var self = this; + + return this.run(parentElm, function(parentElm) { + var newElm; + + newElm = is(name, 'string') ? self.doc.createElement(name) : name; + self.setAttribs(newElm, attrs); + + if (html) { + if (html.nodeType) { + newElm.appendChild(html); + } else { + self.setHTML(newElm, html); + } + } + + return !create ? parentElm.appendChild(newElm) : newElm; + }); + }, + + /** + * Creates a new element. + * + * @method create + * @param {String} name Name of new element. + * @param {Object} attrs Optional object name/value collection with element attributes. + * @param {String} html Optional HTML string to set as inner HTML of the element. + * @return {Element} HTML DOM node element that got created. + * @example + * // Adds an element where the caret/selection is in the active editor + * var el = tinymce.activeEditor.dom.create('div', {id: 'test', 'class': 'myclass'}, 'some content'); + * tinymce.activeEditor.selection.setNode(el); + */ + create: function(name, attrs, html) { + return this.add(this.doc.createElement(name), name, attrs, html, 1); + }, + + /** + * Creates HTML string for element. The element will be closed unless an empty inner HTML string is passed in. + * + * @method createHTML + * @param {String} name Name of new element. + * @param {Object} attrs Optional object name/value collection with element attributes. + * @param {String} html Optional HTML string to set as inner HTML of the element. + * @return {String} String with new HTML element, for example: test. + * @example + * // Creates a html chunk and inserts it at the current selection/caret location + * tinymce.activeEditor.selection.setContent(tinymce.activeEditor.dom.createHTML('a', {href: 'test.html'}, 'some line')); + */ + createHTML: function(name, attrs, html) { + var outHtml = '', key; + + outHtml += '<' + name; + + for (key in attrs) { + if (attrs.hasOwnProperty(key) && attrs[key] !== null) { + outHtml += ' ' + key + '="' + this.encode(attrs[key]) + '"'; + } + } + + // A call to tinymce.is doesn't work for some odd reason on IE9 possible bug inside their JS runtime + if (typeof(html) != "undefined") { + return outHtml + '>' + html + ''; + } + + return outHtml + ' />'; + }, + + /** + * Creates a document fragment out of the specified HTML string. + * + * @method createFragment + * @param {String} html Html string to create fragment from. + * @return {DocumentFragment} Document fragment node. + */ + createFragment: function(html) { + var frag, node, doc = this.doc, container; + + container = doc.createElement("div"); + frag = doc.createDocumentFragment(); + + if (html) { + container.innerHTML = html; + } + + while ((node = container.firstChild)) { + frag.appendChild(node); + } + + return frag; + }, + + /** + * Removes/deletes the specified element(s) from the DOM. + * + * @method remove + * @param {String/Element/Array} node ID of element or DOM element object or array containing multiple elements/ids. + * @param {Boolean} keep_children Optional state to keep children or not. If set to true all children will be + * placed at the location of the removed element. + * @return {Element/Array} HTML DOM element that got removed, or an array of removed elements if multiple input elements + * were passed in. + * @example + * // Removes all paragraphs in the active editor + * tinymce.activeEditor.dom.remove(tinymce.activeEditor.dom.select('p')); + * + * // Removes an element by id in the document + * tinymce.DOM.remove('mydiv'); + */ + remove: function(node, keep_children) { + return this.run(node, function(node) { + var child, parent = node.parentNode; + + if (!parent) { + return null; + } + + if (keep_children) { + while ((child = node.firstChild)) { + // IE 8 will crash if you don't remove completely empty text nodes + if (!isIE || child.nodeType !== 3 || child.nodeValue) { + parent.insertBefore(child, node); + } else { + node.removeChild(child); + } + } + } + + return parent.removeChild(node); + }); + }, + + /** + * Sets the CSS style value on a HTML element. The name can be a camelcase string + * or the CSS style name like background-color. + * + * @method setStyle + * @param {String/Element/Array} n HTML element/Element ID or Array of elements/ids to set CSS style value on. + * @param {String} na Name of the style value to set. + * @param {String} v Value to set on the style. + * @example + * // Sets a style value on all paragraphs in the currently active editor + * tinymce.activeEditor.dom.setStyle(tinymce.activeEditor.dom.select('p'), 'background-color', 'red'); + * + * // Sets a style value to an element by id in the current document + * tinymce.DOM.setStyle('mydiv', 'background-color', 'red'); + */ + setStyle: function(elm, name, value) { + return this.run(elm, function(elm) { + var self = this, style, key; + + if (name) { + if (typeof(name) === 'string') { + style = elm.style; + + // Camelcase it, if needed + name = name.replace(/-(\D)/g, function(a, b) { + return b.toUpperCase(); + }); + + // Default px suffix on these + if (typeof(value) === 'number' && !numericCssMap[name]) { + value += 'px'; + } + + // IE specific opacity + if (name === "opacity" && elm.runtimeStyle && typeof(elm.runtimeStyle.opacity) === "undefined") { + style.filter = value === '' ? '' : "alpha(opacity=" + (value * 100) + ")"; + } + + if (name == "float") { + // Old IE vs modern browsers + name = "cssFloat" in elm.style ? "cssFloat" : "styleFloat"; + } + + try { + style[name] = value; + } catch (ex) { + // Ignore IE errors + } + + // Force update of the style data + if (self.settings.update_styles) { + elm.removeAttribute('data-mce-style'); + } + } else { + for (key in name) { + self.setStyle(elm, key, name[key]); + } + } + } + }); + }, + + /** + * Returns the current style or runtime/computed value of an element. + * + * @method getStyle + * @param {String/Element} elm HTML element or element id string to get style from. + * @param {String} name Style name to return. + * @param {Boolean} computed Computed style. + * @return {String} Current style or computed style value of an element. + */ + getStyle: function(elm, name, computed) { + elm = this.get(elm); + + if (!elm) { + return; + } + + // W3C + if (this.doc.defaultView && computed) { + // Remove camelcase + name = name.replace(/[A-Z]/g, function(a){ + return '-' + a; + }); + + try { + return this.doc.defaultView.getComputedStyle(elm, null).getPropertyValue(name); + } catch (ex) { + // Old safari might fail + return null; + } + } + + // Camelcase it, if needed + name = name.replace(/-(\D)/g, function(a, b) { + return b.toUpperCase(); + }); + + if (name == 'float') { + name = isIE ? 'styleFloat' : 'cssFloat'; + } + + // IE & Opera + if (elm.currentStyle && computed) { + return elm.currentStyle[name]; + } + + return elm.style ? elm.style[name] : undefined; + }, + + /** + * Sets multiple styles on the specified element(s). + * + * @method setStyles + * @param {Element/String/Array} e DOM element, element id string or array of elements/ids to set styles on. + * @param {Object} o Name/Value collection of style items to add to the element(s). + * @example + * // Sets styles on all paragraphs in the currently active editor + * tinymce.activeEditor.dom.setStyles(tinymce.activeEditor.dom.select('p'), {'background-color': 'red', 'color': 'green'}); + * + * // Sets styles to an element by id in the current document + * tinymce.DOM.setStyles('mydiv', {'background-color': 'red', 'color': 'green'}); + */ + setStyles: function(elm, styles) { + this.setStyle(elm, styles); + }, + + css: function(elm, name, value) { + this.setStyle(elm, name, value); + }, + + /** + * Removes all attributes from an element or elements. + * + * @method removeAllAttribs + * @param {Element/String/Array} e DOM element, element id string or array of elements/ids to remove attributes from. + */ + removeAllAttribs: function(e) { + return this.run(e, function(e) { + var i, attrs = e.attributes; + for (i = attrs.length - 1; i >= 0; i--) { + e.removeAttributeNode(attrs.item(i)); + } + }); + }, + + /** + * Sets the specified attribute of an element or elements. + * + * @method setAttrib + * @param {Element/String/Array} e DOM element, element id string or array of elements/ids to set attribute on. + * @param {String} n Name of attribute to set. + * @param {String} v Value to set on the attribute - if this value is falsy like null, 0 or '' it will remove the attribute instead. + * @example + * // Sets class attribute on all paragraphs in the active editor + * tinymce.activeEditor.dom.setAttrib(tinymce.activeEditor.dom.select('p'), 'class', 'myclass'); + * + * // Sets class attribute on a specific element in the current page + * tinymce.dom.setAttrib('mydiv', 'class', 'myclass'); + */ + setAttrib: function(e, n, v) { + var self = this; + + // What's the point + if (!e || !n) { + return; + } + + return this.run(e, function(e) { + var s = self.settings; + var originalValue = e.getAttribute(n); + if (v !== null) { + switch (n) { + case "style": + if (!is(v, 'string')) { + each(v, function(v, n) { + self.setStyle(e, n, v); + }); + + return; + } + + // No mce_style for elements with these since they might get resized by the user + if (s.keep_values) { + if (v) { + e.setAttribute('data-mce-style', v, 2); + } else { + e.removeAttribute('data-mce-style', 2); + } + } + + e.style.cssText = v; + break; + + case "class": + e.className = v || ''; // Fix IE null bug + break; + + case "src": + case "href": + if (s.keep_values) { + if (s.url_converter) { + v = s.url_converter.call(s.url_converter_scope || self, v, n, e); + } + + self.setAttrib(e, 'data-mce-' + n, v, 2); + } + + break; + + case "shape": + e.setAttribute('data-mce-style', v); + break; + } + } + if (is(v) && v !== null && v.length !== 0) { + e.setAttribute(n, '' + v, 2); + } else { + e.removeAttribute(n, 2); + } + + // fire onChangeAttrib event for attributes that have changed + if (originalValue != v && s.onSetAttrib) { + s.onSetAttrib({attrElm: e, attrName: n, attrValue: v}); + } + }); + }, + + /** + * Sets two or more specified attributes of an element or elements. + * + * @method setAttribs + * @param {Element/String/Array} elm DOM element, element id string or array of elements/ids to set attributes on. + * @param {Object} attrs Name/Value collection of attribute items to add to the element(s). + * @example + * // Sets class and title attributes on all paragraphs in the active editor + * tinymce.activeEditor.dom.setAttribs(tinymce.activeEditor.dom.select('p'), {'class': 'myclass', title: 'some title'}); + * + * // Sets class and title attributes on a specific element in the current page + * tinymce.DOM.setAttribs('mydiv', {'class': 'myclass', title: 'some title'}); + */ + setAttribs: function(elm, attrs) { + var self = this; + + return this.run(elm, function(elm) { + each(attrs, function(value, name) { + self.setAttrib(elm, name, value); + }); + }); + }, + + /** + * Returns the specified attribute by name. + * + * @method getAttrib + * @param {String/Element} elm Element string id or DOM element to get attribute from. + * @param {String} name Name of attribute to get. + * @param {String} defaultVal Optional default value to return if the attribute didn't exist. + * @return {String} Attribute value string, default value or null if the attribute wasn't found. + */ + getAttrib: function(elm, name, defaultVal) { + var value, self = this, undef; + + elm = self.get(elm); + + if (!elm || elm.nodeType !== 1) { + return defaultVal === undef ? false : defaultVal; + } + + if (!is(defaultVal)) { + defaultVal = ''; + } + + // Try the mce variant for these + if (/^(src|href|style|coords|shape)$/.test(name)) { + value = elm.getAttribute("data-mce-" + name); + + if (value) { + return value; + } + } + + if (isIE && self.props[name]) { + value = elm[self.props[name]]; + value = value && value.nodeValue ? value.nodeValue : value; + } + + if (!value) { + value = elm.getAttribute(name, 2); + } + + // Check boolean attribs + if (/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(name)) { + if (elm[self.props[name]] === true && value === '') { + return name; + } + + return value ? name : ''; + } + + // Inner input elements will override attributes on form elements + if (elm.nodeName === "FORM" && elm.getAttributeNode(name)) { + return elm.getAttributeNode(name).nodeValue; + } + + if (name === 'style') { + value = value || elm.style.cssText; + + if (value) { + value = self.serializeStyle(self.parseStyle(value), elm.nodeName); + + if (self.settings.keep_values) { + elm.setAttribute('data-mce-style', value); + } + } + } + + // Remove Apple and WebKit stuff + if (isWebKit && name === "class" && value) { + value = value.replace(/(apple|webkit)\-[a-z\-]+/gi, ''); + } + + // Handle IE issues + if (isIE) { + switch (name) { + case 'rowspan': + case 'colspan': + // IE returns 1 as default value + if (value === 1) { + value = ''; + } + + break; + + case 'size': + // IE returns +0 as default value for size + if (value === '+0' || value === 20 || value === 0) { + value = ''; + } + + break; + + case 'width': + case 'height': + case 'vspace': + case 'checked': + case 'disabled': + case 'readonly': + if (value === 0) { + value = ''; + } + + break; + + case 'hspace': + // IE returns -1 as default value + if (value === -1) { + value = ''; + } + + break; + + case 'maxlength': + case 'tabindex': + // IE returns default value + if (value === 32768 || value === 2147483647 || value === '32768') { + value = ''; + } + + break; + + case 'multiple': + case 'compact': + case 'noshade': + case 'nowrap': + if (value === 65535) { + return name; + } + + return defaultVal; + + case 'shape': + value = value.toLowerCase(); + break; + + default: + // IE has odd anonymous function for event attributes + if (name.indexOf('on') === 0 && value) { + value = ('' + value).replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/, '$1'); + } + } + } + + return (value !== undef && value !== null && value !== '') ? '' + value : defaultVal; + }, + + /** + * Returns the absolute x, y position of a node. The position will be returned in an object with x, y fields. + * + * @method getPos + * @param {Element/String} elm HTML element or element id to get x, y position from. + * @param {Element} rootElm Optional root element to stop calculations at. + * @return {object} Absolute position of the specified element object with x, y fields. + */ + getPos: function(elm, rootElm) { + var self = this, x = 0, y = 0, offsetParent, doc = self.doc, pos; + + elm = self.get(elm); + rootElm = rootElm || doc.body; + + if (elm) { + // Use getBoundingClientRect if it exists since it's faster than looping offset nodes + if (rootElm === doc.body && elm.getBoundingClientRect) { + pos = elm.getBoundingClientRect(); + rootElm = self.boxModel ? doc.documentElement : doc.body; + + // Add scroll offsets from documentElement or body since IE with the wrong box model will use d.body and so do WebKit + // Also remove the body/documentelement clientTop/clientLeft on IE 6, 7 since they offset the position + x = pos.left + (doc.documentElement.scrollLeft || doc.body.scrollLeft) - rootElm.clientLeft; + y = pos.top + (doc.documentElement.scrollTop || doc.body.scrollTop) - rootElm.clientTop; + + return {x: x, y: y}; + } + + offsetParent = elm; + while (offsetParent && offsetParent != rootElm && offsetParent.nodeType) { + x += offsetParent.offsetLeft || 0; + y += offsetParent.offsetTop || 0; + offsetParent = offsetParent.offsetParent; + } + + offsetParent = elm.parentNode; + while (offsetParent && offsetParent != rootElm && offsetParent.nodeType) { + x -= offsetParent.scrollLeft || 0; + y -= offsetParent.scrollTop || 0; + offsetParent = offsetParent.parentNode; + } + } + + return {x: x, y: y}; + }, + + /** + * Parses the specified style value into an object collection. This parser will also + * merge and remove any redundant items that browsers might have added. It will also convert non-hex + * colors to hex values. Urls inside the styles will also be converted to absolute/relative based on settings. + * + * @method parseStyle + * @param {String} cssText Style value to parse, for example: border:1px solid red;. + * @return {Object} Object representation of that style, for example: {border: '1px solid red'} + */ + parseStyle: function(cssText) { + return this.styles.parse(cssText); + }, + + /** + * Serializes the specified style object into a string. + * + * @method serializeStyle + * @param {Object} styles Object to serialize as string, for example: {border: '1px solid red'} + * @param {String} name Optional element name. + * @return {String} String representation of the style object, for example: border: 1px solid red. + */ + serializeStyle: function(styles, name) { + return this.styles.serialize(styles, name); + }, + + /** + * Adds a style element at the top of the document with the specified cssText content. + * + * @method addStyle + * @param {String} cssText CSS Text style to add to top of head of document. + */ + addStyle: function(cssText) { + var self = this, doc = self.doc, head, styleElm; + + // Prevent inline from loading the same styles twice + if (self !== DOMUtils.DOM && doc === document) { + var addedStyles = DOMUtils.DOM.addedStyles; + + addedStyles = addedStyles || []; + if (addedStyles[cssText]) { + return; + } + + addedStyles[cssText] = true; + DOMUtils.DOM.addedStyles = addedStyles; + } + + // Create style element if needed + styleElm = doc.getElementById('mceDefaultStyles'); + if (!styleElm) { + styleElm = doc.createElement('style'); + styleElm.id = 'mceDefaultStyles'; + styleElm.type = 'text/css'; + + head = doc.getElementsByTagName('head')[0]; + if (head.firstChild) { + head.insertBefore(styleElm, head.firstChild); + } else { + head.appendChild(styleElm); + } + } + + // Append style data to old or new style element + if (styleElm.styleSheet) { + styleElm.styleSheet.cssText += cssText; + } else { + styleElm.appendChild(doc.createTextNode(cssText)); + } + }, + + /** + * Imports/loads the specified CSS file into the document bound to the class. + * + * @method loadCSS + * @param {String} u URL to CSS file to load. + * @example + * // Loads a CSS file dynamically into the current document + * tinymce.DOM.loadCSS('somepath/some.css'); + * + * // Loads a CSS file into the currently active editor instance + * tinymce.activeEditor.dom.loadCSS('somepath/some.css'); + * + * // Loads a CSS file into an editor instance by id + * tinymce.get('someid').dom.loadCSS('somepath/some.css'); + * + * // Loads multiple CSS files into the current document + * tinymce.DOM.loadCSS('somepath/some.css,somepath/someother.css'); + */ + loadCSS: function(url) { + var self = this, doc = self.doc, head; + + // Prevent inline from loading the same CSS file twice + if (self !== DOMUtils.DOM && doc === document) { + DOMUtils.DOM.loadCSS(url); + return; + } + + if (!url) { + url = ''; + } + + head = doc.getElementsByTagName('head')[0]; + + each(url.split(','), function(url) { + var link; + + if (self.files[url]) { + return; + } + + self.files[url] = true; + link = self.create('link', {rel: 'stylesheet', href: url}); + + // IE 8 has a bug where dynamically loading stylesheets would produce a 1 item remaining bug + // This fix seems to resolve that issue by recalcing the document once a stylesheet finishes loading + // It's ugly but it seems to work fine. + if (isIE && doc.documentMode && doc.recalc) { + link.onload = function() { + if (doc.recalc) { + doc.recalc(); + } + + link.onload = null; + }; + } + + head.appendChild(link); + }); + }, + + /** + * Adds a class to the specified element or elements. + * + * @method addClass + * @param {String/Element/Array} elm Element ID string or DOM element or array with elements or IDs. + * @param {String} cls Class name to add to each element. + * @return {String/Array} String with new class value or array with new class values for all elements. + * @example + * // Adds a class to all paragraphs in the active editor + * tinymce.activeEditor.dom.addClass(tinymce.activeEditor.dom.select('p'), 'myclass'); + * + * // Adds a class to a specific element in the current page + * tinymce.DOM.addClass('mydiv', 'myclass'); + */ + addClass: function(elm, cls) { + return this.run(elm, function(elm) { + var clsVal; + + if (!cls) { + return 0; + } + + if (this.hasClass(elm, cls)) { + return elm.className; + } + + clsVal = this.removeClass(elm, cls); + elm.className = clsVal = (clsVal !== '' ? (clsVal + ' ') : '') + cls; + + return clsVal; + }); + }, + + /** + * Removes a class from the specified element or elements. + * + * @method removeClass + * @param {String/Element/Array} elm Element ID string or DOM element or array with elements or IDs. + * @param {String} cls Class name to remove from each element. + * @return {String/Array} String of remaining class name(s), or an array of strings if multiple input elements + * were passed in. + * @example + * // Removes a class from all paragraphs in the active editor + * tinymce.activeEditor.dom.removeClass(tinymce.activeEditor.dom.select('p'), 'myclass'); + * + * // Removes a class from a specific element in the current page + * tinymce.DOM.removeClass('mydiv', 'myclass'); + */ + removeClass: function(elm, cls) { + var self = this, re; + + return self.run(elm, function(elm) { + var val; + + if (self.hasClass(elm, cls)) { + if (!re) { + re = new RegExp("(^|\\s+)" + cls + "(\\s+|$)", "g"); + } + + val = elm.className.replace(re, ' '); + val = trim(val != ' ' ? val : ''); + + elm.className = val; + + // Empty class attr + if (!val) { + elm.removeAttribute('class'); + elm.removeAttribute('className'); + } + + return val; + } + + return elm.className; + }); + }, + + /** + * Returns true if the specified element has the specified class. + * + * @method hasClass + * @param {String/Element} n HTML element or element id string to check CSS class on. + * @param {String} c CSS class to check for. + * @return {Boolean} true/false if the specified element has the specified class. + */ + hasClass: function(elm, cls) { + elm = this.get(elm); + + if (!elm || !cls) { + return false; + } + + return (' ' + elm.className + ' ').indexOf(' ' + cls + ' ') !== -1; + }, + + /** + * Toggles the specified class on/off. + * + * @method toggleClass + * @param {Element} elm Element to toggle class on. + * @param {[type]} cls Class to toggle on/off. + * @param {[type]} state Optional state to set. + */ + toggleClass: function(elm, cls, state) { + state = state === undefined ? !this.hasClass(elm, cls) : state; + + if (this.hasClass(elm, cls) !== state) { + if (state) { + this.addClass(elm, cls); + } else { + this.removeClass(elm, cls); + } + } + }, + + /** + * Shows the specified element(s) by ID by setting the "display" style. + * + * @method show + * @param {String/Element/Array} elm ID of DOM element or DOM element or array with elements or IDs to show. + */ + show: function(elm) { + return this.setStyle(elm, 'display', 'block'); + }, + + /** + * Hides the specified element(s) by ID by setting the "display" style. + * + * @method hide + * @param {String/Element/Array} e ID of DOM element or DOM element or array with elements or IDs to hide. + * @example + * // Hides an element by id in the document + * tinymce.DOM.hide('myid'); + */ + hide: function(elm) { + return this.setStyle(elm, 'display', 'none'); + }, + + /** + * Returns true/false if the element is hidden or not by checking the "display" style. + * + * @method isHidden + * @param {String/Element} e Id or element to check display state on. + * @return {Boolean} true/false if the element is hidden or not. + */ + isHidden: function(elm) { + elm = this.get(elm); + + return !elm || elm.style.display == 'none' || this.getStyle(elm, 'display') == 'none'; + }, + + /** + * Returns a unique id. This can be useful when generating elements on the fly. + * This method will not check if the element already exists. + * + * @method uniqueId + * @param {String} prefix Optional prefix to add in front of all ids - defaults to "mce_". + * @return {String} Unique id. + */ + uniqueId: function(prefix) { + return (!prefix ? 'mce_' : prefix) + (this.counter++); + }, + + /** + * Sets the specified HTML content inside the element or elements. The HTML will first be processed. This means + * URLs will get converted, hex color values fixed etc. Check processHTML for details. + * + * @method setHTML + * @param {Element/String/Array} e DOM element, element id string or array of elements/ids to set HTML inside of. + * @param {String} h HTML content to set as inner HTML of the element. + * @example + * // Sets the inner HTML of all paragraphs in the active editor + * tinymce.activeEditor.dom.setHTML(tinymce.activeEditor.dom.select('p'), 'some inner html'); + * + * // Sets the inner HTML of an element by id in the document + * tinymce.DOM.setHTML('mydiv', 'some inner html'); + */ + setHTML: function(element, html) { + var self = this; + + return self.run(element, function(element) { + if (isIE) { + // Remove all child nodes, IE keeps empty text nodes in DOM + while (element.firstChild) { + element.removeChild(element.firstChild); + } + + try { + // IE will remove comments from the beginning + // unless you padd the contents with something + element.innerHTML = '
    ' + html; + element.removeChild(element.firstChild); + } catch (ex) { + // IE sometimes produces an unknown runtime error on innerHTML if it's a block element + // within a block element for example a div inside a p + // This seems to fix this problem + + // Create new div with HTML contents and a BR in front to keep comments + var newElement = self.create('div'); + newElement.innerHTML = '
    ' + html; + + // Add all children from div to target + each(grep(newElement.childNodes), function(node, i) { + // Skip br element + if (i && element.canHaveHTML) { + element.appendChild(node); + } + }); + } + } else { + element.innerHTML = html; + } + + return html; + }); + }, + + /** + * Returns the outer HTML of an element. + * + * @method getOuterHTML + * @param {String/Element} elm Element ID or element object to get outer HTML from. + * @return {String} Outer HTML string. + * @example + * tinymce.DOM.getOuterHTML(editorElement); + * tinymce.activeEditor.getOuterHTML(tinymce.activeEditor.getBody()); + */ + getOuterHTML: function(elm) { + var doc, self = this; + + elm = self.get(elm); + + if (!elm) { + return null; + } + + if (elm.nodeType === 1 && self.hasOuterHTML) { + return elm.outerHTML; + } + + doc = (elm.ownerDocument || self.doc).createElement("body"); + doc.appendChild(elm.cloneNode(true)); + + return doc.innerHTML; + }, + + /** + * Sets the specified outer HTML on an element or elements. + * + * @method setOuterHTML + * @param {Element/String/Array} elm DOM element, element id string or array of elements/ids to set outer HTML on. + * @param {Object} html HTML code to set as outer value for the element. + * @param {Document} doc Optional document scope to use in this process - defaults to the document of the DOM class. + * @example + * // Sets the outer HTML of all paragraphs in the active editor + * tinymce.activeEditor.dom.setOuterHTML(tinymce.activeEditor.dom.select('p'), '
    some html
    '); + * + * // Sets the outer HTML of an element by id in the document + * tinymce.DOM.setOuterHTML('mydiv', '
    some html
    '); + */ + setOuterHTML: function(elm, html, doc) { + var self = this; + + return self.run(elm, function(elm) { + function set() { + var node, tempElm; + + tempElm = doc.createElement("body"); + tempElm.innerHTML = html; + + node = tempElm.lastChild; + while (node) { + self.insertAfter(node.cloneNode(true), elm); + node = node.previousSibling; + } + + self.remove(elm); + } + + // Only set HTML on elements + if (elm.nodeType == 1) { + doc = doc || elm.ownerDocument || self.doc; + + if (isIE) { + try { + // Try outerHTML for IE it sometimes produces an unknown runtime error + if (elm.nodeType == 1 && self.hasOuterHTML) { + elm.outerHTML = html; + } else { + set(); + } + } catch (ex) { + // Fix for unknown runtime error + set(); + } + } else { + set(); + } + } + }); + }, + + /** + * Entity decodes a string. This method decodes any HTML entities, such as å. + * + * @method decode + * @param {String} s String to decode entities on. + * @return {String} Entity decoded string. + */ + decode: Entities.decode, + + /** + * Entity encodes a string. This method encodes the most common entities, such as <>"&. + * + * @method encode + * @param {String} text String to encode with entities. + * @return {String} Entity encoded string. + */ + encode: Entities.encodeAllRaw, + + /** + * Inserts an element after the reference element. + * + * @method insertAfter + * @param {Element} node Element to insert after the reference. + * @param {Element/String/Array} reference_node Reference element, element id or array of elements to insert after. + * @return {Element/Array} Element that got added or an array with elements. + */ + insertAfter: function(node, reference_node) { + reference_node = this.get(reference_node); + + return this.run(node, function(node) { + var parent, nextSibling; + + parent = reference_node.parentNode; + nextSibling = reference_node.nextSibling; + + if (nextSibling) { + parent.insertBefore(node, nextSibling); + } else { + parent.appendChild(node); + } + + return node; + }); + }, + + /** + * Replaces the specified element or elements with the new element specified. The new element will + * be cloned if multiple input elements are passed in. + * + * @method replace + * @param {Element} newElm New element to replace old ones with. + * @param {Element/String/Array} oldELm Element DOM node, element id or array of elements or ids to replace. + * @param {Boolean} k Optional keep children state, if set to true child nodes from the old object will be added to new ones. + */ + replace: function(newElm, oldElm, keepChildren) { + var self = this; + + return self.run(oldElm, function(oldElm) { + if (is(oldElm, 'array')) { + newElm = newElm.cloneNode(true); + } + + if (keepChildren) { + each(grep(oldElm.childNodes), function(node) { + newElm.appendChild(node); + }); + } + + return oldElm.parentNode.replaceChild(newElm, oldElm); + }); + }, + + /** + * Renames the specified element and keeps its attributes and children. + * + * @method rename + * @param {Element} elm Element to rename. + * @param {String} name Name of the new element. + * @return {Element} New element or the old element if it needed renaming. + */ + rename: function(elm, name) { + var self = this, newElm; + + if (elm.nodeName != name.toUpperCase()) { + // Rename block element + newElm = self.create(name); + + // Copy attribs to new block + each(self.getAttribs(elm), function(attr_node) { + self.setAttrib(newElm, attr_node.nodeName, self.getAttrib(elm, attr_node.nodeName)); + }); + + // Replace block + self.replace(newElm, elm, 1); + } + + return newElm || elm; + }, + + /** + * Find the common ancestor of two elements. This is a shorter method than using the DOM Range logic. + * + * @method findCommonAncestor + * @param {Element} a Element to find common ancestor of. + * @param {Element} b Element to find common ancestor of. + * @return {Element} Common ancestor element of the two input elements. + */ + findCommonAncestor: function(a, b) { + var ps = a, pe; + + while (ps) { + pe = b; + + while (pe && ps != pe) { + pe = pe.parentNode; + } + + if (ps == pe) { + break; + } + + ps = ps.parentNode; + } + + if (!ps && a.ownerDocument) { + return a.ownerDocument.documentElement; + } + + return ps; + }, + + /** + * Parses the specified RGB color value and returns a hex version of that color. + * + * @method toHex + * @param {String} rgbVal RGB string value like rgb(1,2,3) + * @return {String} Hex version of that RGB value like #FF00FF. + */ + toHex: function(rgbVal) { + return this.styles.toHex(Tools.trim(rgbVal)); + }, + + /** + * Executes the specified function on the element by id or dom element node or array of elements/id. + * + * @method run + * @param {String/Element/Array} Element ID or DOM element object or array with ids or elements. + * @param {function} f Function to execute for each item. + * @param {Object} s Optional scope to execute the function in. + * @return {Object/Array} Single object, or an array of objects if multiple input elements were passed in. + */ + run: function(elm, func, scope) { + var self = this, result; + + if (typeof(elm) === 'string') { + elm = self.get(elm); + } + + if (!elm) { + return false; + } + + scope = scope || this; + if (!elm.nodeType && (elm.length || elm.length === 0)) { + result = []; + + each(elm, function(elm, i) { + if (elm) { + if (typeof(elm) == 'string') { + elm = self.get(elm); + } + + result.push(func.call(scope, elm, i)); + } + }); + + return result; + } + + return func.call(scope, elm); + }, + + /** + * Returns a NodeList with attributes for the element. + * + * @method getAttribs + * @param {HTMLElement/string} elm Element node or string id to get attributes from. + * @return {NodeList} NodeList with attributes. + */ + getAttribs: function(elm) { + var attrs; + + elm = this.get(elm); + + if (!elm) { + return []; + } + + if (isIE) { + attrs = []; + + // Object will throw exception in IE + if (elm.nodeName == 'OBJECT') { + return elm.attributes; + } + + // IE doesn't keep the selected attribute if you clone option elements + if (elm.nodeName === 'OPTION' && this.getAttrib(elm, 'selected')) { + attrs.push({specified: 1, nodeName: 'selected'}); + } + + // It's crazy that this is faster in IE but it's because it returns all attributes all the time + var attrRegExp = /<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi; + elm.cloneNode(false).outerHTML.replace(attrRegExp, '').replace(/[\w:\-]+/gi, function(a) { + attrs.push({specified: 1, nodeName: a}); + }); + + return attrs; + } + + return elm.attributes; + }, + + /** + * Returns true/false if the specified node is to be considered empty or not. + * + * @example + * tinymce.DOM.isEmpty(node, {img: true}); + * @method isEmpty + * @param {Object} elements Optional name/value object with elements that are automatically treated as non-empty elements. + * @return {Boolean} true/false if the node is empty or not. + */ + isEmpty: function(node, elements) { + var self = this, i, attributes, type, walker, name, brCount = 0; + + node = node.firstChild; + if (node) { + walker = new TreeWalker(node, node.parentNode); + elements = elements || self.schema ? self.schema.getNonEmptyElements() : null; + + do { + type = node.nodeType; + + if (type === 1) { + // Ignore bogus elements + if (node.getAttribute('data-mce-bogus')) { + continue; + } + + // Keep empty elements like + name = node.nodeName.toLowerCase(); + if (elements && elements[name]) { + // Ignore single BR elements in blocks like


    or


    + if (name === 'br') { + brCount++; + continue; + } + + return false; + } + + // Keep elements with data-bookmark attributes or name attribute like + attributes = self.getAttribs(node); + i = node.attributes.length; + while (i--) { + name = node.attributes[i].nodeName; + if (name === "name" || name === 'data-mce-bookmark') { + return false; + } + } + } + + // Keep comment nodes + if (type == 8) { + return false; + } + + // Keep non whitespace text nodes + if ((type === 3 && !whiteSpaceRegExp.test(node.nodeValue))) { + return false; + } + } while ((node = walker.next())); + } + + return brCount <= 1; + }, + + /** + * Creates a new DOM Range object. This will use the native DOM Range API if it's + * available. If it's not, it will fall back to the custom TinyMCE implementation. + * + * @method createRng + * @return {DOMRange} DOM Range object. + * @example + * var rng = tinymce.DOM.createRng(); + * alert(rng.startContainer + "," + rng.startOffset); + */ + createRng: function() { + var doc = this.doc; + + return doc.createRange ? doc.createRange() : new Range(this); + }, + + /** + * Returns the index of the specified node within its parent. + * + * @method nodeIndex + * @param {Node} node Node to look for. + * @param {boolean} normalized Optional true/false state if the index is what it would be after a normalization. + * @return {Number} Index of the specified node. + */ + nodeIndex: function(node, normalized) { + var idx = 0, lastNodeType, nodeType; + + if (node) { + for (lastNodeType = node.nodeType, node = node.previousSibling; node; node = node.previousSibling) { + nodeType = node.nodeType; + + // Normalize text nodes + if (normalized && nodeType == 3) { + if (nodeType == lastNodeType || !node.nodeValue.length) { + continue; + } + } + idx++; + lastNodeType = nodeType; + } + } + + return idx; + }, + + /** + * Splits an element into two new elements and places the specified split + * element or elements between the new ones. For example splitting the paragraph at the bold element in + * this example

    abcabc123

    would produce

    abc

    abc

    123

    . + * + * @method split + * @param {Element} parentElm Parent element to split. + * @param {Element} splitElm Element to split at. + * @param {Element} replacementElm Optional replacement element to replace the split element with. + * @return {Element} Returns the split element or the replacement element if that is specified. + */ + split: function(parentElm, splitElm, replacementElm) { + var self = this, r = self.createRng(), bef, aft, pa; + + // W3C valid browsers tend to leave empty nodes to the left/right side of the contents - this makes sense + // but we don't want that in our code since it serves no purpose for the end user + // For example splitting this html at the bold element: + //

    text 1CHOPtext 2

    + // would produce: + //

    text 1

    CHOP

    text 2

    + // this function will then trim off empty edges and produce: + //

    text 1

    CHOP

    text 2

    + function trimNode(node) { + var i, children = node.childNodes, type = node.nodeType; + + function surroundedBySpans(node) { + var previousIsSpan = node.previousSibling && node.previousSibling.nodeName == 'SPAN'; + var nextIsSpan = node.nextSibling && node.nextSibling.nodeName == 'SPAN'; + return previousIsSpan && nextIsSpan; + } + + if (type == 1 && node.getAttribute('data-mce-type') == 'bookmark') { + return; + } + + for (i = children.length - 1; i >= 0; i--) { + trimNode(children[i]); + } + + if (type != 9) { + // Keep non whitespace text nodes + if (type == 3 && node.nodeValue.length > 0) { + // If parent element isn't a block or there isn't any useful contents for example "

    " + // Also keep text nodes with only spaces if surrounded by spans. + // eg. "

    a b

    " should keep space between a and b + var trimmedLength = trim(node.nodeValue).length; + if (!self.isBlock(node.parentNode) || trimmedLength > 0 || trimmedLength === 0 && surroundedBySpans(node)) { + return; + } + } else if (type == 1) { + // If the only child is a bookmark then move it up + children = node.childNodes; + + // TODO fix this complex if + if (children.length == 1 && children[0] && children[0].nodeType == 1 && + children[0].getAttribute('data-mce-type') == 'bookmark') { + node.parentNode.insertBefore(children[0], node); + } + + // Keep non empty elements or img, hr etc + if (children.length || /^(br|hr|input|img)$/i.test(node.nodeName)) { + return; + } + } + + self.remove(node); + } + + return node; + } + + if (parentElm && splitElm) { + // Get before chunk + r.setStart(parentElm.parentNode, self.nodeIndex(parentElm)); + r.setEnd(splitElm.parentNode, self.nodeIndex(splitElm)); + bef = r.extractContents(); + + // Get after chunk + r = self.createRng(); + r.setStart(splitElm.parentNode, self.nodeIndex(splitElm) + 1); + r.setEnd(parentElm.parentNode, self.nodeIndex(parentElm) + 1); + aft = r.extractContents(); + + // Insert before chunk + pa = parentElm.parentNode; + pa.insertBefore(trimNode(bef), parentElm); + + // Insert middle chunk + if (replacementElm) { + pa.replaceChild(replacementElm, splitElm); + } else { + pa.insertBefore(splitElm, parentElm); + } + + // Insert after chunk + pa.insertBefore(trimNode(aft), parentElm); + self.remove(parentElm); + + return replacementElm || splitElm; + } + }, + + /** + * Adds an event handler to the specified object. + * + * @method bind + * @param {Element/Document/Window/Array} target Target element to bind events to. + * handler to or an array of elements/ids/documents. + * @param {String} name Name of event handler to add, for example: click. + * @param {function} func Function to execute when the event occurs. + * @param {Object} scope Optional scope to execute the function in. + * @return {function} Function callback handler the same as the one passed in. + */ + bind: function(target, name, func, scope) { + var self = this; + + if (Tools.isArray(target)) { + var i = target.length; + + while (i--) { + target[i] = self.bind(target[i], name, func, scope); + } + + return target; + } + + // Collect all window/document events bound by editor instance + if (self.settings.collect && (target === self.doc || target === self.win)) { + self.boundEvents.push([target, name, func, scope]); + } + + return self.events.bind(target, name, func, scope || self); + }, + + /** + * Removes the specified event handler by name and function from an element or collection of elements. + * + * @method unbind + * @param {Element/Document/Window/Array} target Target element to unbind events on. + * @param {String} name Event handler name, for example: "click" + * @param {function} func Function to remove. + * @return {bool/Array} Bool state of true if the handler was removed, or an array of states if multiple input elements + * were passed in. + */ + unbind: function(target, name, func) { + var self = this, i; + + if (Tools.isArray(target)) { + i = target.length; + + while (i--) { + target[i] = self.unbind(target[i], name, func); + } + + return target; + } + + // Remove any bound events matching the input + if (self.boundEvents && (target === self.doc || target === self.win)) { + i = self.boundEvents.length; + + while (i--) { + var item = self.boundEvents[i]; + + if (target == item[0] && (!name || name == item[1]) && (!func || func == item[2])) { + this.events.unbind(item[0], item[1], item[2]); + } + } + } + + return this.events.unbind(target, name, func); + }, + + /** + * Fires the specified event name with object on target. + * + * @method fire + * @param {Node/Document/Window} target Target element or object to fire event on. + * @param {String} name Name of the event to fire. + * @param {Object} evt Event object to send. + * @return {Event} Event object. + */ + fire: function(target, name, evt) { + return this.events.fire(target, name, evt); + }, + + // Returns the content editable state of a node + getContentEditable: function(node) { + var contentEditable; + + // Check type + if (node.nodeType != 1) { + return null; + } + + // Check for fake content editable + contentEditable = node.getAttribute("data-mce-contenteditable"); + if (contentEditable && contentEditable !== "inherit") { + return contentEditable; + } + + // Check for real content editable + return node.contentEditable !== "inherit" ? node.contentEditable : null; + }, + + /** + * Destroys all internal references to the DOM to solve IE leak issues. + * + * @method destroy + */ + destroy: function() { + var self = this; + + // Unbind all events bound to window/document by editor instance + if (self.boundEvents) { + var i = self.boundEvents.length; + + while (i--) { + var item = self.boundEvents[i]; + this.events.unbind(item[0], item[1], item[2]); + } + + self.boundEvents = null; + } + + // Restore sizzle document to window.document + // Since the current document might be removed producing "Permission denied" on IE see #6325 + if (Sizzle.setDocument) { + Sizzle.setDocument(); + } + + self.win = self.doc = self.root = self.events = self.frag = null; + }, + + // #ifdef debug + + dumpRng: function(r) { + return ( + 'startContainer: ' + r.startContainer.nodeName + + ', startOffset: ' + r.startOffset + + ', endContainer: ' + r.endContainer.nodeName + + ', endOffset: ' + r.endOffset + ); + }, + + // #endif + + _findSib: function(node, selector, name) { + var self = this, func = selector; + + if (node) { + // If expression make a function of it using is + if (typeof(func) == 'string') { + func = function(node) { + return self.is(node, selector); + }; + } + + // Loop all siblings + for (node = node[name]; node; node = node[name]) { + if (func(node)) { + return node; + } + } + } + + return null; + } + }; + + /** + * Instance of DOMUtils for the current document. + * + * @static + * @property DOM + * @type tinymce.dom.DOMUtils + * @example + * // Example of how to add a class to some element by id + * tinymce.DOM.addClass('someid', 'someclass'); + */ + DOMUtils.DOM = new DOMUtils(document); + + return DOMUtils; +}); + +// Included from: js/tinymce/classes/dom/ScriptLoader.js + +/** + * ScriptLoader.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*globals console*/ + +/** + * This class handles asynchronous/synchronous loading of JavaScript files it will execute callbacks + * when various items gets loaded. This class is useful to load external JavaScript files. + * + * @class tinymce.dom.ScriptLoader + * @example + * // Load a script from a specific URL using the global script loader + * tinymce.ScriptLoader.load('somescript.js'); + * + * // Load a script using a unique instance of the script loader + * var scriptLoader = new tinymce.dom.ScriptLoader(); + * + * scriptLoader.load('somescript.js'); + * + * // Load multiple scripts + * var scriptLoader = new tinymce.dom.ScriptLoader(); + * + * scriptLoader.add('somescript1.js'); + * scriptLoader.add('somescript2.js'); + * scriptLoader.add('somescript3.js'); + * + * scriptLoader.loadQueue(function() { + * alert('All scripts are now loaded.'); + * }); + */ +define("tinymce/dom/ScriptLoader", [ + "tinymce/dom/DOMUtils", + "tinymce/util/Tools" +], function(DOMUtils, Tools) { + var DOM = DOMUtils.DOM; + var each = Tools.each, grep = Tools.grep; + + function ScriptLoader() { + var QUEUED = 0, + LOADING = 1, + LOADED = 2, + states = {}, + queue = [], + scriptLoadedCallbacks = {}, + queueLoadedCallbacks = [], + loading = 0, + undef; + + /** + * Loads a specific script directly without adding it to the load queue. + * + * @method load + * @param {String} url Absolute URL to script to add. + * @param {function} callback Optional callback function to execute ones this script gets loaded. + * @param {Object} scope Optional scope to execute callback in. + */ + function loadScript(url, callback) { + var dom = DOM, elm, id; + + // Execute callback when script is loaded + function done() { + dom.remove(id); + + if (elm) { + elm.onreadystatechange = elm.onload = elm = null; + } + + callback(); + } + + function error() { + /*eslint no-console:0 */ + + // Report the error so it's easier for people to spot loading errors + if (typeof(console) !== "undefined" && console.log) { + console.log("Failed to load: " + url); + } + + // We can't mark it as done if there is a load error since + // A) We don't want to produce 404 errors on the server and + // B) the onerror event won't fire on all browsers. + // done(); + } + + id = dom.uniqueId(); + + // Create new script element + elm = document.createElement('script'); + elm.id = id; + elm.type = 'text/javascript'; + elm.src = url; + + // Seems that onreadystatechange works better on IE 10 onload seems to fire incorrectly + if ("onreadystatechange" in elm) { + elm.onreadystatechange = function() { + if (/loaded|complete/.test(elm.readyState)) { + done(); + } + }; + } else { + elm.onload = done; + } + + // Add onerror event will get fired on some browsers but not all of them + elm.onerror = error; + + // Add script to document + (document.getElementsByTagName('head')[0] || document.body).appendChild(elm); + } + + /** + * Returns true/false if a script has been loaded or not. + * + * @method isDone + * @param {String} url URL to check for. + * @return {Boolean} true/false if the URL is loaded. + */ + this.isDone = function(url) { + return states[url] == LOADED; + }; + + /** + * Marks a specific script to be loaded. This can be useful if a script got loaded outside + * the script loader or to skip it from loading some script. + * + * @method markDone + * @param {string} u Absolute URL to the script to mark as loaded. + */ + this.markDone = function(url) { + states[url] = LOADED; + }; + + /** + * Adds a specific script to the load queue of the script loader. + * + * @method add + * @param {String} url Absolute URL to script to add. + * @param {function} callback Optional callback function to execute ones this script gets loaded. + * @param {Object} scope Optional scope to execute callback in. + */ + this.add = this.load = function(url, callback, scope) { + var state = states[url]; + + // Add url to load queue + if (state == undef) { + queue.push(url); + states[url] = QUEUED; + } + + if (callback) { + // Store away callback for later execution + if (!scriptLoadedCallbacks[url]) { + scriptLoadedCallbacks[url] = []; + } + + scriptLoadedCallbacks[url].push({ + func: callback, + scope: scope || this + }); + } + }; + + /** + * Starts the loading of the queue. + * + * @method loadQueue + * @param {function} callback Optional callback to execute when all queued items are loaded. + * @param {Object} scope Optional scope to execute the callback in. + */ + this.loadQueue = function(callback, scope) { + this.loadScripts(queue, callback, scope); + }; + + /** + * Loads the specified queue of files and executes the callback ones they are loaded. + * This method is generally not used outside this class but it might be useful in some scenarios. + * + * @method loadScripts + * @param {Array} scripts Array of queue items to load. + * @param {function} callback Optional callback to execute ones all items are loaded. + * @param {Object} scope Optional scope to execute callback in. + */ + this.loadScripts = function(scripts, callback, scope) { + var loadScripts; + + function execScriptLoadedCallbacks(url) { + // Execute URL callback functions + each(scriptLoadedCallbacks[url], function(callback) { + callback.func.call(callback.scope); + }); + + scriptLoadedCallbacks[url] = undef; + } + + queueLoadedCallbacks.push({ + func: callback, + scope: scope || this + }); + + loadScripts = function() { + var loadingScripts = grep(scripts); + + // Current scripts has been handled + scripts.length = 0; + + // Load scripts that needs to be loaded + each(loadingScripts, function(url) { + // Script is already loaded then execute script callbacks directly + if (states[url] == LOADED) { + execScriptLoadedCallbacks(url); + return; + } + + // Is script not loading then start loading it + if (states[url] != LOADING) { + states[url] = LOADING; + loading++; + + loadScript(url, function() { + states[url] = LOADED; + loading--; + + execScriptLoadedCallbacks(url); + + // Load more scripts if they where added by the recently loaded script + loadScripts(); + }); + } + }); + + // No scripts are currently loading then execute all pending queue loaded callbacks + if (!loading) { + each(queueLoadedCallbacks, function(callback) { + callback.func.call(callback.scope); + }); + + queueLoadedCallbacks.length = 0; + } + }; + + loadScripts(); + }; + } + + ScriptLoader.ScriptLoader = new ScriptLoader(); + + return ScriptLoader; +}); + +// Included from: js/tinymce/classes/AddOnManager.js + +/** + * AddOnManager.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class handles the loading of themes/plugins or other add-ons and their language packs. + * + * @class tinymce.AddOnManager + */ +define("tinymce/AddOnManager", [ + "tinymce/dom/ScriptLoader", + "tinymce/util/Tools" +], function(ScriptLoader, Tools) { + var each = Tools.each; + + function AddOnManager() { + var self = this; + + self.items = []; + self.urls = {}; + self.lookup = {}; + } + + AddOnManager.prototype = { + /** + * Returns the specified add on by the short name. + * + * @method get + * @param {String} name Add-on to look for. + * @return {tinymce.Theme/tinymce.Plugin} Theme or plugin add-on instance or undefined. + */ + get: function(name) { + if (this.lookup[name]) { + return this.lookup[name].instance; + } else { + return undefined; + } + }, + + dependencies: function(name) { + var result; + + if (this.lookup[name]) { + result = this.lookup[name].dependencies; + } + + return result || []; + }, + + /** + * Loads a language pack for the specified add-on. + * + * @method requireLangPack + * @param {String} name Short name of the add-on. + * @param {String} languages Optional comma or space separated list of languages to check if it matches the name. + */ + requireLangPack: function(name, languages) { + if (AddOnManager.language && AddOnManager.languageLoad !== false) { + if (languages && new RegExp('([, ]|\\b)' + AddOnManager.language + '([, ]|\\b)').test(languages) === false) { + return; + } + + ScriptLoader.ScriptLoader.add(this.urls[name] + '/langs/' + AddOnManager.language + '.js'); + } + }, + + /** + * Adds a instance of the add-on by it's short name. + * + * @method add + * @param {String} id Short name/id for the add-on. + * @param {tinymce.Theme/tinymce.Plugin} addOn Theme or plugin to add. + * @return {tinymce.Theme/tinymce.Plugin} The same theme or plugin instance that got passed in. + * @example + * // Create a simple plugin + * tinymce.create('tinymce.plugins.TestPlugin', { + * TestPlugin: function(ed, url) { + * ed.on('click', function(e) { + * ed.windowManager.alert('Hello World!'); + * }); + * } + * }); + * + * // Register plugin using the add method + * tinymce.PluginManager.add('test', tinymce.plugins.TestPlugin); + * + * // Initialize TinyMCE + * tinymce.init({ + * ... + * plugins: '-test' // Init the plugin but don't try to load it + * }); + */ + add: function(id, addOn, dependencies) { + this.items.push(addOn); + this.lookup[id] = {instance: addOn, dependencies: dependencies}; + + return addOn; + }, + + createUrl: function(baseUrl, dep) { + if (typeof dep === "object") { + return dep; + } else { + return {prefix: baseUrl.prefix, resource: dep, suffix: baseUrl.suffix}; + } + }, + + /** + * Add a set of components that will make up the add-on. Using the url of the add-on name as the base url. + * This should be used in development mode. A new compressor/javascript munger process will ensure that the + * components are put together into the plugin.js file and compressed correctly. + * + * @method addComponents + * @param {String} pluginName name of the plugin to load scripts from (will be used to get the base url for the plugins). + * @param {Array} scripts Array containing the names of the scripts to load. + */ + addComponents: function(pluginName, scripts) { + var pluginUrl = this.urls[pluginName]; + + each(scripts, function(script) { + ScriptLoader.ScriptLoader.add(pluginUrl + "/" + script); + }); + }, + + /** + * Loads an add-on from a specific url. + * + * @method load + * @param {String} name Short name of the add-on that gets loaded. + * @param {String} addOnUrl URL to the add-on that will get loaded. + * @param {function} callback Optional callback to execute ones the add-on is loaded. + * @param {Object} scope Optional scope to execute the callback in. + * @example + * // Loads a plugin from an external URL + * tinymce.PluginManager.load('myplugin', '/some/dir/someplugin/plugin.js'); + * + * // Initialize TinyMCE + * tinymce.init({ + * ... + * plugins: '-myplugin' // Don't try to load it again + * }); + */ + load: function(name, addOnUrl, callback, scope) { + var self = this, url = addOnUrl; + + function loadDependencies() { + var dependencies = self.dependencies(name); + + each(dependencies, function(dep) { + var newUrl = self.createUrl(addOnUrl, dep); + + self.load(newUrl.resource, newUrl, undefined, undefined); + }); + + if (callback) { + if (scope) { + callback.call(scope); + } else { + callback.call(ScriptLoader); + } + } + } + + if (self.urls[name]) { + return; + } + + if (typeof addOnUrl === "object") { + url = addOnUrl.prefix + addOnUrl.resource + addOnUrl.suffix; + } + + if (url.indexOf('/') !== 0 && url.indexOf('://') == -1) { + url = AddOnManager.baseURL + '/' + url; + } + + self.urls[name] = url.substring(0, url.lastIndexOf('/')); + + if (self.lookup[name]) { + loadDependencies(); + } else { + ScriptLoader.ScriptLoader.add(url, loadDependencies, scope); + } + } + }; + + AddOnManager.PluginManager = new AddOnManager(); + AddOnManager.ThemeManager = new AddOnManager(); + + return AddOnManager; +}); + +/** + * TinyMCE theme class. + * + * @class tinymce.Theme + */ + +/** + * This method is responsible for rendering/generating the overall user interface with toolbars, buttons, iframe containers etc. + * + * @method renderUI + * @param {Object} obj Object parameter containing the targetNode DOM node that will be replaced visually with an editor instance. + * @return {Object} an object with items like iframeContainer, editorContainer, sizeContainer, deltaWidth, deltaHeight. + */ + +/** + * Plugin base class, this is a pseudo class that describes how a plugin is to be created for TinyMCE. The methods below are all optional. + * + * @class tinymce.Plugin + * @example + * tinymce.PluginManager.add('example', function(editor, url) { + * // Add a button that opens a window + * editor.addButton('example', { + * text: 'My button', + * icon: false, + * onclick: function() { + * // Open window + * editor.windowManager.open({ + * title: 'Example plugin', + * body: [ + * {type: 'textbox', name: 'title', label: 'Title'} + * ], + * onsubmit: function(e) { + * // Insert content when the window form is submitted + * editor.insertContent('Title: ' + e.data.title); + * } + * }); + * } + * }); + * + * // Adds a menu item to the tools menu + * editor.addMenuItem('example', { + * text: 'Example plugin', + * context: 'tools', + * onclick: function() { + * // Open window with a specific url + * editor.windowManager.open({ + * title: 'TinyMCE site', + * url: 'http://www.tinymce.com', + * width: 800, + * height: 600, + * buttons: [{ + * text: 'Close', + * onclick: 'close' + * }] + * }); + * } + * }); + * }); + */ + +// Included from: js/tinymce/classes/html/Node.js + +/** + * Node.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class is a minimalistic implementation of a DOM like node used by the DomParser class. + * + * @example + * var node = new tinymce.html.Node('strong', 1); + * someRoot.append(node); + * + * @class tinymce.html.Node + * @version 3.4 + */ +define("tinymce/html/Node", [], function() { + var whiteSpaceRegExp = /^[ \t\r\n]*$/, typeLookup = { + '#text': 3, + '#comment': 8, + '#cdata': 4, + '#pi': 7, + '#doctype': 10, + '#document-fragment': 11 + }; + + // Walks the tree left/right + function walk(node, root_node, prev) { + var sibling, parent, startName = prev ? 'lastChild' : 'firstChild', siblingName = prev ? 'prev' : 'next'; + + // Walk into nodes if it has a start + if (node[startName]) { + return node[startName]; + } + + // Return the sibling if it has one + if (node !== root_node) { + sibling = node[siblingName]; + + if (sibling) { + return sibling; + } + + // Walk up the parents to look for siblings + for (parent = node.parent; parent && parent !== root_node; parent = parent.parent) { + sibling = parent[siblingName]; + + if (sibling) { + return sibling; + } + } + } + } + + /** + * Constructs a new Node instance. + * + * @constructor + * @method Node + * @param {String} name Name of the node type. + * @param {Number} type Numeric type representing the node. + */ + function Node(name, type) { + this.name = name; + this.type = type; + + if (type === 1) { + this.attributes = []; + this.attributes.map = {}; + } + } + + Node.prototype = { + /** + * Replaces the current node with the specified one. + * + * @example + * someNode.replace(someNewNode); + * + * @method replace + * @param {tinymce.html.Node} node Node to replace the current node with. + * @return {tinymce.html.Node} The old node that got replaced. + */ + replace: function(node) { + var self = this; + + if (node.parent) { + node.remove(); + } + + self.insert(node, self); + self.remove(); + + return self; + }, + + /** + * Gets/sets or removes an attribute by name. + * + * @example + * someNode.attr("name", "value"); // Sets an attribute + * console.log(someNode.attr("name")); // Gets an attribute + * someNode.attr("name", null); // Removes an attribute + * + * @method attr + * @param {String} name Attribute name to set or get. + * @param {String} value Optional value to set. + * @return {String/tinymce.html.Node} String or undefined on a get operation or the current node on a set operation. + */ + attr: function(name, value) { + var self = this, attrs, i, undef; + + if (typeof name !== "string") { + for (i in name) { + self.attr(i, name[i]); + } + + return self; + } + + if ((attrs = self.attributes)) { + if (value !== undef) { + // Remove attribute + if (value === null) { + if (name in attrs.map) { + delete attrs.map[name]; + + i = attrs.length; + while (i--) { + if (attrs[i].name === name) { + attrs = attrs.splice(i, 1); + return self; + } + } + } + + return self; + } + + // Set attribute + if (name in attrs.map) { + // Set attribute + i = attrs.length; + while (i--) { + if (attrs[i].name === name) { + attrs[i].value = value; + break; + } + } + } else { + attrs.push({name: name, value: value}); + } + + attrs.map[name] = value; + + return self; + } else { + return attrs.map[name]; + } + } + }, + + /** + * Does a shallow clones the node into a new node. It will also exclude id attributes since + * there should only be one id per document. + * + * @example + * var clonedNode = node.clone(); + * + * @method clone + * @return {tinymce.html.Node} New copy of the original node. + */ + clone: function() { + var self = this, clone = new Node(self.name, self.type), i, l, selfAttrs, selfAttr, cloneAttrs; + + // Clone element attributes + if ((selfAttrs = self.attributes)) { + cloneAttrs = []; + cloneAttrs.map = {}; + + for (i = 0, l = selfAttrs.length; i < l; i++) { + selfAttr = selfAttrs[i]; + + // Clone everything except id + if (selfAttr.name !== 'id') { + cloneAttrs[cloneAttrs.length] = {name: selfAttr.name, value: selfAttr.value}; + cloneAttrs.map[selfAttr.name] = selfAttr.value; + } + } + + clone.attributes = cloneAttrs; + } + + clone.value = self.value; + clone.shortEnded = self.shortEnded; + + return clone; + }, + + /** + * Wraps the node in in another node. + * + * @example + * node.wrap(wrapperNode); + * + * @method wrap + */ + wrap: function(wrapper) { + var self = this; + + self.parent.insert(wrapper, self); + wrapper.append(self); + + return self; + }, + + /** + * Unwraps the node in other words it removes the node but keeps the children. + * + * @example + * node.unwrap(); + * + * @method unwrap + */ + unwrap: function() { + var self = this, node, next; + + for (node = self.firstChild; node; ) { + next = node.next; + self.insert(node, self, true); + node = next; + } + + self.remove(); + }, + + /** + * Removes the node from it's parent. + * + * @example + * node.remove(); + * + * @method remove + * @return {tinymce.html.Node} Current node that got removed. + */ + remove: function() { + var self = this, parent = self.parent, next = self.next, prev = self.prev; + + if (parent) { + if (parent.firstChild === self) { + parent.firstChild = next; + + if (next) { + next.prev = null; + } + } else { + prev.next = next; + } + + if (parent.lastChild === self) { + parent.lastChild = prev; + + if (prev) { + prev.next = null; + } + } else { + next.prev = prev; + } + + self.parent = self.next = self.prev = null; + } + + return self; + }, + + /** + * Appends a new node as a child of the current node. + * + * @example + * node.append(someNode); + * + * @method append + * @param {tinymce.html.Node} node Node to append as a child of the current one. + * @return {tinymce.html.Node} The node that got appended. + */ + append: function(node) { + var self = this, last; + + if (node.parent) { + node.remove(); + } + + last = self.lastChild; + if (last) { + last.next = node; + node.prev = last; + self.lastChild = node; + } else { + self.lastChild = self.firstChild = node; + } + + node.parent = self; + + return node; + }, + + /** + * Inserts a node at a specific position as a child of the current node. + * + * @example + * parentNode.insert(newChildNode, oldChildNode); + * + * @method insert + * @param {tinymce.html.Node} node Node to insert as a child of the current node. + * @param {tinymce.html.Node} ref_node Reference node to set node before/after. + * @param {Boolean} before Optional state to insert the node before the reference node. + * @return {tinymce.html.Node} The node that got inserted. + */ + insert: function(node, ref_node, before) { + var parent; + + if (node.parent) { + node.remove(); + } + + parent = ref_node.parent || this; + + if (before) { + if (ref_node === parent.firstChild) { + parent.firstChild = node; + } else { + ref_node.prev.next = node; + } + + node.prev = ref_node.prev; + node.next = ref_node; + ref_node.prev = node; + } else { + if (ref_node === parent.lastChild) { + parent.lastChild = node; + } else { + ref_node.next.prev = node; + } + + node.next = ref_node.next; + node.prev = ref_node; + ref_node.next = node; + } + + node.parent = parent; + + return node; + }, + + /** + * Get all children by name. + * + * @method getAll + * @param {String} name Name of the child nodes to collect. + * @return {Array} Array with child nodes matchin the specified name. + */ + getAll: function(name) { + var self = this, node, collection = []; + + for (node = self.firstChild; node; node = walk(node, self)) { + if (node.name === name) { + collection.push(node); + } + } + + return collection; + }, + + /** + * Removes all children of the current node. + * + * @method empty + * @return {tinymce.html.Node} The current node that got cleared. + */ + empty: function() { + var self = this, nodes, i, node; + + // Remove all children + if (self.firstChild) { + nodes = []; + + // Collect the children + for (node = self.firstChild; node; node = walk(node, self)) { + nodes.push(node); + } + + // Remove the children + i = nodes.length; + while (i--) { + node = nodes[i]; + node.parent = node.firstChild = node.lastChild = node.next = node.prev = null; + } + } + + self.firstChild = self.lastChild = null; + + return self; + }, + + /** + * Returns true/false if the node is to be considered empty or not. + * + * @example + * node.isEmpty({img: true}); + * @method isEmpty + * @param {Object} elements Name/value object with elements that are automatically treated as non empty elements. + * @return {Boolean} true/false if the node is empty or not. + */ + isEmpty: function(elements) { + var self = this, node = self.firstChild, i, name; + + if (node) { + do { + if (node.type === 1) { + // Ignore bogus elements + if (node.attributes.map['data-mce-bogus']) { + continue; + } + + // Keep empty elements like + if (elements[node.name]) { + return false; + } + + // Keep elements with data attributes or name attribute like + i = node.attributes.length; + while (i--) { + name = node.attributes[i].name; + if (name === "name" || name.indexOf('data-mce-') === 0) { + return false; + } + } + } + + // Keep comments + if (node.type === 8) { + return false; + } + + // Keep non whitespace text nodes + if ((node.type === 3 && !whiteSpaceRegExp.test(node.value))) { + return false; + } + } while ((node = walk(node, self))); + } + + return true; + }, + + /** + * Walks to the next or previous node and returns that node or null if it wasn't found. + * + * @method walk + * @param {Boolean} prev Optional previous node state defaults to false. + * @return {tinymce.html.Node} Node that is next to or previous of the current node. + */ + walk: function(prev) { + return walk(this, null, prev); + } + }; + + /** + * Creates a node of a specific type. + * + * @static + * @method create + * @param {String} name Name of the node type to create for example "b" or "#text". + * @param {Object} attrs Name/value collection of attributes that will be applied to elements. + */ + Node.create = function(name, attrs) { + var node, attrName; + + // Create node + node = new Node(name, typeLookup[name] || 1); + + // Add attributes if needed + if (attrs) { + for (attrName in attrs) { + node.attr(attrName, attrs[attrName]); + } + } + + return node; + }; + + return Node; +}); + +// Included from: js/tinymce/classes/html/Schema.js + +/** + * Schema.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Schema validator class. + * + * @class tinymce.html.Schema + * @example + * if (tinymce.activeEditor.schema.isValidChild('p', 'span')) + * alert('span is valid child of p.'); + * + * if (tinymce.activeEditor.schema.getElementRule('p')) + * alert('P is a valid element.'); + * + * @class tinymce.html.Schema + * @version 3.4 + */ +define("tinymce/html/Schema", [ + "tinymce/util/Tools" +], function(Tools) { + var mapCache = {}; + var makeMap = Tools.makeMap, each = Tools.each, extend = Tools.extend, explode = Tools.explode, inArray = Tools.inArray; + + function split(items, delim) { + return items ? items.split(delim || ' ') : []; + } + + /** + * Builds a schema lookup table + * + * @private + * @param {String} type html4, html5 or html5-strict schema type. + * @return {Object} Schema lookup table. + */ + function compileSchema(type) { + var schema = {}, globalAttributes, blockContent; + var phrasingContent, flowContent, html4BlockContent, html4PhrasingContent; + + function add(name, attributes, children) { + var ni, i, attributesOrder, args = arguments; + + function arrayToMap(array) { + var map = {}, i, l; + + for (i = 0, l = array.length; i < l; i++) { + map[array[i]] = {}; + } + + return map; + } + + children = children || []; + attributes = attributes || ""; + + if (typeof(children) === "string") { + children = split(children); + } + + // Split string children + for (i = 3; i < args.length; i++) { + if (typeof(args[i]) === "string") { + args[i] = split(args[i]); + } + + children.push.apply(children, args[i]); + } + + name = split(name); + ni = name.length; + while (ni--) { + attributesOrder = [].concat(globalAttributes, split(attributes)); + schema[name[ni]] = { + attributes: arrayToMap(attributesOrder), + attributesOrder: attributesOrder, + children: arrayToMap(children) + }; + } + } + + function addAttrs(name, attributes) { + var ni, schemaItem, i, l; + + name = split(name); + ni = name.length; + attributes = split(attributes); + while (ni--) { + schemaItem = schema[name[ni]]; + for (i = 0, l = attributes.length; i < l; i++) { + schemaItem.attributes[attributes[i]] = {}; + schemaItem.attributesOrder.push(attributes[i]); + } + } + } + + // Use cached schema + if (mapCache[type]) { + return mapCache[type]; + } + + // Attributes present on all elements + globalAttributes = split("id accesskey class dir lang style tabindex title"); + + // Event attributes can be opt-in/opt-out + /*eventAttributes = split("onabort onblur oncancel oncanplay oncanplaythrough onchange onclick onclose oncontextmenu oncuechange " + + "ondblclick ondrag ondragend ondragenter ondragleave ondragover ondragstart ondrop ondurationchange onemptied onended " + + "onerror onfocus oninput oninvalid onkeydown onkeypress onkeyup onload onloadeddata onloadedmetadata onloadstart " + + "onmousedown onmousemove onmouseout onmouseover onmouseup onmousewheel onpause onplay onplaying onprogress onratechange " + + "onreset onscroll onseeked onseeking onseeking onselect onshow onstalled onsubmit onsuspend ontimeupdate onvolumechange " + + "onwaiting" + );*/ + + // Block content elements + blockContent = split( + "address blockquote div dl fieldset form h1 h2 h3 h4 h5 h6 hr menu ol p pre table ul" + ); + + // Phrasing content elements from the HTML5 spec (inline) + phrasingContent = split( + "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" + ); + + // Add HTML5 items to globalAttributes, blockContent, phrasingContent + if (type != "html4") { + globalAttributes.push.apply(globalAttributes, split("contenteditable contextmenu draggable dropzone " + + "hidden spellcheck translate")); + blockContent.push.apply(blockContent, split("article aside details dialog figure header footer hgroup section nav")); + phrasingContent.push.apply(phrasingContent, split("audio canvas command datalist mark meter output progress time wbr " + + "video ruby bdi keygen")); + } + + // Add HTML4 elements unless it's html5-strict + if (type != "html5-strict") { + globalAttributes.push("xml:lang"); + + html4PhrasingContent = split("acronym applet basefont big font strike tt"); + phrasingContent.push.apply(phrasingContent, html4PhrasingContent); + + each(html4PhrasingContent, function(name) { + add(name, "", phrasingContent); + }); + + html4BlockContent = split("center dir isindex noframes"); + blockContent.push.apply(blockContent, html4BlockContent); + + // Flow content elements from the HTML5 spec (block+inline) + flowContent = [].concat(blockContent, phrasingContent); + + each(html4BlockContent, function(name) { + add(name, "", flowContent); + }); + } + + // Flow content elements from the HTML5 spec (block+inline) + flowContent = flowContent || [].concat(blockContent, phrasingContent); + + // HTML4 base schema TODO: Move HTML5 specific attributes to HTML5 specific if statement + // Schema items , , + add("html", "manifest", "head body"); + add("head", "", "base command link meta noscript script style title"); + add("title hr noscript br"); + add("base", "href target"); + add("link", "href rel media hreflang type sizes hreflang"); + add("meta", "name http-equiv content charset"); + add("style", "media type scoped"); + add("script", "src async defer type charset"); + add("body", "onafterprint onbeforeprint onbeforeunload onblur onerror onfocus " + + "onhashchange onload onmessage onoffline ononline onpagehide onpageshow " + + "onpopstate onresize onscroll onstorage onunload", flowContent); + add("address dt dd div caption", "", flowContent); + add("h1 h2 h3 h4 h5 h6 pre p abbr code var samp kbd sub sup i b u bdo span legend em strong small s cite dfn", "", phrasingContent); + add("blockquote", "cite", flowContent); + add("ol", "reversed start type", "li"); + add("ul", "", "li"); + add("li", "value", flowContent); + add("dl", "", "dt dd"); + add("a", "href target rel media hreflang type", phrasingContent); + add("q", "cite", phrasingContent); + add("ins del", "cite datetime", flowContent); + add("img", "src alt usemap ismap width height"); + add("iframe", "src name width height", flowContent); + add("embed", "src type width height"); + add("object", "data type typemustmatch name usemap form width height", flowContent, "param"); + add("param", "name value"); + add("map", "name", flowContent, "area"); + add("area", "alt coords shape href target rel media hreflang type"); + add("table", "border", "caption colgroup thead tfoot tbody tr" + (type == "html4" ? " col" : "")); + add("colgroup", "span", "col"); + add("col", "span"); + add("tbody thead tfoot", "", "tr"); + add("tr", "", "td th"); + add("td", "colspan rowspan headers", flowContent); + add("th", "colspan rowspan headers scope abbr", flowContent); + add("form", "accept-charset action autocomplete enctype method name novalidate target", flowContent); + add("fieldset", "disabled form name", flowContent, "legend"); + add("label", "form for", phrasingContent); + add("input", "accept alt autocomplete checked dirname disabled form formaction formenctype formmethod formnovalidate " + + "formtarget height list max maxlength min multiple name pattern readonly required size src step type value width" + ); + add("button", "disabled form formaction formenctype formmethod formnovalidate formtarget name type value", + type == "html4" ? flowContent : phrasingContent); + add("select", "disabled form multiple name required size", "option optgroup"); + add("optgroup", "disabled label", "option"); + add("option", "disabled label selected value"); + add("textarea", "cols dirname disabled form maxlength name readonly required rows wrap"); + add("menu", "type label", flowContent, "li"); + add("noscript", "", flowContent); + + // Extend with HTML5 elements + if (type != "html4") { + add("wbr"); + add("ruby", "", phrasingContent, "rt rp"); + add("figcaption", "", flowContent); + add("mark rt rp summary bdi", "", phrasingContent); + add("canvas", "width height", flowContent); + add("video", "src crossorigin poster preload autoplay mediagroup loop " + + "muted controls width height", flowContent, "track source"); + add("audio", "src crossorigin preload autoplay mediagroup loop muted controls", flowContent, "track source"); + add("source", "src type media"); + add("track", "kind src srclang label default"); + add("datalist", "", phrasingContent, "option"); + add("article section nav aside header footer", "", flowContent); + add("hgroup", "", "h1 h2 h3 h4 h5 h6"); + add("figure", "", flowContent, "figcaption"); + add("time", "datetime", phrasingContent); + add("dialog", "open", flowContent); + add("command", "type label icon disabled checked radiogroup command"); + add("output", "for form name", phrasingContent); + add("progress", "value max", phrasingContent); + add("meter", "value min max low high optimum", phrasingContent); + add("details", "open", flowContent, "summary"); + add("keygen", "autofocus challenge disabled form keytype name"); + } + + // Extend with HTML4 attributes unless it's html5-strict + if (type != "html5-strict") { + addAttrs("script", "language xml:space"); + addAttrs("style", "xml:space"); + addAttrs("object", "declare classid codebase codetype archive standby align border hspace vspace"); + addAttrs("param", "valuetype type"); + addAttrs("a", "charset name rev shape coords"); + addAttrs("br", "clear"); + addAttrs("applet", "codebase archive code object alt name width height align hspace vspace"); + addAttrs("img", "name longdesc align border hspace vspace"); + addAttrs("iframe", "longdesc frameborder marginwidth marginheight scrolling align"); + addAttrs("font basefont", "size color face"); + addAttrs("input", "usemap align"); + addAttrs("select", "onchange"); + addAttrs("textarea"); + addAttrs("h1 h2 h3 h4 h5 h6 div p legend caption", "align"); + addAttrs("ul", "type compact"); + addAttrs("li", "type"); + addAttrs("ol dl menu dir", "compact"); + addAttrs("pre", "width xml:space"); + addAttrs("hr", "align noshade size width"); + addAttrs("isindex", "prompt"); + addAttrs("table", "summary width frame rules cellspacing cellpadding align bgcolor"); + addAttrs("col", "width align char charoff valign"); + addAttrs("colgroup", "width align char charoff valign"); + addAttrs("thead", "align char charoff valign"); + addAttrs("tr", "align char charoff valign bgcolor"); + addAttrs("th", "axis align char charoff valign nowrap bgcolor width height"); + addAttrs("form", "accept"); + addAttrs("td", "abbr axis scope align char charoff valign nowrap bgcolor width height"); + addAttrs("tfoot", "align char charoff valign"); + addAttrs("tbody", "align char charoff valign"); + addAttrs("area", "nohref"); + addAttrs("body", "background bgcolor text link vlink alink"); + } + + // Extend with HTML5 attributes unless it's html4 + if (type != "html4") { + addAttrs("input button select textarea", "autofocus"); + addAttrs("input textarea", "placeholder"); + addAttrs("a", "download"); + addAttrs("link script img", "crossorigin"); + addAttrs("iframe", "srcdoc sandbox seamless allowfullscreen"); + } + + // Special: iframe, ruby, video, audio, label + + // Delete children of the same name from it's parent + // For example: form can't have a child of the name form + each(split('a form meter progress dfn'), function(name) { + if (schema[name]) { + delete schema[name].children[name]; + } + }); + + // Delete header, footer, sectioning and heading content descendants + /*each('dt th address', function(name) { + delete schema[name].children[name]; + });*/ + + // Caption can't have tables + delete schema.caption.children.table; + + // TODO: LI:s can only have value if parent is OL + + // TODO: Handle transparent elements + // a ins del canvas map + + mapCache[type] = schema; + + return schema; + } + + /** + * Constructs a new Schema instance. + * + * @constructor + * @method Schema + * @param {Object} settings Name/value settings object. + */ + return function(settings) { + var self = this, elements = {}, children = {}, patternElements = [], validStyles, schemaItems; + var whiteSpaceElementsMap, selfClosingElementsMap, shortEndedElementsMap, boolAttrMap; + var blockElementsMap, nonEmptyElementsMap, textBlockElementsMap, customElementsMap = {}, specialElements = {}; + + // Creates an lookup table map object for the specified option or the default value + function createLookupTable(option, default_value, extendWith) { + var value = settings[option]; + + if (!value) { + // Get cached default map or make it if needed + value = mapCache[option]; + + if (!value) { + value = makeMap(default_value, ' ', makeMap(default_value.toUpperCase(), ' ')); + value = extend(value, extendWith); + + mapCache[option] = value; + } + } else { + // Create custom map + value = makeMap(value, ',', makeMap(value.toUpperCase(), ' ')); + } + + return value; + } + + settings = settings || {}; + schemaItems = compileSchema(settings.schema); + + // Allow all elements and attributes if verify_html is set to false + if (settings.verify_html === false) { + settings.valid_elements = '*[*]'; + } + + // Build styles list + if (settings.valid_styles) { + validStyles = {}; + + // Convert styles into a rule list + each(settings.valid_styles, function(value, key) { + validStyles[key] = explode(value); + }); + } + + // Setup map objects + whiteSpaceElementsMap = createLookupTable('whitespace_elements', 'pre script noscript style textarea video audio iframe object'); + selfClosingElementsMap = createLookupTable('self_closing_elements', 'colgroup dd dt li option p td tfoot th thead tr'); + shortEndedElementsMap = createLookupTable('short_ended_elements', 'area base basefont br col frame hr img input isindex link ' + + 'meta param embed source wbr track'); + boolAttrMap = createLookupTable('boolean_attributes', 'checked compact declare defer disabled ismap multiple nohref noresize ' + + 'noshade nowrap readonly selected autoplay loop controls'); + nonEmptyElementsMap = createLookupTable('non_empty_elements', 'td th iframe video audio object script', shortEndedElementsMap); + 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 nav figure'); + blockElementsMap = createLookupTable('block_elements', 'hr table tbody thead tfoot ' + + 'th tr td li ol ul caption dl dt dd noscript menu isindex option ' + + 'datalist select optgroup', textBlockElementsMap); + + each((settings.special || 'script noscript style textarea').split(' '), function(name) { + specialElements[name] = new RegExp('<\/' + name + '[^>]*>','gi'); + }); + + // Converts a wildcard expression string to a regexp for example *a will become /.*a/. + function patternToRegExp(str) { + return new RegExp('^' + str.replace(/([?+*])/g, '.$1') + '$'); + } + + // Parses the specified valid_elements string and adds to the current rules + // This function is a bit hard to read since it's heavily optimized for speed + function addValidElements(valid_elements) { + var ei, el, ai, al, matches, element, attr, attrData, elementName, attrName, attrType, attributes, attributesOrder, + prefix, outputName, globalAttributes, globalAttributesOrder, key, value, + elementRuleRegExp = /^([#+\-])?([^\[!\/]+)(?:\/([^\[!]+))?(?:(!?)\[([^\]]+)\])?$/, + attrRuleRegExp = /^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/, + hasPatternsRegExp = /[*?+]/; + + if (valid_elements) { + // Split valid elements into an array with rules + valid_elements = split(valid_elements, ','); + + if (elements['@']) { + globalAttributes = elements['@'].attributes; + globalAttributesOrder = elements['@'].attributesOrder; + } + + // Loop all rules + for (ei = 0, el = valid_elements.length; ei < el; ei++) { + // Parse element rule + matches = elementRuleRegExp.exec(valid_elements[ei]); + if (matches) { + // Setup local names for matches + prefix = matches[1]; + elementName = matches[2]; + outputName = matches[3]; + attrData = matches[5]; + + // Create new attributes and attributesOrder + attributes = {}; + attributesOrder = []; + + // Create the new element + element = { + attributes: attributes, + attributesOrder: attributesOrder + }; + + // Padd empty elements prefix + if (prefix === '#') { + element.paddEmpty = true; + } + + // Remove empty elements prefix + if (prefix === '-') { + element.removeEmpty = true; + } + + if (matches[4] === '!') { + element.removeEmptyAttrs = true; + } + + // Copy attributes from global rule into current rule + if (globalAttributes) { + for (key in globalAttributes) { + attributes[key] = globalAttributes[key]; + } + + attributesOrder.push.apply(attributesOrder, globalAttributesOrder); + } + + // Attributes defined + if (attrData) { + attrData = split(attrData, '|'); + for (ai = 0, al = attrData.length; ai < al; ai++) { + matches = attrRuleRegExp.exec(attrData[ai]); + if (matches) { + attr = {}; + attrType = matches[1]; + attrName = matches[2].replace(/::/g, ':'); + prefix = matches[3]; + value = matches[4]; + + // Required + if (attrType === '!') { + element.attributesRequired = element.attributesRequired || []; + element.attributesRequired.push(attrName); + attr.required = true; + } + + // Denied from global + if (attrType === '-') { + delete attributes[attrName]; + attributesOrder.splice(inArray(attributesOrder, attrName), 1); + continue; + } + + // Default value + if (prefix) { + // Default value + if (prefix === '=') { + element.attributesDefault = element.attributesDefault || []; + element.attributesDefault.push({name: attrName, value: value}); + attr.defaultValue = value; + } + + // Forced value + if (prefix === ':') { + element.attributesForced = element.attributesForced || []; + element.attributesForced.push({name: attrName, value: value}); + attr.forcedValue = value; + } + + // Required values + if (prefix === '<') { + attr.validValues = makeMap(value, '?'); + } + } + + // Check for attribute patterns + if (hasPatternsRegExp.test(attrName)) { + element.attributePatterns = element.attributePatterns || []; + attr.pattern = patternToRegExp(attrName); + element.attributePatterns.push(attr); + } else { + // Add attribute to order list if it doesn't already exist + if (!attributes[attrName]) { + attributesOrder.push(attrName); + } + + attributes[attrName] = attr; + } + } + } + } + + // Global rule, store away these for later usage + if (!globalAttributes && elementName == '@') { + globalAttributes = attributes; + globalAttributesOrder = attributesOrder; + } + + // Handle substitute elements such as b/strong + if (outputName) { + element.outputName = elementName; + elements[outputName] = element; + } + + // Add pattern or exact element + if (hasPatternsRegExp.test(elementName)) { + element.pattern = patternToRegExp(elementName); + patternElements.push(element); + } else { + elements[elementName] = element; + } + } + } + } + } + + function setValidElements(valid_elements) { + elements = {}; + patternElements = []; + + addValidElements(valid_elements); + + each(schemaItems, function(element, name) { + children[name] = element.children; + }); + } + + // Adds custom non HTML elements to the schema + function addCustomElements(custom_elements) { + var customElementRegExp = /^(~)?(.+)$/; + + if (custom_elements) { + // Flush cached items since we are altering the default maps + mapCache.text_block_elements = mapCache.block_elements = null; + + each(split(custom_elements, ','), function(rule) { + var matches = customElementRegExp.exec(rule), + inline = matches[1] === '~', + cloneName = inline ? 'span' : 'div', + name = matches[2]; + + children[name] = children[cloneName]; + customElementsMap[name] = cloneName; + + // If it's not marked as inline then add it to valid block elements + if (!inline) { + blockElementsMap[name.toUpperCase()] = {}; + blockElementsMap[name] = {}; + } + + // Add elements clone if needed + if (!elements[name]) { + var customRule = elements[cloneName]; + + customRule = extend({}, customRule); + delete customRule.removeEmptyAttrs; + delete customRule.removeEmpty; + + elements[name] = customRule; + } + + // Add custom elements at span/div positions + each(children, function(element, elmName) { + if (element[cloneName]) { + children[elmName] = element = extend({}, children[elmName]); + element[name] = element[cloneName]; + } + }); + }); + } + } + + // Adds valid children to the schema object + function addValidChildren(valid_children) { + var childRuleRegExp = /^([+\-]?)(\w+)\[([^\]]+)\]$/; + + if (valid_children) { + each(split(valid_children, ','), function(rule) { + var matches = childRuleRegExp.exec(rule), parent, prefix; + + if (matches) { + prefix = matches[1]; + + // Add/remove items from default + if (prefix) { + parent = children[matches[2]]; + } else { + parent = children[matches[2]] = {'#comment': {}}; + } + + parent = children[matches[2]]; + + each(split(matches[3], '|'), function(child) { + if (prefix === '-') { + // Clone the element before we delete + // things in it to not mess up default schemas + children[matches[2]] = parent = extend({}, children[matches[2]]); + + delete parent[child]; + } else { + parent[child] = {}; + } + }); + } + }); + } + } + + function getElementRule(name) { + var element = elements[name], i; + + // Exact match found + if (element) { + return element; + } + + // No exact match then try the patterns + i = patternElements.length; + while (i--) { + element = patternElements[i]; + + if (element.pattern.test(name)) { + return element; + } + } + } + + if (!settings.valid_elements) { + // No valid elements defined then clone the elements from the schema spec + each(schemaItems, function(element, name) { + elements[name] = { + attributes: element.attributes, + attributesOrder: element.attributesOrder + }; + + children[name] = element.children; + }); + + // Switch these on HTML4 + if (settings.schema != "html5") { + each(split('strong/b em/i'), function(item) { + item = split(item, '/'); + elements[item[1]].outputName = item[0]; + }); + } + + // Add default alt attribute for images + elements.img.attributesDefault = [{name: 'alt', value: ''}]; + + // Remove these if they are empty by default + each(split('ol ul sub sup blockquote span font a table tbody tr strong em b i'), function(name) { + if (elements[name]) { + elements[name].removeEmpty = true; + } + }); + + // Padd these by default + each(split('p h1 h2 h3 h4 h5 h6 th td pre div address caption'), function(name) { + elements[name].paddEmpty = true; + }); + + // Remove these if they have no attributes + each(split('span'), function(name) { + elements[name].removeEmptyAttrs = true; + }); + + // Remove these by default + // TODO: Reenable in 4.1 + /*each(split('script style'), function(name) { + delete elements[name]; + });*/ + } else { + setValidElements(settings.valid_elements); + } + + addCustomElements(settings.custom_elements); + addValidChildren(settings.valid_children); + addValidElements(settings.extended_valid_elements); + + // Todo: Remove this when we fix list handling to be valid + addValidChildren('+ol[ul|ol],+ul[ul|ol]'); + + // Delete invalid elements + if (settings.invalid_elements) { + each(explode(settings.invalid_elements), function(item) { + if (elements[item]) { + delete elements[item]; + } + }); + } + + // If the user didn't allow span only allow internal spans + if (!getElementRule('span')) { + addValidElements('span[!data-mce-type|*]'); + } + + /** + * Name/value map object with valid parents and children to those parents. + * + * @example + * children = { + * div:{p:{}, h1:{}} + * }; + * @field children + * @type Object + */ + self.children = children; + + /** + * Name/value map object with valid styles for each element. + * + * @field styles + * @type Object + */ + self.styles = validStyles; + + /** + * Returns a map with boolean attributes. + * + * @method getBoolAttrs + * @return {Object} Name/value lookup map for boolean attributes. + */ + self.getBoolAttrs = function() { + return boolAttrMap; + }; + + /** + * Returns a map with block elements. + * + * @method getBlockElements + * @return {Object} Name/value lookup map for block elements. + */ + self.getBlockElements = function() { + return blockElementsMap; + }; + + /** + * Returns a map with text block elements. Such as: p,h1-h6,div,address + * + * @method getTextBlockElements + * @return {Object} Name/value lookup map for block elements. + */ + self.getTextBlockElements = function() { + return textBlockElementsMap; + }; + + /** + * Returns a map with short ended elements such as BR or IMG. + * + * @method getShortEndedElements + * @return {Object} Name/value lookup map for short ended elements. + */ + self.getShortEndedElements = function() { + return shortEndedElementsMap; + }; + + /** + * Returns a map with self closing tags such as
  • . + * + * @method getSelfClosingElements + * @return {Object} Name/value lookup map for self closing tags elements. + */ + self.getSelfClosingElements = function() { + return selfClosingElementsMap; + }; + + /** + * Returns a map with elements that should be treated as contents regardless if it has text + * content in them or not such as TD, VIDEO or IMG. + * + * @method getNonEmptyElements + * @return {Object} Name/value lookup map for non empty elements. + */ + self.getNonEmptyElements = function() { + return nonEmptyElementsMap; + }; + + /** + * Returns a map with elements where white space is to be preserved like PRE or SCRIPT. + * + * @method getWhiteSpaceElements + * @return {Object} Name/value lookup map for white space elements. + */ + self.getWhiteSpaceElements = function() { + return whiteSpaceElementsMap; + }; + + /** + * Returns a map with special elements. These are elements that needs to be parsed + * in a special way such as script, style, textarea etc. The map object values + * are regexps used to find the end of the element. + * + * @method getSpecialElements + * @return {Object} Name/value lookup map for special elements. + */ + self.getSpecialElements = function() { + return specialElements; + }; + + /** + * Returns true/false if the specified element and it's child is valid or not + * according to the schema. + * + * @method isValidChild + * @param {String} name Element name to check for. + * @param {String} child Element child to verify. + * @return {Boolean} True/false if the element is a valid child of the specified parent. + */ + self.isValidChild = function(name, child) { + var parent = children[name]; + + return !!(parent && parent[child]); + }; + + /** + * Returns true/false if the specified element name and optional attribute is + * valid according to the schema. + * + * @method isValid + * @param {String} name Name of element to check. + * @param {String} attr Optional attribute name to check for. + * @return {Boolean} True/false if the element and attribute is valid. + */ + self.isValid = function(name, attr) { + var attrPatterns, i, rule = getElementRule(name); + + // Check if it's a valid element + if (rule) { + if (attr) { + // Check if attribute name exists + if (rule.attributes[attr]) { + return true; + } + + // Check if attribute matches a regexp pattern + attrPatterns = rule.attributePatterns; + if (attrPatterns) { + i = attrPatterns.length; + while (i--) { + if (attrPatterns[i].pattern.test(name)) { + return true; + } + } + } + } else { + return true; + } + } + + // No match + return false; + }; + + /** + * Returns true/false if the specified element is valid or not + * according to the schema. + * + * @method getElementRule + * @param {String} name Element name to check for. + * @return {Object} Element object or undefined if the element isn't valid. + */ + self.getElementRule = getElementRule; + + /** + * Returns an map object of all custom elements. + * + * @method getCustomElements + * @return {Object} Name/value map object of all custom elements. + */ + self.getCustomElements = function() { + return customElementsMap; + }; + + /** + * Parses a valid elements string and adds it to the schema. The valid elements + * format is for example "element[attr=default|otherattr]". + * Existing rules will be replaced with the ones specified, so this extends the schema. + * + * @method addValidElements + * @param {String} valid_elements String in the valid elements format to be parsed. + */ + self.addValidElements = addValidElements; + + /** + * Parses a valid elements string and sets it to the schema. The valid elements + * format is for example "element[attr=default|otherattr]". + * Existing rules will be replaced with the ones specified, so this extends the schema. + * + * @method setValidElements + * @param {String} valid_elements String in the valid elements format to be parsed. + */ + self.setValidElements = setValidElements; + + /** + * Adds custom non HTML elements to the schema. + * + * @method addCustomElements + * @param {String} custom_elements Comma separated list of custom elements to add. + */ + self.addCustomElements = addCustomElements; + + /** + * Parses a valid children string and adds them to the schema structure. The valid children + * format is for example: "element[child1|child2]". + * + * @method addValidChildren + * @param {String} valid_children Valid children elements string to parse + */ + self.addValidChildren = addValidChildren; + + self.elements = elements; + }; +}); + +// Included from: js/tinymce/classes/html/SaxParser.js + +/** + * SaxParser.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*eslint max-depth:[2, 9] */ + +/** + * This class parses HTML code using pure JavaScript and executes various events for each item it finds. It will + * always execute the events in the right order for tag soup code like

    . It will also remove elements + * and attributes that doesn't fit the schema if the validate setting is enabled. + * + * @example + * var parser = new tinymce.html.SaxParser({ + * validate: true, + * + * comment: function(text) { + * console.log('Comment:', text); + * }, + * + * cdata: function(text) { + * console.log('CDATA:', text); + * }, + * + * text: function(text, raw) { + * console.log('Text:', text, 'Raw:', raw); + * }, + * + * start: function(name, attrs, empty) { + * console.log('Start:', name, attrs, empty); + * }, + * + * end: function(name) { + * console.log('End:', name); + * }, + * + * pi: function(name, text) { + * console.log('PI:', name, text); + * }, + * + * doctype: function(text) { + * console.log('DocType:', text); + * } + * }, schema); + * @class tinymce.html.SaxParser + * @version 3.4 + */ +define("tinymce/html/SaxParser", [ + "tinymce/html/Schema", + "tinymce/html/Entities", + "tinymce/util/Tools" +], function(Schema, Entities, Tools) { + var each = Tools.each; + + /** + * Constructs a new SaxParser instance. + * + * @constructor + * @method SaxParser + * @param {Object} settings Name/value collection of settings. comment, cdata, text, start and end are callbacks. + * @param {tinymce.html.Schema} schema HTML Schema class to use when parsing. + */ + return function(settings, schema) { + var self = this; + + function noop() {} + + settings = settings || {}; + self.schema = schema = schema || new Schema(); + + if (settings.fix_self_closing !== false) { + settings.fix_self_closing = true; + } + + // Add handler functions from settings and setup default handlers + each('comment cdata text start end pi doctype'.split(' '), function(name) { + if (name) { + self[name] = settings[name] || noop; + } + }); + + /** + * Parses the specified HTML string and executes the callbacks for each item it finds. + * + * @example + * new SaxParser({...}).parse('text'); + * @method parse + * @param {String} html Html string to sax parse. + */ + self.parse = function(html) { + var self = this, matches, index = 0, value, endRegExp, stack = [], attrList, i, text, name; + var isInternalElement, removeInternalElements, shortEndedElements, fillAttrsMap, isShortEnded; + var validate, elementRule, isValidElement, attr, attribsValue, validAttributesMap, validAttributePatterns; + var attributesRequired, attributesDefault, attributesForced; + var anyAttributesRequired, selfClosing, tokenRegExp, attrRegExp, specialElements, attrValue, idCount = 0; + var decode = Entities.decode, fixSelfClosing, filteredUrlAttrs = Tools.makeMap('src,href'); + var scriptUriRegExp = /(java|vb)script:/i; + + function processEndTag(name) { + var pos, i; + + // Find position of parent of the same type + pos = stack.length; + while (pos--) { + if (stack[pos].name === name) { + break; + } + } + + // Found parent + if (pos >= 0) { + // Close all the open elements + for (i = stack.length - 1; i >= pos; i--) { + name = stack[i]; + + if (name.valid) { + self.end(name.name); + } + } + + // Remove the open elements from the stack + stack.length = pos; + } + } + + function parseAttribute(match, name, value, val2, val3) { + var attrRule, i, trimRegExp = /[\s\u0000-\u001F]+/g; + + name = name.toLowerCase(); + value = name in fillAttrsMap ? name : decode(value || val2 || val3 || ''); // Handle boolean attribute than value attribute + + // Validate name and value pass through all data- attributes + if (validate && !isInternalElement && name.indexOf('data-') !== 0) { + attrRule = validAttributesMap[name]; + + // Find rule by pattern matching + if (!attrRule && validAttributePatterns) { + i = validAttributePatterns.length; + while (i--) { + attrRule = validAttributePatterns[i]; + if (attrRule.pattern.test(name)) { + break; + } + } + + // No rule matched + if (i === -1) { + attrRule = null; + } + } + + // No attribute rule found + if (!attrRule) { + return; + } + + // Validate value + if (attrRule.validValues && !(value in attrRule.validValues)) { + return; + } + } + + // Block any javascript: urls + if (filteredUrlAttrs[name] && !settings.allow_script_urls) { + var uri = value.replace(trimRegExp, ''); + + try { + // Might throw malformed URI sequence + uri = decodeURIComponent(uri); + if (scriptUriRegExp.test(uri)) { + return; + } + } catch (ex) { + // Fallback to non UTF-8 decoder + uri = unescape(uri); + if (scriptUriRegExp.test(uri)) { + return; + } + } + } + + // Add attribute to list and map + attrList.map[name] = value; + attrList.push({ + name: name, + value: value + }); + } + + // Precompile RegExps and map objects + tokenRegExp = new RegExp('<(?:' + + '(?:!--([\\w\\W]*?)-->)|' + // Comment + '(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|' + // CDATA + '(?:!DOCTYPE([\\w\\W]*?)>)|' + // DOCTYPE + '(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|' + // PI + '(?:\\/([^>]+)>)|' + // End element + '(?:([A-Za-z0-9\\-\\:\\.]+)((?:\\s+[^"\'>]+(?:(?:"[^"]*")|(?:\'[^\']*\')|[^>]*))*|\\/|\\s+)>)' + // Start element + ')', 'g'); + + attrRegExp = /([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g; + + // Setup lookup tables for empty elements and boolean attributes + shortEndedElements = schema.getShortEndedElements(); + selfClosing = settings.self_closing_elements || schema.getSelfClosingElements(); + fillAttrsMap = schema.getBoolAttrs(); + validate = settings.validate; + removeInternalElements = settings.remove_internals; + fixSelfClosing = settings.fix_self_closing; + specialElements = schema.getSpecialElements(); + + while ((matches = tokenRegExp.exec(html))) { + // Text + if (index < matches.index) { + self.text(decode(html.substr(index, matches.index - index))); + } + + if ((value = matches[6])) { // End element + value = value.toLowerCase(); + + // IE will add a ":" in front of elements it doesn't understand like custom elements or HTML5 elements + if (value.charAt(0) === ':') { + value = value.substr(1); + } + + processEndTag(value); + } else if ((value = matches[7])) { // Start element + value = value.toLowerCase(); + + // IE will add a ":" in front of elements it doesn't understand like custom elements or HTML5 elements + if (value.charAt(0) === ':') { + value = value.substr(1); + } + + isShortEnded = value in shortEndedElements; + + // Is self closing tag for example an
  • after an open
  • + if (fixSelfClosing && selfClosing[value] && stack.length > 0 && stack[stack.length - 1].name === value) { + processEndTag(value); + } + + // Validate element + if (!validate || (elementRule = schema.getElementRule(value))) { + isValidElement = true; + + // Grab attributes map and patters when validation is enabled + if (validate) { + validAttributesMap = elementRule.attributes; + validAttributePatterns = elementRule.attributePatterns; + } + + // Parse attributes + if ((attribsValue = matches[8])) { + isInternalElement = attribsValue.indexOf('data-mce-type') !== -1; // Check if the element is an internal element + + // If the element has internal attributes then remove it if we are told to do so + if (isInternalElement && removeInternalElements) { + isValidElement = false; + } + + attrList = []; + attrList.map = {}; + + attribsValue.replace(attrRegExp, parseAttribute); + } else { + attrList = []; + attrList.map = {}; + } + + // Process attributes if validation is enabled + if (validate && !isInternalElement) { + attributesRequired = elementRule.attributesRequired; + attributesDefault = elementRule.attributesDefault; + attributesForced = elementRule.attributesForced; + anyAttributesRequired = elementRule.removeEmptyAttrs; + + // Check if any attribute exists + if (anyAttributesRequired && !attrList.length) { + isValidElement = false; + } + + // Handle forced attributes + if (attributesForced) { + i = attributesForced.length; + while (i--) { + attr = attributesForced[i]; + name = attr.name; + attrValue = attr.value; + + if (attrValue === '{$uid}') { + attrValue = 'mce_' + idCount++; + } + + attrList.map[name] = attrValue; + attrList.push({name: name, value: attrValue}); + } + } + + // Handle default attributes + if (attributesDefault) { + i = attributesDefault.length; + while (i--) { + attr = attributesDefault[i]; + name = attr.name; + + if (!(name in attrList.map)) { + attrValue = attr.value; + + if (attrValue === '{$uid}') { + attrValue = 'mce_' + idCount++; + } + + attrList.map[name] = attrValue; + attrList.push({name: name, value: attrValue}); + } + } + } + + // Handle required attributes + if (attributesRequired) { + i = attributesRequired.length; + while (i--) { + if (attributesRequired[i] in attrList.map) { + break; + } + } + + // None of the required attributes where found + if (i === -1) { + isValidElement = false; + } + } + + // Invalidate element if it's marked as bogus + if (attrList.map['data-mce-bogus']) { + isValidElement = false; + } + } + + if (isValidElement) { + self.start(value, attrList, isShortEnded); + } + } else { + isValidElement = false; + } + + // Treat script, noscript and style a bit different since they may include code that looks like elements + if ((endRegExp = specialElements[value])) { + endRegExp.lastIndex = index = matches.index + matches[0].length; + + if ((matches = endRegExp.exec(html))) { + if (isValidElement) { + text = html.substr(index, matches.index - index); + } + + index = matches.index + matches[0].length; + } else { + text = html.substr(index); + index = html.length; + } + + if (isValidElement) { + if (text.length > 0) { + self.text(text, true); + } + + self.end(value); + } + + tokenRegExp.lastIndex = index; + continue; + } + + // Push value on to stack + if (!isShortEnded) { + if (!attribsValue || attribsValue.indexOf('/') != attribsValue.length - 1) { + stack.push({name: value, valid: isValidElement}); + } else if (isValidElement) { + self.end(value); + } + } + } else if ((value = matches[1])) { // Comment + // Padd comment value to avoid browsers from parsing invalid comments as HTML + if (value.charAt(0) === '>') { + value = ' ' + value; + } + + if (!settings.allow_conditional_comments && value.substr(0, 3) === '[if') { + value = ' ' + value; + } + + self.comment(value); + } else if ((value = matches[2])) { // CDATA + self.cdata(value); + } else if ((value = matches[3])) { // DOCTYPE + self.doctype(value); + } else if ((value = matches[4])) { // PI + self.pi(value, matches[5]); + } + + index = matches.index + matches[0].length; + } + + // Text + if (index < html.length) { + self.text(decode(html.substr(index))); + } + + // Close any open elements + for (i = stack.length - 1; i >= 0; i--) { + value = stack[i]; + + if (value.valid) { + self.end(value.name); + } + } + }; + }; +}); + +// Included from: js/tinymce/classes/html/DomParser.js + +/** + * DomParser.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class parses HTML code into a DOM like structure of nodes it will remove redundant whitespace and make + * sure that the node tree is valid according to the specified schema. + * So for example:

    a

    b

    c

    will become

    a

    b

    c

    + * + * @example + * var parser = new tinymce.html.DomParser({validate: true}, schema); + * var rootNode = parser.parse('

    content

    '); + * + * @class tinymce.html.DomParser + * @version 3.4 + */ +define("tinymce/html/DomParser", [ + "tinymce/html/Node", + "tinymce/html/Schema", + "tinymce/html/SaxParser", + "tinymce/util/Tools" +], function(Node, Schema, SaxParser, Tools) { + var makeMap = Tools.makeMap, each = Tools.each, explode = Tools.explode, extend = Tools.extend; + + /** + * Constructs a new DomParser instance. + * + * @constructor + * @method DomParser + * @param {Object} settings Name/value collection of settings. comment, cdata, text, start and end are callbacks. + * @param {tinymce.html.Schema} schema HTML Schema class to use when parsing. + */ + return function(settings, schema) { + var self = this, nodeFilters = {}, attributeFilters = [], matchedNodes = {}, matchedAttributes = {}; + + settings = settings || {}; + settings.validate = "validate" in settings ? settings.validate : true; + settings.root_name = settings.root_name || 'body'; + self.schema = schema = schema || new Schema(); + + function fixInvalidChildren(nodes) { + var ni, node, parent, parents, newParent, currentNode, tempNode, childNode, i; + var nonEmptyElements, nonSplitableElements, textBlockElements, sibling, nextNode; + + nonSplitableElements = makeMap('tr,td,th,tbody,thead,tfoot,table'); + nonEmptyElements = schema.getNonEmptyElements(); + textBlockElements = schema.getTextBlockElements(); + + for (ni = 0; ni < nodes.length; ni++) { + node = nodes[ni]; + + // Already removed or fixed + if (!node.parent || node.fixed) { + continue; + } + + // If the invalid element is a text block and the text block is within a parent LI element + // Then unwrap the first text block and convert other sibling text blocks to LI elements similar to Word/Open Office + if (textBlockElements[node.name] && node.parent.name == 'li') { + // Move sibling text blocks after LI element + sibling = node.next; + while (sibling) { + if (textBlockElements[sibling.name]) { + sibling.name = 'li'; + sibling.fixed = true; + node.parent.insert(sibling, node.parent); + } else { + break; + } + + sibling = sibling.next; + } + + // Unwrap current text block + node.unwrap(node); + continue; + } + + // Get list of all parent nodes until we find a valid parent to stick the child into + parents = [node]; + for (parent = node.parent; parent && !schema.isValidChild(parent.name, node.name) && + !nonSplitableElements[parent.name]; parent = parent.parent) { + parents.push(parent); + } + + // Found a suitable parent + if (parent && parents.length > 1) { + // Reverse the array since it makes looping easier + parents.reverse(); + + // Clone the related parent and insert that after the moved node + newParent = currentNode = self.filterNode(parents[0].clone()); + + // Start cloning and moving children on the left side of the target node + for (i = 0; i < parents.length - 1; i++) { + if (schema.isValidChild(currentNode.name, parents[i].name)) { + tempNode = self.filterNode(parents[i].clone()); + currentNode.append(tempNode); + } else { + tempNode = currentNode; + } + + for (childNode = parents[i].firstChild; childNode && childNode != parents[i + 1]; ) { + nextNode = childNode.next; + tempNode.append(childNode); + childNode = nextNode; + } + + currentNode = tempNode; + } + + if (!newParent.isEmpty(nonEmptyElements)) { + parent.insert(newParent, parents[0], true); + parent.insert(node, newParent); + } else { + parent.insert(node, parents[0], true); + } + + // Check if the element is empty by looking through it's contents and special treatment for


    + parent = parents[0]; + if (parent.isEmpty(nonEmptyElements) || parent.firstChild === parent.lastChild && parent.firstChild.name === 'br') { + parent.empty().remove(); + } + } else if (node.parent) { + // If it's an LI try to find a UL/OL for it or wrap it + if (node.name === 'li') { + sibling = node.prev; + if (sibling && (sibling.name === 'ul' || sibling.name === 'ul')) { + sibling.append(node); + continue; + } + + sibling = node.next; + if (sibling && (sibling.name === 'ul' || sibling.name === 'ul')) { + sibling.insert(node, sibling.firstChild, true); + continue; + } + + node.wrap(self.filterNode(new Node('ul', 1))); + continue; + } + + // Try wrapping the element in a DIV + if (schema.isValidChild(node.parent.name, 'div') && schema.isValidChild('div', node.name)) { + node.wrap(self.filterNode(new Node('div', 1))); + } else { + // We failed wrapping it, then remove or unwrap it + if (node.name === 'style' || node.name === 'script') { + node.empty().remove(); + } else { + node.unwrap(); + } + } + } + } + } + + /** + * Runs the specified node though the element and attributes filters. + * + * @method filterNode + * @param {tinymce.html.Node} Node the node to run filters on. + * @return {tinymce.html.Node} The passed in node. + */ + self.filterNode = function(node) { + var i, name, list; + + // Run element filters + if (name in nodeFilters) { + list = matchedNodes[name]; + + if (list) { + list.push(node); + } else { + matchedNodes[name] = [node]; + } + } + + // Run attribute filters + i = attributeFilters.length; + while (i--) { + name = attributeFilters[i].name; + + if (name in node.attributes.map) { + list = matchedAttributes[name]; + + if (list) { + list.push(node); + } else { + matchedAttributes[name] = [node]; + } + } + } + + return node; + }; + + /** + * Adds a node filter function to the parser, the parser will collect the specified nodes by name + * and then execute the callback ones it has finished parsing the document. + * + * @example + * parser.addNodeFilter('p,h1', function(nodes, name) { + * for (var i = 0; i < nodes.length; i++) { + * console.log(nodes[i].name); + * } + * }); + * @method addNodeFilter + * @method {String} name Comma separated list of nodes to collect. + * @param {function} callback Callback function to execute once it has collected nodes. + */ + self.addNodeFilter = function(name, callback) { + each(explode(name), function(name) { + var list = nodeFilters[name]; + + if (!list) { + nodeFilters[name] = list = []; + } + + list.push(callback); + }); + }; + + /** + * Adds a attribute filter function to the parser, the parser will collect nodes that has the specified attributes + * and then execute the callback ones it has finished parsing the document. + * + * @example + * parser.addAttributeFilter('src,href', function(nodes, name) { + * for (var i = 0; i < nodes.length; i++) { + * console.log(nodes[i].name); + * } + * }); + * @method addAttributeFilter + * @method {String} name Comma separated list of nodes to collect. + * @param {function} callback Callback function to execute once it has collected nodes. + */ + self.addAttributeFilter = function(name, callback) { + each(explode(name), function(name) { + var i; + + for (i = 0; i < attributeFilters.length; i++) { + if (attributeFilters[i].name === name) { + attributeFilters[i].callbacks.push(callback); + return; + } + } + + attributeFilters.push({name: name, callbacks: [callback]}); + }); + }; + + /** + * Parses the specified HTML string into a DOM like node tree and returns the result. + * + * @example + * var rootNode = new DomParser({...}).parse('text'); + * @method parse + * @param {String} html Html string to sax parse. + * @param {Object} args Optional args object that gets passed to all filter functions. + * @return {tinymce.html.Node} Root node containing the tree. + */ + self.parse = function(html, args) { + var parser, rootNode, node, nodes, i, l, fi, fl, list, name, validate; + var blockElements, startWhiteSpaceRegExp, invalidChildren = [], isInWhiteSpacePreservedElement; + var endWhiteSpaceRegExp, allWhiteSpaceRegExp, isAllWhiteSpaceRegExp, whiteSpaceElements; + var children, nonEmptyElements, rootBlockName; + + args = args || {}; + matchedNodes = {}; + matchedAttributes = {}; + blockElements = extend(makeMap('script,style,head,html,body,title,meta,param'), schema.getBlockElements()); + nonEmptyElements = schema.getNonEmptyElements(); + children = schema.children; + validate = settings.validate; + rootBlockName = "forced_root_block" in args ? args.forced_root_block : settings.forced_root_block; + + whiteSpaceElements = schema.getWhiteSpaceElements(); + startWhiteSpaceRegExp = /^[ \t\r\n]+/; + endWhiteSpaceRegExp = /[ \t\r\n]+$/; + allWhiteSpaceRegExp = /[ \t\r\n]+/g; + isAllWhiteSpaceRegExp = /^[ \t\r\n]+$/; + + function addRootBlocks() { + var node = rootNode.firstChild, next, rootBlockNode; + + // Removes whitespace at beginning and end of block so: + //

    x

    ->

    x

    + function trim(rootBlockNode) { + if (rootBlockNode) { + node = rootBlockNode.firstChild; + if (node && node.type == 3) { + node.value = node.value.replace(startWhiteSpaceRegExp, ''); + } + + node = rootBlockNode.lastChild; + if (node && node.type == 3) { + node.value = node.value.replace(endWhiteSpaceRegExp, ''); + } + } + } + + // Check if rootBlock is valid within rootNode for example if P is valid in H1 if H1 is the contentEditabe root + if (!schema.isValidChild(rootNode.name, rootBlockName.toLowerCase())) { + return; + } + + while (node) { + next = node.next; + + if (node.type == 3 || (node.type == 1 && node.name !== 'p' && + !blockElements[node.name] && !node.attr('data-mce-type'))) { + if (!rootBlockNode) { + // Create a new root block element + rootBlockNode = createNode(rootBlockName, 1); + rootBlockNode.attr(settings.forced_root_block_attrs); + rootNode.insert(rootBlockNode, node); + rootBlockNode.append(node); + } else { + rootBlockNode.append(node); + } + } else { + trim(rootBlockNode); + rootBlockNode = null; + } + + node = next; + } + + trim(rootBlockNode); + } + + function createNode(name, type) { + var node = new Node(name, type), list; + + if (name in nodeFilters) { + list = matchedNodes[name]; + + if (list) { + list.push(node); + } else { + matchedNodes[name] = [node]; + } + } + + return node; + } + + function removeWhitespaceBefore(node) { + var textNode, textVal, sibling; + + for (textNode = node.prev; textNode && textNode.type === 3; ) { + textVal = textNode.value.replace(endWhiteSpaceRegExp, ''); + + if (textVal.length > 0) { + textNode.value = textVal; + textNode = textNode.prev; + } else { + sibling = textNode.prev; + textNode.remove(); + textNode = sibling; + } + } + } + + function cloneAndExcludeBlocks(input) { + var name, output = {}; + + for (name in input) { + if (name !== 'li' && name != 'p') { + output[name] = input[name]; + } + } + + return output; + } + + parser = new SaxParser({ + validate: validate, + allow_script_urls: settings.allow_script_urls, + allow_conditional_comments: settings.allow_conditional_comments, + + // Exclude P and LI from DOM parsing since it's treated better by the DOM parser + self_closing_elements: cloneAndExcludeBlocks(schema.getSelfClosingElements()), + + cdata: function(text) { + node.append(createNode('#cdata', 4)).value = text; + }, + + text: function(text, raw) { + var textNode; + + // Trim all redundant whitespace on non white space elements + if (!isInWhiteSpacePreservedElement) { + text = text.replace(allWhiteSpaceRegExp, ' '); + + if (node.lastChild && blockElements[node.lastChild.name]) { + text = text.replace(startWhiteSpaceRegExp, ''); + } + } + + // Do we need to create the node + if (text.length !== 0) { + textNode = createNode('#text', 3); + textNode.raw = !!raw; + node.append(textNode).value = text; + } + }, + + comment: function(text) { + node.append(createNode('#comment', 8)).value = text; + }, + + pi: function(name, text) { + node.append(createNode(name, 7)).value = text; + removeWhitespaceBefore(node); + }, + + doctype: function(text) { + var newNode; + + newNode = node.append(createNode('#doctype', 10)); + newNode.value = text; + removeWhitespaceBefore(node); + }, + + start: function(name, attrs, empty) { + var newNode, attrFiltersLen, elementRule, attrName, parent; + + elementRule = validate ? schema.getElementRule(name) : {}; + if (elementRule) { + newNode = createNode(elementRule.outputName || name, 1); + newNode.attributes = attrs; + newNode.shortEnded = empty; + + node.append(newNode); + + // Check if node is valid child of the parent node is the child is + // unknown we don't collect it since it's probably a custom element + parent = children[node.name]; + if (parent && children[newNode.name] && !parent[newNode.name]) { + invalidChildren.push(newNode); + } + + attrFiltersLen = attributeFilters.length; + while (attrFiltersLen--) { + attrName = attributeFilters[attrFiltersLen].name; + + if (attrName in attrs.map) { + list = matchedAttributes[attrName]; + + if (list) { + list.push(newNode); + } else { + matchedAttributes[attrName] = [newNode]; + } + } + } + + // Trim whitespace before block + if (blockElements[name]) { + removeWhitespaceBefore(newNode); + } + + // Change current node if the element wasn't empty i.e not
    or + if (!empty) { + node = newNode; + } + + // Check if we are inside a whitespace preserved element + if (!isInWhiteSpacePreservedElement && whiteSpaceElements[name]) { + isInWhiteSpacePreservedElement = true; + } + } + }, + + end: function(name) { + var textNode, elementRule, text, sibling, tempNode; + + elementRule = validate ? schema.getElementRule(name) : {}; + if (elementRule) { + if (blockElements[name]) { + if (!isInWhiteSpacePreservedElement) { + // Trim whitespace of the first node in a block + textNode = node.firstChild; + if (textNode && textNode.type === 3) { + text = textNode.value.replace(startWhiteSpaceRegExp, ''); + + // Any characters left after trim or should we remove it + if (text.length > 0) { + textNode.value = text; + textNode = textNode.next; + } else { + sibling = textNode.next; + textNode.remove(); + textNode = sibling; + + // Remove any pure whitespace siblings + while (textNode && textNode.type === 3) { + text = textNode.value; + sibling = textNode.next; + + if (text.length === 0 || isAllWhiteSpaceRegExp.test(text)) { + textNode.remove(); + textNode = sibling; + } + + textNode = sibling; + } + } + } + + // Trim whitespace of the last node in a block + textNode = node.lastChild; + if (textNode && textNode.type === 3) { + text = textNode.value.replace(endWhiteSpaceRegExp, ''); + + // Any characters left after trim or should we remove it + if (text.length > 0) { + textNode.value = text; + textNode = textNode.prev; + } else { + sibling = textNode.prev; + textNode.remove(); + textNode = sibling; + + // Remove any pure whitespace siblings + while (textNode && textNode.type === 3) { + text = textNode.value; + sibling = textNode.prev; + + if (text.length === 0 || isAllWhiteSpaceRegExp.test(text)) { + textNode.remove(); + textNode = sibling; + } + + textNode = sibling; + } + } + } + } + + // Trim start white space + // Removed due to: #5424 + /*textNode = node.prev; + if (textNode && textNode.type === 3) { + text = textNode.value.replace(startWhiteSpaceRegExp, ''); + + if (text.length > 0) + textNode.value = text; + else + textNode.remove(); + }*/ + } + + // Check if we exited a whitespace preserved element + if (isInWhiteSpacePreservedElement && whiteSpaceElements[name]) { + isInWhiteSpacePreservedElement = false; + } + + // Handle empty nodes + if (elementRule.removeEmpty || elementRule.paddEmpty) { + if (node.isEmpty(nonEmptyElements)) { + if (elementRule.paddEmpty) { + node.empty().append(new Node('#text', '3')).value = '\u00a0'; + } else { + // Leave nodes that have a name like + if (!node.attributes.map.name && !node.attributes.map.id) { + tempNode = node.parent; + node.empty().remove(); + node = tempNode; + return; + } + } + } + } + + node = node.parent; + } + } + }, schema); + + rootNode = node = new Node(args.context || settings.root_name, 11); + + parser.parse(html); + + // Fix invalid children or report invalid children in a contextual parsing + if (validate && invalidChildren.length) { + if (!args.context) { + fixInvalidChildren(invalidChildren); + } else { + args.invalid = true; + } + } + + // Wrap nodes in the root into block elements if the root is body + if (rootBlockName && (rootNode.name == 'body' || args.isRootContent)) { + addRootBlocks(); + } + + // Run filters only when the contents is valid + if (!args.invalid) { + // Run node filters + for (name in matchedNodes) { + list = nodeFilters[name]; + nodes = matchedNodes[name]; + + // Remove already removed children + fi = nodes.length; + while (fi--) { + if (!nodes[fi].parent) { + nodes.splice(fi, 1); + } + } + + for (i = 0, l = list.length; i < l; i++) { + list[i](nodes, name, args); + } + } + + // Run attribute filters + for (i = 0, l = attributeFilters.length; i < l; i++) { + list = attributeFilters[i]; + + if (list.name in matchedAttributes) { + nodes = matchedAttributes[list.name]; + + // Remove already removed children + fi = nodes.length; + while (fi--) { + if (!nodes[fi].parent) { + nodes.splice(fi, 1); + } + } + + for (fi = 0, fl = list.callbacks.length; fi < fl; fi++) { + list.callbacks[fi](nodes, list.name, args); + } + } + } + } + + return rootNode; + }; + + // Remove
    at end of block elements Gecko and WebKit injects BR elements to + // make it possible to place the caret inside empty blocks. This logic tries to remove + // these elements and keep br elements that where intended to be there intact + if (settings.remove_trailing_brs) { + self.addNodeFilter('br', function(nodes) { + var i, l = nodes.length, node, blockElements = extend({}, schema.getBlockElements()); + var nonEmptyElements = schema.getNonEmptyElements(), parent, lastParent, prev, prevName; + var elementRule, textNode; + + // Remove brs from body element as well + blockElements.body = 1; + + // Must loop forwards since it will otherwise remove all brs in

    a


    + for (i = 0; i < l; i++) { + node = nodes[i]; + parent = node.parent; + + if (blockElements[node.parent.name] && node === parent.lastChild) { + // Loop all nodes to the left of the current node and check for other BR elements + // excluding bookmarks since they are invisible + prev = node.prev; + while (prev) { + prevName = prev.name; + + // Ignore bookmarks + if (prevName !== "span" || prev.attr('data-mce-type') !== 'bookmark') { + // Found a non BR element + if (prevName !== "br") { + break; + } + + // Found another br it's a

    structure then don't remove anything + if (prevName === 'br') { + node = null; + break; + } + } + + prev = prev.prev; + } + + if (node) { + node.remove(); + + // Is the parent to be considered empty after we removed the BR + if (parent.isEmpty(nonEmptyElements)) { + elementRule = schema.getElementRule(parent.name); + + // Remove or padd the element depending on schema rule + if (elementRule) { + if (elementRule.removeEmpty) { + parent.remove(); + } else if (elementRule.paddEmpty) { + parent.empty().append(new Node('#text', 3)).value = '\u00a0'; + } + } + } + } + } else { + // Replaces BR elements inside inline elements like


    + // so they become

     

    + lastParent = node; + while (parent && parent.firstChild === lastParent && parent.lastChild === lastParent) { + lastParent = parent; + + if (blockElements[parent.name]) { + break; + } + + parent = parent.parent; + } + + if (lastParent === parent) { + textNode = new Node('#text', 3); + textNode.value = '\u00a0'; + node.replace(textNode); + } + } + } + }); + } + + // Force anchor names closed, unless the setting "allow_html_in_named_anchor" is explicitly included. + if (!settings.allow_html_in_named_anchor) { + self.addAttributeFilter('id,name', function(nodes) { + var i = nodes.length, sibling, prevSibling, parent, node; + + while (i--) { + node = nodes[i]; + if (node.name === 'a' && node.firstChild && !node.attr('href')) { + parent = node.parent; + + // Move children after current node + sibling = node.lastChild; + do { + prevSibling = sibling.prev; + parent.insert(sibling, node); + sibling = prevSibling; + } while (sibling); + } + } + }); + } + }; +}); + +// Included from: js/tinymce/classes/html/Writer.js + +/** + * Writer.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class is used to write HTML tags out it can be used with the Serializer or the SaxParser. + * + * @class tinymce.html.Writer + * @example + * var writer = new tinymce.html.Writer({indent: true}); + * var parser = new tinymce.html.SaxParser(writer).parse('


    '); + * console.log(writer.getContent()); + * + * @class tinymce.html.Writer + * @version 3.4 + */ +define("tinymce/html/Writer", [ + "tinymce/html/Entities", + "tinymce/util/Tools" +], function(Entities, Tools) { + var makeMap = Tools.makeMap; + + /** + * Constructs a new Writer instance. + * + * @constructor + * @method Writer + * @param {Object} settings Name/value settings object. + */ + return function(settings) { + var html = [], indent, indentBefore, indentAfter, encode, htmlOutput; + + settings = settings || {}; + indent = settings.indent; + indentBefore = makeMap(settings.indent_before || ''); + indentAfter = makeMap(settings.indent_after || ''); + encode = Entities.getEncodeFunc(settings.entity_encoding || 'raw', settings.entities); + htmlOutput = settings.element_format == "html"; + + return { + /** + * Writes the a start element such as

    . + * + * @method start + * @param {String} name Name of the element. + * @param {Array} attrs Optional attribute array or undefined if it hasn't any. + * @param {Boolean} empty Optional empty state if the tag should end like
    . + */ + start: function(name, attrs, empty) { + var i, l, attr, value; + + if (indent && indentBefore[name] && html.length > 0) { + value = html[html.length - 1]; + + if (value.length > 0 && value !== '\n') { + html.push('\n'); + } + } + + html.push('<', name); + + if (attrs) { + for (i = 0, l = attrs.length; i < l; i++) { + attr = attrs[i]; + html.push(' ', attr.name, '="', encode(attr.value, true), '"'); + } + } + + if (!empty || htmlOutput) { + html[html.length] = '>'; + } else { + html[html.length] = ' />'; + } + + if (empty && indent && indentAfter[name] && html.length > 0) { + value = html[html.length - 1]; + + if (value.length > 0 && value !== '\n') { + html.push('\n'); + } + } + }, + + /** + * Writes the a end element such as

    . + * + * @method end + * @param {String} name Name of the element. + */ + end: function(name) { + var value; + + /*if (indent && indentBefore[name] && html.length > 0) { + value = html[html.length - 1]; + + if (value.length > 0 && value !== '\n') + html.push('\n'); + }*/ + + html.push(''); + + if (indent && indentAfter[name] && html.length > 0) { + value = html[html.length - 1]; + + if (value.length > 0 && value !== '\n') { + html.push('\n'); + } + } + }, + + /** + * Writes a text node. + * + * @method text + * @param {String} text String to write out. + * @param {Boolean} raw Optional raw state if true the contents wont get encoded. + */ + text: function(text, raw) { + if (text.length > 0) { + html[html.length] = raw ? text : encode(text); + } + }, + + /** + * Writes a cdata node such as . + * + * @method cdata + * @param {String} text String to write out inside the cdata. + */ + cdata: function(text) { + html.push(''); + }, + + /** + * Writes a comment node such as . + * + * @method cdata + * @param {String} text String to write out inside the comment. + */ + comment: function(text) { + html.push(''); + }, + + /** + * Writes a PI node such as . + * + * @method pi + * @param {String} name Name of the pi. + * @param {String} text String to write out inside the pi. + */ + pi: function(name, text) { + if (text) { + html.push(''); + } else { + html.push(''); + } + + if (indent) { + html.push('\n'); + } + }, + + /** + * Writes a doctype node such as . + * + * @method doctype + * @param {String} text String to write out inside the doctype. + */ + doctype: function(text) { + html.push('', indent ? '\n' : ''); + }, + + /** + * Resets the internal buffer if one wants to reuse the writer. + * + * @method reset + */ + reset: function() { + html.length = 0; + }, + + /** + * Returns the contents that got serialized. + * + * @method getContent + * @return {String} HTML contents that got written down. + */ + getContent: function() { + return html.join('').replace(/\n$/, ''); + } + }; + }; +}); + +// Included from: js/tinymce/classes/html/Serializer.js + +/** + * Serializer.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class is used to serialize down the DOM tree into a string using a Writer instance. + * + * + * @example + * new tinymce.html.Serializer().serialize(new tinymce.html.DomParser().parse('

    text

    ')); + * @class tinymce.html.Serializer + * @version 3.4 + */ +define("tinymce/html/Serializer", [ + "tinymce/html/Writer", + "tinymce/html/Schema" +], function(Writer, Schema) { + /** + * Constructs a new Serializer instance. + * + * @constructor + * @method Serializer + * @param {Object} settings Name/value settings object. + * @param {tinymce.html.Schema} schema Schema instance to use. + */ + return function(settings, schema) { + var self = this, writer = new Writer(settings); + + settings = settings || {}; + settings.validate = "validate" in settings ? settings.validate : true; + + self.schema = schema = schema || new Schema(); + self.writer = writer; + + /** + * Serializes the specified node into a string. + * + * @example + * new tinymce.html.Serializer().serialize(new tinymce.html.DomParser().parse('

    text

    ')); + * @method serialize + * @param {tinymce.html.Node} node Node instance to serialize. + * @return {String} String with HTML based on DOM tree. + */ + self.serialize = function(node) { + var handlers, validate; + + validate = settings.validate; + + handlers = { + // #text + 3: function(node) { + writer.text(node.value, node.raw); + }, + + // #comment + 8: function(node) { + writer.comment(node.value); + }, + + // Processing instruction + 7: function(node) { + writer.pi(node.name, node.value); + }, + + // Doctype + 10: function(node) { + writer.doctype(node.value); + }, + + // CDATA + 4: function(node) { + writer.cdata(node.value); + }, + + // Document fragment + 11: function(node) { + if ((node = node.firstChild)) { + do { + walk(node); + } while ((node = node.next)); + } + } + }; + + writer.reset(); + + function walk(node) { + var handler = handlers[node.type], name, isEmpty, attrs, attrName, attrValue, sortedAttrs, i, l, elementRule; + + if (!handler) { + name = node.name; + isEmpty = node.shortEnded; + attrs = node.attributes; + + // Sort attributes + if (validate && attrs && attrs.length > 1) { + sortedAttrs = []; + sortedAttrs.map = {}; + + elementRule = schema.getElementRule(node.name); + for (i = 0, l = elementRule.attributesOrder.length; i < l; i++) { + attrName = elementRule.attributesOrder[i]; + + if (attrName in attrs.map) { + attrValue = attrs.map[attrName]; + sortedAttrs.map[attrName] = attrValue; + sortedAttrs.push({name: attrName, value: attrValue}); + } + } + + for (i = 0, l = attrs.length; i < l; i++) { + attrName = attrs[i].name; + + if (!(attrName in sortedAttrs.map)) { + attrValue = attrs.map[attrName]; + sortedAttrs.map[attrName] = attrValue; + sortedAttrs.push({name: attrName, value: attrValue}); + } + } + + attrs = sortedAttrs; + } + + writer.start(node.name, attrs, isEmpty); + + if (!isEmpty) { + if ((node = node.firstChild)) { + do { + walk(node); + } while ((node = node.next)); + } + + writer.end(name); + } + } else { + handler(node); + } + } + + // Serialize element and treat all non elements as fragments + if (node.type == 1 && !settings.inner) { + walk(node); + } else { + handlers[11](node); + } + + return writer.getContent(); + }; + }; +}); + +// Included from: js/tinymce/classes/dom/Serializer.js + +/** + * Serializer.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class is used to serialize DOM trees into a string. Consult the TinyMCE Wiki API for + * more details and examples on how to use this class. + * + * @class tinymce.dom.Serializer + */ +define("tinymce/dom/Serializer", [ + "tinymce/dom/DOMUtils", + "tinymce/html/DomParser", + "tinymce/html/Entities", + "tinymce/html/Serializer", + "tinymce/html/Node", + "tinymce/html/Schema", + "tinymce/Env", + "tinymce/util/Tools" +], function(DOMUtils, DomParser, Entities, Serializer, Node, Schema, Env, Tools) { + var each = Tools.each, trim = Tools.trim; + var DOM = DOMUtils.DOM; + + /** + * Constructs a new DOM serializer class. + * + * @constructor + * @method Serializer + * @param {Object} settings Serializer settings object. + * @param {tinymce.Editor} editor Optional editor to bind events to and get schema/dom from. + */ + return function(settings, editor) { + var dom, schema, htmlParser; + + if (editor) { + dom = editor.dom; + schema = editor.schema; + } + + // Default DOM and Schema if they are undefined + dom = dom || DOM; + schema = schema || new Schema(settings); + settings.entity_encoding = settings.entity_encoding || 'named'; + settings.remove_trailing_brs = "remove_trailing_brs" in settings ? settings.remove_trailing_brs : true; + + htmlParser = new DomParser(settings, schema); + + // Convert move data-mce-src, data-mce-href and data-mce-style into nodes or process them if needed + htmlParser.addAttributeFilter('src,href,style', function(nodes, name) { + var i = nodes.length, node, value, internalName = 'data-mce-' + name; + var urlConverter = settings.url_converter, urlConverterScope = settings.url_converter_scope, undef; + + while (i--) { + node = nodes[i]; + + value = node.attributes.map[internalName]; + if (value !== undef) { + // Set external name to internal value and remove internal + node.attr(name, value.length > 0 ? value : null); + node.attr(internalName, null); + } else { + // No internal attribute found then convert the value we have in the DOM + value = node.attributes.map[name]; + + if (name === "style") { + value = dom.serializeStyle(dom.parseStyle(value), node.name); + } else if (urlConverter) { + value = urlConverter.call(urlConverterScope, value, name, node.name); + } + + node.attr(name, value.length > 0 ? value : null); + } + } + }); + + // Remove internal classes mceItem<..> or mceSelected + htmlParser.addAttributeFilter('class', function(nodes) { + var i = nodes.length, node, value; + + while (i--) { + node = nodes[i]; + value = node.attr('class').replace(/(?:^|\s)mce-item-\w+(?!\S)/g, ''); + node.attr('class', value.length > 0 ? value : null); + } + }); + + // Remove bookmark elements + htmlParser.addAttributeFilter('data-mce-type', function(nodes, name, args) { + var i = nodes.length, node; + + while (i--) { + node = nodes[i]; + + if (node.attributes.map['data-mce-type'] === 'bookmark' && !args.cleanup) { + node.remove(); + } + } + }); + + // Remove expando attributes + htmlParser.addAttributeFilter('data-mce-expando', function(nodes, name) { + var i = nodes.length; + + while (i--) { + nodes[i].attr(name, null); + } + }); + + htmlParser.addNodeFilter('noscript', function(nodes) { + var i = nodes.length, node; + + while (i--) { + node = nodes[i].firstChild; + + if (node) { + node.value = Entities.decode(node.value); + } + } + }); + + // Force script into CDATA sections and remove the mce- prefix also add comments around styles + htmlParser.addNodeFilter('script,style', function(nodes, name) { + var i = nodes.length, node, value; + + function trim(value) { + /*jshint maxlen:255 */ + /*eslint max-len:0 */ + return value.replace(/()/g, '\n') + .replace(/^[\r\n]*|[\r\n]*$/g, '') + .replace(/^\s*(()?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g, ''); + } + + while (i--) { + node = nodes[i]; + value = node.firstChild ? node.firstChild.value : ''; + + if (name === "script") { + // Remove mce- prefix from script elements and remove default text/javascript mime type (HTML5) + var type = (node.attr('type') || 'text/javascript').replace(/^mce\-/, ''); + node.attr('type', type === 'text/javascript' ? null : type); + + if (value.length > 0) { + node.firstChild.value = '// '; + } + } else { + if (value.length > 0) { + node.firstChild.value = ''; + } + } + } + }); + + // Convert comments to cdata and handle protected comments + htmlParser.addNodeFilter('#comment', function(nodes) { + var i = nodes.length, node; + + while (i--) { + node = nodes[i]; + + if (node.value.indexOf('[CDATA[') === 0) { + node.name = '#cdata'; + node.type = 4; + node.value = node.value.replace(/^\[CDATA\[|\]\]$/g, ''); + } else if (node.value.indexOf('mce:protected ') === 0) { + node.name = "#text"; + node.type = 3; + node.raw = true; + node.value = unescape(node.value).substr(14); + } + } + }); + + htmlParser.addNodeFilter('xml:namespace,input', function(nodes, name) { + var i = nodes.length, node; + + while (i--) { + node = nodes[i]; + if (node.type === 7) { + node.remove(); + } else if (node.type === 1) { + if (name === "input" && !("type" in node.attributes.map)) { + node.attr('type', 'text'); + } + } + } + }); + + // Fix list elements, TODO: Replace this later + if (settings.fix_list_elements) { + htmlParser.addNodeFilter('ul,ol', function(nodes) { + var i = nodes.length, node, parentNode; + + while (i--) { + node = nodes[i]; + parentNode = node.parent; + + if (parentNode.name === 'ul' || parentNode.name === 'ol') { + if (node.prev && node.prev.name === 'li') { + node.prev.append(node); + } + } + } + }); + } + + // Remove internal data attributes + htmlParser.addAttributeFilter('data-mce-src,data-mce-href,data-mce-style,data-mce-selected', function(nodes, name) { + var i = nodes.length; + + while (i--) { + nodes[i].attr(name, null); + } + }); + + // Return public methods + return { + /** + * Schema instance that was used to when the Serializer was constructed. + * + * @field {tinymce.html.Schema} schema + */ + schema: schema, + + /** + * Adds a node filter function to the parser used by the serializer, the parser will collect the specified nodes by name + * and then execute the callback ones it has finished parsing the document. + * + * @example + * parser.addNodeFilter('p,h1', function(nodes, name) { + * for (var i = 0; i < nodes.length; i++) { + * console.log(nodes[i].name); + * } + * }); + * @method addNodeFilter + * @method {String} name Comma separated list of nodes to collect. + * @param {function} callback Callback function to execute once it has collected nodes. + */ + addNodeFilter: htmlParser.addNodeFilter, + + /** + * Adds a attribute filter function to the parser used by the serializer, the parser will + * collect nodes that has the specified attributes + * and then execute the callback ones it has finished parsing the document. + * + * @example + * parser.addAttributeFilter('src,href', function(nodes, name) { + * for (var i = 0; i < nodes.length; i++) { + * console.log(nodes[i].name); + * } + * }); + * @method addAttributeFilter + * @method {String} name Comma separated list of nodes to collect. + * @param {function} callback Callback function to execute once it has collected nodes. + */ + addAttributeFilter: htmlParser.addAttributeFilter, + + /** + * Serializes the specified browser DOM node into a HTML string. + * + * @method serialize + * @param {DOMNode} node DOM node to serialize. + * @param {Object} args Arguments option that gets passed to event handlers. + */ + serialize: function(node, args) { + var self = this, impl, doc, oldDoc, htmlSerializer, content; + + // Explorer won't clone contents of script and style and the + // selected index of select elements are cleared on a clone operation. + if (Env.ie && dom.select('script,style,select,map').length > 0) { + content = node.innerHTML; + node = node.cloneNode(false); + dom.setHTML(node, content); + } else { + node = node.cloneNode(true); + } + + // Nodes needs to be attached to something in WebKit/Opera + // This fix will make DOM ranges and make Sizzle happy! + impl = node.ownerDocument.implementation; + if (impl.createHTMLDocument) { + // Create an empty HTML document + doc = impl.createHTMLDocument(""); + + // Add the element or it's children if it's a body element to the new document + each(node.nodeName == 'BODY' ? node.childNodes : [node], function(node) { + doc.body.appendChild(doc.importNode(node, true)); + }); + + // Grab first child or body element for serialization + if (node.nodeName != 'BODY') { + node = doc.body.firstChild; + } else { + node = doc.body; + } + + // set the new document in DOMUtils so createElement etc works + oldDoc = dom.doc; + dom.doc = doc; + } + + args = args || {}; + args.format = args.format || 'html'; + + // Don't wrap content if we want selected html + if (args.selection) { + args.forced_root_block = ''; + } + + // Pre process + if (!args.no_events) { + args.node = node; + self.onPreProcess(args); + } + + // Setup serializer + htmlSerializer = new Serializer(settings, schema); + + // Parse and serialize HTML + args.content = htmlSerializer.serialize( + htmlParser.parse(trim(args.getInner ? node.innerHTML : dom.getOuterHTML(node)), args) + ); + + // Replace all BOM characters for now until we can find a better solution + if (!args.cleanup) { + args.content = args.content.replace(/\uFEFF/g, ''); + } + + // Post process + if (!args.no_events) { + self.onPostProcess(args); + } + + // Restore the old document if it was changed + if (oldDoc) { + dom.doc = oldDoc; + } + + args.node = null; + + return args.content; + }, + + /** + * Adds valid elements rules to the serializers schema instance this enables you to specify things + * like what elements should be outputted and what attributes specific elements might have. + * Consult the Wiki for more details on this format. + * + * @method addRules + * @param {String} rules Valid elements rules string to add to schema. + */ + addRules: function(rules) { + schema.addValidElements(rules); + }, + + /** + * Sets the valid elements rules to the serializers schema instance this enables you to specify things + * like what elements should be outputted and what attributes specific elements might have. + * Consult the Wiki for more details on this format. + * + * @method setRules + * @param {String} rules Valid elements rules string. + */ + setRules: function(rules) { + schema.setValidElements(rules); + }, + + onPreProcess: function(args) { + if (editor) { + editor.fire('PreProcess', args); + } + }, + + onPostProcess: function(args) { + if (editor) { + editor.fire('PostProcess', args); + } + } + }; + }; +}); + +// Included from: js/tinymce/classes/dom/TridentSelection.js + +/** + * TridentSelection.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Selection class for old explorer versions. This one fakes the + * native selection object available on modern browsers. + * + * @class tinymce.dom.TridentSelection + */ +define("tinymce/dom/TridentSelection", [], function() { + function Selection(selection) { + var self = this, dom = selection.dom, FALSE = false; + + function getPosition(rng, start) { + var checkRng, startIndex = 0, endIndex, inside, + children, child, offset, index, position = -1, parent; + + // Setup test range, collapse it and get the parent + checkRng = rng.duplicate(); + checkRng.collapse(start); + parent = checkRng.parentElement(); + + // Check if the selection is within the right document + if (parent.ownerDocument !== selection.dom.doc) { + return; + } + + // IE will report non editable elements as it's parent so look for an editable one + while (parent.contentEditable === "false") { + parent = parent.parentNode; + } + + // If parent doesn't have any children then return that we are inside the element + if (!parent.hasChildNodes()) { + return {node: parent, inside: 1}; + } + + // Setup node list and endIndex + children = parent.children; + endIndex = children.length - 1; + + // Perform a binary search for the position + while (startIndex <= endIndex) { + index = Math.floor((startIndex + endIndex) / 2); + + // Move selection to node and compare the ranges + child = children[index]; + checkRng.moveToElementText(child); + position = checkRng.compareEndPoints(start ? 'StartToStart' : 'EndToEnd', rng); + + // Before/after or an exact match + if (position > 0) { + endIndex = index - 1; + } else if (position < 0) { + startIndex = index + 1; + } else { + return {node: child}; + } + } + + // Check if child position is before or we didn't find a position + if (position < 0) { + // No element child was found use the parent element and the offset inside that + if (!child) { + checkRng.moveToElementText(parent); + checkRng.collapse(true); + child = parent; + inside = true; + } else { + checkRng.collapse(false); + } + + // Walk character by character in text node until we hit the selected range endpoint, + // hit the end of document or parent isn't the right one + // We need to walk char by char since rng.text or rng.htmlText will trim line endings + offset = 0; + while (checkRng.compareEndPoints(start ? 'StartToStart' : 'StartToEnd', rng) !== 0) { + if (checkRng.move('character', 1) === 0 || parent != checkRng.parentElement()) { + break; + } + + offset++; + } + } else { + // Child position is after the selection endpoint + checkRng.collapse(true); + + // Walk character by character in text node until we hit the selected range endpoint, hit + // the end of document or parent isn't the right one + offset = 0; + while (checkRng.compareEndPoints(start ? 'StartToStart' : 'StartToEnd', rng) !== 0) { + if (checkRng.move('character', -1) === 0 || parent != checkRng.parentElement()) { + break; + } + + offset++; + } + } + + return {node: child, position: position, offset: offset, inside: inside}; + } + + // Returns a W3C DOM compatible range object by using the IE Range API + function getRange() { + var ieRange = selection.getRng(), domRange = dom.createRng(), element, collapsed, tmpRange, element2, bookmark; + + // If selection is outside the current document just return an empty range + element = ieRange.item ? ieRange.item(0) : ieRange.parentElement(); + if (element.ownerDocument != dom.doc) { + return domRange; + } + + collapsed = selection.isCollapsed(); + + // Handle control selection + if (ieRange.item) { + domRange.setStart(element.parentNode, dom.nodeIndex(element)); + domRange.setEnd(domRange.startContainer, domRange.startOffset + 1); + + return domRange; + } + + function findEndPoint(start) { + var endPoint = getPosition(ieRange, start), container, offset, textNodeOffset = 0, sibling, undef, nodeValue; + + container = endPoint.node; + offset = endPoint.offset; + + if (endPoint.inside && !container.hasChildNodes()) { + domRange[start ? 'setStart' : 'setEnd'](container, 0); + return; + } + + if (offset === undef) { + domRange[start ? 'setStartBefore' : 'setEndAfter'](container); + return; + } + + if (endPoint.position < 0) { + sibling = endPoint.inside ? container.firstChild : container.nextSibling; + + if (!sibling) { + domRange[start ? 'setStartAfter' : 'setEndAfter'](container); + return; + } + + if (!offset) { + if (sibling.nodeType == 3) { + domRange[start ? 'setStart' : 'setEnd'](sibling, 0); + } else { + domRange[start ? 'setStartBefore' : 'setEndBefore'](sibling); + } + + return; + } + + // Find the text node and offset + while (sibling) { + nodeValue = sibling.nodeValue; + textNodeOffset += nodeValue.length; + + // We are at or passed the position we where looking for + if (textNodeOffset >= offset) { + container = sibling; + textNodeOffset -= offset; + textNodeOffset = nodeValue.length - textNodeOffset; + break; + } + + sibling = sibling.nextSibling; + } + } else { + // Find the text node and offset + sibling = container.previousSibling; + + if (!sibling) { + return domRange[start ? 'setStartBefore' : 'setEndBefore'](container); + } + + // If there isn't any text to loop then use the first position + if (!offset) { + if (container.nodeType == 3) { + domRange[start ? 'setStart' : 'setEnd'](sibling, container.nodeValue.length); + } else { + domRange[start ? 'setStartAfter' : 'setEndAfter'](sibling); + } + + return; + } + + while (sibling) { + textNodeOffset += sibling.nodeValue.length; + + // We are at or passed the position we where looking for + if (textNodeOffset >= offset) { + container = sibling; + textNodeOffset -= offset; + break; + } + + sibling = sibling.previousSibling; + } + } + + domRange[start ? 'setStart' : 'setEnd'](container, textNodeOffset); + } + + try { + // Find start point + findEndPoint(true); + + // Find end point if needed + if (!collapsed) { + findEndPoint(); + } + } catch (ex) { + // IE has a nasty bug where text nodes might throw "invalid argument" when you + // access the nodeValue or other properties of text nodes. This seems to happend when + // text nodes are split into two nodes by a delete/backspace call. So lets detect it and try to fix it. + if (ex.number == -2147024809) { + // Get the current selection + bookmark = self.getBookmark(2); + + // Get start element + tmpRange = ieRange.duplicate(); + tmpRange.collapse(true); + element = tmpRange.parentElement(); + + // Get end element + if (!collapsed) { + tmpRange = ieRange.duplicate(); + tmpRange.collapse(false); + element2 = tmpRange.parentElement(); + element2.innerHTML = element2.innerHTML; + } + + // Remove the broken elements + element.innerHTML = element.innerHTML; + + // Restore the selection + self.moveToBookmark(bookmark); + + // Since the range has moved we need to re-get it + ieRange = selection.getRng(); + + // Find start point + findEndPoint(true); + + // Find end point if needed + if (!collapsed) { + findEndPoint(); + } + } else { + throw ex; // Throw other errors + } + } + + return domRange; + } + + this.getBookmark = function(type) { + var rng = selection.getRng(), bookmark = {}; + + function getIndexes(node) { + var parent, root, children, i, indexes = []; + + parent = node.parentNode; + root = dom.getRoot().parentNode; + + while (parent != root && parent.nodeType !== 9) { + children = parent.children; + + i = children.length; + while (i--) { + if (node === children[i]) { + indexes.push(i); + break; + } + } + + node = parent; + parent = parent.parentNode; + } + + return indexes; + } + + function getBookmarkEndPoint(start) { + var position; + + position = getPosition(rng, start); + if (position) { + return { + position: position.position, + offset: position.offset, + indexes: getIndexes(position.node), + inside: position.inside + }; + } + } + + // Non ubstructive bookmark + if (type === 2) { + // Handle text selection + if (!rng.item) { + bookmark.start = getBookmarkEndPoint(true); + + if (!selection.isCollapsed()) { + bookmark.end = getBookmarkEndPoint(); + } + } else { + bookmark.start = {ctrl: true, indexes: getIndexes(rng.item(0))}; + } + } + + return bookmark; + }; + + this.moveToBookmark = function(bookmark) { + var rng, body = dom.doc.body; + + function resolveIndexes(indexes) { + var node, i, idx, children; + + node = dom.getRoot(); + for (i = indexes.length - 1; i >= 0; i--) { + children = node.children; + idx = indexes[i]; + + if (idx <= children.length - 1) { + node = children[idx]; + } + } + + return node; + } + + function setBookmarkEndPoint(start) { + var endPoint = bookmark[start ? 'start' : 'end'], moveLeft, moveRng, undef, offset; + + if (endPoint) { + moveLeft = endPoint.position > 0; + + moveRng = body.createTextRange(); + moveRng.moveToElementText(resolveIndexes(endPoint.indexes)); + + offset = endPoint.offset; + if (offset !== undef) { + moveRng.collapse(endPoint.inside || moveLeft); + moveRng.moveStart('character', moveLeft ? -offset : offset); + } else { + moveRng.collapse(start); + } + + rng.setEndPoint(start ? 'StartToStart' : 'EndToStart', moveRng); + + if (start) { + rng.collapse(true); + } + } + } + + if (bookmark.start) { + if (bookmark.start.ctrl) { + rng = body.createControlRange(); + rng.addElement(resolveIndexes(bookmark.start.indexes)); + rng.select(); + } else { + rng = body.createTextRange(); + setBookmarkEndPoint(true); + setBookmarkEndPoint(); + rng.select(); + } + } + }; + + this.addRange = function(rng) { + var ieRng, ctrlRng, startContainer, startOffset, endContainer, endOffset, sibling, + doc = selection.dom.doc, body = doc.body, nativeRng, ctrlElm; + + function setEndPoint(start) { + var container, offset, marker, tmpRng, nodes; + + marker = dom.create('a'); + container = start ? startContainer : endContainer; + offset = start ? startOffset : endOffset; + tmpRng = ieRng.duplicate(); + + if (container == doc || container == doc.documentElement) { + container = body; + offset = 0; + } + + if (container.nodeType == 3) { + container.parentNode.insertBefore(marker, container); + tmpRng.moveToElementText(marker); + tmpRng.moveStart('character', offset); + dom.remove(marker); + ieRng.setEndPoint(start ? 'StartToStart' : 'EndToEnd', tmpRng); + } else { + nodes = container.childNodes; + + if (nodes.length) { + if (offset >= nodes.length) { + dom.insertAfter(marker, nodes[nodes.length - 1]); + } else { + container.insertBefore(marker, nodes[offset]); + } + + tmpRng.moveToElementText(marker); + } else if (container.canHaveHTML) { + // Empty node selection for example
    |
    + // Setting innerHTML with a span marker then remove that marker seems to keep empty block elements open + container.innerHTML = ''; + marker = container.firstChild; + tmpRng.moveToElementText(marker); + tmpRng.collapse(FALSE); // Collapse false works better than true for some odd reason + } + + ieRng.setEndPoint(start ? 'StartToStart' : 'EndToEnd', tmpRng); + dom.remove(marker); + } + } + + // Setup some shorter versions + startContainer = rng.startContainer; + startOffset = rng.startOffset; + endContainer = rng.endContainer; + endOffset = rng.endOffset; + ieRng = body.createTextRange(); + + // If single element selection then try making a control selection out of it + if (startContainer == endContainer && startContainer.nodeType == 1) { + // Trick to place the caret inside an empty block element like

    + if (startOffset == endOffset && !startContainer.hasChildNodes()) { + if (startContainer.canHaveHTML) { + // Check if previous sibling is an empty block if it is then we need to render it + // IE would otherwise move the caret into the sibling instead of the empty startContainer see: #5236 + // Example this:

    |

    would become this:

    |

    + sibling = startContainer.previousSibling; + if (sibling && !sibling.hasChildNodes() && dom.isBlock(sibling)) { + sibling.innerHTML = ''; + } else { + sibling = null; + } + + startContainer.innerHTML = ''; + ieRng.moveToElementText(startContainer.lastChild); + ieRng.select(); + dom.doc.selection.clear(); + startContainer.innerHTML = ''; + + if (sibling) { + sibling.innerHTML = ''; + } + return; + } else { + startOffset = dom.nodeIndex(startContainer); + startContainer = startContainer.parentNode; + } + } + + if (startOffset == endOffset - 1) { + try { + ctrlElm = startContainer.childNodes[startOffset]; + ctrlRng = body.createControlRange(); + ctrlRng.addElement(ctrlElm); + ctrlRng.select(); + + // Check if the range produced is on the correct element and is a control range + // On IE 8 it will select the parent contentEditable container if you select an inner element see: #5398 + nativeRng = selection.getRng(); + if (nativeRng.item && ctrlElm === nativeRng.item(0)) { + return; + } + } catch (ex) { + // Ignore + } + } + } + + // Set start/end point of selection + setEndPoint(true); + setEndPoint(); + + // Select the new range and scroll it into view + ieRng.select(); + }; + + // Expose range method + this.getRangeAt = getRange; + } + + return Selection; +}); + +// Included from: js/tinymce/classes/util/VK.js + +/** + * VK.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This file exposes a set of the common KeyCodes for use. Please grow it as needed. + */ +define("tinymce/util/VK", [ + "tinymce/Env" +], function(Env) { + return { + BACKSPACE: 8, + DELETE: 46, + DOWN: 40, + ENTER: 13, + LEFT: 37, + RIGHT: 39, + SPACEBAR: 32, + TAB: 9, + UP: 38, + + modifierPressed: function(e) { + return e.shiftKey || e.ctrlKey || e.altKey; + }, + + metaKeyPressed: function(e) { + // Check if ctrl or meta key is pressed also check if alt is false for Polish users + return (Env.mac ? e.metaKey : e.ctrlKey) && !e.altKey; + } + }; +}); + +// Included from: js/tinymce/classes/dom/ControlSelection.js + +/** + * ControlSelection.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class handles control selection of elements. Controls are elements + * that can be resized and needs to be selected as a whole. It adds custom resize handles + * to all browser engines that support properly disabling the built in resize logic. + * + * @class tinymce.dom.ControlSelection + */ +define("tinymce/dom/ControlSelection", [ + "tinymce/util/VK", + "tinymce/util/Tools", + "tinymce/Env" +], function(VK, Tools, Env) { + return function(selection, editor) { + var dom = editor.dom, each = Tools.each; + var selectedElm, selectedElmGhost, resizeHandles, selectedHandle, lastMouseDownEvent; + var startX, startY, selectedElmX, selectedElmY, startW, startH, ratio, resizeStarted; + var width, height, editableDoc = editor.getDoc(), rootDocument = document, isIE = Env.ie && Env.ie < 11; + + // Details about each resize handle how to scale etc + resizeHandles = { + // Name: x multiplier, y multiplier, delta size x, delta size y + n: [0.5, 0, 0, -1], + e: [1, 0.5, 1, 0], + s: [0.5, 1, 0, 1], + w: [0, 0.5, -1, 0], + nw: [0, 0, -1, -1], + ne: [1, 0, 1, -1], + se: [1, 1, 1, 1], + sw: [0, 1, -1, 1] + }; + + // Add CSS for resize handles, cloned element and selected + var rootClass = '.mce-content-body'; + editor.contentStyles.push( + rootClass + ' div.mce-resizehandle {' + + 'position: absolute;' + + 'border: 1px solid black;' + + 'background: #FFF;' + + 'width: 5px;' + + 'height: 5px;' + + 'z-index: 10000' + + '}' + + rootClass + ' .mce-resizehandle:hover {' + + 'background: #000' + + '}' + + rootClass + ' img[data-mce-selected], hr[data-mce-selected] {' + + 'outline: 1px solid black;' + + 'resize: none' + // Have been talks about implementing this in browsers + '}' + + rootClass + ' .mce-clonedresizable {' + + 'position: absolute;' + + (Env.gecko ? '' : 'outline: 1px dashed black;') + // Gecko produces trails while resizing + 'opacity: .5;' + + 'filter: alpha(opacity=50);' + + 'z-index: 10000' + + '}' + ); + + function isResizable(elm) { + var selector = editor.settings.object_resizing; + + if (selector === false || Env.iOS) { + return false; + } + + if (typeof selector != 'string') { + selector = 'table,img,div'; + } + + if (elm.getAttribute('data-mce-resize') === 'false') { + return false; + } + + return editor.dom.is(elm, selector); + } + + function resizeGhostElement(e) { + var deltaX, deltaY; + + // Calc new width/height + deltaX = e.screenX - startX; + deltaY = e.screenY - startY; + + // Calc new size + width = deltaX * selectedHandle[2] + startW; + height = deltaY * selectedHandle[3] + startH; + + // Never scale down lower than 5 pixels + width = width < 5 ? 5 : width; + height = height < 5 ? 5 : height; + + // Constrain proportions when modifier key is pressed or if the nw, ne, sw, se corners are moved on an image + if (VK.modifierPressed(e) || (selectedElm.nodeName == "IMG" && selectedHandle[2] * selectedHandle[3] !== 0)) { + width = Math.round(height / ratio); + height = Math.round(width * ratio); + } + + // Update ghost size + dom.setStyles(selectedElmGhost, { + width: width, + height: height + }); + + // Update ghost X position if needed + if (selectedHandle[2] < 0 && selectedElmGhost.clientWidth <= width) { + dom.setStyle(selectedElmGhost, 'left', selectedElmX + (startW - width)); + } + + // Update ghost Y position if needed + if (selectedHandle[3] < 0 && selectedElmGhost.clientHeight <= height) { + dom.setStyle(selectedElmGhost, 'top', selectedElmY + (startH - height)); + } + + if (!resizeStarted) { + editor.fire('ObjectResizeStart', {target: selectedElm, width: startW, height: startH}); + resizeStarted = true; + } + } + + function endGhostResize() { + resizeStarted = false; + + function setSizeProp(name, value) { + if (value) { + // Resize by using style or attribute + if (selectedElm.style[name] || !editor.schema.isValid(selectedElm.nodeName.toLowerCase(), name)) { + dom.setStyle(selectedElm, name, value); + } else { + dom.setAttrib(selectedElm, name, value); + } + } + } + + // Set width/height properties + setSizeProp('width', width); + setSizeProp('height', height); + + dom.unbind(editableDoc, 'mousemove', resizeGhostElement); + dom.unbind(editableDoc, 'mouseup', endGhostResize); + + if (rootDocument != editableDoc) { + dom.unbind(rootDocument, 'mousemove', resizeGhostElement); + dom.unbind(rootDocument, 'mouseup', endGhostResize); + } + + // Remove ghost and update resize handle positions + dom.remove(selectedElmGhost); + + if (!isIE || selectedElm.nodeName == "TABLE") { + showResizeRect(selectedElm); + } + + editor.fire('ObjectResized', {target: selectedElm, width: width, height: height}); + editor.nodeChanged(); + } + + function showResizeRect(targetElm, mouseDownHandleName, mouseDownEvent) { + var position, targetWidth, targetHeight, e, rect, offsetParent = editor.getBody(); + + unbindResizeHandleEvents(); + + // Get position and size of target + position = dom.getPos(targetElm, offsetParent); + selectedElmX = position.x; + selectedElmY = position.y; + rect = targetElm.getBoundingClientRect(); // Fix for Gecko offsetHeight for table with caption + targetWidth = rect.width || (rect.right - rect.left); + targetHeight = rect.height || (rect.bottom - rect.top); + + // Reset width/height if user selects a new image/table + if (selectedElm != targetElm) { + detachResizeStartListener(); + selectedElm = targetElm; + width = height = 0; + } + + // Makes it possible to disable resizing + e = editor.fire('ObjectSelected', {target: targetElm}); + + if (isResizable(targetElm) && !e.isDefaultPrevented()) { + each(resizeHandles, function(handle, name) { + var handleElm, handlerContainerElm; + + function startDrag(e) { + startX = e.screenX; + startY = e.screenY; + startW = selectedElm.clientWidth; + startH = selectedElm.clientHeight; + ratio = startH / startW; + selectedHandle = handle; + + selectedElmGhost = selectedElm.cloneNode(true); + dom.addClass(selectedElmGhost, 'mce-clonedresizable'); + selectedElmGhost.contentEditable = false; // Hides IE move layer cursor + selectedElmGhost.unSelectabe = true; + dom.setStyles(selectedElmGhost, { + left: selectedElmX, + top: selectedElmY, + margin: 0 + }); + + selectedElmGhost.removeAttribute('data-mce-selected'); + editor.getBody().appendChild(selectedElmGhost); + + dom.bind(editableDoc, 'mousemove', resizeGhostElement); + dom.bind(editableDoc, 'mouseup', endGhostResize); + + if (rootDocument != editableDoc) { + dom.bind(rootDocument, 'mousemove', resizeGhostElement); + dom.bind(rootDocument, 'mouseup', endGhostResize); + } + } + + if (mouseDownHandleName) { + // Drag started by IE native resizestart + if (name == mouseDownHandleName) { + startDrag(mouseDownEvent); + } + + return; + } + + // Get existing or render resize handle + handleElm = dom.get('mceResizeHandle' + name); + if (!handleElm) { + handlerContainerElm = editor.getBody(); + + handleElm = dom.add(handlerContainerElm, 'div', { + id: 'mceResizeHandle' + name, + 'data-mce-bogus': true, + 'class': 'mce-resizehandle', + unselectable: true, + style: 'cursor:' + name + '-resize; margin:0; padding:0' + }); + + // Hides IE move layer cursor + // If we set it on Chrome we get this wounderful bug: #6725 + if (Env.ie) { + handleElm.contentEditable = false; + } + } else { + dom.show(handleElm); + } + + if (!handle.elm) { + dom.bind(handleElm, 'mousedown', function(e) { + e.stopImmediatePropagation(); + e.preventDefault(); + startDrag(e); + }); + + handle.elm = handleElm; + } + + /* + var halfHandleW = handleElm.offsetWidth / 2; + var halfHandleH = handleElm.offsetHeight / 2; + + // Position element + dom.setStyles(handleElm, { + left: Math.floor((targetWidth * handle[0] + selectedElmX) - halfHandleW + (handle[2] * halfHandleW)), + top: Math.floor((targetHeight * handle[1] + selectedElmY) - halfHandleH + (handle[3] * halfHandleH)) + }); + */ + + // Position element + dom.setStyles(handleElm, { + left: (targetWidth * handle[0] + selectedElmX) - (handleElm.offsetWidth / 2), + top: (targetHeight * handle[1] + selectedElmY) - (handleElm.offsetHeight / 2) + }); + }); + } else { + hideResizeRect(); + } + + selectedElm.setAttribute('data-mce-selected', '1'); + } + + function hideResizeRect() { + var name, handleElm; + + unbindResizeHandleEvents(); + + if (selectedElm) { + selectedElm.removeAttribute('data-mce-selected'); + } + + for (name in resizeHandles) { + handleElm = dom.get('mceResizeHandle' + name); + if (handleElm) { + dom.unbind(handleElm); + dom.remove(handleElm); + } + } + } + + function updateResizeRect(e) { + var controlElm; + + function isChildOrEqual(node, parent) { + if (node) { + do { + if (node === parent) { + return true; + } + } while ((node = node.parentNode)); + } + } + + // Remove data-mce-selected from all elements since they might have been copied using Ctrl+c/v + each(dom.select('img[data-mce-selected],hr[data-mce-selected]'), function(img) { + img.removeAttribute('data-mce-selected'); + }); + + controlElm = e.type == 'mousedown' ? e.target : selection.getNode(); + controlElm = dom.getParent(controlElm, isIE ? 'table' : 'table,img,hr'); + + if (isChildOrEqual(controlElm, editor.getBody())) { + disableGeckoResize(); + + if (isChildOrEqual(selection.getStart(), controlElm) && isChildOrEqual(selection.getEnd(), controlElm)) { + if (!isIE || (controlElm != selection.getStart() && selection.getStart().nodeName !== 'IMG')) { + showResizeRect(controlElm); + return; + } + } + } + + hideResizeRect(); + } + + function attachEvent(elm, name, func) { + if (elm && elm.attachEvent) { + elm.attachEvent('on' + name, func); + } + } + + function detachEvent(elm, name, func) { + if (elm && elm.detachEvent) { + elm.detachEvent('on' + name, func); + } + } + + function resizeNativeStart(e) { + var target = e.srcElement, pos, name, corner, cornerX, cornerY, relativeX, relativeY; + + pos = target.getBoundingClientRect(); + relativeX = lastMouseDownEvent.clientX - pos.left; + relativeY = lastMouseDownEvent.clientY - pos.top; + + // Figure out what corner we are draging on + for (name in resizeHandles) { + corner = resizeHandles[name]; + + cornerX = target.offsetWidth * corner[0]; + cornerY = target.offsetHeight * corner[1]; + + if (Math.abs(cornerX - relativeX) < 8 && Math.abs(cornerY - relativeY) < 8) { + selectedHandle = corner; + break; + } + } + + // Remove native selection and let the magic begin + resizeStarted = true; + editor.getDoc().selection.empty(); + showResizeRect(target, name, lastMouseDownEvent); + } + + function nativeControlSelect(e) { + var target = e.srcElement; + + if (target != selectedElm) { + detachResizeStartListener(); + + if (target.id.indexOf('mceResizeHandle') === 0) { + e.returnValue = false; + return; + } + + if (target.nodeName == 'IMG' || target.nodeName == 'TABLE') { + hideResizeRect(); + selectedElm = target; + attachEvent(target, 'resizestart', resizeNativeStart); + } + } + } + + function detachResizeStartListener() { + detachEvent(selectedElm, 'resizestart', resizeNativeStart); + } + + function unbindResizeHandleEvents() { + for (var name in resizeHandles) { + var handle = resizeHandles[name]; + + if (handle.elm) { + dom.unbind(handle.elm); + delete handle.elm; + } + } + } + + function disableGeckoResize() { + try { + // Disable object resizing on Gecko + editor.getDoc().execCommand('enableObjectResizing', false, false); + } catch (ex) { + // Ignore + } + } + + function controlSelect(elm) { + var ctrlRng; + + if (!isIE) { + return; + } + + ctrlRng = editableDoc.body.createControlRange(); + + try { + ctrlRng.addElement(elm); + ctrlRng.select(); + return true; + } catch (ex) { + // Ignore since the element can't be control selected for example a P tag + } + } + + editor.on('init', function() { + if (isIE) { + // Hide the resize rect on resize and reselect the image + editor.on('ObjectResized', function(e) { + if (e.target.nodeName != 'TABLE') { + hideResizeRect(); + controlSelect(e.target); + } + }); + + attachEvent(editor.getBody(), 'controlselect', nativeControlSelect); + + editor.on('mousedown', function(e) { + lastMouseDownEvent = e; + }); + } else { + disableGeckoResize(); + + if (Env.ie >= 11) { + // TODO: Drag/drop doesn't work + editor.on('mouseup', function(e) { + var nodeName = e.target.nodeName; + + if (/^(TABLE|IMG|HR)$/.test(nodeName)) { + editor.selection.select(e.target, nodeName == 'TABLE'); + editor.nodeChanged(); + } + }); + + editor.dom.bind(editor.getBody(), 'mscontrolselect', function(e) { + if (/^(TABLE|IMG|HR)$/.test(e.target.nodeName)) { + e.preventDefault(); + + // This moves the selection from being a control selection to a text like selection like in WebKit #6753 + // TODO: Fix this the day IE works like other browsers without this nasty native ugly control selections. + if (e.target.tagName == 'IMG') { + window.setTimeout(function() { + editor.selection.select(e.target); + }, 0); + } + } + }); + } + } + + editor.on('nodechange mousedown mouseup ResizeEditor', updateResizeRect); + + // Update resize rect while typing in a table + editor.on('keydown keyup', function(e) { + if (selectedElm && selectedElm.nodeName == "TABLE") { + updateResizeRect(e); + } + }); + + // Hide rect on focusout since it would float on top of windows otherwise + //editor.on('focusout', hideResizeRect); + }); + + editor.on('remove', unbindResizeHandleEvents); + + function destroy() { + selectedElm = selectedElmGhost = null; + + if (isIE) { + detachResizeStartListener(); + detachEvent(editor.getBody(), 'controlselect', nativeControlSelect); + } + } + + return { + isResizable: isResizable, + showResizeRect: showResizeRect, + hideResizeRect: hideResizeRect, + updateResizeRect: updateResizeRect, + controlSelect: controlSelect, + destroy: destroy + }; + }; +}); + +// Included from: js/tinymce/classes/dom/RangeUtils.js + +/** + * Range.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * RangeUtils + * + * @class tinymce.dom.RangeUtils + * @private + */ +define("tinymce/dom/RangeUtils", [ + "tinymce/util/Tools", + "tinymce/dom/TreeWalker" +], function(Tools, TreeWalker) { + var each = Tools.each; + + function RangeUtils(dom) { + /** + * Walks the specified range like object and executes the callback for each sibling collection it finds. + * + * @method walk + * @param {Object} rng Range like object. + * @param {function} callback Callback function to execute for each sibling collection. + */ + this.walk = function(rng, callback) { + var startContainer = rng.startContainer, + startOffset = rng.startOffset, + endContainer = rng.endContainer, + endOffset = rng.endOffset, + ancestor, startPoint, + endPoint, node, parent, siblings, nodes; + + // Handle table cell selection the table plugin enables + // you to fake select table cells and perform formatting actions on them + nodes = dom.select('td.mce-item-selected,th.mce-item-selected'); + if (nodes.length > 0) { + each(nodes, function(node) { + callback([node]); + }); + + return; + } + + /** + * Excludes start/end text node if they are out side the range + * + * @private + * @param {Array} nodes Nodes to exclude items from. + * @return {Array} Array with nodes excluding the start/end container if needed. + */ + function exclude(nodes) { + var node; + + // First node is excluded + node = nodes[0]; + if (node.nodeType === 3 && node === startContainer && startOffset >= node.nodeValue.length) { + nodes.splice(0, 1); + } + + // Last node is excluded + node = nodes[nodes.length - 1]; + if (endOffset === 0 && nodes.length > 0 && node === endContainer && node.nodeType === 3) { + nodes.splice(nodes.length - 1, 1); + } + + return nodes; + } + + /** + * Collects siblings + * + * @private + * @param {Node} node Node to collect siblings from. + * @param {String} name Name of the sibling to check for. + * @return {Array} Array of collected siblings. + */ + function collectSiblings(node, name, end_node) { + var siblings = []; + + for (; node && node != end_node; node = node[name]) { + siblings.push(node); + } + + return siblings; + } + + /** + * Find an end point this is the node just before the common ancestor root. + * + * @private + * @param {Node} node Node to start at. + * @param {Node} root Root/ancestor element to stop just before. + * @return {Node} Node just before the root element. + */ + function findEndPoint(node, root) { + do { + if (node.parentNode == root) { + return node; + } + + node = node.parentNode; + } while(node); + } + + function walkBoundary(start_node, end_node, next) { + var siblingName = next ? 'nextSibling' : 'previousSibling'; + + for (node = start_node, parent = node.parentNode; node && node != end_node; node = parent) { + parent = node.parentNode; + siblings = collectSiblings(node == start_node ? node : node[siblingName], siblingName); + + if (siblings.length) { + if (!next) { + siblings.reverse(); + } + + callback(exclude(siblings)); + } + } + } + + // If index based start position then resolve it + if (startContainer.nodeType == 1 && startContainer.hasChildNodes()) { + startContainer = startContainer.childNodes[startOffset]; + } + + // If index based end position then resolve it + if (endContainer.nodeType == 1 && endContainer.hasChildNodes()) { + endContainer = endContainer.childNodes[Math.min(endOffset - 1, endContainer.childNodes.length - 1)]; + } + + // Same container + if (startContainer == endContainer) { + return callback(exclude([startContainer])); + } + + // Find common ancestor and end points + ancestor = dom.findCommonAncestor(startContainer, endContainer); + + // Process left side + for (node = startContainer; node; node = node.parentNode) { + if (node === endContainer) { + return walkBoundary(startContainer, ancestor, true); + } + + if (node === ancestor) { + break; + } + } + + // Process right side + for (node = endContainer; node; node = node.parentNode) { + if (node === startContainer) { + return walkBoundary(endContainer, ancestor); + } + + if (node === ancestor) { + break; + } + } + + // Find start/end point + startPoint = findEndPoint(startContainer, ancestor) || startContainer; + endPoint = findEndPoint(endContainer, ancestor) || endContainer; + + // Walk left leaf + walkBoundary(startContainer, startPoint, true); + + // Walk the middle from start to end point + siblings = collectSiblings( + startPoint == startContainer ? startPoint : startPoint.nextSibling, + 'nextSibling', + endPoint == endContainer ? endPoint.nextSibling : endPoint + ); + + if (siblings.length) { + callback(exclude(siblings)); + } + + // Walk right leaf + walkBoundary(endContainer, endPoint); + }; + + /** + * Splits the specified range at it's start/end points. + * + * @private + * @param {Range/RangeObject} rng Range to split. + * @return {Object} Range position object. + */ + this.split = function(rng) { + var startContainer = rng.startContainer, + startOffset = rng.startOffset, + endContainer = rng.endContainer, + endOffset = rng.endOffset; + + function splitText(node, offset) { + return node.splitText(offset); + } + + // Handle single text node + if (startContainer == endContainer && startContainer.nodeType == 3) { + if (startOffset > 0 && startOffset < startContainer.nodeValue.length) { + endContainer = splitText(startContainer, startOffset); + startContainer = endContainer.previousSibling; + + if (endOffset > startOffset) { + endOffset = endOffset - startOffset; + startContainer = endContainer = splitText(endContainer, endOffset).previousSibling; + endOffset = endContainer.nodeValue.length; + startOffset = 0; + } else { + endOffset = 0; + } + } + } else { + // Split startContainer text node if needed + if (startContainer.nodeType == 3 && startOffset > 0 && startOffset < startContainer.nodeValue.length) { + startContainer = splitText(startContainer, startOffset); + startOffset = 0; + } + + // Split endContainer text node if needed + if (endContainer.nodeType == 3 && endOffset > 0 && endOffset < endContainer.nodeValue.length) { + endContainer = splitText(endContainer, endOffset).previousSibling; + endOffset = endContainer.nodeValue.length; + } + } + + return { + startContainer: startContainer, + startOffset: startOffset, + endContainer: endContainer, + endOffset: endOffset + }; + }; + + /** + * Normalizes the specified range by finding the closest best suitable caret location. + * + * @private + * @param {Range} rng Range to normalize. + * @return {Boolean} True/false if the specified range was normalized or not. + */ + this.normalize = function(rng) { + var normalized, collapsed; + + function normalizeEndPoint(start) { + var container, offset, walker, body = dom.getRoot(), node, nonEmptyElementsMap, nodeName; + var directionLeft, isAfterNode; + + function hasBrBeforeAfter(node, left) { + var walker = new TreeWalker(node, dom.getParent(node.parentNode, dom.isBlock) || body); + + while ((node = walker[left ? 'prev' : 'next']())) { + if (node.nodeName === "BR") { + return true; + } + } + } + + function isPrevNode(node, name) { + return node.previousSibling && node.previousSibling.nodeName == name; + } + + // Walks the dom left/right to find a suitable text node to move the endpoint into + // It will only walk within the current parent block or body and will stop if it hits a block or a BR/IMG + function findTextNodeRelative(left, startNode) { + var walker, lastInlineElement, parentBlockContainer; + + startNode = startNode || container; + parentBlockContainer = dom.getParent(startNode.parentNode, dom.isBlock) || body; + + // Lean left before the BR element if it's the only BR within a block element. Gecko bug: #6680 + // This:


    |

    becomes

    |

    + if (left && startNode.nodeName == 'BR' && isAfterNode && dom.isEmpty(parentBlockContainer)) { + container = startNode.parentNode; + offset = dom.nodeIndex(startNode); + normalized = true; + return; + } + + // Walk left until we hit a text node we can move to or a block/br/img + walker = new TreeWalker(startNode, parentBlockContainer); + while ((node = walker[left ? 'prev' : 'next']())) { + // Found text node that has a length + if (node.nodeType === 3 && node.nodeValue.length > 0) { + container = node; + offset = left ? node.nodeValue.length : 0; + normalized = true; + return; + } + + // Break if we find a block or a BR/IMG/INPUT etc + if (dom.isBlock(node) || nonEmptyElementsMap[node.nodeName.toLowerCase()]) { + return; + } + + lastInlineElement = node; + } + + // Only fetch the last inline element when in caret mode for now + if (collapsed && lastInlineElement) { + container = lastInlineElement; + normalized = true; + offset = 0; + } + } + + container = rng[(start ? 'start' : 'end') + 'Container']; + offset = rng[(start ? 'start' : 'end') + 'Offset']; + isAfterNode = container.nodeType == 1 && offset === container.childNodes.length; + nonEmptyElementsMap = dom.schema.getNonEmptyElements(); + directionLeft = start; + + if (container.nodeType == 1 && offset > container.childNodes.length - 1) { + directionLeft = false; + } + + // If the container is a document move it to the body element + if (container.nodeType === 9) { + container = dom.getRoot(); + offset = 0; + } + + // If the container is body try move it into the closest text node or position + if (container === body) { + // If start is before/after a image, table etc + if (directionLeft) { + node = container.childNodes[offset > 0 ? offset - 1 : 0]; + if (node) { + nodeName = node.nodeName.toLowerCase(); + if (nonEmptyElementsMap[node.nodeName] || node.nodeName == "TABLE") { + return; + } + } + } + + // Resolve the index + if (container.hasChildNodes()) { + offset = Math.min(!directionLeft && offset > 0 ? offset - 1 : offset, container.childNodes.length - 1); + container = container.childNodes[offset]; + offset = 0; + + // Don't walk into elements that doesn't have any child nodes like a IMG + if (container.hasChildNodes() && !/TABLE/.test(container.nodeName)) { + // Walk the DOM to find a text node to place the caret at or a BR + node = container; + walker = new TreeWalker(container, body); + + do { + // Found a text node use that position + if (node.nodeType === 3 && node.nodeValue.length > 0) { + offset = directionLeft ? 0 : node.nodeValue.length; + container = node; + normalized = true; + break; + } + + // Found a BR/IMG element that we can place the caret before + if (nonEmptyElementsMap[node.nodeName.toLowerCase()]) { + offset = dom.nodeIndex(node); + container = node.parentNode; + + // Put caret after image when moving the end point + if (node.nodeName == "IMG" && !directionLeft) { + offset++; + } + + normalized = true; + break; + } + } while ((node = (directionLeft ? walker.next() : walker.prev()))); + } + } + } + + // Lean the caret to the left if possible + if (collapsed) { + // So this: x|x + // Becomes: x|x + // Seems that only gecko has issues with this + if (container.nodeType === 3 && offset === 0) { + findTextNodeRelative(true); + } + + // Lean left into empty inline elements when the caret is before a BR + // So this: |
    + // Becomes: |
    + // Seems that only gecko has issues with this. + // Special edge case for

    x|

    since we don't want

    x|

    + if (container.nodeType === 1) { + node = container.childNodes[offset]; + + // Offset is after the containers last child + // then use the previous child for normalization + if (!node) { + node = container.childNodes[offset - 1]; + } + + if (node && node.nodeName === 'BR' && !isPrevNode(node, 'A') && + !hasBrBeforeAfter(node) && !hasBrBeforeAfter(node, true)) { + findTextNodeRelative(true, node); + } + } + } + + // Lean the start of the selection right if possible + // So this: x[x] + // Becomes: x[x] + if (directionLeft && !collapsed && container.nodeType === 3 && offset === container.nodeValue.length) { + findTextNodeRelative(false); + } + + // Set endpoint if it was normalized + if (normalized) { + rng['set' + (start ? 'Start' : 'End')](container, offset); + } + } + + collapsed = rng.collapsed; + + normalizeEndPoint(true); + + if (!collapsed) { + normalizeEndPoint(); + } + + // If it was collapsed then make sure it still is + if (normalized && collapsed) { + rng.collapse(true); + } + + return normalized; + }; + } + + /** + * Compares two ranges and checks if they are equal. + * + * @static + * @method compareRanges + * @param {DOMRange} rng1 First range to compare. + * @param {DOMRange} rng2 First range to compare. + * @return {Boolean} true/false if the ranges are equal. + */ + RangeUtils.compareRanges = function(rng1, rng2) { + if (rng1 && rng2) { + // Compare native IE ranges + if (rng1.item || rng1.duplicate) { + // Both are control ranges and the selected element matches + if (rng1.item && rng2.item && rng1.item(0) === rng2.item(0)) { + return true; + } + + // Both are text ranges and the range matches + if (rng1.isEqual && rng2.isEqual && rng2.isEqual(rng1)) { + return true; + } + } else { + // Compare w3c ranges + return rng1.startContainer == rng2.startContainer && rng1.startOffset == rng2.startOffset; + } + } + + return false; + }; + + return RangeUtils; +}); + +// Included from: js/tinymce/classes/dom/Selection.js + +/** + * Selection.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class handles text and control selection it's an crossbrowser utility class. + * Consult the TinyMCE Wiki API for more details and examples on how to use this class. + * + * @class tinymce.dom.Selection + * @example + * // Getting the currently selected node for the active editor + * alert(tinymce.activeEditor.selection.getNode().nodeName); + */ +define("tinymce/dom/Selection", [ + "tinymce/dom/TreeWalker", + "tinymce/dom/TridentSelection", + "tinymce/dom/ControlSelection", + "tinymce/dom/RangeUtils", + "tinymce/Env", + "tinymce/util/Tools" +], function(TreeWalker, TridentSelection, ControlSelection, RangeUtils, Env, Tools) { + var each = Tools.each, grep = Tools.grep, trim = Tools.trim; + var isIE = Env.ie, isOpera = Env.opera; + + /** + * Constructs a new selection instance. + * + * @constructor + * @method Selection + * @param {tinymce.dom.DOMUtils} dom DOMUtils object reference. + * @param {Window} win Window to bind the selection object to. + * @param {tinymce.dom.Serializer} serializer DOM serialization class to use for getContent. + */ + function Selection(dom, win, serializer, editor) { + var self = this; + + self.dom = dom; + self.win = win; + self.serializer = serializer; + self.editor = editor; + + self.controlSelection = new ControlSelection(self, editor); + + // No W3C Range support + if (!self.win.getSelection) { + self.tridentSel = new TridentSelection(self); + } + } + + Selection.prototype = { + /** + * Move the selection cursor range to the specified node and offset. + * If there is no node specified it will move it to the first suitable location within the body. + * + * @method setCursorLocation + * @param {Node} node Optional node to put the cursor in. + * @param {Number} offset Optional offset from the start of the node to put the cursor at. + */ + setCursorLocation: function(node, offset) { + var self = this, rng = self.dom.createRng(); + + if (!node) { + self._moveEndPoint(rng, self.editor.getBody(), true); + self.setRng(rng); + } else { + rng.setStart(node, offset); + rng.setEnd(node, offset); + self.setRng(rng); + self.collapse(false); + } + }, + + /** + * Returns the selected contents using the DOM serializer passed in to this class. + * + * @method getContent + * @param {Object} s Optional settings class with for example output format text or html. + * @return {String} Selected contents in for example HTML format. + * @example + * // Alerts the currently selected contents + * alert(tinymce.activeEditor.selection.getContent()); + * + * // Alerts the currently selected contents as plain text + * alert(tinymce.activeEditor.selection.getContent({format: 'text'})); + */ + getContent: function(args) { + var self = this, rng = self.getRng(), tmpElm = self.dom.create("body"); + var se = self.getSel(), whiteSpaceBefore, whiteSpaceAfter, fragment; + + args = args || {}; + whiteSpaceBefore = whiteSpaceAfter = ''; + args.get = true; + args.format = args.format || 'html'; + args.selection = true; + self.editor.fire('BeforeGetContent', args); + + if (args.format == 'text') { + return self.isCollapsed() ? '' : (rng.text || (se.toString ? se.toString() : '')); + } + + if (rng.cloneContents) { + fragment = rng.cloneContents(); + + if (fragment) { + tmpElm.appendChild(fragment); + } + } else if (rng.item !== undefined || rng.htmlText !== undefined) { + // IE will produce invalid markup if elements are present that + // it doesn't understand like custom elements or HTML5 elements. + // Adding a BR in front of the contents and then remoiving it seems to fix it though. + tmpElm.innerHTML = '
    ' + (rng.item ? rng.item(0).outerHTML : rng.htmlText); + tmpElm.removeChild(tmpElm.firstChild); + } else { + tmpElm.innerHTML = rng.toString(); + } + + // Keep whitespace before and after + if (/^\s/.test(tmpElm.innerHTML)) { + whiteSpaceBefore = ' '; + } + + if (/\s+$/.test(tmpElm.innerHTML)) { + whiteSpaceAfter = ' '; + } + + args.getInner = true; + + args.content = self.isCollapsed() ? '' : whiteSpaceBefore + self.serializer.serialize(tmpElm, args) + whiteSpaceAfter; + self.editor.fire('GetContent', args); + + return args.content; + }, + + /** + * Sets the current selection to the specified content. If any contents is selected it will be replaced + * with the contents passed in to this function. If there is no selection the contents will be inserted + * where the caret is placed in the editor/page. + * + * @method setContent + * @param {String} content HTML contents to set could also be other formats depending on settings. + * @param {Object} args Optional settings object with for example data format. + * @example + * // Inserts some HTML contents at the current selection + * tinymce.activeEditor.selection.setContent('Some contents'); + */ + setContent: function(content, args) { + var self = this, rng = self.getRng(), caretNode, doc = self.win.document, frag, temp; + + args = args || {format: 'html'}; + args.set = true; + args.selection = true; + content = args.content = content; + + // Dispatch before set content event + if (!args.no_events) { + self.editor.fire('BeforeSetContent', args); + } + + content = args.content; + + if (rng.insertNode) { + // Make caret marker since insertNode places the caret in the beginning of text after insert + content += '_'; + + // Delete and insert new node + if (rng.startContainer == doc && rng.endContainer == doc) { + // WebKit will fail if the body is empty since the range is then invalid and it can't insert contents + doc.body.innerHTML = content; + } else { + rng.deleteContents(); + + if (doc.body.childNodes.length === 0) { + doc.body.innerHTML = content; + } else { + // createContextualFragment doesn't exists in IE 9 DOMRanges + if (rng.createContextualFragment) { + rng.insertNode(rng.createContextualFragment(content)); + } else { + // Fake createContextualFragment call in IE 9 + frag = doc.createDocumentFragment(); + temp = doc.createElement('div'); + + frag.appendChild(temp); + temp.outerHTML = content; + + rng.insertNode(frag); + } + } + } + + // Move to caret marker + caretNode = self.dom.get('__caret'); + + // Make sure we wrap it compleatly, Opera fails with a simple select call + rng = doc.createRange(); + rng.setStartBefore(caretNode); + rng.setEndBefore(caretNode); + self.setRng(rng); + + // Remove the caret position + self.dom.remove('__caret'); + + try { + self.setRng(rng); + } catch (ex) { + // Might fail on Opera for some odd reason + } + } else { + if (rng.item) { + // Delete content and get caret text selection + doc.execCommand('Delete', false, null); + rng = self.getRng(); + } + + // Explorer removes spaces from the beginning of pasted contents + if (/^\s+/.test(content)) { + rng.pasteHTML('_' + content); + self.dom.remove('__mce_tmp'); + } else { + rng.pasteHTML(content); + } + } + + // Dispatch set content event + if (!args.no_events) { + self.editor.fire('SetContent', args); + } + }, + + /** + * Returns the start element of a selection range. If the start is in a text + * node the parent element will be returned. + * + * @method getStart + * @return {Element} Start element of selection range. + */ + getStart: function() { + var self = this, rng = self.getRng(), startElement, parentElement, checkRng, node; + + if (rng.duplicate || rng.item) { + // Control selection, return first item + if (rng.item) { + return rng.item(0); + } + + // Get start element + checkRng = rng.duplicate(); + checkRng.collapse(1); + startElement = checkRng.parentElement(); + if (startElement.ownerDocument !== self.dom.doc) { + startElement = self.dom.getRoot(); + } + + // Check if range parent is inside the start element, then return the inner parent element + // This will fix issues when a single element is selected, IE would otherwise return the wrong start element + parentElement = node = rng.parentElement(); + while ((node = node.parentNode)) { + if (node == startElement) { + startElement = parentElement; + break; + } + } + + return startElement; + } else { + startElement = rng.startContainer; + + if (startElement.nodeType == 1 && startElement.hasChildNodes()) { + startElement = startElement.childNodes[Math.min(startElement.childNodes.length - 1, rng.startOffset)]; + } + + if (startElement && startElement.nodeType == 3) { + return startElement.parentNode; + } + + return startElement; + } + }, + + /** + * Returns the end element of a selection range. If the end is in a text + * node the parent element will be returned. + * + * @method getEnd + * @return {Element} End element of selection range. + */ + getEnd: function() { + var self = this, rng = self.getRng(), endElement, endOffset; + + if (rng.duplicate || rng.item) { + if (rng.item) { + return rng.item(0); + } + + rng = rng.duplicate(); + rng.collapse(0); + endElement = rng.parentElement(); + if (endElement.ownerDocument !== self.dom.doc) { + endElement = self.dom.getRoot(); + } + + if (endElement && endElement.nodeName == 'BODY') { + return endElement.lastChild || endElement; + } + + return endElement; + } else { + endElement = rng.endContainer; + endOffset = rng.endOffset; + + if (endElement.nodeType == 1 && endElement.hasChildNodes()) { + endElement = endElement.childNodes[endOffset > 0 ? endOffset - 1 : endOffset]; + } + + if (endElement && endElement.nodeType == 3) { + return endElement.parentNode; + } + + return endElement; + } + }, + + /** + * Returns a bookmark location for the current selection. This bookmark object + * can then be used to restore the selection after some content modification to the document. + * + * @method getBookmark + * @param {Number} type Optional state if the bookmark should be simple or not. Default is complex. + * @param {Boolean} normalized Optional state that enables you to get a position that it would be after normalization. + * @return {Object} Bookmark object, use moveToBookmark with this object to restore the selection. + * @example + * // Stores a bookmark of the current selection + * var bm = tinymce.activeEditor.selection.getBookmark(); + * + * tinymce.activeEditor.setContent(tinymce.activeEditor.getContent() + 'Some new content'); + * + * // Restore the selection bookmark + * tinymce.activeEditor.selection.moveToBookmark(bm); + */ + getBookmark: function(type, normalized) { + var self = this, dom = self.dom, rng, rng2, id, collapsed, name, element, chr = '', styles; + + function findIndex(name, element) { + var index = 0; + + each(dom.select(name), function(node, i) { + if (node == element) { + index = i; + } + }); + + return index; + } + + function normalizeTableCellSelection(rng) { + function moveEndPoint(start) { + var container, offset, childNodes, prefix = start ? 'start' : 'end'; + + container = rng[prefix + 'Container']; + offset = rng[prefix + 'Offset']; + + if (container.nodeType == 1 && container.nodeName == "TR") { + childNodes = container.childNodes; + container = childNodes[Math.min(start ? offset : offset - 1, childNodes.length - 1)]; + if (container) { + offset = start ? 0 : container.childNodes.length; + rng['set' + (start ? 'Start' : 'End')](container, offset); + } + } + } + + moveEndPoint(true); + moveEndPoint(); + + return rng; + } + + function getLocation() { + var rng = self.getRng(true), root = dom.getRoot(), bookmark = {}; + + function getPoint(rng, start) { + var container = rng[start ? 'startContainer' : 'endContainer'], + offset = rng[start ? 'startOffset' : 'endOffset'], point = [], node, childNodes, after = 0; + + if (container.nodeType == 3) { + if (normalized) { + for (node = container.previousSibling; node && node.nodeType == 3; node = node.previousSibling) { + offset += node.nodeValue.length; + } + } + + point.push(offset); + } else { + childNodes = container.childNodes; + + if (offset >= childNodes.length && childNodes.length) { + after = 1; + offset = Math.max(0, childNodes.length - 1); + } + + point.push(self.dom.nodeIndex(childNodes[offset], normalized) + after); + } + + for (; container && container != root; container = container.parentNode) { + point.push(self.dom.nodeIndex(container, normalized)); + } + + return point; + } + + bookmark.start = getPoint(rng, true); + + if (!self.isCollapsed()) { + bookmark.end = getPoint(rng); + } + + return bookmark; + } + + if (type == 2) { + element = self.getNode(); + name = element ? element.nodeName : null; + + if (name == 'IMG') { + return {name: name, index: findIndex(name, element)}; + } + + if (self.tridentSel) { + return self.tridentSel.getBookmark(type); + } + + return getLocation(); + } + + // Handle simple range + if (type) { + return {rng: self.getRng()}; + } + + rng = self.getRng(); + id = dom.uniqueId(); + collapsed = self.isCollapsed(); + styles = 'overflow:hidden;line-height:0px'; + + // Explorer method + if (rng.duplicate || rng.item) { + // Text selection + if (!rng.item) { + rng2 = rng.duplicate(); + + try { + // Insert start marker + rng.collapse(); + rng.pasteHTML('' + chr + ''); + + // Insert end marker + if (!collapsed) { + rng2.collapse(false); + + // Detect the empty space after block elements in IE and move the + // end back one character

    ] becomes

    ]

    + rng.moveToElementText(rng2.parentElement()); + if (rng.compareEndPoints('StartToEnd', rng2) === 0) { + rng2.move('character', -1); + } + + rng2.pasteHTML('' + chr + ''); + } + } catch (ex) { + // IE might throw unspecified error so lets ignore it + return null; + } + } else { + // Control selection + element = rng.item(0); + name = element.nodeName; + + return {name: name, index: findIndex(name, element)}; + } + } else { + element = self.getNode(); + name = element.nodeName; + if (name == 'IMG') { + return {name: name, index: findIndex(name, element)}; + } + + // W3C method + rng2 = normalizeTableCellSelection(rng.cloneRange()); + + // Insert end marker + if (!collapsed) { + rng2.collapse(false); + rng2.insertNode(dom.create('span', {'data-mce-type': "bookmark", id: id + '_end', style: styles}, chr)); + } + + rng = normalizeTableCellSelection(rng); + rng.collapse(true); + rng.insertNode(dom.create('span', {'data-mce-type': "bookmark", id: id + '_start', style: styles}, chr)); + } + + self.moveToBookmark({id: id, keep: 1}); + + return {id: id}; + }, + + /** + * Restores the selection to the specified bookmark. + * + * @method moveToBookmark + * @param {Object} bookmark Bookmark to restore selection from. + * @return {Boolean} true/false if it was successful or not. + * @example + * // Stores a bookmark of the current selection + * var bm = tinymce.activeEditor.selection.getBookmark(); + * + * tinymce.activeEditor.setContent(tinymce.activeEditor.getContent() + 'Some new content'); + * + * // Restore the selection bookmark + * tinymce.activeEditor.selection.moveToBookmark(bm); + */ + moveToBookmark: function(bookmark) { + var self = this, dom = self.dom, rng, root, startContainer, endContainer, startOffset, endOffset; + + function setEndPoint(start) { + var point = bookmark[start ? 'start' : 'end'], i, node, offset, children; + + if (point) { + offset = point[0]; + + // Find container node + for (node = root, i = point.length - 1; i >= 1; i--) { + children = node.childNodes; + + if (point[i] > children.length - 1) { + return; + } + + node = children[point[i]]; + } + + // Move text offset to best suitable location + if (node.nodeType === 3) { + offset = Math.min(point[0], node.nodeValue.length); + } + + // Move element offset to best suitable location + if (node.nodeType === 1) { + offset = Math.min(point[0], node.childNodes.length); + } + + // Set offset within container node + if (start) { + rng.setStart(node, offset); + } else { + rng.setEnd(node, offset); + } + } + + return true; + } + + function restoreEndPoint(suffix) { + var marker = dom.get(bookmark.id + '_' + suffix), node, idx, next, prev, keep = bookmark.keep; + + if (marker) { + node = marker.parentNode; + + if (suffix == 'start') { + if (!keep) { + idx = dom.nodeIndex(marker); + } else { + node = marker.firstChild; + idx = 1; + } + + startContainer = endContainer = node; + startOffset = endOffset = idx; + } else { + if (!keep) { + idx = dom.nodeIndex(marker); + } else { + node = marker.firstChild; + idx = 1; + } + + endContainer = node; + endOffset = idx; + } + + if (!keep) { + prev = marker.previousSibling; + next = marker.nextSibling; + + // Remove all marker text nodes + each(grep(marker.childNodes), function(node) { + if (node.nodeType == 3) { + node.nodeValue = node.nodeValue.replace(/\uFEFF/g, ''); + } + }); + + // Remove marker but keep children if for example contents where inserted into the marker + // Also remove duplicated instances of the marker for example by a + // split operation or by WebKit auto split on paste feature + while ((marker = dom.get(bookmark.id + '_' + suffix))) { + dom.remove(marker, 1); + } + + // If siblings are text nodes then merge them unless it's Opera since it some how removes the node + // and we are sniffing since adding a lot of detection code for a browser with 3% of the market + // isn't worth the effort. Sorry, Opera but it's just a fact + if (prev && next && prev.nodeType == next.nodeType && prev.nodeType == 3 && !isOpera) { + idx = prev.nodeValue.length; + prev.appendData(next.nodeValue); + dom.remove(next); + + if (suffix == 'start') { + startContainer = endContainer = prev; + startOffset = endOffset = idx; + } else { + endContainer = prev; + endOffset = idx; + } + } + } + } + } + + function addBogus(node) { + // Adds a bogus BR element for empty block elements + if (dom.isBlock(node) && !node.innerHTML && !isIE) { + node.innerHTML = '
    '; + } + + return node; + } + + if (bookmark) { + if (bookmark.start) { + rng = dom.createRng(); + root = dom.getRoot(); + + if (self.tridentSel) { + return self.tridentSel.moveToBookmark(bookmark); + } + + if (setEndPoint(true) && setEndPoint()) { + self.setRng(rng); + } + } else if (bookmark.id) { + // Restore start/end points + restoreEndPoint('start'); + restoreEndPoint('end'); + + if (startContainer) { + rng = dom.createRng(); + rng.setStart(addBogus(startContainer), startOffset); + rng.setEnd(addBogus(endContainer), endOffset); + self.setRng(rng); + } + } else if (bookmark.name) { + self.select(dom.select(bookmark.name)[bookmark.index]); + } else if (bookmark.rng) { + self.setRng(bookmark.rng); + } + } + }, + + /** + * Selects the specified element. This will place the start and end of the selection range around the element. + * + * @method select + * @param {Element} node HMTL DOM element to select. + * @param {Boolean} content Optional bool state if the contents should be selected or not on non IE browser. + * @return {Element} Selected element the same element as the one that got passed in. + * @example + * // Select the first paragraph in the active editor + * tinymce.activeEditor.selection.select(tinymce.activeEditor.dom.select('p')[0]); + */ + select: function(node, content) { + var self = this, dom = self.dom, rng = dom.createRng(), idx; + + // Clear stored range set by FocusManager + self.lastFocusBookmark = null; + + if (node) { + if (!content && self.controlSelection.controlSelect(node)) { + return; + } + + idx = dom.nodeIndex(node); + rng.setStart(node.parentNode, idx); + rng.setEnd(node.parentNode, idx + 1); + + // Find first/last text node or BR element + if (content) { + self._moveEndPoint(rng, node, true); + self._moveEndPoint(rng, node); + } + + self.setRng(rng); + } + + return node; + }, + + /** + * Returns true/false if the selection range is collapsed or not. Collapsed means if it's a caret or a larger selection. + * + * @method isCollapsed + * @return {Boolean} true/false state if the selection range is collapsed or not. + * Collapsed means if it's a caret or a larger selection. + */ + isCollapsed: function() { + var self = this, rng = self.getRng(), sel = self.getSel(); + + if (!rng || rng.item) { + return false; + } + + if (rng.compareEndPoints) { + return rng.compareEndPoints('StartToEnd', rng) === 0; + } + + return !sel || rng.collapsed; + }, + + /** + * Collapse the selection to start or end of range. + * + * @method collapse + * @param {Boolean} to_start Optional boolean state if to collapse to end or not. Defaults to start. + */ + collapse: function(to_start) { + var self = this, rng = self.getRng(), node; + + // Control range on IE + if (rng.item) { + node = rng.item(0); + rng = self.win.document.body.createTextRange(); + rng.moveToElementText(node); + } + + rng.collapse(!!to_start); + self.setRng(rng); + }, + + /** + * Returns the browsers internal selection object. + * + * @method getSel + * @return {Selection} Internal browser selection object. + */ + getSel: function() { + var win = this.win; + + return win.getSelection ? win.getSelection() : win.document.selection; + }, + + /** + * Returns the browsers internal range object. + * + * @method getRng + * @param {Boolean} w3c Forces a compatible W3C range on IE. + * @return {Range} Internal browser range object. + * @see http://www.quirksmode.org/dom/range_intro.html + * @see http://www.dotvoid.com/2001/03/using-the-range-object-in-mozilla/ + */ + getRng: function(w3c) { + var self = this, selection, rng, elm, doc = self.win.document, ieRng; + + function tryCompareBounderyPoints(how, sourceRange, destinationRange) { + try { + return sourceRange.compareBoundaryPoints(how, destinationRange); + } catch (ex) { + // Gecko throws wrong document exception if the range points + // to nodes that where removed from the dom #6690 + // Browsers should mutate existing DOMRange instances so that they always point + // to something in the document this is not the case in Gecko works fine in IE/WebKit/Blink + // For performance reasons just return -1 + return -1; + } + } + + // Use last rng passed from FocusManager if it's available this enables + // calls to editor.selection.getStart() to work when caret focus is lost on IE + if (!w3c && self.lastFocusBookmark) { + var bookmark = self.lastFocusBookmark; + + // Convert bookmark to range IE 11 fix + if (bookmark.startContainer) { + rng = doc.createRange(); + rng.setStart(bookmark.startContainer, bookmark.startOffset); + rng.setEnd(bookmark.endContainer, bookmark.endOffset); + } else { + rng = bookmark; + } + + return rng; + } + + // Found tridentSel object then we need to use that one + if (w3c && self.tridentSel) { + return self.tridentSel.getRangeAt(0); + } + + try { + if ((selection = self.getSel())) { + if (selection.rangeCount > 0) { + rng = selection.getRangeAt(0); + } else { + rng = selection.createRange ? selection.createRange() : doc.createRange(); + } + } + } catch (ex) { + // IE throws unspecified error here if TinyMCE is placed in a frame/iframe + } + + // We have W3C ranges and it's IE then fake control selection since IE9 doesn't handle that correctly yet + // IE 11 doesn't support the selection object so we check for that as well + if (isIE && rng && rng.setStart && doc.selection) { + try { + // IE will sometimes throw an exception here + ieRng = doc.selection.createRange(); + } catch (ex) { + + } + + if (ieRng && ieRng.item) { + elm = ieRng.item(0); + rng = doc.createRange(); + rng.setStartBefore(elm); + rng.setEndAfter(elm); + } + } + + // No range found then create an empty one + // This can occur when the editor is placed in a hidden container element on Gecko + // Or on IE when there was an exception + if (!rng) { + rng = doc.createRange ? doc.createRange() : doc.body.createTextRange(); + } + + // If range is at start of document then move it to start of body + if (rng.setStart && rng.startContainer.nodeType === 9 && rng.collapsed) { + elm = self.dom.getRoot(); + rng.setStart(elm, 0); + rng.setEnd(elm, 0); + } + + if (self.selectedRange && self.explicitRange) { + if (tryCompareBounderyPoints(rng.START_TO_START, rng, self.selectedRange) === 0 && + tryCompareBounderyPoints(rng.END_TO_END, rng, self.selectedRange) === 0) { + // Safari, Opera and Chrome only ever select text which causes the range to change. + // This lets us use the originally set range if the selection hasn't been changed by the user. + rng = self.explicitRange; + } else { + self.selectedRange = null; + self.explicitRange = null; + } + } + + return rng; + }, + + /** + * Changes the selection to the specified DOM range. + * + * @method setRng + * @param {Range} rng Range to select. + */ + setRng: function(rng, forward) { + var self = this, sel; + + // Is IE specific range + if (rng.select) { + try { + rng.select(); + } catch (ex) { + // Needed for some odd IE bug #1843306 + } + + return; + } + + if (!self.tridentSel) { + sel = self.getSel(); + + if (sel) { + self.explicitRange = rng; + + try { + sel.removeAllRanges(); + sel.addRange(rng); + } catch (ex) { + // IE might throw errors here if the editor is within a hidden container and selection is changed + } + + // Forward is set to false and we have an extend function + if (forward === false && sel.extend) { + sel.collapse(rng.endContainer, rng.endOffset); + sel.extend(rng.startContainer, rng.startOffset); + } + + // adding range isn't always successful so we need to check range count otherwise an exception can occur + self.selectedRange = sel.rangeCount > 0 ? sel.getRangeAt(0) : null; + } + } else { + // Is W3C Range fake range on IE + if (rng.cloneRange) { + try { + self.tridentSel.addRange(rng); + return; + } catch (ex) { + //IE9 throws an error here if called before selection is placed in the editor + } + } + } + }, + + /** + * Sets the current selection to the specified DOM element. + * + * @method setNode + * @param {Element} elm Element to set as the contents of the selection. + * @return {Element} Returns the element that got passed in. + * @example + * // Inserts a DOM node at current selection/caret location + * tinymce.activeEditor.selection.setNode(tinymce.activeEditor.dom.create('img', {src: 'some.gif', title: 'some title'})); + */ + setNode: function(elm) { + var self = this; + + self.setContent(self.dom.getOuterHTML(elm)); + + return elm; + }, + + /** + * Returns the currently selected element or the common ancestor element for both start and end of the selection. + * + * @method getNode + * @return {Element} Currently selected element or common ancestor element. + * @example + * // Alerts the currently selected elements node name + * alert(tinymce.activeEditor.selection.getNode().nodeName); + */ + getNode: function() { + var self = this, rng = self.getRng(), elm; + var startContainer = rng.startContainer, endContainer = rng.endContainer; + var startOffset = rng.startOffset, endOffset = rng.endOffset, root = self.dom.getRoot(); + + function skipEmptyTextNodes(node, forwards) { + var orig = node; + + while (node && node.nodeType === 3 && node.length === 0) { + node = forwards ? node.nextSibling : node.previousSibling; + } + + return node || orig; + } + + // Range maybe lost after the editor is made visible again + if (!rng) { + return root; + } + + if (rng.setStart) { + elm = rng.commonAncestorContainer; + + // Handle selection a image or other control like element such as anchors + if (!rng.collapsed) { + if (startContainer == endContainer) { + if (endOffset - startOffset < 2) { + if (startContainer.hasChildNodes()) { + elm = startContainer.childNodes[startOffset]; + } + } + } + + // If the anchor node is a element instead of a text node then return this element + //if (tinymce.isWebKit && sel.anchorNode && sel.anchorNode.nodeType == 1) + // return sel.anchorNode.childNodes[sel.anchorOffset]; + + // Handle cases where the selection is immediately wrapped around a node and return that node instead of it's parent. + // This happens when you double click an underlined word in FireFox. + if (startContainer.nodeType === 3 && endContainer.nodeType === 3) { + if (startContainer.length === startOffset) { + startContainer = skipEmptyTextNodes(startContainer.nextSibling, true); + } else { + startContainer = startContainer.parentNode; + } + + if (endOffset === 0) { + endContainer = skipEmptyTextNodes(endContainer.previousSibling, false); + } else { + endContainer = endContainer.parentNode; + } + + if (startContainer && startContainer === endContainer) { + return startContainer; + } + } + } + + if (elm && elm.nodeType == 3) { + return elm.parentNode; + } + + return elm; + } + + elm = rng.item ? rng.item(0) : rng.parentElement(); + + // IE 7 might return elements outside the iframe + if (elm.ownerDocument !== self.win.document) { + elm = root; + } + + return elm; + }, + + getSelectedBlocks: function(startElm, endElm) { + var self = this, dom = self.dom, node, root, selectedBlocks = []; + + root = dom.getRoot(); + startElm = dom.getParent(startElm || self.getStart(), dom.isBlock); + endElm = dom.getParent(endElm || self.getEnd(), dom.isBlock); + + if (startElm && startElm != root) { + selectedBlocks.push(startElm); + } + + if (startElm && endElm && startElm != endElm) { + node = startElm; + + var walker = new TreeWalker(startElm, root); + while ((node = walker.next()) && node != endElm) { + if (dom.isBlock(node)) { + selectedBlocks.push(node); + } + } + } + + if (endElm && startElm != endElm && endElm != root) { + selectedBlocks.push(endElm); + } + + return selectedBlocks; + }, + + isForward: function() { + var dom = this.dom, sel = this.getSel(), anchorRange, focusRange; + + // No support for selection direction then always return true + if (!sel || !sel.anchorNode || !sel.focusNode) { + return true; + } + + anchorRange = dom.createRng(); + anchorRange.setStart(sel.anchorNode, sel.anchorOffset); + anchorRange.collapse(true); + + focusRange = dom.createRng(); + focusRange.setStart(sel.focusNode, sel.focusOffset); + focusRange.collapse(true); + + return anchorRange.compareBoundaryPoints(anchorRange.START_TO_START, focusRange) <= 0; + }, + + normalize: function() { + var self = this, rng = self.getRng(); + + if (!isIE && new RangeUtils(self.dom).normalize(rng)) { + self.setRng(rng, self.isForward()); + } + + return rng; + }, + + /** + * Executes callback of the current selection matches the specified selector or not and passes the state and args to the callback. + * + * @method selectorChanged + * @param {String} selector CSS selector to check for. + * @param {function} callback Callback with state and args when the selector is matches or not. + */ + selectorChanged: function(selector, callback) { + var self = this, currentSelectors; + + if (!self.selectorChangedData) { + self.selectorChangedData = {}; + currentSelectors = {}; + + self.editor.on('NodeChange', function(e) { + var node = e.element, dom = self.dom, parents = dom.getParents(node, null, dom.getRoot()), matchedSelectors = {}; + + // Check for new matching selectors + each(self.selectorChangedData, function(callbacks, selector) { + each(parents, function(node) { + if (dom.is(node, selector)) { + if (!currentSelectors[selector]) { + // Execute callbacks + each(callbacks, function(callback) { + callback(true, {node: node, selector: selector, parents: parents}); + }); + + currentSelectors[selector] = callbacks; + } + + matchedSelectors[selector] = callbacks; + return false; + } + }); + }); + + // Check if current selectors still match + each(currentSelectors, function(callbacks, selector) { + if (!matchedSelectors[selector]) { + delete currentSelectors[selector]; + + each(callbacks, function(callback) { + callback(false, {node: node, selector: selector, parents: parents}); + }); + } + }); + }); + } + + // Add selector listeners + if (!self.selectorChangedData[selector]) { + self.selectorChangedData[selector] = []; + } + + self.selectorChangedData[selector].push(callback); + + return self; + }, + + getScrollContainer: function() { + var scrollContainer, node = this.dom.getRoot(); + + while (node && node.nodeName != 'BODY') { + if (node.scrollHeight > node.clientHeight) { + scrollContainer = node; + break; + } + + node = node.parentNode; + } + + return scrollContainer; + }, + + scrollIntoView: function(elm) { + var y, viewPort, self = this, dom = self.dom, root = dom.getRoot(), viewPortY, viewPortH; + + function getPos(elm) { + var x = 0, y = 0; + + var offsetParent = elm; + while (offsetParent && offsetParent.nodeType) { + x += offsetParent.offsetLeft || 0; + y += offsetParent.offsetTop || 0; + offsetParent = offsetParent.offsetParent; + } + + return {x: x, y: y}; + } + + if (root.nodeName != 'BODY') { + var scrollContainer = self.getScrollContainer(); + if (scrollContainer) { + y = getPos(elm).y - getPos(scrollContainer).y; + viewPortH = scrollContainer.clientHeight; + viewPortY = scrollContainer.scrollTop; + if (y < viewPortY || y + 25 > viewPortY + viewPortH) { + scrollContainer.scrollTop = y < viewPortY ? y : y - viewPortH + 25; + } + + return; + } + } + + viewPort = dom.getViewPort(self.editor.getWin()); + y = dom.getPos(elm).y; + viewPortY = viewPort.y; + viewPortH = viewPort.h; + if (y < viewPort.y || y + 25 > viewPortY + viewPortH) { + self.editor.getWin().scrollTo(0, y < viewPortY ? y : y - viewPortH + 25); + } + }, + + _moveEndPoint: function(rng, node, start) { + var root = node, walker = new TreeWalker(node, root); + var nonEmptyElementsMap = this.dom.schema.getNonEmptyElements(); + + do { + // Text node + if (node.nodeType == 3 && trim(node.nodeValue).length !== 0) { + if (start) { + rng.setStart(node, 0); + } else { + rng.setEnd(node, node.nodeValue.length); + } + + return; + } + + // BR/IMG/INPUT elements + if (nonEmptyElementsMap[node.nodeName]) { + if (start) { + rng.setStartBefore(node); + } else { + if (node.nodeName == 'BR') { + rng.setEndBefore(node); + } else { + rng.setEndAfter(node); + } + } + + return; + } + + // Found empty text block old IE can place the selection inside those + if (Env.ie && Env.ie < 11 && this.dom.isBlock(node) && this.dom.isEmpty(node)) { + if (start) { + rng.setStart(node, 0); + } else { + rng.setEnd(node, 0); + } + + return; + } + } while ((node = (start ? walker.next() : walker.prev()))); + + // Failed to find any text node or other suitable location then move to the root of body + if (root.nodeName == 'BODY') { + if (start) { + rng.setStart(root, 0); + } else { + rng.setEnd(root, root.childNodes.length); + } + } + }, + + destroy: function() { + this.win = null; + this.controlSelection.destroy(); + } + }; + + return Selection; +}); + +// Included from: js/tinymce/classes/Formatter.js + +/** + * Formatter.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Text formatter engine class. This class is used to apply formats like bold, italic, font size + * etc to the current selection or specific nodes. This engine was build to replace the browsers + * default formatting logic for execCommand due to it's inconsistent and buggy behavior. + * + * @class tinymce.Formatter + * @example + * tinymce.activeEditor.formatter.register('mycustomformat', { + * inline: 'span', + * styles: {color: '#ff0000'} + * }); + * + * tinymce.activeEditor.formatter.apply('mycustomformat'); + */ +define("tinymce/Formatter", [ + "tinymce/dom/TreeWalker", + "tinymce/dom/RangeUtils", + "tinymce/util/Tools" +], function(TreeWalker, RangeUtils, Tools) { + /** + * Constructs a new formatter instance. + * + * @constructor Formatter + * @param {tinymce.Editor} ed Editor instance to construct the formatter engine to. + */ + return function(ed) { + var formats = {}, + dom = ed.dom, + selection = ed.selection, + rangeUtils = new RangeUtils(dom), + isValid = ed.schema.isValidChild, + isBlock = dom.isBlock, + forcedRootBlock = ed.settings.forced_root_block, + nodeIndex = dom.nodeIndex, + INVISIBLE_CHAR = '\uFEFF', + MCE_ATTR_RE = /^(src|href|style)$/, + FALSE = false, + TRUE = true, + formatChangeData, + undef, + getContentEditable = dom.getContentEditable, + disableCaretContainer, + markCaretContainersBogus; + + var each = Tools.each, + grep = Tools.grep, + walk = Tools.walk, + extend = Tools.extend; + + function isTextBlock(name) { + if (name.nodeType) { + name = name.nodeName; + } + + return !!ed.schema.getTextBlockElements()[name.toLowerCase()]; + } + + function getParents(node, selector) { + return dom.getParents(node, selector, dom.getRoot()); + } + + function isCaretNode(node) { + return node.nodeType === 1 && node.id === '_mce_caret'; + } + + function defaultFormats() { + register({ + alignleft: [ + {selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li', styles: {textAlign: 'left'}, defaultBlock: 'div'}, + {selector: 'img,table', collapsed: false, styles: {'float': 'left'}} + ], + + aligncenter: [ + {selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li', styles: {textAlign: 'center'}, defaultBlock: 'div'}, + {selector: 'img', collapsed: false, styles: {display: 'block', marginLeft: 'auto', marginRight: 'auto'}}, + {selector: 'table', collapsed: false, styles: {marginLeft: 'auto', marginRight: 'auto'}} + ], + + alignright: [ + {selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li', styles: {textAlign: 'right'}, defaultBlock: 'div'}, + {selector: 'img,table', collapsed: false, styles: {'float': 'right'}} + ], + + alignjustify: [ + {selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li', styles: {textAlign: 'justify'}, defaultBlock: 'div'} + ], + + bold: [ + {inline: 'strong', remove: 'all'}, + {inline: 'span', styles: {fontWeight: 'bold'}}, + {inline: 'b', remove: 'all'} + ], + + italic: [ + {inline: 'em', remove: 'all'}, + {inline: 'span', styles: {fontStyle: 'italic'}}, + {inline: 'i', remove: 'all'} + ], + + underline: [ + {inline: 'span', styles: {textDecoration: 'underline'}, exact: true}, + {inline: 'u', remove: 'all'} + ], + + strikethrough: [ + {inline: 'span', styles: {textDecoration: 'line-through'}, exact: true}, + {inline: 'strike', remove: 'all'} + ], + + forecolor: {inline: 'span', styles: {color: '%value'}, wrap_links: false}, + hilitecolor: {inline: 'span', styles: {backgroundColor: '%value'}, wrap_links: false}, + fontname: {inline: 'span', styles: {fontFamily: '%value'}}, + fontsize: {inline: 'span', styles: {fontSize: '%value'}}, + fontsize_class: {inline: 'span', attributes: {'class': '%value'}}, + blockquote: {block: 'blockquote', wrapper: 1, remove: 'all'}, + subscript: {inline: 'sub'}, + superscript: {inline: 'sup'}, + code: {inline: 'code'}, + + link: {inline: 'a', selector: 'a', remove: 'all', split: true, deep: true, + onmatch: function() { + return true; + }, + + onformat: function(elm, fmt, vars) { + each(vars, function(value, key) { + dom.setAttrib(elm, key, value); + }); + } + }, + + removeformat: [ + { + selector: 'b,strong,em,i,font,u,strike,sub,sup,dfn,code,samp,kbd,var,cite,mark,q', + remove: 'all', + split: true, + expand: false, + block_expand: true, + deep: true + }, + {selector: 'span', attributes: ['style', 'class'], remove: 'empty', split: true, expand: false, deep: true}, + {selector: '*', attributes: ['style', 'class'], split: false, expand: false, deep: true} + ] + }); + + // Register default block formats + each('p h1 h2 h3 h4 h5 h6 div address pre div dt dd samp'.split(/\s/), function(name) { + register(name, {block: name, remove: 'all'}); + }); + + // Register user defined formats + register(ed.settings.formats); + } + + function addKeyboardShortcuts() { + // Add some inline shortcuts + ed.addShortcut('ctrl+b', 'bold_desc', 'Bold'); + ed.addShortcut('ctrl+i', 'italic_desc', 'Italic'); + ed.addShortcut('ctrl+u', 'underline_desc', 'Underline'); + + // BlockFormat shortcuts keys + for (var i = 1; i <= 6; i++) { + ed.addShortcut('ctrl+' + i, '', ['FormatBlock', false, 'h' + i]); + } + + ed.addShortcut('ctrl+7', '', ['FormatBlock', false, 'p']); + ed.addShortcut('ctrl+8', '', ['FormatBlock', false, 'div']); + ed.addShortcut('ctrl+9', '', ['FormatBlock', false, 'address']); + } + + // Public functions + + /** + * Returns the format by name or all formats if no name is specified. + * + * @method get + * @param {String} name Optional name to retrive by. + * @return {Array/Object} Array/Object with all registred formats or a specific format. + */ + function get(name) { + return name ? formats[name] : formats; + } + + /** + * Registers a specific format by name. + * + * @method register + * @param {Object/String} name Name of the format for example "bold". + * @param {Object/Array} format Optional format object or array of format variants + * can only be omitted if the first arg is an object. + */ + function register(name, format) { + if (name) { + if (typeof(name) !== 'string') { + each(name, function(format, name) { + register(name, format); + }); + } else { + // Force format into array and add it to internal collection + format = format.length ? format : [format]; + + each(format, function(format) { + // Set deep to false by default on selector formats this to avoid removing + // alignment on images inside paragraphs when alignment is changed on paragraphs + if (format.deep === undef) { + format.deep = !format.selector; + } + + // Default to true + if (format.split === undef) { + format.split = !format.selector || format.inline; + } + + // Default to true + if (format.remove === undef && format.selector && !format.inline) { + format.remove = 'none'; + } + + // Mark format as a mixed format inline + block level + if (format.selector && format.inline) { + format.mixed = true; + format.block_expand = true; + } + + // Split classes if needed + if (typeof(format.classes) === 'string') { + format.classes = format.classes.split(/\s+/); + } + }); + + formats[name] = format; + } + } + } + + function getTextDecoration(node) { + var decoration; + + ed.dom.getParent(node, function(n) { + decoration = ed.dom.getStyle(n, 'text-decoration'); + return decoration && decoration !== 'none'; + }); + + return decoration; + } + + function processUnderlineAndColor(node) { + var textDecoration; + if (node.nodeType === 1 && node.parentNode && node.parentNode.nodeType === 1) { + textDecoration = getTextDecoration(node.parentNode); + if (ed.dom.getStyle(node, 'color') && textDecoration) { + ed.dom.setStyle(node, 'text-decoration', textDecoration); + } else if (ed.dom.getStyle(node, 'textdecoration') === textDecoration) { + ed.dom.setStyle(node, 'text-decoration', null); + } + } + } + + /** + * Applies the specified format to the current selection or specified node. + * + * @method apply + * @param {String} name Name of format to apply. + * @param {Object} vars Optional list of variables to replace within format before applying it. + * @param {Node} node Optional node to apply the format to defaults to current selection. + */ + function apply(name, vars, node) { + var formatList = get(name), format = formatList[0], bookmark, rng, isCollapsed = !node && selection.isCollapsed(); + + function setElementFormat(elm, fmt) { + fmt = fmt || format; + + if (elm) { + if (fmt.onformat) { + fmt.onformat(elm, fmt, vars, node); + } + + each(fmt.styles, function(value, name) { + dom.setStyle(elm, name, replaceVars(value, vars)); + }); + + each(fmt.attributes, function(value, name) { + dom.setAttrib(elm, name, replaceVars(value, vars)); + }); + + each(fmt.classes, function(value) { + value = replaceVars(value, vars); + + if (!dom.hasClass(elm, value)) { + dom.addClass(elm, value); + } + }); + } + } + + function adjustSelectionToVisibleSelection() { + function findSelectionEnd(start, end) { + var walker = new TreeWalker(end); + for (node = walker.current(); node; node = walker.prev()) { + if (node.childNodes.length > 1 || node == start || node.tagName == 'BR') { + return node; + } + } + } + + // Adjust selection so that a end container with a end offset of zero is not included in the selection + // as this isn't visible to the user. + var rng = ed.selection.getRng(); + var start = rng.startContainer; + var end = rng.endContainer; + + if (start != end && rng.endOffset === 0) { + var newEnd = findSelectionEnd(start, end); + var endOffset = newEnd.nodeType == 3 ? newEnd.length : newEnd.childNodes.length; + + rng.setEnd(newEnd, endOffset); + } + + return rng; + } + + function applyStyleToList(node, bookmark, wrapElm, newWrappers, process){ + var nodes = [], listIndex = -1, list, startIndex = -1, endIndex = -1, currentWrapElm; + + // find the index of the first child list. + each(node.childNodes, function(n, index) { + if (n.nodeName === "UL" || n.nodeName === "OL") { + listIndex = index; + list = n; + return false; + } + }); + + // get the index of the bookmarks + each(node.childNodes, function(n, index) { + if (n.nodeName === "SPAN" && dom.getAttrib(n, "data-mce-type") == "bookmark") { + if (n.id == bookmark.id + "_start") { + startIndex = index; + } else if (n.id == bookmark.id + "_end") { + endIndex = index; + } + } + }); + + // if the selection spans across an embedded list, or there isn't an embedded list - handle processing normally + if (listIndex <= 0 || (startIndex < listIndex && endIndex > listIndex)) { + each(grep(node.childNodes), process); + return 0; + } else { + currentWrapElm = dom.clone(wrapElm, FALSE); + + // create a list of the nodes on the same side of the list as the selection + each(grep(node.childNodes), function(n, index) { + if ((startIndex < listIndex && index < listIndex) || (startIndex > listIndex && index > listIndex)) { + nodes.push(n); + n.parentNode.removeChild(n); + } + }); + + // insert the wrapping element either before or after the list. + if (startIndex < listIndex) { + node.insertBefore(currentWrapElm, list); + } else if (startIndex > listIndex) { + node.insertBefore(currentWrapElm, list.nextSibling); + } + + // add the new nodes to the list. + newWrappers.push(currentWrapElm); + + each(nodes, function(node) { + currentWrapElm.appendChild(node); + }); + + return currentWrapElm; + } + } + + function applyRngStyle(rng, bookmark, node_specific) { + var newWrappers = [], wrapName, wrapElm, contentEditable = true; + + // Setup wrapper element + wrapName = format.inline || format.block; + wrapElm = dom.create(wrapName); + setElementFormat(wrapElm); + + rangeUtils.walk(rng, function(nodes) { + var currentWrapElm; + + /** + * Process a list of nodes wrap them. + */ + function process(node) { + var nodeName, parentName, found, hasContentEditableState, lastContentEditable; + + lastContentEditable = contentEditable; + nodeName = node.nodeName.toLowerCase(); + parentName = node.parentNode.nodeName.toLowerCase(); + + // Node has a contentEditable value + if (node.nodeType === 1 && getContentEditable(node)) { + lastContentEditable = contentEditable; + contentEditable = getContentEditable(node) === "true"; + hasContentEditableState = true; // We don't want to wrap the container only it's children + } + + // Stop wrapping on br elements + if (isEq(nodeName, 'br')) { + currentWrapElm = 0; + + // Remove any br elements when we wrap things + if (format.block) { + dom.remove(node); + } + + return; + } + + // If node is wrapper type + if (format.wrapper && matchNode(node, name, vars)) { + currentWrapElm = 0; + return; + } + + // Can we rename the block + // TODO: Break this if up, too complex + if (contentEditable && !hasContentEditableState && format.block && + !format.wrapper && isTextBlock(nodeName) && isValid(parentName, wrapName)) { + node = dom.rename(node, wrapName); + setElementFormat(node); + newWrappers.push(node); + currentWrapElm = 0; + return; + } + + // Handle selector patterns + if (format.selector) { + // Look for matching formats + each(formatList, function(format) { + // Check collapsed state if it exists + if ('collapsed' in format && format.collapsed !== isCollapsed) { + return; + } + + if (dom.is(node, format.selector) && !isCaretNode(node)) { + setElementFormat(node, format); + found = true; + } + }); + + // Continue processing if a selector match wasn't found and a inline element is defined + if (!format.inline || found) { + currentWrapElm = 0; + return; + } + } + + // Is it valid to wrap this item + // TODO: Break this if up, too complex + if (contentEditable && !hasContentEditableState && isValid(wrapName, nodeName) && isValid(parentName, wrapName) && + !(!node_specific && node.nodeType === 3 && + node.nodeValue.length === 1 && + node.nodeValue.charCodeAt(0) === 65279) && + !isCaretNode(node) && + (!format.inline || !isBlock(node))) { + // Start wrapping + if (!currentWrapElm) { + // Wrap the node + currentWrapElm = dom.clone(wrapElm, FALSE); + node.parentNode.insertBefore(currentWrapElm, node); + newWrappers.push(currentWrapElm); + } + + currentWrapElm.appendChild(node); + } else if (nodeName == 'li' && bookmark) { + // Start wrapping - if we are in a list node and have a bookmark, then + // we will always begin by wrapping in a new element. + currentWrapElm = applyStyleToList(node, bookmark, wrapElm, newWrappers, process); + } else { + // Start a new wrapper for possible children + currentWrapElm = 0; + + each(grep(node.childNodes), process); + + if (hasContentEditableState) { + contentEditable = lastContentEditable; // Restore last contentEditable state from stack + } + + // End the last wrapper + currentWrapElm = 0; + } + } + + // Process siblings from range + each(nodes, process); + }); + + // Wrap links inside as well, for example color inside a link when the wrapper is around the link + if (format.wrap_links === false) { + each(newWrappers, function(node) { + function process(node) { + var i, currentWrapElm, children; + + if (node.nodeName === 'A') { + currentWrapElm = dom.clone(wrapElm, FALSE); + newWrappers.push(currentWrapElm); + + children = grep(node.childNodes); + for (i = 0; i < children.length; i++) { + currentWrapElm.appendChild(children[i]); + } + + node.appendChild(currentWrapElm); + } + + each(grep(node.childNodes), process); + } + + process(node); + }); + } + + // Cleanup + each(newWrappers, function(node) { + var childCount; + + function getChildCount(node) { + var count = 0; + + each(node.childNodes, function(node) { + if (!isWhiteSpaceNode(node) && !isBookmarkNode(node)) { + count++; + } + }); + + return count; + } + + function mergeStyles(node) { + var child, clone; + + each(node.childNodes, function(node) { + if (node.nodeType == 1 && !isBookmarkNode(node) && !isCaretNode(node)) { + child = node; + return FALSE; // break loop + } + }); + + // If child was found and of the same type as the current node + if (child && !isBookmarkNode(child) && matchName(child, format)) { + clone = dom.clone(child, FALSE); + setElementFormat(clone); + + dom.replace(clone, node, TRUE); + dom.remove(child, 1); + } + + return clone || node; + } + + childCount = getChildCount(node); + + // Remove empty nodes but only if there is multiple wrappers and they are not block + // elements so never remove single

    since that would remove the + // currrent empty block element where the caret is at + if ((newWrappers.length > 1 || !isBlock(node)) && childCount === 0) { + dom.remove(node, 1); + return; + } + + if (format.inline || format.wrapper) { + // Merges the current node with it's children of similar type to reduce the number of elements + if (!format.exact && childCount === 1) { + node = mergeStyles(node); + } + + // Remove/merge children + each(formatList, function(format) { + // Merge all children of similar type will move styles from child to parent + // this: text + // will become: text + each(dom.select(format.inline, node), function(child) { + var parent; + + if (isBookmarkNode(child)) { + return; + } + + // When wrap_links is set to false we don't want + // to remove the format on children within links + if (format.wrap_links === false) { + parent = child.parentNode; + + do { + if (parent.nodeName === 'A') { + return; + } + } while ((parent = parent.parentNode)); + } + + removeFormat(format, vars, child, format.exact ? child : null); + }); + }); + + // Remove child if direct parent is of same type + if (matchNode(node.parentNode, name, vars)) { + dom.remove(node, 1); + node = 0; + return TRUE; + } + + // Look for parent with similar style format + if (format.merge_with_parents) { + dom.getParent(node.parentNode, function(parent) { + if (matchNode(parent, name, vars)) { + dom.remove(node, 1); + node = 0; + return TRUE; + } + }); + } + + // Merge next and previous siblings if they are similar texttext becomes texttext + if (node && format.merge_siblings !== false) { + node = mergeSiblings(getNonWhiteSpaceSibling(node), node); + node = mergeSiblings(node, getNonWhiteSpaceSibling(node, TRUE)); + } + } + }); + } + + if (format) { + if (node) { + if (node.nodeType) { + rng = dom.createRng(); + rng.setStartBefore(node); + rng.setEndAfter(node); + applyRngStyle(expandRng(rng, formatList), null, true); + } else { + applyRngStyle(node, null, true); + } + } else { + if (!isCollapsed || !format.inline || dom.select('td.mce-item-selected,th.mce-item-selected').length) { + // Obtain selection node before selection is unselected by applyRngStyle() + var curSelNode = ed.selection.getNode(); + + // If the formats have a default block and we can't find a parent block then + // start wrapping it with a DIV this is for forced_root_blocks: false + // It's kind of a hack but people should be using the default block type P since all desktop editors work that way + if (!forcedRootBlock && formatList[0].defaultBlock && !dom.getParent(curSelNode, dom.isBlock)) { + apply(formatList[0].defaultBlock); + } + + // Apply formatting to selection + ed.selection.setRng(adjustSelectionToVisibleSelection()); + bookmark = selection.getBookmark(); + applyRngStyle(expandRng(selection.getRng(TRUE), formatList), bookmark); + + // Colored nodes should be underlined so that the color of the underline matches the text color. + if (format.styles && (format.styles.color || format.styles.textDecoration)) { + walk(curSelNode, processUnderlineAndColor, 'childNodes'); + processUnderlineAndColor(curSelNode); + } + + selection.moveToBookmark(bookmark); + moveStart(selection.getRng(TRUE)); + ed.nodeChanged(); + } else { + performCaretAction('apply', name, vars); + } + } + } + } + + /** + * Removes the specified format from the current selection or specified node. + * + * @method remove + * @param {String} name Name of format to remove. + * @param {Object} vars Optional list of variables to replace within format before removing it. + * @param {Node/Range} node Optional node or DOM range to remove the format from defaults to current selection. + */ + function remove(name, vars, node) { + var formatList = get(name), format = formatList[0], bookmark, rng, contentEditable = true; + + // Merges the styles for each node + function process(node) { + var children, i, l, lastContentEditable, hasContentEditableState; + + // Node has a contentEditable value + if (node.nodeType === 1 && getContentEditable(node)) { + lastContentEditable = contentEditable; + contentEditable = getContentEditable(node) === "true"; + hasContentEditableState = true; // We don't want to wrap the container only it's children + } + + // Grab the children first since the nodelist might be changed + children = grep(node.childNodes); + + // Process current node + if (contentEditable && !hasContentEditableState) { + for (i = 0, l = formatList.length; i < l; i++) { + if (removeFormat(formatList[i], vars, node, node)) { + break; + } + } + } + + // Process the children + if (format.deep) { + if (children.length) { + for (i = 0, l = children.length; i < l; i++) { + process(children[i]); + } + + if (hasContentEditableState) { + contentEditable = lastContentEditable; // Restore last contentEditable state from stack + } + } + } + } + + function findFormatRoot(container) { + var formatRoot; + + // Find format root + each(getParents(container.parentNode).reverse(), function(parent) { + var format; + + // Find format root element + if (!formatRoot && parent.id != '_start' && parent.id != '_end') { + // Is the node matching the format we are looking for + format = matchNode(parent, name, vars); + if (format && format.split !== false) { + formatRoot = parent; + } + } + }); + + return formatRoot; + } + + function wrapAndSplit(format_root, container, target, split) { + var parent, clone, lastClone, firstClone, i, formatRootParent; + + // Format root found then clone formats and split it + if (format_root) { + formatRootParent = format_root.parentNode; + + for (parent = container.parentNode; parent && parent != formatRootParent; parent = parent.parentNode) { + clone = dom.clone(parent, FALSE); + + for (i = 0; i < formatList.length; i++) { + if (removeFormat(formatList[i], vars, clone, clone)) { + clone = 0; + break; + } + } + + // Build wrapper node + if (clone) { + if (lastClone) { + clone.appendChild(lastClone); + } + + if (!firstClone) { + firstClone = clone; + } + + lastClone = clone; + } + } + + // Never split block elements if the format is mixed + if (split && (!format.mixed || !isBlock(format_root))) { + container = dom.split(format_root, container); + } + + // Wrap container in cloned formats + if (lastClone) { + target.parentNode.insertBefore(lastClone, target); + firstClone.appendChild(target); + } + } + + return container; + } + + function splitToFormatRoot(container) { + return wrapAndSplit(findFormatRoot(container), container, container, true); + } + + function unwrap(start) { + var node = dom.get(start ? '_start' : '_end'), + out = node[start ? 'firstChild' : 'lastChild']; + + // If the end is placed within the start the result will be removed + // So this checks if the out node is a bookmark node if it is it + // checks for another more suitable node + if (isBookmarkNode(out)) { + out = out[start ? 'firstChild' : 'lastChild']; + } + + dom.remove(node, true); + + return out; + } + + function removeRngStyle(rng) { + var startContainer, endContainer; + var commonAncestorContainer = rng.commonAncestorContainer; + + rng = expandRng(rng, formatList, TRUE); + + if (format.split) { + startContainer = getContainer(rng, TRUE); + endContainer = getContainer(rng); + + if (startContainer != endContainer) { + // WebKit will render the table incorrectly if we wrap a TH or TD in a SPAN + // so let's see if we can use the first child instead + // This will happen if you triple click a table cell and use remove formatting + if (/^(TR|TH|TD)$/.test(startContainer.nodeName) && startContainer.firstChild) { + if (startContainer.nodeName == "TR") { + startContainer = startContainer.firstChild.firstChild || startContainer; + } else { + startContainer = startContainer.firstChild || startContainer; + } + } + + // Try to adjust endContainer as well if cells on the same row were selected - bug #6410 + if (commonAncestorContainer && + /^T(HEAD|BODY|FOOT|R)$/.test(commonAncestorContainer.nodeName) && + /^(TH|TD)$/.test(endContainer.nodeName) && endContainer.firstChild) { + endContainer = endContainer.firstChild || endContainer; + } + + // Wrap start/end nodes in span element since these might be cloned/moved + startContainer = wrap(startContainer, 'span', {id: '_start', 'data-mce-type': 'bookmark'}); + endContainer = wrap(endContainer, 'span', {id: '_end', 'data-mce-type': 'bookmark'}); + + // Split start/end + splitToFormatRoot(startContainer); + splitToFormatRoot(endContainer); + + // Unwrap start/end to get real elements again + startContainer = unwrap(TRUE); + endContainer = unwrap(); + } else { + startContainer = endContainer = splitToFormatRoot(startContainer); + } + + // Update range positions since they might have changed after the split operations + rng.startContainer = startContainer.parentNode; + rng.startOffset = nodeIndex(startContainer); + rng.endContainer = endContainer.parentNode; + rng.endOffset = nodeIndex(endContainer) + 1; + } + + // Remove items between start/end + rangeUtils.walk(rng, function(nodes) { + each(nodes, function(node) { + process(node); + + // Remove parent span if it only contains text-decoration: underline, yet a parent node is also underlined. + if (node.nodeType === 1 && ed.dom.getStyle(node, 'text-decoration') === 'underline' && + node.parentNode && getTextDecoration(node.parentNode) === 'underline') { + removeFormat({ + 'deep': false, + 'exact': true, + 'inline': 'span', + 'styles': { + 'textDecoration': 'underline' + } + }, null, node); + } + }); + }); + } + + // Handle node + if (node) { + if (node.nodeType) { + rng = dom.createRng(); + rng.setStartBefore(node); + rng.setEndAfter(node); + removeRngStyle(rng); + } else { + removeRngStyle(node); + } + + return; + } + + if (!selection.isCollapsed() || !format.inline || dom.select('td.mce-item-selected,th.mce-item-selected').length) { + bookmark = selection.getBookmark(); + removeRngStyle(selection.getRng(TRUE)); + selection.moveToBookmark(bookmark); + + // Check if start element still has formatting then we are at: "text|text" + // and need to move the start into the next text node + if (format.inline && match(name, vars, selection.getStart())) { + moveStart(selection.getRng(true)); + } + + ed.nodeChanged(); + } else { + performCaretAction('remove', name, vars); + } + } + + /** + * Toggles the specified format on/off. + * + * @method toggle + * @param {String} name Name of format to apply/remove. + * @param {Object} vars Optional list of variables to replace within format before applying/removing it. + * @param {Node} node Optional node to apply the format to or remove from. Defaults to current selection. + */ + function toggle(name, vars, node) { + var fmt = get(name); + + if (match(name, vars, node) && (!('toggle' in fmt[0]) || fmt[0].toggle)) { + remove(name, vars, node); + } else { + apply(name, vars, node); + } + } + + /** + * Return true/false if the specified node has the specified format. + * + * @method matchNode + * @param {Node} node Node to check the format on. + * @param {String} name Format name to check. + * @param {Object} vars Optional list of variables to replace before checking it. + * @param {Boolean} similar Match format that has similar properties. + * @return {Object} Returns the format object it matches or undefined if it doesn't match. + */ + function matchNode(node, name, vars, similar) { + var formatList = get(name), format, i, classes; + + function matchItems(node, format, item_name) { + var key, value, items = format[item_name], i; + + // Custom match + if (format.onmatch) { + return format.onmatch(node, format, item_name); + } + + // Check all items + if (items) { + // Non indexed object + if (items.length === undef) { + for (key in items) { + if (items.hasOwnProperty(key)) { + if (item_name === 'attributes') { + value = dom.getAttrib(node, key); + } else { + value = getStyle(node, key); + } + + if (similar && !value && !format.exact) { + return; + } + + if ((!similar || format.exact) && !isEq(value, normalizeStyleValue(replaceVars(items[key], vars), key))) { + return; + } + } + } + } else { + // Only one match needed for indexed arrays + for (i = 0; i < items.length; i++) { + if (item_name === 'attributes' ? dom.getAttrib(node, items[i]) : getStyle(node, items[i])) { + return format; + } + } + } + } + + return format; + } + + if (formatList && node) { + // Check each format in list + for (i = 0; i < formatList.length; i++) { + format = formatList[i]; + + // Name name, attributes, styles and classes + if (matchName(node, format) && matchItems(node, format, 'attributes') && matchItems(node, format, 'styles')) { + // Match classes + if ((classes = format.classes)) { + for (i = 0; i < classes.length; i++) { + if (!dom.hasClass(node, classes[i])) { + return; + } + } + } + + return format; + } + } + } + } + + /** + * Matches the current selection or specified node against the specified format name. + * + * @method match + * @param {String} name Name of format to match. + * @param {Object} vars Optional list of variables to replace before checking it. + * @param {Node} node Optional node to check. + * @return {boolean} true/false if the specified selection/node matches the format. + */ + function match(name, vars, node) { + var startNode; + + function matchParents(node) { + var root = dom.getRoot(); + + if (node === root) { + return false; + } + + // Find first node with similar format settings + node = dom.getParent(node, function(node) { + return node.parentNode === root || !!matchNode(node, name, vars, true); + }); + + // Do an exact check on the similar format element + return matchNode(node, name, vars); + } + + // Check specified node + if (node) { + return matchParents(node); + } + + // Check selected node + node = selection.getNode(); + if (matchParents(node)) { + return TRUE; + } + + // Check start node if it's different + startNode = selection.getStart(); + if (startNode != node) { + if (matchParents(startNode)) { + return TRUE; + } + } + + return FALSE; + } + + /** + * Matches the current selection against the array of formats and returns a new array with matching formats. + * + * @method matchAll + * @param {Array} names Name of format to match. + * @param {Object} vars Optional list of variables to replace before checking it. + * @return {Array} Array with matched formats. + */ + function matchAll(names, vars) { + var startElement, matchedFormatNames = [], checkedMap = {}; + + // Check start of selection for formats + startElement = selection.getStart(); + dom.getParent(startElement, function(node) { + var i, name; + + for (i = 0; i < names.length; i++) { + name = names[i]; + + if (!checkedMap[name] && matchNode(node, name, vars)) { + checkedMap[name] = true; + matchedFormatNames.push(name); + } + } + }, dom.getRoot()); + + return matchedFormatNames; + } + + /** + * Returns true/false if the specified format can be applied to the current selection or not. It + * will currently only check the state for selector formats, it returns true on all other format types. + * + * @method canApply + * @param {String} name Name of format to check. + * @return {boolean} true/false if the specified format can be applied to the current selection/node. + */ + function canApply(name) { + var formatList = get(name), startNode, parents, i, x, selector; + + if (formatList) { + startNode = selection.getStart(); + parents = getParents(startNode); + + for (x = formatList.length - 1; x >= 0; x--) { + selector = formatList[x].selector; + + // Format is not selector based then always return TRUE + // Is it has a defaultBlock then it's likely it can be applied for example align on a non block element line + if (!selector || formatList[x].defaultBlock) { + return TRUE; + } + + for (i = parents.length - 1; i >= 0; i--) { + if (dom.is(parents[i], selector)) { + return TRUE; + } + } + } + } + + return FALSE; + } + + /** + * Executes the specified callback when the current selection matches the formats or not. + * + * @method formatChanged + * @param {String} formats Comma separated list of formats to check for. + * @param {function} callback Callback with state and args when the format is changed/toggled on/off. + * @param {Boolean} similar True/false state if the match should handle similar or exact formats. + */ + function formatChanged(formats, callback, similar) { + var currentFormats; + + // Setup format node change logic + if (!formatChangeData) { + formatChangeData = {}; + currentFormats = {}; + + ed.on('NodeChange', function(e) { + var parents = getParents(e.element), matchedFormats = {}; + + // Check for new formats + each(formatChangeData, function(callbacks, format) { + each(parents, function(node) { + if (matchNode(node, format, {}, callbacks.similar)) { + if (!currentFormats[format]) { + // Execute callbacks + each(callbacks, function(callback) { + callback(true, {node: node, format: format, parents: parents}); + }); + + currentFormats[format] = callbacks; + } + + matchedFormats[format] = callbacks; + return false; + } + }); + }); + + // Check if current formats still match + each(currentFormats, function(callbacks, format) { + if (!matchedFormats[format]) { + delete currentFormats[format]; + + each(callbacks, function(callback) { + callback(false, {node: e.element, format: format, parents: parents}); + }); + } + }); + }); + } + + // Add format listeners + each(formats.split(','), function(format) { + if (!formatChangeData[format]) { + formatChangeData[format] = []; + formatChangeData[format].similar = similar; + } + + formatChangeData[format].push(callback); + }); + + return this; + } + + // Expose to public + extend(this, { + get: get, + register: register, + apply: apply, + remove: remove, + toggle: toggle, + match: match, + matchAll: matchAll, + matchNode: matchNode, + canApply: canApply, + formatChanged: formatChanged + }); + + // Initialize + defaultFormats(); + addKeyboardShortcuts(); + ed.on('BeforeGetContent', function() { + if (markCaretContainersBogus) { + markCaretContainersBogus(); + } + }); + ed.on('mouseup keydown', function(e) { + if (disableCaretContainer) { + disableCaretContainer(e); + } + }); + + // Private functions + + /** + * Checks if the specified nodes name matches the format inline/block or selector. + * + * @private + * @param {Node} node Node to match against the specified format. + * @param {Object} format Format object o match with. + * @return {boolean} true/false if the format matches. + */ + function matchName(node, format) { + // Check for inline match + if (isEq(node, format.inline)) { + return TRUE; + } + + // Check for block match + if (isEq(node, format.block)) { + return TRUE; + } + + // Check for selector match + if (format.selector) { + return node.nodeType == 1 && dom.is(node, format.selector); + } + } + + /** + * Compares two string/nodes regardless of their case. + * + * @private + * @param {String/Node} Node or string to compare. + * @param {String/Node} Node or string to compare. + * @return {boolean} True/false if they match. + */ + function isEq(str1, str2) { + str1 = str1 || ''; + str2 = str2 || ''; + + str1 = '' + (str1.nodeName || str1); + str2 = '' + (str2.nodeName || str2); + + return str1.toLowerCase() == str2.toLowerCase(); + } + + /** + * Returns the style by name on the specified node. This method modifies the style + * contents to make it more easy to match. This will resolve a few browser issues. + * + * @private + * @param {Node} node to get style from. + * @param {String} name Style name to get. + * @return {String} Style item value. + */ + function getStyle(node, name) { + return normalizeStyleValue(dom.getStyle(node, name), name); + } + + /** + * Normalize style value by name. This method modifies the style contents + * to make it more easy to match. This will resolve a few browser issues. + * + * @private + * @param {Node} node to get style from. + * @param {String} name Style name to get. + * @return {String} Style item value. + */ + function normalizeStyleValue(value, name) { + // Force the format to hex + if (name == 'color' || name == 'backgroundColor') { + value = dom.toHex(value); + } + + // Opera will return bold as 700 + if (name == 'fontWeight' && value == 700) { + value = 'bold'; + } + + // Normalize fontFamily so "'Font name', Font" becomes: "Font name,Font" + if (name == 'fontFamily') { + value = value.replace(/[\'\"]/g, '').replace(/,\s+/g, ','); + } + + return '' + value; + } + + /** + * Replaces variables in the value. The variable format is %var. + * + * @private + * @param {String} value Value to replace variables in. + * @param {Object} vars Name/value array with variables to replace. + * @return {String} New value with replaced variables. + */ + function replaceVars(value, vars) { + if (typeof(value) != "string") { + value = value(vars); + } else if (vars) { + value = value.replace(/%(\w+)/g, function(str, name) { + return vars[name] || str; + }); + } + + return value; + } + + function isWhiteSpaceNode(node) { + return node && node.nodeType === 3 && /^([\t \r\n]+|)$/.test(node.nodeValue); + } + + function wrap(node, name, attrs) { + var wrapper = dom.create(name, attrs); + + node.parentNode.insertBefore(wrapper, node); + wrapper.appendChild(node); + + return wrapper; + } + + /** + * Expands the specified range like object to depending on format. + * + * For example on block formats it will move the start/end position + * to the beginning of the current block. + * + * @private + * @param {Object} rng Range like object. + * @param {Array} formats Array with formats to expand by. + * @return {Object} Expanded range like object. + */ + function expandRng(rng, format, remove) { + var lastIdx, leaf, endPoint, + startContainer = rng.startContainer, + startOffset = rng.startOffset, + endContainer = rng.endContainer, + endOffset = rng.endOffset; + + // This function walks up the tree if there is no siblings before/after the node + function findParentContainer(start) { + var container, parent, sibling, siblingName, root; + + container = parent = start ? startContainer : endContainer; + siblingName = start ? 'previousSibling' : 'nextSibling'; + root = dom.getRoot(); + + function isBogusBr(node) { + return node.nodeName == "BR" && node.getAttribute('data-mce-bogus') && !node.nextSibling; + } + + // If it's a text node and the offset is inside the text + if (container.nodeType == 3 && !isWhiteSpaceNode(container)) { + if (start ? startOffset > 0 : endOffset < container.nodeValue.length) { + return container; + } + } + + /*eslint no-constant-condition:0 */ + while (true) { + // Stop expanding on block elements + if (!format[0].block_expand && isBlock(parent)) { + return parent; + } + + // Walk left/right + for (sibling = parent[siblingName]; sibling; sibling = sibling[siblingName]) { + if (!isBookmarkNode(sibling) && !isWhiteSpaceNode(sibling) && !isBogusBr(sibling)) { + return parent; + } + } + + // Check if we can move up are we at root level or body level + if (parent.parentNode == root) { + container = parent; + break; + } + + parent = parent.parentNode; + } + + return container; + } + + // This function walks down the tree to find the leaf at the selection. + // The offset is also returned as if node initially a leaf, the offset may be in the middle of the text node. + function findLeaf(node, offset) { + if (offset === undef) { + offset = node.nodeType === 3 ? node.length : node.childNodes.length; + } + + while (node && node.hasChildNodes()) { + node = node.childNodes[offset]; + if (node) { + offset = node.nodeType === 3 ? node.length : node.childNodes.length; + } + } + return { node: node, offset: offset }; + } + + // If index based start position then resolve it + if (startContainer.nodeType == 1 && startContainer.hasChildNodes()) { + lastIdx = startContainer.childNodes.length - 1; + startContainer = startContainer.childNodes[startOffset > lastIdx ? lastIdx : startOffset]; + + if (startContainer.nodeType == 3) { + startOffset = 0; + } + } + + // If index based end position then resolve it + if (endContainer.nodeType == 1 && endContainer.hasChildNodes()) { + lastIdx = endContainer.childNodes.length - 1; + endContainer = endContainer.childNodes[endOffset > lastIdx ? lastIdx : endOffset - 1]; + + if (endContainer.nodeType == 3) { + endOffset = endContainer.nodeValue.length; + } + } + + // Expands the node to the closes contentEditable false element if it exists + function findParentContentEditable(node) { + var parent = node; + + while (parent) { + if (parent.nodeType === 1 && getContentEditable(parent)) { + return getContentEditable(parent) === "false" ? parent : node; + } + + parent = parent.parentNode; + } + + return node; + } + + function findWordEndPoint(container, offset, start) { + var walker, node, pos, lastTextNode; + + function findSpace(node, offset) { + var pos, pos2, str = node.nodeValue; + + if (typeof(offset) == "undefined") { + offset = start ? str.length : 0; + } + + if (start) { + pos = str.lastIndexOf(' ', offset); + pos2 = str.lastIndexOf('\u00a0', offset); + pos = pos > pos2 ? pos : pos2; + + // Include the space on remove to avoid tag soup + if (pos !== -1 && !remove) { + pos++; + } + } else { + pos = str.indexOf(' ', offset); + pos2 = str.indexOf('\u00a0', offset); + pos = pos !== -1 && (pos2 === -1 || pos < pos2) ? pos : pos2; + } + + return pos; + } + + if (container.nodeType === 3) { + pos = findSpace(container, offset); + + if (pos !== -1) { + return {container: container, offset: pos}; + } + + lastTextNode = container; + } + + // Walk the nodes inside the block + walker = new TreeWalker(container, dom.getParent(container, isBlock) || ed.getBody()); + while ((node = walker[start ? 'prev' : 'next']())) { + if (node.nodeType === 3) { + lastTextNode = node; + pos = findSpace(node); + + if (pos !== -1) { + return {container: node, offset: pos}; + } + } else if (isBlock(node)) { + break; + } + } + + if (lastTextNode) { + if (start) { + offset = 0; + } else { + offset = lastTextNode.length; + } + + return {container: lastTextNode, offset: offset}; + } + } + + function findSelectorEndPoint(container, sibling_name) { + var parents, i, y, curFormat; + + if (container.nodeType == 3 && container.nodeValue.length === 0 && container[sibling_name]) { + container = container[sibling_name]; + } + + parents = getParents(container); + for (i = 0; i < parents.length; i++) { + for (y = 0; y < format.length; y++) { + curFormat = format[y]; + + // If collapsed state is set then skip formats that doesn't match that + if ("collapsed" in curFormat && curFormat.collapsed !== rng.collapsed) { + continue; + } + + if (dom.is(parents[i], curFormat.selector)) { + return parents[i]; + } + } + } + + return container; + } + + function findBlockEndPoint(container, sibling_name) { + var node, root = dom.getRoot(); + + // Expand to block of similar type + if (!format[0].wrapper) { + node = dom.getParent(container, format[0].block, root); + } + + // Expand to first wrappable block element or any block element + if (!node) { + node = dom.getParent(container.nodeType == 3 ? container.parentNode : container, function(node) { + // Fixes #6183 where it would expand to editable parent element in inline mode + return node != root && isTextBlock(node); + }); + } + + // Exclude inner lists from wrapping + if (node && format[0].wrapper) { + node = getParents(node, 'ul,ol').reverse()[0] || node; + } + + // Didn't find a block element look for first/last wrappable element + if (!node) { + node = container; + + while (node[sibling_name] && !isBlock(node[sibling_name])) { + node = node[sibling_name]; + + // Break on BR but include it will be removed later on + // we can't remove it now since we need to check if it can be wrapped + if (isEq(node, 'br')) { + break; + } + } + } + + return node || container; + } + + // Expand to closest contentEditable element + startContainer = findParentContentEditable(startContainer); + endContainer = findParentContentEditable(endContainer); + + // Exclude bookmark nodes if possible + if (isBookmarkNode(startContainer.parentNode) || isBookmarkNode(startContainer)) { + startContainer = isBookmarkNode(startContainer) ? startContainer : startContainer.parentNode; + startContainer = startContainer.nextSibling || startContainer; + + if (startContainer.nodeType == 3) { + startOffset = 0; + } + } + + if (isBookmarkNode(endContainer.parentNode) || isBookmarkNode(endContainer)) { + endContainer = isBookmarkNode(endContainer) ? endContainer : endContainer.parentNode; + endContainer = endContainer.previousSibling || endContainer; + + if (endContainer.nodeType == 3) { + endOffset = endContainer.length; + } + } + + if (format[0].inline) { + if (rng.collapsed) { + // Expand left to closest word boundary + endPoint = findWordEndPoint(startContainer, startOffset, true); + if (endPoint) { + startContainer = endPoint.container; + startOffset = endPoint.offset; + } + + // Expand right to closest word boundary + endPoint = findWordEndPoint(endContainer, endOffset); + if (endPoint) { + endContainer = endPoint.container; + endOffset = endPoint.offset; + } + } + + // Avoid applying formatting to a trailing space. + leaf = findLeaf(endContainer, endOffset); + if (leaf.node) { + while (leaf.node && leaf.offset === 0 && leaf.node.previousSibling) { + leaf = findLeaf(leaf.node.previousSibling); + } + + if (leaf.node && leaf.offset > 0 && leaf.node.nodeType === 3 && + leaf.node.nodeValue.charAt(leaf.offset - 1) === ' ') { + + if (leaf.offset > 1) { + endContainer = leaf.node; + endContainer.splitText(leaf.offset - 1); + } + } + } + } + + // Move start/end point up the tree if the leaves are sharp and if we are in different containers + // Example * becomes !: !

    *texttext*

    ! + // This will reduce the number of wrapper elements that needs to be created + // Move start point up the tree + if (format[0].inline || format[0].block_expand) { + if (!format[0].inline || (startContainer.nodeType != 3 || startOffset === 0)) { + startContainer = findParentContainer(true); + } + + if (!format[0].inline || (endContainer.nodeType != 3 || endOffset === endContainer.nodeValue.length)) { + endContainer = findParentContainer(); + } + } + + // Expand start/end container to matching selector + if (format[0].selector && format[0].expand !== FALSE && !format[0].inline) { + // Find new startContainer/endContainer if there is better one + startContainer = findSelectorEndPoint(startContainer, 'previousSibling'); + endContainer = findSelectorEndPoint(endContainer, 'nextSibling'); + } + + // Expand start/end container to matching block element or text node + if (format[0].block || format[0].selector) { + // Find new startContainer/endContainer if there is better one + startContainer = findBlockEndPoint(startContainer, 'previousSibling'); + endContainer = findBlockEndPoint(endContainer, 'nextSibling'); + + // Non block element then try to expand up the leaf + if (format[0].block) { + if (!isBlock(startContainer)) { + startContainer = findParentContainer(true); + } + + if (!isBlock(endContainer)) { + endContainer = findParentContainer(); + } + } + } + + // Setup index for startContainer + if (startContainer.nodeType == 1) { + startOffset = nodeIndex(startContainer); + startContainer = startContainer.parentNode; + } + + // Setup index for endContainer + if (endContainer.nodeType == 1) { + endOffset = nodeIndex(endContainer) + 1; + endContainer = endContainer.parentNode; + } + + // Return new range like object + return { + startContainer: startContainer, + startOffset: startOffset, + endContainer: endContainer, + endOffset: endOffset + }; + } + + /** + * Removes the specified format for the specified node. It will also remove the node if it doesn't have + * any attributes if the format specifies it to do so. + * + * @private + * @param {Object} format Format object with items to remove from node. + * @param {Object} vars Name/value object with variables to apply to format. + * @param {Node} node Node to remove the format styles on. + * @param {Node} compare_node Optional compare node, if specified the styles will be compared to that node. + * @return {Boolean} True/false if the node was removed or not. + */ + function removeFormat(format, vars, node, compare_node) { + var i, attrs, stylesModified; + + // Check if node matches format + if (!matchName(node, format)) { + return FALSE; + } + + // Should we compare with format attribs and styles + if (format.remove != 'all') { + // Remove styles + each(format.styles, function(value, name) { + value = normalizeStyleValue(replaceVars(value, vars), name); + + // Indexed array + if (typeof(name) === 'number') { + name = value; + compare_node = 0; + } + + if (!compare_node || isEq(getStyle(compare_node, name), value)) { + dom.setStyle(node, name, ''); + } + + stylesModified = 1; + }); + + // Remove style attribute if it's empty + if (stylesModified && dom.getAttrib(node, 'style') === '') { + node.removeAttribute('style'); + node.removeAttribute('data-mce-style'); + } + + // Remove attributes + each(format.attributes, function(value, name) { + var valueOut; + + value = replaceVars(value, vars); + + // Indexed array + if (typeof(name) === 'number') { + name = value; + compare_node = 0; + } + + if (!compare_node || isEq(dom.getAttrib(compare_node, name), value)) { + // Keep internal classes + if (name == 'class') { + value = dom.getAttrib(node, name); + if (value) { + // Build new class value where everything is removed except the internal prefixed classes + valueOut = ''; + each(value.split(/\s+/), function(cls) { + if (/mce\w+/.test(cls)) { + valueOut += (valueOut ? ' ' : '') + cls; + } + }); + + // We got some internal classes left + if (valueOut) { + dom.setAttrib(node, name, valueOut); + return; + } + } + } + + // IE6 has a bug where the attribute doesn't get removed correctly + if (name == "class") { + node.removeAttribute('className'); + } + + // Remove mce prefixed attributes + if (MCE_ATTR_RE.test(name)) { + node.removeAttribute('data-mce-' + name); + } + + node.removeAttribute(name); + } + }); + + // Remove classes + each(format.classes, function(value) { + value = replaceVars(value, vars); + + if (!compare_node || dom.hasClass(compare_node, value)) { + dom.removeClass(node, value); + } + }); + + // Check for non internal attributes + attrs = dom.getAttribs(node); + for (i = 0; i < attrs.length; i++) { + if (attrs[i].nodeName.indexOf('_') !== 0) { + return FALSE; + } + } + } + + // Remove the inline child if it's empty for example or + if (format.remove != 'none') { + removeNode(node, format); + return TRUE; + } + } + + /** + * Removes the node and wrap it's children in paragraphs before doing so or + * appends BR elements to the beginning/end of the block element if forcedRootBlocks is disabled. + * + * If the div in the node below gets removed: + * text
    text
    text + * + * Output becomes: + * text

    text
    text + * + * So when the div is removed the result is: + * text
    text
    text + * + * @private + * @param {Node} node Node to remove + apply BR/P elements to. + * @param {Object} format Format rule. + * @return {Node} Input node. + */ + function removeNode(node, format) { + var parentNode = node.parentNode, rootBlockElm; + + function find(node, next, inc) { + node = getNonWhiteSpaceSibling(node, next, inc); + + return !node || (node.nodeName == 'BR' || isBlock(node)); + } + + if (format.block) { + if (!forcedRootBlock) { + // Append BR elements if needed before we remove the block + if (isBlock(node) && !isBlock(parentNode)) { + if (!find(node, FALSE) && !find(node.firstChild, TRUE, 1)) { + node.insertBefore(dom.create('br'), node.firstChild); + } + + if (!find(node, TRUE) && !find(node.lastChild, FALSE, 1)) { + node.appendChild(dom.create('br')); + } + } + } else { + // Wrap the block in a forcedRootBlock if we are at the root of document + if (parentNode == dom.getRoot()) { + if (!format.list_block || !isEq(node, format.list_block)) { + each(grep(node.childNodes), function(node) { + if (isValid(forcedRootBlock, node.nodeName.toLowerCase())) { + if (!rootBlockElm) { + rootBlockElm = wrap(node, forcedRootBlock); + dom.setAttribs(rootBlockElm, ed.settings.forced_root_block_attrs); + } else { + rootBlockElm.appendChild(node); + } + } else { + rootBlockElm = 0; + } + }); + } + } + } + } + + // Never remove nodes that isn't the specified inline element if a selector is specified too + if (format.selector && format.inline && !isEq(format.inline, node)) { + return; + } + + dom.remove(node, 1); + } + + /** + * Returns the next/previous non whitespace node. + * + * @private + * @param {Node} node Node to start at. + * @param {boolean} next (Optional) Include next or previous node defaults to previous. + * @param {boolean} inc (Optional) Include the current node in checking. Defaults to false. + * @return {Node} Next or previous node or undefined if it wasn't found. + */ + function getNonWhiteSpaceSibling(node, next, inc) { + if (node) { + next = next ? 'nextSibling' : 'previousSibling'; + + for (node = inc ? node : node[next]; node; node = node[next]) { + if (node.nodeType == 1 || !isWhiteSpaceNode(node)) { + return node; + } + } + } + } + + /** + * Checks if the specified node is a bookmark node or not. + * + * @private + * @param {Node} node Node to check if it's a bookmark node or not. + * @return {Boolean} true/false if the node is a bookmark node. + */ + function isBookmarkNode(node) { + return node && node.nodeType == 1 && node.getAttribute('data-mce-type') == 'bookmark'; + } + + /** + * Merges the next/previous sibling element if they match. + * + * @private + * @param {Node} prev Previous node to compare/merge. + * @param {Node} next Next node to compare/merge. + * @return {Node} Next node if we didn't merge and prev node if we did. + */ + function mergeSiblings(prev, next) { + var sibling, tmpSibling; + + /** + * Compares two nodes and checks if it's attributes and styles matches. + * This doesn't compare classes as items since their order is significant. + * + * @private + * @param {Node} node1 First node to compare with. + * @param {Node} node2 Second node to compare with. + * @return {boolean} True/false if the nodes are the same or not. + */ + function compareElements(node1, node2) { + // Not the same name + if (node1.nodeName != node2.nodeName) { + return FALSE; + } + + /** + * Returns all the nodes attributes excluding internal ones, styles and classes. + * + * @private + * @param {Node} node Node to get attributes from. + * @return {Object} Name/value object with attributes and attribute values. + */ + function getAttribs(node) { + var attribs = {}; + + each(dom.getAttribs(node), function(attr) { + var name = attr.nodeName.toLowerCase(); + + // Don't compare internal attributes or style + if (name.indexOf('_') !== 0 && name !== 'style' && name !== 'data-mce-style') { + attribs[name] = dom.getAttrib(node, name); + } + }); + + return attribs; + } + + /** + * Compares two objects checks if it's key + value exists in the other one. + * + * @private + * @param {Object} obj1 First object to compare. + * @param {Object} obj2 Second object to compare. + * @return {boolean} True/false if the objects matches or not. + */ + function compareObjects(obj1, obj2) { + var value, name; + + for (name in obj1) { + // Obj1 has item obj2 doesn't have + if (obj1.hasOwnProperty(name)) { + value = obj2[name]; + + // Obj2 doesn't have obj1 item + if (value === undef) { + return FALSE; + } + + // Obj2 item has a different value + if (obj1[name] != value) { + return FALSE; + } + + // Delete similar value + delete obj2[name]; + } + } + + // Check if obj 2 has something obj 1 doesn't have + for (name in obj2) { + // Obj2 has item obj1 doesn't have + if (obj2.hasOwnProperty(name)) { + return FALSE; + } + } + + return TRUE; + } + + // Attribs are not the same + if (!compareObjects(getAttribs(node1), getAttribs(node2))) { + return FALSE; + } + + // Styles are not the same + if (!compareObjects(dom.parseStyle(dom.getAttrib(node1, 'style')), dom.parseStyle(dom.getAttrib(node2, 'style')))) { + return FALSE; + } + + return !isBookmarkNode(node1) && !isBookmarkNode(node2); + } + + function findElementSibling(node, sibling_name) { + for (sibling = node; sibling; sibling = sibling[sibling_name]) { + if (sibling.nodeType == 3 && sibling.nodeValue.length !== 0) { + return node; + } + + if (sibling.nodeType == 1 && !isBookmarkNode(sibling)) { + return sibling; + } + } + + return node; + } + + // Check if next/prev exists and that they are elements + if (prev && next) { + // If previous sibling is empty then jump over it + prev = findElementSibling(prev, 'previousSibling'); + next = findElementSibling(next, 'nextSibling'); + + // Compare next and previous nodes + if (compareElements(prev, next)) { + // Append nodes between + for (sibling = prev.nextSibling; sibling && sibling != next;) { + tmpSibling = sibling; + sibling = sibling.nextSibling; + prev.appendChild(tmpSibling); + } + + // Remove next node + dom.remove(next); + + // Move children into prev node + each(grep(next.childNodes), function(node) { + prev.appendChild(node); + }); + + return prev; + } + } + + return next; + } + + function getContainer(rng, start) { + var container, offset, lastIdx; + + container = rng[start ? 'startContainer' : 'endContainer']; + offset = rng[start ? 'startOffset' : 'endOffset']; + + if (container.nodeType == 1) { + lastIdx = container.childNodes.length - 1; + + if (!start && offset) { + offset--; + } + + container = container.childNodes[offset > lastIdx ? lastIdx : offset]; + } + + // If start text node is excluded then walk to the next node + if (container.nodeType === 3 && start && offset >= container.nodeValue.length) { + container = new TreeWalker(container, ed.getBody()).next() || container; + } + + // If end text node is excluded then walk to the previous node + if (container.nodeType === 3 && !start && offset === 0) { + container = new TreeWalker(container, ed.getBody()).prev() || container; + } + + return container; + } + + function performCaretAction(type, name, vars) { + var caretContainerId = '_mce_caret', debug = ed.settings.caret_debug; + + // Creates a caret container bogus element + function createCaretContainer(fill) { + var caretContainer = dom.create('span', {id: caretContainerId, 'data-mce-bogus': true, style: debug ? 'color:red' : ''}); + + if (fill) { + caretContainer.appendChild(ed.getDoc().createTextNode(INVISIBLE_CHAR)); + } + + return caretContainer; + } + + function isCaretContainerEmpty(node, nodes) { + while (node) { + if ((node.nodeType === 3 && node.nodeValue !== INVISIBLE_CHAR) || node.childNodes.length > 1) { + return false; + } + + // Collect nodes + if (nodes && node.nodeType === 1) { + nodes.push(node); + } + + node = node.firstChild; + } + + return true; + } + + // Returns any parent caret container element + function getParentCaretContainer(node) { + while (node) { + if (node.id === caretContainerId) { + return node; + } + + node = node.parentNode; + } + } + + // Finds the first text node in the specified node + function findFirstTextNode(node) { + var walker; + + if (node) { + walker = new TreeWalker(node, node); + + for (node = walker.current(); node; node = walker.next()) { + if (node.nodeType === 3) { + return node; + } + } + } + } + + // Removes the caret container for the specified node or all on the current document + function removeCaretContainer(node, move_caret) { + var child, rng; + + if (!node) { + node = getParentCaretContainer(selection.getStart()); + + if (!node) { + while ((node = dom.get(caretContainerId))) { + removeCaretContainer(node, false); + } + } + } else { + rng = selection.getRng(true); + + if (isCaretContainerEmpty(node)) { + if (move_caret !== false) { + rng.setStartBefore(node); + rng.setEndBefore(node); + } + + dom.remove(node); + } else { + child = findFirstTextNode(node); + + if (child.nodeValue.charAt(0) === INVISIBLE_CHAR) { + child = child.deleteData(0, 1); + } + + dom.remove(node, 1); + } + + selection.setRng(rng); + } + } + + // Applies formatting to the caret postion + function applyCaretFormat() { + var rng, caretContainer, textNode, offset, bookmark, container, text; + + rng = selection.getRng(true); + offset = rng.startOffset; + container = rng.startContainer; + text = container.nodeValue; + + caretContainer = getParentCaretContainer(selection.getStart()); + if (caretContainer) { + textNode = findFirstTextNode(caretContainer); + } + + // Expand to word is caret is in the middle of a text node and the char before/after is a alpha numeric character + if (text && offset > 0 && offset < text.length && /\w/.test(text.charAt(offset)) && /\w/.test(text.charAt(offset - 1))) { + // Get bookmark of caret position + bookmark = selection.getBookmark(); + + // Collapse bookmark range (WebKit) + rng.collapse(true); + + // Expand the range to the closest word and split it at those points + rng = expandRng(rng, get(name)); + rng = rangeUtils.split(rng); + + // Apply the format to the range + apply(name, vars, rng); + + // Move selection back to caret position + selection.moveToBookmark(bookmark); + } else { + if (!caretContainer || textNode.nodeValue !== INVISIBLE_CHAR) { + caretContainer = createCaretContainer(true); + textNode = caretContainer.firstChild; + + rng.insertNode(caretContainer); + offset = 1; + + apply(name, vars, caretContainer); + } else { + apply(name, vars, caretContainer); + } + + // Move selection to text node + selection.setCursorLocation(textNode, offset); + } + } + + function removeCaretFormat() { + var rng = selection.getRng(true), container, offset, bookmark, + hasContentAfter, node, formatNode, parents = [], i, caretContainer; + + container = rng.startContainer; + offset = rng.startOffset; + node = container; + + if (container.nodeType == 3) { + if (offset != container.nodeValue.length || container.nodeValue === INVISIBLE_CHAR) { + hasContentAfter = true; + } + + node = node.parentNode; + } + + while (node) { + if (matchNode(node, name, vars)) { + formatNode = node; + break; + } + + if (node.nextSibling) { + hasContentAfter = true; + } + + parents.push(node); + node = node.parentNode; + } + + // Node doesn't have the specified format + if (!formatNode) { + return; + } + + // Is there contents after the caret then remove the format on the element + if (hasContentAfter) { + // Get bookmark of caret position + bookmark = selection.getBookmark(); + + // Collapse bookmark range (WebKit) + rng.collapse(true); + + // Expand the range to the closest word and split it at those points + rng = expandRng(rng, get(name), true); + rng = rangeUtils.split(rng); + + // Remove the format from the range + remove(name, vars, rng); + + // Move selection back to caret position + selection.moveToBookmark(bookmark); + } else { + caretContainer = createCaretContainer(); + + node = caretContainer; + for (i = parents.length - 1; i >= 0; i--) { + node.appendChild(dom.clone(parents[i], false)); + node = node.firstChild; + } + + // Insert invisible character into inner most format element + node.appendChild(dom.doc.createTextNode(INVISIBLE_CHAR)); + node = node.firstChild; + + var block = dom.getParent(formatNode, isTextBlock); + + if (block && dom.isEmpty(block)) { + // Replace formatNode with caretContainer when removing format from empty block like

    |

    + formatNode.parentNode.replaceChild(caretContainer, formatNode); + } else { + // Insert caret container after the formated node + dom.insertAfter(caretContainer, formatNode); + } + + // Move selection to text node + selection.setCursorLocation(node, 1); + + // If the formatNode is empty, we can remove it safely. + if (dom.isEmpty(formatNode)) { + dom.remove(formatNode); + } + } + } + + // Checks if the parent caret container node isn't empty if that is the case it + // will remove the bogus state on all children that isn't empty + function unmarkBogusCaretParents() { + var caretContainer; + + caretContainer = getParentCaretContainer(selection.getStart()); + if (caretContainer && !dom.isEmpty(caretContainer)) { + walk(caretContainer, function(node) { + if (node.nodeType == 1 && node.id !== caretContainerId && !dom.isEmpty(node)) { + dom.setAttrib(node, 'data-mce-bogus', null); + } + }, 'childNodes'); + } + } + + // Only bind the caret events once + if (!ed._hasCaretEvents) { + // Mark current caret container elements as bogus when getting the contents so we don't end up with empty elements + markCaretContainersBogus = function() { + var nodes = [], i; + + if (isCaretContainerEmpty(getParentCaretContainer(selection.getStart()), nodes)) { + // Mark children + i = nodes.length; + while (i--) { + dom.setAttrib(nodes[i], 'data-mce-bogus', '1'); + } + } + }; + + disableCaretContainer = function(e) { + var keyCode = e.keyCode; + + removeCaretContainer(); + + // Remove caret container on keydown and it's a backspace, enter or left/right arrow keys + if (keyCode == 8 || keyCode == 37 || keyCode == 39) { + removeCaretContainer(getParentCaretContainer(selection.getStart())); + } + + unmarkBogusCaretParents(); + }; + + // Remove bogus state if they got filled by contents using editor.selection.setContent + ed.on('SetContent', function(e) { + if (e.selection) { + unmarkBogusCaretParents(); + } + }); + ed._hasCaretEvents = true; + } + + // Do apply or remove caret format + if (type == "apply") { + applyCaretFormat(); + } else { + removeCaretFormat(); + } + } + + /** + * Moves the start to the first suitable text node. + */ + function moveStart(rng) { + var container = rng.startContainer, + offset = rng.startOffset, isAtEndOfText, + walker, node, nodes, tmpNode; + + // Convert text node into index if possible + if (container.nodeType == 3 && offset >= container.nodeValue.length) { + // Get the parent container location and walk from there + offset = nodeIndex(container); + container = container.parentNode; + isAtEndOfText = true; + } + + // Move startContainer/startOffset in to a suitable node + if (container.nodeType == 1) { + nodes = container.childNodes; + container = nodes[Math.min(offset, nodes.length - 1)]; + walker = new TreeWalker(container, dom.getParent(container, dom.isBlock)); + + // If offset is at end of the parent node walk to the next one + if (offset > nodes.length - 1 || isAtEndOfText) { + walker.next(); + } + + for (node = walker.current(); node; node = walker.next()) { + if (node.nodeType == 3 && !isWhiteSpaceNode(node)) { + // IE has a "neat" feature where it moves the start node into the closest element + // we can avoid this by inserting an element before it and then remove it after we set the selection + tmpNode = dom.create('a', null, INVISIBLE_CHAR); + node.parentNode.insertBefore(tmpNode, node); + + // Set selection and remove tmpNode + rng.setStart(node, 0); + selection.setRng(rng); + dom.remove(tmpNode); + + return; + } + } + } + } + }; +}); + +// Included from: js/tinymce/classes/UndoManager.js + +/** + * UndoManager.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class handles the undo/redo history levels for the editor. Since the build in undo/redo has major drawbacks a custom one was needed. + * + * @class tinymce.UndoManager + */ +define("tinymce/UndoManager", [ + "tinymce/Env", + "tinymce/util/Tools" +], function(Env, Tools) { + var trim = Tools.trim, trimContentRegExp; + + trimContentRegExp = new RegExp([ + ']+data-mce-bogus[^>]+>[\u200B\uFEFF]+<\\/span>', // Trim bogus spans like caret containers + ']+data-mce-bogus[^>]+><\\/div>', // Trim bogus divs like resize handles + '\\s?data-mce-selected="[^"]+"' // Trim temporaty data-mce prefixed attributes like data-mce-selected + ].join('|'), 'gi'); + + return function(editor) { + var self = this, index = 0, data = [], beforeBookmark, isFirstTypedCharacter, lock; + + // Returns a trimmed version of the current editor contents + function getContent() { + return trim(editor.getContent({format: 'raw', no_events: 1}).replace(trimContentRegExp, '')); + } + + function addNonTypingUndoLevel(e) { + self.typing = false; + self.add({}, e); + } + + // Add initial undo level when the editor is initialized + editor.on('init', function() { + self.add(); + }); + + // Get position before an execCommand is processed + editor.on('BeforeExecCommand', function(e) { + var cmd = e.command; + + if (cmd != 'Undo' && cmd != 'Redo' && cmd != 'mceRepaint') { + self.beforeChange(); + } + }); + + // Add undo level after an execCommand call was made + editor.on('ExecCommand', function(e) { + var cmd = e.command; + + if (cmd != 'Undo' && cmd != 'Redo' && cmd != 'mceRepaint') { + addNonTypingUndoLevel(e); + } + }); + + editor.on('ObjectResizeStart', function() { + self.beforeChange(); + }); + + editor.on('SaveContent ObjectResized blur', addNonTypingUndoLevel); + editor.dom.bind(editor.dom.getRoot(), 'dragend', addNonTypingUndoLevel); + + editor.on('KeyUp', function(e) { + var keyCode = e.keyCode; + + if ((keyCode >= 33 && keyCode <= 36) || (keyCode >= 37 && keyCode <= 40) || keyCode == 45 || keyCode == 13 || e.ctrlKey) { + addNonTypingUndoLevel(); + editor.nodeChanged(); + } + + if (keyCode == 46 || keyCode == 8 || (Env.mac && (keyCode == 91 || keyCode == 93))) { + editor.nodeChanged(); + } + + // Fire a TypingUndo event on the first character entered + if (isFirstTypedCharacter && self.typing) { + // Make the it dirty if the content was changed after typing the first character + if (!editor.isDirty()) { + editor.isNotDirty = !data[0] || getContent() == data[0].content; + + // Fire initial change event + if (!editor.isNotDirty) { + editor.fire('change', {level: data[0], lastLevel: null}); + } + } + + editor.fire('TypingUndo'); + isFirstTypedCharacter = false; + editor.nodeChanged(); + } + }); + + editor.on('KeyDown', function(e) { + var keyCode = e.keyCode; + + // Is caracter positon keys left,right,up,down,home,end,pgdown,pgup,enter + if ((keyCode >= 33 && keyCode <= 36) || (keyCode >= 37 && keyCode <= 40) || keyCode == 45) { + if (self.typing) { + addNonTypingUndoLevel(e); + } + + return; + } + + // If key isn't shift,ctrl,alt,capslock,metakey + if ((keyCode < 16 || keyCode > 20) && keyCode != 224 && keyCode != 91 && !self.typing) { + self.beforeChange(); + self.typing = true; + self.add({}, e); + isFirstTypedCharacter = true; + } + }); + + editor.on('MouseDown', function(e) { + if (self.typing) { + addNonTypingUndoLevel(e); + } + }); + + // Add keyboard shortcuts for undo/redo keys + editor.addShortcut('ctrl+z', '', 'Undo'); + editor.addShortcut('ctrl+y,ctrl+shift+z', '', 'Redo'); + + editor.on('AddUndo Undo Redo ClearUndos MouseUp', function(e) { + if (!e.isDefaultPrevented()) { + editor.nodeChanged(); + } + }); + + self = { + // Explose for debugging reasons + data: data, + + /** + * State if the user is currently typing or not. This will add a typing operation into one undo + * level instead of one new level for each keystroke. + * + * @field {Boolean} typing + */ + typing: false, + + /** + * Stores away a bookmark to be used when performing an undo action so that the selection is before + * the change has been made. + * + * @method beforeChange + */ + beforeChange: function() { + if (!lock) { + beforeBookmark = editor.selection.getBookmark(2, true); + } + }, + + /** + * Adds a new undo level/snapshot to the undo list. + * + * @method add + * @param {Object} level Optional undo level object to add. + * @param {DOMEvent} Event Optional event responsible for the creation of the undo level. + * @return {Object} Undo level that got added or null it a level wasn't needed. + */ + add: function(level, event) { + var i, settings = editor.settings, lastLevel; + + level = level || {}; + level.content = getContent(); + + if (lock || editor.removed) { + return null; + } + + if (editor.fire('BeforeAddUndo', {level: level, originalEvent: event}).isDefaultPrevented()) { + return null; + } + + // Add undo level if needed + lastLevel = data[index]; + if (lastLevel && lastLevel.content == level.content) { + return null; + } + + // Set before bookmark on previous level + if (data[index]) { + data[index].beforeBookmark = beforeBookmark; + } + + // Time to compress + if (settings.custom_undo_redo_levels) { + if (data.length > settings.custom_undo_redo_levels) { + for (i = 0; i < data.length - 1; i++) { + data[i] = data[i + 1]; + } + + data.length--; + index = data.length; + } + } + + // Get a non intrusive normalized bookmark + level.bookmark = editor.selection.getBookmark(2, true); + + // Crop array if needed + if (index < data.length - 1) { + data.length = index + 1; + } + + data.push(level); + index = data.length - 1; + + var args = {level: level, lastLevel: lastLevel, originalEvent: event}; + + editor.fire('AddUndo', args); + + if (index > 0) { + editor.isNotDirty = false; + editor.fire('change', args); + } + + return level; + }, + + /** + * Undoes the last action. + * + * @method undo + * @return {Object} Undo level or null if no undo was performed. + */ + undo: function() { + var level; + + if (self.typing) { + self.add(); + self.typing = false; + } + + if (index > 0) { + level = data[--index]; + + // Undo to first index then set dirty state to false + if (index === 0) { + editor.isNotDirty = true; + } + + editor.setContent(level.content, {format: 'raw'}); + editor.selection.moveToBookmark(level.beforeBookmark); + + editor.fire('undo', {level: level}); + } + + return level; + }, + + /** + * Redoes the last action. + * + * @method redo + * @return {Object} Redo level or null if no redo was performed. + */ + redo: function() { + var level; + + if (index < data.length - 1) { + level = data[++index]; + + editor.setContent(level.content, {format: 'raw'}); + editor.selection.moveToBookmark(level.bookmark); + + editor.fire('redo', {level: level}); + } + + return level; + }, + + /** + * Removes all undo levels. + * + * @method clear + */ + clear: function() { + data = []; + index = 0; + self.typing = false; + editor.fire('ClearUndos'); + }, + + /** + * Returns true/false if the undo manager has any undo levels. + * + * @method hasUndo + * @return {Boolean} true/false if the undo manager has any undo levels. + */ + hasUndo: function() { + // Has undo levels or typing and content isn't the same as the initial level + return index > 0 || (self.typing && data[0] && getContent() != data[0].content); + }, + + /** + * Returns true/false if the undo manager has any redo levels. + * + * @method hasRedo + * @return {Boolean} true/false if the undo manager has any redo levels. + */ + hasRedo: function() { + return index < data.length - 1 && !this.typing; + }, + + /** + * Executes the specified function in an undo transation. The selection + * before the modification will be stored to the undo stack and if the DOM changes + * it will add a new undo level. Any methods within the transation that adds undo levels will + * be ignored. So a transation can include calls to execCommand or editor.insertContent. + * + * @method transact + * @param {function} callback Function to execute dom manipulation logic in. + */ + transact: function(callback) { + self.beforeChange(); + + lock = true; + callback(); + lock = false; + + self.add(); + } + }; + + return self; + }; +}); + +// Included from: js/tinymce/classes/EnterKey.js + +/** + * EnterKey.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Contains logic for handling the enter key to split/generate block elements. + */ +define("tinymce/EnterKey", [ + "tinymce/dom/TreeWalker", + "tinymce/dom/RangeUtils", + "tinymce/Env" +], function(TreeWalker, RangeUtils, Env) { + var isIE = Env.ie && Env.ie < 11; + + return function(editor) { + var dom = editor.dom, selection = editor.selection, settings = editor.settings; + var undoManager = editor.undoManager, schema = editor.schema, nonEmptyElementsMap = schema.getNonEmptyElements(); + + function handleEnterKey(evt) { + var rng, tmpRng, editableRoot, container, offset, parentBlock, documentMode, shiftKey, + newBlock, fragment, containerBlock, parentBlockName, containerBlockName, newBlockName, isAfterLastNodeInContainer; + + // Returns true if the block can be split into two blocks or not + function canSplitBlock(node) { + return node && + dom.isBlock(node) && + !/^(TD|TH|CAPTION|FORM)$/.test(node.nodeName) && + !/^(fixed|absolute)/i.test(node.style.position) && + dom.getContentEditable(node) !== "true"; + } + + // Renders empty block on IE + function renderBlockOnIE(block) { + var oldRng; + + if (dom.isBlock(block)) { + oldRng = selection.getRng(); + block.appendChild(dom.create('span', null, '\u00a0')); + selection.select(block); + block.lastChild.outerHTML = ''; + selection.setRng(oldRng); + } + } + + // Remove the first empty inline element of the block so this:

    x

    becomes this:

    x

    + function trimInlineElementsOnLeftSideOfBlock(block) { + var node = block, firstChilds = [], i; + + // Find inner most first child ex:

    *

    + while ((node = node.firstChild)) { + if (dom.isBlock(node)) { + return; + } + + if (node.nodeType == 1 && !nonEmptyElementsMap[node.nodeName.toLowerCase()]) { + firstChilds.push(node); + } + } + + i = firstChilds.length; + while (i--) { + node = firstChilds[i]; + if (!node.hasChildNodes() || (node.firstChild == node.lastChild && node.firstChild.nodeValue === '')) { + dom.remove(node); + } else { + // Remove see #5381 + if (node.nodeName == "A" && (node.innerText || node.textContent) === ' ') { + dom.remove(node); + } + } + } + } + + // Moves the caret to a suitable position within the root for example in the first non + // pure whitespace text node or before an image + function moveToCaretPosition(root) { + var walker, node, rng, lastNode = root, tempElm; + + function firstNonWhiteSpaceNodeSibling(node) { + while (node) { + if (node.nodeType == 1 || (node.nodeType == 3 && node.data && /[\r\n\s]/.test(node.data))) { + return node; + } + + node = node.nextSibling; + } + } + + // Old IE versions doesn't properly render blocks with br elements in them + // For example


    wont be rendered correctly in a contentEditable area + // until you remove the br producing

    + if (Env.ie && Env.ie < 9 && parentBlock && parentBlock.firstChild) { + if (parentBlock.firstChild == parentBlock.lastChild && parentBlock.firstChild.tagName == 'BR') { + dom.remove(parentBlock.firstChild); + } + } + + if (root.nodeName == 'LI') { + var firstChild = firstNonWhiteSpaceNodeSibling(root.firstChild); + + if (firstChild && /^(UL|OL)$/.test(firstChild.nodeName)) { + root.insertBefore(dom.doc.createTextNode('\u00a0'), root.firstChild); + } + } + + rng = dom.createRng(); + + if (root.hasChildNodes()) { + walker = new TreeWalker(root, root); + + while ((node = walker.current())) { + if (node.nodeType == 3) { + rng.setStart(node, 0); + rng.setEnd(node, 0); + break; + } + + if (nonEmptyElementsMap[node.nodeName.toLowerCase()]) { + rng.setStartBefore(node); + rng.setEndBefore(node); + break; + } + + lastNode = node; + node = walker.next(); + } + + if (!node) { + rng.setStart(lastNode, 0); + rng.setEnd(lastNode, 0); + } + } else { + if (root.nodeName == 'BR') { + if (root.nextSibling && dom.isBlock(root.nextSibling)) { + // Trick on older IE versions to render the caret before the BR between two lists + if (!documentMode || documentMode < 9) { + tempElm = dom.create('br'); + root.parentNode.insertBefore(tempElm, root); + } + + rng.setStartBefore(root); + rng.setEndBefore(root); + } else { + rng.setStartAfter(root); + rng.setEndAfter(root); + } + } else { + rng.setStart(root, 0); + rng.setEnd(root, 0); + } + } + + selection.setRng(rng); + + // Remove tempElm created for old IE:s + dom.remove(tempElm); + selection.scrollIntoView(root); + } + + function setForcedBlockAttrs(node) { + var forcedRootBlockName = settings.forced_root_block; + + if (forcedRootBlockName && forcedRootBlockName.toLowerCase() === node.tagName.toLowerCase()) { + dom.setAttribs(node, settings.forced_root_block_attrs); + } + } + + // Creates a new block element by cloning the current one or creating a new one if the name is specified + // This function will also copy any text formatting from the parent block and add it to the new one + function createNewBlock(name) { + var node = container, block, clonedNode, caretNode; + + if (name || parentBlockName == "TABLE") { + block = dom.create(name || newBlockName); + setForcedBlockAttrs(block); + } else { + block = parentBlock.cloneNode(false); + } + + caretNode = block; + + // Clone any parent styles + if (settings.keep_styles !== false) { + do { + if (/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U|VAR|CITE|DFN|CODE|MARK|Q|SUP|SUB|SAMP)$/.test(node.nodeName)) { + // Never clone a caret containers + if (node.id == '_mce_caret') { + continue; + } + + clonedNode = node.cloneNode(false); + dom.setAttrib(clonedNode, 'id', ''); // Remove ID since it needs to be document unique + + if (block.hasChildNodes()) { + clonedNode.appendChild(block.firstChild); + block.appendChild(clonedNode); + } else { + caretNode = clonedNode; + block.appendChild(clonedNode); + } + } + } while ((node = node.parentNode)); + } + + // BR is needed in empty blocks on non IE browsers + if (!isIE) { + caretNode.innerHTML = '
    '; + } + + return block; + } + + // Returns true/false if the caret is at the start/end of the parent block element + function isCaretAtStartOrEndOfBlock(start) { + var walker, node, name; + + // Caret is in the middle of a text node like "a|b" + if (container.nodeType == 3 && (start ? offset > 0 : offset < container.nodeValue.length)) { + return false; + } + + // If after the last element in block node edge case for #5091 + if (container.parentNode == parentBlock && isAfterLastNodeInContainer && !start) { + return true; + } + + // If the caret if before the first element in parentBlock + if (start && container.nodeType == 1 && container == parentBlock.firstChild) { + return true; + } + + // Caret can be before/after a table + if (container.nodeName === "TABLE" || (container.previousSibling && container.previousSibling.nodeName == "TABLE")) { + return (isAfterLastNodeInContainer && !start) || (!isAfterLastNodeInContainer && start); + } + + // Walk the DOM and look for text nodes or non empty elements + walker = new TreeWalker(container, parentBlock); + + // If caret is in beginning or end of a text block then jump to the next/previous node + if (container.nodeType == 3) { + if (start && offset === 0) { + walker.prev(); + } else if (!start && offset == container.nodeValue.length) { + walker.next(); + } + } + + while ((node = walker.current())) { + if (node.nodeType === 1) { + // Ignore bogus elements + if (!node.getAttribute('data-mce-bogus')) { + // Keep empty elements like but not trailing br:s like

    text|

    + name = node.nodeName.toLowerCase(); + if (nonEmptyElementsMap[name] && name !== 'br') { + return false; + } + } + } else if (node.nodeType === 3 && !/^[ \t\r\n]*$/.test(node.nodeValue)) { + return false; + } + + if (start) { + walker.prev(); + } else { + walker.next(); + } + } + + return true; + } + + // Wraps any text nodes or inline elements in the specified forced root block name + function wrapSelfAndSiblingsInDefaultBlock(container, offset) { + var newBlock, parentBlock, startNode, node, next, rootBlockName, blockName = newBlockName || 'P'; + + // Not in a block element or in a table cell or caption + parentBlock = dom.getParent(container, dom.isBlock); + rootBlockName = editor.getBody().nodeName.toLowerCase(); + if (!parentBlock || !canSplitBlock(parentBlock)) { + parentBlock = parentBlock || editableRoot; + + if (!parentBlock.hasChildNodes()) { + newBlock = dom.create(blockName); + setForcedBlockAttrs(newBlock); + parentBlock.appendChild(newBlock); + rng.setStart(newBlock, 0); + rng.setEnd(newBlock, 0); + return newBlock; + } + + // Find parent that is the first child of parentBlock + node = container; + while (node.parentNode != parentBlock) { + node = node.parentNode; + } + + // Loop left to find start node start wrapping at + while (node && !dom.isBlock(node)) { + startNode = node; + node = node.previousSibling; + } + + if (startNode && schema.isValidChild(rootBlockName, blockName.toLowerCase())) { + newBlock = dom.create(blockName); + setForcedBlockAttrs(newBlock); + startNode.parentNode.insertBefore(newBlock, startNode); + + // Start wrapping until we hit a block + node = startNode; + while (node && !dom.isBlock(node)) { + next = node.nextSibling; + newBlock.appendChild(node); + node = next; + } + + // Restore range to it's past location + rng.setStart(container, offset); + rng.setEnd(container, offset); + } + } + + return container; + } + + // Inserts a block or br before/after or in the middle of a split list of the LI is empty + function handleEmptyListItem() { + function isFirstOrLastLi(first) { + var node = containerBlock[first ? 'firstChild' : 'lastChild']; + + // Find first/last element since there might be whitespace there + while (node) { + if (node.nodeType == 1) { + break; + } + + node = node[first ? 'nextSibling' : 'previousSibling']; + } + + return node === parentBlock; + } + + function getContainerBlock() { + var containerBlockParent = containerBlock.parentNode; + + if (containerBlockParent.nodeName == 'LI') { + return containerBlockParent; + } + + return containerBlock; + } + + // Check if we are in an nested list + var containerBlockParentName = containerBlock.parentNode.nodeName; + if (/^(OL|UL|LI)$/.test(containerBlockParentName)) { + newBlockName = 'LI'; + } + + newBlock = newBlockName ? createNewBlock(newBlockName) : dom.create('BR'); + + if (isFirstOrLastLi(true) && isFirstOrLastLi()) { + if (containerBlockParentName == 'LI') { + // Nested list is inside a LI + dom.insertAfter(newBlock, getContainerBlock()); + } else { + // Is first and last list item then replace the OL/UL with a text block + dom.replace(newBlock, containerBlock); + } + } else if (isFirstOrLastLi(true)) { + if (containerBlockParentName == 'LI') { + // List nested in an LI then move the list to a new sibling LI + dom.insertAfter(newBlock, getContainerBlock()); + newBlock.appendChild(dom.doc.createTextNode(' ')); // Needed for IE so the caret can be placed + newBlock.appendChild(containerBlock); + } else { + // First LI in list then remove LI and add text block before list + containerBlock.parentNode.insertBefore(newBlock, containerBlock); + } + } else if (isFirstOrLastLi()) { + // Last LI in list then remove LI and add text block after list + dom.insertAfter(newBlock, getContainerBlock()); + renderBlockOnIE(newBlock); + } else { + // Middle LI in list the split the list and insert a text block in the middle + // Extract after fragment and insert it after the current block + containerBlock = getContainerBlock(); + tmpRng = rng.cloneRange(); + tmpRng.setStartAfter(parentBlock); + tmpRng.setEndAfter(containerBlock); + fragment = tmpRng.extractContents(); + + if (newBlockName == 'LI' && fragment.firstChild.nodeName == 'LI') { + newBlock = fragment.firstChild; + dom.insertAfter(fragment, containerBlock); + } else { + dom.insertAfter(fragment, containerBlock); + dom.insertAfter(newBlock, containerBlock); + } + } + + dom.remove(parentBlock); + moveToCaretPosition(newBlock); + undoManager.add(); + } + + // Walks the parent block to the right and look for BR elements + function hasRightSideContent() { + var walker = new TreeWalker(container, parentBlock), node; + + while ((node = walker.next())) { + if (nonEmptyElementsMap[node.nodeName.toLowerCase()] || node.length > 0) { + return true; + } + } + } + + // Inserts a BR element if the forced_root_block option is set to false or empty string + function insertBr() { + var brElm, extraBr, marker; + + if (container && container.nodeType == 3 && offset >= container.nodeValue.length) { + // Insert extra BR element at the end block elements + if (!isIE && !hasRightSideContent()) { + brElm = dom.create('br'); + rng.insertNode(brElm); + rng.setStartAfter(brElm); + rng.setEndAfter(brElm); + extraBr = true; + } + } + + brElm = dom.create('br'); + rng.insertNode(brElm); + + // Rendering modes below IE8 doesn't display BR elements in PRE unless we have a \n before it + if (isIE && parentBlockName == 'PRE' && (!documentMode || documentMode < 8)) { + brElm.parentNode.insertBefore(dom.doc.createTextNode('\r'), brElm); + } + + // Insert temp marker and scroll to that + marker = dom.create('span', {}, ' '); + brElm.parentNode.insertBefore(marker, brElm); + selection.scrollIntoView(marker); + dom.remove(marker); + + if (!extraBr) { + rng.setStartAfter(brElm); + rng.setEndAfter(brElm); + } else { + rng.setStartBefore(brElm); + rng.setEndBefore(brElm); + } + + selection.setRng(rng); + undoManager.add(); + } + + // Trims any linebreaks at the beginning of node user for example when pressing enter in a PRE element + function trimLeadingLineBreaks(node) { + do { + if (node.nodeType === 3) { + node.nodeValue = node.nodeValue.replace(/^[\r\n]+/, ''); + } + + node = node.firstChild; + } while (node); + } + + function getEditableRoot(node) { + var root = dom.getRoot(), parent, editableRoot; + + // Get all parents until we hit a non editable parent or the root + parent = node; + while (parent !== root && dom.getContentEditable(parent) !== "false") { + if (dom.getContentEditable(parent) === "true") { + editableRoot = parent; + } + + parent = parent.parentNode; + } + + return parent !== root ? editableRoot : root; + } + + // Adds a BR at the end of blocks that only contains an IMG or INPUT since + // these might be floated and then they won't expand the block + function addBrToBlockIfNeeded(block) { + var lastChild; + + // IE will render the blocks correctly other browsers needs a BR + if (!isIE) { + block.normalize(); // Remove empty text nodes that got left behind by the extract + + // Check if the block is empty or contains a floated last child + lastChild = block.lastChild; + if (!lastChild || (/^(left|right)$/gi.test(dom.getStyle(lastChild, 'float', true)))) { + dom.add(block, 'br'); + } + } + } + + rng = selection.getRng(true); + + // Event is blocked by some other handler for example the lists plugin + if (evt.isDefaultPrevented()) { + return; + } + + // Delete any selected contents + if (!rng.collapsed) { + editor.execCommand('Delete'); + return; + } + + // Setup range items and newBlockName + new RangeUtils(dom).normalize(rng); + container = rng.startContainer; + offset = rng.startOffset; + newBlockName = (settings.force_p_newlines ? 'p' : '') || settings.forced_root_block; + newBlockName = newBlockName ? newBlockName.toUpperCase() : ''; + documentMode = dom.doc.documentMode; + shiftKey = evt.shiftKey; + + // Resolve node index + if (container.nodeType == 1 && container.hasChildNodes()) { + isAfterLastNodeInContainer = offset > container.childNodes.length - 1; + + container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container; + if (isAfterLastNodeInContainer && container.nodeType == 3) { + offset = container.nodeValue.length; + } else { + offset = 0; + } + } + + // Get editable root node normaly the body element but sometimes a div or span + editableRoot = getEditableRoot(container); + + // If there is no editable root then enter is done inside a contentEditable false element + if (!editableRoot) { + return; + } + + undoManager.beforeChange(); + + // If editable root isn't block nor the root of the editor + if (!dom.isBlock(editableRoot) && editableRoot != dom.getRoot()) { + if (!newBlockName || shiftKey) { + insertBr(); + } + + return; + } + + // Wrap the current node and it's sibling in a default block if it's needed. + // for example this text|text2 will become this

    text|text2

    + // This won't happen if root blocks are disabled or the shiftKey is pressed + if ((newBlockName && !shiftKey) || (!newBlockName && shiftKey)) { + container = wrapSelfAndSiblingsInDefaultBlock(container, offset); + } + + // Find parent block and setup empty block paddings + parentBlock = dom.getParent(container, dom.isBlock); + containerBlock = parentBlock ? dom.getParent(parentBlock.parentNode, dom.isBlock) : null; + + // Setup block names + parentBlockName = parentBlock ? parentBlock.nodeName.toUpperCase() : ''; // IE < 9 & HTML5 + containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : ''; // IE < 9 & HTML5 + + // Enter inside block contained within a LI then split or insert before/after LI + if (containerBlockName == 'LI' && !evt.ctrlKey) { + parentBlock = containerBlock; + parentBlockName = containerBlockName; + } + + // Handle enter in LI + if (parentBlockName == 'LI') { + if (!newBlockName && shiftKey) { + insertBr(); + return; + } + + // Handle enter inside an empty list item + if (dom.isEmpty(parentBlock)) { + handleEmptyListItem(); + return; + } + } + + // Don't split PRE tags but insert a BR instead easier when writing code samples etc + if (parentBlockName == 'PRE' && settings.br_in_pre !== false) { + if (!shiftKey) { + insertBr(); + return; + } + } else { + // If no root block is configured then insert a BR by default or if the shiftKey is pressed + if ((!newBlockName && !shiftKey && parentBlockName != 'LI') || (newBlockName && shiftKey)) { + insertBr(); + return; + } + } + + // If parent block is root then never insert new blocks + if (newBlockName && parentBlock === editor.getBody()) { + return; + } + + // Default block name if it's not configured + newBlockName = newBlockName || 'P'; + + // Insert new block before/after the parent block depending on caret location + if (isCaretAtStartOrEndOfBlock()) { + // If the caret is at the end of a header we produce a P tag after it similar to Word unless we are in a hgroup + if (/^(H[1-6]|PRE|FIGURE)$/.test(parentBlockName) && containerBlockName != 'HGROUP') { + newBlock = createNewBlock(newBlockName); + } else { + newBlock = createNewBlock(); + } + + // Split the current container block element if enter is pressed inside an empty inner block element + if (settings.end_container_on_empty_block && canSplitBlock(containerBlock) && dom.isEmpty(parentBlock)) { + // Split container block for example a BLOCKQUOTE at the current blockParent location for example a P + newBlock = dom.split(containerBlock, parentBlock); + } else { + dom.insertAfter(newBlock, parentBlock); + } + + moveToCaretPosition(newBlock); + } else if (isCaretAtStartOrEndOfBlock(true)) { + // Insert new block before + newBlock = parentBlock.parentNode.insertBefore(createNewBlock(), parentBlock); + renderBlockOnIE(newBlock); + moveToCaretPosition(parentBlock); + } else { + // Extract after fragment and insert it after the current block + tmpRng = rng.cloneRange(); + tmpRng.setEndAfter(parentBlock); + fragment = tmpRng.extractContents(); + trimLeadingLineBreaks(fragment); + newBlock = fragment.firstChild; + dom.insertAfter(fragment, parentBlock); + trimInlineElementsOnLeftSideOfBlock(newBlock); + addBrToBlockIfNeeded(parentBlock); + moveToCaretPosition(newBlock); + } + + dom.setAttrib(newBlock, 'id', ''); // Remove ID since it needs to be document unique + + // Allow custom handling of new blocks + editor.fire('NewBlock', { newBlock: newBlock }); + + undoManager.add(); + } + + editor.on('keydown', function(evt) { + if (evt.keyCode == 13) { + if (handleEnterKey(evt) !== false) { + evt.preventDefault(); + } + } + }); + }; +}); + +// Included from: js/tinymce/classes/ForceBlocks.js + +/** + * ForceBlocks.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +define("tinymce/ForceBlocks", [], function() { + return function(editor) { + var settings = editor.settings, dom = editor.dom, selection = editor.selection; + var schema = editor.schema, blockElements = schema.getBlockElements(); + + function addRootBlocks() { + var node = selection.getStart(), rootNode = editor.getBody(), rng; + var startContainer, startOffset, endContainer, endOffset, rootBlockNode; + var tempNode, offset = -0xFFFFFF, wrapped, restoreSelection; + var tmpRng, rootNodeName, forcedRootBlock; + + forcedRootBlock = settings.forced_root_block; + + if (!node || node.nodeType !== 1 || !forcedRootBlock) { + return; + } + + // Check if node is wrapped in block + while (node && node != rootNode) { + if (blockElements[node.nodeName]) { + return; + } + + node = node.parentNode; + } + + // Get current selection + rng = selection.getRng(); + if (rng.setStart) { + startContainer = rng.startContainer; + startOffset = rng.startOffset; + endContainer = rng.endContainer; + endOffset = rng.endOffset; + + try { + restoreSelection = editor.getDoc().activeElement === rootNode; + } catch (ex) { + // IE throws unspecified error here sometimes + } + } else { + // Force control range into text range + if (rng.item) { + node = rng.item(0); + rng = editor.getDoc().body.createTextRange(); + rng.moveToElementText(node); + } + + restoreSelection = rng.parentElement().ownerDocument === editor.getDoc(); + tmpRng = rng.duplicate(); + tmpRng.collapse(true); + startOffset = tmpRng.move('character', offset) * -1; + + if (!tmpRng.collapsed) { + tmpRng = rng.duplicate(); + tmpRng.collapse(false); + endOffset = (tmpRng.move('character', offset) * -1) - startOffset; + } + } + + // Wrap non block elements and text nodes + node = rootNode.firstChild; + rootNodeName = rootNode.nodeName.toLowerCase(); + while (node) { + // TODO: Break this up, too complex + if (((node.nodeType === 3 || (node.nodeType == 1 && !blockElements[node.nodeName]))) && + schema.isValidChild(rootNodeName, forcedRootBlock.toLowerCase())) { + // Remove empty text nodes + if (node.nodeType === 3 && node.nodeValue.length === 0) { + tempNode = node; + node = node.nextSibling; + dom.remove(tempNode); + continue; + } + + if (!rootBlockNode) { + rootBlockNode = dom.create(forcedRootBlock, editor.settings.forced_root_block_attrs); + node.parentNode.insertBefore(rootBlockNode, node); + wrapped = true; + } + + tempNode = node; + node = node.nextSibling; + rootBlockNode.appendChild(tempNode); + } else { + rootBlockNode = null; + node = node.nextSibling; + } + } + + if (wrapped && restoreSelection) { + if (rng.setStart) { + rng.setStart(startContainer, startOffset); + rng.setEnd(endContainer, endOffset); + selection.setRng(rng); + } else { + // Only select if the previous selection was inside the document to prevent auto focus in quirks mode + try { + rng = editor.getDoc().body.createTextRange(); + rng.moveToElementText(rootNode); + rng.collapse(true); + rng.moveStart('character', startOffset); + + if (endOffset > 0) { + rng.moveEnd('character', endOffset); + } + + rng.select(); + } catch (ex) { + // Ignore + } + } + + editor.nodeChanged(); + } + } + + // Force root blocks + if (settings.forced_root_block) { + editor.on('NodeChange', addRootBlocks); + } + }; +}); + +// Included from: js/tinymce/classes/EditorCommands.js + +/** + * EditorCommands.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class enables you to add custom editor commands and it contains + * overrides for native browser commands to address various bugs and issues. + * + * @class tinymce.EditorCommands + */ +define("tinymce/EditorCommands", [ + "tinymce/html/Serializer", + "tinymce/Env", + "tinymce/util/Tools" +], function(Serializer, Env, Tools) { + // Added for compression purposes + var each = Tools.each, extend = Tools.extend; + var map = Tools.map, inArray = Tools.inArray, explode = Tools.explode; + var isGecko = Env.gecko, isIE = Env.ie; + var TRUE = true, FALSE = false; + + return function(editor) { + var dom = editor.dom, + selection = editor.selection, + commands = {state: {}, exec: {}, value: {}}, + settings = editor.settings, + formatter = editor.formatter, + bookmark; + + /** + * Executes the specified command. + * + * @method execCommand + * @param {String} command Command to execute. + * @param {Boolean} ui Optional user interface state. + * @param {Object} value Optional value for command. + * @return {Boolean} true/false if the command was found or not. + */ + function execCommand(command, ui, value) { + var func; + + command = command.toLowerCase(); + if ((func = commands.exec[command])) { + func(command, ui, value); + return TRUE; + } + + return FALSE; + } + + /** + * Queries the current state for a command for example if the current selection is "bold". + * + * @method queryCommandState + * @param {String} command Command to check the state of. + * @return {Boolean/Number} true/false if the selected contents is bold or not, -1 if it's not found. + */ + function queryCommandState(command) { + var func; + + command = command.toLowerCase(); + if ((func = commands.state[command])) { + return func(command); + } + + return -1; + } + + /** + * Queries the command value for example the current fontsize. + * + * @method queryCommandValue + * @param {String} command Command to check the value of. + * @return {Object} Command value of false if it's not found. + */ + function queryCommandValue(command) { + var func; + + command = command.toLowerCase(); + if ((func = commands.value[command])) { + return func(command); + } + + return FALSE; + } + + /** + * Adds commands to the command collection. + * + * @method addCommands + * @param {Object} command_list Name/value collection with commands to add, the names can also be comma separated. + * @param {String} type Optional type to add, defaults to exec. Can be value or state as well. + */ + function addCommands(command_list, type) { + type = type || 'exec'; + + each(command_list, function(callback, command) { + each(command.toLowerCase().split(','), function(command) { + commands[type][command] = callback; + }); + }); + } + + // Expose public methods + extend(this, { + execCommand: execCommand, + queryCommandState: queryCommandState, + queryCommandValue: queryCommandValue, + addCommands: addCommands + }); + + // Private methods + + function execNativeCommand(command, ui, value) { + if (ui === undefined) { + ui = FALSE; + } + + if (value === undefined) { + value = null; + } + + return editor.getDoc().execCommand(command, ui, value); + } + + function isFormatMatch(name) { + return formatter.match(name); + } + + function toggleFormat(name, value) { + formatter.toggle(name, value ? {value: value} : undefined); + editor.nodeChanged(); + } + + function storeSelection(type) { + bookmark = selection.getBookmark(type); + } + + function restoreSelection() { + selection.moveToBookmark(bookmark); + } + + // Add execCommand overrides + addCommands({ + // Ignore these, added for compatibility + 'mceResetDesignMode,mceBeginUndoLevel': function() {}, + + // Add undo manager logic + 'mceEndUndoLevel,mceAddUndoLevel': function() { + editor.undoManager.add(); + }, + + 'Cut,Copy,Paste': function(command) { + var doc = editor.getDoc(), failed; + + // Try executing the native command + try { + execNativeCommand(command); + } catch (ex) { + // Command failed + failed = TRUE; + } + + // Present alert message about clipboard access not being available + if (failed || !doc.queryCommandSupported(command)) { + var msg = editor.translate( + "Your browser doesn't support direct access to the clipboard. " + + "Please use the Ctrl+X/C/V keyboard shortcuts instead." + ); + + if (Env.mac) { + msg = msg.replace(/Ctrl\+/g, '\u2318+'); + } + + editor.windowManager.alert(msg); + } + }, + + // Override unlink command + unlink: function() { + if (selection.isCollapsed()) { + var elm = selection.getNode(); + if (elm.tagName == 'A') { + editor.dom.remove(elm, true); + } + + return; + } + + formatter.remove("link"); + }, + + // Override justify commands to use the text formatter engine + 'JustifyLeft,JustifyCenter,JustifyRight,JustifyFull': function(command) { + var align = command.substring(7); + + if (align == 'full') { + align = 'justify'; + } + + // Remove all other alignments first + each('left,center,right,justify'.split(','), function(name) { + if (align != name) { + formatter.remove('align' + name); + } + }); + + toggleFormat('align' + align); + execCommand('mceRepaint'); + }, + + // Override list commands to fix WebKit bug + 'InsertUnorderedList,InsertOrderedList': function(command) { + var listElm, listParent; + + execNativeCommand(command); + + // WebKit produces lists within block elements so we need to split them + // we will replace the native list creation logic to custom logic later on + // TODO: Remove this when the list creation logic is removed + listElm = dom.getParent(selection.getNode(), 'ol,ul'); + if (listElm) { + listParent = listElm.parentNode; + + // If list is within a text block then split that block + if (/^(H[1-6]|P|ADDRESS|PRE)$/.test(listParent.nodeName)) { + storeSelection(); + dom.split(listParent, listElm); + restoreSelection(); + } + } + }, + + // Override commands to use the text formatter engine + 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': function(command) { + toggleFormat(command); + }, + + // Override commands to use the text formatter engine + 'ForeColor,HiliteColor,FontName': function(command, ui, value) { + toggleFormat(command, value); + }, + + FontSize: function(command, ui, value) { + var fontClasses, fontSizes; + + // Convert font size 1-7 to styles + if (value >= 1 && value <= 7) { + fontSizes = explode(settings.font_size_style_values); + fontClasses = explode(settings.font_size_classes); + + if (fontClasses) { + value = fontClasses[value - 1] || value; + } else { + value = fontSizes[value - 1] || value; + } + } + + toggleFormat(command, value); + }, + + RemoveFormat: function(command) { + formatter.remove(command); + }, + + mceBlockQuote: function() { + toggleFormat('blockquote'); + }, + + FormatBlock: function(command, ui, value) { + return toggleFormat(value || 'p'); + }, + + mceCleanup: function() { + var bookmark = selection.getBookmark(); + + editor.setContent(editor.getContent({cleanup: TRUE}), {cleanup: TRUE}); + + selection.moveToBookmark(bookmark); + }, + + mceRemoveNode: function(command, ui, value) { + var node = value || selection.getNode(); + + // Make sure that the body node isn't removed + if (node != editor.getBody()) { + storeSelection(); + editor.dom.remove(node, TRUE); + restoreSelection(); + } + }, + + mceSelectNodeDepth: function(command, ui, value) { + var counter = 0; + + dom.getParent(selection.getNode(), function(node) { + if (node.nodeType == 1 && counter++ == value) { + selection.select(node); + return FALSE; + } + }, editor.getBody()); + }, + + mceSelectNode: function(command, ui, value) { + selection.select(value); + }, + + mceInsertContent: function(command, ui, value) { + var parser, serializer, parentNode, rootNode, fragment, args; + var marker, rng, node, node2, bookmarkHtml; + + function trimOrPaddLeftRight(html) { + var rng, container, offset; + + rng = selection.getRng(true); + container = rng.startContainer; + offset = rng.startOffset; + + function hasSiblingText(siblingName) { + return container[siblingName] && container[siblingName].nodeType == 3; + } + + if (container.nodeType == 3) { + if (offset > 0) { + html = html.replace(/^ /, ' '); + } else if (!hasSiblingText('previousSibling')) { + html = html.replace(/^ /, ' '); + } + + if (offset < container.length) { + html = html.replace(/ (
    |)$/, ' '); + } else if (!hasSiblingText('nextSibling')) { + html = html.replace(/( | )(
    |)$/, ' '); + } + } + + return html; + } + + // Check for whitespace before/after value + if (/^ | $/.test(value)) { + value = trimOrPaddLeftRight(value); + } + + // Setup parser and serializer + parser = editor.parser; + serializer = new Serializer({}, editor.schema); + bookmarkHtml = 'ÈB;'; + + // Run beforeSetContent handlers on the HTML to be inserted + args = {content: value, format: 'html', selection: true}; + editor.fire('BeforeSetContent', args); + value = args.content; + + // Add caret at end of contents if it's missing + if (value.indexOf('{$caret}') == -1) { + value += '{$caret}'; + } + + // Replace the caret marker with a span bookmark element + value = value.replace(/\{\$caret\}/, bookmarkHtml); + + // If selection is at |

    then move it into

    |

    + rng = selection.getRng(); + var caretElement = rng.startContainer || (rng.parentElement ? rng.parentElement() : null); + var body = editor.getBody(); + if (caretElement === body && selection.isCollapsed()) { + if (dom.isBlock(body.firstChild) && dom.isEmpty(body.firstChild)) { + rng = dom.createRng(); + rng.setStart(body.firstChild, 0); + rng.setEnd(body.firstChild, 0); + selection.setRng(rng); + } + } + + // Insert node maker where we will insert the new HTML and get it's parent + if (!selection.isCollapsed()) { + editor.getDoc().execCommand('Delete', false, null); + } + + parentNode = selection.getNode(); + + // Parse the fragment within the context of the parent node + var parserArgs = {context: parentNode.nodeName.toLowerCase()}; + fragment = parser.parse(value, parserArgs); + + // Move the caret to a more suitable location + node = fragment.lastChild; + if (node.attr('id') == 'mce_marker') { + marker = node; + + for (node = node.prev; node; node = node.walk(true)) { + if (node.type == 3 || !dom.isBlock(node.name)) { + node.parent.insert(marker, node, node.name === 'br'); + break; + } + } + } + + // If parser says valid we can insert the contents into that parent + if (!parserArgs.invalid) { + value = serializer.serialize(fragment); + + // Check if parent is empty or only has one BR element then set the innerHTML of that parent + node = parentNode.firstChild; + node2 = parentNode.lastChild; + if (!node || (node === node2 && node.nodeName === 'BR')) { + dom.setHTML(parentNode, value); + } else { + selection.setContent(value); + } + } else { + // If the fragment was invalid within that context then we need + // to parse and process the parent it's inserted into + + // Insert bookmark node and get the parent + selection.setContent(bookmarkHtml); + parentNode = selection.getNode(); + rootNode = editor.getBody(); + + // Opera will return the document node when selection is in root + if (parentNode.nodeType == 9) { + parentNode = node = rootNode; + } else { + node = parentNode; + } + + // Find the ancestor just before the root element + while (node !== rootNode) { + parentNode = node; + node = node.parentNode; + } + + // Get the outer/inner HTML depending on if we are in the root and parser and serialize that + value = parentNode == rootNode ? rootNode.innerHTML : dom.getOuterHTML(parentNode); + value = serializer.serialize( + parser.parse( + // Need to replace by using a function since $ in the contents would otherwise be a problem + value.replace(//i, function() { + return serializer.serialize(fragment); + }) + ) + ); + + // Set the inner/outer HTML depending on if we are in the root or not + if (parentNode == rootNode) { + dom.setHTML(rootNode, value); + } else { + dom.setOuterHTML(parentNode, value); + } + } + + marker = dom.get('mce_marker'); + selection.scrollIntoView(marker); + + // Move selection before marker and remove it + rng = dom.createRng(); + + // If previous sibling is a text node set the selection to the end of that node + node = marker.previousSibling; + if (node && node.nodeType == 3) { + rng.setStart(node, node.nodeValue.length); + + // TODO: Why can't we normalize on IE + if (!isIE) { + node2 = marker.nextSibling; + if (node2 && node2.nodeType == 3) { + node.appendData(node2.data); + node2.parentNode.removeChild(node2); + } + } + } else { + // If the previous sibling isn't a text node or doesn't exist set the selection before the marker node + rng.setStartBefore(marker); + rng.setEndBefore(marker); + } + + // Remove the marker node and set the new range + dom.remove(marker); + selection.setRng(rng); + + // Dispatch after event and add any visual elements needed + editor.fire('SetContent', args); + editor.addVisual(); + }, + + mceInsertRawHTML: function(command, ui, value) { + selection.setContent('tiny_mce_marker'); + editor.setContent( + editor.getContent().replace(/tiny_mce_marker/g, function() { + return value; + }) + ); + }, + + mceToggleFormat: function(command, ui, value) { + toggleFormat(value); + }, + + mceSetContent: function(command, ui, value) { + editor.setContent(value); + }, + + 'Indent,Outdent': function(command) { + var intentValue, indentUnit, value; + + // Setup indent level + intentValue = settings.indentation; + indentUnit = /[a-z%]+$/i.exec(intentValue); + intentValue = parseInt(intentValue, 10); + + if (!queryCommandState('InsertUnorderedList') && !queryCommandState('InsertOrderedList')) { + // If forced_root_blocks is set to false we don't have a block to indent so lets create a div + if (!settings.forced_root_block && !dom.getParent(selection.getNode(), dom.isBlock)) { + formatter.apply('div'); + } + + each(selection.getSelectedBlocks(), function(element) { + if (element.nodeName != "LI") { + var indentStyleName = editor.getParam('indent_use_margin', false) ? 'margin' : 'padding'; + + indentStyleName += dom.getStyle(element, 'direction', true) == 'rtl' ? 'Right' : 'Left'; + + if (command == 'outdent') { + value = Math.max(0, parseInt(element.style[indentStyleName] || 0, 10) - intentValue); + dom.setStyle(element, indentStyleName, value ? value + indentUnit : ''); + } else { + value = (parseInt(element.style[indentStyleName] || 0, 10) + intentValue) + indentUnit; + dom.setStyle(element, indentStyleName, value); + } + } + }); + } else { + execNativeCommand(command); + } + }, + + mceRepaint: function() { + if (isGecko) { + try { + storeSelection(TRUE); + + if (selection.getSel()) { + selection.getSel().selectAllChildren(editor.getBody()); + } + + selection.collapse(TRUE); + restoreSelection(); + } catch (ex) { + // Ignore + } + } + }, + + InsertHorizontalRule: function() { + editor.execCommand('mceInsertContent', false, '
    '); + }, + + mceToggleVisualAid: function() { + editor.hasVisual = !editor.hasVisual; + editor.addVisual(); + }, + + mceReplaceContent: function(command, ui, value) { + editor.execCommand('mceInsertContent', false, value.replace(/\{\$selection\}/g, selection.getContent({format: 'text'}))); + }, + + mceInsertLink: function(command, ui, value) { + var anchor; + + if (typeof(value) == 'string') { + value = {href: value}; + } + + anchor = dom.getParent(selection.getNode(), 'a'); + + // Spaces are never valid in URLs and it's a very common mistake for people to make so we fix it here. + value.href = value.href.replace(' ', '%20'); + + // Remove existing links if there could be child links or that the href isn't specified + if (!anchor || !value.href) { + formatter.remove('link'); + } + + // Apply new link to selection + if (value.href) { + formatter.apply('link', value, anchor); + } + }, + + selectAll: function() { + var root = dom.getRoot(), rng; + + if (selection.getRng().setStart) { + rng = dom.createRng(); + rng.setStart(root, 0); + rng.setEnd(root, root.childNodes.length); + selection.setRng(rng); + } else { + // IE will render it's own root level block elements and sometimes + // even put font elements in them when the user starts typing. So we need to + // move the selection to a more suitable element from this: + // |

    to this:

    |

    + rng = selection.getRng(); + if (!rng.item) { + rng.moveToElementText(root); + rng.select(); + } + } + }, + + "delete": function() { + execNativeCommand("Delete"); + + // Check if body is empty after the delete call if so then set the contents + // to an empty string and move the caret to any block produced by that operation + // this fixes the issue with root blocks not being properly produced after a delete call on IE + var body = editor.getBody(); + + if (dom.isEmpty(body)) { + editor.setContent(''); + + if (body.firstChild && dom.isBlock(body.firstChild)) { + editor.selection.setCursorLocation(body.firstChild, 0); + } else { + editor.selection.setCursorLocation(body, 0); + } + } + }, + + mceNewDocument: function() { + editor.setContent(''); + } + }); + + // Add queryCommandState overrides + addCommands({ + // Override justify commands + 'JustifyLeft,JustifyCenter,JustifyRight,JustifyFull': function(command) { + var name = 'align' + command.substring(7); + var nodes = selection.isCollapsed() ? [dom.getParent(selection.getNode(), dom.isBlock)] : selection.getSelectedBlocks(); + var matches = map(nodes, function(node) { + return !!formatter.matchNode(node, name); + }); + return inArray(matches, TRUE) !== -1; + }, + + 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': function(command) { + return isFormatMatch(command); + }, + + mceBlockQuote: function() { + return isFormatMatch('blockquote'); + }, + + Outdent: function() { + var node; + + if (settings.inline_styles) { + if ((node = dom.getParent(selection.getStart(), dom.isBlock)) && parseInt(node.style.paddingLeft, 10) > 0) { + return TRUE; + } + + if ((node = dom.getParent(selection.getEnd(), dom.isBlock)) && parseInt(node.style.paddingLeft, 10) > 0) { + return TRUE; + } + } + + return ( + queryCommandState('InsertUnorderedList') || + queryCommandState('InsertOrderedList') || + (!settings.inline_styles && !!dom.getParent(selection.getNode(), 'BLOCKQUOTE')) + ); + }, + + 'InsertUnorderedList,InsertOrderedList': function(command) { + var list = dom.getParent(selection.getNode(), 'ul,ol'); + + return list && + ( + command === 'insertunorderedlist' && list.tagName === 'UL' || + command === 'insertorderedlist' && list.tagName === 'OL' + ); + } + }, 'state'); + + // Add queryCommandValue overrides + addCommands({ + 'FontSize,FontName': function(command) { + var value = 0, parent; + + if ((parent = dom.getParent(selection.getNode(), 'span'))) { + if (command == 'fontsize') { + value = parent.style.fontSize; + } else { + value = parent.style.fontFamily.replace(/, /g, ',').replace(/[\'\"]/g, '').toLowerCase(); + } + } + + return value; + } + }, 'value'); + + // Add undo manager logic + addCommands({ + Undo: function() { + editor.undoManager.undo(); + }, + + Redo: function() { + editor.undoManager.redo(); + } + }); + }; +}); + +// Included from: js/tinymce/classes/util/URI.js + +/** + * URI.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class handles parsing, modification and serialization of URI/URL strings. + * @class tinymce.util.URI + */ +define("tinymce/util/URI", [ + "tinymce/util/Tools" +], function(Tools) { + var each = Tools.each, trim = Tools.trim; + + /** + * Constructs a new URI instance. + * + * @constructor + * @method URI + * @param {String} url URI string to parse. + * @param {Object} settings Optional settings object. + */ + function URI(url, settings) { + var self = this, baseUri, base_url; + + // Trim whitespace + url = trim(url); + + // Default settings + settings = self.settings = settings || {}; + + // Strange app protocol that isn't http/https or local anchor + // For example: mailto,skype,tel etc. + if (/^([\w\-]+):([^\/]{2})/i.test(url) || /^\s*#/.test(url)) { + self.source = url; + return; + } + + var isProtocolRelative = url.indexOf('//') === 0; + + // Absolute path with no host, fake host and protocol + if (url.indexOf('/') === 0 && !isProtocolRelative) { + url = (settings.base_uri ? settings.base_uri.protocol || 'http' : 'http') + '://mce_host' + url; + } + + // Relative path http:// or protocol relative //path + if (!/^[\w\-]*:?\/\//.test(url)) { + base_url = settings.base_uri ? settings.base_uri.path : new URI(location.href).directory; + if (settings.base_uri.protocol === "") { + url = '//mce_host' + self.toAbsPath(base_url, url); + } else { + url = ((settings.base_uri && settings.base_uri.protocol) || 'http') + '://mce_host' + self.toAbsPath(base_url, url); + } + } + + // Parse URL (Credits goes to Steave, http://blog.stevenlevithan.com/archives/parseuri) + url = url.replace(/@@/g, '(mce_at)'); // Zope 3 workaround, they use @@something + + /*jshint maxlen: 255 */ + /*eslint max-len: 0 */ + url = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(url); + + each(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"], function(v, i) { + var part = url[i]; + + // Zope 3 workaround, they use @@something + if (part) { + part = part.replace(/\(mce_at\)/g, '@@'); + } + + self[v] = part; + }); + + baseUri = settings.base_uri; + if (baseUri) { + if (!self.protocol) { + self.protocol = baseUri.protocol; + } + + if (!self.userInfo) { + self.userInfo = baseUri.userInfo; + } + + if (!self.port && self.host === 'mce_host') { + self.port = baseUri.port; + } + + if (!self.host || self.host === 'mce_host') { + self.host = baseUri.host; + } + + self.source = ''; + } + + if (isProtocolRelative) { + self.protocol = ''; + } + + //t.path = t.path || '/'; + } + + URI.prototype = { + /** + * Sets the internal path part of the URI. + * + * @method setPath + * @param {string} path Path string to set. + */ + setPath: function(path) { + var self = this; + + path = /^(.*?)\/?(\w+)?$/.exec(path); + + // Update path parts + self.path = path[0]; + self.directory = path[1]; + self.file = path[2]; + + // Rebuild source + self.source = ''; + self.getURI(); + }, + + /** + * Converts the specified URI into a relative URI based on the current URI instance location. + * + * @method toRelative + * @param {String} uri URI to convert into a relative path/URI. + * @return {String} Relative URI from the point specified in the current URI instance. + * @example + * // Converts an absolute URL to an relative URL url will be somedir/somefile.htm + * var url = new tinymce.util.URI('http://www.site.com/dir/').toRelative('http://www.site.com/dir/somedir/somefile.htm'); + */ + toRelative: function(uri) { + var self = this, output; + + if (uri === "./") { + return uri; + } + + uri = new URI(uri, {base_uri: self}); + + // Not on same domain/port or protocol + if ((uri.host != 'mce_host' && self.host != uri.host && uri.host) || self.port != uri.port || + (self.protocol != uri.protocol && uri.protocol !== "")) { + return uri.getURI(); + } + + var tu = self.getURI(), uu = uri.getURI(); + + // Allow usage of the base_uri when relative_urls = true + if (tu == uu || (tu.charAt(tu.length - 1) == "/" && tu.substr(0, tu.length - 1) == uu)) { + return tu; + } + + output = self.toRelPath(self.path, uri.path); + + // Add query + if (uri.query) { + output += '?' + uri.query; + } + + // Add anchor + if (uri.anchor) { + output += '#' + uri.anchor; + } + + return output; + }, + + /** + * Converts the specified URI into a absolute URI based on the current URI instance location. + * + * @method toAbsolute + * @param {String} uri URI to convert into a relative path/URI. + * @param {Boolean} noHost No host and protocol prefix. + * @return {String} Absolute URI from the point specified in the current URI instance. + * @example + * // Converts an relative URL to an absolute URL url will be http://www.site.com/dir/somedir/somefile.htm + * var url = new tinymce.util.URI('http://www.site.com/dir/').toAbsolute('somedir/somefile.htm'); + */ + toAbsolute: function(uri, noHost) { + uri = new URI(uri, {base_uri: this}); + + return uri.getURI(this.host == uri.host && this.protocol == uri.protocol ? noHost : 0); + }, + + /** + * Converts a absolute path into a relative path. + * + * @method toRelPath + * @param {String} base Base point to convert the path from. + * @param {String} path Absolute path to convert into a relative path. + */ + toRelPath: function(base, path) { + var items, breakPoint = 0, out = '', i, l; + + // Split the paths + base = base.substring(0, base.lastIndexOf('/')); + base = base.split('/'); + items = path.split('/'); + + if (base.length >= items.length) { + for (i = 0, l = base.length; i < l; i++) { + if (i >= items.length || base[i] != items[i]) { + breakPoint = i + 1; + break; + } + } + } + + if (base.length < items.length) { + for (i = 0, l = items.length; i < l; i++) { + if (i >= base.length || base[i] != items[i]) { + breakPoint = i + 1; + break; + } + } + } + + if (breakPoint === 1) { + return path; + } + + for (i = 0, l = base.length - (breakPoint - 1); i < l; i++) { + out += "../"; + } + + for (i = breakPoint - 1, l = items.length; i < l; i++) { + if (i != breakPoint - 1) { + out += "/" + items[i]; + } else { + out += items[i]; + } + } + + return out; + }, + + /** + * Converts a relative path into a absolute path. + * + * @method toAbsPath + * @param {String} base Base point to convert the path from. + * @param {String} path Relative path to convert into an absolute path. + */ + toAbsPath: function(base, path) { + var i, nb = 0, o = [], tr, outPath; + + // Split paths + tr = /\/$/.test(path) ? '/' : ''; + base = base.split('/'); + path = path.split('/'); + + // Remove empty chunks + each(base, function(k) { + if (k) { + o.push(k); + } + }); + + base = o; + + // Merge relURLParts chunks + for (i = path.length - 1, o = []; i >= 0; i--) { + // Ignore empty or . + if (path[i].length === 0 || path[i] === ".") { + continue; + } + + // Is parent + if (path[i] === '..') { + nb++; + continue; + } + + // Move up + if (nb > 0) { + nb--; + continue; + } + + o.push(path[i]); + } + + i = base.length - nb; + + // If /a/b/c or / + if (i <= 0) { + outPath = o.reverse().join('/'); + } else { + outPath = base.slice(0, i).join('/') + '/' + o.reverse().join('/'); + } + + // Add front / if it's needed + if (outPath.indexOf('/') !== 0) { + outPath = '/' + outPath; + } + + // Add traling / if it's needed + if (tr && outPath.lastIndexOf('/') !== outPath.length - 1) { + outPath += tr; + } + + return outPath; + }, + + /** + * Returns the full URI of the internal structure. + * + * @method getURI + * @param {Boolean} noProtoHost Optional no host and protocol part. Defaults to false. + */ + getURI: function(noProtoHost) { + var s, self = this; + + // Rebuild source + if (!self.source || noProtoHost) { + s = ''; + + if (!noProtoHost) { + if (self.protocol) { + s += self.protocol + '://'; + } else { + s += '//'; + } + + if (self.userInfo) { + s += self.userInfo + '@'; + } + + if (self.host) { + s += self.host; + } + + if (self.port) { + s += ':' + self.port; + } + } + + if (self.path) { + s += self.path; + } + + if (self.query) { + s += '?' + self.query; + } + + if (self.anchor) { + s += '#' + self.anchor; + } + + self.source = s; + } + + return self.source; + } + }; + + return URI; +}); + +// Included from: js/tinymce/classes/util/Class.js + +/** + * Class.js + * + * Copyright 2003-2012, Moxiecode Systems AB, All rights reserved. + */ + +/** + * This utilitiy class is used for easier inheritage. + * + * Features: + * * Exposed super functions: this._super(); + * * Mixins + * * Dummy functions + * * Property functions: var value = object.value(); and object.value(newValue); + * * Static functions + * * Defaults settings + */ +define("tinymce/util/Class", [ + "tinymce/util/Tools" +], function(Tools) { + var each = Tools.each, extend = Tools.extend; + + var extendClass, initializing; + + function Class() { + } + + // Provides classical inheritance, based on code made by John Resig + Class.extend = extendClass = function(prop) { + var self = this, _super = self.prototype, prototype, name, member; + + // The dummy class constructor + function Class() { + var i, mixins, mixin, self = this; + + // All construction is actually done in the init method + if (!initializing) { + // Run class constuctor + if (self.init) { + self.init.apply(self, arguments); + } + + // Run mixin constructors + mixins = self.Mixins; + if (mixins) { + i = mixins.length; + while (i--) { + mixin = mixins[i]; + if (mixin.init) { + mixin.init.apply(self, arguments); + } + } + } + } + } + + // Dummy function, needs to be extended in order to provide functionality + function dummy() { + return this; + } + + // Creates a overloaded method for the class + // this enables you to use this._super(); to call the super function + function createMethod(name, fn) { + return function(){ + var self = this, tmp = self._super, ret; + + self._super = _super[name]; + ret = fn.apply(self, arguments); + self._super = tmp; + + return ret; + }; + } + + // Instantiate a base class (but only create the instance, + // don't run the init constructor) + initializing = true; + prototype = new self(); + initializing = false; + + // Add mixins + if (prop.Mixins) { + each(prop.Mixins, function(mixin) { + mixin = mixin; + + for (var name in mixin) { + if (name !== "init") { + prop[name] = mixin[name]; + } + } + }); + + if (_super.Mixins) { + prop.Mixins = _super.Mixins.concat(prop.Mixins); + } + } + + // Generate dummy methods + if (prop.Methods) { + each(prop.Methods.split(','), function(name) { + prop[name] = dummy; + }); + } + + // Generate property methods + if (prop.Properties) { + each(prop.Properties.split(','), function(name) { + var fieldName = '_' + name; + + prop[name] = function(value) { + var self = this, undef; + + // Set value + if (value !== undef) { + self[fieldName] = value; + + return self; + } + + // Get value + return self[fieldName]; + }; + }); + } + + // Static functions + if (prop.Statics) { + each(prop.Statics, function(func, name) { + Class[name] = func; + }); + } + + // Default settings + if (prop.Defaults && _super.Defaults) { + prop.Defaults = extend({}, _super.Defaults, prop.Defaults); + } + + // Copy the properties over onto the new prototype + for (name in prop) { + member = prop[name]; + + if (typeof member == "function" && _super[name]) { + prototype[name] = createMethod(name, member); + } else { + prototype[name] = member; + } + } + + // Populate our constructed prototype object + Class.prototype = prototype; + + // Enforce the constructor to be what we expect + Class.constructor = Class; + + // And make this class extendible + Class.extend = extendClass; + + return Class; + }; + + return Class; +}); + +// Included from: js/tinymce/classes/ui/Selector.js + +/** + * Selector.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*eslint no-nested-ternary:0 */ + +/** + * Selector engine, enables you to select controls by using CSS like expressions. + * We currently only support basic CSS expressions to reduce the size of the core + * and the ones we support should be enough for most cases. + * + * @example + * Supported expressions: + * element + * element#name + * element.class + * element[attr] + * element[attr*=value] + * element[attr~=value] + * element[attr!=value] + * element[attr^=value] + * element[attr$=value] + * element: + * element:not() + * element:first + * element:last + * element:odd + * element:even + * element element + * element > element + * + * @class tinymce.ui.Selector + */ +define("tinymce/ui/Selector", [ + "tinymce/util/Class" +], function(Class) { + "use strict"; + + /** + * Produces an array with a unique set of objects. It will not compare the values + * but the references of the objects. + * + * @private + * @method unqiue + * @param {Array} array Array to make into an array with unique items. + * @return {Array} Array with unique items. + */ + function unique(array) { + var uniqueItems = [], i = array.length, item; + + while (i--) { + item = array[i]; + + if (!item.__checked) { + uniqueItems.push(item); + item.__checked = 1; + } + } + + i = uniqueItems.length; + while (i--) { + delete uniqueItems[i].__checked; + } + + return uniqueItems; + } + + var expression = /^([\w\\*]+)?(?:#([\w\\]+))?(?:\.([\w\\\.]+))?(?:\[\@?([\w\\]+)([\^\$\*!~]?=)([\w\\]+)\])?(?:\:(.+))?/i; + + /*jshint maxlen:255 */ + /*eslint max-len:0 */ + var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, + whiteSpace = /^\s*|\s*$/g, + Collection; + + var Selector = Class.extend({ + /** + * Constructs a new Selector instance. + * + * @constructor + * @method init + * @param {String} selector CSS like selector expression. + */ + init: function(selector) { + var match = this.match; + + function compileNameFilter(name) { + if (name) { + name = name.toLowerCase(); + + return function(item) { + return name === '*' || item.type === name; + }; + } + } + + function compileIdFilter(id) { + if (id) { + return function(item) { + return item._name === id; + }; + } + } + + function compileClassesFilter(classes) { + if (classes) { + classes = classes.split('.'); + + return function(item) { + var i = classes.length; + + while (i--) { + if (!item.hasClass(classes[i])) { + return false; + } + } + + return true; + }; + } + } + + function compileAttrFilter(name, cmp, check) { + if (name) { + return function(item) { + var value = item[name] ? item[name]() : ''; + + 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; + }; + } + } + + function compilePsuedoFilter(name) { + var notSelectors; + + if (name) { + name = /(?:not\((.+)\))|(.+)/i.exec(name); + + if (!name[1]) { + name = name[2]; + + return function(item, index, length) { + 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; + }; + } else { + // Compile not expression + notSelectors = parseChunks(name[1], []); + + return function(item) { + return !match(item, notSelectors); + }; + } + } + } + + function compile(selector, filters, direct) { + var parts; + + function add(filter) { + if (filter) { + filters.push(filter); + } + } + + // Parse expression into parts + parts = expression.exec(selector.replace(whiteSpace, '')); + + add(compileNameFilter(parts[1])); + add(compileIdFilter(parts[2])); + add(compileClassesFilter(parts[3])); + add(compileAttrFilter(parts[4], parts[5], parts[6])); + add(compilePsuedoFilter(parts[7])); + + // Mark the filter with psuedo for performance + filters.psuedo = !!parts[7]; + filters.direct = direct; + + return filters; + } + + // Parser logic based on Sizzle by John Resig + function parseChunks(selector, selectors) { + var parts = [], extra, matches, i; + + do { + chunker.exec(""); + matches = chunker.exec(selector); + + if (matches) { + selector = matches[3]; + parts.push(matches[1]); + + if (matches[2]) { + extra = matches[3]; + break; + } + } + } while (matches); + + if (extra) { + parseChunks(extra, selectors); + } + + selector = []; + for (i = 0; i < parts.length; i++) { + if (parts[i] != '>') { + selector.push(compile(parts[i], [], parts[i - 1] === '>')); + } + } + + selectors.push(selector); + + return selectors; + } + + this._selectors = parseChunks(selector, []); + }, + + /** + * Returns true/false if the selector matches the specified control. + * + * @method match + * @param {tinymce.ui.Control} control Control to match agains the selector. + * @param {Array} selectors Optional array of selectors, mostly used internally. + * @return {Boolean} true/false state if the control matches or not. + */ + match: function(control, selectors) { + var i, l, si, sl, selector, fi, fl, filters, index, length, siblings, count, item; + + selectors = selectors || this._selectors; + for (i = 0, l = selectors.length; i < l; i++) { + selector = selectors[i]; + sl = selector.length; + item = control; + count = 0; + + for (si = sl - 1; si >= 0; si--) { + filters = selector[si]; + + while (item) { + // Find the index and length since a psuedo filter like :first needs it + if (filters.psuedo) { + siblings = item.parent().items(); + index = length = siblings.length; + while (index--) { + if (siblings[index] === item) { + break; + } + } + } + + for (fi = 0, fl = filters.length; fi < fl; fi++) { + if (!filters[fi](item, index, length)) { + fi = fl + 1; + break; + } + } + + if (fi === fl) { + count++; + break; + } else { + // If it didn't match the right most expression then + // break since it's no point looking at the parents + if (si === sl - 1) { + break; + } + } + + item = item.parent(); + } + } + + // If we found all selectors then return true otherwise continue looking + if (count === sl) { + return true; + } + } + + return false; + }, + + /** + * Returns a tinymce.ui.Collection with matches of the specified selector inside the specified container. + * + * @method find + * @param {tinymce.ui.Control} container Container to look for items in. + * @return {tinymce.ui.Collection} Collection with matched elements. + */ + find: function(container) { + var matches = [], i, l, selectors = this._selectors; + + function collect(items, selector, index) { + var i, l, fi, fl, item, filters = selector[index]; + + for (i = 0, l = items.length; i < l; i++) { + item = items[i]; + + // Run each filter agains the item + for (fi = 0, fl = filters.length; fi < fl; fi++) { + if (!filters[fi](item, i, l)) { + fi = fl + 1; + break; + } + } + + // All filters matched the item + if (fi === fl) { + // Matched item is on the last expression like: panel toolbar [button] + if (index == selector.length - 1) { + matches.push(item); + } else { + // Collect next expression type + if (item.items) { + collect(item.items(), selector, index + 1); + } + } + } else if (filters.direct) { + return; + } + + // Collect child items + if (item.items) { + collect(item.items(), selector, index); + } + } + } + + if (container.items) { + for (i = 0, l = selectors.length; i < l; i++) { + collect(container.items(), selectors[i], 0); + } + + // Unique the matches if needed + if (l > 1) { + matches = unique(matches); + } + } + + // Fix for circular reference + if (!Collection) { + // TODO: Fix me! + Collection = Selector.Collection; + } + + return new Collection(matches); + } + }); + + return Selector; +}); + +// Included from: js/tinymce/classes/ui/Collection.js + +/** + * Collection.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Control collection, this class contains control instances and it enables you to + * perform actions on all the contained items. This is very similar to how jQuery works. + * + * @example + * someCollection.show().disabled(true); + * + * @class tinymce.ui.Collection + */ +define("tinymce/ui/Collection", [ + "tinymce/util/Tools", + "tinymce/ui/Selector", + "tinymce/util/Class" +], function(Tools, Selector, Class) { + "use strict"; + + var Collection, proto, push = Array.prototype.push, slice = Array.prototype.slice; + + proto = { + /** + * Current number of contained control instances. + * + * @field length + * @type Number + */ + length: 0, + + /** + * Constructor for the collection. + * + * @constructor + * @method init + * @param {Array} items Optional array with items to add. + */ + init: function(items) { + if (items) { + this.add(items); + } + }, + + /** + * Adds new items to the control collection. + * + * @method add + * @param {Array} items Array if items to add to collection. + * @return {tinymce.ui.Collection} Current collection instance. + */ + add: function(items) { + var self = this; + + // Force single item into array + if (!Tools.isArray(items)) { + if (items instanceof Collection) { + self.add(items.toArray()); + } else { + push.call(self, items); + } + } else { + push.apply(self, items); + } + + return self; + }, + + /** + * Sets the contents of the collection. This will remove any existing items + * and replace them with the ones specified in the input array. + * + * @method set + * @param {Array} items Array with items to set into the Collection. + * @return {tinymce.ui.Collection} Collection instance. + */ + set: function(items) { + var self = this, len = self.length, i; + + self.length = 0; + self.add(items); + + // Remove old entries + for (i = self.length; i < len; i++) { + delete self[i]; + } + + return self; + }, + + /** + * Filters the collection item based on the specified selector expression or selector function. + * + * @method filter + * @param {String} selector Selector expression to filter items by. + * @return {tinymce.ui.Collection} Collection containing the filtered items. + */ + filter: function(selector) { + var self = this, i, l, matches = [], item, match; + + // Compile string into selector expression + if (typeof(selector) === "string") { + selector = new Selector(selector); + + match = function(item) { + return selector.match(item); + }; + } else { + // Use selector as matching function + match = selector; + } + + for (i = 0, l = self.length; i < l; i++) { + item = self[i]; + + if (match(item)) { + matches.push(item); + } + } + + return new Collection(matches); + }, + + /** + * Slices the items within the collection. + * + * @method slice + * @param {Number} index Index to slice at. + * @param {Number} len Optional length to slice. + * @return {tinymce.ui.Collection} Current collection. + */ + slice: function() { + return new Collection(slice.apply(this, arguments)); + }, + + /** + * Makes the current collection equal to the specified index. + * + * @method eq + * @param {Number} index Index of the item to set the collection to. + * @return {tinymce.ui.Collection} Current collection. + */ + eq: function(index) { + return index === -1 ? this.slice(index) : this.slice(index, +index + 1); + }, + + /** + * Executes the specified callback on each item in collection. + * + * @method each + * @param {function} callback Callback to execute for each item in collection. + * @return {tinymce.ui.Collection} Current collection instance. + */ + each: function(callback) { + Tools.each(this, callback); + + return this; + }, + + /** + * Returns an JavaScript array object of the contents inside the collection. + * + * @method toArray + * @return {Array} Array with all items from collection. + */ + toArray: function() { + return Tools.toArray(this); + }, + + /** + * Finds the index of the specified control or return -1 if it isn't in the collection. + * + * @method indexOf + * @param {Control} ctrl Control instance to look for. + * @return {Number} Index of the specified control or -1. + */ + indexOf: function(ctrl) { + var self = this, i = self.length; + + while (i--) { + if (self[i] === ctrl) { + break; + } + } + + return i; + }, + + /** + * Returns a new collection of the contents in reverse order. + * + * @method reverse + * @return {tinymce.ui.Collection} Collection instance with reversed items. + */ + reverse: function() { + return new Collection(Tools.toArray(this).reverse()); + }, + + /** + * Returns true/false if the class exists or not. + * + * @method hasClass + * @param {String} cls Class to check for. + * @return {Boolean} true/false state if the class exists or not. + */ + hasClass: function(cls) { + return this[0] ? this[0].hasClass(cls) : false; + }, + + /** + * Sets/gets the specific property on the items in the collection. The same as executing control.(); + * + * @method prop + * @param {String} name Property name to get/set. + * @param {Object} value Optional object value to set. + * @return {tinymce.ui.Collection} Current collection instance or value of the first item on a get operation. + */ + prop: function(name, value) { + var self = this, undef, item; + + if (value !== undef) { + self.each(function(item) { + if (item[name]) { + item[name](value); + } + }); + + return self; + } + + item = self[0]; + + if (item && item[name]) { + return item[name](); + } + }, + + /** + * Executes the specific function name with optional arguments an all items in collection if it exists. + * + * @example collection.exec("myMethod", arg1, arg2, arg3); + * @method exec + * @param {String} name Name of the function to execute. + * @param {Object} ... Multiple arguments to pass to each function. + * @return {tinymce.ui.Collection} Current collection. + */ + exec: function(name) { + var self = this, args = Tools.toArray(arguments).slice(1); + + self.each(function(item) { + if (item[name]) { + item[name].apply(item, args); + } + }); + + return self; + }, + + /** + * Remove all items from collection and DOM. + * + * @method remove + * @return {tinymce.ui.Collection} Current collection. + */ + remove: function() { + var i = this.length; + + while (i--) { + this[i].remove(); + } + + return this; + } + + /** + * Fires the specified event by name and arguments on the control. This will execute all + * bound event handlers. + * + * @method fire + * @param {String} name Name of the event to fire. + * @param {Object} args Optional arguments to pass to the event. + * @return {tinymce.ui.Collection} Current collection instance. + */ + // fire: function(event, args) {}, -- Generated by code below + + /** + * Binds a callback to the specified event. This event can both be + * native browser events like "click" or custom ones like PostRender. + * + * The callback function will have two parameters the first one being the control that received the event + * the second one will be the event object either the browsers native event object or a custom JS object. + * + * @method on + * @param {String} name Name of the event to bind. For example "click". + * @param {String/function} callback Callback function to execute ones the event occurs. + * @return {tinymce.ui.Collection} Current collection instance. + */ + // on: function(name, callback) {}, -- Generated by code below + + /** + * Unbinds the specified event and optionally a specific callback. If you omit the name + * parameter all event handlers will be removed. If you omit the callback all event handles + * by the specified name will be removed. + * + * @method off + * @param {String} name Optional name for the event to unbind. + * @param {function} callback Optional callback function to unbind. + * @return {tinymce.ui.Collection} Current collection instance. + */ + // off: function(name, callback) {}, -- Generated by code below + + /** + * Shows the items in the current collection. + * + * @method show + * @return {tinymce.ui.Collection} Current collection instance. + */ + // show: function() {}, -- Generated by code below + + /** + * Hides the items in the current collection. + * + * @method hide + * @return {tinymce.ui.Collection} Current collection instance. + */ + // hide: function() {}, -- Generated by code below + + /** + * Sets/gets the text contents of the items in the current collection. + * + * @method text + * @return {tinymce.ui.Collection} Current collection instance or text value of the first item on a get operation. + */ + // text: function(value) {}, -- Generated by code below + + /** + * Sets/gets the name contents of the items in the current collection. + * + * @method name + * @return {tinymce.ui.Collection} Current collection instance or name value of the first item on a get operation. + */ + // name: function(value) {}, -- Generated by code below + + /** + * Sets/gets the disabled state on the items in the current collection. + * + * @method disabled + * @return {tinymce.ui.Collection} Current collection instance or disabled state of the first item on a get operation. + */ + // disabled: function(state) {}, -- Generated by code below + + /** + * Sets/gets the active state on the items in the current collection. + * + * @method active + * @return {tinymce.ui.Collection} Current collection instance or active state of the first item on a get operation. + */ + // active: function(state) {}, -- Generated by code below + + /** + * Sets/gets the selected state on the items in the current collection. + * + * @method selected + * @return {tinymce.ui.Collection} Current collection instance or selected state of the first item on a get operation. + */ + // selected: function(state) {}, -- Generated by code below + + /** + * Sets/gets the selected state on the items in the current collection. + * + * @method visible + * @return {tinymce.ui.Collection} Current collection instance or visible state of the first item on a get operation. + */ + // visible: function(state) {}, -- Generated by code below + + /** + * Adds a class to all items in the collection. + * + * @method addClass + * @param {String} cls Class to add to each item. + * @return {tinymce.ui.Collection} Current collection instance. + */ + // addClass: function(cls) {}, -- Generated by code below + + /** + * Removes the specified class from all items in collection. + * + * @method removeClass + * @param {String} cls Class to remove from each item. + * @return {tinymce.ui.Collection} Current collection instance. + */ + // removeClass: function(cls) {}, -- Generated by code below + }; + + // Extend tinymce.ui.Collection prototype with some generated control specific methods + Tools.each('fire on off show hide addClass removeClass append prepend before after reflow'.split(' '), function(name) { + proto[name] = function() { + var args = Tools.toArray(arguments); + + this.each(function(ctrl) { + if (name in ctrl) { + ctrl[name].apply(ctrl, args); + } + }); + + return this; + }; + }); + + // Extend tinymce.ui.Collection prototype with some property methods + Tools.each('text name disabled active selected checked visible parent value data'.split(' '), function(name) { + proto[name] = function(value) { + return this.prop(name, value); + }; + }); + + // Create class based on the new prototype + Collection = Class.extend(proto); + + // Stick Collection into Selector to prevent circual references + Selector.Collection = Collection; + + return Collection; +}); + +// Included from: js/tinymce/classes/ui/DomUtils.js + +/** + * DOMUtils.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +define("tinymce/ui/DomUtils", [ + "tinymce/util/Tools", + "tinymce/dom/DOMUtils" +], function(Tools, DOMUtils) { + "use strict"; + + return { + id: function() { + return DOMUtils.DOM.uniqueId(); + }, + + createFragment: function(html) { + return DOMUtils.DOM.createFragment(html); + }, + + getWindowSize: function() { + return DOMUtils.DOM.getViewPort(); + }, + + getSize: function(elm) { + var width, height; + + if (elm.getBoundingClientRect) { + var rect = elm.getBoundingClientRect(); + + width = Math.max(rect.width || (rect.right - rect.left), elm.offsetWidth); + height = Math.max(rect.height || (rect.bottom - rect.bottom), elm.offsetHeight); + } else { + width = elm.offsetWidth; + height = elm.offsetHeight; + } + + return {width: width, height: height}; + }, + + getPos: function(elm, root) { + return DOMUtils.DOM.getPos(elm, root); + }, + + getViewPort: function(win) { + return DOMUtils.DOM.getViewPort(win); + }, + + get: function(id) { + return document.getElementById(id); + }, + + addClass : function(elm, cls) { + return DOMUtils.DOM.addClass(elm, cls); + }, + + removeClass : function(elm, cls) { + return DOMUtils.DOM.removeClass(elm, cls); + }, + + hasClass : function(elm, cls) { + return DOMUtils.DOM.hasClass(elm, cls); + }, + + toggleClass: function(elm, cls, state) { + return DOMUtils.DOM.toggleClass(elm, cls, state); + }, + + css: function(elm, name, value) { + return DOMUtils.DOM.setStyle(elm, name, value); + }, + + on: function(target, name, callback, scope) { + return DOMUtils.DOM.bind(target, name, callback, scope); + }, + + off: function(target, name, callback) { + return DOMUtils.DOM.unbind(target, name, callback); + }, + + fire: function(target, name, args) { + return DOMUtils.DOM.fire(target, name, args); + }, + + innerHtml: function(elm, html) { + // Workaround for
    in

    bug on IE 8 #6178 + DOMUtils.DOM.setHTML(elm, html); + } + }; +}); + +// Included from: js/tinymce/classes/ui/Control.js + +/** + * Control.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*eslint consistent-this:0 */ + +/** + * This is the base class for all controls and containers. All UI control instances inherit + * from this one as it has the base logic needed by all of them. + * + * @class tinymce.ui.Control + */ +define("tinymce/ui/Control", [ + "tinymce/util/Class", + "tinymce/util/Tools", + "tinymce/ui/Collection", + "tinymce/ui/DomUtils" +], function(Class, Tools, Collection, DomUtils) { + "use strict"; + + var nativeEvents = Tools.makeMap("focusin focusout scroll click dblclick mousedown mouseup mousemove mouseover" + + " mouseout mouseenter mouseleave wheel keydown keypress keyup contextmenu", " "); + + var elementIdCache = {}; + var hasMouseWheelEventSupport = "onmousewheel" in document; + var hasWheelEventSupport = false; + + var Control = Class.extend({ + Statics: { + elementIdCache: elementIdCache + }, + + isRtl: function() { + return Control.rtl; + }, + + /** + * Class/id prefix to use for all controls. + * + * @final + * @field {String} classPrefix + */ + classPrefix: "mce-", + + /** + * Constructs a new control instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + * @setting {String} style Style CSS properties to add. + * @setting {String} border Border box values example: 1 1 1 1 + * @setting {String} padding Padding box values example: 1 1 1 1 + * @setting {String} margin Margin box values example: 1 1 1 1 + * @setting {Number} minWidth Minimal width for the control. + * @setting {Number} minHeight Minimal height for the control. + * @setting {String} classes Space separated list of classes to add. + * @setting {String} role WAI-ARIA role to use for control. + * @setting {Boolean} hidden Is the control hidden by default. + * @setting {Boolean} disabled Is the control disabled by default. + * @setting {String} name Name of the control instance. + */ + init: function(settings) { + var self = this, classes, i; + + self.settings = settings = Tools.extend({}, self.Defaults, settings); + + // Initial states + self._id = settings.id || DomUtils.id(); + self._text = self._name = ''; + self._width = self._height = 0; + self._aria = {role: settings.role}; + + // Setup classes + classes = settings.classes; + if (classes) { + classes = classes.split(' '); + classes.map = {}; + i = classes.length; + while (i--) { + classes.map[classes[i]] = true; + } + } + + self._classes = classes || []; + self.visible(true); + + // Set some properties + Tools.each('title text width height name classes visible disabled active value'.split(' '), function(name) { + var value = settings[name], undef; + + if (value !== undef) { + self[name](value); + } else if (self['_' + name] === undef) { + self['_' + name] = false; + } + }); + + self.on('click', function() { + if (self.disabled()) { + return false; + } + }); + + // TODO: Is this needed duplicate code see above? + if (settings.classes) { + Tools.each(settings.classes.split(' '), function(cls) { + self.addClass(cls); + }); + } + + /** + * Name/value object with settings for the current control. + * + * @field {Object} settings + */ + self.settings = settings; + + self._borderBox = self.parseBox(settings.border); + self._paddingBox = self.parseBox(settings.padding); + self._marginBox = self.parseBox(settings.margin); + + if (settings.hidden) { + self.hide(); + } + }, + + // Will generate getter/setter methods for these properties + Properties: 'parent,title,text,width,height,disabled,active,name,value', + + // Will generate empty dummy functions for these + Methods: 'renderHtml', + + /** + * Returns the root element to render controls into. + * + * @method getContainerElm + * @return {Element} HTML DOM element to render into. + */ + getContainerElm: function() { + return document.body; + }, + + /** + * Returns a control instance for the current DOM element. + * + * @method getParentCtrl + * @param {Element} elm HTML dom element to get parent control from. + * @return {tinymce.ui.Control} Control instance or undefined. + */ + getParentCtrl: function(elm) { + var ctrl, lookup = this.getRoot().controlIdLookup; + + while (elm && lookup) { + ctrl = lookup[elm.id]; + if (ctrl) { + break; + } + + elm = elm.parentNode; + } + + return ctrl; + }, + + /** + * Parses the specified box value. A box value contains 1-4 properties in clockwise order. + * + * @method parseBox + * @param {String/Number} value Box value "0 1 2 3" or "0" etc. + * @return {Object} Object with top/right/bottom/left properties. + * @private + */ + parseBox: function(value) { + var len, radix = 10; + + if (!value) { + return; + } + + if (typeof(value) === "number") { + value = value || 0; + + return { + top: value, + left: value, + bottom: value, + right: value + }; + } + + value = value.split(' '); + len = value.length; + + if (len === 1) { + value[1] = value[2] = value[3] = value[0]; + } else if (len === 2) { + value[2] = value[0]; + value[3] = value[1]; + } else if (len === 3) { + value[3] = value[1]; + } + + return { + top: parseInt(value[0], radix) || 0, + right: parseInt(value[1], radix) || 0, + bottom: parseInt(value[2], radix) || 0, + left: parseInt(value[3], radix) || 0 + }; + }, + + borderBox: function() { + return this._borderBox; + }, + + paddingBox: function() { + return this._paddingBox; + }, + + marginBox: function() { + return this._marginBox; + }, + + measureBox: function(elm, prefix) { + function getStyle(name) { + var defaultView = document.defaultView; + + if (defaultView) { + // Remove camelcase + name = name.replace(/[A-Z]/g, function(a) { + return '-' + a; + }); + + return defaultView.getComputedStyle(elm, null).getPropertyValue(name); + } + + return elm.currentStyle[name]; + } + + function getSide(name) { + var val = parseFloat(getStyle(name), 10); + + return isNaN(val) ? 0 : val; + } + + return { + top: getSide(prefix + "TopWidth"), + right: getSide(prefix + "RightWidth"), + bottom: getSide(prefix + "BottomWidth"), + left: getSide(prefix + "LeftWidth") + }; + }, + + /** + * Initializes the current controls layout rect. + * This will be executed by the layout managers to determine the + * default minWidth/minHeight etc. + * + * @method initLayoutRect + * @return {Object} Layout rect instance. + */ + initLayoutRect: function() { + var self = this, settings = self.settings, borderBox, layoutRect; + var elm = self.getEl(), width, height, minWidth, minHeight, autoResize; + var startMinWidth, startMinHeight, initialSize; + + // Measure the current element + borderBox = self._borderBox = self._borderBox || self.measureBox(elm, 'border'); + self._paddingBox = self._paddingBox || self.measureBox(elm, 'padding'); + self._marginBox = self._marginBox || self.measureBox(elm, 'margin'); + initialSize = DomUtils.getSize(elm); + + // Setup minWidth/minHeight and width/height + startMinWidth = settings.minWidth; + startMinHeight = settings.minHeight; + minWidth = startMinWidth || initialSize.width; + minHeight = startMinHeight || initialSize.height; + width = settings.width; + height = settings.height; + autoResize = settings.autoResize; + autoResize = typeof(autoResize) != "undefined" ? autoResize : !width && !height; + + width = width || minWidth; + height = height || minHeight; + + var deltaW = borderBox.left + borderBox.right; + var deltaH = borderBox.top + borderBox.bottom; + + var maxW = settings.maxWidth || 0xFFFF; + var maxH = settings.maxHeight || 0xFFFF; + + // Setup initial layout rect + self._layoutRect = layoutRect = { + x: settings.x || 0, + y: settings.y || 0, + w: width, + h: height, + deltaW: deltaW, + deltaH: deltaH, + contentW: width - deltaW, + contentH: height - deltaH, + innerW: width - deltaW, + innerH: height - deltaH, + startMinWidth: startMinWidth || 0, + startMinHeight: startMinHeight || 0, + minW: Math.min(minWidth, maxW), + minH: Math.min(minHeight, maxH), + maxW: maxW, + maxH: maxH, + autoResize: autoResize, + scrollW: 0 + }; + + self._lastLayoutRect = {}; + + return layoutRect; + }, + + /** + * Getter/setter for the current layout rect. + * + * @method layoutRect + * @param {Object} [newRect] Optional new layout rect. + * @return {tinymce.ui.Control/Object} Current control or rect object. + */ + layoutRect: function(newRect) { + var self = this, curRect = self._layoutRect, lastLayoutRect, size, deltaWidth, deltaHeight, undef, repaintControls; + + // Initialize default layout rect + if (!curRect) { + curRect = self.initLayoutRect(); + } + + // Set new rect values + if (newRect) { + // Calc deltas between inner and outer sizes + deltaWidth = curRect.deltaW; + deltaHeight = curRect.deltaH; + + // Set x position + if (newRect.x !== undef) { + curRect.x = newRect.x; + } + + // Set y position + if (newRect.y !== undef) { + curRect.y = newRect.y; + } + + // Set minW + if (newRect.minW !== undef) { + curRect.minW = newRect.minW; + } + + // Set minH + if (newRect.minH !== undef) { + curRect.minH = newRect.minH; + } + + // Set new width and calculate inner width + size = newRect.w; + if (size !== undef) { + size = size < curRect.minW ? curRect.minW : size; + size = size > curRect.maxW ? curRect.maxW : size; + curRect.w = size; + curRect.innerW = size - deltaWidth; + } + + // Set new height and calculate inner height + size = newRect.h; + if (size !== undef) { + size = size < curRect.minH ? curRect.minH : size; + size = size > curRect.maxH ? curRect.maxH : size; + curRect.h = size; + curRect.innerH = size - deltaHeight; + } + + // Set new inner width and calculate width + size = newRect.innerW; + if (size !== undef) { + size = size < curRect.minW - deltaWidth ? curRect.minW - deltaWidth : size; + size = size > curRect.maxW - deltaWidth ? curRect.maxW - deltaWidth : size; + curRect.innerW = size; + curRect.w = size + deltaWidth; + } + + // Set new height and calculate inner height + size = newRect.innerH; + if (size !== undef) { + size = size < curRect.minH - deltaHeight ? curRect.minH - deltaHeight : size; + size = size > curRect.maxH - deltaHeight ? curRect.maxH - deltaHeight : size; + curRect.innerH = size; + curRect.h = size + deltaHeight; + } + + // Set new contentW + if (newRect.contentW !== undef) { + curRect.contentW = newRect.contentW; + } + + // Set new contentH + if (newRect.contentH !== undef) { + curRect.contentH = newRect.contentH; + } + + // Compare last layout rect with the current one to see if we need to repaint or not + lastLayoutRect = self._lastLayoutRect; + if (lastLayoutRect.x !== curRect.x || lastLayoutRect.y !== curRect.y || + lastLayoutRect.w !== curRect.w || lastLayoutRect.h !== curRect.h) { + repaintControls = Control.repaintControls; + + if (repaintControls) { + if (repaintControls.map && !repaintControls.map[self._id]) { + repaintControls.push(self); + repaintControls.map[self._id] = true; + } + } + + lastLayoutRect.x = curRect.x; + lastLayoutRect.y = curRect.y; + lastLayoutRect.w = curRect.w; + lastLayoutRect.h = curRect.h; + } + + return self; + } + + return curRect; + }, + + /** + * Repaints the control after a layout operation. + * + * @method repaint + */ + repaint: function() { + var self = this, style, bodyStyle, rect, borderBox, borderW = 0, borderH = 0, lastRepaintRect, round; + + // Use Math.round on all values on IE < 9 + round = !document.createRange ? Math.round : function(value) { + return value; + }; + + style = self.getEl().style; + rect = self._layoutRect; + lastRepaintRect = self._lastRepaintRect || {}; + + borderBox = self._borderBox; + borderW = borderBox.left + borderBox.right; + borderH = borderBox.top + borderBox.bottom; + + if (rect.x !== lastRepaintRect.x) { + style.left = round(rect.x) + 'px'; + lastRepaintRect.x = rect.x; + } + + if (rect.y !== lastRepaintRect.y) { + style.top = round(rect.y) + 'px'; + lastRepaintRect.y = rect.y; + } + + if (rect.w !== lastRepaintRect.w) { + style.width = round(rect.w - borderW) + 'px'; + lastRepaintRect.w = rect.w; + } + + if (rect.h !== lastRepaintRect.h) { + style.height = round(rect.h - borderH) + 'px'; + lastRepaintRect.h = rect.h; + } + + // Update body if needed + if (self._hasBody && rect.innerW !== lastRepaintRect.innerW) { + bodyStyle = self.getEl('body').style; + bodyStyle.width = round(rect.innerW) + 'px'; + lastRepaintRect.innerW = rect.innerW; + } + + if (self._hasBody && rect.innerH !== lastRepaintRect.innerH) { + bodyStyle = bodyStyle || self.getEl('body').style; + bodyStyle.height = round(rect.innerH) + 'px'; + lastRepaintRect.innerH = rect.innerH; + } + + self._lastRepaintRect = lastRepaintRect; + self.fire('repaint', {}, false); + }, + + /** + * Binds a callback to the specified event. This event can both be + * native browser events like "click" or custom ones like PostRender. + * + * The callback function will be passed a DOM event like object that enables yout do stop propagation. + * + * @method on + * @param {String} name Name of the event to bind. For example "click". + * @param {String/function} callback Callback function to execute ones the event occurs. + * @return {tinymce.ui.Control} Current control object. + */ + on: function(name, callback) { + var self = this, bindings, handlers, names, i; + + function resolveCallbackName(name) { + var callback, scope; + + return function(e) { + if (!callback) { + self.parents().each(function(ctrl) { + var callbacks = ctrl.settings.callbacks; + + if (callbacks && (callback = callbacks[name])) { + scope = ctrl; + return false; + } + }); + } + + return callback.call(scope, e); + }; + } + + if (callback) { + if (typeof(callback) == 'string') { + callback = resolveCallbackName(callback); + } + + names = name.toLowerCase().split(' '); + i = names.length; + while (i--) { + name = names[i]; + + bindings = self._bindings; + if (!bindings) { + bindings = self._bindings = {}; + } + + handlers = bindings[name]; + if (!handlers) { + handlers = bindings[name] = []; + } + + handlers.push(callback); + + if (nativeEvents[name]) { + if (!self._nativeEvents) { + self._nativeEvents = {name: true}; + } else { + self._nativeEvents[name] = true; + } + + if (self._rendered) { + self.bindPendingEvents(); + } + } + } + } + + return self; + }, + + /** + * Unbinds the specified event and optionally a specific callback. If you omit the name + * parameter all event handlers will be removed. If you omit the callback all event handles + * by the specified name will be removed. + * + * @method off + * @param {String} [name] Name for the event to unbind. + * @param {function} [callback] Callback function to unbind. + * @return {mxex.ui.Control} Current control object. + */ + off: function(name, callback) { + var self = this, i, bindings = self._bindings, handlers, bindingName, names, hi; + + if (bindings) { + if (name) { + names = name.toLowerCase().split(' '); + i = names.length; + while (i--) { + name = names[i]; + handlers = bindings[name]; + + // Unbind all handlers + if (!name) { + for (bindingName in bindings) { + bindings[bindingName].length = 0; + } + + return self; + } + + if (handlers) { + // Unbind all by name + if (!callback) { + handlers.length = 0; + } else { + // Unbind specific ones + hi = handlers.length; + while (hi--) { + if (handlers[hi] === callback) { + handlers.splice(hi, 1); + } + } + } + } + } + } else { + self._bindings = []; + } + } + + return self; + }, + + /** + * Fires the specified event by name and arguments on the control. This will execute all + * bound event handlers. + * + * @method fire + * @param {String} name Name of the event to fire. + * @param {Object} [args] Arguments to pass to the event. + * @param {Boolean} [bubble] Value to control bubbeling. Defaults to true. + * @return {Object} Current arguments object. + */ + fire: function(name, args, bubble) { + var self = this, i, l, handlers, parentCtrl; + + name = name.toLowerCase(); + + // Dummy function that gets replaced on the delegation state functions + function returnFalse() { + return false; + } + + // Dummy function that gets replaced on the delegation state functions + function returnTrue() { + return true; + } + + // Setup empty object if args is omited + args = args || {}; + + // Stick type into event object + if (!args.type) { + args.type = name; + } + + // Stick control into event + if (!args.control) { + args.control = self; + } + + // Add event delegation methods if they are missing + if (!args.preventDefault) { + // Add preventDefault method + args.preventDefault = function() { + args.isDefaultPrevented = returnTrue; + }; + + // Add stopPropagation + args.stopPropagation = function() { + args.isPropagationStopped = returnTrue; + }; + + // Add stopImmediatePropagation + args.stopImmediatePropagation = function() { + args.isImmediatePropagationStopped = returnTrue; + }; + + // Add event delegation states + args.isDefaultPrevented = returnFalse; + args.isPropagationStopped = returnFalse; + args.isImmediatePropagationStopped = returnFalse; + } + + if (self._bindings) { + handlers = self._bindings[name]; + + if (handlers) { + for (i = 0, l = handlers.length; i < l; i++) { + // Execute callback and break if the callback returns a false + if (!args.isImmediatePropagationStopped() && handlers[i].call(self, args) === false) { + break; + } + } + } + } + + // Bubble event up to parent controls + if (bubble !== false) { + parentCtrl = self.parent(); + while (parentCtrl && !args.isPropagationStopped()) { + parentCtrl.fire(name, args, false); + parentCtrl = parentCtrl.parent(); + } + } + + return args; + }, + + /** + * Returns true/false if the specified event has any listeners. + * + * @method hasEventListeners + * @param {String} name Name of the event to check for. + * @return {Boolean} True/false state if the event has listeners. + */ + hasEventListeners: function(name) { + return name in this._bindings; + }, + + /** + * Returns a control collection with all parent controls. + * + * @method parents + * @param {String} selector Optional selector expression to find parents. + * @return {tinymce.ui.Collection} Collection with all parent controls. + */ + parents: function(selector) { + var self = this, ctrl, parents = new Collection(); + + // Add each parent to collection + for (ctrl = self.parent(); ctrl; ctrl = ctrl.parent()) { + parents.add(ctrl); + } + + // Filter away everything that doesn't match the selector + if (selector) { + parents = parents.filter(selector); + } + + return parents; + }, + + /** + * Returns the control next to the current control. + * + * @method next + * @return {tinymce.ui.Control} Next control instance. + */ + next: function() { + var parentControls = this.parent().items(); + + return parentControls[parentControls.indexOf(this) + 1]; + }, + + /** + * Returns the control previous to the current control. + * + * @method prev + * @return {tinymce.ui.Control} Previous control instance. + */ + prev: function() { + var parentControls = this.parent().items(); + + return parentControls[parentControls.indexOf(this) - 1]; + }, + + /** + * Find the common ancestor for two control instances. + * + * @method findCommonAncestor + * @param {tinymce.ui.Control} ctrl1 First control. + * @param {tinymce.ui.Control} ctrl2 Second control. + * @return {tinymce.ui.Control} Ancestor control instance. + */ + findCommonAncestor: function(ctrl1, ctrl2) { + var parentCtrl; + + while (ctrl1) { + parentCtrl = ctrl2; + + while (parentCtrl && ctrl1 != parentCtrl) { + parentCtrl = parentCtrl.parent(); + } + + if (ctrl1 == parentCtrl) { + break; + } + + ctrl1 = ctrl1.parent(); + } + + return ctrl1; + }, + + /** + * Returns true/false if the specific control has the specific class. + * + * @method hasClass + * @param {String} cls Class to check for. + * @param {String} [group] Sub element group name. + * @return {Boolean} True/false if the control has the specified class. + */ + hasClass: function(cls, group) { + var classes = this._classes[group || 'control']; + + cls = this.classPrefix + cls; + + return classes && !!classes.map[cls]; + }, + + /** + * Adds the specified class to the control + * + * @method addClass + * @param {String} cls Class to check for. + * @param {String} [group] Sub element group name. + * @return {tinymce.ui.Control} Current control object. + */ + addClass: function(cls, group) { + var self = this, classes, elm; + + cls = this.classPrefix + cls; + classes = self._classes[group || 'control']; + + if (!classes) { + classes = []; + classes.map = {}; + self._classes[group || 'control'] = classes; + } + + if (!classes.map[cls]) { + classes.map[cls] = cls; + classes.push(cls); + + if (self._rendered) { + elm = self.getEl(group); + + if (elm) { + elm.className = classes.join(' '); + } + } + } + + return self; + }, + + /** + * Removes the specified class from the control. + * + * @method removeClass + * @param {String} cls Class to remove. + * @param {String} [group] Sub element group name. + * @return {tinymce.ui.Control} Current control object. + */ + removeClass: function(cls, group) { + var self = this, classes, i, elm; + + cls = this.classPrefix + cls; + classes = self._classes[group || 'control']; + if (classes && classes.map[cls]) { + delete classes.map[cls]; + + i = classes.length; + while (i--) { + if (classes[i] === cls) { + classes.splice(i, 1); + } + } + } + + if (self._rendered) { + elm = self.getEl(group); + + if (elm) { + elm.className = classes.join(' '); + } + } + + return self; + }, + + /** + * Toggles the specified class on the control. + * + * @method toggleClass + * @param {String} cls Class to remove. + * @param {Boolean} state True/false state to add/remove class. + * @param {String} [group] Sub element group name. + * @return {tinymce.ui.Control} Current control object. + */ + toggleClass: function(cls, state, group) { + var self = this; + + if (state) { + self.addClass(cls, group); + } else { + self.removeClass(cls, group); + } + + return self; + }, + + /** + * Returns the class string for the specified group name. + * + * @method classes + * @param {String} [group] Group to get clases by. + * @return {String} Classes for the specified group. + */ + classes: function(group) { + var classes = this._classes[group || 'control']; + + return classes ? classes.join(' ') : ''; + }, + + /** + * Sets the inner HTML of the control element. + * + * @method innerHtml + * @param {String} html Html string to set as inner html. + * @return {tinymce.ui.Control} Current control object. + */ + innerHtml: function(html) { + DomUtils.innerHtml(this.getEl(), html); + return this; + }, + + /** + * Returns the control DOM element or sub element. + * + * @method getEl + * @param {String} [suffix] Suffix to get element by. + * @param {Boolean} [dropCache] True if the cache for the element should be dropped. + * @return {Element} HTML DOM element for the current control or it's children. + */ + getEl: function(suffix, dropCache) { + var elm, id = suffix ? this._id + '-' + suffix : this._id; + + elm = elementIdCache[id] = (dropCache === true ? null : elementIdCache[id]) || DomUtils.get(id); + + return elm; + }, + + /** + * Sets/gets the visible for the control. + * + * @method visible + * @param {Boolean} state Value to set to control. + * @return {Boolean/tinymce.ui.Control} Current control on a set operation or current state on a get. + */ + visible: function(state) { + var self = this, parentCtrl; + + if (typeof(state) !== "undefined") { + if (self._visible !== state) { + if (self._rendered) { + self.getEl().style.display = state ? '' : 'none'; + } + + self._visible = state; + + // Parent container needs to reflow + parentCtrl = self.parent(); + if (parentCtrl) { + parentCtrl._lastRect = null; + } + + self.fire(state ? 'show' : 'hide'); + } + + return self; + } + + return self._visible; + }, + + /** + * Sets the visible state to true. + * + * @method show + * @return {tinymce.ui.Control} Current control instance. + */ + show: function() { + return this.visible(true); + }, + + /** + * Sets the visible state to false. + * + * @method hide + * @return {tinymce.ui.Control} Current control instance. + */ + hide: function() { + return this.visible(false); + }, + + /** + * Focuses the current control. + * + * @method focus + * @return {tinymce.ui.Control} Current control instance. + */ + focus: function() { + try { + this.getEl().focus(); + } catch (ex) { + // Ignore IE error + } + + return this; + }, + + /** + * Blurs the current control. + * + * @method blur + * @return {tinymce.ui.Control} Current control instance. + */ + blur: function() { + this.getEl().blur(); + + return this; + }, + + /** + * Sets the specified aria property. + * + * @method aria + * @param {String} name Name of the aria property to set. + * @param {String} value Value of the aria property. + * @return {tinymce.ui.Control} Current control instance. + */ + aria: function(name, value) { + var self = this, elm = self.getEl(self.ariaTarget); + + if (typeof(value) === "undefined") { + return self._aria[name]; + } else { + self._aria[name] = value; + } + + if (self._rendered) { + elm.setAttribute(name == 'role' ? name : 'aria-' + name, value); + } + + return self; + }, + + /** + * Encodes the specified string with HTML entities. It will also + * translate the string to different languages. + * + * @method encode + * @param {String/Object/Array} text Text to entity encode. + * @param {Boolean} [translate=true] False if the contents shouldn't be translated. + * @return {String} Encoded and possible traslated string. + */ + encode: function(text, translate) { + if (translate !== false && Control.translate) { + text = Control.translate(text); + } + + return (text || '').replace(/[&<>"]/g, function(match) { + return '&#' + match.charCodeAt(0) + ';'; + }); + }, + + /** + * Adds items before the current control. + * + * @method before + * @param {Array/tinymce.ui.Collection} items Array of items to prepend before this control. + * @return {tinymce.ui.Control} Current control instance. + */ + before: function(items) { + var self = this, parent = self.parent(); + + if (parent) { + parent.insert(items, parent.items().indexOf(self), true); + } + + return self; + }, + + /** + * Adds items after the current control. + * + * @method after + * @param {Array/tinymce.ui.Collection} items Array of items to append after this control. + * @return {tinymce.ui.Control} Current control instance. + */ + after: function(items) { + var self = this, parent = self.parent(); + + if (parent) { + parent.insert(items, parent.items().indexOf(self)); + } + + return self; + }, + + /** + * Removes the current control from DOM and from UI collections. + * + * @method remove + * @return {tinymce.ui.Control} Current control instance. + */ + remove: function() { + var self = this, elm = self.getEl(), parent = self.parent(), newItems, i; + + if (self.items) { + var controls = self.items().toArray(); + i = controls.length; + while (i--) { + controls[i].remove(); + } + } + + if (parent && parent.items) { + newItems = []; + + parent.items().each(function(item) { + if (item !== self) { + newItems.push(item); + } + }); + + parent.items().set(newItems); + parent._lastRect = null; + } + + if (self._eventsRoot && self._eventsRoot == self) { + DomUtils.off(elm); + } + + var lookup = self.getRoot().controlIdLookup; + if (lookup) { + delete lookup[self._id]; + } + + delete elementIdCache[self._id]; + + if (elm && elm.parentNode) { + var nodes = elm.getElementsByTagName('*'); + + i = nodes.length; + while (i--) { + delete elementIdCache[nodes[i].id]; + } + + elm.parentNode.removeChild(elm); + } + + self._rendered = false; + + return self; + }, + + /** + * Renders the control before the specified element. + * + * @method renderBefore + * @param {Element} elm Element to render before. + * @return {tinymce.ui.Control} Current control instance. + */ + renderBefore: function(elm) { + var self = this; + + elm.parentNode.insertBefore(DomUtils.createFragment(self.renderHtml()), elm); + self.postRender(); + + return self; + }, + + /** + * Renders the control to the specified element. + * + * @method renderBefore + * @param {Element} elm Element to render to. + * @return {tinymce.ui.Control} Current control instance. + */ + renderTo: function(elm) { + var self = this; + + elm = elm || self.getContainerElm(); + elm.appendChild(DomUtils.createFragment(self.renderHtml())); + self.postRender(); + + return self; + }, + + /** + * Post render method. Called after the control has been rendered to the target. + * + * @method postRender + * @return {tinymce.ui.Control} Current control instance. + */ + postRender: function() { + var self = this, settings = self.settings, elm, box, parent, name, parentEventsRoot; + + // Bind on settings + for (name in settings) { + if (name.indexOf("on") === 0) { + self.on(name.substr(2), settings[name]); + } + } + + if (self._eventsRoot) { + for (parent = self.parent(); !parentEventsRoot && parent; parent = parent.parent()) { + parentEventsRoot = parent._eventsRoot; + } + + if (parentEventsRoot) { + for (name in parentEventsRoot._nativeEvents) { + self._nativeEvents[name] = true; + } + } + } + + self.bindPendingEvents(); + + if (settings.style) { + elm = self.getEl(); + if (elm) { + elm.setAttribute('style', settings.style); + elm.style.cssText = settings.style; + } + } + + if (!self._visible) { + DomUtils.css(self.getEl(), 'display', 'none'); + } + + if (self.settings.border) { + box = self.borderBox(); + DomUtils.css(self.getEl(), { + 'border-top-width': box.top, + 'border-right-width': box.right, + 'border-bottom-width': box.bottom, + 'border-left-width': box.left + }); + } + + // Add instance to lookup + var root = self.getRoot(); + if (!root.controlIdLookup) { + root.controlIdLookup = {}; + } + + root.controlIdLookup[self._id] = self; + + for (var key in self._aria) { + self.aria(key, self._aria[key]); + } + + self.fire('postrender', {}, false); + }, + + /** + * Scrolls the current control into view. + * + * @method scrollIntoView + * @param {String} align Alignment in view top|center|bottom. + * @return {tinymce.ui.Control} Current control instance. + */ + scrollIntoView: function(align) { + function getOffset(elm, rootElm) { + var x, y, parent = elm; + + x = y = 0; + while (parent && parent != rootElm && parent.nodeType) { + x += parent.offsetLeft || 0; + y += parent.offsetTop || 0; + parent = parent.offsetParent; + } + + return {x: x, y: y}; + } + + var elm = this.getEl(), parentElm = elm.parentNode; + var x, y, width, height, parentWidth, parentHeight; + var pos = getOffset(elm, parentElm); + + x = pos.x; + y = pos.y; + width = elm.offsetWidth; + height = elm.offsetHeight; + parentWidth = parentElm.clientWidth; + parentHeight = parentElm.clientHeight; + + if (align == "end") { + x -= parentWidth - width; + y -= parentHeight - height; + } else if (align == "center") { + x -= (parentWidth / 2) - (width / 2); + y -= (parentHeight / 2) - (height / 2); + } + + parentElm.scrollLeft = x; + parentElm.scrollTop = y; + + return this; + }, + + /** + * Binds pending DOM events. + * + * @private + */ + bindPendingEvents: function() { + var self = this, i, l, parents, eventRootCtrl, nativeEvents, name; + + function delegate(e) { + var control = self.getParentCtrl(e.target); + + if (control) { + control.fire(e.type, e); + } + } + + function mouseLeaveHandler() { + var ctrl = eventRootCtrl._lastHoverCtrl; + + if (ctrl) { + ctrl.fire("mouseleave", {target: ctrl.getEl()}); + + ctrl.parents().each(function(ctrl) { + ctrl.fire("mouseleave", {target: ctrl.getEl()}); + }); + + eventRootCtrl._lastHoverCtrl = null; + } + } + + function mouseEnterHandler(e) { + var ctrl = self.getParentCtrl(e.target), lastCtrl = eventRootCtrl._lastHoverCtrl, idx = 0, i, parents, lastParents; + + // Over on a new control + if (ctrl !== lastCtrl) { + eventRootCtrl._lastHoverCtrl = ctrl; + + parents = ctrl.parents().toArray().reverse(); + parents.push(ctrl); + + if (lastCtrl) { + lastParents = lastCtrl.parents().toArray().reverse(); + lastParents.push(lastCtrl); + + for (idx = 0; idx < lastParents.length; idx++) { + if (parents[idx] !== lastParents[idx]) { + break; + } + } + + for (i = lastParents.length - 1; i >= idx; i--) { + lastCtrl = lastParents[i]; + lastCtrl.fire("mouseleave", { + target : lastCtrl.getEl() + }); + } + } + + for (i = idx; i < parents.length; i++) { + ctrl = parents[i]; + ctrl.fire("mouseenter", { + target : ctrl.getEl() + }); + } + } + } + + function fixWheelEvent(e) { + e.preventDefault(); + + if (e.type == "mousewheel") { + e.deltaY = -1 / 40 * e.wheelDelta; + + if (e.wheelDeltaX) { + e.deltaX = -1 / 40 * e.wheelDeltaX; + } + } else { + e.deltaX = 0; + e.deltaY = e.detail; + } + + e = self.fire("wheel", e); + } + + self._rendered = true; + + nativeEvents = self._nativeEvents; + if (nativeEvents) { + // Find event root element if it exists + parents = self.parents().toArray(); + parents.unshift(self); + for (i = 0, l = parents.length; !eventRootCtrl && i < l; i++) { + eventRootCtrl = parents[i]._eventsRoot; + } + + // Event root wasn't found the use the root control + if (!eventRootCtrl) { + eventRootCtrl = parents[parents.length - 1] || self; + } + + // Set the eventsRoot property on children that didn't have it + self._eventsRoot = eventRootCtrl; + for (l = i, i = 0; i < l; i++) { + parents[i]._eventsRoot = eventRootCtrl; + } + + // Bind native event delegates + for (name in nativeEvents) { + if (!nativeEvents) { + return false; + } + + if (name === "wheel" && !hasWheelEventSupport) { + if (hasMouseWheelEventSupport) { + DomUtils.on(self.getEl(), "mousewheel", fixWheelEvent); + } else { + DomUtils.on(self.getEl(), "DOMMouseScroll", fixWheelEvent); + } + + continue; + } + + // Special treatment for mousenter/mouseleave since these doesn't bubble + if (name === "mouseenter" || name === "mouseleave") { + // Fake mousenter/mouseleave + if (!eventRootCtrl._hasMouseEnter) { + DomUtils.on(eventRootCtrl.getEl(), "mouseleave", mouseLeaveHandler); + DomUtils.on(eventRootCtrl.getEl(), "mouseover", mouseEnterHandler); + eventRootCtrl._hasMouseEnter = 1; + } + } else if (!eventRootCtrl[name]) { + DomUtils.on(eventRootCtrl.getEl(), name, delegate); + eventRootCtrl[name] = true; + } + + // Remove the event once it's bound + nativeEvents[name] = false; + } + } + }, + + getRoot: function() { + var ctrl = this, rootControl, parents = []; + + while (ctrl) { + if (ctrl.rootControl) { + rootControl = ctrl.rootControl; + break; + } + + parents.push(ctrl); + rootControl = ctrl; + ctrl = ctrl.parent(); + } + + if (!rootControl) { + rootControl = this; + } + + var i = parents.length; + while (i--) { + parents[i].rootControl = rootControl; + } + + return rootControl; + }, + + /** + * Reflows the current control and it's parents. + * This should be used after you for example append children to the current control so + * that the layout managers know that they need to reposition everything. + * + * @example + * container.append({type: 'button', text: 'My button'}).reflow(); + * + * @method reflow + * @return {tinymce.ui.Control} Current control instance. + */ + reflow: function() { + this.repaint(); + + return this; + } + + /** + * Sets/gets the parent container for the control. + * + * @method parent + * @param {tinymce.ui.Container} parent Optional parent to set. + * @return {tinymce.ui.Control} Parent control or the current control on a set action. + */ + // parent: function(parent) {} -- Generated + + /** + * Sets/gets the text for the control. + * + * @method text + * @param {String} value Value to set to control. + * @return {String/tinymce.ui.Control} Current control on a set operation or current value on a get. + */ + // text: function(value) {} -- Generated + + /** + * Sets/gets the width for the control. + * + * @method width + * @param {Number} value Value to set to control. + * @return {Number/tinymce.ui.Control} Current control on a set operation or current value on a get. + */ + // width: function(value) {} -- Generated + + /** + * Sets/gets the height for the control. + * + * @method height + * @param {Number} value Value to set to control. + * @return {Number/tinymce.ui.Control} Current control on a set operation or current value on a get. + */ + // height: function(value) {} -- Generated + + /** + * Sets/gets the disabled state on the control. + * + * @method disabled + * @param {Boolean} state Value to set to control. + * @return {Boolean/tinymce.ui.Control} Current control on a set operation or current state on a get. + */ + // disabled: function(state) {} -- Generated + + /** + * Sets/gets the active for the control. + * + * @method active + * @param {Boolean} state Value to set to control. + * @return {Boolean/tinymce.ui.Control} Current control on a set operation or current state on a get. + */ + // active: function(state) {} -- Generated + + /** + * Sets/gets the name for the control. + * + * @method name + * @param {String} value Value to set to control. + * @return {String/tinymce.ui.Control} Current control on a set operation or current value on a get. + */ + // name: function(value) {} -- Generated + + /** + * Sets/gets the title for the control. + * + * @method title + * @param {String} value Value to set to control. + * @return {String/tinymce.ui.Control} Current control on a set operation or current value on a get. + */ + // title: function(value) {} -- Generated + }); + + return Control; +}); + +// Included from: js/tinymce/classes/ui/Factory.js + +/** + * Factory.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*global tinymce:true */ + +/** + * This class is a factory for control instances. This enables you + * to create instances of controls without having to require the UI controls directly. + * + * It also allow you to override or add new control types. + * + * @class tinymce.ui.Factory + */ +define("tinymce/ui/Factory", [], function() { + "use strict"; + + var types = {}, namespaceInit; + + return { + /** + * Adds a new control instance type to the factory. + * + * @method add + * @param {String} type Type name for example "button". + * @param {function} typeClass Class type function. + */ + add: function(type, typeClass) { + types[type.toLowerCase()] = typeClass; + }, + + /** + * Returns true/false if the specified type exists or not. + * + * @method has + * @param {String} type Type to look for. + * @return {Boolean} true/false if the control by name exists. + */ + has: function(type) { + return !!types[type.toLowerCase()]; + }, + + /** + * Creates a new control instance based on the settings provided. The instance created will be + * based on the specified type property it can also create whole structures of components out of + * the specified JSON object. + * + * @example + * tinymce.ui.Factory.create({ + * type: 'button', + * text: 'Hello world!' + * }); + * + * @method create + * @param {Object/String} settings Name/Value object with items used to create the type. + * @return {tinymce.ui.Control} Control instance based on the specified type. + */ + create: function(type, settings) { + var ControlType, name, namespace; + + // Build type lookup + if (!namespaceInit) { + namespace = tinymce.ui; + + for (name in namespace) { + types[name.toLowerCase()] = namespace[name]; + } + + namespaceInit = true; + } + + // If string is specified then use it as the type + if (typeof(type) == 'string') { + settings = settings || {}; + settings.type = type; + } else { + settings = type; + type = settings.type; + } + + // Find control type + type = type.toLowerCase(); + ControlType = types[type]; + + // #if debug + + if (!ControlType) { + throw new Error("Could not find control by type: " + type); + } + + // #endif + + ControlType = new ControlType(settings); + ControlType.type = type; // Set the type on the instance, this will be used by the Selector engine + + return ControlType; + } + }; +}); + +// Included from: js/tinymce/classes/ui/KeyboardNavigation.js + +/** + * KeyboardNavigation.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class handles keyboard navigation of controls and elements. + * + * @class tinymce.ui.KeyboardNavigation + */ +define("tinymce/ui/KeyboardNavigation", [ +], function() { + "use strict"; + + /** + * This class handles all keyboard navigation for WAI-ARIA support. Each root container + * gets an instance of this class. + * + * @constructor + */ + return function(settings) { + var root = settings.root, focusedElement, focusedControl; + + focusedElement = document.activeElement; + focusedControl = root.getParentCtrl(focusedElement); + + /** + * Returns the currently focused elements wai aria role of the currently + * focused element or specified element. + * + * @private + * @param {Element} elm Optional element to get role from. + * @return {String} Role of specified element. + */ + function getRole(elm) { + elm = elm || focusedElement; + + return elm && elm.getAttribute('role'); + } + + /** + * Returns the wai role of the parent element of the currently + * focused element or specified element. + * + * @private + * @param {Element} elm Optional element to get parent role from. + * @return {String} Role of the first parent that has a role. + */ + function getParentRole(elm) { + var role, parent = elm || focusedElement; + + while ((parent = parent.parentNode)) { + if ((role = getRole(parent))) { + return role; + } + } + } + + /** + * Returns a wai aria property by name for example aria-selected. + * + * @private + * @param {String} name Name of the aria property to get for example "disabled". + * @return {String} Aria property value. + */ + function getAriaProp(name) { + var elm = focusedElement; + + if (elm) { + return elm.getAttribute('aria-' + name); + } + } + + /** + * Is the element a text input element or not. + * + * @private + * @param {Element} elm Element to check if it's an text input element or not. + * @return {Boolean} True/false if the element is a text element or not. + */ + function isTextInputElement(elm) { + // Notice: since type can be "email" etc we don't check the type + // So all input elements gets treated as text input elements + return elm.tagName == "INPUT" || elm.tagName == "TEXTAREA"; + } + + /** + * Returns true/false if the specified element can be focused or not. + * + * @private + * @param {Element} elm DOM element to check if it can be focused or not. + * @return {Boolean} True/false if the element can have focus. + */ + function canFocus(elm) { + if (isTextInputElement(elm) && !elm.hidden) { + return true; + } + + if (/^(button|menuitem|checkbox|tab|menuitemcheckbox|option|gridcell)$/.test(getRole(elm))) { + return true; + } + + return false; + } + + /** + * Returns an array of focusable visible elements within the specified container element. + * + * @private + * @param {Element} elm DOM element to find focusable elements within. + * @return {Array} Array of focusable elements. + */ + function getFocusElements(elm) { + var elements = []; + + function collect(elm) { + if (elm.nodeType != 1 || elm.style.display == 'none') { + return; + } + + if (canFocus(elm)) { + elements.push(elm); + } + + for (var i = 0; i < elm.childNodes.length; i++) { + collect(elm.childNodes[i]); + } + } + + collect(elm || root.getEl()); + + return elements; + } + + /** + * Returns the navigation root control for the specified control. The navigation root + * is the control that the keyboard navigation gets scoped to for example a menubar or toolbar group. + * It will look for parents of the specified target control or the currenty focused control if this option is omitted. + * + * @private + * @param {tinymce.ui.Control} targetControl Optional target control to find root of. + * @return {tinymce.ui.Control} Navigation root control. + */ + function getNavigationRoot(targetControl) { + var navigationRoot, controls; + + targetControl = targetControl || focusedControl; + controls = targetControl.parents().toArray(); + controls.unshift(targetControl); + + for (var i = 0; i < controls.length; i++) { + navigationRoot = controls[i]; + + if (navigationRoot.settings.ariaRoot) { + break; + } + } + + return navigationRoot; + } + + /** + * Focuses the first item in the specified targetControl element or the last aria index if the + * navigation root has the ariaRemember option enabled. + * + * @private + * @param {tinymce.ui.Control} targetControl Target control to focus the first item in. + */ + function focusFirst(targetControl) { + var navigationRoot = getNavigationRoot(targetControl); + var focusElements = getFocusElements(navigationRoot.getEl()); + + if (navigationRoot.settings.ariaRemember && "lastAriaIndex" in navigationRoot) { + moveFocusToIndex(navigationRoot.lastAriaIndex, focusElements); + } else { + moveFocusToIndex(0, focusElements); + } + } + + /** + * Moves the focus to the specified index within the elements list. + * This will scope the index to the size of the element list if it changed. + * + * @private + * @param {Number} idx Specified index to move to. + * @param {Array} elements Array with dom elements to move focus within. + * @return {Number} Input index or a changed index if it was out of range. + */ + function moveFocusToIndex(idx, elements) { + if (idx < 0) { + idx = elements.length - 1; + } else if (idx >= elements.length) { + idx = 0; + } + + if (elements[idx]) { + elements[idx].focus(); + } + + return idx; + } + + /** + * Moves the focus forwards or backwards. + * + * @private + * @param {Number} dir Direction to move in positive means forward, negative means backwards. + * @param {Array} elements Optional array of elements to move within defaults to the current navigation roots elements. + */ + function moveFocus(dir, elements) { + var idx = -1, navigationRoot = getNavigationRoot(); + + elements = elements || getFocusElements(navigationRoot.getEl()); + + for (var i = 0; i < elements.length; i++) { + if (elements[i] === focusedElement) { + idx = i; + } + } + + idx += dir; + navigationRoot.lastAriaIndex = moveFocusToIndex(idx, elements); + } + + /** + * Moves the focus to the left this is called by the left key. + * + * @private + */ + function left() { + var parentRole = getParentRole(); + + if (parentRole == "tablist") { + moveFocus(-1, getFocusElements(focusedElement.parentNode)); + } else if (focusedControl.parent().submenu) { + cancel(); + } else { + moveFocus(-1); + } + } + + /** + * Moves the focus to the right this is called by the right key. + * + * @private + */ + function right() { + var role = getRole(), parentRole = getParentRole(); + + if (parentRole == "tablist") { + moveFocus(1, getFocusElements(focusedElement.parentNode)); + } else if (role == "menuitem" && parentRole == "menu" && getAriaProp('haspopup')) { + enter(); + } else { + moveFocus(1); + } + } + + /** + * Moves the focus to the up this is called by the up key. + * + * @private + */ + function up() { + moveFocus(-1); + } + + /** + * Moves the focus to the up this is called by the down key. + * + * @private + */ + function down() { + var role = getRole(), parentRole = getParentRole(); + + if (role == "menuitem" && parentRole == "menubar") { + enter(); + } else if (role == "button" && getAriaProp('haspopup')) { + enter({key: 'down'}); + } else { + moveFocus(1); + } + } + + /** + * Moves the focus to the next item or previous item depending on shift key. + * + * @private + * @param {DOMEvent} e DOM event object. + */ + function tab(e) { + var parentRole = getParentRole(); + + if (parentRole == "tablist") { + var elm = getFocusElements(focusedControl.getEl('body'))[0]; + + if (elm) { + elm.focus(); + } + } else { + moveFocus(e.shiftKey ? -1 : 1); + } + } + + /** + * Calls the cancel event on the currently focused control. This is normally done using the Esc key. + * + * @private + */ + function cancel() { + focusedControl.fire('cancel'); + } + + /** + * Calls the click event on the currently focused control. This is normally done using the Enter/Space keys. + * + * @private + * @param {Object} aria Optional aria data to pass along with the enter event. + */ + function enter(aria) { + aria = aria || {}; + focusedControl.fire('click', {target: focusedElement, aria: aria}); + } + + root.on('keydown', function(e) { + function handleNonTabEvent(e, handler) { + // Ignore non tab keys for text elements + if (isTextInputElement(focusedElement)) { + return; + } + + if (handler(e) !== false) { + e.preventDefault(); + } + } + + if (e.isDefaultPrevented()) { + return; + } + + switch (e.keyCode) { + case 37: // DOM_VK_LEFT + handleNonTabEvent(e, left); + break; + + case 39: // DOM_VK_RIGHT + handleNonTabEvent(e, right); + break; + + case 38: // DOM_VK_UP + handleNonTabEvent(e, up); + break; + + case 40: // DOM_VK_DOWN + handleNonTabEvent(e, down); + break; + + case 27: // DOM_VK_ESCAPE + handleNonTabEvent(e, cancel); + break; + + case 14: // DOM_VK_ENTER + case 13: // DOM_VK_RETURN + case 32: // DOM_VK_SPACE + handleNonTabEvent(e, enter); + break; + + case 9: // DOM_VK_TAB + if (tab(e) !== false) { + e.preventDefault(); + } + break; + } + }); + + root.on('focusin', function(e) { + focusedElement = e.target; + focusedControl = e.control; + }); + + return { + focusFirst: focusFirst + }; + }; +}); + +// Included from: js/tinymce/classes/ui/Container.js + +/** + * Container.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Container control. This is extended by all controls that can have + * children such as panels etc. You can also use this class directly as an + * generic container instance. The container doesn't have any specific role or style. + * + * @-x-less Container.less + * @class tinymce.ui.Container + * @extends tinymce.ui.Control + */ +define("tinymce/ui/Container", [ + "tinymce/ui/Control", + "tinymce/ui/Collection", + "tinymce/ui/Selector", + "tinymce/ui/Factory", + "tinymce/ui/KeyboardNavigation", + "tinymce/util/Tools", + "tinymce/ui/DomUtils" +], function(Control, Collection, Selector, Factory, KeyboardNavigation, Tools, DomUtils) { + "use strict"; + + var selectorCache = {}; + + return Control.extend({ + layout: '', + innerClass: 'container-inner', + + /** + * Constructs a new control instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + * @setting {Array} items Items to add to container in JSON format or control instances. + * @setting {String} layout Layout manager by name to use. + * @setting {Object} defaults Default settings to apply to all items. + */ + init: function(settings) { + var self = this; + + self._super(settings); + settings = self.settings; + self._fixed = settings.fixed; + self._items = new Collection(); + + if (self.isRtl()) { + self.addClass('rtl'); + } + + self.addClass('container'); + self.addClass('container-body', 'body'); + + if (settings.containerCls) { + self.addClass(settings.containerCls); + } + + self._layout = Factory.create((settings.layout || self.layout) + 'layout'); + + if (self.settings.items) { + self.add(self.settings.items); + } + + // TODO: Fix this! + self._hasBody = true; + }, + + /** + * Returns a collection of child items that the container currently have. + * + * @method items + * @return {tinymce.ui.Collection} Control collection direct child controls. + */ + items: function() { + return this._items; + }, + + /** + * Find child controls by selector. + * + * @method find + * @param {String} selector Selector CSS pattern to find children by. + * @return {tinymce.ui.Collection} Control collection with child controls. + */ + find: function(selector) { + selector = selectorCache[selector] = selectorCache[selector] || new Selector(selector); + + return selector.find(this); + }, + + /** + * Adds one or many items to the current container. This will create instances of + * the object representations if needed. + * + * @method add + * @param {Array/Object/tinymce.ui.Control} items Array or item that will be added to the container. + * @return {tinymce.ui.Collection} Current collection control. + */ + add: function(items) { + var self = this; + + self.items().add(self.create(items)).parent(self); + + return self; + }, + + /** + * Focuses the current container instance. This will look + * for the first control in the container and focus that. + * + * @method focus + * @param {Boolean} keyboard Optional true/false if the focus was a keyboard focus or not. + * @return {tinymce.ui.Collection} Current instance. + */ + focus: function(keyboard) { + var self = this, focusCtrl, keyboardNav, items; + + if (keyboard) { + keyboardNav = self.keyboardNav || self.parents().eq(-1)[0].keyboardNav; + + if (keyboardNav) { + keyboardNav.focusFirst(self); + return; + } + } + + items = self.find('*'); + + // TODO: Figure out a better way to auto focus alert dialog buttons + if (self.statusbar) { + items.add(self.statusbar.items()); + } + + items.each(function(ctrl) { + if (ctrl.settings.autofocus) { + focusCtrl = null; + return false; + } + + if (ctrl.canFocus) { + focusCtrl = focusCtrl || ctrl; + } + }); + + if (focusCtrl) { + focusCtrl.focus(); + } + + return self; + }, + + /** + * Replaces the specified child control with a new control. + * + * @method replace + * @param {tinymce.ui.Control} oldItem Old item to be replaced. + * @param {tinymce.ui.Control} newItem New item to be inserted. + */ + replace: function(oldItem, newItem) { + var ctrlElm, items = this.items(), i = items.length; + + // Replace the item in collection + while (i--) { + if (items[i] === oldItem) { + items[i] = newItem; + break; + } + } + + if (i >= 0) { + // Remove new item from DOM + ctrlElm = newItem.getEl(); + if (ctrlElm) { + ctrlElm.parentNode.removeChild(ctrlElm); + } + + // Remove old item from DOM + ctrlElm = oldItem.getEl(); + if (ctrlElm) { + ctrlElm.parentNode.removeChild(ctrlElm); + } + } + + // Adopt the item + newItem.parent(this); + }, + + /** + * Creates the specified items. If any of the items is plain JSON style objects + * it will convert these into real tinymce.ui.Control instances. + * + * @method create + * @param {Array} items Array of items to convert into control instances. + * @return {Array} Array with control instances. + */ + create: function(items) { + var self = this, settings, ctrlItems = []; + + // Non array structure, then force it into an array + if (!Tools.isArray(items)) { + items = [items]; + } + + // Add default type to each child control + Tools.each(items, function(item) { + if (item) { + // Construct item if needed + if (!(item instanceof Control)) { + // Name only then convert it to an object + if (typeof(item) == "string") { + item = {type: item}; + } + + // Create control instance based on input settings and default settings + settings = Tools.extend({}, self.settings.defaults, item); + item.type = settings.type = settings.type || item.type || self.settings.defaultType || + (settings.defaults ? settings.defaults.type : null); + item = Factory.create(settings); + } + + ctrlItems.push(item); + } + }); + + return ctrlItems; + }, + + /** + * Renders new control instances. + * + * @private + */ + renderNew: function() { + var self = this; + + // Render any new items + self.items().each(function(ctrl, index) { + var containerElm, fragment; + + ctrl.parent(self); + + if (!ctrl._rendered) { + containerElm = self.getEl('body'); + fragment = DomUtils.createFragment(ctrl.renderHtml()); + + // Insert or append the item + if (containerElm.hasChildNodes() && index <= containerElm.childNodes.length - 1) { + containerElm.insertBefore(fragment, containerElm.childNodes[index]); + } else { + containerElm.appendChild(fragment); + } + + ctrl.postRender(); + } + }); + + self._layout.applyClasses(self); + self._lastRect = null; + + return self; + }, + + /** + * Appends new instances to the current container. + * + * @method append + * @param {Array/tinymce.ui.Collection} items Array if controls to append. + * @return {tinymce.ui.Container} Current container instance. + */ + append: function(items) { + return this.add(items).renderNew(); + }, + + /** + * Prepends new instances to the current container. + * + * @method prepend + * @param {Array/tinymce.ui.Collection} items Array if controls to prepend. + * @return {tinymce.ui.Container} Current container instance. + */ + prepend: function(items) { + var self = this; + + self.items().set(self.create(items).concat(self.items().toArray())); + + return self.renderNew(); + }, + + /** + * Inserts an control at a specific index. + * + * @method insert + * @param {Array/tinymce.ui.Collection} items Array if controls to insert. + * @param {Number} index Index to insert controls at. + * @param {Boolean} [before=false] Inserts controls before the index. + */ + insert: function(items, index, before) { + var self = this, curItems, beforeItems, afterItems; + + items = self.create(items); + curItems = self.items(); + + if (!before && index < curItems.length - 1) { + index += 1; + } + + if (index >= 0 && index < curItems.length) { + beforeItems = curItems.slice(0, index).toArray(); + afterItems = curItems.slice(index).toArray(); + curItems.set(beforeItems.concat(items, afterItems)); + } + + return self.renderNew(); + }, + + /** + * Populates the form fields from the specified JSON data object. + * + * Control items in the form that matches the data will have it's value set. + * + * @method fromJSON + * @param {Object} data JSON data object to set control values by. + * @return {tinymce.ui.Container} Current form instance. + */ + fromJSON: function(data) { + var self = this; + + for (var name in data) { + self.find('#' + name).value(data[name]); + } + + return self; + }, + + /** + * Serializes the form into a JSON object by getting all items + * that has a name and a value. + * + * @method toJSON + * @return {Object} JSON object with form data. + */ + toJSON: function() { + var self = this, data = {}; + + self.find('*').each(function(ctrl) { + var name = ctrl.name(), value = ctrl.value(); + + if (name && typeof(value) != "undefined") { + data[name] = value; + } + }); + + return data; + }, + + preRender: function() { + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, layout = self._layout, role = this.settings.role; + + self.preRender(); + layout.preRender(self); + + return ( + '

    ' + + '
    ' + + (self.settings.html || '') + layout.renderHtml(self) + + '
    ' + + '
    ' + ); + }, + + /** + * Post render method. Called after the control has been rendered to the target. + * + * @method postRender + * @return {tinymce.ui.Container} Current combobox instance. + */ + postRender: function() { + var self = this, box; + + self.items().exec('postRender'); + self._super(); + + self._layout.postRender(self); + self._rendered = true; + + if (self.settings.style) { + DomUtils.css(self.getEl(), self.settings.style); + } + + if (self.settings.border) { + box = self.borderBox(); + DomUtils.css(self.getEl(), { + 'border-top-width': box.top, + 'border-right-width': box.right, + 'border-bottom-width': box.bottom, + 'border-left-width': box.left + }); + } + + if (!self.parent()) { + self.keyboardNav = new KeyboardNavigation({ + root: self + }); + } + + return self; + }, + + /** + * Initializes the current controls layout rect. + * This will be executed by the layout managers to determine the + * default minWidth/minHeight etc. + * + * @method initLayoutRect + * @return {Object} Layout rect instance. + */ + initLayoutRect: function() { + var self = this, layoutRect = self._super(); + + // Recalc container size by asking layout manager + self._layout.recalc(self); + + return layoutRect; + }, + + /** + * Recalculates the positions of the controls in the current container. + * This is invoked by the reflow method and shouldn't be called directly. + * + * @method recalc + */ + recalc: function() { + var self = this, rect = self._layoutRect, lastRect = self._lastRect; + + if (!lastRect || lastRect.w != rect.w || lastRect.h != rect.h) { + self._layout.recalc(self); + rect = self.layoutRect(); + self._lastRect = {x: rect.x, y: rect.y, w: rect.w, h: rect.h}; + return true; + } + }, + + /** + * Reflows the current container and it's children and possible parents. + * This should be used after you for example append children to the current control so + * that the layout managers know that they need to reposition everything. + * + * @example + * container.append({type: 'button', text: 'My button'}).reflow(); + * + * @method reflow + * @return {tinymce.ui.Container} Current container instance. + */ + reflow: function() { + var i; + + if (this.visible()) { + Control.repaintControls = []; + Control.repaintControls.map = {}; + + this.recalc(); + i = Control.repaintControls.length; + + while (i--) { + Control.repaintControls[i].repaint(); + } + + // TODO: Fix me! + if (this.settings.layout !== "flow" && this.settings.layout !== "stack") { + this.repaint(); + } + + Control.repaintControls = []; + } + + return this; + } + }); +}); + +// Included from: js/tinymce/classes/ui/DragHelper.js + +/** + * DragHelper.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Drag/drop helper class. + * + * @example + * var dragHelper = new tinymce.ui.DragHelper('mydiv', { + * start: function(evt) { + * }, + * + * drag: function(evt) { + * }, + * + * end: function(evt) { + * } + * }); + * + * @class tinymce.ui.DragHelper + */ +define("tinymce/ui/DragHelper", [ + "tinymce/ui/DomUtils" +], function(DomUtils) { + "use strict"; + + function getDocumentSize() { + var doc = document, documentElement, body, scrollWidth, clientWidth; + var offsetWidth, scrollHeight, clientHeight, offsetHeight, max = Math.max; + + documentElement = doc.documentElement; + body = doc.body; + + scrollWidth = max(documentElement.scrollWidth, body.scrollWidth); + clientWidth = max(documentElement.clientWidth, body.clientWidth); + offsetWidth = max(documentElement.offsetWidth, body.offsetWidth); + + scrollHeight = max(documentElement.scrollHeight, body.scrollHeight); + clientHeight = max(documentElement.clientHeight, body.clientHeight); + offsetHeight = max(documentElement.offsetHeight, body.offsetHeight); + + return { + width: scrollWidth < offsetWidth ? clientWidth : scrollWidth, + height: scrollHeight < offsetHeight ? clientHeight : scrollHeight + }; + } + + return function(id, settings) { + var eventOverlayElm, doc = document, downButton, start, stop, drag, startX, startY; + + settings = settings || {}; + + function getHandleElm() { + return doc.getElementById(settings.handle || id); + } + + start = function(e) { + var docSize = getDocumentSize(), handleElm, cursor; + + e.preventDefault(); + downButton = e.button; + handleElm = getHandleElm(); + startX = e.screenX; + startY = e.screenY; + + // Grab cursor from handle + if (window.getComputedStyle) { + cursor = window.getComputedStyle(handleElm, null).getPropertyValue("cursor"); + } else { + cursor = handleElm.runtimeStyle.cursor; + } + + // Create event overlay and add it to document + eventOverlayElm = doc.createElement('div'); + DomUtils.css(eventOverlayElm, { + position: "absolute", + top: 0, left: 0, + width: docSize.width, + height: docSize.height, + zIndex: 0x7FFFFFFF, + opacity: 0.0001, + background: 'red', + cursor: cursor + }); + + doc.body.appendChild(eventOverlayElm); + + // Bind mouse events + DomUtils.on(doc, 'mousemove', drag); + DomUtils.on(doc, 'mouseup', stop); + + // Begin drag + settings.start(e); + }; + + drag = function(e) { + if (e.button !== downButton) { + return stop(e); + } + + e.deltaX = e.screenX - startX; + e.deltaY = e.screenY - startY; + + e.preventDefault(); + settings.drag(e); + }; + + stop = function(e) { + DomUtils.off(doc, 'mousemove', drag); + DomUtils.off(doc, 'mouseup', stop); + + eventOverlayElm.parentNode.removeChild(eventOverlayElm); + + if (settings.stop) { + settings.stop(e); + } + }; + + /** + * Destroys the drag/drop helper instance. + * + * @method destroy + */ + this.destroy = function() { + DomUtils.off(getHandleElm()); + }; + + DomUtils.on(getHandleElm(), 'mousedown', start); + }; +}); + +// Included from: js/tinymce/classes/ui/Scrollable.js + +/** + * Scrollable.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This mixin makes controls scrollable using custom scrollbars. + * + * @-x-less Scrollable.less + * @mixin tinymce.ui.Scrollable + */ +define("tinymce/ui/Scrollable", [ + "tinymce/ui/DomUtils", + "tinymce/ui/DragHelper" +], function(DomUtils, DragHelper) { + "use strict"; + + return { + init: function() { + var self = this; + self.on('repaint', self.renderScroll); + }, + + renderScroll: function() { + var self = this, margin = 2; + + function repaintScroll() { + var hasScrollH, hasScrollV, bodyElm; + + function repaintAxis(axisName, posName, sizeName, contentSizeName, hasScroll, ax) { + var containerElm, scrollBarElm, scrollThumbElm; + var containerSize, scrollSize, ratio, rect; + var posNameLower, sizeNameLower; + + scrollBarElm = self.getEl('scroll' + axisName); + if (scrollBarElm) { + posNameLower = posName.toLowerCase(); + sizeNameLower = sizeName.toLowerCase(); + + if (self.getEl('absend')) { + DomUtils.css(self.getEl('absend'), posNameLower, self.layoutRect()[contentSizeName] - 1); + } + + if (!hasScroll) { + DomUtils.css(scrollBarElm, 'display', 'none'); + return; + } + + DomUtils.css(scrollBarElm, 'display', 'block'); + containerElm = self.getEl('body'); + scrollThumbElm = self.getEl('scroll' + axisName + "t"); + containerSize = containerElm["client" + sizeName] - (margin * 2); + containerSize -= hasScrollH && hasScrollV ? scrollBarElm["client" + ax] : 0; + scrollSize = containerElm["scroll" + sizeName]; + ratio = containerSize / scrollSize; + + rect = {}; + rect[posNameLower] = containerElm["offset" + posName] + margin; + rect[sizeNameLower] = containerSize; + DomUtils.css(scrollBarElm, rect); + + rect = {}; + rect[posNameLower] = containerElm["scroll" + posName] * ratio; + rect[sizeNameLower] = containerSize * ratio; + DomUtils.css(scrollThumbElm, rect); + } + } + + bodyElm = self.getEl('body'); + hasScrollH = bodyElm.scrollWidth > bodyElm.clientWidth; + hasScrollV = bodyElm.scrollHeight > bodyElm.clientHeight; + + repaintAxis("h", "Left", "Width", "contentW", hasScrollH, "Height"); + repaintAxis("v", "Top", "Height", "contentH", hasScrollV, "Width"); + } + + function addScroll() { + function addScrollAxis(axisName, posName, sizeName, deltaPosName, ax) { + var scrollStart, axisId = self._id + '-scroll' + axisName, prefix = self.classPrefix; + + self.getEl().appendChild(DomUtils.createFragment( + '
    ' + + '
    ' + + '
    ' + )); + + self.draghelper = new DragHelper(axisId + 't', { + start: function() { + scrollStart = self.getEl('body')["scroll" + posName]; + DomUtils.addClass(DomUtils.get(axisId), prefix + 'active'); + }, + + drag: function(e) { + var ratio, hasScrollH, hasScrollV, containerSize, layoutRect = self.layoutRect(); + + hasScrollH = layoutRect.contentW > layoutRect.innerW; + hasScrollV = layoutRect.contentH > layoutRect.innerH; + containerSize = self.getEl('body')["client" + sizeName] - (margin * 2); + containerSize -= hasScrollH && hasScrollV ? self.getEl('scroll' + axisName)["client" + ax] : 0; + + ratio = containerSize / self.getEl('body')["scroll" + sizeName]; + self.getEl('body')["scroll" + posName] = scrollStart + (e["delta" + deltaPosName] / ratio); + }, + + stop: function() { + DomUtils.removeClass(DomUtils.get(axisId), prefix + 'active'); + } + }); +/* + self.on('click', function(e) { + if (e.target.id == self._id + '-scrollv') { + + } + });*/ + } + + self.addClass('scroll'); + + addScrollAxis("v", "Top", "Height", "Y", "Width"); + addScrollAxis("h", "Left", "Width", "X", "Height"); + } + + if (self.settings.autoScroll) { + if (!self._hasScroll) { + self._hasScroll = true; + addScroll(); + + self.on('wheel', function(e) { + var bodyEl = self.getEl('body'); + + bodyEl.scrollLeft += (e.deltaX || 0) * 10; + bodyEl.scrollTop += e.deltaY * 10; + + repaintScroll(); + }); + + DomUtils.on(self.getEl('body'), "scroll", repaintScroll); + } + + repaintScroll(); + } + } + }; +}); + +// Included from: js/tinymce/classes/ui/Panel.js + +/** + * Panel.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a new panel. + * + * @-x-less Panel.less + * @class tinymce.ui.Panel + * @extends tinymce.ui.Container + * @mixes tinymce.ui.Scrollable + */ +define("tinymce/ui/Panel", [ + "tinymce/ui/Container", + "tinymce/ui/Scrollable" +], function(Container, Scrollable) { + "use strict"; + + return Container.extend({ + Defaults: { + layout: 'fit', + containerCls: 'panel' + }, + + Mixins: [Scrollable], + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, layout = self._layout, innerHtml = self.settings.html; + + self.preRender(); + layout.preRender(self); + + if (typeof(innerHtml) == "undefined") { + innerHtml = ( + '
    ' + + layout.renderHtml(self) + + '
    ' + ); + } else { + if (typeof(innerHtml) == 'function') { + innerHtml = innerHtml.call(self); + } + + self._hasBody = false; + } + + return ( + '
    ' + + (self._preBodyHtml || '') + + innerHtml + + '
    ' + ); + } + }); +}); + +// Included from: js/tinymce/classes/ui/Movable.js + +/** + * Movable.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Movable mixin. Makes controls movable absolute and relative to other elements. + * + * @mixin tinymce.ui.Movable + */ +define("tinymce/ui/Movable", [ + "tinymce/ui/DomUtils" +], function(DomUtils) { + "use strict"; + + function calculateRelativePosition(ctrl, targetElm, rel) { + var ctrlElm, pos, x, y, selfW, selfH, targetW, targetH, viewport, size; + + viewport = DomUtils.getViewPort(); + + // Get pos of target + pos = DomUtils.getPos(targetElm); + x = pos.x; + y = pos.y; + + if (ctrl._fixed) { + x -= viewport.x; + y -= viewport.y; + } + + // Get size of self + ctrlElm = ctrl.getEl(); + size = DomUtils.getSize(ctrlElm); + selfW = size.width; + selfH = size.height; + + // Get size of target + size = DomUtils.getSize(targetElm); + targetW = size.width; + targetH = size.height; + + // Parse align string + rel = (rel || '').split(''); + + // Target corners + if (rel[0] === 'b') { + y += targetH; + } + + if (rel[1] === 'r') { + x += targetW; + } + + if (rel[0] === 'c') { + y += Math.round(targetH / 2); + } + + if (rel[1] === 'c') { + x += Math.round(targetW / 2); + } + + // Self corners + if (rel[3] === 'b') { + y -= selfH; + } + + if (rel[4] === 'r') { + x -= selfW; + } + + if (rel[3] === 'c') { + y -= Math.round(selfH / 2); + } + + if (rel[4] === 'c') { + x -= Math.round(selfW / 2); + } + + return { + x: x, + y: y, + w: selfW, + h: selfH + }; + } + + return { + /** + * Tests various positions to get the most suitable one. + * + * @method testMoveRel + * @param {DOMElement} elm Element to position against. + * @param {Array} rels Array with relative positions. + * @return {String} Best suitable relative position. + */ + testMoveRel: function(elm, rels) { + var viewPortRect = DomUtils.getViewPort(); + + for (var i = 0; i < rels.length; i++) { + var pos = calculateRelativePosition(this, elm, rels[i]); + + if (this._fixed) { + if (pos.x > 0 && pos.x + pos.w < viewPortRect.w && pos.y > 0 && pos.y + pos.h < viewPortRect.h) { + return rels[i]; + } + } else { + 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) { + return rels[i]; + } + } + } + + return rels[0]; + }, + + /** + * Move relative to the specified element. + * + * @method moveRel + * @param {Element} elm Element to move relative to. + * @param {String} rel Relative mode. For example: br-tl. + * @return {tinymce.ui.Control} Current control instance. + */ + moveRel: function(elm, rel) { + if (typeof(rel) != 'string') { + rel = this.testMoveRel(elm, rel); + } + + var pos = calculateRelativePosition(this, elm, rel); + return this.moveTo(pos.x, pos.y); + }, + + /** + * Move by a relative x, y values. + * + * @method moveBy + * @param {Number} dx Relative x position. + * @param {Number} dy Relative y position. + * @return {tinymce.ui.Control} Current control instance. + */ + moveBy: function(dx, dy) { + var self = this, rect = self.layoutRect(); + + self.moveTo(rect.x + dx, rect.y + dy); + + return self; + }, + + /** + * Move to absolute position. + * + * @method moveTo + * @param {Number} x Absolute x position. + * @param {Number} y Absolute y position. + * @return {tinymce.ui.Control} Current control instance. + */ + moveTo: function(x, y) { + var self = this; + + // TODO: Move this to some global class + function contrain(value, max, size) { + if (value < 0) { + return 0; + } + + if (value + size > max) { + value = max - size; + return value < 0 ? 0 : value; + } + + return value; + } + + if (self.settings.constrainToViewport) { + var viewPortRect = DomUtils.getViewPort(window); + var layoutRect = self.layoutRect(); + + x = contrain(x, viewPortRect.w + viewPortRect.x, layoutRect.w); + y = contrain(y, viewPortRect.h + viewPortRect.y, layoutRect.h); + } + + if (self._rendered) { + self.layoutRect({x: x, y: y}).repaint(); + } else { + self.settings.x = x; + self.settings.y = y; + } + + self.fire('move', {x: x, y: y}); + + return self; + } + }; +}); + +// Included from: js/tinymce/classes/ui/Resizable.js + +/** + * Resizable.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Resizable mixin. Enables controls to be resized. + * + * @mixin tinymce.ui.Resizable + */ +define("tinymce/ui/Resizable", [ + "tinymce/ui/DomUtils" +], function(DomUtils) { + "use strict"; + + return { + /** + * Resizes the control to contents. + * + * @method resizeToContent + */ + resizeToContent: function() { + this._layoutRect.autoResize = true; + this._lastRect = null; + this.reflow(); + }, + + /** + * Resizes the control to a specific width/height. + * + * @method resizeTo + * @param {Number} w Control width. + * @param {Number} h Control height. + * @return {tinymce.ui.Control} Current control instance. + */ + resizeTo: function(w, h) { + // TODO: Fix hack + if (w <= 1 || h <= 1) { + var rect = DomUtils.getWindowSize(); + + w = w <= 1 ? w * rect.w : w; + h = h <= 1 ? h * rect.h : h; + } + + this._layoutRect.autoResize = false; + return this.layoutRect({minW: w, minH: h, w: w, h: h}).reflow(); + }, + + /** + * Resizes the control to a specific relative width/height. + * + * @method resizeBy + * @param {Number} dw Relative control width. + * @param {Number} dh Relative control height. + * @return {tinymce.ui.Control} Current control instance. + */ + resizeBy: function(dw, dh) { + var self = this, rect = self.layoutRect(); + + return self.resizeTo(rect.w + dw, rect.h + dh); + } + }; +}); + +// Included from: js/tinymce/classes/ui/FloatPanel.js + +/** + * FloatPanel.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class creates a floating panel. + * + * @-x-less FloatPanel.less + * @class tinymce.ui.FloatPanel + * @extends tinymce.ui.Panel + * @mixes tinymce.ui.Movable + * @mixes tinymce.ui.Resizable + */ +define("tinymce/ui/FloatPanel", [ + "tinymce/ui/Panel", + "tinymce/ui/Movable", + "tinymce/ui/Resizable", + "tinymce/ui/DomUtils" +], function(Panel, Movable, Resizable, DomUtils) { + "use strict"; + + var documentClickHandler, documentScrollHandler, visiblePanels = []; + var zOrder = [], hasModal; + + var FloatPanel = Panel.extend({ + Mixins: [Movable, Resizable], + + /** + * Constructs a new control instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + * @setting {Boolean} autohide Automatically hide the panel. + */ + init: function(settings) { + var self = this; + + function reorder() { + var i, zIndex = FloatPanel.zIndex || 0xFFFF, topModal; + + if (zOrder.length) { + for (i = 0; i < zOrder.length; i++) { + if (zOrder[i].modal) { + zIndex++; + topModal = zOrder[i]; + } + + zOrder[i].getEl().style.zIndex = zIndex; + zOrder[i].zIndex = zIndex; + zIndex++; + } + } + + var modalBlockEl = document.getElementById(self.classPrefix + 'modal-block'); + + if (topModal) { + DomUtils.css(modalBlockEl, 'z-index', topModal.zIndex - 1); + } else if (modalBlockEl) { + modalBlockEl.parentNode.removeChild(modalBlockEl); + hasModal = false; + } + + FloatPanel.currentZIndex = zIndex; + } + + function isChildOf(ctrl, parent) { + while (ctrl) { + if (ctrl == parent) { + return true; + } + + ctrl = ctrl.parent(); + } + } + + /** + * Repositions the panel to the top of page if the panel is outside of the visual viewport. It will + * also reposition all child panels of the current panel. + */ + function repositionPanel(panel) { + var scrollY = DomUtils.getViewPort().y; + + function toggleFixedChildPanels(fixed, deltaY) { + var parent; + + for (var i = 0; i < visiblePanels.length; i++) { + if (visiblePanels[i] != panel) { + parent = visiblePanels[i].parent(); + + while (parent && (parent = parent.parent())) { + if (parent == panel) { + visiblePanels[i].fixed(fixed).moveBy(0, deltaY).repaint(); + } + } + } + } + } + + if (panel.settings.autofix) { + if (!panel._fixed) { + panel._autoFixY = panel.layoutRect().y; + + if (panel._autoFixY < scrollY) { + panel.fixed(true).layoutRect({y: 0}).repaint(); + toggleFixedChildPanels(true, scrollY - panel._autoFixY); + } + } else { + if (panel._autoFixY > scrollY) { + panel.fixed(false).layoutRect({y: panel._autoFixY}).repaint(); + toggleFixedChildPanels(false, panel._autoFixY - scrollY); + } + } + } + } + + self._super(settings); + self._eventsRoot = self; + + self.addClass('floatpanel'); + + // Hide floatpanes on click out side the root button + if (settings.autohide) { + if (!documentClickHandler) { + documentClickHandler = function(e) { + // Hide any float panel when a click is out side that float panel and the + // float panels direct parent for example a click on a menu button + var i = visiblePanels.length; + while (i--) { + var panel = visiblePanels[i], clickCtrl = panel.getParentCtrl(e.target); + + if (panel.settings.autohide) { + if (clickCtrl) { + if (isChildOf(clickCtrl, panel) || panel.parent() === clickCtrl) { + continue; + } + } + + e = panel.fire('autohide', {target: e.target}); + if (!e.isDefaultPrevented()) { + panel.hide(); + } + } + } + }; + + DomUtils.on(document, 'click', documentClickHandler); + } + + visiblePanels.push(self); + } + + if (settings.autofix) { + if (!documentScrollHandler) { + documentScrollHandler = function() { + var i; + + i = visiblePanels.length; + while (i--) { + repositionPanel(visiblePanels[i]); + } + }; + + DomUtils.on(window, 'scroll', documentScrollHandler); + } + + self.on('move', function() { + repositionPanel(this); + }); + } + + self.on('postrender show', function(e) { + if (e.control == self) { + var modalBlockEl, prefix = self.classPrefix; + + if (self.modal && !hasModal) { + modalBlockEl = DomUtils.createFragment('
    '); + modalBlockEl = modalBlockEl.firstChild; + + self.getContainerElm().appendChild(modalBlockEl); + + setTimeout(function() { + DomUtils.addClass(modalBlockEl, prefix + 'in'); + DomUtils.addClass(self.getEl(), prefix + 'in'); + }, 0); + + hasModal = true; + } + + zOrder.push(self); + reorder(); + } + }); + + self.on('close hide', function(e) { + if (e.control == self) { + var i = zOrder.length; + + while (i--) { + if (zOrder[i] === self) { + zOrder.splice(i, 1); + } + } + + reorder(); + } + }); + + self.on('show', function() { + self.parents().each(function(ctrl) { + if (ctrl._fixed) { + self.fixed(true); + return false; + } + }); + }); + + if (settings.popover) { + self._preBodyHtml = '
    '; + self.addClass('popover').addClass('bottom').addClass(self.isRtl() ? 'end' : 'start'); + } + }, + + fixed: function(state) { + var self = this; + + if (self._fixed != state) { + if (self._rendered) { + var viewport = DomUtils.getViewPort(); + + if (state) { + self.layoutRect().y -= viewport.y; + } else { + self.layoutRect().y += viewport.y; + } + } + + self.toggleClass('fixed', state); + self._fixed = state; + } + + return self; + }, + + /** + * Shows the current float panel. + * + * @method show + * @return {tinymce.ui.FloatPanel} Current floatpanel instance. + */ + show: function() { + var self = this, i, state = self._super(); + + i = visiblePanels.length; + while (i--) { + if (visiblePanels[i] === self) { + break; + } + } + + if (i === -1) { + visiblePanels.push(self); + } + + return state; + }, + + /** + * Hides the current float panel. + * + * @method hide + * @return {tinymce.ui.FloatPanel} Current floatpanel instance. + */ + hide: function() { + removeVisiblePanel(this); + return this._super(); + }, + + /** + * Hides all visible the float panels. + * + * @method hideAll + */ + hideAll: function() { + FloatPanel.hideAll(); + }, + + /** + * Closes the float panel. This will remove the float panel from page and fire the close event. + * + * @method close + */ + close: function() { + var self = this; + + self.fire('close'); + + return self.remove(); + }, + + /** + * Removes the float panel from page. + * + * @method remove + */ + remove: function() { + removeVisiblePanel(this); + this._super(); + }, + + postRender: function() { + var self = this; + + if (self.settings.bodyRole) { + this.getEl('body').setAttribute('role', self.settings.bodyRole); + } + + return self._super(); + } + }); + + /** + * Hides all visible the float panels. + * + * @static + * @method hideAll + */ + FloatPanel.hideAll = function() { + var i = visiblePanels.length; + + while (i--) { + var panel = visiblePanels[i]; + + if (panel && panel.settings.autohide) { + panel.hide(); + visiblePanels.splice(i, 1); + } + } + }; + + function removeVisiblePanel(panel) { + var i; + + i = visiblePanels.length; + while (i--) { + if (visiblePanels[i] === panel) { + visiblePanels.splice(i, 1); + } + } + + i = zOrder.length; + while (i--) { + if (zOrder[i] === panel) { + zOrder.splice(i, 1); + } + } + } + + return FloatPanel; +}); + +// Included from: js/tinymce/classes/ui/Window.js + +/** + * Window.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a new window. + * + * @-x-less Window.less + * @class tinymce.ui.Window + * @extends tinymce.ui.FloatPanel + */ +define("tinymce/ui/Window", [ + "tinymce/ui/FloatPanel", + "tinymce/ui/Panel", + "tinymce/ui/DomUtils", + "tinymce/ui/DragHelper" +], function(FloatPanel, Panel, DomUtils, DragHelper) { + "use strict"; + + var Window = FloatPanel.extend({ + modal: true, + + Defaults: { + border: 1, + layout: 'flex', + containerCls: 'panel', + role: 'dialog', + callbacks: { + submit: function() { + this.fire('submit', {data: this.toJSON()}); + }, + + close: function() { + this.close(); + } + } + }, + + /** + * Constructs a instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + */ + init: function(settings) { + var self = this; + + self._super(settings); + + if (self.isRtl()) { + self.addClass('rtl'); + } + + self.addClass('window'); + self._fixed = true; + + // Create statusbar + if (settings.buttons) { + self.statusbar = new Panel({ + layout: 'flex', + border: '1 0 0 0', + spacing: 3, + padding: 10, + align: 'center', + pack: self.isRtl() ? 'start' : 'end', + defaults: { + type: 'button' + }, + items: settings.buttons + }); + + self.statusbar.addClass('foot'); + self.statusbar.parent(self); + } + + self.on('click', function(e) { + if (e.target.className.indexOf(self.classPrefix + 'close') != -1) { + self.close(); + } + }); + + self.on('cancel', function() { + self.close(); + }); + + self.aria('describedby', self.describedBy || self._id + '-none'); + self.aria('label', settings.title); + self._fullscreen = false; + }, + + /** + * Recalculates the positions of the controls in the current container. + * This is invoked by the reflow method and shouldn't be called directly. + * + * @method recalc + */ + recalc: function() { + var self = this, statusbar = self.statusbar, layoutRect, width, x, needsRecalc; + + if (self._fullscreen) { + self.layoutRect(DomUtils.getWindowSize()); + self.layoutRect().contentH = self.layoutRect().innerH; + } + + self._super(); + + layoutRect = self.layoutRect(); + + // Resize window based on title width + if (self.settings.title && !self._fullscreen) { + width = layoutRect.headerW; + if (width > layoutRect.w) { + x = layoutRect.x - Math.max(0, width / 2); + self.layoutRect({w: width, x: x}); + needsRecalc = true; + } + } + + // Resize window based on statusbar width + if (statusbar) { + statusbar.layoutRect({w: self.layoutRect().innerW}).recalc(); + + width = statusbar.layoutRect().minW + layoutRect.deltaW; + if (width > layoutRect.w) { + x = layoutRect.x - Math.max(0, width - layoutRect.w); + self.layoutRect({w: width, x: x}); + needsRecalc = true; + } + } + + // Recalc body and disable auto resize + if (needsRecalc) { + self.recalc(); + } + }, + + /** + * Initializes the current controls layout rect. + * This will be executed by the layout managers to determine the + * default minWidth/minHeight etc. + * + * @method initLayoutRect + * @return {Object} Layout rect instance. + */ + initLayoutRect: function() { + var self = this, layoutRect = self._super(), deltaH = 0, headEl; + + // Reserve vertical space for title + if (self.settings.title && !self._fullscreen) { + headEl = self.getEl('head'); + + var size = DomUtils.getSize(headEl); + + layoutRect.headerW = size.width; + layoutRect.headerH = size.height; + + deltaH += layoutRect.headerH; + } + + // Reserve vertical space for statusbar + if (self.statusbar) { + deltaH += self.statusbar.layoutRect().h; + } + + layoutRect.deltaH += deltaH; + layoutRect.minH += deltaH; + //layoutRect.innerH -= deltaH; + layoutRect.h += deltaH; + + var rect = DomUtils.getWindowSize(); + + layoutRect.x = Math.max(0, rect.w / 2 - layoutRect.w / 2); + layoutRect.y = Math.max(0, rect.h / 2 - layoutRect.h / 2); + + return layoutRect; + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, layout = self._layout, id = self._id, prefix = self.classPrefix; + var settings = self.settings, headerHtml = '', footerHtml = '', html = settings.html; + + self.preRender(); + layout.preRender(self); + + if (settings.title) { + headerHtml = ( + '
    ' + + '
    ' + self.encode(settings.title) + '
    ' + + '' + + '
    ' + + '
    ' + ); + } + + if (settings.url) { + html = ''; + } + + if (typeof(html) == "undefined") { + html = layout.renderHtml(self); + } + + if (self.statusbar) { + footerHtml = self.statusbar.renderHtml(); + } + + return ( + '
    ' + + '
    ' + + headerHtml + + '
    ' + + html + + '
    ' + + footerHtml + + '
    ' + + '
    ' + ); + }, + + /** + * Switches the window fullscreen mode. + * + * @method fullscreen + * @param {Boolean} state True/false state. + * @return {tinymce.ui.Window} Current window instance. + */ + fullscreen: function(state) { + var self = this, documentElement = document.documentElement, slowRendering, prefix = self.classPrefix, layoutRect; + + if (state != self._fullscreen) { + DomUtils.on(window, 'resize', function() { + var time; + + if (self._fullscreen) { + // Time the layout time if it's to slow use a timeout to not hog the CPU + if (!slowRendering) { + time = new Date().getTime(); + + var rect = DomUtils.getWindowSize(); + self.moveTo(0, 0).resizeTo(rect.w, rect.h); + + if ((new Date().getTime()) - time > 50) { + slowRendering = true; + } + } else { + if (!self._timer) { + self._timer = setTimeout(function() { + var rect = DomUtils.getWindowSize(); + self.moveTo(0, 0).resizeTo(rect.w, rect.h); + + self._timer = 0; + }, 50); + } + } + } + }); + + layoutRect = self.layoutRect(); + self._fullscreen = state; + + if (!state) { + self._borderBox = self.parseBox(self.settings.border); + self.getEl('head').style.display = ''; + layoutRect.deltaH += layoutRect.headerH; + DomUtils.removeClass(documentElement, prefix + 'fullscreen'); + DomUtils.removeClass(document.body, prefix + 'fullscreen'); + self.removeClass('fullscreen'); + self.moveTo(self._initial.x, self._initial.y).resizeTo(self._initial.w, self._initial.h); + } else { + self._initial = {x: layoutRect.x, y: layoutRect.y, w: layoutRect.w, h: layoutRect.h}; + + self._borderBox = self.parseBox('0'); + self.getEl('head').style.display = 'none'; + layoutRect.deltaH -= layoutRect.headerH + 2; + DomUtils.addClass(documentElement, prefix + 'fullscreen'); + DomUtils.addClass(document.body, prefix + 'fullscreen'); + self.addClass('fullscreen'); + + var rect = DomUtils.getWindowSize(); + self.moveTo(0, 0).resizeTo(rect.w, rect.h); + } + } + + return self.reflow(); + }, + + /** + * Called after the control has been rendered. + * + * @method postRender + */ + postRender: function() { + var self = this, startPos; + + setTimeout(function() { + self.addClass('in'); + }, 0); + + self._super(); + + if (self.statusbar) { + self.statusbar.postRender(); + } + + self.focus(); + + this.dragHelper = new DragHelper(self._id + '-dragh', { + start: function() { + startPos = { + x: self.layoutRect().x, + y: self.layoutRect().y + }; + }, + + drag: function(e) { + self.moveTo(startPos.x + e.deltaX, startPos.y + e.deltaY); + } + }); + + self.on('submit', function(e) { + if (!e.isDefaultPrevented()) { + self.close(); + } + }); + }, + + /** + * Fires a submit event with the serialized form. + * + * @method submit + * @return {Object} Event arguments object. + */ + submit: function() { + return this.fire('submit', {data: this.toJSON()}); + }, + + /** + * Removes the current control from DOM and from UI collections. + * + * @method remove + * @return {tinymce.ui.Control} Current control instance. + */ + remove: function() { + var self = this, prefix = self.classPrefix; + + self.dragHelper.destroy(); + self._super(); + + if (self.statusbar) { + this.statusbar.remove(); + } + + if (self._fullscreen) { + DomUtils.removeClass(document.documentElement, prefix + 'fullscreen'); + DomUtils.removeClass(document.body, prefix + 'fullscreen'); + } + } + }); + + return Window; +}); + +// Included from: js/tinymce/classes/ui/MessageBox.js + +/** + * MessageBox.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class is used to create MessageBoxes like alerts/confirms etc. + * + * @class tinymce.ui.Window + * @extends tinymce.ui.FloatPanel + */ +define("tinymce/ui/MessageBox", [ + "tinymce/ui/Window" +], function(Window) { + "use strict"; + + var MessageBox = Window.extend({ + /** + * Constructs a instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + */ + init: function(settings) { + settings = { + border: 1, + padding: 20, + layout: 'flex', + pack: "center", + align: "center", + containerCls: 'panel', + autoScroll: true, + buttons: {type: "button", text: "Ok", action: "ok"}, + items: { + type: "label", + multiline: true, + maxWidth: 500, + maxHeight: 200 + } + }; + + this._super(settings); + }, + + Statics: { + /** + * Ok buttons constant. + * + * @static + * @final + * @field {Number} OK + */ + OK: 1, + + /** + * Ok/cancel buttons constant. + * + * @static + * @final + * @field {Number} OK_CANCEL + */ + OK_CANCEL: 2, + + /** + * yes/no buttons constant. + * + * @static + * @final + * @field {Number} YES_NO + */ + YES_NO: 3, + + /** + * yes/no/cancel buttons constant. + * + * @static + * @final + * @field {Number} YES_NO_CANCEL + */ + YES_NO_CANCEL: 4, + + /** + * Constructs a new message box and renders it to the body element. + * + * @static + * @method msgBox + * @param {Object} settings Name/value object with settings. + */ + msgBox: function(settings) { + var buttons, callback = settings.callback || function() {}; + + switch (settings.buttons) { + case MessageBox.OK_CANCEL: + buttons = [ + {type: "button", text: "Ok", subtype: "primary", onClick: function(e) { + e.control.parents()[1].close(); + callback(true); + }}, + + {type: "button", text: "Cancel", onClick: function(e) { + e.control.parents()[1].close(); + callback(false); + }} + ]; + break; + + case MessageBox.YES_NO: + buttons = [ + {type: "button", text: "Ok", subtype: "primary", onClick: function(e) { + e.control.parents()[1].close(); + callback(true); + }} + ]; + break; + + case MessageBox.YES_NO_CANCEL: + buttons = [ + {type: "button", text: "Ok", subtype: "primary", onClick: function(e) { + e.control.parents()[1].close(); + }} + ]; + break; + + default: + buttons = [ + {type: "button", text: "Ok", subtype: "primary", onClick: function(e) { + e.control.parents()[1].close(); + callback(true); + }} + ]; + break; + } + + return new Window({ + padding: 20, + x: settings.x, + y: settings.y, + minWidth: 300, + minHeight: 100, + layout: "flex", + pack: "center", + align: "center", + buttons: buttons, + title: settings.title, + role: 'alertdialog', + items: { + type: "label", + multiline: true, + maxWidth: 500, + maxHeight: 200, + text: settings.text + }, + onPostRender: function() { + this.aria('describedby', this.items()[0]._id); + }, + onClose: settings.onClose, + onCancel: function() { + callback(false); + } + }).renderTo(document.body).reflow(); + }, + + /** + * Creates a new alert dialog. + * + * @method alert + * @param {Object} settings Settings for the alert dialog. + * @param {function} [callback] Callback to execute when the user makes a choice. + */ + alert: function(settings, callback) { + if (typeof(settings) == "string") { + settings = {text: settings}; + } + + settings.callback = callback; + return MessageBox.msgBox(settings); + }, + + /** + * Creates a new confirm dialog. + * + * @method confirm + * @param {Object} settings Settings for the confirm dialog. + * @param {function} [callback] Callback to execute when the user makes a choice. + */ + confirm: function(settings, callback) { + if (typeof(settings) == "string") { + settings = {text: settings}; + } + + settings.callback = callback; + settings.buttons = MessageBox.OK_CANCEL; + + return MessageBox.msgBox(settings); + } + } + }); + + return MessageBox; +}); + +// Included from: js/tinymce/classes/WindowManager.js + +/** + * WindowManager.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class handles the creation of native windows and dialogs. This class can be extended to provide for example inline dialogs. + * + * @class tinymce.WindowManager + * @example + * // Opens a new dialog with the file.htm file and the size 320x240 + * // It also adds a custom parameter this can be retrieved by using tinyMCEPopup.getWindowArg inside the dialog. + * tinymce.activeEditor.windowManager.open({ + * url: 'file.htm', + * width: 320, + * height: 240 + * }, { + * custom_param: 1 + * }); + * + * // Displays an alert box using the active editors window manager instance + * tinymce.activeEditor.windowManager.alert('Hello world!'); + * + * // Displays an confirm box and an alert message will be displayed depending on what you choose in the confirm + * tinymce.activeEditor.windowManager.confirm("Do you want to do something", function(s) { + * if (s) + * tinymce.activeEditor.windowManager.alert("Ok"); + * else + * tinymce.activeEditor.windowManager.alert("Cancel"); + * }); + */ +define("tinymce/WindowManager", [ + "tinymce/ui/Window", + "tinymce/ui/MessageBox" +], function(Window, MessageBox) { + return function(editor) { + var self = this, windows = []; + + function getTopMostWindow() { + if (windows.length) { + return windows[windows.length - 1]; + } + } + + self.windows = windows; + + /** + * Opens a new window. + * + * @method open + * @param {Object} args Optional name/value settings collection contains things like width/height/url etc. + * @option {String} title Window title. + * @option {String} file URL of the file to open in the window. + * @option {Number} width Width in pixels. + * @option {Number} height Height in pixels. + * @option {Boolean} resizable Specifies whether the popup window is resizable or not. + * @option {Boolean} maximizable Specifies whether the popup window has a "maximize" button and can get maximized or not. + * @option {String/Boolean} scrollbars Specifies whether the popup window can have scrollbars if required (i.e. content + * larger than the popup size specified). + */ + self.open = function(args, params) { + var win; + + editor.editorManager.activeEditor = editor; + + args.title = args.title || ' '; + + // Handle URL + args.url = args.url || args.file; // Legacy + if (args.url) { + args.width = parseInt(args.width || 320, 10); + args.height = parseInt(args.height || 240, 10); + } + + // Handle body + if (args.body) { + args.items = { + defaults: args.defaults, + type: args.bodyType || 'form', + items: args.body + }; + } + + if (!args.url && !args.buttons) { + args.buttons = [ + {text: 'Ok', subtype: 'primary', onclick: function() { + win.find('form')[0].submit(); + }}, + + {text: 'Cancel', onclick: function() { + win.close(); + }} + ]; + } + + win = new Window(args); + windows.push(win); + + win.on('close', function() { + var i = windows.length; + + while (i--) { + if (windows[i] === win) { + windows.splice(i, 1); + } + } + + editor.focus(); + }); + + // Handle data + if (args.data) { + win.on('postRender', function() { + this.find('*').each(function(ctrl) { + var name = ctrl.name(); + + if (name in args.data) { + ctrl.value(args.data[name]); + } + }); + }); + } + + // store args and parameters + win.features = args || {}; + win.params = params || {}; + + // Takes a snapshot in the FocusManager of the selection before focus is lost to dialog + editor.nodeChanged(); + + return win.renderTo(document.body).reflow(); + }; + + /** + * Creates a alert dialog. Please don't use the blocking behavior of this + * native version use the callback method instead then it can be extended. + * + * @method alert + * @param {String} message Text to display in the new alert dialog. + * @param {function} callback Callback function to be executed after the user has selected ok. + * @param {Object} scope Optional scope to execute the callback in. + * @example + * // Displays an alert box using the active editors window manager instance + * tinymce.activeEditor.windowManager.alert('Hello world!'); + */ + self.alert = function(message, callback, scope) { + MessageBox.alert(message, function() { + if (callback) { + callback.call(scope || this); + } else { + editor.focus(); + } + }); + }; + + /** + * Creates a confirm dialog. Please don't use the blocking behavior of this + * native version use the callback method instead then it can be extended. + * + * @method confirm + * @param {String} messageText to display in the new confirm dialog. + * @param {function} callback Callback function to be executed after the user has selected ok or cancel. + * @param {Object} scope Optional scope to execute the callback in. + * @example + * // Displays an confirm box and an alert message will be displayed depending on what you choose in the confirm + * tinymce.activeEditor.windowManager.confirm("Do you want to do something", function(s) { + * if (s) + * tinymce.activeEditor.windowManager.alert("Ok"); + * else + * tinymce.activeEditor.windowManager.alert("Cancel"); + * }); + */ + self.confirm = function(message, callback, scope) { + MessageBox.confirm(message, function(state) { + callback.call(scope || this, state); + }); + }; + + /** + * Closes the top most window. + * + * @method close + */ + self.close = function() { + if (getTopMostWindow()) { + getTopMostWindow().close(); + } + }; + + /** + * Returns the params of the last window open call. This can be used in iframe based + * dialog to get params passed from the tinymce plugin. + * + * @example + * var dialogArguments = top.tinymce.activeEditor.windowManager.getParams(); + * + * @method getParams + * @return {Object} Name/value object with parameters passed from windowManager.open call. + */ + self.getParams = function() { + return getTopMostWindow() ? getTopMostWindow().params : null; + }; + + /** + * Sets the params of the last opened window. + * + * @method setParams + * @param {Object} params Params object to set for the last opened window. + */ + self.setParams = function(params) { + if (getTopMostWindow()) { + getTopMostWindow().params = params; + } + }; + }; +}); + +// Included from: js/tinymce/classes/util/Quirks.js + +/** + * Quirks.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + * + * @ignore-file + */ + +/** + * This file includes fixes for various browser quirks it's made to make it easy to add/remove browser specific fixes. + * + * @class tinymce.util.Quirks + */ +define("tinymce/util/Quirks", [ + "tinymce/util/VK", + "tinymce/dom/RangeUtils", + "tinymce/html/Node", + "tinymce/html/Entities", + "tinymce/Env", + "tinymce/util/Tools" +], function(VK, RangeUtils, Node, Entities, Env, Tools) { + return function(editor) { + var each = Tools.each; + var BACKSPACE = VK.BACKSPACE, DELETE = VK.DELETE, dom = editor.dom, selection = editor.selection, + settings = editor.settings, parser = editor.parser, serializer = editor.serializer; + var isGecko = Env.gecko, isIE = Env.ie, isWebKit = Env.webkit; + + /** + * Executes a command with a specific state this can be to enable/disable browser editing features. + */ + function setEditorCommandState(cmd, state) { + try { + editor.getDoc().execCommand(cmd, false, state); + } catch (ex) { + // Ignore + } + } + + /** + * Returns current IE document mode. + */ + function getDocumentMode() { + var documentMode = editor.getDoc().documentMode; + + return documentMode ? documentMode : 6; + } + + /** + * Returns true/false if the event is prevented or not. + * + * @private + * @param {Event} e Event object. + * @return {Boolean} true/false if the event is prevented or not. + */ + function isDefaultPrevented(e) { + return e.isDefaultPrevented(); + } + + /** + * Fixes a WebKit bug when deleting contents using backspace or delete key. + * WebKit will produce a span element if you delete across two block elements. + * + * Example: + *

    a

    |b

    + * + * Will produce this on backspace: + *

    ab

    + * + * This fixes the backspace to produce: + *

    a|b

    + * + * See bug: https://bugs.webkit.org/show_bug.cgi?id=45784 + * + * This fixes the following delete scenarios: + * 1. Delete by pressing backspace key. + * 2. Delete by pressing delete key. + * 3. Delete by pressing backspace key with ctrl/cmd (Word delete). + * 4. Delete by pressing delete key with ctrl/cmd (Word delete). + * 5. Delete by drag/dropping contents inside the editor. + * 6. Delete by using Cut Ctrl+X/Cmd+X. + * 7. Delete by selecting contents and writing a character.' + * + * This code is a ugly hack since writing full custom delete logic for just this bug + * fix seemed like a huge task. I hope we can remove this before the year 2030. + */ + function cleanupStylesWhenDeleting() { + var doc = editor.getDoc(), urlPrefix = 'data:text/mce-internal,'; + var MutationObserver = window.MutationObserver, olderWebKit; + + // Add mini polyfill for older WebKits + // TODO: Remove this when old Safari versions gets updated + if (!MutationObserver) { + olderWebKit = true; + + MutationObserver = function() { + var records = [], target; + + function nodeInsert(e) { + var target = e.relatedNode || e.target; + records.push({target: target, addedNodes: [target]}); + } + + function attrModified(e) { + var target = e.relatedNode || e.target; + records.push({target: target, attributeName: e.attrName}); + } + + this.observe = function(node) { + target = node; + target.addEventListener('DOMSubtreeModified', nodeInsert, false); + target.addEventListener('DOMNodeInsertedIntoDocument', nodeInsert, false); + target.addEventListener('DOMNodeInserted', nodeInsert, false); + target.addEventListener('DOMAttrModified', attrModified, false); + }; + + this.disconnect = function() { + target.removeEventListener('DOMNodeInserted', nodeInsert); + target.removeEventListener('DOMAttrModified', attrModified); + target.removeEventListener('DOMSubtreeModified', nodeInsert, false); + }; + + this.takeRecords = function() { + return records; + }; + }; + } + + function customDelete(isForward) { + var mutationObserver = new MutationObserver(function() {}); + + Tools.each(editor.getBody().getElementsByTagName('*'), function(elm) { + // Mark existing spans + if (elm.tagName == 'SPAN') { + elm.setAttribute('mce-data-marked', 1); + } + + // Make sure all elements has a data-mce-style attribute + if (!elm.hasAttribute('data-mce-style') && elm.hasAttribute('style')) { + editor.dom.setAttrib(elm, 'style', elm.getAttribute('style')); + } + }); + + // Observe added nodes and style attribute changes + mutationObserver.observe(editor.getDoc(), { + childList: true, + attributes: true, + subtree: true, + attributeFilter: ['style'] + }); + + editor.getDoc().execCommand(isForward ? 'ForwardDelete' : 'Delete', false, null); + + var rng = editor.selection.getRng(); + var caretElement = rng.startContainer.parentNode; + + Tools.each(mutationObserver.takeRecords(), function(record) { + // Restore style attribute to previous value + if (record.attributeName == "style") { + var oldValue = record.target.getAttribute('data-mce-style'); + + if (oldValue) { + record.target.setAttribute("style", oldValue); + } else { + record.target.removeAttribute("style"); + } + } + + // Remove all spans that isn't maked and retain selection + Tools.each(record.addedNodes, function(node) { + if (node.nodeName == "SPAN" && !node.getAttribute('mce-data-marked')) { + var offset, container; + + if (node == caretElement) { + offset = rng.startOffset; + container = node.firstChild; + } + + dom.remove(node, true); + + if (container) { + rng.setStart(container, offset); + rng.setEnd(container, offset); + editor.selection.setRng(rng); + } + } + }); + }); + + mutationObserver.disconnect(); + + // Remove any left over marks + Tools.each(editor.dom.select('span[mce-data-marked]'), function(span) { + span.removeAttribute('mce-data-marked'); + }); + } + + editor.on('keydown', function(e) { + var isForward = e.keyCode == DELETE, isMeta = VK.metaKeyPressed(e); + + if (!isDefaultPrevented(e) && (isForward || e.keyCode == BACKSPACE)) { + var rng = editor.selection.getRng(), container = rng.startContainer, offset = rng.startOffset; + + // Ignore non meta delete in the where there is text before/after the caret + if (!isMeta && rng.collapsed && container.nodeType == 3) { + if (isForward ? offset < container.data.length : offset > 0) { + return; + } + } + + e.preventDefault(); + + if (isMeta) { + editor.selection.getSel().modify("extend", isForward ? "forward" : "backward", "word"); + } + + customDelete(isForward); + } + }); + + editor.on('keypress', function(e) { + if (!isDefaultPrevented(e) && !selection.isCollapsed() && e.charCode && !VK.metaKeyPressed(e)) { + e.preventDefault(); + customDelete(true); + editor.selection.setContent(String.fromCharCode(e.charCode)); + } + }); + + editor.addCommand('Delete', function() { + customDelete(); + }); + + editor.addCommand('ForwardDelete', function() { + customDelete(true); + }); + + // Older WebKits doesn't properly handle the clipboard so we can't add the rest + if (olderWebKit) { + return; + } + + editor.on('dragstart', function(e) { + // Safari doesn't support custom dataTransfer items so we can only use URL and Text + e.dataTransfer.setData('URL', 'data:text/mce-internal,' + escape(editor.selection.getContent())); + }); + + editor.on('drop', function(e) { + if (!isDefaultPrevented(e)) { + var internalContent = e.dataTransfer.getData('URL'); + + if (!internalContent || internalContent.indexOf(urlPrefix) == -1 || !doc.caretRangeFromPoint) { + return; + } + + internalContent = unescape(internalContent.substr(urlPrefix.length)); + if (doc.caretRangeFromPoint) { + e.preventDefault(); + customDelete(); + editor.selection.setRng(doc.caretRangeFromPoint(e.x, e.y)); + editor.insertContent(internalContent); + } + } + }); + + editor.on('cut', function(e) { + if (!isDefaultPrevented(e) && e.clipboardData) { + e.preventDefault(); + e.clipboardData.clearData(); + e.clipboardData.setData('text/html', editor.selection.getContent()); + e.clipboardData.setData('text/plain', editor.selection.getContent({format: 'text'})); + customDelete(true); + } + }); + } + + /** + * Makes sure that the editor body becomes empty when backspace or delete is pressed in empty editors. + * + * For example: + *

    |

    + * + * Or: + *

    |

    + * + * Or: + * [

    ] + */ + function emptyEditorWhenDeleting() { + function serializeRng(rng) { + var body = dom.create("body"); + var contents = rng.cloneContents(); + body.appendChild(contents); + return selection.serializer.serialize(body, {format: 'html'}); + } + + function allContentsSelected(rng) { + if (!rng.setStart) { + if (rng.item) { + return false; + } + + var bodyRng = rng.duplicate(); + bodyRng.moveToElementText(editor.getBody()); + return RangeUtils.compareRanges(rng, bodyRng); + } + + var selection = serializeRng(rng); + + var allRng = dom.createRng(); + allRng.selectNode(editor.getBody()); + + var allSelection = serializeRng(allRng); + return selection === allSelection; + } + + editor.on('keydown', function(e) { + var keyCode = e.keyCode, isCollapsed, body; + + // Empty the editor if it's needed for example backspace at

    |

    + if (!isDefaultPrevented(e) && (keyCode == DELETE || keyCode == BACKSPACE)) { + isCollapsed = editor.selection.isCollapsed(); + body = editor.getBody(); + + // Selection is collapsed but the editor isn't empty + if (isCollapsed && !dom.isEmpty(body)) { + return; + } + + // Selection isn't collapsed but not all the contents is selected + if (!isCollapsed && !allContentsSelected(editor.selection.getRng())) { + return; + } + + // Manually empty the editor + e.preventDefault(); + editor.setContent(''); + + if (body.firstChild && dom.isBlock(body.firstChild)) { + editor.selection.setCursorLocation(body.firstChild, 0); + } else { + editor.selection.setCursorLocation(body, 0); + } + + editor.nodeChanged(); + } + }); + } + + /** + * WebKit doesn't select all the nodes in the body when you press Ctrl+A. + * IE selects more than the contents [

    a

    ] instead of

    [a] see bug #6438 + * This selects the whole body so that backspace/delete logic will delete everything + */ + function selectAll() { + editor.on('keydown', function(e) { + if (!isDefaultPrevented(e) && e.keyCode == 65 && VK.metaKeyPressed(e)) { + e.preventDefault(); + editor.execCommand('SelectAll'); + } + }); + } + + /** + * WebKit has a weird issue where it some times fails to properly convert keypresses to input method keystrokes. + * The IME on Mac doesn't initialize when it doesn't fire a proper focus event. + * + * This seems to happen when the user manages to click the documentElement element then the window doesn't get proper focus until + * you enter a character into the editor. + * + * It also happens when the first focus in made to the body. + * + * See: https://bugs.webkit.org/show_bug.cgi?id=83566 + */ + function inputMethodFocus() { + if (!editor.settings.content_editable) { + // Case 1 IME doesn't initialize if you focus the document + dom.bind(editor.getDoc(), 'focusin', function() { + selection.setRng(selection.getRng()); + }); + + // Case 2 IME doesn't initialize if you click the documentElement it also doesn't properly fire the focusin event + dom.bind(editor.getDoc(), 'mousedown', function(e) { + if (e.target == editor.getDoc().documentElement) { + editor.getBody().focus(); + selection.setRng(selection.getRng()); + } + }); + } + } + + /** + * Backspacing in FireFox/IE from a paragraph into a horizontal rule results in a floating text node because the + * browser just deletes the paragraph - the browser fails to merge the text node with a horizontal rule so it is + * left there. TinyMCE sees a floating text node and wraps it in a paragraph on the key up event (ForceBlocks.js + * addRootBlocks), meaning the action does nothing. With this code, FireFox/IE matche the behaviour of other + * browsers. + * + * It also fixes a bug on Firefox where it's impossible to delete HR elements. + */ + function removeHrOnBackspace() { + editor.on('keydown', function(e) { + if (!isDefaultPrevented(e) && e.keyCode === BACKSPACE) { + if (selection.isCollapsed() && selection.getRng(true).startOffset === 0) { + var node = selection.getNode(); + var previousSibling = node.previousSibling; + + if (node.nodeName == 'HR') { + dom.remove(node); + e.preventDefault(); + return; + } + + if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === "hr") { + dom.remove(previousSibling); + e.preventDefault(); + } + } + } + }); + } + + /** + * Firefox 3.x has an issue where the body element won't get proper focus if you click out + * side it's rectangle. + */ + function focusBody() { + // Fix for a focus bug in FF 3.x where the body element + // wouldn't get proper focus if the user clicked on the HTML element + if (!window.Range.prototype.getClientRects) { // Detect getClientRects got introduced in FF 4 + editor.on('mousedown', function(e) { + if (!isDefaultPrevented(e) && e.target.nodeName === "HTML") { + var body = editor.getBody(); + + // Blur the body it's focused but not correctly focused + body.blur(); + + // Refocus the body after a little while + setTimeout(function() { + body.focus(); + }, 0); + } + }); + } + } + + /** + * WebKit has a bug where it isn't possible to select image, hr or anchor elements + * by clicking on them so we need to fake that. + */ + function selectControlElements() { + editor.on('click', function(e) { + e = e.target; + + // Workaround for bug, http://bugs.webkit.org/show_bug.cgi?id=12250 + // WebKit can't even do simple things like selecting an image + // Needs tobe the setBaseAndExtend or it will fail to select floated images + if (/^(IMG|HR)$/.test(e.nodeName)) { + selection.getSel().setBaseAndExtent(e, 0, e, 1); + } + + if (e.nodeName == 'A' && dom.hasClass(e, 'mce-item-anchor')) { + selection.select(e); + } + + editor.nodeChanged(); + }); + } + + /** + * Fixes a Gecko bug where the style attribute gets added to the wrong element when deleting between two block elements. + * + * Fixes do backspace/delete on this: + *

    bla[ck

    r]ed

    + * + * Would become: + *

    bla|ed

    + * + * Instead of: + *

    bla|ed

    + */ + function removeStylesWhenDeletingAcrossBlockElements() { + function getAttributeApplyFunction() { + var template = dom.getAttribs(selection.getStart().cloneNode(false)); + + return function() { + var target = selection.getStart(); + + if (target !== editor.getBody()) { + dom.setAttrib(target, "style", null); + + each(template, function(attr) { + target.setAttributeNode(attr.cloneNode(true)); + }); + } + }; + } + + function isSelectionAcrossElements() { + return !selection.isCollapsed() && + dom.getParent(selection.getStart(), dom.isBlock) != dom.getParent(selection.getEnd(), dom.isBlock); + } + + editor.on('keypress', function(e) { + var applyAttributes; + + if (!isDefaultPrevented(e) && (e.keyCode == 8 || e.keyCode == 46) && isSelectionAcrossElements()) { + applyAttributes = getAttributeApplyFunction(); + editor.getDoc().execCommand('delete', false, null); + applyAttributes(); + e.preventDefault(); + return false; + } + }); + + dom.bind(editor.getDoc(), 'cut', function(e) { + var applyAttributes; + + if (!isDefaultPrevented(e) && isSelectionAcrossElements()) { + applyAttributes = getAttributeApplyFunction(); + + setTimeout(function() { + applyAttributes(); + }, 0); + } + }); + } + + /** + * Fire a nodeChanged when the selection is changed on WebKit this fixes selection issues on iOS5. It only fires the nodeChange + * event every 50ms since it would other wise update the UI when you type and it hogs the CPU. + */ + function selectionChangeNodeChanged() { + var lastRng, selectionTimer; + + editor.on('selectionchange', function() { + if (selectionTimer) { + clearTimeout(selectionTimer); + selectionTimer = 0; + } + + selectionTimer = window.setTimeout(function() { + if (editor.removed) { + return; + } + + var rng = selection.getRng(); + + // Compare the ranges to see if it was a real change or not + if (!lastRng || !RangeUtils.compareRanges(rng, lastRng)) { + editor.nodeChanged(); + lastRng = rng; + } + }, 50); + }); + } + + /** + * Screen readers on IE needs to have the role application set on the body. + */ + function ensureBodyHasRoleApplication() { + document.body.setAttribute("role", "application"); + } + + /** + * Backspacing into a table behaves differently depending upon browser type. + * Therefore, disable Backspace when cursor immediately follows a table. + */ + function disableBackspaceIntoATable() { + editor.on('keydown', function(e) { + if (!isDefaultPrevented(e) && e.keyCode === BACKSPACE) { + if (selection.isCollapsed() && selection.getRng(true).startOffset === 0) { + var previousSibling = selection.getNode().previousSibling; + if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === "table") { + e.preventDefault(); + return false; + } + } + } + }); + } + + /** + * Old IE versions can't properly render BR elements in PRE tags white in contentEditable mode. So this + * logic adds a \n before the BR so that it will get rendered. + */ + function addNewLinesBeforeBrInPre() { + // IE8+ rendering mode does the right thing with BR in PRE + if (getDocumentMode() > 7) { + return; + } + + // Enable display: none in area and add a specific class that hides all BR elements in PRE to + // avoid the caret from getting stuck at the BR elements while pressing the right arrow key + setEditorCommandState('RespectVisibilityInDesign', true); + editor.contentStyles.push('.mceHideBrInPre pre br {display: none}'); + dom.addClass(editor.getBody(), 'mceHideBrInPre'); + + // Adds a \n before all BR elements in PRE to get them visual + parser.addNodeFilter('pre', function(nodes) { + var i = nodes.length, brNodes, j, brElm, sibling; + + while (i--) { + brNodes = nodes[i].getAll('br'); + j = brNodes.length; + while (j--) { + brElm = brNodes[j]; + + // Add \n before BR in PRE elements on older IE:s so the new lines get rendered + sibling = brElm.prev; + if (sibling && sibling.type === 3 && sibling.value.charAt(sibling.value - 1) != '\n') { + sibling.value += '\n'; + } else { + brElm.parent.insert(new Node('#text', 3), brElm, true).value = '\n'; + } + } + } + }); + + // Removes any \n before BR elements in PRE since other browsers and in contentEditable=false mode they will be visible + serializer.addNodeFilter('pre', function(nodes) { + var i = nodes.length, brNodes, j, brElm, sibling; + + while (i--) { + brNodes = nodes[i].getAll('br'); + j = brNodes.length; + while (j--) { + brElm = brNodes[j]; + sibling = brElm.prev; + if (sibling && sibling.type == 3) { + sibling.value = sibling.value.replace(/\r?\n$/, ''); + } + } + } + }); + } + + /** + * Moves style width/height to attribute width/height when the user resizes an image on IE. + */ + function removePreSerializedStylesWhenSelectingControls() { + dom.bind(editor.getBody(), 'mouseup', function() { + var value, node = selection.getNode(); + + // Moved styles to attributes on IMG eements + if (node.nodeName == 'IMG') { + // Convert style width to width attribute + if ((value = dom.getStyle(node, 'width'))) { + dom.setAttrib(node, 'width', value.replace(/[^0-9%]+/g, '')); + dom.setStyle(node, 'width', ''); + } + + // Convert style height to height attribute + if ((value = dom.getStyle(node, 'height'))) { + dom.setAttrib(node, 'height', value.replace(/[^0-9%]+/g, '')); + dom.setStyle(node, 'height', ''); + } + } + }); + } + + /** + * Removes a blockquote when backspace is pressed at the beginning of it. + * + * For example: + *

    |x

    + * + * Becomes: + *

    |x

    + */ + function removeBlockQuoteOnBackSpace() { + // Add block quote deletion handler + editor.on('keydown', function(e) { + var rng, container, offset, root, parent; + + if (isDefaultPrevented(e) || e.keyCode != VK.BACKSPACE) { + return; + } + + rng = selection.getRng(); + container = rng.startContainer; + offset = rng.startOffset; + root = dom.getRoot(); + parent = container; + + if (!rng.collapsed || offset !== 0) { + return; + } + + while (parent && parent.parentNode && parent.parentNode.firstChild == parent && parent.parentNode != root) { + parent = parent.parentNode; + } + + // Is the cursor at the beginning of a blockquote? + if (parent.tagName === 'BLOCKQUOTE') { + // Remove the blockquote + editor.formatter.toggle('blockquote', null, parent); + + // Move the caret to the beginning of container + rng = dom.createRng(); + rng.setStart(container, 0); + rng.setEnd(container, 0); + selection.setRng(rng); + } + }); + } + + /** + * Sets various Gecko editing options on mouse down and before a execCommand to disable inline table editing that is broken etc. + */ + function setGeckoEditingOptions() { + function setOpts() { + editor._refreshContentEditable(); + + setEditorCommandState("StyleWithCSS", false); + setEditorCommandState("enableInlineTableEditing", false); + + if (!settings.object_resizing) { + setEditorCommandState("enableObjectResizing", false); + } + } + + if (!settings.readonly) { + editor.on('BeforeExecCommand MouseDown', setOpts); + } + } + + /** + * Fixes a gecko link bug, when a link is placed at the end of block elements there is + * no way to move the caret behind the link. This fix adds a bogus br element after the link. + * + * For example this: + *

    x

    + * + * Becomes this: + *

    x

    + */ + function addBrAfterLastLinks() { + function fixLinks() { + each(dom.select('a'), function(node) { + var parentNode = node.parentNode, root = dom.getRoot(); + + if (parentNode.lastChild === node) { + while (parentNode && !dom.isBlock(parentNode)) { + if (parentNode.parentNode.lastChild !== parentNode || parentNode === root) { + return; + } + + parentNode = parentNode.parentNode; + } + + dom.add(parentNode, 'br', {'data-mce-bogus': 1}); + } + }); + } + + editor.on('SetContent ExecCommand', function(e) { + if (e.type == "setcontent" || e.command === 'mceInsertLink') { + fixLinks(); + } + }); + } + + /** + * WebKit will produce DIV elements here and there by default. But since TinyMCE uses paragraphs by + * default we want to change that behavior. + */ + function setDefaultBlockType() { + if (settings.forced_root_block) { + editor.on('init', function() { + setEditorCommandState('DefaultParagraphSeparator', settings.forced_root_block); + }); + } + } + + /** + * Removes ghost selections from images/tables on Gecko. + */ + function removeGhostSelection() { + editor.on('Undo Redo SetContent', function(e) { + if (!e.initial) { + editor.execCommand('mceRepaint'); + } + }); + } + + /** + * Deletes the selected image on IE instead of navigating to previous page. + */ + function deleteControlItemOnBackSpace() { + editor.on('keydown', function(e) { + var rng; + + if (!isDefaultPrevented(e) && e.keyCode == BACKSPACE) { + rng = editor.getDoc().selection.createRange(); + if (rng && rng.item) { + e.preventDefault(); + editor.undoManager.beforeChange(); + dom.remove(rng.item(0)); + editor.undoManager.add(); + } + } + }); + } + + /** + * IE10 doesn't properly render block elements with the right height until you add contents to them. + * This fixes that by adding a padding-right to all empty text block elements. + * See: https://connect.microsoft.com/IE/feedback/details/743881 + */ + function renderEmptyBlocksFix() { + var emptyBlocksCSS; + + // IE10+ + if (getDocumentMode() >= 10) { + emptyBlocksCSS = ''; + each('p div h1 h2 h3 h4 h5 h6'.split(' '), function(name, i) { + emptyBlocksCSS += (i > 0 ? ',' : '') + name + ':empty'; + }); + + editor.contentStyles.push(emptyBlocksCSS + '{padding-right: 1px !important}'); + } + } + + /** + * Old IE versions can't retain contents within noscript elements so this logic will store the contents + * as a attribute and the insert that value as it's raw text when the DOM is serialized. + */ + function keepNoScriptContents() { + if (getDocumentMode() < 9) { + parser.addNodeFilter('noscript', function(nodes) { + var i = nodes.length, node, textNode; + + while (i--) { + node = nodes[i]; + textNode = node.firstChild; + + if (textNode) { + node.attr('data-mce-innertext', textNode.value); + } + } + }); + + serializer.addNodeFilter('noscript', function(nodes) { + var i = nodes.length, node, textNode, value; + + while (i--) { + node = nodes[i]; + textNode = nodes[i].firstChild; + + if (textNode) { + textNode.value = Entities.decode(textNode.value); + } else { + // Old IE can't retain noscript value so an attribute is used to store it + value = node.attributes.map['data-mce-innertext']; + if (value) { + node.attr('data-mce-innertext', null); + textNode = new Node('#text', 3); + textNode.value = value; + textNode.raw = true; + node.append(textNode); + } + } + } + }); + } + } + + /** + * IE has an issue where you can't select/move the caret by clicking outside the body if the document is in standards mode. + */ + function fixCaretSelectionOfDocumentElementOnIe() { + var doc = dom.doc, body = doc.body, started, startRng, htmlElm; + + // Return range from point or null if it failed + function rngFromPoint(x, y) { + var rng = body.createTextRange(); + + try { + rng.moveToPoint(x, y); + } catch (ex) { + // IE sometimes throws and exception, so lets just ignore it + rng = null; + } + + return rng; + } + + // Fires while the selection is changing + function selectionChange(e) { + var pointRng; + + // Check if the button is down or not + if (e.button) { + // Create range from mouse position + pointRng = rngFromPoint(e.x, e.y); + + if (pointRng) { + // Check if pointRange is before/after selection then change the endPoint + if (pointRng.compareEndPoints('StartToStart', startRng) > 0) { + pointRng.setEndPoint('StartToStart', startRng); + } else { + pointRng.setEndPoint('EndToEnd', startRng); + } + + pointRng.select(); + } + } else { + endSelection(); + } + } + + // Removes listeners + function endSelection() { + var rng = doc.selection.createRange(); + + // If the range is collapsed then use the last start range + if (startRng && !rng.item && rng.compareEndPoints('StartToEnd', rng) === 0) { + startRng.select(); + } + + dom.unbind(doc, 'mouseup', endSelection); + dom.unbind(doc, 'mousemove', selectionChange); + startRng = started = 0; + } + + // Make HTML element unselectable since we are going to handle selection by hand + doc.documentElement.unselectable = true; + + // Detect when user selects outside BODY + dom.bind(doc, 'mousedown contextmenu', function(e) { + if (e.target.nodeName === 'HTML') { + if (started) { + endSelection(); + } + + // Detect vertical scrollbar, since IE will fire a mousedown on the scrollbar and have target set as HTML + htmlElm = doc.documentElement; + if (htmlElm.scrollHeight > htmlElm.clientHeight) { + return; + } + + started = 1; + // Setup start position + startRng = rngFromPoint(e.x, e.y); + if (startRng) { + // Listen for selection change events + dom.bind(doc, 'mouseup', endSelection); + dom.bind(doc, 'mousemove', selectionChange); + + dom.getRoot().focus(); + startRng.select(); + } + } + }); + } + + /** + * Fixes selection issues where the caret can be placed between two inline elements like a|b + * this fix will lean the caret right into the closest inline element. + */ + function normalizeSelection() { + // Normalize selection for example a|a becomes a|a except for Ctrl+A since it selects everything + editor.on('keyup focusin mouseup', function(e) { + if (e.keyCode != 65 || !VK.metaKeyPressed(e)) { + selection.normalize(); + } + }, true); + } + + /** + * Forces Gecko to render a broken image icon if it fails to load an image. + */ + function showBrokenImageIcon() { + editor.contentStyles.push( + 'img:-moz-broken {' + + '-moz-force-broken-image-icon:1;' + + 'min-width:24px;' + + 'min-height:24px' + + '}' + ); + } + + /** + * iOS has a bug where it's impossible to type if the document has a touchstart event + * bound and the user touches the document while having the on screen keyboard visible. + * + * The touch event moves the focus to the parent document while having the caret inside the iframe + * this fix moves the focus back into the iframe document. + */ + function restoreFocusOnKeyDown() { + if (!editor.inline) { + editor.on('keydown', function() { + if (document.activeElement == document.body) { + editor.getWin().focus(); + } + }); + } + } + + /** + * IE 11 has an annoying issue where you can't move focus into the editor + * by clicking on the white area HTML element. We used to be able to to fix this with + * the fixCaretSelectionOfDocumentElementOnIe fix. But since M$ removed the selection + * object it's not possible anymore. So we need to hack in a ungly CSS to force the + * body to be at least 150px. If the user clicks the HTML element out side this 150px region + * we simply move the focus into the first paragraph. Not ideal since you loose the + * positioning of the caret but goot enough for most cases. + */ + function bodyHeight() { + if (!editor.inline) { + editor.contentStyles.push('body {min-height: 150px}'); + editor.on('click', function(e) { + if (e.target.nodeName == 'HTML') { + editor.getBody().focus(); + editor.selection.normalize(); + editor.nodeChanged(); + } + }); + } + } + + /** + * Firefox on Mac OS will move the browser back to the previous page if you press CMD+Left arrow. + * You might then loose all your work so we need to block that behavior and replace it with our own. + */ + function blockCmdArrowNavigation() { + if (Env.mac) { + editor.on('keydown', function(e) { + if (VK.metaKeyPressed(e) && (e.keyCode == 37 || e.keyCode == 39)) { + e.preventDefault(); + editor.selection.getSel().modify('move', e.keyCode == 37 ? 'backward' : 'forward', 'word'); + } + }); + } + } + + /** + * Disables the autolinking in IE 9+ this is then re-enabled by the autolink plugin. + */ + function disableAutoUrlDetect() { + setEditorCommandState("AutoUrlDetect", false); + } + + /** + * IE 11 has a fantastic bug where it will produce two trailing BR elements to iframe bodies when + * the iframe is hidden by display: none on a parent container. The DOM is actually out of sync + * with innerHTML in this case. It's like IE adds shadow DOM BR elements that appears on innerHTML + * but not as the lastChild of the body. However is we add a BR element to the body then remove it + * it doesn't seem to add these BR elements makes sence right?! + * + * Example of what happens: text becomes text

    + */ + function doubleTrailingBrElements() { + if (!editor.inline) { + editor.on('focus blur', function() { + var br = editor.dom.create('br'); + editor.getBody().appendChild(br); + br.parentNode.removeChild(br); + }, true); + } + } + + /** + * iOS 7.1 introduced two new bugs: + * 1) It's possible to open links within a contentEditable area by clicking on them. + * 2) If you hold down the finger it will display the link/image touch callout menu. + */ + function tapLinksAndImages() { + editor.on('click', function(e) { + if (e.target.tagName === 'A') { + e.preventDefault(); + } + }); + + editor.contentStyles.push('.mce-content-body {-webkit-touch-callout: none}'); + } + + // All browsers + disableBackspaceIntoATable(); + removeBlockQuoteOnBackSpace(); + emptyEditorWhenDeleting(); + normalizeSelection(); + + // WebKit + if (isWebKit) { + cleanupStylesWhenDeleting(); + inputMethodFocus(); + selectControlElements(); + setDefaultBlockType(); + + // iOS + if (Env.iOS) { + selectionChangeNodeChanged(); + restoreFocusOnKeyDown(); + bodyHeight(); + tapLinksAndImages(); + } else { + selectAll(); + } + } + + // IE + if (isIE && Env.ie < 11) { + removeHrOnBackspace(); + ensureBodyHasRoleApplication(); + addNewLinesBeforeBrInPre(); + removePreSerializedStylesWhenSelectingControls(); + deleteControlItemOnBackSpace(); + renderEmptyBlocksFix(); + keepNoScriptContents(); + fixCaretSelectionOfDocumentElementOnIe(); + } + + if (Env.ie >= 11) { + bodyHeight(); + doubleTrailingBrElements(); + } + + if (Env.ie) { + selectAll(); + disableAutoUrlDetect(); + } + + // Gecko + if (isGecko) { + removeHrOnBackspace(); + focusBody(); + removeStylesWhenDeletingAcrossBlockElements(); + setGeckoEditingOptions(); + addBrAfterLastLinks(); + removeGhostSelection(); + showBrokenImageIcon(); + blockCmdArrowNavigation(); + } + }; +}); + +// Included from: js/tinymce/classes/util/Observable.js + +/** + * Observable.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This mixin will add event binding logic to classes. + * + * @mixin tinymce.util.Observable + */ +define("tinymce/util/Observable", [ + "tinymce/util/Tools" +], function(Tools) { + var bindingsName = "__bindings"; + var nativeEvents = Tools.makeMap( + "focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange" + + " mouseout mouseenter mouseleave keydown keypress keyup contextmenu dragstart dragend dragover draggesture dragdrop drop drag", ' ' + ); + + function returnFalse() { + return false; + } + + function returnTrue() { + return true; + } + + return { + /** + * Fires the specified event by name. + * + * @method fire + * @param {String} name Name of the event to fire. + * @param {tinymce.Event/Object?} args Event arguments. + * @param {Boolean?} bubble True/false if the event is to be bubbled. + * @return {tinymce.Event} Event instance passed in converted into tinymce.Event instance. + * @example + * instance.fire('event', {...}); + */ + fire: function(name, args, bubble) { + var self = this, handlers, i, l, callback, parent; + + if (self.removed) { + return; + } + + name = name.toLowerCase(); + args = args || {}; + args.type = name; + + // Setup target is there isn't one + if (!args.target) { + args.target = self; + } + + // Add event delegation methods if they are missing + if (!args.preventDefault) { + // Add preventDefault method + args.preventDefault = function() { + args.isDefaultPrevented = returnTrue; + }; + + // Add stopPropagation + args.stopPropagation = function() { + args.isPropagationStopped = returnTrue; + }; + + // Add stopImmediatePropagation + args.stopImmediatePropagation = function() { + args.isImmediatePropagationStopped = returnTrue; + }; + + // Add event delegation states + args.isDefaultPrevented = returnFalse; + args.isPropagationStopped = returnFalse; + args.isImmediatePropagationStopped = returnFalse; + } + + //console.log(name, args); + + if (self[bindingsName]) { + handlers = self[bindingsName][name]; + + if (handlers) { + for (i = 0, l = handlers.length; i < l; i++) { + handlers[i] = callback = handlers[i]; + + // Stop immediate propagation if needed + if (args.isImmediatePropagationStopped()) { + break; + } + + // If callback returns false then prevent default and stop all propagation + if (callback.call(self, args) === false) { + args.preventDefault(); + return args; + } + } + } + } + + // Bubble event up to parents + if (bubble !== false && self.parent) { + parent = self.parent(); + while (parent && !args.isPropagationStopped()) { + parent.fire(name, args, false); + parent = parent.parent(); + } + } + + return args; + }, + + /** + * Binds an event listener to a specific event by name. + * + * @method on + * @param {String} name Event name or space separated list of events to bind. + * @param {callback} callback Callback to be executed when the event occurs. + * @param {Boolean} first Optional flag if the event should be prepended. Use this with care. + * @return {Object} Current class instance. + * @example + * instance.on('event', function(e) { + * // Callback logic + * }); + */ + on: function(name, callback, prepend) { + var self = this, bindings, handlers, names, i; + + if (callback === false) { + callback = function() { + return false; + }; + } + + if (callback) { + names = name.toLowerCase().split(' '); + i = names.length; + while (i--) { + name = names[i]; + + bindings = self[bindingsName]; + if (!bindings) { + bindings = self[bindingsName] = {}; + } + + handlers = bindings[name]; + if (!handlers) { + handlers = bindings[name] = []; + if (self.bindNative && nativeEvents[name]) { + self.bindNative(name); + } + } + + if (prepend) { + handlers.unshift(callback); + } else { + handlers.push(callback); + } + } + } + + return self; + }, + + /** + * Unbinds an event listener to a specific event by name. + * + * @method off + * @param {String?} name Name of the event to unbind. + * @param {callback?} callback Callback to unbind. + * @return {Object} Current class instance. + * @example + * // Unbind specific callback + * instance.off('event', handler); + * + * // Unbind all listeners by name + * instance.off('event'); + * + * // Unbind all events + * instance.off(); + */ + off: function(name, callback) { + var self = this, i, bindings = self[bindingsName], handlers, bindingName, names, hi; + + if (bindings) { + if (name) { + names = name.toLowerCase().split(' '); + i = names.length; + while (i--) { + name = names[i]; + handlers = bindings[name]; + + // Unbind all handlers + if (!name) { + for (bindingName in bindings) { + bindings[name].length = 0; + } + + return self; + } + + if (handlers) { + // Unbind all by name + if (!callback) { + handlers.length = 0; + } else { + // Unbind specific ones + hi = handlers.length; + while (hi--) { + if (handlers[hi] === callback) { + handlers.splice(hi, 1); + } + } + } + + if (!handlers.length && self.unbindNative && nativeEvents[name]) { + self.unbindNative(name); + delete bindings[name]; + } + } + } + } else { + if (self.unbindNative) { + for (name in bindings) { + self.unbindNative(name); + } + } + + self[bindingsName] = []; + } + } + + return self; + }, + + hasEventListeners: function(name) { + var bindings = this[bindingsName]; + + name = name.toLowerCase(); + + return !(!bindings || !bindings[name] || bindings[name].length === 0); + } + }; +}); + +// Included from: js/tinymce/classes/Shortcuts.js + +/** + * Shortcuts.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Contains all logic for handling of keyboard shortcuts. + */ +define("tinymce/Shortcuts", [ + "tinymce/util/Tools", + "tinymce/Env" +], function(Tools, Env) { + var each = Tools.each, explode = Tools.explode; + + var keyCodeLookup = { + "f9": 120, + "f10": 121, + "f11": 122 + }; + + return function(editor) { + var self = this, shortcuts = {}; + + editor.on('keyup keypress keydown', function(e) { + if (e.altKey || e.ctrlKey || e.metaKey) { + each(shortcuts, function(shortcut) { + var ctrlKey = Env.mac ? e.metaKey : e.ctrlKey; + + if (shortcut.ctrl != ctrlKey || shortcut.alt != e.altKey || shortcut.shift != e.shiftKey) { + return; + } + + if (e.keyCode == shortcut.keyCode || (e.charCode && e.charCode == shortcut.charCode)) { + e.preventDefault(); + + if (e.type == "keydown") { + shortcut.func.call(shortcut.scope); + } + + return true; + } + }); + } + }); + + /** + * Adds a keyboard shortcut for some command or function. + * + * @method addShortcut + * @param {String} pattern Shortcut pattern. Like for example: ctrl+alt+o. + * @param {String} desc Text description for the command. + * @param {String/Function} cmdFunc Command name string or function to execute when the key is pressed. + * @param {Object} sc Optional scope to execute the function in. + * @return {Boolean} true/false state if the shortcut was added or not. + */ + self.add = function(pattern, desc, cmdFunc, scope) { + var cmd; + + cmd = cmdFunc; + + if (typeof(cmdFunc) === 'string') { + cmdFunc = function() { + editor.execCommand(cmd, false, null); + }; + } else if (Tools.isArray(cmd)) { + cmdFunc = function() { + editor.execCommand(cmd[0], cmd[1], cmd[2]); + }; + } + + each(explode(pattern.toLowerCase()), function(pattern) { + var shortcut = { + func: cmdFunc, + scope: scope || editor, + desc: editor.translate(desc), + alt: false, + ctrl: false, + shift: false + }; + + each(explode(pattern, '+'), function(value) { + switch (value) { + case 'alt': + case 'ctrl': + case 'shift': + shortcut[value] = true; + break; + + default: + shortcut.charCode = value.charCodeAt(0); + shortcut.keyCode = keyCodeLookup[value] || value.toUpperCase().charCodeAt(0); + } + }); + + shortcuts[ + (shortcut.ctrl ? 'ctrl' : '') + ',' + + (shortcut.alt ? 'alt' : '') + ',' + + (shortcut.shift ? 'shift' : '') + ',' + + shortcut.keyCode + ] = shortcut; + }); + + return true; + }; + }; +}); + +// Included from: js/tinymce/classes/Editor.js + +/** + * Editor.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*jshint scripturl:true */ + +/** + * Include the base event class documentation. + * + * @include ../../../tools/docs/tinymce.Event.js + */ + +/** + * This class contains the core logic for a TinyMCE editor. + * + * @class tinymce.Editor + * @mixes tinymce.util.Observable + * @example + * // Add a class to all paragraphs in the editor. + * tinymce.activeEditor.dom.addClass(tinymce.activeEditor.dom.select('p'), 'someclass'); + * + * // Gets the current editors selection as text + * tinymce.activeEditor.selection.getContent({format: 'text'}); + * + * // Creates a new editor instance + * var ed = new tinymce.Editor('textareaid', { + * some_setting: 1 + * }, tinymce.EditorManager); + * + * // Select each item the user clicks on + * ed.on('click', function(e) { + * ed.selection.select(e.target); + * }); + * + * ed.render(); + */ +define("tinymce/Editor", [ + "tinymce/dom/DOMUtils", + "tinymce/AddOnManager", + "tinymce/html/Node", + "tinymce/dom/Serializer", + "tinymce/html/Serializer", + "tinymce/dom/Selection", + "tinymce/Formatter", + "tinymce/UndoManager", + "tinymce/EnterKey", + "tinymce/ForceBlocks", + "tinymce/EditorCommands", + "tinymce/util/URI", + "tinymce/dom/ScriptLoader", + "tinymce/dom/EventUtils", + "tinymce/WindowManager", + "tinymce/html/Schema", + "tinymce/html/DomParser", + "tinymce/util/Quirks", + "tinymce/Env", + "tinymce/util/Tools", + "tinymce/util/Observable", + "tinymce/Shortcuts" +], function( + DOMUtils, AddOnManager, Node, DomSerializer, Serializer, + Selection, Formatter, UndoManager, EnterKey, ForceBlocks, EditorCommands, + URI, ScriptLoader, EventUtils, WindowManager, + Schema, DomParser, Quirks, Env, Tools, Observable, Shortcuts +) { + // Shorten these names + var DOM = DOMUtils.DOM, ThemeManager = AddOnManager.ThemeManager, PluginManager = AddOnManager.PluginManager; + var extend = Tools.extend, each = Tools.each, explode = Tools.explode; + var inArray = Tools.inArray, trim = Tools.trim, resolve = Tools.resolve; + var Event = EventUtils.Event; + var isGecko = Env.gecko, ie = Env.ie; + + function getEventTarget(editor, eventName) { + if (eventName == 'selectionchange') { + return editor.getDoc(); + } + + // Need to bind mousedown/mouseup etc to document not body in iframe mode + // Since the user might click on the HTML element not the BODY + if (!editor.inline && /^mouse|click|contextmenu|drop/.test(eventName)) { + return editor.getDoc(); + } + + return editor.getBody(); + } + + /** + * Include documentation for all the events. + * + * @include ../../../tools/docs/tinymce.Editor.js + */ + + /** + * Constructs a editor instance by id. + * + * @constructor + * @method Editor + * @param {String} id Unique id for the editor. + * @param {Object} settings Settings for the editor. + * @param {tinymce.EditorManager} editorManager EditorManager instance. + * @author Moxiecode + */ + function Editor(id, settings, editorManager) { + var self = this, documentBaseUrl, baseUri; + + documentBaseUrl = self.documentBaseUrl = editorManager.documentBaseURL; + baseUri = editorManager.baseURI; + + /** + * Name/value collection with editor settings. + * + * @property settings + * @type Object + * @example + * // Get the value of the theme setting + * tinymce.activeEditor.windowManager.alert("You are using the " + tinymce.activeEditor.settings.theme + " theme"); + */ + self.settings = settings = extend({ + id: id, + theme: 'modern', + delta_width: 0, + delta_height: 0, + popup_css: '', + plugins: '', + document_base_url: documentBaseUrl, + add_form_submit_trigger: true, + submit_patch: true, + add_unload_trigger: true, + convert_urls: true, + relative_urls: true, + remove_script_host: true, + object_resizing: true, + doctype: '', + visual: true, + font_size_style_values: 'xx-small,x-small,small,medium,large,x-large,xx-large', + + // See: http://www.w3.org/TR/CSS2/fonts.html#propdef-font-size + font_size_legacy_values: 'xx-small,small,medium,large,x-large,xx-large,300%', + forced_root_block: 'p', + hidden_input: true, + padd_empty_editor: true, + render_ui: true, + indentation: '30px', + inline_styles: true, + convert_fonts_to_spans: true, + indent: 'simple', + indent_before: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,' + + 'tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist', + indent_after: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,' + + 'tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist', + validate: true, + entity_encoding: 'named', + url_converter: self.convertURL, + url_converter_scope: self, + ie7_compat: true + }, settings); + + AddOnManager.language = settings.language || 'en'; + AddOnManager.languageLoad = settings.language_load; + + AddOnManager.baseURL = editorManager.baseURL; + + /** + * Editor instance id, normally the same as the div/textarea that was replaced. + * + * @property id + * @type String + */ + self.id = settings.id = id; + + /** + * State to force the editor to return false on a isDirty call. + * + * @property isNotDirty + * @type Boolean + * @example + * function ajaxSave() { + * var ed = tinymce.get('elm1'); + * + * // Save contents using some XHR call + * alert(ed.getContent()); + * + * ed.isNotDirty = true; // Force not dirty state + * } + */ + self.isNotDirty = true; + + /** + * Name/Value object containting plugin instances. + * + * @property plugins + * @type Object + * @example + * // Execute a method inside a plugin directly + * tinymce.activeEditor.plugins.someplugin.someMethod(); + */ + self.plugins = {}; + + /** + * URI object to document configured for the TinyMCE instance. + * + * @property documentBaseURI + * @type tinymce.util.URI + * @example + * // Get relative URL from the location of document_base_url + * tinymce.activeEditor.documentBaseURI.toRelative('/somedir/somefile.htm'); + * + * // Get absolute URL from the location of document_base_url + * tinymce.activeEditor.documentBaseURI.toAbsolute('somefile.htm'); + */ + self.documentBaseURI = new URI(settings.document_base_url || documentBaseUrl, { + base_uri: baseUri + }); + + /** + * URI object to current document that holds the TinyMCE editor instance. + * + * @property baseURI + * @type tinymce.util.URI + * @example + * // Get relative URL from the location of the API + * tinymce.activeEditor.baseURI.toRelative('/somedir/somefile.htm'); + * + * // Get absolute URL from the location of the API + * tinymce.activeEditor.baseURI.toAbsolute('somefile.htm'); + */ + self.baseURI = baseUri; + + /** + * Array with CSS files to load into the iframe. + * + * @property contentCSS + * @type Array + */ + self.contentCSS = []; + + /** + * Array of CSS styles to add to head of document when the editor loads. + * + * @property contentStyles + * @type Array + */ + self.contentStyles = []; + + // Creates all events like onClick, onSetContent etc see Editor.Events.js for the actual logic + self.shortcuts = new Shortcuts(self); + + // Internal command handler objects + self.execCommands = {}; + self.queryStateCommands = {}; + self.queryValueCommands = {}; + self.loadedCSS = {}; + + self.suffix = editorManager.suffix; + self.editorManager = editorManager; + self.inline = settings.inline; + + // Call setup + editorManager.fire('SetupEditor', self); + self.execCallback('setup', self); + } + + Editor.prototype = { + /** + * Renderes the editor/adds it to the page. + * + * @method render + */ + render: function() { + var self = this, settings = self.settings, id = self.id, suffix = self.suffix; + + function readyHandler() { + DOM.unbind(window, 'ready', readyHandler); + self.render(); + } + + // Page is not loaded yet, wait for it + if (!Event.domLoaded) { + DOM.bind(window, 'ready', readyHandler); + return; + } + + // Element not found, then skip initialization + if (!self.getElement()) { + return; + } + + // No editable support old iOS versions etc + if (!Env.contentEditable) { + return; + } + + // Hide target element early to prevent content flashing + if (!settings.inline) { + self.orgVisibility = self.getElement().style.visibility; + self.getElement().style.visibility = 'hidden'; + } else { + self.inline = true; + } + + var form = self.getElement().form || DOM.getParent(id, 'form'); + if (form) { + self.formElement = form; + + // Add hidden input for non input elements inside form elements + if (settings.hidden_input && !/TEXTAREA|INPUT/i.test(self.getElement().nodeName)) { + DOM.insertAfter(DOM.create('input', {type: 'hidden', name: id}), id); + self.hasHiddenInput = true; + } + + // Pass submit/reset from form to editor instance + self.formEventDelegate = function(e) { + self.fire(e.type, e); + }; + + DOM.bind(form, 'submit reset', self.formEventDelegate); + + // Reset contents in editor when the form is reset + self.on('reset', function() { + self.setContent(self.startContent, {format: 'raw'}); + }); + + // Check page uses id="submit" or name="submit" for it's submit button + if (settings.submit_patch && !form.submit.nodeType && !form.submit.length && !form._mceOldSubmit) { + form._mceOldSubmit = form.submit; + form.submit = function() { + self.editorManager.triggerSave(); + self.isNotDirty = true; + + return form._mceOldSubmit(form); + }; + } + } + + /** + * Window manager reference, use this to open new windows and dialogs. + * + * @property windowManager + * @type tinymce.WindowManager + * @example + * // Shows an alert message + * tinymce.activeEditor.windowManager.alert('Hello world!'); + * + * // Opens a new dialog with the file.htm file and the size 320x240 + * // It also adds a custom parameter this can be retrieved by using tinyMCEPopup.getWindowArg inside the dialog. + * tinymce.activeEditor.windowManager.open({ + * url: 'file.htm', + * width: 320, + * height: 240 + * }, { + * custom_param: 1 + * }); + */ + self.windowManager = new WindowManager(self); + + if (settings.encoding == 'xml') { + self.on('GetContent', function(e) { + if (e.save) { + e.content = DOM.encode(e.content); + } + }); + } + + if (settings.add_form_submit_trigger) { + self.on('submit', function() { + if (self.initialized) { + self.save(); + } + }); + } + + if (settings.add_unload_trigger) { + self._beforeUnload = function() { + if (self.initialized && !self.destroyed && !self.isHidden()) { + self.save({format: 'raw', no_events: true, set_dirty: false}); + } + }; + + self.editorManager.on('BeforeUnload', self._beforeUnload); + } + + // Load scripts + function loadScripts() { + var scriptLoader = ScriptLoader.ScriptLoader; + + if (settings.language && settings.language != 'en' && !settings.language_url) { + settings.language_url = self.editorManager.baseURL + '/langs/' + settings.language + '.js'; + } + + if (settings.language_url) { + scriptLoader.add(settings.language_url); + } + + if (settings.theme && typeof settings.theme != "function" && + settings.theme.charAt(0) != '-' && !ThemeManager.urls[settings.theme]) { + var themeUrl = settings.theme_url; + + if (themeUrl) { + themeUrl = self.documentBaseURI.toAbsolute(themeUrl); + } else { + themeUrl = 'themes/' + settings.theme + '/theme' + suffix + '.js'; + } + + ThemeManager.load(settings.theme, themeUrl); + } + + if (Tools.isArray(settings.plugins)) { + settings.plugins = settings.plugins.join(' '); + } + + each(settings.external_plugins, function(url, name) { + PluginManager.load(name, url); + settings.plugins += ' ' + name; + }); + + each(settings.plugins.split(/[ ,]/), function(plugin) { + plugin = trim(plugin); + + if (plugin && !PluginManager.urls[plugin]) { + if (plugin.charAt(0) == '-') { + plugin = plugin.substr(1, plugin.length); + + var dependencies = PluginManager.dependencies(plugin); + + each(dependencies, function(dep) { + var defaultSettings = { + prefix:'plugins/', + resource: dep, + suffix:'/plugin' + suffix + '.js' + }; + + dep = PluginManager.createUrl(defaultSettings, dep); + PluginManager.load(dep.resource, dep); + }); + } else { + PluginManager.load(plugin, { + prefix: 'plugins/', + resource: plugin, + suffix: '/plugin' + suffix + '.js' + }); + } + } + }); + + scriptLoader.loadQueue(function() { + if (!self.removed) { + self.init(); + } + }); + } + + loadScripts(); + }, + + /** + * Initializes the editor this will be called automatically when + * all plugins/themes and language packs are loaded by the rendered method. + * This method will setup the iframe and create the theme and plugin instances. + * + * @method init + */ + init: function() { + var self = this, settings = self.settings, elm = self.getElement(); + var w, h, minHeight, n, o, Theme, url, bodyId, bodyClass, re, i, initializedPlugins = []; + + self.rtl = this.editorManager.i18n.rtl; + self.editorManager.add(self); + + settings.aria_label = settings.aria_label || DOM.getAttrib(elm, 'aria-label', self.getLang('aria.rich_text_area')); + + /** + * Reference to the theme instance that was used to generate the UI. + * + * @property theme + * @type tinymce.Theme + * @example + * // Executes a method on the theme directly + * tinymce.activeEditor.theme.someMethod(); + */ + if (settings.theme) { + if (typeof settings.theme != "function") { + settings.theme = settings.theme.replace(/-/, ''); + Theme = ThemeManager.get(settings.theme); + self.theme = new Theme(self, ThemeManager.urls[settings.theme]); + + if (self.theme.init) { + self.theme.init(self, ThemeManager.urls[settings.theme] || self.documentBaseUrl.replace(/\/$/, '')); + } + } else { + self.theme = settings.theme; + } + } + + function initPlugin(plugin) { + var Plugin = PluginManager.get(plugin), pluginUrl, pluginInstance; + + pluginUrl = PluginManager.urls[plugin] || self.documentBaseUrl.replace(/\/$/, ''); + plugin = trim(plugin); + if (Plugin && inArray(initializedPlugins, plugin) === -1) { + each(PluginManager.dependencies(plugin), function(dep){ + initPlugin(dep); + }); + + pluginInstance = new Plugin(self, pluginUrl); + + self.plugins[plugin] = pluginInstance; + + if (pluginInstance.init) { + pluginInstance.init(self, pluginUrl); + initializedPlugins.push(plugin); + } + } + } + + // Create all plugins + each(settings.plugins.replace(/\-/g, '').split(/[ ,]/), initPlugin); + + // Measure box + if (settings.render_ui && self.theme) { + self.orgDisplay = elm.style.display; + + if (typeof settings.theme != "function") { + w = settings.width || elm.style.width || elm.offsetWidth; + h = settings.height || elm.style.height || elm.offsetHeight; + minHeight = settings.min_height || 100; + re = /^[0-9\.]+(|px)$/i; + + if (re.test('' + w)) { + w = Math.max(parseInt(w, 10), 100); + } + + if (re.test('' + h)) { + h = Math.max(parseInt(h, 10), minHeight); + } + + // Render UI + o = self.theme.renderUI({ + targetNode: elm, + width: w, + height: h, + deltaWidth: settings.delta_width, + deltaHeight: settings.delta_height + }); + + // Resize editor + if (!settings.content_editable) { + DOM.setStyles(o.sizeContainer || o.editorContainer, { + wi2dth: w, + // TODO: Fix this + h2eight: h + }); + + h = (o.iframeHeight || h) + (typeof(h) == 'number' ? (o.deltaHeight || 0) : ''); + if (h < minHeight) { + h = minHeight; + } + } + } else { + o = settings.theme(self, elm); + + // Convert element type to id:s + if (o.editorContainer.nodeType) { + o.editorContainer = o.editorContainer.id = o.editorContainer.id || self.id + "_parent"; + } + + // Convert element type to id:s + if (o.iframeContainer.nodeType) { + o.iframeContainer = o.iframeContainer.id = o.iframeContainer.id || self.id + "_iframecontainer"; + } + + // Use specified iframe height or the targets offsetHeight + h = o.iframeHeight || elm.offsetHeight; + } + + self.editorContainer = o.editorContainer; + } + + // Load specified content CSS last + if (settings.content_css) { + each(explode(settings.content_css), function(u) { + self.contentCSS.push(self.documentBaseURI.toAbsolute(u)); + }); + } + + // Load specified content CSS last + if (settings.content_style) { + self.contentStyles.push(settings.content_style); + } + + // Content editable mode ends here + if (settings.content_editable) { + elm = n = o = null; // Fix IE leak + return self.initContentBody(); + } + + self.iframeHTML = settings.doctype + ''; + + // We only need to override paths if we have to + // IE has a bug where it remove site absolute urls to relative ones if this is specified + if (settings.document_base_url != self.documentBaseUrl) { + self.iframeHTML += ''; + } + + // IE8 doesn't support carets behind images setting ie7_compat would force IE8+ to run in IE7 compat mode. + if (!Env.caretAfter && settings.ie7_compat) { + self.iframeHTML += ''; + } + + self.iframeHTML += ''; + + // Load the CSS by injecting them into the HTML this will reduce "flicker" + for (i = 0; i < self.contentCSS.length; i++) { + var cssUrl = self.contentCSS[i]; + self.iframeHTML += ''; + self.loadedCSS[cssUrl] = true; + } + + bodyId = settings.body_id || 'tinymce'; + if (bodyId.indexOf('=') != -1) { + bodyId = self.getParam('body_id', '', 'hash'); + bodyId = bodyId[self.id] || bodyId; + } + + bodyClass = settings.body_class || ''; + if (bodyClass.indexOf('=') != -1) { + bodyClass = self.getParam('body_class', '', 'hash'); + bodyClass = bodyClass[self.id] || ''; + } + + self.iframeHTML += '
    '; + + /*eslint no-script-url:0 */ + var domainRelaxUrl = 'javascript:(function(){' + + 'document.open();document.domain="' + document.domain + '";' + + 'var ed = window.parent.tinymce.get("' + self.id + '");document.write(ed.iframeHTML);' + + 'document.close();ed.initContentBody(true);})()'; + + // Domain relaxing is required since the user has messed around with document.domain + if (document.domain != location.hostname) { + url = domainRelaxUrl; + } + + // Create iframe + // TODO: ACC add the appropriate description on this. + n = DOM.add(o.iframeContainer, 'iframe', { + id: self.id + "_ifr", + src: url || 'javascript:""', // Workaround for HTTPS warning in IE6/7 + frameBorder: '0', + allowTransparency: "true", + title: self.editorManager.translate( + "Rich Text Area. Press ALT-F9 for menu. " + + "Press ALT-F10 for toolbar. Press ALT-0 for help" + ), + style: { + width: '100%', + height: h, + display: 'block' // Important for Gecko to render the iframe correctly + } + }); + + // Try accessing the document this will fail on IE when document.domain is set to the same as location.hostname + // Then we have to force domain relaxing using the domainRelaxUrl approach very ugly!! + if (ie) { + try { + self.getDoc(); + } catch (e) { + n.src = url = domainRelaxUrl; + } + } + + self.contentAreaContainer = o.iframeContainer; + + if (o.editorContainer) { + DOM.get(o.editorContainer).style.display = self.orgDisplay; + } + + DOM.get(self.id).style.display = 'none'; + DOM.setAttrib(self.id, 'aria-hidden', true); + + if (!url) { + self.initContentBody(); + } + + elm = n = o = null; // Cleanup + }, + + /** + * This method get called by the init method ones the iframe is loaded. + * It will fill the iframe with contents, setups DOM and selection objects for the iframe. + * + * @method initContentBody + * @private + */ + initContentBody: function(skipWrite) { + var self = this, settings = self.settings, targetElm = DOM.get(self.id), doc = self.getDoc(), body, contentCssText; + + // Restore visibility on target element + if (!settings.inline) { + self.getElement().style.visibility = self.orgVisibility; + } + + // Setup iframe body + if (!skipWrite && !settings.content_editable) { + doc.open(); + doc.write(self.iframeHTML); + doc.close(); + } + + if (settings.content_editable) { + self.on('remove', function() { + var bodyEl = this.getBody(); + + DOM.removeClass(bodyEl, 'mce-content-body'); + DOM.removeClass(bodyEl, 'mce-edit-focus'); + DOM.setAttrib(bodyEl, 'tabIndex', null); + DOM.setAttrib(bodyEl, 'contentEditable', null); + }); + + DOM.addClass(targetElm, 'mce-content-body'); + targetElm.tabIndex = -1; + self.contentDocument = doc = settings.content_document || document; + self.contentWindow = settings.content_window || window; + self.bodyElement = targetElm; + + // Prevent leak in IE + settings.content_document = settings.content_window = null; + + // TODO: Fix this + settings.root_name = targetElm.nodeName.toLowerCase(); + } + + // It will not steal focus while setting contentEditable + body = self.getBody(); + body.disabled = true; + + if (!settings.readonly) { + if (self.inline && DOM.getStyle(body, 'position', true) == 'static') { + body.style.position = 'relative'; + } + + body.contentEditable = self.getParam('content_editable_state', true); + } + + body.disabled = false; + + /** + * Schema instance, enables you to validate elements and it's children. + * + * @property schema + * @type tinymce.html.Schema + */ + self.schema = new Schema(settings); + + /** + * DOM instance for the editor. + * + * @property dom + * @type tinymce.dom.DOMUtils + * @example + * // Adds a class to all paragraphs within the editor + * tinymce.activeEditor.dom.addClass(tinymce.activeEditor.dom.select('p'), 'someclass'); + */ + self.dom = new DOMUtils(doc, { + keep_values: true, + url_converter: self.convertURL, + url_converter_scope: self, + hex_colors: settings.force_hex_style_colors, + class_filter: settings.class_filter, + update_styles: true, + root_element: settings.content_editable ? self.id : null, + collect: settings.content_editable, + schema: self.schema, + onSetAttrib: function(e) { + self.fire('SetAttrib', e); + } + }); + + /** + * HTML parser will be used when contents is inserted into the editor. + * + * @property parser + * @type tinymce.html.DomParser + */ + self.parser = new DomParser(settings, self.schema); + + // Convert src and href into data-mce-src, data-mce-href and data-mce-style + self.parser.addAttributeFilter('src,href,style', function(nodes, name) { + var i = nodes.length, node, dom = self.dom, value, internalName; + + while (i--) { + node = nodes[i]; + value = node.attr(name); + internalName = 'data-mce-' + name; + + // Add internal attribute if we need to we don't on a refresh of the document + if (!node.attributes.map[internalName]) { + if (name === "style") { + node.attr(internalName, dom.serializeStyle(dom.parseStyle(value), node.name)); + } else { + node.attr(internalName, self.convertURL(value, name, node.name)); + } + } + } + }); + + // Keep scripts from executing + self.parser.addNodeFilter('script', function(nodes) { + var i = nodes.length, node; + + while (i--) { + node = nodes[i]; + node.attr('type', 'mce-' + (node.attr('type') || 'text/javascript')); + } + }); + + self.parser.addNodeFilter('#cdata', function(nodes) { + var i = nodes.length, node; + + while (i--) { + node = nodes[i]; + node.type = 8; + node.name = '#comment'; + node.value = '[CDATA[' + node.value + ']]'; + } + }); + + self.parser.addNodeFilter('p,h1,h2,h3,h4,h5,h6,div', function(nodes) { + var i = nodes.length, node, nonEmptyElements = self.schema.getNonEmptyElements(); + + while (i--) { + node = nodes[i]; + + if (node.isEmpty(nonEmptyElements)) { + node.empty().append(new Node('br', 1)).shortEnded = true; + } + } + }); + + /** + * DOM serializer for the editor. Will be used when contents is extracted from the editor. + * + * @property serializer + * @type tinymce.dom.Serializer + * @example + * // Serializes the first paragraph in the editor into a string + * tinymce.activeEditor.serializer.serialize(tinymce.activeEditor.dom.select('p')[0]); + */ + self.serializer = new DomSerializer(settings, self); + + /** + * Selection instance for the editor. + * + * @property selection + * @type tinymce.dom.Selection + * @example + * // Sets some contents to the current selection in the editor + * tinymce.activeEditor.selection.setContent('Some contents'); + * + * // Gets the current selection + * alert(tinymce.activeEditor.selection.getContent()); + * + * // Selects the first paragraph found + * tinymce.activeEditor.selection.select(tinymce.activeEditor.dom.select('p')[0]); + */ + self.selection = new Selection(self.dom, self.getWin(), self.serializer, self); + + /** + * Formatter instance. + * + * @property formatter + * @type tinymce.Formatter + */ + self.formatter = new Formatter(self); + + /** + * Undo manager instance, responsible for handling undo levels. + * + * @property undoManager + * @type tinymce.UndoManager + * @example + * // Undoes the last modification to the editor + * tinymce.activeEditor.undoManager.undo(); + */ + self.undoManager = new UndoManager(self); + + self.forceBlocks = new ForceBlocks(self); + self.enterKey = new EnterKey(self); + self.editorCommands = new EditorCommands(self); + + self.fire('PreInit'); + + if (!settings.browser_spellcheck && !settings.gecko_spellcheck) { + doc.body.spellcheck = false; // Gecko + DOM.setAttrib(body, "spellcheck", "false"); + } + + self.fire('PostRender'); + + self.quirks = Quirks(self); + + if (settings.directionality) { + body.dir = settings.directionality; + } + + if (settings.nowrap) { + body.style.whiteSpace = "nowrap"; + } + + if (settings.protect) { + self.on('BeforeSetContent', function(e) { + each(settings.protect, function(pattern) { + e.content = e.content.replace(pattern, function(str) { + return ''; + }); + }); + }); + } + + self.on('SetContent', function() { + self.addVisual(self.getBody()); + }); + + // Remove empty contents + if (settings.padd_empty_editor) { + self.on('PostProcess', function(e) { + e.content = e.content.replace(/^(]*>( | |\s|\u00a0|)<\/p>[\r\n]*|
    [\r\n]*)$/, ''); + }); + } + + self.load({initial: true, format: 'html'}); + self.startContent = self.getContent({format: 'raw'}); + + /** + * Is set to true after the editor instance has been initialized + * + * @property initialized + * @type Boolean + * @example + * function isEditorInitialized(editor) { + * return editor && editor.initialized; + * } + */ + self.initialized = true; + + each(self._pendingNativeEvents, function(name) { + self.dom.bind(getEventTarget(self, name), name, function(e) { + self.fire(e.type, e); + }); + }); + + self.fire('init'); + self.focus(true); + self.nodeChanged({initial: true}); + self.execCallback('init_instance_callback', self); + + // Add editor specific CSS styles + if (self.contentStyles.length > 0) { + contentCssText = ''; + + each(self.contentStyles, function(style) { + contentCssText += style + "\r\n"; + }); + + self.dom.addStyle(contentCssText); + } + + // Load specified content CSS last + each(self.contentCSS, function(cssUrl) { + if (!self.loadedCSS[cssUrl]) { + self.dom.loadCSS(cssUrl); + self.loadedCSS[cssUrl] = true; + } + }); + + // Handle auto focus + if (settings.auto_focus) { + setTimeout(function () { + var ed = self.editorManager.get(settings.auto_focus); + + ed.selection.select(ed.getBody(), 1); + ed.selection.collapse(1); + ed.getBody().focus(); + ed.getWin().focus(); + }, 100); + } + + // Clean up references for IE + targetElm = doc = body = null; + }, + + /** + * Focuses/activates the editor. This will set this editor as the activeEditor in the tinymce collection + * it will also place DOM focus inside the editor. + * + * @method focus + * @param {Boolean} skip_focus Skip DOM focus. Just set is as the active editor. + */ + focus: function(skip_focus) { + var oed, self = this, selection = self.selection, contentEditable = self.settings.content_editable, rng; + var controlElm, doc = self.getDoc(), body; + + if (!skip_focus) { + // Get selected control element + rng = selection.getRng(); + if (rng.item) { + controlElm = rng.item(0); + } + + self._refreshContentEditable(); + + // Focus the window iframe + if (!contentEditable) { + // WebKit needs this call to fire focusin event properly see #5948 + // But Opera pre Blink engine will produce an empty selection so skip Opera + if (!Env.opera) { + self.getBody().focus(); + } + + self.getWin().focus(); + } + + // Focus the body as well since it's contentEditable + if (isGecko || contentEditable) { + body = self.getBody(); + + // Check for setActive since it doesn't scroll to the element + if (body.setActive && Env.ie < 11) { + body.setActive(); + } else { + body.focus(); + } + + if (contentEditable) { + selection.normalize(); + } + } + + // Restore selected control element + // This is needed when for example an image is selected within a + // layer a call to focus will then remove the control selection + if (controlElm && controlElm.ownerDocument == doc) { + rng = doc.body.createControlRange(); + rng.addElement(controlElm); + rng.select(); + } + } + + if (self.editorManager.activeEditor != self) { + if ((oed = self.editorManager.activeEditor)) { + oed.fire('deactivate', {relatedTarget: self}); + } + + self.fire('activate', {relatedTarget: oed}); + } + + self.editorManager.activeEditor = self; + }, + + /** + * Executes a legacy callback. This method is useful to call old 2.x option callbacks. + * There new event model is a better way to add callback so this method might be removed in the future. + * + * @method execCallback + * @param {String} name Name of the callback to execute. + * @return {Object} Return value passed from callback function. + */ + execCallback: function(name) { + var self = this, callback = self.settings[name], scope; + + if (!callback) { + return; + } + + // Look through lookup + if (self.callbackLookup && (scope = self.callbackLookup[name])) { + callback = scope.func; + scope = scope.scope; + } + + if (typeof(callback) === 'string') { + scope = callback.replace(/\.\w+$/, ''); + scope = scope ? resolve(scope) : 0; + callback = resolve(callback); + self.callbackLookup = self.callbackLookup || {}; + self.callbackLookup[name] = {func: callback, scope: scope}; + } + + return callback.apply(scope || self, Array.prototype.slice.call(arguments, 1)); + }, + + /** + * Translates the specified string by replacing variables with language pack items it will also check if there is + * a key mathcin the input. + * + * @method translate + * @param {String} text String to translate by the language pack data. + * @return {String} Translated string. + */ + translate: function(text) { + var lang = this.settings.language || 'en', i18n = this.editorManager.i18n; + + if (!text) { + return ''; + } + + return i18n.data[lang + '.' + text] || text.replace(/\{\#([^\}]+)\}/g, function(a, b) { + return i18n.data[lang + '.' + b] || '{#' + b + '}'; + }); + }, + + /** + * Returns a language pack item by name/key. + * + * @method getLang + * @param {String} name Name/key to get from the language pack. + * @param {String} defaultVal Optional default value to retrive. + */ + getLang: function(name, defaultVal) { + return ( + this.editorManager.i18n.data[(this.settings.language || 'en') + '.' + name] || + (defaultVal !== undefined ? defaultVal : '{#' + name + '}') + ); + }, + + /** + * Returns a configuration parameter by name. + * + * @method getParam + * @param {String} name Configruation parameter to retrive. + * @param {String} defaultVal Optional default value to return. + * @param {String} type Optional type parameter. + * @return {String} Configuration parameter value or default value. + * @example + * // Returns a specific config value from the currently active editor + * var someval = tinymce.activeEditor.getParam('myvalue'); + * + * // Returns a specific config value from a specific editor instance by id + * var someval2 = tinymce.get('my_editor').getParam('myvalue'); + */ + getParam: function(name, defaultVal, type) { + var value = name in this.settings ? this.settings[name] : defaultVal, output; + + if (type === 'hash') { + output = {}; + + if (typeof(value) === 'string') { + each(value.indexOf('=') > 0 ? value.split(/[;,](?![^=;,]*(?:[;,]|$))/) : value.split(','), function(value) { + value = value.split('='); + + if (value.length > 1) { + output[trim(value[0])] = trim(value[1]); + } else { + output[trim(value[0])] = trim(value); + } + }); + } else { + output = value; + } + + return output; + } + + return value; + }, + + /** + * Distpaches out a onNodeChange event to all observers. This method should be called when you + * need to update the UI states or element path etc. + * + * @method nodeChanged + */ + nodeChanged: function() { + var self = this, selection = self.selection, node, parents, root; + + // Fix for bug #1896577 it seems that this can not be fired while the editor is loading + if (self.initialized && !self.settings.disable_nodechange && !self.settings.readonly) { + // Get start node + root = self.getBody(); + node = selection.getStart() || root; + node = ie && node.ownerDocument != self.getDoc() ? self.getBody() : node; // Fix for IE initial state + + // Edge case for

    |

    + if (node.nodeName == 'IMG' && selection.isCollapsed()) { + node = node.parentNode; + } + + // Get parents and add them to object + parents = []; + self.dom.getParent(node, function(node) { + if (node === root) { + return true; + } + + parents.push(node); + }); + + self.fire('NodeChange', {element: node, parents: parents}); + } + }, + + /** + * Adds a button that later gets created by the theme in the editors toolbars. + * + * @method addButton + * @param {String} name Button name to add. + * @param {Object} settings Settings object with title, cmd etc. + * @example + * // Adds a custom button to the editor that inserts contents when clicked + * tinymce.init({ + * ... + * + * toolbar: 'example' + * + * setup: function(ed) { + * ed.addButton('example', { + * title: 'My title', + * image: '../js/tinymce/plugins/example/img/example.gif', + * onclick: function() { + * ed.insertContent('Hello world!!'); + * } + * }); + * } + * }); + */ + addButton: function(name, settings) { + var self = this; + + if (settings.cmd) { + settings.onclick = function() { + self.execCommand(settings.cmd); + }; + } + + if (!settings.text && !settings.icon) { + settings.icon = name; + } + + self.buttons = self.buttons || {}; + settings.tooltip = settings.tooltip || settings.title; + self.buttons[name] = settings; + }, + + /** + * Adds a menu item to be used in the menus of the theme. There might be multiple instances + * of this menu item for example it might be used in the main menus of the theme but also in + * the context menu so make sure that it's self contained and supports multiple instances. + * + * @method addMenuItem + * @param {String} name Menu item name to add. + * @param {Object} settings Settings object with title, cmd etc. + * @example + * // Adds a custom menu item to the editor that inserts contents when clicked + * // The context option allows you to add the menu item to an existing default menu + * tinymce.init({ + * ... + * + * setup: function(ed) { + * ed.addMenuItem('example', { + * text: 'My menu item', + * context: 'tools', + * onclick: function() { + * ed.insertContent('Hello world!!'); + * } + * }); + * } + * }); + */ + addMenuItem: function(name, settings) { + var self = this; + + if (settings.cmd) { + settings.onclick = function() { + self.execCommand(settings.cmd); + }; + } + + self.menuItems = self.menuItems || {}; + self.menuItems[name] = settings; + }, + + /** + * Adds a custom command to the editor, you can also override existing commands with this method. + * The command that you add can be executed with execCommand. + * + * @method addCommand + * @param {String} name Command name to add/override. + * @param {addCommandCallback} callback Function to execute when the command occurs. + * @param {Object} scope Optional scope to execute the function in. + * @example + * // Adds a custom command that later can be executed using execCommand + * tinymce.init({ + * ... + * + * setup: function(ed) { + * // Register example command + * ed.addCommand('mycommand', function(ui, v) { + * ed.windowManager.alert('Hello world!! Selection: ' + ed.selection.getContent({format: 'text'})); + * }); + * } + * }); + */ + addCommand: function(name, callback, scope) { + /** + * Callback function that gets called when a command is executed. + * + * @callback addCommandCallback + * @param {Boolean} ui Display UI state true/false. + * @param {Object} value Optional value for command. + * @return {Boolean} True/false state if the command was handled or not. + */ + this.execCommands[name] = {func: callback, scope: scope || this}; + }, + + /** + * Adds a custom query state command to the editor, you can also override existing commands with this method. + * The command that you add can be executed with queryCommandState function. + * + * @method addQueryStateHandler + * @param {String} name Command name to add/override. + * @param {addQueryStateHandlerCallback} callback Function to execute when the command state retrival occurs. + * @param {Object} scope Optional scope to execute the function in. + */ + addQueryStateHandler: function(name, callback, scope) { + /** + * Callback function that gets called when a queryCommandState is executed. + * + * @callback addQueryStateHandlerCallback + * @return {Boolean} True/false state if the command is enabled or not like is it bold. + */ + this.queryStateCommands[name] = {func: callback, scope: scope || this}; + }, + + /** + * Adds a custom query value command to the editor, you can also override existing commands with this method. + * The command that you add can be executed with queryCommandValue function. + * + * @method addQueryValueHandler + * @param {String} name Command name to add/override. + * @param {addQueryValueHandlerCallback} callback Function to execute when the command value retrival occurs. + * @param {Object} scope Optional scope to execute the function in. + */ + addQueryValueHandler: function(name, callback, scope) { + /** + * Callback function that gets called when a queryCommandValue is executed. + * + * @callback addQueryValueHandlerCallback + * @return {Object} Value of the command or undefined. + */ + this.queryValueCommands[name] = {func: callback, scope: scope || this}; + }, + + /** + * Adds a keyboard shortcut for some command or function. + * + * @method addShortcut + * @param {String} pattern Shortcut pattern. Like for example: ctrl+alt+o. + * @param {String} desc Text description for the command. + * @param {String/Function} cmdFunc Command name string or function to execute when the key is pressed. + * @param {Object} sc Optional scope to execute the function in. + * @return {Boolean} true/false state if the shortcut was added or not. + */ + addShortcut: function(pattern, desc, cmdFunc, scope) { + this.shortcuts.add(pattern, desc, cmdFunc, scope); + }, + + /** + * Executes a command on the current instance. These commands can be TinyMCE internal commands prefixed with "mce" or + * they can be build in browser commands such as "Bold". A compleate list of browser commands is available on MSDN or Mozilla.org. + * This function will dispatch the execCommand function on each plugin, theme or the execcommand_callback option if none of these + * return true it will handle the command as a internal browser command. + * + * @method execCommand + * @param {String} cmd Command name to execute, for example mceLink or Bold. + * @param {Boolean} ui True/false state if a UI (dialog) should be presented or not. + * @param {mixed} value Optional command value, this can be anything. + * @param {Object} a Optional arguments object. + */ + execCommand: function(cmd, ui, value, args) { + var self = this, state = 0, cmdItem; + + if (!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(cmd) && (!args || !args.skip_focus)) { + self.focus(); + } + + args = extend({}, args); + args = self.fire('BeforeExecCommand', {command: cmd, ui: ui, value: value}); + if (args.isDefaultPrevented()) { + return false; + } + + // Registred commands + if ((cmdItem = self.execCommands[cmd])) { + // Fall through on true + if (cmdItem.func.call(cmdItem.scope, ui, value) !== true) { + self.fire('ExecCommand', {command: cmd, ui: ui, value: value}); + return true; + } + } + + // Plugin commands + each(self.plugins, function(p) { + if (p.execCommand && p.execCommand(cmd, ui, value)) { + self.fire('ExecCommand', {command: cmd, ui: ui, value: value}); + state = true; + return false; + } + }); + + if (state) { + return state; + } + + // Theme commands + if (self.theme && self.theme.execCommand && self.theme.execCommand(cmd, ui, value)) { + self.fire('ExecCommand', {command: cmd, ui: ui, value: value}); + return true; + } + + // Editor commands + if (self.editorCommands.execCommand(cmd, ui, value)) { + self.fire('ExecCommand', {command: cmd, ui: ui, value: value}); + return true; + } + + // Browser commands + self.getDoc().execCommand(cmd, ui, value); + self.fire('ExecCommand', {command: cmd, ui: ui, value: value}); + }, + + /** + * Returns a command specific state, for example if bold is enabled or not. + * + * @method queryCommandState + * @param {string} cmd Command to query state from. + * @return {Boolean} Command specific state, for example if bold is enabled or not. + */ + queryCommandState: function(cmd) { + var self = this, queryItem, returnVal; + + // Is hidden then return undefined + if (self._isHidden()) { + return; + } + + // Registred commands + if ((queryItem = self.queryStateCommands[cmd])) { + returnVal = queryItem.func.call(queryItem.scope); + + // Fall though on true + if (returnVal !== true) { + return returnVal; + } + } + + // Editor commands + returnVal = self.editorCommands.queryCommandState(cmd); + if (returnVal !== -1) { + return returnVal; + } + + // Browser commands + try { + return self.getDoc().queryCommandState(cmd); + } catch (ex) { + // Fails sometimes see bug: 1896577 + } + }, + + /** + * Returns a command specific value, for example the current font size. + * + * @method queryCommandValue + * @param {string} cmd Command to query value from. + * @return {Object} Command specific value, for example the current font size. + */ + queryCommandValue: function(cmd) { + var self = this, queryItem, returnVal; + + // Is hidden then return undefined + if (self._isHidden()) { + return; + } + + // Registred commands + if ((queryItem = self.queryValueCommands[cmd])) { + returnVal = queryItem.func.call(queryItem.scope); + + // Fall though on true + if (returnVal !== true) { + return returnVal; + } + } + + // Editor commands + returnVal = self.editorCommands.queryCommandValue(cmd); + if (returnVal !== undefined) { + return returnVal; + } + + // Browser commands + try { + return self.getDoc().queryCommandValue(cmd); + } catch (ex) { + // Fails sometimes see bug: 1896577 + } + }, + + /** + * Shows the editor and hides any textarea/div that the editor is supposed to replace. + * + * @method show + */ + show: function() { + var self = this; + + DOM.show(self.getContainer()); + DOM.hide(self.id); + self.load(); + self.fire('show'); + }, + + /** + * Hides the editor and shows any textarea/div that the editor is supposed to replace. + * + * @method hide + */ + hide: function() { + var self = this, doc = self.getDoc(); + + // Fixed bug where IE has a blinking cursor left from the editor + if (ie && doc && !self.inline) { + doc.execCommand('SelectAll'); + } + + // We must save before we hide so Safari doesn't crash + self.save(); + + // defer the call to hide to prevent an IE9 crash #4921 + DOM.hide(self.getContainer()); + DOM.setStyle(self.id, 'display', self.orgDisplay); + self.fire('hide'); + }, + + /** + * Returns true/false if the editor is hidden or not. + * + * @method isHidden + * @return {Boolean} True/false if the editor is hidden or not. + */ + isHidden: function() { + return !DOM.isHidden(this.id); + }, + + /** + * Sets the progress state, this will display a throbber/progess for the editor. + * This is ideal for asycronous operations like an AJAX save call. + * + * @method setProgressState + * @param {Boolean} state Boolean state if the progress should be shown or hidden. + * @param {Number} time Optional time to wait before the progress gets shown. + * @return {Boolean} Same as the input state. + * @example + * // Show progress for the active editor + * tinymce.activeEditor.setProgressState(true); + * + * // Hide progress for the active editor + * tinymce.activeEditor.setProgressState(false); + * + * // Show progress after 3 seconds + * tinymce.activeEditor.setProgressState(true, 3000); + */ + setProgressState: function(state, time) { + this.fire('ProgressState', {state: state, time: time}); + }, + + /** + * Loads contents from the textarea or div element that got converted into an editor instance. + * This method will move the contents from that textarea or div into the editor by using setContent + * so all events etc that method has will get dispatched as well. + * + * @method load + * @param {Object} args Optional content object, this gets passed around through the whole load process. + * @return {String} HTML string that got set into the editor. + */ + load: function(args) { + var self = this, elm = self.getElement(), html; + + if (elm) { + args = args || {}; + args.load = true; + + html = self.setContent(elm.value !== undefined ? elm.value : elm.innerHTML, args); + args.element = elm; + + if (!args.no_events) { + self.fire('LoadContent', args); + } + + args.element = elm = null; + + return html; + } + }, + + /** + * Saves the contents from a editor out to the textarea or div element that got converted into an editor instance. + * This method will move the HTML contents from the editor into that textarea or div by getContent + * so all events etc that method has will get dispatched as well. + * + * @method save + * @param {Object} args Optional content object, this gets passed around through the whole save process. + * @return {String} HTML string that got set into the textarea/div. + */ + save: function(args) { + var self = this, elm = self.getElement(), html, form; + + if (!elm || !self.initialized) { + return; + } + + args = args || {}; + args.save = true; + + args.element = elm; + html = args.content = self.getContent(args); + + if (!args.no_events) { + self.fire('SaveContent', args); + } + + html = args.content; + + if (!/TEXTAREA|INPUT/i.test(elm.nodeName)) { + // Update DIV element when not in inline mode + if (!self.inline) { + elm.innerHTML = html; + } + + // Update hidden form element + if ((form = DOM.getParent(self.id, 'form'))) { + each(form.elements, function(elm) { + if (elm.name == self.id) { + elm.value = html; + return false; + } + }); + } + } else { + elm.value = html; + } + + args.element = elm = null; + + if (args.set_dirty !== false) { + self.isNotDirty = true; + } + + return html; + }, + + /** + * Sets the specified content to the editor instance, this will cleanup the content before it gets set using + * the different cleanup rules options. + * + * @method setContent + * @param {String} content Content to set to editor, normally HTML contents but can be other formats as well. + * @param {Object} args Optional content object, this gets passed around through the whole set process. + * @return {String} HTML string that got set into the editor. + * @example + * // Sets the HTML contents of the activeEditor editor + * tinymce.activeEditor.setContent('some html'); + * + * // Sets the raw contents of the activeEditor editor + * tinymce.activeEditor.setContent('some html', {format: 'raw'}); + * + * // Sets the content of a specific editor (my_editor in this example) + * tinymce.get('my_editor').setContent(data); + * + * // Sets the bbcode contents of the activeEditor editor if the bbcode plugin was added + * tinymce.activeEditor.setContent('[b]some[/b] html', {format: 'bbcode'}); + */ + setContent: function(content, args) { + var self = this, body = self.getBody(), forcedRootBlockName; + + // Setup args object + args = args || {}; + args.format = args.format || 'html'; + args.set = true; + args.content = content; + + // Do preprocessing + if (!args.no_events) { + self.fire('BeforeSetContent', args); + } + + content = args.content; + + // Padd empty content in Gecko and Safari. Commands will otherwise fail on the content + // It will also be impossible to place the caret in the editor unless there is a BR element present + if (content.length === 0 || /^\s+$/.test(content)) { + forcedRootBlockName = self.settings.forced_root_block; + + // Check if forcedRootBlock is configured and that the block is a valid child of the body + if (forcedRootBlockName && self.schema.isValidChild(body.nodeName.toLowerCase(), forcedRootBlockName.toLowerCase())) { + // Padd with bogus BR elements on modern browsers and IE 7 and 8 since they don't render empty P tags properly + content = ie && ie < 11 ? '' : '
    '; + content = self.dom.createHTML(forcedRootBlockName, self.settings.forced_root_block_attrs, content); + } else if (!ie) { + // We need to add a BR when forced_root_block is disabled on non IE browsers to place the caret + content = '
    '; + } + + body.innerHTML = content; + + self.fire('SetContent', args); + } else { + // Parse and serialize the html + if (args.format !== 'raw') { + content = new Serializer({}, self.schema).serialize( + self.parser.parse(content, {isRootContent: true}) + ); + } + + // Set the new cleaned contents to the editor + args.content = trim(content); + self.dom.setHTML(body, args.content); + + // Do post processing + if (!args.no_events) { + self.fire('SetContent', args); + } + + // Don't normalize selection if the focused element isn't the body in + // content editable mode since it will steal focus otherwise + /*if (!self.settings.content_editable || document.activeElement === self.getBody()) { + self.selection.normalize(); + }*/ + } + + return args.content; + }, + + /** + * Gets the content from the editor instance, this will cleanup the content before it gets returned using + * the different cleanup rules options. + * + * @method getContent + * @param {Object} args Optional content object, this gets passed around through the whole get process. + * @return {String} Cleaned content string, normally HTML contents. + * @example + * // Get the HTML contents of the currently active editor + * console.debug(tinymce.activeEditor.getContent()); + * + * // Get the raw contents of the currently active editor + * tinymce.activeEditor.getContent({format: 'raw'}); + * + * // Get content of a specific editor: + * tinymce.get('content id').getContent() + */ + getContent: function(args) { + var self = this, content, body = self.getBody(); + + // Setup args object + args = args || {}; + args.format = args.format || 'html'; + args.get = true; + args.getInner = true; + + // Do preprocessing + if (!args.no_events) { + self.fire('BeforeGetContent', args); + } + + // Get raw contents or by default the cleaned contents + if (args.format == 'raw') { + content = body.innerHTML; + } else if (args.format == 'text') { + content = body.innerText || body.textContent; + } else { + content = self.serializer.serialize(body, args); + } + + // Trim whitespace in beginning/end of HTML + if (args.format != 'text') { + args.content = trim(content); + } else { + args.content = content; + } + + // Do post processing + if (!args.no_events) { + self.fire('GetContent', args); + } + + return args.content; + }, + + /** + * Inserts content at caret position. + * + * @method insertContent + * @param {String} content Content to insert. + */ + insertContent: function(content) { + this.execCommand('mceInsertContent', false, content); + }, + + /** + * Returns true/false if the editor is dirty or not. It will get dirty if the user has made modifications to the contents. + * + * @method isDirty + * @return {Boolean} True/false if the editor is dirty or not. It will get dirty if the user has made modifications to the contents. + * @example + * if (tinymce.activeEditor.isDirty()) + * alert("You must save your contents."); + */ + isDirty: function() { + return !this.isNotDirty; + }, + + /** + * Returns the editors container element. The container element wrappes in + * all the elements added to the page for the editor. Such as UI, iframe etc. + * + * @method getContainer + * @return {Element} HTML DOM element for the editor container. + */ + getContainer: function() { + var self = this; + + if (!self.container) { + self.container = DOM.get(self.editorContainer || self.id + '_parent'); + } + + return self.container; + }, + + /** + * Returns the editors content area container element. The this element is the one who + * holds the iframe or the editable element. + * + * @method getContentAreaContainer + * @return {Element} HTML DOM element for the editor area container. + */ + getContentAreaContainer: function() { + return this.contentAreaContainer; + }, + + /** + * Returns the target element/textarea that got replaced with a TinyMCE editor instance. + * + * @method getElement + * @return {Element} HTML DOM element for the replaced element. + */ + getElement: function() { + return DOM.get(this.settings.content_element || this.id); + }, + + /** + * Returns the iframes window object. + * + * @method getWin + * @return {Window} Iframe DOM window object. + */ + getWin: function() { + var self = this, elm; + + if (!self.contentWindow) { + elm = DOM.get(self.id + "_ifr"); + + if (elm) { + self.contentWindow = elm.contentWindow; + } + } + + return self.contentWindow; + }, + + /** + * Returns the iframes document object. + * + * @method getDoc + * @return {Document} Iframe DOM document object. + */ + getDoc: function() { + var self = this, win; + + if (!self.contentDocument) { + win = self.getWin(); + + if (win) { + self.contentDocument = win.document; + } + } + + return self.contentDocument; + }, + + /** + * Returns the iframes body element. + * + * @method getBody + * @return {Element} Iframe body element. + */ + getBody: function() { + return this.bodyElement || this.getDoc().body; + }, + + /** + * URL converter function this gets executed each time a user adds an img, a or + * any other element that has a URL in it. This will be called both by the DOM and HTML + * manipulation functions. + * + * @method convertURL + * @param {string} url URL to convert. + * @param {string} name Attribute name src, href etc. + * @param {string/HTMLElement} elm Tag name or HTML DOM element depending on HTML or DOM insert. + * @return {string} Converted URL string. + */ + convertURL: function(url, name, elm) { + var self = this, settings = self.settings; + + // Use callback instead + if (settings.urlconverter_callback) { + return self.execCallback('urlconverter_callback', url, elm, true, name); + } + + // Don't convert link href since thats the CSS files that gets loaded into the editor also skip local file URLs + if (!settings.convert_urls || (elm && elm.nodeName == 'LINK') || url.indexOf('file:') === 0 || url.length === 0) { + return url; + } + + // Convert to relative + if (settings.relative_urls) { + return self.documentBaseURI.toRelative(url); + } + + // Convert to absolute + url = self.documentBaseURI.toAbsolute(url, settings.remove_script_host); + + return url; + }, + + /** + * Adds visual aid for tables, anchors etc so they can be more easily edited inside the editor. + * + * @method addVisual + * @param {Element} elm Optional root element to loop though to find tables etc that needs the visual aid. + */ + addVisual: function(elm) { + var self = this, settings = self.settings, dom = self.dom, cls; + + elm = elm || self.getBody(); + + if (self.hasVisual === undefined) { + self.hasVisual = settings.visual; + } + + each(dom.select('table,a', elm), function(elm) { + var value; + + switch (elm.nodeName) { + case 'TABLE': + cls = settings.visual_table_class || 'mce-item-table'; + value = dom.getAttrib(elm, 'border'); + + if (!value || value == '0') { + if (self.hasVisual) { + dom.addClass(elm, cls); + } else { + dom.removeClass(elm, cls); + } + } + + return; + + case 'A': + if (!dom.getAttrib(elm, 'href', false)) { + value = dom.getAttrib(elm, 'name') || elm.id; + cls = settings.visual_anchor_class || 'mce-item-anchor'; + + if (value) { + if (self.hasVisual) { + dom.addClass(elm, cls); + } else { + dom.removeClass(elm, cls); + } + } + } + + return; + } + }); + + self.fire('VisualAid', {element: elm, hasVisual: self.hasVisual}); + }, + + /** + * Removes the editor from the dom and tinymce collection. + * + * @method remove + */ + remove: function() { + var self = this; + + if (!self.removed) { + self.save(); + self.fire('remove'); + self.off(); + self.removed = 1; // Cancels post remove event execution + + // Remove any hidden input + if (self.hasHiddenInput) { + DOM.remove(self.getElement().nextSibling); + } + + DOM.setStyle(self.id, 'display', self.orgDisplay); + + // Don't clear the window or document if content editable + // is enabled since other instances might still be present + if (!self.settings.content_editable) { + Event.unbind(self.getWin()); + Event.unbind(self.getDoc()); + } + + var elm = self.getContainer(); + Event.unbind(self.getBody()); + Event.unbind(elm); + + self.editorManager.remove(self); + DOM.remove(elm); + self.destroy(); + } + }, + + bindNative: function(name) { + var self = this; + + if (self.settings.readonly) { + return; + } + + if (self.initialized) { + self.dom.bind(getEventTarget(self, name), name, function(e) { + self.fire(name, e); + }); + } else { + if (!self._pendingNativeEvents) { + self._pendingNativeEvents = [name]; + } else { + self._pendingNativeEvents.push(name); + } + } + }, + + unbindNative: function(name) { + var self = this; + + if (self.initialized) { + self.dom.unbind(name); + } + }, + + /** + * Destroys the editor instance by removing all events, element references or other resources + * that could leak memory. This method will be called automatically when the page is unloaded + * but you can also call it directly if you know what you are doing. + * + * @method destroy + * @param {Boolean} automatic Optional state if the destroy is an automatic destroy or user called one. + */ + destroy: function(automatic) { + var self = this, form; + + // One time is enough + if (self.destroyed) { + return; + } + + // If user manually calls destroy and not remove + // Users seems to have logic that calls destroy instead of remove + if (!automatic && !self.removed) { + self.remove(); + return; + } + + // We must unbind on Gecko since it would otherwise produce the pesky "attempt + // to run compile-and-go script on a cleared scope" message + if (automatic && isGecko) { + Event.unbind(self.getDoc()); + Event.unbind(self.getWin()); + Event.unbind(self.getBody()); + } + + if (!automatic) { + self.editorManager.off('beforeunload', self._beforeUnload); + + // Manual destroy + if (self.theme && self.theme.destroy) { + self.theme.destroy(); + } + + // Destroy controls, selection and dom + self.selection.destroy(); + self.dom.destroy(); + } + + form = self.formElement; + if (form) { + if (form._mceOldSubmit) { + form.submit = form._mceOldSubmit; + form._mceOldSubmit = null; + } + + DOM.unbind(form, 'submit reset', self.formEventDelegate); + } + + self.contentAreaContainer = self.formElement = self.container = self.editorContainer = null; + self.settings.content_element = self.bodyElement = self.contentDocument = self.contentWindow = null; + + if (self.selection) { + self.selection = self.selection.win = self.selection.dom = self.selection.dom.doc = null; + } + + self.destroyed = 1; + }, + + // Internal functions + + _refreshContentEditable: function() { + var self = this, body, parent; + + // Check if the editor was hidden and the re-initalize contentEditable mode by removing and adding the body again + if (self._isHidden()) { + body = self.getBody(); + parent = body.parentNode; + + parent.removeChild(body); + parent.appendChild(body); + + body.focus(); + } + }, + + _isHidden: function() { + var sel; + + if (!isGecko) { + return 0; + } + + // Weird, wheres that cursor selection? + sel = this.selection.getSel(); + return (!sel || !sel.rangeCount || sel.rangeCount === 0); + } + }; + + extend(Editor.prototype, Observable); + + return Editor; +}); + +// Included from: js/tinymce/classes/util/I18n.js + +/** + * I18n.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * I18n class that handles translation of TinyMCE UI. + * Uses po style with csharp style parameters. + * + * @class tinymce.util.I18n + */ +define("tinymce/util/I18n", [], function() { + "use strict"; + + var data = {}; + + return { + /** + * Property gets set to true if a RTL language pack was loaded. + * + * @property rtl + * @type Boolean + */ + rtl: false, + + /** + * Adds translations for a specific language code. + * + * @method add + * @param {String} code Language code like sv_SE. + * @param {Array} items Name/value array with English en_US to sv_SE. + */ + add: function(code, items) { + for (var name in items) { + data[name] = items[name]; + } + + this.rtl = this.rtl || data._dir === 'rtl'; + }, + + /** + * Translates the specified text. + * + * It has a few formats: + * I18n.translate("Text"); + * I18n.translate(["Text {0}/{1}", 0, 1]); + * I18n.translate({raw: "Raw string"}); + * + * @method translate + * @param {String/Object/Array} text Text to translate. + * @return {String} String that got translated. + */ + translate: function(text) { + if (typeof(text) == "undefined") { + return text; + } + + if (typeof(text) != "string" && text.raw) { + return text.raw; + } + + if (text.push) { + var values = text.slice(1); + + text = (data[text[0]] || text[0]).replace(/\{([^\}]+)\}/g, function(match1, match2) { + return values[match2]; + }); + } + + return data[text] || text; + }, + + data: data + }; +}); + +// Included from: js/tinymce/classes/FocusManager.js + +/** + * FocusManager.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class manages the focus/blur state of the editor. This class is needed since some + * browsers fire false focus/blur states when the selection is moved to a UI dialog or similar. + * + * This class will fire two events focus and blur on the editor instances that got affected. + * It will also handle the restore of selection when the focus is lost and returned. + * + * @class tinymce.FocusManager + */ +define("tinymce/FocusManager", [ + "tinymce/dom/DOMUtils", + "tinymce/Env" +], function(DOMUtils, Env) { + var selectionChangeHandler, documentFocusInHandler, DOM = DOMUtils.DOM; + + /** + * Constructs a new focus manager instance. + * + * @constructor FocusManager + * @param {tinymce.EditorManager} editorManager Editor manager instance to handle focus for. + */ + function FocusManager(editorManager) { + function getActiveElement() { + try { + return document.activeElement; + } catch (ex) { + // IE sometimes fails to get the activeElement when resizing table + // TODO: Investigate this + return document.body; + } + } + + // We can't store a real range on IE 11 since it gets mutated so we need to use a bookmark object + // TODO: Move this to a separate range utils class since it's it's logic is present in Selection as well. + function createBookmark(rng) { + if (rng && rng.startContainer) { + return { + startContainer: rng.startContainer, + startOffset: rng.startOffset, + endContainer: rng.endContainer, + endOffset: rng.endOffset + }; + } + + return rng; + } + + function bookmarkToRng(editor, bookmark) { + var rng; + + if (bookmark.startContainer) { + rng = editor.getDoc().createRange(); + rng.setStart(bookmark.startContainer, bookmark.startOffset); + rng.setEnd(bookmark.endContainer, bookmark.endOffset); + } else { + rng = bookmark; + } + + return rng; + } + + function isUIElement(elm) { + return !!DOM.getParent(elm, FocusManager.isEditorUIElement); + } + + function isNodeInBodyOfEditor(node, editor) { + var body = editor.getBody(); + + while (node) { + if (node == body) { + return true; + } + + node = node.parentNode; + } + } + + function registerEvents(e) { + var editor = e.editor; + + editor.on('init', function() { + // Gecko/WebKit has ghost selections in iframes and IE only has one selection per browser tab + if (editor.inline || Env.ie) { + // On other browsers take snapshot on nodechange in inline mode since they have Ghost selections for iframes + editor.on('nodechange keyup', function() { + var node = document.activeElement; + + // IE 11 reports active element as iframe not body of iframe + if (node && node.id == editor.id + '_ifr') { + node = editor.getBody(); + } + + if (isNodeInBodyOfEditor(node, editor)) { + editor.lastRng = editor.selection.getRng(); + } + }); + + // Handles the issue with WebKit not retaining selection within inline document + // If the user releases the mouse out side the body since a mouse up event wont occur on the body + if (Env.webkit && !selectionChangeHandler) { + selectionChangeHandler = function() { + var activeEditor = editorManager.activeEditor; + + if (activeEditor && activeEditor.selection) { + var rng = activeEditor.selection.getRng(); + + // Store when it's non collapsed + if (rng && !rng.collapsed) { + editor.lastRng = rng; + } + } + }; + + DOM.bind(document, 'selectionchange', selectionChangeHandler); + } + } + }); + + editor.on('setcontent', function() { + editor.lastRng = null; + }); + + // Remove last selection bookmark on mousedown see #6305 + editor.on('mousedown', function() { + editor.selection.lastFocusBookmark = null; + }); + + editor.on('focusin', function() { + var focusedEditor = editorManager.focusedEditor; + + if (editor.selection.lastFocusBookmark) { + editor.selection.setRng(bookmarkToRng(editor, editor.selection.lastFocusBookmark)); + editor.selection.lastFocusBookmark = null; + } + + if (focusedEditor != editor) { + if (focusedEditor) { + focusedEditor.fire('blur', {focusedEditor: editor}); + } + + editorManager.activeEditor = editor; + editorManager.focusedEditor = editor; + editor.fire('focus', {blurredEditor: focusedEditor}); + editor.focus(true); + } + + editor.lastRng = null; + }); + + editor.on('focusout', function() { + window.setTimeout(function() { + var focusedEditor = editorManager.focusedEditor; + + // Still the same editor the the blur was outside any editor UI + if (!isUIElement(getActiveElement()) && focusedEditor == editor) { + editor.fire('blur', {focusedEditor: null}); + editorManager.focusedEditor = null; + + // Make sure selection is valid could be invalid if the editor is blured and removed before the timeout occurs + if (editor.selection) { + editor.selection.lastFocusBookmark = null; + } + } + }, 0); + }); + + if (!documentFocusInHandler) { + documentFocusInHandler = function(e) { + var activeEditor = editorManager.activeEditor; + + if (activeEditor && e.target.ownerDocument == document) { + // Check to make sure we have a valid selection + if (activeEditor.selection) { + activeEditor.selection.lastFocusBookmark = createBookmark(activeEditor.lastRng); + } + + // Fire a blur event if the element isn't a UI element + if (!isUIElement(e.target) && editorManager.focusedEditor == activeEditor) { + activeEditor.fire('blur', {focusedEditor: null}); + editorManager.focusedEditor = null; + } + } + }; + + // Check if focus is moved to an element outside the active editor by checking if the target node + // isn't within the body of the activeEditor nor a UI element such as a dialog child control + DOM.bind(document, 'focusin', documentFocusInHandler); + } + } + + function unregisterDocumentEvents(e) { + if (editorManager.focusedEditor == e.editor) { + editorManager.focusedEditor = null; + } + + if (!editorManager.activeEditor) { + DOM.unbind(document, 'selectionchange', selectionChangeHandler); + DOM.unbind(document, 'focusin', documentFocusInHandler); + selectionChangeHandler = documentFocusInHandler = null; + } + } + + editorManager.on('AddEditor', registerEvents); + editorManager.on('RemoveEditor', unregisterDocumentEvents); + } + + /** + * Returns true if the specified element is part of the UI for example an button or text input. + * + * @method isEditorUIElement + * @param {Element} elm Element to check if it's part of the UI or not. + * @return {Boolean} True/false state if the element is part of the UI or not. + */ + FocusManager.isEditorUIElement = function(elm) { + // Needs to be converted to string since svg can have focus: #6776 + return elm.className.toString().indexOf('mce-') !== -1; + }; + + return FocusManager; +}); + +// Included from: js/tinymce/classes/EditorManager.js + +/** + * EditorManager.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class used as a factory for manager for tinymce.Editor instances. + * + * @example + * tinymce.EditorManager.init({}); + * + * @class tinymce.EditorManager + * @mixes tinymce.util.Observable + * @static + */ +define("tinymce/EditorManager", [ + "tinymce/Editor", + "tinymce/dom/DOMUtils", + "tinymce/util/URI", + "tinymce/Env", + "tinymce/util/Tools", + "tinymce/util/Observable", + "tinymce/util/I18n", + "tinymce/FocusManager" +], function(Editor, DOMUtils, URI, Env, Tools, Observable, I18n, FocusManager) { + var DOM = DOMUtils.DOM; + var explode = Tools.explode, each = Tools.each, extend = Tools.extend; + var instanceCounter = 0, beforeUnloadDelegate; + + var EditorManager = { + /** + * Major version of TinyMCE build. + * + * @property majorVersion + * @type String + */ + majorVersion : '4', + + /** + * Minor version of TinyMCE build. + * + * @property minorVersion + * @type String + */ + minorVersion : '0.20', + + /** + * Release date of TinyMCE build. + * + * @property releaseDate + * @type String + */ + releaseDate: '2014-03-18', + + /** + * Collection of editor instances. + * + * @property editors + * @type Object + * @example + * for (edId in tinymce.editors) + * tinymce.editors[edId].save(); + */ + editors: [], + + /** + * Collection of language pack data. + * + * @property i18n + * @type Object + */ + i18n: I18n, + + /** + * Currently active editor instance. + * + * @property activeEditor + * @type tinymce.Editor + * @example + * tinyMCE.activeEditor.selection.getContent(); + * tinymce.EditorManager.activeEditor.selection.getContent(); + */ + activeEditor: null, + + setup: function() { + var self = this, baseURL, documentBaseURL, suffix = "", preInit; + + // Get base URL for the current document + documentBaseURL = document.location.href.replace(/[\?#].*$/, '').replace(/[\/\\][^\/]+$/, ''); + if (!/[\/\\]$/.test(documentBaseURL)) { + documentBaseURL += '/'; + } + + // If tinymce is defined and has a base use that or use the old tinyMCEPreInit + preInit = window.tinymce || window.tinyMCEPreInit; + if (preInit) { + baseURL = preInit.base || preInit.baseURL; + suffix = preInit.suffix; + } else { + // Get base where the tinymce script is located + var scripts = document.getElementsByTagName('script'); + for (var i = 0; i < scripts.length; i++) { + var src = scripts[i].src; + + // Script types supported: + // tinymce.js tinymce.min.js tinymce.dev.js + // tinymce.jquery.js tinymce.jquery.min.js tinymce.jquery.dev.js + // tinymce.full.js tinymce.full.min.js tinymce.full.dev.js + if (/tinymce(\.full|\.jquery|)(\.min|\.dev|)\.js/.test(src)) { + if (src.indexOf('.min') != -1) { + suffix = '.min'; + } + + baseURL = src.substring(0, src.lastIndexOf('/')); + break; + } + } + } + + /** + * Base URL where the root directory if TinyMCE is located. + * + * @property baseURL + * @type String + */ + self.baseURL = new URI(documentBaseURL).toAbsolute(baseURL); + + /** + * Document base URL where the current document is located. + * + * @property documentBaseURL + * @type String + */ + self.documentBaseURL = documentBaseURL; + + /** + * Absolute baseURI for the installation path of TinyMCE. + * + * @property baseURI + * @type tinymce.util.URI + */ + self.baseURI = new URI(self.baseURL); + + /** + * Current suffix to add to each plugin/theme that gets loaded for example ".min". + * + * @property suffix + * @type String + */ + self.suffix = suffix; + + self.focusManager = new FocusManager(self); + }, + + /** + * Initializes a set of editors. This method will create editors based on various settings. + * + * @method init + * @param {Object} settings Settings object to be passed to each editor instance. + * @example + * // Initializes a editor using the longer method + * tinymce.EditorManager.init({ + * some_settings : 'some value' + * }); + * + * // Initializes a editor instance using the shorter version + * tinyMCE.init({ + * some_settings : 'some value' + * }); + */ + init: function(settings) { + var self = this, editors = [], editor; + + function createId(elm) { + var id = elm.id; + + // Use element id, or unique name or generate a unique id + if (!id) { + id = elm.name; + + if (id && !DOM.get(id)) { + id = elm.name; + } else { + // Generate unique name + id = DOM.uniqueId(); + } + + elm.setAttribute('id', id); + } + + return id; + } + + function execCallback(se, n, s) { + var f = se[n]; + + if (!f) { + return; + } + + return f.apply(s || this, Array.prototype.slice.call(arguments, 2)); + } + + function hasClass(n, c) { + return c.constructor === RegExp ? c.test(n.className) : DOM.hasClass(n, c); + } + + function readyHandler() { + var l, co; + + DOM.unbind(window, 'ready', readyHandler); + + execCallback(settings, 'onpageload'); + + if (settings.types) { + // Process type specific selector + each(settings.types, function(type) { + each(DOM.select(type.selector), function(elm) { + var editor = new Editor(createId(elm), extend({}, settings, type), self); + editors.push(editor); + editor.render(1); + }); + }); + + return; + } else if (settings.selector) { + // Process global selector + each(DOM.select(settings.selector), function(elm) { + var editor = new Editor(createId(elm), settings, self); + editors.push(editor); + editor.render(1); + }); + + return; + } + + // Fallback to old setting + switch (settings.mode) { + case "exact": + l = settings.elements || ''; + + if(l.length > 0) { + each(explode(l), function(v) { + if (DOM.get(v)) { + editor = new Editor(v, settings, self); + editors.push(editor); + editor.render(true); + } else { + each(document.forms, function(f) { + each(f.elements, function(e) { + if (e.name === v) { + v = 'mce_editor_' + instanceCounter++; + DOM.setAttrib(e, 'id', v); + + editor = new Editor(v, settings, self); + editors.push(editor); + editor.render(1); + } + }); + }); + } + }); + } + break; + + case "textareas": + case "specific_textareas": + each(DOM.select('textarea'), function(elm) { + if (settings.editor_deselector && hasClass(elm, settings.editor_deselector)) { + return; + } + + if (!settings.editor_selector || hasClass(elm, settings.editor_selector)) { + editor = new Editor(createId(elm), settings, self); + editors.push(editor); + editor.render(true); + } + }); + break; + } + + // Call onInit when all editors are initialized + if (settings.oninit) { + l = co = 0; + + each(editors, function(ed) { + co++; + + if (!ed.initialized) { + // Wait for it + ed.on('init', function() { + l++; + + // All done + if (l == co) { + execCallback(settings, 'oninit'); + } + }); + } else { + l++; + } + + // All done + if (l == co) { + execCallback(settings, 'oninit'); + } + }); + } + } + + self.settings = settings; + + DOM.bind(window, 'ready', readyHandler); + }, + + /** + * Returns a editor instance by id. + * + * @method get + * @param {String/Number} id Editor instance id or index to return. + * @return {tinymce.Editor} Editor instance to return. + * @example + * // Adds an onclick event to an editor by id (shorter version) + * tinymce.get('mytextbox').on('click', function(e) { + * ed.windowManager.alert('Hello world!'); + * }); + * + * // Adds an onclick event to an editor by id (longer version) + * tinymce.EditorManager.get('mytextbox').on('click', function(e) { + * ed.windowManager.alert('Hello world!'); + * }); + */ + get: function(id) { + if (id === undefined) { + return this.editors; + } + + return this.editors[id]; + }, + + /** + * Adds an editor instance to the editor collection. This will also set it as the active editor. + * + * @method add + * @param {tinymce.Editor} editor Editor instance to add to the collection. + * @return {tinymce.Editor} The same instance that got passed in. + */ + add: function(editor) { + var self = this, editors = self.editors; + + // Add named and index editor instance + editors[editor.id] = editor; + editors.push(editor); + + self.activeEditor = editor; + + /** + * Fires when an editor is added to the EditorManager collection. + * + * @event AddEditor + * @param {Object} e Event arguments. + */ + self.fire('AddEditor', {editor: editor}); + + if (!beforeUnloadDelegate) { + beforeUnloadDelegate = function() { + self.fire('BeforeUnload'); + }; + + DOM.bind(window, 'beforeunload', beforeUnloadDelegate); + } + + return editor; + }, + + /** + * Creates an editor instance and adds it to the EditorManager collection. + * + * @method createEditor + * @param {String} id Instance id to use for editor. + * @param {Object} settings Editor instance settings. + * @return {tinymce.Editor} Editor instance that got created. + */ + createEditor: function(id, settings) { + return this.add(new Editor(id, settings, this)); + }, + + /** + * Removes a editor or editors form page. + * + * @example + * // Remove all editors bound to divs + * tinymce.remove('div'); + * + * // Remove all editors bound to textareas + * tinymce.remove('textarea'); + * + * // Remove all editors + * tinymce.remove(); + * + * // Remove specific instance by id + * tinymce.remove('#id'); + * + * @method remove + * @param {tinymce.Editor/String/Object} [selector] CSS selector or editor instance to remove. + * @return {tinymce.Editor} The editor that got passed in will be return if it was found otherwise null. + */ + remove: function(selector) { + var self = this, i, editors = self.editors, editor, removedFromList; + + // Remove all editors + if (!selector) { + for (i = editors.length - 1; i >= 0; i--) { + self.remove(editors[i]); + } + + return; + } + + // Remove editors by selector + if (typeof(selector) == "string") { + selector = selector.selector || selector; + + each(DOM.select(selector), function(elm) { + self.remove(editors[elm.id]); + }); + + return; + } + + // Remove specific editor + editor = selector; + + // Not in the collection + if (!editors[editor.id]) { + return null; + } + + delete editors[editor.id]; + + for (i = 0; i < editors.length; i++) { + if (editors[i] == editor) { + editors.splice(i, 1); + removedFromList = true; + break; + } + } + + // Select another editor since the active one was removed + if (self.activeEditor == editor) { + self.activeEditor = editors[0]; + } + + /** + * Fires when an editor is removed from EditorManager collection. + * + * @event RemoveEditor + * @param {Object} e Event arguments. + */ + if (removedFromList) { + self.fire('RemoveEditor', {editor: editor}); + } + + if (!editors.length) { + DOM.unbind(window, 'beforeunload', beforeUnloadDelegate); + } + + editor.remove(); + + return editor; + }, + + /** + * Executes a specific command on the currently active editor. + * + * @method execCommand + * @param {String} c Command to perform for example Bold. + * @param {Boolean} u Optional boolean state if a UI should be presented for the command or not. + * @param {String} v Optional value parameter like for example an URL to a link. + * @return {Boolean} true/false if the command was executed or not. + */ + execCommand: function(cmd, ui, value) { + var self = this, editor = self.get(value); + + // Manager commands + switch (cmd) { + case "mceAddEditor": + if (!self.get(value)) { + new Editor(value, self.settings, self).render(); + } + + return true; + + case "mceRemoveEditor": + if (editor) { + editor.remove(); + } + + return true; + + case 'mceToggleEditor': + if (!editor) { + self.execCommand('mceAddEditor', 0, value); + return true; + } + + if (editor.isHidden()) { + editor.show(); + } else { + editor.hide(); + } + + return true; + } + + // Run command on active editor + if (self.activeEditor) { + return self.activeEditor.execCommand(cmd, ui, value); + } + + return false; + }, + + /** + * Calls the save method on all editor instances in the collection. This can be useful when a form is to be submitted. + * + * @method triggerSave + * @example + * // Saves all contents + * tinyMCE.triggerSave(); + */ + triggerSave: function() { + each(this.editors, function(editor) { + editor.save(); + }); + }, + + /** + * Adds a language pack, this gets called by the loaded language files like en.js. + * + * @method addI18n + * @param {String} code Optional language code. + * @param {Object} items Name/value object with translations. + */ + addI18n: function(code, items) { + I18n.add(code, items); + }, + + /** + * Translates the specified string using the language pack items. + * + * @method translate + * @param {String/Array/Object} text String to translate + * @return {String} Translated string. + */ + translate: function(text) { + return I18n.translate(text); + } + }; + + extend(EditorManager, Observable); + + EditorManager.setup(); + + // Export EditorManager as tinymce/tinymce in global namespace + window.tinymce = window.tinyMCE = EditorManager; + + return EditorManager; +}); + +// Included from: js/tinymce/classes/LegacyInput.js + +/** + * LegacyInput.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +define("tinymce/LegacyInput", [ + "tinymce/EditorManager", + "tinymce/util/Tools" +], function(EditorManager, Tools) { + var each = Tools.each, explode = Tools.explode; + + EditorManager.on('AddEditor', function(e) { + var editor = e.editor; + + editor.on('preInit', function() { + var filters, fontSizes, dom, settings = editor.settings; + + function replaceWithSpan(node, styles) { + each(styles, function(value, name) { + if (value) { + dom.setStyle(node, name, value); + } + }); + + dom.rename(node, 'span'); + } + + function convert(e) { + dom = editor.dom; + + if (settings.convert_fonts_to_spans) { + each(dom.select('font,u,strike', e.node), function(node) { + filters[node.nodeName.toLowerCase()](dom, node); + }); + } + } + + if (settings.inline_styles) { + fontSizes = explode(settings.font_size_legacy_values); + + filters = { + font: function(dom, node) { + replaceWithSpan(node, { + backgroundColor: node.style.backgroundColor, + color: node.color, + fontFamily: node.face, + fontSize: fontSizes[parseInt(node.size, 10) - 1] + }); + }, + + u: function(dom, node) { + replaceWithSpan(node, { + textDecoration: 'underline' + }); + }, + + strike: function(dom, node) { + replaceWithSpan(node, { + textDecoration: 'line-through' + }); + } + }; + + editor.on('PreProcess SetContent', convert); + } + }); + }); +}); + +// Included from: js/tinymce/classes/util/XHR.js + +/** + * XHR.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class enables you to send XMLHTTPRequests cross browser. + * @class tinymce.util.XHR + * @static + * @example + * // Sends a low level Ajax request + * tinymce.util.XHR.send({ + * url: 'someurl', + * success: function(text) { + * console.debug(text); + * } + * }); + */ +define("tinymce/util/XHR", [], function() { + return { + /** + * Sends a XMLHTTPRequest. + * Consult the Wiki for details on what settings this method takes. + * + * @method send + * @param {Object} settings Object will target URL, callbacks and other info needed to make the request. + */ + send: function(settings) { + var xhr, count = 0; + + function ready() { + if (!settings.async || xhr.readyState == 4 || count++ > 10000) { + if (settings.success && count < 10000 && xhr.status == 200) { + settings.success.call(settings.success_scope, '' + xhr.responseText, xhr, settings); + } else if (settings.error) { + settings.error.call(settings.error_scope, count > 10000 ? 'TIMED_OUT' : 'GENERAL', xhr, settings); + } + + xhr = null; + } else { + setTimeout(ready, 10); + } + } + + // Default settings + settings.scope = settings.scope || this; + settings.success_scope = settings.success_scope || settings.scope; + settings.error_scope = settings.error_scope || settings.scope; + settings.async = settings.async === false ? false : true; + settings.data = settings.data || ''; + + xhr = new XMLHttpRequest(); + + if (xhr) { + if (xhr.overrideMimeType) { + xhr.overrideMimeType(settings.content_type); + } + + xhr.open(settings.type || (settings.data ? 'POST' : 'GET'), settings.url, settings.async); + + if (settings.content_type) { + xhr.setRequestHeader('Content-Type', settings.content_type); + } + + xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); + + xhr.send(settings.data); + + // Syncronous request + if (!settings.async) { + return ready(); + } + + // Wait for response, onReadyStateChange can not be used since it leaks memory in IE + setTimeout(ready, 10); + } + } + }; +}); + +// Included from: js/tinymce/classes/util/JSON.js + +/** + * JSON.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * JSON parser and serializer class. + * + * @class tinymce.util.JSON + * @static + * @example + * // JSON parse a string into an object + * var obj = tinymce.util.JSON.parse(somestring); + * + * // JSON serialize a object into an string + * var str = tinymce.util.JSON.serialize(obj); + */ +define("tinymce/util/JSON", [], function() { + function serialize(o, quote) { + var i, v, t, name; + + quote = quote || '"'; + + if (o === null) { + return 'null'; + } + + t = typeof o; + + if (t == 'string') { + v = '\bb\tt\nn\ff\rr\""\'\'\\\\'; + + return quote + o.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g, function(a, b) { + // Make sure single quotes never get encoded inside double quotes for JSON compatibility + if (quote === '"' && a === "'") { + return a; + } + + i = v.indexOf(b); + + if (i + 1) { + return '\\' + v.charAt(i + 1); + } + + a = b.charCodeAt().toString(16); + + return '\\u' + '0000'.substring(a.length) + a; + }) + quote; + } + + if (t == 'object') { + if (o.hasOwnProperty && Object.prototype.toString.call(o) === '[object Array]') { + for (i = 0, v = '['; i < o.length; i++) { + v += (i > 0 ? ',' : '') + serialize(o[i], quote); + } + + return v + ']'; + } + + v = '{'; + + for (name in o) { + if (o.hasOwnProperty(name)) { + v += typeof o[name] != 'function' ? (v.length > 1 ? ',' + quote : quote) + name + + quote + ':' + serialize(o[name], quote) : ''; + } + } + + return v + '}'; + } + + return '' + o; + } + + return { + /** + * Serializes the specified object as a JSON string. + * + * @method serialize + * @param {Object} obj Object to serialize as a JSON string. + * @param {String} quote Optional quote string defaults to ". + * @return {string} JSON string serialized from input. + */ + serialize: serialize, + + /** + * Unserializes/parses the specified JSON string into a object. + * + * @method parse + * @param {string} s JSON String to parse into a JavaScript object. + * @return {Object} Object from input JSON string or undefined if it failed. + */ + parse: function(text) { + try { + // Trick uglify JS + return window[String.fromCharCode(101) + 'val']('(' + text + ')'); + } catch (ex) { + // Ignore + } + } + + /**#@-*/ + }; +}); + +// Included from: js/tinymce/classes/util/JSONRequest.js + +/** + * JSONRequest.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class enables you to use JSON-RPC to call backend methods. + * + * @class tinymce.util.JSONRequest + * @example + * var json = new tinymce.util.JSONRequest({ + * url: 'somebackend.php' + * }); + * + * // Send RPC call 1 + * json.send({ + * method: 'someMethod1', + * params: ['a', 'b'], + * success: function(result) { + * console.dir(result); + * } + * }); + * + * // Send RPC call 2 + * json.send({ + * method: 'someMethod2', + * params: ['a', 'b'], + * success: function(result) { + * console.dir(result); + * } + * }); + */ +define("tinymce/util/JSONRequest", [ + "tinymce/util/JSON", + "tinymce/util/XHR", + "tinymce/util/Tools" +], function(JSON, XHR, Tools) { + var extend = Tools.extend; + + function JSONRequest(settings) { + this.settings = extend({}, settings); + this.count = 0; + } + + /** + * Simple helper function to send a JSON-RPC request without the need to initialize an object. + * Consult the Wiki API documentation for more details on what you can pass to this function. + * + * @method sendRPC + * @static + * @param {Object} o Call object where there are three field id, method and params this object should also contain callbacks etc. + */ + JSONRequest.sendRPC = function(o) { + return new JSONRequest().send(o); + }; + + JSONRequest.prototype = { + /** + * Sends a JSON-RPC call. Consult the Wiki API documentation for more details on what you can pass to this function. + * + * @method send + * @param {Object} args Call object where there are three field id, method and params this object should also contain callbacks etc. + */ + send: function(args) { + var ecb = args.error, scb = args.success; + + args = extend(this.settings, args); + + args.success = function(c, x) { + c = JSON.parse(c); + + if (typeof(c) == 'undefined') { + c = { + error : 'JSON Parse error.' + }; + } + + if (c.error) { + ecb.call(args.error_scope || args.scope, c.error, x); + } else { + scb.call(args.success_scope || args.scope, c.result); + } + }; + + args.error = function(ty, x) { + if (ecb) { + ecb.call(args.error_scope || args.scope, ty, x); + } + }; + + args.data = JSON.serialize({ + id: args.id || 'c' + (this.count++), + method: args.method, + params: args.params + }); + + // JSON content type for Ruby on rails. Bug: #1883287 + args.content_type = 'application/json'; + + XHR.send(args); + } + }; + + return JSONRequest; +}); + +// Included from: js/tinymce/classes/util/JSONP.js + +/** + * JSONP.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +define("tinymce/util/JSONP", [ + "tinymce/dom/DOMUtils" +], function(DOMUtils) { + return { + callbacks: {}, + count: 0, + + send: function(settings) { + var self = this, dom = DOMUtils.DOM, count = settings.count !== undefined ? settings.count : self.count; + var id = 'tinymce_jsonp_' + count; + + self.callbacks[count] = function(json) { + dom.remove(id); + delete self.callbacks[count]; + + settings.callback(json); + }; + + dom.add(dom.doc.body, 'script', { + id: id, + src: settings.url, + type: 'text/javascript' + }); + + self.count++; + } + }; +}); + +// Included from: js/tinymce/classes/util/LocalStorage.js + +/** + * LocalStorage.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class will simulate LocalStorage on IE 7 and return the native version on modern browsers. + * Storage is done using userData on IE 7 and a special serialization format. The format is designed + * to be as small as possible by making sure that the keys and values doesn't need to be encoded. This + * makes it possible to store for example HTML data. + * + * Storage format for userData: + * ,,,,... + * + * For example this data key1=value1,key2=value2 would be: + * 4,key1,6,value1,4,key2,6,value2 + * + * @class tinymce.util.LocalStorage + * @static + * @version 4.0 + * @example + * tinymce.util.LocalStorage.setItem('key', 'value'); + * var value = tinymce.util.LocalStorage.getItem('key'); + */ +define("tinymce/util/LocalStorage", [], function() { + var LocalStorage, storageElm, items, keys, userDataKey, hasOldIEDataSupport; + + // Check for native support + try { + if (window.localStorage) { + return localStorage; + } + } catch (ex) { + // Ignore + } + + userDataKey = "tinymce"; + storageElm = document.documentElement; + hasOldIEDataSupport = !!storageElm.addBehavior; + + if (hasOldIEDataSupport) { + storageElm.addBehavior('#default#userData'); + } + + /** + * Gets the keys names and updates LocalStorage.length property. Since IE7 doesn't have any getters/setters. + */ + function updateKeys() { + keys = []; + + for (var key in items) { + keys.push(key); + } + + LocalStorage.length = keys.length; + } + + /** + * Loads the userData string and parses it into the items structure. + */ + function load() { + var key, data, value, pos = 0; + + items = {}; + + // localStorage can be disabled on WebKit/Gecko so make a dummy storage + if (!hasOldIEDataSupport) { + return; + } + + function next(end) { + var value, nextPos; + + nextPos = end !== undefined ? pos + end : data.indexOf(',', pos); + if (nextPos === -1 || nextPos > data.length) { + return null; + } + + value = data.substring(pos, nextPos); + pos = nextPos + 1; + + return value; + } + + storageElm.load(userDataKey); + data = storageElm.getAttribute(userDataKey) || ''; + + do { + var offset = next(); + if (offset === null) { + break; + } + + key = next(parseInt(offset, 32) || 0); + if (key !== null) { + offset = next(); + if (offset === null) { + break; + } + + value = next(parseInt(offset, 32) || 0); + + if (key) { + items[key] = value; + } + } + } while (key !== null); + + updateKeys(); + } + + /** + * Saves the items structure into a the userData format. + */ + function save() { + var value, data = ''; + + // localStorage can be disabled on WebKit/Gecko so make a dummy storage + if (!hasOldIEDataSupport) { + return; + } + + for (var key in items) { + value = items[key]; + data += (data ? ',' : '') + key.length.toString(32) + ',' + key + ',' + value.length.toString(32) + ',' + value; + } + + storageElm.setAttribute(userDataKey, data); + + try { + storageElm.save(userDataKey); + } catch (ex) { + // Ignore disk full + } + + updateKeys(); + } + + LocalStorage = { + /** + * Length of the number of items in storage. + * + * @property length + * @type Number + * @return {Number} Number of items in storage. + */ + //length:0, + + /** + * Returns the key name by index. + * + * @method key + * @param {Number} index Index of key to return. + * @return {String} Key value or null if it wasn't found. + */ + key: function(index) { + return keys[index]; + }, + + /** + * Returns the value if the specified key or null if it wasn't found. + * + * @method getItem + * @param {String} key Key of item to retrive. + * @return {String} Value of the specified item or null if it wasn't found. + */ + getItem: function(key) { + return key in items ? items[key] : null; + }, + + /** + * Sets the value of the specified item by it's key. + * + * @method setItem + * @param {String} key Key of the item to set. + * @param {String} value Value of the item to set. + */ + setItem: function(key, value) { + items[key] = "" + value; + save(); + }, + + /** + * Removes the specified item by key. + * + * @method removeItem + * @param {String} key Key of item to remove. + */ + removeItem: function(key) { + delete items[key]; + save(); + }, + + /** + * Removes all items. + * + * @method clear + */ + clear: function() { + items = {}; + save(); + } + }; + + load(); + + return LocalStorage; +}); + +// Included from: js/tinymce/classes/Compat.js + +/** + * Compat.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * TinyMCE core class. + * + * @static + * @class tinymce + * @borrow-members tinymce.EditorManager + * @borrow-members tinymce.util.Tools + */ +define("tinymce/Compat", [ + "tinymce/dom/DOMUtils", + "tinymce/dom/EventUtils", + "tinymce/dom/ScriptLoader", + "tinymce/AddOnManager", + "tinymce/util/Tools", + "tinymce/Env" +], function(DOMUtils, EventUtils, ScriptLoader, AddOnManager, Tools, Env) { + var tinymce = window.tinymce; + + /** + * @property {tinymce.dom.DOMUtils} DOM Global DOM instance. + * @property {tinymce.dom.ScriptLoader} ScriptLoader Global ScriptLoader instance. + * @property {tinymce.AddOnManager} PluginManager Global PluginManager instance. + * @property {tinymce.AddOnManager} ThemeManager Global ThemeManager instance. + */ + tinymce.DOM = DOMUtils.DOM; + tinymce.ScriptLoader = ScriptLoader.ScriptLoader; + tinymce.PluginManager = AddOnManager.PluginManager; + tinymce.ThemeManager = AddOnManager.ThemeManager; + + tinymce.dom = tinymce.dom || {}; + tinymce.dom.Event = EventUtils.Event; + + Tools.each(Tools, function(func, key) { + tinymce[key] = func; + }); + + Tools.each('isOpera isWebKit isIE isGecko isMac'.split(' '), function(name) { + tinymce[name] = Env[name.substr(2).toLowerCase()]; + }); + + return {}; +}); + +// Describe the different namespaces + +/** + * Root level namespace this contains classes directly releated to the TinyMCE editor. + * + * @namespace tinymce + */ + +/** + * Contains classes for handling the browsers DOM. + * + * @namespace tinymce.dom + */ + +/** + * Contains html parser and serializer logic. + * + * @namespace tinymce.html + */ + +/** + * Contains the different UI types such as buttons, listboxes etc. + * + * @namespace tinymce.ui + */ + +/** + * Contains various utility classes such as json parser, cookies etc. + * + * @namespace tinymce.util + */ + +// Included from: js/tinymce/classes/ui/Layout.js + +/** + * Layout.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Base layout manager class. + * + * @class tinymce.ui.Layout + */ +define("tinymce/ui/Layout", [ + "tinymce/util/Class", + "tinymce/util/Tools" +], function(Class, Tools) { + "use strict"; + + return Class.extend({ + Defaults: { + firstControlClass: 'first', + lastControlClass: 'last' + }, + + /** + * Constructs a layout instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + */ + init: function(settings) { + this.settings = Tools.extend({}, this.Defaults, settings); + }, + + /** + * This method gets invoked before the layout renders the controls. + * + * @method preRender + * @param {tinymce.ui.Container} container Container instance to preRender. + */ + preRender: function(container) { + container.addClass(this.settings.containerClass, 'body'); + }, + + /** + * Applies layout classes to the container. + * + * @private + */ + applyClasses: function(container) { + var self = this, settings = self.settings, items, firstClass, lastClass; + + items = container.items().filter(':visible'); + firstClass = settings.firstControlClass; + lastClass = settings.lastControlClass; + + items.each(function(item) { + item.removeClass(firstClass).removeClass(lastClass); + + if (settings.controlClass) { + item.addClass(settings.controlClass); + } + }); + + items.eq(0).addClass(firstClass); + items.eq(-1).addClass(lastClass); + }, + + /** + * Renders the specified container and any layout specific HTML. + * + * @method renderHtml + * @param {tinymce.ui.Container} container Container to render HTML for. + */ + renderHtml: function(container) { + var self = this, settings = self.settings, items, html = ''; + + items = container.items(); + items.eq(0).addClass(settings.firstControlClass); + items.eq(-1).addClass(settings.lastControlClass); + + items.each(function(item) { + if (settings.controlClass) { + item.addClass(settings.controlClass); + } + + html += item.renderHtml(); + }); + + return html; + }, + + /** + * Recalculates the positions of the controls in the specified container. + * + * @method recalc + * @param {tinymce.ui.Container} container Container instance to recalc. + */ + recalc: function() { + }, + + /** + * This method gets invoked after the layout renders the controls. + * + * @method postRender + * @param {tinymce.ui.Container} container Container instance to postRender. + */ + postRender: function() { + } + }); +}); + +// Included from: js/tinymce/classes/ui/AbsoluteLayout.js + +/** + * AbsoluteLayout.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * LayoutManager for absolute positioning. This layout manager is more of + * a base class for other layouts but can be created and used directly. + * + * @-x-less AbsoluteLayout.less + * @class tinymce.ui.AbsoluteLayout + * @extends tinymce.ui.Layout + */ +define("tinymce/ui/AbsoluteLayout", [ + "tinymce/ui/Layout" +], function(Layout) { + "use strict"; + + return Layout.extend({ + Defaults: { + containerClass: 'abs-layout', + controlClass: 'abs-layout-item' + }, + + /** + * Recalculates the positions of the controls in the specified container. + * + * @method recalc + * @param {tinymce.ui.Container} container Container instance to recalc. + */ + recalc: function(container) { + container.items().filter(':visible').each(function(ctrl) { + var settings = ctrl.settings; + + ctrl.layoutRect({ + x: settings.x, + y: settings.y, + w: settings.w, + h: settings.h + }); + + if (ctrl.recalc) { + ctrl.recalc(); + } + }); + }, + + /** + * Renders the specified container and any layout specific HTML. + * + * @method renderHtml + * @param {tinymce.ui.Container} container Container to render HTML for. + */ + renderHtml: function(container) { + return '
    ' + this._super(container); + } + }); +}); + +// Included from: js/tinymce/classes/ui/Tooltip.js + +/** + * Tooltip.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a tooltip instance. + * + * @-x-less ToolTip.less + * @class tinymce.ui.ToolTip + * @extends tinymce.ui.Control + * @mixes tinymce.ui.Movable + */ +define("tinymce/ui/Tooltip", [ + "tinymce/ui/Control", + "tinymce/ui/Movable" +], function(Control, Movable) { + return Control.extend({ + Mixins: [Movable], + + Defaults: { + classes: 'widget tooltip tooltip-n' + }, + + /** + * Sets/gets the current label text. + * + * @method text + * @param {String} [text] New label text. + * @return {String|tinymce.ui.Tooltip} Current text or current label instance. + */ + text: function(value) { + var self = this; + + if (typeof(value) != "undefined") { + self._value = value; + + if (self._rendered) { + self.getEl().lastChild.innerHTML = self.encode(value); + } + + return self; + } + + return self._value; + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, prefix = self.classPrefix; + + return ( + '' + ); + }, + + /** + * Repaints the control after a layout operation. + * + * @method repaint + */ + repaint: function() { + var self = this, style, rect; + + style = self.getEl().style; + rect = self._layoutRect; + + style.left = rect.x + 'px'; + style.top = rect.y + 'px'; + style.zIndex = 0xFFFF + 0xFFFF; + } + }); +}); + +// Included from: js/tinymce/classes/ui/Widget.js + +/** + * Widget.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Widget base class a widget is a control that has a tooltip and some basic states. + * + * @class tinymce.ui.Widget + * @extends tinymce.ui.Control + */ +define("tinymce/ui/Widget", [ + "tinymce/ui/Control", + "tinymce/ui/Tooltip" +], function(Control, Tooltip) { + "use strict"; + + var tooltip; + + var Widget = Control.extend({ + /** + * Constructs a instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + * @setting {String} tooltip Tooltip text to display when hovering. + * @setting {Boolean} autofocus True if the control should be focused when rendered. + * @setting {String} text Text to display inside widget. + */ + init: function(settings) { + var self = this; + + self._super(settings); + self.canFocus = true; + + if (settings.tooltip && Widget.tooltips !== false) { + self.on('mouseenter', function(e) { + var tooltip = self.tooltip().moveTo(-0xFFFF); + + if (e.control == self) { + var rel = tooltip.text(settings.tooltip).show().testMoveRel(self.getEl(), ['bc-tc', 'bc-tl', 'bc-tr']); + + tooltip.toggleClass('tooltip-n', rel == 'bc-tc'); + tooltip.toggleClass('tooltip-nw', rel == 'bc-tl'); + tooltip.toggleClass('tooltip-ne', rel == 'bc-tr'); + + tooltip.moveRel(self.getEl(), rel); + } else { + tooltip.hide(); + } + }); + + self.on('mouseleave mousedown click', function() { + self.tooltip().hide(); + }); + } + + self.aria('label', settings.ariaLabel || settings.tooltip); + }, + + /** + * Returns the current tooltip instance. + * + * @method tooltip + * @return {tinymce.ui.Tooltip} Tooltip instance. + */ + tooltip: function() { + if (!tooltip) { + tooltip = new Tooltip({type: 'tooltip'}); + tooltip.renderTo(); + } + + return tooltip; + }, + + /** + * Sets/gets the active state of the widget. + * + * @method active + * @param {Boolean} [state] State if the control is active. + * @return {Boolean|tinymce.ui.Widget} True/false or current widget instance. + */ + active: function(state) { + var self = this, undef; + + if (state !== undef) { + self.aria('pressed', state); + self.toggleClass('active', state); + } + + return self._super(state); + }, + + /** + * Sets/gets the disabled state of the widget. + * + * @method disabled + * @param {Boolean} [state] State if the control is disabled. + * @return {Boolean|tinymce.ui.Widget} True/false or current widget instance. + */ + disabled: function(state) { + var self = this, undef; + + if (state !== undef) { + self.aria('disabled', state); + self.toggleClass('disabled', state); + } + + return self._super(state); + }, + + /** + * Called after the control has been rendered. + * + * @method postRender + */ + postRender: function() { + var self = this, settings = self.settings; + + self._rendered = true; + + self._super(); + + if (!self.parent() && (settings.width || settings.height)) { + self.initLayoutRect(); + self.repaint(); + } + + if (settings.autofocus) { + self.focus(); + } + }, + + /** + * Removes the current control from DOM and from UI collections. + * + * @method remove + * @return {tinymce.ui.Control} Current control instance. + */ + remove: function() { + this._super(); + + if (tooltip) { + tooltip.remove(); + tooltip = null; + } + } + }); + + return Widget; +}); + +// Included from: js/tinymce/classes/ui/Button.js + +/** + * Button.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class is used to create buttons. You can create them directly or through the Factory. + * + * @example + * // Create and render a button to the body element + * tinymce.ui.Factory.create({ + * type: 'button', + * text: 'My button' + * }).renderTo(document.body); + * + * @-x-less Button.less + * @class tinymce.ui.Button + * @extends tinymce.ui.Widget + */ +define("tinymce/ui/Button", [ + "tinymce/ui/Widget" +], function(Widget) { + "use strict"; + + return Widget.extend({ + Defaults: { + classes: "widget btn", + role: "button" + }, + + /** + * Constructs a new button instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + * @setting {String} size Size of the button small|medium|large. + * @setting {String} image Image to use for icon. + * @setting {String} icon Icon to use for button. + */ + init: function(settings) { + var self = this, size; + + self.on('click mousedown', function(e) { + e.preventDefault(); + }); + + self._super(settings); + size = settings.size; + + if (settings.subtype) { + self.addClass(settings.subtype); + } + + if (size) { + self.addClass('btn-' + size); + } + }, + + /** + * Sets/gets the current button icon. + * + * @method icon + * @param {String} [icon] New icon identifier. + * @return {String|tinymce.ui.MenuButton} Current icon or current MenuButton instance. + */ + icon: function(icon) { + var self = this, prefix = self.classPrefix; + + if (typeof(icon) == 'undefined') { + return self.settings.icon; + } + + self.settings.icon = icon; + icon = icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : ''; + + if (self._rendered) { + var btnElm = self.getEl().firstChild, iconElm = btnElm.getElementsByTagName('i')[0]; + + if (icon) { + if (!iconElm || iconElm != btnElm.firstChild) { + iconElm = document.createElement('i'); + btnElm.insertBefore(iconElm, btnElm.firstChild); + } + + iconElm.className = icon; + } else if (iconElm) { + btnElm.removeChild(iconElm); + } + + self.text(self._text); // Set text again to fix whitespace between icon + text + } + + return self; + }, + + /** + * Repaints the button for example after it's been resizes by a layout engine. + * + * @method repaint + */ + repaint: function() { + var btnStyle = this.getEl().firstChild.style; + + btnStyle.width = btnStyle.height = "100%"; + + this._super(); + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, id = self._id, prefix = self.classPrefix; + var icon = self.settings.icon, image = ''; + + if (self.settings.image) { + icon = 'none'; + image = ' style="background-image: url(\'' + self.settings.image + '\')"'; + } + + icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + icon : ''; + + return ( + '
    ' + + '' + + '
    ' + ); + } + }); +}); + +// Included from: js/tinymce/classes/ui/ButtonGroup.js + +/** + * ButtonGroup.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This control enables you to put multiple buttons into a group. This is + * useful when you want to combine similar toolbar buttons into a group. + * + * @example + * // Create and render a buttongroup with two buttons to the body element + * tinymce.ui.Factory.create({ + * type: 'buttongroup', + * items: [ + * {text: 'Button A'}, + * {text: 'Button B'} + * ] + * }).renderTo(document.body); + * + * @-x-less ButtonGroup.less + * @class tinymce.ui.ButtonGroup + * @extends tinymce.ui.Container + */ +define("tinymce/ui/ButtonGroup", [ + "tinymce/ui/Container" +], function(Container) { + "use strict"; + + return Container.extend({ + Defaults: { + defaultType: 'button', + role: 'group' + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, layout = self._layout; + + self.addClass('btn-group'); + self.preRender(); + layout.preRender(self); + + return ( + '
    ' + + '
    ' + + (self.settings.html || '') + layout.renderHtml(self) + + '
    ' + + '
    ' + ); + } + }); +}); + +// Included from: js/tinymce/classes/ui/Checkbox.js + +/** + * Checkbox.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This control creates a custom checkbox. + * + * @example + * // Create and render a checkbox to the body element + * tinymce.ui.Factory.create({ + * type: 'checkbox', + * checked: true, + * text: 'My checkbox' + * }).renderTo(document.body); + * + * @-x-less Checkbox.less + * @class tinymce.ui.Checkbox + * @extends tinymce.ui.Widget + */ +define("tinymce/ui/Checkbox", [ + "tinymce/ui/Widget" +], function(Widget) { + "use strict"; + + return Widget.extend({ + Defaults: { + classes: "checkbox", + role: "checkbox", + checked: false + }, + + /** + * Constructs a new Checkbox instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + * @setting {Boolean} checked True if the checkbox should be checked by default. + */ + init: function(settings) { + var self = this; + + self._super(settings); + + self.on('click mousedown', function(e) { + e.preventDefault(); + }); + + self.on('click', function(e) { + e.preventDefault(); + + if (!self.disabled()) { + self.checked(!self.checked()); + } + }); + + self.checked(self.settings.checked); + }, + + /** + * Getter/setter function for the checked state. + * + * @method checked + * @param {Boolean} [state] State to be set. + * @return {Boolean|tinymce.ui.Checkbox} True/false or checkbox if it's a set operation. + */ + checked: function(state) { + var self = this; + + if (typeof state != "undefined") { + if (state) { + self.addClass('checked'); + } else { + self.removeClass('checked'); + } + + self._checked = state; + self.aria('checked', state); + + return self; + } + + return self._checked; + }, + + /** + * Getter/setter function for the value state. + * + * @method value + * @param {Boolean} [state] State to be set. + * @return {Boolean|tinymce.ui.Checkbox} True/false or checkbox if it's a set operation. + */ + value: function(state) { + return this.checked(state); + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, id = self._id, prefix = self.classPrefix; + + return ( + '
    ' + + '' + + '' + self.encode(self._text) + '' + + '
    ' + ); + } + }); +}); + +// Included from: js/tinymce/classes/ui/PanelButton.js + +/** + * PanelButton.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a new panel button. + * + * @class tinymce.ui.PanelButton + * @extends tinymce.ui.Button + */ +define("tinymce/ui/PanelButton", [ + "tinymce/ui/Button", + "tinymce/ui/FloatPanel" +], function(Button, FloatPanel) { + "use strict"; + + return Button.extend({ + /** + * Shows the panel for the button. + * + * @method showPanel + */ + showPanel: function() { + var self = this, settings = self.settings; + + self.active(true); + + if (!self.panel) { + var panelSettings = settings.panel; + + // Wrap panel in grid layout if type if specified + // This makes it possible to add forms or other containers directly in the panel option + if (panelSettings.type) { + panelSettings = { + layout: 'grid', + items: panelSettings + }; + } + + panelSettings.role = panelSettings.role || 'dialog'; + panelSettings.popover = true; + panelSettings.autohide = true; + panelSettings.ariaRoot = true; + + self.panel = new FloatPanel(panelSettings).on('hide', function() { + self.active(false); + }).on('cancel', function(e) { + e.stopPropagation(); + self.focus(); + self.hidePanel(); + }).parent(self).renderTo(self.getContainerElm()); + + self.panel.fire('show'); + self.panel.reflow(); + } else { + self.panel.show(); + } + + self.panel.moveRel(self.getEl(), settings.popoverAlign || (self.isRtl() ? ['bc-tr', 'bc-tc'] : ['bc-tl', 'bc-tc'])); + }, + + /** + * Hides the panel for the button. + * + * @method hidePanel + */ + hidePanel: function() { + var self = this; + + if (self.panel) { + self.panel.hide(); + } + }, + + /** + * Called after the control has been rendered. + * + * @method postRender + */ + postRender: function() { + var self = this; + + self.aria('haspopup', true); + + self.on('click', function(e) { + if (e.control === self) { + if (self.panel && self.panel.visible()) { + self.hidePanel(); + } else { + self.showPanel(); + self.panel.focus(!!e.aria); + } + } + }); + + return self._super(); + } + }); +}); + +// Included from: js/tinymce/classes/ui/ColorButton.js + +/** + * ColorButton.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class creates a color button control. This is a split button in which the main + * button has a visual representation of the currently selected color. When clicked + * the caret button displays a color picker, allowing the user to select a new color. + * + * @-x-less ColorButton.less + * @class tinymce.ui.ColorButton + * @extends tinymce.ui.PanelButton + */ +define("tinymce/ui/ColorButton", [ + "tinymce/ui/PanelButton", + "tinymce/dom/DOMUtils" +], function(PanelButton, DomUtils) { + "use strict"; + + var DOM = DomUtils.DOM; + + return PanelButton.extend({ + /** + * Constructs a new ColorButton instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + */ + init: function(settings) { + this._super(settings); + this.addClass('colorbutton'); + }, + + /** + * Getter/setter for the current color. + * + * @method color + * @param {String} [color] Color to set. + * @return {String|tinymce.ui.ColorButton} Current color or current instance. + */ + color: function(color) { + if (color) { + this._color = color; + this.getEl('preview').style.backgroundColor = color; + return this; + } + + return this._color; + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, id = self._id, prefix = self.classPrefix; + var icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : ''; + var image = self.settings.image ? ' style="background-image: url(\'' + self.settings.image + '\')"' : ''; + + return ( + '
    ' + + '' + + '' + + '
    ' + ); + }, + + /** + * Called after the control has been rendered. + * + * @method postRender + */ + postRender: function() { + var self = this, onClickHandler = self.settings.onclick; + + self.on('click', function(e) { + if (e.aria && e.aria.key == 'down') { + return; + } + + if (e.control == self && !DOM.getParent(e.target, '.' + self.classPrefix + 'open')) { + e.stopImmediatePropagation(); + onClickHandler.call(self, e); + } + }); + + delete self.settings.onclick; + + return self._super(); + } + + }); +}); + +// Included from: js/tinymce/classes/ui/ComboBox.js + +/** + * ComboBox.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class creates a combobox control. Select box that you select a value from or + * type a value into. + * + * @-x-less ComboBox.less + * @class tinymce.ui.ComboBox + * @extends tinymce.ui.Widget + */ +define("tinymce/ui/ComboBox", [ + "tinymce/ui/Widget", + "tinymce/ui/Factory", + "tinymce/ui/DomUtils" +], function(Widget, Factory, DomUtils) { + "use strict"; + + return Widget.extend({ + /** + * Constructs a new control instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + * @setting {String} placeholder Placeholder text to display. + */ + init: function(settings) { + var self = this; + + self._super(settings); + self.addClass('combobox'); + self.subinput = true; + self.ariaTarget = 'inp'; // TODO: Figure out a better way + + settings = self.settings; + settings.menu = settings.menu || settings.values; + + if (settings.menu) { + settings.icon = 'caret'; + } + + self.on('click', function(e) { + var elm = e.target, root = self.getEl(); + + while (elm && elm != root) { + if (elm.id && elm.id.indexOf('-open') != -1) { + self.fire('action'); + + if (settings.menu) { + self.showMenu(); + + if (e.aria) { + self.menu.items()[0].focus(); + } + } + } + + elm = elm.parentNode; + } + }); + + // TODO: Rework this + self.on('keydown', function(e) { + if (e.target.nodeName == "INPUT" && e.keyCode == 13) { + self.parents().reverse().each(function(ctrl) { + e.preventDefault(); + self.fire('change'); + + if (ctrl.hasEventListeners('submit') && ctrl.toJSON) { + ctrl.fire('submit', {data: ctrl.toJSON()}); + return false; + } + }); + } + }); + + if (settings.placeholder) { + self.addClass('placeholder'); + + self.on('focusin', function() { + if (!self._hasOnChange) { + DomUtils.on(self.getEl('inp'), 'change', function() { + self.fire('change'); + }); + + self._hasOnChange = true; + } + + if (self.hasClass('placeholder')) { + self.getEl('inp').value = ''; + self.removeClass('placeholder'); + } + }); + + self.on('focusout', function() { + if (self.value().length === 0) { + self.getEl('inp').value = settings.placeholder; + self.addClass('placeholder'); + } + }); + } + }, + + showMenu: function() { + var self = this, settings = self.settings, menu; + + if (!self.menu) { + menu = settings.menu || []; + + // Is menu array then auto constuct menu control + if (menu.length) { + menu = { + type: 'menu', + items: menu + }; + } else { + menu.type = menu.type || 'menu'; + } + + self.menu = Factory.create(menu).parent(self).renderTo(self.getContainerElm()); + self.fire('createmenu'); + self.menu.reflow(); + self.menu.on('cancel', function(e) { + if (e.control === self.menu) { + self.focus(); + } + }); + + self.menu.on('show hide', function(e) { + e.control.items().each(function(ctrl) { + ctrl.active(ctrl.value() == self.value()); + }); + }).fire('show'); + + self.menu.on('select', function(e) { + self.value(e.control.value()); + }); + + self.on('focusin', function(e) { + if (e.target.tagName == 'INPUT') { + self.menu.hide(); + } + }); + + self.aria('expanded', true); + } + + self.menu.show(); + self.menu.layoutRect({w: self.layoutRect().w}); + self.menu.moveRel(self.getEl(), self.isRtl() ? ['br-tr', 'tr-br'] : ['bl-tl', 'tl-bl']); + }, + + /** + * Getter/setter function for the control value. + * + * @method value + * @param {String} [value] Value to be set. + * @return {String|tinymce.ui.ComboBox} Value or self if it's a set operation. + */ + value: function(value) { + var self = this; + + if (typeof(value) != "undefined") { + self._value = value; + self.removeClass('placeholder'); + + if (self._rendered) { + self.getEl('inp').value = value; + } + + return self; + } + + if (self._rendered) { + value = self.getEl('inp').value; + + if (value != self.settings.placeholder) { + return value; + } + + return ''; + } + + return self._value; + }, + + /** + * Getter/setter function for the disabled state. + * + * @method value + * @param {Boolean} [state] State to be set. + * @return {Boolean|tinymce.ui.ComboBox} True/false or self if it's a set operation. + */ + disabled: function(state) { + var self = this; + + if (self._rendered && typeof(state) != 'undefined') { + self.getEl('inp').disabled = state; + } + + return self._super(state); + }, + + /** + * Focuses the input area of the control. + * + * @method focus + */ + focus: function() { + this.getEl('inp').focus(); + }, + + /** + * Repaints the control after a layout operation. + * + * @method repaint + */ + repaint: function() { + var self = this, elm = self.getEl(), openElm = self.getEl('open'), rect = self.layoutRect(); + var width, lineHeight; + + if (openElm) { + width = rect.w - DomUtils.getSize(openElm).width - 10; + } else { + width = rect.w - 10; + } + + // Detect old IE 7+8 add lineHeight to align caret vertically in the middle + var doc = document; + if (doc.all && (!doc.documentMode || doc.documentMode <= 8)) { + lineHeight = (self.layoutRect().h - 2) + 'px'; + } + + DomUtils.css(elm.firstChild, { + width: width, + lineHeight: lineHeight + }); + + self._super(); + + return self; + }, + + /** + * Post render method. Called after the control has been rendered to the target. + * + * @method postRender + * @return {tinymce.ui.ComboBox} Current combobox instance. + */ + postRender: function() { + var self = this; + + DomUtils.on(this.getEl('inp'), 'change', function() { + self.fire('change'); + }); + + return self._super(); + }, + + remove: function() { + DomUtils.off(this.getEl('inp')); + this._super(); + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, id = self._id, settings = self.settings, prefix = self.classPrefix; + var value = settings.value || settings.placeholder || ''; + var icon, text, openBtnHtml = '', extraAttrs = ''; + + if ("spellcheck" in settings) { + extraAttrs += ' spellcheck="' + settings.spellcheck + '"'; + } + + if (settings.maxLength) { + extraAttrs += ' maxlength="' + settings.maxLength + '"'; + } + + if (settings.size) { + extraAttrs += ' size="' + settings.size + '"'; + } + + if (settings.subtype) { + extraAttrs += ' type="' + settings.subtype + '"'; + } + + if (self.disabled()) { + extraAttrs += ' disabled="disabled"'; + } + + icon = settings.icon; + if (icon && icon != 'caret') { + icon = prefix + 'ico ' + prefix + 'i-' + settings.icon; + } + + text = self._text; + + if (icon || text) { + openBtnHtml = ( + '
    ' + + '' + + '
    ' + ); + + self.addClass('has-open'); + } + + return ( + '
    ' + + '' + + openBtnHtml + + '
    ' + ); + } + }); +}); + +// Included from: js/tinymce/classes/ui/Path.js + +/** + * Path.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a new path control. + * + * @-x-less Path.less + * @class tinymce.ui.Path + * @extends tinymce.ui.Widget + */ +define("tinymce/ui/Path", [ + "tinymce/ui/Widget" +], function(Widget) { + "use strict"; + + return Widget.extend({ + /** + * Constructs a instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + * @setting {String} delimiter Delimiter to display between items in path. + */ + init: function(settings) { + var self = this; + + if (!settings.delimiter) { + settings.delimiter = '\u00BB'; + } + + self._super(settings); + self.addClass('path'); + self.canFocus = true; + + self.on('click', function(e) { + var index, target = e.target; + + if ((index = target.getAttribute('data-index'))) { + self.fire('select', {value: self.data()[index], index: index}); + } + }); + }, + + /** + * Focuses the current control. + * + * @method focus + * @return {tinymce.ui.Control} Current control instance. + */ + focus: function() { + var self = this; + + self.getEl().firstChild.focus(); + + return self; + }, + + /** + * Sets/gets the data to be used for the path. + * + * @method data + * @param {Array} data Array with items name is rendered to path. + */ + data: function(data) { + var self = this; + + if (typeof(data) !== "undefined") { + self._data = data; + self.update(); + + return self; + } + + return self._data; + }, + + /** + * Updated the path. + * + * @private + */ + update: function() { + this.innerHtml(this._getPathHtml()); + }, + + /** + * Called after the control has been rendered. + * + * @method postRender + */ + postRender: function() { + var self = this; + + self._super(); + + self.data(self.settings.data); + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this; + + return ( + '
    ' + + self._getPathHtml() + + '
    ' + ); + }, + + _getPathHtml: function() { + var self = this, parts = self._data || [], i, l, html = '', prefix = self.classPrefix; + + for (i = 0, l = parts.length; i < l; i++) { + html += ( + (i > 0 ? '' : '') + + '
    ' + parts[i].name + '
    ' + ); + } + + if (!html) { + html = '
     
    '; + } + + return html; + } + }); +}); + +// Included from: js/tinymce/classes/ui/ElementPath.js + +/** + * ElementPath.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This control creates an path for the current selections parent elements in TinyMCE. + * + * @class tinymce.ui.ElementPath + * @extends tinymce.ui.Path + */ +define("tinymce/ui/ElementPath", [ + "tinymce/ui/Path", + "tinymce/EditorManager" +], function(Path, EditorManager) { + return Path.extend({ + /** + * Post render method. Called after the control has been rendered to the target. + * + * @method postRender + * @return {tinymce.ui.ElementPath} Current combobox instance. + */ + postRender: function() { + var self = this, editor = EditorManager.activeEditor; + + function isHidden(elm) { + if (elm.nodeType === 1) { + if (elm.nodeName == "BR" || !!elm.getAttribute('data-mce-bogus')) { + return true; + } + + if (elm.getAttribute('data-mce-type') === 'bookmark') { + return true; + } + } + + return false; + } + + self.on('select', function(e) { + var parents = [], node, body = editor.getBody(); + + editor.focus(); + + node = editor.selection.getStart(); + while (node && node != body) { + if (!isHidden(node)) { + parents.push(node); + } + + node = node.parentNode; + } + + editor.selection.select(parents[parents.length - 1 - e.index]); + editor.nodeChanged(); + }); + + editor.on('nodeChange', function(e) { + var parents = [], selectionParents = e.parents, i = selectionParents.length; + + while (i--) { + if (selectionParents[i].nodeType == 1 && !isHidden(selectionParents[i])) { + var args = editor.fire('ResolveName', { + name: selectionParents[i].nodeName.toLowerCase(), + target: selectionParents[i] + }); + + parents.push({name: args.name}); + } + } + + self.data(parents); + }); + + return self._super(); + } + }); +}); + +// Included from: js/tinymce/classes/ui/FormItem.js + +/** + * FormItem.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class is a container created by the form element with + * a label and control item. + * + * @class tinymce.ui.FormItem + * @extends tinymce.ui.Container + * @setting {String} label Label to display for the form item. + */ +define("tinymce/ui/FormItem", [ + "tinymce/ui/Container" +], function(Container) { + "use strict"; + + return Container.extend({ + Defaults: { + layout: 'flex', + align: 'center', + defaults: { + flex: 1 + } + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, layout = self._layout, prefix = self.classPrefix; + + self.addClass('formitem'); + layout.preRender(self); + + return ( + '
    ' + + (self.settings.title ? ('
    ' + + self.settings.title + '
    ') : '') + + '
    ' + + (self.settings.html || '') + layout.renderHtml(self) + + '
    ' + + '
    ' + ); + } + }); +}); + +// Included from: js/tinymce/classes/ui/Form.js + +/** + * Form.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class creates a form container. A form container has the ability + * to automatically wrap items in tinymce.ui.FormItem instances. + * + * Each FormItem instance is a container for the label and the item. + * + * @example + * tinymce.ui.Factory.create({ + * type: 'form', + * items: [ + * {type: 'textbox', label: 'My text box'} + * ] + * }).renderTo(document.body); + * + * @class tinymce.ui.Form + * @extends tinymce.ui.Container + */ +define("tinymce/ui/Form", [ + "tinymce/ui/Container", + "tinymce/ui/FormItem" +], function(Container, FormItem) { + "use strict"; + + return Container.extend({ + Defaults: { + containerCls: 'form', + layout: 'flex', + direction: 'column', + align: 'stretch', + flex: 1, + padding: 20, + labelGap: 30, + spacing: 10, + callbacks: { + submit: function() { + this.submit(); + } + } + }, + + /** + * This method gets invoked before the control is rendered. + * + * @method preRender + */ + preRender: function() { + var self = this, items = self.items(); + + // Wrap any labeled items in FormItems + items.each(function(ctrl) { + var formItem, label = ctrl.settings.label; + + if (label) { + formItem = new FormItem({ + layout: 'flex', + autoResize: "overflow", + defaults: {flex: 1}, + items: [ + {type: 'label', id: ctrl._id + '-l', text: label, flex: 0, forId: ctrl._id, disabled: ctrl.disabled()} + ] + }); + + formItem.type = 'formitem'; + ctrl.aria('labelledby', ctrl._id + '-l'); + + if (typeof(ctrl.settings.flex) == "undefined") { + ctrl.settings.flex = 1; + } + + self.replace(ctrl, formItem); + formItem.add(ctrl); + } + }); + }, + + /** + * Recalcs label widths. + * + * @private + */ + recalcLabels: function() { + var self = this, maxLabelWidth = 0, labels = [], i, labelGap; + + if (self.settings.labelGapCalc === false) { + return; + } + + self.items().filter('formitem').each(function(item) { + var labelCtrl = item.items()[0], labelWidth = labelCtrl.getEl().clientWidth; + + maxLabelWidth = labelWidth > maxLabelWidth ? labelWidth : maxLabelWidth; + labels.push(labelCtrl); + }); + + labelGap = self.settings.labelGap || 0; + + i = labels.length; + while (i--) { + labels[i].settings.minWidth = maxLabelWidth + labelGap; + } + }, + + /** + * Getter/setter for the visibility state. + * + * @method visible + * @param {Boolean} [state] True/false state to show/hide. + * @return {tinymce.ui.Form|Boolean} True/false state or current control. + */ + visible: function(state) { + var val = this._super(state); + + if (state === true && this._rendered) { + this.recalcLabels(); + } + + return val; + }, + + /** + * Fires a submit event with the serialized form. + * + * @method submit + * @return {Object} Event arguments object. + */ + submit: function() { + return this.fire('submit', {data: this.toJSON()}); + }, + + /** + * Post render method. Called after the control has been rendered to the target. + * + * @method postRender + * @return {tinymce.ui.ComboBox} Current combobox instance. + */ + postRender: function() { + var self = this; + + self._super(); + self.recalcLabels(); + self.fromJSON(self.settings.data); + } + }); +}); + +// Included from: js/tinymce/classes/ui/FieldSet.js + +/** + * FieldSet.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class creates fieldset containers. + * + * @-x-less FieldSet.less + * @class tinymce.ui.FieldSet + * @extends tinymce.ui.Form + */ +define("tinymce/ui/FieldSet", [ + "tinymce/ui/Form" +], function(Form) { + "use strict"; + + return Form.extend({ + Defaults: { + containerCls: 'fieldset', + layout: 'flex', + direction: 'column', + align: 'stretch', + flex: 1, + padding: "25 15 5 15", + labelGap: 30, + spacing: 10, + border: 1 + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, layout = self._layout, prefix = self.classPrefix; + + self.preRender(); + layout.preRender(self); + + return ( + '
    ' + + (self.settings.title ? ('' + + self.settings.title + '') : '') + + '
    ' + + (self.settings.html || '') + layout.renderHtml(self) + + '
    ' + + '
    ' + ); + } + }); +}); + +// Included from: js/tinymce/classes/ui/FilePicker.js + +/** + * FilePicker.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*global tinymce:true */ + +/** + * This class creates a file picker control. + * + * @class tinymce.ui.FilePicker + * @extends tinymce.ui.ComboBox + */ +define("tinymce/ui/FilePicker", [ + "tinymce/ui/ComboBox" +], function(ComboBox) { + "use strict"; + + return ComboBox.extend({ + /** + * Constructs a new control instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + */ + init: function(settings) { + var self = this, editor = tinymce.activeEditor, fileBrowserCallback; + + settings.spellcheck = false; + + fileBrowserCallback = editor.settings.file_browser_callback; + if (fileBrowserCallback) { + settings.icon = 'browse'; + + settings.onaction = function() { + fileBrowserCallback( + self.getEl('inp').id, + self.getEl('inp').value, + settings.filetype, + window + ); + }; + } + + self._super(settings); + } + }); +}); + +// Included from: js/tinymce/classes/ui/FitLayout.js + +/** + * FitLayout.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This layout manager will resize the control to be the size of it's parent container. + * In other words width: 100% and height: 100%. + * + * @-x-less FitLayout.less + * @class tinymce.ui.FitLayout + * @extends tinymce.ui.AbsoluteLayout + */ +define("tinymce/ui/FitLayout", [ + "tinymce/ui/AbsoluteLayout" +], function(AbsoluteLayout) { + "use strict"; + + return AbsoluteLayout.extend({ + /** + * Recalculates the positions of the controls in the specified container. + * + * @method recalc + * @param {tinymce.ui.Container} container Container instance to recalc. + */ + recalc: function(container) { + var contLayoutRect = container.layoutRect(), paddingBox = container.paddingBox(); + + container.items().filter(':visible').each(function(ctrl) { + ctrl.layoutRect({ + x: paddingBox.left, + y: paddingBox.top, + w: contLayoutRect.innerW - paddingBox.right - paddingBox.left, + h: contLayoutRect.innerH - paddingBox.top - paddingBox.bottom + }); + + if (ctrl.recalc) { + ctrl.recalc(); + } + }); + } + }); +}); + +// Included from: js/tinymce/classes/ui/FlexLayout.js + +/** + * FlexLayout.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This layout manager works similar to the CSS flex box. + * + * @setting {String} direction row|row-reverse|column|column-reverse + * @setting {Number} flex A positive-number to flex by. + * @setting {String} align start|end|center|stretch + * @setting {String} pack start|end|justify + * + * @class tinymce.ui.FlexLayout + * @extends tinymce.ui.AbsoluteLayout + */ +define("tinymce/ui/FlexLayout", [ + "tinymce/ui/AbsoluteLayout" +], function(AbsoluteLayout) { + "use strict"; + + return AbsoluteLayout.extend({ + /** + * Recalculates the positions of the controls in the specified container. + * + * @method recalc + * @param {tinymce.ui.Container} container Container instance to recalc. + */ + recalc: function(container) { + // A ton of variables, needs to be in the same scope for performance + var i, l, items, contLayoutRect, contPaddingBox, contSettings, align, pack, spacing, totalFlex, availableSpace, direction; + var ctrl, ctrlLayoutRect, ctrlSettings, flex, maxSizeItems = [], size, maxSize, ratio, rect, pos, maxAlignEndPos; + var sizeName, minSizeName, posName, maxSizeName, beforeName, innerSizeName, deltaSizeName, contentSizeName; + var alignAxisName, alignInnerSizeName, alignSizeName, alignMinSizeName, alignBeforeName, alignAfterName; + var alignDeltaSizeName, alignContentSizeName; + var max = Math.max, min = Math.min; + + // Get container items, properties and settings + items = container.items().filter(':visible'); + contLayoutRect = container.layoutRect(); + contPaddingBox = container._paddingBox; + contSettings = container.settings; + direction = container.isRtl() ? (contSettings.direction || 'row-reversed') : contSettings.direction; + align = contSettings.align; + pack = container.isRtl() ? (contSettings.pack || 'end') : contSettings.pack; + spacing = contSettings.spacing || 0; + + if (direction == "row-reversed" || direction == "column-reverse") { + items = items.set(items.toArray().reverse()); + direction = direction.split('-')[0]; + } + + // Setup axis variable name for row/column direction since the calculations is the same + if (direction == "column") { + posName = "y"; + sizeName = "h"; + minSizeName = "minH"; + maxSizeName = "maxH"; + innerSizeName = "innerH"; + beforeName = 'top'; + deltaSizeName = "deltaH"; + contentSizeName = "contentH"; + + alignBeforeName = "left"; + alignSizeName = "w"; + alignAxisName = "x"; + alignInnerSizeName = "innerW"; + alignMinSizeName = "minW"; + alignAfterName = "right"; + alignDeltaSizeName = "deltaW"; + alignContentSizeName = "contentW"; + } else { + posName = "x"; + sizeName = "w"; + minSizeName = "minW"; + maxSizeName = "maxW"; + innerSizeName = "innerW"; + beforeName = 'left'; + deltaSizeName = "deltaW"; + contentSizeName = "contentW"; + + alignBeforeName = "top"; + alignSizeName = "h"; + alignAxisName = "y"; + alignInnerSizeName = "innerH"; + alignMinSizeName = "minH"; + alignAfterName = "bottom"; + alignDeltaSizeName = "deltaH"; + alignContentSizeName = "contentH"; + } + + // Figure out total flex, availableSpace and collect any max size elements + availableSpace = contLayoutRect[innerSizeName] - contPaddingBox[beforeName] - contPaddingBox[beforeName]; + maxAlignEndPos = totalFlex = 0; + for (i = 0, l = items.length; i < l; i++) { + ctrl = items[i]; + ctrlLayoutRect = ctrl.layoutRect(); + ctrlSettings = ctrl.settings; + flex = ctrlSettings.flex; + availableSpace -= (i < l - 1 ? spacing : 0); + + if (flex > 0) { + totalFlex += flex; + + // Flexed item has a max size then we need to check if we will hit that size + if (ctrlLayoutRect[maxSizeName]) { + maxSizeItems.push(ctrl); + } + + ctrlLayoutRect.flex = flex; + } + + availableSpace -= ctrlLayoutRect[minSizeName]; + + // Calculate the align end position to be used to check for overflow/underflow + size = contPaddingBox[alignBeforeName] + ctrlLayoutRect[alignMinSizeName] + contPaddingBox[alignAfterName]; + if (size > maxAlignEndPos) { + maxAlignEndPos = size; + } + } + + // Calculate minW/minH + rect = {}; + if (availableSpace < 0) { + rect[minSizeName] = contLayoutRect[minSizeName] - availableSpace + contLayoutRect[deltaSizeName]; + } else { + rect[minSizeName] = contLayoutRect[innerSizeName] - availableSpace + contLayoutRect[deltaSizeName]; + } + + rect[alignMinSizeName] = maxAlignEndPos + contLayoutRect[alignDeltaSizeName]; + + rect[contentSizeName] = contLayoutRect[innerSizeName] - availableSpace; + rect[alignContentSizeName] = maxAlignEndPos; + rect.minW = min(rect.minW, contLayoutRect.maxW); + rect.minH = min(rect.minH, contLayoutRect.maxH); + rect.minW = max(rect.minW, contLayoutRect.startMinWidth); + rect.minH = max(rect.minH, contLayoutRect.startMinHeight); + + // Resize container container if minSize was changed + if (contLayoutRect.autoResize && (rect.minW != contLayoutRect.minW || rect.minH != contLayoutRect.minH)) { + rect.w = rect.minW; + rect.h = rect.minH; + + container.layoutRect(rect); + this.recalc(container); + + // Forced recalc for example if items are hidden/shown + if (container._lastRect === null) { + var parentCtrl = container.parent(); + if (parentCtrl) { + parentCtrl._lastRect = null; + parentCtrl.recalc(); + } + } + + return; + } + + // Handle max size elements, check if they will become to wide with current options + ratio = availableSpace / totalFlex; + for (i = 0, l = maxSizeItems.length; i < l; i++) { + ctrl = maxSizeItems[i]; + ctrlLayoutRect = ctrl.layoutRect(); + maxSize = ctrlLayoutRect[maxSizeName]; + size = ctrlLayoutRect[minSizeName] + ctrlLayoutRect.flex * ratio; + + if (size > maxSize) { + availableSpace -= (ctrlLayoutRect[maxSizeName] - ctrlLayoutRect[minSizeName]); + totalFlex -= ctrlLayoutRect.flex; + ctrlLayoutRect.flex = 0; + ctrlLayoutRect.maxFlexSize = maxSize; + } else { + ctrlLayoutRect.maxFlexSize = 0; + } + } + + // Setup new ratio, target layout rect, start position + ratio = availableSpace / totalFlex; + pos = contPaddingBox[beforeName]; + rect = {}; + + // Handle pack setting moves the start position to end, center + if (totalFlex === 0) { + if (pack == "end") { + pos = availableSpace + contPaddingBox[beforeName]; + } else if (pack == "center") { + pos = Math.round( + (contLayoutRect[innerSizeName] / 2) - ((contLayoutRect[innerSizeName] - availableSpace) / 2) + ) + contPaddingBox[beforeName]; + + if (pos < 0) { + pos = contPaddingBox[beforeName]; + } + } else if (pack == "justify") { + pos = contPaddingBox[beforeName]; + spacing = Math.floor(availableSpace / (items.length - 1)); + } + } + + // Default aligning (start) the other ones needs to be calculated while doing the layout + rect[alignAxisName] = contPaddingBox[alignBeforeName]; + + // Start laying out controls + for (i = 0, l = items.length; i < l; i++) { + ctrl = items[i]; + ctrlLayoutRect = ctrl.layoutRect(); + size = ctrlLayoutRect.maxFlexSize || ctrlLayoutRect[minSizeName]; + + // Align the control on the other axis + if (align === "center") { + rect[alignAxisName] = Math.round((contLayoutRect[alignInnerSizeName] / 2) - (ctrlLayoutRect[alignSizeName] / 2)); + } else if (align === "stretch") { + rect[alignSizeName] = max( + ctrlLayoutRect[alignMinSizeName] || 0, + contLayoutRect[alignInnerSizeName] - contPaddingBox[alignBeforeName] - contPaddingBox[alignAfterName] + ); + rect[alignAxisName] = contPaddingBox[alignBeforeName]; + } else if (align === "end") { + rect[alignAxisName] = contLayoutRect[alignInnerSizeName] - ctrlLayoutRect[alignSizeName] - contPaddingBox.top; + } + + // Calculate new size based on flex + if (ctrlLayoutRect.flex > 0) { + size += ctrlLayoutRect.flex * ratio; + } + + rect[sizeName] = size; + rect[posName] = pos; + ctrl.layoutRect(rect); + + // Recalculate containers + if (ctrl.recalc) { + ctrl.recalc(); + } + + // Move x/y position + pos += size + spacing; + } + } + }); +}); + +// Included from: js/tinymce/classes/ui/FlowLayout.js + +/** + * FlowLayout.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This layout manager will place the controls by using the browsers native layout. + * + * @-x-less FlowLayout.less + * @class tinymce.ui.FlowLayout + * @extends tinymce.ui.Layout + */ +define("tinymce/ui/FlowLayout", [ + "tinymce/ui/Layout" +], function(Layout) { + return Layout.extend({ + Defaults: { + containerClass: 'flow-layout', + controlClass: 'flow-layout-item', + endClass : 'break' + }, + + /** + * Recalculates the positions of the controls in the specified container. + * + * @method recalc + * @param {tinymce.ui.Container} container Container instance to recalc. + */ + recalc: function(container) { + container.items().filter(':visible').each(function(ctrl) { + if (ctrl.recalc) { + ctrl.recalc(); + } + }); + } + }); +}); + +// Included from: js/tinymce/classes/ui/FormatControls.js + +/** + * FormatControls.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Internal class containing all TinyMCE specific control types such as + * format listboxes, fontlist boxes, toolbar buttons etc. + * + * @class tinymce.ui.FormatControls + */ +define("tinymce/ui/FormatControls", [ + "tinymce/ui/Control", + "tinymce/ui/Widget", + "tinymce/ui/FloatPanel", + "tinymce/util/Tools", + "tinymce/EditorManager", + "tinymce/Env" +], function(Control, Widget, FloatPanel, Tools, EditorManager, Env) { + var each = Tools.each; + + EditorManager.on('AddEditor', function(e) { + if (e.editor.rtl) { + Control.rtl = true; + } + + registerControls(e.editor); + }); + + Control.translate = function(text) { + return EditorManager.translate(text); + }; + + Widget.tooltips = !Env.iOS; + + function registerControls(editor) { + var formatMenu; + + // Generates a preview for a format + function getPreviewCss(format) { + var name, previewElm, dom = editor.dom; + var previewCss = '', parentFontSize, previewStyles; + + previewStyles = editor.settings.preview_styles; + + // No preview forced + if (previewStyles === false) { + return ''; + } + + // Default preview + if (!previewStyles) { + previewStyles = 'font-family font-size font-weight font-style text-decoration ' + + 'text-transform color background-color border border-radius outline text-shadow'; + } + + // Removes any variables since these can't be previewed + function removeVars(val) { + return val.replace(/%(\w+)/g, ''); + } + + // Create block/inline element to use for preview + format = editor.formatter.get(format); + if (!format) { + return; + } + + format = format[0]; + name = format.block || format.inline || 'span'; + previewElm = dom.create(name); + + // Add format styles to preview element + each(format.styles, function(value, name) { + value = removeVars(value); + + if (value) { + dom.setStyle(previewElm, name, value); + } + }); + + // Add attributes to preview element + each(format.attributes, function(value, name) { + value = removeVars(value); + + if (value) { + dom.setAttrib(previewElm, name, value); + } + }); + + // Add classes to preview element + each(format.classes, function(value) { + value = removeVars(value); + + if (!dom.hasClass(previewElm, value)) { + dom.addClass(previewElm, value); + } + }); + + editor.fire('PreviewFormats'); + + // Add the previewElm outside the visual area + dom.setStyles(previewElm, {position: 'absolute', left: -0xFFFF}); + editor.getBody().appendChild(previewElm); + + // Get parent container font size so we can compute px values out of em/% for older IE:s + parentFontSize = dom.getStyle(editor.getBody(), 'fontSize', true); + parentFontSize = /px$/.test(parentFontSize) ? parseInt(parentFontSize, 10) : 0; + + each(previewStyles.split(' '), function(name) { + var value = dom.getStyle(previewElm, name, true); + + // If background is transparent then check if the body has a background color we can use + if (name == 'background-color' && /transparent|rgba\s*\([^)]+,\s*0\)/.test(value)) { + value = dom.getStyle(editor.getBody(), name, true); + + // Ignore white since it's the default color, not the nicest fix + // TODO: Fix this by detecting runtime style + if (dom.toHex(value).toLowerCase() == '#ffffff') { + return; + } + } + + if (name == 'color') { + // Ignore black since it's the default color, not the nicest fix + // TODO: Fix this by detecting runtime style + if (dom.toHex(value).toLowerCase() == '#000000') { + return; + } + } + + // Old IE won't calculate the font size so we need to do that manually + if (name == 'font-size') { + if (/em|%$/.test(value)) { + if (parentFontSize === 0) { + return; + } + + // Convert font size from em/% to px + value = parseFloat(value, 10) / (/%$/.test(value) ? 100 : 1); + value = (value * parentFontSize) + 'px'; + } + } + + if (name == "border" && value) { + previewCss += 'padding:0 2px;'; + } + + previewCss += name + ':' + value + ';'; + }); + + editor.fire('AfterPreviewFormats'); + + //previewCss += 'line-height:normal'; + + dom.remove(previewElm); + + return previewCss; + } + + function createListBoxChangeHandler(items, formatName) { + return function() { + var self = this; + + editor.on('nodeChange', function(e) { + var formatter = editor.formatter; + var value = null; + + each(e.parents, function(node) { + each(items, function(item) { + if (formatName) { + if (formatter.matchNode(node, formatName, {value: item.value})) { + value = item.value; + } + } else { + if (formatter.matchNode(node, item.value)) { + value = item.value; + } + } + + if (value) { + return false; + } + }); + + if (value) { + return false; + } + }); + + self.value(value); + }); + }; + } + + function createFormats(formats) { + formats = formats.split(';'); + + var i = formats.length; + while (i--) { + formats[i] = formats[i].split('='); + } + + return formats; + } + + function createFormatMenu() { + var count = 0, newFormats = []; + + var defaultStyleFormats = [ + {title: 'Headers', items: [ + {title: 'Header 1', format: 'h1'}, + {title: 'Header 2', format: 'h2'}, + {title: 'Header 3', format: 'h3'}, + {title: 'Header 4', format: 'h4'}, + {title: 'Header 5', format: 'h5'}, + {title: 'Header 6', format: 'h6'} + ]}, + + {title: 'Inline', items: [ + {title: 'Bold', icon: 'bold', format: 'bold'}, + {title: 'Italic', icon: 'italic', format: 'italic'}, + {title: 'Underline', icon: 'underline', format: 'underline'}, + {title: 'Strikethrough', icon: 'strikethrough', format: 'strikethrough'}, + {title: 'Superscript', icon: 'superscript', format: 'superscript'}, + {title: 'Subscript', icon: 'subscript', format: 'subscript'}, + {title: 'Code', icon: 'code', format: 'code'} + ]}, + + {title: 'Blocks', items: [ + {title: 'Paragraph', format: 'p'}, + {title: 'Blockquote', format: 'blockquote'}, + {title: 'Div', format: 'div'}, + {title: 'Pre', format: 'pre'} + ]}, + + {title: 'Alignment', items: [ + {title: 'Left', icon: 'alignleft', format: 'alignleft'}, + {title: 'Center', icon: 'aligncenter', format: 'aligncenter'}, + {title: 'Right', icon: 'alignright', format: 'alignright'}, + {title: 'Justify', icon: 'alignjustify', format: 'alignjustify'} + ]} + ]; + + function createMenu(formats) { + var menu = []; + + if (!formats) { + return; + } + + each(formats, function(format) { + var menuItem = { + text: format.title, + icon: format.icon + }; + + if (format.items) { + menuItem.menu = createMenu(format.items); + } else { + var formatName = format.format || "custom" + count++; + + if (!format.format) { + format.name = formatName; + newFormats.push(format); + } + + menuItem.format = formatName; + } + + menu.push(menuItem); + }); + + return menu; + } + + function createStylesMenu() { + var menu; + + if (editor.settings.style_formats_merge) { + if (editor.settings.style_formats) { + menu = createMenu(defaultStyleFormats.concat(editor.settings.style_formats)); + } else { + menu = createMenu(defaultStyleFormats); + } + } else { + menu = createMenu(editor.settings.style_formats || defaultStyleFormats); + } + + return menu; + } + + editor.on('init', function() { + each(newFormats, function(format) { + editor.formatter.register(format.name, format); + }); + }); + + return { + type: 'menu', + items: createStylesMenu(), + onPostRender: function(e) { + editor.fire('renderFormatsMenu', {control: e.control}); + }, + itemDefaults: { + preview: true, + + textStyle: function() { + if (this.settings.format) { + return getPreviewCss(this.settings.format); + } + }, + + onPostRender: function() { + var self = this, formatName = this.settings.format; + + if (formatName) { + self.parent().on('show', function() { + self.disabled(!editor.formatter.canApply(formatName)); + self.active(editor.formatter.match(formatName)); + }); + } + }, + + onclick: function() { + if (this.settings.format) { + toggleFormat(this.settings.format); + } + } + } + }; + } + + formatMenu = createFormatMenu(); + + // Simple format controls : + each({ + bold: 'Bold', + italic: 'Italic', + underline: 'Underline', + strikethrough: 'Strikethrough', + subscript: 'Subscript', + superscript: 'Superscript' + }, function(text, name) { + editor.addButton(name, { + tooltip: text, + onPostRender: function() { + var self = this; + + // TODO: Fix this + if (editor.formatter) { + editor.formatter.formatChanged(name, function(state) { + self.active(state); + }); + } else { + editor.on('init', function() { + editor.formatter.formatChanged(name, function(state) { + self.active(state); + }); + }); + } + }, + onclick: function() { + toggleFormat(name); + } + }); + }); + + // Simple command controls :[,] + each({ + outdent: ['Decrease indent', 'Outdent'], + indent: ['Increase indent', 'Indent'], + cut: ['Cut', 'Cut'], + copy: ['Copy', 'Copy'], + paste: ['Paste', 'Paste'], + help: ['Help', 'mceHelp'], + selectall: ['Select all', 'SelectAll'], + hr: ['Insert horizontal rule', 'InsertHorizontalRule'], + removeformat: ['Clear formatting', 'RemoveFormat'], + visualaid: ['Visual aids', 'mceToggleVisualAid'], + newdocument: ['New document', 'mceNewDocument'] + }, function(item, name) { + editor.addButton(name, { + tooltip: item[0], + cmd: item[1] + }); + }); + + // Simple command controls with format state + each({ + blockquote: ['Blockquote', 'mceBlockQuote'], + numlist: ['Numbered list', 'InsertOrderedList'], + bullist: ['Bullet list', 'InsertUnorderedList'], + subscript: ['Subscript', 'Subscript'], + superscript: ['Superscript', 'Superscript'], + alignleft: ['Align left', 'JustifyLeft'], + aligncenter: ['Align center', 'JustifyCenter'], + alignright: ['Align right', 'JustifyRight'], + alignjustify: ['Justify', 'JustifyFull'] + }, function(item, name) { + editor.addButton(name, { + tooltip: item[0], + cmd: item[1], + onPostRender: function() { + var self = this; + + // TODO: Fix this + if (editor.formatter) { + editor.formatter.formatChanged(name, function(state) { + self.active(state); + }); + } else { + editor.on('init', function() { + editor.formatter.formatChanged(name, function(state) { + self.active(state); + }); + }); + } + } + }); + }); + + function hasUndo() { + return editor.undoManager ? editor.undoManager.hasUndo() : false; + } + + function hasRedo() { + return editor.undoManager ? editor.undoManager.hasRedo() : false; + } + + function toggleUndoState() { + var self = this; + + self.disabled(!hasUndo()); + editor.on('Undo Redo AddUndo TypingUndo', function() { + self.disabled(!hasUndo()); + }); + } + + function toggleRedoState() { + var self = this; + + self.disabled(!hasRedo()); + editor.on('Undo Redo AddUndo TypingUndo', function() { + self.disabled(!hasRedo()); + }); + } + + function toggleVisualAidState() { + var self = this; + + editor.on('VisualAid', function(e) { + self.active(e.hasVisual); + }); + + self.active(editor.hasVisual); + } + + editor.addButton('undo', { + tooltip: 'Undo', + onPostRender: toggleUndoState, + cmd: 'undo' + }); + + editor.addButton('redo', { + tooltip: 'Redo', + onPostRender: toggleRedoState, + cmd: 'redo' + }); + + editor.addMenuItem('newdocument', { + text: 'New document', + shortcut: 'Ctrl+N', + icon: 'newdocument', + cmd: 'mceNewDocument' + }); + + editor.addMenuItem('undo', { + text: 'Undo', + icon: 'undo', + shortcut: 'Ctrl+Z', + onPostRender: toggleUndoState, + cmd: 'undo' + }); + + editor.addMenuItem('redo', { + text: 'Redo', + icon: 'redo', + shortcut: 'Ctrl+Y', + onPostRender: toggleRedoState, + cmd: 'redo' + }); + + editor.addMenuItem('visualaid', { + text: 'Visual aids', + selectable: true, + onPostRender: toggleVisualAidState, + cmd: 'mceToggleVisualAid' + }); + + each({ + cut: ['Cut', 'Cut', 'Ctrl+X'], + copy: ['Copy', 'Copy', 'Ctrl+C'], + paste: ['Paste', 'Paste', 'Ctrl+V'], + selectall: ['Select all', 'SelectAll', 'Ctrl+A'], + bold: ['Bold', 'Bold', 'Ctrl+B'], + italic: ['Italic', 'Italic', 'Ctrl+I'], + underline: ['Underline', 'Underline'], + strikethrough: ['Strikethrough', 'Strikethrough'], + subscript: ['Subscript', 'Subscript'], + superscript: ['Superscript', 'Superscript'], + removeformat: ['Clear formatting', 'RemoveFormat'] + }, function(item, name) { + editor.addMenuItem(name, { + text: item[0], + icon: name, + shortcut: item[2], + cmd: item[1] + }); + }); + + editor.on('mousedown', function() { + FloatPanel.hideAll(); + }); + + function toggleFormat(fmt) { + if (fmt.control) { + fmt = fmt.control.value(); + } + + if (fmt) { + editor.execCommand('mceToggleFormat', false, fmt); + } + } + + editor.addButton('styleselect', { + type: 'menubutton', + text: 'Formats', + menu: formatMenu + }); + + editor.addButton('formatselect', function() { + var items = [], blocks = createFormats(editor.settings.block_formats || + 'Paragraph=p;' + + 'Address=address;' + + 'Pre=pre;' + + 'Header 1=h1;' + + 'Header 2=h2;' + + 'Header 3=h3;' + + 'Header 4=h4;' + + 'Header 5=h5;' + + 'Header 6=h6' + ); + + each(blocks, function(block) { + items.push({ + text: block[0], + value: block[1], + textStyle: function() { + return getPreviewCss(block[1]); + } + }); + }); + + return { + type: 'listbox', + text: blocks[0][0], + values: items, + fixedWidth: true, + onselect: toggleFormat, + onPostRender: createListBoxChangeHandler(items) + }; + }); + + editor.addButton('fontselect', function() { + var defaultFontsFormats = + 'Andale Mono=andale mono,times;' + + 'Arial=arial,helvetica,sans-serif;' + + 'Arial Black=arial black,avant garde;' + + 'Book Antiqua=book antiqua,palatino;' + + 'Comic Sans MS=comic sans ms,sans-serif;' + + 'Courier New=courier new,courier;' + + 'Georgia=georgia,palatino;' + + 'Helvetica=helvetica;' + + 'Impact=impact,chicago;' + + 'Symbol=symbol;' + + 'Tahoma=tahoma,arial,helvetica,sans-serif;' + + 'Terminal=terminal,monaco;' + + 'Times New Roman=times new roman,times;' + + 'Trebuchet MS=trebuchet ms,geneva;' + + 'Verdana=verdana,geneva;' + + 'Webdings=webdings;' + + 'Wingdings=wingdings,zapf dingbats'; + + var items = [], fonts = createFormats(editor.settings.font_formats || defaultFontsFormats); + + each(fonts, function(font) { + items.push({ + text: {raw: font[0]}, + value: font[1], + textStyle: font[1].indexOf('dings') == -1 ? 'font-family:' + font[1] : '' + }); + }); + + return { + type: 'listbox', + text: 'Font Family', + tooltip: 'Font Family', + values: items, + fixedWidth: true, + onPostRender: createListBoxChangeHandler(items, 'fontname'), + onselect: function(e) { + if (e.control.settings.value) { + editor.execCommand('FontName', false, e.control.settings.value); + } + } + }; + }); + + editor.addButton('fontsizeselect', function() { + var items = [], defaultFontsizeFormats = '8pt 10pt 12pt 14pt 18pt 24pt 36pt'; + var fontsize_formats = editor.settings.fontsize_formats || defaultFontsizeFormats; + + each(fontsize_formats.split(' '), function(item) { + items.push({text: item, value: item}); + }); + + return { + type: 'listbox', + text: 'Font Sizes', + tooltip: 'Font Sizes', + values: items, + fixedWidth: true, + onPostRender: createListBoxChangeHandler(items, 'fontsize'), + onclick: function(e) { + if (e.control.settings.value) { + editor.execCommand('FontSize', false, e.control.settings.value); + } + } + }; + }); + + editor.addMenuItem('formats', { + text: 'Formats', + menu: formatMenu + }); + } +}); + +// Included from: js/tinymce/classes/ui/GridLayout.js + +/** + * GridLayout.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This layout manager places controls in a grid. + * + * @setting {Number} spacing Spacing between controls. + * @setting {Number} spacingH Horizontal spacing between controls. + * @setting {Number} spacingV Vertical spacing between controls. + * @setting {Number} columns Number of columns to use. + * @setting {String/Array} alignH start|end|center|stretch or array of values for each column. + * @setting {String/Array} alignV start|end|center|stretch or array of values for each column. + * @setting {String} pack start|end + * + * @class tinymce.ui.GridLayout + * @extends tinymce.ui.AbsoluteLayout + */ +define("tinymce/ui/GridLayout", [ + "tinymce/ui/AbsoluteLayout" +], function(AbsoluteLayout) { + "use strict"; + + return AbsoluteLayout.extend({ + /** + * Recalculates the positions of the controls in the specified container. + * + * @method recalc + * @param {tinymce.ui.Container} container Container instance to recalc. + */ + recalc: function(container) { + var settings = container.settings, rows, cols, items, contLayoutRect, width, height, rect, + ctrlLayoutRect, ctrl, x, y, posX, posY, ctrlSettings, contPaddingBox, align, spacingH, spacingV, alignH, alignV, maxX, maxY, + colWidths = [], rowHeights = [], ctrlMinWidth, ctrlMinHeight, availableWidth, availableHeight; + + // Get layout settings + settings = container.settings; + items = container.items().filter(':visible'); + contLayoutRect = container.layoutRect(); + cols = settings.columns || Math.ceil(Math.sqrt(items.length)); + rows = Math.ceil(items.length / cols); + spacingH = settings.spacingH || settings.spacing || 0; + spacingV = settings.spacingV || settings.spacing || 0; + alignH = settings.alignH || settings.align; + alignV = settings.alignV || settings.align; + contPaddingBox = container._paddingBox; + + if (alignH && typeof(alignH) == "string") { + alignH = [alignH]; + } + + if (alignV && typeof(alignV) == "string") { + alignV = [alignV]; + } + + // Zero padd columnWidths + for (x = 0; x < cols; x++) { + colWidths.push(0); + } + + // Zero padd rowHeights + for (y = 0; y < rows; y++) { + rowHeights.push(0); + } + + // Calculate columnWidths and rowHeights + for (y = 0; y < rows; y++) { + for (x = 0; x < cols; x++) { + ctrl = items[y * cols + x]; + + // Out of bounds + if (!ctrl) { + break; + } + + ctrlLayoutRect = ctrl.layoutRect(); + ctrlMinWidth = ctrlLayoutRect.minW; + ctrlMinHeight = ctrlLayoutRect.minH; + + colWidths[x] = ctrlMinWidth > colWidths[x] ? ctrlMinWidth : colWidths[x]; + rowHeights[y] = ctrlMinHeight > rowHeights[y] ? ctrlMinHeight : rowHeights[y]; + } + } + + // Calculate maxX + availableWidth = contLayoutRect.innerW - contPaddingBox.left - contPaddingBox.right; + for (maxX = 0, x = 0; x < cols; x++) { + maxX += colWidths[x] + (x > 0 ? spacingH : 0); + availableWidth -= (x > 0 ? spacingH : 0) + colWidths[x]; + } + + // Calculate maxY + availableHeight = contLayoutRect.innerH - contPaddingBox.top - contPaddingBox.bottom; + for (maxY = 0, y = 0; y < rows; y++) { + maxY += rowHeights[y] + (y > 0 ? spacingV : 0); + availableHeight -= (y > 0 ? spacingV : 0) + rowHeights[y]; + } + + maxX += contPaddingBox.left + contPaddingBox.right; + maxY += contPaddingBox.top + contPaddingBox.bottom; + + // Calculate minW/minH + rect = {}; + rect.minW = maxX + (contLayoutRect.w - contLayoutRect.innerW); + rect.minH = maxY + (contLayoutRect.h - contLayoutRect.innerH); + + rect.contentW = rect.minW - contLayoutRect.deltaW; + rect.contentH = rect.minH - contLayoutRect.deltaH; + rect.minW = Math.min(rect.minW, contLayoutRect.maxW); + rect.minH = Math.min(rect.minH, contLayoutRect.maxH); + rect.minW = Math.max(rect.minW, contLayoutRect.startMinWidth); + rect.minH = Math.max(rect.minH, contLayoutRect.startMinHeight); + + // Resize container container if minSize was changed + if (contLayoutRect.autoResize && (rect.minW != contLayoutRect.minW || rect.minH != contLayoutRect.minH)) { + rect.w = rect.minW; + rect.h = rect.minH; + + container.layoutRect(rect); + this.recalc(container); + + // Forced recalc for example if items are hidden/shown + if (container._lastRect === null) { + var parentCtrl = container.parent(); + if (parentCtrl) { + parentCtrl._lastRect = null; + parentCtrl.recalc(); + } + } + + return; + } + + // Update contentW/contentH so absEnd moves correctly + if (contLayoutRect.autoResize) { + rect = container.layoutRect(rect); + rect.contentW = rect.minW - contLayoutRect.deltaW; + rect.contentH = rect.minH - contLayoutRect.deltaH; + } + + var flexV; + + if (settings.packV == 'start') { + flexV = 0; + } else { + flexV = availableHeight > 0 ? Math.floor(availableHeight / rows) : 0; + } + + // Calculate totalFlex + var totalFlex = 0; + var flexWidths = settings.flexWidths; + if (flexWidths) { + for (x = 0; x < flexWidths.length; x++) { + totalFlex += flexWidths[x]; + } + } else { + totalFlex = cols; + } + + // Calculate new column widths based on flex values + var ratio = availableWidth / totalFlex; + for (x = 0; x < cols; x++) { + colWidths[x] += flexWidths ? flexWidths[x] * ratio : ratio; + } + + // Move/resize controls + posY = contPaddingBox.top; + for (y = 0; y < rows; y++) { + posX = contPaddingBox.left; + height = rowHeights[y] + flexV; + + for (x = 0; x < cols; x++) { + ctrl = items[y * cols + x]; + + // No more controls to render then break + if (!ctrl) { + break; + } + + // Get control settings and calculate x, y + ctrlSettings = ctrl.settings; + ctrlLayoutRect = ctrl.layoutRect(); + width = Math.max(colWidths[x], ctrlLayoutRect.startMinWidth); + ctrlLayoutRect.x = posX; + ctrlLayoutRect.y = posY; + + // Align control horizontal + align = ctrlSettings.alignH || (alignH ? (alignH[x] || alignH[0]) : null); + if (align == "center") { + ctrlLayoutRect.x = posX + (width / 2) - (ctrlLayoutRect.w / 2); + } else if (align == "right") { + ctrlLayoutRect.x = posX + width - ctrlLayoutRect.w; + } else if (align == "stretch") { + ctrlLayoutRect.w = width; + } + + // Align control vertical + align = ctrlSettings.alignV || (alignV ? (alignV[x] || alignV[0]) : null); + if (align == "center") { + ctrlLayoutRect.y = posY + (height / 2) - (ctrlLayoutRect.h / 2); + } else if (align == "bottom") { + ctrlLayoutRect.y = posY + height - ctrlLayoutRect.h; + } else if (align == "stretch") { + ctrlLayoutRect.h = height; + } + + ctrl.layoutRect(ctrlLayoutRect); + + posX += width + spacingH; + + if (ctrl.recalc) { + ctrl.recalc(); + } + } + + posY += height + spacingV; + } + } + }); +}); + +// Included from: js/tinymce/classes/ui/Iframe.js + +/** + * Iframe.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*jshint scripturl:true */ + +/** + * This class creates an iframe. + * + * @setting {String} url Url to open in the iframe. + * + * @-x-less Iframe.less + * @class tinymce.ui.Iframe + * @extends tinymce.ui.Widget + */ +define("tinymce/ui/Iframe", [ + "tinymce/ui/Widget" +], function(Widget) { + "use strict"; + + return Widget.extend({ + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this; + + self.addClass('iframe'); + self.canFocus = false; + + return ( + '' + ); + }, + + /** + * Setter for the iframe source. + * + * @method src + * @param {String} src Source URL for iframe. + */ + src: function(src) { + this.getEl().src = src; + }, + + /** + * Inner HTML for the iframe. + * + * @method html + * @param {String} html HTML string to set as HTML inside the iframe. + * @param {function} callback Optional callback to execute when the iframe body is filled with contents. + * @return {tinymce.ui.Iframe} Current iframe control. + */ + html: function(html, callback) { + var self = this, body = this.getEl().contentWindow.document.body; + + // Wait for iframe to initialize IE 10 takes time + if (!body) { + setTimeout(function() { + self.html(html); + }, 0); + } else { + body.innerHTML = html; + + if (callback) { + callback(); + } + } + + return this; + } + }); +}); + +// Included from: js/tinymce/classes/ui/Label.js + +/** + * Label.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class creates a label element. A label is a simple text control + * that can be bound to other controls. + * + * @-x-less Label.less + * @class tinymce.ui.Label + * @extends tinymce.ui.Widget + */ +define("tinymce/ui/Label", [ + "tinymce/ui/Widget", + "tinymce/ui/DomUtils" +], function(Widget, DomUtils) { + "use strict"; + + return Widget.extend({ + /** + * Constructs a instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + * @param {Boolean} multiline Multiline label. + */ + init: function(settings) { + var self = this; + + self._super(settings); + self.addClass('widget'); + self.addClass('label'); + self.canFocus = false; + + if (settings.multiline) { + self.addClass('autoscroll'); + } + + if (settings.strong) { + self.addClass('strong'); + } + }, + + /** + * Initializes the current controls layout rect. + * This will be executed by the layout managers to determine the + * default minWidth/minHeight etc. + * + * @method initLayoutRect + * @return {Object} Layout rect instance. + */ + initLayoutRect: function() { + var self = this, layoutRect = self._super(); + + if (self.settings.multiline) { + var size = DomUtils.getSize(self.getEl()); + + // Check if the text fits within maxW if not then try word wrapping it + if (size.width > layoutRect.maxW) { + layoutRect.minW = layoutRect.maxW; + self.addClass('multiline'); + } + + self.getEl().style.width = layoutRect.minW + 'px'; + layoutRect.startMinH = layoutRect.h = layoutRect.minH = Math.min(layoutRect.maxH, DomUtils.getSize(self.getEl()).height); + } + + return layoutRect; + }, + + /** + * Repaints the control after a layout operation. + * + * @method repaint + */ + repaint: function() { + var self = this; + + if (!self.settings.multiline) { + self.getEl().style.lineHeight = self.layoutRect().h + 'px'; + } + + return self._super(); + }, + + /** + * Sets/gets the current label text. + * + * @method text + * @param {String} [text] New label text. + * @return {String|tinymce.ui.Label} Current text or current label instance. + */ + text: function(text) { + var self = this; + + if (self._rendered && text) { + this.innerHtml(self.encode(text)); + } + + return self._super(text); + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, forId = self.settings.forId; + + return ( + '' + ); + } + }); +}); + +// Included from: js/tinymce/classes/ui/Toolbar.js + +/** + * Toolbar.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a new toolbar. + * + * @class tinymce.ui.Toolbar + * @extends tinymce.ui.Container + */ +define("tinymce/ui/Toolbar", [ + "tinymce/ui/Container" +], function(Container) { + "use strict"; + + return Container.extend({ + Defaults: { + role: 'toolbar', + layout: 'flow' + }, + + /** + * Constructs a instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + */ + init: function(settings) { + var self = this; + + self._super(settings); + self.addClass('toolbar'); + }, + + /** + * Called after the control has been rendered. + * + * @method postRender + */ + postRender: function() { + var self = this; + + self.items().addClass('toolbar-item'); + + return self._super(); + } + }); +}); + +// Included from: js/tinymce/classes/ui/MenuBar.js + +/** + * MenuBar.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a new menubar. + * + * @-x-less MenuBar.less + * @class tinymce.ui.MenuBar + * @extends tinymce.ui.Container + */ +define("tinymce/ui/MenuBar", [ + "tinymce/ui/Toolbar" +], function(Toolbar) { + "use strict"; + + return Toolbar.extend({ + Defaults: { + role: 'menubar', + containerCls: 'menubar', + ariaRoot: true, + defaults: { + type: 'menubutton' + } + } + }); +}); + +// Included from: js/tinymce/classes/ui/MenuButton.js + +/** + * MenuButton.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a new menu button. + * + * @-x-less MenuButton.less + * @class tinymce.ui.MenuButton + * @extends tinymce.ui.Button + */ +define("tinymce/ui/MenuButton", [ + "tinymce/ui/Button", + "tinymce/ui/Factory", + "tinymce/ui/MenuBar" +], function(Button, Factory, MenuBar) { + "use strict"; + + // TODO: Maybe add as some global function + function isChildOf(node, parent) { + while (node) { + if (parent === node) { + return true; + } + + node = node.parentNode; + } + + return false; + } + + var MenuButton = Button.extend({ + /** + * Constructs a instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + */ + init: function(settings) { + var self = this; + + self._renderOpen = true; + self._super(settings); + + self.addClass('menubtn'); + + if (settings.fixedWidth) { + self.addClass('fixed-width'); + } + + self.aria('haspopup', true); + self.hasPopup = true; + }, + + /** + * Shows the menu for the button. + * + * @method showMenu + */ + showMenu: function() { + var self = this, settings = self.settings, menu; + + if (self.menu && self.menu.visible()) { + return self.hideMenu(); + } + + if (!self.menu) { + menu = settings.menu || []; + + // Is menu array then auto constuct menu control + if (menu.length) { + menu = { + type: 'menu', + items: menu + }; + } else { + menu.type = menu.type || 'menu'; + } + + self.menu = Factory.create(menu).parent(self).renderTo(); + self.fire('createmenu'); + self.menu.reflow(); + self.menu.on('cancel', function(e) { + if (e.control.parent() === self.menu) { + e.stopPropagation(); + self.focus(); + self.hideMenu(); + } + }); + + // Move focus to button when a menu item is selected/clicked + self.menu.on('select', function() { + self.focus(); + }); + + self.menu.on('show hide', function(e) { + if (e.control == self.menu) { + self.activeMenu(e.type == 'show'); + } + + self.aria('expanded', e.type == 'show'); + }).fire('show'); + } + + self.menu.show(); + self.menu.layoutRect({w: self.layoutRect().w}); + self.menu.moveRel(self.getEl(), self.isRtl() ? ['br-tr', 'tr-br'] : ['bl-tl', 'tl-bl']); + }, + + /** + * Hides the menu for the button. + * + * @method hideMenu + */ + hideMenu: function() { + var self = this; + + if (self.menu) { + self.menu.items().each(function(item) { + if (item.hideMenu) { + item.hideMenu(); + } + }); + + self.menu.hide(); + } + }, + + /** + * Sets the active menu state. + * + * @private + */ + activeMenu: function(state) { + this.toggleClass('active', state); + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, id = self._id, prefix = self.classPrefix; + var icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : ''; + + self.aria('role', self.parent() instanceof MenuBar ? 'menuitem' : 'button'); + + return ( + '
    ' + + '' + + '
    ' + ); + }, + + /** + * Gets invoked after the control has been rendered. + * + * @method postRender + */ + postRender: function() { + var self = this; + + self.on('click', function(e) { + if (e.control === self && isChildOf(e.target, self.getEl())) { + self.showMenu(); + + if (e.aria) { + self.menu.items()[0].focus(); + } + } + }); + + self.on('mouseenter', function(e) { + var overCtrl = e.control, parent = self.parent(), hasVisibleSiblingMenu; + + if (overCtrl && parent && overCtrl instanceof MenuButton && overCtrl.parent() == parent) { + parent.items().filter('MenuButton').each(function(ctrl) { + if (ctrl.hideMenu && ctrl != overCtrl) { + if (ctrl.menu && ctrl.menu.visible()) { + hasVisibleSiblingMenu = true; + } + + ctrl.hideMenu(); + } + }); + + if (hasVisibleSiblingMenu) { + overCtrl.focus(); // Fix for: #5887 + overCtrl.showMenu(); + } + } + }); + + return self._super(); + }, + + /** + * Sets/gets the current button text. + * + * @method text + * @param {String} [text] New button text. + * @return {String|tinymce.ui.MenuButton} Current text or current MenuButton instance. + */ + text: function(text) { + var self = this, i, children; + + if (self._rendered) { + children = self.getEl('open').getElementsByTagName('span'); + for (i = 0; i < children.length; i++) { + children[i].innerHTML = (self.settings.icon && text ? '\u00a0' : '') + self.encode(text); + } + } + + return this._super(text); + }, + + /** + * Removes the control and it's menus. + * + * @method remove + */ + remove: function() { + this._super(); + + if (this.menu) { + this.menu.remove(); + } + } + }); + + return MenuButton; +}); + +// Included from: js/tinymce/classes/ui/ListBox.js + +/** + * ListBox.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a new list box control. + * + * @-x-less ListBox.less + * @class tinymce.ui.ListBox + * @extends tinymce.ui.MenuButton + */ +define("tinymce/ui/ListBox", [ + "tinymce/ui/MenuButton" +], function(MenuButton) { + "use strict"; + + return MenuButton.extend({ + /** + * Constructs a instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + * @setting {Array} values Array with values to add to list box. + */ + init: function(settings) { + var self = this, values, i, selected, selectedText, lastItemCtrl; + + self._values = values = settings.values; + if (values) { + for (i = 0; i < values.length; i++) { + selected = values[i].selected || settings.value === values[i].value; + + if (selected) { + selectedText = selectedText || values[i].text; + self._value = values[i].value; + break; + } + } + + // Default with first item + if (!selected && values.length > 0) { + selectedText = values[0].text; + self._value = values[0].value; + } + + settings.menu = values; + } + + settings.text = settings.text || selectedText || values[0].text; + + self._super(settings); + self.addClass('listbox'); + + self.on('select', function(e) { + var ctrl = e.control; + + if (lastItemCtrl) { + e.lastControl = lastItemCtrl; + } + + if (settings.multiple) { + ctrl.active(!ctrl.active()); + } else { + self.value(e.control.settings.value); + } + + lastItemCtrl = ctrl; + }); + }, + + /** + * Getter/setter function for the control value. + * + * @method value + * @param {String} [value] Value to be set. + * @return {Boolean/tinymce.ui.ListBox} Value or self if it's a set operation. + */ + value: function(value) { + var self = this, active, selectedText, menu, i; + + function activateByValue(menu, value) { + menu.items().each(function(ctrl) { + active = ctrl.value() === value; + + if (active) { + selectedText = selectedText || ctrl.text(); + } + + ctrl.active(active); + + if (ctrl.menu) { + activateByValue(ctrl.menu, value); + } + }); + } + + if (typeof(value) != "undefined") { + if (self.menu) { + activateByValue(self.menu, value); + } else { + menu = self.settings.menu; + for (i = 0; i < menu.length; i++) { + active = menu[i].value == value; + + if (active) { + selectedText = selectedText || menu[i].text; + } + + menu[i].active = active; + } + } + + self.text(selectedText || this.settings.text); + } + + return self._super(value); + } + }); +}); + +// Included from: js/tinymce/classes/ui/MenuItem.js + +/** + * MenuItem.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a new menu item. + * + * @-x-less MenuItem.less + * @class tinymce.ui.MenuItem + * @extends tinymce.ui.Control + */ +define("tinymce/ui/MenuItem", [ + "tinymce/ui/Widget", + "tinymce/ui/Factory", + "tinymce/Env" +], function(Widget, Factory, Env) { + "use strict"; + + return Widget.extend({ + Defaults: { + border: 0, + role: 'menuitem' + }, + + /** + * Constructs a instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + * @setting {Boolean} selectable Selectable menu. + * @setting {Array} menu Submenu array with items. + * @setting {String} shortcut Shortcut to display for menu item. Example: Ctrl+X + */ + init: function(settings) { + var self = this; + + self.hasPopup = true; + + self._super(settings); + + settings = self.settings; + + self.addClass('menu-item'); + + if (settings.menu) { + self.addClass('menu-item-expand'); + } + + if (settings.preview) { + self.addClass('menu-item-preview'); + } + + if (self._text === '-' || self._text === '|') { + self.addClass('menu-item-sep'); + self.aria('role', 'separator'); + self._text = '-'; + } + + if (settings.selectable) { + self.aria('role', 'menuitemcheckbox'); + self.addClass('menu-item-checkbox'); + settings.icon = 'selected'; + } + + if (!settings.preview && !settings.selectable) { + self.addClass('menu-item-normal'); + } + + self.on('mousedown', function(e) { + e.preventDefault(); + }); + + if (settings.menu) { + self.aria('haspopup', true); + } + }, + + /** + * Returns true/false if the menuitem has sub menu. + * + * @method hasMenus + * @return {Boolean} True/false state if it has submenu. + */ + hasMenus: function() { + return !!this.settings.menu; + }, + + /** + * Shows the menu for the menu item. + * + * @method showMenu + */ + showMenu: function() { + var self = this, settings = self.settings, menu, parent = self.parent(); + + parent.items().each(function(ctrl) { + if (ctrl !== self) { + ctrl.hideMenu(); + } + }); + + if (settings.menu) { + menu = self.menu; + + if (!menu) { + menu = settings.menu; + + // Is menu array then auto constuct menu control + if (menu.length) { + menu = { + type: 'menu', + items: menu + }; + } else { + menu.type = menu.type || 'menu'; + } + + if (parent.settings.itemDefaults) { + menu.itemDefaults = parent.settings.itemDefaults; + } + + menu = self.menu = Factory.create(menu).parent(self).renderTo(); + menu.reflow(); + menu.fire('show'); + menu.on('cancel', function(e) { + e.stopPropagation(); + self.focus(); + menu.hide(); + }); + + menu.on('hide', function(e) { + if (e.control === menu) { + self.removeClass('selected'); + } + }); + + menu.submenu = true; + } else { + menu.show(); + } + + menu._parentMenu = parent; + + menu.addClass('menu-sub'); + + var rel = menu.testMoveRel( + self.getEl(), + self.isRtl() ? ['tl-tr', 'bl-br', 'tr-tl', 'br-bl'] : ['tr-tl', 'br-bl', 'tl-tr', 'bl-br'] + ); + + menu.moveRel(self.getEl(), rel); + menu.rel = rel; + + rel = 'menu-sub-' + rel; + menu.removeClass(menu._lastRel); + menu.addClass(rel); + menu._lastRel = rel; + + self.addClass('selected'); + self.aria('expanded', true); + } + }, + + /** + * Hides the menu for the menu item. + * + * @method hideMenu + */ + hideMenu: function() { + var self = this; + + if (self.menu) { + self.menu.items().each(function(item) { + if (item.hideMenu) { + item.hideMenu(); + } + }); + + self.menu.hide(); + self.aria('expanded', false); + } + + return self; + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, id = self._id, settings = self.settings, prefix = self.classPrefix, text = self.encode(self._text); + var icon = self.settings.icon, image = '', shortcut = settings.shortcut; + + if (icon) { + self.parent().addClass('menu-has-icons'); + } + + if (settings.image) { + icon = 'none'; + image = ' style="background-image: url(\'' + settings.image + '\')"'; + } + + if (shortcut && Env.mac) { + // format shortcut for Mac + shortcut = shortcut.replace(/ctrl\+alt\+/i, '⌥⌘'); // ctrl+cmd + shortcut = shortcut.replace(/ctrl\+/i, '⌘'); // ctrl symbol + shortcut = shortcut.replace(/alt\+/i, '⌥'); // cmd symbol + shortcut = shortcut.replace(/shift\+/i, '⇧'); // shift symbol + } + + icon = prefix + 'ico ' + prefix + 'i-' + (self.settings.icon || 'none'); + + return ( + '
    ' + + (text !== '-' ? ' ' : '') + + (text !== '-' ? '' + text + '' : '') + + (shortcut ? '
    ' + shortcut + '
    ' : '') + + (settings.menu ? '
    ' : '') + + '
    ' + ); + }, + + /** + * Gets invoked after the control has been rendered. + * + * @method postRender + */ + postRender: function() { + var self = this, settings = self.settings; + + var textStyle = settings.textStyle; + if (typeof(textStyle) == "function") { + textStyle = textStyle.call(this); + } + + if (textStyle) { + var textElm = self.getEl('text'); + if (textElm) { + textElm.setAttribute('style', textStyle); + } + } + + self.on('mouseenter click', function(e) { + if (e.control === self) { + if (!settings.menu && e.type === 'click') { + self.fire('select'); + self.parent().hideAll(); + } else { + self.showMenu(); + + if (e.aria) { + self.menu.focus(true); + } + } + } + }); + + self._super(); + + return self; + }, + + active: function(state) { + if (typeof(state) != "undefined") { + this.aria('checked', state); + } + + return this._super(state); + }, + + /** + * Removes the control and it's menus. + * + * @method remove + */ + remove: function() { + this._super(); + + if (this.menu) { + this.menu.remove(); + } + } + }); +}); + +// Included from: js/tinymce/classes/ui/Menu.js + +/** + * Menu.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a new menu. + * + * @-x-less Menu.less + * @class tinymce.ui.Menu + * @extends tinymce.ui.FloatPanel + */ +define("tinymce/ui/Menu", [ + "tinymce/ui/FloatPanel", + "tinymce/ui/MenuItem", + "tinymce/util/Tools" +], function(FloatPanel, MenuItem, Tools) { + "use strict"; + + var Menu = FloatPanel.extend({ + Defaults: { + defaultType: 'menuitem', + border: 1, + layout: 'stack', + role: 'application', + bodyRole: 'menu', + ariaRoot: true + }, + + /** + * Constructs a instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + */ + init: function(settings) { + var self = this; + + settings.autohide = true; + settings.constrainToViewport = true; + + if (settings.itemDefaults) { + var items = settings.items, i = items.length; + + while (i--) { + items[i] = Tools.extend({}, settings.itemDefaults, items[i]); + } + } + + self._super(settings); + self.addClass('menu'); + }, + + /** + * Repaints the control after a layout operation. + * + * @method repaint + */ + repaint: function() { + this.toggleClass('menu-align', true); + + this._super(); + + this.getEl().style.height = ''; + this.getEl('body').style.height = ''; + + return this; + }, + + /** + * Hides/closes the menu. + * + * @method cancel + */ + cancel: function() { + var self = this; + + self.hideAll(); + self.fire('select'); + }, + + /** + * Hide menu and all sub menus. + * + * @method hideAll + */ + hideAll: function() { + var self = this; + + this.find('menuitem').exec('hideMenu'); + + return self._super(); + }, +/* + getContainerElm: function() { + var doc = document, id = this.classPrefix + 'menucontainer'; + + var elm = doc.getElementById(id); + if (!elm) { + elm = doc.createElement('div'); + elm.id = id; + elm.setAttribute('role', 'application'); + elm.className = this.classPrefix + '-reset'; + elm.style.position = 'absolute'; + elm.style.top = elm.style.left = '0'; + elm.style.overflow = 'visible'; + doc.body.appendChild(elm); + } + + return elm; + }, +*/ + /** + * Invoked before the menu is rendered. + * + * @method preRender + */ + preRender: function() { + var self = this; + + self.items().each(function(ctrl) { + var settings = ctrl.settings; + + if (settings.icon || settings.selectable) { + self._hasIcons = true; + return false; + } + }); + + return self._super(); + } + }); + + return Menu; +}); + +// Included from: js/tinymce/classes/ui/Radio.js + +/** + * Radio.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a new radio button. + * + * @-x-less Radio.less + * @class tinymce.ui.Radio + * @extends tinymce.ui.Checkbox + */ +define("tinymce/ui/Radio", [ + "tinymce/ui/Checkbox" +], function(Checkbox) { + "use strict"; + + return Checkbox.extend({ + Defaults: { + classes: "radio", + role: "radio" + } + }); +}); + +// Included from: js/tinymce/classes/ui/ResizeHandle.js + +/** + * ResizeHandle.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Renders a resize handle that fires ResizeStart, Resize and ResizeEnd events. + * + * @-x-less ResizeHandle.less + * @class tinymce.ui.ResizeHandle + * @extends tinymce.ui.Widget + */ +define("tinymce/ui/ResizeHandle", [ + "tinymce/ui/Widget", + "tinymce/ui/DragHelper" +], function(Widget, DragHelper) { + "use strict"; + + return Widget.extend({ + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, prefix = self.classPrefix; + + self.addClass('resizehandle'); + + if (self.settings.direction == "both") { + self.addClass('resizehandle-both'); + } + + self.canFocus = false; + + return ( + '
    ' + + '' + + '
    ' + ); + }, + + /** + * Called after the control has been rendered. + * + * @method postRender + */ + postRender: function() { + var self = this; + + self._super(); + + self.resizeDragHelper = new DragHelper(this._id, { + start: function() { + self.fire('ResizeStart'); + }, + + drag: function(e) { + if (self.settings.direction != "both") { + e.deltaX = 0; + } + + self.fire('Resize', e); + }, + + stop: function() { + self.fire('ResizeEnd'); + } + }); + }, + + remove: function() { + if (this.resizeDragHelper) { + this.resizeDragHelper.destroy(); + } + + return this._super(); + } + }); +}); + +// Included from: js/tinymce/classes/ui/Spacer.js + +/** + * Spacer.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a spacer. This control is used in flex layouts for example. + * + * @-x-less Spacer.less + * @class tinymce.ui.Spacer + * @extends tinymce.ui.Widget + */ +define("tinymce/ui/Spacer", [ + "tinymce/ui/Widget" +], function(Widget) { + "use strict"; + + return Widget.extend({ + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this; + + self.addClass('spacer'); + self.canFocus = false; + + return '
    '; + } + }); +}); + +// Included from: js/tinymce/classes/ui/SplitButton.js + +/** + * SplitButton.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a split button. + * + * @-x-less SplitButton.less + * @class tinymce.ui.SplitButton + * @extends tinymce.ui.Button + */ +define("tinymce/ui/SplitButton", [ + "tinymce/ui/MenuButton", + "tinymce/ui/DomUtils" +], function(MenuButton, DomUtils) { + return MenuButton.extend({ + Defaults: { + classes: "widget btn splitbtn", + role: "button" + }, + + /** + * Repaints the control after a layout operation. + * + * @method repaint + */ + repaint: function() { + var self = this, elm = self.getEl(), rect = self.layoutRect(), mainButtonElm, menuButtonElm; + + self._super(); + + mainButtonElm = elm.firstChild; + menuButtonElm = elm.lastChild; + + DomUtils.css(mainButtonElm, { + width: rect.w - DomUtils.getSize(menuButtonElm).width, + height: rect.h - 2 + }); + + DomUtils.css(menuButtonElm, { + height: rect.h - 2 + }); + + return self; + }, + + /** + * Sets the active menu state. + * + * @private + */ + activeMenu: function(state) { + var self = this; + + DomUtils.toggleClass(self.getEl().lastChild, self.classPrefix + 'active', state); + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, id = self._id, prefix = self.classPrefix; + var icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : ''; + + return ( + '
    ' + + '' + + '' + + '
    ' + ); + }, + + /** + * Called after the control has been rendered. + * + * @method postRender + */ + postRender: function() { + var self = this, onClickHandler = self.settings.onclick; + + self.on('click', function(e) { + var node = e.target; + + if (e.control == this) { + // Find clicks that is on the main button + while (node) { + if ((e.aria && e.aria.key != 'down') || (node.nodeName == 'BUTTON' && node.className.indexOf('open') == -1)) { + e.stopImmediatePropagation(); + onClickHandler.call(this, e); + return; + } + + node = node.parentNode; + } + } + }); + + delete self.settings.onclick; + + return self._super(); + } + }); +}); + +// Included from: js/tinymce/classes/ui/StackLayout.js + +/** + * StackLayout.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This layout uses the browsers layout when the items are blocks. + * + * @-x-less StackLayout.less + * @class tinymce.ui.StackLayout + * @extends tinymce.ui.FlowLayout + */ +define("tinymce/ui/StackLayout", [ + "tinymce/ui/FlowLayout" +], function(FlowLayout) { + "use strict"; + + return FlowLayout.extend({ + Defaults: { + containerClass: 'stack-layout', + controlClass: 'stack-layout-item', + endClass : 'break' + } + }); +}); + +// Included from: js/tinymce/classes/ui/TabPanel.js + +/** + * TabPanel.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a tab panel control. + * + * @-x-less TabPanel.less + * @class tinymce.ui.TabPanel + * @extends tinymce.ui.Panel + * + * @setting {Number} activeTab Active tab index. + */ +define("tinymce/ui/TabPanel", [ + "tinymce/ui/Panel", + "tinymce/ui/DomUtils" +], function(Panel, DomUtils) { + "use strict"; + + return Panel.extend({ + lastIdx: 0, + + Defaults: { + layout: 'absolute', + defaults: { + type: 'panel' + } + }, + + /** + * Activates the specified tab by index. + * + * @method activateTab + * @param {Number} idx Index of the tab to activate. + */ + activateTab: function(idx) { + var activeTabElm; + + if (this.activeTabId) { + activeTabElm = this.getEl(this.activeTabId); + DomUtils.removeClass(activeTabElm, this.classPrefix + 'active'); + activeTabElm.setAttribute('aria-selected', "false"); + } + + this.activeTabId = 't' + idx; + + activeTabElm = this.getEl('t' + idx); + activeTabElm.setAttribute('aria-selected', "true"); + DomUtils.addClass(activeTabElm, this.classPrefix + 'active'); + + if (idx != this.lastIdx) { + this.items()[this.lastIdx].hide(); + this.lastIdx = idx; + } + + this.items()[idx].show().fire('showtab'); + this.reflow(); + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, layout = self._layout, tabsHtml = '', prefix = self.classPrefix; + + self.preRender(); + layout.preRender(self); + + self.items().each(function(ctrl, i) { + var id = self._id + '-t' + i; + + ctrl.aria('role', 'tabpanel'); + ctrl.aria('labelledby', id); + + tabsHtml += ( + '' + ); + }); + + return ( + '
    ' + + '
    ' + + tabsHtml + + '
    ' + + '
    ' + + layout.renderHtml(self) + + '
    ' + + '
    ' + ); + }, + + /** + * Called after the control has been rendered. + * + * @method postRender + */ + postRender: function() { + var self = this; + + self._super(); + + self.settings.activeTab = self.settings.activeTab || 0; + self.activateTab(self.settings.activeTab); + + this.on('click', function(e) { + var targetParent = e.target.parentNode; + + if (e.target.parentNode.id == self._id + '-head') { + var i = targetParent.childNodes.length; + + while (i--) { + if (targetParent.childNodes[i] == e.target) { + self.activateTab(i); + } + } + } + }); + }, + + /** + * Initializes the current controls layout rect. + * This will be executed by the layout managers to determine the + * default minWidth/minHeight etc. + * + * @method initLayoutRect + * @return {Object} Layout rect instance. + */ + initLayoutRect: function() { + var self = this, rect, minW, minH; + + minW = DomUtils.getSize(self.getEl('head')).width; + minW = minW < 0 ? 0 : minW; + minH = 0; + self.items().each(function(item, i) { + minW = Math.max(minW, item.layoutRect().minW); + minH = Math.max(minH, item.layoutRect().minH); + if (self.settings.activeTab != i) { + item.hide(); + } + }); + + self.items().each(function(ctrl) { + ctrl.settings.x = 0; + ctrl.settings.y = 0; + ctrl.settings.w = minW; + ctrl.settings.h = minH; + + ctrl.layoutRect({ + x: 0, + y: 0, + w: minW, + h: minH + }); + }); + + var headH = DomUtils.getSize(self.getEl('head')).height; + + self.settings.minWidth = minW; + self.settings.minHeight = minH + headH; + + rect = self._super(); + rect.deltaH += headH; + rect.innerH = rect.h - rect.deltaH; + + return rect; + } + }); +}); + +// Included from: js/tinymce/classes/ui/TextBox.js + +/** + * TextBox.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a new textbox. + * + * @-x-less TextBox.less + * @class tinymce.ui.TextBox + * @extends tinymce.ui.Widget + */ +define("tinymce/ui/TextBox", [ + "tinymce/ui/Widget", + "tinymce/ui/DomUtils" +], function(Widget, DomUtils) { + "use strict"; + + return Widget.extend({ + /** + * Constructs a instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + * @setting {Boolean} multiline True if the textbox is a multiline control. + * @setting {Number} maxLength Max length for the textbox. + * @setting {Number} size Size of the textbox in characters. + */ + init: function(settings) { + var self = this; + + self._super(settings); + + self._value = settings.value || ''; + self.addClass('textbox'); + + if (settings.multiline) { + self.addClass('multiline'); + } else { + // TODO: Rework this + self.on('keydown', function(e) { + if (e.keyCode == 13) { + self.parents().reverse().each(function(ctrl) { + e.preventDefault(); + + if (ctrl.hasEventListeners('submit') && ctrl.toJSON) { + ctrl.fire('submit', {data: ctrl.toJSON()}); + return false; + } + }); + } + }); + } + }, + + /** + * Getter/setter function for the disabled state. + * + * @method value + * @param {Boolean} [state] State to be set. + * @return {Boolean|tinymce.ui.ComboBox} True/false or self if it's a set operation. + */ + disabled: function(state) { + var self = this; + + if (self._rendered && typeof(state) != 'undefined') { + self.getEl().disabled = state; + } + + return self._super(state); + }, + + /** + * Getter/setter function for the control value. + * + * @method value + * @param {String} [value] Value to be set. + * @return {String|tinymce.ui.ComboBox} Value or self if it's a set operation. + */ + value: function(value) { + var self = this; + + if (typeof(value) != "undefined") { + self._value = value; + + if (self._rendered) { + self.getEl().value = value; + } + + return self; + } + + if (self._rendered) { + return self.getEl().value; + } + + return self._value; + }, + + /** + * Repaints the control after a layout operation. + * + * @method repaint + */ + repaint: function() { + var self = this, style, rect, borderBox, borderW = 0, borderH = 0, lastRepaintRect; + + style = self.getEl().style; + rect = self._layoutRect; + lastRepaintRect = self._lastRepaintRect || {}; + + // Detect old IE 7+8 add lineHeight to align caret vertically in the middle + var doc = document; + if (!self.settings.multiline && doc.all && (!doc.documentMode || doc.documentMode <= 8)) { + style.lineHeight = (rect.h - borderH) + 'px'; + } + + borderBox = self._borderBox; + borderW = borderBox.left + borderBox.right + 8; + borderH = borderBox.top + borderBox.bottom + (self.settings.multiline ? 8 : 0); + + if (rect.x !== lastRepaintRect.x) { + style.left = rect.x + 'px'; + lastRepaintRect.x = rect.x; + } + + if (rect.y !== lastRepaintRect.y) { + style.top = rect.y + 'px'; + lastRepaintRect.y = rect.y; + } + + if (rect.w !== lastRepaintRect.w) { + style.width = (rect.w - borderW) + 'px'; + lastRepaintRect.w = rect.w; + } + + if (rect.h !== lastRepaintRect.h) { + style.height = (rect.h - borderH) + 'px'; + lastRepaintRect.h = rect.h; + } + + self._lastRepaintRect = lastRepaintRect; + self.fire('repaint', {}, false); + + return self; + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, id = self._id, settings = self.settings, value = self.encode(self._value, false), extraAttrs = ''; + + if ("spellcheck" in settings) { + extraAttrs += ' spellcheck="' + settings.spellcheck + '"'; + } + + if (settings.maxLength) { + extraAttrs += ' maxlength="' + settings.maxLength + '"'; + } + + if (settings.size) { + extraAttrs += ' size="' + settings.size + '"'; + } + + if (settings.subtype) { + extraAttrs += ' type="' + settings.subtype + '"'; + } + + if (self.disabled()) { + extraAttrs += ' disabled="disabled"'; + } + + if (settings.multiline) { + return ( + '' + ); + } + + return ''; + }, + + /** + * Called after the control has been rendered. + * + * @method postRender + */ + postRender: function() { + var self = this; + + DomUtils.on(self.getEl(), 'change', function(e) { + self.fire('change', e); + }); + + return self._super(); + }, + + remove: function() { + DomUtils.off(this.getEl()); + this._super(); + } + }); +}); + +// Included from: js/tinymce/classes/ui/Throbber.js + +/** + * Throbber.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class enables you to display a Throbber for any element. + * + * @-x-less Throbber.less + * @class tinymce.ui.Throbber + */ +define("tinymce/ui/Throbber", [ + "tinymce/ui/DomUtils" +], function(DomUtils) { + "use strict"; + + /** + * Constructs a new throbber. + * + * @constructor + * @param {Element} elm DOM Html element to display throbber in. + */ + return function(elm) { + var self = this, state; + + /** + * Shows the throbber. + * + * @method show + * @param {Number} [time] Time to wait before showing. + * @return {tinymce.ui.Throbber} Current throbber instance. + */ + self.show = function(time) { + self.hide(); + + state = true; + + window.setTimeout(function() { + if (state) { + elm.appendChild(DomUtils.createFragment('
    ')); + } + }, time || 0); + + return self; + }; + + /** + * Hides the throbber. + * + * @method hide + * @return {tinymce.ui.Throbber} Current throbber instance. + */ + self.hide = function() { + var child = elm.lastChild; + + if (child && child.className.indexOf('throbber') != -1) { + child.parentNode.removeChild(child); + } + + state = false; + + return self; + }; + }; +}); + +expose(["tinymce/dom/Sizzle","tinymce/html/Styles","tinymce/dom/EventUtils","tinymce/dom/TreeWalker","tinymce/util/Tools","tinymce/dom/Range","tinymce/html/Entities","tinymce/Env","tinymce/dom/StyleSheetLoader","tinymce/dom/DOMUtils","tinymce/dom/ScriptLoader","tinymce/AddOnManager","tinymce/html/Node","tinymce/html/Schema","tinymce/html/SaxParser","tinymce/html/DomParser","tinymce/html/Writer","tinymce/html/Serializer","tinymce/dom/Serializer","tinymce/dom/TridentSelection","tinymce/util/VK","tinymce/dom/ControlSelection","tinymce/dom/RangeUtils","tinymce/dom/Selection","tinymce/Formatter","tinymce/UndoManager","tinymce/EnterKey","tinymce/ForceBlocks","tinymce/EditorCommands","tinymce/util/URI","tinymce/util/Class","tinymce/ui/Selector","tinymce/ui/Collection","tinymce/ui/DomUtils","tinymce/ui/Control","tinymce/ui/Factory","tinymce/ui/KeyboardNavigation","tinymce/ui/Container","tinymce/ui/DragHelper","tinymce/ui/Scrollable","tinymce/ui/Panel","tinymce/ui/Movable","tinymce/ui/Resizable","tinymce/ui/FloatPanel","tinymce/ui/Window","tinymce/ui/MessageBox","tinymce/WindowManager","tinymce/util/Quirks","tinymce/util/Observable","tinymce/Shortcuts","tinymce/Editor","tinymce/util/I18n","tinymce/FocusManager","tinymce/EditorManager","tinymce/LegacyInput","tinymce/util/XHR","tinymce/util/JSON","tinymce/util/JSONRequest","tinymce/util/JSONP","tinymce/util/LocalStorage","tinymce/Compat","tinymce/ui/Layout","tinymce/ui/AbsoluteLayout","tinymce/ui/Tooltip","tinymce/ui/Widget","tinymce/ui/Button","tinymce/ui/ButtonGroup","tinymce/ui/Checkbox","tinymce/ui/PanelButton","tinymce/ui/ColorButton","tinymce/ui/ComboBox","tinymce/ui/Path","tinymce/ui/ElementPath","tinymce/ui/FormItem","tinymce/ui/Form","tinymce/ui/FieldSet","tinymce/ui/FilePicker","tinymce/ui/FitLayout","tinymce/ui/FlexLayout","tinymce/ui/FlowLayout","tinymce/ui/FormatControls","tinymce/ui/GridLayout","tinymce/ui/Iframe","tinymce/ui/Label","tinymce/ui/Toolbar","tinymce/ui/MenuBar","tinymce/ui/MenuButton","tinymce/ui/ListBox","tinymce/ui/MenuItem","tinymce/ui/Menu","tinymce/ui/Radio","tinymce/ui/ResizeHandle","tinymce/ui/Spacer","tinymce/ui/SplitButton","tinymce/ui/StackLayout","tinymce/ui/TabPanel","tinymce/ui/TextBox","tinymce/ui/Throbber"]); +})(this); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/tinymce.jquery.min.js b/common/static/js/vendor/tinymce/js/tinymce/tinymce.jquery.min.js new file mode 100755 index 0000000000..c2e3ce8377 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/tinymce.jquery.min.js @@ -0,0 +1,10 @@ +// 4.0.20 (2014-03-18) +!function(e,t){"use strict";function n(e,t){for(var n,r=[],i=0;i1?e:"0"+e}return"#"+i(t)+i(n)+i(r)}var r=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,i=/(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,o=/\s*([^:]+):\s*([^;]+);?/g,a=/\s+$/,s,l,c={},d,u="\ufeff";for(e=e||{},d=("\\\" \\' \\; \\: ; : "+u).split(" "),l=0;l-1&&n||(h[e+t]=-1==l?s[0]:s.join(" "),delete h[e+"-top"+t],delete h[e+"-right"+t],delete h[e+"-bottom"+t],delete h[e+"-left"+t])}}function d(e){var t=h[e],n;if(t){for(t=t.split(" "),n=t.length;n--;)if(t[n]!==t[0])return!1;return h[e]=t[0],!0}}function u(e,t,n,r){d(t)&&d(n)&&d(r)&&(h[e]=h[t]+" "+h[n]+" "+h[r],delete h[t],delete h[n],delete h[r])}function f(e){return b=!0,c[e]}function p(e,t){return b&&(e=e.replace(/\uFEFF[0-9]/g,function(e){return c[e]})),t||(e=e.replace(/\\([\'\";:])/g,"$1")),e}function m(t,n,r,i,o,a){return(o=o||a)?(o=p(o),"'"+o.replace(/\'/g,"\\'")+"'"):(n=p(n||r||i),!e.allow_script_urls&&/(java|vb)script:/i.test(n.replace(/[\s\r\n]+/,""))?"":(C&&(n=C.call(x,n,"style")),"url('"+n.replace(/\'/g,"\\'")+"')"))}var h={},g,v,y,b,C=e.url_converter,x=e.url_converter_scope||this;if(t){for(t=t.replace(/[\u0000-\u001F]/g,""),t=t.replace(/\\[\"\';:\uFEFF]/g,f).replace(/\"[^\"]+\"|\'[^\']+\'/g,function(e){return e.replace(/[;:]/g,f)});g=o.exec(t);){if(v=g[1].replace(a,"").toLowerCase(),y=g[2].replace(a,""),v&&y.length>0){if(!e.allow_script_urls&&("behavior"==v||/expression\s*\(/.test(y)))continue;"font-weight"===v&&"700"===y?y="bold":("color"===v||"background-color"===v)&&(y=y.toLowerCase()),y=y.replace(r,n),y=y.replace(i,m),h[v]=b?p(y,!0):y}o.lastIndex=g.index+g[0].length}s("border","",!0),s("border","-width"),s("border","-color"),s("border","-style"),s("padding",""),s("margin",""),u("border","border-width","border-style","border-color"),"medium none"===h.border&&delete h.border,"none"===h["border-image"]&&delete h["border-image"]}return h},serialize:function(e,n){function r(n){var r,o,a,l;if(r=t.styles[n])for(o=0,a=r.length;a>o;o++)n=r[o],l=e[n],l!==s&&l.length>0&&(i+=(i.length>0?" ":"")+n+": "+l+";")}var i="",o,a;if(n&&t&&t.styles)r("*"),r(n);else for(o in e)a=e[o],a!==s&&a.length>0&&(i+=(i.length>0?" ":"")+o+": "+a+";");return i}}}}),r(d,[],function(){function e(e,t,n,r){e.addEventListener?e.addEventListener(t,n,r||!1):e.attachEvent&&e.attachEvent("on"+t,n)}function t(e,t,n,r){e.removeEventListener?e.removeEventListener(t,n,r||!1):e.detachEvent&&e.detachEvent("on"+t,n)}function n(e,t){function n(){return!1}function r(){return!0}var i,o=t||{},l;for(i in e)s[i]||(o[i]=e[i]);if(o.target||(o.target=o.srcElement||document),e&&a.test(e.type)&&e.pageX===l&&e.clientX!==l){var c=o.target.ownerDocument||document,d=c.documentElement,u=c.body;o.pageX=e.clientX+(d&&d.scrollLeft||u&&u.scrollLeft||0)-(d&&d.clientLeft||u&&u.clientLeft||0),o.pageY=e.clientY+(d&&d.scrollTop||u&&u.scrollTop||0)-(d&&d.clientTop||u&&u.clientTop||0)}return o.preventDefault=function(){o.isDefaultPrevented=r,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},o.stopPropagation=function(){o.isPropagationStopped=r,e&&(e.stopPropagation?e.stopPropagation():e.cancelBubble=!0)},o.stopImmediatePropagation=function(){o.isImmediatePropagationStopped=r,o.stopPropagation()},o.isDefaultPrevented||(o.isDefaultPrevented=n,o.isPropagationStopped=n,o.isImmediatePropagationStopped=n),o}function r(n,r,i){function o(){i.domLoaded||(i.domLoaded=!0,r(c))}function a(){("complete"===l.readyState||"interactive"===l.readyState&&l.body)&&(t(l,"readystatechange",a),o())}function s(){try{l.documentElement.doScroll("left")}catch(e){return void setTimeout(s,0)}o()}var l=n.document,c={type:"ready"};return i.domLoaded?void r(c):(l.addEventListener?"complete"===l.readyState?o():e(n,"DOMContentLoaded",o):(e(l,"readystatechange",a),l.documentElement.doScroll&&n.self===n.top&&s()),void e(n,"load",o))}function i(){function i(e,t){var n,r,i,o,a=s[t];if(n=a&&a[e.type])for(r=0,i=n.length;i>r;r++)if(o=n[r],o&&o.func.call(o.scope,e)===!1&&e.preventDefault(),e.isImmediatePropagationStopped())return}var a=this,s={},l,c,d,u,f;c=o+(+new Date).toString(32),u="onmouseenter"in document.documentElement,d="onfocusin"in document.documentElement,f={mouseenter:"mouseover",mouseleave:"mouseout"},l=1,a.domLoaded=!1,a.events=s,a.bind=function(t,o,p,m){function h(e){i(n(e||_.event),g)}var g,v,y,b,C,x,w,_=window;if(t&&3!==t.nodeType&&8!==t.nodeType){for(t[c]?g=t[c]:(g=l++,t[c]=g,s[g]={}),m=m||t,o=o.split(" "),y=o.length;y--;)b=o[y],x=h,C=w=!1,"DOMContentLoaded"===b&&(b="ready"),a.domLoaded&&"ready"===b&&"complete"==t.readyState?p.call(m,n({type:b})):(u||(C=f[b],C&&(x=function(e){var t,r;if(t=e.currentTarget,r=e.relatedTarget,r&&t.contains)r=t.contains(r);else for(;r&&r!==t;)r=r.parentNode;r||(e=n(e||_.event),e.type="mouseout"===e.type?"mouseleave":"mouseenter",e.target=t,i(e,g))})),d||"focusin"!==b&&"focusout"!==b||(w=!0,C="focusin"===b?"focus":"blur",x=function(e){e=n(e||_.event),e.type="focus"===e.type?"focusin":"focusout",i(e,g)}),v=s[g][b],v?"ready"===b&&a.domLoaded?p({type:b}):v.push({func:p,scope:m}):(s[g][b]=v=[{func:p,scope:m}],v.fakeName=C,v.capture=w,v.nativeHandler=x,"ready"===b?r(t,x,a):e(t,C||b,x,w)));return t=v=0,p}},a.unbind=function(e,n,r){var i,o,l,d,u,f;if(!e||3===e.nodeType||8===e.nodeType)return a;if(i=e[c]){if(f=s[i],n){for(n=n.split(" "),l=n.length;l--;)if(u=n[l],o=f[u]){if(r)for(d=o.length;d--;)if(o[d].func===r){var p=o.nativeHandler,m=o.fakeName,h=o.capture;o=o.slice(0,d).concat(o.slice(d+1)),o.nativeHandler=p,o.fakeName=m,o.capture=h,f[u]=o}r&&0!==o.length||(delete f[u],t(e,o.fakeName||u,o.nativeHandler,o.capture))}}else{for(u in f)o=f[u],t(e,o.fakeName||u,o.nativeHandler,o.capture);f={}}for(u in f)return a;delete s[i];try{delete e[c]}catch(g){e[c]=null}}return a},a.fire=function(e,t,r){var o;if(!e||3===e.nodeType||8===e.nodeType)return a;r=n(null,r),r.type=t,r.target=e;do o=e[c],o&&i(r,o),e=e.parentNode||e.ownerDocument||e.defaultView||e.parentWindow;while(e&&!r.isPropagationStopped());return a},a.clean=function(e){var t,n,r=a.unbind;if(!e||3===e.nodeType||8===e.nodeType)return a;if(e[c]&&r(e),e.getElementsByTagName||(e=e.document),e&&e.getElementsByTagName)for(r(e),n=e.getElementsByTagName("*"),t=n.length;t--;)e=n[t],e[c]&&r(e);return a},a.destroy=function(){s={}},a.cancel=function(e){return e&&(e.preventDefault(),e.stopImmediatePropagation()),!1}}var o="mce-data-",a=/^(?:mouse|contextmenu)|click/,s={keyLocation:1,layerX:1,layerY:1,returnValue:1};return i.Event=new i,i.Event.bind(window,"ready",function(){}),i}),r(u,[],function(){return function(e,t){function n(e,n,r,i){var o,a;if(e){if(!i&&e[n])return e[n];if(e!=t){if(o=e[r])return o;for(a=e.parentNode;a&&a!=t;a=a.parentNode)if(o=a[r])return o}}}var r=e;this.current=function(){return r},this.next=function(e){return r=n(r,"firstChild","nextSibling",e)},this.prev=function(e){return r=n(r,"lastChild","previousSibling",e)}}}),r(f,[],function(){function e(e){return null===e||e===t?"":(""+e).replace(h,"")}function n(e,n){return n?"array"==n&&g(e)?!0:typeof e==n:e!==t}function r(e){var t=[],n,r;for(n=0,r=e.length;r>n;n++)t[n]=e[n];return t}function i(e,t,n){var r;for(e=e||[],t=t||",","string"==typeof e&&(e=e.split(t)),n=n||{},r=e.length;r--;)n[e[r]]={};return n}function o(e,n,r){var i,o;if(!e)return 0;if(r=r||e,e.length!==t){for(i=0,o=e.length;o>i;i++)if(n.call(r,e[i],i,e)===!1)return 0}else for(i in e)if(e.hasOwnProperty(i)&&n.call(r,e[i],i,e)===!1)return 0;return 1}function a(e,t){var n=[];return o(e,function(e){n.push(t(e))}),n}function s(e,t){var n=[];return o(e,function(e){(!t||t(e))&&n.push(e)}),n}function l(e,t,n){var r=this,i,o,a,s,l,c=0;if(e=/^((static) )?([\w.]+)(:([\w.]+))?/.exec(e),a=e[3].match(/(^|\.)(\w+)$/i)[2],o=r.createNS(e[3].replace(/\.\w+$/,""),n),!o[a]){if("static"==e[2])return o[a]=t,void(this.onCreate&&this.onCreate(e[2],e[3],o[a]));t[a]||(t[a]=function(){},c=1),o[a]=t[a],r.extend(o[a].prototype,t),e[5]&&(i=r.resolve(e[5]).prototype,s=e[5].match(/\.(\w+)$/i)[1],l=o[a],o[a]=c?function(){return i[s].apply(this,arguments)}:function(){return this.parent=i[s],l.apply(this,arguments)},o[a].prototype[a]=o[a],r.each(i,function(e,t){o[a].prototype[t]=i[t]}),r.each(t,function(e,t){i[t]?o[a].prototype[t]=function(){return this.parent=i[t],e.apply(this,arguments)}:t!=a&&(o[a].prototype[t]=e)})),r.each(t["static"],function(e,t){o[a][t]=e})}}function c(e,t){var n,r;if(e)for(n=0,r=e.length;r>n;n++)if(e[n]===t)return n;return-1}function d(e,n){var r,i,o,a=arguments,s;for(r=1,i=a.length;i>r;r++){n=a[r];for(o in n)n.hasOwnProperty(o)&&(s=n[o],s!==t&&(e[o]=s))}return e}function u(e,t,n,r){r=r||this,e&&(n&&(e=e[n]),o(e,function(e,i){return t.call(r,e,i,n)===!1?!1:void u(e,t,n,r)}))}function f(e,t){var n,r;for(t=t||window,e=e.split("."),n=0;nn&&(t=t[e[n]],t);n++);return t}function m(t,r){return!t||n(t,"array")?t:a(t.split(r||","),e)}var h=/^\s*|\s*$/g,g=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)};return{trim:e,isArray:g,is:n,toArray:r,makeMap:i,each:o,map:a,grep:s,inArray:c,extend:d,create:l,walk:u,createNS:f,resolve:p,explode:m}}),r(p,[f],function(e){function t(n){function r(){return H.createDocumentFragment()}function i(e,t){_(F,e,t)}function o(e,t){_(z,e,t)}function a(e){i(e.parentNode,$(e))}function s(e){i(e.parentNode,$(e)+1)}function l(e){o(e.parentNode,$(e))}function c(e){o(e.parentNode,$(e)+1)}function d(e){e?(M[U]=M[V],M[q]=M[W]):(M[V]=M[U],M[W]=M[q]),M.collapsed=F}function u(e){a(e),c(e)}function f(e){i(e,0),o(e,1===e.nodeType?e.childNodes.length:e.nodeValue.length)}function p(e,t){var n=M[V],r=M[W],i=M[U],o=M[q],a=t.startContainer,s=t.startOffset,l=t.endContainer,c=t.endOffset;return 0===e?w(n,r,a,s):1===e?w(i,o,a,s):2===e?w(i,o,l,c):3===e?w(n,r,l,c):void 0}function m(){N(I)}function h(){return N(P)}function g(){return N(O)}function v(e){var t=this[V],r=this[W],i,o;3!==t.nodeType&&4!==t.nodeType||!t.nodeValue?(t.childNodes.length>0&&(o=t.childNodes[r]),o?t.insertBefore(e,o):3==t.nodeType?n.insertAfter(e,t):t.appendChild(e)):r?r>=t.nodeValue.length?n.insertAfter(e,t):(i=t.splitText(r),t.parentNode.insertBefore(e,i)):t.parentNode.insertBefore(e,t)}function y(e){var t=M.extractContents();M.insertNode(e),e.appendChild(t),M.selectNode(e)}function b(){return j(new t(n),{startContainer:M[V],startOffset:M[W],endContainer:M[U],endOffset:M[q],collapsed:M.collapsed,commonAncestorContainer:M.commonAncestorContainer})}function C(e,t){var n;if(3==e.nodeType)return e;if(0>t)return e;for(n=e.firstChild;n&&t>0;)--t,n=n.nextSibling;return n?n:e}function x(){return M[V]==M[U]&&M[W]==M[q]}function w(e,t,r,i){var o,a,s,l,c,d;if(e==r)return t==i?0:i>t?-1:1;for(o=r;o&&o.parentNode!=e;)o=o.parentNode;if(o){for(a=0,s=e.firstChild;s!=o&&t>a;)a++,s=s.nextSibling;return a>=t?-1:1}for(o=e;o&&o.parentNode!=r;)o=o.parentNode;if(o){for(a=0,s=r.firstChild;s!=o&&i>a;)a++,s=s.nextSibling;return i>a?-1:1}for(l=n.findCommonAncestor(e,r),c=e;c&&c.parentNode!=l;)c=c.parentNode;for(c||(c=l),d=r;d&&d.parentNode!=l;)d=d.parentNode;if(d||(d=l),c==d)return 0;for(s=l.firstChild;s;){if(s==c)return-1;if(s==d)return 1;s=s.nextSibling}}function _(e,t,r){var i,o;for(e?(M[V]=t,M[W]=r):(M[U]=t,M[q]=r),i=M[U];i.parentNode;)i=i.parentNode;for(o=M[V];o.parentNode;)o=o.parentNode;o==i?w(M[V],M[W],M[U],M[q])>0&&M.collapse(e):M.collapse(e),M.collapsed=x(),M.commonAncestorContainer=n.findCommonAncestor(M[V],M[U])}function N(e){var t,n=0,r=0,i,o,a,s,l,c;if(M[V]==M[U])return E(e);for(t=M[U],i=t.parentNode;i;t=i,i=i.parentNode){if(i==M[V])return k(t,e);++n}for(t=M[V],i=t.parentNode;i;t=i,i=i.parentNode){if(i==M[U])return S(t,e);++r}for(o=r-n,a=M[V];o>0;)a=a.parentNode,o--;for(s=M[U];0>o;)s=s.parentNode,o++;for(l=a.parentNode,c=s.parentNode;l!=c;l=l.parentNode,c=c.parentNode)a=l,s=c;return T(a,s,e)}function E(e){var t,n,i,o,a,s,l,c,d;if(e!=I&&(t=r()),M[W]==M[q])return t;if(3==M[V].nodeType){if(n=M[V].nodeValue,i=n.substring(M[W],M[q]),e!=O&&(o=M[V],c=M[W],d=M[q]-M[W],0===c&&d>=o.nodeValue.length-1?o.parentNode.removeChild(o):o.deleteData(c,d),M.collapse(F)),e==I)return;return i.length>0&&t.appendChild(H.createTextNode(i)),t}for(o=C(M[V],M[W]),a=M[q]-M[W];o&&a>0;)s=o.nextSibling,l=L(o,e),t&&t.appendChild(l),--a,o=s;return e!=O&&M.collapse(F),t}function k(e,t){var n,i,o,a,s,l;if(t!=I&&(n=r()),i=R(e,t),n&&n.appendChild(i),o=$(e),a=o-M[W],0>=a)return t!=O&&(M.setEndBefore(e),M.collapse(z)),n;for(i=e.previousSibling;a>0;)s=i.previousSibling,l=L(i,t),n&&n.insertBefore(l,n.firstChild),--a,i=s;return t!=O&&(M.setEndBefore(e),M.collapse(z)),n}function S(e,t){var n,i,o,a,s,l;for(t!=I&&(n=r()),o=A(e,t),n&&n.appendChild(o),i=$(e),++i,a=M[q]-i,o=e.nextSibling;o&&a>0;)s=o.nextSibling,l=L(o,t),n&&n.appendChild(l),--a,o=s;return t!=O&&(M.setStartAfter(e),M.collapse(F)),n}function T(e,t,n){var i,o,a,s,l,c,d;for(n!=I&&(o=r()),i=A(e,n),o&&o.appendChild(i),a=$(e),s=$(t),++a,l=s-a,c=e.nextSibling;l>0;)d=c.nextSibling,i=L(c,n),o&&o.appendChild(i),c=d,--l;return i=R(t,n),o&&o.appendChild(i),n!=O&&(M.setStartAfter(e),M.collapse(F)),o}function R(e,t){var n=C(M[U],M[q]-1),r,i,o,a,s,l=n!=M[U];if(n==e)return B(n,l,z,t);for(r=n.parentNode,i=B(r,z,z,t);r;){for(;n;)o=n.previousSibling,a=B(n,l,z,t),t!=I&&i.insertBefore(a,i.firstChild),l=F,n=o;if(r==e)return i;n=r.previousSibling,r=r.parentNode,s=B(r,z,z,t),t!=I&&s.appendChild(i),i=s}}function A(e,t){var n=C(M[V],M[W]),r=n!=M[V],i,o,a,s,l;if(n==e)return B(n,r,F,t);for(i=n.parentNode,o=B(i,z,F,t);i;){for(;n;)a=n.nextSibling,s=B(n,r,F,t),t!=I&&o.appendChild(s),r=F,n=a;if(i==e)return o;n=i.nextSibling,i=i.parentNode,l=B(i,z,F,t),t!=I&&l.appendChild(o),o=l}}function B(e,t,r,i){var o,a,s,l,c;if(t)return L(e,i);if(3==e.nodeType){if(o=e.nodeValue,r?(l=M[W],a=o.substring(l),s=o.substring(0,l)):(l=M[q],a=o.substring(0,l),s=o.substring(l)),i!=O&&(e.nodeValue=s),i==I)return;return c=n.clone(e,z),c.nodeValue=a,c}if(i!=I)return n.clone(e,z)}function L(e,t){return t!=I?t==O?n.clone(e,F):e:void e.parentNode.removeChild(e)}function D(){return n.create("body",null,g()).outerText}var M=this,H=n.doc,P=0,O=1,I=2,F=!0,z=!1,W="startOffset",V="startContainer",U="endContainer",q="endOffset",j=e.extend,$=n.nodeIndex;return j(M,{startContainer:H,startOffset:0,endContainer:H,endOffset:0,collapsed:F,commonAncestorContainer:H,START_TO_START:0,START_TO_END:1,END_TO_END:2,END_TO_START:3,setStart:i,setEnd:o,setStartBefore:a,setStartAfter:s,setEndBefore:l,setEndAfter:c,collapse:d,selectNode:u,selectNodeContents:f,compareBoundaryPoints:p,deleteContents:m,extractContents:h,cloneContents:g,insertNode:v,surroundContents:y,cloneRange:b,toStringIE:D}),M}return t.prototype.toString=function(){return this.toStringIE()},t}),r(m,[f],function(e){function t(e){var t;return t=document.createElement("div"),t.innerHTML=e,t.textContent||t.innerText||e}function n(e,t){var n,r,i,a={};if(e){for(e=e.split(","),t=t||10,n=0;n\"\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,l=/[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,c=/[<>&\"\']/g,d=/&(#x|#)?([\w]+);/g,u={128:"\u20ac",130:"\u201a",131:"\u0192",132:"\u201e",133:"\u2026",134:"\u2020",135:"\u2021",136:"\u02c6",137:"\u2030",138:"\u0160",139:"\u2039",140:"\u0152",142:"\u017d",145:"\u2018",146:"\u2019",147:"\u201c",148:"\u201d",149:"\u2022",150:"\u2013",151:"\u2014",152:"\u02dc",153:"\u2122",154:"\u0161",155:"\u203a",156:"\u0153",158:"\u017e",159:"\u0178"};o={'"':""","'":"'","<":"<",">":">","&":"&"},a={"<":"<",">":">","&":"&",""":'"',"'":"'"},i=n("50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,t9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro",32);var f={encodeRaw:function(e,t){return e.replace(t?s:l,function(e){return o[e]||e})},encodeAllRaw:function(e){return(""+e).replace(c,function(e){return o[e]||e})},encodeNumeric:function(e,t){return e.replace(t?s:l,function(e){return e.length>1?"&#"+(1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320)+65536)+";":o[e]||"&#"+e.charCodeAt(0)+";"})},encodeNamed:function(e,t,n){return n=n||i,e.replace(t?s:l,function(e){return o[e]||n[e]||e})},getEncodeFunc:function(e,t){function a(e,n){return e.replace(n?s:l,function(e){return o[e]||t[e]||"&#"+e.charCodeAt(0)+";"||e})}function c(e,n){return f.encodeNamed(e,n,t)}return t=n(t)||i,e=r(e.replace(/\+/g,",")),e.named&&e.numeric?a:e.named?t?c:f.encodeNamed:e.numeric?f.encodeNumeric:f.encodeRaw},decode:function(e){return e.replace(d,function(e,n,r){return n?(r=parseInt(r,2===n.length?16:10),r>65535?(r-=65536,String.fromCharCode(55296+(r>>10),56320+(1023&r))):u[r]||String.fromCharCode(r)):a[e]||i[e]||t(e)})}};return f}),r(h,[],function(){var e=navigator,t=e.userAgent,n,r,i,o,a,s,l;n=window.opera&&window.opera.buildNumber,r=/WebKit/.test(t),i=!r&&!n&&/MSIE/gi.test(t)&&/Explorer/gi.test(e.appName),i=i&&/MSIE (\w+)\./.exec(t)[1],o=-1==t.indexOf("Trident/")||-1==t.indexOf("rv:")&&-1==e.appName.indexOf("Netscape")?!1:11,i=i||o,a=!r&&!o&&/Gecko/.test(t),s=-1!=t.indexOf("Mac"),l=/(iPad|iPhone)/.test(t);var c=!l||t.match(/AppleWebKit\/(\d*)/)[1]>=534;return{opera:n,webkit:r,ie:i,gecko:a,mac:s,iOS:l,contentEditable:c,transparentSrc:"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",caretAfter:8!=i,range:window.getSelection&&"Range"in window,documentMode:i?document.documentMode||7:10}}),r(g,[],function(){return function(e,t){function n(t){e.getElementsByTagName("head")[0].appendChild(t)}function r(t,r,s){function l(){for(var e=v.passed,t=e.length;t--;)e[t]();v.status=2,v.passed=[],v.failed=[]}function c(){for(var e=v.failed,t=e.length;t--;)e[t]();v.status=3,v.passed=[],v.failed=[]}function d(){var e=navigator.userAgent.match(/WebKit\/(\d*)/);return!!(e&&e[1]<536)}function u(e,t){e()||((new Date).getTime()-g0)return h=e.createElement("style"),h.textContent='@import "'+t+'"',p(),void n(h);f()}n(m),m.href=t}}var i=0,o={},a;t=t||{},a=t.maxLoadTime||5e3,this.load=r}}),r(v,[l,c,d,u,p,m,h,f,g],function(e,n,r,i,o,a,s,l,c){function d(e,t){var i=this,o;i.doc=e,i.win=window,i.files={},i.counter=0,i.stdMode=!v||e.documentMode>=8,i.boxModel=!v||"CSS1Compat"==e.compatMode||i.stdMode,i.hasOuterHTML="outerHTML"in e.createElement("a"),i.styleSheetLoader=new c(e),this.boundEvents=[],i.settings=t=h({keep_values:!1,hex_colors:1},t),i.schema=t.schema,i.styles=new n({url_converter:t.url_converter,url_converter_scope:t.url_converter_scope},t.schema),i.fixDoc(e),i.events=t.ownEvents?new r(t.proxy):r.Event,o=t.schema?t.schema.getBlockElements():{},i.isBlock=function(e){if(!e)return!1;var t=e.nodeType;return t?!(1!==t||!o[e.nodeName]):!!o[e]}}var u=l.each,f=l.is,p=l.grep,m=l.trim,h=l.extend,g=s.webkit,v=s.ie,y=/^([a-z0-9],?)+$/i,b=/^[ \t\r\n]*$/,C=l.makeMap("fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom"," ");return d.prototype={root:null,props:{"for":"htmlFor","class":"className",className:"className",checked:"checked",disabled:"disabled",maxlength:"maxLength",readonly:"readOnly",selected:"selected",value:"value",id:"id",name:"name",type:"type"},fixDoc:function(e){var t=this.settings,n;if(v&&t.schema){"abbr article aside audio canvas details figcaption figure footer header hgroup mark menu meter nav output progress section summary time video".replace(/\w+/g,function(t){e.createElement(t)});for(n in t.schema.getCustomElements())e.createElement(n)}},clone:function(e,t){var n=this,r,i;return!v||1!==e.nodeType||t?e.cloneNode(t):(i=n.doc,t?r.firstChild:(r=i.createElement(e.nodeName),u(n.getAttribs(e),function(t){n.setAttrib(r,t.nodeName,n.getAttrib(e,t.nodeName))}),r))},getRoot:function(){var e=this;return e.get(e.settings.root_element)||e.doc.body},getViewPort:function(e){var t,n;return e=e?e:this.win,t=e.document,n=this.boxModel?t.documentElement:t.body,{x:e.pageXOffset||n.scrollLeft,y:e.pageYOffset||n.scrollTop,w:e.innerWidth||n.clientWidth,h:e.innerHeight||n.clientHeight}},getRect:function(e){var t=this,n,r;return e=t.get(e),n=t.getPos(e),r=t.getSize(e),{x:n.x,y:n.y,w:r.w,h:r.h}},getSize:function(e){var t=this,n,r;return e=t.get(e),n=t.getStyle(e,"width"),r=t.getStyle(e,"height"),-1===n.indexOf("px")&&(n=0),-1===r.indexOf("px")&&(r=0),{w:parseInt(n,10)||e.offsetWidth||e.clientWidth,h:parseInt(r,10)||e.offsetHeight||e.clientHeight}},getParent:function(e,t,n){return this.getParents(e,t,n,!1)},getParents:function(e,n,r,i){var o=this,a,s=[];for(e=o.get(e),i=i===t,r=r||("BODY"!=o.getRoot().nodeName?o.getRoot().parentNode:null),f(n,"string")&&(a=n,n="*"===n?function(e){return 1==e.nodeType}:function(e){return o.is(e,a)});e&&e!=r&&e.nodeType&&9!==e.nodeType;){if(!n||n(e)){if(!i)return e;s.push(e)}e=e.parentNode}return i?s:null},get:function(e){var t;return e&&this.doc&&"string"==typeof e&&(t=e,e=this.doc.getElementById(e),e&&e.id!==t)?this.doc.getElementsByName(t)[1]:e},getNext:function(e,t){return this._findSib(e,t,"nextSibling")},getPrev:function(e,t){return this._findSib(e,t,"previousSibling")},select:function(t,n){var r=this;return e(t,r.get(n)||r.get(r.settings.root_element)||r.doc,[])},is:function(n,r){var i;if(n.length===t){if("*"===r)return 1==n.nodeType;if(y.test(r)){for(r=r.toLowerCase().split(/,/),n=n.nodeName.toLowerCase(),i=r.length-1;i>=0;i--)if(r[i]==n)return!0;return!1}}if(n.nodeType&&1!=n.nodeType)return!1;var o=n.nodeType?[n]:n;return e(r,o[0].ownerDocument||o[0],null,o).length>0},add:function(e,t,n,r,i){var o=this;return this.run(e,function(e){var a;return a=f(t,"string")?o.doc.createElement(t):t,o.setAttribs(a,n),r&&(r.nodeType?a.appendChild(r):o.setHTML(a,r)),i?a:e.appendChild(a)})},create:function(e,t,n){return this.add(this.doc.createElement(e),e,t,n,1)},createHTML:function(e,t,n){var r="",i;r+="<"+e;for(i in t)t.hasOwnProperty(i)&&null!==t[i]&&(r+=" "+i+'="'+this.encode(t[i])+'"');return"undefined"!=typeof n?r+">"+n+"":r+" />"},createFragment:function(e){var t,n,r=this.doc,i;for(i=r.createElement("div"),t=r.createDocumentFragment(),e&&(i.innerHTML=e);n=i.firstChild;)t.appendChild(n);return t},remove:function(e,t){return this.run(e,function(e){var n,r=e.parentNode;if(!r)return null;if(t)for(;n=e.firstChild;)!v||3!==n.nodeType||n.nodeValue?r.insertBefore(n,e):e.removeChild(n);return r.removeChild(e)})},setStyle:function(e,t,n){return this.run(e,function(e){var r=this,i,o;if(t)if("string"==typeof t){i=e.style,t=t.replace(/-(\D)/g,function(e,t){return t.toUpperCase()}),"number"!=typeof n||C[t]||(n+="px"),"opacity"===t&&e.runtimeStyle&&"undefined"==typeof e.runtimeStyle.opacity&&(i.filter=""===n?"":"alpha(opacity="+100*n+")"),"float"==t&&(t="cssFloat"in e.style?"cssFloat":"styleFloat");try{i[t]=n}catch(a){}r.settings.update_styles&&e.removeAttribute("data-mce-style")}else for(o in t)r.setStyle(e,o,t[o])})},getStyle:function(e,n,r){if(e=this.get(e)){if(this.doc.defaultView&&r){n=n.replace(/[A-Z]/g,function(e){return"-"+e});try{return this.doc.defaultView.getComputedStyle(e,null).getPropertyValue(n)}catch(i){return null}}return n=n.replace(/-(\D)/g,function(e,t){return t.toUpperCase()}),"float"==n&&(n=v?"styleFloat":"cssFloat"),e.currentStyle&&r?e.currentStyle[n]:e.style?e.style[n]:t}},setStyles:function(e,t){this.setStyle(e,t)},css:function(e,t,n){this.setStyle(e,t,n)},removeAllAttribs:function(e){return this.run(e,function(e){var t,n=e.attributes;for(t=n.length-1;t>=0;t--)e.removeAttributeNode(n.item(t))})},setAttrib:function(e,t,n){var r=this;if(e&&t)return this.run(e,function(e){var i=r.settings,o=e.getAttribute(t);if(null!==n)switch(t){case"style":if(!f(n,"string"))return void u(n,function(t,n){r.setStyle(e,n,t)});i.keep_values&&(n?e.setAttribute("data-mce-style",n,2):e.removeAttribute("data-mce-style",2)),e.style.cssText=n;break;case"class":e.className=n||"";break;case"src":case"href":i.keep_values&&(i.url_converter&&(n=i.url_converter.call(i.url_converter_scope||r,n,t,e)),r.setAttrib(e,"data-mce-"+t,n,2));break;case"shape":e.setAttribute("data-mce-style",n)}f(n)&&null!==n&&0!==n.length?e.setAttribute(t,""+n,2):e.removeAttribute(t,2),o!=n&&i.onSetAttrib&&i.onSetAttrib({attrElm:e,attrName:t,attrValue:n})})},setAttribs:function(e,t){var n=this;return this.run(e,function(e){u(t,function(t,r){n.setAttrib(e,r,t)})})},getAttrib:function(e,t,n){var r,i=this,o;if(e=i.get(e),!e||1!==e.nodeType)return n===o?!1:n;if(f(n)||(n=""),/^(src|href|style|coords|shape)$/.test(t)&&(r=e.getAttribute("data-mce-"+t)))return r;if(v&&i.props[t]&&(r=e[i.props[t]],r=r&&r.nodeValue?r.nodeValue:r),r||(r=e.getAttribute(t,2)),/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(t))return e[i.props[t]]===!0&&""===r?t:r?t:"";if("FORM"===e.nodeName&&e.getAttributeNode(t))return e.getAttributeNode(t).nodeValue;if("style"===t&&(r=r||e.style.cssText,r&&(r=i.serializeStyle(i.parseStyle(r),e.nodeName),i.settings.keep_values&&e.setAttribute("data-mce-style",r))),g&&"class"===t&&r&&(r=r.replace(/(apple|webkit)\-[a-z\-]+/gi,"")),v)switch(t){case"rowspan":case"colspan":1===r&&(r="");break;case"size":("+0"===r||20===r||0===r)&&(r="");break;case"width":case"height":case"vspace":case"checked":case"disabled":case"readonly":0===r&&(r="");break;case"hspace":-1===r&&(r="");break;case"maxlength":case"tabindex":(32768===r||2147483647===r||"32768"===r)&&(r="");break;case"multiple":case"compact":case"noshade":case"nowrap":return 65535===r?t:n;case"shape":r=r.toLowerCase(); +break;default:0===t.indexOf("on")&&r&&(r=(""+r).replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/,"$1"))}return r!==o&&null!==r&&""!==r?""+r:n},getPos:function(e,t){var n=this,r=0,i=0,o,a=n.doc,s;if(e=n.get(e),t=t||a.body,e){if(t===a.body&&e.getBoundingClientRect)return s=e.getBoundingClientRect(),t=n.boxModel?a.documentElement:a.body,r=s.left+(a.documentElement.scrollLeft||a.body.scrollLeft)-t.clientLeft,i=s.top+(a.documentElement.scrollTop||a.body.scrollTop)-t.clientTop,{x:r,y:i};for(o=e;o&&o!=t&&o.nodeType;)r+=o.offsetLeft||0,i+=o.offsetTop||0,o=o.offsetParent;for(o=e.parentNode;o&&o!=t&&o.nodeType;)r-=o.scrollLeft||0,i-=o.scrollTop||0,o=o.parentNode}return{x:r,y:i}},parseStyle:function(e){return this.styles.parse(e)},serializeStyle:function(e,t){return this.styles.serialize(e,t)},addStyle:function(e){var t=this,n=t.doc,r,i;if(t!==d.DOM&&n===document){var o=d.DOM.addedStyles;if(o=o||[],o[e])return;o[e]=!0,d.DOM.addedStyles=o}i=n.getElementById("mceDefaultStyles"),i||(i=n.createElement("style"),i.id="mceDefaultStyles",i.type="text/css",r=n.getElementsByTagName("head")[0],r.firstChild?r.insertBefore(i,r.firstChild):r.appendChild(i)),i.styleSheet?i.styleSheet.cssText+=e:i.appendChild(n.createTextNode(e))},loadCSS:function(e){var t=this,n=t.doc,r;return t!==d.DOM&&n===document?void d.DOM.loadCSS(e):(e||(e=""),r=n.getElementsByTagName("head")[0],void u(e.split(","),function(e){var i;t.files[e]||(t.files[e]=!0,i=t.create("link",{rel:"stylesheet",href:e}),v&&n.documentMode&&n.recalc&&(i.onload=function(){n.recalc&&n.recalc(),i.onload=null}),r.appendChild(i))}))},addClass:function(e,t){return this.run(e,function(e){var n;return t?this.hasClass(e,t)?e.className:(n=this.removeClass(e,t),e.className=n=(""!==n?n+" ":"")+t,n):0})},removeClass:function(e,t){var n=this,r;return n.run(e,function(e){var i;return n.hasClass(e,t)?(r||(r=new RegExp("(^|\\s+)"+t+"(\\s+|$)","g")),i=e.className.replace(r," "),i=m(" "!=i?i:""),e.className=i,i||(e.removeAttribute("class"),e.removeAttribute("className")),i):e.className})},hasClass:function(e,t){return e=this.get(e),e&&t?-1!==(" "+e.className+" ").indexOf(" "+t+" "):!1},toggleClass:function(e,n,r){r=r===t?!this.hasClass(e,n):r,this.hasClass(e,n)!==r&&(r?this.addClass(e,n):this.removeClass(e,n))},show:function(e){return this.setStyle(e,"display","block")},hide:function(e){return this.setStyle(e,"display","none")},isHidden:function(e){return e=this.get(e),!e||"none"==e.style.display||"none"==this.getStyle(e,"display")},uniqueId:function(e){return(e?e:"mce_")+this.counter++},setHTML:function(e,t){var n=this;return n.run(e,function(e){if(v){for(;e.firstChild;)e.removeChild(e.firstChild);try{e.innerHTML="
    "+t,e.removeChild(e.firstChild)}catch(r){var i=n.create("div");i.innerHTML="
    "+t,u(p(i.childNodes),function(t,n){n&&e.canHaveHTML&&e.appendChild(t)})}}else e.innerHTML=t;return t})},getOuterHTML:function(e){var t,n=this;return(e=n.get(e))?1===e.nodeType&&n.hasOuterHTML?e.outerHTML:(t=(e.ownerDocument||n.doc).createElement("body"),t.appendChild(e.cloneNode(!0)),t.innerHTML):null},setOuterHTML:function(e,t,n){var r=this;return r.run(e,function(e){function i(){var i,o;for(o=n.createElement("body"),o.innerHTML=t,i=o.lastChild;i;)r.insertAfter(i.cloneNode(!0),e),i=i.previousSibling;r.remove(e)}if(1==e.nodeType)if(n=n||e.ownerDocument||r.doc,v)try{1==e.nodeType&&r.hasOuterHTML?e.outerHTML=t:i()}catch(o){i()}else i()})},decode:a.decode,encode:a.encodeAllRaw,insertAfter:function(e,t){return t=this.get(t),this.run(e,function(e){var n,r;return n=t.parentNode,r=t.nextSibling,r?n.insertBefore(e,r):n.appendChild(e),e})},replace:function(e,t,n){var r=this;return r.run(t,function(t){return f(t,"array")&&(e=e.cloneNode(!0)),n&&u(p(t.childNodes),function(t){e.appendChild(t)}),t.parentNode.replaceChild(e,t)})},rename:function(e,t){var n=this,r;return e.nodeName!=t.toUpperCase()&&(r=n.create(t),u(n.getAttribs(e),function(t){n.setAttrib(r,t.nodeName,n.getAttrib(e,t.nodeName))}),n.replace(r,e,1)),r||e},findCommonAncestor:function(e,t){for(var n=e,r;n;){for(r=t;r&&n!=r;)r=r.parentNode;if(n==r)break;n=n.parentNode}return!n&&e.ownerDocument?e.ownerDocument.documentElement:n},toHex:function(e){return this.styles.toHex(l.trim(e))},run:function(e,t,n){var r=this,i;return"string"==typeof e&&(e=r.get(e)),e?(n=n||this,e.nodeType||!e.length&&0!==e.length?t.call(n,e):(i=[],u(e,function(e,o){e&&("string"==typeof e&&(e=r.get(e)),i.push(t.call(n,e,o)))}),i)):!1},getAttribs:function(e){var t;if(e=this.get(e),!e)return[];if(v){if(t=[],"OBJECT"==e.nodeName)return e.attributes;"OPTION"===e.nodeName&&this.getAttrib(e,"selected")&&t.push({specified:1,nodeName:"selected"});var n=/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi;return e.cloneNode(!1).outerHTML.replace(n,"").replace(/[\w:\-]+/gi,function(e){t.push({specified:1,nodeName:e})}),t}return e.attributes},isEmpty:function(e,t){var n=this,r,o,a,s,l,c=0;if(e=e.firstChild){s=new i(e,e.parentNode),t=t||n.schema?n.schema.getNonEmptyElements():null;do{if(a=e.nodeType,1===a){if(e.getAttribute("data-mce-bogus"))continue;if(l=e.nodeName.toLowerCase(),t&&t[l]){if("br"===l){c++;continue}return!1}for(o=n.getAttribs(e),r=e.attributes.length;r--;)if(l=e.attributes[r].nodeName,"name"===l||"data-mce-bookmark"===l)return!1}if(8==a)return!1;if(3===a&&!b.test(e.nodeValue))return!1}while(e=s.next())}return 1>=c},createRng:function(){var e=this.doc;return e.createRange?e.createRange():new o(this)},nodeIndex:function(e,t){var n=0,r,i;if(e)for(r=e.nodeType,e=e.previousSibling;e;e=e.previousSibling)i=e.nodeType,(!t||3!=i||i!=r&&e.nodeValue.length)&&(n++,r=i);return n},split:function(e,t,n){function r(e){function t(e){var t=e.previousSibling&&"SPAN"==e.previousSibling.nodeName,n=e.nextSibling&&"SPAN"==e.nextSibling.nodeName;return t&&n}var n,o=e.childNodes,a=e.nodeType;if(1!=a||"bookmark"!=e.getAttribute("data-mce-type")){for(n=o.length-1;n>=0;n--)r(o[n]);if(9!=a){if(3==a&&e.nodeValue.length>0){var s=m(e.nodeValue).length;if(!i.isBlock(e.parentNode)||s>0||0===s&&t(e))return}else if(1==a&&(o=e.childNodes,1==o.length&&o[0]&&1==o[0].nodeType&&"bookmark"==o[0].getAttribute("data-mce-type")&&e.parentNode.insertBefore(o[0],e),o.length||/^(br|hr|input|img)$/i.test(e.nodeName)))return;i.remove(e)}return e}}var i=this,o=i.createRng(),a,s,l;return e&&t?(o.setStart(e.parentNode,i.nodeIndex(e)),o.setEnd(t.parentNode,i.nodeIndex(t)),a=o.extractContents(),o=i.createRng(),o.setStart(t.parentNode,i.nodeIndex(t)+1),o.setEnd(e.parentNode,i.nodeIndex(e)+1),s=o.extractContents(),l=e.parentNode,l.insertBefore(r(a),e),n?l.replaceChild(n,t):l.insertBefore(t,e),l.insertBefore(r(s),e),i.remove(e),n||t):void 0},bind:function(e,t,n,r){var i=this;if(l.isArray(e)){for(var o=e.length;o--;)e[o]=i.bind(e[o],t,n,r);return e}return!i.settings.collect||e!==i.doc&&e!==i.win||i.boundEvents.push([e,t,n,r]),i.events.bind(e,t,n,r||i)},unbind:function(e,t,n){var r=this,i;if(l.isArray(e)){for(i=e.length;i--;)e[i]=r.unbind(e[i],t,n);return e}if(r.boundEvents&&(e===r.doc||e===r.win))for(i=r.boundEvents.length;i--;){var o=r.boundEvents[i];e!=o[0]||t&&t!=o[1]||n&&n!=o[2]||this.events.unbind(o[0],o[1],o[2])}return this.events.unbind(e,t,n)},fire:function(e,t,n){return this.events.fire(e,t,n)},getContentEditable:function(e){var t;return 1!=e.nodeType?null:(t=e.getAttribute("data-mce-contenteditable"),t&&"inherit"!==t?t:"inherit"!==e.contentEditable?e.contentEditable:null)},destroy:function(){var t=this;if(t.boundEvents){for(var n=t.boundEvents.length;n--;){var r=t.boundEvents[n];this.events.unbind(r[0],r[1],r[2])}t.boundEvents=null}e.setDocument&&e.setDocument(),t.win=t.doc=t.root=t.events=t.frag=null},dumpRng:function(e){return"startContainer: "+e.startContainer.nodeName+", startOffset: "+e.startOffset+", endContainer: "+e.endContainer.nodeName+", endOffset: "+e.endOffset},_findSib:function(e,t,n){var r=this,i=t;if(e)for("string"==typeof i&&(i=function(e){return r.is(e,t)}),e=e[n];e;e=e[n])if(i(e))return e;return null}},d.DOM=new d(document),d}),r(y,[v,f],function(e,t){function n(){function e(e,t){function n(){o.remove(s),a&&(a.onreadystatechange=a.onload=a=null),t()}function i(){"undefined"!=typeof console&&console.log&&console.log("Failed to load: "+e)}var o=r,a,s;s=o.uniqueId(),a=document.createElement("script"),a.id=s,a.type="text/javascript",a.src=e,"onreadystatechange"in a?a.onreadystatechange=function(){/loaded|complete/.test(a.readyState)&&n()}:a.onload=n,a.onerror=i,(document.getElementsByTagName("head")[0]||document.body).appendChild(a)}var t=0,n=1,a=2,s={},l=[],c={},d=[],u=0,f;this.isDone=function(e){return s[e]==a},this.markDone=function(e){s[e]=a},this.add=this.load=function(e,n,r){var i=s[e];i==f&&(l.push(e),s[e]=t),n&&(c[e]||(c[e]=[]),c[e].push({func:n,scope:r||this}))},this.loadQueue=function(e,t){this.loadScripts(l,e,t)},this.loadScripts=function(t,r,l){function p(e){i(c[e],function(e){e.func.call(e.scope)}),c[e]=f}var m;d.push({func:r,scope:l||this}),(m=function(){var r=o(t);t.length=0,i(r,function(t){return s[t]==a?void p(t):void(s[t]!=n&&(s[t]=n,u++,e(t,function(){s[t]=a,u--,p(t),m()})))}),u||(i(d,function(e){e.func.call(e.scope)}),d.length=0)})()}}var r=e.DOM,i=t.each,o=t.grep;return n.ScriptLoader=new n,n}),r(b,[y,f],function(e,n){function r(){var e=this;e.items=[],e.urls={},e.lookup={}}var i=n.each;return r.prototype={get:function(e){return this.lookup[e]?this.lookup[e].instance:t},dependencies:function(e){var t;return this.lookup[e]&&(t=this.lookup[e].dependencies),t||[]},requireLangPack:function(t,n){if(r.language&&r.languageLoad!==!1){if(n&&new RegExp("([, ]|\\b)"+r.language+"([, ]|\\b)").test(n)===!1)return;e.ScriptLoader.add(this.urls[t]+"/langs/"+r.language+".js")}},add:function(e,t,n){return this.items.push(t),this.lookup[e]={instance:t,dependencies:n},t},createUrl:function(e,t){return"object"==typeof t?t:{prefix:e.prefix,resource:t,suffix:e.suffix}},addComponents:function(t,n){var r=this.urls[t];i(n,function(t){e.ScriptLoader.add(r+"/"+t)})},load:function(n,o,a,s){function l(){var r=c.dependencies(n);i(r,function(e){var n=c.createUrl(o,e);c.load(n.resource,n,t,t)}),a&&a.call(s?s:e)}var c=this,d=o;c.urls[n]||("object"==typeof o&&(d=o.prefix+o.resource+o.suffix),0!==d.indexOf("/")&&-1==d.indexOf("://")&&(d=r.baseURL+"/"+d),c.urls[n]=d.substring(0,d.lastIndexOf("/")),c.lookup[n]?l():e.ScriptLoader.add(d,l,s))}},r.PluginManager=new r,r.ThemeManager=new r,r}),r(C,[],function(){function e(e,t,n){var r,i,o=n?"lastChild":"firstChild",a=n?"prev":"next";if(e[o])return e[o];if(e!==t){if(r=e[a])return r;for(i=e.parent;i&&i!==t;i=i.parent)if(r=i[a])return r}}function t(e,t){this.name=e,this.type=t,1===t&&(this.attributes=[],this.attributes.map={})}var n=/^[ \t\r\n]*$/,r={"#text":3,"#comment":8,"#cdata":4,"#pi":7,"#doctype":10,"#document-fragment":11};return t.prototype={replace:function(e){var t=this;return e.parent&&e.remove(),t.insert(e,t),t.remove(),t},attr:function(e,t){var n=this,r,i,o;if("string"!=typeof e){for(i in e)n.attr(i,e[i]);return n}if(r=n.attributes){if(t!==o){if(null===t){if(e in r.map)for(delete r.map[e],i=r.length;i--;)if(r[i].name===e)return r=r.splice(i,1),n;return n}if(e in r.map){for(i=r.length;i--;)if(r[i].name===e){r[i].value=t;break}}else r.push({name:e,value:t});return r.map[e]=t,n}return r.map[e]}},clone:function(){var e=this,n=new t(e.name,e.type),r,i,o,a,s;if(o=e.attributes){for(s=[],s.map={},r=0,i=o.length;i>r;r++)a=o[r],"id"!==a.name&&(s[s.length]={name:a.name,value:a.value},s.map[a.name]=a.value);n.attributes=s}return n.value=e.value,n.shortEnded=e.shortEnded,n},wrap:function(e){var t=this;return t.parent.insert(e,t),e.append(t),t},unwrap:function(){var e=this,t,n;for(t=e.firstChild;t;)n=t.next,e.insert(t,e,!0),t=n;e.remove()},remove:function(){var e=this,t=e.parent,n=e.next,r=e.prev;return t&&(t.firstChild===e?(t.firstChild=n,n&&(n.prev=null)):r.next=n,t.lastChild===e?(t.lastChild=r,r&&(r.next=null)):n.prev=r,e.parent=e.next=e.prev=null),e},append:function(e){var t=this,n;return e.parent&&e.remove(),n=t.lastChild,n?(n.next=e,e.prev=n,t.lastChild=e):t.lastChild=t.firstChild=e,e.parent=t,e},insert:function(e,t,n){var r;return e.parent&&e.remove(),r=t.parent||this,n?(t===r.firstChild?r.firstChild=e:t.prev.next=e,e.prev=t.prev,e.next=t,t.prev=e):(t===r.lastChild?r.lastChild=e:t.next.prev=e,e.next=t.next,e.prev=t,t.next=e),e.parent=r,e},getAll:function(t){var n=this,r,i=[];for(r=n.firstChild;r;r=e(r,n))r.name===t&&i.push(r);return i},empty:function(){var t=this,n,r,i;if(t.firstChild){for(n=[],i=t.firstChild;i;i=e(i,t))n.push(i);for(r=n.length;r--;)i=n[r],i.parent=i.firstChild=i.lastChild=i.next=i.prev=null}return t.firstChild=t.lastChild=null,t},isEmpty:function(t){var r=this,i=r.firstChild,o,a;if(i)do{if(1===i.type){if(i.attributes.map["data-mce-bogus"])continue;if(t[i.name])return!1;for(o=i.attributes.length;o--;)if(a=i.attributes[o].name,"name"===a||0===a.indexOf("data-mce-"))return!1}if(8===i.type)return!1;if(3===i.type&&!n.test(i.value))return!1}while(i=e(i,r));return!0},walk:function(t){return e(this,null,t)}},t.create=function(e,n){var i,o;if(i=new t(e,r[e]||1),n)for(o in n)i.attr(o,n[o]);return i},t}),r(x,[f],function(e){function t(e,t){return e?e.split(t||" "):[]}function n(e){function n(e,n,r){function i(e){var t={},n,r;for(n=0,r=e.length;r>n;n++)t[e[n]]={};return t}var o,l,c,d=arguments;for(r=r||[],n=n||"","string"==typeof r&&(r=t(r)),l=3;lo;o++)i.attributes[n[o]]={},i.attributesOrder.push(n[o])}var a={},s,l,c,d,u,f;return r[e]?r[e]:(s=t("id accesskey class dir lang style tabindex title"),l=t("address blockquote div dl fieldset form h1 h2 h3 h4 h5 h6 hr menu ol p pre table ul"),c=t("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"),"html4"!=e&&(s.push.apply(s,t("contenteditable contextmenu draggable dropzone hidden spellcheck translate")),l.push.apply(l,t("article aside details dialog figure header footer hgroup section nav")),c.push.apply(c,t("audio canvas command datalist mark meter output progress time wbr video ruby bdi keygen"))),"html5-strict"!=e&&(s.push("xml:lang"),f=t("acronym applet basefont big font strike tt"),c.push.apply(c,f),o(f,function(e){n(e,"",c)}),u=t("center dir isindex noframes"),l.push.apply(l,u),d=[].concat(l,c),o(u,function(e){n(e,"",d)})),d=d||[].concat(l,c),n("html","manifest","head body"),n("head","","base command link meta noscript script style title"),n("title hr noscript br"),n("base","href target"),n("link","href rel media hreflang type sizes hreflang"),n("meta","name http-equiv content charset"),n("style","media type scoped"),n("script","src async defer type charset"),n("body","onafterprint onbeforeprint onbeforeunload onblur onerror onfocus onhashchange onload onmessage onoffline ononline onpagehide onpageshow onpopstate onresize onscroll onstorage onunload",d),n("address dt dd div caption","",d),n("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","",c),n("blockquote","cite",d),n("ol","reversed start type","li"),n("ul","","li"),n("li","value",d),n("dl","","dt dd"),n("a","href target rel media hreflang type",c),n("q","cite",c),n("ins del","cite datetime",d),n("img","src alt usemap ismap width height"),n("iframe","src name width height",d),n("embed","src type width height"),n("object","data type typemustmatch name usemap form width height",d,"param"),n("param","name value"),n("map","name",d,"area"),n("area","alt coords shape href target rel media hreflang type"),n("table","border","caption colgroup thead tfoot tbody tr"+("html4"==e?" col":"")),n("colgroup","span","col"),n("col","span"),n("tbody thead tfoot","","tr"),n("tr","","td th"),n("td","colspan rowspan headers",d),n("th","colspan rowspan headers scope abbr",d),n("form","accept-charset action autocomplete enctype method name novalidate target",d),n("fieldset","disabled form name",d,"legend"),n("label","form for",c),n("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("button","disabled form formaction formenctype formmethod formnovalidate formtarget name type value","html4"==e?d:c),n("select","disabled form multiple name required size","option optgroup"),n("optgroup","disabled label","option"),n("option","disabled label selected value"),n("textarea","cols dirname disabled form maxlength name readonly required rows wrap"),n("menu","type label",d,"li"),n("noscript","",d),"html4"!=e&&(n("wbr"),n("ruby","",c,"rt rp"),n("figcaption","",d),n("mark rt rp summary bdi","",c),n("canvas","width height",d),n("video","src crossorigin poster preload autoplay mediagroup loop muted controls width height",d,"track source"),n("audio","src crossorigin preload autoplay mediagroup loop muted controls",d,"track source"),n("source","src type media"),n("track","kind src srclang label default"),n("datalist","",c,"option"),n("article section nav aside header footer","",d),n("hgroup","","h1 h2 h3 h4 h5 h6"),n("figure","",d,"figcaption"),n("time","datetime",c),n("dialog","open",d),n("command","type label icon disabled checked radiogroup command"),n("output","for form name",c),n("progress","value max",c),n("meter","value min max low high optimum",c),n("details","open",d,"summary"),n("keygen","autofocus challenge disabled form keytype name")),"html5-strict"!=e&&(i("script","language xml:space"),i("style","xml:space"),i("object","declare classid codebase codetype archive standby align border hspace vspace"),i("param","valuetype type"),i("a","charset name rev shape coords"),i("br","clear"),i("applet","codebase archive code object alt name width height align hspace vspace"),i("img","name longdesc align border hspace vspace"),i("iframe","longdesc frameborder marginwidth marginheight scrolling align"),i("font basefont","size color face"),i("input","usemap align"),i("select","onchange"),i("textarea"),i("h1 h2 h3 h4 h5 h6 div p legend caption","align"),i("ul","type compact"),i("li","type"),i("ol dl menu dir","compact"),i("pre","width xml:space"),i("hr","align noshade size width"),i("isindex","prompt"),i("table","summary width frame rules cellspacing cellpadding align bgcolor"),i("col","width align char charoff valign"),i("colgroup","width align char charoff valign"),i("thead","align char charoff valign"),i("tr","align char charoff valign bgcolor"),i("th","axis align char charoff valign nowrap bgcolor width height"),i("form","accept"),i("td","abbr axis scope align char charoff valign nowrap bgcolor width height"),i("tfoot","align char charoff valign"),i("tbody","align char charoff valign"),i("area","nohref"),i("body","background bgcolor text link vlink alink")),"html4"!=e&&(i("input button select textarea","autofocus"),i("input textarea","placeholder"),i("a","download"),i("link script img","crossorigin"),i("iframe","srcdoc sandbox seamless allowfullscreen")),o(t("a form meter progress dfn"),function(e){a[e]&&delete a[e].children[e]}),delete a.caption.children.table,r[e]=a,a)}var r={},i=e.makeMap,o=e.each,a=e.extend,s=e.explode,l=e.inArray;return function(e){function c(t,n,o){var s=e[t];return s?s=i(s,",",i(s.toUpperCase()," ")):(s=r[t],s||(s=i(n," ",i(n.toUpperCase()," ")),s=a(s,o),r[t]=s)),s}function d(e){return new RegExp("^"+e.replace(/([?+*])/g,".$1")+"$")}function u(e){var n,r,o,a,s,c,u,f,p,m,h,g,y,C,x,w,_,N,E,k=/^([#+\-])?([^\[!\/]+)(?:\/([^\[!]+))?(?:(!?)\[([^\]]+)\])?$/,S=/^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/,T=/[*?+]/;if(e)for(e=t(e,","),v["@"]&&(w=v["@"].attributes,_=v["@"].attributesOrder),n=0,r=e.length;r>n;n++)if(s=k.exec(e[n])){if(C=s[1],p=s[2],x=s[3],f=s[5],g={},y=[],c={attributes:g,attributesOrder:y},"#"===C&&(c.paddEmpty=!0),"-"===C&&(c.removeEmpty=!0),"!"===s[4]&&(c.removeEmptyAttrs=!0),w){for(N in w)g[N]=w[N];y.push.apply(y,_)}if(f)for(f=t(f,"|"),o=0,a=f.length;a>o;o++)if(s=S.exec(f[o])){if(u={},h=s[1],m=s[2].replace(/::/g,":"),C=s[3],E=s[4],"!"===h&&(c.attributesRequired=c.attributesRequired||[],c.attributesRequired.push(m),u.required=!0),"-"===h){delete g[m],y.splice(l(y,m),1);continue}C&&("="===C&&(c.attributesDefault=c.attributesDefault||[],c.attributesDefault.push({name:m,value:E}),u.defaultValue=E),":"===C&&(c.attributesForced=c.attributesForced||[],c.attributesForced.push({name:m,value:E}),u.forcedValue=E),"<"===C&&(u.validValues=i(E,"?"))),T.test(m)?(c.attributePatterns=c.attributePatterns||[],u.pattern=d(m),c.attributePatterns.push(u)):(g[m]||y.push(m),g[m]=u)}w||"@"!=p||(w=g,_=y),x&&(c.outputName=p,v[x]=c),T.test(p)?(c.pattern=d(p),b.push(c)):v[p]=c}}function f(e){v={},b=[],u(e),o(x,function(e,t){y[t]=e.children})}function p(e){var n=/^(~)?(.+)$/;e&&(r.text_block_elements=r.block_elements=null,o(t(e,","),function(e){var t=n.exec(e),r="~"===t[1],i=r?"span":"div",s=t[2];if(y[s]=y[i],R[s]=i,r||(k[s.toUpperCase()]={},k[s]={}),!v[s]){var l=v[i];l=a({},l),delete l.removeEmptyAttrs,delete l.removeEmpty,v[s]=l}o(y,function(e,t){e[i]&&(y[t]=e=a({},y[t]),e[s]=e[i])})}))}function m(e){var n=/^([+\-]?)(\w+)\[([^\]]+)\]$/;e&&o(t(e,","),function(e){var r=n.exec(e),i,s;r&&(s=r[1],i=s?y[r[2]]:y[r[2]]={"#comment":{}},i=y[r[2]],o(t(r[3],"|"),function(e){"-"===s?(y[r[2]]=i=a({},y[r[2]]),delete i[e]):i[e]={}}))})}function h(e){var t=v[e],n;if(t)return t;for(n=b.length;n--;)if(t=b[n],t.pattern.test(e))return t}var g=this,v={},y={},b=[],C,x,w,_,N,E,k,S,T,R={},A={};e=e||{},x=n(e.schema),e.verify_html===!1&&(e.valid_elements="*[*]"),e.valid_styles&&(C={},o(e.valid_styles,function(e,t){C[t]=s(e)})),w=c("whitespace_elements","pre script noscript style textarea video audio iframe object"),_=c("self_closing_elements","colgroup dd dt li option p td tfoot th thead tr"),N=c("short_ended_elements","area base basefont br col frame hr img input isindex link meta param embed source wbr track"),E=c("boolean_attributes","checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls"),S=c("non_empty_elements","td th iframe video audio object script",N),T=c("text_block_elements","h1 h2 h3 h4 h5 h6 p div address pre form blockquote center dir fieldset header footer article section hgroup aside nav figure"),k=c("block_elements","hr table tbody thead tfoot th tr td li ol ul caption dl dt dd noscript menu isindex option datalist select optgroup",T),o((e.special||"script noscript style textarea").split(" "),function(e){A[e]=new RegExp("]*>","gi")}),e.valid_elements?f(e.valid_elements):(o(x,function(e,t){v[t]={attributes:e.attributes,attributesOrder:e.attributesOrder},y[t]=e.children}),"html5"!=e.schema&&o(t("strong/b em/i"),function(e){e=t(e,"/"),v[e[1]].outputName=e[0]}),v.img.attributesDefault=[{name:"alt",value:""}],o(t("ol ul sub sup blockquote span font a table tbody tr strong em b i"),function(e){v[e]&&(v[e].removeEmpty=!0)}),o(t("p h1 h2 h3 h4 h5 h6 th td pre div address caption"),function(e){v[e].paddEmpty=!0}),o(t("span"),function(e){v[e].removeEmptyAttrs=!0})),p(e.custom_elements),m(e.valid_children),u(e.extended_valid_elements),m("+ol[ul|ol],+ul[ul|ol]"),e.invalid_elements&&o(s(e.invalid_elements),function(e){v[e]&&delete v[e]}),h("span")||u("span[!data-mce-type|*]"),g.children=y,g.styles=C,g.getBoolAttrs=function(){return E},g.getBlockElements=function(){return k},g.getTextBlockElements=function(){return T},g.getShortEndedElements=function(){return N},g.getSelfClosingElements=function(){return _},g.getNonEmptyElements=function(){return S},g.getWhiteSpaceElements=function(){return w},g.getSpecialElements=function(){return A},g.isValidChild=function(e,t){var n=y[e];return!(!n||!n[t])},g.isValid=function(e,t){var n,r,i=h(e);if(i){if(!t)return!0;if(i.attributes[t])return!0;if(n=i.attributePatterns)for(r=n.length;r--;)if(n[r].pattern.test(e))return!0}return!1},g.getElementRule=h,g.getCustomElements=function(){return R},g.addValidElements=u,g.setValidElements=f,g.addCustomElements=p,g.addValidChildren=m,g.elements=v}}),r(w,[x,m,f],function(e,t,n){var r=n.each;return function(i,o){function a(){}var s=this;i=i||{},s.schema=o=o||new e,i.fix_self_closing!==!1&&(i.fix_self_closing=!0),r("comment cdata text start end pi doctype".split(" "),function(e){e&&(s[e]=i[e]||a)}),s.parse=function(e){function r(e){var t,n;for(t=f.length;t--&&f[t].name!==e;);if(t>=0){for(n=f.length-1;n>=t;n--)e=f[n],e.valid&&s.end(e.name);f.length=t}}function a(e,t,n,r,o){var a,s,l=/[\s\u0000-\u001F]+/g;if(t=t.toLowerCase(),n=t in C?t:F(n||r||o||""),w&&!v&&0!==t.indexOf("data-")){if(a=S[t],!a&&T){for(s=T.length;s--&&(a=T[s],!a.pattern.test(t)););-1===s&&(a=null)}if(!a)return;if(a.validValues&&!(n in a.validValues))return}if(W[t]&&!i.allow_script_urls){var c=n.replace(l,"");try{if(c=decodeURIComponent(c),V.test(c))return}catch(d){if(c=unescape(c),V.test(c))return}}p.map[t]=n,p.push({name:t,value:n})}var s=this,l,c=0,d,u,f=[],p,m,h,g,v,y,b,C,x,w,_,N,E,k,S,T,R,A,B,L,D,M,H,P,O,I=0,F=t.decode,z,W=n.makeMap("src,href"),V=/(java|vb)script:/i;for(M=new RegExp("<(?:(?:!--([\\w\\W]*?)-->)|(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|(?:!DOCTYPE([\\w\\W]*?)>)|(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|(?:\\/([^>]+)>)|(?:([A-Za-z0-9\\-\\:\\.]+)((?:\\s+[^\"'>]+(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>]*))*|\\/|\\s+)>))","g"),H=/([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g,b=o.getShortEndedElements(),D=i.self_closing_elements||o.getSelfClosingElements(),C=o.getBoolAttrs(),w=i.validate,y=i.remove_internals,z=i.fix_self_closing,P=o.getSpecialElements();l=M.exec(e);){if(c0&&f[f.length-1].name===d&&r(d),!w||(_=o.getElementRule(d))){if(N=!0,w&&(S=_.attributes,T=_.attributePatterns),(k=l[8])?(v=-1!==k.indexOf("data-mce-type"),v&&y&&(N=!1),p=[],p.map={},k.replace(H,a)):(p=[],p.map={}),w&&!v){if(R=_.attributesRequired,A=_.attributesDefault,B=_.attributesForced,L=_.removeEmptyAttrs,L&&!p.length&&(N=!1),B)for(m=B.length;m--;)E=B[m],g=E.name,O=E.value,"{$uid}"===O&&(O="mce_"+I++),p.map[g]=O,p.push({name:g,value:O});if(A)for(m=A.length;m--;)E=A[m],g=E.name,g in p.map||(O=E.value,"{$uid}"===O&&(O="mce_"+I++),p.map[g]=O,p.push({name:g,value:O}));if(R){for(m=R.length;m--&&!(R[m]in p.map););-1===m&&(N=!1)}p.map["data-mce-bogus"]&&(N=!1)}N&&s.start(d,p,x)}else N=!1;if(u=P[d]){u.lastIndex=c=l.index+l[0].length,(l=u.exec(e))?(N&&(h=e.substr(c,l.index-c)),c=l.index+l[0].length):(h=e.substr(c),c=e.length),N&&(h.length>0&&s.text(h,!0),s.end(d)),M.lastIndex=c;continue}x||(k&&k.indexOf("/")==k.length-1?N&&s.end(d):f.push({name:d,valid:N}))}else(d=l[1])?(">"===d.charAt(0)&&(d=" "+d),i.allow_conditional_comments||"[if"!==d.substr(0,3)||(d=" "+d),s.comment(d)):(d=l[2])?s.cdata(d):(d=l[3])?s.doctype(d):(d=l[4])&&s.pi(d,l[5]);c=l.index+l[0].length}for(c=0;m--)d=f[m],d.valid&&s.end(d.name)}}}),r(_,[C,x,w,f],function(e,t,n,r){var i=r.makeMap,o=r.each,a=r.explode,s=r.extend;return function(r,l){function c(t){var n,r,o,a,s,c,u,f,p,m,h,g,v,y;for(h=i("tr,td,th,tbody,thead,tfoot,table"),m=l.getNonEmptyElements(),g=l.getTextBlockElements(),n=0;n1){for(a.reverse(),s=c=d.filterNode(a[0].clone()),p=0;p0?(t.value=n,t=t.prev):(r=t.prev,t.remove(),t=r)}function g(e){var t,n={};for(t in e)"li"!==t&&"p"!=t&&(n[t]=e[t]);return n}var v,y,b,C,x,w,_,N,E,k,S,T,R,A=[],B,L,D,M,H,P,O,I;if(o=o||{},p={},m={},T=s(i("script,style,head,html,body,title,meta,param"),l.getBlockElements()),O=l.getNonEmptyElements(),P=l.children,S=r.validate,I="forced_root_block"in o?o.forced_root_block:r.forced_root_block,H=l.getWhiteSpaceElements(),R=/^[ \t\r\n]+/,L=/[ \t\r\n]+$/,D=/[ \t\r\n]+/g,M=/^[ \t\r\n]+$/,v=new n({validate:S,allow_script_urls:r.allow_script_urls,allow_conditional_comments:r.allow_conditional_comments,self_closing_elements:g(l.getSelfClosingElements()),cdata:function(e){b.append(d("#cdata",4)).value=e},text:function(e,t){var n;B||(e=e.replace(D," "),b.lastChild&&T[b.lastChild.name]&&(e=e.replace(R,""))),0!==e.length&&(n=d("#text",3),n.raw=!!t,b.append(n).value=e)},comment:function(e){b.append(d("#comment",8)).value=e},pi:function(e,t){b.append(d(e,7)).value=t,h(b)},doctype:function(e){var t;t=b.append(d("#doctype",10)),t.value=e,h(b)},start:function(e,t,n){var r,i,o,a,s;if(o=S?l.getElementRule(e):{}){for(r=d(o.outputName||e,1),r.attributes=t,r.shortEnded=n,b.append(r),s=P[b.name],s&&P[r.name]&&!s[r.name]&&A.push(r),i=f.length;i--;)a=f[i].name,a in t.map&&(E=m[a],E?E.push(r):m[a]=[r]);T[e]&&h(r),n||(b=r),!B&&H[e]&&(B=!0)}},end:function(t){var n,r,i,o,a;if(r=S?l.getElementRule(t):{}){if(T[t]&&!B){if(n=b.firstChild,n&&3===n.type)if(i=n.value.replace(R,""),i.length>0)n.value=i,n=n.next;else for(o=n.next,n.remove(),n=o;n&&3===n.type;)i=n.value,o=n.next,(0===i.length||M.test(i))&&(n.remove(),n=o),n=o;if(n=b.lastChild,n&&3===n.type)if(i=n.value.replace(L,""),i.length>0)n.value=i,n=n.prev;else for(o=n.prev,n.remove(),n=o;n&&3===n.type;)i=n.value,o=n.prev,(0===i.length||M.test(i))&&(n.remove(),n=o),n=o}if(B&&H[t]&&(B=!1),(r.removeEmpty||r.paddEmpty)&&b.isEmpty(O))if(r.paddEmpty)b.empty().append(new e("#text","3")).value="\xa0";else if(!b.attributes.map.name&&!b.attributes.map.id)return a=b.parent,b.empty().remove(),void(b=a);b=b.parent}}},l),y=b=new e(o.context||r.root_name,11),v.parse(t),S&&A.length&&(o.context?o.invalid=!0:c(A)),I&&("body"==y.name||o.isRootContent)&&a(),!o.invalid){for(k in p){for(E=u[k],C=p[k],_=C.length;_--;)C[_].parent||C.splice(_,1); +for(x=0,w=E.length;w>x;x++)E[x](C,k,o)}for(x=0,w=f.length;w>x;x++)if(E=f[x],E.name in m){for(C=m[E.name],_=C.length;_--;)C[_].parent||C.splice(_,1);for(_=0,N=E.callbacks.length;N>_;_++)E.callbacks[_](C,E.name,o)}}return y},r.remove_trailing_brs&&d.addNodeFilter("br",function(t){var n,r=t.length,i,o=s({},l.getBlockElements()),a=l.getNonEmptyElements(),c,d,u,f,p,m;for(o.body=1,n=0;r>n;n++)if(i=t[n],c=i.parent,o[i.parent.name]&&i===c.lastChild){for(u=i.prev;u;){if(f=u.name,"span"!==f||"bookmark"!==u.attr("data-mce-type")){if("br"!==f)break;if("br"===f){i=null;break}}u=u.prev}i&&(i.remove(),c.isEmpty(a)&&(p=l.getElementRule(c.name),p&&(p.removeEmpty?c.remove():p.paddEmpty&&(c.empty().append(new e("#text",3)).value="\xa0"))))}else{for(d=i;c&&c.firstChild===d&&c.lastChild===d&&(d=c,!o[c.name]);)c=c.parent;d===c&&(m=new e("#text",3),m.value="\xa0",i.replace(m))}}),r.allow_html_in_named_anchor||d.addAttributeFilter("id,name",function(e){for(var t=e.length,n,r,i,o;t--;)if(o=e[t],"a"===o.name&&o.firstChild&&!o.attr("href")){i=o.parent,n=o.lastChild;do r=n.prev,i.insert(n,o),n=r;while(n)}})}}),r(N,[m,f],function(e,t){var n=t.makeMap;return function(t){var r=[],i,o,a,s,l;return t=t||{},i=t.indent,o=n(t.indent_before||""),a=n(t.indent_after||""),s=e.getEncodeFunc(t.entity_encoding||"raw",t.entities),l="html"==t.element_format,{start:function(e,t,n){var c,d,u,f;if(i&&o[e]&&r.length>0&&(f=r[r.length-1],f.length>0&&"\n"!==f&&r.push("\n")),r.push("<",e),t)for(c=0,d=t.length;d>c;c++)u=t[c],r.push(" ",u.name,'="',s(u.value,!0),'"');r[r.length]=!n||l?">":" />",n&&i&&a[e]&&r.length>0&&(f=r[r.length-1],f.length>0&&"\n"!==f&&r.push("\n"))},end:function(e){var t;r.push(""),i&&a[e]&&r.length>0&&(t=r[r.length-1],t.length>0&&"\n"!==t&&r.push("\n"))},text:function(e,t){e.length>0&&(r[r.length]=t?e:s(e))},cdata:function(e){r.push("")},comment:function(e){r.push("")},pi:function(e,t){t?r.push(""):r.push(""),i&&r.push("\n")},doctype:function(e){r.push("",i?"\n":"")},reset:function(){r.length=0},getContent:function(){return r.join("").replace(/\n$/,"")}}}}),r(E,[N,x],function(e,t){return function(n,r){var i=this,o=new e(n);n=n||{},n.validate="validate"in n?n.validate:!0,i.schema=r=r||new t,i.writer=o,i.serialize=function(e){function t(e){var n=i[e.type],s,l,c,d,u,f,p,m,h;if(n)n(e);else{if(s=e.name,l=e.shortEnded,c=e.attributes,a&&c&&c.length>1){for(f=[],f.map={},h=r.getElementRule(e.name),p=0,m=h.attributesOrder.length;m>p;p++)d=h.attributesOrder[p],d in c.map&&(u=c.map[d],f.map[d]=u,f.push({name:d,value:u}));for(p=0,m=c.length;m>p;p++)d=c[p].name,d in f.map||(u=c.map[d],f.map[d]=u,f.push({name:d,value:u}));c=f}if(o.start(e.name,c,l),!l){if(e=e.firstChild)do t(e);while(e=e.next);o.end(s)}}}var i,a;return a=n.validate,i={3:function(e){o.text(e.value,e.raw)},8:function(e){o.comment(e.value)},7:function(e){o.pi(e.name,e.value)},10:function(e){o.doctype(e.value)},4:function(e){o.cdata(e.value)},11:function(e){if(e=e.firstChild)do t(e);while(e=e.next)}},o.reset(),1!=e.type||n.inner?i[11](e):t(e),o.getContent()}}}),r(k,[v,_,m,E,C,x,h,f],function(e,t,n,r,i,o,a,s){var l=s.each,c=s.trim,d=e.DOM;return function(e,i){var s,u,f;return i&&(s=i.dom,u=i.schema),s=s||d,u=u||new o(e),e.entity_encoding=e.entity_encoding||"named",e.remove_trailing_brs="remove_trailing_brs"in e?e.remove_trailing_brs:!0,f=new t(e,u),f.addAttributeFilter("src,href,style",function(t,n){for(var r=t.length,i,o,a="data-mce-"+n,l=e.url_converter,c=e.url_converter_scope,d;r--;)i=t[r],o=i.attributes.map[a],o!==d?(i.attr(n,o.length>0?o:null),i.attr(a,null)):(o=i.attributes.map[n],"style"===n?o=s.serializeStyle(s.parseStyle(o),i.name):l&&(o=l.call(c,o,n,i.name)),i.attr(n,o.length>0?o:null))}),f.addAttributeFilter("class",function(e){for(var t=e.length,n,r;t--;)n=e[t],r=n.attr("class").replace(/(?:^|\s)mce-item-\w+(?!\S)/g,""),n.attr("class",r.length>0?r:null)}),f.addAttributeFilter("data-mce-type",function(e,t,n){for(var r=e.length,i;r--;)i=e[r],"bookmark"!==i.attributes.map["data-mce-type"]||n.cleanup||i.remove()}),f.addAttributeFilter("data-mce-expando",function(e,t){for(var n=e.length;n--;)e[n].attr(t,null)}),f.addNodeFilter("noscript",function(e){for(var t=e.length,r;t--;)r=e[t].firstChild,r&&(r.value=n.decode(r.value))}),f.addNodeFilter("script,style",function(e,t){function n(e){return e.replace(/()/g,"\n").replace(/^[\r\n]*|[\r\n]*$/g,"").replace(/^\s*(()?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g,"")}for(var r=e.length,i,o;r--;)if(i=e[r],o=i.firstChild?i.firstChild.value:"","script"===t){var a=(i.attr("type")||"text/javascript").replace(/^mce\-/,"");i.attr("type","text/javascript"===a?null:a),o.length>0&&(i.firstChild.value="// ")}else o.length>0&&(i.firstChild.value="")}),f.addNodeFilter("#comment",function(e){for(var t=e.length,n;t--;)n=e[t],0===n.value.indexOf("[CDATA[")?(n.name="#cdata",n.type=4,n.value=n.value.replace(/^\[CDATA\[|\]\]$/g,"")):0===n.value.indexOf("mce:protected ")&&(n.name="#text",n.type=3,n.raw=!0,n.value=unescape(n.value).substr(14))}),f.addNodeFilter("xml:namespace,input",function(e,t){for(var n=e.length,r;n--;)r=e[n],7===r.type?r.remove():1===r.type&&("input"!==t||"type"in r.attributes.map||r.attr("type","text"))}),e.fix_list_elements&&f.addNodeFilter("ul,ol",function(e){for(var t=e.length,n,r;t--;)n=e[t],r=n.parent,("ul"===r.name||"ol"===r.name)&&n.prev&&"li"===n.prev.name&&n.prev.append(n)}),f.addAttributeFilter("data-mce-src,data-mce-href,data-mce-style,data-mce-selected",function(e,t){for(var n=e.length;n--;)e[n].attr(t,null)}),{schema:u,addNodeFilter:f.addNodeFilter,addAttributeFilter:f.addAttributeFilter,serialize:function(t,n){var i=this,o,d,p,m,h;return a.ie&&s.select("script,style,select,map").length>0?(h=t.innerHTML,t=t.cloneNode(!1),s.setHTML(t,h)):t=t.cloneNode(!0),o=t.ownerDocument.implementation,o.createHTMLDocument&&(d=o.createHTMLDocument(""),l("BODY"==t.nodeName?t.childNodes:[t],function(e){d.body.appendChild(d.importNode(e,!0))}),t="BODY"!=t.nodeName?d.body.firstChild:d.body,p=s.doc,s.doc=d),n=n||{},n.format=n.format||"html",n.selection&&(n.forced_root_block=""),n.no_events||(n.node=t,i.onPreProcess(n)),m=new r(e,u),n.content=m.serialize(f.parse(c(n.getInner?t.innerHTML:s.getOuterHTML(t)),n)),n.cleanup||(n.content=n.content.replace(/\uFEFF/g,"")),n.no_events||i.onPostProcess(n),p&&(s.doc=p),n.node=null,n.content},addRules:function(e){u.addValidElements(e)},setRules:function(e){u.setValidElements(e)},onPreProcess:function(e){i&&i.fire("PreProcess",e)},onPostProcess:function(e){i&&i.fire("PostProcess",e)}}}}),r(S,[],function(){function e(e){function t(t,n){var r,i=0,o,a,s,l,c,d,u=-1,f;if(r=t.duplicate(),r.collapse(n),f=r.parentElement(),f.ownerDocument===e.dom.doc){for(;"false"===f.contentEditable;)f=f.parentNode;if(!f.hasChildNodes())return{node:f,inside:1};for(s=f.children,o=s.length-1;o>=i;)if(d=Math.floor((i+o)/2),l=s[d],r.moveToElementText(l),u=r.compareEndPoints(n?"StartToStart":"EndToEnd",t),u>0)o=d-1;else{if(!(0>u))return{node:l};i=d+1}if(0>u)for(l?r.collapse(!1):(r.moveToElementText(f),r.collapse(!0),l=f,a=!0),c=0;0!==r.compareEndPoints(n?"StartToStart":"StartToEnd",t)&&0!==r.move("character",1)&&f==r.parentElement();)c++;else for(r.collapse(!0),c=0;0!==r.compareEndPoints(n?"StartToStart":"StartToEnd",t)&&0!==r.move("character",-1)&&f==r.parentElement();)c++;return{node:l,position:u,offset:c,inside:a}}}function n(){function n(e){var n=t(o,e),r,i,s=0,l,c,d;if(r=n.node,i=n.offset,n.inside&&!r.hasChildNodes())return void a[e?"setStart":"setEnd"](r,0);if(i===c)return void a[e?"setStartBefore":"setEndAfter"](r);if(n.position<0){if(l=n.inside?r.firstChild:r.nextSibling,!l)return void a[e?"setStartAfter":"setEndAfter"](r);if(!i)return void(3==l.nodeType?a[e?"setStart":"setEnd"](l,0):a[e?"setStartBefore":"setEndBefore"](l));for(;l;){if(d=l.nodeValue,s+=d.length,s>=i){r=l,s-=i,s=d.length-s;break}l=l.nextSibling}}else{if(l=r.previousSibling,!l)return a[e?"setStartBefore":"setEndBefore"](r);if(!i)return void(3==r.nodeType?a[e?"setStart":"setEnd"](l,r.nodeValue.length):a[e?"setStartAfter":"setEndAfter"](l));for(;l;){if(s+=l.nodeValue.length,s>=i){r=l,s-=i;break}l=l.previousSibling}}a[e?"setStart":"setEnd"](r,s)}var o=e.getRng(),a=i.createRng(),s,l,c,d,u;if(s=o.item?o.item(0):o.parentElement(),s.ownerDocument!=i.doc)return a;if(l=e.isCollapsed(),o.item)return a.setStart(s.parentNode,i.nodeIndex(s)),a.setEnd(a.startContainer,a.startOffset+1),a;try{n(!0),l||n()}catch(f){if(-2147024809!=f.number)throw f;u=r.getBookmark(2),c=o.duplicate(),c.collapse(!0),s=c.parentElement(),l||(c=o.duplicate(),c.collapse(!1),d=c.parentElement(),d.innerHTML=d.innerHTML),s.innerHTML=s.innerHTML,r.moveToBookmark(u),o=e.getRng(),n(!0),l||n()}return a}var r=this,i=e.dom,o=!1;this.getBookmark=function(n){function r(e){var t,n,r,o,a=[];for(t=e.parentNode,n=i.getRoot().parentNode;t!=n&&9!==t.nodeType;){for(r=t.children,o=r.length;o--;)if(e===r[o]){a.push(o);break}e=t,t=t.parentNode}return a}function o(e){var n;return n=t(a,e),n?{position:n.position,offset:n.offset,indexes:r(n.node),inside:n.inside}:void 0}var a=e.getRng(),s={};return 2===n&&(a.item?s.start={ctrl:!0,indexes:r(a.item(0))}:(s.start=o(!0),e.isCollapsed()||(s.end=o()))),s},this.moveToBookmark=function(e){function t(e){var t,n,r,o;for(t=i.getRoot(),n=e.length-1;n>=0;n--)o=t.children,r=e[n],r<=o.length-1&&(t=o[r]);return t}function n(n){var i=e[n?"start":"end"],a,s,l,c;i&&(a=i.position>0,s=o.createTextRange(),s.moveToElementText(t(i.indexes)),c=i.offset,c!==l?(s.collapse(i.inside||a),s.moveStart("character",a?-c:c)):s.collapse(n),r.setEndPoint(n?"StartToStart":"EndToStart",s),n&&r.collapse(!0))}var r,o=i.doc.body;e.start&&(e.start.ctrl?(r=o.createControlRange(),r.addElement(t(e.start.indexes)),r.select()):(r=o.createTextRange(),n(!0),n(),r.select()))},this.addRange=function(t){function n(e){var t,n,a,u,m;a=i.create("a"),t=e?s:c,n=e?l:d,u=r.duplicate(),(t==f||t==f.documentElement)&&(t=p,n=0),3==t.nodeType?(t.parentNode.insertBefore(a,t),u.moveToElementText(a),u.moveStart("character",n),i.remove(a),r.setEndPoint(e?"StartToStart":"EndToEnd",u)):(m=t.childNodes,m.length?(n>=m.length?i.insertAfter(a,m[m.length-1]):t.insertBefore(a,m[n]),u.moveToElementText(a)):t.canHaveHTML&&(t.innerHTML="",a=t.firstChild,u.moveToElementText(a),u.collapse(o)),r.setEndPoint(e?"StartToStart":"EndToEnd",u),i.remove(a))}var r,a,s,l,c,d,u,f=e.dom.doc,p=f.body,m,h;if(s=t.startContainer,l=t.startOffset,c=t.endContainer,d=t.endOffset,r=p.createTextRange(),s==c&&1==s.nodeType){if(l==d&&!s.hasChildNodes()){if(s.canHaveHTML)return u=s.previousSibling,u&&!u.hasChildNodes()&&i.isBlock(u)?u.innerHTML="":u=null,s.innerHTML="",r.moveToElementText(s.lastChild),r.select(),i.doc.selection.clear(),s.innerHTML="",void(u&&(u.innerHTML=""));l=i.nodeIndex(s),s=s.parentNode}if(l==d-1)try{if(h=s.childNodes[l],a=p.createControlRange(),a.addElement(h),a.select(),m=e.getRng(),m.item&&h===m.item(0))return}catch(g){}}n(!0),n(),r.select()},this.getRangeAt=n}return e}),r(T,[h],function(e){return{BACKSPACE:8,DELETE:46,DOWN:40,ENTER:13,LEFT:37,RIGHT:39,SPACEBAR:32,TAB:9,UP:38,modifierPressed:function(e){return e.shiftKey||e.ctrlKey||e.altKey},metaKeyPressed:function(t){return(e.mac?t.metaKey:t.ctrlKey)&&!t.altKey}}}),r(R,[T,f,h],function(e,t,n){return function(r,i){function o(e){var t=i.settings.object_resizing;return t===!1||n.iOS?!1:("string"!=typeof t&&(t="table,img,div"),"false"===e.getAttribute("data-mce-resize")?!1:i.dom.is(e,t))}function a(t){var n,r;n=t.screenX-S,r=t.screenY-T,H=n*E[2]+B,P=r*E[3]+L,H=5>H?5:H,P=5>P?5:P,(e.modifierPressed(t)||"IMG"==w.nodeName&&E[2]*E[3]!==0)&&(H=Math.round(P/D),P=Math.round(H*D)),C.setStyles(_,{width:H,height:P}),E[2]<0&&_.clientWidth<=H&&C.setStyle(_,"left",R+(B-H)),E[3]<0&&_.clientHeight<=P&&C.setStyle(_,"top",A+(L-P)),M||(i.fire("ObjectResizeStart",{target:w,width:B,height:L}),M=!0)}function s(){function e(e,t){t&&(w.style[e]||!i.schema.isValid(w.nodeName.toLowerCase(),e)?C.setStyle(w,e,t):C.setAttrib(w,e,t))}M=!1,e("width",H),e("height",P),C.unbind(O,"mousemove",a),C.unbind(O,"mouseup",s),I!=O&&(C.unbind(I,"mousemove",a),C.unbind(I,"mouseup",s)),C.remove(_),F&&"TABLE"!=w.nodeName||l(w),i.fire("ObjectResized",{target:w,width:H,height:P}),i.nodeChanged()}function l(e,t,r){var l,d,u,f,p,m=i.getBody();g(),l=C.getPos(e,m),R=l.x,A=l.y,p=e.getBoundingClientRect(),d=p.width||p.right-p.left,u=p.height||p.bottom-p.top,w!=e&&(h(),w=e,H=P=0),f=i.fire("ObjectSelected",{target:e}),o(e)&&!f.isDefaultPrevented()?x(N,function(e,o){function l(t){S=t.screenX,T=t.screenY,B=w.clientWidth,L=w.clientHeight,D=L/B,E=e,_=w.cloneNode(!0),C.addClass(_,"mce-clonedresizable"),_.contentEditable=!1,_.unSelectabe=!0,C.setStyles(_,{left:R,top:A,margin:0}),_.removeAttribute("data-mce-selected"),i.getBody().appendChild(_),C.bind(O,"mousemove",a),C.bind(O,"mouseup",s),I!=O&&(C.bind(I,"mousemove",a),C.bind(I,"mouseup",s))}var c,f;return t?void(o==t&&l(r)):(c=C.get("mceResizeHandle"+o),c?C.show(c):(f=i.getBody(),c=C.add(f,"div",{id:"mceResizeHandle"+o,"data-mce-bogus":!0,"class":"mce-resizehandle",unselectable:!0,style:"cursor:"+o+"-resize; margin:0; padding:0"}),n.ie&&(c.contentEditable=!1)),e.elm||(C.bind(c,"mousedown",function(e){e.stopImmediatePropagation(),e.preventDefault(),l(e)}),e.elm=c),void C.setStyles(c,{left:d*e[0]+R-c.offsetWidth/2,top:u*e[1]+A-c.offsetHeight/2}))}):c(),w.setAttribute("data-mce-selected","1")}function c(){var e,t;g(),w&&w.removeAttribute("data-mce-selected");for(e in N)t=C.get("mceResizeHandle"+e),t&&(C.unbind(t),C.remove(t))}function d(e){function t(e,t){if(e)do if(e===t)return!0;while(e=e.parentNode)}var n;return x(C.select("img[data-mce-selected],hr[data-mce-selected]"),function(e){e.removeAttribute("data-mce-selected")}),n="mousedown"==e.type?e.target:r.getNode(),n=C.getParent(n,F?"table":"table,img,hr"),t(n,i.getBody())&&(v(),t(r.getStart(),n)&&t(r.getEnd(),n)&&(!F||n!=r.getStart()&&"IMG"!==r.getStart().nodeName))?void l(n):void c()}function u(e,t,n){e&&e.attachEvent&&e.attachEvent("on"+t,n)}function f(e,t,n){e&&e.detachEvent&&e.detachEvent("on"+t,n)}function p(e){var t=e.srcElement,n,r,o,a,s,c,d;n=t.getBoundingClientRect(),c=k.clientX-n.left,d=k.clientY-n.top;for(r in N)if(o=N[r],a=t.offsetWidth*o[0],s=t.offsetHeight*o[1],Math.abs(a-c)<8&&Math.abs(s-d)<8){E=o;break}M=!0,i.getDoc().selection.empty(),l(t,r,k)}function m(e){var t=e.srcElement;if(t!=w){if(h(),0===t.id.indexOf("mceResizeHandle"))return void(e.returnValue=!1);("IMG"==t.nodeName||"TABLE"==t.nodeName)&&(c(),w=t,u(t,"resizestart",p))}}function h(){f(w,"resizestart",p)}function g(){for(var e in N){var t=N[e];t.elm&&(C.unbind(t.elm),delete t.elm)}}function v(){try{i.getDoc().execCommand("enableObjectResizing",!1,!1)}catch(e){}}function y(e){var t;if(F){t=O.body.createControlRange();try{return t.addElement(e),t.select(),!0}catch(n){}}}function b(){w=_=null,F&&(h(),f(i.getBody(),"controlselect",m))}var C=i.dom,x=t.each,w,_,N,E,k,S,T,R,A,B,L,D,M,H,P,O=i.getDoc(),I=document,F=n.ie&&n.ie<11;N={n:[.5,0,0,-1],e:[1,.5,1,0],s:[.5,1,0,1],w:[0,.5,-1,0],nw:[0,0,-1,-1],ne:[1,0,1,-1],se:[1,1,1,1],sw:[0,1,-1,1]};var z=".mce-content-body";return i.contentStyles.push(z+" div.mce-resizehandle {position: absolute;border: 1px solid black;background: #FFF;width: 5px;height: 5px;z-index: 10000}"+z+" .mce-resizehandle:hover {background: #000}"+z+" img[data-mce-selected], hr[data-mce-selected] {outline: 1px solid black;resize: none}"+z+" .mce-clonedresizable {position: absolute;"+(n.gecko?"":"outline: 1px dashed black;")+"opacity: .5;filter: alpha(opacity=50);z-index: 10000}"),i.on("init",function(){F?(i.on("ObjectResized",function(e){"TABLE"!=e.target.nodeName&&(c(),y(e.target))}),u(i.getBody(),"controlselect",m),i.on("mousedown",function(e){k=e})):(v(),n.ie>=11&&(i.on("mouseup",function(e){var t=e.target.nodeName;/^(TABLE|IMG|HR)$/.test(t)&&(i.selection.select(e.target,"TABLE"==t),i.nodeChanged())}),i.dom.bind(i.getBody(),"mscontrolselect",function(e){/^(TABLE|IMG|HR)$/.test(e.target.nodeName)&&(e.preventDefault(),"IMG"==e.target.tagName&&window.setTimeout(function(){i.selection.select(e.target)},0))}))),i.on("nodechange mousedown mouseup ResizeEditor",d),i.on("keydown keyup",function(e){w&&"TABLE"==w.nodeName&&d(e)})}),i.on("remove",g),{isResizable:o,showResizeRect:l,hideResizeRect:c,updateResizeRect:d,controlSelect:y,destroy:b}}}),r(A,[f,u],function(e,t){function n(e){this.walk=function(t,n){function i(e){var t;return t=e[0],3===t.nodeType&&t===l&&c>=t.nodeValue.length&&e.splice(0,1),t=e[e.length-1],0===u&&e.length>0&&t===d&&3===t.nodeType&&e.splice(e.length-1,1),e}function o(e,t,n){for(var r=[];e&&e!=n;e=e[t])r.push(e);return r}function a(e,t){do{if(e.parentNode==t)return e;e=e.parentNode}while(e)}function s(e,t,r){var a=r?"nextSibling":"previousSibling";for(h=e,g=h.parentNode;h&&h!=t;h=g)g=h.parentNode,v=o(h==e?h:h[a],a),v.length&&(r||v.reverse(),n(i(v)))}var l=t.startContainer,c=t.startOffset,d=t.endContainer,u=t.endOffset,f,p,m,h,g,v,y;if(y=e.select("td.mce-item-selected,th.mce-item-selected"),y.length>0)return void r(y,function(e){n([e])});if(1==l.nodeType&&l.hasChildNodes()&&(l=l.childNodes[c]),1==d.nodeType&&d.hasChildNodes()&&(d=d.childNodes[Math.min(u-1,d.childNodes.length-1)]),l==d)return n(i([l]));for(f=e.findCommonAncestor(l,d),h=l;h;h=h.parentNode){if(h===d)return s(l,f,!0);if(h===f)break}for(h=d;h;h=h.parentNode){if(h===l)return s(d,f);if(h===f)break}p=a(l,f)||l,m=a(d,f)||d,s(l,p,!0),v=o(p==l?p:p.nextSibling,"nextSibling",m==d?m.nextSibling:m),v.length&&n(i(v)),s(d,m)},this.split=function(e){function t(e,t){return e.splitText(t)}var n=e.startContainer,r=e.startOffset,i=e.endContainer,o=e.endOffset;return n==i&&3==n.nodeType?r>0&&rr?(o-=r,n=i=t(i,o).previousSibling,o=i.nodeValue.length,r=0):o=0):(3==n.nodeType&&r>0&&r0&&o0)return c=p,d=n?p.nodeValue.length:0,void(i=!0);if(e.isBlock(p)||m[p.nodeName.toLowerCase()])return;s=p}o&&s&&(c=s,i=!0,d=0)}var c,d,u,f=e.getRoot(),p,m,h,g,v;if(c=n[(r?"start":"end")+"Container"],d=n[(r?"start":"end")+"Offset"],v=1==c.nodeType&&d===c.childNodes.length,m=e.schema.getNonEmptyElements(),g=r,1==c.nodeType&&d>c.childNodes.length-1&&(g=!1),9===c.nodeType&&(c=e.getRoot(),d=0),c===f){if(g&&(p=c.childNodes[d>0?d-1:0],p&&(h=p.nodeName.toLowerCase(),m[p.nodeName]||"TABLE"==p.nodeName)))return;if(c.hasChildNodes()&&(d=Math.min(!g&&d>0?d-1:d,c.childNodes.length-1),c=c.childNodes[d],d=0,c.hasChildNodes()&&!/TABLE/.test(c.nodeName))){p=c,u=new t(c,f);do{if(3===p.nodeType&&p.nodeValue.length>0){d=g?0:p.nodeValue.length,c=p,i=!0;break}if(m[p.nodeName.toLowerCase()]){d=e.nodeIndex(p),c=p.parentNode,"IMG"!=p.nodeName||g||d++,i=!0;break}}while(p=g?u.next():u.prev())}}o&&(3===c.nodeType&&0===d&&l(!0),1===c.nodeType&&(p=c.childNodes[d],p||(p=c.childNodes[d-1]),!p||"BR"!==p.nodeName||s(p,"A")||a(p)||a(p,!0)||l(!0,p))),g&&!o&&3===c.nodeType&&d===c.nodeValue.length&&l(!1),i&&n["set"+(r?"Start":"End")](c,d)}var i,o;return o=n.collapsed,r(!0),o||r(),i&&o&&n.collapse(!0),i}}var r=e.each;return n.compareRanges=function(e,t){if(e&&t){if(!e.item&&!e.duplicate)return e.startContainer==t.startContainer&&e.startOffset==t.startOffset;if(e.item&&t.item&&e.item(0)===t.item(0))return!0;if(e.isEqual&&t.isEqual&&t.isEqual(e))return!0}return!1},n}),r(B,[u,S,R,A,h,f],function(e,n,r,i,o,a){function s(e,t,i,o){var a=this;a.dom=e,a.win=t,a.serializer=i,a.editor=o,a.controlSelection=new r(a,o),a.win.getSelection||(a.tridentSel=new n(a))}var l=a.each,c=a.grep,d=a.trim,u=o.ie,f=o.opera;return s.prototype={setCursorLocation:function(e,t){var n=this,r=n.dom.createRng();e?(r.setStart(e,t),r.setEnd(e,t),n.setRng(r),n.collapse(!1)):(n._moveEndPoint(r,n.editor.getBody(),!0),n.setRng(r))},getContent:function(e){var n=this,r=n.getRng(),i=n.dom.create("body"),o=n.getSel(),a,s,l;return e=e||{},a=s="",e.get=!0,e.format=e.format||"html",e.selection=!0,n.editor.fire("BeforeGetContent",e),"text"==e.format?n.isCollapsed()?"":r.text||(o.toString?o.toString():""):(r.cloneContents?(l=r.cloneContents(),l&&i.appendChild(l)):r.item!==t||r.htmlText!==t?(i.innerHTML="
    "+(r.item?r.item(0).outerHTML:r.htmlText),i.removeChild(i.firstChild)):i.innerHTML=r.toString(),/^\s/.test(i.innerHTML)&&(a=" "),/\s+$/.test(i.innerHTML)&&(s=" "),e.getInner=!0,e.content=n.isCollapsed()?"":a+n.serializer.serialize(i,e)+s,n.editor.fire("GetContent",e),e.content)},setContent:function(e,t){var n=this,r=n.getRng(),i,o=n.win.document,a,s;if(t=t||{format:"html"},t.set=!0,t.selection=!0,e=t.content=e,t.no_events||n.editor.fire("BeforeSetContent",t),e=t.content,r.insertNode){e+='_',r.startContainer==o&&r.endContainer==o?o.body.innerHTML=e:(r.deleteContents(),0===o.body.childNodes.length?o.body.innerHTML=e:r.createContextualFragment?r.insertNode(r.createContextualFragment(e)):(a=o.createDocumentFragment(),s=o.createElement("div"),a.appendChild(s),s.outerHTML=e,r.insertNode(a))),i=n.dom.get("__caret"),r=o.createRange(),r.setStartBefore(i),r.setEndBefore(i),n.setRng(r),n.dom.remove("__caret");try{n.setRng(r)}catch(l){}}else r.item&&(o.execCommand("Delete",!1,null),r=n.getRng()),/^\s+/.test(e)?(r.pasteHTML('_'+e),n.dom.remove("__mce_tmp")):r.pasteHTML(e);t.no_events||n.editor.fire("SetContent",t)},getStart:function(){var e=this,t=e.getRng(),n,r,i,o;if(t.duplicate||t.item){if(t.item)return t.item(0);for(i=t.duplicate(),i.collapse(1),n=i.parentElement(),n.ownerDocument!==e.dom.doc&&(n=e.dom.getRoot()),r=o=t.parentElement();o=o.parentNode;)if(o==n){n=r;break}return n}return n=t.startContainer,1==n.nodeType&&n.hasChildNodes()&&(n=n.childNodes[Math.min(n.childNodes.length-1,t.startOffset)]),n&&3==n.nodeType?n.parentNode:n},getEnd:function(){var e=this,t=e.getRng(),n,r;return t.duplicate||t.item?t.item?t.item(0):(t=t.duplicate(),t.collapse(0),n=t.parentElement(),n.ownerDocument!==e.dom.doc&&(n=e.dom.getRoot()),n&&"BODY"==n.nodeName?n.lastChild||n:n):(n=t.endContainer,r=t.endOffset,1==n.nodeType&&n.hasChildNodes()&&(n=n.childNodes[r>0?r-1:r]),n&&3==n.nodeType?n.parentNode:n)},getBookmark:function(e,t){function n(e,t){var n=0;return l(a.select(e),function(e,r){e==t&&(n=r)}),n}function r(e){function t(t){var n,r,i,o=t?"start":"end";n=e[o+"Container"],r=e[o+"Offset"],1==n.nodeType&&"TR"==n.nodeName&&(i=n.childNodes,n=i[Math.min(t?r:r-1,i.length-1)],n&&(r=t?0:n.childNodes.length,e["set"+(t?"Start":"End")](n,r)))}return t(!0),t(),e}function i(){function e(e,n){var i=e[n?"startContainer":"endContainer"],a=e[n?"startOffset":"endOffset"],s=[],l,c,d=0;if(3==i.nodeType){if(t)for(l=i.previousSibling;l&&3==l.nodeType;l=l.previousSibling)a+=l.nodeValue.length;s.push(a)}else c=i.childNodes,a>=c.length&&c.length&&(d=1,a=Math.max(0,c.length-1)),s.push(o.dom.nodeIndex(c[a],t)+d);for(;i&&i!=r;i=i.parentNode)s.push(o.dom.nodeIndex(i,t));return s}var n=o.getRng(!0),r=a.getRoot(),i={};return i.start=e(n,!0),o.isCollapsed()||(i.end=e(n)),i}var o=this,a=o.dom,s,c,d,u,f,p,m="",h;if(2==e)return p=o.getNode(),f=p?p.nodeName:null,"IMG"==f?{name:f,index:n(f,p)}:o.tridentSel?o.tridentSel.getBookmark(e):i();if(e)return{rng:o.getRng()};if(s=o.getRng(),d=a.uniqueId(),u=o.isCollapsed(),h="overflow:hidden;line-height:0px",s.duplicate||s.item){if(s.item)return p=s.item(0),f=p.nodeName,{name:f,index:n(f,p)};c=s.duplicate();try{s.collapse(),s.pasteHTML(''+m+""),u||(c.collapse(!1),s.moveToElementText(c.parentElement()),0===s.compareEndPoints("StartToEnd",c)&&c.move("character",-1),c.pasteHTML(''+m+""))}catch(g){return null}}else{if(p=o.getNode(),f=p.nodeName,"IMG"==f)return{name:f,index:n(f,p)};c=r(s.cloneRange()),u||(c.collapse(!1),c.insertNode(a.create("span",{"data-mce-type":"bookmark",id:d+"_end",style:h},m))),s=r(s),s.collapse(!0),s.insertNode(a.create("span",{"data-mce-type":"bookmark",id:d+"_start",style:h},m))}return o.moveToBookmark({id:d,keep:1}),{id:d}},moveToBookmark:function(e){function t(t){var n=e[t?"start":"end"],r,i,o,l;if(n){for(o=n[0],i=s,r=n.length-1;r>=1;r--){if(l=i.childNodes,n[r]>l.length-1)return;i=l[n[r]]}3===i.nodeType&&(o=Math.min(n[0],i.nodeValue.length)),1===i.nodeType&&(o=Math.min(n[0],i.childNodes.length)),t?a.setStart(i,o):a.setEnd(i,o)}return!0}function n(t){var n=o.get(e.id+"_"+t),r,i,a,s,u=e.keep;if(n&&(r=n.parentNode,"start"==t?(u?(r=n.firstChild,i=1):i=o.nodeIndex(n),d=p=r,m=h=i):(u?(r=n.firstChild,i=1):i=o.nodeIndex(n),p=r,h=i),!u)){for(s=n.previousSibling,a=n.nextSibling,l(c(n.childNodes),function(e){3==e.nodeType&&(e.nodeValue=e.nodeValue.replace(/\uFEFF/g,""))});n=o.get(e.id+"_"+t);)o.remove(n,1);s&&a&&s.nodeType==a.nodeType&&3==s.nodeType&&!f&&(i=s.nodeValue.length,s.appendData(a.nodeValue),o.remove(a),"start"==t?(d=p=s,m=h=i):(p=s,h=i))}}function r(e){return!o.isBlock(e)||e.innerHTML||u||(e.innerHTML='
    '),e}var i=this,o=i.dom,a,s,d,p,m,h;if(e)if(e.start){if(a=o.createRng(),s=o.getRoot(),i.tridentSel)return i.tridentSel.moveToBookmark(e);t(!0)&&t()&&i.setRng(a)}else e.id?(n("start"),n("end"),d&&(a=o.createRng(),a.setStart(r(d),m),a.setEnd(r(p),h),i.setRng(a))):e.name?i.select(o.select(e.name)[e.index]):e.rng&&i.setRng(e.rng)},select:function(e,t){var n=this,r=n.dom,i=r.createRng(),o;if(n.lastFocusBookmark=null,e){if(!t&&n.controlSelection.controlSelect(e))return;o=r.nodeIndex(e),i.setStart(e.parentNode,o),i.setEnd(e.parentNode,o+1),t&&(n._moveEndPoint(i,e,!0),n._moveEndPoint(i,e)),n.setRng(i)}return e},isCollapsed:function(){var e=this,t=e.getRng(),n=e.getSel();return!t||t.item?!1:t.compareEndPoints?0===t.compareEndPoints("StartToEnd",t):!n||t.collapsed},collapse:function(e){var t=this,n=t.getRng(),r;n.item&&(r=n.item(0),n=t.win.document.body.createTextRange(),n.moveToElementText(r)),n.collapse(!!e),t.setRng(n)},getSel:function(){var e=this.win;return e.getSelection?e.getSelection():e.document.selection},getRng:function(e){function t(e,t,n){try{return t.compareBoundaryPoints(e,n)}catch(r){return-1}}var n=this,r,i,o,a=n.win.document,s;if(!e&&n.lastFocusBookmark){var l=n.lastFocusBookmark;return l.startContainer?(i=a.createRange(),i.setStart(l.startContainer,l.startOffset),i.setEnd(l.endContainer,l.endOffset)):i=l,i}if(e&&n.tridentSel)return n.tridentSel.getRangeAt(0);try{(r=n.getSel())&&(i=r.rangeCount>0?r.getRangeAt(0):r.createRange?r.createRange():a.createRange())}catch(c){}if(u&&i&&i.setStart&&a.selection){try{s=a.selection.createRange()}catch(c){}s&&s.item&&(o=s.item(0),i=a.createRange(),i.setStartBefore(o),i.setEndAfter(o))}return i||(i=a.createRange?a.createRange():a.body.createTextRange()),i.setStart&&9===i.startContainer.nodeType&&i.collapsed&&(o=n.dom.getRoot(),i.setStart(o,0),i.setEnd(o,0)),n.selectedRange&&n.explicitRange&&(0===t(i.START_TO_START,i,n.selectedRange)&&0===t(i.END_TO_END,i,n.selectedRange)?i=n.explicitRange:(n.selectedRange=null,n.explicitRange=null)),i},setRng:function(e,t){var n=this,r;if(e.select)try{e.select()}catch(i){}else if(n.tridentSel){if(e.cloneRange)try{return void n.tridentSel.addRange(e)}catch(i){}}else if(r=n.getSel()){n.explicitRange=e;try{r.removeAllRanges(),r.addRange(e)}catch(i){}t===!1&&r.extend&&(r.collapse(e.endContainer,e.endOffset),r.extend(e.startContainer,e.startOffset)),n.selectedRange=r.rangeCount>0?r.getRangeAt(0):null}},setNode:function(e){var t=this;return t.setContent(t.dom.getOuterHTML(e)),e},getNode:function(){function e(e,t){for(var n=e;e&&3===e.nodeType&&0===e.length;)e=t?e.nextSibling:e.previousSibling;return e||n}var t=this,n=t.getRng(),r,i=n.startContainer,o=n.endContainer,a=n.startOffset,s=n.endOffset,l=t.dom.getRoot();return n?n.setStart?(r=n.commonAncestorContainer,!n.collapsed&&(i==o&&2>s-a&&i.hasChildNodes()&&(r=i.childNodes[a]),3===i.nodeType&&3===o.nodeType&&(i=i.length===a?e(i.nextSibling,!0):i.parentNode,o=0===s?e(o.previousSibling,!1):o.parentNode,i&&i===o))?i:r&&3==r.nodeType?r.parentNode:r):(r=n.item?n.item(0):n.parentElement(),r.ownerDocument!==t.win.document&&(r=l),r):l},getSelectedBlocks:function(t,n){var r=this,i=r.dom,o,a,s=[];if(a=i.getRoot(),t=i.getParent(t||r.getStart(),i.isBlock),n=i.getParent(n||r.getEnd(),i.isBlock),t&&t!=a&&s.push(t),t&&n&&t!=n){o=t;for(var l=new e(t,a);(o=l.next())&&o!=n;)i.isBlock(o)&&s.push(o)}return n&&t!=n&&n!=a&&s.push(n),s},isForward:function(){var e=this.dom,t=this.getSel(),n,r;return t&&t.anchorNode&&t.focusNode?(n=e.createRng(),n.setStart(t.anchorNode,t.anchorOffset),n.collapse(!0),r=e.createRng(),r.setStart(t.focusNode,t.focusOffset),r.collapse(!0),n.compareBoundaryPoints(n.START_TO_START,r)<=0):!0},normalize:function(){var e=this,t=e.getRng();return!u&&new i(e.dom).normalize(t)&&e.setRng(t,e.isForward()),t},selectorChanged:function(e,t){var n=this,r;return n.selectorChangedData||(n.selectorChangedData={},r={},n.editor.on("NodeChange",function(e){var t=e.element,i=n.dom,o=i.getParents(t,null,i.getRoot()),a={};l(n.selectorChangedData,function(e,t){l(o,function(n){return i.is(n,t)?(r[t]||(l(e,function(e){e(!0,{node:n,selector:t,parents:o})}),r[t]=e),a[t]=e,!1):void 0})}),l(r,function(e,n){a[n]||(delete r[n],l(e,function(e){e(!1,{node:t,selector:n,parents:o})}))})})),n.selectorChangedData[e]||(n.selectorChangedData[e]=[]),n.selectorChangedData[e].push(t),n},getScrollContainer:function(){for(var e,t=this.dom.getRoot();t&&"BODY"!=t.nodeName;){if(t.scrollHeight>t.clientHeight){e=t;break}t=t.parentNode}return e},scrollIntoView:function(e){function t(e){for(var t=0,n=0,r=e;r&&r.nodeType;)t+=r.offsetLeft||0,n+=r.offsetTop||0,r=r.offsetParent;return{x:t,y:n}}var n,r,i=this,o=i.dom,a=o.getRoot(),s,l;if("BODY"!=a.nodeName){var c=i.getScrollContainer();if(c)return n=t(e).y-t(c).y,l=c.clientHeight,s=c.scrollTop,void((s>n||n+25>s+l)&&(c.scrollTop=s>n?n:n-l+25))}r=o.getViewPort(i.editor.getWin()),n=o.getPos(e).y,s=r.y,l=r.h,(ns+l)&&i.editor.getWin().scrollTo(0,s>n?n:n-l+25)},_moveEndPoint:function(t,n,r){var i=n,a=new e(n,i),s=this.dom.schema.getNonEmptyElements();do{if(3==n.nodeType&&0!==d(n.nodeValue).length)return void(r?t.setStart(n,0):t.setEnd(n,n.nodeValue.length));if(s[n.nodeName])return void(r?t.setStartBefore(n):"BR"==n.nodeName?t.setEndBefore(n):t.setEndAfter(n));if(o.ie&&o.ie<11&&this.dom.isBlock(n)&&this.dom.isEmpty(n))return void(r?t.setStart(n,0):t.setEnd(n,0))}while(n=r?a.next():a.prev());"BODY"==i.nodeName&&(r?t.setStart(i,0):t.setEnd(i,i.childNodes.length))},destroy:function(){this.win=null,this.controlSelection.destroy()}},s}),r(L,[u,A,f],function(e,t,n){return function(r){function i(e){return e.nodeType&&(e=e.nodeName),!!r.schema.getTextBlockElements()[e.toLowerCase()]}function o(e,t){return I.getParents(e,t,I.getRoot())}function a(e){return 1===e.nodeType&&"_mce_caret"===e.id}function s(){d({alignleft:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"left"},defaultBlock:"div"},{selector:"img,table",collapsed:!1,styles:{"float":"left"}}],aligncenter:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"center"},defaultBlock:"div"},{selector:"img",collapsed:!1,styles:{display:"block",marginLeft:"auto",marginRight:"auto"}},{selector:"table",collapsed:!1,styles:{marginLeft:"auto",marginRight:"auto"}}],alignright:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"right"},defaultBlock:"div"},{selector:"img,table",collapsed:!1,styles:{"float":"right"}}],alignjustify:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"justify"},defaultBlock:"div"}],bold:[{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}},{inline:"b",remove:"all"}],italic:[{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}},{inline:"i",remove:"all"}],underline:[{inline:"span",styles:{textDecoration:"underline"},exact:!0},{inline:"u",remove:"all"}],strikethrough:[{inline:"span",styles:{textDecoration:"line-through"},exact:!0},{inline:"strike",remove:"all"}],forecolor:{inline:"span",styles:{color:"%value"},wrap_links:!1},hilitecolor:{inline:"span",styles:{backgroundColor:"%value"},wrap_links:!1},fontname:{inline:"span",styles:{fontFamily:"%value"}},fontsize:{inline:"span",styles:{fontSize:"%value"}},fontsize_class:{inline:"span",attributes:{"class":"%value"}},blockquote:{block:"blockquote",wrapper:1,remove:"all"},subscript:{inline:"sub"},superscript:{inline:"sup"},code:{inline:"code"},link:{inline:"a",selector:"a",remove:"all",split:!0,deep:!0,onmatch:function(){return!0 +},onformat:function(e,t,n){et(n,function(t,n){I.setAttrib(e,n,t)})}},removeformat:[{selector:"b,strong,em,i,font,u,strike,sub,sup,dfn,code,samp,kbd,var,cite,mark,q",remove:"all",split:!0,expand:!1,block_expand:!0,deep:!0},{selector:"span",attributes:["style","class"],remove:"empty",split:!0,expand:!1,deep:!0},{selector:"*",attributes:["style","class"],split:!1,expand:!1,deep:!0}]}),et("p h1 h2 h3 h4 h5 h6 div address pre div dt dd samp".split(/\s/),function(e){d(e,{block:e,remove:"all"})}),d(r.settings.formats)}function l(){r.addShortcut("ctrl+b","bold_desc","Bold"),r.addShortcut("ctrl+i","italic_desc","Italic"),r.addShortcut("ctrl+u","underline_desc","Underline");for(var e=1;6>=e;e++)r.addShortcut("ctrl+"+e,"",["FormatBlock",!1,"h"+e]);r.addShortcut("ctrl+7","",["FormatBlock",!1,"p"]),r.addShortcut("ctrl+8","",["FormatBlock",!1,"div"]),r.addShortcut("ctrl+9","",["FormatBlock",!1,"address"])}function c(e){return e?O[e]:O}function d(e,t){e&&("string"!=typeof e?et(e,function(e,t){d(t,e)}):(t=t.length?t:[t],et(t,function(e){e.deep===X&&(e.deep=!e.selector),e.split===X&&(e.split=!e.selector||e.inline),e.remove===X&&e.selector&&!e.inline&&(e.remove="none"),e.selector&&e.inline&&(e.mixed=!0,e.block_expand=!0),"string"==typeof e.classes&&(e.classes=e.classes.split(/\s+/))}),O[e]=t))}function u(e){var t;return r.dom.getParent(e,function(e){return t=r.dom.getStyle(e,"text-decoration"),t&&"none"!==t}),t}function f(e){var t;1===e.nodeType&&e.parentNode&&1===e.parentNode.nodeType&&(t=u(e.parentNode),r.dom.getStyle(e,"color")&&t?r.dom.setStyle(e,"text-decoration",t):r.dom.getStyle(e,"textdecoration")===t&&r.dom.setStyle(e,"text-decoration",null))}function p(t,n,o){function s(e,t){t=t||h,e&&(t.onformat&&t.onformat(e,t,n,o),et(t.styles,function(t,r){I.setStyle(e,r,E(t,n))}),et(t.attributes,function(t,r){I.setAttrib(e,r,E(t,n))}),et(t.classes,function(t){t=E(t,n),I.hasClass(e,t)||I.addClass(e,t)}))}function l(){function t(t,n){var r=new e(n);for(o=r.current();o;o=r.prev())if(o.childNodes.length>1||o==t||"BR"==o.tagName)return o}var n=r.selection.getRng(),i=n.startContainer,a=n.endContainer;if(i!=a&&0===n.endOffset){var s=t(i,a),l=3==s.nodeType?s.length:s.childNodes.length;n.setEnd(s,l)}return n}function d(e,t,n,r,i){var o=[],a=-1,s,l=-1,c=-1,d;return et(e.childNodes,function(e,t){return"UL"===e.nodeName||"OL"===e.nodeName?(a=t,s=e,!1):void 0}),et(e.childNodes,function(e,n){"SPAN"===e.nodeName&&"bookmark"==I.getAttrib(e,"data-mce-type")&&(e.id==t.id+"_start"?l=n:e.id==t.id+"_end"&&(c=n))}),0>=a||a>l&&c>a?(et(tt(e.childNodes),i),0):(d=I.clone(n,K),et(tt(e.childNodes),function(e,t){(a>l&&a>t||l>a&&t>a)&&(o.push(e),e.parentNode.removeChild(e))}),a>l?e.insertBefore(d,s):l>a&&e.insertBefore(d,s.nextSibling),r.push(d),et(o,function(e){d.appendChild(e)}),d)}function u(e,r,o){var l=[],c,u,f=!0;c=h.inline||h.block,u=I.create(c),s(u),z.walk(e,function(e){function p(e){var y,C,x,_,N;return N=f,y=e.nodeName.toLowerCase(),C=e.parentNode.nodeName.toLowerCase(),1===e.nodeType&&J(e)&&(N=f,f="true"===J(e),_=!0),w(y,"br")?(v=0,void(h.block&&I.remove(e))):h.wrapper&&g(e,t,n)?void(v=0):f&&!_&&h.block&&!h.wrapper&&i(y)&&W(C,c)?(e=I.rename(e,c),s(e),l.push(e),void(v=0)):h.selector&&(et(m,function(t){"collapsed"in t&&t.collapsed!==b||I.is(e,t.selector)&&!a(e)&&(s(e,t),x=!0)}),!h.inline||x)?void(v=0):void(!f||_||!W(c,y)||!W(C,c)||!o&&3===e.nodeType&&1===e.nodeValue.length&&65279===e.nodeValue.charCodeAt(0)||a(e)||h.inline&&V(e)?"li"==y&&r?v=d(e,r,u,l,p):(v=0,et(tt(e.childNodes),p),_&&(f=N),v=0):(v||(v=I.clone(u,K),e.parentNode.insertBefore(v,e),l.push(v)),v.appendChild(e)))}var v;et(e,p)}),h.wrap_links===!1&&et(l,function(e){function t(e){var n,r,i;if("A"===e.nodeName){for(r=I.clone(u,K),l.push(r),i=tt(e.childNodes),n=0;n1||!V(e))&&0===o)return void I.remove(e,1);if(h.inline||h.wrapper){if(h.exact||1!==o||(e=i(e)),et(m,function(t){et(I.select(t.inline,e),function(e){var r;if(!L(e)){if(t.wrap_links===!1){r=e.parentNode;do if("A"===r.nodeName)return;while(r=r.parentNode)}R(t,n,e,t.exact?e:null)}})}),g(e.parentNode,t,n))return I.remove(e,1),e=0,Y;h.merge_with_parents&&I.getParent(e.parentNode,function(r){return g(r,t,n)?(I.remove(e,1),e=0,Y):void 0}),e&&h.merge_siblings!==!1&&(e=D(B(e),e),e=D(e,B(e,Y)))}})}var m=c(t),h=m[0],v,y,b=!o&&F.isCollapsed();if(h)if(o)o.nodeType?(y=I.createRng(),y.setStartBefore(o),y.setEndAfter(o),u(T(y,m),null,!0)):u(o,null,!0);else if(b&&h.inline&&!I.select("td.mce-item-selected,th.mce-item-selected").length)H("apply",t,n);else{var C=r.selection.getNode();U||!m[0].defaultBlock||I.getParent(C,I.isBlock)||p(m[0].defaultBlock),r.selection.setRng(l()),v=F.getBookmark(),u(T(F.getRng(Y),m),v),h.styles&&(h.styles.color||h.styles.textDecoration)&&(nt(C,f,"childNodes"),f(C)),F.moveToBookmark(v),P(F.getRng(Y)),r.nodeChanged()}}function m(e,t,n){function i(e){var n,r,o,a,s;if(1===e.nodeType&&J(e)&&(a=b,b="true"===J(e),s=!0),n=tt(e.childNodes),b&&!s)for(r=0,o=p.length;o>r&&!R(p[r],t,e,e);r++);if(m.deep&&n.length){for(r=0,o=n.length;o>r;r++)i(n[r]);s&&(b=a)}}function a(n){var r;return et(o(n.parentNode).reverse(),function(n){var i;r||"_start"==n.id||"_end"==n.id||(i=g(n,e,t),i&&i.split!==!1&&(r=n))}),r}function s(e,n,r,i){var o,a,s,l,c,d;if(e){for(d=e.parentNode,o=n.parentNode;o&&o!=d;o=o.parentNode){for(a=I.clone(o,K),c=0;c=0;a--){if(s=t[a].selector,!s||t[a].defaultBlock)return Y;for(i=r.length-1;i>=0;i--)if(I.is(r[i],s))return Y}return K}function C(e,t,n){var i;return G||(G={},i={},r.on("NodeChange",function(e){var t=o(e.element),n={};et(G,function(e,r){et(t,function(o){return g(o,r,{},e.similar)?(i[r]||(et(e,function(e){e(!0,{node:o,format:r,parents:t})}),i[r]=e),n[r]=e,!1):void 0})}),et(i,function(r,o){n[o]||(delete i[o],et(r,function(n){n(!1,{node:e.element,format:o,parents:t})}))})})),et(e.split(","),function(e){G[e]||(G[e]=[],G[e].similar=n),G[e].push(t)}),this}function x(e,t){return w(e,t.inline)?Y:w(e,t.block)?Y:t.selector?1==e.nodeType&&I.is(e,t.selector):void 0}function w(e,t){return e=e||"",t=t||"",e=""+(e.nodeName||e),t=""+(t.nodeName||t),e.toLowerCase()==t.toLowerCase()}function _(e,t){return N(I.getStyle(e,t),t)}function N(e,t){return("color"==t||"backgroundColor"==t)&&(e=I.toHex(e)),"fontWeight"==t&&700==e&&(e="bold"),"fontFamily"==t&&(e=e.replace(/[\'\"]/g,"").replace(/,\s+/g,",")),""+e}function E(e,t){return"string"!=typeof e?e=e(t):t&&(e=e.replace(/%(\w+)/g,function(e,n){return t[n]||e})),e}function k(e){return e&&3===e.nodeType&&/^([\t \r\n]+|)$/.test(e.nodeValue)}function S(e,t,n){var r=I.create(t,n);return e.parentNode.insertBefore(r,e),r.appendChild(e),r}function T(t,n,a){function s(e){function t(e){return"BR"==e.nodeName&&e.getAttribute("data-mce-bogus")&&!e.nextSibling}var r,i,o,a,s;if(r=i=e?g:y,a=e?"previousSibling":"nextSibling",s=I.getRoot(),3==r.nodeType&&!k(r)&&(e?v>0:br?n:r,-1===n||a||n++):(n=o.indexOf(" ",t),r=o.indexOf("\xa0",t),n=-1!==n&&(-1===r||r>n)?n:r),n}var s,l,c,d;if(3===t.nodeType){if(c=o(t,n),-1!==c)return{container:t,offset:c};d=t}for(s=new e(t,I.getParent(t,V)||r.getBody());l=s[i?"prev":"next"]();)if(3===l.nodeType){if(d=l,c=o(l),-1!==c)return{container:l,offset:c}}else if(V(l))break;return d?(n=i?0:d.length,{container:d,offset:n}):void 0}function u(e,r){var i,a,s,l;for(3==e.nodeType&&0===e.nodeValue.length&&e[r]&&(e=e[r]),i=o(e),a=0;ap?p:v],3==g.nodeType&&(v=0)),1==y.nodeType&&y.hasChildNodes()&&(p=y.childNodes.length-1,y=y.childNodes[b>p?p:b-1],3==y.nodeType&&(b=y.nodeValue.length)),g=c(g),y=c(y),(L(g.parentNode)||L(g))&&(g=L(g)?g:g.parentNode,g=g.nextSibling||g,3==g.nodeType&&(v=0)),(L(y.parentNode)||L(y))&&(y=L(y)?y:y.parentNode,y=y.previousSibling||y,3==y.nodeType&&(b=y.length)),n[0].inline&&(t.collapsed&&(h=d(g,v,!0),h&&(g=h.container,v=h.offset),h=d(y,b),h&&(y=h.container,b=h.offset)),m=l(y,b),m.node)){for(;m.node&&0===m.offset&&m.node.previousSibling;)m=l(m.node.previousSibling);m.node&&m.offset>0&&3===m.node.nodeType&&" "===m.node.nodeValue.charAt(m.offset-1)&&m.offset>1&&(y=m.node,y.splitText(m.offset-1))}return(n[0].inline||n[0].block_expand)&&(n[0].inline&&3==g.nodeType&&0!==v||(g=s(!0)),n[0].inline&&3==y.nodeType&&b!==y.nodeValue.length||(y=s())),n[0].selector&&n[0].expand!==K&&!n[0].inline&&(g=u(g,"previousSibling"),y=u(y,"nextSibling")),(n[0].block||n[0].selector)&&(g=f(g,"previousSibling"),y=f(y,"nextSibling"),n[0].block&&(V(g)||(g=s(!0)),V(y)||(y=s()))),1==g.nodeType&&(v=q(g),g=g.parentNode),1==y.nodeType&&(b=q(y)+1,y=y.parentNode),{startContainer:g,startOffset:v,endContainer:y,endOffset:b}}function R(e,t,n,r){var i,o,a;if(!x(n,e))return K;if("all"!=e.remove)for(et(e.styles,function(e,i){e=N(E(e,t),i),"number"==typeof i&&(i=e,r=0),(!r||w(_(r,i),e))&&I.setStyle(n,i,""),a=1}),a&&""===I.getAttrib(n,"style")&&(n.removeAttribute("style"),n.removeAttribute("data-mce-style")),et(e.attributes,function(e,i){var o;if(e=E(e,t),"number"==typeof i&&(i=e,r=0),!r||w(I.getAttrib(r,i),e)){if("class"==i&&(e=I.getAttrib(n,i),e&&(o="",et(e.split(/\s+/),function(e){/mce\w+/.test(e)&&(o+=(o?" ":"")+e)}),o)))return void I.setAttrib(n,i,o);"class"==i&&n.removeAttribute("className"),$.test(i)&&n.removeAttribute("data-mce-"+i),n.removeAttribute(i)}}),et(e.classes,function(e){e=E(e,t),(!r||I.hasClass(r,e))&&I.removeClass(n,e)}),o=I.getAttribs(n),i=0;ia?a:o]),3===i.nodeType&&n&&o>=i.nodeValue.length&&(i=new e(i,r.getBody()).next()||i),3!==i.nodeType||n||0!==o||(i=new e(i,r.getBody()).prev()||i),i}function H(t,n,o){function a(e){var t=I.create("span",{id:y,"data-mce-bogus":!0,style:b?"color:red":""});return e&&t.appendChild(r.getDoc().createTextNode(j)),t}function s(e,t){for(;e;){if(3===e.nodeType&&e.nodeValue!==j||e.childNodes.length>1)return!1;t&&1===e.nodeType&&t.push(e),e=e.firstChild}return!0}function l(e){for(;e;){if(e.id===y)return e;e=e.parentNode}}function d(t){var n;if(t)for(n=new e(t,t),t=n.current();t;t=n.next())if(3===t.nodeType)return t}function u(e,t){var n,r;if(e)r=F.getRng(!0),s(e)?(t!==!1&&(r.setStartBefore(e),r.setEndBefore(e)),I.remove(e)):(n=d(e),n.nodeValue.charAt(0)===j&&(n=n.deleteData(0,1)),I.remove(e,1)),F.setRng(r);else if(e=l(F.getStart()),!e)for(;e=I.get(y);)u(e,!1)}function f(){var e,t,r,i,s,u,f;e=F.getRng(!0),i=e.startOffset,u=e.startContainer,f=u.nodeValue,t=l(F.getStart()),t&&(r=d(t)),f&&i>0&&i=0;p--)d.appendChild(I.clone(f[p],!1)),d=d.firstChild;d.appendChild(I.doc.createTextNode(j)),d=d.firstChild;var v=I.getParent(u,i);v&&I.isEmpty(v)?u.parentNode.replaceChild(h,u):I.insertAfter(h,u),F.setCursorLocation(d,1),I.isEmpty(u)&&I.remove(u)}}function v(){var e;e=l(F.getStart()),e&&!I.isEmpty(e)&&nt(e,function(e){1!=e.nodeType||e.id===y||I.isEmpty(e)||I.setAttrib(e,"data-mce-bogus",null)},"childNodes")}var y="_mce_caret",b=r.settings.caret_debug;r._hasCaretEvents||(Z=function(){var e=[],t;if(s(l(F.getStart()),e))for(t=e.length;t--;)I.setAttrib(e[t],"data-mce-bogus","1")},Q=function(e){var t=e.keyCode;u(),(8==t||37==t||39==t)&&u(l(F.getStart())),v()},r.on("SetContent",function(e){e.selection&&v()}),r._hasCaretEvents=!0),"apply"==t?f():h()}function P(t){var n=t.startContainer,r=t.startOffset,i,o,a,s,l;if(3==n.nodeType&&r>=n.nodeValue.length&&(r=q(n),n=n.parentNode,i=!0),1==n.nodeType)for(s=n.childNodes,n=s[Math.min(r,s.length-1)],o=new e(n,I.getParent(n,I.isBlock)),(r>s.length-1||i)&&o.next(),a=o.current();a;a=o.next())if(3==a.nodeType&&!k(a))return l=I.create("a",null,j),a.parentNode.insertBefore(l,a),t.setStart(a,0),F.setRng(t),void I.remove(l)}var O={},I=r.dom,F=r.selection,z=new t(I),W=r.schema.isValidChild,V=I.isBlock,U=r.settings.forced_root_block,q=I.nodeIndex,j="\ufeff",$=/^(src|href|style)$/,K=!1,Y=!0,G,X,J=I.getContentEditable,Q,Z,et=n.each,tt=n.grep,nt=n.walk,rt=n.extend;rt(this,{get:c,register:d,apply:p,remove:m,toggle:h,match:v,matchAll:y,matchNode:g,canApply:b,formatChanged:C}),s(),l(),r.on("BeforeGetContent",function(){Z&&Z()}),r.on("mouseup keydown",function(e){Q&&Q(e)})}}),r(D,[h,f],function(e,t){var n=t.trim,r;return r=new RegExp(["]+data-mce-bogus[^>]+>[\u200b\ufeff]+<\\/span>","]+data-mce-bogus[^>]+><\\/div>",'\\s?data-mce-selected="[^"]+"'].join("|"),"gi"),function(t){function i(){return n(t.getContent({format:"raw",no_events:1}).replace(r,""))}function o(e){a.typing=!1,a.add({},e)}var a=this,s=0,l=[],c,d,u;return t.on("init",function(){a.add()}),t.on("BeforeExecCommand",function(e){var t=e.command;"Undo"!=t&&"Redo"!=t&&"mceRepaint"!=t&&a.beforeChange()}),t.on("ExecCommand",function(e){var t=e.command;"Undo"!=t&&"Redo"!=t&&"mceRepaint"!=t&&o(e)}),t.on("ObjectResizeStart",function(){a.beforeChange()}),t.on("SaveContent ObjectResized blur",o),t.dom.bind(t.dom.getRoot(),"dragend",o),t.on("KeyUp",function(n){var r=n.keyCode;(r>=33&&36>=r||r>=37&&40>=r||45==r||13==r||n.ctrlKey)&&(o(),t.nodeChanged()),(46==r||8==r||e.mac&&(91==r||93==r))&&t.nodeChanged(),d&&a.typing&&(t.isDirty()||(t.isNotDirty=!l[0]||i()==l[0].content,t.isNotDirty||t.fire("change",{level:l[0],lastLevel:null})),t.fire("TypingUndo"),d=!1,t.nodeChanged())}),t.on("KeyDown",function(e){var t=e.keyCode;return t>=33&&36>=t||t>=37&&40>=t||45==t?void(a.typing&&o(e)):void((16>t||t>20)&&224!=t&&91!=t&&!a.typing&&(a.beforeChange(),a.typing=!0,a.add({},e),d=!0))}),t.on("MouseDown",function(e){a.typing&&o(e)}),t.addShortcut("ctrl+z","","Undo"),t.addShortcut("ctrl+y,ctrl+shift+z","","Redo"),t.on("AddUndo Undo Redo ClearUndos MouseUp",function(e){e.isDefaultPrevented()||t.nodeChanged()}),a={data:l,typing:!1,beforeChange:function(){u||(c=t.selection.getBookmark(2,!0))},add:function(e,n){var r,o=t.settings,a;if(e=e||{},e.content=i(),u||t.removed)return null;if(t.fire("BeforeAddUndo",{level:e,originalEvent:n}).isDefaultPrevented())return null;if(a=l[s],a&&a.content==e.content)return null;if(l[s]&&(l[s].beforeBookmark=c),o.custom_undo_redo_levels&&l.length>o.custom_undo_redo_levels){for(r=0;r0&&(t.isNotDirty=!1,t.fire("change",d)),e},undo:function(){var e;return a.typing&&(a.add(),a.typing=!1),s>0&&(e=l[--s],0===s&&(t.isNotDirty=!0),t.setContent(e.content,{format:"raw"}),t.selection.moveToBookmark(e.beforeBookmark),t.fire("undo",{level:e})),e},redo:function(){var e;return s0||a.typing&&l[0]&&i()!=l[0].content},hasRedo:function(){return sL)&&(d=a.create("br"),t.parentNode.insertBefore(d,t)),l.setStartBefore(t),l.setEndBefore(t)):(l.setStartAfter(t),l.setEndAfter(t)):(l.setStart(t,0),l.setEnd(t,0));s.setRng(l),a.remove(d),s.scrollIntoView(t)}function g(e){var t=l.forced_root_block;t&&t.toLowerCase()===e.tagName.toLowerCase()&&a.setAttribs(e,l.forced_root_block_attrs)}function v(e){var t=R,n,i,o;if(e||"TABLE"==O?(n=a.create(e||F),g(n)):n=B.cloneNode(!1),o=n,l.keep_styles!==!1)do if(/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U|VAR|CITE|DFN|CODE|MARK|Q|SUP|SUB|SAMP)$/.test(t.nodeName)){if("_mce_caret"==t.id)continue;i=t.cloneNode(!1),a.setAttrib(i,"id",""),n.hasChildNodes()?(i.appendChild(n.firstChild),n.appendChild(i)):(o=i,n.appendChild(i))}while(t=t.parentNode);return r||(o.innerHTML='
    '),n}function y(t){var n,r,i;if(3==R.nodeType&&(t?A>0:A0)return!0}function w(){var e,t,n;R&&3==R.nodeType&&A>=R.nodeValue.length&&(r||x()||(e=a.create("br"),k.insertNode(e),k.setStartAfter(e),k.setEndAfter(e),t=!0)),e=a.create("br"),k.insertNode(e),r&&"PRE"==O&&(!L||8>L)&&e.parentNode.insertBefore(a.doc.createTextNode("\r"),e),n=a.create("span",{}," "),e.parentNode.insertBefore(n,e),s.scrollIntoView(n),a.remove(n),t?(k.setStartBefore(e),k.setEndBefore(e)):(k.setStartAfter(e),k.setEndAfter(e)),s.setRng(k),c.add()}function _(e){do 3===e.nodeType&&(e.nodeValue=e.nodeValue.replace(/^[\r\n]+/,"")),e=e.firstChild;while(e)}function N(e){var t=a.getRoot(),n,r;for(n=e;n!==t&&"false"!==a.getContentEditable(n);)"true"===a.getContentEditable(n)&&(r=n),n=n.parentNode;return n!==t?r:t}function E(e){var t;r||(e.normalize(),t=e.lastChild,(!t||/^(left|right)$/gi.test(a.getStyle(t,"float",!0)))&&a.add(e,"br"))}var k,S,T,R,A,B,L,D,M,H,P,O,I,F,z;if(k=s.getRng(!0),!o.isDefaultPrevented()){if(!k.collapsed)return void i.execCommand("Delete");if(new t(a).normalize(k),R=k.startContainer,A=k.startOffset,F=(l.force_p_newlines?"p":"")||l.forced_root_block,F=F?F.toUpperCase():"",L=a.doc.documentMode,D=o.shiftKey,1==R.nodeType&&R.hasChildNodes()&&(z=A>R.childNodes.length-1,R=R.childNodes[Math.min(A,R.childNodes.length-1)]||R,A=z&&3==R.nodeType?R.nodeValue.length:0),T=N(R)){if(c.beforeChange(),!a.isBlock(T)&&T!=a.getRoot())return void((!F||D)&&w());if((F&&!D||!F&&D)&&(R=b(R,A)),B=a.getParent(R,a.isBlock),P=B?a.getParent(B.parentNode,a.isBlock):null,O=B?B.nodeName.toUpperCase():"",I=P?P.nodeName.toUpperCase():"","LI"!=I||o.ctrlKey||(B=P,O=I),"LI"==O){if(!F&&D)return void w();if(a.isEmpty(B))return void C()}if("PRE"==O&&l.br_in_pre!==!1){if(!D)return void w()}else if(!F&&!D&&"LI"!=O||F&&D)return void w();F&&B===i.getBody()||(F=F||"P",y()?(M=/^(H[1-6]|PRE|FIGURE)$/.test(O)&&"HGROUP"!=I?v(F):v(),l.end_container_on_empty_block&&f(P)&&a.isEmpty(B)?M=a.split(P,B):a.insertAfter(M,B),h(M)):y(!0)?(M=B.parentNode.insertBefore(v(),B),p(M),h(B)):(S=k.cloneRange(),S.setEndAfter(B),H=S.extractContents(),_(H),M=H.firstChild,a.insertAfter(H,B),m(M),E(B),h(M)),a.setAttrib(M,"id",""),i.fire("NewBlock",{newBlock:M}),c.add())}}}var a=i.dom,s=i.selection,l=i.settings,c=i.undoManager,d=i.schema,u=d.getNonEmptyElements();i.on("keydown",function(e){13==e.keyCode&&o(e)!==!1&&e.preventDefault()})}}),r(H,[],function(){return function(e){function t(){var t=i.getStart(),s=e.getBody(),l,c,d,u,f,p,m,h=-16777215,g,v,y,b,C;if(C=n.forced_root_block,t&&1===t.nodeType&&C){for(;t&&t!=s;){if(a[t.nodeName])return;t=t.parentNode}if(l=i.getRng(),l.setStart){c=l.startContainer,d=l.startOffset,u=l.endContainer,f=l.endOffset;try{v=e.getDoc().activeElement===s}catch(x){}}else l.item&&(t=l.item(0),l=e.getDoc().body.createTextRange(),l.moveToElementText(t)),v=l.parentElement().ownerDocument===e.getDoc(),y=l.duplicate(),y.collapse(!0),d=-1*y.move("character",h),y.collapsed||(y=l.duplicate(),y.collapse(!1),f=-1*y.move("character",h)-d);for(t=s.firstChild,b=s.nodeName.toLowerCase();t;)if((3===t.nodeType||1==t.nodeType&&!a[t.nodeName])&&o.isValidChild(b,C.toLowerCase())){if(3===t.nodeType&&0===t.nodeValue.length){m=t,t=t.nextSibling,r.remove(m);continue}p||(p=r.create(C,e.settings.forced_root_block_attrs),t.parentNode.insertBefore(p,t),g=!0),m=t,t=t.nextSibling,p.appendChild(m)}else p=null,t=t.nextSibling;if(g&&v){if(l.setStart)l.setStart(c,d),l.setEnd(u,f),i.setRng(l);else try{l=e.getDoc().body.createTextRange(),l.moveToElementText(s),l.collapse(!0),l.moveStart("character",d),f>0&&l.moveEnd("character",f),l.select()}catch(x){}e.nodeChanged()}}}var n=e.settings,r=e.dom,i=e.selection,o=e.schema,a=o.getBlockElements();n.forced_root_block&&e.on("NodeChange",t)}}),r(P,[E,h,f],function(e,n,r){var i=r.each,o=r.extend,a=r.map,s=r.inArray,l=r.explode,c=n.gecko,d=n.ie,u=!0,f=!1;return function(r){function p(e,t,n){var r;return e=e.toLowerCase(),(r=N.exec[e])?(r(e,t,n),u):f}function m(e){var t;return e=e.toLowerCase(),(t=N.state[e])?t(e):-1}function h(e){var t;return e=e.toLowerCase(),(t=N.value[e])?t(e):f}function g(e,t){t=t||"exec",i(e,function(e,n){i(n.toLowerCase().split(","),function(n){N[t][n]=e})})}function v(e,n,i){return n===t&&(n=f),i===t&&(i=null),r.getDoc().execCommand(e,n,i)}function y(e){return k.match(e)}function b(e,n){k.toggle(e,n?{value:n}:t),r.nodeChanged()}function C(e){S=_.getBookmark(e)}function x(){_.moveToBookmark(S)}var w=r.dom,_=r.selection,N={state:{},exec:{},value:{}},E=r.settings,k=r.formatter,S;o(this,{execCommand:p,queryCommandState:m,queryCommandValue:h,addCommands:g}),g({"mceResetDesignMode,mceBeginUndoLevel":function(){},"mceEndUndoLevel,mceAddUndoLevel":function(){r.undoManager.add()},"Cut,Copy,Paste":function(e){var t=r.getDoc(),i;try{v(e)}catch(o){i=u}if(i||!t.queryCommandSupported(e)){var a=r.translate("Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.");n.mac&&(a=a.replace(/Ctrl\+/g,"\u2318+")),r.windowManager.alert(a)}},unlink:function(){if(_.isCollapsed()){var e=_.getNode();return void("A"==e.tagName&&r.dom.remove(e,!0))}k.remove("link")},"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(e){var t=e.substring(7);"full"==t&&(t="justify"),i("left,center,right,justify".split(","),function(e){t!=e&&k.remove("align"+e)}),b("align"+t),p("mceRepaint")},"InsertUnorderedList,InsertOrderedList":function(e){var t,n;v(e),t=w.getParent(_.getNode(),"ol,ul"),t&&(n=t.parentNode,/^(H[1-6]|P|ADDRESS|PRE)$/.test(n.nodeName)&&(C(),w.split(n,t),x()))},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(e){b(e)},"ForeColor,HiliteColor,FontName":function(e,t,n){b(e,n)},FontSize:function(e,t,n){var r,i;n>=1&&7>=n&&(i=l(E.font_size_style_values),r=l(E.font_size_classes),n=r?r[n-1]||n:i[n-1]||n),b(e,n)},RemoveFormat:function(e){k.remove(e)},mceBlockQuote:function(){b("blockquote")},FormatBlock:function(e,t,n){return b(n||"p")},mceCleanup:function(){var e=_.getBookmark();r.setContent(r.getContent({cleanup:u}),{cleanup:u}),_.moveToBookmark(e)},mceRemoveNode:function(e,t,n){var i=n||_.getNode();i!=r.getBody()&&(C(),r.dom.remove(i,u),x())},mceSelectNodeDepth:function(e,t,n){var i=0;w.getParent(_.getNode(),function(e){return 1==e.nodeType&&i++==n?(_.select(e),f):void 0},r.getBody())},mceSelectNode:function(e,t,n){_.select(n)},mceInsertContent:function(t,n,i){function o(e){function t(e){return r[e]&&3==r[e].nodeType}var n,r,i;return n=_.getRng(!0),r=n.startContainer,i=n.startOffset,3==r.nodeType&&(i>0?e=e.replace(/^ /," "):t("previousSibling")||(e=e.replace(/^ /," ")),i|)$/," "):t("nextSibling")||(e=e.replace(/( | )(
    |)$/," "))),e +}var a,s,l,c,u,f,p,m,h,g,v;/^ | $/.test(i)&&(i=o(i)),a=r.parser,s=new e({},r.schema),v='ÈB;',f={content:i,format:"html",selection:!0},r.fire("BeforeSetContent",f),i=f.content,-1==i.indexOf("{$caret}")&&(i+="{$caret}"),i=i.replace(/\{\$caret\}/,v),m=_.getRng();var y=m.startContainer||(m.parentElement?m.parentElement():null),b=r.getBody();y===b&&_.isCollapsed()&&w.isBlock(b.firstChild)&&w.isEmpty(b.firstChild)&&(m=w.createRng(),m.setStart(b.firstChild,0),m.setEnd(b.firstChild,0),_.setRng(m)),_.isCollapsed()||r.getDoc().execCommand("Delete",!1,null),l=_.getNode();var C={context:l.nodeName.toLowerCase()};if(u=a.parse(i,C),h=u.lastChild,"mce_marker"==h.attr("id"))for(p=h,h=h.prev;h;h=h.walk(!0))if(3==h.type||!w.isBlock(h.name)){h.parent.insert(p,h,"br"===h.name);break}if(C.invalid){for(_.setContent(v),l=_.getNode(),c=r.getBody(),9==l.nodeType?l=h=c:h=l;h!==c;)l=h,h=h.parentNode;i=l==c?c.innerHTML:w.getOuterHTML(l),i=s.serialize(a.parse(i.replace(//i,function(){return s.serialize(u)}))),l==c?w.setHTML(c,i):w.setOuterHTML(l,i)}else i=s.serialize(u),h=l.firstChild,g=l.lastChild,!h||h===g&&"BR"===h.nodeName?w.setHTML(l,i):_.setContent(i);p=w.get("mce_marker"),_.scrollIntoView(p),m=w.createRng(),h=p.previousSibling,h&&3==h.nodeType?(m.setStart(h,h.nodeValue.length),d||(g=p.nextSibling,g&&3==g.nodeType&&(h.appendData(g.data),g.parentNode.removeChild(g)))):(m.setStartBefore(p),m.setEndBefore(p)),w.remove(p),_.setRng(m),r.fire("SetContent",f),r.addVisual()},mceInsertRawHTML:function(e,t,n){_.setContent("tiny_mce_marker"),r.setContent(r.getContent().replace(/tiny_mce_marker/g,function(){return n}))},mceToggleFormat:function(e,t,n){b(n)},mceSetContent:function(e,t,n){r.setContent(n)},"Indent,Outdent":function(e){var t,n,o;t=E.indentation,n=/[a-z%]+$/i.exec(t),t=parseInt(t,10),m("InsertUnorderedList")||m("InsertOrderedList")?v(e):(E.forced_root_block||w.getParent(_.getNode(),w.isBlock)||k.apply("div"),i(_.getSelectedBlocks(),function(i){if("LI"!=i.nodeName){var a=r.getParam("indent_use_margin",!1)?"margin":"padding";a+="rtl"==w.getStyle(i,"direction",!0)?"Right":"Left","outdent"==e?(o=Math.max(0,parseInt(i.style[a]||0,10)-t),w.setStyle(i,a,o?o+n:"")):(o=parseInt(i.style[a]||0,10)+t+n,w.setStyle(i,a,o))}}))},mceRepaint:function(){if(c)try{C(u),_.getSel()&&_.getSel().selectAllChildren(r.getBody()),_.collapse(u),x()}catch(e){}},InsertHorizontalRule:function(){r.execCommand("mceInsertContent",!1,"
    ")},mceToggleVisualAid:function(){r.hasVisual=!r.hasVisual,r.addVisual()},mceReplaceContent:function(e,t,n){r.execCommand("mceInsertContent",!1,n.replace(/\{\$selection\}/g,_.getContent({format:"text"})))},mceInsertLink:function(e,t,n){var r;"string"==typeof n&&(n={href:n}),r=w.getParent(_.getNode(),"a"),n.href=n.href.replace(" ","%20"),r&&n.href||k.remove("link"),n.href&&k.apply("link",n,r)},selectAll:function(){var e=w.getRoot(),t;_.getRng().setStart?(t=w.createRng(),t.setStart(e,0),t.setEnd(e,e.childNodes.length),_.setRng(t)):(t=_.getRng(),t.item||(t.moveToElementText(e),t.select()))},"delete":function(){v("Delete");var e=r.getBody();w.isEmpty(e)&&(r.setContent(""),e.firstChild&&w.isBlock(e.firstChild)?r.selection.setCursorLocation(e.firstChild,0):r.selection.setCursorLocation(e,0))},mceNewDocument:function(){r.setContent("")}}),g({"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(e){var t="align"+e.substring(7),n=_.isCollapsed()?[w.getParent(_.getNode(),w.isBlock)]:_.getSelectedBlocks(),r=a(n,function(e){return!!k.matchNode(e,t)});return-1!==s(r,u)},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(e){return y(e)},mceBlockQuote:function(){return y("blockquote")},Outdent:function(){var e;if(E.inline_styles){if((e=w.getParent(_.getStart(),w.isBlock))&&parseInt(e.style.paddingLeft,10)>0)return u;if((e=w.getParent(_.getEnd(),w.isBlock))&&parseInt(e.style.paddingLeft,10)>0)return u}return m("InsertUnorderedList")||m("InsertOrderedList")||!E.inline_styles&&!!w.getParent(_.getNode(),"BLOCKQUOTE")},"InsertUnorderedList,InsertOrderedList":function(e){var t=w.getParent(_.getNode(),"ul,ol");return t&&("insertunorderedlist"===e&&"UL"===t.tagName||"insertorderedlist"===e&&"OL"===t.tagName)}},"state"),g({"FontSize,FontName":function(e){var t=0,n;return(n=w.getParent(_.getNode(),"span"))&&(t="fontsize"==e?n.style.fontSize:n.style.fontFamily.replace(/, /g,",").replace(/[\'\"]/g,"").toLowerCase()),t}},"value"),g({Undo:function(){r.undoManager.undo()},Redo:function(){r.undoManager.redo()}})}}),r(O,[f],function(e){function t(e,i){var o=this,a,s;if(e=r(e),i=o.settings=i||{},/^([\w\-]+):([^\/]{2})/i.test(e)||/^\s*#/.test(e))return void(o.source=e);var l=0===e.indexOf("//");0!==e.indexOf("/")||l||(e=(i.base_uri?i.base_uri.protocol||"http":"http")+"://mce_host"+e),/^[\w\-]*:?\/\//.test(e)||(s=i.base_uri?i.base_uri.path:new t(location.href).directory,e=""===i.base_uri.protocol?"//mce_host"+o.toAbsPath(s,e):(i.base_uri&&i.base_uri.protocol||"http")+"://mce_host"+o.toAbsPath(s,e)),e=e.replace(/@@/g,"(mce_at)"),e=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(e),n(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],function(t,n){var r=e[n];r&&(r=r.replace(/\(mce_at\)/g,"@@")),o[t]=r}),a=i.base_uri,a&&(o.protocol||(o.protocol=a.protocol),o.userInfo||(o.userInfo=a.userInfo),o.port||"mce_host"!==o.host||(o.port=a.port),o.host&&"mce_host"!==o.host||(o.host=a.host),o.source=""),l&&(o.protocol="")}var n=e.each,r=e.trim;return t.prototype={setPath:function(e){var t=this;e=/^(.*?)\/?(\w+)?$/.exec(e),t.path=e[0],t.directory=e[1],t.file=e[2],t.source="",t.getURI()},toRelative:function(e){var n=this,r;if("./"===e)return e;if(e=new t(e,{base_uri:n}),"mce_host"!=e.host&&n.host!=e.host&&e.host||n.port!=e.port||n.protocol!=e.protocol&&""!==e.protocol)return e.getURI();var i=n.getURI(),o=e.getURI();return i==o||"/"==i.charAt(i.length-1)&&i.substr(0,i.length-1)==o?i:(r=n.toRelPath(n.path,e.path),e.query&&(r+="?"+e.query),e.anchor&&(r+="#"+e.anchor),r)},toAbsolute:function(e,n){return e=new t(e,{base_uri:this}),e.getURI(this.host==e.host&&this.protocol==e.protocol?n:0)},toRelPath:function(e,t){var n,r=0,i="",o,a;if(e=e.substring(0,e.lastIndexOf("/")),e=e.split("/"),n=t.split("/"),e.length>=n.length)for(o=0,a=e.length;a>o;o++)if(o>=n.length||e[o]!=n[o]){r=o+1;break}if(e.lengtho;o++)if(o>=e.length||e[o]!=n[o]){r=o+1;break}if(1===r)return t;for(o=0,a=e.length-(r-1);a>o;o++)i+="../";for(o=r-1,a=n.length;a>o;o++)i+=o!=r-1?"/"+n[o]:n[o];return i},toAbsPath:function(e,t){var r,i=0,o=[],a,s;for(a=/\/$/.test(t)?"/":"",e=e.split("/"),t=t.split("/"),n(e,function(e){e&&o.push(e)}),e=o,r=t.length-1,o=[];r>=0;r--)0!==t[r].length&&"."!==t[r]&&(".."!==t[r]?i>0?i--:o.push(t[r]):i++);return r=e.length-i,s=0>=r?o.reverse().join("/"):e.slice(0,r).join("/")+"/"+o.reverse().join("/"),0!==s.indexOf("/")&&(s="/"+s),a&&s.lastIndexOf("/")!==s.length-1&&(s+=a),s},getURI:function(e){var t,n=this;return(!n.source||e)&&(t="",e||(t+=n.protocol?n.protocol+"://":"//",n.userInfo&&(t+=n.userInfo+"@"),n.host&&(t+=n.host),n.port&&(t+=":"+n.port)),n.path&&(t+=n.path),n.query&&(t+="?"+n.query),n.anchor&&(t+="#"+n.anchor),n.source=t),n.source}},t}),r(I,[f],function(e){function t(){}var n=e.each,r=e.extend,i,o;return t.extend=i=function(e){function t(){var e,t,n,r=this;if(!o&&(r.init&&r.init.apply(r,arguments),t=r.Mixins))for(e=t.length;e--;)n=t[e],n.init&&n.init.apply(r,arguments)}function a(){return this}function s(e,t){return function(){var n=this,r=n._super,i;return n._super=c[e],i=t.apply(n,arguments),n._super=r,i}}var l=this,c=l.prototype,d,u,f;o=!0,d=new l,o=!1,e.Mixins&&(n(e.Mixins,function(t){t=t;for(var n in t)"init"!==n&&(e[n]=t[n])}),c.Mixins&&(e.Mixins=c.Mixins.concat(e.Mixins))),e.Methods&&n(e.Methods.split(","),function(t){e[t]=a}),e.Properties&&n(e.Properties.split(","),function(t){var n="_"+t;e[t]=function(e){var t=this,r;return e!==r?(t[n]=e,t):t[n]}}),e.Statics&&n(e.Statics,function(e,n){t[n]=e}),e.Defaults&&c.Defaults&&(e.Defaults=r({},c.Defaults,e.Defaults));for(u in e)f=e[u],d[u]="function"==typeof f&&c[u]?s(u,f):f;return t.prototype=d,t.constructor=t,t.extend=i,t},t}),r(F,[I],function(e){function t(e){for(var t=[],n=e.length,r;n--;)r=e[n],r.__checked||(t.push(r),r.__checked=1);for(n=t.length;n--;)delete t[n].__checked;return t}var n=/^([\w\\*]+)?(?:#([\w\\]+))?(?:\.([\w\\\.]+))?(?:\[\@?([\w\\]+)([\^\$\*!~]?=)([\w\\]+)\])?(?:\:(.+))?/i,r=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,i=/^\s*|\s*$/g,o,a=e.extend({init:function(e){function t(e){return e?(e=e.toLowerCase(),function(t){return"*"===e||t.type===e}):void 0}function o(e){return e?function(t){return t._name===e}:void 0}function a(e){return e?(e=e.split("."),function(t){for(var n=e.length;n--;)if(!t.hasClass(e[n]))return!1;return!0}):void 0}function s(e,t,n){return e?function(r){var i=r[e]?r[e]():"";return t?"="===t?i===n:"*="===t?i.indexOf(n)>=0:"~="===t?(" "+i+" ").indexOf(" "+n+" ")>=0:"!="===t?i!=n:"^="===t?0===i.indexOf(n):"$="===t?i.substr(i.length-n.length)===n:!1:!!n}:void 0}function l(e){var t;return e?(e=/(?:not\((.+)\))|(.+)/i.exec(e),e[1]?(t=d(e[1],[]),function(e){return!u(e,t)}):(e=e[2],function(t,n,r){return"first"===e?0===n:"last"===e?n===r-1:"even"===e?n%2===0:"odd"===e?n%2===1:t[e]?t[e]():!1})):void 0}function c(e,r,c){function d(e){e&&r.push(e)}var u;return u=n.exec(e.replace(i,"")),d(t(u[1])),d(o(u[2])),d(a(u[3])),d(s(u[4],u[5],u[6])),d(l(u[7])),r.psuedo=!!u[7],r.direct=c,r}function d(e,t){var n=[],i,o,a;do if(r.exec(""),o=r.exec(e),o&&(e=o[3],n.push(o[1]),o[2])){i=o[3];break}while(o);for(i&&d(i,t),e=[],a=0;a"!=n[a]&&e.push(c(n[a],[],">"===n[a-1]));return t.push(e),t}var u=this.match;this._selectors=d(e,[])},match:function(e,t){var n,r,i,o,a,s,l,c,d,u,f,p,m;for(t=t||this._selectors,n=0,r=t.length;r>n;n++){for(a=t[n],o=a.length,m=e,p=0,i=o-1;i>=0;i--)for(c=a[i];m;){if(c.psuedo)for(f=m.parent().items(),d=u=f.length;d--&&f[d]!==m;);for(s=0,l=c.length;l>s;s++)if(!c[s](m,d,u)){s=l+1;break}if(s===l){p++;break}if(i===o-1)break;m=m.parent()}if(p===o)return!0}return!1},find:function(e){function n(e,t,i){var o,a,s,l,c,d=t[i];for(o=0,a=e.length;a>o;o++){for(c=e[o],s=0,l=d.length;l>s;s++)if(!d[s](c,o,a)){s=l+1;break}if(s===l)i==t.length-1?r.push(c):c.items&&n(c.items(),t,i+1);else if(d.direct)return;c.items&&n(c.items(),t,i)}}var r=[],i,s,l=this._selectors;if(e.items){for(i=0,s=l.length;s>i;i++)n(e.items(),l[i],0);s>1&&(r=t(r))}return o||(o=a.Collection),new o(r)}});return a}),r(z,[f,F,I],function(e,t,n){var r,i,o=Array.prototype.push,a=Array.prototype.slice;return i={length:0,init:function(e){e&&this.add(e)},add:function(t){var n=this;return e.isArray(t)?o.apply(n,t):t instanceof r?n.add(t.toArray()):o.call(n,t),n},set:function(e){var t=this,n=t.length,r;for(t.length=0,t.add(e),r=t.length;n>r;r++)delete t[r];return t},filter:function(e){var n=this,i,o,a=[],s,l;for("string"==typeof e?(e=new t(e),l=function(t){return e.match(t)}):l=e,i=0,o=n.length;o>i;i++)s=n[i],l(s)&&a.push(s);return new r(a)},slice:function(){return new r(a.apply(this,arguments))},eq:function(e){return-1===e?this.slice(e):this.slice(e,+e+1)},each:function(t){return e.each(this,t),this},toArray:function(){return e.toArray(this)},indexOf:function(e){for(var t=this,n=t.length;n--&&t[n]!==e;);return n},reverse:function(){return new r(e.toArray(this).reverse())},hasClass:function(e){return this[0]?this[0].hasClass(e):!1},prop:function(e,t){var n=this,r,i;return t!==r?(n.each(function(n){n[e]&&n[e](t)}),n):(i=n[0],i&&i[e]?i[e]():void 0)},exec:function(t){var n=this,r=e.toArray(arguments).slice(1);return n.each(function(e){e[t]&&e[t].apply(e,r)}),n},remove:function(){for(var e=this.length;e--;)this[e].remove();return this}},e.each("fire on off show hide addClass removeClass append prepend before after reflow".split(" "),function(t){i[t]=function(){var n=e.toArray(arguments);return this.each(function(e){t in e&&e[t].apply(e,n)}),this}}),e.each("text name disabled active selected checked visible parent value data".split(" "),function(e){i[e]=function(t){return this.prop(e,t)}}),r=n.extend(i),t.Collection=r,r}),r(W,[f,v],function(e,t){return{id:function(){return t.DOM.uniqueId()},createFragment:function(e){return t.DOM.createFragment(e)},getWindowSize:function(){return t.DOM.getViewPort()},getSize:function(e){var t,n;if(e.getBoundingClientRect){var r=e.getBoundingClientRect();t=Math.max(r.width||r.right-r.left,e.offsetWidth),n=Math.max(r.height||r.bottom-r.bottom,e.offsetHeight)}else t=e.offsetWidth,n=e.offsetHeight;return{width:t,height:n}},getPos:function(e,n){return t.DOM.getPos(e,n)},getViewPort:function(e){return t.DOM.getViewPort(e)},get:function(e){return document.getElementById(e)},addClass:function(e,n){return t.DOM.addClass(e,n)},removeClass:function(e,n){return t.DOM.removeClass(e,n)},hasClass:function(e,n){return t.DOM.hasClass(e,n)},toggleClass:function(e,n,r){return t.DOM.toggleClass(e,n,r)},css:function(e,n,r){return t.DOM.setStyle(e,n,r)},on:function(e,n,r,i){return t.DOM.bind(e,n,r,i)},off:function(e,n,r){return t.DOM.unbind(e,n,r)},fire:function(e,n,r){return t.DOM.fire(e,n,r)},innerHtml:function(e,n){t.DOM.setHTML(e,n)}}}),r(V,[I,f,z,W],function(e,t,n,r){var i=t.makeMap("focusin focusout scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave wheel keydown keypress keyup contextmenu"," "),o={},a="onmousewheel"in document,s=!1,l=e.extend({Statics:{elementIdCache:o},isRtl:function(){return l.rtl},classPrefix:"mce-",init:function(e){var n=this,i,o;if(n.settings=e=t.extend({},n.Defaults,e),n._id=e.id||r.id(),n._text=n._name="",n._width=n._height=0,n._aria={role:e.role},i=e.classes)for(i=i.split(" "),i.map={},o=i.length;o--;)i.map[i[o]]=!0;n._classes=i||[],n.visible(!0),t.each("title text width height name classes visible disabled active value".split(" "),function(t){var r=e[t],i;r!==i?n[t](r):n["_"+t]===i&&(n["_"+t]=!1)}),n.on("click",function(){return n.disabled()?!1:void 0}),e.classes&&t.each(e.classes.split(" "),function(e){n.addClass(e)}),n.settings=e,n._borderBox=n.parseBox(e.border),n._paddingBox=n.parseBox(e.padding),n._marginBox=n.parseBox(e.margin),e.hidden&&n.hide()},Properties:"parent,title,text,width,height,disabled,active,name,value",Methods:"renderHtml",getContainerElm:function(){return document.body},getParentCtrl:function(e){for(var t,n=this.getRoot().controlIdLookup;e&&n&&!(t=n[e.id]);)e=e.parentNode;return t},parseBox:function(e){var t,n=10;if(e)return"number"==typeof e?(e=e||0,{top:e,left:e,bottom:e,right:e}):(e=e.split(" "),t=e.length,1===t?e[1]=e[2]=e[3]=e[0]:2===t?(e[2]=e[0],e[3]=e[1]):3===t&&(e[3]=e[1]),{top:parseInt(e[0],n)||0,right:parseInt(e[1],n)||0,bottom:parseInt(e[2],n)||0,left:parseInt(e[3],n)||0})},borderBox:function(){return this._borderBox},paddingBox:function(){return this._paddingBox},marginBox:function(){return this._marginBox},measureBox:function(e,t){function n(t){var n=document.defaultView;return n?(t=t.replace(/[A-Z]/g,function(e){return"-"+e}),n.getComputedStyle(e,null).getPropertyValue(t)):e.currentStyle[t]}function r(e){var t=parseFloat(n(e),10);return isNaN(t)?0:t}return{top:r(t+"TopWidth"),right:r(t+"RightWidth"),bottom:r(t+"BottomWidth"),left:r(t+"LeftWidth")}},initLayoutRect:function(){var e=this,t=e.settings,n,i,o=e.getEl(),a,s,l,c,d,u,f,p;n=e._borderBox=e._borderBox||e.measureBox(o,"border"),e._paddingBox=e._paddingBox||e.measureBox(o,"padding"),e._marginBox=e._marginBox||e.measureBox(o,"margin"),p=r.getSize(o),u=t.minWidth,f=t.minHeight,l=u||p.width,c=f||p.height,a=t.width,s=t.height,d=t.autoResize,d="undefined"!=typeof d?d:!a&&!s,a=a||l,s=s||c;var m=n.left+n.right,h=n.top+n.bottom,g=t.maxWidth||65535,v=t.maxHeight||65535;return e._layoutRect=i={x:t.x||0,y:t.y||0,w:a,h:s,deltaW:m,deltaH:h,contentW:a-m,contentH:s-h,innerW:a-m,innerH:s-h,startMinWidth:u||0,startMinHeight:f||0,minW:Math.min(l,g),minH:Math.min(c,v),maxW:g,maxH:v,autoResize:d,scrollW:0},e._lastLayoutRect={},i},layoutRect:function(e){var t=this,n=t._layoutRect,r,i,o,a,s,c;return n||(n=t.initLayoutRect()),e?(o=n.deltaW,a=n.deltaH,e.x!==s&&(n.x=e.x),e.y!==s&&(n.y=e.y),e.minW!==s&&(n.minW=e.minW),e.minH!==s&&(n.minH=e.minH),i=e.w,i!==s&&(i=in.maxW?n.maxW:i,n.w=i,n.innerW=i-o),i=e.h,i!==s&&(i=in.maxH?n.maxH:i,n.h=i,n.innerH=i-a),i=e.innerW,i!==s&&(i=in.maxW-o?n.maxW-o:i,n.innerW=i,n.w=i+o),i=e.innerH,i!==s&&(i=in.maxH-a?n.maxH-a:i,n.innerH=i,n.h=i+a),e.contentW!==s&&(n.contentW=e.contentW),e.contentH!==s&&(n.contentH=e.contentH),r=t._lastLayoutRect,(r.x!==n.x||r.y!==n.y||r.w!==n.w||r.h!==n.h)&&(c=l.repaintControls,c&&c.map&&!c.map[t._id]&&(c.push(t),c.map[t._id]=!0),r.x=n.x,r.y=n.y,r.w=n.w,r.h=n.h),t):n},repaint:function(){var e=this,t,n,r,i,o=0,a=0,s,l;l=document.createRange?function(e){return e}:Math.round,t=e.getEl().style,r=e._layoutRect,s=e._lastRepaintRect||{},i=e._borderBox,o=i.left+i.right,a=i.top+i.bottom,r.x!==s.x&&(t.left=l(r.x)+"px",s.x=r.x),r.y!==s.y&&(t.top=l(r.y)+"px",s.y=r.y),r.w!==s.w&&(t.width=l(r.w-o)+"px",s.w=r.w),r.h!==s.h&&(t.height=l(r.h-a)+"px",s.h=r.h),e._hasBody&&r.innerW!==s.innerW&&(n=e.getEl("body").style,n.width=l(r.innerW)+"px",s.innerW=r.innerW),e._hasBody&&r.innerH!==s.innerH&&(n=n||e.getEl("body").style,n.height=l(r.innerH)+"px",s.innerH=r.innerH),e._lastRepaintRect=s,e.fire("repaint",{},!1)},on:function(e,t){function n(e){var t,n;return function(i){return t||r.parents().each(function(r){var i=r.settings.callbacks;return i&&(t=i[e])?(n=r,!1):void 0}),t.call(n,i)}}var r=this,o,a,s,l;if(t)for("string"==typeof t&&(t=n(t)),s=e.toLowerCase().split(" "),l=s.length;l--;)e=s[l],o=r._bindings,o||(o=r._bindings={}),a=o[e],a||(a=o[e]=[]),a.push(t),i[e]&&(r._nativeEvents?r._nativeEvents[e]=!0:r._nativeEvents={name:!0},r._rendered&&r.bindPendingEvents());return r},off:function(e,t){var n=this,r,i=n._bindings,o,a,s,l;if(i)if(e)for(s=e.toLowerCase().split(" "),r=s.length;r--;){if(e=s[r],o=i[e],!e){for(a in i)i[a].length=0;return n}if(o)if(t)for(l=o.length;l--;)o[l]===t&&o.splice(l,1);else o.length=0}else n._bindings=[];return n},fire:function(e,t,n){function r(){return!1}function i(){return!0}var o=this,a,s,l,c;if(e=e.toLowerCase(),t=t||{},t.type||(t.type=e),t.control||(t.control=o),t.preventDefault||(t.preventDefault=function(){t.isDefaultPrevented=i},t.stopPropagation=function(){t.isPropagationStopped=i},t.stopImmediatePropagation=function(){t.isImmediatePropagationStopped=i},t.isDefaultPrevented=r,t.isPropagationStopped=r,t.isImmediatePropagationStopped=r),o._bindings&&(l=o._bindings[e]))for(a=0,s=l.length;s>a&&(t.isImmediatePropagationStopped()||l[a].call(o,t)!==!1);a++);if(n!==!1)for(c=o.parent();c&&!t.isPropagationStopped();)c.fire(e,t,!1),c=c.parent();return t},hasEventListeners:function(e){return e in this._bindings},parents:function(e){var t=this,r,i=new n;for(r=t.parent();r;r=r.parent())i.add(r);return e&&(i=i.filter(e)),i},next:function(){var e=this.parent().items();return e[e.indexOf(this)+1]},prev:function(){var e=this.parent().items();return e[e.indexOf(this)-1]},findCommonAncestor:function(e,t){for(var n;e;){for(n=t;n&&e!=n;)n=n.parent();if(e==n)break;e=e.parent()}return e},hasClass:function(e,t){var n=this._classes[t||"control"];return e=this.classPrefix+e,n&&!!n.map[e]},addClass:function(e,t){var n=this,r,i;return e=this.classPrefix+e,r=n._classes[t||"control"],r||(r=[],r.map={},n._classes[t||"control"]=r),r.map[e]||(r.map[e]=e,r.push(e),n._rendered&&(i=n.getEl(t),i&&(i.className=r.join(" ")))),n},removeClass:function(e,t){var n=this,r,i,o;if(e=this.classPrefix+e,r=n._classes[t||"control"],r&&r.map[e])for(delete r.map[e],i=r.length;i--;)r[i]===e&&r.splice(i,1);return n._rendered&&(o=n.getEl(t),o&&(o.className=r.join(" "))),n},toggleClass:function(e,t,n){var r=this;return t?r.addClass(e,n):r.removeClass(e,n),r},classes:function(e){var t=this._classes[e||"control"];return t?t.join(" "):""},innerHtml:function(e){return r.innerHtml(this.getEl(),e),this},getEl:function(e,t){var n,i=e?this._id+"-"+e:this._id;return n=o[i]=(t===!0?null:o[i])||r.get(i)},visible:function(e){var t=this,n;return"undefined"!=typeof e?(t._visible!==e&&(t._rendered&&(t.getEl().style.display=e?"":"none"),t._visible=e,n=t.parent(),n&&(n._lastRect=null),t.fire(e?"show":"hide")),t):t._visible},show:function(){return this.visible(!0)},hide:function(){return this.visible(!1)},focus:function(){try{this.getEl().focus()}catch(e){}return this},blur:function(){return this.getEl().blur(),this},aria:function(e,t){var n=this,r=n.getEl(n.ariaTarget);return"undefined"==typeof t?n._aria[e]:(n._aria[e]=t,n._rendered&&r.setAttribute("role"==e?e:"aria-"+e,t),n)},encode:function(e,t){return t!==!1&&l.translate&&(e=l.translate(e)),(e||"").replace(/[&<>"]/g,function(e){return"&#"+e.charCodeAt(0)+";"})},before:function(e){var t=this,n=t.parent();return n&&n.insert(e,n.items().indexOf(t),!0),t},after:function(e){var t=this,n=t.parent();return n&&n.insert(e,n.items().indexOf(t)),t},remove:function(){var e=this,t=e.getEl(),n=e.parent(),i,a;if(e.items){var s=e.items().toArray();for(a=s.length;a--;)s[a].remove()}n&&n.items&&(i=[],n.items().each(function(t){t!==e&&i.push(t)}),n.items().set(i),n._lastRect=null),e._eventsRoot&&e._eventsRoot==e&&r.off(t);var l=e.getRoot().controlIdLookup;if(l&&delete l[e._id],delete o[e._id],t&&t.parentNode){var c=t.getElementsByTagName("*");for(a=c.length;a--;)delete o[c[a].id];t.parentNode.removeChild(t)}return e._rendered=!1,e},renderBefore:function(e){var t=this;return e.parentNode.insertBefore(r.createFragment(t.renderHtml()),e),t.postRender(),t},renderTo:function(e){var t=this;return e=e||t.getContainerElm(),e.appendChild(r.createFragment(t.renderHtml())),t.postRender(),t},postRender:function(){var e=this,t=e.settings,n,i,o,a,s;for(a in t)0===a.indexOf("on")&&e.on(a.substr(2),t[a]);if(e._eventsRoot){for(o=e.parent();!s&&o;o=o.parent())s=o._eventsRoot;if(s)for(a in s._nativeEvents)e._nativeEvents[a]=!0}e.bindPendingEvents(),t.style&&(n=e.getEl(),n&&(n.setAttribute("style",t.style),n.style.cssText=t.style)),e._visible||r.css(e.getEl(),"display","none"),e.settings.border&&(i=e.borderBox(),r.css(e.getEl(),{"border-top-width":i.top,"border-right-width":i.right,"border-bottom-width":i.bottom,"border-left-width":i.left}));var l=e.getRoot();l.controlIdLookup||(l.controlIdLookup={}),l.controlIdLookup[e._id]=e;for(var c in e._aria)e.aria(c,e._aria[c]);e.fire("postrender",{},!1)},scrollIntoView:function(e){function t(e,t){var n,r,i=e;for(n=r=0;i&&i!=t&&i.nodeType;)n+=i.offsetLeft||0,r+=i.offsetTop||0,i=i.offsetParent;return{x:n,y:r}}var n=this.getEl(),r=n.parentNode,i,o,a,s,l,c,d=t(n,r);return i=d.x,o=d.y,a=n.offsetWidth,s=n.offsetHeight,l=r.clientWidth,c=r.clientHeight,"end"==e?(i-=l-a,o-=c-s):"center"==e&&(i-=l/2-a/2,o-=c/2-s/2),r.scrollLeft=i,r.scrollTop=o,this},bindPendingEvents:function(){function e(e){var t=o.getParentCtrl(e.target);t&&t.fire(e.type,e)}function t(){var e=u._lastHoverCtrl;e&&(e.fire("mouseleave",{target:e.getEl()}),e.parents().each(function(e){e.fire("mouseleave",{target:e.getEl()})}),u._lastHoverCtrl=null)}function n(e){var t=o.getParentCtrl(e.target),n=u._lastHoverCtrl,r=0,i,a,s;if(t!==n){if(u._lastHoverCtrl=t,a=t.parents().toArray().reverse(),a.push(t),n){for(s=n.parents().toArray().reverse(),s.push(n),r=0;r=r;i--)n=s[i],n.fire("mouseleave",{target:n.getEl()})}for(i=r;il;l++)u=d[l]._eventsRoot;for(u||(u=d[d.length-1]||o),o._eventsRoot=u,c=l,l=0;c>l;l++)d[l]._eventsRoot=u;for(p in f){if(!f)return!1;"wheel"!==p||s?("mouseenter"===p||"mouseleave"===p?u._hasMouseEnter||(r.on(u.getEl(),"mouseleave",t),r.on(u.getEl(),"mouseover",n),u._hasMouseEnter=1):u[p]||(r.on(u.getEl(),p,e),u[p]=!0),f[p]=!1):a?r.on(o.getEl(),"mousewheel",i):r.on(o.getEl(),"DOMMouseScroll",i)}}},getRoot:function(){for(var e=this,t,n=[];e;){if(e.rootControl){t=e.rootControl;break}n.push(e),t=e,e=e.parent()}t||(t=this);for(var r=n.length;r--;)n[r].rootControl=t;return t},reflow:function(){return this.repaint(),this}});return l}),r(U,[],function(){var e={},t;return{add:function(t,n){e[t.toLowerCase()]=n},has:function(t){return!!e[t.toLowerCase()]},create:function(n,r){var i,o,a;if(!t){a=tinymce.ui;for(o in a)e[o.toLowerCase()]=a[o];t=!0}if("string"==typeof n?(r=r||{},r.type=n):(r=n,n=r.type),n=n.toLowerCase(),i=e[n],!i)throw new Error("Could not find control by type: "+n);return i=new i(r),i.type=n,i}}}),r(q,[],function(){return function(e){function t(e){return e=e||b,e&&e.getAttribute("role")}function n(e){for(var n,r=e||b;r=r.parentNode;)if(n=t(r))return n}function r(e){var t=b;return t?t.getAttribute("aria-"+e):void 0}function i(e){return"INPUT"==e.tagName||"TEXTAREA"==e.tagName}function o(e){return i(e)&&!e.hidden?!0:/^(button|menuitem|checkbox|tab|menuitemcheckbox|option|gridcell)$/.test(t(e))?!0:!1}function a(e){function t(e){if(1==e.nodeType&&"none"!=e.style.display){o(e)&&n.push(e);for(var r=0;re?e=t.length-1:e>=t.length&&(e=0),t[e]&&t[e].focus(),e}function d(e,t){var n=-1,r=s();t=t||a(r.getEl());for(var i=0;i=0&&(n=t.getEl(),n&&n.parentNode.removeChild(n),n=e.getEl(),n&&n.parentNode.removeChild(n)),t.parent(this)},create:function(t){var n=this,i,a=[];return o.isArray(t)||(t=[t]),o.each(t,function(t){t&&(t instanceof e||("string"==typeof t&&(t={type:t}),i=o.extend({},n.settings.defaults,t),t.type=i.type=i.type||t.type||n.settings.defaultType||(i.defaults?i.defaults.type:null),t=r.create(i)),a.push(t))}),a},renderNew:function(){var e=this;return e.items().each(function(t,n){var r,i;t.parent(e),t._rendered||(r=e.getEl("body"),i=a.createFragment(t.renderHtml()),r.hasChildNodes()&&n<=r.childNodes.length-1?r.insertBefore(i,r.childNodes[n]):r.appendChild(i),t.postRender())}),e._layout.applyClasses(e),e._lastRect=null,e},append:function(e){return this.add(e).renderNew()},prepend:function(e){var t=this;return t.items().set(t.create(e).concat(t.items().toArray())),t.renderNew()},insert:function(e,t,n){var r=this,i,o,a;return e=r.create(e),i=r.items(),!n&&t=0&&t
    '+(e.settings.html||"")+t.renderHtml(e)+"
    "},postRender:function(){var e=this,t;return e.items().exec("postRender"),e._super(),e._layout.postRender(e),e._rendered=!0,e.settings.style&&a.css(e.getEl(),e.settings.style),e.settings.border&&(t=e.borderBox(),a.css(e.getEl(),{"border-top-width":t.top,"border-right-width":t.right,"border-bottom-width":t.bottom,"border-left-width":t.left})),e.parent()||(e.keyboardNav=new i({root:e})),e},initLayoutRect:function(){var e=this,t=e._super();return e._layout.recalc(e),t},recalc:function(){var e=this,t=e._layoutRect,n=e._lastRect;return n&&n.w==t.w&&n.h==t.h?void 0:(e._layout.recalc(e),t=e.layoutRect(),e._lastRect={x:t.x,y:t.y,w:t.w,h:t.h},!0)},reflow:function(){var t;if(this.visible()){for(e.repaintControls=[],e.repaintControls.map={},this.recalc(),t=e.repaintControls.length;t--;)e.repaintControls[t].repaint();"flow"!==this.settings.layout&&"stack"!==this.settings.layout&&this.repaint(),e.repaintControls=[]}return this}})}),r($,[W],function(e){function t(){var e=document,t,n,r,i,o,a,s,l,c=Math.max;return t=e.documentElement,n=e.body,r=c(t.scrollWidth,n.scrollWidth),i=c(t.clientWidth,n.clientWidth),o=c(t.offsetWidth,n.offsetWidth),a=c(t.scrollHeight,n.scrollHeight),s=c(t.clientHeight,n.clientHeight),l=c(t.offsetHeight,n.offsetHeight),{width:o>r?i:r,height:l>a?s:a}}return function(n,r){function i(){return a.getElementById(r.handle||n)}var o,a=document,s,l,c,d,u,f;r=r||{},l=function(n){var l=t(),p,m;n.preventDefault(),s=n.button,p=i(),u=n.screenX,f=n.screenY,m=window.getComputedStyle?window.getComputedStyle(p,null).getPropertyValue("cursor"):p.runtimeStyle.cursor,o=a.createElement("div"),e.css(o,{position:"absolute",top:0,left:0,width:l.width,height:l.height,zIndex:2147483647,opacity:1e-4,background:"red",cursor:m}),a.body.appendChild(o),e.on(a,"mousemove",d),e.on(a,"mouseup",c),r.start(n)},d=function(e){return e.button!==s?c(e):(e.deltaX=e.screenX-u,e.deltaY=e.screenY-f,e.preventDefault(),void r.drag(e))},c=function(t){e.off(a,"mousemove",d),e.off(a,"mouseup",c),o.parentNode.removeChild(o),r.stop&&r.stop(t)},this.destroy=function(){e.off(i())},e.on(i(),"mousedown",l)}}),r(K,[W,$],function(e,t){return{init:function(){var e=this;e.on("repaint",e.renderScroll)},renderScroll:function(){function n(){function t(t,a,s,l,c,d){var u,f,p,m,h,g,v,y,b; +if(f=i.getEl("scroll"+t)){if(y=a.toLowerCase(),b=s.toLowerCase(),i.getEl("absend")&&e.css(i.getEl("absend"),y,i.layoutRect()[l]-1),!c)return void e.css(f,"display","none");e.css(f,"display","block"),u=i.getEl("body"),p=i.getEl("scroll"+t+"t"),m=u["client"+s]-2*o,m-=n&&r?f["client"+d]:0,h=u["scroll"+s],g=m/h,v={},v[y]=u["offset"+a]+o,v[b]=m,e.css(f,v),v={},v[y]=u["scroll"+a]*g,v[b]=m*g,e.css(p,v)}}var n,r,a;a=i.getEl("body"),n=a.scrollWidth>a.clientWidth,r=a.scrollHeight>a.clientHeight,t("h","Left","Width","contentW",n,"Height"),t("v","Top","Height","contentH",r,"Width")}function r(){function n(n,r,a,s,l){var c,d=i._id+"-scroll"+n,u=i.classPrefix;i.getEl().appendChild(e.createFragment('
    ')),i.draghelper=new t(d+"t",{start:function(){c=i.getEl("body")["scroll"+r],e.addClass(e.get(d),u+"active")},drag:function(e){var t,d,u,f,p=i.layoutRect();d=p.contentW>p.innerW,u=p.contentH>p.innerH,f=i.getEl("body")["client"+a]-2*o,f-=d&&u?i.getEl("scroll"+n)["client"+l]:0,t=f/i.getEl("body")["scroll"+a],i.getEl("body")["scroll"+r]=c+e["delta"+s]/t},stop:function(){e.removeClass(e.get(d),u+"active")}})}i.addClass("scroll"),n("v","Top","Height","Y","Width"),n("h","Left","Width","X","Height")}var i=this,o=2;i.settings.autoScroll&&(i._hasScroll||(i._hasScroll=!0,r(),i.on("wheel",function(e){var t=i.getEl("body");t.scrollLeft+=10*(e.deltaX||0),t.scrollTop+=10*e.deltaY,n()}),e.on(i.getEl("body"),"scroll",n)),n())}}}),r(Y,[j,K],function(e,t){return e.extend({Defaults:{layout:"fit",containerCls:"panel"},Mixins:[t],renderHtml:function(){var e=this,t=e._layout,n=e.settings.html;return e.preRender(),t.preRender(e),"undefined"==typeof n?n='
    '+t.renderHtml(e)+"
    ":("function"==typeof n&&(n=n.call(e)),e._hasBody=!1),'
    '+(e._preBodyHtml||"")+n+"
    "}})}),r(G,[W],function(e){function t(t,n,r){var i,o,a,s,l,c,d,u,f,p;return f=e.getViewPort(),o=e.getPos(n),a=o.x,s=o.y,t._fixed&&(a-=f.x,s-=f.y),i=t.getEl(),p=e.getSize(i),l=p.width,c=p.height,p=e.getSize(n),d=p.width,u=p.height,r=(r||"").split(""),"b"===r[0]&&(s+=u),"r"===r[1]&&(a+=d),"c"===r[0]&&(s+=Math.round(u/2)),"c"===r[1]&&(a+=Math.round(d/2)),"b"===r[3]&&(s-=c),"r"===r[4]&&(a-=l),"c"===r[3]&&(s-=Math.round(c/2)),"c"===r[4]&&(a-=Math.round(l/2)),{x:a,y:s,w:l,h:c}}return{testMoveRel:function(n,r){for(var i=e.getViewPort(),o=0;o0&&a.x+a.w0&&a.y+a.hi.x&&a.x+a.wi.y&&a.y+a.he?0:e+n>t?(e=t-n,0>e?0:e):e}var i=this;if(i.settings.constrainToViewport){var o=e.getViewPort(window),a=i.layoutRect();t=r(t,o.w+o.x,a.w),n=r(n,o.h+o.y,a.h)}return i._rendered?i.layoutRect({x:t,y:n}).repaint():(i.settings.x=t,i.settings.y=n),i.fire("move",{x:t,y:n}),i}}}),r(X,[W],function(e){return{resizeToContent:function(){this._layoutRect.autoResize=!0,this._lastRect=null,this.reflow()},resizeTo:function(t,n){if(1>=t||1>=n){var r=e.getWindowSize();t=1>=t?t*r.w:t,n=1>=n?n*r.h:n}return this._layoutRect.autoResize=!1,this.layoutRect({minW:t,minH:n,w:t,h:n}).reflow()},resizeBy:function(e,t){var n=this,r=n.layoutRect();return n.resizeTo(r.w+e,r.h+t)}}}),r(J,[Y,G,X,W],function(e,t,n,r){function i(e){var t;for(t=s.length;t--;)s[t]===e&&s.splice(t,1);for(t=l.length;t--;)l[t]===e&&l.splice(t,1)}var o,a,s=[],l=[],c,d=e.extend({Mixins:[t,n],init:function(e){function t(){var e,t=d.zIndex||65535,n;if(l.length)for(e=0;en&&(e.fixed(!1).layoutRect({y:e._autoFixY}).repaint(),t(!1,e._autoFixY-n)):(e._autoFixY=e.layoutRect().y,e._autoFixY'),n=n.firstChild,u.getContainerElm().appendChild(n),setTimeout(function(){r.addClass(n,i+"in"),r.addClass(u.getEl(),i+"in")},0),c=!0),l.push(u),t()}}),u.on("close hide",function(e){if(e.control==u){for(var n=l.length;n--;)l[n]===u&&l.splice(n,1);t()}}),u.on("show",function(){u.parents().each(function(e){return e._fixed?(u.fixed(!0),!1):void 0})}),e.popover&&(u._preBodyHtml='
    ',u.addClass("popover").addClass("bottom").addClass(u.isRtl()?"end":"start"))},fixed:function(e){var t=this;if(t._fixed!=e){if(t._rendered){var n=r.getViewPort();e?t.layoutRect().y-=n.y:t.layoutRect().y+=n.y}t.toggleClass("fixed",e),t._fixed=e}return t},show:function(){var e=this,t,n=e._super();for(t=s.length;t--&&s[t]!==e;);return-1===t&&s.push(e),n},hide:function(){return i(this),this._super()},hideAll:function(){d.hideAll()},close:function(){var e=this;return e.fire("close"),e.remove()},remove:function(){i(this),this._super()},postRender:function(){var e=this;return e.settings.bodyRole&&this.getEl("body").setAttribute("role",e.settings.bodyRole),e._super()}});return d.hideAll=function(){for(var e=s.length;e--;){var t=s[e];t&&t.settings.autohide&&(t.hide(),s.splice(e,1))}},d}),r(Q,[J,Y,W,$],function(e,t,n,r){var i=e.extend({modal:!0,Defaults:{border:1,layout:"flex",containerCls:"panel",role:"dialog",callbacks:{submit:function(){this.fire("submit",{data:this.toJSON()})},close:function(){this.close()}}},init:function(e){var n=this;n._super(e),n.isRtl()&&n.addClass("rtl"),n.addClass("window"),n._fixed=!0,e.buttons&&(n.statusbar=new t({layout:"flex",border:"1 0 0 0",spacing:3,padding:10,align:"center",pack:n.isRtl()?"start":"end",defaults:{type:"button"},items:e.buttons}),n.statusbar.addClass("foot"),n.statusbar.parent(n)),n.on("click",function(e){-1!=e.target.className.indexOf(n.classPrefix+"close")&&n.close()}),n.on("cancel",function(){n.close()}),n.aria("describedby",n.describedBy||n._id+"-none"),n.aria("label",e.title),n._fullscreen=!1},recalc:function(){var e=this,t=e.statusbar,r,i,o,a;e._fullscreen&&(e.layoutRect(n.getWindowSize()),e.layoutRect().contentH=e.layoutRect().innerH),e._super(),r=e.layoutRect(),e.settings.title&&!e._fullscreen&&(i=r.headerW,i>r.w&&(o=r.x-Math.max(0,i/2),e.layoutRect({w:i,x:o}),a=!0)),t&&(t.layoutRect({w:e.layoutRect().innerW}).recalc(),i=t.layoutRect().minW+r.deltaW,i>r.w&&(o=r.x-Math.max(0,i-r.w),e.layoutRect({w:i,x:o}),a=!0)),a&&e.recalc()},initLayoutRect:function(){var e=this,t=e._super(),r=0,i;if(e.settings.title&&!e._fullscreen){i=e.getEl("head");var o=n.getSize(i);t.headerW=o.width,t.headerH=o.height,r+=t.headerH}e.statusbar&&(r+=e.statusbar.layoutRect().h),t.deltaH+=r,t.minH+=r,t.h+=r;var a=n.getWindowSize();return t.x=Math.max(0,a.w/2-t.w/2),t.y=Math.max(0,a.h/2-t.h/2),t},renderHtml:function(){var e=this,t=e._layout,n=e._id,r=e.classPrefix,i=e.settings,o="",a="",s=i.html;return e.preRender(),t.preRender(e),i.title&&(o='
    '+e.encode(i.title)+'
    '),i.url&&(s=''),"undefined"==typeof s&&(s=t.renderHtml(e)),e.statusbar&&(a=e.statusbar.renderHtml()),'
    '+o+'
    '+s+"
    "+a+"
    "},fullscreen:function(e){var t=this,r=document.documentElement,i,o=t.classPrefix,a;if(e!=t._fullscreen)if(n.on(window,"resize",function(){var e;if(t._fullscreen)if(i)t._timer||(t._timer=setTimeout(function(){var e=n.getWindowSize();t.moveTo(0,0).resizeTo(e.w,e.h),t._timer=0},50));else{e=(new Date).getTime();var r=n.getWindowSize();t.moveTo(0,0).resizeTo(r.w,r.h),(new Date).getTime()-e>50&&(i=!0)}}),a=t.layoutRect(),t._fullscreen=e,e){t._initial={x:a.x,y:a.y,w:a.w,h:a.h},t._borderBox=t.parseBox("0"),t.getEl("head").style.display="none",a.deltaH-=a.headerH+2,n.addClass(r,o+"fullscreen"),n.addClass(document.body,o+"fullscreen"),t.addClass("fullscreen");var s=n.getWindowSize();t.moveTo(0,0).resizeTo(s.w,s.h)}else t._borderBox=t.parseBox(t.settings.border),t.getEl("head").style.display="",a.deltaH+=a.headerH,n.removeClass(r,o+"fullscreen"),n.removeClass(document.body,o+"fullscreen"),t.removeClass("fullscreen"),t.moveTo(t._initial.x,t._initial.y).resizeTo(t._initial.w,t._initial.h);return t.reflow()},postRender:function(){var e=this,t;setTimeout(function(){e.addClass("in")},0),e._super(),e.statusbar&&e.statusbar.postRender(),e.focus(),this.dragHelper=new r(e._id+"-dragh",{start:function(){t={x:e.layoutRect().x,y:e.layoutRect().y}},drag:function(n){e.moveTo(t.x+n.deltaX,t.y+n.deltaY)}}),e.on("submit",function(t){t.isDefaultPrevented()||e.close()})},submit:function(){return this.fire("submit",{data:this.toJSON()})},remove:function(){var e=this,t=e.classPrefix;e.dragHelper.destroy(),e._super(),e.statusbar&&this.statusbar.remove(),e._fullscreen&&(n.removeClass(document.documentElement,t+"fullscreen"),n.removeClass(document.body,t+"fullscreen"))}});return i}),r(Z,[Q],function(e){var t=e.extend({init:function(e){e={border:1,padding:20,layout:"flex",pack:"center",align:"center",containerCls:"panel",autoScroll:!0,buttons:{type:"button",text:"Ok",action:"ok"},items:{type:"label",multiline:!0,maxWidth:500,maxHeight:200}},this._super(e)},Statics:{OK:1,OK_CANCEL:2,YES_NO:3,YES_NO_CANCEL:4,msgBox:function(n){var r,i=n.callback||function(){};switch(n.buttons){case t.OK_CANCEL:r=[{type:"button",text:"Ok",subtype:"primary",onClick:function(e){e.control.parents()[1].close(),i(!0)}},{type:"button",text:"Cancel",onClick:function(e){e.control.parents()[1].close(),i(!1)}}];break;case t.YES_NO:r=[{type:"button",text:"Ok",subtype:"primary",onClick:function(e){e.control.parents()[1].close(),i(!0)}}];break;case t.YES_NO_CANCEL:r=[{type:"button",text:"Ok",subtype:"primary",onClick:function(e){e.control.parents()[1].close()}}];break;default:r=[{type:"button",text:"Ok",subtype:"primary",onClick:function(e){e.control.parents()[1].close(),i(!0)}}]}return new e({padding:20,x:n.x,y:n.y,minWidth:300,minHeight:100,layout:"flex",pack:"center",align:"center",buttons:r,title:n.title,role:"alertdialog",items:{type:"label",multiline:!0,maxWidth:500,maxHeight:200,text:n.text},onPostRender:function(){this.aria("describedby",this.items()[0]._id)},onClose:n.onClose,onCancel:function(){i(!1)}}).renderTo(document.body).reflow()},alert:function(e,n){return"string"==typeof e&&(e={text:e}),e.callback=n,t.msgBox(e)},confirm:function(e,n){return"string"==typeof e&&(e={text:e}),e.callback=n,e.buttons=t.OK_CANCEL,t.msgBox(e)}}});return t}),r(et,[Q,Z],function(e,t){return function(n){function r(){return o.length?o[o.length-1]:void 0}var i=this,o=[];i.windows=o,i.open=function(t,r){var i;return n.editorManager.activeEditor=n,t.title=t.title||" ",t.url=t.url||t.file,t.url&&(t.width=parseInt(t.width||320,10),t.height=parseInt(t.height||240,10)),t.body&&(t.items={defaults:t.defaults,type:t.bodyType||"form",items:t.body}),t.url||t.buttons||(t.buttons=[{text:"Ok",subtype:"primary",onclick:function(){i.find("form")[0].submit()}},{text:"Cancel",onclick:function(){i.close()}}]),i=new e(t),o.push(i),i.on("close",function(){for(var e=o.length;e--;)o[e]===i&&o.splice(e,1);n.focus()}),t.data&&i.on("postRender",function(){this.find("*").each(function(e){var n=e.name();n in t.data&&e.value(t.data[n])})}),i.features=t||{},i.params=r||{},n.nodeChanged(),i.renderTo(document.body).reflow()},i.alert=function(e,r,i){t.alert(e,function(){r?r.call(i||this):n.focus()})},i.confirm=function(e,n,r){t.confirm(e,function(e){n.call(r||this,e)})},i.close=function(){r()&&r().close()},i.getParams=function(){return r()?r().params:null},i.setParams=function(e){r()&&(r().params=e)}}}),r(tt,[T,A,C,m,h,f],function(e,t,n,r,i,o){return function(a){function s(e,t){try{a.getDoc().execCommand(e,!1,t)}catch(n){}}function l(){var e=a.getDoc().documentMode;return e?e:6}function c(e){return e.isDefaultPrevented()}function d(){function t(e){var t=new i(function(){});o.each(a.getBody().getElementsByTagName("*"),function(e){"SPAN"==e.tagName&&e.setAttribute("mce-data-marked",1),!e.hasAttribute("data-mce-style")&&e.hasAttribute("style")&&a.dom.setAttrib(e,"style",e.getAttribute("style"))}),t.observe(a.getDoc(),{childList:!0,attributes:!0,subtree:!0,attributeFilter:["style"]}),a.getDoc().execCommand(e?"ForwardDelete":"Delete",!1,null);var n=a.selection.getRng(),r=n.startContainer.parentNode;o.each(t.takeRecords(),function(e){if("style"==e.attributeName){var t=e.target.getAttribute("data-mce-style");t?e.target.setAttribute("style",t):e.target.removeAttribute("style")}o.each(e.addedNodes,function(e){if("SPAN"==e.nodeName&&!e.getAttribute("mce-data-marked")){var t,i;e==r&&(t=n.startOffset,i=e.firstChild),U.remove(e,!0),i&&(n.setStart(i,t),n.setEnd(i,t),a.selection.setRng(n))}})}),t.disconnect(),o.each(a.dom.select("span[mce-data-marked]"),function(e){e.removeAttribute("mce-data-marked")})}var n=a.getDoc(),r="data:text/mce-internal,",i=window.MutationObserver,s;i||(s=!0,i=function(){function e(e){var t=e.relatedNode||e.target;n.push({target:t,addedNodes:[t]})}function t(e){var t=e.relatedNode||e.target;n.push({target:t,attributeName:e.attrName})}var n=[],r;this.observe=function(n){r=n,r.addEventListener("DOMSubtreeModified",e,!1),r.addEventListener("DOMNodeInsertedIntoDocument",e,!1),r.addEventListener("DOMNodeInserted",e,!1),r.addEventListener("DOMAttrModified",t,!1)},this.disconnect=function(){r.removeEventListener("DOMNodeInserted",e),r.removeEventListener("DOMAttrModified",t),r.removeEventListener("DOMSubtreeModified",e,!1)},this.takeRecords=function(){return n}}),a.on("keydown",function(n){var r=n.keyCode==V,i=e.metaKeyPressed(n);if(!c(n)&&(r||n.keyCode==W)){var o=a.selection.getRng(),s=o.startContainer,l=o.startOffset;if(!i&&o.collapsed&&3==s.nodeType&&(r?l0))return;n.preventDefault(),i&&a.selection.getSel().modify("extend",r?"forward":"backward","word"),t(r)}}),a.on("keypress",function(n){c(n)||q.isCollapsed()||!n.charCode||e.metaKeyPressed(n)||(n.preventDefault(),t(!0),a.selection.setContent(String.fromCharCode(n.charCode)))}),a.addCommand("Delete",function(){t()}),a.addCommand("ForwardDelete",function(){t(!0)}),s||(a.on("dragstart",function(e){e.dataTransfer.setData("URL","data:text/mce-internal,"+escape(a.selection.getContent()))}),a.on("drop",function(e){if(!c(e)){var i=e.dataTransfer.getData("URL");if(!i||-1==i.indexOf(r)||!n.caretRangeFromPoint)return;i=unescape(i.substr(r.length)),n.caretRangeFromPoint&&(e.preventDefault(),t(),a.selection.setRng(n.caretRangeFromPoint(e.x,e.y)),a.insertContent(i))}}),a.on("cut",function(e){!c(e)&&e.clipboardData&&(e.preventDefault(),e.clipboardData.clearData(),e.clipboardData.setData("text/html",a.selection.getContent()),e.clipboardData.setData("text/plain",a.selection.getContent({format:"text"})),t(!0))}))}function u(){function e(e){var t=U.create("body"),n=e.cloneContents();return t.appendChild(n),q.serializer.serialize(t,{format:"html"})}function n(n){if(!n.setStart){if(n.item)return!1;var r=n.duplicate();return r.moveToElementText(a.getBody()),t.compareRanges(n,r)}var i=e(n),o=U.createRng();o.selectNode(a.getBody());var s=e(o);return i===s}a.on("keydown",function(e){var t=e.keyCode,r,i;if(!c(e)&&(t==V||t==W)){if(r=a.selection.isCollapsed(),i=a.getBody(),r&&!U.isEmpty(i))return;if(!r&&!n(a.selection.getRng()))return;e.preventDefault(),a.setContent(""),i.firstChild&&U.isBlock(i.firstChild)?a.selection.setCursorLocation(i.firstChild,0):a.selection.setCursorLocation(i,0),a.nodeChanged()}})}function f(){a.on("keydown",function(t){!c(t)&&65==t.keyCode&&e.metaKeyPressed(t)&&(t.preventDefault(),a.execCommand("SelectAll"))})}function p(){a.settings.content_editable||(U.bind(a.getDoc(),"focusin",function(){q.setRng(q.getRng())}),U.bind(a.getDoc(),"mousedown",function(e){e.target==a.getDoc().documentElement&&(a.getBody().focus(),q.setRng(q.getRng()))}))}function m(){a.on("keydown",function(e){if(!c(e)&&e.keyCode===W&&q.isCollapsed()&&0===q.getRng(!0).startOffset){var t=q.getNode(),n=t.previousSibling;if("HR"==t.nodeName)return U.remove(t),void e.preventDefault();n&&n.nodeName&&"hr"===n.nodeName.toLowerCase()&&(U.remove(n),e.preventDefault())}})}function h(){window.Range.prototype.getClientRects||a.on("mousedown",function(e){if(!c(e)&&"HTML"===e.target.nodeName){var t=a.getBody();t.blur(),setTimeout(function(){t.focus()},0)}})}function g(){a.on("click",function(e){e=e.target,/^(IMG|HR)$/.test(e.nodeName)&&q.getSel().setBaseAndExtent(e,0,e,1),"A"==e.nodeName&&U.hasClass(e,"mce-item-anchor")&&q.select(e),a.nodeChanged()})}function v(){function e(){var e=U.getAttribs(q.getStart().cloneNode(!1));return function(){var t=q.getStart();t!==a.getBody()&&(U.setAttrib(t,"style",null),z(e,function(e){t.setAttributeNode(e.cloneNode(!0))}))}}function t(){return!q.isCollapsed()&&U.getParent(q.getStart(),U.isBlock)!=U.getParent(q.getEnd(),U.isBlock)}a.on("keypress",function(n){var r;return c(n)||8!=n.keyCode&&46!=n.keyCode||!t()?void 0:(r=e(),a.getDoc().execCommand("delete",!1,null),r(),n.preventDefault(),!1)}),U.bind(a.getDoc(),"cut",function(n){var r;!c(n)&&t()&&(r=e(),setTimeout(function(){r()},0))})}function y(){var e,n;a.on("selectionchange",function(){n&&(clearTimeout(n),n=0),n=window.setTimeout(function(){if(!a.removed){var n=q.getRng();e&&t.compareRanges(n,e)||(a.nodeChanged(),e=n)}},50)})}function b(){document.body.setAttribute("role","application")}function C(){a.on("keydown",function(e){if(!c(e)&&e.keyCode===W&&q.isCollapsed()&&0===q.getRng(!0).startOffset){var t=q.getNode().previousSibling;if(t&&t.nodeName&&"table"===t.nodeName.toLowerCase())return e.preventDefault(),!1}})}function x(){l()>7||(s("RespectVisibilityInDesign",!0),a.contentStyles.push(".mceHideBrInPre pre br {display: none}"),U.addClass(a.getBody(),"mceHideBrInPre"),$.addNodeFilter("pre",function(e){for(var t=e.length,r,i,o,a;t--;)for(r=e[t].getAll("br"),i=r.length;i--;)o=r[i],a=o.prev,a&&3===a.type&&"\n"!=a.value.charAt(a.value-1)?a.value+="\n":o.parent.insert(new n("#text",3),o,!0).value="\n"}),K.addNodeFilter("pre",function(e){for(var t=e.length,n,r,i,o;t--;)for(n=e[t].getAll("br"),r=n.length;r--;)i=n[r],o=i.prev,o&&3==o.type&&(o.value=o.value.replace(/\r?\n$/,""))}))}function w(){U.bind(a.getBody(),"mouseup",function(){var e,t=q.getNode();"IMG"==t.nodeName&&((e=U.getStyle(t,"width"))&&(U.setAttrib(t,"width",e.replace(/[^0-9%]+/g,"")),U.setStyle(t,"width","")),(e=U.getStyle(t,"height"))&&(U.setAttrib(t,"height",e.replace(/[^0-9%]+/g,"")),U.setStyle(t,"height","")))})}function _(){a.on("keydown",function(t){var n,r,i,o,s;if(!c(t)&&t.keyCode==e.BACKSPACE&&(n=q.getRng(),r=n.startContainer,i=n.startOffset,o=U.getRoot(),s=r,n.collapsed&&0===i)){for(;s&&s.parentNode&&s.parentNode.firstChild==s&&s.parentNode!=o;)s=s.parentNode;"BLOCKQUOTE"===s.tagName&&(a.formatter.toggle("blockquote",null,s),n=U.createRng(),n.setStart(r,0),n.setEnd(r,0),q.setRng(n))}})}function N(){function e(){a._refreshContentEditable(),s("StyleWithCSS",!1),s("enableInlineTableEditing",!1),j.object_resizing||s("enableObjectResizing",!1)}j.readonly||a.on("BeforeExecCommand MouseDown",e)}function E(){function e(){z(U.select("a"),function(e){var t=e.parentNode,n=U.getRoot();if(t.lastChild===e){for(;t&&!U.isBlock(t);){if(t.parentNode.lastChild!==t||t===n)return;t=t.parentNode}U.add(t,"br",{"data-mce-bogus":1})}})}a.on("SetContent ExecCommand",function(t){("setcontent"==t.type||"mceInsertLink"===t.command)&&e()})}function k(){j.forced_root_block&&a.on("init",function(){s("DefaultParagraphSeparator",j.forced_root_block)})}function S(){a.on("Undo Redo SetContent",function(e){e.initial||a.execCommand("mceRepaint")})}function T(){a.on("keydown",function(e){var t;c(e)||e.keyCode!=W||(t=a.getDoc().selection.createRange(),t&&t.item&&(e.preventDefault(),a.undoManager.beforeChange(),U.remove(t.item(0)),a.undoManager.add()))})}function R(){var e;l()>=10&&(e="",z("p div h1 h2 h3 h4 h5 h6".split(" "),function(t,n){e+=(n>0?",":"")+t+":empty"}),a.contentStyles.push(e+"{padding-right: 1px !important}"))}function A(){l()<9&&($.addNodeFilter("noscript",function(e){for(var t=e.length,n,r;t--;)n=e[t],r=n.firstChild,r&&n.attr("data-mce-innertext",r.value)}),K.addNodeFilter("noscript",function(e){for(var t=e.length,i,o,a;t--;)i=e[t],o=e[t].firstChild,o?o.value=r.decode(o.value):(a=i.attributes.map["data-mce-innertext"],a&&(i.attr("data-mce-innertext",null),o=new n("#text",3),o.value=a,o.raw=!0,i.append(o)))}))}function B(){function e(e,t){var n=i.createTextRange();try{n.moveToPoint(e,t)}catch(r){n=null}return n}function t(t){var r;t.button?(r=e(t.x,t.y),r&&(r.compareEndPoints("StartToStart",a)>0?r.setEndPoint("StartToStart",a):r.setEndPoint("EndToEnd",a),r.select())):n()}function n(){var e=r.selection.createRange();a&&!e.item&&0===e.compareEndPoints("StartToEnd",e)&&a.select(),U.unbind(r,"mouseup",n),U.unbind(r,"mousemove",t),a=o=0}var r=U.doc,i=r.body,o,a,s;r.documentElement.unselectable=!0,U.bind(r,"mousedown contextmenu",function(i){if("HTML"===i.target.nodeName){if(o&&n(),s=r.documentElement,s.scrollHeight>s.clientHeight)return;o=1,a=e(i.x,i.y),a&&(U.bind(r,"mouseup",n),U.bind(r,"mousemove",t),U.getRoot().focus(),a.select())}})}function L(){a.on("keyup focusin mouseup",function(t){65==t.keyCode&&e.metaKeyPressed(t)||q.normalize()},!0)}function D(){a.contentStyles.push("img:-moz-broken {-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}")}function M(){a.inline||a.on("keydown",function(){document.activeElement==document.body&&a.getWin().focus()})}function H(){a.inline||(a.contentStyles.push("body {min-height: 150px}"),a.on("click",function(e){"HTML"==e.target.nodeName&&(a.getBody().focus(),a.selection.normalize(),a.nodeChanged())}))}function P(){i.mac&&a.on("keydown",function(t){!e.metaKeyPressed(t)||37!=t.keyCode&&39!=t.keyCode||(t.preventDefault(),a.selection.getSel().modify("move",37==t.keyCode?"backward":"forward","word"))})}function O(){s("AutoUrlDetect",!1)}function I(){a.inline||a.on("focus blur",function(){var e=a.dom.create("br");a.getBody().appendChild(e),e.parentNode.removeChild(e)},!0)}function F(){a.on("click",function(e){"A"===e.target.tagName&&e.preventDefault()}),a.contentStyles.push(".mce-content-body {-webkit-touch-callout: none}")}var z=o.each,W=e.BACKSPACE,V=e.DELETE,U=a.dom,q=a.selection,j=a.settings,$=a.parser,K=a.serializer,Y=i.gecko,G=i.ie,X=i.webkit;C(),_(),u(),L(),X&&(d(),p(),g(),k(),i.iOS?(y(),M(),H(),F()):f()),G&&i.ie<11&&(m(),b(),x(),w(),T(),R(),A(),B()),i.ie>=11&&(H(),I()),i.ie&&(f(),O()),Y&&(m(),h(),v(),N(),E(),S(),D(),P())}}),r(nt,[f],function(e){function t(){return!1}function n(){return!0}var r="__bindings",i=e.makeMap("focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange mouseout mouseenter mouseleave keydown keypress keyup contextmenu dragstart dragend dragover draggesture dragdrop drop drag"," ");return{fire:function(e,i,o){var a=this,s,l,c,d,u;if(!a.removed){if(e=e.toLowerCase(),i=i||{},i.type=e,i.target||(i.target=a),i.preventDefault||(i.preventDefault=function(){i.isDefaultPrevented=n},i.stopPropagation=function(){i.isPropagationStopped=n},i.stopImmediatePropagation=function(){i.isImmediatePropagationStopped=n},i.isDefaultPrevented=t,i.isPropagationStopped=t,i.isImmediatePropagationStopped=t),a[r]&&(s=a[r][e]))for(l=0,c=s.length;c>l&&(s[l]=d=s[l],!i.isImmediatePropagationStopped());l++)if(d.call(a,i)===!1)return i.preventDefault(),i;if(o!==!1&&a.parent)for(u=a.parent();u&&!i.isPropagationStopped();)u.fire(e,i,!1),u=u.parent();return i}},on:function(e,t,n){var o=this,a,s,l,c;if(t===!1&&(t=function(){return!1}),t)for(l=e.toLowerCase().split(" "),c=l.length;c--;)e=l[c],a=o[r],a||(a=o[r]={}),s=a[e],s||(s=a[e]=[],o.bindNative&&i[e]&&o.bindNative(e)),n?s.unshift(t):s.push(t);return o},off:function(e,t){var n=this,o,a=n[r],s,l,c,d;if(a)if(e)for(c=e.toLowerCase().split(" "),o=c.length;o--;){if(e=c[o],s=a[e],!e){for(l in a)a[e].length=0;return n}if(s){if(t)for(d=s.length;d--;)s[d]===t&&s.splice(d,1);else s.length=0;!s.length&&n.unbindNative&&i[e]&&(n.unbindNative(e),delete a[e])}}else{if(n.unbindNative)for(e in a)n.unbindNative(e);n[r]=[]}return n},hasEventListeners:function(e){var t=this[r];return e=e.toLowerCase(),!(!t||!t[e]||0===t[e].length)}}}),r(rt,[f,h],function(e,t){var n=e.each,r=e.explode,i={f9:120,f10:121,f11:122};return function(o){var a=this,s={};o.on("keyup keypress keydown",function(e){(e.altKey||e.ctrlKey||e.metaKey)&&n(s,function(n){var r=t.mac?e.metaKey:e.ctrlKey;if(n.ctrl==r&&n.alt==e.altKey&&n.shift==e.shiftKey)return e.keyCode==n.keyCode||e.charCode&&e.charCode==n.charCode?(e.preventDefault(),"keydown"==e.type&&n.func.call(n.scope),!0):void 0})}),a.add=function(t,a,l,c){var d;return d=l,"string"==typeof l?l=function(){o.execCommand(d,!1,null)}:e.isArray(d)&&(l=function(){o.execCommand(d[0],d[1],d[2])}),n(r(t.toLowerCase()),function(e){var t={func:l,scope:c||o,desc:o.translate(a),alt:!1,ctrl:!1,shift:!1};n(r(e,"+"),function(e){switch(e){case"alt":case"ctrl":case"shift":t[e]=!0;break;default:t.charCode=e.charCodeAt(0),t.keyCode=i[e]||e.toUpperCase().charCodeAt(0)}}),s[(t.ctrl?"ctrl":"")+","+(t.alt?"alt":"")+","+(t.shift?"shift":"")+","+t.keyCode]=t}),!0}}}),r(it,[v,b,C,k,E,B,L,D,M,H,P,O,y,d,et,x,_,tt,h,f,nt,rt],function(e,n,r,i,o,a,s,l,c,d,u,f,p,m,h,g,v,y,b,C,x,w){function _(e,t){return"selectionchange"==t?e.getDoc():!e.inline&&/^mouse|click|contextmenu|drop/.test(t)?e.getDoc():e.getBody()}function N(e,t,r){var i=this,o,a;o=i.documentBaseUrl=r.documentBaseURL,a=r.baseURI,i.settings=t=T({id:e,theme:"modern",delta_width:0,delta_height:0,popup_css:"",plugins:"",document_base_url:o,add_form_submit_trigger:!0,submit_patch:!0,add_unload_trigger:!0,convert_urls:!0,relative_urls:!0,remove_script_host:!0,object_resizing:!0,doctype:"",visual:!0,font_size_style_values:"xx-small,x-small,small,medium,large,x-large,xx-large",font_size_legacy_values:"xx-small,small,medium,large,x-large,xx-large,300%",forced_root_block:"p",hidden_input:!0,padd_empty_editor:!0,render_ui:!0,indentation:"30px",inline_styles:!0,convert_fonts_to_spans:!0,indent:"simple",indent_before:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist",indent_after:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist",validate:!0,entity_encoding:"named",url_converter:i.convertURL,url_converter_scope:i,ie7_compat:!0},t),n.language=t.language||"en",n.languageLoad=t.language_load,n.baseURL=r.baseURL,i.id=t.id=e,i.isNotDirty=!0,i.plugins={},i.documentBaseURI=new f(t.document_base_url||o,{base_uri:a}),i.baseURI=a,i.contentCSS=[],i.contentStyles=[],i.shortcuts=new w(i),i.execCommands={},i.queryStateCommands={},i.queryValueCommands={},i.loadedCSS={},i.suffix=r.suffix,i.editorManager=r,i.inline=t.inline,r.fire("SetupEditor",i),i.execCallback("setup",i)}var E=e.DOM,k=n.ThemeManager,S=n.PluginManager,T=C.extend,R=C.each,A=C.explode,B=C.inArray,L=C.trim,D=C.resolve,M=m.Event,H=b.gecko,P=b.ie;return N.prototype={render:function(){function e(){E.unbind(window,"ready",e),n.render()}function t(){var e=p.ScriptLoader;if(r.language&&"en"!=r.language&&!r.language_url&&(r.language_url=n.editorManager.baseURL+"/langs/"+r.language+".js"),r.language_url&&e.add(r.language_url),r.theme&&"function"!=typeof r.theme&&"-"!=r.theme.charAt(0)&&!k.urls[r.theme]){var t=r.theme_url;t=t?n.documentBaseURI.toAbsolute(t):"themes/"+r.theme+"/theme"+o+".js",k.load(r.theme,t)}C.isArray(r.plugins)&&(r.plugins=r.plugins.join(" ")),R(r.external_plugins,function(e,t){S.load(t,e),r.plugins+=" "+t}),R(r.plugins.split(/[ ,]/),function(e){if(e=L(e),e&&!S.urls[e])if("-"==e.charAt(0)){e=e.substr(1,e.length);var t=S.dependencies(e);R(t,function(e){var t={prefix:"plugins/",resource:e,suffix:"/plugin"+o+".js"};e=S.createUrl(t,e),S.load(e.resource,e)})}else S.load(e,{prefix:"plugins/",resource:e,suffix:"/plugin"+o+".js"})}),e.loadQueue(function(){n.removed||n.init()})}var n=this,r=n.settings,i=n.id,o=n.suffix;if(!M.domLoaded)return void E.bind(window,"ready",e);if(n.getElement()&&b.contentEditable){r.inline?n.inline=!0:(n.orgVisibility=n.getElement().style.visibility,n.getElement().style.visibility="hidden");var a=n.getElement().form||E.getParent(i,"form");a&&(n.formElement=a,r.hidden_input&&!/TEXTAREA|INPUT/i.test(n.getElement().nodeName)&&(E.insertAfter(E.create("input",{type:"hidden",name:i}),i),n.hasHiddenInput=!0),n.formEventDelegate=function(e){n.fire(e.type,e)},E.bind(a,"submit reset",n.formEventDelegate),n.on("reset",function(){n.setContent(n.startContent,{format:"raw"})}),!r.submit_patch||a.submit.nodeType||a.submit.length||a._mceOldSubmit||(a._mceOldSubmit=a.submit,a.submit=function(){return n.editorManager.triggerSave(),n.isNotDirty=!0,a._mceOldSubmit(a)})),n.windowManager=new h(n),"xml"==r.encoding&&n.on("GetContent",function(e){e.save&&(e.content=E.encode(e.content))}),r.add_form_submit_trigger&&n.on("submit",function(){n.initialized&&n.save()}),r.add_unload_trigger&&(n._beforeUnload=function(){!n.initialized||n.destroyed||n.isHidden()||n.save({format:"raw",no_events:!0,set_dirty:!1})},n.editorManager.on("BeforeUnload",n._beforeUnload)),t()}},init:function(){function e(n){var r=S.get(n),i,o;i=S.urls[n]||t.documentBaseUrl.replace(/\/$/,""),n=L(n),r&&-1===B(h,n)&&(R(S.dependencies(n),function(t){e(t)}),o=new r(t,i),t.plugins[n]=o,o.init&&(o.init(t,i),h.push(n)))}var t=this,n=t.settings,r=t.getElement(),i,o,a,s,l,c,d,u,f,p,m,h=[];if(t.rtl=this.editorManager.i18n.rtl,t.editorManager.add(t),n.aria_label=n.aria_label||E.getAttrib(r,"aria-label",t.getLang("aria.rich_text_area")),n.theme&&("function"!=typeof n.theme?(n.theme=n.theme.replace(/-/,""),c=k.get(n.theme),t.theme=new c(t,k.urls[n.theme]),t.theme.init&&t.theme.init(t,k.urls[n.theme]||t.documentBaseUrl.replace(/\/$/,""))):t.theme=n.theme),R(n.plugins.replace(/\-/g,"").split(/[ ,]/),e),n.render_ui&&t.theme&&(t.orgDisplay=r.style.display,"function"!=typeof n.theme?(i=n.width||r.style.width||r.offsetWidth,o=n.height||r.style.height||r.offsetHeight,a=n.min_height||100,p=/^[0-9\.]+(|px)$/i,p.test(""+i)&&(i=Math.max(parseInt(i,10),100)),p.test(""+o)&&(o=Math.max(parseInt(o,10),a)),l=t.theme.renderUI({targetNode:r,width:i,height:o,deltaWidth:n.delta_width,deltaHeight:n.delta_height}),n.content_editable||(E.setStyles(l.sizeContainer||l.editorContainer,{wi2dth:i,h2eight:o}),o=(l.iframeHeight||o)+("number"==typeof o?l.deltaHeight||0:""),a>o&&(o=a))):(l=n.theme(t,r),l.editorContainer.nodeType&&(l.editorContainer=l.editorContainer.id=l.editorContainer.id||t.id+"_parent"),l.iframeContainer.nodeType&&(l.iframeContainer=l.iframeContainer.id=l.iframeContainer.id||t.id+"_iframecontainer"),o=l.iframeHeight||r.offsetHeight),t.editorContainer=l.editorContainer),n.content_css&&R(A(n.content_css),function(e){t.contentCSS.push(t.documentBaseURI.toAbsolute(e)) +}),n.content_style&&t.contentStyles.push(n.content_style),n.content_editable)return r=s=l=null,t.initContentBody();for(t.iframeHTML=n.doctype+"",n.document_base_url!=t.documentBaseUrl&&(t.iframeHTML+=''),!b.caretAfter&&n.ie7_compat&&(t.iframeHTML+=''),t.iframeHTML+='',m=0;m',t.loadedCSS[g]=!0}u=n.body_id||"tinymce",-1!=u.indexOf("=")&&(u=t.getParam("body_id","","hash"),u=u[t.id]||u),f=n.body_class||"",-1!=f.indexOf("=")&&(f=t.getParam("body_class","","hash"),f=f[t.id]||""),t.iframeHTML+='
    ";var v='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinymce.get("'+t.id+'");document.write(ed.iframeHTML);document.close();ed.initContentBody(true);})()';if(document.domain!=location.hostname&&(d=v),s=E.add(l.iframeContainer,"iframe",{id:t.id+"_ifr",src:d||'javascript:""',frameBorder:"0",allowTransparency:"true",title:t.editorManager.translate("Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help"),style:{width:"100%",height:o,display:"block"}}),P)try{t.getDoc()}catch(y){s.src=d=v}t.contentAreaContainer=l.iframeContainer,l.editorContainer&&(E.get(l.editorContainer).style.display=t.orgDisplay),E.get(t.id).style.display="none",E.setAttrib(t.id,"aria-hidden",!0),d||t.initContentBody(),r=s=l=null},initContentBody:function(t){var n=this,o=n.settings,f=E.get(n.id),p=n.getDoc(),m,h;o.inline||(n.getElement().style.visibility=n.orgVisibility),t||o.content_editable||(p.open(),p.write(n.iframeHTML),p.close()),o.content_editable&&(n.on("remove",function(){var e=this.getBody();E.removeClass(e,"mce-content-body"),E.removeClass(e,"mce-edit-focus"),E.setAttrib(e,"tabIndex",null),E.setAttrib(e,"contentEditable",null)}),E.addClass(f,"mce-content-body"),f.tabIndex=-1,n.contentDocument=p=o.content_document||document,n.contentWindow=o.content_window||window,n.bodyElement=f,o.content_document=o.content_window=null,o.root_name=f.nodeName.toLowerCase()),m=n.getBody(),m.disabled=!0,o.readonly||(n.inline&&"static"==E.getStyle(m,"position",!0)&&(m.style.position="relative"),m.contentEditable=n.getParam("content_editable_state",!0)),m.disabled=!1,n.schema=new g(o),n.dom=new e(p,{keep_values:!0,url_converter:n.convertURL,url_converter_scope:n,hex_colors:o.force_hex_style_colors,class_filter:o.class_filter,update_styles:!0,root_element:o.content_editable?n.id:null,collect:o.content_editable,schema:n.schema,onSetAttrib:function(e){n.fire("SetAttrib",e)}}),n.parser=new v(o,n.schema),n.parser.addAttributeFilter("src,href,style",function(e,t){for(var r=e.length,i,o=n.dom,a,s;r--;)i=e[r],a=i.attr(t),s="data-mce-"+t,i.attributes.map[s]||("style"===t?i.attr(s,o.serializeStyle(o.parseStyle(a),i.name)):i.attr(s,n.convertURL(a,t,i.name)))}),n.parser.addNodeFilter("script",function(e){for(var t=e.length,n;t--;)n=e[t],n.attr("type","mce-"+(n.attr("type")||"text/javascript"))}),n.parser.addNodeFilter("#cdata",function(e){for(var t=e.length,n;t--;)n=e[t],n.type=8,n.name="#comment",n.value="[CDATA["+n.value+"]]"}),n.parser.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div",function(e){for(var t=e.length,i,o=n.schema.getNonEmptyElements();t--;)i=e[t],i.isEmpty(o)&&(i.empty().append(new r("br",1)).shortEnded=!0)}),n.serializer=new i(o,n),n.selection=new a(n.dom,n.getWin(),n.serializer,n),n.formatter=new s(n),n.undoManager=new l(n),n.forceBlocks=new d(n),n.enterKey=new c(n),n.editorCommands=new u(n),n.fire("PreInit"),o.browser_spellcheck||o.gecko_spellcheck||(p.body.spellcheck=!1,E.setAttrib(m,"spellcheck","false")),n.fire("PostRender"),n.quirks=y(n),o.directionality&&(m.dir=o.directionality),o.nowrap&&(m.style.whiteSpace="nowrap"),o.protect&&n.on("BeforeSetContent",function(e){R(o.protect,function(t){e.content=e.content.replace(t,function(e){return""})})}),n.on("SetContent",function(){n.addVisual(n.getBody())}),o.padd_empty_editor&&n.on("PostProcess",function(e){e.content=e.content.replace(/^(]*>( | |\s|\u00a0|)<\/p>[\r\n]*|
    [\r\n]*)$/,"")}),n.load({initial:!0,format:"html"}),n.startContent=n.getContent({format:"raw"}),n.initialized=!0,R(n._pendingNativeEvents,function(e){n.dom.bind(_(n,e),e,function(e){n.fire(e.type,e)})}),n.fire("init"),n.focus(!0),n.nodeChanged({initial:!0}),n.execCallback("init_instance_callback",n),n.contentStyles.length>0&&(h="",R(n.contentStyles,function(e){h+=e+"\r\n"}),n.dom.addStyle(h)),R(n.contentCSS,function(e){n.loadedCSS[e]||(n.dom.loadCSS(e),n.loadedCSS[e]=!0)}),o.auto_focus&&setTimeout(function(){var e=n.editorManager.get(o.auto_focus);e.selection.select(e.getBody(),1),e.selection.collapse(1),e.getBody().focus(),e.getWin().focus()},100),f=p=m=null},focus:function(e){var t,n=this,r=n.selection,i=n.settings.content_editable,o,a,s=n.getDoc(),l;e||(o=r.getRng(),o.item&&(a=o.item(0)),n._refreshContentEditable(),i||(b.opera||n.getBody().focus(),n.getWin().focus()),(H||i)&&(l=n.getBody(),l.setActive&&b.ie<11?l.setActive():l.focus(),i&&r.normalize()),a&&a.ownerDocument==s&&(o=s.body.createControlRange(),o.addElement(a),o.select())),n.editorManager.activeEditor!=n&&((t=n.editorManager.activeEditor)&&t.fire("deactivate",{relatedTarget:n}),n.fire("activate",{relatedTarget:t})),n.editorManager.activeEditor=n},execCallback:function(e){var t=this,n=t.settings[e],r;if(n)return t.callbackLookup&&(r=t.callbackLookup[e])&&(n=r.func,r=r.scope),"string"==typeof n&&(r=n.replace(/\.\w+$/,""),r=r?D(r):0,n=D(n),t.callbackLookup=t.callbackLookup||{},t.callbackLookup[e]={func:n,scope:r}),n.apply(r||t,Array.prototype.slice.call(arguments,1))},translate:function(e){var t=this.settings.language||"en",n=this.editorManager.i18n;return e?n.data[t+"."+e]||e.replace(/\{\#([^\}]+)\}/g,function(e,r){return n.data[t+"."+r]||"{#"+r+"}"}):""},getLang:function(e,n){return this.editorManager.i18n.data[(this.settings.language||"en")+"."+e]||(n!==t?n:"{#"+e+"}")},getParam:function(e,t,n){var r=e in this.settings?this.settings[e]:t,i;return"hash"===n?(i={},"string"==typeof r?R(r.split(r.indexOf("=")>0?/[;,](?![^=;,]*(?:[;,]|$))/:","),function(e){e=e.split("="),i[L(e[0])]=L(e.length>1?e[1]:e)}):i=r,i):r},nodeChanged:function(){var e=this,t=e.selection,n,r,i;!e.initialized||e.settings.disable_nodechange||e.settings.readonly||(i=e.getBody(),n=t.getStart()||i,n=P&&n.ownerDocument!=e.getDoc()?e.getBody():n,"IMG"==n.nodeName&&t.isCollapsed()&&(n=n.parentNode),r=[],e.dom.getParent(n,function(e){return e===i?!0:void r.push(e)}),e.fire("NodeChange",{element:n,parents:r}))},addButton:function(e,t){var n=this;t.cmd&&(t.onclick=function(){n.execCommand(t.cmd)}),t.text||t.icon||(t.icon=e),n.buttons=n.buttons||{},t.tooltip=t.tooltip||t.title,n.buttons[e]=t},addMenuItem:function(e,t){var n=this;t.cmd&&(t.onclick=function(){n.execCommand(t.cmd)}),n.menuItems=n.menuItems||{},n.menuItems[e]=t},addCommand:function(e,t,n){this.execCommands[e]={func:t,scope:n||this}},addQueryStateHandler:function(e,t,n){this.queryStateCommands[e]={func:t,scope:n||this}},addQueryValueHandler:function(e,t,n){this.queryValueCommands[e]={func:t,scope:n||this}},addShortcut:function(e,t,n,r){this.shortcuts.add(e,t,n,r)},execCommand:function(e,t,n,r){var i=this,o=0,a;return/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(e)||r&&r.skip_focus||i.focus(),r=T({},r),r=i.fire("BeforeExecCommand",{command:e,ui:t,value:n}),r.isDefaultPrevented()?!1:(a=i.execCommands[e])&&a.func.call(a.scope,t,n)!==!0?(i.fire("ExecCommand",{command:e,ui:t,value:n}),!0):(R(i.plugins,function(r){return r.execCommand&&r.execCommand(e,t,n)?(i.fire("ExecCommand",{command:e,ui:t,value:n}),o=!0,!1):void 0}),o?o:i.theme&&i.theme.execCommand&&i.theme.execCommand(e,t,n)?(i.fire("ExecCommand",{command:e,ui:t,value:n}),!0):i.editorCommands.execCommand(e,t,n)?(i.fire("ExecCommand",{command:e,ui:t,value:n}),!0):(i.getDoc().execCommand(e,t,n),void i.fire("ExecCommand",{command:e,ui:t,value:n})))},queryCommandState:function(e){var t=this,n,r;if(!t._isHidden()){if((n=t.queryStateCommands[e])&&(r=n.func.call(n.scope),r!==!0))return r;if(r=t.editorCommands.queryCommandState(e),-1!==r)return r;try{return t.getDoc().queryCommandState(e)}catch(i){}}},queryCommandValue:function(e){var n=this,r,i;if(!n._isHidden()){if((r=n.queryValueCommands[e])&&(i=r.func.call(r.scope),i!==!0))return i;if(i=n.editorCommands.queryCommandValue(e),i!==t)return i;try{return n.getDoc().queryCommandValue(e)}catch(o){}}},show:function(){var e=this;E.show(e.getContainer()),E.hide(e.id),e.load(),e.fire("show")},hide:function(){var e=this,t=e.getDoc();P&&t&&!e.inline&&t.execCommand("SelectAll"),e.save(),E.hide(e.getContainer()),E.setStyle(e.id,"display",e.orgDisplay),e.fire("hide")},isHidden:function(){return!E.isHidden(this.id)},setProgressState:function(e,t){this.fire("ProgressState",{state:e,time:t})},load:function(e){var n=this,r=n.getElement(),i;return r?(e=e||{},e.load=!0,i=n.setContent(r.value!==t?r.value:r.innerHTML,e),e.element=r,e.no_events||n.fire("LoadContent",e),e.element=r=null,i):void 0},save:function(e){var t=this,n=t.getElement(),r,i;if(n&&t.initialized)return e=e||{},e.save=!0,e.element=n,r=e.content=t.getContent(e),e.no_events||t.fire("SaveContent",e),r=e.content,/TEXTAREA|INPUT/i.test(n.nodeName)?n.value=r:(t.inline||(n.innerHTML=r),(i=E.getParent(t.id,"form"))&&R(i.elements,function(e){return e.name==t.id?(e.value=r,!1):void 0})),e.element=n=null,e.set_dirty!==!1&&(t.isNotDirty=!0),r},setContent:function(e,t){var n=this,r=n.getBody(),i;return t=t||{},t.format=t.format||"html",t.set=!0,t.content=e,t.no_events||n.fire("BeforeSetContent",t),e=t.content,0===e.length||/^\s+$/.test(e)?(i=n.settings.forced_root_block,i&&n.schema.isValidChild(r.nodeName.toLowerCase(),i.toLowerCase())?(e=P&&11>P?"":'
    ',e=n.dom.createHTML(i,n.settings.forced_root_block_attrs,e)):P||(e='
    '),r.innerHTML=e,n.fire("SetContent",t)):("raw"!==t.format&&(e=new o({},n.schema).serialize(n.parser.parse(e,{isRootContent:!0}))),t.content=L(e),n.dom.setHTML(r,t.content),t.no_events||n.fire("SetContent",t)),t.content},getContent:function(e){var t=this,n,r=t.getBody();return e=e||{},e.format=e.format||"html",e.get=!0,e.getInner=!0,e.no_events||t.fire("BeforeGetContent",e),n="raw"==e.format?r.innerHTML:"text"==e.format?r.innerText||r.textContent:t.serializer.serialize(r,e),e.content="text"!=e.format?L(n):n,e.no_events||t.fire("GetContent",e),e.content},insertContent:function(e){this.execCommand("mceInsertContent",!1,e)},isDirty:function(){return!this.isNotDirty},getContainer:function(){var e=this;return e.container||(e.container=E.get(e.editorContainer||e.id+"_parent")),e.container},getContentAreaContainer:function(){return this.contentAreaContainer},getElement:function(){return E.get(this.settings.content_element||this.id)},getWin:function(){var e=this,t;return e.contentWindow||(t=E.get(e.id+"_ifr"),t&&(e.contentWindow=t.contentWindow)),e.contentWindow},getDoc:function(){var e=this,t;return e.contentDocument||(t=e.getWin(),t&&(e.contentDocument=t.document)),e.contentDocument},getBody:function(){return this.bodyElement||this.getDoc().body},convertURL:function(e,t,n){var r=this,i=r.settings;return i.urlconverter_callback?r.execCallback("urlconverter_callback",e,n,!0,t):!i.convert_urls||n&&"LINK"==n.nodeName||0===e.indexOf("file:")||0===e.length?e:i.relative_urls?r.documentBaseURI.toRelative(e):e=r.documentBaseURI.toAbsolute(e,i.remove_script_host)},addVisual:function(e){var n=this,r=n.settings,i=n.dom,o;e=e||n.getBody(),n.hasVisual===t&&(n.hasVisual=r.visual),R(i.select("table,a",e),function(e){var t;switch(e.nodeName){case"TABLE":return o=r.visual_table_class||"mce-item-table",t=i.getAttrib(e,"border"),void(t&&"0"!=t||(n.hasVisual?i.addClass(e,o):i.removeClass(e,o)));case"A":return void(i.getAttrib(e,"href",!1)||(t=i.getAttrib(e,"name")||e.id,o=r.visual_anchor_class||"mce-item-anchor",t&&(n.hasVisual?i.addClass(e,o):i.removeClass(e,o))))}}),n.fire("VisualAid",{element:e,hasVisual:n.hasVisual})},remove:function(){var e=this;if(!e.removed){e.save(),e.fire("remove"),e.off(),e.removed=1,e.hasHiddenInput&&E.remove(e.getElement().nextSibling),E.setStyle(e.id,"display",e.orgDisplay),e.settings.content_editable||(M.unbind(e.getWin()),M.unbind(e.getDoc()));var t=e.getContainer();M.unbind(e.getBody()),M.unbind(t),e.editorManager.remove(e),E.remove(t),e.destroy()}},bindNative:function(e){var t=this;t.settings.readonly||(t.initialized?t.dom.bind(_(t,e),e,function(n){t.fire(e,n)}):t._pendingNativeEvents?t._pendingNativeEvents.push(e):t._pendingNativeEvents=[e])},unbindNative:function(e){var t=this;t.initialized&&t.dom.unbind(e)},destroy:function(e){var t=this,n;if(!t.destroyed){if(!e&&!t.removed)return void t.remove();e&&H&&(M.unbind(t.getDoc()),M.unbind(t.getWin()),M.unbind(t.getBody())),e||(t.editorManager.off("beforeunload",t._beforeUnload),t.theme&&t.theme.destroy&&t.theme.destroy(),t.selection.destroy(),t.dom.destroy()),n=t.formElement,n&&(n._mceOldSubmit&&(n.submit=n._mceOldSubmit,n._mceOldSubmit=null),E.unbind(n,"submit reset",t.formEventDelegate)),t.contentAreaContainer=t.formElement=t.container=t.editorContainer=null,t.settings.content_element=t.bodyElement=t.contentDocument=t.contentWindow=null,t.selection&&(t.selection=t.selection.win=t.selection.dom=t.selection.dom.doc=null),t.destroyed=1}},_refreshContentEditable:function(){var e=this,t,n;e._isHidden()&&(t=e.getBody(),n=t.parentNode,n.removeChild(t),n.appendChild(t),t.focus())},_isHidden:function(){var e;return H?(e=this.selection.getSel(),!e||!e.rangeCount||0===e.rangeCount):0}},T(N.prototype,x),N}),r(ot,[],function(){var e={};return{rtl:!1,add:function(t,n){for(var r in n)e[r]=n[r];this.rtl=this.rtl||"rtl"===e._dir},translate:function(t){if("undefined"==typeof t)return t;if("string"!=typeof t&&t.raw)return t.raw;if(t.push){var n=t.slice(1);t=(e[t[0]]||t[0]).replace(/\{([^\}]+)\}/g,function(e,t){return n[t]})}return e[t]||t},data:e}}),r(at,[v,h],function(e,t){function n(e){function a(){try{return document.activeElement}catch(e){return document.body}}function s(e){return e&&e.startContainer?{startContainer:e.startContainer,startOffset:e.startOffset,endContainer:e.endContainer,endOffset:e.endOffset}:e}function l(e,t){var n;return t.startContainer?(n=e.getDoc().createRange(),n.setStart(t.startContainer,t.startOffset),n.setEnd(t.endContainer,t.endOffset)):n=t,n}function c(e){return!!o.getParent(e,n.isEditorUIElement)}function d(e,t){for(var n=t.getBody();e;){if(e==n)return!0;e=e.parentNode}}function u(n){var u=n.editor;u.on("init",function(){(u.inline||t.ie)&&(u.on("nodechange keyup",function(){var e=document.activeElement;e&&e.id==u.id+"_ifr"&&(e=u.getBody()),d(e,u)&&(u.lastRng=u.selection.getRng())}),t.webkit&&!r&&(r=function(){var t=e.activeEditor;if(t&&t.selection){var n=t.selection.getRng();n&&!n.collapsed&&(u.lastRng=n)}},o.bind(document,"selectionchange",r)))}),u.on("setcontent",function(){u.lastRng=null}),u.on("mousedown",function(){u.selection.lastFocusBookmark=null}),u.on("focusin",function(){var t=e.focusedEditor;u.selection.lastFocusBookmark&&(u.selection.setRng(l(u,u.selection.lastFocusBookmark)),u.selection.lastFocusBookmark=null),t!=u&&(t&&t.fire("blur",{focusedEditor:u}),e.activeEditor=u,e.focusedEditor=u,u.fire("focus",{blurredEditor:t}),u.focus(!0)),u.lastRng=null}),u.on("focusout",function(){window.setTimeout(function(){var t=e.focusedEditor;c(a())||t!=u||(u.fire("blur",{focusedEditor:null}),e.focusedEditor=null,u.selection&&(u.selection.lastFocusBookmark=null))},0)}),i||(i=function(t){var n=e.activeEditor;n&&t.target.ownerDocument==document&&(n.selection&&(n.selection.lastFocusBookmark=s(n.lastRng)),c(t.target)||e.focusedEditor!=n||(n.fire("blur",{focusedEditor:null}),e.focusedEditor=null))},o.bind(document,"focusin",i))}function f(t){e.focusedEditor==t.editor&&(e.focusedEditor=null),e.activeEditor||(o.unbind(document,"selectionchange",r),o.unbind(document,"focusin",i),r=i=null)}e.on("AddEditor",u),e.on("RemoveEditor",f)}var r,i,o=e.DOM;return n.isEditorUIElement=function(e){return-1!==e.className.toString().indexOf("mce-")},n}),r(st,[it,v,O,h,f,nt,ot,at],function(e,n,r,i,o,a,s,l){var c=n.DOM,d=o.explode,u=o.each,f=o.extend,p=0,m,h={majorVersion:"4",minorVersion:"0.20",releaseDate:"2014-03-18",editors:[],i18n:s,activeEditor:null,setup:function(){var e=this,t,n,i="",o;if(n=document.location.href.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,""),/[\/\\]$/.test(n)||(n+="/"),o=window.tinymce||window.tinyMCEPreInit)t=o.base||o.baseURL,i=o.suffix;else for(var a=document.getElementsByTagName("script"),s=0;s0&&u(d(m),function(n){c.get(n)?(l=new e(n,t,a),s.push(l),l.render(!0)):u(document.forms,function(r){u(r.elements,function(r){r.name===n&&(n="mce_editor_"+p++,c.setAttrib(r,"id",n),l=new e(n,t,a),s.push(l),l.render(1))})})});break;case"textareas":case"specific_textareas":u(c.select("textarea"),function(r){t.editor_deselector&&i(r,t.editor_deselector)||(!t.editor_selector||i(r,t.editor_selector))&&(l=new e(n(r),t,a),s.push(l),l.render(!0))})}t.oninit&&(m=h=0,u(s,function(e){h++,e.initialized?m++:e.on("init",function(){m++,m==h&&r(t,"oninit")}),m==h&&r(t,"oninit")}))}var a=this,s=[],l;a.settings=t,c.bind(window,"ready",o)},get:function(e){return e===t?this.editors:this.editors[e]},add:function(e){var t=this,n=t.editors;return n[e.id]=e,n.push(e),t.activeEditor=e,t.fire("AddEditor",{editor:e}),m||(m=function(){t.fire("BeforeUnload")},c.bind(window,"beforeunload",m)),e},createEditor:function(t,n){return this.add(new e(t,n,this))},remove:function(e){var t=this,n,r=t.editors,i,o;{if(e){if("string"==typeof e)return e=e.selector||e,void u(c.select(e),function(e){t.remove(r[e.id])});if(i=e,!r[i.id])return null;for(delete r[i.id],n=0;n=0;n--)t.remove(r[n])}},execCommand:function(t,n,r){var i=this,o=i.get(r);switch(t){case"mceAddEditor":return i.get(r)||new e(r,i.settings,i).render(),!0;case"mceRemoveEditor":return o&&o.remove(),!0;case"mceToggleEditor":return o?(o.isHidden()?o.show():o.hide(),!0):(i.execCommand("mceAddEditor",0,r),!0)}return i.activeEditor?i.activeEditor.execCommand(t,n,r):!1},triggerSave:function(){u(this.editors,function(e){e.save()})},addI18n:function(e,t){s.add(e,t)},translate:function(e){return s.translate(e)}};return f(h,a),h.setup(),window.tinymce=window.tinyMCE=h,h}),r(lt,[st,f],function(e,t){var n=t.each,r=t.explode;e.on("AddEditor",function(e){var t=e.editor;t.on("preInit",function(){function e(e,t){n(t,function(t,n){t&&s.setStyle(e,n,t)}),s.rename(e,"span")}function i(e){s=t.dom,l.convert_fonts_to_spans&&n(s.select("font,u,strike",e.node),function(e){o[e.nodeName.toLowerCase()](s,e)})}var o,a,s,l=t.settings;l.inline_styles&&(a=r(l.font_size_legacy_values),o={font:function(t,n){e(n,{backgroundColor:n.style.backgroundColor,color:n.color,fontFamily:n.face,fontSize:a[parseInt(n.size,10)-1]})},u:function(t,n){e(n,{textDecoration:"underline"})},strike:function(t,n){e(n,{textDecoration:"line-through"})}},t.on("PreProcess SetContent",i))})})}),r(ct,[],function(){return{send:function(e){function t(){!e.async||4==n.readyState||r++>1e4?(e.success&&1e4>r&&200==n.status?e.success.call(e.success_scope,""+n.responseText,n,e):e.error&&e.error.call(e.error_scope,r>1e4?"TIMED_OUT":"GENERAL",n,e),n=null):setTimeout(t,10)}var n,r=0;if(e.scope=e.scope||this,e.success_scope=e.success_scope||e.scope,e.error_scope=e.error_scope||e.scope,e.async=e.async===!1?!1:!0,e.data=e.data||"",n=new XMLHttpRequest){if(n.overrideMimeType&&n.overrideMimeType(e.content_type),n.open(e.type||(e.data?"POST":"GET"),e.url,e.async),e.content_type&&n.setRequestHeader("Content-Type",e.content_type),n.setRequestHeader("X-Requested-With","XMLHttpRequest"),n.send(e.data),!e.async)return t();setTimeout(t,10)}}}}),r(dt,[],function(){function e(t,n){var r,i,o,a;if(n=n||'"',null===t)return"null";if(o=typeof t,"string"==o)return i="\bb t\nn\ff\rr\"\"''\\\\",n+t.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g,function(e,t){return'"'===n&&"'"===e?e:(r=i.indexOf(t),r+1?"\\"+i.charAt(r+1):(e=t.charCodeAt().toString(16),"\\u"+"0000".substring(e.length)+e))})+n;if("object"==o){if(t.hasOwnProperty&&"[object Array]"===Object.prototype.toString.call(t)){for(r=0,i="[";r0?",":"")+e(t[r],n);return i+"]"}i="{";for(a in t)t.hasOwnProperty(a)&&(i+="function"!=typeof t[a]?(i.length>1?","+n:n)+a+n+":"+e(t[a],n):"");return i+"}"}return""+t}return{serialize:e,parse:function(e){try{return window[String.fromCharCode(101)+"val"]("("+e+")")}catch(t){}}}}),r(ut,[dt,ct,f],function(e,t,n){function r(e){this.settings=i({},e),this.count=0}var i=n.extend;return r.sendRPC=function(e){return(new r).send(e)},r.prototype={send:function(n){var r=n.error,o=n.success;n=i(this.settings,n),n.success=function(t,i){t=e.parse(t),"undefined"==typeof t&&(t={error:"JSON Parse error."}),t.error?r.call(n.error_scope||n.scope,t.error,i):o.call(n.success_scope||n.scope,t.result)},n.error=function(e,t){r&&r.call(n.error_scope||n.scope,e,t)},n.data=e.serialize({id:n.id||"c"+this.count++,method:n.method,params:n.params}),n.content_type="application/json",t.send(n)}},r}),r(ft,[v],function(e){return{callbacks:{},count:0,send:function(n){var r=this,i=e.DOM,o=n.count!==t?n.count:r.count,a="tinymce_jsonp_"+o;r.callbacks[o]=function(e){i.remove(a),delete r.callbacks[o],n.callback(e)},i.add(i.doc.body,"script",{id:a,src:n.url,type:"text/javascript"}),r.count++}}}),r(pt,[],function(){function e(){s=[];for(var e in a)s.push(e);i.length=s.length}function n(){function n(e){var n,r;return r=e!==t?d+e:i.indexOf(",",d),-1===r||r>i.length?null:(n=i.substring(d,r),d=r+1,n)}var r,i,s,d=0;if(a={},c){o.load(l),i=o.getAttribute(l)||"";do{var u=n();if(null===u)break;if(r=n(parseInt(u,32)||0),null!==r){if(u=n(),null===u)break;s=n(parseInt(u,32)||0),r&&(a[r]=s)}}while(null!==r);e()}}function r(){var t,n="";if(c){for(var r in a)t=a[r],n+=(n?",":"")+r.length.toString(32)+","+r+","+t.length.toString(32)+","+t;o.setAttribute(l,n);try{o.save(l)}catch(i){}e()}}var i,o,a,s,l,c;try{if(window.localStorage)return localStorage}catch(d){}return l="tinymce",o=document.documentElement,c=!!o.addBehavior,c&&o.addBehavior("#default#userData"),i={key:function(e){return s[e]},getItem:function(e){return e in a?a[e]:null},setItem:function(e,t){a[e]=""+t,r()},removeItem:function(e){delete a[e],r()},clear:function(){a={},r()}},n(),i}),r(mt,[v,d,y,b,f,h],function(e,t,n,r,i,o){var a=window.tinymce;return a.DOM=e.DOM,a.ScriptLoader=n.ScriptLoader,a.PluginManager=r.PluginManager,a.ThemeManager=r.ThemeManager,a.dom=a.dom||{},a.dom.Event=t.Event,i.each(i,function(e,t){a[t]=e}),i.each("isOpera isWebKit isIE isGecko isMac".split(" "),function(e){a[e]=o[e.substr(2).toLowerCase()]}),{}}),r(ht,[I,f],function(e,t){return e.extend({Defaults:{firstControlClass:"first",lastControlClass:"last"},init:function(e){this.settings=t.extend({},this.Defaults,e)},preRender:function(e){e.addClass(this.settings.containerClass,"body")},applyClasses:function(e){var t=this,n=t.settings,r,i,o;r=e.items().filter(":visible"),i=n.firstControlClass,o=n.lastControlClass,r.each(function(e){e.removeClass(i).removeClass(o),n.controlClass&&e.addClass(n.controlClass)}),r.eq(0).addClass(i),r.eq(-1).addClass(o)},renderHtml:function(e){var t=this,n=t.settings,r,i="";return r=e.items(),r.eq(0).addClass(n.firstControlClass),r.eq(-1).addClass(n.lastControlClass),r.each(function(e){n.controlClass&&e.addClass(n.controlClass),i+=e.renderHtml()}),i},recalc:function(){},postRender:function(){}})}),r(gt,[ht],function(e){return e.extend({Defaults:{containerClass:"abs-layout",controlClass:"abs-layout-item"},recalc:function(e){e.items().filter(":visible").each(function(e){var t=e.settings;e.layoutRect({x:t.x,y:t.y,w:t.w,h:t.h}),e.recalc&&e.recalc()})},renderHtml:function(e){return'
    '+this._super(e)}})}),r(vt,[V,G],function(e,t){return e.extend({Mixins:[t],Defaults:{classes:"widget tooltip tooltip-n"},text:function(e){var t=this;return"undefined"!=typeof e?(t._value=e,t._rendered&&(t.getEl().lastChild.innerHTML=t.encode(e)),t):t._value},renderHtml:function(){var e=this,t=e.classPrefix;return'"},repaint:function(){var e=this,t,n;t=e.getEl().style,n=e._layoutRect,t.left=n.x+"px",t.top=n.y+"px",t.zIndex=131070}})}),r(yt,[V,vt],function(e,t){var n,r=e.extend({init:function(e){var t=this;t._super(e),t.canFocus=!0,e.tooltip&&r.tooltips!==!1&&(t.on("mouseenter",function(n){var r=t.tooltip().moveTo(-65535);if(n.control==t){var i=r.text(e.tooltip).show().testMoveRel(t.getEl(),["bc-tc","bc-tl","bc-tr"]);r.toggleClass("tooltip-n","bc-tc"==i),r.toggleClass("tooltip-nw","bc-tl"==i),r.toggleClass("tooltip-ne","bc-tr"==i),r.moveRel(t.getEl(),i)}else r.hide()}),t.on("mouseleave mousedown click",function(){t.tooltip().hide()})),t.aria("label",e.ariaLabel||e.tooltip)},tooltip:function(){return n||(n=new t({type:"tooltip"}),n.renderTo()),n},active:function(e){var t=this,n;return e!==n&&(t.aria("pressed",e),t.toggleClass("active",e)),t._super(e)},disabled:function(e){var t=this,n;return e!==n&&(t.aria("disabled",e),t.toggleClass("disabled",e)),t._super(e)},postRender:function(){var e=this,t=e.settings;e._rendered=!0,e._super(),e.parent()||!t.width&&!t.height||(e.initLayoutRect(),e.repaint()),t.autofocus&&e.focus()},remove:function(){this._super(),n&&(n.remove(),n=null)}});return r}),r(bt,[yt],function(e){return e.extend({Defaults:{classes:"widget btn",role:"button"},init:function(e){var t=this,n;t.on("click mousedown",function(e){e.preventDefault()}),t._super(e),n=e.size,e.subtype&&t.addClass(e.subtype),n&&t.addClass("btn-"+n)},icon:function(e){var t=this,n=t.classPrefix;if("undefined"==typeof e)return t.settings.icon;if(t.settings.icon=e,e=e?n+"ico "+n+"i-"+t.settings.icon:"",t._rendered){var r=t.getEl().firstChild,i=r.getElementsByTagName("i")[0];e?(i&&i==r.firstChild||(i=document.createElement("i"),r.insertBefore(i,r.firstChild)),i.className=e):i&&r.removeChild(i),t.text(t._text)}return t},repaint:function(){var e=this.getEl().firstChild.style;e.width=e.height="100%",this._super()},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,r=e.settings.icon,i="";return e.settings.image&&(r="none",i=" style=\"background-image: url('"+e.settings.image+"')\""),r=e.settings.icon?n+"ico "+n+"i-"+r:"",'
    "}})}),r(Ct,[j],function(e){return e.extend({Defaults:{defaultType:"button",role:"group"},renderHtml:function(){var e=this,t=e._layout;return e.addClass("btn-group"),e.preRender(),t.preRender(e),'
    '+(e.settings.html||"")+t.renderHtml(e)+"
    "}})}),r(xt,[yt],function(e){return e.extend({Defaults:{classes:"checkbox",role:"checkbox",checked:!1},init:function(e){var t=this;t._super(e),t.on("click mousedown",function(e){e.preventDefault()}),t.on("click",function(e){e.preventDefault(),t.disabled()||t.checked(!t.checked())}),t.checked(t.settings.checked)},checked:function(e){var t=this;return"undefined"!=typeof e?(e?t.addClass("checked"):t.removeClass("checked"),t._checked=e,t.aria("checked",e),t):t._checked},value:function(e){return this.checked(e)},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix;return'
    '+e.encode(e._text)+"
    "}})}),r(wt,[bt,J],function(e,t){return e.extend({showPanel:function(){var e=this,n=e.settings;if(e.active(!0),e.panel)e.panel.show();else{var r=n.panel;r.type&&(r={layout:"grid",items:r}),r.role=r.role||"dialog",r.popover=!0,r.autohide=!0,r.ariaRoot=!0,e.panel=new t(r).on("hide",function(){e.active(!1)}).on("cancel",function(t){t.stopPropagation(),e.focus(),e.hidePanel()}).parent(e).renderTo(e.getContainerElm()),e.panel.fire("show"),e.panel.reflow()}e.panel.moveRel(e.getEl(),n.popoverAlign||(e.isRtl()?["bc-tr","bc-tc"]:["bc-tl","bc-tc"]))},hidePanel:function(){var e=this;e.panel&&e.panel.hide()},postRender:function(){var e=this;return e.aria("haspopup",!0),e.on("click",function(t){t.control===e&&(e.panel&&e.panel.visible()?e.hidePanel():(e.showPanel(),e.panel.focus(!!t.aria)))}),e._super()}})}),r(_t,[wt,v],function(e,t){var n=t.DOM;return e.extend({init:function(e){this._super(e),this.addClass("colorbutton")},color:function(e){return e?(this._color=e,this.getEl("preview").style.backgroundColor=e,this):this._color},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,r=e.settings.icon?n+"ico "+n+"i-"+e.settings.icon:"",i=e.settings.image?" style=\"background-image: url('"+e.settings.image+"')\"":"";return'
    '},postRender:function(){var e=this,t=e.settings.onclick;return e.on("click",function(r){r.aria&&"down"==r.aria.key||r.control!=e||n.getParent(r.target,"."+e.classPrefix+"open")||(r.stopImmediatePropagation(),t.call(e,r))}),delete e.settings.onclick,e._super()}})}),r(Nt,[yt,U,W],function(e,t,n){return e.extend({init:function(e){var t=this;t._super(e),t.addClass("combobox"),t.subinput=!0,t.ariaTarget="inp",e=t.settings,e.menu=e.menu||e.values,e.menu&&(e.icon="caret"),t.on("click",function(n){for(var r=n.target,i=t.getEl();r&&r!=i;)r.id&&-1!=r.id.indexOf("-open")&&(t.fire("action"),e.menu&&(t.showMenu(),n.aria&&t.menu.items()[0].focus())),r=r.parentNode}),t.on("keydown",function(e){"INPUT"==e.target.nodeName&&13==e.keyCode&&t.parents().reverse().each(function(n){return e.preventDefault(),t.fire("change"),n.hasEventListeners("submit")&&n.toJSON?(n.fire("submit",{data:n.toJSON()}),!1):void 0})}),e.placeholder&&(t.addClass("placeholder"),t.on("focusin",function(){t._hasOnChange||(n.on(t.getEl("inp"),"change",function(){t.fire("change")}),t._hasOnChange=!0),t.hasClass("placeholder")&&(t.getEl("inp").value="",t.removeClass("placeholder"))}),t.on("focusout",function(){0===t.value().length&&(t.getEl("inp").value=e.placeholder,t.addClass("placeholder")) +}))},showMenu:function(){var e=this,n=e.settings,r;e.menu||(r=n.menu||[],r.length?r={type:"menu",items:r}:r.type=r.type||"menu",e.menu=t.create(r).parent(e).renderTo(e.getContainerElm()),e.fire("createmenu"),e.menu.reflow(),e.menu.on("cancel",function(t){t.control===e.menu&&e.focus()}),e.menu.on("show hide",function(t){t.control.items().each(function(t){t.active(t.value()==e.value())})}).fire("show"),e.menu.on("select",function(t){e.value(t.control.value())}),e.on("focusin",function(t){"INPUT"==t.target.tagName&&e.menu.hide()}),e.aria("expanded",!0)),e.menu.show(),e.menu.layoutRect({w:e.layoutRect().w}),e.menu.moveRel(e.getEl(),e.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"])},value:function(e){var t=this;return"undefined"!=typeof e?(t._value=e,t.removeClass("placeholder"),t._rendered&&(t.getEl("inp").value=e),t):t._rendered?(e=t.getEl("inp").value,e!=t.settings.placeholder?e:""):t._value},disabled:function(e){var t=this;return t._rendered&&"undefined"!=typeof e&&(t.getEl("inp").disabled=e),t._super(e)},focus:function(){this.getEl("inp").focus()},repaint:function(){var e=this,t=e.getEl(),r=e.getEl("open"),i=e.layoutRect(),o,a;o=r?i.w-n.getSize(r).width-10:i.w-10;var s=document;return s.all&&(!s.documentMode||s.documentMode<=8)&&(a=e.layoutRect().h-2+"px"),n.css(t.firstChild,{width:o,lineHeight:a}),e._super(),e},postRender:function(){var e=this;return n.on(this.getEl("inp"),"change",function(){e.fire("change")}),e._super()},remove:function(){n.off(this.getEl("inp")),this._super()},renderHtml:function(){var e=this,t=e._id,n=e.settings,r=e.classPrefix,i=n.value||n.placeholder||"",o,a,s="",l="";return"spellcheck"in n&&(l+=' spellcheck="'+n.spellcheck+'"'),n.maxLength&&(l+=' maxlength="'+n.maxLength+'"'),n.size&&(l+=' size="'+n.size+'"'),n.subtype&&(l+=' type="'+n.subtype+'"'),e.disabled()&&(l+=' disabled="disabled"'),o=n.icon,o&&"caret"!=o&&(o=r+"ico "+r+"i-"+n.icon),a=e._text,(o||a)&&(s='
    ",e.addClass("has-open")),'
    "+s+"
    "}})}),r(Et,[yt],function(e){return e.extend({init:function(e){var t=this;e.delimiter||(e.delimiter="\xbb"),t._super(e),t.addClass("path"),t.canFocus=!0,t.on("click",function(e){var n,r=e.target;(n=r.getAttribute("data-index"))&&t.fire("select",{value:t.data()[n],index:n})})},focus:function(){var e=this;return e.getEl().firstChild.focus(),e},data:function(e){var t=this;return"undefined"!=typeof e?(t._data=e,t.update(),t):t._data},update:function(){this.innerHtml(this._getPathHtml())},postRender:function(){var e=this;e._super(),e.data(e.settings.data)},renderHtml:function(){var e=this;return'
    '+e._getPathHtml()+"
    "},_getPathHtml:function(){var e=this,t=e._data||[],n,r,i="",o=e.classPrefix;for(n=0,r=t.length;r>n;n++)i+=(n>0?'":"")+'
    '+t[n].name+"
    ";return i||(i='
     
    '),i}})}),r(kt,[Et,st],function(e,t){return e.extend({postRender:function(){function e(e){if(1===e.nodeType){if("BR"==e.nodeName||e.getAttribute("data-mce-bogus"))return!0;if("bookmark"===e.getAttribute("data-mce-type"))return!0}return!1}var n=this,r=t.activeEditor;return n.on("select",function(t){var n=[],i,o=r.getBody();for(r.focus(),i=r.selection.getStart();i&&i!=o;)e(i)||n.push(i),i=i.parentNode;r.selection.select(n[n.length-1-t.index]),r.nodeChanged()}),r.on("nodeChange",function(t){for(var i=[],o=t.parents,a=o.length;a--;)if(1==o[a].nodeType&&!e(o[a])){var s=r.fire("ResolveName",{name:o[a].nodeName.toLowerCase(),target:o[a]});i.push({name:s.name})}n.data(i)}),n._super()}})}),r(St,[j],function(e){return e.extend({Defaults:{layout:"flex",align:"center",defaults:{flex:1}},renderHtml:function(){var e=this,t=e._layout,n=e.classPrefix;return e.addClass("formitem"),t.preRender(e),'
    '+(e.settings.title?'
    '+e.settings.title+"
    ":"")+'
    '+(e.settings.html||"")+t.renderHtml(e)+"
    "}})}),r(Tt,[j,St],function(e,t){return e.extend({Defaults:{containerCls:"form",layout:"flex",direction:"column",align:"stretch",flex:1,padding:20,labelGap:30,spacing:10,callbacks:{submit:function(){this.submit()}}},preRender:function(){var e=this,n=e.items();n.each(function(n){var r,i=n.settings.label;i&&(r=new t({layout:"flex",autoResize:"overflow",defaults:{flex:1},items:[{type:"label",id:n._id+"-l",text:i,flex:0,forId:n._id,disabled:n.disabled()}]}),r.type="formitem",n.aria("labelledby",n._id+"-l"),"undefined"==typeof n.settings.flex&&(n.settings.flex=1),e.replace(n,r),r.add(n))})},recalcLabels:function(){var e=this,t=0,n=[],r,i;if(e.settings.labelGapCalc!==!1)for(e.items().filter("formitem").each(function(e){var r=e.items()[0],i=r.getEl().clientWidth;t=i>t?i:t,n.push(r)}),i=e.settings.labelGap||0,r=n.length;r--;)n[r].settings.minWidth=t+i},visible:function(e){var t=this._super(e);return e===!0&&this._rendered&&this.recalcLabels(),t},submit:function(){return this.fire("submit",{data:this.toJSON()})},postRender:function(){var e=this;e._super(),e.recalcLabels(),e.fromJSON(e.settings.data)}})}),r(Rt,[Tt],function(e){return e.extend({Defaults:{containerCls:"fieldset",layout:"flex",direction:"column",align:"stretch",flex:1,padding:"25 15 5 15",labelGap:30,spacing:10,border:1},renderHtml:function(){var e=this,t=e._layout,n=e.classPrefix;return e.preRender(),t.preRender(e),'
    '+(e.settings.title?''+e.settings.title+"":"")+'
    '+(e.settings.html||"")+t.renderHtml(e)+"
    "}})}),r(At,[Nt],function(e){return e.extend({init:function(e){var t=this,n=tinymce.activeEditor,r;e.spellcheck=!1,r=n.settings.file_browser_callback,r&&(e.icon="browse",e.onaction=function(){r(t.getEl("inp").id,t.getEl("inp").value,e.filetype,window)}),t._super(e)}})}),r(Bt,[gt],function(e){return e.extend({recalc:function(e){var t=e.layoutRect(),n=e.paddingBox();e.items().filter(":visible").each(function(e){e.layoutRect({x:n.left,y:n.top,w:t.innerW-n.right-n.left,h:t.innerH-n.top-n.bottom}),e.recalc&&e.recalc()})}})}),r(Lt,[gt],function(e){return e.extend({recalc:function(e){var t,n,r,i,o,a,s,l,c,d,u,f,p,m,h,g,v=[],y,b,C,x,w,_,N,E,k,S,T,R,A,B,L,D,M,H,P,O,I,F,z=Math.max,W=Math.min;for(r=e.items().filter(":visible"),i=e.layoutRect(),o=e._paddingBox,a=e.settings,f=e.isRtl()?a.direction||"row-reversed":a.direction,s=a.align,l=e.isRtl()?a.pack||"end":a.pack,c=a.spacing||0,("row-reversed"==f||"column-reverse"==f)&&(r=r.set(r.toArray().reverse()),f=f.split("-")[0]),"column"==f?(k="y",N="h",E="minH",S="maxH",R="innerH",T="top",A="deltaH",B="contentH",P="left",M="w",L="x",D="innerW",H="minW",O="right",I="deltaW",F="contentW"):(k="x",N="w",E="minW",S="maxW",R="innerW",T="left",A="deltaW",B="contentW",P="top",M="h",L="y",D="innerH",H="minH",O="bottom",I="deltaH",F="contentH"),u=i[R]-o[T]-o[T],_=d=0,t=0,n=r.length;n>t;t++)p=r[t],m=p.layoutRect(),h=p.settings,g=h.flex,u-=n-1>t?c:0,g>0&&(d+=g,m[S]&&v.push(p),m.flex=g),u-=m[E],y=o[P]+m[H]+o[O],y>_&&(_=y);if(x={},x[E]=0>u?i[E]-u+i[A]:i[R]-u+i[A],x[H]=_+i[I],x[B]=i[R]-u,x[F]=_,x.minW=W(x.minW,i.maxW),x.minH=W(x.minH,i.maxH),x.minW=z(x.minW,i.startMinWidth),x.minH=z(x.minH,i.startMinHeight),!i.autoResize||x.minW==i.minW&&x.minH==i.minH){for(C=u/d,t=0,n=v.length;n>t;t++)p=v[t],m=p.layoutRect(),b=m[S],y=m[E]+m.flex*C,y>b?(u-=m[S]-m[E],d-=m.flex,m.flex=0,m.maxFlexSize=b):m.maxFlexSize=0;for(C=u/d,w=o[T],x={},0===d&&("end"==l?w=u+o[T]:"center"==l?(w=Math.round(i[R]/2-(i[R]-u)/2)+o[T],0>w&&(w=o[T])):"justify"==l&&(w=o[T],c=Math.floor(u/(r.length-1)))),x[L]=o[P],t=0,n=r.length;n>t;t++)p=r[t],m=p.layoutRect(),y=m.maxFlexSize||m[E],"center"===s?x[L]=Math.round(i[D]/2-m[M]/2):"stretch"===s?(x[M]=z(m[H]||0,i[D]-o[P]-o[O]),x[L]=o[P]):"end"===s&&(x[L]=i[D]-m[M]-o.top),m.flex>0&&(y+=m.flex*C),x[N]=y,x[k]=w,p.layoutRect(x),p.recalc&&p.recalc(),w+=y+c}else if(x.w=x.minW,x.h=x.minH,e.layoutRect(x),this.recalc(e),null===e._lastRect){var V=e.parent();V&&(V._lastRect=null,V.recalc())}}})}),r(Dt,[ht],function(e){return e.extend({Defaults:{containerClass:"flow-layout",controlClass:"flow-layout-item",endClass:"break"},recalc:function(e){e.items().filter(":visible").each(function(e){e.recalc&&e.recalc()})}})}),r(Mt,[V,yt,J,f,st,h],function(e,t,n,r,i,o){function a(e){function t(t){function n(e){return e.replace(/%(\w+)/g,"")}var r,i,o=e.dom,a="",l,c;return c=e.settings.preview_styles,c===!1?"":(c||(c="font-family font-size font-weight font-style text-decoration text-transform color background-color border border-radius outline text-shadow"),(t=e.formatter.get(t))?(t=t[0],r=t.block||t.inline||"span",i=o.create(r),s(t.styles,function(e,t){e=n(e),e&&o.setStyle(i,t,e)}),s(t.attributes,function(e,t){e=n(e),e&&o.setAttrib(i,t,e)}),s(t.classes,function(e){e=n(e),o.hasClass(i,e)||o.addClass(i,e)}),e.fire("PreviewFormats"),o.setStyles(i,{position:"absolute",left:-65535}),e.getBody().appendChild(i),l=o.getStyle(e.getBody(),"fontSize",!0),l=/px$/.test(l)?parseInt(l,10):0,s(c.split(" "),function(t){var n=o.getStyle(i,t,!0);if(!("background-color"==t&&/transparent|rgba\s*\([^)]+,\s*0\)/.test(n)&&(n=o.getStyle(e.getBody(),t,!0),"#ffffff"==o.toHex(n).toLowerCase())||"color"==t&&"#000000"==o.toHex(n).toLowerCase())){if("font-size"==t&&/em|%$/.test(n)){if(0===l)return;n=parseFloat(n,10)/(/%$/.test(n)?100:1),n=n*l+"px"}"border"==t&&n&&(a+="padding:0 2px;"),a+=t+":"+n+";"}}),e.fire("AfterPreviewFormats"),o.remove(i),a):void 0)}function r(t,n){return function(){var r=this;e.on("nodeChange",function(i){var o=e.formatter,a=null;s(i.parents,function(e){return s(t,function(t){return n?o.matchNode(e,n,{value:t.value})&&(a=t.value):o.matchNode(e,t.value)&&(a=t.value),a?!1:void 0}),a?!1:void 0}),r.value(a)})}}function i(e){e=e.split(";");for(var t=e.length;t--;)e[t]=e[t].split("=");return e}function o(){function n(e){var t=[];if(e)return s(e,function(e){var r={text:e.title,icon:e.icon};if(e.items)r.menu=n(e.items);else{var a=e.format||"custom"+i++;e.format||(e.name=a,o.push(e)),r.format=a}t.push(r)}),t}function r(){var t;return t=n(e.settings.style_formats_merge?e.settings.style_formats?a.concat(e.settings.style_formats):a:e.settings.style_formats||a)}var i=0,o=[],a=[{title:"Headers",items:[{title:"Header 1",format:"h1"},{title:"Header 2",format:"h2"},{title:"Header 3",format:"h3"},{title:"Header 4",format:"h4"},{title:"Header 5",format:"h5"},{title:"Header 6",format:"h6"}]},{title:"Inline",items:[{title:"Bold",icon:"bold",format:"bold"},{title:"Italic",icon:"italic",format:"italic"},{title:"Underline",icon:"underline",format:"underline"},{title:"Strikethrough",icon:"strikethrough",format:"strikethrough"},{title:"Superscript",icon:"superscript",format:"superscript"},{title:"Subscript",icon:"subscript",format:"subscript"},{title:"Code",icon:"code",format:"code"}]},{title:"Blocks",items:[{title:"Paragraph",format:"p"},{title:"Blockquote",format:"blockquote"},{title:"Div",format:"div"},{title:"Pre",format:"pre"}]},{title:"Alignment",items:[{title:"Left",icon:"alignleft",format:"alignleft"},{title:"Center",icon:"aligncenter",format:"aligncenter"},{title:"Right",icon:"alignright",format:"alignright"},{title:"Justify",icon:"alignjustify",format:"alignjustify"}]}];return e.on("init",function(){s(o,function(t){e.formatter.register(t.name,t)})}),{type:"menu",items:r(),onPostRender:function(t){e.fire("renderFormatsMenu",{control:t.control})},itemDefaults:{preview:!0,textStyle:function(){return this.settings.format?t(this.settings.format):void 0},onPostRender:function(){var t=this,n=this.settings.format;n&&t.parent().on("show",function(){t.disabled(!e.formatter.canApply(n)),t.active(e.formatter.match(n))})},onclick:function(){this.settings.format&&f(this.settings.format)}}}}function a(){return e.undoManager?e.undoManager.hasUndo():!1}function l(){return e.undoManager?e.undoManager.hasRedo():!1}function c(){var t=this;t.disabled(!a()),e.on("Undo Redo AddUndo TypingUndo",function(){t.disabled(!a())})}function d(){var t=this;t.disabled(!l()),e.on("Undo Redo AddUndo TypingUndo",function(){t.disabled(!l())})}function u(){var t=this;e.on("VisualAid",function(e){t.active(e.hasVisual)}),t.active(e.hasVisual)}function f(t){t.control&&(t=t.control.value()),t&&e.execCommand("mceToggleFormat",!1,t)}var p;p=o(),s({bold:"Bold",italic:"Italic",underline:"Underline",strikethrough:"Strikethrough",subscript:"Subscript",superscript:"Superscript"},function(t,n){e.addButton(n,{tooltip:t,onPostRender:function(){var t=this;e.formatter?e.formatter.formatChanged(n,function(e){t.active(e)}):e.on("init",function(){e.formatter.formatChanged(n,function(e){t.active(e)})})},onclick:function(){f(n)}})}),s({outdent:["Decrease indent","Outdent"],indent:["Increase indent","Indent"],cut:["Cut","Cut"],copy:["Copy","Copy"],paste:["Paste","Paste"],help:["Help","mceHelp"],selectall:["Select all","SelectAll"],hr:["Insert horizontal rule","InsertHorizontalRule"],removeformat:["Clear formatting","RemoveFormat"],visualaid:["Visual aids","mceToggleVisualAid"],newdocument:["New document","mceNewDocument"]},function(t,n){e.addButton(n,{tooltip:t[0],cmd:t[1]})}),s({blockquote:["Blockquote","mceBlockQuote"],numlist:["Numbered list","InsertOrderedList"],bullist:["Bullet list","InsertUnorderedList"],subscript:["Subscript","Subscript"],superscript:["Superscript","Superscript"],alignleft:["Align left","JustifyLeft"],aligncenter:["Align center","JustifyCenter"],alignright:["Align right","JustifyRight"],alignjustify:["Justify","JustifyFull"]},function(t,n){e.addButton(n,{tooltip:t[0],cmd:t[1],onPostRender:function(){var t=this;e.formatter?e.formatter.formatChanged(n,function(e){t.active(e)}):e.on("init",function(){e.formatter.formatChanged(n,function(e){t.active(e)})})}})}),e.addButton("undo",{tooltip:"Undo",onPostRender:c,cmd:"undo"}),e.addButton("redo",{tooltip:"Redo",onPostRender:d,cmd:"redo"}),e.addMenuItem("newdocument",{text:"New document",shortcut:"Ctrl+N",icon:"newdocument",cmd:"mceNewDocument"}),e.addMenuItem("undo",{text:"Undo",icon:"undo",shortcut:"Ctrl+Z",onPostRender:c,cmd:"undo"}),e.addMenuItem("redo",{text:"Redo",icon:"redo",shortcut:"Ctrl+Y",onPostRender:d,cmd:"redo"}),e.addMenuItem("visualaid",{text:"Visual aids",selectable:!0,onPostRender:u,cmd:"mceToggleVisualAid"}),s({cut:["Cut","Cut","Ctrl+X"],copy:["Copy","Copy","Ctrl+C"],paste:["Paste","Paste","Ctrl+V"],selectall:["Select all","SelectAll","Ctrl+A"],bold:["Bold","Bold","Ctrl+B"],italic:["Italic","Italic","Ctrl+I"],underline:["Underline","Underline"],strikethrough:["Strikethrough","Strikethrough"],subscript:["Subscript","Subscript"],superscript:["Superscript","Superscript"],removeformat:["Clear formatting","RemoveFormat"]},function(t,n){e.addMenuItem(n,{text:t[0],icon:n,shortcut:t[2],cmd:t[1]})}),e.on("mousedown",function(){n.hideAll()}),e.addButton("styleselect",{type:"menubutton",text:"Formats",menu:p}),e.addButton("formatselect",function(){var n=[],o=i(e.settings.block_formats||"Paragraph=p;Address=address;Pre=pre;Header 1=h1;Header 2=h2;Header 3=h3;Header 4=h4;Header 5=h5;Header 6=h6");return s(o,function(e){n.push({text:e[0],value:e[1],textStyle:function(){return t(e[1])}})}),{type:"listbox",text:o[0][0],values:n,fixedWidth:!0,onselect:f,onPostRender:r(n)}}),e.addButton("fontselect",function(){var t="Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats",n=[],o=i(e.settings.font_formats||t);return s(o,function(e){n.push({text:{raw:e[0]},value:e[1],textStyle:-1==e[1].indexOf("dings")?"font-family:"+e[1]:""})}),{type:"listbox",text:"Font Family",tooltip:"Font Family",values:n,fixedWidth:!0,onPostRender:r(n,"fontname"),onselect:function(t){t.control.settings.value&&e.execCommand("FontName",!1,t.control.settings.value)}}}),e.addButton("fontsizeselect",function(){var t=[],n="8pt 10pt 12pt 14pt 18pt 24pt 36pt",i=e.settings.fontsize_formats||n;return s(i.split(" "),function(e){t.push({text:e,value:e})}),{type:"listbox",text:"Font Sizes",tooltip:"Font Sizes",values:t,fixedWidth:!0,onPostRender:r(t,"fontsize"),onclick:function(t){t.control.settings.value&&e.execCommand("FontSize",!1,t.control.settings.value)}}}),e.addMenuItem("formats",{text:"Formats",menu:p})}var s=r.each;i.on("AddEditor",function(t){t.editor.rtl&&(e.rtl=!0),a(t.editor)}),e.translate=function(e){return i.translate(e)},t.tooltips=!o.iOS}),r(Ht,[gt],function(e){return e.extend({recalc:function(e){var t=e.settings,n,r,i,o,a,s,l,c,d,u,f,p,m,h,g,v,y,b,C,x,w,_,N=[],E=[],k,S,T,R;for(t=e.settings,i=e.items().filter(":visible"),o=e.layoutRect(),r=t.columns||Math.ceil(Math.sqrt(i.length)),n=Math.ceil(i.length/r),y=t.spacingH||t.spacing||0,b=t.spacingV||t.spacing||0,C=t.alignH||t.align,x=t.alignV||t.align,g=e._paddingBox,C&&"string"==typeof C&&(C=[C]),x&&"string"==typeof x&&(x=[x]),u=0;r>u;u++)N.push(0);for(f=0;n>f;f++)E.push(0);for(f=0;n>f;f++)for(u=0;r>u&&(d=i[f*r+u],d);u++)c=d.layoutRect(),k=c.minW,S=c.minH,N[u]=k>N[u]?k:N[u],E[f]=S>E[f]?S:E[f];for(T=o.innerW-g.left-g.right,w=0,u=0;r>u;u++)w+=N[u]+(u>0?y:0),T-=(u>0?y:0)+N[u];for(R=o.innerH-g.top-g.bottom,_=0,f=0;n>f;f++)_+=E[f]+(f>0?b:0),R-=(f>0?b:0)+E[f];if(w+=g.left+g.right,_+=g.top+g.bottom,l={},l.minW=w+(o.w-o.innerW),l.minH=_+(o.h-o.innerH),l.contentW=l.minW-o.deltaW,l.contentH=l.minH-o.deltaH,l.minW=Math.min(l.minW,o.maxW),l.minH=Math.min(l.minH,o.maxH),l.minW=Math.max(l.minW,o.startMinWidth),l.minH=Math.max(l.minH,o.startMinHeight),!o.autoResize||l.minW==o.minW&&l.minH==o.minH){o.autoResize&&(l=e.layoutRect(l),l.contentW=l.minW-o.deltaW,l.contentH=l.minH-o.deltaH);var A;A="start"==t.packV?0:R>0?Math.floor(R/n):0;var B=0,L=t.flexWidths;if(L)for(u=0;uu;u++)N[u]+=L?L[u]*D:D;for(m=g.top,f=0;n>f;f++){for(p=g.left,s=E[f]+A,u=0;r>u&&(d=i[f*r+u],d);u++)h=d.settings,c=d.layoutRect(),a=Math.max(N[u],c.startMinWidth),c.x=p,c.y=m,v=h.alignH||(C?C[u]||C[0]:null),"center"==v?c.x=p+a/2-c.w/2:"right"==v?c.x=p+a-c.w:"stretch"==v&&(c.w=a),v=h.alignV||(x?x[u]||x[0]:null),"center"==v?c.y=m+s/2-c.h/2:"bottom"==v?c.y=m+s-c.h:"stretch"==v&&(c.h=s),d.layoutRect(c),p+=a+y,d.recalc&&d.recalc();m+=s+b}}else if(l.w=l.minW,l.h=l.minH,e.layoutRect(l),this.recalc(e),null===e._lastRect){var M=e.parent();M&&(M._lastRect=null,M.recalc())}}})}),r(Pt,[yt],function(e){return e.extend({renderHtml:function(){var e=this;return e.addClass("iframe"),e.canFocus=!1,''},src:function(e){this.getEl().src=e},html:function(e,t){var n=this,r=this.getEl().contentWindow.document.body;return r?(r.innerHTML=e,t&&t()):setTimeout(function(){n.html(e)},0),this}})}),r(Ot,[yt,W],function(e,t){return e.extend({init:function(e){var t=this;t._super(e),t.addClass("widget"),t.addClass("label"),t.canFocus=!1,e.multiline&&t.addClass("autoscroll"),e.strong&&t.addClass("strong")},initLayoutRect:function(){var e=this,n=e._super();if(e.settings.multiline){var r=t.getSize(e.getEl());r.width>n.maxW&&(n.minW=n.maxW,e.addClass("multiline")),e.getEl().style.width=n.minW+"px",n.startMinH=n.h=n.minH=Math.min(n.maxH,t.getSize(e.getEl()).height)}return n},repaint:function(){var e=this;return e.settings.multiline||(e.getEl().style.lineHeight=e.layoutRect().h+"px"),e._super()},text:function(e){var t=this;return t._rendered&&e&&this.innerHtml(t.encode(e)),t._super(e)},renderHtml:function(){var e=this,t=e.settings.forId;return'"}})}),r(It,[j],function(e){return e.extend({Defaults:{role:"toolbar",layout:"flow"},init:function(e){var t=this;t._super(e),t.addClass("toolbar")},postRender:function(){var e=this;return e.items().addClass("toolbar-item"),e._super()}})}),r(Ft,[It],function(e){return e.extend({Defaults:{role:"menubar",containerCls:"menubar",ariaRoot:!0,defaults:{type:"menubutton"}}})}),r(zt,[bt,U,Ft],function(e,t,n){function r(e,t){for(;e;){if(t===e)return!0;e=e.parentNode}return!1}var i=e.extend({init:function(e){var t=this;t._renderOpen=!0,t._super(e),t.addClass("menubtn"),e.fixedWidth&&t.addClass("fixed-width"),t.aria("haspopup",!0),t.hasPopup=!0},showMenu:function(){var e=this,n=e.settings,r;return e.menu&&e.menu.visible()?e.hideMenu():(e.menu||(r=n.menu||[],r.length?r={type:"menu",items:r}:r.type=r.type||"menu",e.menu=t.create(r).parent(e).renderTo(),e.fire("createmenu"),e.menu.reflow(),e.menu.on("cancel",function(t){t.control.parent()===e.menu&&(t.stopPropagation(),e.focus(),e.hideMenu())}),e.menu.on("select",function(){e.focus()}),e.menu.on("show hide",function(t){t.control==e.menu&&e.activeMenu("show"==t.type),e.aria("expanded","show"==t.type)}).fire("show")),e.menu.show(),e.menu.layoutRect({w:e.layoutRect().w}),void e.menu.moveRel(e.getEl(),e.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"]))},hideMenu:function(){var e=this;e.menu&&(e.menu.items().each(function(e){e.hideMenu&&e.hideMenu()}),e.menu.hide())},activeMenu:function(e){this.toggleClass("active",e)},renderHtml:function(){var e=this,t=e._id,r=e.classPrefix,i=e.settings.icon?r+"ico "+r+"i-"+e.settings.icon:"";return e.aria("role",e.parent()instanceof n?"menuitem":"button"),'
    '},postRender:function(){var e=this;return e.on("click",function(t){t.control===e&&r(t.target,e.getEl())&&(e.showMenu(),t.aria&&e.menu.items()[0].focus())}),e.on("mouseenter",function(t){var n=t.control,r=e.parent(),o;n&&r&&n instanceof i&&n.parent()==r&&(r.items().filter("MenuButton").each(function(e){e.hideMenu&&e!=n&&(e.menu&&e.menu.visible()&&(o=!0),e.hideMenu())}),o&&(n.focus(),n.showMenu()))}),e._super()},text:function(e){var t=this,n,r;if(t._rendered)for(r=t.getEl("open").getElementsByTagName("span"),n=0;n0&&(o=n[0].text,t._value=n[0].value),e.menu=n}e.text=e.text||o||n[0].text,t._super(e),t.addClass("listbox"),t.on("select",function(n){var r=n.control;a&&(n.lastControl=a),e.multiple?r.active(!r.active()):t.value(n.control.settings.value),a=r})},value:function(e){function t(e,n){e.items().each(function(e){r=e.value()===n,r&&(i=i||e.text()),e.active(r),e.menu&&t(e.menu,n)})}var n=this,r,i,o,a;if("undefined"!=typeof e){if(n.menu)t(n.menu,e);else for(o=n.settings.menu,a=0;a'+("-"!==o?' ":"")+("-"!==o?''+o+"":"")+(l?'
    '+l+"
    ":"")+(r.menu?'
    ':"")+""},postRender:function(){var e=this,t=e.settings,n=t.textStyle;if("function"==typeof n&&(n=n.call(this)),n){var r=e.getEl("text");r&&r.setAttribute("style",n)}return e.on("mouseenter click",function(n){n.control===e&&(t.menu||"click"!==n.type?(e.showMenu(),n.aria&&e.menu.focus(!0)):(e.fire("select"),e.parent().hideAll()))}),e._super(),e},active:function(e){return"undefined"!=typeof e&&this.aria("checked",e),this._super(e)},remove:function(){this._super(),this.menu&&this.menu.remove()}})}),r(Ut,[J,Vt,f],function(e,t,n){var r=e.extend({Defaults:{defaultType:"menuitem",border:1,layout:"stack",role:"application",bodyRole:"menu",ariaRoot:!0},init:function(e){var t=this;if(e.autohide=!0,e.constrainToViewport=!0,e.itemDefaults)for(var r=e.items,i=r.length;i--;)r[i]=n.extend({},e.itemDefaults,r[i]);t._super(e),t.addClass("menu")},repaint:function(){return this.toggleClass("menu-align",!0),this._super(),this.getEl().style.height="",this.getEl("body").style.height="",this},cancel:function(){var e=this;e.hideAll(),e.fire("select")},hideAll:function(){var e=this;return this.find("menuitem").exec("hideMenu"),e._super()},preRender:function(){var e=this;return e.items().each(function(t){var n=t.settings;return n.icon||n.selectable?(e._hasIcons=!0,!1):void 0}),e._super()}});return r}),r(qt,[xt],function(e){return e.extend({Defaults:{classes:"radio",role:"radio"}})}),r(jt,[yt,$],function(e,t){return e.extend({renderHtml:function(){var e=this,t=e.classPrefix;return e.addClass("resizehandle"),"both"==e.settings.direction&&e.addClass("resizehandle-both"),e.canFocus=!1,'
    '},postRender:function(){var e=this;e._super(),e.resizeDragHelper=new t(this._id,{start:function(){e.fire("ResizeStart")},drag:function(t){"both"!=e.settings.direction&&(t.deltaX=0),e.fire("Resize",t)},stop:function(){e.fire("ResizeEnd")}})},remove:function(){return this.resizeDragHelper&&this.resizeDragHelper.destroy(),this._super()}})}),r($t,[yt],function(e){return e.extend({renderHtml:function(){var e=this;return e.addClass("spacer"),e.canFocus=!1,'
    '}})}),r(Kt,[zt,W],function(e,t){return e.extend({Defaults:{classes:"widget btn splitbtn",role:"button"},repaint:function(){var e=this,n=e.getEl(),r=e.layoutRect(),i,o;return e._super(),i=n.firstChild,o=n.lastChild,t.css(i,{width:r.w-t.getSize(o).width,height:r.h-2}),t.css(o,{height:r.h-2}),e},activeMenu:function(e){var n=this;t.toggleClass(n.getEl().lastChild,n.classPrefix+"active",e)},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,r=e.settings.icon?n+"ico "+n+"i-"+e.settings.icon:"";return'
    '},postRender:function(){var e=this,t=e.settings.onclick;return e.on("click",function(e){var n=e.target;if(e.control==this)for(;n;){if(e.aria&&"down"!=e.aria.key||"BUTTON"==n.nodeName&&-1==n.className.indexOf("open"))return e.stopImmediatePropagation(),void t.call(this,e);n=n.parentNode}}),delete e.settings.onclick,e._super()}})}),r(Yt,[Dt],function(e){return e.extend({Defaults:{containerClass:"stack-layout",controlClass:"stack-layout-item",endClass:"break"}})}),r(Gt,[Y,W],function(e,t){return e.extend({lastIdx:0,Defaults:{layout:"absolute",defaults:{type:"panel"}},activateTab:function(e){var n;this.activeTabId&&(n=this.getEl(this.activeTabId),t.removeClass(n,this.classPrefix+"active"),n.setAttribute("aria-selected","false")),this.activeTabId="t"+e,n=this.getEl("t"+e),n.setAttribute("aria-selected","true"),t.addClass(n,this.classPrefix+"active"),e!=this.lastIdx&&(this.items()[this.lastIdx].hide(),this.lastIdx=e),this.items()[e].show().fire("showtab"),this.reflow()},renderHtml:function(){var e=this,t=e._layout,n="",r=e.classPrefix;return e.preRender(),t.preRender(e),e.items().each(function(t,i){var o=e._id+"-t"+i;t.aria("role","tabpanel"),t.aria("labelledby",o),n+='"}),'
    '+n+'
    '+t.renderHtml(e)+"
    "},postRender:function(){var e=this;e._super(),e.settings.activeTab=e.settings.activeTab||0,e.activateTab(e.settings.activeTab),this.on("click",function(t){var n=t.target.parentNode;if(t.target.parentNode.id==e._id+"-head")for(var r=n.childNodes.length;r--;)n.childNodes[r]==t.target&&e.activateTab(r)})},initLayoutRect:function(){var e=this,n,r,i;r=t.getSize(e.getEl("head")).width,r=0>r?0:r,i=0,e.items().each(function(t,n){r=Math.max(r,t.layoutRect().minW),i=Math.max(i,t.layoutRect().minH),e.settings.activeTab!=n&&t.hide()}),e.items().each(function(e){e.settings.x=0,e.settings.y=0,e.settings.w=r,e.settings.h=i,e.layoutRect({x:0,y:0,w:r,h:i})});var o=t.getSize(e.getEl("head")).height;return e.settings.minWidth=r,e.settings.minHeight=i+o,n=e._super(),n.deltaH+=o,n.innerH=n.h-n.deltaH,n}})}),r(Xt,[yt,W],function(e,t){return e.extend({init:function(e){var t=this;t._super(e),t._value=e.value||"",t.addClass("textbox"),e.multiline?t.addClass("multiline"):t.on("keydown",function(e){13==e.keyCode&&t.parents().reverse().each(function(t){return e.preventDefault(),t.hasEventListeners("submit")&&t.toJSON?(t.fire("submit",{data:t.toJSON()}),!1):void 0 +})})},disabled:function(e){var t=this;return t._rendered&&"undefined"!=typeof e&&(t.getEl().disabled=e),t._super(e)},value:function(e){var t=this;return"undefined"!=typeof e?(t._value=e,t._rendered&&(t.getEl().value=e),t):t._rendered?t.getEl().value:t._value},repaint:function(){var e=this,t,n,r,i=0,o=0,a;t=e.getEl().style,n=e._layoutRect,a=e._lastRepaintRect||{};var s=document;return!e.settings.multiline&&s.all&&(!s.documentMode||s.documentMode<=8)&&(t.lineHeight=n.h-o+"px"),r=e._borderBox,i=r.left+r.right+8,o=r.top+r.bottom+(e.settings.multiline?8:0),n.x!==a.x&&(t.left=n.x+"px",a.x=n.x),n.y!==a.y&&(t.top=n.y+"px",a.y=n.y),n.w!==a.w&&(t.width=n.w-i+"px",a.w=n.w),n.h!==a.h&&(t.height=n.h-o+"px",a.h=n.h),e._lastRepaintRect=a,e.fire("repaint",{},!1),e},renderHtml:function(){var e=this,t=e._id,n=e.settings,r=e.encode(e._value,!1),i="";return"spellcheck"in n&&(i+=' spellcheck="'+n.spellcheck+'"'),n.maxLength&&(i+=' maxlength="'+n.maxLength+'"'),n.size&&(i+=' size="'+n.size+'"'),n.subtype&&(i+=' type="'+n.subtype+'"'),e.disabled()&&(i+=' disabled="disabled"'),n.multiline?'":'"},postRender:function(){var e=this;return t.on(e.getEl(),"change",function(t){e.fire("change",t)}),e._super()},remove:function(){t.off(this.getEl()),this._super()}})}),r(Jt,[W],function(e){return function(t){var n=this,r;n.show=function(i){return n.hide(),r=!0,window.setTimeout(function(){r&&t.appendChild(e.createFragment('
    '))},i||0),n},n.hide=function(){var e=t.lastChild;return e&&-1!=e.className.indexOf("throbber")&&e.parentNode.removeChild(e),r=!1,n}}}),a([l,c,d,u,f,p,m,h,g,v,y,b,C,x,w,_,N,E,k,S,T,R,A,B,L,D,M,H,P,O,I,F,z,W,V,U,q,j,$,K,Y,G,X,J,Q,Z,et,tt,nt,rt,it,ot,at,st,lt,ct,dt,ut,ft,pt,mt,ht,gt,vt,yt,bt,Ct,xt,wt,_t,Nt,Et,kt,St,Tt,Rt,At,Bt,Lt,Dt,Mt,Ht,Pt,Ot,It,Ft,zt,Wt,Vt,Ut,qt,jt,$t,Kt,Yt,Gt,Xt,Jt])}(this); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/tinymce.js b/common/static/js/vendor/tinymce/js/tinymce/tinymce.js new file mode 100755 index 0000000000..d92519170b --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/tinymce.js @@ -0,0 +1,34814 @@ +// 4.0.20 (2014-03-18) + +/** + * Compiled inline version. (Library mode) + */ + +/*jshint smarttabs:true, undef:true, latedef:true, curly:true, bitwise:true, camelcase:true */ +/*globals $code */ + +(function(exports, undefined) { + "use strict"; + + var modules = {}; + + function require(ids, callback) { + var module, defs = []; + + for (var i = 0; i < ids.length; ++i) { + module = modules[ids[i]] || resolve(ids[i]); + if (!module) { + throw 'module definition dependecy not found: ' + ids[i]; + } + + defs.push(module); + } + + callback.apply(null, defs); + } + + function define(id, dependencies, definition) { + if (typeof id !== 'string') { + throw 'invalid module definition, module id must be defined and be a string'; + } + + if (dependencies === undefined) { + throw 'invalid module definition, dependencies must be specified'; + } + + if (definition === undefined) { + throw 'invalid module definition, definition function must be specified'; + } + + require(dependencies, function() { + modules[id] = definition.apply(null, arguments); + }); + } + + function defined(id) { + return !!modules[id]; + } + + function resolve(id) { + var target = exports; + var fragments = id.split(/[.\/]/); + + for (var fi = 0; fi < fragments.length; ++fi) { + if (!target[fragments[fi]]) { + return; + } + + target = target[fragments[fi]]; + } + + return target; + } + + function expose(ids) { + for (var i = 0; i < ids.length; i++) { + var target = exports; + var id = ids[i]; + var fragments = id.split(/[.\/]/); + + for (var fi = 0; fi < fragments.length - 1; ++fi) { + if (target[fragments[fi]] === undefined) { + target[fragments[fi]] = {}; + } + + target = target[fragments[fi]]; + } + + target[fragments[fragments.length - 1]] = modules[id]; + } + } + +// Included from: js/tinymce/classes/dom/EventUtils.js + +/** + * EventUtils.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*jshint loopfunc:true*/ +/*eslint no-loop-func:0 */ + +define("tinymce/dom/EventUtils", [], function() { + "use strict"; + + var eventExpandoPrefix = "mce-data-"; + var mouseEventRe = /^(?:mouse|contextmenu)|click/; + var deprecated = {keyLocation: 1, layerX: 1, layerY: 1, returnValue: 1}; + + /** + * Binds a native event to a callback on the speified target. + */ + function addEvent(target, name, callback, capture) { + if (target.addEventListener) { + target.addEventListener(name, callback, capture || false); + } else if (target.attachEvent) { + target.attachEvent('on' + name, callback); + } + } + + /** + * Unbinds a native event callback on the specified target. + */ + function removeEvent(target, name, callback, capture) { + if (target.removeEventListener) { + target.removeEventListener(name, callback, capture || false); + } else if (target.detachEvent) { + target.detachEvent('on' + name, callback); + } + } + + /** + * Normalizes a native event object or just adds the event specific methods on a custom event. + */ + function fix(originalEvent, data) { + var name, event = data || {}, undef; + + // Dummy function that gets replaced on the delegation state functions + function returnFalse() { + return false; + } + + // Dummy function that gets replaced on the delegation state functions + function returnTrue() { + return true; + } + + // Copy all properties from the original event + for (name in originalEvent) { + // layerX/layerY is deprecated in Chrome and produces a warning + if (!deprecated[name]) { + event[name] = originalEvent[name]; + } + } + + // Normalize target IE uses srcElement + if (!event.target) { + event.target = event.srcElement || document; + } + + // Calculate pageX/Y if missing and clientX/Y available + if (originalEvent && mouseEventRe.test(originalEvent.type) && originalEvent.pageX === undef && originalEvent.clientX !== undef) { + var eventDoc = event.target.ownerDocument || document; + var doc = eventDoc.documentElement; + var body = eventDoc.body; + + event.pageX = originalEvent.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - + ( doc && doc.clientLeft || body && body.clientLeft || 0); + + event.pageY = originalEvent.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0 ) - + ( doc && doc.clientTop || body && body.clientTop || 0); + } + + // Add preventDefault method + event.preventDefault = function() { + event.isDefaultPrevented = returnTrue; + + // Execute preventDefault on the original event object + if (originalEvent) { + if (originalEvent.preventDefault) { + originalEvent.preventDefault(); + } else { + originalEvent.returnValue = false; // IE + } + } + }; + + // Add stopPropagation + event.stopPropagation = function() { + event.isPropagationStopped = returnTrue; + + // Execute stopPropagation on the original event object + if (originalEvent) { + if (originalEvent.stopPropagation) { + originalEvent.stopPropagation(); + } else { + originalEvent.cancelBubble = true; // IE + } + } + }; + + // Add stopImmediatePropagation + event.stopImmediatePropagation = function() { + event.isImmediatePropagationStopped = returnTrue; + event.stopPropagation(); + }; + + // Add event delegation states + if (!event.isDefaultPrevented) { + event.isDefaultPrevented = returnFalse; + event.isPropagationStopped = returnFalse; + event.isImmediatePropagationStopped = returnFalse; + } + + return event; + } + + /** + * Bind a DOMContentLoaded event across browsers and executes the callback once the page DOM is initialized. + * It will also set/check the domLoaded state of the event_utils instance so ready isn't called multiple times. + */ + function bindOnReady(win, callback, eventUtils) { + var doc = win.document, event = {type: 'ready'}; + + if (eventUtils.domLoaded) { + callback(event); + return; + } + + // Gets called when the DOM is ready + function readyHandler() { + if (!eventUtils.domLoaded) { + eventUtils.domLoaded = true; + callback(event); + } + } + + function waitForDomLoaded() { + // Check complete or interactive state if there is a body + // element on some iframes IE 8 will produce a null body + if (doc.readyState === "complete" || (doc.readyState === "interactive" && doc.body)) { + removeEvent(doc, "readystatechange", waitForDomLoaded); + readyHandler(); + } + } + + function tryScroll() { + try { + // If IE is used, use the trick by Diego Perini licensed under MIT by request to the author. + // http://javascript.nwbox.com/IEContentLoaded/ + doc.documentElement.doScroll("left"); + } catch (ex) { + setTimeout(tryScroll, 0); + return; + } + + readyHandler(); + } + + // Use W3C method + if (doc.addEventListener) { + if (doc.readyState === "complete") { + readyHandler(); + } else { + addEvent(win, 'DOMContentLoaded', readyHandler); + } + } else { + // Use IE method + addEvent(doc, "readystatechange", waitForDomLoaded); + + // Wait until we can scroll, when we can the DOM is initialized + if (doc.documentElement.doScroll && win.self === win.top) { + tryScroll(); + } + } + + // Fallback if any of the above methods should fail for some odd reason + addEvent(win, 'load', readyHandler); + } + + /** + * This class enables you to bind/unbind native events to elements and normalize it's behavior across browsers. + */ + function EventUtils() { + var self = this, events = {}, count, expando, hasFocusIn, hasMouseEnterLeave, mouseEnterLeave; + + expando = eventExpandoPrefix + (+new Date()).toString(32); + hasMouseEnterLeave = "onmouseenter" in document.documentElement; + hasFocusIn = "onfocusin" in document.documentElement; + mouseEnterLeave = {mouseenter: 'mouseover', mouseleave: 'mouseout'}; + count = 1; + + // State if the DOMContentLoaded was executed or not + self.domLoaded = false; + self.events = events; + + /** + * Executes all event handler callbacks for a specific event. + * + * @private + * @param {Event} evt Event object. + * @param {String} id Expando id value to look for. + */ + function executeHandlers(evt, id) { + var callbackList, i, l, callback, container = events[id]; + + callbackList = container && container[evt.type]; + if (callbackList) { + for (i = 0, l = callbackList.length; i < l; i++) { + callback = callbackList[i]; + + // Check if callback exists might be removed if a unbind is called inside the callback + if (callback && callback.func.call(callback.scope, evt) === false) { + evt.preventDefault(); + } + + // Should we stop propagation to immediate listeners + if (evt.isImmediatePropagationStopped()) { + return; + } + } + } + } + + /** + * Binds a callback to an event on the specified target. + * + * @method bind + * @param {Object} target Target node/window or custom object. + * @param {String} names Name of the event to bind. + * @param {function} callback Callback function to execute when the event occurs. + * @param {Object} scope Scope to call the callback function on, defaults to target. + * @return {function} Callback function that got bound. + */ + self.bind = function(target, names, callback, scope) { + var id, callbackList, i, name, fakeName, nativeHandler, capture, win = window; + + // Native event handler function patches the event and executes the callbacks for the expando + function defaultNativeHandler(evt) { + executeHandlers(fix(evt || win.event), id); + } + + // Don't bind to text nodes or comments + if (!target || target.nodeType === 3 || target.nodeType === 8) { + return; + } + + // Create or get events id for the target + if (!target[expando]) { + id = count++; + target[expando] = id; + events[id] = {}; + } else { + id = target[expando]; + } + + // Setup the specified scope or use the target as a default + scope = scope || target; + + // Split names and bind each event, enables you to bind multiple events with one call + names = names.split(' '); + i = names.length; + while (i--) { + name = names[i]; + nativeHandler = defaultNativeHandler; + fakeName = capture = false; + + // Use ready instead of DOMContentLoaded + if (name === "DOMContentLoaded") { + name = "ready"; + } + + // DOM is already ready + if (self.domLoaded && name === "ready" && target.readyState == 'complete') { + callback.call(scope, fix({type: name})); + continue; + } + + // Handle mouseenter/mouseleaver + if (!hasMouseEnterLeave) { + fakeName = mouseEnterLeave[name]; + + if (fakeName) { + nativeHandler = function(evt) { + var current, related; + + current = evt.currentTarget; + related = evt.relatedTarget; + + // Check if related is inside the current target if it's not then the event should + // be ignored since it's a mouseover/mouseout inside the element + if (related && current.contains) { + // Use contains for performance + related = current.contains(related); + } else { + while (related && related !== current) { + related = related.parentNode; + } + } + + // Fire fake event + if (!related) { + evt = fix(evt || win.event); + evt.type = evt.type === 'mouseout' ? 'mouseleave' : 'mouseenter'; + evt.target = current; + executeHandlers(evt, id); + } + }; + } + } + + // Fake bubbeling of focusin/focusout + if (!hasFocusIn && (name === "focusin" || name === "focusout")) { + capture = true; + fakeName = name === "focusin" ? "focus" : "blur"; + nativeHandler = function(evt) { + evt = fix(evt || win.event); + evt.type = evt.type === 'focus' ? 'focusin' : 'focusout'; + executeHandlers(evt, id); + }; + } + + // Setup callback list and bind native event + callbackList = events[id][name]; + if (!callbackList) { + events[id][name] = callbackList = [{func: callback, scope: scope}]; + callbackList.fakeName = fakeName; + callbackList.capture = capture; + + // Add the nativeHandler to the callback list so that we can later unbind it + callbackList.nativeHandler = nativeHandler; + + // Check if the target has native events support + + if (name === "ready") { + bindOnReady(target, nativeHandler, self); + } else { + addEvent(target, fakeName || name, nativeHandler, capture); + } + } else { + if (name === "ready" && self.domLoaded) { + callback({type: name}); + } else { + // If it already has an native handler then just push the callback + callbackList.push({func: callback, scope: scope}); + } + } + } + + target = callbackList = 0; // Clean memory for IE + + return callback; + }; + + /** + * Unbinds the specified event by name, name and callback or all events on the target. + * + * @method unbind + * @param {Object} target Target node/window or custom object. + * @param {String} names Optional event name to unbind. + * @param {function} callback Optional callback function to unbind. + * @return {EventUtils} Event utils instance. + */ + self.unbind = function(target, names, callback) { + var id, callbackList, i, ci, name, eventMap; + + // Don't bind to text nodes or comments + if (!target || target.nodeType === 3 || target.nodeType === 8) { + return self; + } + + // Unbind event or events if the target has the expando + id = target[expando]; + if (id) { + eventMap = events[id]; + + // Specific callback + if (names) { + names = names.split(' '); + i = names.length; + while (i--) { + name = names[i]; + callbackList = eventMap[name]; + + // Unbind the event if it exists in the map + if (callbackList) { + // Remove specified callback + if (callback) { + ci = callbackList.length; + while (ci--) { + if (callbackList[ci].func === callback) { + var nativeHandler = callbackList.nativeHandler; + var fakeName = callbackList.fakeName, capture = callbackList.capture; + + // Clone callbackList since unbind inside a callback would otherwise break the handlers loop + callbackList = callbackList.slice(0, ci).concat(callbackList.slice(ci + 1)); + callbackList.nativeHandler = nativeHandler; + callbackList.fakeName = fakeName; + callbackList.capture = capture; + + eventMap[name] = callbackList; + } + } + } + + // Remove all callbacks if there isn't a specified callback or there is no callbacks left + if (!callback || callbackList.length === 0) { + delete eventMap[name]; + removeEvent(target, callbackList.fakeName || name, callbackList.nativeHandler, callbackList.capture); + } + } + } + } else { + // All events for a specific element + for (name in eventMap) { + callbackList = eventMap[name]; + removeEvent(target, callbackList.fakeName || name, callbackList.nativeHandler, callbackList.capture); + } + + eventMap = {}; + } + + // Check if object is empty, if it isn't then we won't remove the expando map + for (name in eventMap) { + return self; + } + + // Delete event object + delete events[id]; + + // Remove expando from target + try { + // IE will fail here since it can't delete properties from window + delete target[expando]; + } catch (ex) { + // IE will set it to null + target[expando] = null; + } + } + + return self; + }; + + /** + * Fires the specified event on the specified target. + * + * @method fire + * @param {Object} target Target node/window or custom object. + * @param {String} name Event name to fire. + * @param {Object} args Optional arguments to send to the observers. + * @return {EventUtils} Event utils instance. + */ + self.fire = function(target, name, args) { + var id; + + // Don't bind to text nodes or comments + if (!target || target.nodeType === 3 || target.nodeType === 8) { + return self; + } + + // Build event object by patching the args + args = fix(null, args); + args.type = name; + args.target = target; + + do { + // Found an expando that means there is listeners to execute + id = target[expando]; + if (id) { + executeHandlers(args, id); + } + + // Walk up the DOM + target = target.parentNode || target.ownerDocument || target.defaultView || target.parentWindow; + } while (target && !args.isPropagationStopped()); + + return self; + }; + + /** + * Removes all bound event listeners for the specified target. This will also remove any bound + * listeners to child nodes within that target. + * + * @method clean + * @param {Object} target Target node/window object. + * @return {EventUtils} Event utils instance. + */ + self.clean = function(target) { + var i, children, unbind = self.unbind; + + // Don't bind to text nodes or comments + if (!target || target.nodeType === 3 || target.nodeType === 8) { + return self; + } + + // Unbind any element on the specificed target + if (target[expando]) { + unbind(target); + } + + // Target doesn't have getElementsByTagName it's probably a window object then use it's document to find the children + if (!target.getElementsByTagName) { + target = target.document; + } + + // Remove events from each child element + if (target && target.getElementsByTagName) { + unbind(target); + + children = target.getElementsByTagName('*'); + i = children.length; + while (i--) { + target = children[i]; + + if (target[expando]) { + unbind(target); + } + } + } + + return self; + }; + + /** + * Destroys the event object. Call this on IE to remove memory leaks. + */ + self.destroy = function() { + events = {}; + }; + + // Legacy function for canceling events + self.cancel = function(e) { + if (e) { + e.preventDefault(); + e.stopImmediatePropagation(); + } + + return false; + }; + } + + EventUtils.Event = new EventUtils(); + EventUtils.Event.bind(window, 'ready', function() {}); + + return EventUtils; +}); + +// Included from: js/tinymce/classes/dom/Sizzle.js + +/** + * Sizzle.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + * + * @ignore-file + */ + +/*jshint bitwise:false, expr:true, noempty:false, sub:true, eqnull:true, latedef:false, maxlen:255 */ +/*eslint dot-notation:0, no-empty:0, no-cond-assign:0, no-unused-expressions:0, new-cap:0, no-nested-ternary:0, func-style:0, no-bitwise: 0 */ + +/* + * Sizzle CSS Selector Engine + * Copyright, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +define("tinymce/dom/Sizzle", [], function() { +var i, + cachedruns, + Expr, + getText, + isXML, + compile, + outermostContext, + recompare, + sortInput, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + -(new Date()), + preferredDoc = window.document, + support = {}, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + hasDuplicate = false, + sortOrder = function() { return 0; }, + + // General-purpose constants + strundefined = typeof undefined, + MAX_NEGATIVE = 1 << 31, + + // Array methods + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf if we can't use a native one + indexOf = arr.indexOf || function( elem ) { + var i = 0, + len = this.length; + for ( ; i < len; i++ ) { + if ( this[i] === elem ) { + return i; + } + } + return -1; + }, + + + // Regular expressions + + // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + // http://www.w3.org/TR/css3-syntax/#characters + characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + // Loosely modeled on CSS identifier characters + // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors + // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = characterEncoding.replace( "w", "w#" ), + + // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors + operators = "([*^$|!~]?=)", + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace + + "*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]", + + // Prefer arguments quoted, + // then not containing pseudos/brackets, + // then attribute selectors/non-parenthetical expressions, + // then anything else + // These preferences are here to reduce the number of selectors + // needing tokenize in the PSEUDO preFilter + pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ), + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + characterEncoding + ")" ), + "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), + "NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ), + "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rsibling = /[\x20\t\r\n\f]*[+~]/, + + rnative = /^[^{]+\{\s*\[native code/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rescape = /'|\\/g, + rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g, + + // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = /\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g, + funescape = function( _, escaped ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + return high !== high ? + escaped : + // BMP codepoint + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }; + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +/** + * For feature detection + * @param {Function} fn The function to test for native support + */ +function isNative( fn ) { + return rnative.test( fn + "" ); +} + +/** + * Create key-value caches of limited size + * @returns {Function(string, Object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var cache, + keys = []; + + cache = function( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key += " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + cache[ key ] = value; + return value; + }; + + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ +function assert( fn ) { + var div = document.createElement("div"); + + try { + return !!fn( div ); + } catch (e) { + return false; + } finally { + // release memory in IE + div = null; + } +} + +function Sizzle( selector, context, results, seed ) { + var match, elem, m, nodeType, + // QSA vars + i, groups, old, nid, newContext, newSelector; + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + + context = context || document; + results = results || []; + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { + return []; + } + + if ( documentIsHTML && !seed ) { + + // Shortcuts + if ( (match = rquickExpr.exec( selector )) ) { + // Speed-up: Sizzle("#ID") + if ( (m = match[1]) ) { + if ( nodeType === 9 ) { + elem = context.getElementById( m ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE, Opera, and Webkit return items + // by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + } else { + // Context is not a document + if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && + contains( context, elem ) && elem.id === m ) { + results.push( elem ); + return results; + } + } + + // Speed-up: Sizzle("TAG") + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Speed-up: Sizzle(".CLASS") + } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) { + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // QSA path + if ( support.qsa && !rbuggyQSA.test(selector) ) { + old = true; + nid = expando; + newContext = context; + newSelector = nodeType === 9 && selector; + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + groups = tokenize( selector ); + + if ( (old = context.getAttribute("id")) ) { + nid = old.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", nid ); + } + nid = "[id='" + nid + "'] "; + + i = groups.length; + while ( i-- ) { + groups[i] = nid + toSelector( groups[i] ); + } + newContext = rsibling.test( selector ) && context.parentNode || context; + newSelector = groups.join(","); + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch(qsaError) { + } finally { + if ( !old ) { + context.removeAttribute("id"); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Detect xml + * @param {Element|Object} elem An element or a document + */ +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var doc = node ? node.ownerDocument || node : preferredDoc; + + // If no document and documentElement is available, return + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Set our document + document = doc; + docElem = doc.documentElement; + + // Support tests + documentIsHTML = !isXML( doc ); + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( div ) { + div.appendChild( doc.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + // Check if attributes should be retrieved by attribute nodes + support.attributes = assert(function( div ) { + div.innerHTML = ""; + var type = typeof div.lastChild.getAttribute("multiple"); + // IE8 returns a string for some attributes even when not present + return type !== "boolean" && type !== "string"; + }); + + // Check if getElementsByClassName can be trusted + support.getElementsByClassName = assert(function( div ) { + // Opera can't find a second classname (in 9.6) + div.innerHTML = ""; + if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) { + return false; + } + + // Safari 3.2 caches class attributes and doesn't catch changes + div.lastChild.className = "e"; + return div.getElementsByClassName("e").length === 2; + }); + + // Check if getElementsByName privileges form controls or returns elements by ID + // If so, assume (for broader support) that getElementById returns elements by name + support.getByName = assert(function( div ) { + // Inject content + div.id = expando + 0; + // Support: Windows 8 Native Apps + // Assigning innerHTML with "name" attributes throws uncatchable exceptions + // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx + div.appendChild( document.createElement("a") ).setAttribute( "name", expando ); + div.appendChild( document.createElement("i") ).setAttribute( "name", expando ); + docElem.appendChild( div ); + + // Test + var pass = doc.getElementsByName && + // buggy browsers will return fewer than the correct 2 + doc.getElementsByName( expando ).length === 2 + + // buggy browsers will return more than the correct 0 + doc.getElementsByName( expando + 0 ).length; + + // Cleanup + docElem.removeChild( div ); + + return pass; + }); + + // Support: Webkit<537.32 + // Detached nodes confoundingly follow *each other* + support.sortDetached = assert(function( div1 ) { + return div1.compareDocumentPosition && + // Should return 1, but Webkit returns 4 (following) + (div1.compareDocumentPosition( document.createElement("div") ) & 1); + }); + + // IE6/7 return modified attributes + Expr.attrHandle = assert(function( div ) { + div.innerHTML = ""; + return div.firstChild && typeof div.firstChild.getAttribute !== strundefined && + div.firstChild.getAttribute("href") === "#"; + }) ? + {} : + { + "href": function( elem ) { + return elem.getAttribute( "href", 2 ); + }, + "type": function( elem ) { + return elem.getAttribute("type"); + } + }; + + // ID find and filter + if ( support.getByName ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== strundefined && documentIsHTML ) { + var m = context.getElementById( id ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [m] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== strundefined && documentIsHTML ) { + var m = context.getElementById( id ); + + return m ? + m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ? + [m] : + undefined : + []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== strundefined ) { + return context.getElementsByTagName( tag ); + } + } : + function( tag, context ) { + var elem, + tmp = [], + i = 0, + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Name + Expr.find["NAME"] = support.getByName && function( tag, context ) { + if ( typeof context.getElementsByName !== strundefined ) { + return context.getElementsByName( name ); + } + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21), + // no need to also add to buggyMatches since matches checks buggyQSA + // A support test would require too much code (would include document ready) + rbuggyQSA = [ ":focus" ]; + + if ( (support.qsa = isNative(doc.querySelectorAll)) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // http://bugs.jquery.com/ticket/12359 + div.innerHTML = ""; + + // IE8 - Some boolean attributes are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + }); + + assert(function( div ) { + + // Opera 10-12/IE8 - ^= $= *= and empty values + // Should not select anything + div.innerHTML = ""; + if ( div.querySelectorAll("[i^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = isNative( (matches = docElem.matchesSelector || + docElem.mozMatchesSelector || + docElem.webkitMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + // Element contains another + // Purposefully does not implement inclusive descendant + // As in, an element does not contain itself + contains = isNative(docElem.contains) || docElem.compareDocumentPosition ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + // Document order sorting + sortOrder = docElem.compareDocumentPosition ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b ); + + if ( compare ) { + // Disconnected nodes + if ( compare & 1 || + (recompare && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === doc || contains(preferredDoc, a) ) { + return -1; + } + if ( b === doc || contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } + + // Not directly comparable, sort on existence of method + return a.compareDocumentPosition ? -1 : 1; + } : + function( a, b ) { + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + + // Parentless nodes are either documents or disconnected + } else if ( !aup || !bup ) { + return a === doc ? -1 : + b === doc ? 1 : + aup ? -1 : + bup ? 1 : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + // rbuggyQSA always contains :focus, so no need for an existence check + if ( support.matchesSelector && documentIsHTML && (!rbuggyMatches || !rbuggyMatches.test(expr)) && !rbuggyQSA.test(expr) ) { + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch(e) {} + } + + return Sizzle( expr, document, null, [elem] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + var val; + + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + if ( documentIsHTML ) { + name = name.toLowerCase(); + } + if ( (val = Expr.attrHandle[ name ]) ) { + return val( elem ); + } + if ( !documentIsHTML || support.attributes ) { + return elem.getAttribute( name ); + } + return ( (val = elem.getAttributeNode( name )) || elem.getAttribute( name ) ) && elem[ name ] === true ? + name : + val && val.specified ? val.value : null; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +// Document sorting and removing duplicates +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + // Compensate for sort limitations + recompare = !support.sortDetached; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + return results; +}; + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns Returns -1 if a precedes b, 1 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && ( ~b.sourceIndex || MAX_NEGATIVE ) - ( ~a.sourceIndex || MAX_NEGATIVE ); + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +// Returns a function to use in pseudos for input types +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +// Returns a function to use in pseudos for buttons +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +// Returns a function to use in pseudos for positionals +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + for ( ; (node = elem[i]); i++ ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (see #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[5] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[4] ) { + match[2] = match[4]; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeName ) { + if ( nodeName === "*" ) { + return function() { return true; }; + } + + nodeName = nodeName.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, outerCache, node, diff, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + // Seek `elem` from a previously-cached index + outerCache = parent[ expando ] || (parent[ expando ] = {}); + cache = outerCache[ type ] || []; + nodeIndex = cache[0] === dirruns && cache[1]; + diff = cache[0] === dirruns && cache[2]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + outerCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + // Use previously-cached element index if available + } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { + diff = cache[1]; + + // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...) + } else { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { + // Cache the index of each encountered element + if ( useCache ) { + (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf.call( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)), + // not comment, processing instructions, or others + // Thanks to Diego Perini for the nodeName shortcut + // Greater than "@" means alpha characters (specifically not starting with "#" or "?") + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) + // use getAttribute instead to test this case + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +function tokenize( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( tokens = [] ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push( { + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +} + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var data, cache, outerCache, + dirkey = dirruns + " " + doneName; + + // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) { + if ( (data = cache[1]) === true || data === cachedruns ) { + return data === true; + } + } else { + cache = outerCache[ dir ] = [ dirkey ]; + cache[1] = matcher( elem, context, xml ) || cachedruns; + if ( cache[1] === true ) { + return true; + } + } + } + } + } + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf.call( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( tokens.slice( 0, i - 1 ) ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + // A counter to specify which element is currently being matched + var matcherCachedRuns = 0, + bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, expandContext ) { + var elem, j, matcher, + setMatched = [], + matchedCount = 0, + i = "0", + unmatched = seed && [], + outermost = expandContext != null, + contextBackup = outermostContext, + // We must always have either seed elements or context + elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1); + + if ( outermost ) { + outermostContext = context !== document && context; + cachedruns = matcherCachedRuns; + } + + // Add elements passing elementMatchers directly to results + // Keep `i` a string if there are no elements so `matchedCount` will be "00" below + for ( ; (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + cachedruns = ++matcherCachedRuns; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // Apply set filters to unmatched elements + matchedCount += i; + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !group ) { + group = tokenize( selector ); + } + i = group.length; + while ( i-- ) { + cached = matcherFromTokens( group[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + } + return cached; +}; + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function select( selector, context, results, seed ) { + var i, tokens, token, type, find, + match = tokenize( selector ); + + if ( !seed ) { + // Try to minimize operations if there is only one group + if ( match.length === 1 ) { + + // Take a shortcut and set the context if the root selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + context.nodeType === 9 && documentIsHTML && + Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && context.parentNode || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + } + + // Compile and execute a filtering function + // Provide `match` to avoid retokenization if we modified the selector above + compile( selector, match )( + seed, + context, + !documentIsHTML, + results, + rsibling.test( selector ) + ); + return results; +} + +// Deprecated +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +// Check sort stability +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +// Initialize with the default document +setDocument(); + +// Always assume the presence of duplicates if sort doesn't +// pass them to our comparison function (as in Google Chrome). +[0, 0].sort( sortOrder ); +support.detectDuplicates = hasDuplicate; + +/* +// EXPOSE +if ( typeof define === "function" && define.amd ) { + define(function() { return Sizzle; }); +} else { + window.Sizzle = Sizzle; +} +*/ + +// EXPOSE +return Sizzle; +}); + +// Included from: js/tinymce/classes/dom/DomQuery.js + +/** + * DomQuery.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + * + * Some of this logic is based on jQuery code that is released under + * MIT license that grants us to sublicense it under LGPL. + * + * @ignore-file + */ + +/** + * @class tinymce.dom.DomQuery + */ +define("tinymce/dom/DomQuery", [ + "tinymce/dom/EventUtils", + "tinymce/dom/Sizzle" +], function(EventUtils, Sizzle) { + var doc = document, push = Array.prototype.push, slice = Array.prototype.slice; + var rquickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/; + var Event = EventUtils.Event; + + function isDefined(obj) { + return typeof obj !== "undefined"; + } + + function isString(obj) { + return typeof obj === "string"; + } + + function createFragment(html) { + var frag, node, container; + + container = doc.createElement("div"); + frag = doc.createDocumentFragment(); + container.innerHTML = html; + + while ((node = container.firstChild)) { + frag.appendChild(node); + } + + return frag; + } + + function domManipulate(targetNodes, sourceItem, callback) { + var i; + + if (typeof sourceItem === "string") { + sourceItem = createFragment(sourceItem); + } else if (sourceItem.length) { + for (i = 0; i < sourceItem.length; i++) { + domManipulate(targetNodes, sourceItem[i], callback); + } + + return targetNodes; + } + + i = targetNodes.length; + while (i--) { + callback.call(targetNodes[i], sourceItem.parentNode ? sourceItem : sourceItem); + } + + return targetNodes; + } + + function hasClass(node, className) { + return node && className && (' ' + node.className + ' ').indexOf(' ' + className + ' ') !== -1; + } + + /** + * Makes a map object out of a string that gets separated by a delimiter. + * + * @method makeMap + * @param {String} items Item string to split. + * @param {Object} map Optional object to add items to. + * @return {Object} name/value object with items as keys. + */ + function makeMap(items, map) { + var i; + + items = items || []; + + if (typeof(items) == "string") { + items = items.split(' '); + } + + map = map || {}; + + i = items.length; + while (i--) { + map[items[i]] = {}; + } + + return map; + } + + var numericCssMap = makeMap('fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom'); + + function DomQuery(selector, context) { + /*eslint new-cap:0 */ + return new DomQuery.fn.init(selector, context); + } + + /** + * Extends the specified object with another object. + * + * @method extend + * @param {Object} target Object to extend. + * @param {Object..} obj Multiple objects to extend with. + * @return {Object} Same as target, the extended object. + */ + function extend(target) { + var args = arguments, arg, i, key; + + for (i = 1; i < args.length; i++) { + arg = args[i]; + + for (key in arg) { + target[key] = arg[key]; + } + } + + return target; + } + + /** + * Converts the specified object into a real JavaScript array. + * + * @method toArray + * @param {Object} obj Object to convert into array. + * @return {Array} Array object based in input. + */ + function toArray(obj) { + var array = [], i, l; + + for (i = 0, l = obj.length; i < l; i++) { + array[i] = obj[i]; + } + + return array; + } + + /** + * Returns the index of the specified item inside the array. + * + * @method inArray + * @param {Object} item Item to look for. + * @param {Array} array Array to look for item in. + * @return {Number} Index of the item or -1. + */ + function inArray(item, array) { + var i; + + if (array.indexOf) { + return array.indexOf(item); + } + + i = array.length; + while (i--) { + if (array[i] === item) { + return i; + } + } + + return -1; + } + + /** + * Returns true/false if the specified object is an array. + * + * @method isArray + * @param {Object} obj Object to check if it's an array. + * @return {Boolean} true/false if the input object is array or not. + */ + var isArray = Array.isArray || function(obj) { + return Object.prototype.toString.call(obj) === "[object Array]"; + }; + + var whiteSpaceRegExp = /^\s*|\s*$/g; + + function trim(str) { + return (str === null || str === undefined) ? '' : ("" + str).replace(whiteSpaceRegExp, ''); + } + + /** + * Executes the callback function for each item in array/object. If you return false in the + * callback it will break the loop. + * + * @method each + * @param {Object} obj Object to iterate. + * @param {function} callback Callback function to execute for each item. + */ + function each(obj, callback) { + var length, key, i, undef, value; + + if (obj) { + length = obj.length; + + if (length === undef) { + // Loop object items + for (key in obj) { + if (obj.hasOwnProperty(key)) { + value = obj[key]; + if (callback.call(value, value, key) === false) { + break; + } + } + } + } else { + // Loop array items + for (i = 0; i < length; i++) { + value = obj[i]; + if (callback.call(value, value, key) === false) { + break; + } + } + } + } + + return obj; + } + + DomQuery.fn = DomQuery.prototype = { + constructor: DomQuery, + selector: "", + length: 0, + + init: function(selector, context) { + var self = this, match, node; + + if (!selector) { + return self; + } + + if (selector.nodeType) { + self.context = self[0] = selector; + self.length = 1; + + return self; + } + + if (isString(selector)) { + if (selector.charAt(0) === "<" && selector.charAt(selector.length - 1) === ">" && selector.length >= 3) { + match = [null, selector, null]; + } else { + match = rquickExpr.exec(selector); + } + + if (match) { + if (match[1]) { + node = createFragment(selector).firstChild; + while (node) { + this.add(node); + node = node.nextSibling; + } + } else { + node = doc.getElementById(match[2]); + + if (node.id !== match[2]) { + return self.find(selector); + } + + self.length = 1; + self[0] = node; + } + } else { + return DomQuery(context || document).find(selector); + } + } else { + this.add(selector); + } + + return self; + }, + + toArray: function() { + return toArray(this); + }, + + add: function(items) { + var self = this; + + // Force single item into array + if (!isArray(items)) { + if (items instanceof DomQuery) { + self.add(items.toArray()); + } else { + push.call(self, items); + } + } else { + push.apply(self, items); + } + + return self; + }, + + attr: function(name, value) { + var self = this; + + if (typeof name === "object") { + each(name, function(value, name) { + self.attr(name, value); + }); + } else if (isDefined(value)) { + this.each(function() { + if (this.nodeType === 1) { + this.setAttribute(name, value); + } + }); + } else { + return self[0] && self[0].nodeType === 1 ? self[0].getAttribute(name) : undefined; + } + + return self; + }, + + css: function(name, value) { + var self = this; + + if (typeof name === "object") { + each(name, function(value, name) { + self.css(name, value); + }); + } else { + // Camelcase it, if needed + name = name.replace(/-(\D)/g, function(a, b) { + return b.toUpperCase(); + }); + + if (isDefined(value)) { + // Default px suffix on these + if (typeof(value) === 'number' && !numericCssMap[name]) { + value += 'px'; + } + + self.each(function() { + var style = this.style; + + // IE specific opacity + if (name === "opacity" && this.runtimeStyle && typeof(this.runtimeStyle.opacity) === "undefined") { + style.filter = value === '' ? '' : "alpha(opacity=" + (value * 100) + ")"; + } + + try { + style[name] = value; + } catch (ex) { + // Ignore + } + }); + } else { + return self[0] ? self[0].style[name] : undefined; + } + } + + return self; + }, + + remove: function() { + var self = this, node, i = this.length; + + while (i--) { + node = self[i]; + Event.clean(node); + + if (node.parentNode) { + node.parentNode.removeChild(node); + } + } + + return this; + }, + + empty: function() { + var self = this, node, i = this.length; + + while (i--) { + node = self[i]; + while (node.firstChild) { + node.removeChild(node.firstChild); + } + } + + return this; + }, + + html: function(value) { + var self = this, i; + + if (isDefined(value)) { + i = self.length; + while (i--) { + self[i].innerHTML = value; + } + + return self; + } + + return self[0] ? self[0].innerHTML : ''; + }, + + text: function(value) { + var self = this, i; + + if (isDefined(value)) { + i = self.length; + while (i--) { + self[i].innerText = self[0].textContent = value; + } + + return self; + } + + return self[0] ? self[0].innerText || self[0].textContent : ''; + }, + + append: function() { + return domManipulate(this, arguments, function(node) { + if (this.nodeType === 1) { + this.appendChild(node); + } + }); + }, + + prepend: function() { + return domManipulate(this, arguments, function(node) { + if (this.nodeType === 1) { + this.insertBefore(node, this.firstChild); + } + }); + }, + + before: function() { + var self = this; + + if (self[0] && self[0].parentNode) { + return domManipulate(self, arguments, function(node) { + this.parentNode.insertBefore(node, this.nextSibling); + }); + } + + return self; + }, + + after: function() { + var self = this; + + if (self[0] && self[0].parentNode) { + return domManipulate(self, arguments, function(node) { + this.parentNode.insertBefore(node, this); + }); + } + + return self; + }, + + appendTo: function(val) { + DomQuery(val).append(this); + + return this; + }, + + addClass: function(className) { + return this.toggleClass(className, true); + }, + + removeClass: function(className) { + return this.toggleClass(className, false); + }, + + toggleClass: function(className, state) { + var self = this; + + if (className.indexOf(' ') !== -1) { + each(className.split(' '), function() { + self.toggleClass(this, state); + }); + } else { + self.each(function(node) { + var existingClassName; + + if (hasClass(node, className) !== state) { + existingClassName = node.className; + + if (state) { + node.className += existingClassName ? ' ' + className : className; + } else { + node.className = trim((" " + existingClassName + " ").replace(' ' + className + ' ', ' ')); + } + } + }); + } + + return self; + }, + + hasClass: function(className) { + return hasClass(this[0], className); + }, + + each: function(callback) { + return each(this, callback); + }, + + on: function(name, callback) { + return this.each(function() { + Event.bind(this, name, callback); + }); + }, + + off: function(name, callback) { + return this.each(function() { + Event.unbind(this, name, callback); + }); + }, + + show: function() { + return this.css('display', ''); + }, + + hide: function() { + return this.css('display', 'none'); + }, + + slice: function() { + return new DomQuery(slice.apply(this, arguments)); + }, + + eq: function(index) { + return index === -1 ? this.slice(index) : this.slice(index, +index + 1); + }, + + first: function() { + return this.eq(0); + }, + + last: function() { + return this.eq(-1); + }, + + replaceWith: function(content) { + var self = this; + + if (self[0]) { + self[0].parentNode.replaceChild(DomQuery(content)[0], self[0]); + } + + return self; + }, + + wrap: function(wrapper) { + wrapper = DomQuery(wrapper)[0]; + + return this.each(function() { + var self = this, newWrapper = wrapper.cloneNode(false); + self.parentNode.insertBefore(newWrapper, self); + newWrapper.appendChild(self); + }); + }, + + unwrap: function() { + return this.each(function() { + var self = this, node = self.firstChild, currentNode; + + while (node) { + currentNode = node; + node = node.nextSibling; + self.parentNode.insertBefore(currentNode, self); + } + }); + }, + + clone: function() { + var result = []; + + this.each(function() { + result.push(this.cloneNode(true)); + }); + + return DomQuery(result); + }, + + find: function(selector) { + var i, l, ret = []; + + for (i = 0, l = this.length; i < l; i++) { + DomQuery.find(selector, this[i], ret); + } + + return DomQuery(ret); + }, + + push: push, + sort: [].sort, + splice: [].splice + }; + + // Static members + extend(DomQuery, { + extend: extend, + toArray: toArray, + inArray: inArray, + isArray: isArray, + each: each, + trim: trim, + makeMap: makeMap, + + // Sizzle + find: Sizzle, + expr: Sizzle.selectors, + unique: Sizzle.uniqueSort, + text: Sizzle.getText, + isXMLDoc: Sizzle.isXML, + contains: Sizzle.contains, + filter: function(expr, elems, not) { + if (not) { + expr = ":not(" + expr + ")"; + } + + if (elems.length === 1) { + elems = DomQuery.find.matchesSelector(elems[0], expr) ? [elems[0]] : []; + } else { + elems = DomQuery.find.matches(expr, elems); + } + + return elems; + } + }); + + function dir(el, prop, until) { + var matched = [], cur = el[prop]; + + while (cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !DomQuery(cur).is(until))) { + if (cur.nodeType === 1) { + matched.push(cur); + } + + cur = cur[prop]; + } + + return matched; + } + + function sibling(n, el, siblingName, nodeType) { + var r = []; + + for(; n; n = n[siblingName]) { + if ((!nodeType || n.nodeType === nodeType) && n !== el) { + r.push(n); + } + } + + return r; + } + + each({ + parent: function(node) { + var parent = node.parentNode; + + return parent && parent.nodeType !== 11 ? parent : null; + }, + + parents: function(node) { + return dir(node, "parentNode"); + }, + + parentsUntil: function(node, until) { + return dir(node, "parentNode", until); + }, + + next: function(node) { + return sibling(node, 'nextSibling', 1); + }, + + prev: function(node) { + return sibling(node, 'previousSibling', 1); + }, + + nextNodes: function(node) { + return sibling(node, 'nextSibling'); + }, + + prevNodes: function(node) { + return sibling(node, 'previousSibling'); + }, + + children: function(node) { + return sibling(node.firstChild, 'nextSibling', 1); + }, + + contents: function(node) { + return toArray((node.nodeName === "iframe" ? node.contentDocument || node.contentWindow.document : node).childNodes); + } + }, function(name, fn){ + DomQuery.fn[name] = function(selector) { + var self = this, result; + + if (self.length > 1) { + throw new Error("DomQuery only supports traverse functions on a single node."); + } + + if (self[0]) { + result = fn(self[0], selector); + } + + result = DomQuery(result); + + if (selector && name !== "parentsUntil") { + return result.filter(selector); + } + + return result; + }; + }); + + DomQuery.fn.filter = function(selector) { + return DomQuery.filter(selector); + }; + + DomQuery.fn.is = function(selector) { + return !!selector && this.filter(selector).length > 0; + }; + + DomQuery.fn.init.prototype = DomQuery.fn; + + return DomQuery; +}); + +// Included from: js/tinymce/classes/html/Styles.js + +/** + * Styles.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class is used to parse CSS styles it also compresses styles to reduce the output size. + * + * @example + * var Styles = new tinymce.html.Styles({ + * url_converter: function(url) { + * return url; + * } + * }); + * + * styles = Styles.parse('border: 1px solid red'); + * styles.color = 'red'; + * + * console.log(new tinymce.html.StyleSerializer().serialize(styles)); + * + * @class tinymce.html.Styles + * @version 3.4 + */ +define("tinymce/html/Styles", [], function() { + return function(settings, schema) { + /*jshint maxlen:255 */ + /*eslint max-len:0 */ + var rgbRegExp = /rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi, + urlOrStrRegExp = /(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi, + styleRegExp = /\s*([^:]+):\s*([^;]+);?/g, + trimRightRegExp = /\s+$/, + undef, i, encodingLookup = {}, encodingItems, invisibleChar = '\uFEFF'; + + settings = settings || {}; + + encodingItems = ('\\" \\\' \\; \\: ; : ' + invisibleChar).split(' '); + for (i = 0; i < encodingItems.length; i++) { + encodingLookup[encodingItems[i]] = invisibleChar + i; + encodingLookup[invisibleChar + i] = encodingItems[i]; + } + + function toHex(match, r, g, b) { + function hex(val) { + val = parseInt(val, 10).toString(16); + + return val.length > 1 ? val : '0' + val; // 0 -> 00 + } + + return '#' + hex(r) + hex(g) + hex(b); + } + + return { + /** + * Parses the specified RGB color value and returns a hex version of that color. + * + * @method toHex + * @param {String} color RGB string value like rgb(1,2,3) + * @return {String} Hex version of that RGB value like #FF00FF. + */ + toHex: function(color) { + return color.replace(rgbRegExp, toHex); + }, + + /** + * Parses the specified style value into an object collection. This parser will also + * merge and remove any redundant items that browsers might have added. It will also convert non hex + * colors to hex values. Urls inside the styles will also be converted to absolute/relative based on settings. + * + * @method parse + * @param {String} css Style value to parse for example: border:1px solid red;. + * @return {Object} Object representation of that style like {border: '1px solid red'} + */ + parse: function(css) { + var styles = {}, matches, name, value, isEncoded, urlConverter = settings.url_converter; + var urlConverterScope = settings.url_converter_scope || this; + + function compress(prefix, suffix, noJoin) { + var top, right, bottom, left; + + top = styles[prefix + '-top' + suffix]; + if (!top) { + return; + } + + right = styles[prefix + '-right' + suffix]; + if (!right) { + return; + } + + bottom = styles[prefix + '-bottom' + suffix]; + if (!bottom) { + return; + } + + left = styles[prefix + '-left' + suffix]; + if (!left) { + return; + } + + var box = [top, right, bottom, left]; + i = box.length - 1; + while (i--) { + if (box[i] !== box[i + 1]) { + break; + } + } + + if (i > -1 && noJoin) { + return; + } + + styles[prefix + suffix] = i == -1 ? box[0] : box.join(' '); + delete styles[prefix + '-top' + suffix]; + delete styles[prefix + '-right' + suffix]; + delete styles[prefix + '-bottom' + suffix]; + delete styles[prefix + '-left' + suffix]; + } + + /** + * Checks if the specific style can be compressed in other words if all border-width are equal. + */ + function canCompress(key) { + var value = styles[key], i; + + if (!value) { + return; + } + + value = value.split(' '); + i = value.length; + while (i--) { + if (value[i] !== value[0]) { + return false; + } + } + + styles[key] = value[0]; + + return true; + } + + /** + * Compresses multiple styles into one style. + */ + function compress2(target, a, b, c) { + if (!canCompress(a)) { + return; + } + + if (!canCompress(b)) { + return; + } + + if (!canCompress(c)) { + return; + } + + // Compress + styles[target] = styles[a] + ' ' + styles[b] + ' ' + styles[c]; + delete styles[a]; + delete styles[b]; + delete styles[c]; + } + + // Encodes the specified string by replacing all \" \' ; : with _ + function encode(str) { + isEncoded = true; + + return encodingLookup[str]; + } + + // Decodes the specified string by replacing all _ with it's original value \" \' etc + // It will also decode the \" \' if keep_slashes is set to fale or omitted + function decode(str, keep_slashes) { + if (isEncoded) { + str = str.replace(/\uFEFF[0-9]/g, function(str) { + return encodingLookup[str]; + }); + } + + if (!keep_slashes) { + str = str.replace(/\\([\'\";:])/g, "$1"); + } + + return str; + } + + function processUrl(match, url, url2, url3, str, str2) { + str = str || str2; + + if (str) { + str = decode(str); + + // Force strings into single quote format + return "'" + str.replace(/\'/g, "\\'") + "'"; + } + + url = decode(url || url2 || url3); + + if (!settings.allow_script_urls && /(java|vb)script:/i.test(url.replace(/[\s\r\n]+/, ''))) { + return ""; + } + + // Convert the URL to relative/absolute depending on config + if (urlConverter) { + url = urlConverter.call(urlConverterScope, url, 'style'); + } + + // Output new URL format + return "url('" + url.replace(/\'/g, "\\'") + "')"; + } + + if (css) { + css = css.replace(/[\u0000-\u001F]/g, ''); + + // Encode \" \' % and ; and : inside strings so they don't interfere with the style parsing + css = css.replace(/\\[\"\';:\uFEFF]/g, encode).replace(/\"[^\"]+\"|\'[^\']+\'/g, function(str) { + return str.replace(/[;:]/g, encode); + }); + + // Parse styles + while ((matches = styleRegExp.exec(css))) { + name = matches[1].replace(trimRightRegExp, '').toLowerCase(); + value = matches[2].replace(trimRightRegExp, ''); + + if (name && value.length > 0) { + if (!settings.allow_script_urls && (name == "behavior" || /expression\s*\(/.test(value))) { + continue; + } + + // Opera will produce 700 instead of bold in their style values + if (name === 'font-weight' && value === '700') { + value = 'bold'; + } else if (name === 'color' || name === 'background-color') { // Lowercase colors like RED + value = value.toLowerCase(); + } + + // Convert RGB colors to HEX + value = value.replace(rgbRegExp, toHex); + + // Convert URLs and force them into url('value') format + value = value.replace(urlOrStrRegExp, processUrl); + styles[name] = isEncoded ? decode(value, true) : value; + } + + styleRegExp.lastIndex = matches.index + matches[0].length; + } + // Compress the styles to reduce it's size for example IE will expand styles + compress("border", "", true); + compress("border", "-width"); + compress("border", "-color"); + compress("border", "-style"); + compress("padding", ""); + compress("margin", ""); + compress2('border', 'border-width', 'border-style', 'border-color'); + + // Remove pointless border, IE produces these + if (styles.border === 'medium none') { + delete styles.border; + } + + // IE 11 will produce a border-image: none when getting the style attribute from

    + // So lets asume it shouldn't be there + if (styles['border-image'] === 'none') { + delete styles['border-image']; + } + } + + return styles; + }, + + /** + * Serializes the specified style object into a string. + * + * @method serialize + * @param {Object} styles Object to serialize as string for example: {border: '1px solid red'} + * @param {String} element_name Optional element name, if specified only the styles that matches the schema will be serialized. + * @return {String} String representation of the style object for example: border: 1px solid red. + */ + serialize: function(styles, element_name) { + var css = '', name, value; + + function serializeStyles(name) { + var styleList, i, l, value; + + styleList = schema.styles[name]; + if (styleList) { + for (i = 0, l = styleList.length; i < l; i++) { + name = styleList[i]; + value = styles[name]; + + if (value !== undef && value.length > 0) { + css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';'; + } + } + } + } + + // Serialize styles according to schema + if (element_name && schema && schema.styles) { + // Serialize global styles and element specific styles + serializeStyles('*'); + serializeStyles(element_name); + } else { + // Output the styles in the order they are inside the object + for (name in styles) { + value = styles[name]; + + if (value !== undef && value.length > 0) { + css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';'; + } + } + } + + return css; + } + }; + }; +}); + +// Included from: js/tinymce/classes/dom/TreeWalker.js + +/** + * TreeWalker.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * TreeWalker class enables you to walk the DOM in a linear manner. + * + * @class tinymce.dom.TreeWalker + */ +define("tinymce/dom/TreeWalker", [], function() { + return function(start_node, root_node) { + var node = start_node; + + function findSibling(node, start_name, sibling_name, shallow) { + var sibling, parent; + + if (node) { + // Walk into nodes if it has a start + if (!shallow && node[start_name]) { + return node[start_name]; + } + + // Return the sibling if it has one + if (node != root_node) { + sibling = node[sibling_name]; + if (sibling) { + return sibling; + } + + // Walk up the parents to look for siblings + for (parent = node.parentNode; parent && parent != root_node; parent = parent.parentNode) { + sibling = parent[sibling_name]; + if (sibling) { + return sibling; + } + } + } + } + } + + /** + * Returns the current node. + * + * @method current + * @return {Node} Current node where the walker is. + */ + this.current = function() { + return node; + }; + + /** + * Walks to the next node in tree. + * + * @method next + * @return {Node} Current node where the walker is after moving to the next node. + */ + this.next = function(shallow) { + node = findSibling(node, 'firstChild', 'nextSibling', shallow); + return node; + }; + + /** + * Walks to the previous node in tree. + * + * @method prev + * @return {Node} Current node where the walker is after moving to the previous node. + */ + this.prev = function(shallow) { + node = findSibling(node, 'lastChild', 'previousSibling', shallow); + return node; + }; + }; +}); + +// Included from: js/tinymce/classes/util/Tools.js + +/** + * Tools.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class contains various utlity functions. These are also exposed + * directly on the tinymce namespace. + * + * @class tinymce.util.Tools + */ +define("tinymce/util/Tools", [], function() { + /** + * Removes whitespace from the beginning and end of a string. + * + * @method trim + * @param {String} s String to remove whitespace from. + * @return {String} New string with removed whitespace. + */ + var whiteSpaceRegExp = /^\s*|\s*$/g; + + function trim(str) { + return (str === null || str === undefined) ? '' : ("" + str).replace(whiteSpaceRegExp, ''); + } + + /** + * Returns true/false if the object is an array or not. + * + * @method isArray + * @param {Object} obj Object to check. + * @return {boolean} true/false state if the object is an array or not. + */ + var isArray = Array.isArray || function(obj) { + return Object.prototype.toString.call(obj) === "[object Array]"; + }; + + /** + * Checks if a object is of a specific type for example an array. + * + * @method is + * @param {Object} o Object to check type of. + * @param {string} t Optional type to check for. + * @return {Boolean} true/false if the object is of the specified type. + */ + function is(o, t) { + if (!t) { + return o !== undefined; + } + + if (t == 'array' && isArray(o)) { + return true; + } + + return typeof(o) == t; + } + + /** + * Converts the specified object into a real JavaScript array. + * + * @method toArray + * @param {Object} obj Object to convert into array. + * @return {Array} Array object based in input. + */ + function toArray(obj) { + var array = [], i, l; + + for (i = 0, l = obj.length; i < l; i++) { + array[i] = obj[i]; + } + + return array; + } + + /** + * Makes a name/object map out of an array with names. + * + * @method makeMap + * @param {Array/String} items Items to make map out of. + * @param {String} delim Optional delimiter to split string by. + * @param {Object} map Optional map to add items to. + * @return {Object} Name/value map of items. + */ + function makeMap(items, delim, map) { + var i; + + items = items || []; + delim = delim || ','; + + if (typeof(items) == "string") { + items = items.split(delim); + } + + map = map || {}; + + i = items.length; + while (i--) { + map[items[i]] = {}; + } + + return map; + } + + /** + * Performs an iteration of all items in a collection such as an object or array. This method will execure the + * callback function for each item in the collection, if the callback returns false the iteration will terminate. + * The callback has the following format: cb(value, key_or_index). + * + * @method each + * @param {Object} o Collection to iterate. + * @param {function} cb Callback function to execute for each item. + * @param {Object} s Optional scope to execute the callback in. + * @example + * // Iterate an array + * tinymce.each([1,2,3], function(v, i) { + * console.debug("Value: " + v + ", Index: " + i); + * }); + * + * // Iterate an object + * tinymce.each({a: 1, b: 2, c: 3], function(v, k) { + * console.debug("Value: " + v + ", Key: " + k); + * }); + */ + function each(o, cb, s) { + var n, l; + + if (!o) { + return 0; + } + + s = s || o; + + if (o.length !== undefined) { + // Indexed arrays, needed for Safari + for (n = 0, l = o.length; n < l; n++) { + if (cb.call(s, o[n], n, o) === false) { + return 0; + } + } + } else { + // Hashtables + for (n in o) { + if (o.hasOwnProperty(n)) { + if (cb.call(s, o[n], n, o) === false) { + return 0; + } + } + } + } + + return 1; + } + + /** + * Creates a new array by the return value of each iteration function call. This enables you to convert + * one array list into another. + * + * @method map + * @param {Array} a Array of items to iterate. + * @param {function} f Function to call for each item. It's return value will be the new value. + * @return {Array} Array with new values based on function return values. + */ + function map(a, f) { + var o = []; + + each(a, function(v) { + o.push(f(v)); + }); + + return o; + } + + /** + * Filters out items from the input array by calling the specified function for each item. + * If the function returns false the item will be excluded if it returns true it will be included. + * + * @method grep + * @param {Array} a Array of items to loop though. + * @param {function} f Function to call for each item. Include/exclude depends on it's return value. + * @return {Array} New array with values imported and filtered based in input. + * @example + * // Filter out some items, this will return an array with 4 and 5 + * var items = tinymce.grep([1,2,3,4,5], function(v) {return v > 3;}); + */ + function grep(a, f) { + var o = []; + + each(a, function(v) { + if (!f || f(v)) { + o.push(v); + } + }); + + return o; + } + + /** + * Creates a class, subclass or static singleton. + * More details on this method can be found in the Wiki. + * + * @method create + * @param {String} s Class name, inheritage and prefix. + * @param {Object} p Collection of methods to add to the class. + * @param {Object} root Optional root object defaults to the global window object. + * @example + * // Creates a basic class + * tinymce.create('tinymce.somepackage.SomeClass', { + * SomeClass: function() { + * // Class constructor + * }, + * + * method: function() { + * // Some method + * } + * }); + * + * // Creates a basic subclass class + * tinymce.create('tinymce.somepackage.SomeSubClass:tinymce.somepackage.SomeClass', { + * SomeSubClass: function() { + * // Class constructor + * this.parent(); // Call parent constructor + * }, + * + * method: function() { + * // Some method + * this.parent(); // Call parent method + * }, + * + * 'static': { + * staticMethod: function() { + * // Static method + * } + * } + * }); + * + * // Creates a singleton/static class + * tinymce.create('static tinymce.somepackage.SomeSingletonClass', { + * method: function() { + * // Some method + * } + * }); + */ + function create(s, p, root) { + var self = this, sp, ns, cn, scn, c, de = 0; + + // Parse : : + s = /^((static) )?([\w.]+)(:([\w.]+))?/.exec(s); + cn = s[3].match(/(^|\.)(\w+)$/i)[2]; // Class name + + // Create namespace for new class + ns = self.createNS(s[3].replace(/\.\w+$/, ''), root); + + // Class already exists + if (ns[cn]) { + return; + } + + // Make pure static class + if (s[2] == 'static') { + ns[cn] = p; + + if (this.onCreate) { + this.onCreate(s[2], s[3], ns[cn]); + } + + return; + } + + // Create default constructor + if (!p[cn]) { + p[cn] = function() {}; + de = 1; + } + + // Add constructor and methods + ns[cn] = p[cn]; + self.extend(ns[cn].prototype, p); + + // Extend + if (s[5]) { + sp = self.resolve(s[5]).prototype; + scn = s[5].match(/\.(\w+)$/i)[1]; // Class name + + // Extend constructor + c = ns[cn]; + if (de) { + // Add passthrough constructor + ns[cn] = function() { + return sp[scn].apply(this, arguments); + }; + } else { + // Add inherit constructor + ns[cn] = function() { + this.parent = sp[scn]; + return c.apply(this, arguments); + }; + } + ns[cn].prototype[cn] = ns[cn]; + + // Add super methods + self.each(sp, function(f, n) { + ns[cn].prototype[n] = sp[n]; + }); + + // Add overridden methods + self.each(p, function(f, n) { + // Extend methods if needed + if (sp[n]) { + ns[cn].prototype[n] = function() { + this.parent = sp[n]; + return f.apply(this, arguments); + }; + } else { + if (n != cn) { + ns[cn].prototype[n] = f; + } + } + }); + } + + // Add static methods + /*jshint sub:true*/ + self.each(p['static'], function(f, n) { + ns[cn][n] = f; + }); + } + + /** + * Returns the index of a value in an array, this method will return -1 if the item wasn't found. + * + * @method inArray + * @param {Array} a Array/Object to search for value in. + * @param {Object} v Value to check for inside the array. + * @return {Number/String} Index of item inside the array inside an object. Or -1 if it wasn't found. + * @example + * // Get index of value in array this will alert 1 since 2 is at that index + * alert(tinymce.inArray([1,2,3], 2)); + */ + function inArray(a, v) { + var i, l; + + if (a) { + for (i = 0, l = a.length; i < l; i++) { + if (a[i] === v) { + return i; + } + } + } + + return -1; + } + + function extend(obj, ext) { + var i, l, name, args = arguments, value; + + for (i = 1, l = args.length; i < l; i++) { + ext = args[i]; + for (name in ext) { + if (ext.hasOwnProperty(name)) { + value = ext[name]; + + if (value !== undefined) { + obj[name] = value; + } + } + } + } + + return obj; + } + + /** + * Executed the specified function for each item in a object tree. + * + * @method walk + * @param {Object} o Object tree to walk though. + * @param {function} f Function to call for each item. + * @param {String} n Optional name of collection inside the objects to walk for example childNodes. + * @param {String} s Optional scope to execute the function in. + */ + function walk(o, f, n, s) { + s = s || this; + + if (o) { + if (n) { + o = o[n]; + } + + each(o, function(o, i) { + if (f.call(s, o, i, n) === false) { + return false; + } + + walk(o, f, n, s); + }); + } + } + + /** + * Creates a namespace on a specific object. + * + * @method createNS + * @param {String} n Namespace to create for example a.b.c.d. + * @param {Object} o Optional object to add namespace to, defaults to window. + * @return {Object} New namespace object the last item in path. + * @example + * // Create some namespace + * tinymce.createNS('tinymce.somepackage.subpackage'); + * + * // Add a singleton + * var tinymce.somepackage.subpackage.SomeSingleton = { + * method: function() { + * // Some method + * } + * }; + */ + function createNS(n, o) { + var i, v; + + o = o || window; + + n = n.split('.'); + for (i = 0; i < n.length; i++) { + v = n[i]; + + if (!o[v]) { + o[v] = {}; + } + + o = o[v]; + } + + return o; + } + + /** + * Resolves a string and returns the object from a specific structure. + * + * @method resolve + * @param {String} n Path to resolve for example a.b.c.d. + * @param {Object} o Optional object to search though, defaults to window. + * @return {Object} Last object in path or null if it couldn't be resolved. + * @example + * // Resolve a path into an object reference + * var obj = tinymce.resolve('a.b.c.d'); + */ + function resolve(n, o) { + var i, l; + + o = o || window; + + n = n.split('.'); + for (i = 0, l = n.length; i < l; i++) { + o = o[n[i]]; + + if (!o) { + break; + } + } + + return o; + } + + /** + * Splits a string but removes the whitespace before and after each value. + * + * @method explode + * @param {string} s String to split. + * @param {string} d Delimiter to split by. + * @example + * // Split a string into an array with a,b,c + * var arr = tinymce.explode('a, b, c'); + */ + function explode(s, d) { + if (!s || is(s, 'array')) { + return s; + } + + return map(s.split(d || ','), trim); + } + + return { + trim: trim, + isArray: isArray, + is: is, + toArray: toArray, + makeMap: makeMap, + each: each, + map: map, + grep: grep, + inArray: inArray, + extend: extend, + create: create, + walk: walk, + createNS: createNS, + resolve: resolve, + explode: explode + }; +}); + +// Included from: js/tinymce/classes/dom/Range.js + +/** + * Range.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +define("tinymce/dom/Range", [ + "tinymce/util/Tools" +], function(Tools) { + // Range constructor + function Range(dom) { + var self = this, + doc = dom.doc, + EXTRACT = 0, + CLONE = 1, + DELETE = 2, + TRUE = true, + FALSE = false, + START_OFFSET = 'startOffset', + START_CONTAINER = 'startContainer', + END_CONTAINER = 'endContainer', + END_OFFSET = 'endOffset', + extend = Tools.extend, + nodeIndex = dom.nodeIndex; + + function createDocumentFragment() { + return doc.createDocumentFragment(); + } + + function setStart(n, o) { + _setEndPoint(TRUE, n, o); + } + + function setEnd(n, o) { + _setEndPoint(FALSE, n, o); + } + + function setStartBefore(n) { + setStart(n.parentNode, nodeIndex(n)); + } + + function setStartAfter(n) { + setStart(n.parentNode, nodeIndex(n) + 1); + } + + function setEndBefore(n) { + setEnd(n.parentNode, nodeIndex(n)); + } + + function setEndAfter(n) { + setEnd(n.parentNode, nodeIndex(n) + 1); + } + + function collapse(ts) { + if (ts) { + self[END_CONTAINER] = self[START_CONTAINER]; + self[END_OFFSET] = self[START_OFFSET]; + } else { + self[START_CONTAINER] = self[END_CONTAINER]; + self[START_OFFSET] = self[END_OFFSET]; + } + + self.collapsed = TRUE; + } + + function selectNode(n) { + setStartBefore(n); + setEndAfter(n); + } + + function selectNodeContents(n) { + setStart(n, 0); + setEnd(n, n.nodeType === 1 ? n.childNodes.length : n.nodeValue.length); + } + + function compareBoundaryPoints(h, r) { + var sc = self[START_CONTAINER], so = self[START_OFFSET], ec = self[END_CONTAINER], eo = self[END_OFFSET], + rsc = r.startContainer, rso = r.startOffset, rec = r.endContainer, reo = r.endOffset; + + // Check START_TO_START + if (h === 0) { + return _compareBoundaryPoints(sc, so, rsc, rso); + } + + // Check START_TO_END + if (h === 1) { + return _compareBoundaryPoints(ec, eo, rsc, rso); + } + + // Check END_TO_END + if (h === 2) { + return _compareBoundaryPoints(ec, eo, rec, reo); + } + + // Check END_TO_START + if (h === 3) { + return _compareBoundaryPoints(sc, so, rec, reo); + } + } + + function deleteContents() { + _traverse(DELETE); + } + + function extractContents() { + return _traverse(EXTRACT); + } + + function cloneContents() { + return _traverse(CLONE); + } + + function insertNode(n) { + var startContainer = this[START_CONTAINER], + startOffset = this[START_OFFSET], nn, o; + + // Node is TEXT_NODE or CDATA + if ((startContainer.nodeType === 3 || startContainer.nodeType === 4) && startContainer.nodeValue) { + if (!startOffset) { + // At the start of text + startContainer.parentNode.insertBefore(n, startContainer); + } else if (startOffset >= startContainer.nodeValue.length) { + // At the end of text + dom.insertAfter(n, startContainer); + } else { + // Middle, need to split + nn = startContainer.splitText(startOffset); + startContainer.parentNode.insertBefore(n, nn); + } + } else { + // Insert element node + if (startContainer.childNodes.length > 0) { + o = startContainer.childNodes[startOffset]; + } + + if (o) { + startContainer.insertBefore(n, o); + } else { + if (startContainer.nodeType == 3) { + dom.insertAfter(n, startContainer); + } else { + startContainer.appendChild(n); + } + } + } + } + + function surroundContents(n) { + var f = self.extractContents(); + + self.insertNode(n); + n.appendChild(f); + self.selectNode(n); + } + + function cloneRange() { + return extend(new Range(dom), { + startContainer: self[START_CONTAINER], + startOffset: self[START_OFFSET], + endContainer: self[END_CONTAINER], + endOffset: self[END_OFFSET], + collapsed: self.collapsed, + commonAncestorContainer: self.commonAncestorContainer + }); + } + + // Private methods + + function _getSelectedNode(container, offset) { + var child; + + if (container.nodeType == 3 /* TEXT_NODE */) { + return container; + } + + if (offset < 0) { + return container; + } + + child = container.firstChild; + while (child && offset > 0) { + --offset; + child = child.nextSibling; + } + + if (child) { + return child; + } + + return container; + } + + function _isCollapsed() { + return (self[START_CONTAINER] == self[END_CONTAINER] && self[START_OFFSET] == self[END_OFFSET]); + } + + function _compareBoundaryPoints(containerA, offsetA, containerB, offsetB) { + var c, offsetC, n, cmnRoot, childA, childB; + + // In the first case the boundary-points have the same container. A is before B + // if its offset is less than the offset of B, A is equal to B if its offset is + // equal to the offset of B, and A is after B if its offset is greater than the + // offset of B. + if (containerA == containerB) { + if (offsetA == offsetB) { + return 0; // equal + } + + if (offsetA < offsetB) { + return -1; // before + } + + return 1; // after + } + + // In the second case a child node C of the container of A is an ancestor + // container of B. In this case, A is before B if the offset of A is less than or + // equal to the index of the child node C and A is after B otherwise. + c = containerB; + while (c && c.parentNode != containerA) { + c = c.parentNode; + } + + if (c) { + offsetC = 0; + n = containerA.firstChild; + + while (n != c && offsetC < offsetA) { + offsetC++; + n = n.nextSibling; + } + + if (offsetA <= offsetC) { + return -1; // before + } + + return 1; // after + } + + // In the third case a child node C of the container of B is an ancestor container + // of A. In this case, A is before B if the index of the child node C is less than + // the offset of B and A is after B otherwise. + c = containerA; + while (c && c.parentNode != containerB) { + c = c.parentNode; + } + + if (c) { + offsetC = 0; + n = containerB.firstChild; + + while (n != c && offsetC < offsetB) { + offsetC++; + n = n.nextSibling; + } + + if (offsetC < offsetB) { + return -1; // before + } + + return 1; // after + } + + // In the fourth case, none of three other cases hold: the containers of A and B + // are siblings or descendants of sibling nodes. In this case, A is before B if + // the container of A is before the container of B in a pre-order traversal of the + // Ranges' context tree and A is after B otherwise. + cmnRoot = dom.findCommonAncestor(containerA, containerB); + childA = containerA; + + while (childA && childA.parentNode != cmnRoot) { + childA = childA.parentNode; + } + + if (!childA) { + childA = cmnRoot; + } + + childB = containerB; + while (childB && childB.parentNode != cmnRoot) { + childB = childB.parentNode; + } + + if (!childB) { + childB = cmnRoot; + } + + if (childA == childB) { + return 0; // equal + } + + n = cmnRoot.firstChild; + while (n) { + if (n == childA) { + return -1; // before + } + + if (n == childB) { + return 1; // after + } + + n = n.nextSibling; + } + } + + function _setEndPoint(st, n, o) { + var ec, sc; + + if (st) { + self[START_CONTAINER] = n; + self[START_OFFSET] = o; + } else { + self[END_CONTAINER] = n; + self[END_OFFSET] = o; + } + + // If one boundary-point of a Range is set to have a root container + // other than the current one for the Range, the Range is collapsed to + // the new position. This enforces the restriction that both boundary- + // points of a Range must have the same root container. + ec = self[END_CONTAINER]; + while (ec.parentNode) { + ec = ec.parentNode; + } + + sc = self[START_CONTAINER]; + while (sc.parentNode) { + sc = sc.parentNode; + } + + if (sc == ec) { + // The start position of a Range is guaranteed to never be after the + // end position. To enforce this restriction, if the start is set to + // be at a position after the end, the Range is collapsed to that + // position. + if (_compareBoundaryPoints(self[START_CONTAINER], self[START_OFFSET], self[END_CONTAINER], self[END_OFFSET]) > 0) { + self.collapse(st); + } + } else { + self.collapse(st); + } + + self.collapsed = _isCollapsed(); + self.commonAncestorContainer = dom.findCommonAncestor(self[START_CONTAINER], self[END_CONTAINER]); + } + + function _traverse(how) { + var c, endContainerDepth = 0, startContainerDepth = 0, p, depthDiff, startNode, endNode, sp, ep; + + if (self[START_CONTAINER] == self[END_CONTAINER]) { + return _traverseSameContainer(how); + } + + for (c = self[END_CONTAINER], p = c.parentNode; p; c = p, p = p.parentNode) { + if (p == self[START_CONTAINER]) { + return _traverseCommonStartContainer(c, how); + } + + ++endContainerDepth; + } + + for (c = self[START_CONTAINER], p = c.parentNode; p; c = p, p = p.parentNode) { + if (p == self[END_CONTAINER]) { + return _traverseCommonEndContainer(c, how); + } + + ++startContainerDepth; + } + + depthDiff = startContainerDepth - endContainerDepth; + + startNode = self[START_CONTAINER]; + while (depthDiff > 0) { + startNode = startNode.parentNode; + depthDiff--; + } + + endNode = self[END_CONTAINER]; + while (depthDiff < 0) { + endNode = endNode.parentNode; + depthDiff++; + } + + // ascend the ancestor hierarchy until we have a common parent. + for (sp = startNode.parentNode, ep = endNode.parentNode; sp != ep; sp = sp.parentNode, ep = ep.parentNode) { + startNode = sp; + endNode = ep; + } + + return _traverseCommonAncestors(startNode, endNode, how); + } + + function _traverseSameContainer(how) { + var frag, s, sub, n, cnt, sibling, xferNode, start, len; + + if (how != DELETE) { + frag = createDocumentFragment(); + } + + // If selection is empty, just return the fragment + if (self[START_OFFSET] == self[END_OFFSET]) { + return frag; + } + + // Text node needs special case handling + if (self[START_CONTAINER].nodeType == 3 /* TEXT_NODE */) { + // get the substring + s = self[START_CONTAINER].nodeValue; + sub = s.substring(self[START_OFFSET], self[END_OFFSET]); + + // set the original text node to its new value + if (how != CLONE) { + n = self[START_CONTAINER]; + start = self[START_OFFSET]; + len = self[END_OFFSET] - self[START_OFFSET]; + + if (start === 0 && len >= n.nodeValue.length - 1) { + n.parentNode.removeChild(n); + } else { + n.deleteData(start, len); + } + + // Nothing is partially selected, so collapse to start point + self.collapse(TRUE); + } + + if (how == DELETE) { + return; + } + + if (sub.length > 0) { + frag.appendChild(doc.createTextNode(sub)); + } + + return frag; + } + + // Copy nodes between the start/end offsets. + n = _getSelectedNode(self[START_CONTAINER], self[START_OFFSET]); + cnt = self[END_OFFSET] - self[START_OFFSET]; + + while (n && cnt > 0) { + sibling = n.nextSibling; + xferNode = _traverseFullySelected(n, how); + + if (frag) { + frag.appendChild(xferNode); + } + + --cnt; + n = sibling; + } + + // Nothing is partially selected, so collapse to start point + if (how != CLONE) { + self.collapse(TRUE); + } + + return frag; + } + + function _traverseCommonStartContainer(endAncestor, how) { + var frag, n, endIdx, cnt, sibling, xferNode; + + if (how != DELETE) { + frag = createDocumentFragment(); + } + + n = _traverseRightBoundary(endAncestor, how); + + if (frag) { + frag.appendChild(n); + } + + endIdx = nodeIndex(endAncestor); + cnt = endIdx - self[START_OFFSET]; + + if (cnt <= 0) { + // Collapse to just before the endAncestor, which + // is partially selected. + if (how != CLONE) { + self.setEndBefore(endAncestor); + self.collapse(FALSE); + } + + return frag; + } + + n = endAncestor.previousSibling; + while (cnt > 0) { + sibling = n.previousSibling; + xferNode = _traverseFullySelected(n, how); + + if (frag) { + frag.insertBefore(xferNode, frag.firstChild); + } + + --cnt; + n = sibling; + } + + // Collapse to just before the endAncestor, which + // is partially selected. + if (how != CLONE) { + self.setEndBefore(endAncestor); + self.collapse(FALSE); + } + + return frag; + } + + function _traverseCommonEndContainer(startAncestor, how) { + var frag, startIdx, n, cnt, sibling, xferNode; + + if (how != DELETE) { + frag = createDocumentFragment(); + } + + n = _traverseLeftBoundary(startAncestor, how); + if (frag) { + frag.appendChild(n); + } + + startIdx = nodeIndex(startAncestor); + ++startIdx; // Because we already traversed it + + cnt = self[END_OFFSET] - startIdx; + n = startAncestor.nextSibling; + while (n && cnt > 0) { + sibling = n.nextSibling; + xferNode = _traverseFullySelected(n, how); + + if (frag) { + frag.appendChild(xferNode); + } + + --cnt; + n = sibling; + } + + if (how != CLONE) { + self.setStartAfter(startAncestor); + self.collapse(TRUE); + } + + return frag; + } + + function _traverseCommonAncestors(startAncestor, endAncestor, how) { + var n, frag, startOffset, endOffset, cnt, sibling, nextSibling; + + if (how != DELETE) { + frag = createDocumentFragment(); + } + + n = _traverseLeftBoundary(startAncestor, how); + if (frag) { + frag.appendChild(n); + } + + startOffset = nodeIndex(startAncestor); + endOffset = nodeIndex(endAncestor); + ++startOffset; + + cnt = endOffset - startOffset; + sibling = startAncestor.nextSibling; + + while (cnt > 0) { + nextSibling = sibling.nextSibling; + n = _traverseFullySelected(sibling, how); + + if (frag) { + frag.appendChild(n); + } + + sibling = nextSibling; + --cnt; + } + + n = _traverseRightBoundary(endAncestor, how); + + if (frag) { + frag.appendChild(n); + } + + if (how != CLONE) { + self.setStartAfter(startAncestor); + self.collapse(TRUE); + } + + return frag; + } + + function _traverseRightBoundary(root, how) { + var next = _getSelectedNode(self[END_CONTAINER], self[END_OFFSET] - 1), parent, clonedParent; + var prevSibling, clonedChild, clonedGrandParent, isFullySelected = next != self[END_CONTAINER]; + + if (next == root) { + return _traverseNode(next, isFullySelected, FALSE, how); + } + + parent = next.parentNode; + clonedParent = _traverseNode(parent, FALSE, FALSE, how); + + while (parent) { + while (next) { + prevSibling = next.previousSibling; + clonedChild = _traverseNode(next, isFullySelected, FALSE, how); + + if (how != DELETE) { + clonedParent.insertBefore(clonedChild, clonedParent.firstChild); + } + + isFullySelected = TRUE; + next = prevSibling; + } + + if (parent == root) { + return clonedParent; + } + + next = parent.previousSibling; + parent = parent.parentNode; + + clonedGrandParent = _traverseNode(parent, FALSE, FALSE, how); + + if (how != DELETE) { + clonedGrandParent.appendChild(clonedParent); + } + + clonedParent = clonedGrandParent; + } + } + + function _traverseLeftBoundary(root, how) { + var next = _getSelectedNode(self[START_CONTAINER], self[START_OFFSET]), isFullySelected = next != self[START_CONTAINER]; + var parent, clonedParent, nextSibling, clonedChild, clonedGrandParent; + + if (next == root) { + return _traverseNode(next, isFullySelected, TRUE, how); + } + + parent = next.parentNode; + clonedParent = _traverseNode(parent, FALSE, TRUE, how); + + while (parent) { + while (next) { + nextSibling = next.nextSibling; + clonedChild = _traverseNode(next, isFullySelected, TRUE, how); + + if (how != DELETE) { + clonedParent.appendChild(clonedChild); + } + + isFullySelected = TRUE; + next = nextSibling; + } + + if (parent == root) { + return clonedParent; + } + + next = parent.nextSibling; + parent = parent.parentNode; + + clonedGrandParent = _traverseNode(parent, FALSE, TRUE, how); + + if (how != DELETE) { + clonedGrandParent.appendChild(clonedParent); + } + + clonedParent = clonedGrandParent; + } + } + + function _traverseNode(n, isFullySelected, isLeft, how) { + var txtValue, newNodeValue, oldNodeValue, offset, newNode; + + if (isFullySelected) { + return _traverseFullySelected(n, how); + } + + if (n.nodeType == 3 /* TEXT_NODE */) { + txtValue = n.nodeValue; + + if (isLeft) { + offset = self[START_OFFSET]; + newNodeValue = txtValue.substring(offset); + oldNodeValue = txtValue.substring(0, offset); + } else { + offset = self[END_OFFSET]; + newNodeValue = txtValue.substring(0, offset); + oldNodeValue = txtValue.substring(offset); + } + + if (how != CLONE) { + n.nodeValue = oldNodeValue; + } + + if (how == DELETE) { + return; + } + + newNode = dom.clone(n, FALSE); + newNode.nodeValue = newNodeValue; + + return newNode; + } + + if (how == DELETE) { + return; + } + + return dom.clone(n, FALSE); + } + + function _traverseFullySelected(n, how) { + if (how != DELETE) { + return how == CLONE ? dom.clone(n, TRUE) : n; + } + + n.parentNode.removeChild(n); + } + + function toStringIE() { + return dom.create('body', null, cloneContents()).outerText; + } + + extend(self, { + // Inital states + startContainer: doc, + startOffset: 0, + endContainer: doc, + endOffset: 0, + collapsed: TRUE, + commonAncestorContainer: doc, + + // Range constants + START_TO_START: 0, + START_TO_END: 1, + END_TO_END: 2, + END_TO_START: 3, + + // Public methods + setStart: setStart, + setEnd: setEnd, + setStartBefore: setStartBefore, + setStartAfter: setStartAfter, + setEndBefore: setEndBefore, + setEndAfter: setEndAfter, + collapse: collapse, + selectNode: selectNode, + selectNodeContents: selectNodeContents, + compareBoundaryPoints: compareBoundaryPoints, + deleteContents: deleteContents, + extractContents: extractContents, + cloneContents: cloneContents, + insertNode: insertNode, + surroundContents: surroundContents, + cloneRange: cloneRange, + toStringIE: toStringIE + }); + + return self; + } + + // Older IE versions doesn't let you override toString by it's constructor so we have to stick it in the prototype + Range.prototype.toString = function() { + return this.toStringIE(); + }; + + return Range; +}); + +// Included from: js/tinymce/classes/html/Entities.js + +/** + * Entities.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*jshint bitwise:false */ +/*eslint no-bitwise:0 */ + +/** + * Entity encoder class. + * + * @class tinymce.html.Entities + * @static + * @version 3.4 + */ +define("tinymce/html/Entities", [ + "tinymce/util/Tools" +], function(Tools) { + var makeMap = Tools.makeMap; + + var namedEntities, baseEntities, reverseEntities, + attrsCharsRegExp = /[&<>\"\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g, + textCharsRegExp = /[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g, + rawCharsRegExp = /[<>&\"\']/g, + entityRegExp = /&(#x|#)?([\w]+);/g, + asciiMap = { + 128: "\u20AC", 130: "\u201A", 131: "\u0192", 132: "\u201E", 133: "\u2026", 134: "\u2020", + 135: "\u2021", 136: "\u02C6", 137: "\u2030", 138: "\u0160", 139: "\u2039", 140: "\u0152", + 142: "\u017D", 145: "\u2018", 146: "\u2019", 147: "\u201C", 148: "\u201D", 149: "\u2022", + 150: "\u2013", 151: "\u2014", 152: "\u02DC", 153: "\u2122", 154: "\u0161", 155: "\u203A", + 156: "\u0153", 158: "\u017E", 159: "\u0178" + }; + + // Raw entities + baseEntities = { + '\"': '"', // Needs to be escaped since the YUI compressor would otherwise break the code + "'": ''', + '<': '<', + '>': '>', + '&': '&' + }; + + // Reverse lookup table for raw entities + reverseEntities = { + '<': '<', + '>': '>', + '&': '&', + '"': '"', + ''': "'" + }; + + // Decodes text by using the browser + function nativeDecode(text) { + var elm; + + elm = document.createElement("div"); + elm.innerHTML = text; + + return elm.textContent || elm.innerText || text; + } + + // Build a two way lookup table for the entities + function buildEntitiesLookup(items, radix) { + var i, chr, entity, lookup = {}; + + if (items) { + items = items.split(','); + radix = radix || 10; + + // Build entities lookup table + for (i = 0; i < items.length; i += 2) { + chr = String.fromCharCode(parseInt(items[i], radix)); + + // Only add non base entities + if (!baseEntities[chr]) { + entity = '&' + items[i + 1] + ';'; + lookup[chr] = entity; + lookup[entity] = chr; + } + } + + return lookup; + } + } + + // Unpack entities lookup where the numbers are in radix 32 to reduce the size + namedEntities = buildEntitiesLookup( + '50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,' + + '5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,' + + '5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,' + + '5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,' + + '68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,' + + '6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,' + + '6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,' + + '75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,' + + '7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,' + + '7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,' + + 'sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,' + + 'st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,' + + 't9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,' + + 'tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,' + + 'u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,' + + '81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,' + + '8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,' + + '8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,' + + '8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,' + + '8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,' + + 'nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,' + + 'rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,' + + 'Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,' + + '80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,' + + '811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro', 32); + + var Entities = { + /** + * Encodes the specified string using raw entities. This means only the required XML base entities will be endoded. + * + * @method encodeRaw + * @param {String} text Text to encode. + * @param {Boolean} attr Optional flag to specify if the text is attribute contents. + * @return {String} Entity encoded text. + */ + encodeRaw: function(text, attr) { + return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function(chr) { + return baseEntities[chr] || chr; + }); + }, + + /** + * Encoded the specified text with both the attributes and text entities. This function will produce larger text contents + * since it doesn't know if the context is within a attribute or text node. This was added for compatibility + * and is exposed as the DOMUtils.encode function. + * + * @method encodeAllRaw + * @param {String} text Text to encode. + * @return {String} Entity encoded text. + */ + encodeAllRaw: function(text) { + return ('' + text).replace(rawCharsRegExp, function(chr) { + return baseEntities[chr] || chr; + }); + }, + + /** + * Encodes the specified string using numeric entities. The core entities will be + * encoded as named ones but all non lower ascii characters will be encoded into numeric entities. + * + * @method encodeNumeric + * @param {String} text Text to encode. + * @param {Boolean} attr Optional flag to specify if the text is attribute contents. + * @return {String} Entity encoded text. + */ + encodeNumeric: function(text, attr) { + return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function(chr) { + // Multi byte sequence convert it to a single entity + if (chr.length > 1) { + return '&#' + (((chr.charCodeAt(0) - 0xD800) * 0x400) + (chr.charCodeAt(1) - 0xDC00) + 0x10000) + ';'; + } + + return baseEntities[chr] || '&#' + chr.charCodeAt(0) + ';'; + }); + }, + + /** + * Encodes the specified string using named entities. The core entities will be encoded + * as named ones but all non lower ascii characters will be encoded into named entities. + * + * @method encodeNamed + * @param {String} text Text to encode. + * @param {Boolean} attr Optional flag to specify if the text is attribute contents. + * @param {Object} entities Optional parameter with entities to use. + * @return {String} Entity encoded text. + */ + encodeNamed: function(text, attr, entities) { + entities = entities || namedEntities; + + return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function(chr) { + return baseEntities[chr] || entities[chr] || chr; + }); + }, + + /** + * Returns an encode function based on the name(s) and it's optional entities. + * + * @method getEncodeFunc + * @param {String} name Comma separated list of encoders for example named,numeric. + * @param {String} entities Optional parameter with entities to use instead of the built in set. + * @return {function} Encode function to be used. + */ + getEncodeFunc: function(name, entities) { + entities = buildEntitiesLookup(entities) || namedEntities; + + function encodeNamedAndNumeric(text, attr) { + return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function(chr) { + return baseEntities[chr] || entities[chr] || '&#' + chr.charCodeAt(0) + ';' || chr; + }); + } + + function encodeCustomNamed(text, attr) { + return Entities.encodeNamed(text, attr, entities); + } + + // Replace + with , to be compatible with previous TinyMCE versions + name = makeMap(name.replace(/\+/g, ',')); + + // Named and numeric encoder + if (name.named && name.numeric) { + return encodeNamedAndNumeric; + } + + // Named encoder + if (name.named) { + // Custom names + if (entities) { + return encodeCustomNamed; + } + + return Entities.encodeNamed; + } + + // Numeric + if (name.numeric) { + return Entities.encodeNumeric; + } + + // Raw encoder + return Entities.encodeRaw; + }, + + /** + * Decodes the specified string, this will replace entities with raw UTF characters. + * + * @method decode + * @param {String} text Text to entity decode. + * @return {String} Entity decoded string. + */ + decode: function(text) { + return text.replace(entityRegExp, function(all, numeric, value) { + if (numeric) { + value = parseInt(value, numeric.length === 2 ? 16 : 10); + + // Support upper UTF + if (value > 0xFFFF) { + value -= 0x10000; + + return String.fromCharCode(0xD800 + (value >> 10), 0xDC00 + (value & 0x3FF)); + } else { + return asciiMap[value] || String.fromCharCode(value); + } + } + + return reverseEntities[all] || namedEntities[all] || nativeDecode(all); + }); + } + }; + + return Entities; +}); + +// Included from: js/tinymce/classes/Env.js + +/** + * Env.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class contains various environment constants like browser versions etc. + * Normally you don't want to sniff specific browser versions but sometimes you have + * to when it's impossible to feature detect. So use this with care. + * + * @class tinymce.Env + * @static + */ +define("tinymce/Env", [], function() { + var nav = navigator, userAgent = nav.userAgent; + var opera, webkit, ie, ie11, gecko, mac, iDevice; + + opera = window.opera && window.opera.buildNumber; + webkit = /WebKit/.test(userAgent); + ie = !webkit && !opera && (/MSIE/gi).test(userAgent) && (/Explorer/gi).test(nav.appName); + ie = ie && /MSIE (\w+)\./.exec(userAgent)[1]; + ie11 = userAgent.indexOf('Trident/') != -1 && (userAgent.indexOf('rv:') != -1 || nav.appName.indexOf('Netscape') != -1) ? 11 : false; + ie = ie || ie11; + gecko = !webkit && !ie11 && /Gecko/.test(userAgent); + mac = userAgent.indexOf('Mac') != -1; + iDevice = /(iPad|iPhone)/.test(userAgent); + + // Is a iPad/iPhone and not on iOS5 sniff the WebKit version since older iOS WebKit versions + // says it has contentEditable support but there is no visible caret. + var contentEditable = !iDevice || userAgent.match(/AppleWebKit\/(\d*)/)[1] >= 534; + + return { + /** + * Constant that is true if the browser is Opera. + * + * @property opera + * @type Boolean + * @final + */ + opera: opera, + + /** + * Constant that is true if the browser is WebKit (Safari/Chrome). + * + * @property webKit + * @type Boolean + * @final + */ + webkit: webkit, + + /** + * Constant that is more than zero if the browser is IE. + * + * @property ie + * @type Boolean + * @final + */ + ie: ie, + + /** + * Constant that is true if the browser is Gecko. + * + * @property gecko + * @type Boolean + * @final + */ + gecko: gecko, + + /** + * Constant that is true if the os is Mac OS. + * + * @property mac + * @type Boolean + * @final + */ + mac: mac, + + /** + * Constant that is true if the os is iOS. + * + * @property iOS + * @type Boolean + * @final + */ + iOS: iDevice, + + /** + * Constant that is true if the browser supports editing. + * + * @property contentEditable + * @type Boolean + * @final + */ + contentEditable: contentEditable, + + /** + * Transparent image data url. + * + * @property transparentSrc + * @type Boolean + * @final + */ + transparentSrc: "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7", + + /** + * Returns true/false if the browser can or can't place the caret after a inline block like an image. + * + * @property noCaretAfter + * @type Boolean + * @final + */ + caretAfter: ie != 8, + + /** + * Constant that is true if the browser supports native DOM Ranges. IE 9+. + * + * @property range + * @type Boolean + */ + range: window.getSelection && "Range" in window, + + /** + * Returns the IE document mode for non IE browsers this will fake IE 10. + * + * @property documentMode + * @type Number + */ + documentMode: ie ? (document.documentMode || 7) : 10 + }; +}); + +// Included from: js/tinymce/classes/dom/StyleSheetLoader.js + +/** + * StyleSheetLoader.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class handles loading of external stylesheets and fires events when these are loaded. + * + * @class tinymce.dom.StyleSheetLoader + * @private + */ +define("tinymce/dom/StyleSheetLoader", [], function() { + "use strict"; + + return function(document, settings) { + var idCount = 0, loadedStates = {}, maxLoadTime; + + settings = settings || {}; + maxLoadTime = settings.maxLoadTime || 5000; + + function appendToHead(node) { + document.getElementsByTagName('head')[0].appendChild(node); + } + + /** + * Loads the specified css style sheet file and call the loadedCallback once it's finished loading. + * + * @method load + * @param {String} url Url to be loaded. + * @param {Function} loadedCallback Callback to be executed when loaded. + * @param {Function} errorCallback Callback to be executed when failed loading. + */ + function load(url, loadedCallback, errorCallback) { + var link, style, startTime, state; + + function passed() { + var callbacks = state.passed, i = callbacks.length; + + while (i--) { + callbacks[i](); + } + + state.status = 2; + state.passed = []; + state.failed = []; + } + + function failed() { + var callbacks = state.failed, i = callbacks.length; + + while (i--) { + callbacks[i](); + } + + state.status = 3; + state.passed = []; + state.failed = []; + } + + // Sniffs for older WebKit versions that have the link.onload but a broken one + function isOldWebKit() { + var webKitChunks = navigator.userAgent.match(/WebKit\/(\d*)/); + return !!(webKitChunks && webKitChunks[1] < 536); + } + + // Calls the waitCallback until the test returns true or the timeout occurs + function wait(testCallback, waitCallback) { + if (!testCallback()) { + // Wait for timeout + if ((new Date().getTime()) - startTime < maxLoadTime) { + window.setTimeout(waitCallback, 0); + } else { + failed(); + } + } + } + + // Workaround for WebKit that doesn't properly support the onload event for link elements + // Or WebKit that fires the onload event before the StyleSheet is added to the document + function waitForWebKitLinkLoaded() { + wait(function() { + var styleSheets = document.styleSheets, styleSheet, i = styleSheets.length, owner; + + while (i--) { + styleSheet = styleSheets[i]; + owner = styleSheet.ownerNode ? styleSheet.ownerNode : styleSheet.owningElement; + if (owner && owner.id === link.id) { + passed(); + return true; + } + } + }, waitForWebKitLinkLoaded); + } + + // Workaround for older Geckos that doesn't have any onload event for StyleSheets + function waitForGeckoLinkLoaded() { + wait(function() { + try { + // Accessing the cssRules will throw an exception until the CSS file is loaded + var cssRules = style.sheet.cssRules; + passed(); + return !!cssRules; + } catch (ex) { + // Ignore + } + }, waitForGeckoLinkLoaded); + } + + if (!loadedStates[url]) { + state = { + passed: [], + failed: [] + }; + + loadedStates[url] = state; + } else { + state = loadedStates[url]; + } + + if (loadedCallback) { + state.passed.push(loadedCallback); + } + + if (errorCallback) { + state.failed.push(errorCallback); + } + + // Is loading wait for it to pass + if (state.status == 1) { + return; + } + + // Has finished loading and was success + if (state.status == 2) { + passed(); + return; + } + + // Has finished loading and was a failure + if (state.status == 3) { + failed(); + return; + } + + // Start loading + state.status = 1; + link = document.createElement('link'); + link.rel = 'stylesheet'; + link.type = 'text/css'; + link.id = 'u' + (idCount++); + link.async = false; + link.defer = false; + startTime = new Date().getTime(); + + // Feature detect onload on link element and sniff older webkits since it has an broken onload event + if ("onload" in link && !isOldWebKit()) { + link.onload = waitForWebKitLinkLoaded; + link.onerror = failed; + } else { + // Sniff for old Firefox that doesn't support the onload event on link elements + // TODO: Remove this in the future when everyone uses modern browsers + if (navigator.userAgent.indexOf("Firefox") > 0) { + style = document.createElement('style'); + style.textContent = '@import "' + url + '"'; + waitForGeckoLinkLoaded(); + appendToHead(style); + return; + } else { + // Use the id owner on older webkits + waitForWebKitLinkLoaded(); + } + } + + appendToHead(link); + link.href = url; + } + + this.load = load; + }; +}); + +// Included from: js/tinymce/classes/dom/DOMUtils.js + +/** + * DOMUtils.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Utility class for various DOM manipulation and retrieval functions. + * + * @class tinymce.dom.DOMUtils + * @example + * // Add a class to an element by id in the page + * tinymce.DOM.addClass('someid', 'someclass'); + * + * // Add a class to an element by id inside the editor + * tinymce.activeEditor.dom.addClass('someid', 'someclass'); + */ +define("tinymce/dom/DOMUtils", [ + "tinymce/dom/Sizzle", + "tinymce/html/Styles", + "tinymce/dom/EventUtils", + "tinymce/dom/TreeWalker", + "tinymce/dom/Range", + "tinymce/html/Entities", + "tinymce/Env", + "tinymce/util/Tools", + "tinymce/dom/StyleSheetLoader" +], function(Sizzle, Styles, EventUtils, TreeWalker, Range, Entities, Env, Tools, StyleSheetLoader) { + // Shorten names + var each = Tools.each, is = Tools.is, grep = Tools.grep, trim = Tools.trim, extend = Tools.extend; + var isWebKit = Env.webkit, isIE = Env.ie; + var simpleSelectorRe = /^([a-z0-9],?)+$/i; + var whiteSpaceRegExp = /^[ \t\r\n]*$/; + var numericCssMap = Tools.makeMap('fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom', ' '); + + /** + * Constructs a new DOMUtils instance. Consult the Wiki for more details on settings etc for this class. + * + * @constructor + * @method DOMUtils + * @param {Document} d Document reference to bind the utility class to. + * @param {settings} s Optional settings collection. + */ + function DOMUtils(doc, settings) { + var self = this, blockElementsMap; + + self.doc = doc; + self.win = window; + self.files = {}; + self.counter = 0; + self.stdMode = !isIE || doc.documentMode >= 8; + self.boxModel = !isIE || doc.compatMode == "CSS1Compat" || self.stdMode; + self.hasOuterHTML = "outerHTML" in doc.createElement("a"); + self.styleSheetLoader = new StyleSheetLoader(doc); + this.boundEvents = []; + + self.settings = settings = extend({ + keep_values: false, + hex_colors: 1 + }, settings); + + self.schema = settings.schema; + self.styles = new Styles({ + url_converter: settings.url_converter, + url_converter_scope: settings.url_converter_scope + }, settings.schema); + + self.fixDoc(doc); + self.events = settings.ownEvents ? new EventUtils(settings.proxy) : EventUtils.Event; + blockElementsMap = settings.schema ? settings.schema.getBlockElements() : {}; + + /** + * Returns true/false if the specified element is a block element or not. + * + * @method isBlock + * @param {Node/String} node Element/Node to check. + * @return {Boolean} True/False state if the node is a block element or not. + */ + self.isBlock = function(node) { + // Fix for #5446 + if (!node) { + return false; + } + + // This function is called in module pattern style since it might be executed with the wrong this scope + var type = node.nodeType; + + // If it's a node then check the type and use the nodeName + if (type) { + return !!(type === 1 && blockElementsMap[node.nodeName]); + } + + return !!blockElementsMap[node]; + }; + } + + DOMUtils.prototype = { + root: null, + props: { + "for": "htmlFor", + "class": "className", + className: "className", + checked: "checked", + disabled: "disabled", + maxlength: "maxLength", + readonly: "readOnly", + selected: "selected", + value: "value", + id: "id", + name: "name", + type: "type" + }, + + fixDoc: function(doc) { + var settings = this.settings, name; + + if (isIE && settings.schema) { + // Add missing HTML 4/5 elements to IE + ('abbr article aside audio canvas ' + + 'details figcaption figure footer ' + + 'header hgroup mark menu meter nav ' + + 'output progress section summary ' + + 'time video').replace(/\w+/g, function(name) { + doc.createElement(name); + }); + + // Create all custom elements + for (name in settings.schema.getCustomElements()) { + doc.createElement(name); + } + } + }, + + clone: function(node, deep) { + var self = this, clone, doc; + + // TODO: Add feature detection here in the future + if (!isIE || node.nodeType !== 1 || deep) { + return node.cloneNode(deep); + } + + doc = self.doc; + + // Make a HTML5 safe shallow copy + if (!deep) { + clone = doc.createElement(node.nodeName); + + // Copy attribs + each(self.getAttribs(node), function(attr) { + self.setAttrib(clone, attr.nodeName, self.getAttrib(node, attr.nodeName)); + }); + + return clone; + } +/* + // Setup HTML5 patched document fragment + if (!self.frag) { + self.frag = doc.createDocumentFragment(); + self.fixDoc(self.frag); + } + + // Make a deep copy by adding it to the document fragment then removing it this removed the :section + clone = doc.createElement('div'); + self.frag.appendChild(clone); + clone.innerHTML = node.outerHTML; + self.frag.removeChild(clone); +*/ + return clone.firstChild; + }, + + /** + * Returns the root node of the document. This is normally the body but might be a DIV. Parents like getParent will not + * go above the point of this root node. + * + * @method getRoot + * @return {Element} Root element for the utility class. + */ + getRoot: function() { + var self = this; + + return self.get(self.settings.root_element) || self.doc.body; + }, + + /** + * Returns the viewport of the window. + * + * @method getViewPort + * @param {Window} win Optional window to get viewport of. + * @return {Object} Viewport object with fields x, y, w and h. + */ + getViewPort: function(win) { + var doc, rootElm; + + win = !win ? this.win : win; + doc = win.document; + rootElm = this.boxModel ? doc.documentElement : doc.body; + + // Returns viewport size excluding scrollbars + return { + x: win.pageXOffset || rootElm.scrollLeft, + y: win.pageYOffset || rootElm.scrollTop, + w: win.innerWidth || rootElm.clientWidth, + h: win.innerHeight || rootElm.clientHeight + }; + }, + + /** + * Returns the rectangle for a specific element. + * + * @method getRect + * @param {Element/String} elm Element object or element ID to get rectangle from. + * @return {object} Rectangle for specified element object with x, y, w, h fields. + */ + getRect: function(elm) { + var self = this, pos, size; + + elm = self.get(elm); + pos = self.getPos(elm); + size = self.getSize(elm); + + return { + x: pos.x, y: pos.y, + w: size.w, h: size.h + }; + }, + + /** + * Returns the size dimensions of the specified element. + * + * @method getSize + * @param {Element/String} elm Element object or element ID to get rectangle from. + * @return {object} Rectangle for specified element object with w, h fields. + */ + getSize: function(elm) { + var self = this, w, h; + + elm = self.get(elm); + w = self.getStyle(elm, 'width'); + h = self.getStyle(elm, 'height'); + + // Non pixel value, then force offset/clientWidth + if (w.indexOf('px') === -1) { + w = 0; + } + + // Non pixel value, then force offset/clientWidth + if (h.indexOf('px') === -1) { + h = 0; + } + + return { + w: parseInt(w, 10) || elm.offsetWidth || elm.clientWidth, + h: parseInt(h, 10) || elm.offsetHeight || elm.clientHeight + }; + }, + + /** + * Returns a node by the specified selector function. This function will + * loop through all parent nodes and call the specified function for each node. + * If the function then returns true indicating that it has found what it was looking for, the loop execution will then end + * and the node it found will be returned. + * + * @method getParent + * @param {Node/String} node DOM node to search parents on or ID string. + * @param {function} selector Selection function or CSS selector to execute on each node. + * @param {Node} root Optional root element, never go below this point. + * @return {Node} DOM Node or null if it wasn't found. + */ + getParent: function(node, selector, root) { + return this.getParents(node, selector, root, false); + }, + + /** + * Returns a node list of all parents matching the specified selector function or pattern. + * If the function then returns true indicating that it has found what it was looking for and that node will be collected. + * + * @method getParents + * @param {Node/String} node DOM node to search parents on or ID string. + * @param {function} selector Selection function to execute on each node or CSS pattern. + * @param {Node} root Optional root element, never go below this point. + * @return {Array} Array of nodes or null if it wasn't found. + */ + getParents: function(node, selector, root, collect) { + var self = this, selectorVal, result = []; + + node = self.get(node); + collect = collect === undefined; + + // Default root on inline mode + root = root || (self.getRoot().nodeName != 'BODY' ? self.getRoot().parentNode : null); + + // Wrap node name as func + if (is(selector, 'string')) { + selectorVal = selector; + + if (selector === '*') { + selector = function(node) {return node.nodeType == 1;}; + } else { + selector = function(node) { + return self.is(node, selectorVal); + }; + } + } + + while (node) { + if (node == root || !node.nodeType || node.nodeType === 9) { + break; + } + + if (!selector || selector(node)) { + if (collect) { + result.push(node); + } else { + return node; + } + } + + node = node.parentNode; + } + + return collect ? result : null; + }, + + /** + * Returns the specified element by ID or the input element if it isn't a string. + * + * @method get + * @param {String/Element} n Element id to look for or element to just pass though. + * @return {Element} Element matching the specified id or null if it wasn't found. + */ + get: function(elm) { + var name; + + if (elm && this.doc && typeof(elm) == 'string') { + name = elm; + elm = this.doc.getElementById(elm); + + // IE and Opera returns meta elements when they match the specified input ID, but getElementsByName seems to do the trick + if (elm && elm.id !== name) { + return this.doc.getElementsByName(name)[1]; + } + } + + return elm; + }, + + /** + * Returns the next node that matches selector or function + * + * @method getNext + * @param {Node} node Node to find siblings from. + * @param {String/function} selector Selector CSS expression or function. + * @return {Node} Next node item matching the selector or null if it wasn't found. + */ + getNext: function(node, selector) { + return this._findSib(node, selector, 'nextSibling'); + }, + + /** + * Returns the previous node that matches selector or function + * + * @method getPrev + * @param {Node} node Node to find siblings from. + * @param {String/function} selector Selector CSS expression or function. + * @return {Node} Previous node item matching the selector or null if it wasn't found. + */ + getPrev: function(node, selector) { + return this._findSib(node, selector, 'previousSibling'); + }, + + // #ifndef jquery + + /** + * Selects specific elements by a CSS level 3 pattern. For example "div#a1 p.test". + * This function is optimized for the most common patterns needed in TinyMCE but it also performs well enough + * on more complex patterns. + * + * @method select + * @param {String} selector CSS level 3 pattern to select/find elements by. + * @param {Object} scope Optional root element/scope element to search in. + * @return {Array} Array with all matched elements. + * @example + * // Adds a class to all paragraphs in the currently active editor + * tinymce.activeEditor.dom.addClass(tinymce.activeEditor.dom.select('p'), 'someclass'); + * + * // Adds a class to all spans that have the test class in the currently active editor + * tinymce.activeEditor.dom.addClass(tinymce.activeEditor.dom.select('span.test'), 'someclass') + */ + select: function(selector, scope) { + var self = this; + + //Sizzle.selectors.cacheLength = 0; + return Sizzle(selector, self.get(scope) || self.get(self.settings.root_element) || self.doc, []); + }, + + /** + * Returns true/false if the specified element matches the specified css pattern. + * + * @method is + * @param {Node/NodeList} elm DOM node to match or an array of nodes to match. + * @param {String} selector CSS pattern to match the element against. + */ + is: function(elm, selector) { + var i; + + // If it isn't an array then try to do some simple selectors instead of Sizzle for to boost performance + if (elm.length === undefined) { + // Simple all selector + if (selector === '*') { + return elm.nodeType == 1; + } + + // Simple selector just elements + if (simpleSelectorRe.test(selector)) { + selector = selector.toLowerCase().split(/,/); + elm = elm.nodeName.toLowerCase(); + + for (i = selector.length - 1; i >= 0; i--) { + if (selector[i] == elm) { + return true; + } + } + + return false; + } + } + + // Is non element + if (elm.nodeType && elm.nodeType != 1) { + return false; + } + + var elms = elm.nodeType ? [elm] : elm; + return Sizzle(selector, elms[0].ownerDocument || elms[0], null, elms).length > 0; + }, + + // #endif + + /** + * Adds the specified element to another element or elements. + * + * @method add + * @param {String/Element/Array} parentElm Element id string, DOM node element or array of ids or elements to add to. + * @param {String/Element} name Name of new element to add or existing element to add. + * @param {Object} attrs Optional object collection with arguments to add to the new element(s). + * @param {String} html Optional inner HTML contents to add for each element. + * @return {Element/Array} Element that got created, or an array of created elements if multiple input elements + * were passed in. + * @example + * // Adds a new paragraph to the end of the active editor + * tinymce.activeEditor.dom.add(tinymce.activeEditor.getBody(), 'p', {title: 'my title'}, 'Some content'); + */ + add: function(parentElm, name, attrs, html, create) { + var self = this; + + return this.run(parentElm, function(parentElm) { + var newElm; + + newElm = is(name, 'string') ? self.doc.createElement(name) : name; + self.setAttribs(newElm, attrs); + + if (html) { + if (html.nodeType) { + newElm.appendChild(html); + } else { + self.setHTML(newElm, html); + } + } + + return !create ? parentElm.appendChild(newElm) : newElm; + }); + }, + + /** + * Creates a new element. + * + * @method create + * @param {String} name Name of new element. + * @param {Object} attrs Optional object name/value collection with element attributes. + * @param {String} html Optional HTML string to set as inner HTML of the element. + * @return {Element} HTML DOM node element that got created. + * @example + * // Adds an element where the caret/selection is in the active editor + * var el = tinymce.activeEditor.dom.create('div', {id: 'test', 'class': 'myclass'}, 'some content'); + * tinymce.activeEditor.selection.setNode(el); + */ + create: function(name, attrs, html) { + return this.add(this.doc.createElement(name), name, attrs, html, 1); + }, + + /** + * Creates HTML string for element. The element will be closed unless an empty inner HTML string is passed in. + * + * @method createHTML + * @param {String} name Name of new element. + * @param {Object} attrs Optional object name/value collection with element attributes. + * @param {String} html Optional HTML string to set as inner HTML of the element. + * @return {String} String with new HTML element, for example: test. + * @example + * // Creates a html chunk and inserts it at the current selection/caret location + * tinymce.activeEditor.selection.setContent(tinymce.activeEditor.dom.createHTML('a', {href: 'test.html'}, 'some line')); + */ + createHTML: function(name, attrs, html) { + var outHtml = '', key; + + outHtml += '<' + name; + + for (key in attrs) { + if (attrs.hasOwnProperty(key) && attrs[key] !== null) { + outHtml += ' ' + key + '="' + this.encode(attrs[key]) + '"'; + } + } + + // A call to tinymce.is doesn't work for some odd reason on IE9 possible bug inside their JS runtime + if (typeof(html) != "undefined") { + return outHtml + '>' + html + ''; + } + + return outHtml + ' />'; + }, + + /** + * Creates a document fragment out of the specified HTML string. + * + * @method createFragment + * @param {String} html Html string to create fragment from. + * @return {DocumentFragment} Document fragment node. + */ + createFragment: function(html) { + var frag, node, doc = this.doc, container; + + container = doc.createElement("div"); + frag = doc.createDocumentFragment(); + + if (html) { + container.innerHTML = html; + } + + while ((node = container.firstChild)) { + frag.appendChild(node); + } + + return frag; + }, + + /** + * Removes/deletes the specified element(s) from the DOM. + * + * @method remove + * @param {String/Element/Array} node ID of element or DOM element object or array containing multiple elements/ids. + * @param {Boolean} keep_children Optional state to keep children or not. If set to true all children will be + * placed at the location of the removed element. + * @return {Element/Array} HTML DOM element that got removed, or an array of removed elements if multiple input elements + * were passed in. + * @example + * // Removes all paragraphs in the active editor + * tinymce.activeEditor.dom.remove(tinymce.activeEditor.dom.select('p')); + * + * // Removes an element by id in the document + * tinymce.DOM.remove('mydiv'); + */ + remove: function(node, keep_children) { + return this.run(node, function(node) { + var child, parent = node.parentNode; + + if (!parent) { + return null; + } + + if (keep_children) { + while ((child = node.firstChild)) { + // IE 8 will crash if you don't remove completely empty text nodes + if (!isIE || child.nodeType !== 3 || child.nodeValue) { + parent.insertBefore(child, node); + } else { + node.removeChild(child); + } + } + } + + return parent.removeChild(node); + }); + }, + + /** + * Sets the CSS style value on a HTML element. The name can be a camelcase string + * or the CSS style name like background-color. + * + * @method setStyle + * @param {String/Element/Array} n HTML element/Element ID or Array of elements/ids to set CSS style value on. + * @param {String} na Name of the style value to set. + * @param {String} v Value to set on the style. + * @example + * // Sets a style value on all paragraphs in the currently active editor + * tinymce.activeEditor.dom.setStyle(tinymce.activeEditor.dom.select('p'), 'background-color', 'red'); + * + * // Sets a style value to an element by id in the current document + * tinymce.DOM.setStyle('mydiv', 'background-color', 'red'); + */ + setStyle: function(elm, name, value) { + return this.run(elm, function(elm) { + var self = this, style, key; + + if (name) { + if (typeof(name) === 'string') { + style = elm.style; + + // Camelcase it, if needed + name = name.replace(/-(\D)/g, function(a, b) { + return b.toUpperCase(); + }); + + // Default px suffix on these + if (typeof(value) === 'number' && !numericCssMap[name]) { + value += 'px'; + } + + // IE specific opacity + if (name === "opacity" && elm.runtimeStyle && typeof(elm.runtimeStyle.opacity) === "undefined") { + style.filter = value === '' ? '' : "alpha(opacity=" + (value * 100) + ")"; + } + + if (name == "float") { + // Old IE vs modern browsers + name = "cssFloat" in elm.style ? "cssFloat" : "styleFloat"; + } + + try { + style[name] = value; + } catch (ex) { + // Ignore IE errors + } + + // Force update of the style data + if (self.settings.update_styles) { + elm.removeAttribute('data-mce-style'); + } + } else { + for (key in name) { + self.setStyle(elm, key, name[key]); + } + } + } + }); + }, + + /** + * Returns the current style or runtime/computed value of an element. + * + * @method getStyle + * @param {String/Element} elm HTML element or element id string to get style from. + * @param {String} name Style name to return. + * @param {Boolean} computed Computed style. + * @return {String} Current style or computed style value of an element. + */ + getStyle: function(elm, name, computed) { + elm = this.get(elm); + + if (!elm) { + return; + } + + // W3C + if (this.doc.defaultView && computed) { + // Remove camelcase + name = name.replace(/[A-Z]/g, function(a){ + return '-' + a; + }); + + try { + return this.doc.defaultView.getComputedStyle(elm, null).getPropertyValue(name); + } catch (ex) { + // Old safari might fail + return null; + } + } + + // Camelcase it, if needed + name = name.replace(/-(\D)/g, function(a, b) { + return b.toUpperCase(); + }); + + if (name == 'float') { + name = isIE ? 'styleFloat' : 'cssFloat'; + } + + // IE & Opera + if (elm.currentStyle && computed) { + return elm.currentStyle[name]; + } + + return elm.style ? elm.style[name] : undefined; + }, + + /** + * Sets multiple styles on the specified element(s). + * + * @method setStyles + * @param {Element/String/Array} e DOM element, element id string or array of elements/ids to set styles on. + * @param {Object} o Name/Value collection of style items to add to the element(s). + * @example + * // Sets styles on all paragraphs in the currently active editor + * tinymce.activeEditor.dom.setStyles(tinymce.activeEditor.dom.select('p'), {'background-color': 'red', 'color': 'green'}); + * + * // Sets styles to an element by id in the current document + * tinymce.DOM.setStyles('mydiv', {'background-color': 'red', 'color': 'green'}); + */ + setStyles: function(elm, styles) { + this.setStyle(elm, styles); + }, + + css: function(elm, name, value) { + this.setStyle(elm, name, value); + }, + + /** + * Removes all attributes from an element or elements. + * + * @method removeAllAttribs + * @param {Element/String/Array} e DOM element, element id string or array of elements/ids to remove attributes from. + */ + removeAllAttribs: function(e) { + return this.run(e, function(e) { + var i, attrs = e.attributes; + for (i = attrs.length - 1; i >= 0; i--) { + e.removeAttributeNode(attrs.item(i)); + } + }); + }, + + /** + * Sets the specified attribute of an element or elements. + * + * @method setAttrib + * @param {Element/String/Array} e DOM element, element id string or array of elements/ids to set attribute on. + * @param {String} n Name of attribute to set. + * @param {String} v Value to set on the attribute - if this value is falsy like null, 0 or '' it will remove the attribute instead. + * @example + * // Sets class attribute on all paragraphs in the active editor + * tinymce.activeEditor.dom.setAttrib(tinymce.activeEditor.dom.select('p'), 'class', 'myclass'); + * + * // Sets class attribute on a specific element in the current page + * tinymce.dom.setAttrib('mydiv', 'class', 'myclass'); + */ + setAttrib: function(e, n, v) { + var self = this; + + // What's the point + if (!e || !n) { + return; + } + + return this.run(e, function(e) { + var s = self.settings; + var originalValue = e.getAttribute(n); + if (v !== null) { + switch (n) { + case "style": + if (!is(v, 'string')) { + each(v, function(v, n) { + self.setStyle(e, n, v); + }); + + return; + } + + // No mce_style for elements with these since they might get resized by the user + if (s.keep_values) { + if (v) { + e.setAttribute('data-mce-style', v, 2); + } else { + e.removeAttribute('data-mce-style', 2); + } + } + + e.style.cssText = v; + break; + + case "class": + e.className = v || ''; // Fix IE null bug + break; + + case "src": + case "href": + if (s.keep_values) { + if (s.url_converter) { + v = s.url_converter.call(s.url_converter_scope || self, v, n, e); + } + + self.setAttrib(e, 'data-mce-' + n, v, 2); + } + + break; + + case "shape": + e.setAttribute('data-mce-style', v); + break; + } + } + if (is(v) && v !== null && v.length !== 0) { + e.setAttribute(n, '' + v, 2); + } else { + e.removeAttribute(n, 2); + } + + // fire onChangeAttrib event for attributes that have changed + if (originalValue != v && s.onSetAttrib) { + s.onSetAttrib({attrElm: e, attrName: n, attrValue: v}); + } + }); + }, + + /** + * Sets two or more specified attributes of an element or elements. + * + * @method setAttribs + * @param {Element/String/Array} elm DOM element, element id string or array of elements/ids to set attributes on. + * @param {Object} attrs Name/Value collection of attribute items to add to the element(s). + * @example + * // Sets class and title attributes on all paragraphs in the active editor + * tinymce.activeEditor.dom.setAttribs(tinymce.activeEditor.dom.select('p'), {'class': 'myclass', title: 'some title'}); + * + * // Sets class and title attributes on a specific element in the current page + * tinymce.DOM.setAttribs('mydiv', {'class': 'myclass', title: 'some title'}); + */ + setAttribs: function(elm, attrs) { + var self = this; + + return this.run(elm, function(elm) { + each(attrs, function(value, name) { + self.setAttrib(elm, name, value); + }); + }); + }, + + /** + * Returns the specified attribute by name. + * + * @method getAttrib + * @param {String/Element} elm Element string id or DOM element to get attribute from. + * @param {String} name Name of attribute to get. + * @param {String} defaultVal Optional default value to return if the attribute didn't exist. + * @return {String} Attribute value string, default value or null if the attribute wasn't found. + */ + getAttrib: function(elm, name, defaultVal) { + var value, self = this, undef; + + elm = self.get(elm); + + if (!elm || elm.nodeType !== 1) { + return defaultVal === undef ? false : defaultVal; + } + + if (!is(defaultVal)) { + defaultVal = ''; + } + + // Try the mce variant for these + if (/^(src|href|style|coords|shape)$/.test(name)) { + value = elm.getAttribute("data-mce-" + name); + + if (value) { + return value; + } + } + + if (isIE && self.props[name]) { + value = elm[self.props[name]]; + value = value && value.nodeValue ? value.nodeValue : value; + } + + if (!value) { + value = elm.getAttribute(name, 2); + } + + // Check boolean attribs + if (/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(name)) { + if (elm[self.props[name]] === true && value === '') { + return name; + } + + return value ? name : ''; + } + + // Inner input elements will override attributes on form elements + if (elm.nodeName === "FORM" && elm.getAttributeNode(name)) { + return elm.getAttributeNode(name).nodeValue; + } + + if (name === 'style') { + value = value || elm.style.cssText; + + if (value) { + value = self.serializeStyle(self.parseStyle(value), elm.nodeName); + + if (self.settings.keep_values) { + elm.setAttribute('data-mce-style', value); + } + } + } + + // Remove Apple and WebKit stuff + if (isWebKit && name === "class" && value) { + value = value.replace(/(apple|webkit)\-[a-z\-]+/gi, ''); + } + + // Handle IE issues + if (isIE) { + switch (name) { + case 'rowspan': + case 'colspan': + // IE returns 1 as default value + if (value === 1) { + value = ''; + } + + break; + + case 'size': + // IE returns +0 as default value for size + if (value === '+0' || value === 20 || value === 0) { + value = ''; + } + + break; + + case 'width': + case 'height': + case 'vspace': + case 'checked': + case 'disabled': + case 'readonly': + if (value === 0) { + value = ''; + } + + break; + + case 'hspace': + // IE returns -1 as default value + if (value === -1) { + value = ''; + } + + break; + + case 'maxlength': + case 'tabindex': + // IE returns default value + if (value === 32768 || value === 2147483647 || value === '32768') { + value = ''; + } + + break; + + case 'multiple': + case 'compact': + case 'noshade': + case 'nowrap': + if (value === 65535) { + return name; + } + + return defaultVal; + + case 'shape': + value = value.toLowerCase(); + break; + + default: + // IE has odd anonymous function for event attributes + if (name.indexOf('on') === 0 && value) { + value = ('' + value).replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/, '$1'); + } + } + } + + return (value !== undef && value !== null && value !== '') ? '' + value : defaultVal; + }, + + /** + * Returns the absolute x, y position of a node. The position will be returned in an object with x, y fields. + * + * @method getPos + * @param {Element/String} elm HTML element or element id to get x, y position from. + * @param {Element} rootElm Optional root element to stop calculations at. + * @return {object} Absolute position of the specified element object with x, y fields. + */ + getPos: function(elm, rootElm) { + var self = this, x = 0, y = 0, offsetParent, doc = self.doc, pos; + + elm = self.get(elm); + rootElm = rootElm || doc.body; + + if (elm) { + // Use getBoundingClientRect if it exists since it's faster than looping offset nodes + if (rootElm === doc.body && elm.getBoundingClientRect) { + pos = elm.getBoundingClientRect(); + rootElm = self.boxModel ? doc.documentElement : doc.body; + + // Add scroll offsets from documentElement or body since IE with the wrong box model will use d.body and so do WebKit + // Also remove the body/documentelement clientTop/clientLeft on IE 6, 7 since they offset the position + x = pos.left + (doc.documentElement.scrollLeft || doc.body.scrollLeft) - rootElm.clientLeft; + y = pos.top + (doc.documentElement.scrollTop || doc.body.scrollTop) - rootElm.clientTop; + + return {x: x, y: y}; + } + + offsetParent = elm; + while (offsetParent && offsetParent != rootElm && offsetParent.nodeType) { + x += offsetParent.offsetLeft || 0; + y += offsetParent.offsetTop || 0; + offsetParent = offsetParent.offsetParent; + } + + offsetParent = elm.parentNode; + while (offsetParent && offsetParent != rootElm && offsetParent.nodeType) { + x -= offsetParent.scrollLeft || 0; + y -= offsetParent.scrollTop || 0; + offsetParent = offsetParent.parentNode; + } + } + + return {x: x, y: y}; + }, + + /** + * Parses the specified style value into an object collection. This parser will also + * merge and remove any redundant items that browsers might have added. It will also convert non-hex + * colors to hex values. Urls inside the styles will also be converted to absolute/relative based on settings. + * + * @method parseStyle + * @param {String} cssText Style value to parse, for example: border:1px solid red;. + * @return {Object} Object representation of that style, for example: {border: '1px solid red'} + */ + parseStyle: function(cssText) { + return this.styles.parse(cssText); + }, + + /** + * Serializes the specified style object into a string. + * + * @method serializeStyle + * @param {Object} styles Object to serialize as string, for example: {border: '1px solid red'} + * @param {String} name Optional element name. + * @return {String} String representation of the style object, for example: border: 1px solid red. + */ + serializeStyle: function(styles, name) { + return this.styles.serialize(styles, name); + }, + + /** + * Adds a style element at the top of the document with the specified cssText content. + * + * @method addStyle + * @param {String} cssText CSS Text style to add to top of head of document. + */ + addStyle: function(cssText) { + var self = this, doc = self.doc, head, styleElm; + + // Prevent inline from loading the same styles twice + if (self !== DOMUtils.DOM && doc === document) { + var addedStyles = DOMUtils.DOM.addedStyles; + + addedStyles = addedStyles || []; + if (addedStyles[cssText]) { + return; + } + + addedStyles[cssText] = true; + DOMUtils.DOM.addedStyles = addedStyles; + } + + // Create style element if needed + styleElm = doc.getElementById('mceDefaultStyles'); + if (!styleElm) { + styleElm = doc.createElement('style'); + styleElm.id = 'mceDefaultStyles'; + styleElm.type = 'text/css'; + + head = doc.getElementsByTagName('head')[0]; + if (head.firstChild) { + head.insertBefore(styleElm, head.firstChild); + } else { + head.appendChild(styleElm); + } + } + + // Append style data to old or new style element + if (styleElm.styleSheet) { + styleElm.styleSheet.cssText += cssText; + } else { + styleElm.appendChild(doc.createTextNode(cssText)); + } + }, + + /** + * Imports/loads the specified CSS file into the document bound to the class. + * + * @method loadCSS + * @param {String} u URL to CSS file to load. + * @example + * // Loads a CSS file dynamically into the current document + * tinymce.DOM.loadCSS('somepath/some.css'); + * + * // Loads a CSS file into the currently active editor instance + * tinymce.activeEditor.dom.loadCSS('somepath/some.css'); + * + * // Loads a CSS file into an editor instance by id + * tinymce.get('someid').dom.loadCSS('somepath/some.css'); + * + * // Loads multiple CSS files into the current document + * tinymce.DOM.loadCSS('somepath/some.css,somepath/someother.css'); + */ + loadCSS: function(url) { + var self = this, doc = self.doc, head; + + // Prevent inline from loading the same CSS file twice + if (self !== DOMUtils.DOM && doc === document) { + DOMUtils.DOM.loadCSS(url); + return; + } + + if (!url) { + url = ''; + } + + head = doc.getElementsByTagName('head')[0]; + + each(url.split(','), function(url) { + var link; + + if (self.files[url]) { + return; + } + + self.files[url] = true; + link = self.create('link', {rel: 'stylesheet', href: url}); + + // IE 8 has a bug where dynamically loading stylesheets would produce a 1 item remaining bug + // This fix seems to resolve that issue by recalcing the document once a stylesheet finishes loading + // It's ugly but it seems to work fine. + if (isIE && doc.documentMode && doc.recalc) { + link.onload = function() { + if (doc.recalc) { + doc.recalc(); + } + + link.onload = null; + }; + } + + head.appendChild(link); + }); + }, + + /** + * Adds a class to the specified element or elements. + * + * @method addClass + * @param {String/Element/Array} elm Element ID string or DOM element or array with elements or IDs. + * @param {String} cls Class name to add to each element. + * @return {String/Array} String with new class value or array with new class values for all elements. + * @example + * // Adds a class to all paragraphs in the active editor + * tinymce.activeEditor.dom.addClass(tinymce.activeEditor.dom.select('p'), 'myclass'); + * + * // Adds a class to a specific element in the current page + * tinymce.DOM.addClass('mydiv', 'myclass'); + */ + addClass: function(elm, cls) { + return this.run(elm, function(elm) { + var clsVal; + + if (!cls) { + return 0; + } + + if (this.hasClass(elm, cls)) { + return elm.className; + } + + clsVal = this.removeClass(elm, cls); + elm.className = clsVal = (clsVal !== '' ? (clsVal + ' ') : '') + cls; + + return clsVal; + }); + }, + + /** + * Removes a class from the specified element or elements. + * + * @method removeClass + * @param {String/Element/Array} elm Element ID string or DOM element or array with elements or IDs. + * @param {String} cls Class name to remove from each element. + * @return {String/Array} String of remaining class name(s), or an array of strings if multiple input elements + * were passed in. + * @example + * // Removes a class from all paragraphs in the active editor + * tinymce.activeEditor.dom.removeClass(tinymce.activeEditor.dom.select('p'), 'myclass'); + * + * // Removes a class from a specific element in the current page + * tinymce.DOM.removeClass('mydiv', 'myclass'); + */ + removeClass: function(elm, cls) { + var self = this, re; + + return self.run(elm, function(elm) { + var val; + + if (self.hasClass(elm, cls)) { + if (!re) { + re = new RegExp("(^|\\s+)" + cls + "(\\s+|$)", "g"); + } + + val = elm.className.replace(re, ' '); + val = trim(val != ' ' ? val : ''); + + elm.className = val; + + // Empty class attr + if (!val) { + elm.removeAttribute('class'); + elm.removeAttribute('className'); + } + + return val; + } + + return elm.className; + }); + }, + + /** + * Returns true if the specified element has the specified class. + * + * @method hasClass + * @param {String/Element} n HTML element or element id string to check CSS class on. + * @param {String} c CSS class to check for. + * @return {Boolean} true/false if the specified element has the specified class. + */ + hasClass: function(elm, cls) { + elm = this.get(elm); + + if (!elm || !cls) { + return false; + } + + return (' ' + elm.className + ' ').indexOf(' ' + cls + ' ') !== -1; + }, + + /** + * Toggles the specified class on/off. + * + * @method toggleClass + * @param {Element} elm Element to toggle class on. + * @param {[type]} cls Class to toggle on/off. + * @param {[type]} state Optional state to set. + */ + toggleClass: function(elm, cls, state) { + state = state === undefined ? !this.hasClass(elm, cls) : state; + + if (this.hasClass(elm, cls) !== state) { + if (state) { + this.addClass(elm, cls); + } else { + this.removeClass(elm, cls); + } + } + }, + + /** + * Shows the specified element(s) by ID by setting the "display" style. + * + * @method show + * @param {String/Element/Array} elm ID of DOM element or DOM element or array with elements or IDs to show. + */ + show: function(elm) { + return this.setStyle(elm, 'display', 'block'); + }, + + /** + * Hides the specified element(s) by ID by setting the "display" style. + * + * @method hide + * @param {String/Element/Array} e ID of DOM element or DOM element or array with elements or IDs to hide. + * @example + * // Hides an element by id in the document + * tinymce.DOM.hide('myid'); + */ + hide: function(elm) { + return this.setStyle(elm, 'display', 'none'); + }, + + /** + * Returns true/false if the element is hidden or not by checking the "display" style. + * + * @method isHidden + * @param {String/Element} e Id or element to check display state on. + * @return {Boolean} true/false if the element is hidden or not. + */ + isHidden: function(elm) { + elm = this.get(elm); + + return !elm || elm.style.display == 'none' || this.getStyle(elm, 'display') == 'none'; + }, + + /** + * Returns a unique id. This can be useful when generating elements on the fly. + * This method will not check if the element already exists. + * + * @method uniqueId + * @param {String} prefix Optional prefix to add in front of all ids - defaults to "mce_". + * @return {String} Unique id. + */ + uniqueId: function(prefix) { + return (!prefix ? 'mce_' : prefix) + (this.counter++); + }, + + /** + * Sets the specified HTML content inside the element or elements. The HTML will first be processed. This means + * URLs will get converted, hex color values fixed etc. Check processHTML for details. + * + * @method setHTML + * @param {Element/String/Array} e DOM element, element id string or array of elements/ids to set HTML inside of. + * @param {String} h HTML content to set as inner HTML of the element. + * @example + * // Sets the inner HTML of all paragraphs in the active editor + * tinymce.activeEditor.dom.setHTML(tinymce.activeEditor.dom.select('p'), 'some inner html'); + * + * // Sets the inner HTML of an element by id in the document + * tinymce.DOM.setHTML('mydiv', 'some inner html'); + */ + setHTML: function(element, html) { + var self = this; + + return self.run(element, function(element) { + if (isIE) { + // Remove all child nodes, IE keeps empty text nodes in DOM + while (element.firstChild) { + element.removeChild(element.firstChild); + } + + try { + // IE will remove comments from the beginning + // unless you padd the contents with something + element.innerHTML = '
    ' + html; + element.removeChild(element.firstChild); + } catch (ex) { + // IE sometimes produces an unknown runtime error on innerHTML if it's a block element + // within a block element for example a div inside a p + // This seems to fix this problem + + // Create new div with HTML contents and a BR in front to keep comments + var newElement = self.create('div'); + newElement.innerHTML = '
    ' + html; + + // Add all children from div to target + each(grep(newElement.childNodes), function(node, i) { + // Skip br element + if (i && element.canHaveHTML) { + element.appendChild(node); + } + }); + } + } else { + element.innerHTML = html; + } + + return html; + }); + }, + + /** + * Returns the outer HTML of an element. + * + * @method getOuterHTML + * @param {String/Element} elm Element ID or element object to get outer HTML from. + * @return {String} Outer HTML string. + * @example + * tinymce.DOM.getOuterHTML(editorElement); + * tinymce.activeEditor.getOuterHTML(tinymce.activeEditor.getBody()); + */ + getOuterHTML: function(elm) { + var doc, self = this; + + elm = self.get(elm); + + if (!elm) { + return null; + } + + if (elm.nodeType === 1 && self.hasOuterHTML) { + return elm.outerHTML; + } + + doc = (elm.ownerDocument || self.doc).createElement("body"); + doc.appendChild(elm.cloneNode(true)); + + return doc.innerHTML; + }, + + /** + * Sets the specified outer HTML on an element or elements. + * + * @method setOuterHTML + * @param {Element/String/Array} elm DOM element, element id string or array of elements/ids to set outer HTML on. + * @param {Object} html HTML code to set as outer value for the element. + * @param {Document} doc Optional document scope to use in this process - defaults to the document of the DOM class. + * @example + * // Sets the outer HTML of all paragraphs in the active editor + * tinymce.activeEditor.dom.setOuterHTML(tinymce.activeEditor.dom.select('p'), '
    some html
    '); + * + * // Sets the outer HTML of an element by id in the document + * tinymce.DOM.setOuterHTML('mydiv', '
    some html
    '); + */ + setOuterHTML: function(elm, html, doc) { + var self = this; + + return self.run(elm, function(elm) { + function set() { + var node, tempElm; + + tempElm = doc.createElement("body"); + tempElm.innerHTML = html; + + node = tempElm.lastChild; + while (node) { + self.insertAfter(node.cloneNode(true), elm); + node = node.previousSibling; + } + + self.remove(elm); + } + + // Only set HTML on elements + if (elm.nodeType == 1) { + doc = doc || elm.ownerDocument || self.doc; + + if (isIE) { + try { + // Try outerHTML for IE it sometimes produces an unknown runtime error + if (elm.nodeType == 1 && self.hasOuterHTML) { + elm.outerHTML = html; + } else { + set(); + } + } catch (ex) { + // Fix for unknown runtime error + set(); + } + } else { + set(); + } + } + }); + }, + + /** + * Entity decodes a string. This method decodes any HTML entities, such as å. + * + * @method decode + * @param {String} s String to decode entities on. + * @return {String} Entity decoded string. + */ + decode: Entities.decode, + + /** + * Entity encodes a string. This method encodes the most common entities, such as <>"&. + * + * @method encode + * @param {String} text String to encode with entities. + * @return {String} Entity encoded string. + */ + encode: Entities.encodeAllRaw, + + /** + * Inserts an element after the reference element. + * + * @method insertAfter + * @param {Element} node Element to insert after the reference. + * @param {Element/String/Array} reference_node Reference element, element id or array of elements to insert after. + * @return {Element/Array} Element that got added or an array with elements. + */ + insertAfter: function(node, reference_node) { + reference_node = this.get(reference_node); + + return this.run(node, function(node) { + var parent, nextSibling; + + parent = reference_node.parentNode; + nextSibling = reference_node.nextSibling; + + if (nextSibling) { + parent.insertBefore(node, nextSibling); + } else { + parent.appendChild(node); + } + + return node; + }); + }, + + /** + * Replaces the specified element or elements with the new element specified. The new element will + * be cloned if multiple input elements are passed in. + * + * @method replace + * @param {Element} newElm New element to replace old ones with. + * @param {Element/String/Array} oldELm Element DOM node, element id or array of elements or ids to replace. + * @param {Boolean} k Optional keep children state, if set to true child nodes from the old object will be added to new ones. + */ + replace: function(newElm, oldElm, keepChildren) { + var self = this; + + return self.run(oldElm, function(oldElm) { + if (is(oldElm, 'array')) { + newElm = newElm.cloneNode(true); + } + + if (keepChildren) { + each(grep(oldElm.childNodes), function(node) { + newElm.appendChild(node); + }); + } + + return oldElm.parentNode.replaceChild(newElm, oldElm); + }); + }, + + /** + * Renames the specified element and keeps its attributes and children. + * + * @method rename + * @param {Element} elm Element to rename. + * @param {String} name Name of the new element. + * @return {Element} New element or the old element if it needed renaming. + */ + rename: function(elm, name) { + var self = this, newElm; + + if (elm.nodeName != name.toUpperCase()) { + // Rename block element + newElm = self.create(name); + + // Copy attribs to new block + each(self.getAttribs(elm), function(attr_node) { + self.setAttrib(newElm, attr_node.nodeName, self.getAttrib(elm, attr_node.nodeName)); + }); + + // Replace block + self.replace(newElm, elm, 1); + } + + return newElm || elm; + }, + + /** + * Find the common ancestor of two elements. This is a shorter method than using the DOM Range logic. + * + * @method findCommonAncestor + * @param {Element} a Element to find common ancestor of. + * @param {Element} b Element to find common ancestor of. + * @return {Element} Common ancestor element of the two input elements. + */ + findCommonAncestor: function(a, b) { + var ps = a, pe; + + while (ps) { + pe = b; + + while (pe && ps != pe) { + pe = pe.parentNode; + } + + if (ps == pe) { + break; + } + + ps = ps.parentNode; + } + + if (!ps && a.ownerDocument) { + return a.ownerDocument.documentElement; + } + + return ps; + }, + + /** + * Parses the specified RGB color value and returns a hex version of that color. + * + * @method toHex + * @param {String} rgbVal RGB string value like rgb(1,2,3) + * @return {String} Hex version of that RGB value like #FF00FF. + */ + toHex: function(rgbVal) { + return this.styles.toHex(Tools.trim(rgbVal)); + }, + + /** + * Executes the specified function on the element by id or dom element node or array of elements/id. + * + * @method run + * @param {String/Element/Array} Element ID or DOM element object or array with ids or elements. + * @param {function} f Function to execute for each item. + * @param {Object} s Optional scope to execute the function in. + * @return {Object/Array} Single object, or an array of objects if multiple input elements were passed in. + */ + run: function(elm, func, scope) { + var self = this, result; + + if (typeof(elm) === 'string') { + elm = self.get(elm); + } + + if (!elm) { + return false; + } + + scope = scope || this; + if (!elm.nodeType && (elm.length || elm.length === 0)) { + result = []; + + each(elm, function(elm, i) { + if (elm) { + if (typeof(elm) == 'string') { + elm = self.get(elm); + } + + result.push(func.call(scope, elm, i)); + } + }); + + return result; + } + + return func.call(scope, elm); + }, + + /** + * Returns a NodeList with attributes for the element. + * + * @method getAttribs + * @param {HTMLElement/string} elm Element node or string id to get attributes from. + * @return {NodeList} NodeList with attributes. + */ + getAttribs: function(elm) { + var attrs; + + elm = this.get(elm); + + if (!elm) { + return []; + } + + if (isIE) { + attrs = []; + + // Object will throw exception in IE + if (elm.nodeName == 'OBJECT') { + return elm.attributes; + } + + // IE doesn't keep the selected attribute if you clone option elements + if (elm.nodeName === 'OPTION' && this.getAttrib(elm, 'selected')) { + attrs.push({specified: 1, nodeName: 'selected'}); + } + + // It's crazy that this is faster in IE but it's because it returns all attributes all the time + var attrRegExp = /<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi; + elm.cloneNode(false).outerHTML.replace(attrRegExp, '').replace(/[\w:\-]+/gi, function(a) { + attrs.push({specified: 1, nodeName: a}); + }); + + return attrs; + } + + return elm.attributes; + }, + + /** + * Returns true/false if the specified node is to be considered empty or not. + * + * @example + * tinymce.DOM.isEmpty(node, {img: true}); + * @method isEmpty + * @param {Object} elements Optional name/value object with elements that are automatically treated as non-empty elements. + * @return {Boolean} true/false if the node is empty or not. + */ + isEmpty: function(node, elements) { + var self = this, i, attributes, type, walker, name, brCount = 0; + + node = node.firstChild; + if (node) { + walker = new TreeWalker(node, node.parentNode); + elements = elements || self.schema ? self.schema.getNonEmptyElements() : null; + + do { + type = node.nodeType; + + if (type === 1) { + // Ignore bogus elements + if (node.getAttribute('data-mce-bogus')) { + continue; + } + + // Keep empty elements like + name = node.nodeName.toLowerCase(); + if (elements && elements[name]) { + // Ignore single BR elements in blocks like


    or


    + if (name === 'br') { + brCount++; + continue; + } + + return false; + } + + // Keep elements with data-bookmark attributes or name attribute like + attributes = self.getAttribs(node); + i = node.attributes.length; + while (i--) { + name = node.attributes[i].nodeName; + if (name === "name" || name === 'data-mce-bookmark') { + return false; + } + } + } + + // Keep comment nodes + if (type == 8) { + return false; + } + + // Keep non whitespace text nodes + if ((type === 3 && !whiteSpaceRegExp.test(node.nodeValue))) { + return false; + } + } while ((node = walker.next())); + } + + return brCount <= 1; + }, + + /** + * Creates a new DOM Range object. This will use the native DOM Range API if it's + * available. If it's not, it will fall back to the custom TinyMCE implementation. + * + * @method createRng + * @return {DOMRange} DOM Range object. + * @example + * var rng = tinymce.DOM.createRng(); + * alert(rng.startContainer + "," + rng.startOffset); + */ + createRng: function() { + var doc = this.doc; + + return doc.createRange ? doc.createRange() : new Range(this); + }, + + /** + * Returns the index of the specified node within its parent. + * + * @method nodeIndex + * @param {Node} node Node to look for. + * @param {boolean} normalized Optional true/false state if the index is what it would be after a normalization. + * @return {Number} Index of the specified node. + */ + nodeIndex: function(node, normalized) { + var idx = 0, lastNodeType, nodeType; + + if (node) { + for (lastNodeType = node.nodeType, node = node.previousSibling; node; node = node.previousSibling) { + nodeType = node.nodeType; + + // Normalize text nodes + if (normalized && nodeType == 3) { + if (nodeType == lastNodeType || !node.nodeValue.length) { + continue; + } + } + idx++; + lastNodeType = nodeType; + } + } + + return idx; + }, + + /** + * Splits an element into two new elements and places the specified split + * element or elements between the new ones. For example splitting the paragraph at the bold element in + * this example

    abcabc123

    would produce

    abc

    abc

    123

    . + * + * @method split + * @param {Element} parentElm Parent element to split. + * @param {Element} splitElm Element to split at. + * @param {Element} replacementElm Optional replacement element to replace the split element with. + * @return {Element} Returns the split element or the replacement element if that is specified. + */ + split: function(parentElm, splitElm, replacementElm) { + var self = this, r = self.createRng(), bef, aft, pa; + + // W3C valid browsers tend to leave empty nodes to the left/right side of the contents - this makes sense + // but we don't want that in our code since it serves no purpose for the end user + // For example splitting this html at the bold element: + //

    text 1CHOPtext 2

    + // would produce: + //

    text 1

    CHOP

    text 2

    + // this function will then trim off empty edges and produce: + //

    text 1

    CHOP

    text 2

    + function trimNode(node) { + var i, children = node.childNodes, type = node.nodeType; + + function surroundedBySpans(node) { + var previousIsSpan = node.previousSibling && node.previousSibling.nodeName == 'SPAN'; + var nextIsSpan = node.nextSibling && node.nextSibling.nodeName == 'SPAN'; + return previousIsSpan && nextIsSpan; + } + + if (type == 1 && node.getAttribute('data-mce-type') == 'bookmark') { + return; + } + + for (i = children.length - 1; i >= 0; i--) { + trimNode(children[i]); + } + + if (type != 9) { + // Keep non whitespace text nodes + if (type == 3 && node.nodeValue.length > 0) { + // If parent element isn't a block or there isn't any useful contents for example "

    " + // Also keep text nodes with only spaces if surrounded by spans. + // eg. "

    a b

    " should keep space between a and b + var trimmedLength = trim(node.nodeValue).length; + if (!self.isBlock(node.parentNode) || trimmedLength > 0 || trimmedLength === 0 && surroundedBySpans(node)) { + return; + } + } else if (type == 1) { + // If the only child is a bookmark then move it up + children = node.childNodes; + + // TODO fix this complex if + if (children.length == 1 && children[0] && children[0].nodeType == 1 && + children[0].getAttribute('data-mce-type') == 'bookmark') { + node.parentNode.insertBefore(children[0], node); + } + + // Keep non empty elements or img, hr etc + if (children.length || /^(br|hr|input|img)$/i.test(node.nodeName)) { + return; + } + } + + self.remove(node); + } + + return node; + } + + if (parentElm && splitElm) { + // Get before chunk + r.setStart(parentElm.parentNode, self.nodeIndex(parentElm)); + r.setEnd(splitElm.parentNode, self.nodeIndex(splitElm)); + bef = r.extractContents(); + + // Get after chunk + r = self.createRng(); + r.setStart(splitElm.parentNode, self.nodeIndex(splitElm) + 1); + r.setEnd(parentElm.parentNode, self.nodeIndex(parentElm) + 1); + aft = r.extractContents(); + + // Insert before chunk + pa = parentElm.parentNode; + pa.insertBefore(trimNode(bef), parentElm); + + // Insert middle chunk + if (replacementElm) { + pa.replaceChild(replacementElm, splitElm); + } else { + pa.insertBefore(splitElm, parentElm); + } + + // Insert after chunk + pa.insertBefore(trimNode(aft), parentElm); + self.remove(parentElm); + + return replacementElm || splitElm; + } + }, + + /** + * Adds an event handler to the specified object. + * + * @method bind + * @param {Element/Document/Window/Array} target Target element to bind events to. + * handler to or an array of elements/ids/documents. + * @param {String} name Name of event handler to add, for example: click. + * @param {function} func Function to execute when the event occurs. + * @param {Object} scope Optional scope to execute the function in. + * @return {function} Function callback handler the same as the one passed in. + */ + bind: function(target, name, func, scope) { + var self = this; + + if (Tools.isArray(target)) { + var i = target.length; + + while (i--) { + target[i] = self.bind(target[i], name, func, scope); + } + + return target; + } + + // Collect all window/document events bound by editor instance + if (self.settings.collect && (target === self.doc || target === self.win)) { + self.boundEvents.push([target, name, func, scope]); + } + + return self.events.bind(target, name, func, scope || self); + }, + + /** + * Removes the specified event handler by name and function from an element or collection of elements. + * + * @method unbind + * @param {Element/Document/Window/Array} target Target element to unbind events on. + * @param {String} name Event handler name, for example: "click" + * @param {function} func Function to remove. + * @return {bool/Array} Bool state of true if the handler was removed, or an array of states if multiple input elements + * were passed in. + */ + unbind: function(target, name, func) { + var self = this, i; + + if (Tools.isArray(target)) { + i = target.length; + + while (i--) { + target[i] = self.unbind(target[i], name, func); + } + + return target; + } + + // Remove any bound events matching the input + if (self.boundEvents && (target === self.doc || target === self.win)) { + i = self.boundEvents.length; + + while (i--) { + var item = self.boundEvents[i]; + + if (target == item[0] && (!name || name == item[1]) && (!func || func == item[2])) { + this.events.unbind(item[0], item[1], item[2]); + } + } + } + + return this.events.unbind(target, name, func); + }, + + /** + * Fires the specified event name with object on target. + * + * @method fire + * @param {Node/Document/Window} target Target element or object to fire event on. + * @param {String} name Name of the event to fire. + * @param {Object} evt Event object to send. + * @return {Event} Event object. + */ + fire: function(target, name, evt) { + return this.events.fire(target, name, evt); + }, + + // Returns the content editable state of a node + getContentEditable: function(node) { + var contentEditable; + + // Check type + if (node.nodeType != 1) { + return null; + } + + // Check for fake content editable + contentEditable = node.getAttribute("data-mce-contenteditable"); + if (contentEditable && contentEditable !== "inherit") { + return contentEditable; + } + + // Check for real content editable + return node.contentEditable !== "inherit" ? node.contentEditable : null; + }, + + /** + * Destroys all internal references to the DOM to solve IE leak issues. + * + * @method destroy + */ + destroy: function() { + var self = this; + + // Unbind all events bound to window/document by editor instance + if (self.boundEvents) { + var i = self.boundEvents.length; + + while (i--) { + var item = self.boundEvents[i]; + this.events.unbind(item[0], item[1], item[2]); + } + + self.boundEvents = null; + } + + // Restore sizzle document to window.document + // Since the current document might be removed producing "Permission denied" on IE see #6325 + if (Sizzle.setDocument) { + Sizzle.setDocument(); + } + + self.win = self.doc = self.root = self.events = self.frag = null; + }, + + // #ifdef debug + + dumpRng: function(r) { + return ( + 'startContainer: ' + r.startContainer.nodeName + + ', startOffset: ' + r.startOffset + + ', endContainer: ' + r.endContainer.nodeName + + ', endOffset: ' + r.endOffset + ); + }, + + // #endif + + _findSib: function(node, selector, name) { + var self = this, func = selector; + + if (node) { + // If expression make a function of it using is + if (typeof(func) == 'string') { + func = function(node) { + return self.is(node, selector); + }; + } + + // Loop all siblings + for (node = node[name]; node; node = node[name]) { + if (func(node)) { + return node; + } + } + } + + return null; + } + }; + + /** + * Instance of DOMUtils for the current document. + * + * @static + * @property DOM + * @type tinymce.dom.DOMUtils + * @example + * // Example of how to add a class to some element by id + * tinymce.DOM.addClass('someid', 'someclass'); + */ + DOMUtils.DOM = new DOMUtils(document); + + return DOMUtils; +}); + +// Included from: js/tinymce/classes/dom/ScriptLoader.js + +/** + * ScriptLoader.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*globals console*/ + +/** + * This class handles asynchronous/synchronous loading of JavaScript files it will execute callbacks + * when various items gets loaded. This class is useful to load external JavaScript files. + * + * @class tinymce.dom.ScriptLoader + * @example + * // Load a script from a specific URL using the global script loader + * tinymce.ScriptLoader.load('somescript.js'); + * + * // Load a script using a unique instance of the script loader + * var scriptLoader = new tinymce.dom.ScriptLoader(); + * + * scriptLoader.load('somescript.js'); + * + * // Load multiple scripts + * var scriptLoader = new tinymce.dom.ScriptLoader(); + * + * scriptLoader.add('somescript1.js'); + * scriptLoader.add('somescript2.js'); + * scriptLoader.add('somescript3.js'); + * + * scriptLoader.loadQueue(function() { + * alert('All scripts are now loaded.'); + * }); + */ +define("tinymce/dom/ScriptLoader", [ + "tinymce/dom/DOMUtils", + "tinymce/util/Tools" +], function(DOMUtils, Tools) { + var DOM = DOMUtils.DOM; + var each = Tools.each, grep = Tools.grep; + + function ScriptLoader() { + var QUEUED = 0, + LOADING = 1, + LOADED = 2, + states = {}, + queue = [], + scriptLoadedCallbacks = {}, + queueLoadedCallbacks = [], + loading = 0, + undef; + + /** + * Loads a specific script directly without adding it to the load queue. + * + * @method load + * @param {String} url Absolute URL to script to add. + * @param {function} callback Optional callback function to execute ones this script gets loaded. + * @param {Object} scope Optional scope to execute callback in. + */ + function loadScript(url, callback) { + var dom = DOM, elm, id; + + // Execute callback when script is loaded + function done() { + dom.remove(id); + + if (elm) { + elm.onreadystatechange = elm.onload = elm = null; + } + + callback(); + } + + function error() { + /*eslint no-console:0 */ + + // Report the error so it's easier for people to spot loading errors + if (typeof(console) !== "undefined" && console.log) { + console.log("Failed to load: " + url); + } + + // We can't mark it as done if there is a load error since + // A) We don't want to produce 404 errors on the server and + // B) the onerror event won't fire on all browsers. + // done(); + } + + id = dom.uniqueId(); + + // Create new script element + elm = document.createElement('script'); + elm.id = id; + elm.type = 'text/javascript'; + elm.src = url; + + // Seems that onreadystatechange works better on IE 10 onload seems to fire incorrectly + if ("onreadystatechange" in elm) { + elm.onreadystatechange = function() { + if (/loaded|complete/.test(elm.readyState)) { + done(); + } + }; + } else { + elm.onload = done; + } + + // Add onerror event will get fired on some browsers but not all of them + elm.onerror = error; + + // Add script to document + (document.getElementsByTagName('head')[0] || document.body).appendChild(elm); + } + + /** + * Returns true/false if a script has been loaded or not. + * + * @method isDone + * @param {String} url URL to check for. + * @return {Boolean} true/false if the URL is loaded. + */ + this.isDone = function(url) { + return states[url] == LOADED; + }; + + /** + * Marks a specific script to be loaded. This can be useful if a script got loaded outside + * the script loader or to skip it from loading some script. + * + * @method markDone + * @param {string} u Absolute URL to the script to mark as loaded. + */ + this.markDone = function(url) { + states[url] = LOADED; + }; + + /** + * Adds a specific script to the load queue of the script loader. + * + * @method add + * @param {String} url Absolute URL to script to add. + * @param {function} callback Optional callback function to execute ones this script gets loaded. + * @param {Object} scope Optional scope to execute callback in. + */ + this.add = this.load = function(url, callback, scope) { + var state = states[url]; + + // Add url to load queue + if (state == undef) { + queue.push(url); + states[url] = QUEUED; + } + + if (callback) { + // Store away callback for later execution + if (!scriptLoadedCallbacks[url]) { + scriptLoadedCallbacks[url] = []; + } + + scriptLoadedCallbacks[url].push({ + func: callback, + scope: scope || this + }); + } + }; + + /** + * Starts the loading of the queue. + * + * @method loadQueue + * @param {function} callback Optional callback to execute when all queued items are loaded. + * @param {Object} scope Optional scope to execute the callback in. + */ + this.loadQueue = function(callback, scope) { + this.loadScripts(queue, callback, scope); + }; + + /** + * Loads the specified queue of files and executes the callback ones they are loaded. + * This method is generally not used outside this class but it might be useful in some scenarios. + * + * @method loadScripts + * @param {Array} scripts Array of queue items to load. + * @param {function} callback Optional callback to execute ones all items are loaded. + * @param {Object} scope Optional scope to execute callback in. + */ + this.loadScripts = function(scripts, callback, scope) { + var loadScripts; + + function execScriptLoadedCallbacks(url) { + // Execute URL callback functions + each(scriptLoadedCallbacks[url], function(callback) { + callback.func.call(callback.scope); + }); + + scriptLoadedCallbacks[url] = undef; + } + + queueLoadedCallbacks.push({ + func: callback, + scope: scope || this + }); + + loadScripts = function() { + var loadingScripts = grep(scripts); + + // Current scripts has been handled + scripts.length = 0; + + // Load scripts that needs to be loaded + each(loadingScripts, function(url) { + // Script is already loaded then execute script callbacks directly + if (states[url] == LOADED) { + execScriptLoadedCallbacks(url); + return; + } + + // Is script not loading then start loading it + if (states[url] != LOADING) { + states[url] = LOADING; + loading++; + + loadScript(url, function() { + states[url] = LOADED; + loading--; + + execScriptLoadedCallbacks(url); + + // Load more scripts if they where added by the recently loaded script + loadScripts(); + }); + } + }); + + // No scripts are currently loading then execute all pending queue loaded callbacks + if (!loading) { + each(queueLoadedCallbacks, function(callback) { + callback.func.call(callback.scope); + }); + + queueLoadedCallbacks.length = 0; + } + }; + + loadScripts(); + }; + } + + ScriptLoader.ScriptLoader = new ScriptLoader(); + + return ScriptLoader; +}); + +// Included from: js/tinymce/classes/AddOnManager.js + +/** + * AddOnManager.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class handles the loading of themes/plugins or other add-ons and their language packs. + * + * @class tinymce.AddOnManager + */ +define("tinymce/AddOnManager", [ + "tinymce/dom/ScriptLoader", + "tinymce/util/Tools" +], function(ScriptLoader, Tools) { + var each = Tools.each; + + function AddOnManager() { + var self = this; + + self.items = []; + self.urls = {}; + self.lookup = {}; + } + + AddOnManager.prototype = { + /** + * Returns the specified add on by the short name. + * + * @method get + * @param {String} name Add-on to look for. + * @return {tinymce.Theme/tinymce.Plugin} Theme or plugin add-on instance or undefined. + */ + get: function(name) { + if (this.lookup[name]) { + return this.lookup[name].instance; + } else { + return undefined; + } + }, + + dependencies: function(name) { + var result; + + if (this.lookup[name]) { + result = this.lookup[name].dependencies; + } + + return result || []; + }, + + /** + * Loads a language pack for the specified add-on. + * + * @method requireLangPack + * @param {String} name Short name of the add-on. + * @param {String} languages Optional comma or space separated list of languages to check if it matches the name. + */ + requireLangPack: function(name, languages) { + if (AddOnManager.language && AddOnManager.languageLoad !== false) { + if (languages && new RegExp('([, ]|\\b)' + AddOnManager.language + '([, ]|\\b)').test(languages) === false) { + return; + } + + ScriptLoader.ScriptLoader.add(this.urls[name] + '/langs/' + AddOnManager.language + '.js'); + } + }, + + /** + * Adds a instance of the add-on by it's short name. + * + * @method add + * @param {String} id Short name/id for the add-on. + * @param {tinymce.Theme/tinymce.Plugin} addOn Theme or plugin to add. + * @return {tinymce.Theme/tinymce.Plugin} The same theme or plugin instance that got passed in. + * @example + * // Create a simple plugin + * tinymce.create('tinymce.plugins.TestPlugin', { + * TestPlugin: function(ed, url) { + * ed.on('click', function(e) { + * ed.windowManager.alert('Hello World!'); + * }); + * } + * }); + * + * // Register plugin using the add method + * tinymce.PluginManager.add('test', tinymce.plugins.TestPlugin); + * + * // Initialize TinyMCE + * tinymce.init({ + * ... + * plugins: '-test' // Init the plugin but don't try to load it + * }); + */ + add: function(id, addOn, dependencies) { + this.items.push(addOn); + this.lookup[id] = {instance: addOn, dependencies: dependencies}; + + return addOn; + }, + + createUrl: function(baseUrl, dep) { + if (typeof dep === "object") { + return dep; + } else { + return {prefix: baseUrl.prefix, resource: dep, suffix: baseUrl.suffix}; + } + }, + + /** + * Add a set of components that will make up the add-on. Using the url of the add-on name as the base url. + * This should be used in development mode. A new compressor/javascript munger process will ensure that the + * components are put together into the plugin.js file and compressed correctly. + * + * @method addComponents + * @param {String} pluginName name of the plugin to load scripts from (will be used to get the base url for the plugins). + * @param {Array} scripts Array containing the names of the scripts to load. + */ + addComponents: function(pluginName, scripts) { + var pluginUrl = this.urls[pluginName]; + + each(scripts, function(script) { + ScriptLoader.ScriptLoader.add(pluginUrl + "/" + script); + }); + }, + + /** + * Loads an add-on from a specific url. + * + * @method load + * @param {String} name Short name of the add-on that gets loaded. + * @param {String} addOnUrl URL to the add-on that will get loaded. + * @param {function} callback Optional callback to execute ones the add-on is loaded. + * @param {Object} scope Optional scope to execute the callback in. + * @example + * // Loads a plugin from an external URL + * tinymce.PluginManager.load('myplugin', '/some/dir/someplugin/plugin.js'); + * + * // Initialize TinyMCE + * tinymce.init({ + * ... + * plugins: '-myplugin' // Don't try to load it again + * }); + */ + load: function(name, addOnUrl, callback, scope) { + var self = this, url = addOnUrl; + + function loadDependencies() { + var dependencies = self.dependencies(name); + + each(dependencies, function(dep) { + var newUrl = self.createUrl(addOnUrl, dep); + + self.load(newUrl.resource, newUrl, undefined, undefined); + }); + + if (callback) { + if (scope) { + callback.call(scope); + } else { + callback.call(ScriptLoader); + } + } + } + + if (self.urls[name]) { + return; + } + + if (typeof addOnUrl === "object") { + url = addOnUrl.prefix + addOnUrl.resource + addOnUrl.suffix; + } + + if (url.indexOf('/') !== 0 && url.indexOf('://') == -1) { + url = AddOnManager.baseURL + '/' + url; + } + + self.urls[name] = url.substring(0, url.lastIndexOf('/')); + + if (self.lookup[name]) { + loadDependencies(); + } else { + ScriptLoader.ScriptLoader.add(url, loadDependencies, scope); + } + } + }; + + AddOnManager.PluginManager = new AddOnManager(); + AddOnManager.ThemeManager = new AddOnManager(); + + return AddOnManager; +}); + +/** + * TinyMCE theme class. + * + * @class tinymce.Theme + */ + +/** + * This method is responsible for rendering/generating the overall user interface with toolbars, buttons, iframe containers etc. + * + * @method renderUI + * @param {Object} obj Object parameter containing the targetNode DOM node that will be replaced visually with an editor instance. + * @return {Object} an object with items like iframeContainer, editorContainer, sizeContainer, deltaWidth, deltaHeight. + */ + +/** + * Plugin base class, this is a pseudo class that describes how a plugin is to be created for TinyMCE. The methods below are all optional. + * + * @class tinymce.Plugin + * @example + * tinymce.PluginManager.add('example', function(editor, url) { + * // Add a button that opens a window + * editor.addButton('example', { + * text: 'My button', + * icon: false, + * onclick: function() { + * // Open window + * editor.windowManager.open({ + * title: 'Example plugin', + * body: [ + * {type: 'textbox', name: 'title', label: 'Title'} + * ], + * onsubmit: function(e) { + * // Insert content when the window form is submitted + * editor.insertContent('Title: ' + e.data.title); + * } + * }); + * } + * }); + * + * // Adds a menu item to the tools menu + * editor.addMenuItem('example', { + * text: 'Example plugin', + * context: 'tools', + * onclick: function() { + * // Open window with a specific url + * editor.windowManager.open({ + * title: 'TinyMCE site', + * url: 'http://www.tinymce.com', + * width: 800, + * height: 600, + * buttons: [{ + * text: 'Close', + * onclick: 'close' + * }] + * }); + * } + * }); + * }); + */ + +// Included from: js/tinymce/classes/html/Node.js + +/** + * Node.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class is a minimalistic implementation of a DOM like node used by the DomParser class. + * + * @example + * var node = new tinymce.html.Node('strong', 1); + * someRoot.append(node); + * + * @class tinymce.html.Node + * @version 3.4 + */ +define("tinymce/html/Node", [], function() { + var whiteSpaceRegExp = /^[ \t\r\n]*$/, typeLookup = { + '#text': 3, + '#comment': 8, + '#cdata': 4, + '#pi': 7, + '#doctype': 10, + '#document-fragment': 11 + }; + + // Walks the tree left/right + function walk(node, root_node, prev) { + var sibling, parent, startName = prev ? 'lastChild' : 'firstChild', siblingName = prev ? 'prev' : 'next'; + + // Walk into nodes if it has a start + if (node[startName]) { + return node[startName]; + } + + // Return the sibling if it has one + if (node !== root_node) { + sibling = node[siblingName]; + + if (sibling) { + return sibling; + } + + // Walk up the parents to look for siblings + for (parent = node.parent; parent && parent !== root_node; parent = parent.parent) { + sibling = parent[siblingName]; + + if (sibling) { + return sibling; + } + } + } + } + + /** + * Constructs a new Node instance. + * + * @constructor + * @method Node + * @param {String} name Name of the node type. + * @param {Number} type Numeric type representing the node. + */ + function Node(name, type) { + this.name = name; + this.type = type; + + if (type === 1) { + this.attributes = []; + this.attributes.map = {}; + } + } + + Node.prototype = { + /** + * Replaces the current node with the specified one. + * + * @example + * someNode.replace(someNewNode); + * + * @method replace + * @param {tinymce.html.Node} node Node to replace the current node with. + * @return {tinymce.html.Node} The old node that got replaced. + */ + replace: function(node) { + var self = this; + + if (node.parent) { + node.remove(); + } + + self.insert(node, self); + self.remove(); + + return self; + }, + + /** + * Gets/sets or removes an attribute by name. + * + * @example + * someNode.attr("name", "value"); // Sets an attribute + * console.log(someNode.attr("name")); // Gets an attribute + * someNode.attr("name", null); // Removes an attribute + * + * @method attr + * @param {String} name Attribute name to set or get. + * @param {String} value Optional value to set. + * @return {String/tinymce.html.Node} String or undefined on a get operation or the current node on a set operation. + */ + attr: function(name, value) { + var self = this, attrs, i, undef; + + if (typeof name !== "string") { + for (i in name) { + self.attr(i, name[i]); + } + + return self; + } + + if ((attrs = self.attributes)) { + if (value !== undef) { + // Remove attribute + if (value === null) { + if (name in attrs.map) { + delete attrs.map[name]; + + i = attrs.length; + while (i--) { + if (attrs[i].name === name) { + attrs = attrs.splice(i, 1); + return self; + } + } + } + + return self; + } + + // Set attribute + if (name in attrs.map) { + // Set attribute + i = attrs.length; + while (i--) { + if (attrs[i].name === name) { + attrs[i].value = value; + break; + } + } + } else { + attrs.push({name: name, value: value}); + } + + attrs.map[name] = value; + + return self; + } else { + return attrs.map[name]; + } + } + }, + + /** + * Does a shallow clones the node into a new node. It will also exclude id attributes since + * there should only be one id per document. + * + * @example + * var clonedNode = node.clone(); + * + * @method clone + * @return {tinymce.html.Node} New copy of the original node. + */ + clone: function() { + var self = this, clone = new Node(self.name, self.type), i, l, selfAttrs, selfAttr, cloneAttrs; + + // Clone element attributes + if ((selfAttrs = self.attributes)) { + cloneAttrs = []; + cloneAttrs.map = {}; + + for (i = 0, l = selfAttrs.length; i < l; i++) { + selfAttr = selfAttrs[i]; + + // Clone everything except id + if (selfAttr.name !== 'id') { + cloneAttrs[cloneAttrs.length] = {name: selfAttr.name, value: selfAttr.value}; + cloneAttrs.map[selfAttr.name] = selfAttr.value; + } + } + + clone.attributes = cloneAttrs; + } + + clone.value = self.value; + clone.shortEnded = self.shortEnded; + + return clone; + }, + + /** + * Wraps the node in in another node. + * + * @example + * node.wrap(wrapperNode); + * + * @method wrap + */ + wrap: function(wrapper) { + var self = this; + + self.parent.insert(wrapper, self); + wrapper.append(self); + + return self; + }, + + /** + * Unwraps the node in other words it removes the node but keeps the children. + * + * @example + * node.unwrap(); + * + * @method unwrap + */ + unwrap: function() { + var self = this, node, next; + + for (node = self.firstChild; node; ) { + next = node.next; + self.insert(node, self, true); + node = next; + } + + self.remove(); + }, + + /** + * Removes the node from it's parent. + * + * @example + * node.remove(); + * + * @method remove + * @return {tinymce.html.Node} Current node that got removed. + */ + remove: function() { + var self = this, parent = self.parent, next = self.next, prev = self.prev; + + if (parent) { + if (parent.firstChild === self) { + parent.firstChild = next; + + if (next) { + next.prev = null; + } + } else { + prev.next = next; + } + + if (parent.lastChild === self) { + parent.lastChild = prev; + + if (prev) { + prev.next = null; + } + } else { + next.prev = prev; + } + + self.parent = self.next = self.prev = null; + } + + return self; + }, + + /** + * Appends a new node as a child of the current node. + * + * @example + * node.append(someNode); + * + * @method append + * @param {tinymce.html.Node} node Node to append as a child of the current one. + * @return {tinymce.html.Node} The node that got appended. + */ + append: function(node) { + var self = this, last; + + if (node.parent) { + node.remove(); + } + + last = self.lastChild; + if (last) { + last.next = node; + node.prev = last; + self.lastChild = node; + } else { + self.lastChild = self.firstChild = node; + } + + node.parent = self; + + return node; + }, + + /** + * Inserts a node at a specific position as a child of the current node. + * + * @example + * parentNode.insert(newChildNode, oldChildNode); + * + * @method insert + * @param {tinymce.html.Node} node Node to insert as a child of the current node. + * @param {tinymce.html.Node} ref_node Reference node to set node before/after. + * @param {Boolean} before Optional state to insert the node before the reference node. + * @return {tinymce.html.Node} The node that got inserted. + */ + insert: function(node, ref_node, before) { + var parent; + + if (node.parent) { + node.remove(); + } + + parent = ref_node.parent || this; + + if (before) { + if (ref_node === parent.firstChild) { + parent.firstChild = node; + } else { + ref_node.prev.next = node; + } + + node.prev = ref_node.prev; + node.next = ref_node; + ref_node.prev = node; + } else { + if (ref_node === parent.lastChild) { + parent.lastChild = node; + } else { + ref_node.next.prev = node; + } + + node.next = ref_node.next; + node.prev = ref_node; + ref_node.next = node; + } + + node.parent = parent; + + return node; + }, + + /** + * Get all children by name. + * + * @method getAll + * @param {String} name Name of the child nodes to collect. + * @return {Array} Array with child nodes matchin the specified name. + */ + getAll: function(name) { + var self = this, node, collection = []; + + for (node = self.firstChild; node; node = walk(node, self)) { + if (node.name === name) { + collection.push(node); + } + } + + return collection; + }, + + /** + * Removes all children of the current node. + * + * @method empty + * @return {tinymce.html.Node} The current node that got cleared. + */ + empty: function() { + var self = this, nodes, i, node; + + // Remove all children + if (self.firstChild) { + nodes = []; + + // Collect the children + for (node = self.firstChild; node; node = walk(node, self)) { + nodes.push(node); + } + + // Remove the children + i = nodes.length; + while (i--) { + node = nodes[i]; + node.parent = node.firstChild = node.lastChild = node.next = node.prev = null; + } + } + + self.firstChild = self.lastChild = null; + + return self; + }, + + /** + * Returns true/false if the node is to be considered empty or not. + * + * @example + * node.isEmpty({img: true}); + * @method isEmpty + * @param {Object} elements Name/value object with elements that are automatically treated as non empty elements. + * @return {Boolean} true/false if the node is empty or not. + */ + isEmpty: function(elements) { + var self = this, node = self.firstChild, i, name; + + if (node) { + do { + if (node.type === 1) { + // Ignore bogus elements + if (node.attributes.map['data-mce-bogus']) { + continue; + } + + // Keep empty elements like + if (elements[node.name]) { + return false; + } + + // Keep elements with data attributes or name attribute like + i = node.attributes.length; + while (i--) { + name = node.attributes[i].name; + if (name === "name" || name.indexOf('data-mce-') === 0) { + return false; + } + } + } + + // Keep comments + if (node.type === 8) { + return false; + } + + // Keep non whitespace text nodes + if ((node.type === 3 && !whiteSpaceRegExp.test(node.value))) { + return false; + } + } while ((node = walk(node, self))); + } + + return true; + }, + + /** + * Walks to the next or previous node and returns that node or null if it wasn't found. + * + * @method walk + * @param {Boolean} prev Optional previous node state defaults to false. + * @return {tinymce.html.Node} Node that is next to or previous of the current node. + */ + walk: function(prev) { + return walk(this, null, prev); + } + }; + + /** + * Creates a node of a specific type. + * + * @static + * @method create + * @param {String} name Name of the node type to create for example "b" or "#text". + * @param {Object} attrs Name/value collection of attributes that will be applied to elements. + */ + Node.create = function(name, attrs) { + var node, attrName; + + // Create node + node = new Node(name, typeLookup[name] || 1); + + // Add attributes if needed + if (attrs) { + for (attrName in attrs) { + node.attr(attrName, attrs[attrName]); + } + } + + return node; + }; + + return Node; +}); + +// Included from: js/tinymce/classes/html/Schema.js + +/** + * Schema.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Schema validator class. + * + * @class tinymce.html.Schema + * @example + * if (tinymce.activeEditor.schema.isValidChild('p', 'span')) + * alert('span is valid child of p.'); + * + * if (tinymce.activeEditor.schema.getElementRule('p')) + * alert('P is a valid element.'); + * + * @class tinymce.html.Schema + * @version 3.4 + */ +define("tinymce/html/Schema", [ + "tinymce/util/Tools" +], function(Tools) { + var mapCache = {}; + var makeMap = Tools.makeMap, each = Tools.each, extend = Tools.extend, explode = Tools.explode, inArray = Tools.inArray; + + function split(items, delim) { + return items ? items.split(delim || ' ') : []; + } + + /** + * Builds a schema lookup table + * + * @private + * @param {String} type html4, html5 or html5-strict schema type. + * @return {Object} Schema lookup table. + */ + function compileSchema(type) { + var schema = {}, globalAttributes, blockContent; + var phrasingContent, flowContent, html4BlockContent, html4PhrasingContent; + + function add(name, attributes, children) { + var ni, i, attributesOrder, args = arguments; + + function arrayToMap(array) { + var map = {}, i, l; + + for (i = 0, l = array.length; i < l; i++) { + map[array[i]] = {}; + } + + return map; + } + + children = children || []; + attributes = attributes || ""; + + if (typeof(children) === "string") { + children = split(children); + } + + // Split string children + for (i = 3; i < args.length; i++) { + if (typeof(args[i]) === "string") { + args[i] = split(args[i]); + } + + children.push.apply(children, args[i]); + } + + name = split(name); + ni = name.length; + while (ni--) { + attributesOrder = [].concat(globalAttributes, split(attributes)); + schema[name[ni]] = { + attributes: arrayToMap(attributesOrder), + attributesOrder: attributesOrder, + children: arrayToMap(children) + }; + } + } + + function addAttrs(name, attributes) { + var ni, schemaItem, i, l; + + name = split(name); + ni = name.length; + attributes = split(attributes); + while (ni--) { + schemaItem = schema[name[ni]]; + for (i = 0, l = attributes.length; i < l; i++) { + schemaItem.attributes[attributes[i]] = {}; + schemaItem.attributesOrder.push(attributes[i]); + } + } + } + + // Use cached schema + if (mapCache[type]) { + return mapCache[type]; + } + + // Attributes present on all elements + globalAttributes = split("id accesskey class dir lang style tabindex title"); + + // Event attributes can be opt-in/opt-out + /*eventAttributes = split("onabort onblur oncancel oncanplay oncanplaythrough onchange onclick onclose oncontextmenu oncuechange " + + "ondblclick ondrag ondragend ondragenter ondragleave ondragover ondragstart ondrop ondurationchange onemptied onended " + + "onerror onfocus oninput oninvalid onkeydown onkeypress onkeyup onload onloadeddata onloadedmetadata onloadstart " + + "onmousedown onmousemove onmouseout onmouseover onmouseup onmousewheel onpause onplay onplaying onprogress onratechange " + + "onreset onscroll onseeked onseeking onseeking onselect onshow onstalled onsubmit onsuspend ontimeupdate onvolumechange " + + "onwaiting" + );*/ + + // Block content elements + blockContent = split( + "address blockquote div dl fieldset form h1 h2 h3 h4 h5 h6 hr menu ol p pre table ul" + ); + + // Phrasing content elements from the HTML5 spec (inline) + phrasingContent = split( + "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" + ); + + // Add HTML5 items to globalAttributes, blockContent, phrasingContent + if (type != "html4") { + globalAttributes.push.apply(globalAttributes, split("contenteditable contextmenu draggable dropzone " + + "hidden spellcheck translate")); + blockContent.push.apply(blockContent, split("article aside details dialog figure header footer hgroup section nav")); + phrasingContent.push.apply(phrasingContent, split("audio canvas command datalist mark meter output progress time wbr " + + "video ruby bdi keygen")); + } + + // Add HTML4 elements unless it's html5-strict + if (type != "html5-strict") { + globalAttributes.push("xml:lang"); + + html4PhrasingContent = split("acronym applet basefont big font strike tt"); + phrasingContent.push.apply(phrasingContent, html4PhrasingContent); + + each(html4PhrasingContent, function(name) { + add(name, "", phrasingContent); + }); + + html4BlockContent = split("center dir isindex noframes"); + blockContent.push.apply(blockContent, html4BlockContent); + + // Flow content elements from the HTML5 spec (block+inline) + flowContent = [].concat(blockContent, phrasingContent); + + each(html4BlockContent, function(name) { + add(name, "", flowContent); + }); + } + + // Flow content elements from the HTML5 spec (block+inline) + flowContent = flowContent || [].concat(blockContent, phrasingContent); + + // HTML4 base schema TODO: Move HTML5 specific attributes to HTML5 specific if statement + // Schema items , , + add("html", "manifest", "head body"); + add("head", "", "base command link meta noscript script style title"); + add("title hr noscript br"); + add("base", "href target"); + add("link", "href rel media hreflang type sizes hreflang"); + add("meta", "name http-equiv content charset"); + add("style", "media type scoped"); + add("script", "src async defer type charset"); + add("body", "onafterprint onbeforeprint onbeforeunload onblur onerror onfocus " + + "onhashchange onload onmessage onoffline ononline onpagehide onpageshow " + + "onpopstate onresize onscroll onstorage onunload", flowContent); + add("address dt dd div caption", "", flowContent); + add("h1 h2 h3 h4 h5 h6 pre p abbr code var samp kbd sub sup i b u bdo span legend em strong small s cite dfn", "", phrasingContent); + add("blockquote", "cite", flowContent); + add("ol", "reversed start type", "li"); + add("ul", "", "li"); + add("li", "value", flowContent); + add("dl", "", "dt dd"); + add("a", "href target rel media hreflang type", phrasingContent); + add("q", "cite", phrasingContent); + add("ins del", "cite datetime", flowContent); + add("img", "src alt usemap ismap width height"); + add("iframe", "src name width height", flowContent); + add("embed", "src type width height"); + add("object", "data type typemustmatch name usemap form width height", flowContent, "param"); + add("param", "name value"); + add("map", "name", flowContent, "area"); + add("area", "alt coords shape href target rel media hreflang type"); + add("table", "border", "caption colgroup thead tfoot tbody tr" + (type == "html4" ? " col" : "")); + add("colgroup", "span", "col"); + add("col", "span"); + add("tbody thead tfoot", "", "tr"); + add("tr", "", "td th"); + add("td", "colspan rowspan headers", flowContent); + add("th", "colspan rowspan headers scope abbr", flowContent); + add("form", "accept-charset action autocomplete enctype method name novalidate target", flowContent); + add("fieldset", "disabled form name", flowContent, "legend"); + add("label", "form for", phrasingContent); + add("input", "accept alt autocomplete checked dirname disabled form formaction formenctype formmethod formnovalidate " + + "formtarget height list max maxlength min multiple name pattern readonly required size src step type value width" + ); + add("button", "disabled form formaction formenctype formmethod formnovalidate formtarget name type value", + type == "html4" ? flowContent : phrasingContent); + add("select", "disabled form multiple name required size", "option optgroup"); + add("optgroup", "disabled label", "option"); + add("option", "disabled label selected value"); + add("textarea", "cols dirname disabled form maxlength name readonly required rows wrap"); + add("menu", "type label", flowContent, "li"); + add("noscript", "", flowContent); + + // Extend with HTML5 elements + if (type != "html4") { + add("wbr"); + add("ruby", "", phrasingContent, "rt rp"); + add("figcaption", "", flowContent); + add("mark rt rp summary bdi", "", phrasingContent); + add("canvas", "width height", flowContent); + add("video", "src crossorigin poster preload autoplay mediagroup loop " + + "muted controls width height", flowContent, "track source"); + add("audio", "src crossorigin preload autoplay mediagroup loop muted controls", flowContent, "track source"); + add("source", "src type media"); + add("track", "kind src srclang label default"); + add("datalist", "", phrasingContent, "option"); + add("article section nav aside header footer", "", flowContent); + add("hgroup", "", "h1 h2 h3 h4 h5 h6"); + add("figure", "", flowContent, "figcaption"); + add("time", "datetime", phrasingContent); + add("dialog", "open", flowContent); + add("command", "type label icon disabled checked radiogroup command"); + add("output", "for form name", phrasingContent); + add("progress", "value max", phrasingContent); + add("meter", "value min max low high optimum", phrasingContent); + add("details", "open", flowContent, "summary"); + add("keygen", "autofocus challenge disabled form keytype name"); + } + + // Extend with HTML4 attributes unless it's html5-strict + if (type != "html5-strict") { + addAttrs("script", "language xml:space"); + addAttrs("style", "xml:space"); + addAttrs("object", "declare classid codebase codetype archive standby align border hspace vspace"); + addAttrs("param", "valuetype type"); + addAttrs("a", "charset name rev shape coords"); + addAttrs("br", "clear"); + addAttrs("applet", "codebase archive code object alt name width height align hspace vspace"); + addAttrs("img", "name longdesc align border hspace vspace"); + addAttrs("iframe", "longdesc frameborder marginwidth marginheight scrolling align"); + addAttrs("font basefont", "size color face"); + addAttrs("input", "usemap align"); + addAttrs("select", "onchange"); + addAttrs("textarea"); + addAttrs("h1 h2 h3 h4 h5 h6 div p legend caption", "align"); + addAttrs("ul", "type compact"); + addAttrs("li", "type"); + addAttrs("ol dl menu dir", "compact"); + addAttrs("pre", "width xml:space"); + addAttrs("hr", "align noshade size width"); + addAttrs("isindex", "prompt"); + addAttrs("table", "summary width frame rules cellspacing cellpadding align bgcolor"); + addAttrs("col", "width align char charoff valign"); + addAttrs("colgroup", "width align char charoff valign"); + addAttrs("thead", "align char charoff valign"); + addAttrs("tr", "align char charoff valign bgcolor"); + addAttrs("th", "axis align char charoff valign nowrap bgcolor width height"); + addAttrs("form", "accept"); + addAttrs("td", "abbr axis scope align char charoff valign nowrap bgcolor width height"); + addAttrs("tfoot", "align char charoff valign"); + addAttrs("tbody", "align char charoff valign"); + addAttrs("area", "nohref"); + addAttrs("body", "background bgcolor text link vlink alink"); + } + + // Extend with HTML5 attributes unless it's html4 + if (type != "html4") { + addAttrs("input button select textarea", "autofocus"); + addAttrs("input textarea", "placeholder"); + addAttrs("a", "download"); + addAttrs("link script img", "crossorigin"); + addAttrs("iframe", "srcdoc sandbox seamless allowfullscreen"); + } + + // Special: iframe, ruby, video, audio, label + + // Delete children of the same name from it's parent + // For example: form can't have a child of the name form + each(split('a form meter progress dfn'), function(name) { + if (schema[name]) { + delete schema[name].children[name]; + } + }); + + // Delete header, footer, sectioning and heading content descendants + /*each('dt th address', function(name) { + delete schema[name].children[name]; + });*/ + + // Caption can't have tables + delete schema.caption.children.table; + + // TODO: LI:s can only have value if parent is OL + + // TODO: Handle transparent elements + // a ins del canvas map + + mapCache[type] = schema; + + return schema; + } + + /** + * Constructs a new Schema instance. + * + * @constructor + * @method Schema + * @param {Object} settings Name/value settings object. + */ + return function(settings) { + var self = this, elements = {}, children = {}, patternElements = [], validStyles, schemaItems; + var whiteSpaceElementsMap, selfClosingElementsMap, shortEndedElementsMap, boolAttrMap; + var blockElementsMap, nonEmptyElementsMap, textBlockElementsMap, customElementsMap = {}, specialElements = {}; + + // Creates an lookup table map object for the specified option or the default value + function createLookupTable(option, default_value, extendWith) { + var value = settings[option]; + + if (!value) { + // Get cached default map or make it if needed + value = mapCache[option]; + + if (!value) { + value = makeMap(default_value, ' ', makeMap(default_value.toUpperCase(), ' ')); + value = extend(value, extendWith); + + mapCache[option] = value; + } + } else { + // Create custom map + value = makeMap(value, ',', makeMap(value.toUpperCase(), ' ')); + } + + return value; + } + + settings = settings || {}; + schemaItems = compileSchema(settings.schema); + + // Allow all elements and attributes if verify_html is set to false + if (settings.verify_html === false) { + settings.valid_elements = '*[*]'; + } + + // Build styles list + if (settings.valid_styles) { + validStyles = {}; + + // Convert styles into a rule list + each(settings.valid_styles, function(value, key) { + validStyles[key] = explode(value); + }); + } + + // Setup map objects + whiteSpaceElementsMap = createLookupTable('whitespace_elements', 'pre script noscript style textarea video audio iframe object'); + selfClosingElementsMap = createLookupTable('self_closing_elements', 'colgroup dd dt li option p td tfoot th thead tr'); + shortEndedElementsMap = createLookupTable('short_ended_elements', 'area base basefont br col frame hr img input isindex link ' + + 'meta param embed source wbr track'); + boolAttrMap = createLookupTable('boolean_attributes', 'checked compact declare defer disabled ismap multiple nohref noresize ' + + 'noshade nowrap readonly selected autoplay loop controls'); + nonEmptyElementsMap = createLookupTable('non_empty_elements', 'td th iframe video audio object script', shortEndedElementsMap); + 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 nav figure'); + blockElementsMap = createLookupTable('block_elements', 'hr table tbody thead tfoot ' + + 'th tr td li ol ul caption dl dt dd noscript menu isindex option ' + + 'datalist select optgroup', textBlockElementsMap); + + each((settings.special || 'script noscript style textarea').split(' '), function(name) { + specialElements[name] = new RegExp('<\/' + name + '[^>]*>','gi'); + }); + + // Converts a wildcard expression string to a regexp for example *a will become /.*a/. + function patternToRegExp(str) { + return new RegExp('^' + str.replace(/([?+*])/g, '.$1') + '$'); + } + + // Parses the specified valid_elements string and adds to the current rules + // This function is a bit hard to read since it's heavily optimized for speed + function addValidElements(valid_elements) { + var ei, el, ai, al, matches, element, attr, attrData, elementName, attrName, attrType, attributes, attributesOrder, + prefix, outputName, globalAttributes, globalAttributesOrder, key, value, + elementRuleRegExp = /^([#+\-])?([^\[!\/]+)(?:\/([^\[!]+))?(?:(!?)\[([^\]]+)\])?$/, + attrRuleRegExp = /^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/, + hasPatternsRegExp = /[*?+]/; + + if (valid_elements) { + // Split valid elements into an array with rules + valid_elements = split(valid_elements, ','); + + if (elements['@']) { + globalAttributes = elements['@'].attributes; + globalAttributesOrder = elements['@'].attributesOrder; + } + + // Loop all rules + for (ei = 0, el = valid_elements.length; ei < el; ei++) { + // Parse element rule + matches = elementRuleRegExp.exec(valid_elements[ei]); + if (matches) { + // Setup local names for matches + prefix = matches[1]; + elementName = matches[2]; + outputName = matches[3]; + attrData = matches[5]; + + // Create new attributes and attributesOrder + attributes = {}; + attributesOrder = []; + + // Create the new element + element = { + attributes: attributes, + attributesOrder: attributesOrder + }; + + // Padd empty elements prefix + if (prefix === '#') { + element.paddEmpty = true; + } + + // Remove empty elements prefix + if (prefix === '-') { + element.removeEmpty = true; + } + + if (matches[4] === '!') { + element.removeEmptyAttrs = true; + } + + // Copy attributes from global rule into current rule + if (globalAttributes) { + for (key in globalAttributes) { + attributes[key] = globalAttributes[key]; + } + + attributesOrder.push.apply(attributesOrder, globalAttributesOrder); + } + + // Attributes defined + if (attrData) { + attrData = split(attrData, '|'); + for (ai = 0, al = attrData.length; ai < al; ai++) { + matches = attrRuleRegExp.exec(attrData[ai]); + if (matches) { + attr = {}; + attrType = matches[1]; + attrName = matches[2].replace(/::/g, ':'); + prefix = matches[3]; + value = matches[4]; + + // Required + if (attrType === '!') { + element.attributesRequired = element.attributesRequired || []; + element.attributesRequired.push(attrName); + attr.required = true; + } + + // Denied from global + if (attrType === '-') { + delete attributes[attrName]; + attributesOrder.splice(inArray(attributesOrder, attrName), 1); + continue; + } + + // Default value + if (prefix) { + // Default value + if (prefix === '=') { + element.attributesDefault = element.attributesDefault || []; + element.attributesDefault.push({name: attrName, value: value}); + attr.defaultValue = value; + } + + // Forced value + if (prefix === ':') { + element.attributesForced = element.attributesForced || []; + element.attributesForced.push({name: attrName, value: value}); + attr.forcedValue = value; + } + + // Required values + if (prefix === '<') { + attr.validValues = makeMap(value, '?'); + } + } + + // Check for attribute patterns + if (hasPatternsRegExp.test(attrName)) { + element.attributePatterns = element.attributePatterns || []; + attr.pattern = patternToRegExp(attrName); + element.attributePatterns.push(attr); + } else { + // Add attribute to order list if it doesn't already exist + if (!attributes[attrName]) { + attributesOrder.push(attrName); + } + + attributes[attrName] = attr; + } + } + } + } + + // Global rule, store away these for later usage + if (!globalAttributes && elementName == '@') { + globalAttributes = attributes; + globalAttributesOrder = attributesOrder; + } + + // Handle substitute elements such as b/strong + if (outputName) { + element.outputName = elementName; + elements[outputName] = element; + } + + // Add pattern or exact element + if (hasPatternsRegExp.test(elementName)) { + element.pattern = patternToRegExp(elementName); + patternElements.push(element); + } else { + elements[elementName] = element; + } + } + } + } + } + + function setValidElements(valid_elements) { + elements = {}; + patternElements = []; + + addValidElements(valid_elements); + + each(schemaItems, function(element, name) { + children[name] = element.children; + }); + } + + // Adds custom non HTML elements to the schema + function addCustomElements(custom_elements) { + var customElementRegExp = /^(~)?(.+)$/; + + if (custom_elements) { + // Flush cached items since we are altering the default maps + mapCache.text_block_elements = mapCache.block_elements = null; + + each(split(custom_elements, ','), function(rule) { + var matches = customElementRegExp.exec(rule), + inline = matches[1] === '~', + cloneName = inline ? 'span' : 'div', + name = matches[2]; + + children[name] = children[cloneName]; + customElementsMap[name] = cloneName; + + // If it's not marked as inline then add it to valid block elements + if (!inline) { + blockElementsMap[name.toUpperCase()] = {}; + blockElementsMap[name] = {}; + } + + // Add elements clone if needed + if (!elements[name]) { + var customRule = elements[cloneName]; + + customRule = extend({}, customRule); + delete customRule.removeEmptyAttrs; + delete customRule.removeEmpty; + + elements[name] = customRule; + } + + // Add custom elements at span/div positions + each(children, function(element, elmName) { + if (element[cloneName]) { + children[elmName] = element = extend({}, children[elmName]); + element[name] = element[cloneName]; + } + }); + }); + } + } + + // Adds valid children to the schema object + function addValidChildren(valid_children) { + var childRuleRegExp = /^([+\-]?)(\w+)\[([^\]]+)\]$/; + + if (valid_children) { + each(split(valid_children, ','), function(rule) { + var matches = childRuleRegExp.exec(rule), parent, prefix; + + if (matches) { + prefix = matches[1]; + + // Add/remove items from default + if (prefix) { + parent = children[matches[2]]; + } else { + parent = children[matches[2]] = {'#comment': {}}; + } + + parent = children[matches[2]]; + + each(split(matches[3], '|'), function(child) { + if (prefix === '-') { + // Clone the element before we delete + // things in it to not mess up default schemas + children[matches[2]] = parent = extend({}, children[matches[2]]); + + delete parent[child]; + } else { + parent[child] = {}; + } + }); + } + }); + } + } + + function getElementRule(name) { + var element = elements[name], i; + + // Exact match found + if (element) { + return element; + } + + // No exact match then try the patterns + i = patternElements.length; + while (i--) { + element = patternElements[i]; + + if (element.pattern.test(name)) { + return element; + } + } + } + + if (!settings.valid_elements) { + // No valid elements defined then clone the elements from the schema spec + each(schemaItems, function(element, name) { + elements[name] = { + attributes: element.attributes, + attributesOrder: element.attributesOrder + }; + + children[name] = element.children; + }); + + // Switch these on HTML4 + if (settings.schema != "html5") { + each(split('strong/b em/i'), function(item) { + item = split(item, '/'); + elements[item[1]].outputName = item[0]; + }); + } + + // Add default alt attribute for images + elements.img.attributesDefault = [{name: 'alt', value: ''}]; + + // Remove these if they are empty by default + each(split('ol ul sub sup blockquote span font a table tbody tr strong em b i'), function(name) { + if (elements[name]) { + elements[name].removeEmpty = true; + } + }); + + // Padd these by default + each(split('p h1 h2 h3 h4 h5 h6 th td pre div address caption'), function(name) { + elements[name].paddEmpty = true; + }); + + // Remove these if they have no attributes + each(split('span'), function(name) { + elements[name].removeEmptyAttrs = true; + }); + + // Remove these by default + // TODO: Reenable in 4.1 + /*each(split('script style'), function(name) { + delete elements[name]; + });*/ + } else { + setValidElements(settings.valid_elements); + } + + addCustomElements(settings.custom_elements); + addValidChildren(settings.valid_children); + addValidElements(settings.extended_valid_elements); + + // Todo: Remove this when we fix list handling to be valid + addValidChildren('+ol[ul|ol],+ul[ul|ol]'); + + // Delete invalid elements + if (settings.invalid_elements) { + each(explode(settings.invalid_elements), function(item) { + if (elements[item]) { + delete elements[item]; + } + }); + } + + // If the user didn't allow span only allow internal spans + if (!getElementRule('span')) { + addValidElements('span[!data-mce-type|*]'); + } + + /** + * Name/value map object with valid parents and children to those parents. + * + * @example + * children = { + * div:{p:{}, h1:{}} + * }; + * @field children + * @type Object + */ + self.children = children; + + /** + * Name/value map object with valid styles for each element. + * + * @field styles + * @type Object + */ + self.styles = validStyles; + + /** + * Returns a map with boolean attributes. + * + * @method getBoolAttrs + * @return {Object} Name/value lookup map for boolean attributes. + */ + self.getBoolAttrs = function() { + return boolAttrMap; + }; + + /** + * Returns a map with block elements. + * + * @method getBlockElements + * @return {Object} Name/value lookup map for block elements. + */ + self.getBlockElements = function() { + return blockElementsMap; + }; + + /** + * Returns a map with text block elements. Such as: p,h1-h6,div,address + * + * @method getTextBlockElements + * @return {Object} Name/value lookup map for block elements. + */ + self.getTextBlockElements = function() { + return textBlockElementsMap; + }; + + /** + * Returns a map with short ended elements such as BR or IMG. + * + * @method getShortEndedElements + * @return {Object} Name/value lookup map for short ended elements. + */ + self.getShortEndedElements = function() { + return shortEndedElementsMap; + }; + + /** + * Returns a map with self closing tags such as
  • . + * + * @method getSelfClosingElements + * @return {Object} Name/value lookup map for self closing tags elements. + */ + self.getSelfClosingElements = function() { + return selfClosingElementsMap; + }; + + /** + * Returns a map with elements that should be treated as contents regardless if it has text + * content in them or not such as TD, VIDEO or IMG. + * + * @method getNonEmptyElements + * @return {Object} Name/value lookup map for non empty elements. + */ + self.getNonEmptyElements = function() { + return nonEmptyElementsMap; + }; + + /** + * Returns a map with elements where white space is to be preserved like PRE or SCRIPT. + * + * @method getWhiteSpaceElements + * @return {Object} Name/value lookup map for white space elements. + */ + self.getWhiteSpaceElements = function() { + return whiteSpaceElementsMap; + }; + + /** + * Returns a map with special elements. These are elements that needs to be parsed + * in a special way such as script, style, textarea etc. The map object values + * are regexps used to find the end of the element. + * + * @method getSpecialElements + * @return {Object} Name/value lookup map for special elements. + */ + self.getSpecialElements = function() { + return specialElements; + }; + + /** + * Returns true/false if the specified element and it's child is valid or not + * according to the schema. + * + * @method isValidChild + * @param {String} name Element name to check for. + * @param {String} child Element child to verify. + * @return {Boolean} True/false if the element is a valid child of the specified parent. + */ + self.isValidChild = function(name, child) { + var parent = children[name]; + + return !!(parent && parent[child]); + }; + + /** + * Returns true/false if the specified element name and optional attribute is + * valid according to the schema. + * + * @method isValid + * @param {String} name Name of element to check. + * @param {String} attr Optional attribute name to check for. + * @return {Boolean} True/false if the element and attribute is valid. + */ + self.isValid = function(name, attr) { + var attrPatterns, i, rule = getElementRule(name); + + // Check if it's a valid element + if (rule) { + if (attr) { + // Check if attribute name exists + if (rule.attributes[attr]) { + return true; + } + + // Check if attribute matches a regexp pattern + attrPatterns = rule.attributePatterns; + if (attrPatterns) { + i = attrPatterns.length; + while (i--) { + if (attrPatterns[i].pattern.test(name)) { + return true; + } + } + } + } else { + return true; + } + } + + // No match + return false; + }; + + /** + * Returns true/false if the specified element is valid or not + * according to the schema. + * + * @method getElementRule + * @param {String} name Element name to check for. + * @return {Object} Element object or undefined if the element isn't valid. + */ + self.getElementRule = getElementRule; + + /** + * Returns an map object of all custom elements. + * + * @method getCustomElements + * @return {Object} Name/value map object of all custom elements. + */ + self.getCustomElements = function() { + return customElementsMap; + }; + + /** + * Parses a valid elements string and adds it to the schema. The valid elements + * format is for example "element[attr=default|otherattr]". + * Existing rules will be replaced with the ones specified, so this extends the schema. + * + * @method addValidElements + * @param {String} valid_elements String in the valid elements format to be parsed. + */ + self.addValidElements = addValidElements; + + /** + * Parses a valid elements string and sets it to the schema. The valid elements + * format is for example "element[attr=default|otherattr]". + * Existing rules will be replaced with the ones specified, so this extends the schema. + * + * @method setValidElements + * @param {String} valid_elements String in the valid elements format to be parsed. + */ + self.setValidElements = setValidElements; + + /** + * Adds custom non HTML elements to the schema. + * + * @method addCustomElements + * @param {String} custom_elements Comma separated list of custom elements to add. + */ + self.addCustomElements = addCustomElements; + + /** + * Parses a valid children string and adds them to the schema structure. The valid children + * format is for example: "element[child1|child2]". + * + * @method addValidChildren + * @param {String} valid_children Valid children elements string to parse + */ + self.addValidChildren = addValidChildren; + + self.elements = elements; + }; +}); + +// Included from: js/tinymce/classes/html/SaxParser.js + +/** + * SaxParser.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*eslint max-depth:[2, 9] */ + +/** + * This class parses HTML code using pure JavaScript and executes various events for each item it finds. It will + * always execute the events in the right order for tag soup code like

    . It will also remove elements + * and attributes that doesn't fit the schema if the validate setting is enabled. + * + * @example + * var parser = new tinymce.html.SaxParser({ + * validate: true, + * + * comment: function(text) { + * console.log('Comment:', text); + * }, + * + * cdata: function(text) { + * console.log('CDATA:', text); + * }, + * + * text: function(text, raw) { + * console.log('Text:', text, 'Raw:', raw); + * }, + * + * start: function(name, attrs, empty) { + * console.log('Start:', name, attrs, empty); + * }, + * + * end: function(name) { + * console.log('End:', name); + * }, + * + * pi: function(name, text) { + * console.log('PI:', name, text); + * }, + * + * doctype: function(text) { + * console.log('DocType:', text); + * } + * }, schema); + * @class tinymce.html.SaxParser + * @version 3.4 + */ +define("tinymce/html/SaxParser", [ + "tinymce/html/Schema", + "tinymce/html/Entities", + "tinymce/util/Tools" +], function(Schema, Entities, Tools) { + var each = Tools.each; + + /** + * Constructs a new SaxParser instance. + * + * @constructor + * @method SaxParser + * @param {Object} settings Name/value collection of settings. comment, cdata, text, start and end are callbacks. + * @param {tinymce.html.Schema} schema HTML Schema class to use when parsing. + */ + return function(settings, schema) { + var self = this; + + function noop() {} + + settings = settings || {}; + self.schema = schema = schema || new Schema(); + + if (settings.fix_self_closing !== false) { + settings.fix_self_closing = true; + } + + // Add handler functions from settings and setup default handlers + each('comment cdata text start end pi doctype'.split(' '), function(name) { + if (name) { + self[name] = settings[name] || noop; + } + }); + + /** + * Parses the specified HTML string and executes the callbacks for each item it finds. + * + * @example + * new SaxParser({...}).parse('text'); + * @method parse + * @param {String} html Html string to sax parse. + */ + self.parse = function(html) { + var self = this, matches, index = 0, value, endRegExp, stack = [], attrList, i, text, name; + var isInternalElement, removeInternalElements, shortEndedElements, fillAttrsMap, isShortEnded; + var validate, elementRule, isValidElement, attr, attribsValue, validAttributesMap, validAttributePatterns; + var attributesRequired, attributesDefault, attributesForced; + var anyAttributesRequired, selfClosing, tokenRegExp, attrRegExp, specialElements, attrValue, idCount = 0; + var decode = Entities.decode, fixSelfClosing, filteredUrlAttrs = Tools.makeMap('src,href'); + var scriptUriRegExp = /(java|vb)script:/i; + + function processEndTag(name) { + var pos, i; + + // Find position of parent of the same type + pos = stack.length; + while (pos--) { + if (stack[pos].name === name) { + break; + } + } + + // Found parent + if (pos >= 0) { + // Close all the open elements + for (i = stack.length - 1; i >= pos; i--) { + name = stack[i]; + + if (name.valid) { + self.end(name.name); + } + } + + // Remove the open elements from the stack + stack.length = pos; + } + } + + function parseAttribute(match, name, value, val2, val3) { + var attrRule, i, trimRegExp = /[\s\u0000-\u001F]+/g; + + name = name.toLowerCase(); + value = name in fillAttrsMap ? name : decode(value || val2 || val3 || ''); // Handle boolean attribute than value attribute + + // Validate name and value pass through all data- attributes + if (validate && !isInternalElement && name.indexOf('data-') !== 0) { + attrRule = validAttributesMap[name]; + + // Find rule by pattern matching + if (!attrRule && validAttributePatterns) { + i = validAttributePatterns.length; + while (i--) { + attrRule = validAttributePatterns[i]; + if (attrRule.pattern.test(name)) { + break; + } + } + + // No rule matched + if (i === -1) { + attrRule = null; + } + } + + // No attribute rule found + if (!attrRule) { + return; + } + + // Validate value + if (attrRule.validValues && !(value in attrRule.validValues)) { + return; + } + } + + // Block any javascript: urls + if (filteredUrlAttrs[name] && !settings.allow_script_urls) { + var uri = value.replace(trimRegExp, ''); + + try { + // Might throw malformed URI sequence + uri = decodeURIComponent(uri); + if (scriptUriRegExp.test(uri)) { + return; + } + } catch (ex) { + // Fallback to non UTF-8 decoder + uri = unescape(uri); + if (scriptUriRegExp.test(uri)) { + return; + } + } + } + + // Add attribute to list and map + attrList.map[name] = value; + attrList.push({ + name: name, + value: value + }); + } + + // Precompile RegExps and map objects + tokenRegExp = new RegExp('<(?:' + + '(?:!--([\\w\\W]*?)-->)|' + // Comment + '(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|' + // CDATA + '(?:!DOCTYPE([\\w\\W]*?)>)|' + // DOCTYPE + '(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|' + // PI + '(?:\\/([^>]+)>)|' + // End element + '(?:([A-Za-z0-9\\-\\:\\.]+)((?:\\s+[^"\'>]+(?:(?:"[^"]*")|(?:\'[^\']*\')|[^>]*))*|\\/|\\s+)>)' + // Start element + ')', 'g'); + + attrRegExp = /([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g; + + // Setup lookup tables for empty elements and boolean attributes + shortEndedElements = schema.getShortEndedElements(); + selfClosing = settings.self_closing_elements || schema.getSelfClosingElements(); + fillAttrsMap = schema.getBoolAttrs(); + validate = settings.validate; + removeInternalElements = settings.remove_internals; + fixSelfClosing = settings.fix_self_closing; + specialElements = schema.getSpecialElements(); + + while ((matches = tokenRegExp.exec(html))) { + // Text + if (index < matches.index) { + self.text(decode(html.substr(index, matches.index - index))); + } + + if ((value = matches[6])) { // End element + value = value.toLowerCase(); + + // IE will add a ":" in front of elements it doesn't understand like custom elements or HTML5 elements + if (value.charAt(0) === ':') { + value = value.substr(1); + } + + processEndTag(value); + } else if ((value = matches[7])) { // Start element + value = value.toLowerCase(); + + // IE will add a ":" in front of elements it doesn't understand like custom elements or HTML5 elements + if (value.charAt(0) === ':') { + value = value.substr(1); + } + + isShortEnded = value in shortEndedElements; + + // Is self closing tag for example an
  • after an open
  • + if (fixSelfClosing && selfClosing[value] && stack.length > 0 && stack[stack.length - 1].name === value) { + processEndTag(value); + } + + // Validate element + if (!validate || (elementRule = schema.getElementRule(value))) { + isValidElement = true; + + // Grab attributes map and patters when validation is enabled + if (validate) { + validAttributesMap = elementRule.attributes; + validAttributePatterns = elementRule.attributePatterns; + } + + // Parse attributes + if ((attribsValue = matches[8])) { + isInternalElement = attribsValue.indexOf('data-mce-type') !== -1; // Check if the element is an internal element + + // If the element has internal attributes then remove it if we are told to do so + if (isInternalElement && removeInternalElements) { + isValidElement = false; + } + + attrList = []; + attrList.map = {}; + + attribsValue.replace(attrRegExp, parseAttribute); + } else { + attrList = []; + attrList.map = {}; + } + + // Process attributes if validation is enabled + if (validate && !isInternalElement) { + attributesRequired = elementRule.attributesRequired; + attributesDefault = elementRule.attributesDefault; + attributesForced = elementRule.attributesForced; + anyAttributesRequired = elementRule.removeEmptyAttrs; + + // Check if any attribute exists + if (anyAttributesRequired && !attrList.length) { + isValidElement = false; + } + + // Handle forced attributes + if (attributesForced) { + i = attributesForced.length; + while (i--) { + attr = attributesForced[i]; + name = attr.name; + attrValue = attr.value; + + if (attrValue === '{$uid}') { + attrValue = 'mce_' + idCount++; + } + + attrList.map[name] = attrValue; + attrList.push({name: name, value: attrValue}); + } + } + + // Handle default attributes + if (attributesDefault) { + i = attributesDefault.length; + while (i--) { + attr = attributesDefault[i]; + name = attr.name; + + if (!(name in attrList.map)) { + attrValue = attr.value; + + if (attrValue === '{$uid}') { + attrValue = 'mce_' + idCount++; + } + + attrList.map[name] = attrValue; + attrList.push({name: name, value: attrValue}); + } + } + } + + // Handle required attributes + if (attributesRequired) { + i = attributesRequired.length; + while (i--) { + if (attributesRequired[i] in attrList.map) { + break; + } + } + + // None of the required attributes where found + if (i === -1) { + isValidElement = false; + } + } + + // Invalidate element if it's marked as bogus + if (attrList.map['data-mce-bogus']) { + isValidElement = false; + } + } + + if (isValidElement) { + self.start(value, attrList, isShortEnded); + } + } else { + isValidElement = false; + } + + // Treat script, noscript and style a bit different since they may include code that looks like elements + if ((endRegExp = specialElements[value])) { + endRegExp.lastIndex = index = matches.index + matches[0].length; + + if ((matches = endRegExp.exec(html))) { + if (isValidElement) { + text = html.substr(index, matches.index - index); + } + + index = matches.index + matches[0].length; + } else { + text = html.substr(index); + index = html.length; + } + + if (isValidElement) { + if (text.length > 0) { + self.text(text, true); + } + + self.end(value); + } + + tokenRegExp.lastIndex = index; + continue; + } + + // Push value on to stack + if (!isShortEnded) { + if (!attribsValue || attribsValue.indexOf('/') != attribsValue.length - 1) { + stack.push({name: value, valid: isValidElement}); + } else if (isValidElement) { + self.end(value); + } + } + } else if ((value = matches[1])) { // Comment + // Padd comment value to avoid browsers from parsing invalid comments as HTML + if (value.charAt(0) === '>') { + value = ' ' + value; + } + + if (!settings.allow_conditional_comments && value.substr(0, 3) === '[if') { + value = ' ' + value; + } + + self.comment(value); + } else if ((value = matches[2])) { // CDATA + self.cdata(value); + } else if ((value = matches[3])) { // DOCTYPE + self.doctype(value); + } else if ((value = matches[4])) { // PI + self.pi(value, matches[5]); + } + + index = matches.index + matches[0].length; + } + + // Text + if (index < html.length) { + self.text(decode(html.substr(index))); + } + + // Close any open elements + for (i = stack.length - 1; i >= 0; i--) { + value = stack[i]; + + if (value.valid) { + self.end(value.name); + } + } + }; + }; +}); + +// Included from: js/tinymce/classes/html/DomParser.js + +/** + * DomParser.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class parses HTML code into a DOM like structure of nodes it will remove redundant whitespace and make + * sure that the node tree is valid according to the specified schema. + * So for example:

    a

    b

    c

    will become

    a

    b

    c

    + * + * @example + * var parser = new tinymce.html.DomParser({validate: true}, schema); + * var rootNode = parser.parse('

    content

    '); + * + * @class tinymce.html.DomParser + * @version 3.4 + */ +define("tinymce/html/DomParser", [ + "tinymce/html/Node", + "tinymce/html/Schema", + "tinymce/html/SaxParser", + "tinymce/util/Tools" +], function(Node, Schema, SaxParser, Tools) { + var makeMap = Tools.makeMap, each = Tools.each, explode = Tools.explode, extend = Tools.extend; + + /** + * Constructs a new DomParser instance. + * + * @constructor + * @method DomParser + * @param {Object} settings Name/value collection of settings. comment, cdata, text, start and end are callbacks. + * @param {tinymce.html.Schema} schema HTML Schema class to use when parsing. + */ + return function(settings, schema) { + var self = this, nodeFilters = {}, attributeFilters = [], matchedNodes = {}, matchedAttributes = {}; + + settings = settings || {}; + settings.validate = "validate" in settings ? settings.validate : true; + settings.root_name = settings.root_name || 'body'; + self.schema = schema = schema || new Schema(); + + function fixInvalidChildren(nodes) { + var ni, node, parent, parents, newParent, currentNode, tempNode, childNode, i; + var nonEmptyElements, nonSplitableElements, textBlockElements, sibling, nextNode; + + nonSplitableElements = makeMap('tr,td,th,tbody,thead,tfoot,table'); + nonEmptyElements = schema.getNonEmptyElements(); + textBlockElements = schema.getTextBlockElements(); + + for (ni = 0; ni < nodes.length; ni++) { + node = nodes[ni]; + + // Already removed or fixed + if (!node.parent || node.fixed) { + continue; + } + + // If the invalid element is a text block and the text block is within a parent LI element + // Then unwrap the first text block and convert other sibling text blocks to LI elements similar to Word/Open Office + if (textBlockElements[node.name] && node.parent.name == 'li') { + // Move sibling text blocks after LI element + sibling = node.next; + while (sibling) { + if (textBlockElements[sibling.name]) { + sibling.name = 'li'; + sibling.fixed = true; + node.parent.insert(sibling, node.parent); + } else { + break; + } + + sibling = sibling.next; + } + + // Unwrap current text block + node.unwrap(node); + continue; + } + + // Get list of all parent nodes until we find a valid parent to stick the child into + parents = [node]; + for (parent = node.parent; parent && !schema.isValidChild(parent.name, node.name) && + !nonSplitableElements[parent.name]; parent = parent.parent) { + parents.push(parent); + } + + // Found a suitable parent + if (parent && parents.length > 1) { + // Reverse the array since it makes looping easier + parents.reverse(); + + // Clone the related parent and insert that after the moved node + newParent = currentNode = self.filterNode(parents[0].clone()); + + // Start cloning and moving children on the left side of the target node + for (i = 0; i < parents.length - 1; i++) { + if (schema.isValidChild(currentNode.name, parents[i].name)) { + tempNode = self.filterNode(parents[i].clone()); + currentNode.append(tempNode); + } else { + tempNode = currentNode; + } + + for (childNode = parents[i].firstChild; childNode && childNode != parents[i + 1]; ) { + nextNode = childNode.next; + tempNode.append(childNode); + childNode = nextNode; + } + + currentNode = tempNode; + } + + if (!newParent.isEmpty(nonEmptyElements)) { + parent.insert(newParent, parents[0], true); + parent.insert(node, newParent); + } else { + parent.insert(node, parents[0], true); + } + + // Check if the element is empty by looking through it's contents and special treatment for


    + parent = parents[0]; + if (parent.isEmpty(nonEmptyElements) || parent.firstChild === parent.lastChild && parent.firstChild.name === 'br') { + parent.empty().remove(); + } + } else if (node.parent) { + // If it's an LI try to find a UL/OL for it or wrap it + if (node.name === 'li') { + sibling = node.prev; + if (sibling && (sibling.name === 'ul' || sibling.name === 'ul')) { + sibling.append(node); + continue; + } + + sibling = node.next; + if (sibling && (sibling.name === 'ul' || sibling.name === 'ul')) { + sibling.insert(node, sibling.firstChild, true); + continue; + } + + node.wrap(self.filterNode(new Node('ul', 1))); + continue; + } + + // Try wrapping the element in a DIV + if (schema.isValidChild(node.parent.name, 'div') && schema.isValidChild('div', node.name)) { + node.wrap(self.filterNode(new Node('div', 1))); + } else { + // We failed wrapping it, then remove or unwrap it + if (node.name === 'style' || node.name === 'script') { + node.empty().remove(); + } else { + node.unwrap(); + } + } + } + } + } + + /** + * Runs the specified node though the element and attributes filters. + * + * @method filterNode + * @param {tinymce.html.Node} Node the node to run filters on. + * @return {tinymce.html.Node} The passed in node. + */ + self.filterNode = function(node) { + var i, name, list; + + // Run element filters + if (name in nodeFilters) { + list = matchedNodes[name]; + + if (list) { + list.push(node); + } else { + matchedNodes[name] = [node]; + } + } + + // Run attribute filters + i = attributeFilters.length; + while (i--) { + name = attributeFilters[i].name; + + if (name in node.attributes.map) { + list = matchedAttributes[name]; + + if (list) { + list.push(node); + } else { + matchedAttributes[name] = [node]; + } + } + } + + return node; + }; + + /** + * Adds a node filter function to the parser, the parser will collect the specified nodes by name + * and then execute the callback ones it has finished parsing the document. + * + * @example + * parser.addNodeFilter('p,h1', function(nodes, name) { + * for (var i = 0; i < nodes.length; i++) { + * console.log(nodes[i].name); + * } + * }); + * @method addNodeFilter + * @method {String} name Comma separated list of nodes to collect. + * @param {function} callback Callback function to execute once it has collected nodes. + */ + self.addNodeFilter = function(name, callback) { + each(explode(name), function(name) { + var list = nodeFilters[name]; + + if (!list) { + nodeFilters[name] = list = []; + } + + list.push(callback); + }); + }; + + /** + * Adds a attribute filter function to the parser, the parser will collect nodes that has the specified attributes + * and then execute the callback ones it has finished parsing the document. + * + * @example + * parser.addAttributeFilter('src,href', function(nodes, name) { + * for (var i = 0; i < nodes.length; i++) { + * console.log(nodes[i].name); + * } + * }); + * @method addAttributeFilter + * @method {String} name Comma separated list of nodes to collect. + * @param {function} callback Callback function to execute once it has collected nodes. + */ + self.addAttributeFilter = function(name, callback) { + each(explode(name), function(name) { + var i; + + for (i = 0; i < attributeFilters.length; i++) { + if (attributeFilters[i].name === name) { + attributeFilters[i].callbacks.push(callback); + return; + } + } + + attributeFilters.push({name: name, callbacks: [callback]}); + }); + }; + + /** + * Parses the specified HTML string into a DOM like node tree and returns the result. + * + * @example + * var rootNode = new DomParser({...}).parse('text'); + * @method parse + * @param {String} html Html string to sax parse. + * @param {Object} args Optional args object that gets passed to all filter functions. + * @return {tinymce.html.Node} Root node containing the tree. + */ + self.parse = function(html, args) { + var parser, rootNode, node, nodes, i, l, fi, fl, list, name, validate; + var blockElements, startWhiteSpaceRegExp, invalidChildren = [], isInWhiteSpacePreservedElement; + var endWhiteSpaceRegExp, allWhiteSpaceRegExp, isAllWhiteSpaceRegExp, whiteSpaceElements; + var children, nonEmptyElements, rootBlockName; + + args = args || {}; + matchedNodes = {}; + matchedAttributes = {}; + blockElements = extend(makeMap('script,style,head,html,body,title,meta,param'), schema.getBlockElements()); + nonEmptyElements = schema.getNonEmptyElements(); + children = schema.children; + validate = settings.validate; + rootBlockName = "forced_root_block" in args ? args.forced_root_block : settings.forced_root_block; + + whiteSpaceElements = schema.getWhiteSpaceElements(); + startWhiteSpaceRegExp = /^[ \t\r\n]+/; + endWhiteSpaceRegExp = /[ \t\r\n]+$/; + allWhiteSpaceRegExp = /[ \t\r\n]+/g; + isAllWhiteSpaceRegExp = /^[ \t\r\n]+$/; + + function addRootBlocks() { + var node = rootNode.firstChild, next, rootBlockNode; + + // Removes whitespace at beginning and end of block so: + //

    x

    ->

    x

    + function trim(rootBlockNode) { + if (rootBlockNode) { + node = rootBlockNode.firstChild; + if (node && node.type == 3) { + node.value = node.value.replace(startWhiteSpaceRegExp, ''); + } + + node = rootBlockNode.lastChild; + if (node && node.type == 3) { + node.value = node.value.replace(endWhiteSpaceRegExp, ''); + } + } + } + + // Check if rootBlock is valid within rootNode for example if P is valid in H1 if H1 is the contentEditabe root + if (!schema.isValidChild(rootNode.name, rootBlockName.toLowerCase())) { + return; + } + + while (node) { + next = node.next; + + if (node.type == 3 || (node.type == 1 && node.name !== 'p' && + !blockElements[node.name] && !node.attr('data-mce-type'))) { + if (!rootBlockNode) { + // Create a new root block element + rootBlockNode = createNode(rootBlockName, 1); + rootBlockNode.attr(settings.forced_root_block_attrs); + rootNode.insert(rootBlockNode, node); + rootBlockNode.append(node); + } else { + rootBlockNode.append(node); + } + } else { + trim(rootBlockNode); + rootBlockNode = null; + } + + node = next; + } + + trim(rootBlockNode); + } + + function createNode(name, type) { + var node = new Node(name, type), list; + + if (name in nodeFilters) { + list = matchedNodes[name]; + + if (list) { + list.push(node); + } else { + matchedNodes[name] = [node]; + } + } + + return node; + } + + function removeWhitespaceBefore(node) { + var textNode, textVal, sibling; + + for (textNode = node.prev; textNode && textNode.type === 3; ) { + textVal = textNode.value.replace(endWhiteSpaceRegExp, ''); + + if (textVal.length > 0) { + textNode.value = textVal; + textNode = textNode.prev; + } else { + sibling = textNode.prev; + textNode.remove(); + textNode = sibling; + } + } + } + + function cloneAndExcludeBlocks(input) { + var name, output = {}; + + for (name in input) { + if (name !== 'li' && name != 'p') { + output[name] = input[name]; + } + } + + return output; + } + + parser = new SaxParser({ + validate: validate, + allow_script_urls: settings.allow_script_urls, + allow_conditional_comments: settings.allow_conditional_comments, + + // Exclude P and LI from DOM parsing since it's treated better by the DOM parser + self_closing_elements: cloneAndExcludeBlocks(schema.getSelfClosingElements()), + + cdata: function(text) { + node.append(createNode('#cdata', 4)).value = text; + }, + + text: function(text, raw) { + var textNode; + + // Trim all redundant whitespace on non white space elements + if (!isInWhiteSpacePreservedElement) { + text = text.replace(allWhiteSpaceRegExp, ' '); + + if (node.lastChild && blockElements[node.lastChild.name]) { + text = text.replace(startWhiteSpaceRegExp, ''); + } + } + + // Do we need to create the node + if (text.length !== 0) { + textNode = createNode('#text', 3); + textNode.raw = !!raw; + node.append(textNode).value = text; + } + }, + + comment: function(text) { + node.append(createNode('#comment', 8)).value = text; + }, + + pi: function(name, text) { + node.append(createNode(name, 7)).value = text; + removeWhitespaceBefore(node); + }, + + doctype: function(text) { + var newNode; + + newNode = node.append(createNode('#doctype', 10)); + newNode.value = text; + removeWhitespaceBefore(node); + }, + + start: function(name, attrs, empty) { + var newNode, attrFiltersLen, elementRule, attrName, parent; + + elementRule = validate ? schema.getElementRule(name) : {}; + if (elementRule) { + newNode = createNode(elementRule.outputName || name, 1); + newNode.attributes = attrs; + newNode.shortEnded = empty; + + node.append(newNode); + + // Check if node is valid child of the parent node is the child is + // unknown we don't collect it since it's probably a custom element + parent = children[node.name]; + if (parent && children[newNode.name] && !parent[newNode.name]) { + invalidChildren.push(newNode); + } + + attrFiltersLen = attributeFilters.length; + while (attrFiltersLen--) { + attrName = attributeFilters[attrFiltersLen].name; + + if (attrName in attrs.map) { + list = matchedAttributes[attrName]; + + if (list) { + list.push(newNode); + } else { + matchedAttributes[attrName] = [newNode]; + } + } + } + + // Trim whitespace before block + if (blockElements[name]) { + removeWhitespaceBefore(newNode); + } + + // Change current node if the element wasn't empty i.e not
    or + if (!empty) { + node = newNode; + } + + // Check if we are inside a whitespace preserved element + if (!isInWhiteSpacePreservedElement && whiteSpaceElements[name]) { + isInWhiteSpacePreservedElement = true; + } + } + }, + + end: function(name) { + var textNode, elementRule, text, sibling, tempNode; + + elementRule = validate ? schema.getElementRule(name) : {}; + if (elementRule) { + if (blockElements[name]) { + if (!isInWhiteSpacePreservedElement) { + // Trim whitespace of the first node in a block + textNode = node.firstChild; + if (textNode && textNode.type === 3) { + text = textNode.value.replace(startWhiteSpaceRegExp, ''); + + // Any characters left after trim or should we remove it + if (text.length > 0) { + textNode.value = text; + textNode = textNode.next; + } else { + sibling = textNode.next; + textNode.remove(); + textNode = sibling; + + // Remove any pure whitespace siblings + while (textNode && textNode.type === 3) { + text = textNode.value; + sibling = textNode.next; + + if (text.length === 0 || isAllWhiteSpaceRegExp.test(text)) { + textNode.remove(); + textNode = sibling; + } + + textNode = sibling; + } + } + } + + // Trim whitespace of the last node in a block + textNode = node.lastChild; + if (textNode && textNode.type === 3) { + text = textNode.value.replace(endWhiteSpaceRegExp, ''); + + // Any characters left after trim or should we remove it + if (text.length > 0) { + textNode.value = text; + textNode = textNode.prev; + } else { + sibling = textNode.prev; + textNode.remove(); + textNode = sibling; + + // Remove any pure whitespace siblings + while (textNode && textNode.type === 3) { + text = textNode.value; + sibling = textNode.prev; + + if (text.length === 0 || isAllWhiteSpaceRegExp.test(text)) { + textNode.remove(); + textNode = sibling; + } + + textNode = sibling; + } + } + } + } + + // Trim start white space + // Removed due to: #5424 + /*textNode = node.prev; + if (textNode && textNode.type === 3) { + text = textNode.value.replace(startWhiteSpaceRegExp, ''); + + if (text.length > 0) + textNode.value = text; + else + textNode.remove(); + }*/ + } + + // Check if we exited a whitespace preserved element + if (isInWhiteSpacePreservedElement && whiteSpaceElements[name]) { + isInWhiteSpacePreservedElement = false; + } + + // Handle empty nodes + if (elementRule.removeEmpty || elementRule.paddEmpty) { + if (node.isEmpty(nonEmptyElements)) { + if (elementRule.paddEmpty) { + node.empty().append(new Node('#text', '3')).value = '\u00a0'; + } else { + // Leave nodes that have a name like + if (!node.attributes.map.name && !node.attributes.map.id) { + tempNode = node.parent; + node.empty().remove(); + node = tempNode; + return; + } + } + } + } + + node = node.parent; + } + } + }, schema); + + rootNode = node = new Node(args.context || settings.root_name, 11); + + parser.parse(html); + + // Fix invalid children or report invalid children in a contextual parsing + if (validate && invalidChildren.length) { + if (!args.context) { + fixInvalidChildren(invalidChildren); + } else { + args.invalid = true; + } + } + + // Wrap nodes in the root into block elements if the root is body + if (rootBlockName && (rootNode.name == 'body' || args.isRootContent)) { + addRootBlocks(); + } + + // Run filters only when the contents is valid + if (!args.invalid) { + // Run node filters + for (name in matchedNodes) { + list = nodeFilters[name]; + nodes = matchedNodes[name]; + + // Remove already removed children + fi = nodes.length; + while (fi--) { + if (!nodes[fi].parent) { + nodes.splice(fi, 1); + } + } + + for (i = 0, l = list.length; i < l; i++) { + list[i](nodes, name, args); + } + } + + // Run attribute filters + for (i = 0, l = attributeFilters.length; i < l; i++) { + list = attributeFilters[i]; + + if (list.name in matchedAttributes) { + nodes = matchedAttributes[list.name]; + + // Remove already removed children + fi = nodes.length; + while (fi--) { + if (!nodes[fi].parent) { + nodes.splice(fi, 1); + } + } + + for (fi = 0, fl = list.callbacks.length; fi < fl; fi++) { + list.callbacks[fi](nodes, list.name, args); + } + } + } + } + + return rootNode; + }; + + // Remove
    at end of block elements Gecko and WebKit injects BR elements to + // make it possible to place the caret inside empty blocks. This logic tries to remove + // these elements and keep br elements that where intended to be there intact + if (settings.remove_trailing_brs) { + self.addNodeFilter('br', function(nodes) { + var i, l = nodes.length, node, blockElements = extend({}, schema.getBlockElements()); + var nonEmptyElements = schema.getNonEmptyElements(), parent, lastParent, prev, prevName; + var elementRule, textNode; + + // Remove brs from body element as well + blockElements.body = 1; + + // Must loop forwards since it will otherwise remove all brs in

    a


    + for (i = 0; i < l; i++) { + node = nodes[i]; + parent = node.parent; + + if (blockElements[node.parent.name] && node === parent.lastChild) { + // Loop all nodes to the left of the current node and check for other BR elements + // excluding bookmarks since they are invisible + prev = node.prev; + while (prev) { + prevName = prev.name; + + // Ignore bookmarks + if (prevName !== "span" || prev.attr('data-mce-type') !== 'bookmark') { + // Found a non BR element + if (prevName !== "br") { + break; + } + + // Found another br it's a

    structure then don't remove anything + if (prevName === 'br') { + node = null; + break; + } + } + + prev = prev.prev; + } + + if (node) { + node.remove(); + + // Is the parent to be considered empty after we removed the BR + if (parent.isEmpty(nonEmptyElements)) { + elementRule = schema.getElementRule(parent.name); + + // Remove or padd the element depending on schema rule + if (elementRule) { + if (elementRule.removeEmpty) { + parent.remove(); + } else if (elementRule.paddEmpty) { + parent.empty().append(new Node('#text', 3)).value = '\u00a0'; + } + } + } + } + } else { + // Replaces BR elements inside inline elements like


    + // so they become

     

    + lastParent = node; + while (parent && parent.firstChild === lastParent && parent.lastChild === lastParent) { + lastParent = parent; + + if (blockElements[parent.name]) { + break; + } + + parent = parent.parent; + } + + if (lastParent === parent) { + textNode = new Node('#text', 3); + textNode.value = '\u00a0'; + node.replace(textNode); + } + } + } + }); + } + + // Force anchor names closed, unless the setting "allow_html_in_named_anchor" is explicitly included. + if (!settings.allow_html_in_named_anchor) { + self.addAttributeFilter('id,name', function(nodes) { + var i = nodes.length, sibling, prevSibling, parent, node; + + while (i--) { + node = nodes[i]; + if (node.name === 'a' && node.firstChild && !node.attr('href')) { + parent = node.parent; + + // Move children after current node + sibling = node.lastChild; + do { + prevSibling = sibling.prev; + parent.insert(sibling, node); + sibling = prevSibling; + } while (sibling); + } + } + }); + } + }; +}); + +// Included from: js/tinymce/classes/html/Writer.js + +/** + * Writer.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class is used to write HTML tags out it can be used with the Serializer or the SaxParser. + * + * @class tinymce.html.Writer + * @example + * var writer = new tinymce.html.Writer({indent: true}); + * var parser = new tinymce.html.SaxParser(writer).parse('


    '); + * console.log(writer.getContent()); + * + * @class tinymce.html.Writer + * @version 3.4 + */ +define("tinymce/html/Writer", [ + "tinymce/html/Entities", + "tinymce/util/Tools" +], function(Entities, Tools) { + var makeMap = Tools.makeMap; + + /** + * Constructs a new Writer instance. + * + * @constructor + * @method Writer + * @param {Object} settings Name/value settings object. + */ + return function(settings) { + var html = [], indent, indentBefore, indentAfter, encode, htmlOutput; + + settings = settings || {}; + indent = settings.indent; + indentBefore = makeMap(settings.indent_before || ''); + indentAfter = makeMap(settings.indent_after || ''); + encode = Entities.getEncodeFunc(settings.entity_encoding || 'raw', settings.entities); + htmlOutput = settings.element_format == "html"; + + return { + /** + * Writes the a start element such as

    . + * + * @method start + * @param {String} name Name of the element. + * @param {Array} attrs Optional attribute array or undefined if it hasn't any. + * @param {Boolean} empty Optional empty state if the tag should end like
    . + */ + start: function(name, attrs, empty) { + var i, l, attr, value; + + if (indent && indentBefore[name] && html.length > 0) { + value = html[html.length - 1]; + + if (value.length > 0 && value !== '\n') { + html.push('\n'); + } + } + + html.push('<', name); + + if (attrs) { + for (i = 0, l = attrs.length; i < l; i++) { + attr = attrs[i]; + html.push(' ', attr.name, '="', encode(attr.value, true), '"'); + } + } + + if (!empty || htmlOutput) { + html[html.length] = '>'; + } else { + html[html.length] = ' />'; + } + + if (empty && indent && indentAfter[name] && html.length > 0) { + value = html[html.length - 1]; + + if (value.length > 0 && value !== '\n') { + html.push('\n'); + } + } + }, + + /** + * Writes the a end element such as

    . + * + * @method end + * @param {String} name Name of the element. + */ + end: function(name) { + var value; + + /*if (indent && indentBefore[name] && html.length > 0) { + value = html[html.length - 1]; + + if (value.length > 0 && value !== '\n') + html.push('\n'); + }*/ + + html.push(''); + + if (indent && indentAfter[name] && html.length > 0) { + value = html[html.length - 1]; + + if (value.length > 0 && value !== '\n') { + html.push('\n'); + } + } + }, + + /** + * Writes a text node. + * + * @method text + * @param {String} text String to write out. + * @param {Boolean} raw Optional raw state if true the contents wont get encoded. + */ + text: function(text, raw) { + if (text.length > 0) { + html[html.length] = raw ? text : encode(text); + } + }, + + /** + * Writes a cdata node such as . + * + * @method cdata + * @param {String} text String to write out inside the cdata. + */ + cdata: function(text) { + html.push(''); + }, + + /** + * Writes a comment node such as . + * + * @method cdata + * @param {String} text String to write out inside the comment. + */ + comment: function(text) { + html.push(''); + }, + + /** + * Writes a PI node such as . + * + * @method pi + * @param {String} name Name of the pi. + * @param {String} text String to write out inside the pi. + */ + pi: function(name, text) { + if (text) { + html.push(''); + } else { + html.push(''); + } + + if (indent) { + html.push('\n'); + } + }, + + /** + * Writes a doctype node such as . + * + * @method doctype + * @param {String} text String to write out inside the doctype. + */ + doctype: function(text) { + html.push('', indent ? '\n' : ''); + }, + + /** + * Resets the internal buffer if one wants to reuse the writer. + * + * @method reset + */ + reset: function() { + html.length = 0; + }, + + /** + * Returns the contents that got serialized. + * + * @method getContent + * @return {String} HTML contents that got written down. + */ + getContent: function() { + return html.join('').replace(/\n$/, ''); + } + }; + }; +}); + +// Included from: js/tinymce/classes/html/Serializer.js + +/** + * Serializer.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class is used to serialize down the DOM tree into a string using a Writer instance. + * + * + * @example + * new tinymce.html.Serializer().serialize(new tinymce.html.DomParser().parse('

    text

    ')); + * @class tinymce.html.Serializer + * @version 3.4 + */ +define("tinymce/html/Serializer", [ + "tinymce/html/Writer", + "tinymce/html/Schema" +], function(Writer, Schema) { + /** + * Constructs a new Serializer instance. + * + * @constructor + * @method Serializer + * @param {Object} settings Name/value settings object. + * @param {tinymce.html.Schema} schema Schema instance to use. + */ + return function(settings, schema) { + var self = this, writer = new Writer(settings); + + settings = settings || {}; + settings.validate = "validate" in settings ? settings.validate : true; + + self.schema = schema = schema || new Schema(); + self.writer = writer; + + /** + * Serializes the specified node into a string. + * + * @example + * new tinymce.html.Serializer().serialize(new tinymce.html.DomParser().parse('

    text

    ')); + * @method serialize + * @param {tinymce.html.Node} node Node instance to serialize. + * @return {String} String with HTML based on DOM tree. + */ + self.serialize = function(node) { + var handlers, validate; + + validate = settings.validate; + + handlers = { + // #text + 3: function(node) { + writer.text(node.value, node.raw); + }, + + // #comment + 8: function(node) { + writer.comment(node.value); + }, + + // Processing instruction + 7: function(node) { + writer.pi(node.name, node.value); + }, + + // Doctype + 10: function(node) { + writer.doctype(node.value); + }, + + // CDATA + 4: function(node) { + writer.cdata(node.value); + }, + + // Document fragment + 11: function(node) { + if ((node = node.firstChild)) { + do { + walk(node); + } while ((node = node.next)); + } + } + }; + + writer.reset(); + + function walk(node) { + var handler = handlers[node.type], name, isEmpty, attrs, attrName, attrValue, sortedAttrs, i, l, elementRule; + + if (!handler) { + name = node.name; + isEmpty = node.shortEnded; + attrs = node.attributes; + + // Sort attributes + if (validate && attrs && attrs.length > 1) { + sortedAttrs = []; + sortedAttrs.map = {}; + + elementRule = schema.getElementRule(node.name); + for (i = 0, l = elementRule.attributesOrder.length; i < l; i++) { + attrName = elementRule.attributesOrder[i]; + + if (attrName in attrs.map) { + attrValue = attrs.map[attrName]; + sortedAttrs.map[attrName] = attrValue; + sortedAttrs.push({name: attrName, value: attrValue}); + } + } + + for (i = 0, l = attrs.length; i < l; i++) { + attrName = attrs[i].name; + + if (!(attrName in sortedAttrs.map)) { + attrValue = attrs.map[attrName]; + sortedAttrs.map[attrName] = attrValue; + sortedAttrs.push({name: attrName, value: attrValue}); + } + } + + attrs = sortedAttrs; + } + + writer.start(node.name, attrs, isEmpty); + + if (!isEmpty) { + if ((node = node.firstChild)) { + do { + walk(node); + } while ((node = node.next)); + } + + writer.end(name); + } + } else { + handler(node); + } + } + + // Serialize element and treat all non elements as fragments + if (node.type == 1 && !settings.inner) { + walk(node); + } else { + handlers[11](node); + } + + return writer.getContent(); + }; + }; +}); + +// Included from: js/tinymce/classes/dom/Serializer.js + +/** + * Serializer.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class is used to serialize DOM trees into a string. Consult the TinyMCE Wiki API for + * more details and examples on how to use this class. + * + * @class tinymce.dom.Serializer + */ +define("tinymce/dom/Serializer", [ + "tinymce/dom/DOMUtils", + "tinymce/html/DomParser", + "tinymce/html/Entities", + "tinymce/html/Serializer", + "tinymce/html/Node", + "tinymce/html/Schema", + "tinymce/Env", + "tinymce/util/Tools" +], function(DOMUtils, DomParser, Entities, Serializer, Node, Schema, Env, Tools) { + var each = Tools.each, trim = Tools.trim; + var DOM = DOMUtils.DOM; + + /** + * Constructs a new DOM serializer class. + * + * @constructor + * @method Serializer + * @param {Object} settings Serializer settings object. + * @param {tinymce.Editor} editor Optional editor to bind events to and get schema/dom from. + */ + return function(settings, editor) { + var dom, schema, htmlParser; + + if (editor) { + dom = editor.dom; + schema = editor.schema; + } + + // Default DOM and Schema if they are undefined + dom = dom || DOM; + schema = schema || new Schema(settings); + settings.entity_encoding = settings.entity_encoding || 'named'; + settings.remove_trailing_brs = "remove_trailing_brs" in settings ? settings.remove_trailing_brs : true; + + htmlParser = new DomParser(settings, schema); + + // Convert move data-mce-src, data-mce-href and data-mce-style into nodes or process them if needed + htmlParser.addAttributeFilter('src,href,style', function(nodes, name) { + var i = nodes.length, node, value, internalName = 'data-mce-' + name; + var urlConverter = settings.url_converter, urlConverterScope = settings.url_converter_scope, undef; + + while (i--) { + node = nodes[i]; + + value = node.attributes.map[internalName]; + if (value !== undef) { + // Set external name to internal value and remove internal + node.attr(name, value.length > 0 ? value : null); + node.attr(internalName, null); + } else { + // No internal attribute found then convert the value we have in the DOM + value = node.attributes.map[name]; + + if (name === "style") { + value = dom.serializeStyle(dom.parseStyle(value), node.name); + } else if (urlConverter) { + value = urlConverter.call(urlConverterScope, value, name, node.name); + } + + node.attr(name, value.length > 0 ? value : null); + } + } + }); + + // Remove internal classes mceItem<..> or mceSelected + htmlParser.addAttributeFilter('class', function(nodes) { + var i = nodes.length, node, value; + + while (i--) { + node = nodes[i]; + value = node.attr('class').replace(/(?:^|\s)mce-item-\w+(?!\S)/g, ''); + node.attr('class', value.length > 0 ? value : null); + } + }); + + // Remove bookmark elements + htmlParser.addAttributeFilter('data-mce-type', function(nodes, name, args) { + var i = nodes.length, node; + + while (i--) { + node = nodes[i]; + + if (node.attributes.map['data-mce-type'] === 'bookmark' && !args.cleanup) { + node.remove(); + } + } + }); + + // Remove expando attributes + htmlParser.addAttributeFilter('data-mce-expando', function(nodes, name) { + var i = nodes.length; + + while (i--) { + nodes[i].attr(name, null); + } + }); + + htmlParser.addNodeFilter('noscript', function(nodes) { + var i = nodes.length, node; + + while (i--) { + node = nodes[i].firstChild; + + if (node) { + node.value = Entities.decode(node.value); + } + } + }); + + // Force script into CDATA sections and remove the mce- prefix also add comments around styles + htmlParser.addNodeFilter('script,style', function(nodes, name) { + var i = nodes.length, node, value; + + function trim(value) { + /*jshint maxlen:255 */ + /*eslint max-len:0 */ + return value.replace(/()/g, '\n') + .replace(/^[\r\n]*|[\r\n]*$/g, '') + .replace(/^\s*(()?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g, ''); + } + + while (i--) { + node = nodes[i]; + value = node.firstChild ? node.firstChild.value : ''; + + if (name === "script") { + // Remove mce- prefix from script elements and remove default text/javascript mime type (HTML5) + var type = (node.attr('type') || 'text/javascript').replace(/^mce\-/, ''); + node.attr('type', type === 'text/javascript' ? null : type); + + if (value.length > 0) { + node.firstChild.value = '// '; + } + } else { + if (value.length > 0) { + node.firstChild.value = ''; + } + } + } + }); + + // Convert comments to cdata and handle protected comments + htmlParser.addNodeFilter('#comment', function(nodes) { + var i = nodes.length, node; + + while (i--) { + node = nodes[i]; + + if (node.value.indexOf('[CDATA[') === 0) { + node.name = '#cdata'; + node.type = 4; + node.value = node.value.replace(/^\[CDATA\[|\]\]$/g, ''); + } else if (node.value.indexOf('mce:protected ') === 0) { + node.name = "#text"; + node.type = 3; + node.raw = true; + node.value = unescape(node.value).substr(14); + } + } + }); + + htmlParser.addNodeFilter('xml:namespace,input', function(nodes, name) { + var i = nodes.length, node; + + while (i--) { + node = nodes[i]; + if (node.type === 7) { + node.remove(); + } else if (node.type === 1) { + if (name === "input" && !("type" in node.attributes.map)) { + node.attr('type', 'text'); + } + } + } + }); + + // Fix list elements, TODO: Replace this later + if (settings.fix_list_elements) { + htmlParser.addNodeFilter('ul,ol', function(nodes) { + var i = nodes.length, node, parentNode; + + while (i--) { + node = nodes[i]; + parentNode = node.parent; + + if (parentNode.name === 'ul' || parentNode.name === 'ol') { + if (node.prev && node.prev.name === 'li') { + node.prev.append(node); + } + } + } + }); + } + + // Remove internal data attributes + htmlParser.addAttributeFilter('data-mce-src,data-mce-href,data-mce-style,data-mce-selected', function(nodes, name) { + var i = nodes.length; + + while (i--) { + nodes[i].attr(name, null); + } + }); + + // Return public methods + return { + /** + * Schema instance that was used to when the Serializer was constructed. + * + * @field {tinymce.html.Schema} schema + */ + schema: schema, + + /** + * Adds a node filter function to the parser used by the serializer, the parser will collect the specified nodes by name + * and then execute the callback ones it has finished parsing the document. + * + * @example + * parser.addNodeFilter('p,h1', function(nodes, name) { + * for (var i = 0; i < nodes.length; i++) { + * console.log(nodes[i].name); + * } + * }); + * @method addNodeFilter + * @method {String} name Comma separated list of nodes to collect. + * @param {function} callback Callback function to execute once it has collected nodes. + */ + addNodeFilter: htmlParser.addNodeFilter, + + /** + * Adds a attribute filter function to the parser used by the serializer, the parser will + * collect nodes that has the specified attributes + * and then execute the callback ones it has finished parsing the document. + * + * @example + * parser.addAttributeFilter('src,href', function(nodes, name) { + * for (var i = 0; i < nodes.length; i++) { + * console.log(nodes[i].name); + * } + * }); + * @method addAttributeFilter + * @method {String} name Comma separated list of nodes to collect. + * @param {function} callback Callback function to execute once it has collected nodes. + */ + addAttributeFilter: htmlParser.addAttributeFilter, + + /** + * Serializes the specified browser DOM node into a HTML string. + * + * @method serialize + * @param {DOMNode} node DOM node to serialize. + * @param {Object} args Arguments option that gets passed to event handlers. + */ + serialize: function(node, args) { + var self = this, impl, doc, oldDoc, htmlSerializer, content; + + // Explorer won't clone contents of script and style and the + // selected index of select elements are cleared on a clone operation. + if (Env.ie && dom.select('script,style,select,map').length > 0) { + content = node.innerHTML; + node = node.cloneNode(false); + dom.setHTML(node, content); + } else { + node = node.cloneNode(true); + } + + // Nodes needs to be attached to something in WebKit/Opera + // This fix will make DOM ranges and make Sizzle happy! + impl = node.ownerDocument.implementation; + if (impl.createHTMLDocument) { + // Create an empty HTML document + doc = impl.createHTMLDocument(""); + + // Add the element or it's children if it's a body element to the new document + each(node.nodeName == 'BODY' ? node.childNodes : [node], function(node) { + doc.body.appendChild(doc.importNode(node, true)); + }); + + // Grab first child or body element for serialization + if (node.nodeName != 'BODY') { + node = doc.body.firstChild; + } else { + node = doc.body; + } + + // set the new document in DOMUtils so createElement etc works + oldDoc = dom.doc; + dom.doc = doc; + } + + args = args || {}; + args.format = args.format || 'html'; + + // Don't wrap content if we want selected html + if (args.selection) { + args.forced_root_block = ''; + } + + // Pre process + if (!args.no_events) { + args.node = node; + self.onPreProcess(args); + } + + // Setup serializer + htmlSerializer = new Serializer(settings, schema); + + // Parse and serialize HTML + args.content = htmlSerializer.serialize( + htmlParser.parse(trim(args.getInner ? node.innerHTML : dom.getOuterHTML(node)), args) + ); + + // Replace all BOM characters for now until we can find a better solution + if (!args.cleanup) { + args.content = args.content.replace(/\uFEFF/g, ''); + } + + // Post process + if (!args.no_events) { + self.onPostProcess(args); + } + + // Restore the old document if it was changed + if (oldDoc) { + dom.doc = oldDoc; + } + + args.node = null; + + return args.content; + }, + + /** + * Adds valid elements rules to the serializers schema instance this enables you to specify things + * like what elements should be outputted and what attributes specific elements might have. + * Consult the Wiki for more details on this format. + * + * @method addRules + * @param {String} rules Valid elements rules string to add to schema. + */ + addRules: function(rules) { + schema.addValidElements(rules); + }, + + /** + * Sets the valid elements rules to the serializers schema instance this enables you to specify things + * like what elements should be outputted and what attributes specific elements might have. + * Consult the Wiki for more details on this format. + * + * @method setRules + * @param {String} rules Valid elements rules string. + */ + setRules: function(rules) { + schema.setValidElements(rules); + }, + + onPreProcess: function(args) { + if (editor) { + editor.fire('PreProcess', args); + } + }, + + onPostProcess: function(args) { + if (editor) { + editor.fire('PostProcess', args); + } + } + }; + }; +}); + +// Included from: js/tinymce/classes/dom/TridentSelection.js + +/** + * TridentSelection.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Selection class for old explorer versions. This one fakes the + * native selection object available on modern browsers. + * + * @class tinymce.dom.TridentSelection + */ +define("tinymce/dom/TridentSelection", [], function() { + function Selection(selection) { + var self = this, dom = selection.dom, FALSE = false; + + function getPosition(rng, start) { + var checkRng, startIndex = 0, endIndex, inside, + children, child, offset, index, position = -1, parent; + + // Setup test range, collapse it and get the parent + checkRng = rng.duplicate(); + checkRng.collapse(start); + parent = checkRng.parentElement(); + + // Check if the selection is within the right document + if (parent.ownerDocument !== selection.dom.doc) { + return; + } + + // IE will report non editable elements as it's parent so look for an editable one + while (parent.contentEditable === "false") { + parent = parent.parentNode; + } + + // If parent doesn't have any children then return that we are inside the element + if (!parent.hasChildNodes()) { + return {node: parent, inside: 1}; + } + + // Setup node list and endIndex + children = parent.children; + endIndex = children.length - 1; + + // Perform a binary search for the position + while (startIndex <= endIndex) { + index = Math.floor((startIndex + endIndex) / 2); + + // Move selection to node and compare the ranges + child = children[index]; + checkRng.moveToElementText(child); + position = checkRng.compareEndPoints(start ? 'StartToStart' : 'EndToEnd', rng); + + // Before/after or an exact match + if (position > 0) { + endIndex = index - 1; + } else if (position < 0) { + startIndex = index + 1; + } else { + return {node: child}; + } + } + + // Check if child position is before or we didn't find a position + if (position < 0) { + // No element child was found use the parent element and the offset inside that + if (!child) { + checkRng.moveToElementText(parent); + checkRng.collapse(true); + child = parent; + inside = true; + } else { + checkRng.collapse(false); + } + + // Walk character by character in text node until we hit the selected range endpoint, + // hit the end of document or parent isn't the right one + // We need to walk char by char since rng.text or rng.htmlText will trim line endings + offset = 0; + while (checkRng.compareEndPoints(start ? 'StartToStart' : 'StartToEnd', rng) !== 0) { + if (checkRng.move('character', 1) === 0 || parent != checkRng.parentElement()) { + break; + } + + offset++; + } + } else { + // Child position is after the selection endpoint + checkRng.collapse(true); + + // Walk character by character in text node until we hit the selected range endpoint, hit + // the end of document or parent isn't the right one + offset = 0; + while (checkRng.compareEndPoints(start ? 'StartToStart' : 'StartToEnd', rng) !== 0) { + if (checkRng.move('character', -1) === 0 || parent != checkRng.parentElement()) { + break; + } + + offset++; + } + } + + return {node: child, position: position, offset: offset, inside: inside}; + } + + // Returns a W3C DOM compatible range object by using the IE Range API + function getRange() { + var ieRange = selection.getRng(), domRange = dom.createRng(), element, collapsed, tmpRange, element2, bookmark; + + // If selection is outside the current document just return an empty range + element = ieRange.item ? ieRange.item(0) : ieRange.parentElement(); + if (element.ownerDocument != dom.doc) { + return domRange; + } + + collapsed = selection.isCollapsed(); + + // Handle control selection + if (ieRange.item) { + domRange.setStart(element.parentNode, dom.nodeIndex(element)); + domRange.setEnd(domRange.startContainer, domRange.startOffset + 1); + + return domRange; + } + + function findEndPoint(start) { + var endPoint = getPosition(ieRange, start), container, offset, textNodeOffset = 0, sibling, undef, nodeValue; + + container = endPoint.node; + offset = endPoint.offset; + + if (endPoint.inside && !container.hasChildNodes()) { + domRange[start ? 'setStart' : 'setEnd'](container, 0); + return; + } + + if (offset === undef) { + domRange[start ? 'setStartBefore' : 'setEndAfter'](container); + return; + } + + if (endPoint.position < 0) { + sibling = endPoint.inside ? container.firstChild : container.nextSibling; + + if (!sibling) { + domRange[start ? 'setStartAfter' : 'setEndAfter'](container); + return; + } + + if (!offset) { + if (sibling.nodeType == 3) { + domRange[start ? 'setStart' : 'setEnd'](sibling, 0); + } else { + domRange[start ? 'setStartBefore' : 'setEndBefore'](sibling); + } + + return; + } + + // Find the text node and offset + while (sibling) { + nodeValue = sibling.nodeValue; + textNodeOffset += nodeValue.length; + + // We are at or passed the position we where looking for + if (textNodeOffset >= offset) { + container = sibling; + textNodeOffset -= offset; + textNodeOffset = nodeValue.length - textNodeOffset; + break; + } + + sibling = sibling.nextSibling; + } + } else { + // Find the text node and offset + sibling = container.previousSibling; + + if (!sibling) { + return domRange[start ? 'setStartBefore' : 'setEndBefore'](container); + } + + // If there isn't any text to loop then use the first position + if (!offset) { + if (container.nodeType == 3) { + domRange[start ? 'setStart' : 'setEnd'](sibling, container.nodeValue.length); + } else { + domRange[start ? 'setStartAfter' : 'setEndAfter'](sibling); + } + + return; + } + + while (sibling) { + textNodeOffset += sibling.nodeValue.length; + + // We are at or passed the position we where looking for + if (textNodeOffset >= offset) { + container = sibling; + textNodeOffset -= offset; + break; + } + + sibling = sibling.previousSibling; + } + } + + domRange[start ? 'setStart' : 'setEnd'](container, textNodeOffset); + } + + try { + // Find start point + findEndPoint(true); + + // Find end point if needed + if (!collapsed) { + findEndPoint(); + } + } catch (ex) { + // IE has a nasty bug where text nodes might throw "invalid argument" when you + // access the nodeValue or other properties of text nodes. This seems to happend when + // text nodes are split into two nodes by a delete/backspace call. So lets detect it and try to fix it. + if (ex.number == -2147024809) { + // Get the current selection + bookmark = self.getBookmark(2); + + // Get start element + tmpRange = ieRange.duplicate(); + tmpRange.collapse(true); + element = tmpRange.parentElement(); + + // Get end element + if (!collapsed) { + tmpRange = ieRange.duplicate(); + tmpRange.collapse(false); + element2 = tmpRange.parentElement(); + element2.innerHTML = element2.innerHTML; + } + + // Remove the broken elements + element.innerHTML = element.innerHTML; + + // Restore the selection + self.moveToBookmark(bookmark); + + // Since the range has moved we need to re-get it + ieRange = selection.getRng(); + + // Find start point + findEndPoint(true); + + // Find end point if needed + if (!collapsed) { + findEndPoint(); + } + } else { + throw ex; // Throw other errors + } + } + + return domRange; + } + + this.getBookmark = function(type) { + var rng = selection.getRng(), bookmark = {}; + + function getIndexes(node) { + var parent, root, children, i, indexes = []; + + parent = node.parentNode; + root = dom.getRoot().parentNode; + + while (parent != root && parent.nodeType !== 9) { + children = parent.children; + + i = children.length; + while (i--) { + if (node === children[i]) { + indexes.push(i); + break; + } + } + + node = parent; + parent = parent.parentNode; + } + + return indexes; + } + + function getBookmarkEndPoint(start) { + var position; + + position = getPosition(rng, start); + if (position) { + return { + position: position.position, + offset: position.offset, + indexes: getIndexes(position.node), + inside: position.inside + }; + } + } + + // Non ubstructive bookmark + if (type === 2) { + // Handle text selection + if (!rng.item) { + bookmark.start = getBookmarkEndPoint(true); + + if (!selection.isCollapsed()) { + bookmark.end = getBookmarkEndPoint(); + } + } else { + bookmark.start = {ctrl: true, indexes: getIndexes(rng.item(0))}; + } + } + + return bookmark; + }; + + this.moveToBookmark = function(bookmark) { + var rng, body = dom.doc.body; + + function resolveIndexes(indexes) { + var node, i, idx, children; + + node = dom.getRoot(); + for (i = indexes.length - 1; i >= 0; i--) { + children = node.children; + idx = indexes[i]; + + if (idx <= children.length - 1) { + node = children[idx]; + } + } + + return node; + } + + function setBookmarkEndPoint(start) { + var endPoint = bookmark[start ? 'start' : 'end'], moveLeft, moveRng, undef, offset; + + if (endPoint) { + moveLeft = endPoint.position > 0; + + moveRng = body.createTextRange(); + moveRng.moveToElementText(resolveIndexes(endPoint.indexes)); + + offset = endPoint.offset; + if (offset !== undef) { + moveRng.collapse(endPoint.inside || moveLeft); + moveRng.moveStart('character', moveLeft ? -offset : offset); + } else { + moveRng.collapse(start); + } + + rng.setEndPoint(start ? 'StartToStart' : 'EndToStart', moveRng); + + if (start) { + rng.collapse(true); + } + } + } + + if (bookmark.start) { + if (bookmark.start.ctrl) { + rng = body.createControlRange(); + rng.addElement(resolveIndexes(bookmark.start.indexes)); + rng.select(); + } else { + rng = body.createTextRange(); + setBookmarkEndPoint(true); + setBookmarkEndPoint(); + rng.select(); + } + } + }; + + this.addRange = function(rng) { + var ieRng, ctrlRng, startContainer, startOffset, endContainer, endOffset, sibling, + doc = selection.dom.doc, body = doc.body, nativeRng, ctrlElm; + + function setEndPoint(start) { + var container, offset, marker, tmpRng, nodes; + + marker = dom.create('a'); + container = start ? startContainer : endContainer; + offset = start ? startOffset : endOffset; + tmpRng = ieRng.duplicate(); + + if (container == doc || container == doc.documentElement) { + container = body; + offset = 0; + } + + if (container.nodeType == 3) { + container.parentNode.insertBefore(marker, container); + tmpRng.moveToElementText(marker); + tmpRng.moveStart('character', offset); + dom.remove(marker); + ieRng.setEndPoint(start ? 'StartToStart' : 'EndToEnd', tmpRng); + } else { + nodes = container.childNodes; + + if (nodes.length) { + if (offset >= nodes.length) { + dom.insertAfter(marker, nodes[nodes.length - 1]); + } else { + container.insertBefore(marker, nodes[offset]); + } + + tmpRng.moveToElementText(marker); + } else if (container.canHaveHTML) { + // Empty node selection for example
    |
    + // Setting innerHTML with a span marker then remove that marker seems to keep empty block elements open + container.innerHTML = ''; + marker = container.firstChild; + tmpRng.moveToElementText(marker); + tmpRng.collapse(FALSE); // Collapse false works better than true for some odd reason + } + + ieRng.setEndPoint(start ? 'StartToStart' : 'EndToEnd', tmpRng); + dom.remove(marker); + } + } + + // Setup some shorter versions + startContainer = rng.startContainer; + startOffset = rng.startOffset; + endContainer = rng.endContainer; + endOffset = rng.endOffset; + ieRng = body.createTextRange(); + + // If single element selection then try making a control selection out of it + if (startContainer == endContainer && startContainer.nodeType == 1) { + // Trick to place the caret inside an empty block element like

    + if (startOffset == endOffset && !startContainer.hasChildNodes()) { + if (startContainer.canHaveHTML) { + // Check if previous sibling is an empty block if it is then we need to render it + // IE would otherwise move the caret into the sibling instead of the empty startContainer see: #5236 + // Example this:

    |

    would become this:

    |

    + sibling = startContainer.previousSibling; + if (sibling && !sibling.hasChildNodes() && dom.isBlock(sibling)) { + sibling.innerHTML = ''; + } else { + sibling = null; + } + + startContainer.innerHTML = ''; + ieRng.moveToElementText(startContainer.lastChild); + ieRng.select(); + dom.doc.selection.clear(); + startContainer.innerHTML = ''; + + if (sibling) { + sibling.innerHTML = ''; + } + return; + } else { + startOffset = dom.nodeIndex(startContainer); + startContainer = startContainer.parentNode; + } + } + + if (startOffset == endOffset - 1) { + try { + ctrlElm = startContainer.childNodes[startOffset]; + ctrlRng = body.createControlRange(); + ctrlRng.addElement(ctrlElm); + ctrlRng.select(); + + // Check if the range produced is on the correct element and is a control range + // On IE 8 it will select the parent contentEditable container if you select an inner element see: #5398 + nativeRng = selection.getRng(); + if (nativeRng.item && ctrlElm === nativeRng.item(0)) { + return; + } + } catch (ex) { + // Ignore + } + } + } + + // Set start/end point of selection + setEndPoint(true); + setEndPoint(); + + // Select the new range and scroll it into view + ieRng.select(); + }; + + // Expose range method + this.getRangeAt = getRange; + } + + return Selection; +}); + +// Included from: js/tinymce/classes/util/VK.js + +/** + * VK.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This file exposes a set of the common KeyCodes for use. Please grow it as needed. + */ +define("tinymce/util/VK", [ + "tinymce/Env" +], function(Env) { + return { + BACKSPACE: 8, + DELETE: 46, + DOWN: 40, + ENTER: 13, + LEFT: 37, + RIGHT: 39, + SPACEBAR: 32, + TAB: 9, + UP: 38, + + modifierPressed: function(e) { + return e.shiftKey || e.ctrlKey || e.altKey; + }, + + metaKeyPressed: function(e) { + // Check if ctrl or meta key is pressed also check if alt is false for Polish users + return (Env.mac ? e.metaKey : e.ctrlKey) && !e.altKey; + } + }; +}); + +// Included from: js/tinymce/classes/dom/ControlSelection.js + +/** + * ControlSelection.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class handles control selection of elements. Controls are elements + * that can be resized and needs to be selected as a whole. It adds custom resize handles + * to all browser engines that support properly disabling the built in resize logic. + * + * @class tinymce.dom.ControlSelection + */ +define("tinymce/dom/ControlSelection", [ + "tinymce/util/VK", + "tinymce/util/Tools", + "tinymce/Env" +], function(VK, Tools, Env) { + return function(selection, editor) { + var dom = editor.dom, each = Tools.each; + var selectedElm, selectedElmGhost, resizeHandles, selectedHandle, lastMouseDownEvent; + var startX, startY, selectedElmX, selectedElmY, startW, startH, ratio, resizeStarted; + var width, height, editableDoc = editor.getDoc(), rootDocument = document, isIE = Env.ie && Env.ie < 11; + + // Details about each resize handle how to scale etc + resizeHandles = { + // Name: x multiplier, y multiplier, delta size x, delta size y + n: [0.5, 0, 0, -1], + e: [1, 0.5, 1, 0], + s: [0.5, 1, 0, 1], + w: [0, 0.5, -1, 0], + nw: [0, 0, -1, -1], + ne: [1, 0, 1, -1], + se: [1, 1, 1, 1], + sw: [0, 1, -1, 1] + }; + + // Add CSS for resize handles, cloned element and selected + var rootClass = '.mce-content-body'; + editor.contentStyles.push( + rootClass + ' div.mce-resizehandle {' + + 'position: absolute;' + + 'border: 1px solid black;' + + 'background: #FFF;' + + 'width: 5px;' + + 'height: 5px;' + + 'z-index: 10000' + + '}' + + rootClass + ' .mce-resizehandle:hover {' + + 'background: #000' + + '}' + + rootClass + ' img[data-mce-selected], hr[data-mce-selected] {' + + 'outline: 1px solid black;' + + 'resize: none' + // Have been talks about implementing this in browsers + '}' + + rootClass + ' .mce-clonedresizable {' + + 'position: absolute;' + + (Env.gecko ? '' : 'outline: 1px dashed black;') + // Gecko produces trails while resizing + 'opacity: .5;' + + 'filter: alpha(opacity=50);' + + 'z-index: 10000' + + '}' + ); + + function isResizable(elm) { + var selector = editor.settings.object_resizing; + + if (selector === false || Env.iOS) { + return false; + } + + if (typeof selector != 'string') { + selector = 'table,img,div'; + } + + if (elm.getAttribute('data-mce-resize') === 'false') { + return false; + } + + return editor.dom.is(elm, selector); + } + + function resizeGhostElement(e) { + var deltaX, deltaY; + + // Calc new width/height + deltaX = e.screenX - startX; + deltaY = e.screenY - startY; + + // Calc new size + width = deltaX * selectedHandle[2] + startW; + height = deltaY * selectedHandle[3] + startH; + + // Never scale down lower than 5 pixels + width = width < 5 ? 5 : width; + height = height < 5 ? 5 : height; + + // Constrain proportions when modifier key is pressed or if the nw, ne, sw, se corners are moved on an image + if (VK.modifierPressed(e) || (selectedElm.nodeName == "IMG" && selectedHandle[2] * selectedHandle[3] !== 0)) { + width = Math.round(height / ratio); + height = Math.round(width * ratio); + } + + // Update ghost size + dom.setStyles(selectedElmGhost, { + width: width, + height: height + }); + + // Update ghost X position if needed + if (selectedHandle[2] < 0 && selectedElmGhost.clientWidth <= width) { + dom.setStyle(selectedElmGhost, 'left', selectedElmX + (startW - width)); + } + + // Update ghost Y position if needed + if (selectedHandle[3] < 0 && selectedElmGhost.clientHeight <= height) { + dom.setStyle(selectedElmGhost, 'top', selectedElmY + (startH - height)); + } + + if (!resizeStarted) { + editor.fire('ObjectResizeStart', {target: selectedElm, width: startW, height: startH}); + resizeStarted = true; + } + } + + function endGhostResize() { + resizeStarted = false; + + function setSizeProp(name, value) { + if (value) { + // Resize by using style or attribute + if (selectedElm.style[name] || !editor.schema.isValid(selectedElm.nodeName.toLowerCase(), name)) { + dom.setStyle(selectedElm, name, value); + } else { + dom.setAttrib(selectedElm, name, value); + } + } + } + + // Set width/height properties + setSizeProp('width', width); + setSizeProp('height', height); + + dom.unbind(editableDoc, 'mousemove', resizeGhostElement); + dom.unbind(editableDoc, 'mouseup', endGhostResize); + + if (rootDocument != editableDoc) { + dom.unbind(rootDocument, 'mousemove', resizeGhostElement); + dom.unbind(rootDocument, 'mouseup', endGhostResize); + } + + // Remove ghost and update resize handle positions + dom.remove(selectedElmGhost); + + if (!isIE || selectedElm.nodeName == "TABLE") { + showResizeRect(selectedElm); + } + + editor.fire('ObjectResized', {target: selectedElm, width: width, height: height}); + editor.nodeChanged(); + } + + function showResizeRect(targetElm, mouseDownHandleName, mouseDownEvent) { + var position, targetWidth, targetHeight, e, rect, offsetParent = editor.getBody(); + + unbindResizeHandleEvents(); + + // Get position and size of target + position = dom.getPos(targetElm, offsetParent); + selectedElmX = position.x; + selectedElmY = position.y; + rect = targetElm.getBoundingClientRect(); // Fix for Gecko offsetHeight for table with caption + targetWidth = rect.width || (rect.right - rect.left); + targetHeight = rect.height || (rect.bottom - rect.top); + + // Reset width/height if user selects a new image/table + if (selectedElm != targetElm) { + detachResizeStartListener(); + selectedElm = targetElm; + width = height = 0; + } + + // Makes it possible to disable resizing + e = editor.fire('ObjectSelected', {target: targetElm}); + + if (isResizable(targetElm) && !e.isDefaultPrevented()) { + each(resizeHandles, function(handle, name) { + var handleElm, handlerContainerElm; + + function startDrag(e) { + startX = e.screenX; + startY = e.screenY; + startW = selectedElm.clientWidth; + startH = selectedElm.clientHeight; + ratio = startH / startW; + selectedHandle = handle; + + selectedElmGhost = selectedElm.cloneNode(true); + dom.addClass(selectedElmGhost, 'mce-clonedresizable'); + selectedElmGhost.contentEditable = false; // Hides IE move layer cursor + selectedElmGhost.unSelectabe = true; + dom.setStyles(selectedElmGhost, { + left: selectedElmX, + top: selectedElmY, + margin: 0 + }); + + selectedElmGhost.removeAttribute('data-mce-selected'); + editor.getBody().appendChild(selectedElmGhost); + + dom.bind(editableDoc, 'mousemove', resizeGhostElement); + dom.bind(editableDoc, 'mouseup', endGhostResize); + + if (rootDocument != editableDoc) { + dom.bind(rootDocument, 'mousemove', resizeGhostElement); + dom.bind(rootDocument, 'mouseup', endGhostResize); + } + } + + if (mouseDownHandleName) { + // Drag started by IE native resizestart + if (name == mouseDownHandleName) { + startDrag(mouseDownEvent); + } + + return; + } + + // Get existing or render resize handle + handleElm = dom.get('mceResizeHandle' + name); + if (!handleElm) { + handlerContainerElm = editor.getBody(); + + handleElm = dom.add(handlerContainerElm, 'div', { + id: 'mceResizeHandle' + name, + 'data-mce-bogus': true, + 'class': 'mce-resizehandle', + unselectable: true, + style: 'cursor:' + name + '-resize; margin:0; padding:0' + }); + + // Hides IE move layer cursor + // If we set it on Chrome we get this wounderful bug: #6725 + if (Env.ie) { + handleElm.contentEditable = false; + } + } else { + dom.show(handleElm); + } + + if (!handle.elm) { + dom.bind(handleElm, 'mousedown', function(e) { + e.stopImmediatePropagation(); + e.preventDefault(); + startDrag(e); + }); + + handle.elm = handleElm; + } + + /* + var halfHandleW = handleElm.offsetWidth / 2; + var halfHandleH = handleElm.offsetHeight / 2; + + // Position element + dom.setStyles(handleElm, { + left: Math.floor((targetWidth * handle[0] + selectedElmX) - halfHandleW + (handle[2] * halfHandleW)), + top: Math.floor((targetHeight * handle[1] + selectedElmY) - halfHandleH + (handle[3] * halfHandleH)) + }); + */ + + // Position element + dom.setStyles(handleElm, { + left: (targetWidth * handle[0] + selectedElmX) - (handleElm.offsetWidth / 2), + top: (targetHeight * handle[1] + selectedElmY) - (handleElm.offsetHeight / 2) + }); + }); + } else { + hideResizeRect(); + } + + selectedElm.setAttribute('data-mce-selected', '1'); + } + + function hideResizeRect() { + var name, handleElm; + + unbindResizeHandleEvents(); + + if (selectedElm) { + selectedElm.removeAttribute('data-mce-selected'); + } + + for (name in resizeHandles) { + handleElm = dom.get('mceResizeHandle' + name); + if (handleElm) { + dom.unbind(handleElm); + dom.remove(handleElm); + } + } + } + + function updateResizeRect(e) { + var controlElm; + + function isChildOrEqual(node, parent) { + if (node) { + do { + if (node === parent) { + return true; + } + } while ((node = node.parentNode)); + } + } + + // Remove data-mce-selected from all elements since they might have been copied using Ctrl+c/v + each(dom.select('img[data-mce-selected],hr[data-mce-selected]'), function(img) { + img.removeAttribute('data-mce-selected'); + }); + + controlElm = e.type == 'mousedown' ? e.target : selection.getNode(); + controlElm = dom.getParent(controlElm, isIE ? 'table' : 'table,img,hr'); + + if (isChildOrEqual(controlElm, editor.getBody())) { + disableGeckoResize(); + + if (isChildOrEqual(selection.getStart(), controlElm) && isChildOrEqual(selection.getEnd(), controlElm)) { + if (!isIE || (controlElm != selection.getStart() && selection.getStart().nodeName !== 'IMG')) { + showResizeRect(controlElm); + return; + } + } + } + + hideResizeRect(); + } + + function attachEvent(elm, name, func) { + if (elm && elm.attachEvent) { + elm.attachEvent('on' + name, func); + } + } + + function detachEvent(elm, name, func) { + if (elm && elm.detachEvent) { + elm.detachEvent('on' + name, func); + } + } + + function resizeNativeStart(e) { + var target = e.srcElement, pos, name, corner, cornerX, cornerY, relativeX, relativeY; + + pos = target.getBoundingClientRect(); + relativeX = lastMouseDownEvent.clientX - pos.left; + relativeY = lastMouseDownEvent.clientY - pos.top; + + // Figure out what corner we are draging on + for (name in resizeHandles) { + corner = resizeHandles[name]; + + cornerX = target.offsetWidth * corner[0]; + cornerY = target.offsetHeight * corner[1]; + + if (Math.abs(cornerX - relativeX) < 8 && Math.abs(cornerY - relativeY) < 8) { + selectedHandle = corner; + break; + } + } + + // Remove native selection and let the magic begin + resizeStarted = true; + editor.getDoc().selection.empty(); + showResizeRect(target, name, lastMouseDownEvent); + } + + function nativeControlSelect(e) { + var target = e.srcElement; + + if (target != selectedElm) { + detachResizeStartListener(); + + if (target.id.indexOf('mceResizeHandle') === 0) { + e.returnValue = false; + return; + } + + if (target.nodeName == 'IMG' || target.nodeName == 'TABLE') { + hideResizeRect(); + selectedElm = target; + attachEvent(target, 'resizestart', resizeNativeStart); + } + } + } + + function detachResizeStartListener() { + detachEvent(selectedElm, 'resizestart', resizeNativeStart); + } + + function unbindResizeHandleEvents() { + for (var name in resizeHandles) { + var handle = resizeHandles[name]; + + if (handle.elm) { + dom.unbind(handle.elm); + delete handle.elm; + } + } + } + + function disableGeckoResize() { + try { + // Disable object resizing on Gecko + editor.getDoc().execCommand('enableObjectResizing', false, false); + } catch (ex) { + // Ignore + } + } + + function controlSelect(elm) { + var ctrlRng; + + if (!isIE) { + return; + } + + ctrlRng = editableDoc.body.createControlRange(); + + try { + ctrlRng.addElement(elm); + ctrlRng.select(); + return true; + } catch (ex) { + // Ignore since the element can't be control selected for example a P tag + } + } + + editor.on('init', function() { + if (isIE) { + // Hide the resize rect on resize and reselect the image + editor.on('ObjectResized', function(e) { + if (e.target.nodeName != 'TABLE') { + hideResizeRect(); + controlSelect(e.target); + } + }); + + attachEvent(editor.getBody(), 'controlselect', nativeControlSelect); + + editor.on('mousedown', function(e) { + lastMouseDownEvent = e; + }); + } else { + disableGeckoResize(); + + if (Env.ie >= 11) { + // TODO: Drag/drop doesn't work + editor.on('mouseup', function(e) { + var nodeName = e.target.nodeName; + + if (/^(TABLE|IMG|HR)$/.test(nodeName)) { + editor.selection.select(e.target, nodeName == 'TABLE'); + editor.nodeChanged(); + } + }); + + editor.dom.bind(editor.getBody(), 'mscontrolselect', function(e) { + if (/^(TABLE|IMG|HR)$/.test(e.target.nodeName)) { + e.preventDefault(); + + // This moves the selection from being a control selection to a text like selection like in WebKit #6753 + // TODO: Fix this the day IE works like other browsers without this nasty native ugly control selections. + if (e.target.tagName == 'IMG') { + window.setTimeout(function() { + editor.selection.select(e.target); + }, 0); + } + } + }); + } + } + + editor.on('nodechange mousedown mouseup ResizeEditor', updateResizeRect); + + // Update resize rect while typing in a table + editor.on('keydown keyup', function(e) { + if (selectedElm && selectedElm.nodeName == "TABLE") { + updateResizeRect(e); + } + }); + + // Hide rect on focusout since it would float on top of windows otherwise + //editor.on('focusout', hideResizeRect); + }); + + editor.on('remove', unbindResizeHandleEvents); + + function destroy() { + selectedElm = selectedElmGhost = null; + + if (isIE) { + detachResizeStartListener(); + detachEvent(editor.getBody(), 'controlselect', nativeControlSelect); + } + } + + return { + isResizable: isResizable, + showResizeRect: showResizeRect, + hideResizeRect: hideResizeRect, + updateResizeRect: updateResizeRect, + controlSelect: controlSelect, + destroy: destroy + }; + }; +}); + +// Included from: js/tinymce/classes/dom/RangeUtils.js + +/** + * Range.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * RangeUtils + * + * @class tinymce.dom.RangeUtils + * @private + */ +define("tinymce/dom/RangeUtils", [ + "tinymce/util/Tools", + "tinymce/dom/TreeWalker" +], function(Tools, TreeWalker) { + var each = Tools.each; + + function RangeUtils(dom) { + /** + * Walks the specified range like object and executes the callback for each sibling collection it finds. + * + * @method walk + * @param {Object} rng Range like object. + * @param {function} callback Callback function to execute for each sibling collection. + */ + this.walk = function(rng, callback) { + var startContainer = rng.startContainer, + startOffset = rng.startOffset, + endContainer = rng.endContainer, + endOffset = rng.endOffset, + ancestor, startPoint, + endPoint, node, parent, siblings, nodes; + + // Handle table cell selection the table plugin enables + // you to fake select table cells and perform formatting actions on them + nodes = dom.select('td.mce-item-selected,th.mce-item-selected'); + if (nodes.length > 0) { + each(nodes, function(node) { + callback([node]); + }); + + return; + } + + /** + * Excludes start/end text node if they are out side the range + * + * @private + * @param {Array} nodes Nodes to exclude items from. + * @return {Array} Array with nodes excluding the start/end container if needed. + */ + function exclude(nodes) { + var node; + + // First node is excluded + node = nodes[0]; + if (node.nodeType === 3 && node === startContainer && startOffset >= node.nodeValue.length) { + nodes.splice(0, 1); + } + + // Last node is excluded + node = nodes[nodes.length - 1]; + if (endOffset === 0 && nodes.length > 0 && node === endContainer && node.nodeType === 3) { + nodes.splice(nodes.length - 1, 1); + } + + return nodes; + } + + /** + * Collects siblings + * + * @private + * @param {Node} node Node to collect siblings from. + * @param {String} name Name of the sibling to check for. + * @return {Array} Array of collected siblings. + */ + function collectSiblings(node, name, end_node) { + var siblings = []; + + for (; node && node != end_node; node = node[name]) { + siblings.push(node); + } + + return siblings; + } + + /** + * Find an end point this is the node just before the common ancestor root. + * + * @private + * @param {Node} node Node to start at. + * @param {Node} root Root/ancestor element to stop just before. + * @return {Node} Node just before the root element. + */ + function findEndPoint(node, root) { + do { + if (node.parentNode == root) { + return node; + } + + node = node.parentNode; + } while(node); + } + + function walkBoundary(start_node, end_node, next) { + var siblingName = next ? 'nextSibling' : 'previousSibling'; + + for (node = start_node, parent = node.parentNode; node && node != end_node; node = parent) { + parent = node.parentNode; + siblings = collectSiblings(node == start_node ? node : node[siblingName], siblingName); + + if (siblings.length) { + if (!next) { + siblings.reverse(); + } + + callback(exclude(siblings)); + } + } + } + + // If index based start position then resolve it + if (startContainer.nodeType == 1 && startContainer.hasChildNodes()) { + startContainer = startContainer.childNodes[startOffset]; + } + + // If index based end position then resolve it + if (endContainer.nodeType == 1 && endContainer.hasChildNodes()) { + endContainer = endContainer.childNodes[Math.min(endOffset - 1, endContainer.childNodes.length - 1)]; + } + + // Same container + if (startContainer == endContainer) { + return callback(exclude([startContainer])); + } + + // Find common ancestor and end points + ancestor = dom.findCommonAncestor(startContainer, endContainer); + + // Process left side + for (node = startContainer; node; node = node.parentNode) { + if (node === endContainer) { + return walkBoundary(startContainer, ancestor, true); + } + + if (node === ancestor) { + break; + } + } + + // Process right side + for (node = endContainer; node; node = node.parentNode) { + if (node === startContainer) { + return walkBoundary(endContainer, ancestor); + } + + if (node === ancestor) { + break; + } + } + + // Find start/end point + startPoint = findEndPoint(startContainer, ancestor) || startContainer; + endPoint = findEndPoint(endContainer, ancestor) || endContainer; + + // Walk left leaf + walkBoundary(startContainer, startPoint, true); + + // Walk the middle from start to end point + siblings = collectSiblings( + startPoint == startContainer ? startPoint : startPoint.nextSibling, + 'nextSibling', + endPoint == endContainer ? endPoint.nextSibling : endPoint + ); + + if (siblings.length) { + callback(exclude(siblings)); + } + + // Walk right leaf + walkBoundary(endContainer, endPoint); + }; + + /** + * Splits the specified range at it's start/end points. + * + * @private + * @param {Range/RangeObject} rng Range to split. + * @return {Object} Range position object. + */ + this.split = function(rng) { + var startContainer = rng.startContainer, + startOffset = rng.startOffset, + endContainer = rng.endContainer, + endOffset = rng.endOffset; + + function splitText(node, offset) { + return node.splitText(offset); + } + + // Handle single text node + if (startContainer == endContainer && startContainer.nodeType == 3) { + if (startOffset > 0 && startOffset < startContainer.nodeValue.length) { + endContainer = splitText(startContainer, startOffset); + startContainer = endContainer.previousSibling; + + if (endOffset > startOffset) { + endOffset = endOffset - startOffset; + startContainer = endContainer = splitText(endContainer, endOffset).previousSibling; + endOffset = endContainer.nodeValue.length; + startOffset = 0; + } else { + endOffset = 0; + } + } + } else { + // Split startContainer text node if needed + if (startContainer.nodeType == 3 && startOffset > 0 && startOffset < startContainer.nodeValue.length) { + startContainer = splitText(startContainer, startOffset); + startOffset = 0; + } + + // Split endContainer text node if needed + if (endContainer.nodeType == 3 && endOffset > 0 && endOffset < endContainer.nodeValue.length) { + endContainer = splitText(endContainer, endOffset).previousSibling; + endOffset = endContainer.nodeValue.length; + } + } + + return { + startContainer: startContainer, + startOffset: startOffset, + endContainer: endContainer, + endOffset: endOffset + }; + }; + + /** + * Normalizes the specified range by finding the closest best suitable caret location. + * + * @private + * @param {Range} rng Range to normalize. + * @return {Boolean} True/false if the specified range was normalized or not. + */ + this.normalize = function(rng) { + var normalized, collapsed; + + function normalizeEndPoint(start) { + var container, offset, walker, body = dom.getRoot(), node, nonEmptyElementsMap, nodeName; + var directionLeft, isAfterNode; + + function hasBrBeforeAfter(node, left) { + var walker = new TreeWalker(node, dom.getParent(node.parentNode, dom.isBlock) || body); + + while ((node = walker[left ? 'prev' : 'next']())) { + if (node.nodeName === "BR") { + return true; + } + } + } + + function isPrevNode(node, name) { + return node.previousSibling && node.previousSibling.nodeName == name; + } + + // Walks the dom left/right to find a suitable text node to move the endpoint into + // It will only walk within the current parent block or body and will stop if it hits a block or a BR/IMG + function findTextNodeRelative(left, startNode) { + var walker, lastInlineElement, parentBlockContainer; + + startNode = startNode || container; + parentBlockContainer = dom.getParent(startNode.parentNode, dom.isBlock) || body; + + // Lean left before the BR element if it's the only BR within a block element. Gecko bug: #6680 + // This:


    |

    becomes

    |

    + if (left && startNode.nodeName == 'BR' && isAfterNode && dom.isEmpty(parentBlockContainer)) { + container = startNode.parentNode; + offset = dom.nodeIndex(startNode); + normalized = true; + return; + } + + // Walk left until we hit a text node we can move to or a block/br/img + walker = new TreeWalker(startNode, parentBlockContainer); + while ((node = walker[left ? 'prev' : 'next']())) { + // Found text node that has a length + if (node.nodeType === 3 && node.nodeValue.length > 0) { + container = node; + offset = left ? node.nodeValue.length : 0; + normalized = true; + return; + } + + // Break if we find a block or a BR/IMG/INPUT etc + if (dom.isBlock(node) || nonEmptyElementsMap[node.nodeName.toLowerCase()]) { + return; + } + + lastInlineElement = node; + } + + // Only fetch the last inline element when in caret mode for now + if (collapsed && lastInlineElement) { + container = lastInlineElement; + normalized = true; + offset = 0; + } + } + + container = rng[(start ? 'start' : 'end') + 'Container']; + offset = rng[(start ? 'start' : 'end') + 'Offset']; + isAfterNode = container.nodeType == 1 && offset === container.childNodes.length; + nonEmptyElementsMap = dom.schema.getNonEmptyElements(); + directionLeft = start; + + if (container.nodeType == 1 && offset > container.childNodes.length - 1) { + directionLeft = false; + } + + // If the container is a document move it to the body element + if (container.nodeType === 9) { + container = dom.getRoot(); + offset = 0; + } + + // If the container is body try move it into the closest text node or position + if (container === body) { + // If start is before/after a image, table etc + if (directionLeft) { + node = container.childNodes[offset > 0 ? offset - 1 : 0]; + if (node) { + nodeName = node.nodeName.toLowerCase(); + if (nonEmptyElementsMap[node.nodeName] || node.nodeName == "TABLE") { + return; + } + } + } + + // Resolve the index + if (container.hasChildNodes()) { + offset = Math.min(!directionLeft && offset > 0 ? offset - 1 : offset, container.childNodes.length - 1); + container = container.childNodes[offset]; + offset = 0; + + // Don't walk into elements that doesn't have any child nodes like a IMG + if (container.hasChildNodes() && !/TABLE/.test(container.nodeName)) { + // Walk the DOM to find a text node to place the caret at or a BR + node = container; + walker = new TreeWalker(container, body); + + do { + // Found a text node use that position + if (node.nodeType === 3 && node.nodeValue.length > 0) { + offset = directionLeft ? 0 : node.nodeValue.length; + container = node; + normalized = true; + break; + } + + // Found a BR/IMG element that we can place the caret before + if (nonEmptyElementsMap[node.nodeName.toLowerCase()]) { + offset = dom.nodeIndex(node); + container = node.parentNode; + + // Put caret after image when moving the end point + if (node.nodeName == "IMG" && !directionLeft) { + offset++; + } + + normalized = true; + break; + } + } while ((node = (directionLeft ? walker.next() : walker.prev()))); + } + } + } + + // Lean the caret to the left if possible + if (collapsed) { + // So this: x|x + // Becomes: x|x + // Seems that only gecko has issues with this + if (container.nodeType === 3 && offset === 0) { + findTextNodeRelative(true); + } + + // Lean left into empty inline elements when the caret is before a BR + // So this: |
    + // Becomes: |
    + // Seems that only gecko has issues with this. + // Special edge case for

    x|

    since we don't want

    x|

    + if (container.nodeType === 1) { + node = container.childNodes[offset]; + + // Offset is after the containers last child + // then use the previous child for normalization + if (!node) { + node = container.childNodes[offset - 1]; + } + + if (node && node.nodeName === 'BR' && !isPrevNode(node, 'A') && + !hasBrBeforeAfter(node) && !hasBrBeforeAfter(node, true)) { + findTextNodeRelative(true, node); + } + } + } + + // Lean the start of the selection right if possible + // So this: x[x] + // Becomes: x[x] + if (directionLeft && !collapsed && container.nodeType === 3 && offset === container.nodeValue.length) { + findTextNodeRelative(false); + } + + // Set endpoint if it was normalized + if (normalized) { + rng['set' + (start ? 'Start' : 'End')](container, offset); + } + } + + collapsed = rng.collapsed; + + normalizeEndPoint(true); + + if (!collapsed) { + normalizeEndPoint(); + } + + // If it was collapsed then make sure it still is + if (normalized && collapsed) { + rng.collapse(true); + } + + return normalized; + }; + } + + /** + * Compares two ranges and checks if they are equal. + * + * @static + * @method compareRanges + * @param {DOMRange} rng1 First range to compare. + * @param {DOMRange} rng2 First range to compare. + * @return {Boolean} true/false if the ranges are equal. + */ + RangeUtils.compareRanges = function(rng1, rng2) { + if (rng1 && rng2) { + // Compare native IE ranges + if (rng1.item || rng1.duplicate) { + // Both are control ranges and the selected element matches + if (rng1.item && rng2.item && rng1.item(0) === rng2.item(0)) { + return true; + } + + // Both are text ranges and the range matches + if (rng1.isEqual && rng2.isEqual && rng2.isEqual(rng1)) { + return true; + } + } else { + // Compare w3c ranges + return rng1.startContainer == rng2.startContainer && rng1.startOffset == rng2.startOffset; + } + } + + return false; + }; + + return RangeUtils; +}); + +// Included from: js/tinymce/classes/dom/Selection.js + +/** + * Selection.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class handles text and control selection it's an crossbrowser utility class. + * Consult the TinyMCE Wiki API for more details and examples on how to use this class. + * + * @class tinymce.dom.Selection + * @example + * // Getting the currently selected node for the active editor + * alert(tinymce.activeEditor.selection.getNode().nodeName); + */ +define("tinymce/dom/Selection", [ + "tinymce/dom/TreeWalker", + "tinymce/dom/TridentSelection", + "tinymce/dom/ControlSelection", + "tinymce/dom/RangeUtils", + "tinymce/Env", + "tinymce/util/Tools" +], function(TreeWalker, TridentSelection, ControlSelection, RangeUtils, Env, Tools) { + var each = Tools.each, grep = Tools.grep, trim = Tools.trim; + var isIE = Env.ie, isOpera = Env.opera; + + /** + * Constructs a new selection instance. + * + * @constructor + * @method Selection + * @param {tinymce.dom.DOMUtils} dom DOMUtils object reference. + * @param {Window} win Window to bind the selection object to. + * @param {tinymce.dom.Serializer} serializer DOM serialization class to use for getContent. + */ + function Selection(dom, win, serializer, editor) { + var self = this; + + self.dom = dom; + self.win = win; + self.serializer = serializer; + self.editor = editor; + + self.controlSelection = new ControlSelection(self, editor); + + // No W3C Range support + if (!self.win.getSelection) { + self.tridentSel = new TridentSelection(self); + } + } + + Selection.prototype = { + /** + * Move the selection cursor range to the specified node and offset. + * If there is no node specified it will move it to the first suitable location within the body. + * + * @method setCursorLocation + * @param {Node} node Optional node to put the cursor in. + * @param {Number} offset Optional offset from the start of the node to put the cursor at. + */ + setCursorLocation: function(node, offset) { + var self = this, rng = self.dom.createRng(); + + if (!node) { + self._moveEndPoint(rng, self.editor.getBody(), true); + self.setRng(rng); + } else { + rng.setStart(node, offset); + rng.setEnd(node, offset); + self.setRng(rng); + self.collapse(false); + } + }, + + /** + * Returns the selected contents using the DOM serializer passed in to this class. + * + * @method getContent + * @param {Object} s Optional settings class with for example output format text or html. + * @return {String} Selected contents in for example HTML format. + * @example + * // Alerts the currently selected contents + * alert(tinymce.activeEditor.selection.getContent()); + * + * // Alerts the currently selected contents as plain text + * alert(tinymce.activeEditor.selection.getContent({format: 'text'})); + */ + getContent: function(args) { + var self = this, rng = self.getRng(), tmpElm = self.dom.create("body"); + var se = self.getSel(), whiteSpaceBefore, whiteSpaceAfter, fragment; + + args = args || {}; + whiteSpaceBefore = whiteSpaceAfter = ''; + args.get = true; + args.format = args.format || 'html'; + args.selection = true; + self.editor.fire('BeforeGetContent', args); + + if (args.format == 'text') { + return self.isCollapsed() ? '' : (rng.text || (se.toString ? se.toString() : '')); + } + + if (rng.cloneContents) { + fragment = rng.cloneContents(); + + if (fragment) { + tmpElm.appendChild(fragment); + } + } else if (rng.item !== undefined || rng.htmlText !== undefined) { + // IE will produce invalid markup if elements are present that + // it doesn't understand like custom elements or HTML5 elements. + // Adding a BR in front of the contents and then remoiving it seems to fix it though. + tmpElm.innerHTML = '
    ' + (rng.item ? rng.item(0).outerHTML : rng.htmlText); + tmpElm.removeChild(tmpElm.firstChild); + } else { + tmpElm.innerHTML = rng.toString(); + } + + // Keep whitespace before and after + if (/^\s/.test(tmpElm.innerHTML)) { + whiteSpaceBefore = ' '; + } + + if (/\s+$/.test(tmpElm.innerHTML)) { + whiteSpaceAfter = ' '; + } + + args.getInner = true; + + args.content = self.isCollapsed() ? '' : whiteSpaceBefore + self.serializer.serialize(tmpElm, args) + whiteSpaceAfter; + self.editor.fire('GetContent', args); + + return args.content; + }, + + /** + * Sets the current selection to the specified content. If any contents is selected it will be replaced + * with the contents passed in to this function. If there is no selection the contents will be inserted + * where the caret is placed in the editor/page. + * + * @method setContent + * @param {String} content HTML contents to set could also be other formats depending on settings. + * @param {Object} args Optional settings object with for example data format. + * @example + * // Inserts some HTML contents at the current selection + * tinymce.activeEditor.selection.setContent('Some contents'); + */ + setContent: function(content, args) { + var self = this, rng = self.getRng(), caretNode, doc = self.win.document, frag, temp; + + args = args || {format: 'html'}; + args.set = true; + args.selection = true; + content = args.content = content; + + // Dispatch before set content event + if (!args.no_events) { + self.editor.fire('BeforeSetContent', args); + } + + content = args.content; + + if (rng.insertNode) { + // Make caret marker since insertNode places the caret in the beginning of text after insert + content += '_'; + + // Delete and insert new node + if (rng.startContainer == doc && rng.endContainer == doc) { + // WebKit will fail if the body is empty since the range is then invalid and it can't insert contents + doc.body.innerHTML = content; + } else { + rng.deleteContents(); + + if (doc.body.childNodes.length === 0) { + doc.body.innerHTML = content; + } else { + // createContextualFragment doesn't exists in IE 9 DOMRanges + if (rng.createContextualFragment) { + rng.insertNode(rng.createContextualFragment(content)); + } else { + // Fake createContextualFragment call in IE 9 + frag = doc.createDocumentFragment(); + temp = doc.createElement('div'); + + frag.appendChild(temp); + temp.outerHTML = content; + + rng.insertNode(frag); + } + } + } + + // Move to caret marker + caretNode = self.dom.get('__caret'); + + // Make sure we wrap it compleatly, Opera fails with a simple select call + rng = doc.createRange(); + rng.setStartBefore(caretNode); + rng.setEndBefore(caretNode); + self.setRng(rng); + + // Remove the caret position + self.dom.remove('__caret'); + + try { + self.setRng(rng); + } catch (ex) { + // Might fail on Opera for some odd reason + } + } else { + if (rng.item) { + // Delete content and get caret text selection + doc.execCommand('Delete', false, null); + rng = self.getRng(); + } + + // Explorer removes spaces from the beginning of pasted contents + if (/^\s+/.test(content)) { + rng.pasteHTML('_' + content); + self.dom.remove('__mce_tmp'); + } else { + rng.pasteHTML(content); + } + } + + // Dispatch set content event + if (!args.no_events) { + self.editor.fire('SetContent', args); + } + }, + + /** + * Returns the start element of a selection range. If the start is in a text + * node the parent element will be returned. + * + * @method getStart + * @return {Element} Start element of selection range. + */ + getStart: function() { + var self = this, rng = self.getRng(), startElement, parentElement, checkRng, node; + + if (rng.duplicate || rng.item) { + // Control selection, return first item + if (rng.item) { + return rng.item(0); + } + + // Get start element + checkRng = rng.duplicate(); + checkRng.collapse(1); + startElement = checkRng.parentElement(); + if (startElement.ownerDocument !== self.dom.doc) { + startElement = self.dom.getRoot(); + } + + // Check if range parent is inside the start element, then return the inner parent element + // This will fix issues when a single element is selected, IE would otherwise return the wrong start element + parentElement = node = rng.parentElement(); + while ((node = node.parentNode)) { + if (node == startElement) { + startElement = parentElement; + break; + } + } + + return startElement; + } else { + startElement = rng.startContainer; + + if (startElement.nodeType == 1 && startElement.hasChildNodes()) { + startElement = startElement.childNodes[Math.min(startElement.childNodes.length - 1, rng.startOffset)]; + } + + if (startElement && startElement.nodeType == 3) { + return startElement.parentNode; + } + + return startElement; + } + }, + + /** + * Returns the end element of a selection range. If the end is in a text + * node the parent element will be returned. + * + * @method getEnd + * @return {Element} End element of selection range. + */ + getEnd: function() { + var self = this, rng = self.getRng(), endElement, endOffset; + + if (rng.duplicate || rng.item) { + if (rng.item) { + return rng.item(0); + } + + rng = rng.duplicate(); + rng.collapse(0); + endElement = rng.parentElement(); + if (endElement.ownerDocument !== self.dom.doc) { + endElement = self.dom.getRoot(); + } + + if (endElement && endElement.nodeName == 'BODY') { + return endElement.lastChild || endElement; + } + + return endElement; + } else { + endElement = rng.endContainer; + endOffset = rng.endOffset; + + if (endElement.nodeType == 1 && endElement.hasChildNodes()) { + endElement = endElement.childNodes[endOffset > 0 ? endOffset - 1 : endOffset]; + } + + if (endElement && endElement.nodeType == 3) { + return endElement.parentNode; + } + + return endElement; + } + }, + + /** + * Returns a bookmark location for the current selection. This bookmark object + * can then be used to restore the selection after some content modification to the document. + * + * @method getBookmark + * @param {Number} type Optional state if the bookmark should be simple or not. Default is complex. + * @param {Boolean} normalized Optional state that enables you to get a position that it would be after normalization. + * @return {Object} Bookmark object, use moveToBookmark with this object to restore the selection. + * @example + * // Stores a bookmark of the current selection + * var bm = tinymce.activeEditor.selection.getBookmark(); + * + * tinymce.activeEditor.setContent(tinymce.activeEditor.getContent() + 'Some new content'); + * + * // Restore the selection bookmark + * tinymce.activeEditor.selection.moveToBookmark(bm); + */ + getBookmark: function(type, normalized) { + var self = this, dom = self.dom, rng, rng2, id, collapsed, name, element, chr = '', styles; + + function findIndex(name, element) { + var index = 0; + + each(dom.select(name), function(node, i) { + if (node == element) { + index = i; + } + }); + + return index; + } + + function normalizeTableCellSelection(rng) { + function moveEndPoint(start) { + var container, offset, childNodes, prefix = start ? 'start' : 'end'; + + container = rng[prefix + 'Container']; + offset = rng[prefix + 'Offset']; + + if (container.nodeType == 1 && container.nodeName == "TR") { + childNodes = container.childNodes; + container = childNodes[Math.min(start ? offset : offset - 1, childNodes.length - 1)]; + if (container) { + offset = start ? 0 : container.childNodes.length; + rng['set' + (start ? 'Start' : 'End')](container, offset); + } + } + } + + moveEndPoint(true); + moveEndPoint(); + + return rng; + } + + function getLocation() { + var rng = self.getRng(true), root = dom.getRoot(), bookmark = {}; + + function getPoint(rng, start) { + var container = rng[start ? 'startContainer' : 'endContainer'], + offset = rng[start ? 'startOffset' : 'endOffset'], point = [], node, childNodes, after = 0; + + if (container.nodeType == 3) { + if (normalized) { + for (node = container.previousSibling; node && node.nodeType == 3; node = node.previousSibling) { + offset += node.nodeValue.length; + } + } + + point.push(offset); + } else { + childNodes = container.childNodes; + + if (offset >= childNodes.length && childNodes.length) { + after = 1; + offset = Math.max(0, childNodes.length - 1); + } + + point.push(self.dom.nodeIndex(childNodes[offset], normalized) + after); + } + + for (; container && container != root; container = container.parentNode) { + point.push(self.dom.nodeIndex(container, normalized)); + } + + return point; + } + + bookmark.start = getPoint(rng, true); + + if (!self.isCollapsed()) { + bookmark.end = getPoint(rng); + } + + return bookmark; + } + + if (type == 2) { + element = self.getNode(); + name = element ? element.nodeName : null; + + if (name == 'IMG') { + return {name: name, index: findIndex(name, element)}; + } + + if (self.tridentSel) { + return self.tridentSel.getBookmark(type); + } + + return getLocation(); + } + + // Handle simple range + if (type) { + return {rng: self.getRng()}; + } + + rng = self.getRng(); + id = dom.uniqueId(); + collapsed = self.isCollapsed(); + styles = 'overflow:hidden;line-height:0px'; + + // Explorer method + if (rng.duplicate || rng.item) { + // Text selection + if (!rng.item) { + rng2 = rng.duplicate(); + + try { + // Insert start marker + rng.collapse(); + rng.pasteHTML('' + chr + ''); + + // Insert end marker + if (!collapsed) { + rng2.collapse(false); + + // Detect the empty space after block elements in IE and move the + // end back one character

    ] becomes

    ]

    + rng.moveToElementText(rng2.parentElement()); + if (rng.compareEndPoints('StartToEnd', rng2) === 0) { + rng2.move('character', -1); + } + + rng2.pasteHTML('' + chr + ''); + } + } catch (ex) { + // IE might throw unspecified error so lets ignore it + return null; + } + } else { + // Control selection + element = rng.item(0); + name = element.nodeName; + + return {name: name, index: findIndex(name, element)}; + } + } else { + element = self.getNode(); + name = element.nodeName; + if (name == 'IMG') { + return {name: name, index: findIndex(name, element)}; + } + + // W3C method + rng2 = normalizeTableCellSelection(rng.cloneRange()); + + // Insert end marker + if (!collapsed) { + rng2.collapse(false); + rng2.insertNode(dom.create('span', {'data-mce-type': "bookmark", id: id + '_end', style: styles}, chr)); + } + + rng = normalizeTableCellSelection(rng); + rng.collapse(true); + rng.insertNode(dom.create('span', {'data-mce-type': "bookmark", id: id + '_start', style: styles}, chr)); + } + + self.moveToBookmark({id: id, keep: 1}); + + return {id: id}; + }, + + /** + * Restores the selection to the specified bookmark. + * + * @method moveToBookmark + * @param {Object} bookmark Bookmark to restore selection from. + * @return {Boolean} true/false if it was successful or not. + * @example + * // Stores a bookmark of the current selection + * var bm = tinymce.activeEditor.selection.getBookmark(); + * + * tinymce.activeEditor.setContent(tinymce.activeEditor.getContent() + 'Some new content'); + * + * // Restore the selection bookmark + * tinymce.activeEditor.selection.moveToBookmark(bm); + */ + moveToBookmark: function(bookmark) { + var self = this, dom = self.dom, rng, root, startContainer, endContainer, startOffset, endOffset; + + function setEndPoint(start) { + var point = bookmark[start ? 'start' : 'end'], i, node, offset, children; + + if (point) { + offset = point[0]; + + // Find container node + for (node = root, i = point.length - 1; i >= 1; i--) { + children = node.childNodes; + + if (point[i] > children.length - 1) { + return; + } + + node = children[point[i]]; + } + + // Move text offset to best suitable location + if (node.nodeType === 3) { + offset = Math.min(point[0], node.nodeValue.length); + } + + // Move element offset to best suitable location + if (node.nodeType === 1) { + offset = Math.min(point[0], node.childNodes.length); + } + + // Set offset within container node + if (start) { + rng.setStart(node, offset); + } else { + rng.setEnd(node, offset); + } + } + + return true; + } + + function restoreEndPoint(suffix) { + var marker = dom.get(bookmark.id + '_' + suffix), node, idx, next, prev, keep = bookmark.keep; + + if (marker) { + node = marker.parentNode; + + if (suffix == 'start') { + if (!keep) { + idx = dom.nodeIndex(marker); + } else { + node = marker.firstChild; + idx = 1; + } + + startContainer = endContainer = node; + startOffset = endOffset = idx; + } else { + if (!keep) { + idx = dom.nodeIndex(marker); + } else { + node = marker.firstChild; + idx = 1; + } + + endContainer = node; + endOffset = idx; + } + + if (!keep) { + prev = marker.previousSibling; + next = marker.nextSibling; + + // Remove all marker text nodes + each(grep(marker.childNodes), function(node) { + if (node.nodeType == 3) { + node.nodeValue = node.nodeValue.replace(/\uFEFF/g, ''); + } + }); + + // Remove marker but keep children if for example contents where inserted into the marker + // Also remove duplicated instances of the marker for example by a + // split operation or by WebKit auto split on paste feature + while ((marker = dom.get(bookmark.id + '_' + suffix))) { + dom.remove(marker, 1); + } + + // If siblings are text nodes then merge them unless it's Opera since it some how removes the node + // and we are sniffing since adding a lot of detection code for a browser with 3% of the market + // isn't worth the effort. Sorry, Opera but it's just a fact + if (prev && next && prev.nodeType == next.nodeType && prev.nodeType == 3 && !isOpera) { + idx = prev.nodeValue.length; + prev.appendData(next.nodeValue); + dom.remove(next); + + if (suffix == 'start') { + startContainer = endContainer = prev; + startOffset = endOffset = idx; + } else { + endContainer = prev; + endOffset = idx; + } + } + } + } + } + + function addBogus(node) { + // Adds a bogus BR element for empty block elements + if (dom.isBlock(node) && !node.innerHTML && !isIE) { + node.innerHTML = '
    '; + } + + return node; + } + + if (bookmark) { + if (bookmark.start) { + rng = dom.createRng(); + root = dom.getRoot(); + + if (self.tridentSel) { + return self.tridentSel.moveToBookmark(bookmark); + } + + if (setEndPoint(true) && setEndPoint()) { + self.setRng(rng); + } + } else if (bookmark.id) { + // Restore start/end points + restoreEndPoint('start'); + restoreEndPoint('end'); + + if (startContainer) { + rng = dom.createRng(); + rng.setStart(addBogus(startContainer), startOffset); + rng.setEnd(addBogus(endContainer), endOffset); + self.setRng(rng); + } + } else if (bookmark.name) { + self.select(dom.select(bookmark.name)[bookmark.index]); + } else if (bookmark.rng) { + self.setRng(bookmark.rng); + } + } + }, + + /** + * Selects the specified element. This will place the start and end of the selection range around the element. + * + * @method select + * @param {Element} node HMTL DOM element to select. + * @param {Boolean} content Optional bool state if the contents should be selected or not on non IE browser. + * @return {Element} Selected element the same element as the one that got passed in. + * @example + * // Select the first paragraph in the active editor + * tinymce.activeEditor.selection.select(tinymce.activeEditor.dom.select('p')[0]); + */ + select: function(node, content) { + var self = this, dom = self.dom, rng = dom.createRng(), idx; + + // Clear stored range set by FocusManager + self.lastFocusBookmark = null; + + if (node) { + if (!content && self.controlSelection.controlSelect(node)) { + return; + } + + idx = dom.nodeIndex(node); + rng.setStart(node.parentNode, idx); + rng.setEnd(node.parentNode, idx + 1); + + // Find first/last text node or BR element + if (content) { + self._moveEndPoint(rng, node, true); + self._moveEndPoint(rng, node); + } + + self.setRng(rng); + } + + return node; + }, + + /** + * Returns true/false if the selection range is collapsed or not. Collapsed means if it's a caret or a larger selection. + * + * @method isCollapsed + * @return {Boolean} true/false state if the selection range is collapsed or not. + * Collapsed means if it's a caret or a larger selection. + */ + isCollapsed: function() { + var self = this, rng = self.getRng(), sel = self.getSel(); + + if (!rng || rng.item) { + return false; + } + + if (rng.compareEndPoints) { + return rng.compareEndPoints('StartToEnd', rng) === 0; + } + + return !sel || rng.collapsed; + }, + + /** + * Collapse the selection to start or end of range. + * + * @method collapse + * @param {Boolean} to_start Optional boolean state if to collapse to end or not. Defaults to start. + */ + collapse: function(to_start) { + var self = this, rng = self.getRng(), node; + + // Control range on IE + if (rng.item) { + node = rng.item(0); + rng = self.win.document.body.createTextRange(); + rng.moveToElementText(node); + } + + rng.collapse(!!to_start); + self.setRng(rng); + }, + + /** + * Returns the browsers internal selection object. + * + * @method getSel + * @return {Selection} Internal browser selection object. + */ + getSel: function() { + var win = this.win; + + return win.getSelection ? win.getSelection() : win.document.selection; + }, + + /** + * Returns the browsers internal range object. + * + * @method getRng + * @param {Boolean} w3c Forces a compatible W3C range on IE. + * @return {Range} Internal browser range object. + * @see http://www.quirksmode.org/dom/range_intro.html + * @see http://www.dotvoid.com/2001/03/using-the-range-object-in-mozilla/ + */ + getRng: function(w3c) { + var self = this, selection, rng, elm, doc = self.win.document, ieRng; + + function tryCompareBounderyPoints(how, sourceRange, destinationRange) { + try { + return sourceRange.compareBoundaryPoints(how, destinationRange); + } catch (ex) { + // Gecko throws wrong document exception if the range points + // to nodes that where removed from the dom #6690 + // Browsers should mutate existing DOMRange instances so that they always point + // to something in the document this is not the case in Gecko works fine in IE/WebKit/Blink + // For performance reasons just return -1 + return -1; + } + } + + // Use last rng passed from FocusManager if it's available this enables + // calls to editor.selection.getStart() to work when caret focus is lost on IE + if (!w3c && self.lastFocusBookmark) { + var bookmark = self.lastFocusBookmark; + + // Convert bookmark to range IE 11 fix + if (bookmark.startContainer) { + rng = doc.createRange(); + rng.setStart(bookmark.startContainer, bookmark.startOffset); + rng.setEnd(bookmark.endContainer, bookmark.endOffset); + } else { + rng = bookmark; + } + + return rng; + } + + // Found tridentSel object then we need to use that one + if (w3c && self.tridentSel) { + return self.tridentSel.getRangeAt(0); + } + + try { + if ((selection = self.getSel())) { + if (selection.rangeCount > 0) { + rng = selection.getRangeAt(0); + } else { + rng = selection.createRange ? selection.createRange() : doc.createRange(); + } + } + } catch (ex) { + // IE throws unspecified error here if TinyMCE is placed in a frame/iframe + } + + // We have W3C ranges and it's IE then fake control selection since IE9 doesn't handle that correctly yet + // IE 11 doesn't support the selection object so we check for that as well + if (isIE && rng && rng.setStart && doc.selection) { + try { + // IE will sometimes throw an exception here + ieRng = doc.selection.createRange(); + } catch (ex) { + + } + + if (ieRng && ieRng.item) { + elm = ieRng.item(0); + rng = doc.createRange(); + rng.setStartBefore(elm); + rng.setEndAfter(elm); + } + } + + // No range found then create an empty one + // This can occur when the editor is placed in a hidden container element on Gecko + // Or on IE when there was an exception + if (!rng) { + rng = doc.createRange ? doc.createRange() : doc.body.createTextRange(); + } + + // If range is at start of document then move it to start of body + if (rng.setStart && rng.startContainer.nodeType === 9 && rng.collapsed) { + elm = self.dom.getRoot(); + rng.setStart(elm, 0); + rng.setEnd(elm, 0); + } + + if (self.selectedRange && self.explicitRange) { + if (tryCompareBounderyPoints(rng.START_TO_START, rng, self.selectedRange) === 0 && + tryCompareBounderyPoints(rng.END_TO_END, rng, self.selectedRange) === 0) { + // Safari, Opera and Chrome only ever select text which causes the range to change. + // This lets us use the originally set range if the selection hasn't been changed by the user. + rng = self.explicitRange; + } else { + self.selectedRange = null; + self.explicitRange = null; + } + } + + return rng; + }, + + /** + * Changes the selection to the specified DOM range. + * + * @method setRng + * @param {Range} rng Range to select. + */ + setRng: function(rng, forward) { + var self = this, sel; + + // Is IE specific range + if (rng.select) { + try { + rng.select(); + } catch (ex) { + // Needed for some odd IE bug #1843306 + } + + return; + } + + if (!self.tridentSel) { + sel = self.getSel(); + + if (sel) { + self.explicitRange = rng; + + try { + sel.removeAllRanges(); + sel.addRange(rng); + } catch (ex) { + // IE might throw errors here if the editor is within a hidden container and selection is changed + } + + // Forward is set to false and we have an extend function + if (forward === false && sel.extend) { + sel.collapse(rng.endContainer, rng.endOffset); + sel.extend(rng.startContainer, rng.startOffset); + } + + // adding range isn't always successful so we need to check range count otherwise an exception can occur + self.selectedRange = sel.rangeCount > 0 ? sel.getRangeAt(0) : null; + } + } else { + // Is W3C Range fake range on IE + if (rng.cloneRange) { + try { + self.tridentSel.addRange(rng); + return; + } catch (ex) { + //IE9 throws an error here if called before selection is placed in the editor + } + } + } + }, + + /** + * Sets the current selection to the specified DOM element. + * + * @method setNode + * @param {Element} elm Element to set as the contents of the selection. + * @return {Element} Returns the element that got passed in. + * @example + * // Inserts a DOM node at current selection/caret location + * tinymce.activeEditor.selection.setNode(tinymce.activeEditor.dom.create('img', {src: 'some.gif', title: 'some title'})); + */ + setNode: function(elm) { + var self = this; + + self.setContent(self.dom.getOuterHTML(elm)); + + return elm; + }, + + /** + * Returns the currently selected element or the common ancestor element for both start and end of the selection. + * + * @method getNode + * @return {Element} Currently selected element or common ancestor element. + * @example + * // Alerts the currently selected elements node name + * alert(tinymce.activeEditor.selection.getNode().nodeName); + */ + getNode: function() { + var self = this, rng = self.getRng(), elm; + var startContainer = rng.startContainer, endContainer = rng.endContainer; + var startOffset = rng.startOffset, endOffset = rng.endOffset, root = self.dom.getRoot(); + + function skipEmptyTextNodes(node, forwards) { + var orig = node; + + while (node && node.nodeType === 3 && node.length === 0) { + node = forwards ? node.nextSibling : node.previousSibling; + } + + return node || orig; + } + + // Range maybe lost after the editor is made visible again + if (!rng) { + return root; + } + + if (rng.setStart) { + elm = rng.commonAncestorContainer; + + // Handle selection a image or other control like element such as anchors + if (!rng.collapsed) { + if (startContainer == endContainer) { + if (endOffset - startOffset < 2) { + if (startContainer.hasChildNodes()) { + elm = startContainer.childNodes[startOffset]; + } + } + } + + // If the anchor node is a element instead of a text node then return this element + //if (tinymce.isWebKit && sel.anchorNode && sel.anchorNode.nodeType == 1) + // return sel.anchorNode.childNodes[sel.anchorOffset]; + + // Handle cases where the selection is immediately wrapped around a node and return that node instead of it's parent. + // This happens when you double click an underlined word in FireFox. + if (startContainer.nodeType === 3 && endContainer.nodeType === 3) { + if (startContainer.length === startOffset) { + startContainer = skipEmptyTextNodes(startContainer.nextSibling, true); + } else { + startContainer = startContainer.parentNode; + } + + if (endOffset === 0) { + endContainer = skipEmptyTextNodes(endContainer.previousSibling, false); + } else { + endContainer = endContainer.parentNode; + } + + if (startContainer && startContainer === endContainer) { + return startContainer; + } + } + } + + if (elm && elm.nodeType == 3) { + return elm.parentNode; + } + + return elm; + } + + elm = rng.item ? rng.item(0) : rng.parentElement(); + + // IE 7 might return elements outside the iframe + if (elm.ownerDocument !== self.win.document) { + elm = root; + } + + return elm; + }, + + getSelectedBlocks: function(startElm, endElm) { + var self = this, dom = self.dom, node, root, selectedBlocks = []; + + root = dom.getRoot(); + startElm = dom.getParent(startElm || self.getStart(), dom.isBlock); + endElm = dom.getParent(endElm || self.getEnd(), dom.isBlock); + + if (startElm && startElm != root) { + selectedBlocks.push(startElm); + } + + if (startElm && endElm && startElm != endElm) { + node = startElm; + + var walker = new TreeWalker(startElm, root); + while ((node = walker.next()) && node != endElm) { + if (dom.isBlock(node)) { + selectedBlocks.push(node); + } + } + } + + if (endElm && startElm != endElm && endElm != root) { + selectedBlocks.push(endElm); + } + + return selectedBlocks; + }, + + isForward: function() { + var dom = this.dom, sel = this.getSel(), anchorRange, focusRange; + + // No support for selection direction then always return true + if (!sel || !sel.anchorNode || !sel.focusNode) { + return true; + } + + anchorRange = dom.createRng(); + anchorRange.setStart(sel.anchorNode, sel.anchorOffset); + anchorRange.collapse(true); + + focusRange = dom.createRng(); + focusRange.setStart(sel.focusNode, sel.focusOffset); + focusRange.collapse(true); + + return anchorRange.compareBoundaryPoints(anchorRange.START_TO_START, focusRange) <= 0; + }, + + normalize: function() { + var self = this, rng = self.getRng(); + + if (!isIE && new RangeUtils(self.dom).normalize(rng)) { + self.setRng(rng, self.isForward()); + } + + return rng; + }, + + /** + * Executes callback of the current selection matches the specified selector or not and passes the state and args to the callback. + * + * @method selectorChanged + * @param {String} selector CSS selector to check for. + * @param {function} callback Callback with state and args when the selector is matches or not. + */ + selectorChanged: function(selector, callback) { + var self = this, currentSelectors; + + if (!self.selectorChangedData) { + self.selectorChangedData = {}; + currentSelectors = {}; + + self.editor.on('NodeChange', function(e) { + var node = e.element, dom = self.dom, parents = dom.getParents(node, null, dom.getRoot()), matchedSelectors = {}; + + // Check for new matching selectors + each(self.selectorChangedData, function(callbacks, selector) { + each(parents, function(node) { + if (dom.is(node, selector)) { + if (!currentSelectors[selector]) { + // Execute callbacks + each(callbacks, function(callback) { + callback(true, {node: node, selector: selector, parents: parents}); + }); + + currentSelectors[selector] = callbacks; + } + + matchedSelectors[selector] = callbacks; + return false; + } + }); + }); + + // Check if current selectors still match + each(currentSelectors, function(callbacks, selector) { + if (!matchedSelectors[selector]) { + delete currentSelectors[selector]; + + each(callbacks, function(callback) { + callback(false, {node: node, selector: selector, parents: parents}); + }); + } + }); + }); + } + + // Add selector listeners + if (!self.selectorChangedData[selector]) { + self.selectorChangedData[selector] = []; + } + + self.selectorChangedData[selector].push(callback); + + return self; + }, + + getScrollContainer: function() { + var scrollContainer, node = this.dom.getRoot(); + + while (node && node.nodeName != 'BODY') { + if (node.scrollHeight > node.clientHeight) { + scrollContainer = node; + break; + } + + node = node.parentNode; + } + + return scrollContainer; + }, + + scrollIntoView: function(elm) { + var y, viewPort, self = this, dom = self.dom, root = dom.getRoot(), viewPortY, viewPortH; + + function getPos(elm) { + var x = 0, y = 0; + + var offsetParent = elm; + while (offsetParent && offsetParent.nodeType) { + x += offsetParent.offsetLeft || 0; + y += offsetParent.offsetTop || 0; + offsetParent = offsetParent.offsetParent; + } + + return {x: x, y: y}; + } + + if (root.nodeName != 'BODY') { + var scrollContainer = self.getScrollContainer(); + if (scrollContainer) { + y = getPos(elm).y - getPos(scrollContainer).y; + viewPortH = scrollContainer.clientHeight; + viewPortY = scrollContainer.scrollTop; + if (y < viewPortY || y + 25 > viewPortY + viewPortH) { + scrollContainer.scrollTop = y < viewPortY ? y : y - viewPortH + 25; + } + + return; + } + } + + viewPort = dom.getViewPort(self.editor.getWin()); + y = dom.getPos(elm).y; + viewPortY = viewPort.y; + viewPortH = viewPort.h; + if (y < viewPort.y || y + 25 > viewPortY + viewPortH) { + self.editor.getWin().scrollTo(0, y < viewPortY ? y : y - viewPortH + 25); + } + }, + + _moveEndPoint: function(rng, node, start) { + var root = node, walker = new TreeWalker(node, root); + var nonEmptyElementsMap = this.dom.schema.getNonEmptyElements(); + + do { + // Text node + if (node.nodeType == 3 && trim(node.nodeValue).length !== 0) { + if (start) { + rng.setStart(node, 0); + } else { + rng.setEnd(node, node.nodeValue.length); + } + + return; + } + + // BR/IMG/INPUT elements + if (nonEmptyElementsMap[node.nodeName]) { + if (start) { + rng.setStartBefore(node); + } else { + if (node.nodeName == 'BR') { + rng.setEndBefore(node); + } else { + rng.setEndAfter(node); + } + } + + return; + } + + // Found empty text block old IE can place the selection inside those + if (Env.ie && Env.ie < 11 && this.dom.isBlock(node) && this.dom.isEmpty(node)) { + if (start) { + rng.setStart(node, 0); + } else { + rng.setEnd(node, 0); + } + + return; + } + } while ((node = (start ? walker.next() : walker.prev()))); + + // Failed to find any text node or other suitable location then move to the root of body + if (root.nodeName == 'BODY') { + if (start) { + rng.setStart(root, 0); + } else { + rng.setEnd(root, root.childNodes.length); + } + } + }, + + destroy: function() { + this.win = null; + this.controlSelection.destroy(); + } + }; + + return Selection; +}); + +// Included from: js/tinymce/classes/Formatter.js + +/** + * Formatter.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Text formatter engine class. This class is used to apply formats like bold, italic, font size + * etc to the current selection or specific nodes. This engine was build to replace the browsers + * default formatting logic for execCommand due to it's inconsistent and buggy behavior. + * + * @class tinymce.Formatter + * @example + * tinymce.activeEditor.formatter.register('mycustomformat', { + * inline: 'span', + * styles: {color: '#ff0000'} + * }); + * + * tinymce.activeEditor.formatter.apply('mycustomformat'); + */ +define("tinymce/Formatter", [ + "tinymce/dom/TreeWalker", + "tinymce/dom/RangeUtils", + "tinymce/util/Tools" +], function(TreeWalker, RangeUtils, Tools) { + /** + * Constructs a new formatter instance. + * + * @constructor Formatter + * @param {tinymce.Editor} ed Editor instance to construct the formatter engine to. + */ + return function(ed) { + var formats = {}, + dom = ed.dom, + selection = ed.selection, + rangeUtils = new RangeUtils(dom), + isValid = ed.schema.isValidChild, + isBlock = dom.isBlock, + forcedRootBlock = ed.settings.forced_root_block, + nodeIndex = dom.nodeIndex, + INVISIBLE_CHAR = '\uFEFF', + MCE_ATTR_RE = /^(src|href|style)$/, + FALSE = false, + TRUE = true, + formatChangeData, + undef, + getContentEditable = dom.getContentEditable, + disableCaretContainer, + markCaretContainersBogus; + + var each = Tools.each, + grep = Tools.grep, + walk = Tools.walk, + extend = Tools.extend; + + function isTextBlock(name) { + if (name.nodeType) { + name = name.nodeName; + } + + return !!ed.schema.getTextBlockElements()[name.toLowerCase()]; + } + + function getParents(node, selector) { + return dom.getParents(node, selector, dom.getRoot()); + } + + function isCaretNode(node) { + return node.nodeType === 1 && node.id === '_mce_caret'; + } + + function defaultFormats() { + register({ + alignleft: [ + {selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li', styles: {textAlign: 'left'}, defaultBlock: 'div'}, + {selector: 'img,table', collapsed: false, styles: {'float': 'left'}} + ], + + aligncenter: [ + {selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li', styles: {textAlign: 'center'}, defaultBlock: 'div'}, + {selector: 'img', collapsed: false, styles: {display: 'block', marginLeft: 'auto', marginRight: 'auto'}}, + {selector: 'table', collapsed: false, styles: {marginLeft: 'auto', marginRight: 'auto'}} + ], + + alignright: [ + {selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li', styles: {textAlign: 'right'}, defaultBlock: 'div'}, + {selector: 'img,table', collapsed: false, styles: {'float': 'right'}} + ], + + alignjustify: [ + {selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li', styles: {textAlign: 'justify'}, defaultBlock: 'div'} + ], + + bold: [ + {inline: 'strong', remove: 'all'}, + {inline: 'span', styles: {fontWeight: 'bold'}}, + {inline: 'b', remove: 'all'} + ], + + italic: [ + {inline: 'em', remove: 'all'}, + {inline: 'span', styles: {fontStyle: 'italic'}}, + {inline: 'i', remove: 'all'} + ], + + underline: [ + {inline: 'span', styles: {textDecoration: 'underline'}, exact: true}, + {inline: 'u', remove: 'all'} + ], + + strikethrough: [ + {inline: 'span', styles: {textDecoration: 'line-through'}, exact: true}, + {inline: 'strike', remove: 'all'} + ], + + forecolor: {inline: 'span', styles: {color: '%value'}, wrap_links: false}, + hilitecolor: {inline: 'span', styles: {backgroundColor: '%value'}, wrap_links: false}, + fontname: {inline: 'span', styles: {fontFamily: '%value'}}, + fontsize: {inline: 'span', styles: {fontSize: '%value'}}, + fontsize_class: {inline: 'span', attributes: {'class': '%value'}}, + blockquote: {block: 'blockquote', wrapper: 1, remove: 'all'}, + subscript: {inline: 'sub'}, + superscript: {inline: 'sup'}, + code: {inline: 'code'}, + + link: {inline: 'a', selector: 'a', remove: 'all', split: true, deep: true, + onmatch: function() { + return true; + }, + + onformat: function(elm, fmt, vars) { + each(vars, function(value, key) { + dom.setAttrib(elm, key, value); + }); + } + }, + + removeformat: [ + { + selector: 'b,strong,em,i,font,u,strike,sub,sup,dfn,code,samp,kbd,var,cite,mark,q', + remove: 'all', + split: true, + expand: false, + block_expand: true, + deep: true + }, + {selector: 'span', attributes: ['style', 'class'], remove: 'empty', split: true, expand: false, deep: true}, + {selector: '*', attributes: ['style', 'class'], split: false, expand: false, deep: true} + ] + }); + + // Register default block formats + each('p h1 h2 h3 h4 h5 h6 div address pre div dt dd samp'.split(/\s/), function(name) { + register(name, {block: name, remove: 'all'}); + }); + + // Register user defined formats + register(ed.settings.formats); + } + + function addKeyboardShortcuts() { + // Add some inline shortcuts + ed.addShortcut('ctrl+b', 'bold_desc', 'Bold'); + ed.addShortcut('ctrl+i', 'italic_desc', 'Italic'); + ed.addShortcut('ctrl+u', 'underline_desc', 'Underline'); + + // BlockFormat shortcuts keys + for (var i = 1; i <= 6; i++) { + ed.addShortcut('ctrl+' + i, '', ['FormatBlock', false, 'h' + i]); + } + + ed.addShortcut('ctrl+7', '', ['FormatBlock', false, 'p']); + ed.addShortcut('ctrl+8', '', ['FormatBlock', false, 'div']); + ed.addShortcut('ctrl+9', '', ['FormatBlock', false, 'address']); + } + + // Public functions + + /** + * Returns the format by name or all formats if no name is specified. + * + * @method get + * @param {String} name Optional name to retrive by. + * @return {Array/Object} Array/Object with all registred formats or a specific format. + */ + function get(name) { + return name ? formats[name] : formats; + } + + /** + * Registers a specific format by name. + * + * @method register + * @param {Object/String} name Name of the format for example "bold". + * @param {Object/Array} format Optional format object or array of format variants + * can only be omitted if the first arg is an object. + */ + function register(name, format) { + if (name) { + if (typeof(name) !== 'string') { + each(name, function(format, name) { + register(name, format); + }); + } else { + // Force format into array and add it to internal collection + format = format.length ? format : [format]; + + each(format, function(format) { + // Set deep to false by default on selector formats this to avoid removing + // alignment on images inside paragraphs when alignment is changed on paragraphs + if (format.deep === undef) { + format.deep = !format.selector; + } + + // Default to true + if (format.split === undef) { + format.split = !format.selector || format.inline; + } + + // Default to true + if (format.remove === undef && format.selector && !format.inline) { + format.remove = 'none'; + } + + // Mark format as a mixed format inline + block level + if (format.selector && format.inline) { + format.mixed = true; + format.block_expand = true; + } + + // Split classes if needed + if (typeof(format.classes) === 'string') { + format.classes = format.classes.split(/\s+/); + } + }); + + formats[name] = format; + } + } + } + + function getTextDecoration(node) { + var decoration; + + ed.dom.getParent(node, function(n) { + decoration = ed.dom.getStyle(n, 'text-decoration'); + return decoration && decoration !== 'none'; + }); + + return decoration; + } + + function processUnderlineAndColor(node) { + var textDecoration; + if (node.nodeType === 1 && node.parentNode && node.parentNode.nodeType === 1) { + textDecoration = getTextDecoration(node.parentNode); + if (ed.dom.getStyle(node, 'color') && textDecoration) { + ed.dom.setStyle(node, 'text-decoration', textDecoration); + } else if (ed.dom.getStyle(node, 'textdecoration') === textDecoration) { + ed.dom.setStyle(node, 'text-decoration', null); + } + } + } + + /** + * Applies the specified format to the current selection or specified node. + * + * @method apply + * @param {String} name Name of format to apply. + * @param {Object} vars Optional list of variables to replace within format before applying it. + * @param {Node} node Optional node to apply the format to defaults to current selection. + */ + function apply(name, vars, node) { + var formatList = get(name), format = formatList[0], bookmark, rng, isCollapsed = !node && selection.isCollapsed(); + + function setElementFormat(elm, fmt) { + fmt = fmt || format; + + if (elm) { + if (fmt.onformat) { + fmt.onformat(elm, fmt, vars, node); + } + + each(fmt.styles, function(value, name) { + dom.setStyle(elm, name, replaceVars(value, vars)); + }); + + each(fmt.attributes, function(value, name) { + dom.setAttrib(elm, name, replaceVars(value, vars)); + }); + + each(fmt.classes, function(value) { + value = replaceVars(value, vars); + + if (!dom.hasClass(elm, value)) { + dom.addClass(elm, value); + } + }); + } + } + + function adjustSelectionToVisibleSelection() { + function findSelectionEnd(start, end) { + var walker = new TreeWalker(end); + for (node = walker.current(); node; node = walker.prev()) { + if (node.childNodes.length > 1 || node == start || node.tagName == 'BR') { + return node; + } + } + } + + // Adjust selection so that a end container with a end offset of zero is not included in the selection + // as this isn't visible to the user. + var rng = ed.selection.getRng(); + var start = rng.startContainer; + var end = rng.endContainer; + + if (start != end && rng.endOffset === 0) { + var newEnd = findSelectionEnd(start, end); + var endOffset = newEnd.nodeType == 3 ? newEnd.length : newEnd.childNodes.length; + + rng.setEnd(newEnd, endOffset); + } + + return rng; + } + + function applyStyleToList(node, bookmark, wrapElm, newWrappers, process){ + var nodes = [], listIndex = -1, list, startIndex = -1, endIndex = -1, currentWrapElm; + + // find the index of the first child list. + each(node.childNodes, function(n, index) { + if (n.nodeName === "UL" || n.nodeName === "OL") { + listIndex = index; + list = n; + return false; + } + }); + + // get the index of the bookmarks + each(node.childNodes, function(n, index) { + if (n.nodeName === "SPAN" && dom.getAttrib(n, "data-mce-type") == "bookmark") { + if (n.id == bookmark.id + "_start") { + startIndex = index; + } else if (n.id == bookmark.id + "_end") { + endIndex = index; + } + } + }); + + // if the selection spans across an embedded list, or there isn't an embedded list - handle processing normally + if (listIndex <= 0 || (startIndex < listIndex && endIndex > listIndex)) { + each(grep(node.childNodes), process); + return 0; + } else { + currentWrapElm = dom.clone(wrapElm, FALSE); + + // create a list of the nodes on the same side of the list as the selection + each(grep(node.childNodes), function(n, index) { + if ((startIndex < listIndex && index < listIndex) || (startIndex > listIndex && index > listIndex)) { + nodes.push(n); + n.parentNode.removeChild(n); + } + }); + + // insert the wrapping element either before or after the list. + if (startIndex < listIndex) { + node.insertBefore(currentWrapElm, list); + } else if (startIndex > listIndex) { + node.insertBefore(currentWrapElm, list.nextSibling); + } + + // add the new nodes to the list. + newWrappers.push(currentWrapElm); + + each(nodes, function(node) { + currentWrapElm.appendChild(node); + }); + + return currentWrapElm; + } + } + + function applyRngStyle(rng, bookmark, node_specific) { + var newWrappers = [], wrapName, wrapElm, contentEditable = true; + + // Setup wrapper element + wrapName = format.inline || format.block; + wrapElm = dom.create(wrapName); + setElementFormat(wrapElm); + + rangeUtils.walk(rng, function(nodes) { + var currentWrapElm; + + /** + * Process a list of nodes wrap them. + */ + function process(node) { + var nodeName, parentName, found, hasContentEditableState, lastContentEditable; + + lastContentEditable = contentEditable; + nodeName = node.nodeName.toLowerCase(); + parentName = node.parentNode.nodeName.toLowerCase(); + + // Node has a contentEditable value + if (node.nodeType === 1 && getContentEditable(node)) { + lastContentEditable = contentEditable; + contentEditable = getContentEditable(node) === "true"; + hasContentEditableState = true; // We don't want to wrap the container only it's children + } + + // Stop wrapping on br elements + if (isEq(nodeName, 'br')) { + currentWrapElm = 0; + + // Remove any br elements when we wrap things + if (format.block) { + dom.remove(node); + } + + return; + } + + // If node is wrapper type + if (format.wrapper && matchNode(node, name, vars)) { + currentWrapElm = 0; + return; + } + + // Can we rename the block + // TODO: Break this if up, too complex + if (contentEditable && !hasContentEditableState && format.block && + !format.wrapper && isTextBlock(nodeName) && isValid(parentName, wrapName)) { + node = dom.rename(node, wrapName); + setElementFormat(node); + newWrappers.push(node); + currentWrapElm = 0; + return; + } + + // Handle selector patterns + if (format.selector) { + // Look for matching formats + each(formatList, function(format) { + // Check collapsed state if it exists + if ('collapsed' in format && format.collapsed !== isCollapsed) { + return; + } + + if (dom.is(node, format.selector) && !isCaretNode(node)) { + setElementFormat(node, format); + found = true; + } + }); + + // Continue processing if a selector match wasn't found and a inline element is defined + if (!format.inline || found) { + currentWrapElm = 0; + return; + } + } + + // Is it valid to wrap this item + // TODO: Break this if up, too complex + if (contentEditable && !hasContentEditableState && isValid(wrapName, nodeName) && isValid(parentName, wrapName) && + !(!node_specific && node.nodeType === 3 && + node.nodeValue.length === 1 && + node.nodeValue.charCodeAt(0) === 65279) && + !isCaretNode(node) && + (!format.inline || !isBlock(node))) { + // Start wrapping + if (!currentWrapElm) { + // Wrap the node + currentWrapElm = dom.clone(wrapElm, FALSE); + node.parentNode.insertBefore(currentWrapElm, node); + newWrappers.push(currentWrapElm); + } + + currentWrapElm.appendChild(node); + } else if (nodeName == 'li' && bookmark) { + // Start wrapping - if we are in a list node and have a bookmark, then + // we will always begin by wrapping in a new element. + currentWrapElm = applyStyleToList(node, bookmark, wrapElm, newWrappers, process); + } else { + // Start a new wrapper for possible children + currentWrapElm = 0; + + each(grep(node.childNodes), process); + + if (hasContentEditableState) { + contentEditable = lastContentEditable; // Restore last contentEditable state from stack + } + + // End the last wrapper + currentWrapElm = 0; + } + } + + // Process siblings from range + each(nodes, process); + }); + + // Wrap links inside as well, for example color inside a link when the wrapper is around the link + if (format.wrap_links === false) { + each(newWrappers, function(node) { + function process(node) { + var i, currentWrapElm, children; + + if (node.nodeName === 'A') { + currentWrapElm = dom.clone(wrapElm, FALSE); + newWrappers.push(currentWrapElm); + + children = grep(node.childNodes); + for (i = 0; i < children.length; i++) { + currentWrapElm.appendChild(children[i]); + } + + node.appendChild(currentWrapElm); + } + + each(grep(node.childNodes), process); + } + + process(node); + }); + } + + // Cleanup + each(newWrappers, function(node) { + var childCount; + + function getChildCount(node) { + var count = 0; + + each(node.childNodes, function(node) { + if (!isWhiteSpaceNode(node) && !isBookmarkNode(node)) { + count++; + } + }); + + return count; + } + + function mergeStyles(node) { + var child, clone; + + each(node.childNodes, function(node) { + if (node.nodeType == 1 && !isBookmarkNode(node) && !isCaretNode(node)) { + child = node; + return FALSE; // break loop + } + }); + + // If child was found and of the same type as the current node + if (child && !isBookmarkNode(child) && matchName(child, format)) { + clone = dom.clone(child, FALSE); + setElementFormat(clone); + + dom.replace(clone, node, TRUE); + dom.remove(child, 1); + } + + return clone || node; + } + + childCount = getChildCount(node); + + // Remove empty nodes but only if there is multiple wrappers and they are not block + // elements so never remove single

    since that would remove the + // currrent empty block element where the caret is at + if ((newWrappers.length > 1 || !isBlock(node)) && childCount === 0) { + dom.remove(node, 1); + return; + } + + if (format.inline || format.wrapper) { + // Merges the current node with it's children of similar type to reduce the number of elements + if (!format.exact && childCount === 1) { + node = mergeStyles(node); + } + + // Remove/merge children + each(formatList, function(format) { + // Merge all children of similar type will move styles from child to parent + // this: text + // will become: text + each(dom.select(format.inline, node), function(child) { + var parent; + + if (isBookmarkNode(child)) { + return; + } + + // When wrap_links is set to false we don't want + // to remove the format on children within links + if (format.wrap_links === false) { + parent = child.parentNode; + + do { + if (parent.nodeName === 'A') { + return; + } + } while ((parent = parent.parentNode)); + } + + removeFormat(format, vars, child, format.exact ? child : null); + }); + }); + + // Remove child if direct parent is of same type + if (matchNode(node.parentNode, name, vars)) { + dom.remove(node, 1); + node = 0; + return TRUE; + } + + // Look for parent with similar style format + if (format.merge_with_parents) { + dom.getParent(node.parentNode, function(parent) { + if (matchNode(parent, name, vars)) { + dom.remove(node, 1); + node = 0; + return TRUE; + } + }); + } + + // Merge next and previous siblings if they are similar texttext becomes texttext + if (node && format.merge_siblings !== false) { + node = mergeSiblings(getNonWhiteSpaceSibling(node), node); + node = mergeSiblings(node, getNonWhiteSpaceSibling(node, TRUE)); + } + } + }); + } + + if (format) { + if (node) { + if (node.nodeType) { + rng = dom.createRng(); + rng.setStartBefore(node); + rng.setEndAfter(node); + applyRngStyle(expandRng(rng, formatList), null, true); + } else { + applyRngStyle(node, null, true); + } + } else { + if (!isCollapsed || !format.inline || dom.select('td.mce-item-selected,th.mce-item-selected').length) { + // Obtain selection node before selection is unselected by applyRngStyle() + var curSelNode = ed.selection.getNode(); + + // If the formats have a default block and we can't find a parent block then + // start wrapping it with a DIV this is for forced_root_blocks: false + // It's kind of a hack but people should be using the default block type P since all desktop editors work that way + if (!forcedRootBlock && formatList[0].defaultBlock && !dom.getParent(curSelNode, dom.isBlock)) { + apply(formatList[0].defaultBlock); + } + + // Apply formatting to selection + ed.selection.setRng(adjustSelectionToVisibleSelection()); + bookmark = selection.getBookmark(); + applyRngStyle(expandRng(selection.getRng(TRUE), formatList), bookmark); + + // Colored nodes should be underlined so that the color of the underline matches the text color. + if (format.styles && (format.styles.color || format.styles.textDecoration)) { + walk(curSelNode, processUnderlineAndColor, 'childNodes'); + processUnderlineAndColor(curSelNode); + } + + selection.moveToBookmark(bookmark); + moveStart(selection.getRng(TRUE)); + ed.nodeChanged(); + } else { + performCaretAction('apply', name, vars); + } + } + } + } + + /** + * Removes the specified format from the current selection or specified node. + * + * @method remove + * @param {String} name Name of format to remove. + * @param {Object} vars Optional list of variables to replace within format before removing it. + * @param {Node/Range} node Optional node or DOM range to remove the format from defaults to current selection. + */ + function remove(name, vars, node) { + var formatList = get(name), format = formatList[0], bookmark, rng, contentEditable = true; + + // Merges the styles for each node + function process(node) { + var children, i, l, lastContentEditable, hasContentEditableState; + + // Node has a contentEditable value + if (node.nodeType === 1 && getContentEditable(node)) { + lastContentEditable = contentEditable; + contentEditable = getContentEditable(node) === "true"; + hasContentEditableState = true; // We don't want to wrap the container only it's children + } + + // Grab the children first since the nodelist might be changed + children = grep(node.childNodes); + + // Process current node + if (contentEditable && !hasContentEditableState) { + for (i = 0, l = formatList.length; i < l; i++) { + if (removeFormat(formatList[i], vars, node, node)) { + break; + } + } + } + + // Process the children + if (format.deep) { + if (children.length) { + for (i = 0, l = children.length; i < l; i++) { + process(children[i]); + } + + if (hasContentEditableState) { + contentEditable = lastContentEditable; // Restore last contentEditable state from stack + } + } + } + } + + function findFormatRoot(container) { + var formatRoot; + + // Find format root + each(getParents(container.parentNode).reverse(), function(parent) { + var format; + + // Find format root element + if (!formatRoot && parent.id != '_start' && parent.id != '_end') { + // Is the node matching the format we are looking for + format = matchNode(parent, name, vars); + if (format && format.split !== false) { + formatRoot = parent; + } + } + }); + + return formatRoot; + } + + function wrapAndSplit(format_root, container, target, split) { + var parent, clone, lastClone, firstClone, i, formatRootParent; + + // Format root found then clone formats and split it + if (format_root) { + formatRootParent = format_root.parentNode; + + for (parent = container.parentNode; parent && parent != formatRootParent; parent = parent.parentNode) { + clone = dom.clone(parent, FALSE); + + for (i = 0; i < formatList.length; i++) { + if (removeFormat(formatList[i], vars, clone, clone)) { + clone = 0; + break; + } + } + + // Build wrapper node + if (clone) { + if (lastClone) { + clone.appendChild(lastClone); + } + + if (!firstClone) { + firstClone = clone; + } + + lastClone = clone; + } + } + + // Never split block elements if the format is mixed + if (split && (!format.mixed || !isBlock(format_root))) { + container = dom.split(format_root, container); + } + + // Wrap container in cloned formats + if (lastClone) { + target.parentNode.insertBefore(lastClone, target); + firstClone.appendChild(target); + } + } + + return container; + } + + function splitToFormatRoot(container) { + return wrapAndSplit(findFormatRoot(container), container, container, true); + } + + function unwrap(start) { + var node = dom.get(start ? '_start' : '_end'), + out = node[start ? 'firstChild' : 'lastChild']; + + // If the end is placed within the start the result will be removed + // So this checks if the out node is a bookmark node if it is it + // checks for another more suitable node + if (isBookmarkNode(out)) { + out = out[start ? 'firstChild' : 'lastChild']; + } + + dom.remove(node, true); + + return out; + } + + function removeRngStyle(rng) { + var startContainer, endContainer; + var commonAncestorContainer = rng.commonAncestorContainer; + + rng = expandRng(rng, formatList, TRUE); + + if (format.split) { + startContainer = getContainer(rng, TRUE); + endContainer = getContainer(rng); + + if (startContainer != endContainer) { + // WebKit will render the table incorrectly if we wrap a TH or TD in a SPAN + // so let's see if we can use the first child instead + // This will happen if you triple click a table cell and use remove formatting + if (/^(TR|TH|TD)$/.test(startContainer.nodeName) && startContainer.firstChild) { + if (startContainer.nodeName == "TR") { + startContainer = startContainer.firstChild.firstChild || startContainer; + } else { + startContainer = startContainer.firstChild || startContainer; + } + } + + // Try to adjust endContainer as well if cells on the same row were selected - bug #6410 + if (commonAncestorContainer && + /^T(HEAD|BODY|FOOT|R)$/.test(commonAncestorContainer.nodeName) && + /^(TH|TD)$/.test(endContainer.nodeName) && endContainer.firstChild) { + endContainer = endContainer.firstChild || endContainer; + } + + // Wrap start/end nodes in span element since these might be cloned/moved + startContainer = wrap(startContainer, 'span', {id: '_start', 'data-mce-type': 'bookmark'}); + endContainer = wrap(endContainer, 'span', {id: '_end', 'data-mce-type': 'bookmark'}); + + // Split start/end + splitToFormatRoot(startContainer); + splitToFormatRoot(endContainer); + + // Unwrap start/end to get real elements again + startContainer = unwrap(TRUE); + endContainer = unwrap(); + } else { + startContainer = endContainer = splitToFormatRoot(startContainer); + } + + // Update range positions since they might have changed after the split operations + rng.startContainer = startContainer.parentNode; + rng.startOffset = nodeIndex(startContainer); + rng.endContainer = endContainer.parentNode; + rng.endOffset = nodeIndex(endContainer) + 1; + } + + // Remove items between start/end + rangeUtils.walk(rng, function(nodes) { + each(nodes, function(node) { + process(node); + + // Remove parent span if it only contains text-decoration: underline, yet a parent node is also underlined. + if (node.nodeType === 1 && ed.dom.getStyle(node, 'text-decoration') === 'underline' && + node.parentNode && getTextDecoration(node.parentNode) === 'underline') { + removeFormat({ + 'deep': false, + 'exact': true, + 'inline': 'span', + 'styles': { + 'textDecoration': 'underline' + } + }, null, node); + } + }); + }); + } + + // Handle node + if (node) { + if (node.nodeType) { + rng = dom.createRng(); + rng.setStartBefore(node); + rng.setEndAfter(node); + removeRngStyle(rng); + } else { + removeRngStyle(node); + } + + return; + } + + if (!selection.isCollapsed() || !format.inline || dom.select('td.mce-item-selected,th.mce-item-selected').length) { + bookmark = selection.getBookmark(); + removeRngStyle(selection.getRng(TRUE)); + selection.moveToBookmark(bookmark); + + // Check if start element still has formatting then we are at: "text|text" + // and need to move the start into the next text node + if (format.inline && match(name, vars, selection.getStart())) { + moveStart(selection.getRng(true)); + } + + ed.nodeChanged(); + } else { + performCaretAction('remove', name, vars); + } + } + + /** + * Toggles the specified format on/off. + * + * @method toggle + * @param {String} name Name of format to apply/remove. + * @param {Object} vars Optional list of variables to replace within format before applying/removing it. + * @param {Node} node Optional node to apply the format to or remove from. Defaults to current selection. + */ + function toggle(name, vars, node) { + var fmt = get(name); + + if (match(name, vars, node) && (!('toggle' in fmt[0]) || fmt[0].toggle)) { + remove(name, vars, node); + } else { + apply(name, vars, node); + } + } + + /** + * Return true/false if the specified node has the specified format. + * + * @method matchNode + * @param {Node} node Node to check the format on. + * @param {String} name Format name to check. + * @param {Object} vars Optional list of variables to replace before checking it. + * @param {Boolean} similar Match format that has similar properties. + * @return {Object} Returns the format object it matches or undefined if it doesn't match. + */ + function matchNode(node, name, vars, similar) { + var formatList = get(name), format, i, classes; + + function matchItems(node, format, item_name) { + var key, value, items = format[item_name], i; + + // Custom match + if (format.onmatch) { + return format.onmatch(node, format, item_name); + } + + // Check all items + if (items) { + // Non indexed object + if (items.length === undef) { + for (key in items) { + if (items.hasOwnProperty(key)) { + if (item_name === 'attributes') { + value = dom.getAttrib(node, key); + } else { + value = getStyle(node, key); + } + + if (similar && !value && !format.exact) { + return; + } + + if ((!similar || format.exact) && !isEq(value, normalizeStyleValue(replaceVars(items[key], vars), key))) { + return; + } + } + } + } else { + // Only one match needed for indexed arrays + for (i = 0; i < items.length; i++) { + if (item_name === 'attributes' ? dom.getAttrib(node, items[i]) : getStyle(node, items[i])) { + return format; + } + } + } + } + + return format; + } + + if (formatList && node) { + // Check each format in list + for (i = 0; i < formatList.length; i++) { + format = formatList[i]; + + // Name name, attributes, styles and classes + if (matchName(node, format) && matchItems(node, format, 'attributes') && matchItems(node, format, 'styles')) { + // Match classes + if ((classes = format.classes)) { + for (i = 0; i < classes.length; i++) { + if (!dom.hasClass(node, classes[i])) { + return; + } + } + } + + return format; + } + } + } + } + + /** + * Matches the current selection or specified node against the specified format name. + * + * @method match + * @param {String} name Name of format to match. + * @param {Object} vars Optional list of variables to replace before checking it. + * @param {Node} node Optional node to check. + * @return {boolean} true/false if the specified selection/node matches the format. + */ + function match(name, vars, node) { + var startNode; + + function matchParents(node) { + var root = dom.getRoot(); + + if (node === root) { + return false; + } + + // Find first node with similar format settings + node = dom.getParent(node, function(node) { + return node.parentNode === root || !!matchNode(node, name, vars, true); + }); + + // Do an exact check on the similar format element + return matchNode(node, name, vars); + } + + // Check specified node + if (node) { + return matchParents(node); + } + + // Check selected node + node = selection.getNode(); + if (matchParents(node)) { + return TRUE; + } + + // Check start node if it's different + startNode = selection.getStart(); + if (startNode != node) { + if (matchParents(startNode)) { + return TRUE; + } + } + + return FALSE; + } + + /** + * Matches the current selection against the array of formats and returns a new array with matching formats. + * + * @method matchAll + * @param {Array} names Name of format to match. + * @param {Object} vars Optional list of variables to replace before checking it. + * @return {Array} Array with matched formats. + */ + function matchAll(names, vars) { + var startElement, matchedFormatNames = [], checkedMap = {}; + + // Check start of selection for formats + startElement = selection.getStart(); + dom.getParent(startElement, function(node) { + var i, name; + + for (i = 0; i < names.length; i++) { + name = names[i]; + + if (!checkedMap[name] && matchNode(node, name, vars)) { + checkedMap[name] = true; + matchedFormatNames.push(name); + } + } + }, dom.getRoot()); + + return matchedFormatNames; + } + + /** + * Returns true/false if the specified format can be applied to the current selection or not. It + * will currently only check the state for selector formats, it returns true on all other format types. + * + * @method canApply + * @param {String} name Name of format to check. + * @return {boolean} true/false if the specified format can be applied to the current selection/node. + */ + function canApply(name) { + var formatList = get(name), startNode, parents, i, x, selector; + + if (formatList) { + startNode = selection.getStart(); + parents = getParents(startNode); + + for (x = formatList.length - 1; x >= 0; x--) { + selector = formatList[x].selector; + + // Format is not selector based then always return TRUE + // Is it has a defaultBlock then it's likely it can be applied for example align on a non block element line + if (!selector || formatList[x].defaultBlock) { + return TRUE; + } + + for (i = parents.length - 1; i >= 0; i--) { + if (dom.is(parents[i], selector)) { + return TRUE; + } + } + } + } + + return FALSE; + } + + /** + * Executes the specified callback when the current selection matches the formats or not. + * + * @method formatChanged + * @param {String} formats Comma separated list of formats to check for. + * @param {function} callback Callback with state and args when the format is changed/toggled on/off. + * @param {Boolean} similar True/false state if the match should handle similar or exact formats. + */ + function formatChanged(formats, callback, similar) { + var currentFormats; + + // Setup format node change logic + if (!formatChangeData) { + formatChangeData = {}; + currentFormats = {}; + + ed.on('NodeChange', function(e) { + var parents = getParents(e.element), matchedFormats = {}; + + // Check for new formats + each(formatChangeData, function(callbacks, format) { + each(parents, function(node) { + if (matchNode(node, format, {}, callbacks.similar)) { + if (!currentFormats[format]) { + // Execute callbacks + each(callbacks, function(callback) { + callback(true, {node: node, format: format, parents: parents}); + }); + + currentFormats[format] = callbacks; + } + + matchedFormats[format] = callbacks; + return false; + } + }); + }); + + // Check if current formats still match + each(currentFormats, function(callbacks, format) { + if (!matchedFormats[format]) { + delete currentFormats[format]; + + each(callbacks, function(callback) { + callback(false, {node: e.element, format: format, parents: parents}); + }); + } + }); + }); + } + + // Add format listeners + each(formats.split(','), function(format) { + if (!formatChangeData[format]) { + formatChangeData[format] = []; + formatChangeData[format].similar = similar; + } + + formatChangeData[format].push(callback); + }); + + return this; + } + + // Expose to public + extend(this, { + get: get, + register: register, + apply: apply, + remove: remove, + toggle: toggle, + match: match, + matchAll: matchAll, + matchNode: matchNode, + canApply: canApply, + formatChanged: formatChanged + }); + + // Initialize + defaultFormats(); + addKeyboardShortcuts(); + ed.on('BeforeGetContent', function() { + if (markCaretContainersBogus) { + markCaretContainersBogus(); + } + }); + ed.on('mouseup keydown', function(e) { + if (disableCaretContainer) { + disableCaretContainer(e); + } + }); + + // Private functions + + /** + * Checks if the specified nodes name matches the format inline/block or selector. + * + * @private + * @param {Node} node Node to match against the specified format. + * @param {Object} format Format object o match with. + * @return {boolean} true/false if the format matches. + */ + function matchName(node, format) { + // Check for inline match + if (isEq(node, format.inline)) { + return TRUE; + } + + // Check for block match + if (isEq(node, format.block)) { + return TRUE; + } + + // Check for selector match + if (format.selector) { + return node.nodeType == 1 && dom.is(node, format.selector); + } + } + + /** + * Compares two string/nodes regardless of their case. + * + * @private + * @param {String/Node} Node or string to compare. + * @param {String/Node} Node or string to compare. + * @return {boolean} True/false if they match. + */ + function isEq(str1, str2) { + str1 = str1 || ''; + str2 = str2 || ''; + + str1 = '' + (str1.nodeName || str1); + str2 = '' + (str2.nodeName || str2); + + return str1.toLowerCase() == str2.toLowerCase(); + } + + /** + * Returns the style by name on the specified node. This method modifies the style + * contents to make it more easy to match. This will resolve a few browser issues. + * + * @private + * @param {Node} node to get style from. + * @param {String} name Style name to get. + * @return {String} Style item value. + */ + function getStyle(node, name) { + return normalizeStyleValue(dom.getStyle(node, name), name); + } + + /** + * Normalize style value by name. This method modifies the style contents + * to make it more easy to match. This will resolve a few browser issues. + * + * @private + * @param {Node} node to get style from. + * @param {String} name Style name to get. + * @return {String} Style item value. + */ + function normalizeStyleValue(value, name) { + // Force the format to hex + if (name == 'color' || name == 'backgroundColor') { + value = dom.toHex(value); + } + + // Opera will return bold as 700 + if (name == 'fontWeight' && value == 700) { + value = 'bold'; + } + + // Normalize fontFamily so "'Font name', Font" becomes: "Font name,Font" + if (name == 'fontFamily') { + value = value.replace(/[\'\"]/g, '').replace(/,\s+/g, ','); + } + + return '' + value; + } + + /** + * Replaces variables in the value. The variable format is %var. + * + * @private + * @param {String} value Value to replace variables in. + * @param {Object} vars Name/value array with variables to replace. + * @return {String} New value with replaced variables. + */ + function replaceVars(value, vars) { + if (typeof(value) != "string") { + value = value(vars); + } else if (vars) { + value = value.replace(/%(\w+)/g, function(str, name) { + return vars[name] || str; + }); + } + + return value; + } + + function isWhiteSpaceNode(node) { + return node && node.nodeType === 3 && /^([\t \r\n]+|)$/.test(node.nodeValue); + } + + function wrap(node, name, attrs) { + var wrapper = dom.create(name, attrs); + + node.parentNode.insertBefore(wrapper, node); + wrapper.appendChild(node); + + return wrapper; + } + + /** + * Expands the specified range like object to depending on format. + * + * For example on block formats it will move the start/end position + * to the beginning of the current block. + * + * @private + * @param {Object} rng Range like object. + * @param {Array} formats Array with formats to expand by. + * @return {Object} Expanded range like object. + */ + function expandRng(rng, format, remove) { + var lastIdx, leaf, endPoint, + startContainer = rng.startContainer, + startOffset = rng.startOffset, + endContainer = rng.endContainer, + endOffset = rng.endOffset; + + // This function walks up the tree if there is no siblings before/after the node + function findParentContainer(start) { + var container, parent, sibling, siblingName, root; + + container = parent = start ? startContainer : endContainer; + siblingName = start ? 'previousSibling' : 'nextSibling'; + root = dom.getRoot(); + + function isBogusBr(node) { + return node.nodeName == "BR" && node.getAttribute('data-mce-bogus') && !node.nextSibling; + } + + // If it's a text node and the offset is inside the text + if (container.nodeType == 3 && !isWhiteSpaceNode(container)) { + if (start ? startOffset > 0 : endOffset < container.nodeValue.length) { + return container; + } + } + + /*eslint no-constant-condition:0 */ + while (true) { + // Stop expanding on block elements + if (!format[0].block_expand && isBlock(parent)) { + return parent; + } + + // Walk left/right + for (sibling = parent[siblingName]; sibling; sibling = sibling[siblingName]) { + if (!isBookmarkNode(sibling) && !isWhiteSpaceNode(sibling) && !isBogusBr(sibling)) { + return parent; + } + } + + // Check if we can move up are we at root level or body level + if (parent.parentNode == root) { + container = parent; + break; + } + + parent = parent.parentNode; + } + + return container; + } + + // This function walks down the tree to find the leaf at the selection. + // The offset is also returned as if node initially a leaf, the offset may be in the middle of the text node. + function findLeaf(node, offset) { + if (offset === undef) { + offset = node.nodeType === 3 ? node.length : node.childNodes.length; + } + + while (node && node.hasChildNodes()) { + node = node.childNodes[offset]; + if (node) { + offset = node.nodeType === 3 ? node.length : node.childNodes.length; + } + } + return { node: node, offset: offset }; + } + + // If index based start position then resolve it + if (startContainer.nodeType == 1 && startContainer.hasChildNodes()) { + lastIdx = startContainer.childNodes.length - 1; + startContainer = startContainer.childNodes[startOffset > lastIdx ? lastIdx : startOffset]; + + if (startContainer.nodeType == 3) { + startOffset = 0; + } + } + + // If index based end position then resolve it + if (endContainer.nodeType == 1 && endContainer.hasChildNodes()) { + lastIdx = endContainer.childNodes.length - 1; + endContainer = endContainer.childNodes[endOffset > lastIdx ? lastIdx : endOffset - 1]; + + if (endContainer.nodeType == 3) { + endOffset = endContainer.nodeValue.length; + } + } + + // Expands the node to the closes contentEditable false element if it exists + function findParentContentEditable(node) { + var parent = node; + + while (parent) { + if (parent.nodeType === 1 && getContentEditable(parent)) { + return getContentEditable(parent) === "false" ? parent : node; + } + + parent = parent.parentNode; + } + + return node; + } + + function findWordEndPoint(container, offset, start) { + var walker, node, pos, lastTextNode; + + function findSpace(node, offset) { + var pos, pos2, str = node.nodeValue; + + if (typeof(offset) == "undefined") { + offset = start ? str.length : 0; + } + + if (start) { + pos = str.lastIndexOf(' ', offset); + pos2 = str.lastIndexOf('\u00a0', offset); + pos = pos > pos2 ? pos : pos2; + + // Include the space on remove to avoid tag soup + if (pos !== -1 && !remove) { + pos++; + } + } else { + pos = str.indexOf(' ', offset); + pos2 = str.indexOf('\u00a0', offset); + pos = pos !== -1 && (pos2 === -1 || pos < pos2) ? pos : pos2; + } + + return pos; + } + + if (container.nodeType === 3) { + pos = findSpace(container, offset); + + if (pos !== -1) { + return {container: container, offset: pos}; + } + + lastTextNode = container; + } + + // Walk the nodes inside the block + walker = new TreeWalker(container, dom.getParent(container, isBlock) || ed.getBody()); + while ((node = walker[start ? 'prev' : 'next']())) { + if (node.nodeType === 3) { + lastTextNode = node; + pos = findSpace(node); + + if (pos !== -1) { + return {container: node, offset: pos}; + } + } else if (isBlock(node)) { + break; + } + } + + if (lastTextNode) { + if (start) { + offset = 0; + } else { + offset = lastTextNode.length; + } + + return {container: lastTextNode, offset: offset}; + } + } + + function findSelectorEndPoint(container, sibling_name) { + var parents, i, y, curFormat; + + if (container.nodeType == 3 && container.nodeValue.length === 0 && container[sibling_name]) { + container = container[sibling_name]; + } + + parents = getParents(container); + for (i = 0; i < parents.length; i++) { + for (y = 0; y < format.length; y++) { + curFormat = format[y]; + + // If collapsed state is set then skip formats that doesn't match that + if ("collapsed" in curFormat && curFormat.collapsed !== rng.collapsed) { + continue; + } + + if (dom.is(parents[i], curFormat.selector)) { + return parents[i]; + } + } + } + + return container; + } + + function findBlockEndPoint(container, sibling_name) { + var node, root = dom.getRoot(); + + // Expand to block of similar type + if (!format[0].wrapper) { + node = dom.getParent(container, format[0].block, root); + } + + // Expand to first wrappable block element or any block element + if (!node) { + node = dom.getParent(container.nodeType == 3 ? container.parentNode : container, function(node) { + // Fixes #6183 where it would expand to editable parent element in inline mode + return node != root && isTextBlock(node); + }); + } + + // Exclude inner lists from wrapping + if (node && format[0].wrapper) { + node = getParents(node, 'ul,ol').reverse()[0] || node; + } + + // Didn't find a block element look for first/last wrappable element + if (!node) { + node = container; + + while (node[sibling_name] && !isBlock(node[sibling_name])) { + node = node[sibling_name]; + + // Break on BR but include it will be removed later on + // we can't remove it now since we need to check if it can be wrapped + if (isEq(node, 'br')) { + break; + } + } + } + + return node || container; + } + + // Expand to closest contentEditable element + startContainer = findParentContentEditable(startContainer); + endContainer = findParentContentEditable(endContainer); + + // Exclude bookmark nodes if possible + if (isBookmarkNode(startContainer.parentNode) || isBookmarkNode(startContainer)) { + startContainer = isBookmarkNode(startContainer) ? startContainer : startContainer.parentNode; + startContainer = startContainer.nextSibling || startContainer; + + if (startContainer.nodeType == 3) { + startOffset = 0; + } + } + + if (isBookmarkNode(endContainer.parentNode) || isBookmarkNode(endContainer)) { + endContainer = isBookmarkNode(endContainer) ? endContainer : endContainer.parentNode; + endContainer = endContainer.previousSibling || endContainer; + + if (endContainer.nodeType == 3) { + endOffset = endContainer.length; + } + } + + if (format[0].inline) { + if (rng.collapsed) { + // Expand left to closest word boundary + endPoint = findWordEndPoint(startContainer, startOffset, true); + if (endPoint) { + startContainer = endPoint.container; + startOffset = endPoint.offset; + } + + // Expand right to closest word boundary + endPoint = findWordEndPoint(endContainer, endOffset); + if (endPoint) { + endContainer = endPoint.container; + endOffset = endPoint.offset; + } + } + + // Avoid applying formatting to a trailing space. + leaf = findLeaf(endContainer, endOffset); + if (leaf.node) { + while (leaf.node && leaf.offset === 0 && leaf.node.previousSibling) { + leaf = findLeaf(leaf.node.previousSibling); + } + + if (leaf.node && leaf.offset > 0 && leaf.node.nodeType === 3 && + leaf.node.nodeValue.charAt(leaf.offset - 1) === ' ') { + + if (leaf.offset > 1) { + endContainer = leaf.node; + endContainer.splitText(leaf.offset - 1); + } + } + } + } + + // Move start/end point up the tree if the leaves are sharp and if we are in different containers + // Example * becomes !: !

    *texttext*

    ! + // This will reduce the number of wrapper elements that needs to be created + // Move start point up the tree + if (format[0].inline || format[0].block_expand) { + if (!format[0].inline || (startContainer.nodeType != 3 || startOffset === 0)) { + startContainer = findParentContainer(true); + } + + if (!format[0].inline || (endContainer.nodeType != 3 || endOffset === endContainer.nodeValue.length)) { + endContainer = findParentContainer(); + } + } + + // Expand start/end container to matching selector + if (format[0].selector && format[0].expand !== FALSE && !format[0].inline) { + // Find new startContainer/endContainer if there is better one + startContainer = findSelectorEndPoint(startContainer, 'previousSibling'); + endContainer = findSelectorEndPoint(endContainer, 'nextSibling'); + } + + // Expand start/end container to matching block element or text node + if (format[0].block || format[0].selector) { + // Find new startContainer/endContainer if there is better one + startContainer = findBlockEndPoint(startContainer, 'previousSibling'); + endContainer = findBlockEndPoint(endContainer, 'nextSibling'); + + // Non block element then try to expand up the leaf + if (format[0].block) { + if (!isBlock(startContainer)) { + startContainer = findParentContainer(true); + } + + if (!isBlock(endContainer)) { + endContainer = findParentContainer(); + } + } + } + + // Setup index for startContainer + if (startContainer.nodeType == 1) { + startOffset = nodeIndex(startContainer); + startContainer = startContainer.parentNode; + } + + // Setup index for endContainer + if (endContainer.nodeType == 1) { + endOffset = nodeIndex(endContainer) + 1; + endContainer = endContainer.parentNode; + } + + // Return new range like object + return { + startContainer: startContainer, + startOffset: startOffset, + endContainer: endContainer, + endOffset: endOffset + }; + } + + /** + * Removes the specified format for the specified node. It will also remove the node if it doesn't have + * any attributes if the format specifies it to do so. + * + * @private + * @param {Object} format Format object with items to remove from node. + * @param {Object} vars Name/value object with variables to apply to format. + * @param {Node} node Node to remove the format styles on. + * @param {Node} compare_node Optional compare node, if specified the styles will be compared to that node. + * @return {Boolean} True/false if the node was removed or not. + */ + function removeFormat(format, vars, node, compare_node) { + var i, attrs, stylesModified; + + // Check if node matches format + if (!matchName(node, format)) { + return FALSE; + } + + // Should we compare with format attribs and styles + if (format.remove != 'all') { + // Remove styles + each(format.styles, function(value, name) { + value = normalizeStyleValue(replaceVars(value, vars), name); + + // Indexed array + if (typeof(name) === 'number') { + name = value; + compare_node = 0; + } + + if (!compare_node || isEq(getStyle(compare_node, name), value)) { + dom.setStyle(node, name, ''); + } + + stylesModified = 1; + }); + + // Remove style attribute if it's empty + if (stylesModified && dom.getAttrib(node, 'style') === '') { + node.removeAttribute('style'); + node.removeAttribute('data-mce-style'); + } + + // Remove attributes + each(format.attributes, function(value, name) { + var valueOut; + + value = replaceVars(value, vars); + + // Indexed array + if (typeof(name) === 'number') { + name = value; + compare_node = 0; + } + + if (!compare_node || isEq(dom.getAttrib(compare_node, name), value)) { + // Keep internal classes + if (name == 'class') { + value = dom.getAttrib(node, name); + if (value) { + // Build new class value where everything is removed except the internal prefixed classes + valueOut = ''; + each(value.split(/\s+/), function(cls) { + if (/mce\w+/.test(cls)) { + valueOut += (valueOut ? ' ' : '') + cls; + } + }); + + // We got some internal classes left + if (valueOut) { + dom.setAttrib(node, name, valueOut); + return; + } + } + } + + // IE6 has a bug where the attribute doesn't get removed correctly + if (name == "class") { + node.removeAttribute('className'); + } + + // Remove mce prefixed attributes + if (MCE_ATTR_RE.test(name)) { + node.removeAttribute('data-mce-' + name); + } + + node.removeAttribute(name); + } + }); + + // Remove classes + each(format.classes, function(value) { + value = replaceVars(value, vars); + + if (!compare_node || dom.hasClass(compare_node, value)) { + dom.removeClass(node, value); + } + }); + + // Check for non internal attributes + attrs = dom.getAttribs(node); + for (i = 0; i < attrs.length; i++) { + if (attrs[i].nodeName.indexOf('_') !== 0) { + return FALSE; + } + } + } + + // Remove the inline child if it's empty for example or + if (format.remove != 'none') { + removeNode(node, format); + return TRUE; + } + } + + /** + * Removes the node and wrap it's children in paragraphs before doing so or + * appends BR elements to the beginning/end of the block element if forcedRootBlocks is disabled. + * + * If the div in the node below gets removed: + * text
    text
    text + * + * Output becomes: + * text

    text
    text + * + * So when the div is removed the result is: + * text
    text
    text + * + * @private + * @param {Node} node Node to remove + apply BR/P elements to. + * @param {Object} format Format rule. + * @return {Node} Input node. + */ + function removeNode(node, format) { + var parentNode = node.parentNode, rootBlockElm; + + function find(node, next, inc) { + node = getNonWhiteSpaceSibling(node, next, inc); + + return !node || (node.nodeName == 'BR' || isBlock(node)); + } + + if (format.block) { + if (!forcedRootBlock) { + // Append BR elements if needed before we remove the block + if (isBlock(node) && !isBlock(parentNode)) { + if (!find(node, FALSE) && !find(node.firstChild, TRUE, 1)) { + node.insertBefore(dom.create('br'), node.firstChild); + } + + if (!find(node, TRUE) && !find(node.lastChild, FALSE, 1)) { + node.appendChild(dom.create('br')); + } + } + } else { + // Wrap the block in a forcedRootBlock if we are at the root of document + if (parentNode == dom.getRoot()) { + if (!format.list_block || !isEq(node, format.list_block)) { + each(grep(node.childNodes), function(node) { + if (isValid(forcedRootBlock, node.nodeName.toLowerCase())) { + if (!rootBlockElm) { + rootBlockElm = wrap(node, forcedRootBlock); + dom.setAttribs(rootBlockElm, ed.settings.forced_root_block_attrs); + } else { + rootBlockElm.appendChild(node); + } + } else { + rootBlockElm = 0; + } + }); + } + } + } + } + + // Never remove nodes that isn't the specified inline element if a selector is specified too + if (format.selector && format.inline && !isEq(format.inline, node)) { + return; + } + + dom.remove(node, 1); + } + + /** + * Returns the next/previous non whitespace node. + * + * @private + * @param {Node} node Node to start at. + * @param {boolean} next (Optional) Include next or previous node defaults to previous. + * @param {boolean} inc (Optional) Include the current node in checking. Defaults to false. + * @return {Node} Next or previous node or undefined if it wasn't found. + */ + function getNonWhiteSpaceSibling(node, next, inc) { + if (node) { + next = next ? 'nextSibling' : 'previousSibling'; + + for (node = inc ? node : node[next]; node; node = node[next]) { + if (node.nodeType == 1 || !isWhiteSpaceNode(node)) { + return node; + } + } + } + } + + /** + * Checks if the specified node is a bookmark node or not. + * + * @private + * @param {Node} node Node to check if it's a bookmark node or not. + * @return {Boolean} true/false if the node is a bookmark node. + */ + function isBookmarkNode(node) { + return node && node.nodeType == 1 && node.getAttribute('data-mce-type') == 'bookmark'; + } + + /** + * Merges the next/previous sibling element if they match. + * + * @private + * @param {Node} prev Previous node to compare/merge. + * @param {Node} next Next node to compare/merge. + * @return {Node} Next node if we didn't merge and prev node if we did. + */ + function mergeSiblings(prev, next) { + var sibling, tmpSibling; + + /** + * Compares two nodes and checks if it's attributes and styles matches. + * This doesn't compare classes as items since their order is significant. + * + * @private + * @param {Node} node1 First node to compare with. + * @param {Node} node2 Second node to compare with. + * @return {boolean} True/false if the nodes are the same or not. + */ + function compareElements(node1, node2) { + // Not the same name + if (node1.nodeName != node2.nodeName) { + return FALSE; + } + + /** + * Returns all the nodes attributes excluding internal ones, styles and classes. + * + * @private + * @param {Node} node Node to get attributes from. + * @return {Object} Name/value object with attributes and attribute values. + */ + function getAttribs(node) { + var attribs = {}; + + each(dom.getAttribs(node), function(attr) { + var name = attr.nodeName.toLowerCase(); + + // Don't compare internal attributes or style + if (name.indexOf('_') !== 0 && name !== 'style' && name !== 'data-mce-style') { + attribs[name] = dom.getAttrib(node, name); + } + }); + + return attribs; + } + + /** + * Compares two objects checks if it's key + value exists in the other one. + * + * @private + * @param {Object} obj1 First object to compare. + * @param {Object} obj2 Second object to compare. + * @return {boolean} True/false if the objects matches or not. + */ + function compareObjects(obj1, obj2) { + var value, name; + + for (name in obj1) { + // Obj1 has item obj2 doesn't have + if (obj1.hasOwnProperty(name)) { + value = obj2[name]; + + // Obj2 doesn't have obj1 item + if (value === undef) { + return FALSE; + } + + // Obj2 item has a different value + if (obj1[name] != value) { + return FALSE; + } + + // Delete similar value + delete obj2[name]; + } + } + + // Check if obj 2 has something obj 1 doesn't have + for (name in obj2) { + // Obj2 has item obj1 doesn't have + if (obj2.hasOwnProperty(name)) { + return FALSE; + } + } + + return TRUE; + } + + // Attribs are not the same + if (!compareObjects(getAttribs(node1), getAttribs(node2))) { + return FALSE; + } + + // Styles are not the same + if (!compareObjects(dom.parseStyle(dom.getAttrib(node1, 'style')), dom.parseStyle(dom.getAttrib(node2, 'style')))) { + return FALSE; + } + + return !isBookmarkNode(node1) && !isBookmarkNode(node2); + } + + function findElementSibling(node, sibling_name) { + for (sibling = node; sibling; sibling = sibling[sibling_name]) { + if (sibling.nodeType == 3 && sibling.nodeValue.length !== 0) { + return node; + } + + if (sibling.nodeType == 1 && !isBookmarkNode(sibling)) { + return sibling; + } + } + + return node; + } + + // Check if next/prev exists and that they are elements + if (prev && next) { + // If previous sibling is empty then jump over it + prev = findElementSibling(prev, 'previousSibling'); + next = findElementSibling(next, 'nextSibling'); + + // Compare next and previous nodes + if (compareElements(prev, next)) { + // Append nodes between + for (sibling = prev.nextSibling; sibling && sibling != next;) { + tmpSibling = sibling; + sibling = sibling.nextSibling; + prev.appendChild(tmpSibling); + } + + // Remove next node + dom.remove(next); + + // Move children into prev node + each(grep(next.childNodes), function(node) { + prev.appendChild(node); + }); + + return prev; + } + } + + return next; + } + + function getContainer(rng, start) { + var container, offset, lastIdx; + + container = rng[start ? 'startContainer' : 'endContainer']; + offset = rng[start ? 'startOffset' : 'endOffset']; + + if (container.nodeType == 1) { + lastIdx = container.childNodes.length - 1; + + if (!start && offset) { + offset--; + } + + container = container.childNodes[offset > lastIdx ? lastIdx : offset]; + } + + // If start text node is excluded then walk to the next node + if (container.nodeType === 3 && start && offset >= container.nodeValue.length) { + container = new TreeWalker(container, ed.getBody()).next() || container; + } + + // If end text node is excluded then walk to the previous node + if (container.nodeType === 3 && !start && offset === 0) { + container = new TreeWalker(container, ed.getBody()).prev() || container; + } + + return container; + } + + function performCaretAction(type, name, vars) { + var caretContainerId = '_mce_caret', debug = ed.settings.caret_debug; + + // Creates a caret container bogus element + function createCaretContainer(fill) { + var caretContainer = dom.create('span', {id: caretContainerId, 'data-mce-bogus': true, style: debug ? 'color:red' : ''}); + + if (fill) { + caretContainer.appendChild(ed.getDoc().createTextNode(INVISIBLE_CHAR)); + } + + return caretContainer; + } + + function isCaretContainerEmpty(node, nodes) { + while (node) { + if ((node.nodeType === 3 && node.nodeValue !== INVISIBLE_CHAR) || node.childNodes.length > 1) { + return false; + } + + // Collect nodes + if (nodes && node.nodeType === 1) { + nodes.push(node); + } + + node = node.firstChild; + } + + return true; + } + + // Returns any parent caret container element + function getParentCaretContainer(node) { + while (node) { + if (node.id === caretContainerId) { + return node; + } + + node = node.parentNode; + } + } + + // Finds the first text node in the specified node + function findFirstTextNode(node) { + var walker; + + if (node) { + walker = new TreeWalker(node, node); + + for (node = walker.current(); node; node = walker.next()) { + if (node.nodeType === 3) { + return node; + } + } + } + } + + // Removes the caret container for the specified node or all on the current document + function removeCaretContainer(node, move_caret) { + var child, rng; + + if (!node) { + node = getParentCaretContainer(selection.getStart()); + + if (!node) { + while ((node = dom.get(caretContainerId))) { + removeCaretContainer(node, false); + } + } + } else { + rng = selection.getRng(true); + + if (isCaretContainerEmpty(node)) { + if (move_caret !== false) { + rng.setStartBefore(node); + rng.setEndBefore(node); + } + + dom.remove(node); + } else { + child = findFirstTextNode(node); + + if (child.nodeValue.charAt(0) === INVISIBLE_CHAR) { + child = child.deleteData(0, 1); + } + + dom.remove(node, 1); + } + + selection.setRng(rng); + } + } + + // Applies formatting to the caret postion + function applyCaretFormat() { + var rng, caretContainer, textNode, offset, bookmark, container, text; + + rng = selection.getRng(true); + offset = rng.startOffset; + container = rng.startContainer; + text = container.nodeValue; + + caretContainer = getParentCaretContainer(selection.getStart()); + if (caretContainer) { + textNode = findFirstTextNode(caretContainer); + } + + // Expand to word is caret is in the middle of a text node and the char before/after is a alpha numeric character + if (text && offset > 0 && offset < text.length && /\w/.test(text.charAt(offset)) && /\w/.test(text.charAt(offset - 1))) { + // Get bookmark of caret position + bookmark = selection.getBookmark(); + + // Collapse bookmark range (WebKit) + rng.collapse(true); + + // Expand the range to the closest word and split it at those points + rng = expandRng(rng, get(name)); + rng = rangeUtils.split(rng); + + // Apply the format to the range + apply(name, vars, rng); + + // Move selection back to caret position + selection.moveToBookmark(bookmark); + } else { + if (!caretContainer || textNode.nodeValue !== INVISIBLE_CHAR) { + caretContainer = createCaretContainer(true); + textNode = caretContainer.firstChild; + + rng.insertNode(caretContainer); + offset = 1; + + apply(name, vars, caretContainer); + } else { + apply(name, vars, caretContainer); + } + + // Move selection to text node + selection.setCursorLocation(textNode, offset); + } + } + + function removeCaretFormat() { + var rng = selection.getRng(true), container, offset, bookmark, + hasContentAfter, node, formatNode, parents = [], i, caretContainer; + + container = rng.startContainer; + offset = rng.startOffset; + node = container; + + if (container.nodeType == 3) { + if (offset != container.nodeValue.length || container.nodeValue === INVISIBLE_CHAR) { + hasContentAfter = true; + } + + node = node.parentNode; + } + + while (node) { + if (matchNode(node, name, vars)) { + formatNode = node; + break; + } + + if (node.nextSibling) { + hasContentAfter = true; + } + + parents.push(node); + node = node.parentNode; + } + + // Node doesn't have the specified format + if (!formatNode) { + return; + } + + // Is there contents after the caret then remove the format on the element + if (hasContentAfter) { + // Get bookmark of caret position + bookmark = selection.getBookmark(); + + // Collapse bookmark range (WebKit) + rng.collapse(true); + + // Expand the range to the closest word and split it at those points + rng = expandRng(rng, get(name), true); + rng = rangeUtils.split(rng); + + // Remove the format from the range + remove(name, vars, rng); + + // Move selection back to caret position + selection.moveToBookmark(bookmark); + } else { + caretContainer = createCaretContainer(); + + node = caretContainer; + for (i = parents.length - 1; i >= 0; i--) { + node.appendChild(dom.clone(parents[i], false)); + node = node.firstChild; + } + + // Insert invisible character into inner most format element + node.appendChild(dom.doc.createTextNode(INVISIBLE_CHAR)); + node = node.firstChild; + + var block = dom.getParent(formatNode, isTextBlock); + + if (block && dom.isEmpty(block)) { + // Replace formatNode with caretContainer when removing format from empty block like

    |

    + formatNode.parentNode.replaceChild(caretContainer, formatNode); + } else { + // Insert caret container after the formated node + dom.insertAfter(caretContainer, formatNode); + } + + // Move selection to text node + selection.setCursorLocation(node, 1); + + // If the formatNode is empty, we can remove it safely. + if (dom.isEmpty(formatNode)) { + dom.remove(formatNode); + } + } + } + + // Checks if the parent caret container node isn't empty if that is the case it + // will remove the bogus state on all children that isn't empty + function unmarkBogusCaretParents() { + var caretContainer; + + caretContainer = getParentCaretContainer(selection.getStart()); + if (caretContainer && !dom.isEmpty(caretContainer)) { + walk(caretContainer, function(node) { + if (node.nodeType == 1 && node.id !== caretContainerId && !dom.isEmpty(node)) { + dom.setAttrib(node, 'data-mce-bogus', null); + } + }, 'childNodes'); + } + } + + // Only bind the caret events once + if (!ed._hasCaretEvents) { + // Mark current caret container elements as bogus when getting the contents so we don't end up with empty elements + markCaretContainersBogus = function() { + var nodes = [], i; + + if (isCaretContainerEmpty(getParentCaretContainer(selection.getStart()), nodes)) { + // Mark children + i = nodes.length; + while (i--) { + dom.setAttrib(nodes[i], 'data-mce-bogus', '1'); + } + } + }; + + disableCaretContainer = function(e) { + var keyCode = e.keyCode; + + removeCaretContainer(); + + // Remove caret container on keydown and it's a backspace, enter or left/right arrow keys + if (keyCode == 8 || keyCode == 37 || keyCode == 39) { + removeCaretContainer(getParentCaretContainer(selection.getStart())); + } + + unmarkBogusCaretParents(); + }; + + // Remove bogus state if they got filled by contents using editor.selection.setContent + ed.on('SetContent', function(e) { + if (e.selection) { + unmarkBogusCaretParents(); + } + }); + ed._hasCaretEvents = true; + } + + // Do apply or remove caret format + if (type == "apply") { + applyCaretFormat(); + } else { + removeCaretFormat(); + } + } + + /** + * Moves the start to the first suitable text node. + */ + function moveStart(rng) { + var container = rng.startContainer, + offset = rng.startOffset, isAtEndOfText, + walker, node, nodes, tmpNode; + + // Convert text node into index if possible + if (container.nodeType == 3 && offset >= container.nodeValue.length) { + // Get the parent container location and walk from there + offset = nodeIndex(container); + container = container.parentNode; + isAtEndOfText = true; + } + + // Move startContainer/startOffset in to a suitable node + if (container.nodeType == 1) { + nodes = container.childNodes; + container = nodes[Math.min(offset, nodes.length - 1)]; + walker = new TreeWalker(container, dom.getParent(container, dom.isBlock)); + + // If offset is at end of the parent node walk to the next one + if (offset > nodes.length - 1 || isAtEndOfText) { + walker.next(); + } + + for (node = walker.current(); node; node = walker.next()) { + if (node.nodeType == 3 && !isWhiteSpaceNode(node)) { + // IE has a "neat" feature where it moves the start node into the closest element + // we can avoid this by inserting an element before it and then remove it after we set the selection + tmpNode = dom.create('a', null, INVISIBLE_CHAR); + node.parentNode.insertBefore(tmpNode, node); + + // Set selection and remove tmpNode + rng.setStart(node, 0); + selection.setRng(rng); + dom.remove(tmpNode); + + return; + } + } + } + } + }; +}); + +// Included from: js/tinymce/classes/UndoManager.js + +/** + * UndoManager.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class handles the undo/redo history levels for the editor. Since the build in undo/redo has major drawbacks a custom one was needed. + * + * @class tinymce.UndoManager + */ +define("tinymce/UndoManager", [ + "tinymce/Env", + "tinymce/util/Tools" +], function(Env, Tools) { + var trim = Tools.trim, trimContentRegExp; + + trimContentRegExp = new RegExp([ + ']+data-mce-bogus[^>]+>[\u200B\uFEFF]+<\\/span>', // Trim bogus spans like caret containers + ']+data-mce-bogus[^>]+><\\/div>', // Trim bogus divs like resize handles + '\\s?data-mce-selected="[^"]+"' // Trim temporaty data-mce prefixed attributes like data-mce-selected + ].join('|'), 'gi'); + + return function(editor) { + var self = this, index = 0, data = [], beforeBookmark, isFirstTypedCharacter, lock; + + // Returns a trimmed version of the current editor contents + function getContent() { + return trim(editor.getContent({format: 'raw', no_events: 1}).replace(trimContentRegExp, '')); + } + + function addNonTypingUndoLevel(e) { + self.typing = false; + self.add({}, e); + } + + // Add initial undo level when the editor is initialized + editor.on('init', function() { + self.add(); + }); + + // Get position before an execCommand is processed + editor.on('BeforeExecCommand', function(e) { + var cmd = e.command; + + if (cmd != 'Undo' && cmd != 'Redo' && cmd != 'mceRepaint') { + self.beforeChange(); + } + }); + + // Add undo level after an execCommand call was made + editor.on('ExecCommand', function(e) { + var cmd = e.command; + + if (cmd != 'Undo' && cmd != 'Redo' && cmd != 'mceRepaint') { + addNonTypingUndoLevel(e); + } + }); + + editor.on('ObjectResizeStart', function() { + self.beforeChange(); + }); + + editor.on('SaveContent ObjectResized blur', addNonTypingUndoLevel); + editor.dom.bind(editor.dom.getRoot(), 'dragend', addNonTypingUndoLevel); + + editor.on('KeyUp', function(e) { + var keyCode = e.keyCode; + + if ((keyCode >= 33 && keyCode <= 36) || (keyCode >= 37 && keyCode <= 40) || keyCode == 45 || keyCode == 13 || e.ctrlKey) { + addNonTypingUndoLevel(); + editor.nodeChanged(); + } + + if (keyCode == 46 || keyCode == 8 || (Env.mac && (keyCode == 91 || keyCode == 93))) { + editor.nodeChanged(); + } + + // Fire a TypingUndo event on the first character entered + if (isFirstTypedCharacter && self.typing) { + // Make the it dirty if the content was changed after typing the first character + if (!editor.isDirty()) { + editor.isNotDirty = !data[0] || getContent() == data[0].content; + + // Fire initial change event + if (!editor.isNotDirty) { + editor.fire('change', {level: data[0], lastLevel: null}); + } + } + + editor.fire('TypingUndo'); + isFirstTypedCharacter = false; + editor.nodeChanged(); + } + }); + + editor.on('KeyDown', function(e) { + var keyCode = e.keyCode; + + // Is caracter positon keys left,right,up,down,home,end,pgdown,pgup,enter + if ((keyCode >= 33 && keyCode <= 36) || (keyCode >= 37 && keyCode <= 40) || keyCode == 45) { + if (self.typing) { + addNonTypingUndoLevel(e); + } + + return; + } + + // If key isn't shift,ctrl,alt,capslock,metakey + if ((keyCode < 16 || keyCode > 20) && keyCode != 224 && keyCode != 91 && !self.typing) { + self.beforeChange(); + self.typing = true; + self.add({}, e); + isFirstTypedCharacter = true; + } + }); + + editor.on('MouseDown', function(e) { + if (self.typing) { + addNonTypingUndoLevel(e); + } + }); + + // Add keyboard shortcuts for undo/redo keys + editor.addShortcut('ctrl+z', '', 'Undo'); + editor.addShortcut('ctrl+y,ctrl+shift+z', '', 'Redo'); + + editor.on('AddUndo Undo Redo ClearUndos MouseUp', function(e) { + if (!e.isDefaultPrevented()) { + editor.nodeChanged(); + } + }); + + self = { + // Explose for debugging reasons + data: data, + + /** + * State if the user is currently typing or not. This will add a typing operation into one undo + * level instead of one new level for each keystroke. + * + * @field {Boolean} typing + */ + typing: false, + + /** + * Stores away a bookmark to be used when performing an undo action so that the selection is before + * the change has been made. + * + * @method beforeChange + */ + beforeChange: function() { + if (!lock) { + beforeBookmark = editor.selection.getBookmark(2, true); + } + }, + + /** + * Adds a new undo level/snapshot to the undo list. + * + * @method add + * @param {Object} level Optional undo level object to add. + * @param {DOMEvent} Event Optional event responsible for the creation of the undo level. + * @return {Object} Undo level that got added or null it a level wasn't needed. + */ + add: function(level, event) { + var i, settings = editor.settings, lastLevel; + + level = level || {}; + level.content = getContent(); + + if (lock || editor.removed) { + return null; + } + + if (editor.fire('BeforeAddUndo', {level: level, originalEvent: event}).isDefaultPrevented()) { + return null; + } + + // Add undo level if needed + lastLevel = data[index]; + if (lastLevel && lastLevel.content == level.content) { + return null; + } + + // Set before bookmark on previous level + if (data[index]) { + data[index].beforeBookmark = beforeBookmark; + } + + // Time to compress + if (settings.custom_undo_redo_levels) { + if (data.length > settings.custom_undo_redo_levels) { + for (i = 0; i < data.length - 1; i++) { + data[i] = data[i + 1]; + } + + data.length--; + index = data.length; + } + } + + // Get a non intrusive normalized bookmark + level.bookmark = editor.selection.getBookmark(2, true); + + // Crop array if needed + if (index < data.length - 1) { + data.length = index + 1; + } + + data.push(level); + index = data.length - 1; + + var args = {level: level, lastLevel: lastLevel, originalEvent: event}; + + editor.fire('AddUndo', args); + + if (index > 0) { + editor.isNotDirty = false; + editor.fire('change', args); + } + + return level; + }, + + /** + * Undoes the last action. + * + * @method undo + * @return {Object} Undo level or null if no undo was performed. + */ + undo: function() { + var level; + + if (self.typing) { + self.add(); + self.typing = false; + } + + if (index > 0) { + level = data[--index]; + + // Undo to first index then set dirty state to false + if (index === 0) { + editor.isNotDirty = true; + } + + editor.setContent(level.content, {format: 'raw'}); + editor.selection.moveToBookmark(level.beforeBookmark); + + editor.fire('undo', {level: level}); + } + + return level; + }, + + /** + * Redoes the last action. + * + * @method redo + * @return {Object} Redo level or null if no redo was performed. + */ + redo: function() { + var level; + + if (index < data.length - 1) { + level = data[++index]; + + editor.setContent(level.content, {format: 'raw'}); + editor.selection.moveToBookmark(level.bookmark); + + editor.fire('redo', {level: level}); + } + + return level; + }, + + /** + * Removes all undo levels. + * + * @method clear + */ + clear: function() { + data = []; + index = 0; + self.typing = false; + editor.fire('ClearUndos'); + }, + + /** + * Returns true/false if the undo manager has any undo levels. + * + * @method hasUndo + * @return {Boolean} true/false if the undo manager has any undo levels. + */ + hasUndo: function() { + // Has undo levels or typing and content isn't the same as the initial level + return index > 0 || (self.typing && data[0] && getContent() != data[0].content); + }, + + /** + * Returns true/false if the undo manager has any redo levels. + * + * @method hasRedo + * @return {Boolean} true/false if the undo manager has any redo levels. + */ + hasRedo: function() { + return index < data.length - 1 && !this.typing; + }, + + /** + * Executes the specified function in an undo transation. The selection + * before the modification will be stored to the undo stack and if the DOM changes + * it will add a new undo level. Any methods within the transation that adds undo levels will + * be ignored. So a transation can include calls to execCommand or editor.insertContent. + * + * @method transact + * @param {function} callback Function to execute dom manipulation logic in. + */ + transact: function(callback) { + self.beforeChange(); + + lock = true; + callback(); + lock = false; + + self.add(); + } + }; + + return self; + }; +}); + +// Included from: js/tinymce/classes/EnterKey.js + +/** + * EnterKey.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Contains logic for handling the enter key to split/generate block elements. + */ +define("tinymce/EnterKey", [ + "tinymce/dom/TreeWalker", + "tinymce/dom/RangeUtils", + "tinymce/Env" +], function(TreeWalker, RangeUtils, Env) { + var isIE = Env.ie && Env.ie < 11; + + return function(editor) { + var dom = editor.dom, selection = editor.selection, settings = editor.settings; + var undoManager = editor.undoManager, schema = editor.schema, nonEmptyElementsMap = schema.getNonEmptyElements(); + + function handleEnterKey(evt) { + var rng, tmpRng, editableRoot, container, offset, parentBlock, documentMode, shiftKey, + newBlock, fragment, containerBlock, parentBlockName, containerBlockName, newBlockName, isAfterLastNodeInContainer; + + // Returns true if the block can be split into two blocks or not + function canSplitBlock(node) { + return node && + dom.isBlock(node) && + !/^(TD|TH|CAPTION|FORM)$/.test(node.nodeName) && + !/^(fixed|absolute)/i.test(node.style.position) && + dom.getContentEditable(node) !== "true"; + } + + // Renders empty block on IE + function renderBlockOnIE(block) { + var oldRng; + + if (dom.isBlock(block)) { + oldRng = selection.getRng(); + block.appendChild(dom.create('span', null, '\u00a0')); + selection.select(block); + block.lastChild.outerHTML = ''; + selection.setRng(oldRng); + } + } + + // Remove the first empty inline element of the block so this:

    x

    becomes this:

    x

    + function trimInlineElementsOnLeftSideOfBlock(block) { + var node = block, firstChilds = [], i; + + // Find inner most first child ex:

    *

    + while ((node = node.firstChild)) { + if (dom.isBlock(node)) { + return; + } + + if (node.nodeType == 1 && !nonEmptyElementsMap[node.nodeName.toLowerCase()]) { + firstChilds.push(node); + } + } + + i = firstChilds.length; + while (i--) { + node = firstChilds[i]; + if (!node.hasChildNodes() || (node.firstChild == node.lastChild && node.firstChild.nodeValue === '')) { + dom.remove(node); + } else { + // Remove see #5381 + if (node.nodeName == "A" && (node.innerText || node.textContent) === ' ') { + dom.remove(node); + } + } + } + } + + // Moves the caret to a suitable position within the root for example in the first non + // pure whitespace text node or before an image + function moveToCaretPosition(root) { + var walker, node, rng, lastNode = root, tempElm; + + function firstNonWhiteSpaceNodeSibling(node) { + while (node) { + if (node.nodeType == 1 || (node.nodeType == 3 && node.data && /[\r\n\s]/.test(node.data))) { + return node; + } + + node = node.nextSibling; + } + } + + // Old IE versions doesn't properly render blocks with br elements in them + // For example


    wont be rendered correctly in a contentEditable area + // until you remove the br producing

    + if (Env.ie && Env.ie < 9 && parentBlock && parentBlock.firstChild) { + if (parentBlock.firstChild == parentBlock.lastChild && parentBlock.firstChild.tagName == 'BR') { + dom.remove(parentBlock.firstChild); + } + } + + if (root.nodeName == 'LI') { + var firstChild = firstNonWhiteSpaceNodeSibling(root.firstChild); + + if (firstChild && /^(UL|OL)$/.test(firstChild.nodeName)) { + root.insertBefore(dom.doc.createTextNode('\u00a0'), root.firstChild); + } + } + + rng = dom.createRng(); + + if (root.hasChildNodes()) { + walker = new TreeWalker(root, root); + + while ((node = walker.current())) { + if (node.nodeType == 3) { + rng.setStart(node, 0); + rng.setEnd(node, 0); + break; + } + + if (nonEmptyElementsMap[node.nodeName.toLowerCase()]) { + rng.setStartBefore(node); + rng.setEndBefore(node); + break; + } + + lastNode = node; + node = walker.next(); + } + + if (!node) { + rng.setStart(lastNode, 0); + rng.setEnd(lastNode, 0); + } + } else { + if (root.nodeName == 'BR') { + if (root.nextSibling && dom.isBlock(root.nextSibling)) { + // Trick on older IE versions to render the caret before the BR between two lists + if (!documentMode || documentMode < 9) { + tempElm = dom.create('br'); + root.parentNode.insertBefore(tempElm, root); + } + + rng.setStartBefore(root); + rng.setEndBefore(root); + } else { + rng.setStartAfter(root); + rng.setEndAfter(root); + } + } else { + rng.setStart(root, 0); + rng.setEnd(root, 0); + } + } + + selection.setRng(rng); + + // Remove tempElm created for old IE:s + dom.remove(tempElm); + selection.scrollIntoView(root); + } + + function setForcedBlockAttrs(node) { + var forcedRootBlockName = settings.forced_root_block; + + if (forcedRootBlockName && forcedRootBlockName.toLowerCase() === node.tagName.toLowerCase()) { + dom.setAttribs(node, settings.forced_root_block_attrs); + } + } + + // Creates a new block element by cloning the current one or creating a new one if the name is specified + // This function will also copy any text formatting from the parent block and add it to the new one + function createNewBlock(name) { + var node = container, block, clonedNode, caretNode; + + if (name || parentBlockName == "TABLE") { + block = dom.create(name || newBlockName); + setForcedBlockAttrs(block); + } else { + block = parentBlock.cloneNode(false); + } + + caretNode = block; + + // Clone any parent styles + if (settings.keep_styles !== false) { + do { + if (/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U|VAR|CITE|DFN|CODE|MARK|Q|SUP|SUB|SAMP)$/.test(node.nodeName)) { + // Never clone a caret containers + if (node.id == '_mce_caret') { + continue; + } + + clonedNode = node.cloneNode(false); + dom.setAttrib(clonedNode, 'id', ''); // Remove ID since it needs to be document unique + + if (block.hasChildNodes()) { + clonedNode.appendChild(block.firstChild); + block.appendChild(clonedNode); + } else { + caretNode = clonedNode; + block.appendChild(clonedNode); + } + } + } while ((node = node.parentNode)); + } + + // BR is needed in empty blocks on non IE browsers + if (!isIE) { + caretNode.innerHTML = '
    '; + } + + return block; + } + + // Returns true/false if the caret is at the start/end of the parent block element + function isCaretAtStartOrEndOfBlock(start) { + var walker, node, name; + + // Caret is in the middle of a text node like "a|b" + if (container.nodeType == 3 && (start ? offset > 0 : offset < container.nodeValue.length)) { + return false; + } + + // If after the last element in block node edge case for #5091 + if (container.parentNode == parentBlock && isAfterLastNodeInContainer && !start) { + return true; + } + + // If the caret if before the first element in parentBlock + if (start && container.nodeType == 1 && container == parentBlock.firstChild) { + return true; + } + + // Caret can be before/after a table + if (container.nodeName === "TABLE" || (container.previousSibling && container.previousSibling.nodeName == "TABLE")) { + return (isAfterLastNodeInContainer && !start) || (!isAfterLastNodeInContainer && start); + } + + // Walk the DOM and look for text nodes or non empty elements + walker = new TreeWalker(container, parentBlock); + + // If caret is in beginning or end of a text block then jump to the next/previous node + if (container.nodeType == 3) { + if (start && offset === 0) { + walker.prev(); + } else if (!start && offset == container.nodeValue.length) { + walker.next(); + } + } + + while ((node = walker.current())) { + if (node.nodeType === 1) { + // Ignore bogus elements + if (!node.getAttribute('data-mce-bogus')) { + // Keep empty elements like but not trailing br:s like

    text|

    + name = node.nodeName.toLowerCase(); + if (nonEmptyElementsMap[name] && name !== 'br') { + return false; + } + } + } else if (node.nodeType === 3 && !/^[ \t\r\n]*$/.test(node.nodeValue)) { + return false; + } + + if (start) { + walker.prev(); + } else { + walker.next(); + } + } + + return true; + } + + // Wraps any text nodes or inline elements in the specified forced root block name + function wrapSelfAndSiblingsInDefaultBlock(container, offset) { + var newBlock, parentBlock, startNode, node, next, rootBlockName, blockName = newBlockName || 'P'; + + // Not in a block element or in a table cell or caption + parentBlock = dom.getParent(container, dom.isBlock); + rootBlockName = editor.getBody().nodeName.toLowerCase(); + if (!parentBlock || !canSplitBlock(parentBlock)) { + parentBlock = parentBlock || editableRoot; + + if (!parentBlock.hasChildNodes()) { + newBlock = dom.create(blockName); + setForcedBlockAttrs(newBlock); + parentBlock.appendChild(newBlock); + rng.setStart(newBlock, 0); + rng.setEnd(newBlock, 0); + return newBlock; + } + + // Find parent that is the first child of parentBlock + node = container; + while (node.parentNode != parentBlock) { + node = node.parentNode; + } + + // Loop left to find start node start wrapping at + while (node && !dom.isBlock(node)) { + startNode = node; + node = node.previousSibling; + } + + if (startNode && schema.isValidChild(rootBlockName, blockName.toLowerCase())) { + newBlock = dom.create(blockName); + setForcedBlockAttrs(newBlock); + startNode.parentNode.insertBefore(newBlock, startNode); + + // Start wrapping until we hit a block + node = startNode; + while (node && !dom.isBlock(node)) { + next = node.nextSibling; + newBlock.appendChild(node); + node = next; + } + + // Restore range to it's past location + rng.setStart(container, offset); + rng.setEnd(container, offset); + } + } + + return container; + } + + // Inserts a block or br before/after or in the middle of a split list of the LI is empty + function handleEmptyListItem() { + function isFirstOrLastLi(first) { + var node = containerBlock[first ? 'firstChild' : 'lastChild']; + + // Find first/last element since there might be whitespace there + while (node) { + if (node.nodeType == 1) { + break; + } + + node = node[first ? 'nextSibling' : 'previousSibling']; + } + + return node === parentBlock; + } + + function getContainerBlock() { + var containerBlockParent = containerBlock.parentNode; + + if (containerBlockParent.nodeName == 'LI') { + return containerBlockParent; + } + + return containerBlock; + } + + // Check if we are in an nested list + var containerBlockParentName = containerBlock.parentNode.nodeName; + if (/^(OL|UL|LI)$/.test(containerBlockParentName)) { + newBlockName = 'LI'; + } + + newBlock = newBlockName ? createNewBlock(newBlockName) : dom.create('BR'); + + if (isFirstOrLastLi(true) && isFirstOrLastLi()) { + if (containerBlockParentName == 'LI') { + // Nested list is inside a LI + dom.insertAfter(newBlock, getContainerBlock()); + } else { + // Is first and last list item then replace the OL/UL with a text block + dom.replace(newBlock, containerBlock); + } + } else if (isFirstOrLastLi(true)) { + if (containerBlockParentName == 'LI') { + // List nested in an LI then move the list to a new sibling LI + dom.insertAfter(newBlock, getContainerBlock()); + newBlock.appendChild(dom.doc.createTextNode(' ')); // Needed for IE so the caret can be placed + newBlock.appendChild(containerBlock); + } else { + // First LI in list then remove LI and add text block before list + containerBlock.parentNode.insertBefore(newBlock, containerBlock); + } + } else if (isFirstOrLastLi()) { + // Last LI in list then remove LI and add text block after list + dom.insertAfter(newBlock, getContainerBlock()); + renderBlockOnIE(newBlock); + } else { + // Middle LI in list the split the list and insert a text block in the middle + // Extract after fragment and insert it after the current block + containerBlock = getContainerBlock(); + tmpRng = rng.cloneRange(); + tmpRng.setStartAfter(parentBlock); + tmpRng.setEndAfter(containerBlock); + fragment = tmpRng.extractContents(); + + if (newBlockName == 'LI' && fragment.firstChild.nodeName == 'LI') { + newBlock = fragment.firstChild; + dom.insertAfter(fragment, containerBlock); + } else { + dom.insertAfter(fragment, containerBlock); + dom.insertAfter(newBlock, containerBlock); + } + } + + dom.remove(parentBlock); + moveToCaretPosition(newBlock); + undoManager.add(); + } + + // Walks the parent block to the right and look for BR elements + function hasRightSideContent() { + var walker = new TreeWalker(container, parentBlock), node; + + while ((node = walker.next())) { + if (nonEmptyElementsMap[node.nodeName.toLowerCase()] || node.length > 0) { + return true; + } + } + } + + // Inserts a BR element if the forced_root_block option is set to false or empty string + function insertBr() { + var brElm, extraBr, marker; + + if (container && container.nodeType == 3 && offset >= container.nodeValue.length) { + // Insert extra BR element at the end block elements + if (!isIE && !hasRightSideContent()) { + brElm = dom.create('br'); + rng.insertNode(brElm); + rng.setStartAfter(brElm); + rng.setEndAfter(brElm); + extraBr = true; + } + } + + brElm = dom.create('br'); + rng.insertNode(brElm); + + // Rendering modes below IE8 doesn't display BR elements in PRE unless we have a \n before it + if (isIE && parentBlockName == 'PRE' && (!documentMode || documentMode < 8)) { + brElm.parentNode.insertBefore(dom.doc.createTextNode('\r'), brElm); + } + + // Insert temp marker and scroll to that + marker = dom.create('span', {}, ' '); + brElm.parentNode.insertBefore(marker, brElm); + selection.scrollIntoView(marker); + dom.remove(marker); + + if (!extraBr) { + rng.setStartAfter(brElm); + rng.setEndAfter(brElm); + } else { + rng.setStartBefore(brElm); + rng.setEndBefore(brElm); + } + + selection.setRng(rng); + undoManager.add(); + } + + // Trims any linebreaks at the beginning of node user for example when pressing enter in a PRE element + function trimLeadingLineBreaks(node) { + do { + if (node.nodeType === 3) { + node.nodeValue = node.nodeValue.replace(/^[\r\n]+/, ''); + } + + node = node.firstChild; + } while (node); + } + + function getEditableRoot(node) { + var root = dom.getRoot(), parent, editableRoot; + + // Get all parents until we hit a non editable parent or the root + parent = node; + while (parent !== root && dom.getContentEditable(parent) !== "false") { + if (dom.getContentEditable(parent) === "true") { + editableRoot = parent; + } + + parent = parent.parentNode; + } + + return parent !== root ? editableRoot : root; + } + + // Adds a BR at the end of blocks that only contains an IMG or INPUT since + // these might be floated and then they won't expand the block + function addBrToBlockIfNeeded(block) { + var lastChild; + + // IE will render the blocks correctly other browsers needs a BR + if (!isIE) { + block.normalize(); // Remove empty text nodes that got left behind by the extract + + // Check if the block is empty or contains a floated last child + lastChild = block.lastChild; + if (!lastChild || (/^(left|right)$/gi.test(dom.getStyle(lastChild, 'float', true)))) { + dom.add(block, 'br'); + } + } + } + + rng = selection.getRng(true); + + // Event is blocked by some other handler for example the lists plugin + if (evt.isDefaultPrevented()) { + return; + } + + // Delete any selected contents + if (!rng.collapsed) { + editor.execCommand('Delete'); + return; + } + + // Setup range items and newBlockName + new RangeUtils(dom).normalize(rng); + container = rng.startContainer; + offset = rng.startOffset; + newBlockName = (settings.force_p_newlines ? 'p' : '') || settings.forced_root_block; + newBlockName = newBlockName ? newBlockName.toUpperCase() : ''; + documentMode = dom.doc.documentMode; + shiftKey = evt.shiftKey; + + // Resolve node index + if (container.nodeType == 1 && container.hasChildNodes()) { + isAfterLastNodeInContainer = offset > container.childNodes.length - 1; + + container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container; + if (isAfterLastNodeInContainer && container.nodeType == 3) { + offset = container.nodeValue.length; + } else { + offset = 0; + } + } + + // Get editable root node normaly the body element but sometimes a div or span + editableRoot = getEditableRoot(container); + + // If there is no editable root then enter is done inside a contentEditable false element + if (!editableRoot) { + return; + } + + undoManager.beforeChange(); + + // If editable root isn't block nor the root of the editor + if (!dom.isBlock(editableRoot) && editableRoot != dom.getRoot()) { + if (!newBlockName || shiftKey) { + insertBr(); + } + + return; + } + + // Wrap the current node and it's sibling in a default block if it's needed. + // for example this text|text2 will become this

    text|text2

    + // This won't happen if root blocks are disabled or the shiftKey is pressed + if ((newBlockName && !shiftKey) || (!newBlockName && shiftKey)) { + container = wrapSelfAndSiblingsInDefaultBlock(container, offset); + } + + // Find parent block and setup empty block paddings + parentBlock = dom.getParent(container, dom.isBlock); + containerBlock = parentBlock ? dom.getParent(parentBlock.parentNode, dom.isBlock) : null; + + // Setup block names + parentBlockName = parentBlock ? parentBlock.nodeName.toUpperCase() : ''; // IE < 9 & HTML5 + containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : ''; // IE < 9 & HTML5 + + // Enter inside block contained within a LI then split or insert before/after LI + if (containerBlockName == 'LI' && !evt.ctrlKey) { + parentBlock = containerBlock; + parentBlockName = containerBlockName; + } + + // Handle enter in LI + if (parentBlockName == 'LI') { + if (!newBlockName && shiftKey) { + insertBr(); + return; + } + + // Handle enter inside an empty list item + if (dom.isEmpty(parentBlock)) { + handleEmptyListItem(); + return; + } + } + + // Don't split PRE tags but insert a BR instead easier when writing code samples etc + if (parentBlockName == 'PRE' && settings.br_in_pre !== false) { + if (!shiftKey) { + insertBr(); + return; + } + } else { + // If no root block is configured then insert a BR by default or if the shiftKey is pressed + if ((!newBlockName && !shiftKey && parentBlockName != 'LI') || (newBlockName && shiftKey)) { + insertBr(); + return; + } + } + + // If parent block is root then never insert new blocks + if (newBlockName && parentBlock === editor.getBody()) { + return; + } + + // Default block name if it's not configured + newBlockName = newBlockName || 'P'; + + // Insert new block before/after the parent block depending on caret location + if (isCaretAtStartOrEndOfBlock()) { + // If the caret is at the end of a header we produce a P tag after it similar to Word unless we are in a hgroup + if (/^(H[1-6]|PRE|FIGURE)$/.test(parentBlockName) && containerBlockName != 'HGROUP') { + newBlock = createNewBlock(newBlockName); + } else { + newBlock = createNewBlock(); + } + + // Split the current container block element if enter is pressed inside an empty inner block element + if (settings.end_container_on_empty_block && canSplitBlock(containerBlock) && dom.isEmpty(parentBlock)) { + // Split container block for example a BLOCKQUOTE at the current blockParent location for example a P + newBlock = dom.split(containerBlock, parentBlock); + } else { + dom.insertAfter(newBlock, parentBlock); + } + + moveToCaretPosition(newBlock); + } else if (isCaretAtStartOrEndOfBlock(true)) { + // Insert new block before + newBlock = parentBlock.parentNode.insertBefore(createNewBlock(), parentBlock); + renderBlockOnIE(newBlock); + moveToCaretPosition(parentBlock); + } else { + // Extract after fragment and insert it after the current block + tmpRng = rng.cloneRange(); + tmpRng.setEndAfter(parentBlock); + fragment = tmpRng.extractContents(); + trimLeadingLineBreaks(fragment); + newBlock = fragment.firstChild; + dom.insertAfter(fragment, parentBlock); + trimInlineElementsOnLeftSideOfBlock(newBlock); + addBrToBlockIfNeeded(parentBlock); + moveToCaretPosition(newBlock); + } + + dom.setAttrib(newBlock, 'id', ''); // Remove ID since it needs to be document unique + + // Allow custom handling of new blocks + editor.fire('NewBlock', { newBlock: newBlock }); + + undoManager.add(); + } + + editor.on('keydown', function(evt) { + if (evt.keyCode == 13) { + if (handleEnterKey(evt) !== false) { + evt.preventDefault(); + } + } + }); + }; +}); + +// Included from: js/tinymce/classes/ForceBlocks.js + +/** + * ForceBlocks.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +define("tinymce/ForceBlocks", [], function() { + return function(editor) { + var settings = editor.settings, dom = editor.dom, selection = editor.selection; + var schema = editor.schema, blockElements = schema.getBlockElements(); + + function addRootBlocks() { + var node = selection.getStart(), rootNode = editor.getBody(), rng; + var startContainer, startOffset, endContainer, endOffset, rootBlockNode; + var tempNode, offset = -0xFFFFFF, wrapped, restoreSelection; + var tmpRng, rootNodeName, forcedRootBlock; + + forcedRootBlock = settings.forced_root_block; + + if (!node || node.nodeType !== 1 || !forcedRootBlock) { + return; + } + + // Check if node is wrapped in block + while (node && node != rootNode) { + if (blockElements[node.nodeName]) { + return; + } + + node = node.parentNode; + } + + // Get current selection + rng = selection.getRng(); + if (rng.setStart) { + startContainer = rng.startContainer; + startOffset = rng.startOffset; + endContainer = rng.endContainer; + endOffset = rng.endOffset; + + try { + restoreSelection = editor.getDoc().activeElement === rootNode; + } catch (ex) { + // IE throws unspecified error here sometimes + } + } else { + // Force control range into text range + if (rng.item) { + node = rng.item(0); + rng = editor.getDoc().body.createTextRange(); + rng.moveToElementText(node); + } + + restoreSelection = rng.parentElement().ownerDocument === editor.getDoc(); + tmpRng = rng.duplicate(); + tmpRng.collapse(true); + startOffset = tmpRng.move('character', offset) * -1; + + if (!tmpRng.collapsed) { + tmpRng = rng.duplicate(); + tmpRng.collapse(false); + endOffset = (tmpRng.move('character', offset) * -1) - startOffset; + } + } + + // Wrap non block elements and text nodes + node = rootNode.firstChild; + rootNodeName = rootNode.nodeName.toLowerCase(); + while (node) { + // TODO: Break this up, too complex + if (((node.nodeType === 3 || (node.nodeType == 1 && !blockElements[node.nodeName]))) && + schema.isValidChild(rootNodeName, forcedRootBlock.toLowerCase())) { + // Remove empty text nodes + if (node.nodeType === 3 && node.nodeValue.length === 0) { + tempNode = node; + node = node.nextSibling; + dom.remove(tempNode); + continue; + } + + if (!rootBlockNode) { + rootBlockNode = dom.create(forcedRootBlock, editor.settings.forced_root_block_attrs); + node.parentNode.insertBefore(rootBlockNode, node); + wrapped = true; + } + + tempNode = node; + node = node.nextSibling; + rootBlockNode.appendChild(tempNode); + } else { + rootBlockNode = null; + node = node.nextSibling; + } + } + + if (wrapped && restoreSelection) { + if (rng.setStart) { + rng.setStart(startContainer, startOffset); + rng.setEnd(endContainer, endOffset); + selection.setRng(rng); + } else { + // Only select if the previous selection was inside the document to prevent auto focus in quirks mode + try { + rng = editor.getDoc().body.createTextRange(); + rng.moveToElementText(rootNode); + rng.collapse(true); + rng.moveStart('character', startOffset); + + if (endOffset > 0) { + rng.moveEnd('character', endOffset); + } + + rng.select(); + } catch (ex) { + // Ignore + } + } + + editor.nodeChanged(); + } + } + + // Force root blocks + if (settings.forced_root_block) { + editor.on('NodeChange', addRootBlocks); + } + }; +}); + +// Included from: js/tinymce/classes/EditorCommands.js + +/** + * EditorCommands.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class enables you to add custom editor commands and it contains + * overrides for native browser commands to address various bugs and issues. + * + * @class tinymce.EditorCommands + */ +define("tinymce/EditorCommands", [ + "tinymce/html/Serializer", + "tinymce/Env", + "tinymce/util/Tools" +], function(Serializer, Env, Tools) { + // Added for compression purposes + var each = Tools.each, extend = Tools.extend; + var map = Tools.map, inArray = Tools.inArray, explode = Tools.explode; + var isGecko = Env.gecko, isIE = Env.ie; + var TRUE = true, FALSE = false; + + return function(editor) { + var dom = editor.dom, + selection = editor.selection, + commands = {state: {}, exec: {}, value: {}}, + settings = editor.settings, + formatter = editor.formatter, + bookmark; + + /** + * Executes the specified command. + * + * @method execCommand + * @param {String} command Command to execute. + * @param {Boolean} ui Optional user interface state. + * @param {Object} value Optional value for command. + * @return {Boolean} true/false if the command was found or not. + */ + function execCommand(command, ui, value) { + var func; + + command = command.toLowerCase(); + if ((func = commands.exec[command])) { + func(command, ui, value); + return TRUE; + } + + return FALSE; + } + + /** + * Queries the current state for a command for example if the current selection is "bold". + * + * @method queryCommandState + * @param {String} command Command to check the state of. + * @return {Boolean/Number} true/false if the selected contents is bold or not, -1 if it's not found. + */ + function queryCommandState(command) { + var func; + + command = command.toLowerCase(); + if ((func = commands.state[command])) { + return func(command); + } + + return -1; + } + + /** + * Queries the command value for example the current fontsize. + * + * @method queryCommandValue + * @param {String} command Command to check the value of. + * @return {Object} Command value of false if it's not found. + */ + function queryCommandValue(command) { + var func; + + command = command.toLowerCase(); + if ((func = commands.value[command])) { + return func(command); + } + + return FALSE; + } + + /** + * Adds commands to the command collection. + * + * @method addCommands + * @param {Object} command_list Name/value collection with commands to add, the names can also be comma separated. + * @param {String} type Optional type to add, defaults to exec. Can be value or state as well. + */ + function addCommands(command_list, type) { + type = type || 'exec'; + + each(command_list, function(callback, command) { + each(command.toLowerCase().split(','), function(command) { + commands[type][command] = callback; + }); + }); + } + + // Expose public methods + extend(this, { + execCommand: execCommand, + queryCommandState: queryCommandState, + queryCommandValue: queryCommandValue, + addCommands: addCommands + }); + + // Private methods + + function execNativeCommand(command, ui, value) { + if (ui === undefined) { + ui = FALSE; + } + + if (value === undefined) { + value = null; + } + + return editor.getDoc().execCommand(command, ui, value); + } + + function isFormatMatch(name) { + return formatter.match(name); + } + + function toggleFormat(name, value) { + formatter.toggle(name, value ? {value: value} : undefined); + editor.nodeChanged(); + } + + function storeSelection(type) { + bookmark = selection.getBookmark(type); + } + + function restoreSelection() { + selection.moveToBookmark(bookmark); + } + + // Add execCommand overrides + addCommands({ + // Ignore these, added for compatibility + 'mceResetDesignMode,mceBeginUndoLevel': function() {}, + + // Add undo manager logic + 'mceEndUndoLevel,mceAddUndoLevel': function() { + editor.undoManager.add(); + }, + + 'Cut,Copy,Paste': function(command) { + var doc = editor.getDoc(), failed; + + // Try executing the native command + try { + execNativeCommand(command); + } catch (ex) { + // Command failed + failed = TRUE; + } + + // Present alert message about clipboard access not being available + if (failed || !doc.queryCommandSupported(command)) { + var msg = editor.translate( + "Your browser doesn't support direct access to the clipboard. " + + "Please use the Ctrl+X/C/V keyboard shortcuts instead." + ); + + if (Env.mac) { + msg = msg.replace(/Ctrl\+/g, '\u2318+'); + } + + editor.windowManager.alert(msg); + } + }, + + // Override unlink command + unlink: function() { + if (selection.isCollapsed()) { + var elm = selection.getNode(); + if (elm.tagName == 'A') { + editor.dom.remove(elm, true); + } + + return; + } + + formatter.remove("link"); + }, + + // Override justify commands to use the text formatter engine + 'JustifyLeft,JustifyCenter,JustifyRight,JustifyFull': function(command) { + var align = command.substring(7); + + if (align == 'full') { + align = 'justify'; + } + + // Remove all other alignments first + each('left,center,right,justify'.split(','), function(name) { + if (align != name) { + formatter.remove('align' + name); + } + }); + + toggleFormat('align' + align); + execCommand('mceRepaint'); + }, + + // Override list commands to fix WebKit bug + 'InsertUnorderedList,InsertOrderedList': function(command) { + var listElm, listParent; + + execNativeCommand(command); + + // WebKit produces lists within block elements so we need to split them + // we will replace the native list creation logic to custom logic later on + // TODO: Remove this when the list creation logic is removed + listElm = dom.getParent(selection.getNode(), 'ol,ul'); + if (listElm) { + listParent = listElm.parentNode; + + // If list is within a text block then split that block + if (/^(H[1-6]|P|ADDRESS|PRE)$/.test(listParent.nodeName)) { + storeSelection(); + dom.split(listParent, listElm); + restoreSelection(); + } + } + }, + + // Override commands to use the text formatter engine + 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': function(command) { + toggleFormat(command); + }, + + // Override commands to use the text formatter engine + 'ForeColor,HiliteColor,FontName': function(command, ui, value) { + toggleFormat(command, value); + }, + + FontSize: function(command, ui, value) { + var fontClasses, fontSizes; + + // Convert font size 1-7 to styles + if (value >= 1 && value <= 7) { + fontSizes = explode(settings.font_size_style_values); + fontClasses = explode(settings.font_size_classes); + + if (fontClasses) { + value = fontClasses[value - 1] || value; + } else { + value = fontSizes[value - 1] || value; + } + } + + toggleFormat(command, value); + }, + + RemoveFormat: function(command) { + formatter.remove(command); + }, + + mceBlockQuote: function() { + toggleFormat('blockquote'); + }, + + FormatBlock: function(command, ui, value) { + return toggleFormat(value || 'p'); + }, + + mceCleanup: function() { + var bookmark = selection.getBookmark(); + + editor.setContent(editor.getContent({cleanup: TRUE}), {cleanup: TRUE}); + + selection.moveToBookmark(bookmark); + }, + + mceRemoveNode: function(command, ui, value) { + var node = value || selection.getNode(); + + // Make sure that the body node isn't removed + if (node != editor.getBody()) { + storeSelection(); + editor.dom.remove(node, TRUE); + restoreSelection(); + } + }, + + mceSelectNodeDepth: function(command, ui, value) { + var counter = 0; + + dom.getParent(selection.getNode(), function(node) { + if (node.nodeType == 1 && counter++ == value) { + selection.select(node); + return FALSE; + } + }, editor.getBody()); + }, + + mceSelectNode: function(command, ui, value) { + selection.select(value); + }, + + mceInsertContent: function(command, ui, value) { + var parser, serializer, parentNode, rootNode, fragment, args; + var marker, rng, node, node2, bookmarkHtml; + + function trimOrPaddLeftRight(html) { + var rng, container, offset; + + rng = selection.getRng(true); + container = rng.startContainer; + offset = rng.startOffset; + + function hasSiblingText(siblingName) { + return container[siblingName] && container[siblingName].nodeType == 3; + } + + if (container.nodeType == 3) { + if (offset > 0) { + html = html.replace(/^ /, ' '); + } else if (!hasSiblingText('previousSibling')) { + html = html.replace(/^ /, ' '); + } + + if (offset < container.length) { + html = html.replace(/ (
    |)$/, ' '); + } else if (!hasSiblingText('nextSibling')) { + html = html.replace(/( | )(
    |)$/, ' '); + } + } + + return html; + } + + // Check for whitespace before/after value + if (/^ | $/.test(value)) { + value = trimOrPaddLeftRight(value); + } + + // Setup parser and serializer + parser = editor.parser; + serializer = new Serializer({}, editor.schema); + bookmarkHtml = 'ÈB;'; + + // Run beforeSetContent handlers on the HTML to be inserted + args = {content: value, format: 'html', selection: true}; + editor.fire('BeforeSetContent', args); + value = args.content; + + // Add caret at end of contents if it's missing + if (value.indexOf('{$caret}') == -1) { + value += '{$caret}'; + } + + // Replace the caret marker with a span bookmark element + value = value.replace(/\{\$caret\}/, bookmarkHtml); + + // If selection is at |

    then move it into

    |

    + rng = selection.getRng(); + var caretElement = rng.startContainer || (rng.parentElement ? rng.parentElement() : null); + var body = editor.getBody(); + if (caretElement === body && selection.isCollapsed()) { + if (dom.isBlock(body.firstChild) && dom.isEmpty(body.firstChild)) { + rng = dom.createRng(); + rng.setStart(body.firstChild, 0); + rng.setEnd(body.firstChild, 0); + selection.setRng(rng); + } + } + + // Insert node maker where we will insert the new HTML and get it's parent + if (!selection.isCollapsed()) { + editor.getDoc().execCommand('Delete', false, null); + } + + parentNode = selection.getNode(); + + // Parse the fragment within the context of the parent node + var parserArgs = {context: parentNode.nodeName.toLowerCase()}; + fragment = parser.parse(value, parserArgs); + + // Move the caret to a more suitable location + node = fragment.lastChild; + if (node.attr('id') == 'mce_marker') { + marker = node; + + for (node = node.prev; node; node = node.walk(true)) { + if (node.type == 3 || !dom.isBlock(node.name)) { + node.parent.insert(marker, node, node.name === 'br'); + break; + } + } + } + + // If parser says valid we can insert the contents into that parent + if (!parserArgs.invalid) { + value = serializer.serialize(fragment); + + // Check if parent is empty or only has one BR element then set the innerHTML of that parent + node = parentNode.firstChild; + node2 = parentNode.lastChild; + if (!node || (node === node2 && node.nodeName === 'BR')) { + dom.setHTML(parentNode, value); + } else { + selection.setContent(value); + } + } else { + // If the fragment was invalid within that context then we need + // to parse and process the parent it's inserted into + + // Insert bookmark node and get the parent + selection.setContent(bookmarkHtml); + parentNode = selection.getNode(); + rootNode = editor.getBody(); + + // Opera will return the document node when selection is in root + if (parentNode.nodeType == 9) { + parentNode = node = rootNode; + } else { + node = parentNode; + } + + // Find the ancestor just before the root element + while (node !== rootNode) { + parentNode = node; + node = node.parentNode; + } + + // Get the outer/inner HTML depending on if we are in the root and parser and serialize that + value = parentNode == rootNode ? rootNode.innerHTML : dom.getOuterHTML(parentNode); + value = serializer.serialize( + parser.parse( + // Need to replace by using a function since $ in the contents would otherwise be a problem + value.replace(//i, function() { + return serializer.serialize(fragment); + }) + ) + ); + + // Set the inner/outer HTML depending on if we are in the root or not + if (parentNode == rootNode) { + dom.setHTML(rootNode, value); + } else { + dom.setOuterHTML(parentNode, value); + } + } + + marker = dom.get('mce_marker'); + selection.scrollIntoView(marker); + + // Move selection before marker and remove it + rng = dom.createRng(); + + // If previous sibling is a text node set the selection to the end of that node + node = marker.previousSibling; + if (node && node.nodeType == 3) { + rng.setStart(node, node.nodeValue.length); + + // TODO: Why can't we normalize on IE + if (!isIE) { + node2 = marker.nextSibling; + if (node2 && node2.nodeType == 3) { + node.appendData(node2.data); + node2.parentNode.removeChild(node2); + } + } + } else { + // If the previous sibling isn't a text node or doesn't exist set the selection before the marker node + rng.setStartBefore(marker); + rng.setEndBefore(marker); + } + + // Remove the marker node and set the new range + dom.remove(marker); + selection.setRng(rng); + + // Dispatch after event and add any visual elements needed + editor.fire('SetContent', args); + editor.addVisual(); + }, + + mceInsertRawHTML: function(command, ui, value) { + selection.setContent('tiny_mce_marker'); + editor.setContent( + editor.getContent().replace(/tiny_mce_marker/g, function() { + return value; + }) + ); + }, + + mceToggleFormat: function(command, ui, value) { + toggleFormat(value); + }, + + mceSetContent: function(command, ui, value) { + editor.setContent(value); + }, + + 'Indent,Outdent': function(command) { + var intentValue, indentUnit, value; + + // Setup indent level + intentValue = settings.indentation; + indentUnit = /[a-z%]+$/i.exec(intentValue); + intentValue = parseInt(intentValue, 10); + + if (!queryCommandState('InsertUnorderedList') && !queryCommandState('InsertOrderedList')) { + // If forced_root_blocks is set to false we don't have a block to indent so lets create a div + if (!settings.forced_root_block && !dom.getParent(selection.getNode(), dom.isBlock)) { + formatter.apply('div'); + } + + each(selection.getSelectedBlocks(), function(element) { + if (element.nodeName != "LI") { + var indentStyleName = editor.getParam('indent_use_margin', false) ? 'margin' : 'padding'; + + indentStyleName += dom.getStyle(element, 'direction', true) == 'rtl' ? 'Right' : 'Left'; + + if (command == 'outdent') { + value = Math.max(0, parseInt(element.style[indentStyleName] || 0, 10) - intentValue); + dom.setStyle(element, indentStyleName, value ? value + indentUnit : ''); + } else { + value = (parseInt(element.style[indentStyleName] || 0, 10) + intentValue) + indentUnit; + dom.setStyle(element, indentStyleName, value); + } + } + }); + } else { + execNativeCommand(command); + } + }, + + mceRepaint: function() { + if (isGecko) { + try { + storeSelection(TRUE); + + if (selection.getSel()) { + selection.getSel().selectAllChildren(editor.getBody()); + } + + selection.collapse(TRUE); + restoreSelection(); + } catch (ex) { + // Ignore + } + } + }, + + InsertHorizontalRule: function() { + editor.execCommand('mceInsertContent', false, '
    '); + }, + + mceToggleVisualAid: function() { + editor.hasVisual = !editor.hasVisual; + editor.addVisual(); + }, + + mceReplaceContent: function(command, ui, value) { + editor.execCommand('mceInsertContent', false, value.replace(/\{\$selection\}/g, selection.getContent({format: 'text'}))); + }, + + mceInsertLink: function(command, ui, value) { + var anchor; + + if (typeof(value) == 'string') { + value = {href: value}; + } + + anchor = dom.getParent(selection.getNode(), 'a'); + + // Spaces are never valid in URLs and it's a very common mistake for people to make so we fix it here. + value.href = value.href.replace(' ', '%20'); + + // Remove existing links if there could be child links or that the href isn't specified + if (!anchor || !value.href) { + formatter.remove('link'); + } + + // Apply new link to selection + if (value.href) { + formatter.apply('link', value, anchor); + } + }, + + selectAll: function() { + var root = dom.getRoot(), rng; + + if (selection.getRng().setStart) { + rng = dom.createRng(); + rng.setStart(root, 0); + rng.setEnd(root, root.childNodes.length); + selection.setRng(rng); + } else { + // IE will render it's own root level block elements and sometimes + // even put font elements in them when the user starts typing. So we need to + // move the selection to a more suitable element from this: + // |

    to this:

    |

    + rng = selection.getRng(); + if (!rng.item) { + rng.moveToElementText(root); + rng.select(); + } + } + }, + + "delete": function() { + execNativeCommand("Delete"); + + // Check if body is empty after the delete call if so then set the contents + // to an empty string and move the caret to any block produced by that operation + // this fixes the issue with root blocks not being properly produced after a delete call on IE + var body = editor.getBody(); + + if (dom.isEmpty(body)) { + editor.setContent(''); + + if (body.firstChild && dom.isBlock(body.firstChild)) { + editor.selection.setCursorLocation(body.firstChild, 0); + } else { + editor.selection.setCursorLocation(body, 0); + } + } + }, + + mceNewDocument: function() { + editor.setContent(''); + } + }); + + // Add queryCommandState overrides + addCommands({ + // Override justify commands + 'JustifyLeft,JustifyCenter,JustifyRight,JustifyFull': function(command) { + var name = 'align' + command.substring(7); + var nodes = selection.isCollapsed() ? [dom.getParent(selection.getNode(), dom.isBlock)] : selection.getSelectedBlocks(); + var matches = map(nodes, function(node) { + return !!formatter.matchNode(node, name); + }); + return inArray(matches, TRUE) !== -1; + }, + + 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': function(command) { + return isFormatMatch(command); + }, + + mceBlockQuote: function() { + return isFormatMatch('blockquote'); + }, + + Outdent: function() { + var node; + + if (settings.inline_styles) { + if ((node = dom.getParent(selection.getStart(), dom.isBlock)) && parseInt(node.style.paddingLeft, 10) > 0) { + return TRUE; + } + + if ((node = dom.getParent(selection.getEnd(), dom.isBlock)) && parseInt(node.style.paddingLeft, 10) > 0) { + return TRUE; + } + } + + return ( + queryCommandState('InsertUnorderedList') || + queryCommandState('InsertOrderedList') || + (!settings.inline_styles && !!dom.getParent(selection.getNode(), 'BLOCKQUOTE')) + ); + }, + + 'InsertUnorderedList,InsertOrderedList': function(command) { + var list = dom.getParent(selection.getNode(), 'ul,ol'); + + return list && + ( + command === 'insertunorderedlist' && list.tagName === 'UL' || + command === 'insertorderedlist' && list.tagName === 'OL' + ); + } + }, 'state'); + + // Add queryCommandValue overrides + addCommands({ + 'FontSize,FontName': function(command) { + var value = 0, parent; + + if ((parent = dom.getParent(selection.getNode(), 'span'))) { + if (command == 'fontsize') { + value = parent.style.fontSize; + } else { + value = parent.style.fontFamily.replace(/, /g, ',').replace(/[\'\"]/g, '').toLowerCase(); + } + } + + return value; + } + }, 'value'); + + // Add undo manager logic + addCommands({ + Undo: function() { + editor.undoManager.undo(); + }, + + Redo: function() { + editor.undoManager.redo(); + } + }); + }; +}); + +// Included from: js/tinymce/classes/util/URI.js + +/** + * URI.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class handles parsing, modification and serialization of URI/URL strings. + * @class tinymce.util.URI + */ +define("tinymce/util/URI", [ + "tinymce/util/Tools" +], function(Tools) { + var each = Tools.each, trim = Tools.trim; + + /** + * Constructs a new URI instance. + * + * @constructor + * @method URI + * @param {String} url URI string to parse. + * @param {Object} settings Optional settings object. + */ + function URI(url, settings) { + var self = this, baseUri, base_url; + + // Trim whitespace + url = trim(url); + + // Default settings + settings = self.settings = settings || {}; + + // Strange app protocol that isn't http/https or local anchor + // For example: mailto,skype,tel etc. + if (/^([\w\-]+):([^\/]{2})/i.test(url) || /^\s*#/.test(url)) { + self.source = url; + return; + } + + var isProtocolRelative = url.indexOf('//') === 0; + + // Absolute path with no host, fake host and protocol + if (url.indexOf('/') === 0 && !isProtocolRelative) { + url = (settings.base_uri ? settings.base_uri.protocol || 'http' : 'http') + '://mce_host' + url; + } + + // Relative path http:// or protocol relative //path + if (!/^[\w\-]*:?\/\//.test(url)) { + base_url = settings.base_uri ? settings.base_uri.path : new URI(location.href).directory; + if (settings.base_uri.protocol === "") { + url = '//mce_host' + self.toAbsPath(base_url, url); + } else { + url = ((settings.base_uri && settings.base_uri.protocol) || 'http') + '://mce_host' + self.toAbsPath(base_url, url); + } + } + + // Parse URL (Credits goes to Steave, http://blog.stevenlevithan.com/archives/parseuri) + url = url.replace(/@@/g, '(mce_at)'); // Zope 3 workaround, they use @@something + + /*jshint maxlen: 255 */ + /*eslint max-len: 0 */ + url = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(url); + + each(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"], function(v, i) { + var part = url[i]; + + // Zope 3 workaround, they use @@something + if (part) { + part = part.replace(/\(mce_at\)/g, '@@'); + } + + self[v] = part; + }); + + baseUri = settings.base_uri; + if (baseUri) { + if (!self.protocol) { + self.protocol = baseUri.protocol; + } + + if (!self.userInfo) { + self.userInfo = baseUri.userInfo; + } + + if (!self.port && self.host === 'mce_host') { + self.port = baseUri.port; + } + + if (!self.host || self.host === 'mce_host') { + self.host = baseUri.host; + } + + self.source = ''; + } + + if (isProtocolRelative) { + self.protocol = ''; + } + + //t.path = t.path || '/'; + } + + URI.prototype = { + /** + * Sets the internal path part of the URI. + * + * @method setPath + * @param {string} path Path string to set. + */ + setPath: function(path) { + var self = this; + + path = /^(.*?)\/?(\w+)?$/.exec(path); + + // Update path parts + self.path = path[0]; + self.directory = path[1]; + self.file = path[2]; + + // Rebuild source + self.source = ''; + self.getURI(); + }, + + /** + * Converts the specified URI into a relative URI based on the current URI instance location. + * + * @method toRelative + * @param {String} uri URI to convert into a relative path/URI. + * @return {String} Relative URI from the point specified in the current URI instance. + * @example + * // Converts an absolute URL to an relative URL url will be somedir/somefile.htm + * var url = new tinymce.util.URI('http://www.site.com/dir/').toRelative('http://www.site.com/dir/somedir/somefile.htm'); + */ + toRelative: function(uri) { + var self = this, output; + + if (uri === "./") { + return uri; + } + + uri = new URI(uri, {base_uri: self}); + + // Not on same domain/port or protocol + if ((uri.host != 'mce_host' && self.host != uri.host && uri.host) || self.port != uri.port || + (self.protocol != uri.protocol && uri.protocol !== "")) { + return uri.getURI(); + } + + var tu = self.getURI(), uu = uri.getURI(); + + // Allow usage of the base_uri when relative_urls = true + if (tu == uu || (tu.charAt(tu.length - 1) == "/" && tu.substr(0, tu.length - 1) == uu)) { + return tu; + } + + output = self.toRelPath(self.path, uri.path); + + // Add query + if (uri.query) { + output += '?' + uri.query; + } + + // Add anchor + if (uri.anchor) { + output += '#' + uri.anchor; + } + + return output; + }, + + /** + * Converts the specified URI into a absolute URI based on the current URI instance location. + * + * @method toAbsolute + * @param {String} uri URI to convert into a relative path/URI. + * @param {Boolean} noHost No host and protocol prefix. + * @return {String} Absolute URI from the point specified in the current URI instance. + * @example + * // Converts an relative URL to an absolute URL url will be http://www.site.com/dir/somedir/somefile.htm + * var url = new tinymce.util.URI('http://www.site.com/dir/').toAbsolute('somedir/somefile.htm'); + */ + toAbsolute: function(uri, noHost) { + uri = new URI(uri, {base_uri: this}); + + return uri.getURI(this.host == uri.host && this.protocol == uri.protocol ? noHost : 0); + }, + + /** + * Converts a absolute path into a relative path. + * + * @method toRelPath + * @param {String} base Base point to convert the path from. + * @param {String} path Absolute path to convert into a relative path. + */ + toRelPath: function(base, path) { + var items, breakPoint = 0, out = '', i, l; + + // Split the paths + base = base.substring(0, base.lastIndexOf('/')); + base = base.split('/'); + items = path.split('/'); + + if (base.length >= items.length) { + for (i = 0, l = base.length; i < l; i++) { + if (i >= items.length || base[i] != items[i]) { + breakPoint = i + 1; + break; + } + } + } + + if (base.length < items.length) { + for (i = 0, l = items.length; i < l; i++) { + if (i >= base.length || base[i] != items[i]) { + breakPoint = i + 1; + break; + } + } + } + + if (breakPoint === 1) { + return path; + } + + for (i = 0, l = base.length - (breakPoint - 1); i < l; i++) { + out += "../"; + } + + for (i = breakPoint - 1, l = items.length; i < l; i++) { + if (i != breakPoint - 1) { + out += "/" + items[i]; + } else { + out += items[i]; + } + } + + return out; + }, + + /** + * Converts a relative path into a absolute path. + * + * @method toAbsPath + * @param {String} base Base point to convert the path from. + * @param {String} path Relative path to convert into an absolute path. + */ + toAbsPath: function(base, path) { + var i, nb = 0, o = [], tr, outPath; + + // Split paths + tr = /\/$/.test(path) ? '/' : ''; + base = base.split('/'); + path = path.split('/'); + + // Remove empty chunks + each(base, function(k) { + if (k) { + o.push(k); + } + }); + + base = o; + + // Merge relURLParts chunks + for (i = path.length - 1, o = []; i >= 0; i--) { + // Ignore empty or . + if (path[i].length === 0 || path[i] === ".") { + continue; + } + + // Is parent + if (path[i] === '..') { + nb++; + continue; + } + + // Move up + if (nb > 0) { + nb--; + continue; + } + + o.push(path[i]); + } + + i = base.length - nb; + + // If /a/b/c or / + if (i <= 0) { + outPath = o.reverse().join('/'); + } else { + outPath = base.slice(0, i).join('/') + '/' + o.reverse().join('/'); + } + + // Add front / if it's needed + if (outPath.indexOf('/') !== 0) { + outPath = '/' + outPath; + } + + // Add traling / if it's needed + if (tr && outPath.lastIndexOf('/') !== outPath.length - 1) { + outPath += tr; + } + + return outPath; + }, + + /** + * Returns the full URI of the internal structure. + * + * @method getURI + * @param {Boolean} noProtoHost Optional no host and protocol part. Defaults to false. + */ + getURI: function(noProtoHost) { + var s, self = this; + + // Rebuild source + if (!self.source || noProtoHost) { + s = ''; + + if (!noProtoHost) { + if (self.protocol) { + s += self.protocol + '://'; + } else { + s += '//'; + } + + if (self.userInfo) { + s += self.userInfo + '@'; + } + + if (self.host) { + s += self.host; + } + + if (self.port) { + s += ':' + self.port; + } + } + + if (self.path) { + s += self.path; + } + + if (self.query) { + s += '?' + self.query; + } + + if (self.anchor) { + s += '#' + self.anchor; + } + + self.source = s; + } + + return self.source; + } + }; + + return URI; +}); + +// Included from: js/tinymce/classes/util/Class.js + +/** + * Class.js + * + * Copyright 2003-2012, Moxiecode Systems AB, All rights reserved. + */ + +/** + * This utilitiy class is used for easier inheritage. + * + * Features: + * * Exposed super functions: this._super(); + * * Mixins + * * Dummy functions + * * Property functions: var value = object.value(); and object.value(newValue); + * * Static functions + * * Defaults settings + */ +define("tinymce/util/Class", [ + "tinymce/util/Tools" +], function(Tools) { + var each = Tools.each, extend = Tools.extend; + + var extendClass, initializing; + + function Class() { + } + + // Provides classical inheritance, based on code made by John Resig + Class.extend = extendClass = function(prop) { + var self = this, _super = self.prototype, prototype, name, member; + + // The dummy class constructor + function Class() { + var i, mixins, mixin, self = this; + + // All construction is actually done in the init method + if (!initializing) { + // Run class constuctor + if (self.init) { + self.init.apply(self, arguments); + } + + // Run mixin constructors + mixins = self.Mixins; + if (mixins) { + i = mixins.length; + while (i--) { + mixin = mixins[i]; + if (mixin.init) { + mixin.init.apply(self, arguments); + } + } + } + } + } + + // Dummy function, needs to be extended in order to provide functionality + function dummy() { + return this; + } + + // Creates a overloaded method for the class + // this enables you to use this._super(); to call the super function + function createMethod(name, fn) { + return function(){ + var self = this, tmp = self._super, ret; + + self._super = _super[name]; + ret = fn.apply(self, arguments); + self._super = tmp; + + return ret; + }; + } + + // Instantiate a base class (but only create the instance, + // don't run the init constructor) + initializing = true; + prototype = new self(); + initializing = false; + + // Add mixins + if (prop.Mixins) { + each(prop.Mixins, function(mixin) { + mixin = mixin; + + for (var name in mixin) { + if (name !== "init") { + prop[name] = mixin[name]; + } + } + }); + + if (_super.Mixins) { + prop.Mixins = _super.Mixins.concat(prop.Mixins); + } + } + + // Generate dummy methods + if (prop.Methods) { + each(prop.Methods.split(','), function(name) { + prop[name] = dummy; + }); + } + + // Generate property methods + if (prop.Properties) { + each(prop.Properties.split(','), function(name) { + var fieldName = '_' + name; + + prop[name] = function(value) { + var self = this, undef; + + // Set value + if (value !== undef) { + self[fieldName] = value; + + return self; + } + + // Get value + return self[fieldName]; + }; + }); + } + + // Static functions + if (prop.Statics) { + each(prop.Statics, function(func, name) { + Class[name] = func; + }); + } + + // Default settings + if (prop.Defaults && _super.Defaults) { + prop.Defaults = extend({}, _super.Defaults, prop.Defaults); + } + + // Copy the properties over onto the new prototype + for (name in prop) { + member = prop[name]; + + if (typeof member == "function" && _super[name]) { + prototype[name] = createMethod(name, member); + } else { + prototype[name] = member; + } + } + + // Populate our constructed prototype object + Class.prototype = prototype; + + // Enforce the constructor to be what we expect + Class.constructor = Class; + + // And make this class extendible + Class.extend = extendClass; + + return Class; + }; + + return Class; +}); + +// Included from: js/tinymce/classes/ui/Selector.js + +/** + * Selector.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*eslint no-nested-ternary:0 */ + +/** + * Selector engine, enables you to select controls by using CSS like expressions. + * We currently only support basic CSS expressions to reduce the size of the core + * and the ones we support should be enough for most cases. + * + * @example + * Supported expressions: + * element + * element#name + * element.class + * element[attr] + * element[attr*=value] + * element[attr~=value] + * element[attr!=value] + * element[attr^=value] + * element[attr$=value] + * element: + * element:not() + * element:first + * element:last + * element:odd + * element:even + * element element + * element > element + * + * @class tinymce.ui.Selector + */ +define("tinymce/ui/Selector", [ + "tinymce/util/Class" +], function(Class) { + "use strict"; + + /** + * Produces an array with a unique set of objects. It will not compare the values + * but the references of the objects. + * + * @private + * @method unqiue + * @param {Array} array Array to make into an array with unique items. + * @return {Array} Array with unique items. + */ + function unique(array) { + var uniqueItems = [], i = array.length, item; + + while (i--) { + item = array[i]; + + if (!item.__checked) { + uniqueItems.push(item); + item.__checked = 1; + } + } + + i = uniqueItems.length; + while (i--) { + delete uniqueItems[i].__checked; + } + + return uniqueItems; + } + + var expression = /^([\w\\*]+)?(?:#([\w\\]+))?(?:\.([\w\\\.]+))?(?:\[\@?([\w\\]+)([\^\$\*!~]?=)([\w\\]+)\])?(?:\:(.+))?/i; + + /*jshint maxlen:255 */ + /*eslint max-len:0 */ + var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, + whiteSpace = /^\s*|\s*$/g, + Collection; + + var Selector = Class.extend({ + /** + * Constructs a new Selector instance. + * + * @constructor + * @method init + * @param {String} selector CSS like selector expression. + */ + init: function(selector) { + var match = this.match; + + function compileNameFilter(name) { + if (name) { + name = name.toLowerCase(); + + return function(item) { + return name === '*' || item.type === name; + }; + } + } + + function compileIdFilter(id) { + if (id) { + return function(item) { + return item._name === id; + }; + } + } + + function compileClassesFilter(classes) { + if (classes) { + classes = classes.split('.'); + + return function(item) { + var i = classes.length; + + while (i--) { + if (!item.hasClass(classes[i])) { + return false; + } + } + + return true; + }; + } + } + + function compileAttrFilter(name, cmp, check) { + if (name) { + return function(item) { + var value = item[name] ? item[name]() : ''; + + 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; + }; + } + } + + function compilePsuedoFilter(name) { + var notSelectors; + + if (name) { + name = /(?:not\((.+)\))|(.+)/i.exec(name); + + if (!name[1]) { + name = name[2]; + + return function(item, index, length) { + 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; + }; + } else { + // Compile not expression + notSelectors = parseChunks(name[1], []); + + return function(item) { + return !match(item, notSelectors); + }; + } + } + } + + function compile(selector, filters, direct) { + var parts; + + function add(filter) { + if (filter) { + filters.push(filter); + } + } + + // Parse expression into parts + parts = expression.exec(selector.replace(whiteSpace, '')); + + add(compileNameFilter(parts[1])); + add(compileIdFilter(parts[2])); + add(compileClassesFilter(parts[3])); + add(compileAttrFilter(parts[4], parts[5], parts[6])); + add(compilePsuedoFilter(parts[7])); + + // Mark the filter with psuedo for performance + filters.psuedo = !!parts[7]; + filters.direct = direct; + + return filters; + } + + // Parser logic based on Sizzle by John Resig + function parseChunks(selector, selectors) { + var parts = [], extra, matches, i; + + do { + chunker.exec(""); + matches = chunker.exec(selector); + + if (matches) { + selector = matches[3]; + parts.push(matches[1]); + + if (matches[2]) { + extra = matches[3]; + break; + } + } + } while (matches); + + if (extra) { + parseChunks(extra, selectors); + } + + selector = []; + for (i = 0; i < parts.length; i++) { + if (parts[i] != '>') { + selector.push(compile(parts[i], [], parts[i - 1] === '>')); + } + } + + selectors.push(selector); + + return selectors; + } + + this._selectors = parseChunks(selector, []); + }, + + /** + * Returns true/false if the selector matches the specified control. + * + * @method match + * @param {tinymce.ui.Control} control Control to match agains the selector. + * @param {Array} selectors Optional array of selectors, mostly used internally. + * @return {Boolean} true/false state if the control matches or not. + */ + match: function(control, selectors) { + var i, l, si, sl, selector, fi, fl, filters, index, length, siblings, count, item; + + selectors = selectors || this._selectors; + for (i = 0, l = selectors.length; i < l; i++) { + selector = selectors[i]; + sl = selector.length; + item = control; + count = 0; + + for (si = sl - 1; si >= 0; si--) { + filters = selector[si]; + + while (item) { + // Find the index and length since a psuedo filter like :first needs it + if (filters.psuedo) { + siblings = item.parent().items(); + index = length = siblings.length; + while (index--) { + if (siblings[index] === item) { + break; + } + } + } + + for (fi = 0, fl = filters.length; fi < fl; fi++) { + if (!filters[fi](item, index, length)) { + fi = fl + 1; + break; + } + } + + if (fi === fl) { + count++; + break; + } else { + // If it didn't match the right most expression then + // break since it's no point looking at the parents + if (si === sl - 1) { + break; + } + } + + item = item.parent(); + } + } + + // If we found all selectors then return true otherwise continue looking + if (count === sl) { + return true; + } + } + + return false; + }, + + /** + * Returns a tinymce.ui.Collection with matches of the specified selector inside the specified container. + * + * @method find + * @param {tinymce.ui.Control} container Container to look for items in. + * @return {tinymce.ui.Collection} Collection with matched elements. + */ + find: function(container) { + var matches = [], i, l, selectors = this._selectors; + + function collect(items, selector, index) { + var i, l, fi, fl, item, filters = selector[index]; + + for (i = 0, l = items.length; i < l; i++) { + item = items[i]; + + // Run each filter agains the item + for (fi = 0, fl = filters.length; fi < fl; fi++) { + if (!filters[fi](item, i, l)) { + fi = fl + 1; + break; + } + } + + // All filters matched the item + if (fi === fl) { + // Matched item is on the last expression like: panel toolbar [button] + if (index == selector.length - 1) { + matches.push(item); + } else { + // Collect next expression type + if (item.items) { + collect(item.items(), selector, index + 1); + } + } + } else if (filters.direct) { + return; + } + + // Collect child items + if (item.items) { + collect(item.items(), selector, index); + } + } + } + + if (container.items) { + for (i = 0, l = selectors.length; i < l; i++) { + collect(container.items(), selectors[i], 0); + } + + // Unique the matches if needed + if (l > 1) { + matches = unique(matches); + } + } + + // Fix for circular reference + if (!Collection) { + // TODO: Fix me! + Collection = Selector.Collection; + } + + return new Collection(matches); + } + }); + + return Selector; +}); + +// Included from: js/tinymce/classes/ui/Collection.js + +/** + * Collection.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Control collection, this class contains control instances and it enables you to + * perform actions on all the contained items. This is very similar to how jQuery works. + * + * @example + * someCollection.show().disabled(true); + * + * @class tinymce.ui.Collection + */ +define("tinymce/ui/Collection", [ + "tinymce/util/Tools", + "tinymce/ui/Selector", + "tinymce/util/Class" +], function(Tools, Selector, Class) { + "use strict"; + + var Collection, proto, push = Array.prototype.push, slice = Array.prototype.slice; + + proto = { + /** + * Current number of contained control instances. + * + * @field length + * @type Number + */ + length: 0, + + /** + * Constructor for the collection. + * + * @constructor + * @method init + * @param {Array} items Optional array with items to add. + */ + init: function(items) { + if (items) { + this.add(items); + } + }, + + /** + * Adds new items to the control collection. + * + * @method add + * @param {Array} items Array if items to add to collection. + * @return {tinymce.ui.Collection} Current collection instance. + */ + add: function(items) { + var self = this; + + // Force single item into array + if (!Tools.isArray(items)) { + if (items instanceof Collection) { + self.add(items.toArray()); + } else { + push.call(self, items); + } + } else { + push.apply(self, items); + } + + return self; + }, + + /** + * Sets the contents of the collection. This will remove any existing items + * and replace them with the ones specified in the input array. + * + * @method set + * @param {Array} items Array with items to set into the Collection. + * @return {tinymce.ui.Collection} Collection instance. + */ + set: function(items) { + var self = this, len = self.length, i; + + self.length = 0; + self.add(items); + + // Remove old entries + for (i = self.length; i < len; i++) { + delete self[i]; + } + + return self; + }, + + /** + * Filters the collection item based on the specified selector expression or selector function. + * + * @method filter + * @param {String} selector Selector expression to filter items by. + * @return {tinymce.ui.Collection} Collection containing the filtered items. + */ + filter: function(selector) { + var self = this, i, l, matches = [], item, match; + + // Compile string into selector expression + if (typeof(selector) === "string") { + selector = new Selector(selector); + + match = function(item) { + return selector.match(item); + }; + } else { + // Use selector as matching function + match = selector; + } + + for (i = 0, l = self.length; i < l; i++) { + item = self[i]; + + if (match(item)) { + matches.push(item); + } + } + + return new Collection(matches); + }, + + /** + * Slices the items within the collection. + * + * @method slice + * @param {Number} index Index to slice at. + * @param {Number} len Optional length to slice. + * @return {tinymce.ui.Collection} Current collection. + */ + slice: function() { + return new Collection(slice.apply(this, arguments)); + }, + + /** + * Makes the current collection equal to the specified index. + * + * @method eq + * @param {Number} index Index of the item to set the collection to. + * @return {tinymce.ui.Collection} Current collection. + */ + eq: function(index) { + return index === -1 ? this.slice(index) : this.slice(index, +index + 1); + }, + + /** + * Executes the specified callback on each item in collection. + * + * @method each + * @param {function} callback Callback to execute for each item in collection. + * @return {tinymce.ui.Collection} Current collection instance. + */ + each: function(callback) { + Tools.each(this, callback); + + return this; + }, + + /** + * Returns an JavaScript array object of the contents inside the collection. + * + * @method toArray + * @return {Array} Array with all items from collection. + */ + toArray: function() { + return Tools.toArray(this); + }, + + /** + * Finds the index of the specified control or return -1 if it isn't in the collection. + * + * @method indexOf + * @param {Control} ctrl Control instance to look for. + * @return {Number} Index of the specified control or -1. + */ + indexOf: function(ctrl) { + var self = this, i = self.length; + + while (i--) { + if (self[i] === ctrl) { + break; + } + } + + return i; + }, + + /** + * Returns a new collection of the contents in reverse order. + * + * @method reverse + * @return {tinymce.ui.Collection} Collection instance with reversed items. + */ + reverse: function() { + return new Collection(Tools.toArray(this).reverse()); + }, + + /** + * Returns true/false if the class exists or not. + * + * @method hasClass + * @param {String} cls Class to check for. + * @return {Boolean} true/false state if the class exists or not. + */ + hasClass: function(cls) { + return this[0] ? this[0].hasClass(cls) : false; + }, + + /** + * Sets/gets the specific property on the items in the collection. The same as executing control.(); + * + * @method prop + * @param {String} name Property name to get/set. + * @param {Object} value Optional object value to set. + * @return {tinymce.ui.Collection} Current collection instance or value of the first item on a get operation. + */ + prop: function(name, value) { + var self = this, undef, item; + + if (value !== undef) { + self.each(function(item) { + if (item[name]) { + item[name](value); + } + }); + + return self; + } + + item = self[0]; + + if (item && item[name]) { + return item[name](); + } + }, + + /** + * Executes the specific function name with optional arguments an all items in collection if it exists. + * + * @example collection.exec("myMethod", arg1, arg2, arg3); + * @method exec + * @param {String} name Name of the function to execute. + * @param {Object} ... Multiple arguments to pass to each function. + * @return {tinymce.ui.Collection} Current collection. + */ + exec: function(name) { + var self = this, args = Tools.toArray(arguments).slice(1); + + self.each(function(item) { + if (item[name]) { + item[name].apply(item, args); + } + }); + + return self; + }, + + /** + * Remove all items from collection and DOM. + * + * @method remove + * @return {tinymce.ui.Collection} Current collection. + */ + remove: function() { + var i = this.length; + + while (i--) { + this[i].remove(); + } + + return this; + } + + /** + * Fires the specified event by name and arguments on the control. This will execute all + * bound event handlers. + * + * @method fire + * @param {String} name Name of the event to fire. + * @param {Object} args Optional arguments to pass to the event. + * @return {tinymce.ui.Collection} Current collection instance. + */ + // fire: function(event, args) {}, -- Generated by code below + + /** + * Binds a callback to the specified event. This event can both be + * native browser events like "click" or custom ones like PostRender. + * + * The callback function will have two parameters the first one being the control that received the event + * the second one will be the event object either the browsers native event object or a custom JS object. + * + * @method on + * @param {String} name Name of the event to bind. For example "click". + * @param {String/function} callback Callback function to execute ones the event occurs. + * @return {tinymce.ui.Collection} Current collection instance. + */ + // on: function(name, callback) {}, -- Generated by code below + + /** + * Unbinds the specified event and optionally a specific callback. If you omit the name + * parameter all event handlers will be removed. If you omit the callback all event handles + * by the specified name will be removed. + * + * @method off + * @param {String} name Optional name for the event to unbind. + * @param {function} callback Optional callback function to unbind. + * @return {tinymce.ui.Collection} Current collection instance. + */ + // off: function(name, callback) {}, -- Generated by code below + + /** + * Shows the items in the current collection. + * + * @method show + * @return {tinymce.ui.Collection} Current collection instance. + */ + // show: function() {}, -- Generated by code below + + /** + * Hides the items in the current collection. + * + * @method hide + * @return {tinymce.ui.Collection} Current collection instance. + */ + // hide: function() {}, -- Generated by code below + + /** + * Sets/gets the text contents of the items in the current collection. + * + * @method text + * @return {tinymce.ui.Collection} Current collection instance or text value of the first item on a get operation. + */ + // text: function(value) {}, -- Generated by code below + + /** + * Sets/gets the name contents of the items in the current collection. + * + * @method name + * @return {tinymce.ui.Collection} Current collection instance or name value of the first item on a get operation. + */ + // name: function(value) {}, -- Generated by code below + + /** + * Sets/gets the disabled state on the items in the current collection. + * + * @method disabled + * @return {tinymce.ui.Collection} Current collection instance or disabled state of the first item on a get operation. + */ + // disabled: function(state) {}, -- Generated by code below + + /** + * Sets/gets the active state on the items in the current collection. + * + * @method active + * @return {tinymce.ui.Collection} Current collection instance or active state of the first item on a get operation. + */ + // active: function(state) {}, -- Generated by code below + + /** + * Sets/gets the selected state on the items in the current collection. + * + * @method selected + * @return {tinymce.ui.Collection} Current collection instance or selected state of the first item on a get operation. + */ + // selected: function(state) {}, -- Generated by code below + + /** + * Sets/gets the selected state on the items in the current collection. + * + * @method visible + * @return {tinymce.ui.Collection} Current collection instance or visible state of the first item on a get operation. + */ + // visible: function(state) {}, -- Generated by code below + + /** + * Adds a class to all items in the collection. + * + * @method addClass + * @param {String} cls Class to add to each item. + * @return {tinymce.ui.Collection} Current collection instance. + */ + // addClass: function(cls) {}, -- Generated by code below + + /** + * Removes the specified class from all items in collection. + * + * @method removeClass + * @param {String} cls Class to remove from each item. + * @return {tinymce.ui.Collection} Current collection instance. + */ + // removeClass: function(cls) {}, -- Generated by code below + }; + + // Extend tinymce.ui.Collection prototype with some generated control specific methods + Tools.each('fire on off show hide addClass removeClass append prepend before after reflow'.split(' '), function(name) { + proto[name] = function() { + var args = Tools.toArray(arguments); + + this.each(function(ctrl) { + if (name in ctrl) { + ctrl[name].apply(ctrl, args); + } + }); + + return this; + }; + }); + + // Extend tinymce.ui.Collection prototype with some property methods + Tools.each('text name disabled active selected checked visible parent value data'.split(' '), function(name) { + proto[name] = function(value) { + return this.prop(name, value); + }; + }); + + // Create class based on the new prototype + Collection = Class.extend(proto); + + // Stick Collection into Selector to prevent circual references + Selector.Collection = Collection; + + return Collection; +}); + +// Included from: js/tinymce/classes/ui/DomUtils.js + +/** + * DOMUtils.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +define("tinymce/ui/DomUtils", [ + "tinymce/util/Tools", + "tinymce/dom/DOMUtils" +], function(Tools, DOMUtils) { + "use strict"; + + return { + id: function() { + return DOMUtils.DOM.uniqueId(); + }, + + createFragment: function(html) { + return DOMUtils.DOM.createFragment(html); + }, + + getWindowSize: function() { + return DOMUtils.DOM.getViewPort(); + }, + + getSize: function(elm) { + var width, height; + + if (elm.getBoundingClientRect) { + var rect = elm.getBoundingClientRect(); + + width = Math.max(rect.width || (rect.right - rect.left), elm.offsetWidth); + height = Math.max(rect.height || (rect.bottom - rect.bottom), elm.offsetHeight); + } else { + width = elm.offsetWidth; + height = elm.offsetHeight; + } + + return {width: width, height: height}; + }, + + getPos: function(elm, root) { + return DOMUtils.DOM.getPos(elm, root); + }, + + getViewPort: function(win) { + return DOMUtils.DOM.getViewPort(win); + }, + + get: function(id) { + return document.getElementById(id); + }, + + addClass : function(elm, cls) { + return DOMUtils.DOM.addClass(elm, cls); + }, + + removeClass : function(elm, cls) { + return DOMUtils.DOM.removeClass(elm, cls); + }, + + hasClass : function(elm, cls) { + return DOMUtils.DOM.hasClass(elm, cls); + }, + + toggleClass: function(elm, cls, state) { + return DOMUtils.DOM.toggleClass(elm, cls, state); + }, + + css: function(elm, name, value) { + return DOMUtils.DOM.setStyle(elm, name, value); + }, + + on: function(target, name, callback, scope) { + return DOMUtils.DOM.bind(target, name, callback, scope); + }, + + off: function(target, name, callback) { + return DOMUtils.DOM.unbind(target, name, callback); + }, + + fire: function(target, name, args) { + return DOMUtils.DOM.fire(target, name, args); + }, + + innerHtml: function(elm, html) { + // Workaround for
    in

    bug on IE 8 #6178 + DOMUtils.DOM.setHTML(elm, html); + } + }; +}); + +// Included from: js/tinymce/classes/ui/Control.js + +/** + * Control.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*eslint consistent-this:0 */ + +/** + * This is the base class for all controls and containers. All UI control instances inherit + * from this one as it has the base logic needed by all of them. + * + * @class tinymce.ui.Control + */ +define("tinymce/ui/Control", [ + "tinymce/util/Class", + "tinymce/util/Tools", + "tinymce/ui/Collection", + "tinymce/ui/DomUtils" +], function(Class, Tools, Collection, DomUtils) { + "use strict"; + + var nativeEvents = Tools.makeMap("focusin focusout scroll click dblclick mousedown mouseup mousemove mouseover" + + " mouseout mouseenter mouseleave wheel keydown keypress keyup contextmenu", " "); + + var elementIdCache = {}; + var hasMouseWheelEventSupport = "onmousewheel" in document; + var hasWheelEventSupport = false; + + var Control = Class.extend({ + Statics: { + elementIdCache: elementIdCache + }, + + isRtl: function() { + return Control.rtl; + }, + + /** + * Class/id prefix to use for all controls. + * + * @final + * @field {String} classPrefix + */ + classPrefix: "mce-", + + /** + * Constructs a new control instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + * @setting {String} style Style CSS properties to add. + * @setting {String} border Border box values example: 1 1 1 1 + * @setting {String} padding Padding box values example: 1 1 1 1 + * @setting {String} margin Margin box values example: 1 1 1 1 + * @setting {Number} minWidth Minimal width for the control. + * @setting {Number} minHeight Minimal height for the control. + * @setting {String} classes Space separated list of classes to add. + * @setting {String} role WAI-ARIA role to use for control. + * @setting {Boolean} hidden Is the control hidden by default. + * @setting {Boolean} disabled Is the control disabled by default. + * @setting {String} name Name of the control instance. + */ + init: function(settings) { + var self = this, classes, i; + + self.settings = settings = Tools.extend({}, self.Defaults, settings); + + // Initial states + self._id = settings.id || DomUtils.id(); + self._text = self._name = ''; + self._width = self._height = 0; + self._aria = {role: settings.role}; + + // Setup classes + classes = settings.classes; + if (classes) { + classes = classes.split(' '); + classes.map = {}; + i = classes.length; + while (i--) { + classes.map[classes[i]] = true; + } + } + + self._classes = classes || []; + self.visible(true); + + // Set some properties + Tools.each('title text width height name classes visible disabled active value'.split(' '), function(name) { + var value = settings[name], undef; + + if (value !== undef) { + self[name](value); + } else if (self['_' + name] === undef) { + self['_' + name] = false; + } + }); + + self.on('click', function() { + if (self.disabled()) { + return false; + } + }); + + // TODO: Is this needed duplicate code see above? + if (settings.classes) { + Tools.each(settings.classes.split(' '), function(cls) { + self.addClass(cls); + }); + } + + /** + * Name/value object with settings for the current control. + * + * @field {Object} settings + */ + self.settings = settings; + + self._borderBox = self.parseBox(settings.border); + self._paddingBox = self.parseBox(settings.padding); + self._marginBox = self.parseBox(settings.margin); + + if (settings.hidden) { + self.hide(); + } + }, + + // Will generate getter/setter methods for these properties + Properties: 'parent,title,text,width,height,disabled,active,name,value', + + // Will generate empty dummy functions for these + Methods: 'renderHtml', + + /** + * Returns the root element to render controls into. + * + * @method getContainerElm + * @return {Element} HTML DOM element to render into. + */ + getContainerElm: function() { + return document.body; + }, + + /** + * Returns a control instance for the current DOM element. + * + * @method getParentCtrl + * @param {Element} elm HTML dom element to get parent control from. + * @return {tinymce.ui.Control} Control instance or undefined. + */ + getParentCtrl: function(elm) { + var ctrl, lookup = this.getRoot().controlIdLookup; + + while (elm && lookup) { + ctrl = lookup[elm.id]; + if (ctrl) { + break; + } + + elm = elm.parentNode; + } + + return ctrl; + }, + + /** + * Parses the specified box value. A box value contains 1-4 properties in clockwise order. + * + * @method parseBox + * @param {String/Number} value Box value "0 1 2 3" or "0" etc. + * @return {Object} Object with top/right/bottom/left properties. + * @private + */ + parseBox: function(value) { + var len, radix = 10; + + if (!value) { + return; + } + + if (typeof(value) === "number") { + value = value || 0; + + return { + top: value, + left: value, + bottom: value, + right: value + }; + } + + value = value.split(' '); + len = value.length; + + if (len === 1) { + value[1] = value[2] = value[3] = value[0]; + } else if (len === 2) { + value[2] = value[0]; + value[3] = value[1]; + } else if (len === 3) { + value[3] = value[1]; + } + + return { + top: parseInt(value[0], radix) || 0, + right: parseInt(value[1], radix) || 0, + bottom: parseInt(value[2], radix) || 0, + left: parseInt(value[3], radix) || 0 + }; + }, + + borderBox: function() { + return this._borderBox; + }, + + paddingBox: function() { + return this._paddingBox; + }, + + marginBox: function() { + return this._marginBox; + }, + + measureBox: function(elm, prefix) { + function getStyle(name) { + var defaultView = document.defaultView; + + if (defaultView) { + // Remove camelcase + name = name.replace(/[A-Z]/g, function(a) { + return '-' + a; + }); + + return defaultView.getComputedStyle(elm, null).getPropertyValue(name); + } + + return elm.currentStyle[name]; + } + + function getSide(name) { + var val = parseFloat(getStyle(name), 10); + + return isNaN(val) ? 0 : val; + } + + return { + top: getSide(prefix + "TopWidth"), + right: getSide(prefix + "RightWidth"), + bottom: getSide(prefix + "BottomWidth"), + left: getSide(prefix + "LeftWidth") + }; + }, + + /** + * Initializes the current controls layout rect. + * This will be executed by the layout managers to determine the + * default minWidth/minHeight etc. + * + * @method initLayoutRect + * @return {Object} Layout rect instance. + */ + initLayoutRect: function() { + var self = this, settings = self.settings, borderBox, layoutRect; + var elm = self.getEl(), width, height, minWidth, minHeight, autoResize; + var startMinWidth, startMinHeight, initialSize; + + // Measure the current element + borderBox = self._borderBox = self._borderBox || self.measureBox(elm, 'border'); + self._paddingBox = self._paddingBox || self.measureBox(elm, 'padding'); + self._marginBox = self._marginBox || self.measureBox(elm, 'margin'); + initialSize = DomUtils.getSize(elm); + + // Setup minWidth/minHeight and width/height + startMinWidth = settings.minWidth; + startMinHeight = settings.minHeight; + minWidth = startMinWidth || initialSize.width; + minHeight = startMinHeight || initialSize.height; + width = settings.width; + height = settings.height; + autoResize = settings.autoResize; + autoResize = typeof(autoResize) != "undefined" ? autoResize : !width && !height; + + width = width || minWidth; + height = height || minHeight; + + var deltaW = borderBox.left + borderBox.right; + var deltaH = borderBox.top + borderBox.bottom; + + var maxW = settings.maxWidth || 0xFFFF; + var maxH = settings.maxHeight || 0xFFFF; + + // Setup initial layout rect + self._layoutRect = layoutRect = { + x: settings.x || 0, + y: settings.y || 0, + w: width, + h: height, + deltaW: deltaW, + deltaH: deltaH, + contentW: width - deltaW, + contentH: height - deltaH, + innerW: width - deltaW, + innerH: height - deltaH, + startMinWidth: startMinWidth || 0, + startMinHeight: startMinHeight || 0, + minW: Math.min(minWidth, maxW), + minH: Math.min(minHeight, maxH), + maxW: maxW, + maxH: maxH, + autoResize: autoResize, + scrollW: 0 + }; + + self._lastLayoutRect = {}; + + return layoutRect; + }, + + /** + * Getter/setter for the current layout rect. + * + * @method layoutRect + * @param {Object} [newRect] Optional new layout rect. + * @return {tinymce.ui.Control/Object} Current control or rect object. + */ + layoutRect: function(newRect) { + var self = this, curRect = self._layoutRect, lastLayoutRect, size, deltaWidth, deltaHeight, undef, repaintControls; + + // Initialize default layout rect + if (!curRect) { + curRect = self.initLayoutRect(); + } + + // Set new rect values + if (newRect) { + // Calc deltas between inner and outer sizes + deltaWidth = curRect.deltaW; + deltaHeight = curRect.deltaH; + + // Set x position + if (newRect.x !== undef) { + curRect.x = newRect.x; + } + + // Set y position + if (newRect.y !== undef) { + curRect.y = newRect.y; + } + + // Set minW + if (newRect.minW !== undef) { + curRect.minW = newRect.minW; + } + + // Set minH + if (newRect.minH !== undef) { + curRect.minH = newRect.minH; + } + + // Set new width and calculate inner width + size = newRect.w; + if (size !== undef) { + size = size < curRect.minW ? curRect.minW : size; + size = size > curRect.maxW ? curRect.maxW : size; + curRect.w = size; + curRect.innerW = size - deltaWidth; + } + + // Set new height and calculate inner height + size = newRect.h; + if (size !== undef) { + size = size < curRect.minH ? curRect.minH : size; + size = size > curRect.maxH ? curRect.maxH : size; + curRect.h = size; + curRect.innerH = size - deltaHeight; + } + + // Set new inner width and calculate width + size = newRect.innerW; + if (size !== undef) { + size = size < curRect.minW - deltaWidth ? curRect.minW - deltaWidth : size; + size = size > curRect.maxW - deltaWidth ? curRect.maxW - deltaWidth : size; + curRect.innerW = size; + curRect.w = size + deltaWidth; + } + + // Set new height and calculate inner height + size = newRect.innerH; + if (size !== undef) { + size = size < curRect.minH - deltaHeight ? curRect.minH - deltaHeight : size; + size = size > curRect.maxH - deltaHeight ? curRect.maxH - deltaHeight : size; + curRect.innerH = size; + curRect.h = size + deltaHeight; + } + + // Set new contentW + if (newRect.contentW !== undef) { + curRect.contentW = newRect.contentW; + } + + // Set new contentH + if (newRect.contentH !== undef) { + curRect.contentH = newRect.contentH; + } + + // Compare last layout rect with the current one to see if we need to repaint or not + lastLayoutRect = self._lastLayoutRect; + if (lastLayoutRect.x !== curRect.x || lastLayoutRect.y !== curRect.y || + lastLayoutRect.w !== curRect.w || lastLayoutRect.h !== curRect.h) { + repaintControls = Control.repaintControls; + + if (repaintControls) { + if (repaintControls.map && !repaintControls.map[self._id]) { + repaintControls.push(self); + repaintControls.map[self._id] = true; + } + } + + lastLayoutRect.x = curRect.x; + lastLayoutRect.y = curRect.y; + lastLayoutRect.w = curRect.w; + lastLayoutRect.h = curRect.h; + } + + return self; + } + + return curRect; + }, + + /** + * Repaints the control after a layout operation. + * + * @method repaint + */ + repaint: function() { + var self = this, style, bodyStyle, rect, borderBox, borderW = 0, borderH = 0, lastRepaintRect, round; + + // Use Math.round on all values on IE < 9 + round = !document.createRange ? Math.round : function(value) { + return value; + }; + + style = self.getEl().style; + rect = self._layoutRect; + lastRepaintRect = self._lastRepaintRect || {}; + + borderBox = self._borderBox; + borderW = borderBox.left + borderBox.right; + borderH = borderBox.top + borderBox.bottom; + + if (rect.x !== lastRepaintRect.x) { + style.left = round(rect.x) + 'px'; + lastRepaintRect.x = rect.x; + } + + if (rect.y !== lastRepaintRect.y) { + style.top = round(rect.y) + 'px'; + lastRepaintRect.y = rect.y; + } + + if (rect.w !== lastRepaintRect.w) { + style.width = round(rect.w - borderW) + 'px'; + lastRepaintRect.w = rect.w; + } + + if (rect.h !== lastRepaintRect.h) { + style.height = round(rect.h - borderH) + 'px'; + lastRepaintRect.h = rect.h; + } + + // Update body if needed + if (self._hasBody && rect.innerW !== lastRepaintRect.innerW) { + bodyStyle = self.getEl('body').style; + bodyStyle.width = round(rect.innerW) + 'px'; + lastRepaintRect.innerW = rect.innerW; + } + + if (self._hasBody && rect.innerH !== lastRepaintRect.innerH) { + bodyStyle = bodyStyle || self.getEl('body').style; + bodyStyle.height = round(rect.innerH) + 'px'; + lastRepaintRect.innerH = rect.innerH; + } + + self._lastRepaintRect = lastRepaintRect; + self.fire('repaint', {}, false); + }, + + /** + * Binds a callback to the specified event. This event can both be + * native browser events like "click" or custom ones like PostRender. + * + * The callback function will be passed a DOM event like object that enables yout do stop propagation. + * + * @method on + * @param {String} name Name of the event to bind. For example "click". + * @param {String/function} callback Callback function to execute ones the event occurs. + * @return {tinymce.ui.Control} Current control object. + */ + on: function(name, callback) { + var self = this, bindings, handlers, names, i; + + function resolveCallbackName(name) { + var callback, scope; + + return function(e) { + if (!callback) { + self.parents().each(function(ctrl) { + var callbacks = ctrl.settings.callbacks; + + if (callbacks && (callback = callbacks[name])) { + scope = ctrl; + return false; + } + }); + } + + return callback.call(scope, e); + }; + } + + if (callback) { + if (typeof(callback) == 'string') { + callback = resolveCallbackName(callback); + } + + names = name.toLowerCase().split(' '); + i = names.length; + while (i--) { + name = names[i]; + + bindings = self._bindings; + if (!bindings) { + bindings = self._bindings = {}; + } + + handlers = bindings[name]; + if (!handlers) { + handlers = bindings[name] = []; + } + + handlers.push(callback); + + if (nativeEvents[name]) { + if (!self._nativeEvents) { + self._nativeEvents = {name: true}; + } else { + self._nativeEvents[name] = true; + } + + if (self._rendered) { + self.bindPendingEvents(); + } + } + } + } + + return self; + }, + + /** + * Unbinds the specified event and optionally a specific callback. If you omit the name + * parameter all event handlers will be removed. If you omit the callback all event handles + * by the specified name will be removed. + * + * @method off + * @param {String} [name] Name for the event to unbind. + * @param {function} [callback] Callback function to unbind. + * @return {mxex.ui.Control} Current control object. + */ + off: function(name, callback) { + var self = this, i, bindings = self._bindings, handlers, bindingName, names, hi; + + if (bindings) { + if (name) { + names = name.toLowerCase().split(' '); + i = names.length; + while (i--) { + name = names[i]; + handlers = bindings[name]; + + // Unbind all handlers + if (!name) { + for (bindingName in bindings) { + bindings[bindingName].length = 0; + } + + return self; + } + + if (handlers) { + // Unbind all by name + if (!callback) { + handlers.length = 0; + } else { + // Unbind specific ones + hi = handlers.length; + while (hi--) { + if (handlers[hi] === callback) { + handlers.splice(hi, 1); + } + } + } + } + } + } else { + self._bindings = []; + } + } + + return self; + }, + + /** + * Fires the specified event by name and arguments on the control. This will execute all + * bound event handlers. + * + * @method fire + * @param {String} name Name of the event to fire. + * @param {Object} [args] Arguments to pass to the event. + * @param {Boolean} [bubble] Value to control bubbeling. Defaults to true. + * @return {Object} Current arguments object. + */ + fire: function(name, args, bubble) { + var self = this, i, l, handlers, parentCtrl; + + name = name.toLowerCase(); + + // Dummy function that gets replaced on the delegation state functions + function returnFalse() { + return false; + } + + // Dummy function that gets replaced on the delegation state functions + function returnTrue() { + return true; + } + + // Setup empty object if args is omited + args = args || {}; + + // Stick type into event object + if (!args.type) { + args.type = name; + } + + // Stick control into event + if (!args.control) { + args.control = self; + } + + // Add event delegation methods if they are missing + if (!args.preventDefault) { + // Add preventDefault method + args.preventDefault = function() { + args.isDefaultPrevented = returnTrue; + }; + + // Add stopPropagation + args.stopPropagation = function() { + args.isPropagationStopped = returnTrue; + }; + + // Add stopImmediatePropagation + args.stopImmediatePropagation = function() { + args.isImmediatePropagationStopped = returnTrue; + }; + + // Add event delegation states + args.isDefaultPrevented = returnFalse; + args.isPropagationStopped = returnFalse; + args.isImmediatePropagationStopped = returnFalse; + } + + if (self._bindings) { + handlers = self._bindings[name]; + + if (handlers) { + for (i = 0, l = handlers.length; i < l; i++) { + // Execute callback and break if the callback returns a false + if (!args.isImmediatePropagationStopped() && handlers[i].call(self, args) === false) { + break; + } + } + } + } + + // Bubble event up to parent controls + if (bubble !== false) { + parentCtrl = self.parent(); + while (parentCtrl && !args.isPropagationStopped()) { + parentCtrl.fire(name, args, false); + parentCtrl = parentCtrl.parent(); + } + } + + return args; + }, + + /** + * Returns true/false if the specified event has any listeners. + * + * @method hasEventListeners + * @param {String} name Name of the event to check for. + * @return {Boolean} True/false state if the event has listeners. + */ + hasEventListeners: function(name) { + return name in this._bindings; + }, + + /** + * Returns a control collection with all parent controls. + * + * @method parents + * @param {String} selector Optional selector expression to find parents. + * @return {tinymce.ui.Collection} Collection with all parent controls. + */ + parents: function(selector) { + var self = this, ctrl, parents = new Collection(); + + // Add each parent to collection + for (ctrl = self.parent(); ctrl; ctrl = ctrl.parent()) { + parents.add(ctrl); + } + + // Filter away everything that doesn't match the selector + if (selector) { + parents = parents.filter(selector); + } + + return parents; + }, + + /** + * Returns the control next to the current control. + * + * @method next + * @return {tinymce.ui.Control} Next control instance. + */ + next: function() { + var parentControls = this.parent().items(); + + return parentControls[parentControls.indexOf(this) + 1]; + }, + + /** + * Returns the control previous to the current control. + * + * @method prev + * @return {tinymce.ui.Control} Previous control instance. + */ + prev: function() { + var parentControls = this.parent().items(); + + return parentControls[parentControls.indexOf(this) - 1]; + }, + + /** + * Find the common ancestor for two control instances. + * + * @method findCommonAncestor + * @param {tinymce.ui.Control} ctrl1 First control. + * @param {tinymce.ui.Control} ctrl2 Second control. + * @return {tinymce.ui.Control} Ancestor control instance. + */ + findCommonAncestor: function(ctrl1, ctrl2) { + var parentCtrl; + + while (ctrl1) { + parentCtrl = ctrl2; + + while (parentCtrl && ctrl1 != parentCtrl) { + parentCtrl = parentCtrl.parent(); + } + + if (ctrl1 == parentCtrl) { + break; + } + + ctrl1 = ctrl1.parent(); + } + + return ctrl1; + }, + + /** + * Returns true/false if the specific control has the specific class. + * + * @method hasClass + * @param {String} cls Class to check for. + * @param {String} [group] Sub element group name. + * @return {Boolean} True/false if the control has the specified class. + */ + hasClass: function(cls, group) { + var classes = this._classes[group || 'control']; + + cls = this.classPrefix + cls; + + return classes && !!classes.map[cls]; + }, + + /** + * Adds the specified class to the control + * + * @method addClass + * @param {String} cls Class to check for. + * @param {String} [group] Sub element group name. + * @return {tinymce.ui.Control} Current control object. + */ + addClass: function(cls, group) { + var self = this, classes, elm; + + cls = this.classPrefix + cls; + classes = self._classes[group || 'control']; + + if (!classes) { + classes = []; + classes.map = {}; + self._classes[group || 'control'] = classes; + } + + if (!classes.map[cls]) { + classes.map[cls] = cls; + classes.push(cls); + + if (self._rendered) { + elm = self.getEl(group); + + if (elm) { + elm.className = classes.join(' '); + } + } + } + + return self; + }, + + /** + * Removes the specified class from the control. + * + * @method removeClass + * @param {String} cls Class to remove. + * @param {String} [group] Sub element group name. + * @return {tinymce.ui.Control} Current control object. + */ + removeClass: function(cls, group) { + var self = this, classes, i, elm; + + cls = this.classPrefix + cls; + classes = self._classes[group || 'control']; + if (classes && classes.map[cls]) { + delete classes.map[cls]; + + i = classes.length; + while (i--) { + if (classes[i] === cls) { + classes.splice(i, 1); + } + } + } + + if (self._rendered) { + elm = self.getEl(group); + + if (elm) { + elm.className = classes.join(' '); + } + } + + return self; + }, + + /** + * Toggles the specified class on the control. + * + * @method toggleClass + * @param {String} cls Class to remove. + * @param {Boolean} state True/false state to add/remove class. + * @param {String} [group] Sub element group name. + * @return {tinymce.ui.Control} Current control object. + */ + toggleClass: function(cls, state, group) { + var self = this; + + if (state) { + self.addClass(cls, group); + } else { + self.removeClass(cls, group); + } + + return self; + }, + + /** + * Returns the class string for the specified group name. + * + * @method classes + * @param {String} [group] Group to get clases by. + * @return {String} Classes for the specified group. + */ + classes: function(group) { + var classes = this._classes[group || 'control']; + + return classes ? classes.join(' ') : ''; + }, + + /** + * Sets the inner HTML of the control element. + * + * @method innerHtml + * @param {String} html Html string to set as inner html. + * @return {tinymce.ui.Control} Current control object. + */ + innerHtml: function(html) { + DomUtils.innerHtml(this.getEl(), html); + return this; + }, + + /** + * Returns the control DOM element or sub element. + * + * @method getEl + * @param {String} [suffix] Suffix to get element by. + * @param {Boolean} [dropCache] True if the cache for the element should be dropped. + * @return {Element} HTML DOM element for the current control or it's children. + */ + getEl: function(suffix, dropCache) { + var elm, id = suffix ? this._id + '-' + suffix : this._id; + + elm = elementIdCache[id] = (dropCache === true ? null : elementIdCache[id]) || DomUtils.get(id); + + return elm; + }, + + /** + * Sets/gets the visible for the control. + * + * @method visible + * @param {Boolean} state Value to set to control. + * @return {Boolean/tinymce.ui.Control} Current control on a set operation or current state on a get. + */ + visible: function(state) { + var self = this, parentCtrl; + + if (typeof(state) !== "undefined") { + if (self._visible !== state) { + if (self._rendered) { + self.getEl().style.display = state ? '' : 'none'; + } + + self._visible = state; + + // Parent container needs to reflow + parentCtrl = self.parent(); + if (parentCtrl) { + parentCtrl._lastRect = null; + } + + self.fire(state ? 'show' : 'hide'); + } + + return self; + } + + return self._visible; + }, + + /** + * Sets the visible state to true. + * + * @method show + * @return {tinymce.ui.Control} Current control instance. + */ + show: function() { + return this.visible(true); + }, + + /** + * Sets the visible state to false. + * + * @method hide + * @return {tinymce.ui.Control} Current control instance. + */ + hide: function() { + return this.visible(false); + }, + + /** + * Focuses the current control. + * + * @method focus + * @return {tinymce.ui.Control} Current control instance. + */ + focus: function() { + try { + this.getEl().focus(); + } catch (ex) { + // Ignore IE error + } + + return this; + }, + + /** + * Blurs the current control. + * + * @method blur + * @return {tinymce.ui.Control} Current control instance. + */ + blur: function() { + this.getEl().blur(); + + return this; + }, + + /** + * Sets the specified aria property. + * + * @method aria + * @param {String} name Name of the aria property to set. + * @param {String} value Value of the aria property. + * @return {tinymce.ui.Control} Current control instance. + */ + aria: function(name, value) { + var self = this, elm = self.getEl(self.ariaTarget); + + if (typeof(value) === "undefined") { + return self._aria[name]; + } else { + self._aria[name] = value; + } + + if (self._rendered) { + elm.setAttribute(name == 'role' ? name : 'aria-' + name, value); + } + + return self; + }, + + /** + * Encodes the specified string with HTML entities. It will also + * translate the string to different languages. + * + * @method encode + * @param {String/Object/Array} text Text to entity encode. + * @param {Boolean} [translate=true] False if the contents shouldn't be translated. + * @return {String} Encoded and possible traslated string. + */ + encode: function(text, translate) { + if (translate !== false && Control.translate) { + text = Control.translate(text); + } + + return (text || '').replace(/[&<>"]/g, function(match) { + return '&#' + match.charCodeAt(0) + ';'; + }); + }, + + /** + * Adds items before the current control. + * + * @method before + * @param {Array/tinymce.ui.Collection} items Array of items to prepend before this control. + * @return {tinymce.ui.Control} Current control instance. + */ + before: function(items) { + var self = this, parent = self.parent(); + + if (parent) { + parent.insert(items, parent.items().indexOf(self), true); + } + + return self; + }, + + /** + * Adds items after the current control. + * + * @method after + * @param {Array/tinymce.ui.Collection} items Array of items to append after this control. + * @return {tinymce.ui.Control} Current control instance. + */ + after: function(items) { + var self = this, parent = self.parent(); + + if (parent) { + parent.insert(items, parent.items().indexOf(self)); + } + + return self; + }, + + /** + * Removes the current control from DOM and from UI collections. + * + * @method remove + * @return {tinymce.ui.Control} Current control instance. + */ + remove: function() { + var self = this, elm = self.getEl(), parent = self.parent(), newItems, i; + + if (self.items) { + var controls = self.items().toArray(); + i = controls.length; + while (i--) { + controls[i].remove(); + } + } + + if (parent && parent.items) { + newItems = []; + + parent.items().each(function(item) { + if (item !== self) { + newItems.push(item); + } + }); + + parent.items().set(newItems); + parent._lastRect = null; + } + + if (self._eventsRoot && self._eventsRoot == self) { + DomUtils.off(elm); + } + + var lookup = self.getRoot().controlIdLookup; + if (lookup) { + delete lookup[self._id]; + } + + delete elementIdCache[self._id]; + + if (elm && elm.parentNode) { + var nodes = elm.getElementsByTagName('*'); + + i = nodes.length; + while (i--) { + delete elementIdCache[nodes[i].id]; + } + + elm.parentNode.removeChild(elm); + } + + self._rendered = false; + + return self; + }, + + /** + * Renders the control before the specified element. + * + * @method renderBefore + * @param {Element} elm Element to render before. + * @return {tinymce.ui.Control} Current control instance. + */ + renderBefore: function(elm) { + var self = this; + + elm.parentNode.insertBefore(DomUtils.createFragment(self.renderHtml()), elm); + self.postRender(); + + return self; + }, + + /** + * Renders the control to the specified element. + * + * @method renderBefore + * @param {Element} elm Element to render to. + * @return {tinymce.ui.Control} Current control instance. + */ + renderTo: function(elm) { + var self = this; + + elm = elm || self.getContainerElm(); + elm.appendChild(DomUtils.createFragment(self.renderHtml())); + self.postRender(); + + return self; + }, + + /** + * Post render method. Called after the control has been rendered to the target. + * + * @method postRender + * @return {tinymce.ui.Control} Current control instance. + */ + postRender: function() { + var self = this, settings = self.settings, elm, box, parent, name, parentEventsRoot; + + // Bind on settings + for (name in settings) { + if (name.indexOf("on") === 0) { + self.on(name.substr(2), settings[name]); + } + } + + if (self._eventsRoot) { + for (parent = self.parent(); !parentEventsRoot && parent; parent = parent.parent()) { + parentEventsRoot = parent._eventsRoot; + } + + if (parentEventsRoot) { + for (name in parentEventsRoot._nativeEvents) { + self._nativeEvents[name] = true; + } + } + } + + self.bindPendingEvents(); + + if (settings.style) { + elm = self.getEl(); + if (elm) { + elm.setAttribute('style', settings.style); + elm.style.cssText = settings.style; + } + } + + if (!self._visible) { + DomUtils.css(self.getEl(), 'display', 'none'); + } + + if (self.settings.border) { + box = self.borderBox(); + DomUtils.css(self.getEl(), { + 'border-top-width': box.top, + 'border-right-width': box.right, + 'border-bottom-width': box.bottom, + 'border-left-width': box.left + }); + } + + // Add instance to lookup + var root = self.getRoot(); + if (!root.controlIdLookup) { + root.controlIdLookup = {}; + } + + root.controlIdLookup[self._id] = self; + + for (var key in self._aria) { + self.aria(key, self._aria[key]); + } + + self.fire('postrender', {}, false); + }, + + /** + * Scrolls the current control into view. + * + * @method scrollIntoView + * @param {String} align Alignment in view top|center|bottom. + * @return {tinymce.ui.Control} Current control instance. + */ + scrollIntoView: function(align) { + function getOffset(elm, rootElm) { + var x, y, parent = elm; + + x = y = 0; + while (parent && parent != rootElm && parent.nodeType) { + x += parent.offsetLeft || 0; + y += parent.offsetTop || 0; + parent = parent.offsetParent; + } + + return {x: x, y: y}; + } + + var elm = this.getEl(), parentElm = elm.parentNode; + var x, y, width, height, parentWidth, parentHeight; + var pos = getOffset(elm, parentElm); + + x = pos.x; + y = pos.y; + width = elm.offsetWidth; + height = elm.offsetHeight; + parentWidth = parentElm.clientWidth; + parentHeight = parentElm.clientHeight; + + if (align == "end") { + x -= parentWidth - width; + y -= parentHeight - height; + } else if (align == "center") { + x -= (parentWidth / 2) - (width / 2); + y -= (parentHeight / 2) - (height / 2); + } + + parentElm.scrollLeft = x; + parentElm.scrollTop = y; + + return this; + }, + + /** + * Binds pending DOM events. + * + * @private + */ + bindPendingEvents: function() { + var self = this, i, l, parents, eventRootCtrl, nativeEvents, name; + + function delegate(e) { + var control = self.getParentCtrl(e.target); + + if (control) { + control.fire(e.type, e); + } + } + + function mouseLeaveHandler() { + var ctrl = eventRootCtrl._lastHoverCtrl; + + if (ctrl) { + ctrl.fire("mouseleave", {target: ctrl.getEl()}); + + ctrl.parents().each(function(ctrl) { + ctrl.fire("mouseleave", {target: ctrl.getEl()}); + }); + + eventRootCtrl._lastHoverCtrl = null; + } + } + + function mouseEnterHandler(e) { + var ctrl = self.getParentCtrl(e.target), lastCtrl = eventRootCtrl._lastHoverCtrl, idx = 0, i, parents, lastParents; + + // Over on a new control + if (ctrl !== lastCtrl) { + eventRootCtrl._lastHoverCtrl = ctrl; + + parents = ctrl.parents().toArray().reverse(); + parents.push(ctrl); + + if (lastCtrl) { + lastParents = lastCtrl.parents().toArray().reverse(); + lastParents.push(lastCtrl); + + for (idx = 0; idx < lastParents.length; idx++) { + if (parents[idx] !== lastParents[idx]) { + break; + } + } + + for (i = lastParents.length - 1; i >= idx; i--) { + lastCtrl = lastParents[i]; + lastCtrl.fire("mouseleave", { + target : lastCtrl.getEl() + }); + } + } + + for (i = idx; i < parents.length; i++) { + ctrl = parents[i]; + ctrl.fire("mouseenter", { + target : ctrl.getEl() + }); + } + } + } + + function fixWheelEvent(e) { + e.preventDefault(); + + if (e.type == "mousewheel") { + e.deltaY = -1 / 40 * e.wheelDelta; + + if (e.wheelDeltaX) { + e.deltaX = -1 / 40 * e.wheelDeltaX; + } + } else { + e.deltaX = 0; + e.deltaY = e.detail; + } + + e = self.fire("wheel", e); + } + + self._rendered = true; + + nativeEvents = self._nativeEvents; + if (nativeEvents) { + // Find event root element if it exists + parents = self.parents().toArray(); + parents.unshift(self); + for (i = 0, l = parents.length; !eventRootCtrl && i < l; i++) { + eventRootCtrl = parents[i]._eventsRoot; + } + + // Event root wasn't found the use the root control + if (!eventRootCtrl) { + eventRootCtrl = parents[parents.length - 1] || self; + } + + // Set the eventsRoot property on children that didn't have it + self._eventsRoot = eventRootCtrl; + for (l = i, i = 0; i < l; i++) { + parents[i]._eventsRoot = eventRootCtrl; + } + + // Bind native event delegates + for (name in nativeEvents) { + if (!nativeEvents) { + return false; + } + + if (name === "wheel" && !hasWheelEventSupport) { + if (hasMouseWheelEventSupport) { + DomUtils.on(self.getEl(), "mousewheel", fixWheelEvent); + } else { + DomUtils.on(self.getEl(), "DOMMouseScroll", fixWheelEvent); + } + + continue; + } + + // Special treatment for mousenter/mouseleave since these doesn't bubble + if (name === "mouseenter" || name === "mouseleave") { + // Fake mousenter/mouseleave + if (!eventRootCtrl._hasMouseEnter) { + DomUtils.on(eventRootCtrl.getEl(), "mouseleave", mouseLeaveHandler); + DomUtils.on(eventRootCtrl.getEl(), "mouseover", mouseEnterHandler); + eventRootCtrl._hasMouseEnter = 1; + } + } else if (!eventRootCtrl[name]) { + DomUtils.on(eventRootCtrl.getEl(), name, delegate); + eventRootCtrl[name] = true; + } + + // Remove the event once it's bound + nativeEvents[name] = false; + } + } + }, + + getRoot: function() { + var ctrl = this, rootControl, parents = []; + + while (ctrl) { + if (ctrl.rootControl) { + rootControl = ctrl.rootControl; + break; + } + + parents.push(ctrl); + rootControl = ctrl; + ctrl = ctrl.parent(); + } + + if (!rootControl) { + rootControl = this; + } + + var i = parents.length; + while (i--) { + parents[i].rootControl = rootControl; + } + + return rootControl; + }, + + /** + * Reflows the current control and it's parents. + * This should be used after you for example append children to the current control so + * that the layout managers know that they need to reposition everything. + * + * @example + * container.append({type: 'button', text: 'My button'}).reflow(); + * + * @method reflow + * @return {tinymce.ui.Control} Current control instance. + */ + reflow: function() { + this.repaint(); + + return this; + } + + /** + * Sets/gets the parent container for the control. + * + * @method parent + * @param {tinymce.ui.Container} parent Optional parent to set. + * @return {tinymce.ui.Control} Parent control or the current control on a set action. + */ + // parent: function(parent) {} -- Generated + + /** + * Sets/gets the text for the control. + * + * @method text + * @param {String} value Value to set to control. + * @return {String/tinymce.ui.Control} Current control on a set operation or current value on a get. + */ + // text: function(value) {} -- Generated + + /** + * Sets/gets the width for the control. + * + * @method width + * @param {Number} value Value to set to control. + * @return {Number/tinymce.ui.Control} Current control on a set operation or current value on a get. + */ + // width: function(value) {} -- Generated + + /** + * Sets/gets the height for the control. + * + * @method height + * @param {Number} value Value to set to control. + * @return {Number/tinymce.ui.Control} Current control on a set operation or current value on a get. + */ + // height: function(value) {} -- Generated + + /** + * Sets/gets the disabled state on the control. + * + * @method disabled + * @param {Boolean} state Value to set to control. + * @return {Boolean/tinymce.ui.Control} Current control on a set operation or current state on a get. + */ + // disabled: function(state) {} -- Generated + + /** + * Sets/gets the active for the control. + * + * @method active + * @param {Boolean} state Value to set to control. + * @return {Boolean/tinymce.ui.Control} Current control on a set operation or current state on a get. + */ + // active: function(state) {} -- Generated + + /** + * Sets/gets the name for the control. + * + * @method name + * @param {String} value Value to set to control. + * @return {String/tinymce.ui.Control} Current control on a set operation or current value on a get. + */ + // name: function(value) {} -- Generated + + /** + * Sets/gets the title for the control. + * + * @method title + * @param {String} value Value to set to control. + * @return {String/tinymce.ui.Control} Current control on a set operation or current value on a get. + */ + // title: function(value) {} -- Generated + }); + + return Control; +}); + +// Included from: js/tinymce/classes/ui/Factory.js + +/** + * Factory.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*global tinymce:true */ + +/** + * This class is a factory for control instances. This enables you + * to create instances of controls without having to require the UI controls directly. + * + * It also allow you to override or add new control types. + * + * @class tinymce.ui.Factory + */ +define("tinymce/ui/Factory", [], function() { + "use strict"; + + var types = {}, namespaceInit; + + return { + /** + * Adds a new control instance type to the factory. + * + * @method add + * @param {String} type Type name for example "button". + * @param {function} typeClass Class type function. + */ + add: function(type, typeClass) { + types[type.toLowerCase()] = typeClass; + }, + + /** + * Returns true/false if the specified type exists or not. + * + * @method has + * @param {String} type Type to look for. + * @return {Boolean} true/false if the control by name exists. + */ + has: function(type) { + return !!types[type.toLowerCase()]; + }, + + /** + * Creates a new control instance based on the settings provided. The instance created will be + * based on the specified type property it can also create whole structures of components out of + * the specified JSON object. + * + * @example + * tinymce.ui.Factory.create({ + * type: 'button', + * text: 'Hello world!' + * }); + * + * @method create + * @param {Object/String} settings Name/Value object with items used to create the type. + * @return {tinymce.ui.Control} Control instance based on the specified type. + */ + create: function(type, settings) { + var ControlType, name, namespace; + + // Build type lookup + if (!namespaceInit) { + namespace = tinymce.ui; + + for (name in namespace) { + types[name.toLowerCase()] = namespace[name]; + } + + namespaceInit = true; + } + + // If string is specified then use it as the type + if (typeof(type) == 'string') { + settings = settings || {}; + settings.type = type; + } else { + settings = type; + type = settings.type; + } + + // Find control type + type = type.toLowerCase(); + ControlType = types[type]; + + // #if debug + + if (!ControlType) { + throw new Error("Could not find control by type: " + type); + } + + // #endif + + ControlType = new ControlType(settings); + ControlType.type = type; // Set the type on the instance, this will be used by the Selector engine + + return ControlType; + } + }; +}); + +// Included from: js/tinymce/classes/ui/KeyboardNavigation.js + +/** + * KeyboardNavigation.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class handles keyboard navigation of controls and elements. + * + * @class tinymce.ui.KeyboardNavigation + */ +define("tinymce/ui/KeyboardNavigation", [ +], function() { + "use strict"; + + /** + * This class handles all keyboard navigation for WAI-ARIA support. Each root container + * gets an instance of this class. + * + * @constructor + */ + return function(settings) { + var root = settings.root, focusedElement, focusedControl; + + focusedElement = document.activeElement; + focusedControl = root.getParentCtrl(focusedElement); + + /** + * Returns the currently focused elements wai aria role of the currently + * focused element or specified element. + * + * @private + * @param {Element} elm Optional element to get role from. + * @return {String} Role of specified element. + */ + function getRole(elm) { + elm = elm || focusedElement; + + return elm && elm.getAttribute('role'); + } + + /** + * Returns the wai role of the parent element of the currently + * focused element or specified element. + * + * @private + * @param {Element} elm Optional element to get parent role from. + * @return {String} Role of the first parent that has a role. + */ + function getParentRole(elm) { + var role, parent = elm || focusedElement; + + while ((parent = parent.parentNode)) { + if ((role = getRole(parent))) { + return role; + } + } + } + + /** + * Returns a wai aria property by name for example aria-selected. + * + * @private + * @param {String} name Name of the aria property to get for example "disabled". + * @return {String} Aria property value. + */ + function getAriaProp(name) { + var elm = focusedElement; + + if (elm) { + return elm.getAttribute('aria-' + name); + } + } + + /** + * Is the element a text input element or not. + * + * @private + * @param {Element} elm Element to check if it's an text input element or not. + * @return {Boolean} True/false if the element is a text element or not. + */ + function isTextInputElement(elm) { + // Notice: since type can be "email" etc we don't check the type + // So all input elements gets treated as text input elements + return elm.tagName == "INPUT" || elm.tagName == "TEXTAREA"; + } + + /** + * Returns true/false if the specified element can be focused or not. + * + * @private + * @param {Element} elm DOM element to check if it can be focused or not. + * @return {Boolean} True/false if the element can have focus. + */ + function canFocus(elm) { + if (isTextInputElement(elm) && !elm.hidden) { + return true; + } + + if (/^(button|menuitem|checkbox|tab|menuitemcheckbox|option|gridcell)$/.test(getRole(elm))) { + return true; + } + + return false; + } + + /** + * Returns an array of focusable visible elements within the specified container element. + * + * @private + * @param {Element} elm DOM element to find focusable elements within. + * @return {Array} Array of focusable elements. + */ + function getFocusElements(elm) { + var elements = []; + + function collect(elm) { + if (elm.nodeType != 1 || elm.style.display == 'none') { + return; + } + + if (canFocus(elm)) { + elements.push(elm); + } + + for (var i = 0; i < elm.childNodes.length; i++) { + collect(elm.childNodes[i]); + } + } + + collect(elm || root.getEl()); + + return elements; + } + + /** + * Returns the navigation root control for the specified control. The navigation root + * is the control that the keyboard navigation gets scoped to for example a menubar or toolbar group. + * It will look for parents of the specified target control or the currenty focused control if this option is omitted. + * + * @private + * @param {tinymce.ui.Control} targetControl Optional target control to find root of. + * @return {tinymce.ui.Control} Navigation root control. + */ + function getNavigationRoot(targetControl) { + var navigationRoot, controls; + + targetControl = targetControl || focusedControl; + controls = targetControl.parents().toArray(); + controls.unshift(targetControl); + + for (var i = 0; i < controls.length; i++) { + navigationRoot = controls[i]; + + if (navigationRoot.settings.ariaRoot) { + break; + } + } + + return navigationRoot; + } + + /** + * Focuses the first item in the specified targetControl element or the last aria index if the + * navigation root has the ariaRemember option enabled. + * + * @private + * @param {tinymce.ui.Control} targetControl Target control to focus the first item in. + */ + function focusFirst(targetControl) { + var navigationRoot = getNavigationRoot(targetControl); + var focusElements = getFocusElements(navigationRoot.getEl()); + + if (navigationRoot.settings.ariaRemember && "lastAriaIndex" in navigationRoot) { + moveFocusToIndex(navigationRoot.lastAriaIndex, focusElements); + } else { + moveFocusToIndex(0, focusElements); + } + } + + /** + * Moves the focus to the specified index within the elements list. + * This will scope the index to the size of the element list if it changed. + * + * @private + * @param {Number} idx Specified index to move to. + * @param {Array} elements Array with dom elements to move focus within. + * @return {Number} Input index or a changed index if it was out of range. + */ + function moveFocusToIndex(idx, elements) { + if (idx < 0) { + idx = elements.length - 1; + } else if (idx >= elements.length) { + idx = 0; + } + + if (elements[idx]) { + elements[idx].focus(); + } + + return idx; + } + + /** + * Moves the focus forwards or backwards. + * + * @private + * @param {Number} dir Direction to move in positive means forward, negative means backwards. + * @param {Array} elements Optional array of elements to move within defaults to the current navigation roots elements. + */ + function moveFocus(dir, elements) { + var idx = -1, navigationRoot = getNavigationRoot(); + + elements = elements || getFocusElements(navigationRoot.getEl()); + + for (var i = 0; i < elements.length; i++) { + if (elements[i] === focusedElement) { + idx = i; + } + } + + idx += dir; + navigationRoot.lastAriaIndex = moveFocusToIndex(idx, elements); + } + + /** + * Moves the focus to the left this is called by the left key. + * + * @private + */ + function left() { + var parentRole = getParentRole(); + + if (parentRole == "tablist") { + moveFocus(-1, getFocusElements(focusedElement.parentNode)); + } else if (focusedControl.parent().submenu) { + cancel(); + } else { + moveFocus(-1); + } + } + + /** + * Moves the focus to the right this is called by the right key. + * + * @private + */ + function right() { + var role = getRole(), parentRole = getParentRole(); + + if (parentRole == "tablist") { + moveFocus(1, getFocusElements(focusedElement.parentNode)); + } else if (role == "menuitem" && parentRole == "menu" && getAriaProp('haspopup')) { + enter(); + } else { + moveFocus(1); + } + } + + /** + * Moves the focus to the up this is called by the up key. + * + * @private + */ + function up() { + moveFocus(-1); + } + + /** + * Moves the focus to the up this is called by the down key. + * + * @private + */ + function down() { + var role = getRole(), parentRole = getParentRole(); + + if (role == "menuitem" && parentRole == "menubar") { + enter(); + } else if (role == "button" && getAriaProp('haspopup')) { + enter({key: 'down'}); + } else { + moveFocus(1); + } + } + + /** + * Moves the focus to the next item or previous item depending on shift key. + * + * @private + * @param {DOMEvent} e DOM event object. + */ + function tab(e) { + var parentRole = getParentRole(); + + if (parentRole == "tablist") { + var elm = getFocusElements(focusedControl.getEl('body'))[0]; + + if (elm) { + elm.focus(); + } + } else { + moveFocus(e.shiftKey ? -1 : 1); + } + } + + /** + * Calls the cancel event on the currently focused control. This is normally done using the Esc key. + * + * @private + */ + function cancel() { + focusedControl.fire('cancel'); + } + + /** + * Calls the click event on the currently focused control. This is normally done using the Enter/Space keys. + * + * @private + * @param {Object} aria Optional aria data to pass along with the enter event. + */ + function enter(aria) { + aria = aria || {}; + focusedControl.fire('click', {target: focusedElement, aria: aria}); + } + + root.on('keydown', function(e) { + function handleNonTabEvent(e, handler) { + // Ignore non tab keys for text elements + if (isTextInputElement(focusedElement)) { + return; + } + + if (handler(e) !== false) { + e.preventDefault(); + } + } + + if (e.isDefaultPrevented()) { + return; + } + + switch (e.keyCode) { + case 37: // DOM_VK_LEFT + handleNonTabEvent(e, left); + break; + + case 39: // DOM_VK_RIGHT + handleNonTabEvent(e, right); + break; + + case 38: // DOM_VK_UP + handleNonTabEvent(e, up); + break; + + case 40: // DOM_VK_DOWN + handleNonTabEvent(e, down); + break; + + case 27: // DOM_VK_ESCAPE + handleNonTabEvent(e, cancel); + break; + + case 14: // DOM_VK_ENTER + case 13: // DOM_VK_RETURN + case 32: // DOM_VK_SPACE + handleNonTabEvent(e, enter); + break; + + case 9: // DOM_VK_TAB + if (tab(e) !== false) { + e.preventDefault(); + } + break; + } + }); + + root.on('focusin', function(e) { + focusedElement = e.target; + focusedControl = e.control; + }); + + return { + focusFirst: focusFirst + }; + }; +}); + +// Included from: js/tinymce/classes/ui/Container.js + +/** + * Container.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Container control. This is extended by all controls that can have + * children such as panels etc. You can also use this class directly as an + * generic container instance. The container doesn't have any specific role or style. + * + * @-x-less Container.less + * @class tinymce.ui.Container + * @extends tinymce.ui.Control + */ +define("tinymce/ui/Container", [ + "tinymce/ui/Control", + "tinymce/ui/Collection", + "tinymce/ui/Selector", + "tinymce/ui/Factory", + "tinymce/ui/KeyboardNavigation", + "tinymce/util/Tools", + "tinymce/ui/DomUtils" +], function(Control, Collection, Selector, Factory, KeyboardNavigation, Tools, DomUtils) { + "use strict"; + + var selectorCache = {}; + + return Control.extend({ + layout: '', + innerClass: 'container-inner', + + /** + * Constructs a new control instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + * @setting {Array} items Items to add to container in JSON format or control instances. + * @setting {String} layout Layout manager by name to use. + * @setting {Object} defaults Default settings to apply to all items. + */ + init: function(settings) { + var self = this; + + self._super(settings); + settings = self.settings; + self._fixed = settings.fixed; + self._items = new Collection(); + + if (self.isRtl()) { + self.addClass('rtl'); + } + + self.addClass('container'); + self.addClass('container-body', 'body'); + + if (settings.containerCls) { + self.addClass(settings.containerCls); + } + + self._layout = Factory.create((settings.layout || self.layout) + 'layout'); + + if (self.settings.items) { + self.add(self.settings.items); + } + + // TODO: Fix this! + self._hasBody = true; + }, + + /** + * Returns a collection of child items that the container currently have. + * + * @method items + * @return {tinymce.ui.Collection} Control collection direct child controls. + */ + items: function() { + return this._items; + }, + + /** + * Find child controls by selector. + * + * @method find + * @param {String} selector Selector CSS pattern to find children by. + * @return {tinymce.ui.Collection} Control collection with child controls. + */ + find: function(selector) { + selector = selectorCache[selector] = selectorCache[selector] || new Selector(selector); + + return selector.find(this); + }, + + /** + * Adds one or many items to the current container. This will create instances of + * the object representations if needed. + * + * @method add + * @param {Array/Object/tinymce.ui.Control} items Array or item that will be added to the container. + * @return {tinymce.ui.Collection} Current collection control. + */ + add: function(items) { + var self = this; + + self.items().add(self.create(items)).parent(self); + + return self; + }, + + /** + * Focuses the current container instance. This will look + * for the first control in the container and focus that. + * + * @method focus + * @param {Boolean} keyboard Optional true/false if the focus was a keyboard focus or not. + * @return {tinymce.ui.Collection} Current instance. + */ + focus: function(keyboard) { + var self = this, focusCtrl, keyboardNav, items; + + if (keyboard) { + keyboardNav = self.keyboardNav || self.parents().eq(-1)[0].keyboardNav; + + if (keyboardNav) { + keyboardNav.focusFirst(self); + return; + } + } + + items = self.find('*'); + + // TODO: Figure out a better way to auto focus alert dialog buttons + if (self.statusbar) { + items.add(self.statusbar.items()); + } + + items.each(function(ctrl) { + if (ctrl.settings.autofocus) { + focusCtrl = null; + return false; + } + + if (ctrl.canFocus) { + focusCtrl = focusCtrl || ctrl; + } + }); + + if (focusCtrl) { + focusCtrl.focus(); + } + + return self; + }, + + /** + * Replaces the specified child control with a new control. + * + * @method replace + * @param {tinymce.ui.Control} oldItem Old item to be replaced. + * @param {tinymce.ui.Control} newItem New item to be inserted. + */ + replace: function(oldItem, newItem) { + var ctrlElm, items = this.items(), i = items.length; + + // Replace the item in collection + while (i--) { + if (items[i] === oldItem) { + items[i] = newItem; + break; + } + } + + if (i >= 0) { + // Remove new item from DOM + ctrlElm = newItem.getEl(); + if (ctrlElm) { + ctrlElm.parentNode.removeChild(ctrlElm); + } + + // Remove old item from DOM + ctrlElm = oldItem.getEl(); + if (ctrlElm) { + ctrlElm.parentNode.removeChild(ctrlElm); + } + } + + // Adopt the item + newItem.parent(this); + }, + + /** + * Creates the specified items. If any of the items is plain JSON style objects + * it will convert these into real tinymce.ui.Control instances. + * + * @method create + * @param {Array} items Array of items to convert into control instances. + * @return {Array} Array with control instances. + */ + create: function(items) { + var self = this, settings, ctrlItems = []; + + // Non array structure, then force it into an array + if (!Tools.isArray(items)) { + items = [items]; + } + + // Add default type to each child control + Tools.each(items, function(item) { + if (item) { + // Construct item if needed + if (!(item instanceof Control)) { + // Name only then convert it to an object + if (typeof(item) == "string") { + item = {type: item}; + } + + // Create control instance based on input settings and default settings + settings = Tools.extend({}, self.settings.defaults, item); + item.type = settings.type = settings.type || item.type || self.settings.defaultType || + (settings.defaults ? settings.defaults.type : null); + item = Factory.create(settings); + } + + ctrlItems.push(item); + } + }); + + return ctrlItems; + }, + + /** + * Renders new control instances. + * + * @private + */ + renderNew: function() { + var self = this; + + // Render any new items + self.items().each(function(ctrl, index) { + var containerElm, fragment; + + ctrl.parent(self); + + if (!ctrl._rendered) { + containerElm = self.getEl('body'); + fragment = DomUtils.createFragment(ctrl.renderHtml()); + + // Insert or append the item + if (containerElm.hasChildNodes() && index <= containerElm.childNodes.length - 1) { + containerElm.insertBefore(fragment, containerElm.childNodes[index]); + } else { + containerElm.appendChild(fragment); + } + + ctrl.postRender(); + } + }); + + self._layout.applyClasses(self); + self._lastRect = null; + + return self; + }, + + /** + * Appends new instances to the current container. + * + * @method append + * @param {Array/tinymce.ui.Collection} items Array if controls to append. + * @return {tinymce.ui.Container} Current container instance. + */ + append: function(items) { + return this.add(items).renderNew(); + }, + + /** + * Prepends new instances to the current container. + * + * @method prepend + * @param {Array/tinymce.ui.Collection} items Array if controls to prepend. + * @return {tinymce.ui.Container} Current container instance. + */ + prepend: function(items) { + var self = this; + + self.items().set(self.create(items).concat(self.items().toArray())); + + return self.renderNew(); + }, + + /** + * Inserts an control at a specific index. + * + * @method insert + * @param {Array/tinymce.ui.Collection} items Array if controls to insert. + * @param {Number} index Index to insert controls at. + * @param {Boolean} [before=false] Inserts controls before the index. + */ + insert: function(items, index, before) { + var self = this, curItems, beforeItems, afterItems; + + items = self.create(items); + curItems = self.items(); + + if (!before && index < curItems.length - 1) { + index += 1; + } + + if (index >= 0 && index < curItems.length) { + beforeItems = curItems.slice(0, index).toArray(); + afterItems = curItems.slice(index).toArray(); + curItems.set(beforeItems.concat(items, afterItems)); + } + + return self.renderNew(); + }, + + /** + * Populates the form fields from the specified JSON data object. + * + * Control items in the form that matches the data will have it's value set. + * + * @method fromJSON + * @param {Object} data JSON data object to set control values by. + * @return {tinymce.ui.Container} Current form instance. + */ + fromJSON: function(data) { + var self = this; + + for (var name in data) { + self.find('#' + name).value(data[name]); + } + + return self; + }, + + /** + * Serializes the form into a JSON object by getting all items + * that has a name and a value. + * + * @method toJSON + * @return {Object} JSON object with form data. + */ + toJSON: function() { + var self = this, data = {}; + + self.find('*').each(function(ctrl) { + var name = ctrl.name(), value = ctrl.value(); + + if (name && typeof(value) != "undefined") { + data[name] = value; + } + }); + + return data; + }, + + preRender: function() { + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, layout = self._layout, role = this.settings.role; + + self.preRender(); + layout.preRender(self); + + return ( + '

    ' + + '
    ' + + (self.settings.html || '') + layout.renderHtml(self) + + '
    ' + + '
    ' + ); + }, + + /** + * Post render method. Called after the control has been rendered to the target. + * + * @method postRender + * @return {tinymce.ui.Container} Current combobox instance. + */ + postRender: function() { + var self = this, box; + + self.items().exec('postRender'); + self._super(); + + self._layout.postRender(self); + self._rendered = true; + + if (self.settings.style) { + DomUtils.css(self.getEl(), self.settings.style); + } + + if (self.settings.border) { + box = self.borderBox(); + DomUtils.css(self.getEl(), { + 'border-top-width': box.top, + 'border-right-width': box.right, + 'border-bottom-width': box.bottom, + 'border-left-width': box.left + }); + } + + if (!self.parent()) { + self.keyboardNav = new KeyboardNavigation({ + root: self + }); + } + + return self; + }, + + /** + * Initializes the current controls layout rect. + * This will be executed by the layout managers to determine the + * default minWidth/minHeight etc. + * + * @method initLayoutRect + * @return {Object} Layout rect instance. + */ + initLayoutRect: function() { + var self = this, layoutRect = self._super(); + + // Recalc container size by asking layout manager + self._layout.recalc(self); + + return layoutRect; + }, + + /** + * Recalculates the positions of the controls in the current container. + * This is invoked by the reflow method and shouldn't be called directly. + * + * @method recalc + */ + recalc: function() { + var self = this, rect = self._layoutRect, lastRect = self._lastRect; + + if (!lastRect || lastRect.w != rect.w || lastRect.h != rect.h) { + self._layout.recalc(self); + rect = self.layoutRect(); + self._lastRect = {x: rect.x, y: rect.y, w: rect.w, h: rect.h}; + return true; + } + }, + + /** + * Reflows the current container and it's children and possible parents. + * This should be used after you for example append children to the current control so + * that the layout managers know that they need to reposition everything. + * + * @example + * container.append({type: 'button', text: 'My button'}).reflow(); + * + * @method reflow + * @return {tinymce.ui.Container} Current container instance. + */ + reflow: function() { + var i; + + if (this.visible()) { + Control.repaintControls = []; + Control.repaintControls.map = {}; + + this.recalc(); + i = Control.repaintControls.length; + + while (i--) { + Control.repaintControls[i].repaint(); + } + + // TODO: Fix me! + if (this.settings.layout !== "flow" && this.settings.layout !== "stack") { + this.repaint(); + } + + Control.repaintControls = []; + } + + return this; + } + }); +}); + +// Included from: js/tinymce/classes/ui/DragHelper.js + +/** + * DragHelper.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Drag/drop helper class. + * + * @example + * var dragHelper = new tinymce.ui.DragHelper('mydiv', { + * start: function(evt) { + * }, + * + * drag: function(evt) { + * }, + * + * end: function(evt) { + * } + * }); + * + * @class tinymce.ui.DragHelper + */ +define("tinymce/ui/DragHelper", [ + "tinymce/ui/DomUtils" +], function(DomUtils) { + "use strict"; + + function getDocumentSize() { + var doc = document, documentElement, body, scrollWidth, clientWidth; + var offsetWidth, scrollHeight, clientHeight, offsetHeight, max = Math.max; + + documentElement = doc.documentElement; + body = doc.body; + + scrollWidth = max(documentElement.scrollWidth, body.scrollWidth); + clientWidth = max(documentElement.clientWidth, body.clientWidth); + offsetWidth = max(documentElement.offsetWidth, body.offsetWidth); + + scrollHeight = max(documentElement.scrollHeight, body.scrollHeight); + clientHeight = max(documentElement.clientHeight, body.clientHeight); + offsetHeight = max(documentElement.offsetHeight, body.offsetHeight); + + return { + width: scrollWidth < offsetWidth ? clientWidth : scrollWidth, + height: scrollHeight < offsetHeight ? clientHeight : scrollHeight + }; + } + + return function(id, settings) { + var eventOverlayElm, doc = document, downButton, start, stop, drag, startX, startY; + + settings = settings || {}; + + function getHandleElm() { + return doc.getElementById(settings.handle || id); + } + + start = function(e) { + var docSize = getDocumentSize(), handleElm, cursor; + + e.preventDefault(); + downButton = e.button; + handleElm = getHandleElm(); + startX = e.screenX; + startY = e.screenY; + + // Grab cursor from handle + if (window.getComputedStyle) { + cursor = window.getComputedStyle(handleElm, null).getPropertyValue("cursor"); + } else { + cursor = handleElm.runtimeStyle.cursor; + } + + // Create event overlay and add it to document + eventOverlayElm = doc.createElement('div'); + DomUtils.css(eventOverlayElm, { + position: "absolute", + top: 0, left: 0, + width: docSize.width, + height: docSize.height, + zIndex: 0x7FFFFFFF, + opacity: 0.0001, + background: 'red', + cursor: cursor + }); + + doc.body.appendChild(eventOverlayElm); + + // Bind mouse events + DomUtils.on(doc, 'mousemove', drag); + DomUtils.on(doc, 'mouseup', stop); + + // Begin drag + settings.start(e); + }; + + drag = function(e) { + if (e.button !== downButton) { + return stop(e); + } + + e.deltaX = e.screenX - startX; + e.deltaY = e.screenY - startY; + + e.preventDefault(); + settings.drag(e); + }; + + stop = function(e) { + DomUtils.off(doc, 'mousemove', drag); + DomUtils.off(doc, 'mouseup', stop); + + eventOverlayElm.parentNode.removeChild(eventOverlayElm); + + if (settings.stop) { + settings.stop(e); + } + }; + + /** + * Destroys the drag/drop helper instance. + * + * @method destroy + */ + this.destroy = function() { + DomUtils.off(getHandleElm()); + }; + + DomUtils.on(getHandleElm(), 'mousedown', start); + }; +}); + +// Included from: js/tinymce/classes/ui/Scrollable.js + +/** + * Scrollable.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This mixin makes controls scrollable using custom scrollbars. + * + * @-x-less Scrollable.less + * @mixin tinymce.ui.Scrollable + */ +define("tinymce/ui/Scrollable", [ + "tinymce/ui/DomUtils", + "tinymce/ui/DragHelper" +], function(DomUtils, DragHelper) { + "use strict"; + + return { + init: function() { + var self = this; + self.on('repaint', self.renderScroll); + }, + + renderScroll: function() { + var self = this, margin = 2; + + function repaintScroll() { + var hasScrollH, hasScrollV, bodyElm; + + function repaintAxis(axisName, posName, sizeName, contentSizeName, hasScroll, ax) { + var containerElm, scrollBarElm, scrollThumbElm; + var containerSize, scrollSize, ratio, rect; + var posNameLower, sizeNameLower; + + scrollBarElm = self.getEl('scroll' + axisName); + if (scrollBarElm) { + posNameLower = posName.toLowerCase(); + sizeNameLower = sizeName.toLowerCase(); + + if (self.getEl('absend')) { + DomUtils.css(self.getEl('absend'), posNameLower, self.layoutRect()[contentSizeName] - 1); + } + + if (!hasScroll) { + DomUtils.css(scrollBarElm, 'display', 'none'); + return; + } + + DomUtils.css(scrollBarElm, 'display', 'block'); + containerElm = self.getEl('body'); + scrollThumbElm = self.getEl('scroll' + axisName + "t"); + containerSize = containerElm["client" + sizeName] - (margin * 2); + containerSize -= hasScrollH && hasScrollV ? scrollBarElm["client" + ax] : 0; + scrollSize = containerElm["scroll" + sizeName]; + ratio = containerSize / scrollSize; + + rect = {}; + rect[posNameLower] = containerElm["offset" + posName] + margin; + rect[sizeNameLower] = containerSize; + DomUtils.css(scrollBarElm, rect); + + rect = {}; + rect[posNameLower] = containerElm["scroll" + posName] * ratio; + rect[sizeNameLower] = containerSize * ratio; + DomUtils.css(scrollThumbElm, rect); + } + } + + bodyElm = self.getEl('body'); + hasScrollH = bodyElm.scrollWidth > bodyElm.clientWidth; + hasScrollV = bodyElm.scrollHeight > bodyElm.clientHeight; + + repaintAxis("h", "Left", "Width", "contentW", hasScrollH, "Height"); + repaintAxis("v", "Top", "Height", "contentH", hasScrollV, "Width"); + } + + function addScroll() { + function addScrollAxis(axisName, posName, sizeName, deltaPosName, ax) { + var scrollStart, axisId = self._id + '-scroll' + axisName, prefix = self.classPrefix; + + self.getEl().appendChild(DomUtils.createFragment( + '
    ' + + '
    ' + + '
    ' + )); + + self.draghelper = new DragHelper(axisId + 't', { + start: function() { + scrollStart = self.getEl('body')["scroll" + posName]; + DomUtils.addClass(DomUtils.get(axisId), prefix + 'active'); + }, + + drag: function(e) { + var ratio, hasScrollH, hasScrollV, containerSize, layoutRect = self.layoutRect(); + + hasScrollH = layoutRect.contentW > layoutRect.innerW; + hasScrollV = layoutRect.contentH > layoutRect.innerH; + containerSize = self.getEl('body')["client" + sizeName] - (margin * 2); + containerSize -= hasScrollH && hasScrollV ? self.getEl('scroll' + axisName)["client" + ax] : 0; + + ratio = containerSize / self.getEl('body')["scroll" + sizeName]; + self.getEl('body')["scroll" + posName] = scrollStart + (e["delta" + deltaPosName] / ratio); + }, + + stop: function() { + DomUtils.removeClass(DomUtils.get(axisId), prefix + 'active'); + } + }); +/* + self.on('click', function(e) { + if (e.target.id == self._id + '-scrollv') { + + } + });*/ + } + + self.addClass('scroll'); + + addScrollAxis("v", "Top", "Height", "Y", "Width"); + addScrollAxis("h", "Left", "Width", "X", "Height"); + } + + if (self.settings.autoScroll) { + if (!self._hasScroll) { + self._hasScroll = true; + addScroll(); + + self.on('wheel', function(e) { + var bodyEl = self.getEl('body'); + + bodyEl.scrollLeft += (e.deltaX || 0) * 10; + bodyEl.scrollTop += e.deltaY * 10; + + repaintScroll(); + }); + + DomUtils.on(self.getEl('body'), "scroll", repaintScroll); + } + + repaintScroll(); + } + } + }; +}); + +// Included from: js/tinymce/classes/ui/Panel.js + +/** + * Panel.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a new panel. + * + * @-x-less Panel.less + * @class tinymce.ui.Panel + * @extends tinymce.ui.Container + * @mixes tinymce.ui.Scrollable + */ +define("tinymce/ui/Panel", [ + "tinymce/ui/Container", + "tinymce/ui/Scrollable" +], function(Container, Scrollable) { + "use strict"; + + return Container.extend({ + Defaults: { + layout: 'fit', + containerCls: 'panel' + }, + + Mixins: [Scrollable], + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, layout = self._layout, innerHtml = self.settings.html; + + self.preRender(); + layout.preRender(self); + + if (typeof(innerHtml) == "undefined") { + innerHtml = ( + '
    ' + + layout.renderHtml(self) + + '
    ' + ); + } else { + if (typeof(innerHtml) == 'function') { + innerHtml = innerHtml.call(self); + } + + self._hasBody = false; + } + + return ( + '
    ' + + (self._preBodyHtml || '') + + innerHtml + + '
    ' + ); + } + }); +}); + +// Included from: js/tinymce/classes/ui/Movable.js + +/** + * Movable.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Movable mixin. Makes controls movable absolute and relative to other elements. + * + * @mixin tinymce.ui.Movable + */ +define("tinymce/ui/Movable", [ + "tinymce/ui/DomUtils" +], function(DomUtils) { + "use strict"; + + function calculateRelativePosition(ctrl, targetElm, rel) { + var ctrlElm, pos, x, y, selfW, selfH, targetW, targetH, viewport, size; + + viewport = DomUtils.getViewPort(); + + // Get pos of target + pos = DomUtils.getPos(targetElm); + x = pos.x; + y = pos.y; + + if (ctrl._fixed) { + x -= viewport.x; + y -= viewport.y; + } + + // Get size of self + ctrlElm = ctrl.getEl(); + size = DomUtils.getSize(ctrlElm); + selfW = size.width; + selfH = size.height; + + // Get size of target + size = DomUtils.getSize(targetElm); + targetW = size.width; + targetH = size.height; + + // Parse align string + rel = (rel || '').split(''); + + // Target corners + if (rel[0] === 'b') { + y += targetH; + } + + if (rel[1] === 'r') { + x += targetW; + } + + if (rel[0] === 'c') { + y += Math.round(targetH / 2); + } + + if (rel[1] === 'c') { + x += Math.round(targetW / 2); + } + + // Self corners + if (rel[3] === 'b') { + y -= selfH; + } + + if (rel[4] === 'r') { + x -= selfW; + } + + if (rel[3] === 'c') { + y -= Math.round(selfH / 2); + } + + if (rel[4] === 'c') { + x -= Math.round(selfW / 2); + } + + return { + x: x, + y: y, + w: selfW, + h: selfH + }; + } + + return { + /** + * Tests various positions to get the most suitable one. + * + * @method testMoveRel + * @param {DOMElement} elm Element to position against. + * @param {Array} rels Array with relative positions. + * @return {String} Best suitable relative position. + */ + testMoveRel: function(elm, rels) { + var viewPortRect = DomUtils.getViewPort(); + + for (var i = 0; i < rels.length; i++) { + var pos = calculateRelativePosition(this, elm, rels[i]); + + if (this._fixed) { + if (pos.x > 0 && pos.x + pos.w < viewPortRect.w && pos.y > 0 && pos.y + pos.h < viewPortRect.h) { + return rels[i]; + } + } else { + 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) { + return rels[i]; + } + } + } + + return rels[0]; + }, + + /** + * Move relative to the specified element. + * + * @method moveRel + * @param {Element} elm Element to move relative to. + * @param {String} rel Relative mode. For example: br-tl. + * @return {tinymce.ui.Control} Current control instance. + */ + moveRel: function(elm, rel) { + if (typeof(rel) != 'string') { + rel = this.testMoveRel(elm, rel); + } + + var pos = calculateRelativePosition(this, elm, rel); + return this.moveTo(pos.x, pos.y); + }, + + /** + * Move by a relative x, y values. + * + * @method moveBy + * @param {Number} dx Relative x position. + * @param {Number} dy Relative y position. + * @return {tinymce.ui.Control} Current control instance. + */ + moveBy: function(dx, dy) { + var self = this, rect = self.layoutRect(); + + self.moveTo(rect.x + dx, rect.y + dy); + + return self; + }, + + /** + * Move to absolute position. + * + * @method moveTo + * @param {Number} x Absolute x position. + * @param {Number} y Absolute y position. + * @return {tinymce.ui.Control} Current control instance. + */ + moveTo: function(x, y) { + var self = this; + + // TODO: Move this to some global class + function contrain(value, max, size) { + if (value < 0) { + return 0; + } + + if (value + size > max) { + value = max - size; + return value < 0 ? 0 : value; + } + + return value; + } + + if (self.settings.constrainToViewport) { + var viewPortRect = DomUtils.getViewPort(window); + var layoutRect = self.layoutRect(); + + x = contrain(x, viewPortRect.w + viewPortRect.x, layoutRect.w); + y = contrain(y, viewPortRect.h + viewPortRect.y, layoutRect.h); + } + + if (self._rendered) { + self.layoutRect({x: x, y: y}).repaint(); + } else { + self.settings.x = x; + self.settings.y = y; + } + + self.fire('move', {x: x, y: y}); + + return self; + } + }; +}); + +// Included from: js/tinymce/classes/ui/Resizable.js + +/** + * Resizable.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Resizable mixin. Enables controls to be resized. + * + * @mixin tinymce.ui.Resizable + */ +define("tinymce/ui/Resizable", [ + "tinymce/ui/DomUtils" +], function(DomUtils) { + "use strict"; + + return { + /** + * Resizes the control to contents. + * + * @method resizeToContent + */ + resizeToContent: function() { + this._layoutRect.autoResize = true; + this._lastRect = null; + this.reflow(); + }, + + /** + * Resizes the control to a specific width/height. + * + * @method resizeTo + * @param {Number} w Control width. + * @param {Number} h Control height. + * @return {tinymce.ui.Control} Current control instance. + */ + resizeTo: function(w, h) { + // TODO: Fix hack + if (w <= 1 || h <= 1) { + var rect = DomUtils.getWindowSize(); + + w = w <= 1 ? w * rect.w : w; + h = h <= 1 ? h * rect.h : h; + } + + this._layoutRect.autoResize = false; + return this.layoutRect({minW: w, minH: h, w: w, h: h}).reflow(); + }, + + /** + * Resizes the control to a specific relative width/height. + * + * @method resizeBy + * @param {Number} dw Relative control width. + * @param {Number} dh Relative control height. + * @return {tinymce.ui.Control} Current control instance. + */ + resizeBy: function(dw, dh) { + var self = this, rect = self.layoutRect(); + + return self.resizeTo(rect.w + dw, rect.h + dh); + } + }; +}); + +// Included from: js/tinymce/classes/ui/FloatPanel.js + +/** + * FloatPanel.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class creates a floating panel. + * + * @-x-less FloatPanel.less + * @class tinymce.ui.FloatPanel + * @extends tinymce.ui.Panel + * @mixes tinymce.ui.Movable + * @mixes tinymce.ui.Resizable + */ +define("tinymce/ui/FloatPanel", [ + "tinymce/ui/Panel", + "tinymce/ui/Movable", + "tinymce/ui/Resizable", + "tinymce/ui/DomUtils" +], function(Panel, Movable, Resizable, DomUtils) { + "use strict"; + + var documentClickHandler, documentScrollHandler, visiblePanels = []; + var zOrder = [], hasModal; + + var FloatPanel = Panel.extend({ + Mixins: [Movable, Resizable], + + /** + * Constructs a new control instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + * @setting {Boolean} autohide Automatically hide the panel. + */ + init: function(settings) { + var self = this; + + function reorder() { + var i, zIndex = FloatPanel.zIndex || 0xFFFF, topModal; + + if (zOrder.length) { + for (i = 0; i < zOrder.length; i++) { + if (zOrder[i].modal) { + zIndex++; + topModal = zOrder[i]; + } + + zOrder[i].getEl().style.zIndex = zIndex; + zOrder[i].zIndex = zIndex; + zIndex++; + } + } + + var modalBlockEl = document.getElementById(self.classPrefix + 'modal-block'); + + if (topModal) { + DomUtils.css(modalBlockEl, 'z-index', topModal.zIndex - 1); + } else if (modalBlockEl) { + modalBlockEl.parentNode.removeChild(modalBlockEl); + hasModal = false; + } + + FloatPanel.currentZIndex = zIndex; + } + + function isChildOf(ctrl, parent) { + while (ctrl) { + if (ctrl == parent) { + return true; + } + + ctrl = ctrl.parent(); + } + } + + /** + * Repositions the panel to the top of page if the panel is outside of the visual viewport. It will + * also reposition all child panels of the current panel. + */ + function repositionPanel(panel) { + var scrollY = DomUtils.getViewPort().y; + + function toggleFixedChildPanels(fixed, deltaY) { + var parent; + + for (var i = 0; i < visiblePanels.length; i++) { + if (visiblePanels[i] != panel) { + parent = visiblePanels[i].parent(); + + while (parent && (parent = parent.parent())) { + if (parent == panel) { + visiblePanels[i].fixed(fixed).moveBy(0, deltaY).repaint(); + } + } + } + } + } + + if (panel.settings.autofix) { + if (!panel._fixed) { + panel._autoFixY = panel.layoutRect().y; + + if (panel._autoFixY < scrollY) { + panel.fixed(true).layoutRect({y: 0}).repaint(); + toggleFixedChildPanels(true, scrollY - panel._autoFixY); + } + } else { + if (panel._autoFixY > scrollY) { + panel.fixed(false).layoutRect({y: panel._autoFixY}).repaint(); + toggleFixedChildPanels(false, panel._autoFixY - scrollY); + } + } + } + } + + self._super(settings); + self._eventsRoot = self; + + self.addClass('floatpanel'); + + // Hide floatpanes on click out side the root button + if (settings.autohide) { + if (!documentClickHandler) { + documentClickHandler = function(e) { + // Hide any float panel when a click is out side that float panel and the + // float panels direct parent for example a click on a menu button + var i = visiblePanels.length; + while (i--) { + var panel = visiblePanels[i], clickCtrl = panel.getParentCtrl(e.target); + + if (panel.settings.autohide) { + if (clickCtrl) { + if (isChildOf(clickCtrl, panel) || panel.parent() === clickCtrl) { + continue; + } + } + + e = panel.fire('autohide', {target: e.target}); + if (!e.isDefaultPrevented()) { + panel.hide(); + } + } + } + }; + + DomUtils.on(document, 'click', documentClickHandler); + } + + visiblePanels.push(self); + } + + if (settings.autofix) { + if (!documentScrollHandler) { + documentScrollHandler = function() { + var i; + + i = visiblePanels.length; + while (i--) { + repositionPanel(visiblePanels[i]); + } + }; + + DomUtils.on(window, 'scroll', documentScrollHandler); + } + + self.on('move', function() { + repositionPanel(this); + }); + } + + self.on('postrender show', function(e) { + if (e.control == self) { + var modalBlockEl, prefix = self.classPrefix; + + if (self.modal && !hasModal) { + modalBlockEl = DomUtils.createFragment('
    '); + modalBlockEl = modalBlockEl.firstChild; + + self.getContainerElm().appendChild(modalBlockEl); + + setTimeout(function() { + DomUtils.addClass(modalBlockEl, prefix + 'in'); + DomUtils.addClass(self.getEl(), prefix + 'in'); + }, 0); + + hasModal = true; + } + + zOrder.push(self); + reorder(); + } + }); + + self.on('close hide', function(e) { + if (e.control == self) { + var i = zOrder.length; + + while (i--) { + if (zOrder[i] === self) { + zOrder.splice(i, 1); + } + } + + reorder(); + } + }); + + self.on('show', function() { + self.parents().each(function(ctrl) { + if (ctrl._fixed) { + self.fixed(true); + return false; + } + }); + }); + + if (settings.popover) { + self._preBodyHtml = '
    '; + self.addClass('popover').addClass('bottom').addClass(self.isRtl() ? 'end' : 'start'); + } + }, + + fixed: function(state) { + var self = this; + + if (self._fixed != state) { + if (self._rendered) { + var viewport = DomUtils.getViewPort(); + + if (state) { + self.layoutRect().y -= viewport.y; + } else { + self.layoutRect().y += viewport.y; + } + } + + self.toggleClass('fixed', state); + self._fixed = state; + } + + return self; + }, + + /** + * Shows the current float panel. + * + * @method show + * @return {tinymce.ui.FloatPanel} Current floatpanel instance. + */ + show: function() { + var self = this, i, state = self._super(); + + i = visiblePanels.length; + while (i--) { + if (visiblePanels[i] === self) { + break; + } + } + + if (i === -1) { + visiblePanels.push(self); + } + + return state; + }, + + /** + * Hides the current float panel. + * + * @method hide + * @return {tinymce.ui.FloatPanel} Current floatpanel instance. + */ + hide: function() { + removeVisiblePanel(this); + return this._super(); + }, + + /** + * Hides all visible the float panels. + * + * @method hideAll + */ + hideAll: function() { + FloatPanel.hideAll(); + }, + + /** + * Closes the float panel. This will remove the float panel from page and fire the close event. + * + * @method close + */ + close: function() { + var self = this; + + self.fire('close'); + + return self.remove(); + }, + + /** + * Removes the float panel from page. + * + * @method remove + */ + remove: function() { + removeVisiblePanel(this); + this._super(); + }, + + postRender: function() { + var self = this; + + if (self.settings.bodyRole) { + this.getEl('body').setAttribute('role', self.settings.bodyRole); + } + + return self._super(); + } + }); + + /** + * Hides all visible the float panels. + * + * @static + * @method hideAll + */ + FloatPanel.hideAll = function() { + var i = visiblePanels.length; + + while (i--) { + var panel = visiblePanels[i]; + + if (panel && panel.settings.autohide) { + panel.hide(); + visiblePanels.splice(i, 1); + } + } + }; + + function removeVisiblePanel(panel) { + var i; + + i = visiblePanels.length; + while (i--) { + if (visiblePanels[i] === panel) { + visiblePanels.splice(i, 1); + } + } + + i = zOrder.length; + while (i--) { + if (zOrder[i] === panel) { + zOrder.splice(i, 1); + } + } + } + + return FloatPanel; +}); + +// Included from: js/tinymce/classes/ui/Window.js + +/** + * Window.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a new window. + * + * @-x-less Window.less + * @class tinymce.ui.Window + * @extends tinymce.ui.FloatPanel + */ +define("tinymce/ui/Window", [ + "tinymce/ui/FloatPanel", + "tinymce/ui/Panel", + "tinymce/ui/DomUtils", + "tinymce/ui/DragHelper" +], function(FloatPanel, Panel, DomUtils, DragHelper) { + "use strict"; + + var Window = FloatPanel.extend({ + modal: true, + + Defaults: { + border: 1, + layout: 'flex', + containerCls: 'panel', + role: 'dialog', + callbacks: { + submit: function() { + this.fire('submit', {data: this.toJSON()}); + }, + + close: function() { + this.close(); + } + } + }, + + /** + * Constructs a instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + */ + init: function(settings) { + var self = this; + + self._super(settings); + + if (self.isRtl()) { + self.addClass('rtl'); + } + + self.addClass('window'); + self._fixed = true; + + // Create statusbar + if (settings.buttons) { + self.statusbar = new Panel({ + layout: 'flex', + border: '1 0 0 0', + spacing: 3, + padding: 10, + align: 'center', + pack: self.isRtl() ? 'start' : 'end', + defaults: { + type: 'button' + }, + items: settings.buttons + }); + + self.statusbar.addClass('foot'); + self.statusbar.parent(self); + } + + self.on('click', function(e) { + if (e.target.className.indexOf(self.classPrefix + 'close') != -1) { + self.close(); + } + }); + + self.on('cancel', function() { + self.close(); + }); + + self.aria('describedby', self.describedBy || self._id + '-none'); + self.aria('label', settings.title); + self._fullscreen = false; + }, + + /** + * Recalculates the positions of the controls in the current container. + * This is invoked by the reflow method and shouldn't be called directly. + * + * @method recalc + */ + recalc: function() { + var self = this, statusbar = self.statusbar, layoutRect, width, x, needsRecalc; + + if (self._fullscreen) { + self.layoutRect(DomUtils.getWindowSize()); + self.layoutRect().contentH = self.layoutRect().innerH; + } + + self._super(); + + layoutRect = self.layoutRect(); + + // Resize window based on title width + if (self.settings.title && !self._fullscreen) { + width = layoutRect.headerW; + if (width > layoutRect.w) { + x = layoutRect.x - Math.max(0, width / 2); + self.layoutRect({w: width, x: x}); + needsRecalc = true; + } + } + + // Resize window based on statusbar width + if (statusbar) { + statusbar.layoutRect({w: self.layoutRect().innerW}).recalc(); + + width = statusbar.layoutRect().minW + layoutRect.deltaW; + if (width > layoutRect.w) { + x = layoutRect.x - Math.max(0, width - layoutRect.w); + self.layoutRect({w: width, x: x}); + needsRecalc = true; + } + } + + // Recalc body and disable auto resize + if (needsRecalc) { + self.recalc(); + } + }, + + /** + * Initializes the current controls layout rect. + * This will be executed by the layout managers to determine the + * default minWidth/minHeight etc. + * + * @method initLayoutRect + * @return {Object} Layout rect instance. + */ + initLayoutRect: function() { + var self = this, layoutRect = self._super(), deltaH = 0, headEl; + + // Reserve vertical space for title + if (self.settings.title && !self._fullscreen) { + headEl = self.getEl('head'); + + var size = DomUtils.getSize(headEl); + + layoutRect.headerW = size.width; + layoutRect.headerH = size.height; + + deltaH += layoutRect.headerH; + } + + // Reserve vertical space for statusbar + if (self.statusbar) { + deltaH += self.statusbar.layoutRect().h; + } + + layoutRect.deltaH += deltaH; + layoutRect.minH += deltaH; + //layoutRect.innerH -= deltaH; + layoutRect.h += deltaH; + + var rect = DomUtils.getWindowSize(); + + layoutRect.x = Math.max(0, rect.w / 2 - layoutRect.w / 2); + layoutRect.y = Math.max(0, rect.h / 2 - layoutRect.h / 2); + + return layoutRect; + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, layout = self._layout, id = self._id, prefix = self.classPrefix; + var settings = self.settings, headerHtml = '', footerHtml = '', html = settings.html; + + self.preRender(); + layout.preRender(self); + + if (settings.title) { + headerHtml = ( + '
    ' + + '
    ' + self.encode(settings.title) + '
    ' + + '' + + '
    ' + + '
    ' + ); + } + + if (settings.url) { + html = ''; + } + + if (typeof(html) == "undefined") { + html = layout.renderHtml(self); + } + + if (self.statusbar) { + footerHtml = self.statusbar.renderHtml(); + } + + return ( + '
    ' + + '
    ' + + headerHtml + + '
    ' + + html + + '
    ' + + footerHtml + + '
    ' + + '
    ' + ); + }, + + /** + * Switches the window fullscreen mode. + * + * @method fullscreen + * @param {Boolean} state True/false state. + * @return {tinymce.ui.Window} Current window instance. + */ + fullscreen: function(state) { + var self = this, documentElement = document.documentElement, slowRendering, prefix = self.classPrefix, layoutRect; + + if (state != self._fullscreen) { + DomUtils.on(window, 'resize', function() { + var time; + + if (self._fullscreen) { + // Time the layout time if it's to slow use a timeout to not hog the CPU + if (!slowRendering) { + time = new Date().getTime(); + + var rect = DomUtils.getWindowSize(); + self.moveTo(0, 0).resizeTo(rect.w, rect.h); + + if ((new Date().getTime()) - time > 50) { + slowRendering = true; + } + } else { + if (!self._timer) { + self._timer = setTimeout(function() { + var rect = DomUtils.getWindowSize(); + self.moveTo(0, 0).resizeTo(rect.w, rect.h); + + self._timer = 0; + }, 50); + } + } + } + }); + + layoutRect = self.layoutRect(); + self._fullscreen = state; + + if (!state) { + self._borderBox = self.parseBox(self.settings.border); + self.getEl('head').style.display = ''; + layoutRect.deltaH += layoutRect.headerH; + DomUtils.removeClass(documentElement, prefix + 'fullscreen'); + DomUtils.removeClass(document.body, prefix + 'fullscreen'); + self.removeClass('fullscreen'); + self.moveTo(self._initial.x, self._initial.y).resizeTo(self._initial.w, self._initial.h); + } else { + self._initial = {x: layoutRect.x, y: layoutRect.y, w: layoutRect.w, h: layoutRect.h}; + + self._borderBox = self.parseBox('0'); + self.getEl('head').style.display = 'none'; + layoutRect.deltaH -= layoutRect.headerH + 2; + DomUtils.addClass(documentElement, prefix + 'fullscreen'); + DomUtils.addClass(document.body, prefix + 'fullscreen'); + self.addClass('fullscreen'); + + var rect = DomUtils.getWindowSize(); + self.moveTo(0, 0).resizeTo(rect.w, rect.h); + } + } + + return self.reflow(); + }, + + /** + * Called after the control has been rendered. + * + * @method postRender + */ + postRender: function() { + var self = this, startPos; + + setTimeout(function() { + self.addClass('in'); + }, 0); + + self._super(); + + if (self.statusbar) { + self.statusbar.postRender(); + } + + self.focus(); + + this.dragHelper = new DragHelper(self._id + '-dragh', { + start: function() { + startPos = { + x: self.layoutRect().x, + y: self.layoutRect().y + }; + }, + + drag: function(e) { + self.moveTo(startPos.x + e.deltaX, startPos.y + e.deltaY); + } + }); + + self.on('submit', function(e) { + if (!e.isDefaultPrevented()) { + self.close(); + } + }); + }, + + /** + * Fires a submit event with the serialized form. + * + * @method submit + * @return {Object} Event arguments object. + */ + submit: function() { + return this.fire('submit', {data: this.toJSON()}); + }, + + /** + * Removes the current control from DOM and from UI collections. + * + * @method remove + * @return {tinymce.ui.Control} Current control instance. + */ + remove: function() { + var self = this, prefix = self.classPrefix; + + self.dragHelper.destroy(); + self._super(); + + if (self.statusbar) { + this.statusbar.remove(); + } + + if (self._fullscreen) { + DomUtils.removeClass(document.documentElement, prefix + 'fullscreen'); + DomUtils.removeClass(document.body, prefix + 'fullscreen'); + } + } + }); + + return Window; +}); + +// Included from: js/tinymce/classes/ui/MessageBox.js + +/** + * MessageBox.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class is used to create MessageBoxes like alerts/confirms etc. + * + * @class tinymce.ui.Window + * @extends tinymce.ui.FloatPanel + */ +define("tinymce/ui/MessageBox", [ + "tinymce/ui/Window" +], function(Window) { + "use strict"; + + var MessageBox = Window.extend({ + /** + * Constructs a instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + */ + init: function(settings) { + settings = { + border: 1, + padding: 20, + layout: 'flex', + pack: "center", + align: "center", + containerCls: 'panel', + autoScroll: true, + buttons: {type: "button", text: "Ok", action: "ok"}, + items: { + type: "label", + multiline: true, + maxWidth: 500, + maxHeight: 200 + } + }; + + this._super(settings); + }, + + Statics: { + /** + * Ok buttons constant. + * + * @static + * @final + * @field {Number} OK + */ + OK: 1, + + /** + * Ok/cancel buttons constant. + * + * @static + * @final + * @field {Number} OK_CANCEL + */ + OK_CANCEL: 2, + + /** + * yes/no buttons constant. + * + * @static + * @final + * @field {Number} YES_NO + */ + YES_NO: 3, + + /** + * yes/no/cancel buttons constant. + * + * @static + * @final + * @field {Number} YES_NO_CANCEL + */ + YES_NO_CANCEL: 4, + + /** + * Constructs a new message box and renders it to the body element. + * + * @static + * @method msgBox + * @param {Object} settings Name/value object with settings. + */ + msgBox: function(settings) { + var buttons, callback = settings.callback || function() {}; + + switch (settings.buttons) { + case MessageBox.OK_CANCEL: + buttons = [ + {type: "button", text: "Ok", subtype: "primary", onClick: function(e) { + e.control.parents()[1].close(); + callback(true); + }}, + + {type: "button", text: "Cancel", onClick: function(e) { + e.control.parents()[1].close(); + callback(false); + }} + ]; + break; + + case MessageBox.YES_NO: + buttons = [ + {type: "button", text: "Ok", subtype: "primary", onClick: function(e) { + e.control.parents()[1].close(); + callback(true); + }} + ]; + break; + + case MessageBox.YES_NO_CANCEL: + buttons = [ + {type: "button", text: "Ok", subtype: "primary", onClick: function(e) { + e.control.parents()[1].close(); + }} + ]; + break; + + default: + buttons = [ + {type: "button", text: "Ok", subtype: "primary", onClick: function(e) { + e.control.parents()[1].close(); + callback(true); + }} + ]; + break; + } + + return new Window({ + padding: 20, + x: settings.x, + y: settings.y, + minWidth: 300, + minHeight: 100, + layout: "flex", + pack: "center", + align: "center", + buttons: buttons, + title: settings.title, + role: 'alertdialog', + items: { + type: "label", + multiline: true, + maxWidth: 500, + maxHeight: 200, + text: settings.text + }, + onPostRender: function() { + this.aria('describedby', this.items()[0]._id); + }, + onClose: settings.onClose, + onCancel: function() { + callback(false); + } + }).renderTo(document.body).reflow(); + }, + + /** + * Creates a new alert dialog. + * + * @method alert + * @param {Object} settings Settings for the alert dialog. + * @param {function} [callback] Callback to execute when the user makes a choice. + */ + alert: function(settings, callback) { + if (typeof(settings) == "string") { + settings = {text: settings}; + } + + settings.callback = callback; + return MessageBox.msgBox(settings); + }, + + /** + * Creates a new confirm dialog. + * + * @method confirm + * @param {Object} settings Settings for the confirm dialog. + * @param {function} [callback] Callback to execute when the user makes a choice. + */ + confirm: function(settings, callback) { + if (typeof(settings) == "string") { + settings = {text: settings}; + } + + settings.callback = callback; + settings.buttons = MessageBox.OK_CANCEL; + + return MessageBox.msgBox(settings); + } + } + }); + + return MessageBox; +}); + +// Included from: js/tinymce/classes/WindowManager.js + +/** + * WindowManager.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class handles the creation of native windows and dialogs. This class can be extended to provide for example inline dialogs. + * + * @class tinymce.WindowManager + * @example + * // Opens a new dialog with the file.htm file and the size 320x240 + * // It also adds a custom parameter this can be retrieved by using tinyMCEPopup.getWindowArg inside the dialog. + * tinymce.activeEditor.windowManager.open({ + * url: 'file.htm', + * width: 320, + * height: 240 + * }, { + * custom_param: 1 + * }); + * + * // Displays an alert box using the active editors window manager instance + * tinymce.activeEditor.windowManager.alert('Hello world!'); + * + * // Displays an confirm box and an alert message will be displayed depending on what you choose in the confirm + * tinymce.activeEditor.windowManager.confirm("Do you want to do something", function(s) { + * if (s) + * tinymce.activeEditor.windowManager.alert("Ok"); + * else + * tinymce.activeEditor.windowManager.alert("Cancel"); + * }); + */ +define("tinymce/WindowManager", [ + "tinymce/ui/Window", + "tinymce/ui/MessageBox" +], function(Window, MessageBox) { + return function(editor) { + var self = this, windows = []; + + function getTopMostWindow() { + if (windows.length) { + return windows[windows.length - 1]; + } + } + + self.windows = windows; + + /** + * Opens a new window. + * + * @method open + * @param {Object} args Optional name/value settings collection contains things like width/height/url etc. + * @option {String} title Window title. + * @option {String} file URL of the file to open in the window. + * @option {Number} width Width in pixels. + * @option {Number} height Height in pixels. + * @option {Boolean} resizable Specifies whether the popup window is resizable or not. + * @option {Boolean} maximizable Specifies whether the popup window has a "maximize" button and can get maximized or not. + * @option {String/Boolean} scrollbars Specifies whether the popup window can have scrollbars if required (i.e. content + * larger than the popup size specified). + */ + self.open = function(args, params) { + var win; + + editor.editorManager.activeEditor = editor; + + args.title = args.title || ' '; + + // Handle URL + args.url = args.url || args.file; // Legacy + if (args.url) { + args.width = parseInt(args.width || 320, 10); + args.height = parseInt(args.height || 240, 10); + } + + // Handle body + if (args.body) { + args.items = { + defaults: args.defaults, + type: args.bodyType || 'form', + items: args.body + }; + } + + if (!args.url && !args.buttons) { + args.buttons = [ + {text: 'Ok', subtype: 'primary', onclick: function() { + win.find('form')[0].submit(); + }}, + + {text: 'Cancel', onclick: function() { + win.close(); + }} + ]; + } + + win = new Window(args); + windows.push(win); + + win.on('close', function() { + var i = windows.length; + + while (i--) { + if (windows[i] === win) { + windows.splice(i, 1); + } + } + + editor.focus(); + }); + + // Handle data + if (args.data) { + win.on('postRender', function() { + this.find('*').each(function(ctrl) { + var name = ctrl.name(); + + if (name in args.data) { + ctrl.value(args.data[name]); + } + }); + }); + } + + // store args and parameters + win.features = args || {}; + win.params = params || {}; + + // Takes a snapshot in the FocusManager of the selection before focus is lost to dialog + editor.nodeChanged(); + + return win.renderTo(document.body).reflow(); + }; + + /** + * Creates a alert dialog. Please don't use the blocking behavior of this + * native version use the callback method instead then it can be extended. + * + * @method alert + * @param {String} message Text to display in the new alert dialog. + * @param {function} callback Callback function to be executed after the user has selected ok. + * @param {Object} scope Optional scope to execute the callback in. + * @example + * // Displays an alert box using the active editors window manager instance + * tinymce.activeEditor.windowManager.alert('Hello world!'); + */ + self.alert = function(message, callback, scope) { + MessageBox.alert(message, function() { + if (callback) { + callback.call(scope || this); + } else { + editor.focus(); + } + }); + }; + + /** + * Creates a confirm dialog. Please don't use the blocking behavior of this + * native version use the callback method instead then it can be extended. + * + * @method confirm + * @param {String} messageText to display in the new confirm dialog. + * @param {function} callback Callback function to be executed after the user has selected ok or cancel. + * @param {Object} scope Optional scope to execute the callback in. + * @example + * // Displays an confirm box and an alert message will be displayed depending on what you choose in the confirm + * tinymce.activeEditor.windowManager.confirm("Do you want to do something", function(s) { + * if (s) + * tinymce.activeEditor.windowManager.alert("Ok"); + * else + * tinymce.activeEditor.windowManager.alert("Cancel"); + * }); + */ + self.confirm = function(message, callback, scope) { + MessageBox.confirm(message, function(state) { + callback.call(scope || this, state); + }); + }; + + /** + * Closes the top most window. + * + * @method close + */ + self.close = function() { + if (getTopMostWindow()) { + getTopMostWindow().close(); + } + }; + + /** + * Returns the params of the last window open call. This can be used in iframe based + * dialog to get params passed from the tinymce plugin. + * + * @example + * var dialogArguments = top.tinymce.activeEditor.windowManager.getParams(); + * + * @method getParams + * @return {Object} Name/value object with parameters passed from windowManager.open call. + */ + self.getParams = function() { + return getTopMostWindow() ? getTopMostWindow().params : null; + }; + + /** + * Sets the params of the last opened window. + * + * @method setParams + * @param {Object} params Params object to set for the last opened window. + */ + self.setParams = function(params) { + if (getTopMostWindow()) { + getTopMostWindow().params = params; + } + }; + }; +}); + +// Included from: js/tinymce/classes/util/Quirks.js + +/** + * Quirks.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + * + * @ignore-file + */ + +/** + * This file includes fixes for various browser quirks it's made to make it easy to add/remove browser specific fixes. + * + * @class tinymce.util.Quirks + */ +define("tinymce/util/Quirks", [ + "tinymce/util/VK", + "tinymce/dom/RangeUtils", + "tinymce/html/Node", + "tinymce/html/Entities", + "tinymce/Env", + "tinymce/util/Tools" +], function(VK, RangeUtils, Node, Entities, Env, Tools) { + return function(editor) { + var each = Tools.each; + var BACKSPACE = VK.BACKSPACE, DELETE = VK.DELETE, dom = editor.dom, selection = editor.selection, + settings = editor.settings, parser = editor.parser, serializer = editor.serializer; + var isGecko = Env.gecko, isIE = Env.ie, isWebKit = Env.webkit; + + /** + * Executes a command with a specific state this can be to enable/disable browser editing features. + */ + function setEditorCommandState(cmd, state) { + try { + editor.getDoc().execCommand(cmd, false, state); + } catch (ex) { + // Ignore + } + } + + /** + * Returns current IE document mode. + */ + function getDocumentMode() { + var documentMode = editor.getDoc().documentMode; + + return documentMode ? documentMode : 6; + } + + /** + * Returns true/false if the event is prevented or not. + * + * @private + * @param {Event} e Event object. + * @return {Boolean} true/false if the event is prevented or not. + */ + function isDefaultPrevented(e) { + return e.isDefaultPrevented(); + } + + /** + * Fixes a WebKit bug when deleting contents using backspace or delete key. + * WebKit will produce a span element if you delete across two block elements. + * + * Example: + *

    a

    |b

    + * + * Will produce this on backspace: + *

    ab

    + * + * This fixes the backspace to produce: + *

    a|b

    + * + * See bug: https://bugs.webkit.org/show_bug.cgi?id=45784 + * + * This fixes the following delete scenarios: + * 1. Delete by pressing backspace key. + * 2. Delete by pressing delete key. + * 3. Delete by pressing backspace key with ctrl/cmd (Word delete). + * 4. Delete by pressing delete key with ctrl/cmd (Word delete). + * 5. Delete by drag/dropping contents inside the editor. + * 6. Delete by using Cut Ctrl+X/Cmd+X. + * 7. Delete by selecting contents and writing a character.' + * + * This code is a ugly hack since writing full custom delete logic for just this bug + * fix seemed like a huge task. I hope we can remove this before the year 2030. + */ + function cleanupStylesWhenDeleting() { + var doc = editor.getDoc(), urlPrefix = 'data:text/mce-internal,'; + var MutationObserver = window.MutationObserver, olderWebKit; + + // Add mini polyfill for older WebKits + // TODO: Remove this when old Safari versions gets updated + if (!MutationObserver) { + olderWebKit = true; + + MutationObserver = function() { + var records = [], target; + + function nodeInsert(e) { + var target = e.relatedNode || e.target; + records.push({target: target, addedNodes: [target]}); + } + + function attrModified(e) { + var target = e.relatedNode || e.target; + records.push({target: target, attributeName: e.attrName}); + } + + this.observe = function(node) { + target = node; + target.addEventListener('DOMSubtreeModified', nodeInsert, false); + target.addEventListener('DOMNodeInsertedIntoDocument', nodeInsert, false); + target.addEventListener('DOMNodeInserted', nodeInsert, false); + target.addEventListener('DOMAttrModified', attrModified, false); + }; + + this.disconnect = function() { + target.removeEventListener('DOMNodeInserted', nodeInsert); + target.removeEventListener('DOMAttrModified', attrModified); + target.removeEventListener('DOMSubtreeModified', nodeInsert, false); + }; + + this.takeRecords = function() { + return records; + }; + }; + } + + function customDelete(isForward) { + var mutationObserver = new MutationObserver(function() {}); + + Tools.each(editor.getBody().getElementsByTagName('*'), function(elm) { + // Mark existing spans + if (elm.tagName == 'SPAN') { + elm.setAttribute('mce-data-marked', 1); + } + + // Make sure all elements has a data-mce-style attribute + if (!elm.hasAttribute('data-mce-style') && elm.hasAttribute('style')) { + editor.dom.setAttrib(elm, 'style', elm.getAttribute('style')); + } + }); + + // Observe added nodes and style attribute changes + mutationObserver.observe(editor.getDoc(), { + childList: true, + attributes: true, + subtree: true, + attributeFilter: ['style'] + }); + + editor.getDoc().execCommand(isForward ? 'ForwardDelete' : 'Delete', false, null); + + var rng = editor.selection.getRng(); + var caretElement = rng.startContainer.parentNode; + + Tools.each(mutationObserver.takeRecords(), function(record) { + // Restore style attribute to previous value + if (record.attributeName == "style") { + var oldValue = record.target.getAttribute('data-mce-style'); + + if (oldValue) { + record.target.setAttribute("style", oldValue); + } else { + record.target.removeAttribute("style"); + } + } + + // Remove all spans that isn't maked and retain selection + Tools.each(record.addedNodes, function(node) { + if (node.nodeName == "SPAN" && !node.getAttribute('mce-data-marked')) { + var offset, container; + + if (node == caretElement) { + offset = rng.startOffset; + container = node.firstChild; + } + + dom.remove(node, true); + + if (container) { + rng.setStart(container, offset); + rng.setEnd(container, offset); + editor.selection.setRng(rng); + } + } + }); + }); + + mutationObserver.disconnect(); + + // Remove any left over marks + Tools.each(editor.dom.select('span[mce-data-marked]'), function(span) { + span.removeAttribute('mce-data-marked'); + }); + } + + editor.on('keydown', function(e) { + var isForward = e.keyCode == DELETE, isMeta = VK.metaKeyPressed(e); + + if (!isDefaultPrevented(e) && (isForward || e.keyCode == BACKSPACE)) { + var rng = editor.selection.getRng(), container = rng.startContainer, offset = rng.startOffset; + + // Ignore non meta delete in the where there is text before/after the caret + if (!isMeta && rng.collapsed && container.nodeType == 3) { + if (isForward ? offset < container.data.length : offset > 0) { + return; + } + } + + e.preventDefault(); + + if (isMeta) { + editor.selection.getSel().modify("extend", isForward ? "forward" : "backward", "word"); + } + + customDelete(isForward); + } + }); + + editor.on('keypress', function(e) { + if (!isDefaultPrevented(e) && !selection.isCollapsed() && e.charCode && !VK.metaKeyPressed(e)) { + e.preventDefault(); + customDelete(true); + editor.selection.setContent(String.fromCharCode(e.charCode)); + } + }); + + editor.addCommand('Delete', function() { + customDelete(); + }); + + editor.addCommand('ForwardDelete', function() { + customDelete(true); + }); + + // Older WebKits doesn't properly handle the clipboard so we can't add the rest + if (olderWebKit) { + return; + } + + editor.on('dragstart', function(e) { + // Safari doesn't support custom dataTransfer items so we can only use URL and Text + e.dataTransfer.setData('URL', 'data:text/mce-internal,' + escape(editor.selection.getContent())); + }); + + editor.on('drop', function(e) { + if (!isDefaultPrevented(e)) { + var internalContent = e.dataTransfer.getData('URL'); + + if (!internalContent || internalContent.indexOf(urlPrefix) == -1 || !doc.caretRangeFromPoint) { + return; + } + + internalContent = unescape(internalContent.substr(urlPrefix.length)); + if (doc.caretRangeFromPoint) { + e.preventDefault(); + customDelete(); + editor.selection.setRng(doc.caretRangeFromPoint(e.x, e.y)); + editor.insertContent(internalContent); + } + } + }); + + editor.on('cut', function(e) { + if (!isDefaultPrevented(e) && e.clipboardData) { + e.preventDefault(); + e.clipboardData.clearData(); + e.clipboardData.setData('text/html', editor.selection.getContent()); + e.clipboardData.setData('text/plain', editor.selection.getContent({format: 'text'})); + customDelete(true); + } + }); + } + + /** + * Makes sure that the editor body becomes empty when backspace or delete is pressed in empty editors. + * + * For example: + *

    |

    + * + * Or: + *

    |

    + * + * Or: + * [

    ] + */ + function emptyEditorWhenDeleting() { + function serializeRng(rng) { + var body = dom.create("body"); + var contents = rng.cloneContents(); + body.appendChild(contents); + return selection.serializer.serialize(body, {format: 'html'}); + } + + function allContentsSelected(rng) { + if (!rng.setStart) { + if (rng.item) { + return false; + } + + var bodyRng = rng.duplicate(); + bodyRng.moveToElementText(editor.getBody()); + return RangeUtils.compareRanges(rng, bodyRng); + } + + var selection = serializeRng(rng); + + var allRng = dom.createRng(); + allRng.selectNode(editor.getBody()); + + var allSelection = serializeRng(allRng); + return selection === allSelection; + } + + editor.on('keydown', function(e) { + var keyCode = e.keyCode, isCollapsed, body; + + // Empty the editor if it's needed for example backspace at

    |

    + if (!isDefaultPrevented(e) && (keyCode == DELETE || keyCode == BACKSPACE)) { + isCollapsed = editor.selection.isCollapsed(); + body = editor.getBody(); + + // Selection is collapsed but the editor isn't empty + if (isCollapsed && !dom.isEmpty(body)) { + return; + } + + // Selection isn't collapsed but not all the contents is selected + if (!isCollapsed && !allContentsSelected(editor.selection.getRng())) { + return; + } + + // Manually empty the editor + e.preventDefault(); + editor.setContent(''); + + if (body.firstChild && dom.isBlock(body.firstChild)) { + editor.selection.setCursorLocation(body.firstChild, 0); + } else { + editor.selection.setCursorLocation(body, 0); + } + + editor.nodeChanged(); + } + }); + } + + /** + * WebKit doesn't select all the nodes in the body when you press Ctrl+A. + * IE selects more than the contents [

    a

    ] instead of

    [a] see bug #6438 + * This selects the whole body so that backspace/delete logic will delete everything + */ + function selectAll() { + editor.on('keydown', function(e) { + if (!isDefaultPrevented(e) && e.keyCode == 65 && VK.metaKeyPressed(e)) { + e.preventDefault(); + editor.execCommand('SelectAll'); + } + }); + } + + /** + * WebKit has a weird issue where it some times fails to properly convert keypresses to input method keystrokes. + * The IME on Mac doesn't initialize when it doesn't fire a proper focus event. + * + * This seems to happen when the user manages to click the documentElement element then the window doesn't get proper focus until + * you enter a character into the editor. + * + * It also happens when the first focus in made to the body. + * + * See: https://bugs.webkit.org/show_bug.cgi?id=83566 + */ + function inputMethodFocus() { + if (!editor.settings.content_editable) { + // Case 1 IME doesn't initialize if you focus the document + dom.bind(editor.getDoc(), 'focusin', function() { + selection.setRng(selection.getRng()); + }); + + // Case 2 IME doesn't initialize if you click the documentElement it also doesn't properly fire the focusin event + dom.bind(editor.getDoc(), 'mousedown', function(e) { + if (e.target == editor.getDoc().documentElement) { + editor.getBody().focus(); + selection.setRng(selection.getRng()); + } + }); + } + } + + /** + * Backspacing in FireFox/IE from a paragraph into a horizontal rule results in a floating text node because the + * browser just deletes the paragraph - the browser fails to merge the text node with a horizontal rule so it is + * left there. TinyMCE sees a floating text node and wraps it in a paragraph on the key up event (ForceBlocks.js + * addRootBlocks), meaning the action does nothing. With this code, FireFox/IE matche the behaviour of other + * browsers. + * + * It also fixes a bug on Firefox where it's impossible to delete HR elements. + */ + function removeHrOnBackspace() { + editor.on('keydown', function(e) { + if (!isDefaultPrevented(e) && e.keyCode === BACKSPACE) { + if (selection.isCollapsed() && selection.getRng(true).startOffset === 0) { + var node = selection.getNode(); + var previousSibling = node.previousSibling; + + if (node.nodeName == 'HR') { + dom.remove(node); + e.preventDefault(); + return; + } + + if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === "hr") { + dom.remove(previousSibling); + e.preventDefault(); + } + } + } + }); + } + + /** + * Firefox 3.x has an issue where the body element won't get proper focus if you click out + * side it's rectangle. + */ + function focusBody() { + // Fix for a focus bug in FF 3.x where the body element + // wouldn't get proper focus if the user clicked on the HTML element + if (!window.Range.prototype.getClientRects) { // Detect getClientRects got introduced in FF 4 + editor.on('mousedown', function(e) { + if (!isDefaultPrevented(e) && e.target.nodeName === "HTML") { + var body = editor.getBody(); + + // Blur the body it's focused but not correctly focused + body.blur(); + + // Refocus the body after a little while + setTimeout(function() { + body.focus(); + }, 0); + } + }); + } + } + + /** + * WebKit has a bug where it isn't possible to select image, hr or anchor elements + * by clicking on them so we need to fake that. + */ + function selectControlElements() { + editor.on('click', function(e) { + e = e.target; + + // Workaround for bug, http://bugs.webkit.org/show_bug.cgi?id=12250 + // WebKit can't even do simple things like selecting an image + // Needs tobe the setBaseAndExtend or it will fail to select floated images + if (/^(IMG|HR)$/.test(e.nodeName)) { + selection.getSel().setBaseAndExtent(e, 0, e, 1); + } + + if (e.nodeName == 'A' && dom.hasClass(e, 'mce-item-anchor')) { + selection.select(e); + } + + editor.nodeChanged(); + }); + } + + /** + * Fixes a Gecko bug where the style attribute gets added to the wrong element when deleting between two block elements. + * + * Fixes do backspace/delete on this: + *

    bla[ck

    r]ed

    + * + * Would become: + *

    bla|ed

    + * + * Instead of: + *

    bla|ed

    + */ + function removeStylesWhenDeletingAcrossBlockElements() { + function getAttributeApplyFunction() { + var template = dom.getAttribs(selection.getStart().cloneNode(false)); + + return function() { + var target = selection.getStart(); + + if (target !== editor.getBody()) { + dom.setAttrib(target, "style", null); + + each(template, function(attr) { + target.setAttributeNode(attr.cloneNode(true)); + }); + } + }; + } + + function isSelectionAcrossElements() { + return !selection.isCollapsed() && + dom.getParent(selection.getStart(), dom.isBlock) != dom.getParent(selection.getEnd(), dom.isBlock); + } + + editor.on('keypress', function(e) { + var applyAttributes; + + if (!isDefaultPrevented(e) && (e.keyCode == 8 || e.keyCode == 46) && isSelectionAcrossElements()) { + applyAttributes = getAttributeApplyFunction(); + editor.getDoc().execCommand('delete', false, null); + applyAttributes(); + e.preventDefault(); + return false; + } + }); + + dom.bind(editor.getDoc(), 'cut', function(e) { + var applyAttributes; + + if (!isDefaultPrevented(e) && isSelectionAcrossElements()) { + applyAttributes = getAttributeApplyFunction(); + + setTimeout(function() { + applyAttributes(); + }, 0); + } + }); + } + + /** + * Fire a nodeChanged when the selection is changed on WebKit this fixes selection issues on iOS5. It only fires the nodeChange + * event every 50ms since it would other wise update the UI when you type and it hogs the CPU. + */ + function selectionChangeNodeChanged() { + var lastRng, selectionTimer; + + editor.on('selectionchange', function() { + if (selectionTimer) { + clearTimeout(selectionTimer); + selectionTimer = 0; + } + + selectionTimer = window.setTimeout(function() { + if (editor.removed) { + return; + } + + var rng = selection.getRng(); + + // Compare the ranges to see if it was a real change or not + if (!lastRng || !RangeUtils.compareRanges(rng, lastRng)) { + editor.nodeChanged(); + lastRng = rng; + } + }, 50); + }); + } + + /** + * Screen readers on IE needs to have the role application set on the body. + */ + function ensureBodyHasRoleApplication() { + document.body.setAttribute("role", "application"); + } + + /** + * Backspacing into a table behaves differently depending upon browser type. + * Therefore, disable Backspace when cursor immediately follows a table. + */ + function disableBackspaceIntoATable() { + editor.on('keydown', function(e) { + if (!isDefaultPrevented(e) && e.keyCode === BACKSPACE) { + if (selection.isCollapsed() && selection.getRng(true).startOffset === 0) { + var previousSibling = selection.getNode().previousSibling; + if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === "table") { + e.preventDefault(); + return false; + } + } + } + }); + } + + /** + * Old IE versions can't properly render BR elements in PRE tags white in contentEditable mode. So this + * logic adds a \n before the BR so that it will get rendered. + */ + function addNewLinesBeforeBrInPre() { + // IE8+ rendering mode does the right thing with BR in PRE + if (getDocumentMode() > 7) { + return; + } + + // Enable display: none in area and add a specific class that hides all BR elements in PRE to + // avoid the caret from getting stuck at the BR elements while pressing the right arrow key + setEditorCommandState('RespectVisibilityInDesign', true); + editor.contentStyles.push('.mceHideBrInPre pre br {display: none}'); + dom.addClass(editor.getBody(), 'mceHideBrInPre'); + + // Adds a \n before all BR elements in PRE to get them visual + parser.addNodeFilter('pre', function(nodes) { + var i = nodes.length, brNodes, j, brElm, sibling; + + while (i--) { + brNodes = nodes[i].getAll('br'); + j = brNodes.length; + while (j--) { + brElm = brNodes[j]; + + // Add \n before BR in PRE elements on older IE:s so the new lines get rendered + sibling = brElm.prev; + if (sibling && sibling.type === 3 && sibling.value.charAt(sibling.value - 1) != '\n') { + sibling.value += '\n'; + } else { + brElm.parent.insert(new Node('#text', 3), brElm, true).value = '\n'; + } + } + } + }); + + // Removes any \n before BR elements in PRE since other browsers and in contentEditable=false mode they will be visible + serializer.addNodeFilter('pre', function(nodes) { + var i = nodes.length, brNodes, j, brElm, sibling; + + while (i--) { + brNodes = nodes[i].getAll('br'); + j = brNodes.length; + while (j--) { + brElm = brNodes[j]; + sibling = brElm.prev; + if (sibling && sibling.type == 3) { + sibling.value = sibling.value.replace(/\r?\n$/, ''); + } + } + } + }); + } + + /** + * Moves style width/height to attribute width/height when the user resizes an image on IE. + */ + function removePreSerializedStylesWhenSelectingControls() { + dom.bind(editor.getBody(), 'mouseup', function() { + var value, node = selection.getNode(); + + // Moved styles to attributes on IMG eements + if (node.nodeName == 'IMG') { + // Convert style width to width attribute + if ((value = dom.getStyle(node, 'width'))) { + dom.setAttrib(node, 'width', value.replace(/[^0-9%]+/g, '')); + dom.setStyle(node, 'width', ''); + } + + // Convert style height to height attribute + if ((value = dom.getStyle(node, 'height'))) { + dom.setAttrib(node, 'height', value.replace(/[^0-9%]+/g, '')); + dom.setStyle(node, 'height', ''); + } + } + }); + } + + /** + * Removes a blockquote when backspace is pressed at the beginning of it. + * + * For example: + *

    |x

    + * + * Becomes: + *

    |x

    + */ + function removeBlockQuoteOnBackSpace() { + // Add block quote deletion handler + editor.on('keydown', function(e) { + var rng, container, offset, root, parent; + + if (isDefaultPrevented(e) || e.keyCode != VK.BACKSPACE) { + return; + } + + rng = selection.getRng(); + container = rng.startContainer; + offset = rng.startOffset; + root = dom.getRoot(); + parent = container; + + if (!rng.collapsed || offset !== 0) { + return; + } + + while (parent && parent.parentNode && parent.parentNode.firstChild == parent && parent.parentNode != root) { + parent = parent.parentNode; + } + + // Is the cursor at the beginning of a blockquote? + if (parent.tagName === 'BLOCKQUOTE') { + // Remove the blockquote + editor.formatter.toggle('blockquote', null, parent); + + // Move the caret to the beginning of container + rng = dom.createRng(); + rng.setStart(container, 0); + rng.setEnd(container, 0); + selection.setRng(rng); + } + }); + } + + /** + * Sets various Gecko editing options on mouse down and before a execCommand to disable inline table editing that is broken etc. + */ + function setGeckoEditingOptions() { + function setOpts() { + editor._refreshContentEditable(); + + setEditorCommandState("StyleWithCSS", false); + setEditorCommandState("enableInlineTableEditing", false); + + if (!settings.object_resizing) { + setEditorCommandState("enableObjectResizing", false); + } + } + + if (!settings.readonly) { + editor.on('BeforeExecCommand MouseDown', setOpts); + } + } + + /** + * Fixes a gecko link bug, when a link is placed at the end of block elements there is + * no way to move the caret behind the link. This fix adds a bogus br element after the link. + * + * For example this: + *

    x

    + * + * Becomes this: + *

    x

    + */ + function addBrAfterLastLinks() { + function fixLinks() { + each(dom.select('a'), function(node) { + var parentNode = node.parentNode, root = dom.getRoot(); + + if (parentNode.lastChild === node) { + while (parentNode && !dom.isBlock(parentNode)) { + if (parentNode.parentNode.lastChild !== parentNode || parentNode === root) { + return; + } + + parentNode = parentNode.parentNode; + } + + dom.add(parentNode, 'br', {'data-mce-bogus': 1}); + } + }); + } + + editor.on('SetContent ExecCommand', function(e) { + if (e.type == "setcontent" || e.command === 'mceInsertLink') { + fixLinks(); + } + }); + } + + /** + * WebKit will produce DIV elements here and there by default. But since TinyMCE uses paragraphs by + * default we want to change that behavior. + */ + function setDefaultBlockType() { + if (settings.forced_root_block) { + editor.on('init', function() { + setEditorCommandState('DefaultParagraphSeparator', settings.forced_root_block); + }); + } + } + + /** + * Removes ghost selections from images/tables on Gecko. + */ + function removeGhostSelection() { + editor.on('Undo Redo SetContent', function(e) { + if (!e.initial) { + editor.execCommand('mceRepaint'); + } + }); + } + + /** + * Deletes the selected image on IE instead of navigating to previous page. + */ + function deleteControlItemOnBackSpace() { + editor.on('keydown', function(e) { + var rng; + + if (!isDefaultPrevented(e) && e.keyCode == BACKSPACE) { + rng = editor.getDoc().selection.createRange(); + if (rng && rng.item) { + e.preventDefault(); + editor.undoManager.beforeChange(); + dom.remove(rng.item(0)); + editor.undoManager.add(); + } + } + }); + } + + /** + * IE10 doesn't properly render block elements with the right height until you add contents to them. + * This fixes that by adding a padding-right to all empty text block elements. + * See: https://connect.microsoft.com/IE/feedback/details/743881 + */ + function renderEmptyBlocksFix() { + var emptyBlocksCSS; + + // IE10+ + if (getDocumentMode() >= 10) { + emptyBlocksCSS = ''; + each('p div h1 h2 h3 h4 h5 h6'.split(' '), function(name, i) { + emptyBlocksCSS += (i > 0 ? ',' : '') + name + ':empty'; + }); + + editor.contentStyles.push(emptyBlocksCSS + '{padding-right: 1px !important}'); + } + } + + /** + * Old IE versions can't retain contents within noscript elements so this logic will store the contents + * as a attribute and the insert that value as it's raw text when the DOM is serialized. + */ + function keepNoScriptContents() { + if (getDocumentMode() < 9) { + parser.addNodeFilter('noscript', function(nodes) { + var i = nodes.length, node, textNode; + + while (i--) { + node = nodes[i]; + textNode = node.firstChild; + + if (textNode) { + node.attr('data-mce-innertext', textNode.value); + } + } + }); + + serializer.addNodeFilter('noscript', function(nodes) { + var i = nodes.length, node, textNode, value; + + while (i--) { + node = nodes[i]; + textNode = nodes[i].firstChild; + + if (textNode) { + textNode.value = Entities.decode(textNode.value); + } else { + // Old IE can't retain noscript value so an attribute is used to store it + value = node.attributes.map['data-mce-innertext']; + if (value) { + node.attr('data-mce-innertext', null); + textNode = new Node('#text', 3); + textNode.value = value; + textNode.raw = true; + node.append(textNode); + } + } + } + }); + } + } + + /** + * IE has an issue where you can't select/move the caret by clicking outside the body if the document is in standards mode. + */ + function fixCaretSelectionOfDocumentElementOnIe() { + var doc = dom.doc, body = doc.body, started, startRng, htmlElm; + + // Return range from point or null if it failed + function rngFromPoint(x, y) { + var rng = body.createTextRange(); + + try { + rng.moveToPoint(x, y); + } catch (ex) { + // IE sometimes throws and exception, so lets just ignore it + rng = null; + } + + return rng; + } + + // Fires while the selection is changing + function selectionChange(e) { + var pointRng; + + // Check if the button is down or not + if (e.button) { + // Create range from mouse position + pointRng = rngFromPoint(e.x, e.y); + + if (pointRng) { + // Check if pointRange is before/after selection then change the endPoint + if (pointRng.compareEndPoints('StartToStart', startRng) > 0) { + pointRng.setEndPoint('StartToStart', startRng); + } else { + pointRng.setEndPoint('EndToEnd', startRng); + } + + pointRng.select(); + } + } else { + endSelection(); + } + } + + // Removes listeners + function endSelection() { + var rng = doc.selection.createRange(); + + // If the range is collapsed then use the last start range + if (startRng && !rng.item && rng.compareEndPoints('StartToEnd', rng) === 0) { + startRng.select(); + } + + dom.unbind(doc, 'mouseup', endSelection); + dom.unbind(doc, 'mousemove', selectionChange); + startRng = started = 0; + } + + // Make HTML element unselectable since we are going to handle selection by hand + doc.documentElement.unselectable = true; + + // Detect when user selects outside BODY + dom.bind(doc, 'mousedown contextmenu', function(e) { + if (e.target.nodeName === 'HTML') { + if (started) { + endSelection(); + } + + // Detect vertical scrollbar, since IE will fire a mousedown on the scrollbar and have target set as HTML + htmlElm = doc.documentElement; + if (htmlElm.scrollHeight > htmlElm.clientHeight) { + return; + } + + started = 1; + // Setup start position + startRng = rngFromPoint(e.x, e.y); + if (startRng) { + // Listen for selection change events + dom.bind(doc, 'mouseup', endSelection); + dom.bind(doc, 'mousemove', selectionChange); + + dom.getRoot().focus(); + startRng.select(); + } + } + }); + } + + /** + * Fixes selection issues where the caret can be placed between two inline elements like a|b + * this fix will lean the caret right into the closest inline element. + */ + function normalizeSelection() { + // Normalize selection for example a|a becomes a|a except for Ctrl+A since it selects everything + editor.on('keyup focusin mouseup', function(e) { + if (e.keyCode != 65 || !VK.metaKeyPressed(e)) { + selection.normalize(); + } + }, true); + } + + /** + * Forces Gecko to render a broken image icon if it fails to load an image. + */ + function showBrokenImageIcon() { + editor.contentStyles.push( + 'img:-moz-broken {' + + '-moz-force-broken-image-icon:1;' + + 'min-width:24px;' + + 'min-height:24px' + + '}' + ); + } + + /** + * iOS has a bug where it's impossible to type if the document has a touchstart event + * bound and the user touches the document while having the on screen keyboard visible. + * + * The touch event moves the focus to the parent document while having the caret inside the iframe + * this fix moves the focus back into the iframe document. + */ + function restoreFocusOnKeyDown() { + if (!editor.inline) { + editor.on('keydown', function() { + if (document.activeElement == document.body) { + editor.getWin().focus(); + } + }); + } + } + + /** + * IE 11 has an annoying issue where you can't move focus into the editor + * by clicking on the white area HTML element. We used to be able to to fix this with + * the fixCaretSelectionOfDocumentElementOnIe fix. But since M$ removed the selection + * object it's not possible anymore. So we need to hack in a ungly CSS to force the + * body to be at least 150px. If the user clicks the HTML element out side this 150px region + * we simply move the focus into the first paragraph. Not ideal since you loose the + * positioning of the caret but goot enough for most cases. + */ + function bodyHeight() { + if (!editor.inline) { + editor.contentStyles.push('body {min-height: 150px}'); + editor.on('click', function(e) { + if (e.target.nodeName == 'HTML') { + editor.getBody().focus(); + editor.selection.normalize(); + editor.nodeChanged(); + } + }); + } + } + + /** + * Firefox on Mac OS will move the browser back to the previous page if you press CMD+Left arrow. + * You might then loose all your work so we need to block that behavior and replace it with our own. + */ + function blockCmdArrowNavigation() { + if (Env.mac) { + editor.on('keydown', function(e) { + if (VK.metaKeyPressed(e) && (e.keyCode == 37 || e.keyCode == 39)) { + e.preventDefault(); + editor.selection.getSel().modify('move', e.keyCode == 37 ? 'backward' : 'forward', 'word'); + } + }); + } + } + + /** + * Disables the autolinking in IE 9+ this is then re-enabled by the autolink plugin. + */ + function disableAutoUrlDetect() { + setEditorCommandState("AutoUrlDetect", false); + } + + /** + * IE 11 has a fantastic bug where it will produce two trailing BR elements to iframe bodies when + * the iframe is hidden by display: none on a parent container. The DOM is actually out of sync + * with innerHTML in this case. It's like IE adds shadow DOM BR elements that appears on innerHTML + * but not as the lastChild of the body. However is we add a BR element to the body then remove it + * it doesn't seem to add these BR elements makes sence right?! + * + * Example of what happens: text becomes text

    + */ + function doubleTrailingBrElements() { + if (!editor.inline) { + editor.on('focus blur', function() { + var br = editor.dom.create('br'); + editor.getBody().appendChild(br); + br.parentNode.removeChild(br); + }, true); + } + } + + /** + * iOS 7.1 introduced two new bugs: + * 1) It's possible to open links within a contentEditable area by clicking on them. + * 2) If you hold down the finger it will display the link/image touch callout menu. + */ + function tapLinksAndImages() { + editor.on('click', function(e) { + if (e.target.tagName === 'A') { + e.preventDefault(); + } + }); + + editor.contentStyles.push('.mce-content-body {-webkit-touch-callout: none}'); + } + + // All browsers + disableBackspaceIntoATable(); + removeBlockQuoteOnBackSpace(); + emptyEditorWhenDeleting(); + normalizeSelection(); + + // WebKit + if (isWebKit) { + cleanupStylesWhenDeleting(); + inputMethodFocus(); + selectControlElements(); + setDefaultBlockType(); + + // iOS + if (Env.iOS) { + selectionChangeNodeChanged(); + restoreFocusOnKeyDown(); + bodyHeight(); + tapLinksAndImages(); + } else { + selectAll(); + } + } + + // IE + if (isIE && Env.ie < 11) { + removeHrOnBackspace(); + ensureBodyHasRoleApplication(); + addNewLinesBeforeBrInPre(); + removePreSerializedStylesWhenSelectingControls(); + deleteControlItemOnBackSpace(); + renderEmptyBlocksFix(); + keepNoScriptContents(); + fixCaretSelectionOfDocumentElementOnIe(); + } + + if (Env.ie >= 11) { + bodyHeight(); + doubleTrailingBrElements(); + } + + if (Env.ie) { + selectAll(); + disableAutoUrlDetect(); + } + + // Gecko + if (isGecko) { + removeHrOnBackspace(); + focusBody(); + removeStylesWhenDeletingAcrossBlockElements(); + setGeckoEditingOptions(); + addBrAfterLastLinks(); + removeGhostSelection(); + showBrokenImageIcon(); + blockCmdArrowNavigation(); + } + }; +}); + +// Included from: js/tinymce/classes/util/Observable.js + +/** + * Observable.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This mixin will add event binding logic to classes. + * + * @mixin tinymce.util.Observable + */ +define("tinymce/util/Observable", [ + "tinymce/util/Tools" +], function(Tools) { + var bindingsName = "__bindings"; + var nativeEvents = Tools.makeMap( + "focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange" + + " mouseout mouseenter mouseleave keydown keypress keyup contextmenu dragstart dragend dragover draggesture dragdrop drop drag", ' ' + ); + + function returnFalse() { + return false; + } + + function returnTrue() { + return true; + } + + return { + /** + * Fires the specified event by name. + * + * @method fire + * @param {String} name Name of the event to fire. + * @param {tinymce.Event/Object?} args Event arguments. + * @param {Boolean?} bubble True/false if the event is to be bubbled. + * @return {tinymce.Event} Event instance passed in converted into tinymce.Event instance. + * @example + * instance.fire('event', {...}); + */ + fire: function(name, args, bubble) { + var self = this, handlers, i, l, callback, parent; + + if (self.removed) { + return; + } + + name = name.toLowerCase(); + args = args || {}; + args.type = name; + + // Setup target is there isn't one + if (!args.target) { + args.target = self; + } + + // Add event delegation methods if they are missing + if (!args.preventDefault) { + // Add preventDefault method + args.preventDefault = function() { + args.isDefaultPrevented = returnTrue; + }; + + // Add stopPropagation + args.stopPropagation = function() { + args.isPropagationStopped = returnTrue; + }; + + // Add stopImmediatePropagation + args.stopImmediatePropagation = function() { + args.isImmediatePropagationStopped = returnTrue; + }; + + // Add event delegation states + args.isDefaultPrevented = returnFalse; + args.isPropagationStopped = returnFalse; + args.isImmediatePropagationStopped = returnFalse; + } + + //console.log(name, args); + + if (self[bindingsName]) { + handlers = self[bindingsName][name]; + + if (handlers) { + for (i = 0, l = handlers.length; i < l; i++) { + handlers[i] = callback = handlers[i]; + + // Stop immediate propagation if needed + if (args.isImmediatePropagationStopped()) { + break; + } + + // If callback returns false then prevent default and stop all propagation + if (callback.call(self, args) === false) { + args.preventDefault(); + return args; + } + } + } + } + + // Bubble event up to parents + if (bubble !== false && self.parent) { + parent = self.parent(); + while (parent && !args.isPropagationStopped()) { + parent.fire(name, args, false); + parent = parent.parent(); + } + } + + return args; + }, + + /** + * Binds an event listener to a specific event by name. + * + * @method on + * @param {String} name Event name or space separated list of events to bind. + * @param {callback} callback Callback to be executed when the event occurs. + * @param {Boolean} first Optional flag if the event should be prepended. Use this with care. + * @return {Object} Current class instance. + * @example + * instance.on('event', function(e) { + * // Callback logic + * }); + */ + on: function(name, callback, prepend) { + var self = this, bindings, handlers, names, i; + + if (callback === false) { + callback = function() { + return false; + }; + } + + if (callback) { + names = name.toLowerCase().split(' '); + i = names.length; + while (i--) { + name = names[i]; + + bindings = self[bindingsName]; + if (!bindings) { + bindings = self[bindingsName] = {}; + } + + handlers = bindings[name]; + if (!handlers) { + handlers = bindings[name] = []; + if (self.bindNative && nativeEvents[name]) { + self.bindNative(name); + } + } + + if (prepend) { + handlers.unshift(callback); + } else { + handlers.push(callback); + } + } + } + + return self; + }, + + /** + * Unbinds an event listener to a specific event by name. + * + * @method off + * @param {String?} name Name of the event to unbind. + * @param {callback?} callback Callback to unbind. + * @return {Object} Current class instance. + * @example + * // Unbind specific callback + * instance.off('event', handler); + * + * // Unbind all listeners by name + * instance.off('event'); + * + * // Unbind all events + * instance.off(); + */ + off: function(name, callback) { + var self = this, i, bindings = self[bindingsName], handlers, bindingName, names, hi; + + if (bindings) { + if (name) { + names = name.toLowerCase().split(' '); + i = names.length; + while (i--) { + name = names[i]; + handlers = bindings[name]; + + // Unbind all handlers + if (!name) { + for (bindingName in bindings) { + bindings[name].length = 0; + } + + return self; + } + + if (handlers) { + // Unbind all by name + if (!callback) { + handlers.length = 0; + } else { + // Unbind specific ones + hi = handlers.length; + while (hi--) { + if (handlers[hi] === callback) { + handlers.splice(hi, 1); + } + } + } + + if (!handlers.length && self.unbindNative && nativeEvents[name]) { + self.unbindNative(name); + delete bindings[name]; + } + } + } + } else { + if (self.unbindNative) { + for (name in bindings) { + self.unbindNative(name); + } + } + + self[bindingsName] = []; + } + } + + return self; + }, + + hasEventListeners: function(name) { + var bindings = this[bindingsName]; + + name = name.toLowerCase(); + + return !(!bindings || !bindings[name] || bindings[name].length === 0); + } + }; +}); + +// Included from: js/tinymce/classes/Shortcuts.js + +/** + * Shortcuts.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Contains all logic for handling of keyboard shortcuts. + */ +define("tinymce/Shortcuts", [ + "tinymce/util/Tools", + "tinymce/Env" +], function(Tools, Env) { + var each = Tools.each, explode = Tools.explode; + + var keyCodeLookup = { + "f9": 120, + "f10": 121, + "f11": 122 + }; + + return function(editor) { + var self = this, shortcuts = {}; + + editor.on('keyup keypress keydown', function(e) { + if (e.altKey || e.ctrlKey || e.metaKey) { + each(shortcuts, function(shortcut) { + var ctrlKey = Env.mac ? e.metaKey : e.ctrlKey; + + if (shortcut.ctrl != ctrlKey || shortcut.alt != e.altKey || shortcut.shift != e.shiftKey) { + return; + } + + if (e.keyCode == shortcut.keyCode || (e.charCode && e.charCode == shortcut.charCode)) { + e.preventDefault(); + + if (e.type == "keydown") { + shortcut.func.call(shortcut.scope); + } + + return true; + } + }); + } + }); + + /** + * Adds a keyboard shortcut for some command or function. + * + * @method addShortcut + * @param {String} pattern Shortcut pattern. Like for example: ctrl+alt+o. + * @param {String} desc Text description for the command. + * @param {String/Function} cmdFunc Command name string or function to execute when the key is pressed. + * @param {Object} sc Optional scope to execute the function in. + * @return {Boolean} true/false state if the shortcut was added or not. + */ + self.add = function(pattern, desc, cmdFunc, scope) { + var cmd; + + cmd = cmdFunc; + + if (typeof(cmdFunc) === 'string') { + cmdFunc = function() { + editor.execCommand(cmd, false, null); + }; + } else if (Tools.isArray(cmd)) { + cmdFunc = function() { + editor.execCommand(cmd[0], cmd[1], cmd[2]); + }; + } + + each(explode(pattern.toLowerCase()), function(pattern) { + var shortcut = { + func: cmdFunc, + scope: scope || editor, + desc: editor.translate(desc), + alt: false, + ctrl: false, + shift: false + }; + + each(explode(pattern, '+'), function(value) { + switch (value) { + case 'alt': + case 'ctrl': + case 'shift': + shortcut[value] = true; + break; + + default: + shortcut.charCode = value.charCodeAt(0); + shortcut.keyCode = keyCodeLookup[value] || value.toUpperCase().charCodeAt(0); + } + }); + + shortcuts[ + (shortcut.ctrl ? 'ctrl' : '') + ',' + + (shortcut.alt ? 'alt' : '') + ',' + + (shortcut.shift ? 'shift' : '') + ',' + + shortcut.keyCode + ] = shortcut; + }); + + return true; + }; + }; +}); + +// Included from: js/tinymce/classes/Editor.js + +/** + * Editor.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*jshint scripturl:true */ + +/** + * Include the base event class documentation. + * + * @include ../../../tools/docs/tinymce.Event.js + */ + +/** + * This class contains the core logic for a TinyMCE editor. + * + * @class tinymce.Editor + * @mixes tinymce.util.Observable + * @example + * // Add a class to all paragraphs in the editor. + * tinymce.activeEditor.dom.addClass(tinymce.activeEditor.dom.select('p'), 'someclass'); + * + * // Gets the current editors selection as text + * tinymce.activeEditor.selection.getContent({format: 'text'}); + * + * // Creates a new editor instance + * var ed = new tinymce.Editor('textareaid', { + * some_setting: 1 + * }, tinymce.EditorManager); + * + * // Select each item the user clicks on + * ed.on('click', function(e) { + * ed.selection.select(e.target); + * }); + * + * ed.render(); + */ +define("tinymce/Editor", [ + "tinymce/dom/DOMUtils", + "tinymce/AddOnManager", + "tinymce/html/Node", + "tinymce/dom/Serializer", + "tinymce/html/Serializer", + "tinymce/dom/Selection", + "tinymce/Formatter", + "tinymce/UndoManager", + "tinymce/EnterKey", + "tinymce/ForceBlocks", + "tinymce/EditorCommands", + "tinymce/util/URI", + "tinymce/dom/ScriptLoader", + "tinymce/dom/EventUtils", + "tinymce/WindowManager", + "tinymce/html/Schema", + "tinymce/html/DomParser", + "tinymce/util/Quirks", + "tinymce/Env", + "tinymce/util/Tools", + "tinymce/util/Observable", + "tinymce/Shortcuts" +], function( + DOMUtils, AddOnManager, Node, DomSerializer, Serializer, + Selection, Formatter, UndoManager, EnterKey, ForceBlocks, EditorCommands, + URI, ScriptLoader, EventUtils, WindowManager, + Schema, DomParser, Quirks, Env, Tools, Observable, Shortcuts +) { + // Shorten these names + var DOM = DOMUtils.DOM, ThemeManager = AddOnManager.ThemeManager, PluginManager = AddOnManager.PluginManager; + var extend = Tools.extend, each = Tools.each, explode = Tools.explode; + var inArray = Tools.inArray, trim = Tools.trim, resolve = Tools.resolve; + var Event = EventUtils.Event; + var isGecko = Env.gecko, ie = Env.ie; + + function getEventTarget(editor, eventName) { + if (eventName == 'selectionchange') { + return editor.getDoc(); + } + + // Need to bind mousedown/mouseup etc to document not body in iframe mode + // Since the user might click on the HTML element not the BODY + if (!editor.inline && /^mouse|click|contextmenu|drop/.test(eventName)) { + return editor.getDoc(); + } + + return editor.getBody(); + } + + /** + * Include documentation for all the events. + * + * @include ../../../tools/docs/tinymce.Editor.js + */ + + /** + * Constructs a editor instance by id. + * + * @constructor + * @method Editor + * @param {String} id Unique id for the editor. + * @param {Object} settings Settings for the editor. + * @param {tinymce.EditorManager} editorManager EditorManager instance. + * @author Moxiecode + */ + function Editor(id, settings, editorManager) { + var self = this, documentBaseUrl, baseUri; + + documentBaseUrl = self.documentBaseUrl = editorManager.documentBaseURL; + baseUri = editorManager.baseURI; + + /** + * Name/value collection with editor settings. + * + * @property settings + * @type Object + * @example + * // Get the value of the theme setting + * tinymce.activeEditor.windowManager.alert("You are using the " + tinymce.activeEditor.settings.theme + " theme"); + */ + self.settings = settings = extend({ + id: id, + theme: 'modern', + delta_width: 0, + delta_height: 0, + popup_css: '', + plugins: '', + document_base_url: documentBaseUrl, + add_form_submit_trigger: true, + submit_patch: true, + add_unload_trigger: true, + convert_urls: true, + relative_urls: true, + remove_script_host: true, + object_resizing: true, + doctype: '', + visual: true, + font_size_style_values: 'xx-small,x-small,small,medium,large,x-large,xx-large', + + // See: http://www.w3.org/TR/CSS2/fonts.html#propdef-font-size + font_size_legacy_values: 'xx-small,small,medium,large,x-large,xx-large,300%', + forced_root_block: 'p', + hidden_input: true, + padd_empty_editor: true, + render_ui: true, + indentation: '30px', + inline_styles: true, + convert_fonts_to_spans: true, + indent: 'simple', + indent_before: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,' + + 'tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist', + indent_after: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,' + + 'tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist', + validate: true, + entity_encoding: 'named', + url_converter: self.convertURL, + url_converter_scope: self, + ie7_compat: true + }, settings); + + AddOnManager.language = settings.language || 'en'; + AddOnManager.languageLoad = settings.language_load; + + AddOnManager.baseURL = editorManager.baseURL; + + /** + * Editor instance id, normally the same as the div/textarea that was replaced. + * + * @property id + * @type String + */ + self.id = settings.id = id; + + /** + * State to force the editor to return false on a isDirty call. + * + * @property isNotDirty + * @type Boolean + * @example + * function ajaxSave() { + * var ed = tinymce.get('elm1'); + * + * // Save contents using some XHR call + * alert(ed.getContent()); + * + * ed.isNotDirty = true; // Force not dirty state + * } + */ + self.isNotDirty = true; + + /** + * Name/Value object containting plugin instances. + * + * @property plugins + * @type Object + * @example + * // Execute a method inside a plugin directly + * tinymce.activeEditor.plugins.someplugin.someMethod(); + */ + self.plugins = {}; + + /** + * URI object to document configured for the TinyMCE instance. + * + * @property documentBaseURI + * @type tinymce.util.URI + * @example + * // Get relative URL from the location of document_base_url + * tinymce.activeEditor.documentBaseURI.toRelative('/somedir/somefile.htm'); + * + * // Get absolute URL from the location of document_base_url + * tinymce.activeEditor.documentBaseURI.toAbsolute('somefile.htm'); + */ + self.documentBaseURI = new URI(settings.document_base_url || documentBaseUrl, { + base_uri: baseUri + }); + + /** + * URI object to current document that holds the TinyMCE editor instance. + * + * @property baseURI + * @type tinymce.util.URI + * @example + * // Get relative URL from the location of the API + * tinymce.activeEditor.baseURI.toRelative('/somedir/somefile.htm'); + * + * // Get absolute URL from the location of the API + * tinymce.activeEditor.baseURI.toAbsolute('somefile.htm'); + */ + self.baseURI = baseUri; + + /** + * Array with CSS files to load into the iframe. + * + * @property contentCSS + * @type Array + */ + self.contentCSS = []; + + /** + * Array of CSS styles to add to head of document when the editor loads. + * + * @property contentStyles + * @type Array + */ + self.contentStyles = []; + + // Creates all events like onClick, onSetContent etc see Editor.Events.js for the actual logic + self.shortcuts = new Shortcuts(self); + + // Internal command handler objects + self.execCommands = {}; + self.queryStateCommands = {}; + self.queryValueCommands = {}; + self.loadedCSS = {}; + + self.suffix = editorManager.suffix; + self.editorManager = editorManager; + self.inline = settings.inline; + + // Call setup + editorManager.fire('SetupEditor', self); + self.execCallback('setup', self); + } + + Editor.prototype = { + /** + * Renderes the editor/adds it to the page. + * + * @method render + */ + render: function() { + var self = this, settings = self.settings, id = self.id, suffix = self.suffix; + + function readyHandler() { + DOM.unbind(window, 'ready', readyHandler); + self.render(); + } + + // Page is not loaded yet, wait for it + if (!Event.domLoaded) { + DOM.bind(window, 'ready', readyHandler); + return; + } + + // Element not found, then skip initialization + if (!self.getElement()) { + return; + } + + // No editable support old iOS versions etc + if (!Env.contentEditable) { + return; + } + + // Hide target element early to prevent content flashing + if (!settings.inline) { + self.orgVisibility = self.getElement().style.visibility; + self.getElement().style.visibility = 'hidden'; + } else { + self.inline = true; + } + + var form = self.getElement().form || DOM.getParent(id, 'form'); + if (form) { + self.formElement = form; + + // Add hidden input for non input elements inside form elements + if (settings.hidden_input && !/TEXTAREA|INPUT/i.test(self.getElement().nodeName)) { + DOM.insertAfter(DOM.create('input', {type: 'hidden', name: id}), id); + self.hasHiddenInput = true; + } + + // Pass submit/reset from form to editor instance + self.formEventDelegate = function(e) { + self.fire(e.type, e); + }; + + DOM.bind(form, 'submit reset', self.formEventDelegate); + + // Reset contents in editor when the form is reset + self.on('reset', function() { + self.setContent(self.startContent, {format: 'raw'}); + }); + + // Check page uses id="submit" or name="submit" for it's submit button + if (settings.submit_patch && !form.submit.nodeType && !form.submit.length && !form._mceOldSubmit) { + form._mceOldSubmit = form.submit; + form.submit = function() { + self.editorManager.triggerSave(); + self.isNotDirty = true; + + return form._mceOldSubmit(form); + }; + } + } + + /** + * Window manager reference, use this to open new windows and dialogs. + * + * @property windowManager + * @type tinymce.WindowManager + * @example + * // Shows an alert message + * tinymce.activeEditor.windowManager.alert('Hello world!'); + * + * // Opens a new dialog with the file.htm file and the size 320x240 + * // It also adds a custom parameter this can be retrieved by using tinyMCEPopup.getWindowArg inside the dialog. + * tinymce.activeEditor.windowManager.open({ + * url: 'file.htm', + * width: 320, + * height: 240 + * }, { + * custom_param: 1 + * }); + */ + self.windowManager = new WindowManager(self); + + if (settings.encoding == 'xml') { + self.on('GetContent', function(e) { + if (e.save) { + e.content = DOM.encode(e.content); + } + }); + } + + if (settings.add_form_submit_trigger) { + self.on('submit', function() { + if (self.initialized) { + self.save(); + } + }); + } + + if (settings.add_unload_trigger) { + self._beforeUnload = function() { + if (self.initialized && !self.destroyed && !self.isHidden()) { + self.save({format: 'raw', no_events: true, set_dirty: false}); + } + }; + + self.editorManager.on('BeforeUnload', self._beforeUnload); + } + + // Load scripts + function loadScripts() { + var scriptLoader = ScriptLoader.ScriptLoader; + + if (settings.language && settings.language != 'en' && !settings.language_url) { + settings.language_url = self.editorManager.baseURL + '/langs/' + settings.language + '.js'; + } + + if (settings.language_url) { + scriptLoader.add(settings.language_url); + } + + if (settings.theme && typeof settings.theme != "function" && + settings.theme.charAt(0) != '-' && !ThemeManager.urls[settings.theme]) { + var themeUrl = settings.theme_url; + + if (themeUrl) { + themeUrl = self.documentBaseURI.toAbsolute(themeUrl); + } else { + themeUrl = 'themes/' + settings.theme + '/theme' + suffix + '.js'; + } + + ThemeManager.load(settings.theme, themeUrl); + } + + if (Tools.isArray(settings.plugins)) { + settings.plugins = settings.plugins.join(' '); + } + + each(settings.external_plugins, function(url, name) { + PluginManager.load(name, url); + settings.plugins += ' ' + name; + }); + + each(settings.plugins.split(/[ ,]/), function(plugin) { + plugin = trim(plugin); + + if (plugin && !PluginManager.urls[plugin]) { + if (plugin.charAt(0) == '-') { + plugin = plugin.substr(1, plugin.length); + + var dependencies = PluginManager.dependencies(plugin); + + each(dependencies, function(dep) { + var defaultSettings = { + prefix:'plugins/', + resource: dep, + suffix:'/plugin' + suffix + '.js' + }; + + dep = PluginManager.createUrl(defaultSettings, dep); + PluginManager.load(dep.resource, dep); + }); + } else { + PluginManager.load(plugin, { + prefix: 'plugins/', + resource: plugin, + suffix: '/plugin' + suffix + '.js' + }); + } + } + }); + + scriptLoader.loadQueue(function() { + if (!self.removed) { + self.init(); + } + }); + } + + loadScripts(); + }, + + /** + * Initializes the editor this will be called automatically when + * all plugins/themes and language packs are loaded by the rendered method. + * This method will setup the iframe and create the theme and plugin instances. + * + * @method init + */ + init: function() { + var self = this, settings = self.settings, elm = self.getElement(); + var w, h, minHeight, n, o, Theme, url, bodyId, bodyClass, re, i, initializedPlugins = []; + + self.rtl = this.editorManager.i18n.rtl; + self.editorManager.add(self); + + settings.aria_label = settings.aria_label || DOM.getAttrib(elm, 'aria-label', self.getLang('aria.rich_text_area')); + + /** + * Reference to the theme instance that was used to generate the UI. + * + * @property theme + * @type tinymce.Theme + * @example + * // Executes a method on the theme directly + * tinymce.activeEditor.theme.someMethod(); + */ + if (settings.theme) { + if (typeof settings.theme != "function") { + settings.theme = settings.theme.replace(/-/, ''); + Theme = ThemeManager.get(settings.theme); + self.theme = new Theme(self, ThemeManager.urls[settings.theme]); + + if (self.theme.init) { + self.theme.init(self, ThemeManager.urls[settings.theme] || self.documentBaseUrl.replace(/\/$/, '')); + } + } else { + self.theme = settings.theme; + } + } + + function initPlugin(plugin) { + var Plugin = PluginManager.get(plugin), pluginUrl, pluginInstance; + + pluginUrl = PluginManager.urls[plugin] || self.documentBaseUrl.replace(/\/$/, ''); + plugin = trim(plugin); + if (Plugin && inArray(initializedPlugins, plugin) === -1) { + each(PluginManager.dependencies(plugin), function(dep){ + initPlugin(dep); + }); + + pluginInstance = new Plugin(self, pluginUrl); + + self.plugins[plugin] = pluginInstance; + + if (pluginInstance.init) { + pluginInstance.init(self, pluginUrl); + initializedPlugins.push(plugin); + } + } + } + + // Create all plugins + each(settings.plugins.replace(/\-/g, '').split(/[ ,]/), initPlugin); + + // Measure box + if (settings.render_ui && self.theme) { + self.orgDisplay = elm.style.display; + + if (typeof settings.theme != "function") { + w = settings.width || elm.style.width || elm.offsetWidth; + h = settings.height || elm.style.height || elm.offsetHeight; + minHeight = settings.min_height || 100; + re = /^[0-9\.]+(|px)$/i; + + if (re.test('' + w)) { + w = Math.max(parseInt(w, 10), 100); + } + + if (re.test('' + h)) { + h = Math.max(parseInt(h, 10), minHeight); + } + + // Render UI + o = self.theme.renderUI({ + targetNode: elm, + width: w, + height: h, + deltaWidth: settings.delta_width, + deltaHeight: settings.delta_height + }); + + // Resize editor + if (!settings.content_editable) { + DOM.setStyles(o.sizeContainer || o.editorContainer, { + wi2dth: w, + // TODO: Fix this + h2eight: h + }); + + h = (o.iframeHeight || h) + (typeof(h) == 'number' ? (o.deltaHeight || 0) : ''); + if (h < minHeight) { + h = minHeight; + } + } + } else { + o = settings.theme(self, elm); + + // Convert element type to id:s + if (o.editorContainer.nodeType) { + o.editorContainer = o.editorContainer.id = o.editorContainer.id || self.id + "_parent"; + } + + // Convert element type to id:s + if (o.iframeContainer.nodeType) { + o.iframeContainer = o.iframeContainer.id = o.iframeContainer.id || self.id + "_iframecontainer"; + } + + // Use specified iframe height or the targets offsetHeight + h = o.iframeHeight || elm.offsetHeight; + } + + self.editorContainer = o.editorContainer; + } + + // Load specified content CSS last + if (settings.content_css) { + each(explode(settings.content_css), function(u) { + self.contentCSS.push(self.documentBaseURI.toAbsolute(u)); + }); + } + + // Load specified content CSS last + if (settings.content_style) { + self.contentStyles.push(settings.content_style); + } + + // Content editable mode ends here + if (settings.content_editable) { + elm = n = o = null; // Fix IE leak + return self.initContentBody(); + } + + self.iframeHTML = settings.doctype + ''; + + // We only need to override paths if we have to + // IE has a bug where it remove site absolute urls to relative ones if this is specified + if (settings.document_base_url != self.documentBaseUrl) { + self.iframeHTML += ''; + } + + // IE8 doesn't support carets behind images setting ie7_compat would force IE8+ to run in IE7 compat mode. + if (!Env.caretAfter && settings.ie7_compat) { + self.iframeHTML += ''; + } + + self.iframeHTML += ''; + + // Load the CSS by injecting them into the HTML this will reduce "flicker" + for (i = 0; i < self.contentCSS.length; i++) { + var cssUrl = self.contentCSS[i]; + self.iframeHTML += ''; + self.loadedCSS[cssUrl] = true; + } + + bodyId = settings.body_id || 'tinymce'; + if (bodyId.indexOf('=') != -1) { + bodyId = self.getParam('body_id', '', 'hash'); + bodyId = bodyId[self.id] || bodyId; + } + + bodyClass = settings.body_class || ''; + if (bodyClass.indexOf('=') != -1) { + bodyClass = self.getParam('body_class', '', 'hash'); + bodyClass = bodyClass[self.id] || ''; + } + + self.iframeHTML += '
    '; + + /*eslint no-script-url:0 */ + var domainRelaxUrl = 'javascript:(function(){' + + 'document.open();document.domain="' + document.domain + '";' + + 'var ed = window.parent.tinymce.get("' + self.id + '");document.write(ed.iframeHTML);' + + 'document.close();ed.initContentBody(true);})()'; + + // Domain relaxing is required since the user has messed around with document.domain + if (document.domain != location.hostname) { + url = domainRelaxUrl; + } + + // Create iframe + // TODO: ACC add the appropriate description on this. + n = DOM.add(o.iframeContainer, 'iframe', { + id: self.id + "_ifr", + src: url || 'javascript:""', // Workaround for HTTPS warning in IE6/7 + frameBorder: '0', + allowTransparency: "true", + title: self.editorManager.translate( + "Rich Text Area. Press ALT-F9 for menu. " + + "Press ALT-F10 for toolbar. Press ALT-0 for help" + ), + style: { + width: '100%', + height: h, + display: 'block' // Important for Gecko to render the iframe correctly + } + }); + + // Try accessing the document this will fail on IE when document.domain is set to the same as location.hostname + // Then we have to force domain relaxing using the domainRelaxUrl approach very ugly!! + if (ie) { + try { + self.getDoc(); + } catch (e) { + n.src = url = domainRelaxUrl; + } + } + + self.contentAreaContainer = o.iframeContainer; + + if (o.editorContainer) { + DOM.get(o.editorContainer).style.display = self.orgDisplay; + } + + DOM.get(self.id).style.display = 'none'; + DOM.setAttrib(self.id, 'aria-hidden', true); + + if (!url) { + self.initContentBody(); + } + + elm = n = o = null; // Cleanup + }, + + /** + * This method get called by the init method ones the iframe is loaded. + * It will fill the iframe with contents, setups DOM and selection objects for the iframe. + * + * @method initContentBody + * @private + */ + initContentBody: function(skipWrite) { + var self = this, settings = self.settings, targetElm = DOM.get(self.id), doc = self.getDoc(), body, contentCssText; + + // Restore visibility on target element + if (!settings.inline) { + self.getElement().style.visibility = self.orgVisibility; + } + + // Setup iframe body + if (!skipWrite && !settings.content_editable) { + doc.open(); + doc.write(self.iframeHTML); + doc.close(); + } + + if (settings.content_editable) { + self.on('remove', function() { + var bodyEl = this.getBody(); + + DOM.removeClass(bodyEl, 'mce-content-body'); + DOM.removeClass(bodyEl, 'mce-edit-focus'); + DOM.setAttrib(bodyEl, 'tabIndex', null); + DOM.setAttrib(bodyEl, 'contentEditable', null); + }); + + DOM.addClass(targetElm, 'mce-content-body'); + targetElm.tabIndex = -1; + self.contentDocument = doc = settings.content_document || document; + self.contentWindow = settings.content_window || window; + self.bodyElement = targetElm; + + // Prevent leak in IE + settings.content_document = settings.content_window = null; + + // TODO: Fix this + settings.root_name = targetElm.nodeName.toLowerCase(); + } + + // It will not steal focus while setting contentEditable + body = self.getBody(); + body.disabled = true; + + if (!settings.readonly) { + if (self.inline && DOM.getStyle(body, 'position', true) == 'static') { + body.style.position = 'relative'; + } + + body.contentEditable = self.getParam('content_editable_state', true); + } + + body.disabled = false; + + /** + * Schema instance, enables you to validate elements and it's children. + * + * @property schema + * @type tinymce.html.Schema + */ + self.schema = new Schema(settings); + + /** + * DOM instance for the editor. + * + * @property dom + * @type tinymce.dom.DOMUtils + * @example + * // Adds a class to all paragraphs within the editor + * tinymce.activeEditor.dom.addClass(tinymce.activeEditor.dom.select('p'), 'someclass'); + */ + self.dom = new DOMUtils(doc, { + keep_values: true, + url_converter: self.convertURL, + url_converter_scope: self, + hex_colors: settings.force_hex_style_colors, + class_filter: settings.class_filter, + update_styles: true, + root_element: settings.content_editable ? self.id : null, + collect: settings.content_editable, + schema: self.schema, + onSetAttrib: function(e) { + self.fire('SetAttrib', e); + } + }); + + /** + * HTML parser will be used when contents is inserted into the editor. + * + * @property parser + * @type tinymce.html.DomParser + */ + self.parser = new DomParser(settings, self.schema); + + // Convert src and href into data-mce-src, data-mce-href and data-mce-style + self.parser.addAttributeFilter('src,href,style', function(nodes, name) { + var i = nodes.length, node, dom = self.dom, value, internalName; + + while (i--) { + node = nodes[i]; + value = node.attr(name); + internalName = 'data-mce-' + name; + + // Add internal attribute if we need to we don't on a refresh of the document + if (!node.attributes.map[internalName]) { + if (name === "style") { + node.attr(internalName, dom.serializeStyle(dom.parseStyle(value), node.name)); + } else { + node.attr(internalName, self.convertURL(value, name, node.name)); + } + } + } + }); + + // Keep scripts from executing + self.parser.addNodeFilter('script', function(nodes) { + var i = nodes.length, node; + + while (i--) { + node = nodes[i]; + node.attr('type', 'mce-' + (node.attr('type') || 'text/javascript')); + } + }); + + self.parser.addNodeFilter('#cdata', function(nodes) { + var i = nodes.length, node; + + while (i--) { + node = nodes[i]; + node.type = 8; + node.name = '#comment'; + node.value = '[CDATA[' + node.value + ']]'; + } + }); + + self.parser.addNodeFilter('p,h1,h2,h3,h4,h5,h6,div', function(nodes) { + var i = nodes.length, node, nonEmptyElements = self.schema.getNonEmptyElements(); + + while (i--) { + node = nodes[i]; + + if (node.isEmpty(nonEmptyElements)) { + node.empty().append(new Node('br', 1)).shortEnded = true; + } + } + }); + + /** + * DOM serializer for the editor. Will be used when contents is extracted from the editor. + * + * @property serializer + * @type tinymce.dom.Serializer + * @example + * // Serializes the first paragraph in the editor into a string + * tinymce.activeEditor.serializer.serialize(tinymce.activeEditor.dom.select('p')[0]); + */ + self.serializer = new DomSerializer(settings, self); + + /** + * Selection instance for the editor. + * + * @property selection + * @type tinymce.dom.Selection + * @example + * // Sets some contents to the current selection in the editor + * tinymce.activeEditor.selection.setContent('Some contents'); + * + * // Gets the current selection + * alert(tinymce.activeEditor.selection.getContent()); + * + * // Selects the first paragraph found + * tinymce.activeEditor.selection.select(tinymce.activeEditor.dom.select('p')[0]); + */ + self.selection = new Selection(self.dom, self.getWin(), self.serializer, self); + + /** + * Formatter instance. + * + * @property formatter + * @type tinymce.Formatter + */ + self.formatter = new Formatter(self); + + /** + * Undo manager instance, responsible for handling undo levels. + * + * @property undoManager + * @type tinymce.UndoManager + * @example + * // Undoes the last modification to the editor + * tinymce.activeEditor.undoManager.undo(); + */ + self.undoManager = new UndoManager(self); + + self.forceBlocks = new ForceBlocks(self); + self.enterKey = new EnterKey(self); + self.editorCommands = new EditorCommands(self); + + self.fire('PreInit'); + + if (!settings.browser_spellcheck && !settings.gecko_spellcheck) { + doc.body.spellcheck = false; // Gecko + DOM.setAttrib(body, "spellcheck", "false"); + } + + self.fire('PostRender'); + + self.quirks = Quirks(self); + + if (settings.directionality) { + body.dir = settings.directionality; + } + + if (settings.nowrap) { + body.style.whiteSpace = "nowrap"; + } + + if (settings.protect) { + self.on('BeforeSetContent', function(e) { + each(settings.protect, function(pattern) { + e.content = e.content.replace(pattern, function(str) { + return ''; + }); + }); + }); + } + + self.on('SetContent', function() { + self.addVisual(self.getBody()); + }); + + // Remove empty contents + if (settings.padd_empty_editor) { + self.on('PostProcess', function(e) { + e.content = e.content.replace(/^(]*>( | |\s|\u00a0|)<\/p>[\r\n]*|
    [\r\n]*)$/, ''); + }); + } + + self.load({initial: true, format: 'html'}); + self.startContent = self.getContent({format: 'raw'}); + + /** + * Is set to true after the editor instance has been initialized + * + * @property initialized + * @type Boolean + * @example + * function isEditorInitialized(editor) { + * return editor && editor.initialized; + * } + */ + self.initialized = true; + + each(self._pendingNativeEvents, function(name) { + self.dom.bind(getEventTarget(self, name), name, function(e) { + self.fire(e.type, e); + }); + }); + + self.fire('init'); + self.focus(true); + self.nodeChanged({initial: true}); + self.execCallback('init_instance_callback', self); + + // Add editor specific CSS styles + if (self.contentStyles.length > 0) { + contentCssText = ''; + + each(self.contentStyles, function(style) { + contentCssText += style + "\r\n"; + }); + + self.dom.addStyle(contentCssText); + } + + // Load specified content CSS last + each(self.contentCSS, function(cssUrl) { + if (!self.loadedCSS[cssUrl]) { + self.dom.loadCSS(cssUrl); + self.loadedCSS[cssUrl] = true; + } + }); + + // Handle auto focus + if (settings.auto_focus) { + setTimeout(function () { + var ed = self.editorManager.get(settings.auto_focus); + + ed.selection.select(ed.getBody(), 1); + ed.selection.collapse(1); + ed.getBody().focus(); + ed.getWin().focus(); + }, 100); + } + + // Clean up references for IE + targetElm = doc = body = null; + }, + + /** + * Focuses/activates the editor. This will set this editor as the activeEditor in the tinymce collection + * it will also place DOM focus inside the editor. + * + * @method focus + * @param {Boolean} skip_focus Skip DOM focus. Just set is as the active editor. + */ + focus: function(skip_focus) { + var oed, self = this, selection = self.selection, contentEditable = self.settings.content_editable, rng; + var controlElm, doc = self.getDoc(), body; + + if (!skip_focus) { + // Get selected control element + rng = selection.getRng(); + if (rng.item) { + controlElm = rng.item(0); + } + + self._refreshContentEditable(); + + // Focus the window iframe + if (!contentEditable) { + // WebKit needs this call to fire focusin event properly see #5948 + // But Opera pre Blink engine will produce an empty selection so skip Opera + if (!Env.opera) { + self.getBody().focus(); + } + + self.getWin().focus(); + } + + // Focus the body as well since it's contentEditable + if (isGecko || contentEditable) { + body = self.getBody(); + + // Check for setActive since it doesn't scroll to the element + if (body.setActive && Env.ie < 11) { + body.setActive(); + } else { + body.focus(); + } + + if (contentEditable) { + selection.normalize(); + } + } + + // Restore selected control element + // This is needed when for example an image is selected within a + // layer a call to focus will then remove the control selection + if (controlElm && controlElm.ownerDocument == doc) { + rng = doc.body.createControlRange(); + rng.addElement(controlElm); + rng.select(); + } + } + + if (self.editorManager.activeEditor != self) { + if ((oed = self.editorManager.activeEditor)) { + oed.fire('deactivate', {relatedTarget: self}); + } + + self.fire('activate', {relatedTarget: oed}); + } + + self.editorManager.activeEditor = self; + }, + + /** + * Executes a legacy callback. This method is useful to call old 2.x option callbacks. + * There new event model is a better way to add callback so this method might be removed in the future. + * + * @method execCallback + * @param {String} name Name of the callback to execute. + * @return {Object} Return value passed from callback function. + */ + execCallback: function(name) { + var self = this, callback = self.settings[name], scope; + + if (!callback) { + return; + } + + // Look through lookup + if (self.callbackLookup && (scope = self.callbackLookup[name])) { + callback = scope.func; + scope = scope.scope; + } + + if (typeof(callback) === 'string') { + scope = callback.replace(/\.\w+$/, ''); + scope = scope ? resolve(scope) : 0; + callback = resolve(callback); + self.callbackLookup = self.callbackLookup || {}; + self.callbackLookup[name] = {func: callback, scope: scope}; + } + + return callback.apply(scope || self, Array.prototype.slice.call(arguments, 1)); + }, + + /** + * Translates the specified string by replacing variables with language pack items it will also check if there is + * a key mathcin the input. + * + * @method translate + * @param {String} text String to translate by the language pack data. + * @return {String} Translated string. + */ + translate: function(text) { + var lang = this.settings.language || 'en', i18n = this.editorManager.i18n; + + if (!text) { + return ''; + } + + return i18n.data[lang + '.' + text] || text.replace(/\{\#([^\}]+)\}/g, function(a, b) { + return i18n.data[lang + '.' + b] || '{#' + b + '}'; + }); + }, + + /** + * Returns a language pack item by name/key. + * + * @method getLang + * @param {String} name Name/key to get from the language pack. + * @param {String} defaultVal Optional default value to retrive. + */ + getLang: function(name, defaultVal) { + return ( + this.editorManager.i18n.data[(this.settings.language || 'en') + '.' + name] || + (defaultVal !== undefined ? defaultVal : '{#' + name + '}') + ); + }, + + /** + * Returns a configuration parameter by name. + * + * @method getParam + * @param {String} name Configruation parameter to retrive. + * @param {String} defaultVal Optional default value to return. + * @param {String} type Optional type parameter. + * @return {String} Configuration parameter value or default value. + * @example + * // Returns a specific config value from the currently active editor + * var someval = tinymce.activeEditor.getParam('myvalue'); + * + * // Returns a specific config value from a specific editor instance by id + * var someval2 = tinymce.get('my_editor').getParam('myvalue'); + */ + getParam: function(name, defaultVal, type) { + var value = name in this.settings ? this.settings[name] : defaultVal, output; + + if (type === 'hash') { + output = {}; + + if (typeof(value) === 'string') { + each(value.indexOf('=') > 0 ? value.split(/[;,](?![^=;,]*(?:[;,]|$))/) : value.split(','), function(value) { + value = value.split('='); + + if (value.length > 1) { + output[trim(value[0])] = trim(value[1]); + } else { + output[trim(value[0])] = trim(value); + } + }); + } else { + output = value; + } + + return output; + } + + return value; + }, + + /** + * Distpaches out a onNodeChange event to all observers. This method should be called when you + * need to update the UI states or element path etc. + * + * @method nodeChanged + */ + nodeChanged: function() { + var self = this, selection = self.selection, node, parents, root; + + // Fix for bug #1896577 it seems that this can not be fired while the editor is loading + if (self.initialized && !self.settings.disable_nodechange && !self.settings.readonly) { + // Get start node + root = self.getBody(); + node = selection.getStart() || root; + node = ie && node.ownerDocument != self.getDoc() ? self.getBody() : node; // Fix for IE initial state + + // Edge case for

    |

    + if (node.nodeName == 'IMG' && selection.isCollapsed()) { + node = node.parentNode; + } + + // Get parents and add them to object + parents = []; + self.dom.getParent(node, function(node) { + if (node === root) { + return true; + } + + parents.push(node); + }); + + self.fire('NodeChange', {element: node, parents: parents}); + } + }, + + /** + * Adds a button that later gets created by the theme in the editors toolbars. + * + * @method addButton + * @param {String} name Button name to add. + * @param {Object} settings Settings object with title, cmd etc. + * @example + * // Adds a custom button to the editor that inserts contents when clicked + * tinymce.init({ + * ... + * + * toolbar: 'example' + * + * setup: function(ed) { + * ed.addButton('example', { + * title: 'My title', + * image: '../js/tinymce/plugins/example/img/example.gif', + * onclick: function() { + * ed.insertContent('Hello world!!'); + * } + * }); + * } + * }); + */ + addButton: function(name, settings) { + var self = this; + + if (settings.cmd) { + settings.onclick = function() { + self.execCommand(settings.cmd); + }; + } + + if (!settings.text && !settings.icon) { + settings.icon = name; + } + + self.buttons = self.buttons || {}; + settings.tooltip = settings.tooltip || settings.title; + self.buttons[name] = settings; + }, + + /** + * Adds a menu item to be used in the menus of the theme. There might be multiple instances + * of this menu item for example it might be used in the main menus of the theme but also in + * the context menu so make sure that it's self contained and supports multiple instances. + * + * @method addMenuItem + * @param {String} name Menu item name to add. + * @param {Object} settings Settings object with title, cmd etc. + * @example + * // Adds a custom menu item to the editor that inserts contents when clicked + * // The context option allows you to add the menu item to an existing default menu + * tinymce.init({ + * ... + * + * setup: function(ed) { + * ed.addMenuItem('example', { + * text: 'My menu item', + * context: 'tools', + * onclick: function() { + * ed.insertContent('Hello world!!'); + * } + * }); + * } + * }); + */ + addMenuItem: function(name, settings) { + var self = this; + + if (settings.cmd) { + settings.onclick = function() { + self.execCommand(settings.cmd); + }; + } + + self.menuItems = self.menuItems || {}; + self.menuItems[name] = settings; + }, + + /** + * Adds a custom command to the editor, you can also override existing commands with this method. + * The command that you add can be executed with execCommand. + * + * @method addCommand + * @param {String} name Command name to add/override. + * @param {addCommandCallback} callback Function to execute when the command occurs. + * @param {Object} scope Optional scope to execute the function in. + * @example + * // Adds a custom command that later can be executed using execCommand + * tinymce.init({ + * ... + * + * setup: function(ed) { + * // Register example command + * ed.addCommand('mycommand', function(ui, v) { + * ed.windowManager.alert('Hello world!! Selection: ' + ed.selection.getContent({format: 'text'})); + * }); + * } + * }); + */ + addCommand: function(name, callback, scope) { + /** + * Callback function that gets called when a command is executed. + * + * @callback addCommandCallback + * @param {Boolean} ui Display UI state true/false. + * @param {Object} value Optional value for command. + * @return {Boolean} True/false state if the command was handled or not. + */ + this.execCommands[name] = {func: callback, scope: scope || this}; + }, + + /** + * Adds a custom query state command to the editor, you can also override existing commands with this method. + * The command that you add can be executed with queryCommandState function. + * + * @method addQueryStateHandler + * @param {String} name Command name to add/override. + * @param {addQueryStateHandlerCallback} callback Function to execute when the command state retrival occurs. + * @param {Object} scope Optional scope to execute the function in. + */ + addQueryStateHandler: function(name, callback, scope) { + /** + * Callback function that gets called when a queryCommandState is executed. + * + * @callback addQueryStateHandlerCallback + * @return {Boolean} True/false state if the command is enabled or not like is it bold. + */ + this.queryStateCommands[name] = {func: callback, scope: scope || this}; + }, + + /** + * Adds a custom query value command to the editor, you can also override existing commands with this method. + * The command that you add can be executed with queryCommandValue function. + * + * @method addQueryValueHandler + * @param {String} name Command name to add/override. + * @param {addQueryValueHandlerCallback} callback Function to execute when the command value retrival occurs. + * @param {Object} scope Optional scope to execute the function in. + */ + addQueryValueHandler: function(name, callback, scope) { + /** + * Callback function that gets called when a queryCommandValue is executed. + * + * @callback addQueryValueHandlerCallback + * @return {Object} Value of the command or undefined. + */ + this.queryValueCommands[name] = {func: callback, scope: scope || this}; + }, + + /** + * Adds a keyboard shortcut for some command or function. + * + * @method addShortcut + * @param {String} pattern Shortcut pattern. Like for example: ctrl+alt+o. + * @param {String} desc Text description for the command. + * @param {String/Function} cmdFunc Command name string or function to execute when the key is pressed. + * @param {Object} sc Optional scope to execute the function in. + * @return {Boolean} true/false state if the shortcut was added or not. + */ + addShortcut: function(pattern, desc, cmdFunc, scope) { + this.shortcuts.add(pattern, desc, cmdFunc, scope); + }, + + /** + * Executes a command on the current instance. These commands can be TinyMCE internal commands prefixed with "mce" or + * they can be build in browser commands such as "Bold". A compleate list of browser commands is available on MSDN or Mozilla.org. + * This function will dispatch the execCommand function on each plugin, theme or the execcommand_callback option if none of these + * return true it will handle the command as a internal browser command. + * + * @method execCommand + * @param {String} cmd Command name to execute, for example mceLink or Bold. + * @param {Boolean} ui True/false state if a UI (dialog) should be presented or not. + * @param {mixed} value Optional command value, this can be anything. + * @param {Object} a Optional arguments object. + */ + execCommand: function(cmd, ui, value, args) { + var self = this, state = 0, cmdItem; + + if (!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(cmd) && (!args || !args.skip_focus)) { + self.focus(); + } + + args = extend({}, args); + args = self.fire('BeforeExecCommand', {command: cmd, ui: ui, value: value}); + if (args.isDefaultPrevented()) { + return false; + } + + // Registred commands + if ((cmdItem = self.execCommands[cmd])) { + // Fall through on true + if (cmdItem.func.call(cmdItem.scope, ui, value) !== true) { + self.fire('ExecCommand', {command: cmd, ui: ui, value: value}); + return true; + } + } + + // Plugin commands + each(self.plugins, function(p) { + if (p.execCommand && p.execCommand(cmd, ui, value)) { + self.fire('ExecCommand', {command: cmd, ui: ui, value: value}); + state = true; + return false; + } + }); + + if (state) { + return state; + } + + // Theme commands + if (self.theme && self.theme.execCommand && self.theme.execCommand(cmd, ui, value)) { + self.fire('ExecCommand', {command: cmd, ui: ui, value: value}); + return true; + } + + // Editor commands + if (self.editorCommands.execCommand(cmd, ui, value)) { + self.fire('ExecCommand', {command: cmd, ui: ui, value: value}); + return true; + } + + // Browser commands + self.getDoc().execCommand(cmd, ui, value); + self.fire('ExecCommand', {command: cmd, ui: ui, value: value}); + }, + + /** + * Returns a command specific state, for example if bold is enabled or not. + * + * @method queryCommandState + * @param {string} cmd Command to query state from. + * @return {Boolean} Command specific state, for example if bold is enabled or not. + */ + queryCommandState: function(cmd) { + var self = this, queryItem, returnVal; + + // Is hidden then return undefined + if (self._isHidden()) { + return; + } + + // Registred commands + if ((queryItem = self.queryStateCommands[cmd])) { + returnVal = queryItem.func.call(queryItem.scope); + + // Fall though on true + if (returnVal !== true) { + return returnVal; + } + } + + // Editor commands + returnVal = self.editorCommands.queryCommandState(cmd); + if (returnVal !== -1) { + return returnVal; + } + + // Browser commands + try { + return self.getDoc().queryCommandState(cmd); + } catch (ex) { + // Fails sometimes see bug: 1896577 + } + }, + + /** + * Returns a command specific value, for example the current font size. + * + * @method queryCommandValue + * @param {string} cmd Command to query value from. + * @return {Object} Command specific value, for example the current font size. + */ + queryCommandValue: function(cmd) { + var self = this, queryItem, returnVal; + + // Is hidden then return undefined + if (self._isHidden()) { + return; + } + + // Registred commands + if ((queryItem = self.queryValueCommands[cmd])) { + returnVal = queryItem.func.call(queryItem.scope); + + // Fall though on true + if (returnVal !== true) { + return returnVal; + } + } + + // Editor commands + returnVal = self.editorCommands.queryCommandValue(cmd); + if (returnVal !== undefined) { + return returnVal; + } + + // Browser commands + try { + return self.getDoc().queryCommandValue(cmd); + } catch (ex) { + // Fails sometimes see bug: 1896577 + } + }, + + /** + * Shows the editor and hides any textarea/div that the editor is supposed to replace. + * + * @method show + */ + show: function() { + var self = this; + + DOM.show(self.getContainer()); + DOM.hide(self.id); + self.load(); + self.fire('show'); + }, + + /** + * Hides the editor and shows any textarea/div that the editor is supposed to replace. + * + * @method hide + */ + hide: function() { + var self = this, doc = self.getDoc(); + + // Fixed bug where IE has a blinking cursor left from the editor + if (ie && doc && !self.inline) { + doc.execCommand('SelectAll'); + } + + // We must save before we hide so Safari doesn't crash + self.save(); + + // defer the call to hide to prevent an IE9 crash #4921 + DOM.hide(self.getContainer()); + DOM.setStyle(self.id, 'display', self.orgDisplay); + self.fire('hide'); + }, + + /** + * Returns true/false if the editor is hidden or not. + * + * @method isHidden + * @return {Boolean} True/false if the editor is hidden or not. + */ + isHidden: function() { + return !DOM.isHidden(this.id); + }, + + /** + * Sets the progress state, this will display a throbber/progess for the editor. + * This is ideal for asycronous operations like an AJAX save call. + * + * @method setProgressState + * @param {Boolean} state Boolean state if the progress should be shown or hidden. + * @param {Number} time Optional time to wait before the progress gets shown. + * @return {Boolean} Same as the input state. + * @example + * // Show progress for the active editor + * tinymce.activeEditor.setProgressState(true); + * + * // Hide progress for the active editor + * tinymce.activeEditor.setProgressState(false); + * + * // Show progress after 3 seconds + * tinymce.activeEditor.setProgressState(true, 3000); + */ + setProgressState: function(state, time) { + this.fire('ProgressState', {state: state, time: time}); + }, + + /** + * Loads contents from the textarea or div element that got converted into an editor instance. + * This method will move the contents from that textarea or div into the editor by using setContent + * so all events etc that method has will get dispatched as well. + * + * @method load + * @param {Object} args Optional content object, this gets passed around through the whole load process. + * @return {String} HTML string that got set into the editor. + */ + load: function(args) { + var self = this, elm = self.getElement(), html; + + if (elm) { + args = args || {}; + args.load = true; + + html = self.setContent(elm.value !== undefined ? elm.value : elm.innerHTML, args); + args.element = elm; + + if (!args.no_events) { + self.fire('LoadContent', args); + } + + args.element = elm = null; + + return html; + } + }, + + /** + * Saves the contents from a editor out to the textarea or div element that got converted into an editor instance. + * This method will move the HTML contents from the editor into that textarea or div by getContent + * so all events etc that method has will get dispatched as well. + * + * @method save + * @param {Object} args Optional content object, this gets passed around through the whole save process. + * @return {String} HTML string that got set into the textarea/div. + */ + save: function(args) { + var self = this, elm = self.getElement(), html, form; + + if (!elm || !self.initialized) { + return; + } + + args = args || {}; + args.save = true; + + args.element = elm; + html = args.content = self.getContent(args); + + if (!args.no_events) { + self.fire('SaveContent', args); + } + + html = args.content; + + if (!/TEXTAREA|INPUT/i.test(elm.nodeName)) { + // Update DIV element when not in inline mode + if (!self.inline) { + elm.innerHTML = html; + } + + // Update hidden form element + if ((form = DOM.getParent(self.id, 'form'))) { + each(form.elements, function(elm) { + if (elm.name == self.id) { + elm.value = html; + return false; + } + }); + } + } else { + elm.value = html; + } + + args.element = elm = null; + + if (args.set_dirty !== false) { + self.isNotDirty = true; + } + + return html; + }, + + /** + * Sets the specified content to the editor instance, this will cleanup the content before it gets set using + * the different cleanup rules options. + * + * @method setContent + * @param {String} content Content to set to editor, normally HTML contents but can be other formats as well. + * @param {Object} args Optional content object, this gets passed around through the whole set process. + * @return {String} HTML string that got set into the editor. + * @example + * // Sets the HTML contents of the activeEditor editor + * tinymce.activeEditor.setContent('some html'); + * + * // Sets the raw contents of the activeEditor editor + * tinymce.activeEditor.setContent('some html', {format: 'raw'}); + * + * // Sets the content of a specific editor (my_editor in this example) + * tinymce.get('my_editor').setContent(data); + * + * // Sets the bbcode contents of the activeEditor editor if the bbcode plugin was added + * tinymce.activeEditor.setContent('[b]some[/b] html', {format: 'bbcode'}); + */ + setContent: function(content, args) { + var self = this, body = self.getBody(), forcedRootBlockName; + + // Setup args object + args = args || {}; + args.format = args.format || 'html'; + args.set = true; + args.content = content; + + // Do preprocessing + if (!args.no_events) { + self.fire('BeforeSetContent', args); + } + + content = args.content; + + // Padd empty content in Gecko and Safari. Commands will otherwise fail on the content + // It will also be impossible to place the caret in the editor unless there is a BR element present + if (content.length === 0 || /^\s+$/.test(content)) { + forcedRootBlockName = self.settings.forced_root_block; + + // Check if forcedRootBlock is configured and that the block is a valid child of the body + if (forcedRootBlockName && self.schema.isValidChild(body.nodeName.toLowerCase(), forcedRootBlockName.toLowerCase())) { + // Padd with bogus BR elements on modern browsers and IE 7 and 8 since they don't render empty P tags properly + content = ie && ie < 11 ? '' : '
    '; + content = self.dom.createHTML(forcedRootBlockName, self.settings.forced_root_block_attrs, content); + } else if (!ie) { + // We need to add a BR when forced_root_block is disabled on non IE browsers to place the caret + content = '
    '; + } + + body.innerHTML = content; + + self.fire('SetContent', args); + } else { + // Parse and serialize the html + if (args.format !== 'raw') { + content = new Serializer({}, self.schema).serialize( + self.parser.parse(content, {isRootContent: true}) + ); + } + + // Set the new cleaned contents to the editor + args.content = trim(content); + self.dom.setHTML(body, args.content); + + // Do post processing + if (!args.no_events) { + self.fire('SetContent', args); + } + + // Don't normalize selection if the focused element isn't the body in + // content editable mode since it will steal focus otherwise + /*if (!self.settings.content_editable || document.activeElement === self.getBody()) { + self.selection.normalize(); + }*/ + } + + return args.content; + }, + + /** + * Gets the content from the editor instance, this will cleanup the content before it gets returned using + * the different cleanup rules options. + * + * @method getContent + * @param {Object} args Optional content object, this gets passed around through the whole get process. + * @return {String} Cleaned content string, normally HTML contents. + * @example + * // Get the HTML contents of the currently active editor + * console.debug(tinymce.activeEditor.getContent()); + * + * // Get the raw contents of the currently active editor + * tinymce.activeEditor.getContent({format: 'raw'}); + * + * // Get content of a specific editor: + * tinymce.get('content id').getContent() + */ + getContent: function(args) { + var self = this, content, body = self.getBody(); + + // Setup args object + args = args || {}; + args.format = args.format || 'html'; + args.get = true; + args.getInner = true; + + // Do preprocessing + if (!args.no_events) { + self.fire('BeforeGetContent', args); + } + + // Get raw contents or by default the cleaned contents + if (args.format == 'raw') { + content = body.innerHTML; + } else if (args.format == 'text') { + content = body.innerText || body.textContent; + } else { + content = self.serializer.serialize(body, args); + } + + // Trim whitespace in beginning/end of HTML + if (args.format != 'text') { + args.content = trim(content); + } else { + args.content = content; + } + + // Do post processing + if (!args.no_events) { + self.fire('GetContent', args); + } + + return args.content; + }, + + /** + * Inserts content at caret position. + * + * @method insertContent + * @param {String} content Content to insert. + */ + insertContent: function(content) { + this.execCommand('mceInsertContent', false, content); + }, + + /** + * Returns true/false if the editor is dirty or not. It will get dirty if the user has made modifications to the contents. + * + * @method isDirty + * @return {Boolean} True/false if the editor is dirty or not. It will get dirty if the user has made modifications to the contents. + * @example + * if (tinymce.activeEditor.isDirty()) + * alert("You must save your contents."); + */ + isDirty: function() { + return !this.isNotDirty; + }, + + /** + * Returns the editors container element. The container element wrappes in + * all the elements added to the page for the editor. Such as UI, iframe etc. + * + * @method getContainer + * @return {Element} HTML DOM element for the editor container. + */ + getContainer: function() { + var self = this; + + if (!self.container) { + self.container = DOM.get(self.editorContainer || self.id + '_parent'); + } + + return self.container; + }, + + /** + * Returns the editors content area container element. The this element is the one who + * holds the iframe or the editable element. + * + * @method getContentAreaContainer + * @return {Element} HTML DOM element for the editor area container. + */ + getContentAreaContainer: function() { + return this.contentAreaContainer; + }, + + /** + * Returns the target element/textarea that got replaced with a TinyMCE editor instance. + * + * @method getElement + * @return {Element} HTML DOM element for the replaced element. + */ + getElement: function() { + return DOM.get(this.settings.content_element || this.id); + }, + + /** + * Returns the iframes window object. + * + * @method getWin + * @return {Window} Iframe DOM window object. + */ + getWin: function() { + var self = this, elm; + + if (!self.contentWindow) { + elm = DOM.get(self.id + "_ifr"); + + if (elm) { + self.contentWindow = elm.contentWindow; + } + } + + return self.contentWindow; + }, + + /** + * Returns the iframes document object. + * + * @method getDoc + * @return {Document} Iframe DOM document object. + */ + getDoc: function() { + var self = this, win; + + if (!self.contentDocument) { + win = self.getWin(); + + if (win) { + self.contentDocument = win.document; + } + } + + return self.contentDocument; + }, + + /** + * Returns the iframes body element. + * + * @method getBody + * @return {Element} Iframe body element. + */ + getBody: function() { + return this.bodyElement || this.getDoc().body; + }, + + /** + * URL converter function this gets executed each time a user adds an img, a or + * any other element that has a URL in it. This will be called both by the DOM and HTML + * manipulation functions. + * + * @method convertURL + * @param {string} url URL to convert. + * @param {string} name Attribute name src, href etc. + * @param {string/HTMLElement} elm Tag name or HTML DOM element depending on HTML or DOM insert. + * @return {string} Converted URL string. + */ + convertURL: function(url, name, elm) { + var self = this, settings = self.settings; + + // Use callback instead + if (settings.urlconverter_callback) { + return self.execCallback('urlconverter_callback', url, elm, true, name); + } + + // Don't convert link href since thats the CSS files that gets loaded into the editor also skip local file URLs + if (!settings.convert_urls || (elm && elm.nodeName == 'LINK') || url.indexOf('file:') === 0 || url.length === 0) { + return url; + } + + // Convert to relative + if (settings.relative_urls) { + return self.documentBaseURI.toRelative(url); + } + + // Convert to absolute + url = self.documentBaseURI.toAbsolute(url, settings.remove_script_host); + + return url; + }, + + /** + * Adds visual aid for tables, anchors etc so they can be more easily edited inside the editor. + * + * @method addVisual + * @param {Element} elm Optional root element to loop though to find tables etc that needs the visual aid. + */ + addVisual: function(elm) { + var self = this, settings = self.settings, dom = self.dom, cls; + + elm = elm || self.getBody(); + + if (self.hasVisual === undefined) { + self.hasVisual = settings.visual; + } + + each(dom.select('table,a', elm), function(elm) { + var value; + + switch (elm.nodeName) { + case 'TABLE': + cls = settings.visual_table_class || 'mce-item-table'; + value = dom.getAttrib(elm, 'border'); + + if (!value || value == '0') { + if (self.hasVisual) { + dom.addClass(elm, cls); + } else { + dom.removeClass(elm, cls); + } + } + + return; + + case 'A': + if (!dom.getAttrib(elm, 'href', false)) { + value = dom.getAttrib(elm, 'name') || elm.id; + cls = settings.visual_anchor_class || 'mce-item-anchor'; + + if (value) { + if (self.hasVisual) { + dom.addClass(elm, cls); + } else { + dom.removeClass(elm, cls); + } + } + } + + return; + } + }); + + self.fire('VisualAid', {element: elm, hasVisual: self.hasVisual}); + }, + + /** + * Removes the editor from the dom and tinymce collection. + * + * @method remove + */ + remove: function() { + var self = this; + + if (!self.removed) { + self.save(); + self.fire('remove'); + self.off(); + self.removed = 1; // Cancels post remove event execution + + // Remove any hidden input + if (self.hasHiddenInput) { + DOM.remove(self.getElement().nextSibling); + } + + DOM.setStyle(self.id, 'display', self.orgDisplay); + + // Don't clear the window or document if content editable + // is enabled since other instances might still be present + if (!self.settings.content_editable) { + Event.unbind(self.getWin()); + Event.unbind(self.getDoc()); + } + + var elm = self.getContainer(); + Event.unbind(self.getBody()); + Event.unbind(elm); + + self.editorManager.remove(self); + DOM.remove(elm); + self.destroy(); + } + }, + + bindNative: function(name) { + var self = this; + + if (self.settings.readonly) { + return; + } + + if (self.initialized) { + self.dom.bind(getEventTarget(self, name), name, function(e) { + self.fire(name, e); + }); + } else { + if (!self._pendingNativeEvents) { + self._pendingNativeEvents = [name]; + } else { + self._pendingNativeEvents.push(name); + } + } + }, + + unbindNative: function(name) { + var self = this; + + if (self.initialized) { + self.dom.unbind(name); + } + }, + + /** + * Destroys the editor instance by removing all events, element references or other resources + * that could leak memory. This method will be called automatically when the page is unloaded + * but you can also call it directly if you know what you are doing. + * + * @method destroy + * @param {Boolean} automatic Optional state if the destroy is an automatic destroy or user called one. + */ + destroy: function(automatic) { + var self = this, form; + + // One time is enough + if (self.destroyed) { + return; + } + + // If user manually calls destroy and not remove + // Users seems to have logic that calls destroy instead of remove + if (!automatic && !self.removed) { + self.remove(); + return; + } + + // We must unbind on Gecko since it would otherwise produce the pesky "attempt + // to run compile-and-go script on a cleared scope" message + if (automatic && isGecko) { + Event.unbind(self.getDoc()); + Event.unbind(self.getWin()); + Event.unbind(self.getBody()); + } + + if (!automatic) { + self.editorManager.off('beforeunload', self._beforeUnload); + + // Manual destroy + if (self.theme && self.theme.destroy) { + self.theme.destroy(); + } + + // Destroy controls, selection and dom + self.selection.destroy(); + self.dom.destroy(); + } + + form = self.formElement; + if (form) { + if (form._mceOldSubmit) { + form.submit = form._mceOldSubmit; + form._mceOldSubmit = null; + } + + DOM.unbind(form, 'submit reset', self.formEventDelegate); + } + + self.contentAreaContainer = self.formElement = self.container = self.editorContainer = null; + self.settings.content_element = self.bodyElement = self.contentDocument = self.contentWindow = null; + + if (self.selection) { + self.selection = self.selection.win = self.selection.dom = self.selection.dom.doc = null; + } + + self.destroyed = 1; + }, + + // Internal functions + + _refreshContentEditable: function() { + var self = this, body, parent; + + // Check if the editor was hidden and the re-initalize contentEditable mode by removing and adding the body again + if (self._isHidden()) { + body = self.getBody(); + parent = body.parentNode; + + parent.removeChild(body); + parent.appendChild(body); + + body.focus(); + } + }, + + _isHidden: function() { + var sel; + + if (!isGecko) { + return 0; + } + + // Weird, wheres that cursor selection? + sel = this.selection.getSel(); + return (!sel || !sel.rangeCount || sel.rangeCount === 0); + } + }; + + extend(Editor.prototype, Observable); + + return Editor; +}); + +// Included from: js/tinymce/classes/util/I18n.js + +/** + * I18n.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * I18n class that handles translation of TinyMCE UI. + * Uses po style with csharp style parameters. + * + * @class tinymce.util.I18n + */ +define("tinymce/util/I18n", [], function() { + "use strict"; + + var data = {}; + + return { + /** + * Property gets set to true if a RTL language pack was loaded. + * + * @property rtl + * @type Boolean + */ + rtl: false, + + /** + * Adds translations for a specific language code. + * + * @method add + * @param {String} code Language code like sv_SE. + * @param {Array} items Name/value array with English en_US to sv_SE. + */ + add: function(code, items) { + for (var name in items) { + data[name] = items[name]; + } + + this.rtl = this.rtl || data._dir === 'rtl'; + }, + + /** + * Translates the specified text. + * + * It has a few formats: + * I18n.translate("Text"); + * I18n.translate(["Text {0}/{1}", 0, 1]); + * I18n.translate({raw: "Raw string"}); + * + * @method translate + * @param {String/Object/Array} text Text to translate. + * @return {String} String that got translated. + */ + translate: function(text) { + if (typeof(text) == "undefined") { + return text; + } + + if (typeof(text) != "string" && text.raw) { + return text.raw; + } + + if (text.push) { + var values = text.slice(1); + + text = (data[text[0]] || text[0]).replace(/\{([^\}]+)\}/g, function(match1, match2) { + return values[match2]; + }); + } + + return data[text] || text; + }, + + data: data + }; +}); + +// Included from: js/tinymce/classes/FocusManager.js + +/** + * FocusManager.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class manages the focus/blur state of the editor. This class is needed since some + * browsers fire false focus/blur states when the selection is moved to a UI dialog or similar. + * + * This class will fire two events focus and blur on the editor instances that got affected. + * It will also handle the restore of selection when the focus is lost and returned. + * + * @class tinymce.FocusManager + */ +define("tinymce/FocusManager", [ + "tinymce/dom/DOMUtils", + "tinymce/Env" +], function(DOMUtils, Env) { + var selectionChangeHandler, documentFocusInHandler, DOM = DOMUtils.DOM; + + /** + * Constructs a new focus manager instance. + * + * @constructor FocusManager + * @param {tinymce.EditorManager} editorManager Editor manager instance to handle focus for. + */ + function FocusManager(editorManager) { + function getActiveElement() { + try { + return document.activeElement; + } catch (ex) { + // IE sometimes fails to get the activeElement when resizing table + // TODO: Investigate this + return document.body; + } + } + + // We can't store a real range on IE 11 since it gets mutated so we need to use a bookmark object + // TODO: Move this to a separate range utils class since it's it's logic is present in Selection as well. + function createBookmark(rng) { + if (rng && rng.startContainer) { + return { + startContainer: rng.startContainer, + startOffset: rng.startOffset, + endContainer: rng.endContainer, + endOffset: rng.endOffset + }; + } + + return rng; + } + + function bookmarkToRng(editor, bookmark) { + var rng; + + if (bookmark.startContainer) { + rng = editor.getDoc().createRange(); + rng.setStart(bookmark.startContainer, bookmark.startOffset); + rng.setEnd(bookmark.endContainer, bookmark.endOffset); + } else { + rng = bookmark; + } + + return rng; + } + + function isUIElement(elm) { + return !!DOM.getParent(elm, FocusManager.isEditorUIElement); + } + + function isNodeInBodyOfEditor(node, editor) { + var body = editor.getBody(); + + while (node) { + if (node == body) { + return true; + } + + node = node.parentNode; + } + } + + function registerEvents(e) { + var editor = e.editor; + + editor.on('init', function() { + // Gecko/WebKit has ghost selections in iframes and IE only has one selection per browser tab + if (editor.inline || Env.ie) { + // On other browsers take snapshot on nodechange in inline mode since they have Ghost selections for iframes + editor.on('nodechange keyup', function() { + var node = document.activeElement; + + // IE 11 reports active element as iframe not body of iframe + if (node && node.id == editor.id + '_ifr') { + node = editor.getBody(); + } + + if (isNodeInBodyOfEditor(node, editor)) { + editor.lastRng = editor.selection.getRng(); + } + }); + + // Handles the issue with WebKit not retaining selection within inline document + // If the user releases the mouse out side the body since a mouse up event wont occur on the body + if (Env.webkit && !selectionChangeHandler) { + selectionChangeHandler = function() { + var activeEditor = editorManager.activeEditor; + + if (activeEditor && activeEditor.selection) { + var rng = activeEditor.selection.getRng(); + + // Store when it's non collapsed + if (rng && !rng.collapsed) { + editor.lastRng = rng; + } + } + }; + + DOM.bind(document, 'selectionchange', selectionChangeHandler); + } + } + }); + + editor.on('setcontent', function() { + editor.lastRng = null; + }); + + // Remove last selection bookmark on mousedown see #6305 + editor.on('mousedown', function() { + editor.selection.lastFocusBookmark = null; + }); + + editor.on('focusin', function() { + var focusedEditor = editorManager.focusedEditor; + + if (editor.selection.lastFocusBookmark) { + editor.selection.setRng(bookmarkToRng(editor, editor.selection.lastFocusBookmark)); + editor.selection.lastFocusBookmark = null; + } + + if (focusedEditor != editor) { + if (focusedEditor) { + focusedEditor.fire('blur', {focusedEditor: editor}); + } + + editorManager.activeEditor = editor; + editorManager.focusedEditor = editor; + editor.fire('focus', {blurredEditor: focusedEditor}); + editor.focus(true); + } + + editor.lastRng = null; + }); + + editor.on('focusout', function() { + window.setTimeout(function() { + var focusedEditor = editorManager.focusedEditor; + + // Still the same editor the the blur was outside any editor UI + if (!isUIElement(getActiveElement()) && focusedEditor == editor) { + editor.fire('blur', {focusedEditor: null}); + editorManager.focusedEditor = null; + + // Make sure selection is valid could be invalid if the editor is blured and removed before the timeout occurs + if (editor.selection) { + editor.selection.lastFocusBookmark = null; + } + } + }, 0); + }); + + if (!documentFocusInHandler) { + documentFocusInHandler = function(e) { + var activeEditor = editorManager.activeEditor; + + if (activeEditor && e.target.ownerDocument == document) { + // Check to make sure we have a valid selection + if (activeEditor.selection) { + activeEditor.selection.lastFocusBookmark = createBookmark(activeEditor.lastRng); + } + + // Fire a blur event if the element isn't a UI element + if (!isUIElement(e.target) && editorManager.focusedEditor == activeEditor) { + activeEditor.fire('blur', {focusedEditor: null}); + editorManager.focusedEditor = null; + } + } + }; + + // Check if focus is moved to an element outside the active editor by checking if the target node + // isn't within the body of the activeEditor nor a UI element such as a dialog child control + DOM.bind(document, 'focusin', documentFocusInHandler); + } + } + + function unregisterDocumentEvents(e) { + if (editorManager.focusedEditor == e.editor) { + editorManager.focusedEditor = null; + } + + if (!editorManager.activeEditor) { + DOM.unbind(document, 'selectionchange', selectionChangeHandler); + DOM.unbind(document, 'focusin', documentFocusInHandler); + selectionChangeHandler = documentFocusInHandler = null; + } + } + + editorManager.on('AddEditor', registerEvents); + editorManager.on('RemoveEditor', unregisterDocumentEvents); + } + + /** + * Returns true if the specified element is part of the UI for example an button or text input. + * + * @method isEditorUIElement + * @param {Element} elm Element to check if it's part of the UI or not. + * @return {Boolean} True/false state if the element is part of the UI or not. + */ + FocusManager.isEditorUIElement = function(elm) { + // Needs to be converted to string since svg can have focus: #6776 + return elm.className.toString().indexOf('mce-') !== -1; + }; + + return FocusManager; +}); + +// Included from: js/tinymce/classes/EditorManager.js + +/** + * EditorManager.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class used as a factory for manager for tinymce.Editor instances. + * + * @example + * tinymce.EditorManager.init({}); + * + * @class tinymce.EditorManager + * @mixes tinymce.util.Observable + * @static + */ +define("tinymce/EditorManager", [ + "tinymce/Editor", + "tinymce/dom/DOMUtils", + "tinymce/util/URI", + "tinymce/Env", + "tinymce/util/Tools", + "tinymce/util/Observable", + "tinymce/util/I18n", + "tinymce/FocusManager" +], function(Editor, DOMUtils, URI, Env, Tools, Observable, I18n, FocusManager) { + var DOM = DOMUtils.DOM; + var explode = Tools.explode, each = Tools.each, extend = Tools.extend; + var instanceCounter = 0, beforeUnloadDelegate; + + var EditorManager = { + /** + * Major version of TinyMCE build. + * + * @property majorVersion + * @type String + */ + majorVersion : '4', + + /** + * Minor version of TinyMCE build. + * + * @property minorVersion + * @type String + */ + minorVersion : '0.20', + + /** + * Release date of TinyMCE build. + * + * @property releaseDate + * @type String + */ + releaseDate: '2014-03-18', + + /** + * Collection of editor instances. + * + * @property editors + * @type Object + * @example + * for (edId in tinymce.editors) + * tinymce.editors[edId].save(); + */ + editors: [], + + /** + * Collection of language pack data. + * + * @property i18n + * @type Object + */ + i18n: I18n, + + /** + * Currently active editor instance. + * + * @property activeEditor + * @type tinymce.Editor + * @example + * tinyMCE.activeEditor.selection.getContent(); + * tinymce.EditorManager.activeEditor.selection.getContent(); + */ + activeEditor: null, + + setup: function() { + var self = this, baseURL, documentBaseURL, suffix = "", preInit; + + // Get base URL for the current document + documentBaseURL = document.location.href.replace(/[\?#].*$/, '').replace(/[\/\\][^\/]+$/, ''); + if (!/[\/\\]$/.test(documentBaseURL)) { + documentBaseURL += '/'; + } + + // If tinymce is defined and has a base use that or use the old tinyMCEPreInit + preInit = window.tinymce || window.tinyMCEPreInit; + if (preInit) { + baseURL = preInit.base || preInit.baseURL; + suffix = preInit.suffix; + } else { + // Get base where the tinymce script is located + var scripts = document.getElementsByTagName('script'); + for (var i = 0; i < scripts.length; i++) { + var src = scripts[i].src; + + // Script types supported: + // tinymce.js tinymce.min.js tinymce.dev.js + // tinymce.jquery.js tinymce.jquery.min.js tinymce.jquery.dev.js + // tinymce.full.js tinymce.full.min.js tinymce.full.dev.js + if (/tinymce(\.full|\.jquery|)(\.min|\.dev|)\.js/.test(src)) { + if (src.indexOf('.min') != -1) { + suffix = '.min'; + } + + baseURL = src.substring(0, src.lastIndexOf('/')); + break; + } + } + } + + /** + * Base URL where the root directory if TinyMCE is located. + * + * @property baseURL + * @type String + */ + self.baseURL = new URI(documentBaseURL).toAbsolute(baseURL); + + /** + * Document base URL where the current document is located. + * + * @property documentBaseURL + * @type String + */ + self.documentBaseURL = documentBaseURL; + + /** + * Absolute baseURI for the installation path of TinyMCE. + * + * @property baseURI + * @type tinymce.util.URI + */ + self.baseURI = new URI(self.baseURL); + + /** + * Current suffix to add to each plugin/theme that gets loaded for example ".min". + * + * @property suffix + * @type String + */ + self.suffix = suffix; + + self.focusManager = new FocusManager(self); + }, + + /** + * Initializes a set of editors. This method will create editors based on various settings. + * + * @method init + * @param {Object} settings Settings object to be passed to each editor instance. + * @example + * // Initializes a editor using the longer method + * tinymce.EditorManager.init({ + * some_settings : 'some value' + * }); + * + * // Initializes a editor instance using the shorter version + * tinyMCE.init({ + * some_settings : 'some value' + * }); + */ + init: function(settings) { + var self = this, editors = [], editor; + + function createId(elm) { + var id = elm.id; + + // Use element id, or unique name or generate a unique id + if (!id) { + id = elm.name; + + if (id && !DOM.get(id)) { + id = elm.name; + } else { + // Generate unique name + id = DOM.uniqueId(); + } + + elm.setAttribute('id', id); + } + + return id; + } + + function execCallback(se, n, s) { + var f = se[n]; + + if (!f) { + return; + } + + return f.apply(s || this, Array.prototype.slice.call(arguments, 2)); + } + + function hasClass(n, c) { + return c.constructor === RegExp ? c.test(n.className) : DOM.hasClass(n, c); + } + + function readyHandler() { + var l, co; + + DOM.unbind(window, 'ready', readyHandler); + + execCallback(settings, 'onpageload'); + + if (settings.types) { + // Process type specific selector + each(settings.types, function(type) { + each(DOM.select(type.selector), function(elm) { + var editor = new Editor(createId(elm), extend({}, settings, type), self); + editors.push(editor); + editor.render(1); + }); + }); + + return; + } else if (settings.selector) { + // Process global selector + each(DOM.select(settings.selector), function(elm) { + var editor = new Editor(createId(elm), settings, self); + editors.push(editor); + editor.render(1); + }); + + return; + } + + // Fallback to old setting + switch (settings.mode) { + case "exact": + l = settings.elements || ''; + + if(l.length > 0) { + each(explode(l), function(v) { + if (DOM.get(v)) { + editor = new Editor(v, settings, self); + editors.push(editor); + editor.render(true); + } else { + each(document.forms, function(f) { + each(f.elements, function(e) { + if (e.name === v) { + v = 'mce_editor_' + instanceCounter++; + DOM.setAttrib(e, 'id', v); + + editor = new Editor(v, settings, self); + editors.push(editor); + editor.render(1); + } + }); + }); + } + }); + } + break; + + case "textareas": + case "specific_textareas": + each(DOM.select('textarea'), function(elm) { + if (settings.editor_deselector && hasClass(elm, settings.editor_deselector)) { + return; + } + + if (!settings.editor_selector || hasClass(elm, settings.editor_selector)) { + editor = new Editor(createId(elm), settings, self); + editors.push(editor); + editor.render(true); + } + }); + break; + } + + // Call onInit when all editors are initialized + if (settings.oninit) { + l = co = 0; + + each(editors, function(ed) { + co++; + + if (!ed.initialized) { + // Wait for it + ed.on('init', function() { + l++; + + // All done + if (l == co) { + execCallback(settings, 'oninit'); + } + }); + } else { + l++; + } + + // All done + if (l == co) { + execCallback(settings, 'oninit'); + } + }); + } + } + + self.settings = settings; + + DOM.bind(window, 'ready', readyHandler); + }, + + /** + * Returns a editor instance by id. + * + * @method get + * @param {String/Number} id Editor instance id or index to return. + * @return {tinymce.Editor} Editor instance to return. + * @example + * // Adds an onclick event to an editor by id (shorter version) + * tinymce.get('mytextbox').on('click', function(e) { + * ed.windowManager.alert('Hello world!'); + * }); + * + * // Adds an onclick event to an editor by id (longer version) + * tinymce.EditorManager.get('mytextbox').on('click', function(e) { + * ed.windowManager.alert('Hello world!'); + * }); + */ + get: function(id) { + if (id === undefined) { + return this.editors; + } + + return this.editors[id]; + }, + + /** + * Adds an editor instance to the editor collection. This will also set it as the active editor. + * + * @method add + * @param {tinymce.Editor} editor Editor instance to add to the collection. + * @return {tinymce.Editor} The same instance that got passed in. + */ + add: function(editor) { + var self = this, editors = self.editors; + + // Add named and index editor instance + editors[editor.id] = editor; + editors.push(editor); + + self.activeEditor = editor; + + /** + * Fires when an editor is added to the EditorManager collection. + * + * @event AddEditor + * @param {Object} e Event arguments. + */ + self.fire('AddEditor', {editor: editor}); + + if (!beforeUnloadDelegate) { + beforeUnloadDelegate = function() { + self.fire('BeforeUnload'); + }; + + DOM.bind(window, 'beforeunload', beforeUnloadDelegate); + } + + return editor; + }, + + /** + * Creates an editor instance and adds it to the EditorManager collection. + * + * @method createEditor + * @param {String} id Instance id to use for editor. + * @param {Object} settings Editor instance settings. + * @return {tinymce.Editor} Editor instance that got created. + */ + createEditor: function(id, settings) { + return this.add(new Editor(id, settings, this)); + }, + + /** + * Removes a editor or editors form page. + * + * @example + * // Remove all editors bound to divs + * tinymce.remove('div'); + * + * // Remove all editors bound to textareas + * tinymce.remove('textarea'); + * + * // Remove all editors + * tinymce.remove(); + * + * // Remove specific instance by id + * tinymce.remove('#id'); + * + * @method remove + * @param {tinymce.Editor/String/Object} [selector] CSS selector or editor instance to remove. + * @return {tinymce.Editor} The editor that got passed in will be return if it was found otherwise null. + */ + remove: function(selector) { + var self = this, i, editors = self.editors, editor, removedFromList; + + // Remove all editors + if (!selector) { + for (i = editors.length - 1; i >= 0; i--) { + self.remove(editors[i]); + } + + return; + } + + // Remove editors by selector + if (typeof(selector) == "string") { + selector = selector.selector || selector; + + each(DOM.select(selector), function(elm) { + self.remove(editors[elm.id]); + }); + + return; + } + + // Remove specific editor + editor = selector; + + // Not in the collection + if (!editors[editor.id]) { + return null; + } + + delete editors[editor.id]; + + for (i = 0; i < editors.length; i++) { + if (editors[i] == editor) { + editors.splice(i, 1); + removedFromList = true; + break; + } + } + + // Select another editor since the active one was removed + if (self.activeEditor == editor) { + self.activeEditor = editors[0]; + } + + /** + * Fires when an editor is removed from EditorManager collection. + * + * @event RemoveEditor + * @param {Object} e Event arguments. + */ + if (removedFromList) { + self.fire('RemoveEditor', {editor: editor}); + } + + if (!editors.length) { + DOM.unbind(window, 'beforeunload', beforeUnloadDelegate); + } + + editor.remove(); + + return editor; + }, + + /** + * Executes a specific command on the currently active editor. + * + * @method execCommand + * @param {String} c Command to perform for example Bold. + * @param {Boolean} u Optional boolean state if a UI should be presented for the command or not. + * @param {String} v Optional value parameter like for example an URL to a link. + * @return {Boolean} true/false if the command was executed or not. + */ + execCommand: function(cmd, ui, value) { + var self = this, editor = self.get(value); + + // Manager commands + switch (cmd) { + case "mceAddEditor": + if (!self.get(value)) { + new Editor(value, self.settings, self).render(); + } + + return true; + + case "mceRemoveEditor": + if (editor) { + editor.remove(); + } + + return true; + + case 'mceToggleEditor': + if (!editor) { + self.execCommand('mceAddEditor', 0, value); + return true; + } + + if (editor.isHidden()) { + editor.show(); + } else { + editor.hide(); + } + + return true; + } + + // Run command on active editor + if (self.activeEditor) { + return self.activeEditor.execCommand(cmd, ui, value); + } + + return false; + }, + + /** + * Calls the save method on all editor instances in the collection. This can be useful when a form is to be submitted. + * + * @method triggerSave + * @example + * // Saves all contents + * tinyMCE.triggerSave(); + */ + triggerSave: function() { + each(this.editors, function(editor) { + editor.save(); + }); + }, + + /** + * Adds a language pack, this gets called by the loaded language files like en.js. + * + * @method addI18n + * @param {String} code Optional language code. + * @param {Object} items Name/value object with translations. + */ + addI18n: function(code, items) { + I18n.add(code, items); + }, + + /** + * Translates the specified string using the language pack items. + * + * @method translate + * @param {String/Array/Object} text String to translate + * @return {String} Translated string. + */ + translate: function(text) { + return I18n.translate(text); + } + }; + + extend(EditorManager, Observable); + + EditorManager.setup(); + + // Export EditorManager as tinymce/tinymce in global namespace + window.tinymce = window.tinyMCE = EditorManager; + + return EditorManager; +}); + +// Included from: js/tinymce/classes/LegacyInput.js + +/** + * LegacyInput.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +define("tinymce/LegacyInput", [ + "tinymce/EditorManager", + "tinymce/util/Tools" +], function(EditorManager, Tools) { + var each = Tools.each, explode = Tools.explode; + + EditorManager.on('AddEditor', function(e) { + var editor = e.editor; + + editor.on('preInit', function() { + var filters, fontSizes, dom, settings = editor.settings; + + function replaceWithSpan(node, styles) { + each(styles, function(value, name) { + if (value) { + dom.setStyle(node, name, value); + } + }); + + dom.rename(node, 'span'); + } + + function convert(e) { + dom = editor.dom; + + if (settings.convert_fonts_to_spans) { + each(dom.select('font,u,strike', e.node), function(node) { + filters[node.nodeName.toLowerCase()](dom, node); + }); + } + } + + if (settings.inline_styles) { + fontSizes = explode(settings.font_size_legacy_values); + + filters = { + font: function(dom, node) { + replaceWithSpan(node, { + backgroundColor: node.style.backgroundColor, + color: node.color, + fontFamily: node.face, + fontSize: fontSizes[parseInt(node.size, 10) - 1] + }); + }, + + u: function(dom, node) { + replaceWithSpan(node, { + textDecoration: 'underline' + }); + }, + + strike: function(dom, node) { + replaceWithSpan(node, { + textDecoration: 'line-through' + }); + } + }; + + editor.on('PreProcess SetContent', convert); + } + }); + }); +}); + +// Included from: js/tinymce/classes/util/XHR.js + +/** + * XHR.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class enables you to send XMLHTTPRequests cross browser. + * @class tinymce.util.XHR + * @static + * @example + * // Sends a low level Ajax request + * tinymce.util.XHR.send({ + * url: 'someurl', + * success: function(text) { + * console.debug(text); + * } + * }); + */ +define("tinymce/util/XHR", [], function() { + return { + /** + * Sends a XMLHTTPRequest. + * Consult the Wiki for details on what settings this method takes. + * + * @method send + * @param {Object} settings Object will target URL, callbacks and other info needed to make the request. + */ + send: function(settings) { + var xhr, count = 0; + + function ready() { + if (!settings.async || xhr.readyState == 4 || count++ > 10000) { + if (settings.success && count < 10000 && xhr.status == 200) { + settings.success.call(settings.success_scope, '' + xhr.responseText, xhr, settings); + } else if (settings.error) { + settings.error.call(settings.error_scope, count > 10000 ? 'TIMED_OUT' : 'GENERAL', xhr, settings); + } + + xhr = null; + } else { + setTimeout(ready, 10); + } + } + + // Default settings + settings.scope = settings.scope || this; + settings.success_scope = settings.success_scope || settings.scope; + settings.error_scope = settings.error_scope || settings.scope; + settings.async = settings.async === false ? false : true; + settings.data = settings.data || ''; + + xhr = new XMLHttpRequest(); + + if (xhr) { + if (xhr.overrideMimeType) { + xhr.overrideMimeType(settings.content_type); + } + + xhr.open(settings.type || (settings.data ? 'POST' : 'GET'), settings.url, settings.async); + + if (settings.content_type) { + xhr.setRequestHeader('Content-Type', settings.content_type); + } + + xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); + + xhr.send(settings.data); + + // Syncronous request + if (!settings.async) { + return ready(); + } + + // Wait for response, onReadyStateChange can not be used since it leaks memory in IE + setTimeout(ready, 10); + } + } + }; +}); + +// Included from: js/tinymce/classes/util/JSON.js + +/** + * JSON.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * JSON parser and serializer class. + * + * @class tinymce.util.JSON + * @static + * @example + * // JSON parse a string into an object + * var obj = tinymce.util.JSON.parse(somestring); + * + * // JSON serialize a object into an string + * var str = tinymce.util.JSON.serialize(obj); + */ +define("tinymce/util/JSON", [], function() { + function serialize(o, quote) { + var i, v, t, name; + + quote = quote || '"'; + + if (o === null) { + return 'null'; + } + + t = typeof o; + + if (t == 'string') { + v = '\bb\tt\nn\ff\rr\""\'\'\\\\'; + + return quote + o.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g, function(a, b) { + // Make sure single quotes never get encoded inside double quotes for JSON compatibility + if (quote === '"' && a === "'") { + return a; + } + + i = v.indexOf(b); + + if (i + 1) { + return '\\' + v.charAt(i + 1); + } + + a = b.charCodeAt().toString(16); + + return '\\u' + '0000'.substring(a.length) + a; + }) + quote; + } + + if (t == 'object') { + if (o.hasOwnProperty && Object.prototype.toString.call(o) === '[object Array]') { + for (i = 0, v = '['; i < o.length; i++) { + v += (i > 0 ? ',' : '') + serialize(o[i], quote); + } + + return v + ']'; + } + + v = '{'; + + for (name in o) { + if (o.hasOwnProperty(name)) { + v += typeof o[name] != 'function' ? (v.length > 1 ? ',' + quote : quote) + name + + quote + ':' + serialize(o[name], quote) : ''; + } + } + + return v + '}'; + } + + return '' + o; + } + + return { + /** + * Serializes the specified object as a JSON string. + * + * @method serialize + * @param {Object} obj Object to serialize as a JSON string. + * @param {String} quote Optional quote string defaults to ". + * @return {string} JSON string serialized from input. + */ + serialize: serialize, + + /** + * Unserializes/parses the specified JSON string into a object. + * + * @method parse + * @param {string} s JSON String to parse into a JavaScript object. + * @return {Object} Object from input JSON string or undefined if it failed. + */ + parse: function(text) { + try { + // Trick uglify JS + return window[String.fromCharCode(101) + 'val']('(' + text + ')'); + } catch (ex) { + // Ignore + } + } + + /**#@-*/ + }; +}); + +// Included from: js/tinymce/classes/util/JSONRequest.js + +/** + * JSONRequest.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class enables you to use JSON-RPC to call backend methods. + * + * @class tinymce.util.JSONRequest + * @example + * var json = new tinymce.util.JSONRequest({ + * url: 'somebackend.php' + * }); + * + * // Send RPC call 1 + * json.send({ + * method: 'someMethod1', + * params: ['a', 'b'], + * success: function(result) { + * console.dir(result); + * } + * }); + * + * // Send RPC call 2 + * json.send({ + * method: 'someMethod2', + * params: ['a', 'b'], + * success: function(result) { + * console.dir(result); + * } + * }); + */ +define("tinymce/util/JSONRequest", [ + "tinymce/util/JSON", + "tinymce/util/XHR", + "tinymce/util/Tools" +], function(JSON, XHR, Tools) { + var extend = Tools.extend; + + function JSONRequest(settings) { + this.settings = extend({}, settings); + this.count = 0; + } + + /** + * Simple helper function to send a JSON-RPC request without the need to initialize an object. + * Consult the Wiki API documentation for more details on what you can pass to this function. + * + * @method sendRPC + * @static + * @param {Object} o Call object where there are three field id, method and params this object should also contain callbacks etc. + */ + JSONRequest.sendRPC = function(o) { + return new JSONRequest().send(o); + }; + + JSONRequest.prototype = { + /** + * Sends a JSON-RPC call. Consult the Wiki API documentation for more details on what you can pass to this function. + * + * @method send + * @param {Object} args Call object where there are three field id, method and params this object should also contain callbacks etc. + */ + send: function(args) { + var ecb = args.error, scb = args.success; + + args = extend(this.settings, args); + + args.success = function(c, x) { + c = JSON.parse(c); + + if (typeof(c) == 'undefined') { + c = { + error : 'JSON Parse error.' + }; + } + + if (c.error) { + ecb.call(args.error_scope || args.scope, c.error, x); + } else { + scb.call(args.success_scope || args.scope, c.result); + } + }; + + args.error = function(ty, x) { + if (ecb) { + ecb.call(args.error_scope || args.scope, ty, x); + } + }; + + args.data = JSON.serialize({ + id: args.id || 'c' + (this.count++), + method: args.method, + params: args.params + }); + + // JSON content type for Ruby on rails. Bug: #1883287 + args.content_type = 'application/json'; + + XHR.send(args); + } + }; + + return JSONRequest; +}); + +// Included from: js/tinymce/classes/util/JSONP.js + +/** + * JSONP.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +define("tinymce/util/JSONP", [ + "tinymce/dom/DOMUtils" +], function(DOMUtils) { + return { + callbacks: {}, + count: 0, + + send: function(settings) { + var self = this, dom = DOMUtils.DOM, count = settings.count !== undefined ? settings.count : self.count; + var id = 'tinymce_jsonp_' + count; + + self.callbacks[count] = function(json) { + dom.remove(id); + delete self.callbacks[count]; + + settings.callback(json); + }; + + dom.add(dom.doc.body, 'script', { + id: id, + src: settings.url, + type: 'text/javascript' + }); + + self.count++; + } + }; +}); + +// Included from: js/tinymce/classes/util/LocalStorage.js + +/** + * LocalStorage.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class will simulate LocalStorage on IE 7 and return the native version on modern browsers. + * Storage is done using userData on IE 7 and a special serialization format. The format is designed + * to be as small as possible by making sure that the keys and values doesn't need to be encoded. This + * makes it possible to store for example HTML data. + * + * Storage format for userData: + * ,,,,... + * + * For example this data key1=value1,key2=value2 would be: + * 4,key1,6,value1,4,key2,6,value2 + * + * @class tinymce.util.LocalStorage + * @static + * @version 4.0 + * @example + * tinymce.util.LocalStorage.setItem('key', 'value'); + * var value = tinymce.util.LocalStorage.getItem('key'); + */ +define("tinymce/util/LocalStorage", [], function() { + var LocalStorage, storageElm, items, keys, userDataKey, hasOldIEDataSupport; + + // Check for native support + try { + if (window.localStorage) { + return localStorage; + } + } catch (ex) { + // Ignore + } + + userDataKey = "tinymce"; + storageElm = document.documentElement; + hasOldIEDataSupport = !!storageElm.addBehavior; + + if (hasOldIEDataSupport) { + storageElm.addBehavior('#default#userData'); + } + + /** + * Gets the keys names and updates LocalStorage.length property. Since IE7 doesn't have any getters/setters. + */ + function updateKeys() { + keys = []; + + for (var key in items) { + keys.push(key); + } + + LocalStorage.length = keys.length; + } + + /** + * Loads the userData string and parses it into the items structure. + */ + function load() { + var key, data, value, pos = 0; + + items = {}; + + // localStorage can be disabled on WebKit/Gecko so make a dummy storage + if (!hasOldIEDataSupport) { + return; + } + + function next(end) { + var value, nextPos; + + nextPos = end !== undefined ? pos + end : data.indexOf(',', pos); + if (nextPos === -1 || nextPos > data.length) { + return null; + } + + value = data.substring(pos, nextPos); + pos = nextPos + 1; + + return value; + } + + storageElm.load(userDataKey); + data = storageElm.getAttribute(userDataKey) || ''; + + do { + var offset = next(); + if (offset === null) { + break; + } + + key = next(parseInt(offset, 32) || 0); + if (key !== null) { + offset = next(); + if (offset === null) { + break; + } + + value = next(parseInt(offset, 32) || 0); + + if (key) { + items[key] = value; + } + } + } while (key !== null); + + updateKeys(); + } + + /** + * Saves the items structure into a the userData format. + */ + function save() { + var value, data = ''; + + // localStorage can be disabled on WebKit/Gecko so make a dummy storage + if (!hasOldIEDataSupport) { + return; + } + + for (var key in items) { + value = items[key]; + data += (data ? ',' : '') + key.length.toString(32) + ',' + key + ',' + value.length.toString(32) + ',' + value; + } + + storageElm.setAttribute(userDataKey, data); + + try { + storageElm.save(userDataKey); + } catch (ex) { + // Ignore disk full + } + + updateKeys(); + } + + LocalStorage = { + /** + * Length of the number of items in storage. + * + * @property length + * @type Number + * @return {Number} Number of items in storage. + */ + //length:0, + + /** + * Returns the key name by index. + * + * @method key + * @param {Number} index Index of key to return. + * @return {String} Key value or null if it wasn't found. + */ + key: function(index) { + return keys[index]; + }, + + /** + * Returns the value if the specified key or null if it wasn't found. + * + * @method getItem + * @param {String} key Key of item to retrive. + * @return {String} Value of the specified item or null if it wasn't found. + */ + getItem: function(key) { + return key in items ? items[key] : null; + }, + + /** + * Sets the value of the specified item by it's key. + * + * @method setItem + * @param {String} key Key of the item to set. + * @param {String} value Value of the item to set. + */ + setItem: function(key, value) { + items[key] = "" + value; + save(); + }, + + /** + * Removes the specified item by key. + * + * @method removeItem + * @param {String} key Key of item to remove. + */ + removeItem: function(key) { + delete items[key]; + save(); + }, + + /** + * Removes all items. + * + * @method clear + */ + clear: function() { + items = {}; + save(); + } + }; + + load(); + + return LocalStorage; +}); + +// Included from: js/tinymce/classes/Compat.js + +/** + * Compat.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * TinyMCE core class. + * + * @static + * @class tinymce + * @borrow-members tinymce.EditorManager + * @borrow-members tinymce.util.Tools + */ +define("tinymce/Compat", [ + "tinymce/dom/DOMUtils", + "tinymce/dom/EventUtils", + "tinymce/dom/ScriptLoader", + "tinymce/AddOnManager", + "tinymce/util/Tools", + "tinymce/Env" +], function(DOMUtils, EventUtils, ScriptLoader, AddOnManager, Tools, Env) { + var tinymce = window.tinymce; + + /** + * @property {tinymce.dom.DOMUtils} DOM Global DOM instance. + * @property {tinymce.dom.ScriptLoader} ScriptLoader Global ScriptLoader instance. + * @property {tinymce.AddOnManager} PluginManager Global PluginManager instance. + * @property {tinymce.AddOnManager} ThemeManager Global ThemeManager instance. + */ + tinymce.DOM = DOMUtils.DOM; + tinymce.ScriptLoader = ScriptLoader.ScriptLoader; + tinymce.PluginManager = AddOnManager.PluginManager; + tinymce.ThemeManager = AddOnManager.ThemeManager; + + tinymce.dom = tinymce.dom || {}; + tinymce.dom.Event = EventUtils.Event; + + Tools.each(Tools, function(func, key) { + tinymce[key] = func; + }); + + Tools.each('isOpera isWebKit isIE isGecko isMac'.split(' '), function(name) { + tinymce[name] = Env[name.substr(2).toLowerCase()]; + }); + + return {}; +}); + +// Describe the different namespaces + +/** + * Root level namespace this contains classes directly releated to the TinyMCE editor. + * + * @namespace tinymce + */ + +/** + * Contains classes for handling the browsers DOM. + * + * @namespace tinymce.dom + */ + +/** + * Contains html parser and serializer logic. + * + * @namespace tinymce.html + */ + +/** + * Contains the different UI types such as buttons, listboxes etc. + * + * @namespace tinymce.ui + */ + +/** + * Contains various utility classes such as json parser, cookies etc. + * + * @namespace tinymce.util + */ + +// Included from: js/tinymce/classes/ui/Layout.js + +/** + * Layout.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Base layout manager class. + * + * @class tinymce.ui.Layout + */ +define("tinymce/ui/Layout", [ + "tinymce/util/Class", + "tinymce/util/Tools" +], function(Class, Tools) { + "use strict"; + + return Class.extend({ + Defaults: { + firstControlClass: 'first', + lastControlClass: 'last' + }, + + /** + * Constructs a layout instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + */ + init: function(settings) { + this.settings = Tools.extend({}, this.Defaults, settings); + }, + + /** + * This method gets invoked before the layout renders the controls. + * + * @method preRender + * @param {tinymce.ui.Container} container Container instance to preRender. + */ + preRender: function(container) { + container.addClass(this.settings.containerClass, 'body'); + }, + + /** + * Applies layout classes to the container. + * + * @private + */ + applyClasses: function(container) { + var self = this, settings = self.settings, items, firstClass, lastClass; + + items = container.items().filter(':visible'); + firstClass = settings.firstControlClass; + lastClass = settings.lastControlClass; + + items.each(function(item) { + item.removeClass(firstClass).removeClass(lastClass); + + if (settings.controlClass) { + item.addClass(settings.controlClass); + } + }); + + items.eq(0).addClass(firstClass); + items.eq(-1).addClass(lastClass); + }, + + /** + * Renders the specified container and any layout specific HTML. + * + * @method renderHtml + * @param {tinymce.ui.Container} container Container to render HTML for. + */ + renderHtml: function(container) { + var self = this, settings = self.settings, items, html = ''; + + items = container.items(); + items.eq(0).addClass(settings.firstControlClass); + items.eq(-1).addClass(settings.lastControlClass); + + items.each(function(item) { + if (settings.controlClass) { + item.addClass(settings.controlClass); + } + + html += item.renderHtml(); + }); + + return html; + }, + + /** + * Recalculates the positions of the controls in the specified container. + * + * @method recalc + * @param {tinymce.ui.Container} container Container instance to recalc. + */ + recalc: function() { + }, + + /** + * This method gets invoked after the layout renders the controls. + * + * @method postRender + * @param {tinymce.ui.Container} container Container instance to postRender. + */ + postRender: function() { + } + }); +}); + +// Included from: js/tinymce/classes/ui/AbsoluteLayout.js + +/** + * AbsoluteLayout.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * LayoutManager for absolute positioning. This layout manager is more of + * a base class for other layouts but can be created and used directly. + * + * @-x-less AbsoluteLayout.less + * @class tinymce.ui.AbsoluteLayout + * @extends tinymce.ui.Layout + */ +define("tinymce/ui/AbsoluteLayout", [ + "tinymce/ui/Layout" +], function(Layout) { + "use strict"; + + return Layout.extend({ + Defaults: { + containerClass: 'abs-layout', + controlClass: 'abs-layout-item' + }, + + /** + * Recalculates the positions of the controls in the specified container. + * + * @method recalc + * @param {tinymce.ui.Container} container Container instance to recalc. + */ + recalc: function(container) { + container.items().filter(':visible').each(function(ctrl) { + var settings = ctrl.settings; + + ctrl.layoutRect({ + x: settings.x, + y: settings.y, + w: settings.w, + h: settings.h + }); + + if (ctrl.recalc) { + ctrl.recalc(); + } + }); + }, + + /** + * Renders the specified container and any layout specific HTML. + * + * @method renderHtml + * @param {tinymce.ui.Container} container Container to render HTML for. + */ + renderHtml: function(container) { + return '
    ' + this._super(container); + } + }); +}); + +// Included from: js/tinymce/classes/ui/Tooltip.js + +/** + * Tooltip.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a tooltip instance. + * + * @-x-less ToolTip.less + * @class tinymce.ui.ToolTip + * @extends tinymce.ui.Control + * @mixes tinymce.ui.Movable + */ +define("tinymce/ui/Tooltip", [ + "tinymce/ui/Control", + "tinymce/ui/Movable" +], function(Control, Movable) { + return Control.extend({ + Mixins: [Movable], + + Defaults: { + classes: 'widget tooltip tooltip-n' + }, + + /** + * Sets/gets the current label text. + * + * @method text + * @param {String} [text] New label text. + * @return {String|tinymce.ui.Tooltip} Current text or current label instance. + */ + text: function(value) { + var self = this; + + if (typeof(value) != "undefined") { + self._value = value; + + if (self._rendered) { + self.getEl().lastChild.innerHTML = self.encode(value); + } + + return self; + } + + return self._value; + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, prefix = self.classPrefix; + + return ( + '' + ); + }, + + /** + * Repaints the control after a layout operation. + * + * @method repaint + */ + repaint: function() { + var self = this, style, rect; + + style = self.getEl().style; + rect = self._layoutRect; + + style.left = rect.x + 'px'; + style.top = rect.y + 'px'; + style.zIndex = 0xFFFF + 0xFFFF; + } + }); +}); + +// Included from: js/tinymce/classes/ui/Widget.js + +/** + * Widget.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Widget base class a widget is a control that has a tooltip and some basic states. + * + * @class tinymce.ui.Widget + * @extends tinymce.ui.Control + */ +define("tinymce/ui/Widget", [ + "tinymce/ui/Control", + "tinymce/ui/Tooltip" +], function(Control, Tooltip) { + "use strict"; + + var tooltip; + + var Widget = Control.extend({ + /** + * Constructs a instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + * @setting {String} tooltip Tooltip text to display when hovering. + * @setting {Boolean} autofocus True if the control should be focused when rendered. + * @setting {String} text Text to display inside widget. + */ + init: function(settings) { + var self = this; + + self._super(settings); + self.canFocus = true; + + if (settings.tooltip && Widget.tooltips !== false) { + self.on('mouseenter', function(e) { + var tooltip = self.tooltip().moveTo(-0xFFFF); + + if (e.control == self) { + var rel = tooltip.text(settings.tooltip).show().testMoveRel(self.getEl(), ['bc-tc', 'bc-tl', 'bc-tr']); + + tooltip.toggleClass('tooltip-n', rel == 'bc-tc'); + tooltip.toggleClass('tooltip-nw', rel == 'bc-tl'); + tooltip.toggleClass('tooltip-ne', rel == 'bc-tr'); + + tooltip.moveRel(self.getEl(), rel); + } else { + tooltip.hide(); + } + }); + + self.on('mouseleave mousedown click', function() { + self.tooltip().hide(); + }); + } + + self.aria('label', settings.ariaLabel || settings.tooltip); + }, + + /** + * Returns the current tooltip instance. + * + * @method tooltip + * @return {tinymce.ui.Tooltip} Tooltip instance. + */ + tooltip: function() { + if (!tooltip) { + tooltip = new Tooltip({type: 'tooltip'}); + tooltip.renderTo(); + } + + return tooltip; + }, + + /** + * Sets/gets the active state of the widget. + * + * @method active + * @param {Boolean} [state] State if the control is active. + * @return {Boolean|tinymce.ui.Widget} True/false or current widget instance. + */ + active: function(state) { + var self = this, undef; + + if (state !== undef) { + self.aria('pressed', state); + self.toggleClass('active', state); + } + + return self._super(state); + }, + + /** + * Sets/gets the disabled state of the widget. + * + * @method disabled + * @param {Boolean} [state] State if the control is disabled. + * @return {Boolean|tinymce.ui.Widget} True/false or current widget instance. + */ + disabled: function(state) { + var self = this, undef; + + if (state !== undef) { + self.aria('disabled', state); + self.toggleClass('disabled', state); + } + + return self._super(state); + }, + + /** + * Called after the control has been rendered. + * + * @method postRender + */ + postRender: function() { + var self = this, settings = self.settings; + + self._rendered = true; + + self._super(); + + if (!self.parent() && (settings.width || settings.height)) { + self.initLayoutRect(); + self.repaint(); + } + + if (settings.autofocus) { + self.focus(); + } + }, + + /** + * Removes the current control from DOM and from UI collections. + * + * @method remove + * @return {tinymce.ui.Control} Current control instance. + */ + remove: function() { + this._super(); + + if (tooltip) { + tooltip.remove(); + tooltip = null; + } + } + }); + + return Widget; +}); + +// Included from: js/tinymce/classes/ui/Button.js + +/** + * Button.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class is used to create buttons. You can create them directly or through the Factory. + * + * @example + * // Create and render a button to the body element + * tinymce.ui.Factory.create({ + * type: 'button', + * text: 'My button' + * }).renderTo(document.body); + * + * @-x-less Button.less + * @class tinymce.ui.Button + * @extends tinymce.ui.Widget + */ +define("tinymce/ui/Button", [ + "tinymce/ui/Widget" +], function(Widget) { + "use strict"; + + return Widget.extend({ + Defaults: { + classes: "widget btn", + role: "button" + }, + + /** + * Constructs a new button instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + * @setting {String} size Size of the button small|medium|large. + * @setting {String} image Image to use for icon. + * @setting {String} icon Icon to use for button. + */ + init: function(settings) { + var self = this, size; + + self.on('click mousedown', function(e) { + e.preventDefault(); + }); + + self._super(settings); + size = settings.size; + + if (settings.subtype) { + self.addClass(settings.subtype); + } + + if (size) { + self.addClass('btn-' + size); + } + }, + + /** + * Sets/gets the current button icon. + * + * @method icon + * @param {String} [icon] New icon identifier. + * @return {String|tinymce.ui.MenuButton} Current icon or current MenuButton instance. + */ + icon: function(icon) { + var self = this, prefix = self.classPrefix; + + if (typeof(icon) == 'undefined') { + return self.settings.icon; + } + + self.settings.icon = icon; + icon = icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : ''; + + if (self._rendered) { + var btnElm = self.getEl().firstChild, iconElm = btnElm.getElementsByTagName('i')[0]; + + if (icon) { + if (!iconElm || iconElm != btnElm.firstChild) { + iconElm = document.createElement('i'); + btnElm.insertBefore(iconElm, btnElm.firstChild); + } + + iconElm.className = icon; + } else if (iconElm) { + btnElm.removeChild(iconElm); + } + + self.text(self._text); // Set text again to fix whitespace between icon + text + } + + return self; + }, + + /** + * Repaints the button for example after it's been resizes by a layout engine. + * + * @method repaint + */ + repaint: function() { + var btnStyle = this.getEl().firstChild.style; + + btnStyle.width = btnStyle.height = "100%"; + + this._super(); + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, id = self._id, prefix = self.classPrefix; + var icon = self.settings.icon, image = ''; + + if (self.settings.image) { + icon = 'none'; + image = ' style="background-image: url(\'' + self.settings.image + '\')"'; + } + + icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + icon : ''; + + return ( + '
    ' + + '' + + '
    ' + ); + } + }); +}); + +// Included from: js/tinymce/classes/ui/ButtonGroup.js + +/** + * ButtonGroup.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This control enables you to put multiple buttons into a group. This is + * useful when you want to combine similar toolbar buttons into a group. + * + * @example + * // Create and render a buttongroup with two buttons to the body element + * tinymce.ui.Factory.create({ + * type: 'buttongroup', + * items: [ + * {text: 'Button A'}, + * {text: 'Button B'} + * ] + * }).renderTo(document.body); + * + * @-x-less ButtonGroup.less + * @class tinymce.ui.ButtonGroup + * @extends tinymce.ui.Container + */ +define("tinymce/ui/ButtonGroup", [ + "tinymce/ui/Container" +], function(Container) { + "use strict"; + + return Container.extend({ + Defaults: { + defaultType: 'button', + role: 'group' + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, layout = self._layout; + + self.addClass('btn-group'); + self.preRender(); + layout.preRender(self); + + return ( + '
    ' + + '
    ' + + (self.settings.html || '') + layout.renderHtml(self) + + '
    ' + + '
    ' + ); + } + }); +}); + +// Included from: js/tinymce/classes/ui/Checkbox.js + +/** + * Checkbox.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This control creates a custom checkbox. + * + * @example + * // Create and render a checkbox to the body element + * tinymce.ui.Factory.create({ + * type: 'checkbox', + * checked: true, + * text: 'My checkbox' + * }).renderTo(document.body); + * + * @-x-less Checkbox.less + * @class tinymce.ui.Checkbox + * @extends tinymce.ui.Widget + */ +define("tinymce/ui/Checkbox", [ + "tinymce/ui/Widget" +], function(Widget) { + "use strict"; + + return Widget.extend({ + Defaults: { + classes: "checkbox", + role: "checkbox", + checked: false + }, + + /** + * Constructs a new Checkbox instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + * @setting {Boolean} checked True if the checkbox should be checked by default. + */ + init: function(settings) { + var self = this; + + self._super(settings); + + self.on('click mousedown', function(e) { + e.preventDefault(); + }); + + self.on('click', function(e) { + e.preventDefault(); + + if (!self.disabled()) { + self.checked(!self.checked()); + } + }); + + self.checked(self.settings.checked); + }, + + /** + * Getter/setter function for the checked state. + * + * @method checked + * @param {Boolean} [state] State to be set. + * @return {Boolean|tinymce.ui.Checkbox} True/false or checkbox if it's a set operation. + */ + checked: function(state) { + var self = this; + + if (typeof state != "undefined") { + if (state) { + self.addClass('checked'); + } else { + self.removeClass('checked'); + } + + self._checked = state; + self.aria('checked', state); + + return self; + } + + return self._checked; + }, + + /** + * Getter/setter function for the value state. + * + * @method value + * @param {Boolean} [state] State to be set. + * @return {Boolean|tinymce.ui.Checkbox} True/false or checkbox if it's a set operation. + */ + value: function(state) { + return this.checked(state); + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, id = self._id, prefix = self.classPrefix; + + return ( + '
    ' + + '' + + '' + self.encode(self._text) + '' + + '
    ' + ); + } + }); +}); + +// Included from: js/tinymce/classes/ui/PanelButton.js + +/** + * PanelButton.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a new panel button. + * + * @class tinymce.ui.PanelButton + * @extends tinymce.ui.Button + */ +define("tinymce/ui/PanelButton", [ + "tinymce/ui/Button", + "tinymce/ui/FloatPanel" +], function(Button, FloatPanel) { + "use strict"; + + return Button.extend({ + /** + * Shows the panel for the button. + * + * @method showPanel + */ + showPanel: function() { + var self = this, settings = self.settings; + + self.active(true); + + if (!self.panel) { + var panelSettings = settings.panel; + + // Wrap panel in grid layout if type if specified + // This makes it possible to add forms or other containers directly in the panel option + if (panelSettings.type) { + panelSettings = { + layout: 'grid', + items: panelSettings + }; + } + + panelSettings.role = panelSettings.role || 'dialog'; + panelSettings.popover = true; + panelSettings.autohide = true; + panelSettings.ariaRoot = true; + + self.panel = new FloatPanel(panelSettings).on('hide', function() { + self.active(false); + }).on('cancel', function(e) { + e.stopPropagation(); + self.focus(); + self.hidePanel(); + }).parent(self).renderTo(self.getContainerElm()); + + self.panel.fire('show'); + self.panel.reflow(); + } else { + self.panel.show(); + } + + self.panel.moveRel(self.getEl(), settings.popoverAlign || (self.isRtl() ? ['bc-tr', 'bc-tc'] : ['bc-tl', 'bc-tc'])); + }, + + /** + * Hides the panel for the button. + * + * @method hidePanel + */ + hidePanel: function() { + var self = this; + + if (self.panel) { + self.panel.hide(); + } + }, + + /** + * Called after the control has been rendered. + * + * @method postRender + */ + postRender: function() { + var self = this; + + self.aria('haspopup', true); + + self.on('click', function(e) { + if (e.control === self) { + if (self.panel && self.panel.visible()) { + self.hidePanel(); + } else { + self.showPanel(); + self.panel.focus(!!e.aria); + } + } + }); + + return self._super(); + } + }); +}); + +// Included from: js/tinymce/classes/ui/ColorButton.js + +/** + * ColorButton.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class creates a color button control. This is a split button in which the main + * button has a visual representation of the currently selected color. When clicked + * the caret button displays a color picker, allowing the user to select a new color. + * + * @-x-less ColorButton.less + * @class tinymce.ui.ColorButton + * @extends tinymce.ui.PanelButton + */ +define("tinymce/ui/ColorButton", [ + "tinymce/ui/PanelButton", + "tinymce/dom/DOMUtils" +], function(PanelButton, DomUtils) { + "use strict"; + + var DOM = DomUtils.DOM; + + return PanelButton.extend({ + /** + * Constructs a new ColorButton instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + */ + init: function(settings) { + this._super(settings); + this.addClass('colorbutton'); + }, + + /** + * Getter/setter for the current color. + * + * @method color + * @param {String} [color] Color to set. + * @return {String|tinymce.ui.ColorButton} Current color or current instance. + */ + color: function(color) { + if (color) { + this._color = color; + this.getEl('preview').style.backgroundColor = color; + return this; + } + + return this._color; + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, id = self._id, prefix = self.classPrefix; + var icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : ''; + var image = self.settings.image ? ' style="background-image: url(\'' + self.settings.image + '\')"' : ''; + + return ( + '
    ' + + '' + + '' + + '
    ' + ); + }, + + /** + * Called after the control has been rendered. + * + * @method postRender + */ + postRender: function() { + var self = this, onClickHandler = self.settings.onclick; + + self.on('click', function(e) { + if (e.aria && e.aria.key == 'down') { + return; + } + + if (e.control == self && !DOM.getParent(e.target, '.' + self.classPrefix + 'open')) { + e.stopImmediatePropagation(); + onClickHandler.call(self, e); + } + }); + + delete self.settings.onclick; + + return self._super(); + } + + }); +}); + +// Included from: js/tinymce/classes/ui/ComboBox.js + +/** + * ComboBox.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class creates a combobox control. Select box that you select a value from or + * type a value into. + * + * @-x-less ComboBox.less + * @class tinymce.ui.ComboBox + * @extends tinymce.ui.Widget + */ +define("tinymce/ui/ComboBox", [ + "tinymce/ui/Widget", + "tinymce/ui/Factory", + "tinymce/ui/DomUtils" +], function(Widget, Factory, DomUtils) { + "use strict"; + + return Widget.extend({ + /** + * Constructs a new control instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + * @setting {String} placeholder Placeholder text to display. + */ + init: function(settings) { + var self = this; + + self._super(settings); + self.addClass('combobox'); + self.subinput = true; + self.ariaTarget = 'inp'; // TODO: Figure out a better way + + settings = self.settings; + settings.menu = settings.menu || settings.values; + + if (settings.menu) { + settings.icon = 'caret'; + } + + self.on('click', function(e) { + var elm = e.target, root = self.getEl(); + + while (elm && elm != root) { + if (elm.id && elm.id.indexOf('-open') != -1) { + self.fire('action'); + + if (settings.menu) { + self.showMenu(); + + if (e.aria) { + self.menu.items()[0].focus(); + } + } + } + + elm = elm.parentNode; + } + }); + + // TODO: Rework this + self.on('keydown', function(e) { + if (e.target.nodeName == "INPUT" && e.keyCode == 13) { + self.parents().reverse().each(function(ctrl) { + e.preventDefault(); + self.fire('change'); + + if (ctrl.hasEventListeners('submit') && ctrl.toJSON) { + ctrl.fire('submit', {data: ctrl.toJSON()}); + return false; + } + }); + } + }); + + if (settings.placeholder) { + self.addClass('placeholder'); + + self.on('focusin', function() { + if (!self._hasOnChange) { + DomUtils.on(self.getEl('inp'), 'change', function() { + self.fire('change'); + }); + + self._hasOnChange = true; + } + + if (self.hasClass('placeholder')) { + self.getEl('inp').value = ''; + self.removeClass('placeholder'); + } + }); + + self.on('focusout', function() { + if (self.value().length === 0) { + self.getEl('inp').value = settings.placeholder; + self.addClass('placeholder'); + } + }); + } + }, + + showMenu: function() { + var self = this, settings = self.settings, menu; + + if (!self.menu) { + menu = settings.menu || []; + + // Is menu array then auto constuct menu control + if (menu.length) { + menu = { + type: 'menu', + items: menu + }; + } else { + menu.type = menu.type || 'menu'; + } + + self.menu = Factory.create(menu).parent(self).renderTo(self.getContainerElm()); + self.fire('createmenu'); + self.menu.reflow(); + self.menu.on('cancel', function(e) { + if (e.control === self.menu) { + self.focus(); + } + }); + + self.menu.on('show hide', function(e) { + e.control.items().each(function(ctrl) { + ctrl.active(ctrl.value() == self.value()); + }); + }).fire('show'); + + self.menu.on('select', function(e) { + self.value(e.control.value()); + }); + + self.on('focusin', function(e) { + if (e.target.tagName == 'INPUT') { + self.menu.hide(); + } + }); + + self.aria('expanded', true); + } + + self.menu.show(); + self.menu.layoutRect({w: self.layoutRect().w}); + self.menu.moveRel(self.getEl(), self.isRtl() ? ['br-tr', 'tr-br'] : ['bl-tl', 'tl-bl']); + }, + + /** + * Getter/setter function for the control value. + * + * @method value + * @param {String} [value] Value to be set. + * @return {String|tinymce.ui.ComboBox} Value or self if it's a set operation. + */ + value: function(value) { + var self = this; + + if (typeof(value) != "undefined") { + self._value = value; + self.removeClass('placeholder'); + + if (self._rendered) { + self.getEl('inp').value = value; + } + + return self; + } + + if (self._rendered) { + value = self.getEl('inp').value; + + if (value != self.settings.placeholder) { + return value; + } + + return ''; + } + + return self._value; + }, + + /** + * Getter/setter function for the disabled state. + * + * @method value + * @param {Boolean} [state] State to be set. + * @return {Boolean|tinymce.ui.ComboBox} True/false or self if it's a set operation. + */ + disabled: function(state) { + var self = this; + + if (self._rendered && typeof(state) != 'undefined') { + self.getEl('inp').disabled = state; + } + + return self._super(state); + }, + + /** + * Focuses the input area of the control. + * + * @method focus + */ + focus: function() { + this.getEl('inp').focus(); + }, + + /** + * Repaints the control after a layout operation. + * + * @method repaint + */ + repaint: function() { + var self = this, elm = self.getEl(), openElm = self.getEl('open'), rect = self.layoutRect(); + var width, lineHeight; + + if (openElm) { + width = rect.w - DomUtils.getSize(openElm).width - 10; + } else { + width = rect.w - 10; + } + + // Detect old IE 7+8 add lineHeight to align caret vertically in the middle + var doc = document; + if (doc.all && (!doc.documentMode || doc.documentMode <= 8)) { + lineHeight = (self.layoutRect().h - 2) + 'px'; + } + + DomUtils.css(elm.firstChild, { + width: width, + lineHeight: lineHeight + }); + + self._super(); + + return self; + }, + + /** + * Post render method. Called after the control has been rendered to the target. + * + * @method postRender + * @return {tinymce.ui.ComboBox} Current combobox instance. + */ + postRender: function() { + var self = this; + + DomUtils.on(this.getEl('inp'), 'change', function() { + self.fire('change'); + }); + + return self._super(); + }, + + remove: function() { + DomUtils.off(this.getEl('inp')); + this._super(); + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, id = self._id, settings = self.settings, prefix = self.classPrefix; + var value = settings.value || settings.placeholder || ''; + var icon, text, openBtnHtml = '', extraAttrs = ''; + + if ("spellcheck" in settings) { + extraAttrs += ' spellcheck="' + settings.spellcheck + '"'; + } + + if (settings.maxLength) { + extraAttrs += ' maxlength="' + settings.maxLength + '"'; + } + + if (settings.size) { + extraAttrs += ' size="' + settings.size + '"'; + } + + if (settings.subtype) { + extraAttrs += ' type="' + settings.subtype + '"'; + } + + if (self.disabled()) { + extraAttrs += ' disabled="disabled"'; + } + + icon = settings.icon; + if (icon && icon != 'caret') { + icon = prefix + 'ico ' + prefix + 'i-' + settings.icon; + } + + text = self._text; + + if (icon || text) { + openBtnHtml = ( + '
    ' + + '' + + '
    ' + ); + + self.addClass('has-open'); + } + + return ( + '
    ' + + '' + + openBtnHtml + + '
    ' + ); + } + }); +}); + +// Included from: js/tinymce/classes/ui/Path.js + +/** + * Path.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a new path control. + * + * @-x-less Path.less + * @class tinymce.ui.Path + * @extends tinymce.ui.Widget + */ +define("tinymce/ui/Path", [ + "tinymce/ui/Widget" +], function(Widget) { + "use strict"; + + return Widget.extend({ + /** + * Constructs a instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + * @setting {String} delimiter Delimiter to display between items in path. + */ + init: function(settings) { + var self = this; + + if (!settings.delimiter) { + settings.delimiter = '\u00BB'; + } + + self._super(settings); + self.addClass('path'); + self.canFocus = true; + + self.on('click', function(e) { + var index, target = e.target; + + if ((index = target.getAttribute('data-index'))) { + self.fire('select', {value: self.data()[index], index: index}); + } + }); + }, + + /** + * Focuses the current control. + * + * @method focus + * @return {tinymce.ui.Control} Current control instance. + */ + focus: function() { + var self = this; + + self.getEl().firstChild.focus(); + + return self; + }, + + /** + * Sets/gets the data to be used for the path. + * + * @method data + * @param {Array} data Array with items name is rendered to path. + */ + data: function(data) { + var self = this; + + if (typeof(data) !== "undefined") { + self._data = data; + self.update(); + + return self; + } + + return self._data; + }, + + /** + * Updated the path. + * + * @private + */ + update: function() { + this.innerHtml(this._getPathHtml()); + }, + + /** + * Called after the control has been rendered. + * + * @method postRender + */ + postRender: function() { + var self = this; + + self._super(); + + self.data(self.settings.data); + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this; + + return ( + '
    ' + + self._getPathHtml() + + '
    ' + ); + }, + + _getPathHtml: function() { + var self = this, parts = self._data || [], i, l, html = '', prefix = self.classPrefix; + + for (i = 0, l = parts.length; i < l; i++) { + html += ( + (i > 0 ? '' : '') + + '
    ' + parts[i].name + '
    ' + ); + } + + if (!html) { + html = '
     
    '; + } + + return html; + } + }); +}); + +// Included from: js/tinymce/classes/ui/ElementPath.js + +/** + * ElementPath.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This control creates an path for the current selections parent elements in TinyMCE. + * + * @class tinymce.ui.ElementPath + * @extends tinymce.ui.Path + */ +define("tinymce/ui/ElementPath", [ + "tinymce/ui/Path", + "tinymce/EditorManager" +], function(Path, EditorManager) { + return Path.extend({ + /** + * Post render method. Called after the control has been rendered to the target. + * + * @method postRender + * @return {tinymce.ui.ElementPath} Current combobox instance. + */ + postRender: function() { + var self = this, editor = EditorManager.activeEditor; + + function isHidden(elm) { + if (elm.nodeType === 1) { + if (elm.nodeName == "BR" || !!elm.getAttribute('data-mce-bogus')) { + return true; + } + + if (elm.getAttribute('data-mce-type') === 'bookmark') { + return true; + } + } + + return false; + } + + self.on('select', function(e) { + var parents = [], node, body = editor.getBody(); + + editor.focus(); + + node = editor.selection.getStart(); + while (node && node != body) { + if (!isHidden(node)) { + parents.push(node); + } + + node = node.parentNode; + } + + editor.selection.select(parents[parents.length - 1 - e.index]); + editor.nodeChanged(); + }); + + editor.on('nodeChange', function(e) { + var parents = [], selectionParents = e.parents, i = selectionParents.length; + + while (i--) { + if (selectionParents[i].nodeType == 1 && !isHidden(selectionParents[i])) { + var args = editor.fire('ResolveName', { + name: selectionParents[i].nodeName.toLowerCase(), + target: selectionParents[i] + }); + + parents.push({name: args.name}); + } + } + + self.data(parents); + }); + + return self._super(); + } + }); +}); + +// Included from: js/tinymce/classes/ui/FormItem.js + +/** + * FormItem.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class is a container created by the form element with + * a label and control item. + * + * @class tinymce.ui.FormItem + * @extends tinymce.ui.Container + * @setting {String} label Label to display for the form item. + */ +define("tinymce/ui/FormItem", [ + "tinymce/ui/Container" +], function(Container) { + "use strict"; + + return Container.extend({ + Defaults: { + layout: 'flex', + align: 'center', + defaults: { + flex: 1 + } + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, layout = self._layout, prefix = self.classPrefix; + + self.addClass('formitem'); + layout.preRender(self); + + return ( + '
    ' + + (self.settings.title ? ('
    ' + + self.settings.title + '
    ') : '') + + '
    ' + + (self.settings.html || '') + layout.renderHtml(self) + + '
    ' + + '
    ' + ); + } + }); +}); + +// Included from: js/tinymce/classes/ui/Form.js + +/** + * Form.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class creates a form container. A form container has the ability + * to automatically wrap items in tinymce.ui.FormItem instances. + * + * Each FormItem instance is a container for the label and the item. + * + * @example + * tinymce.ui.Factory.create({ + * type: 'form', + * items: [ + * {type: 'textbox', label: 'My text box'} + * ] + * }).renderTo(document.body); + * + * @class tinymce.ui.Form + * @extends tinymce.ui.Container + */ +define("tinymce/ui/Form", [ + "tinymce/ui/Container", + "tinymce/ui/FormItem" +], function(Container, FormItem) { + "use strict"; + + return Container.extend({ + Defaults: { + containerCls: 'form', + layout: 'flex', + direction: 'column', + align: 'stretch', + flex: 1, + padding: 20, + labelGap: 30, + spacing: 10, + callbacks: { + submit: function() { + this.submit(); + } + } + }, + + /** + * This method gets invoked before the control is rendered. + * + * @method preRender + */ + preRender: function() { + var self = this, items = self.items(); + + // Wrap any labeled items in FormItems + items.each(function(ctrl) { + var formItem, label = ctrl.settings.label; + + if (label) { + formItem = new FormItem({ + layout: 'flex', + autoResize: "overflow", + defaults: {flex: 1}, + items: [ + {type: 'label', id: ctrl._id + '-l', text: label, flex: 0, forId: ctrl._id, disabled: ctrl.disabled()} + ] + }); + + formItem.type = 'formitem'; + ctrl.aria('labelledby', ctrl._id + '-l'); + + if (typeof(ctrl.settings.flex) == "undefined") { + ctrl.settings.flex = 1; + } + + self.replace(ctrl, formItem); + formItem.add(ctrl); + } + }); + }, + + /** + * Recalcs label widths. + * + * @private + */ + recalcLabels: function() { + var self = this, maxLabelWidth = 0, labels = [], i, labelGap; + + if (self.settings.labelGapCalc === false) { + return; + } + + self.items().filter('formitem').each(function(item) { + var labelCtrl = item.items()[0], labelWidth = labelCtrl.getEl().clientWidth; + + maxLabelWidth = labelWidth > maxLabelWidth ? labelWidth : maxLabelWidth; + labels.push(labelCtrl); + }); + + labelGap = self.settings.labelGap || 0; + + i = labels.length; + while (i--) { + labels[i].settings.minWidth = maxLabelWidth + labelGap; + } + }, + + /** + * Getter/setter for the visibility state. + * + * @method visible + * @param {Boolean} [state] True/false state to show/hide. + * @return {tinymce.ui.Form|Boolean} True/false state or current control. + */ + visible: function(state) { + var val = this._super(state); + + if (state === true && this._rendered) { + this.recalcLabels(); + } + + return val; + }, + + /** + * Fires a submit event with the serialized form. + * + * @method submit + * @return {Object} Event arguments object. + */ + submit: function() { + return this.fire('submit', {data: this.toJSON()}); + }, + + /** + * Post render method. Called after the control has been rendered to the target. + * + * @method postRender + * @return {tinymce.ui.ComboBox} Current combobox instance. + */ + postRender: function() { + var self = this; + + self._super(); + self.recalcLabels(); + self.fromJSON(self.settings.data); + } + }); +}); + +// Included from: js/tinymce/classes/ui/FieldSet.js + +/** + * FieldSet.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class creates fieldset containers. + * + * @-x-less FieldSet.less + * @class tinymce.ui.FieldSet + * @extends tinymce.ui.Form + */ +define("tinymce/ui/FieldSet", [ + "tinymce/ui/Form" +], function(Form) { + "use strict"; + + return Form.extend({ + Defaults: { + containerCls: 'fieldset', + layout: 'flex', + direction: 'column', + align: 'stretch', + flex: 1, + padding: "25 15 5 15", + labelGap: 30, + spacing: 10, + border: 1 + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, layout = self._layout, prefix = self.classPrefix; + + self.preRender(); + layout.preRender(self); + + return ( + '
    ' + + (self.settings.title ? ('' + + self.settings.title + '') : '') + + '
    ' + + (self.settings.html || '') + layout.renderHtml(self) + + '
    ' + + '
    ' + ); + } + }); +}); + +// Included from: js/tinymce/classes/ui/FilePicker.js + +/** + * FilePicker.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*global tinymce:true */ + +/** + * This class creates a file picker control. + * + * @class tinymce.ui.FilePicker + * @extends tinymce.ui.ComboBox + */ +define("tinymce/ui/FilePicker", [ + "tinymce/ui/ComboBox" +], function(ComboBox) { + "use strict"; + + return ComboBox.extend({ + /** + * Constructs a new control instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + */ + init: function(settings) { + var self = this, editor = tinymce.activeEditor, fileBrowserCallback; + + settings.spellcheck = false; + + fileBrowserCallback = editor.settings.file_browser_callback; + if (fileBrowserCallback) { + settings.icon = 'browse'; + + settings.onaction = function() { + fileBrowserCallback( + self.getEl('inp').id, + self.getEl('inp').value, + settings.filetype, + window + ); + }; + } + + self._super(settings); + } + }); +}); + +// Included from: js/tinymce/classes/ui/FitLayout.js + +/** + * FitLayout.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This layout manager will resize the control to be the size of it's parent container. + * In other words width: 100% and height: 100%. + * + * @-x-less FitLayout.less + * @class tinymce.ui.FitLayout + * @extends tinymce.ui.AbsoluteLayout + */ +define("tinymce/ui/FitLayout", [ + "tinymce/ui/AbsoluteLayout" +], function(AbsoluteLayout) { + "use strict"; + + return AbsoluteLayout.extend({ + /** + * Recalculates the positions of the controls in the specified container. + * + * @method recalc + * @param {tinymce.ui.Container} container Container instance to recalc. + */ + recalc: function(container) { + var contLayoutRect = container.layoutRect(), paddingBox = container.paddingBox(); + + container.items().filter(':visible').each(function(ctrl) { + ctrl.layoutRect({ + x: paddingBox.left, + y: paddingBox.top, + w: contLayoutRect.innerW - paddingBox.right - paddingBox.left, + h: contLayoutRect.innerH - paddingBox.top - paddingBox.bottom + }); + + if (ctrl.recalc) { + ctrl.recalc(); + } + }); + } + }); +}); + +// Included from: js/tinymce/classes/ui/FlexLayout.js + +/** + * FlexLayout.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This layout manager works similar to the CSS flex box. + * + * @setting {String} direction row|row-reverse|column|column-reverse + * @setting {Number} flex A positive-number to flex by. + * @setting {String} align start|end|center|stretch + * @setting {String} pack start|end|justify + * + * @class tinymce.ui.FlexLayout + * @extends tinymce.ui.AbsoluteLayout + */ +define("tinymce/ui/FlexLayout", [ + "tinymce/ui/AbsoluteLayout" +], function(AbsoluteLayout) { + "use strict"; + + return AbsoluteLayout.extend({ + /** + * Recalculates the positions of the controls in the specified container. + * + * @method recalc + * @param {tinymce.ui.Container} container Container instance to recalc. + */ + recalc: function(container) { + // A ton of variables, needs to be in the same scope for performance + var i, l, items, contLayoutRect, contPaddingBox, contSettings, align, pack, spacing, totalFlex, availableSpace, direction; + var ctrl, ctrlLayoutRect, ctrlSettings, flex, maxSizeItems = [], size, maxSize, ratio, rect, pos, maxAlignEndPos; + var sizeName, minSizeName, posName, maxSizeName, beforeName, innerSizeName, deltaSizeName, contentSizeName; + var alignAxisName, alignInnerSizeName, alignSizeName, alignMinSizeName, alignBeforeName, alignAfterName; + var alignDeltaSizeName, alignContentSizeName; + var max = Math.max, min = Math.min; + + // Get container items, properties and settings + items = container.items().filter(':visible'); + contLayoutRect = container.layoutRect(); + contPaddingBox = container._paddingBox; + contSettings = container.settings; + direction = container.isRtl() ? (contSettings.direction || 'row-reversed') : contSettings.direction; + align = contSettings.align; + pack = container.isRtl() ? (contSettings.pack || 'end') : contSettings.pack; + spacing = contSettings.spacing || 0; + + if (direction == "row-reversed" || direction == "column-reverse") { + items = items.set(items.toArray().reverse()); + direction = direction.split('-')[0]; + } + + // Setup axis variable name for row/column direction since the calculations is the same + if (direction == "column") { + posName = "y"; + sizeName = "h"; + minSizeName = "minH"; + maxSizeName = "maxH"; + innerSizeName = "innerH"; + beforeName = 'top'; + deltaSizeName = "deltaH"; + contentSizeName = "contentH"; + + alignBeforeName = "left"; + alignSizeName = "w"; + alignAxisName = "x"; + alignInnerSizeName = "innerW"; + alignMinSizeName = "minW"; + alignAfterName = "right"; + alignDeltaSizeName = "deltaW"; + alignContentSizeName = "contentW"; + } else { + posName = "x"; + sizeName = "w"; + minSizeName = "minW"; + maxSizeName = "maxW"; + innerSizeName = "innerW"; + beforeName = 'left'; + deltaSizeName = "deltaW"; + contentSizeName = "contentW"; + + alignBeforeName = "top"; + alignSizeName = "h"; + alignAxisName = "y"; + alignInnerSizeName = "innerH"; + alignMinSizeName = "minH"; + alignAfterName = "bottom"; + alignDeltaSizeName = "deltaH"; + alignContentSizeName = "contentH"; + } + + // Figure out total flex, availableSpace and collect any max size elements + availableSpace = contLayoutRect[innerSizeName] - contPaddingBox[beforeName] - contPaddingBox[beforeName]; + maxAlignEndPos = totalFlex = 0; + for (i = 0, l = items.length; i < l; i++) { + ctrl = items[i]; + ctrlLayoutRect = ctrl.layoutRect(); + ctrlSettings = ctrl.settings; + flex = ctrlSettings.flex; + availableSpace -= (i < l - 1 ? spacing : 0); + + if (flex > 0) { + totalFlex += flex; + + // Flexed item has a max size then we need to check if we will hit that size + if (ctrlLayoutRect[maxSizeName]) { + maxSizeItems.push(ctrl); + } + + ctrlLayoutRect.flex = flex; + } + + availableSpace -= ctrlLayoutRect[minSizeName]; + + // Calculate the align end position to be used to check for overflow/underflow + size = contPaddingBox[alignBeforeName] + ctrlLayoutRect[alignMinSizeName] + contPaddingBox[alignAfterName]; + if (size > maxAlignEndPos) { + maxAlignEndPos = size; + } + } + + // Calculate minW/minH + rect = {}; + if (availableSpace < 0) { + rect[minSizeName] = contLayoutRect[minSizeName] - availableSpace + contLayoutRect[deltaSizeName]; + } else { + rect[minSizeName] = contLayoutRect[innerSizeName] - availableSpace + contLayoutRect[deltaSizeName]; + } + + rect[alignMinSizeName] = maxAlignEndPos + contLayoutRect[alignDeltaSizeName]; + + rect[contentSizeName] = contLayoutRect[innerSizeName] - availableSpace; + rect[alignContentSizeName] = maxAlignEndPos; + rect.minW = min(rect.minW, contLayoutRect.maxW); + rect.minH = min(rect.minH, contLayoutRect.maxH); + rect.minW = max(rect.minW, contLayoutRect.startMinWidth); + rect.minH = max(rect.minH, contLayoutRect.startMinHeight); + + // Resize container container if minSize was changed + if (contLayoutRect.autoResize && (rect.minW != contLayoutRect.minW || rect.minH != contLayoutRect.minH)) { + rect.w = rect.minW; + rect.h = rect.minH; + + container.layoutRect(rect); + this.recalc(container); + + // Forced recalc for example if items are hidden/shown + if (container._lastRect === null) { + var parentCtrl = container.parent(); + if (parentCtrl) { + parentCtrl._lastRect = null; + parentCtrl.recalc(); + } + } + + return; + } + + // Handle max size elements, check if they will become to wide with current options + ratio = availableSpace / totalFlex; + for (i = 0, l = maxSizeItems.length; i < l; i++) { + ctrl = maxSizeItems[i]; + ctrlLayoutRect = ctrl.layoutRect(); + maxSize = ctrlLayoutRect[maxSizeName]; + size = ctrlLayoutRect[minSizeName] + ctrlLayoutRect.flex * ratio; + + if (size > maxSize) { + availableSpace -= (ctrlLayoutRect[maxSizeName] - ctrlLayoutRect[minSizeName]); + totalFlex -= ctrlLayoutRect.flex; + ctrlLayoutRect.flex = 0; + ctrlLayoutRect.maxFlexSize = maxSize; + } else { + ctrlLayoutRect.maxFlexSize = 0; + } + } + + // Setup new ratio, target layout rect, start position + ratio = availableSpace / totalFlex; + pos = contPaddingBox[beforeName]; + rect = {}; + + // Handle pack setting moves the start position to end, center + if (totalFlex === 0) { + if (pack == "end") { + pos = availableSpace + contPaddingBox[beforeName]; + } else if (pack == "center") { + pos = Math.round( + (contLayoutRect[innerSizeName] / 2) - ((contLayoutRect[innerSizeName] - availableSpace) / 2) + ) + contPaddingBox[beforeName]; + + if (pos < 0) { + pos = contPaddingBox[beforeName]; + } + } else if (pack == "justify") { + pos = contPaddingBox[beforeName]; + spacing = Math.floor(availableSpace / (items.length - 1)); + } + } + + // Default aligning (start) the other ones needs to be calculated while doing the layout + rect[alignAxisName] = contPaddingBox[alignBeforeName]; + + // Start laying out controls + for (i = 0, l = items.length; i < l; i++) { + ctrl = items[i]; + ctrlLayoutRect = ctrl.layoutRect(); + size = ctrlLayoutRect.maxFlexSize || ctrlLayoutRect[minSizeName]; + + // Align the control on the other axis + if (align === "center") { + rect[alignAxisName] = Math.round((contLayoutRect[alignInnerSizeName] / 2) - (ctrlLayoutRect[alignSizeName] / 2)); + } else if (align === "stretch") { + rect[alignSizeName] = max( + ctrlLayoutRect[alignMinSizeName] || 0, + contLayoutRect[alignInnerSizeName] - contPaddingBox[alignBeforeName] - contPaddingBox[alignAfterName] + ); + rect[alignAxisName] = contPaddingBox[alignBeforeName]; + } else if (align === "end") { + rect[alignAxisName] = contLayoutRect[alignInnerSizeName] - ctrlLayoutRect[alignSizeName] - contPaddingBox.top; + } + + // Calculate new size based on flex + if (ctrlLayoutRect.flex > 0) { + size += ctrlLayoutRect.flex * ratio; + } + + rect[sizeName] = size; + rect[posName] = pos; + ctrl.layoutRect(rect); + + // Recalculate containers + if (ctrl.recalc) { + ctrl.recalc(); + } + + // Move x/y position + pos += size + spacing; + } + } + }); +}); + +// Included from: js/tinymce/classes/ui/FlowLayout.js + +/** + * FlowLayout.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This layout manager will place the controls by using the browsers native layout. + * + * @-x-less FlowLayout.less + * @class tinymce.ui.FlowLayout + * @extends tinymce.ui.Layout + */ +define("tinymce/ui/FlowLayout", [ + "tinymce/ui/Layout" +], function(Layout) { + return Layout.extend({ + Defaults: { + containerClass: 'flow-layout', + controlClass: 'flow-layout-item', + endClass : 'break' + }, + + /** + * Recalculates the positions of the controls in the specified container. + * + * @method recalc + * @param {tinymce.ui.Container} container Container instance to recalc. + */ + recalc: function(container) { + container.items().filter(':visible').each(function(ctrl) { + if (ctrl.recalc) { + ctrl.recalc(); + } + }); + } + }); +}); + +// Included from: js/tinymce/classes/ui/FormatControls.js + +/** + * FormatControls.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Internal class containing all TinyMCE specific control types such as + * format listboxes, fontlist boxes, toolbar buttons etc. + * + * @class tinymce.ui.FormatControls + */ +define("tinymce/ui/FormatControls", [ + "tinymce/ui/Control", + "tinymce/ui/Widget", + "tinymce/ui/FloatPanel", + "tinymce/util/Tools", + "tinymce/EditorManager", + "tinymce/Env" +], function(Control, Widget, FloatPanel, Tools, EditorManager, Env) { + var each = Tools.each; + + EditorManager.on('AddEditor', function(e) { + if (e.editor.rtl) { + Control.rtl = true; + } + + registerControls(e.editor); + }); + + Control.translate = function(text) { + return EditorManager.translate(text); + }; + + Widget.tooltips = !Env.iOS; + + function registerControls(editor) { + var formatMenu; + + // Generates a preview for a format + function getPreviewCss(format) { + var name, previewElm, dom = editor.dom; + var previewCss = '', parentFontSize, previewStyles; + + previewStyles = editor.settings.preview_styles; + + // No preview forced + if (previewStyles === false) { + return ''; + } + + // Default preview + if (!previewStyles) { + previewStyles = 'font-family font-size font-weight font-style text-decoration ' + + 'text-transform color background-color border border-radius outline text-shadow'; + } + + // Removes any variables since these can't be previewed + function removeVars(val) { + return val.replace(/%(\w+)/g, ''); + } + + // Create block/inline element to use for preview + format = editor.formatter.get(format); + if (!format) { + return; + } + + format = format[0]; + name = format.block || format.inline || 'span'; + previewElm = dom.create(name); + + // Add format styles to preview element + each(format.styles, function(value, name) { + value = removeVars(value); + + if (value) { + dom.setStyle(previewElm, name, value); + } + }); + + // Add attributes to preview element + each(format.attributes, function(value, name) { + value = removeVars(value); + + if (value) { + dom.setAttrib(previewElm, name, value); + } + }); + + // Add classes to preview element + each(format.classes, function(value) { + value = removeVars(value); + + if (!dom.hasClass(previewElm, value)) { + dom.addClass(previewElm, value); + } + }); + + editor.fire('PreviewFormats'); + + // Add the previewElm outside the visual area + dom.setStyles(previewElm, {position: 'absolute', left: -0xFFFF}); + editor.getBody().appendChild(previewElm); + + // Get parent container font size so we can compute px values out of em/% for older IE:s + parentFontSize = dom.getStyle(editor.getBody(), 'fontSize', true); + parentFontSize = /px$/.test(parentFontSize) ? parseInt(parentFontSize, 10) : 0; + + each(previewStyles.split(' '), function(name) { + var value = dom.getStyle(previewElm, name, true); + + // If background is transparent then check if the body has a background color we can use + if (name == 'background-color' && /transparent|rgba\s*\([^)]+,\s*0\)/.test(value)) { + value = dom.getStyle(editor.getBody(), name, true); + + // Ignore white since it's the default color, not the nicest fix + // TODO: Fix this by detecting runtime style + if (dom.toHex(value).toLowerCase() == '#ffffff') { + return; + } + } + + if (name == 'color') { + // Ignore black since it's the default color, not the nicest fix + // TODO: Fix this by detecting runtime style + if (dom.toHex(value).toLowerCase() == '#000000') { + return; + } + } + + // Old IE won't calculate the font size so we need to do that manually + if (name == 'font-size') { + if (/em|%$/.test(value)) { + if (parentFontSize === 0) { + return; + } + + // Convert font size from em/% to px + value = parseFloat(value, 10) / (/%$/.test(value) ? 100 : 1); + value = (value * parentFontSize) + 'px'; + } + } + + if (name == "border" && value) { + previewCss += 'padding:0 2px;'; + } + + previewCss += name + ':' + value + ';'; + }); + + editor.fire('AfterPreviewFormats'); + + //previewCss += 'line-height:normal'; + + dom.remove(previewElm); + + return previewCss; + } + + function createListBoxChangeHandler(items, formatName) { + return function() { + var self = this; + + editor.on('nodeChange', function(e) { + var formatter = editor.formatter; + var value = null; + + each(e.parents, function(node) { + each(items, function(item) { + if (formatName) { + if (formatter.matchNode(node, formatName, {value: item.value})) { + value = item.value; + } + } else { + if (formatter.matchNode(node, item.value)) { + value = item.value; + } + } + + if (value) { + return false; + } + }); + + if (value) { + return false; + } + }); + + self.value(value); + }); + }; + } + + function createFormats(formats) { + formats = formats.split(';'); + + var i = formats.length; + while (i--) { + formats[i] = formats[i].split('='); + } + + return formats; + } + + function createFormatMenu() { + var count = 0, newFormats = []; + + var defaultStyleFormats = [ + {title: 'Headers', items: [ + {title: 'Header 1', format: 'h1'}, + {title: 'Header 2', format: 'h2'}, + {title: 'Header 3', format: 'h3'}, + {title: 'Header 4', format: 'h4'}, + {title: 'Header 5', format: 'h5'}, + {title: 'Header 6', format: 'h6'} + ]}, + + {title: 'Inline', items: [ + {title: 'Bold', icon: 'bold', format: 'bold'}, + {title: 'Italic', icon: 'italic', format: 'italic'}, + {title: 'Underline', icon: 'underline', format: 'underline'}, + {title: 'Strikethrough', icon: 'strikethrough', format: 'strikethrough'}, + {title: 'Superscript', icon: 'superscript', format: 'superscript'}, + {title: 'Subscript', icon: 'subscript', format: 'subscript'}, + {title: 'Code', icon: 'code', format: 'code'} + ]}, + + {title: 'Blocks', items: [ + {title: 'Paragraph', format: 'p'}, + {title: 'Blockquote', format: 'blockquote'}, + {title: 'Div', format: 'div'}, + {title: 'Pre', format: 'pre'} + ]}, + + {title: 'Alignment', items: [ + {title: 'Left', icon: 'alignleft', format: 'alignleft'}, + {title: 'Center', icon: 'aligncenter', format: 'aligncenter'}, + {title: 'Right', icon: 'alignright', format: 'alignright'}, + {title: 'Justify', icon: 'alignjustify', format: 'alignjustify'} + ]} + ]; + + function createMenu(formats) { + var menu = []; + + if (!formats) { + return; + } + + each(formats, function(format) { + var menuItem = { + text: format.title, + icon: format.icon + }; + + if (format.items) { + menuItem.menu = createMenu(format.items); + } else { + var formatName = format.format || "custom" + count++; + + if (!format.format) { + format.name = formatName; + newFormats.push(format); + } + + menuItem.format = formatName; + } + + menu.push(menuItem); + }); + + return menu; + } + + function createStylesMenu() { + var menu; + + if (editor.settings.style_formats_merge) { + if (editor.settings.style_formats) { + menu = createMenu(defaultStyleFormats.concat(editor.settings.style_formats)); + } else { + menu = createMenu(defaultStyleFormats); + } + } else { + menu = createMenu(editor.settings.style_formats || defaultStyleFormats); + } + + return menu; + } + + editor.on('init', function() { + each(newFormats, function(format) { + editor.formatter.register(format.name, format); + }); + }); + + return { + type: 'menu', + items: createStylesMenu(), + onPostRender: function(e) { + editor.fire('renderFormatsMenu', {control: e.control}); + }, + itemDefaults: { + preview: true, + + textStyle: function() { + if (this.settings.format) { + return getPreviewCss(this.settings.format); + } + }, + + onPostRender: function() { + var self = this, formatName = this.settings.format; + + if (formatName) { + self.parent().on('show', function() { + self.disabled(!editor.formatter.canApply(formatName)); + self.active(editor.formatter.match(formatName)); + }); + } + }, + + onclick: function() { + if (this.settings.format) { + toggleFormat(this.settings.format); + } + } + } + }; + } + + formatMenu = createFormatMenu(); + + // Simple format controls : + each({ + bold: 'Bold', + italic: 'Italic', + underline: 'Underline', + strikethrough: 'Strikethrough', + subscript: 'Subscript', + superscript: 'Superscript' + }, function(text, name) { + editor.addButton(name, { + tooltip: text, + onPostRender: function() { + var self = this; + + // TODO: Fix this + if (editor.formatter) { + editor.formatter.formatChanged(name, function(state) { + self.active(state); + }); + } else { + editor.on('init', function() { + editor.formatter.formatChanged(name, function(state) { + self.active(state); + }); + }); + } + }, + onclick: function() { + toggleFormat(name); + } + }); + }); + + // Simple command controls :[,] + each({ + outdent: ['Decrease indent', 'Outdent'], + indent: ['Increase indent', 'Indent'], + cut: ['Cut', 'Cut'], + copy: ['Copy', 'Copy'], + paste: ['Paste', 'Paste'], + help: ['Help', 'mceHelp'], + selectall: ['Select all', 'SelectAll'], + hr: ['Insert horizontal rule', 'InsertHorizontalRule'], + removeformat: ['Clear formatting', 'RemoveFormat'], + visualaid: ['Visual aids', 'mceToggleVisualAid'], + newdocument: ['New document', 'mceNewDocument'] + }, function(item, name) { + editor.addButton(name, { + tooltip: item[0], + cmd: item[1] + }); + }); + + // Simple command controls with format state + each({ + blockquote: ['Blockquote', 'mceBlockQuote'], + numlist: ['Numbered list', 'InsertOrderedList'], + bullist: ['Bullet list', 'InsertUnorderedList'], + subscript: ['Subscript', 'Subscript'], + superscript: ['Superscript', 'Superscript'], + alignleft: ['Align left', 'JustifyLeft'], + aligncenter: ['Align center', 'JustifyCenter'], + alignright: ['Align right', 'JustifyRight'], + alignjustify: ['Justify', 'JustifyFull'] + }, function(item, name) { + editor.addButton(name, { + tooltip: item[0], + cmd: item[1], + onPostRender: function() { + var self = this; + + // TODO: Fix this + if (editor.formatter) { + editor.formatter.formatChanged(name, function(state) { + self.active(state); + }); + } else { + editor.on('init', function() { + editor.formatter.formatChanged(name, function(state) { + self.active(state); + }); + }); + } + } + }); + }); + + function hasUndo() { + return editor.undoManager ? editor.undoManager.hasUndo() : false; + } + + function hasRedo() { + return editor.undoManager ? editor.undoManager.hasRedo() : false; + } + + function toggleUndoState() { + var self = this; + + self.disabled(!hasUndo()); + editor.on('Undo Redo AddUndo TypingUndo', function() { + self.disabled(!hasUndo()); + }); + } + + function toggleRedoState() { + var self = this; + + self.disabled(!hasRedo()); + editor.on('Undo Redo AddUndo TypingUndo', function() { + self.disabled(!hasRedo()); + }); + } + + function toggleVisualAidState() { + var self = this; + + editor.on('VisualAid', function(e) { + self.active(e.hasVisual); + }); + + self.active(editor.hasVisual); + } + + editor.addButton('undo', { + tooltip: 'Undo', + onPostRender: toggleUndoState, + cmd: 'undo' + }); + + editor.addButton('redo', { + tooltip: 'Redo', + onPostRender: toggleRedoState, + cmd: 'redo' + }); + + editor.addMenuItem('newdocument', { + text: 'New document', + shortcut: 'Ctrl+N', + icon: 'newdocument', + cmd: 'mceNewDocument' + }); + + editor.addMenuItem('undo', { + text: 'Undo', + icon: 'undo', + shortcut: 'Ctrl+Z', + onPostRender: toggleUndoState, + cmd: 'undo' + }); + + editor.addMenuItem('redo', { + text: 'Redo', + icon: 'redo', + shortcut: 'Ctrl+Y', + onPostRender: toggleRedoState, + cmd: 'redo' + }); + + editor.addMenuItem('visualaid', { + text: 'Visual aids', + selectable: true, + onPostRender: toggleVisualAidState, + cmd: 'mceToggleVisualAid' + }); + + each({ + cut: ['Cut', 'Cut', 'Ctrl+X'], + copy: ['Copy', 'Copy', 'Ctrl+C'], + paste: ['Paste', 'Paste', 'Ctrl+V'], + selectall: ['Select all', 'SelectAll', 'Ctrl+A'], + bold: ['Bold', 'Bold', 'Ctrl+B'], + italic: ['Italic', 'Italic', 'Ctrl+I'], + underline: ['Underline', 'Underline'], + strikethrough: ['Strikethrough', 'Strikethrough'], + subscript: ['Subscript', 'Subscript'], + superscript: ['Superscript', 'Superscript'], + removeformat: ['Clear formatting', 'RemoveFormat'] + }, function(item, name) { + editor.addMenuItem(name, { + text: item[0], + icon: name, + shortcut: item[2], + cmd: item[1] + }); + }); + + editor.on('mousedown', function() { + FloatPanel.hideAll(); + }); + + function toggleFormat(fmt) { + if (fmt.control) { + fmt = fmt.control.value(); + } + + if (fmt) { + editor.execCommand('mceToggleFormat', false, fmt); + } + } + + editor.addButton('styleselect', { + type: 'menubutton', + text: 'Formats', + menu: formatMenu + }); + + editor.addButton('formatselect', function() { + var items = [], blocks = createFormats(editor.settings.block_formats || + 'Paragraph=p;' + + 'Address=address;' + + 'Pre=pre;' + + 'Header 1=h1;' + + 'Header 2=h2;' + + 'Header 3=h3;' + + 'Header 4=h4;' + + 'Header 5=h5;' + + 'Header 6=h6' + ); + + each(blocks, function(block) { + items.push({ + text: block[0], + value: block[1], + textStyle: function() { + return getPreviewCss(block[1]); + } + }); + }); + + return { + type: 'listbox', + text: blocks[0][0], + values: items, + fixedWidth: true, + onselect: toggleFormat, + onPostRender: createListBoxChangeHandler(items) + }; + }); + + editor.addButton('fontselect', function() { + var defaultFontsFormats = + 'Andale Mono=andale mono,times;' + + 'Arial=arial,helvetica,sans-serif;' + + 'Arial Black=arial black,avant garde;' + + 'Book Antiqua=book antiqua,palatino;' + + 'Comic Sans MS=comic sans ms,sans-serif;' + + 'Courier New=courier new,courier;' + + 'Georgia=georgia,palatino;' + + 'Helvetica=helvetica;' + + 'Impact=impact,chicago;' + + 'Symbol=symbol;' + + 'Tahoma=tahoma,arial,helvetica,sans-serif;' + + 'Terminal=terminal,monaco;' + + 'Times New Roman=times new roman,times;' + + 'Trebuchet MS=trebuchet ms,geneva;' + + 'Verdana=verdana,geneva;' + + 'Webdings=webdings;' + + 'Wingdings=wingdings,zapf dingbats'; + + var items = [], fonts = createFormats(editor.settings.font_formats || defaultFontsFormats); + + each(fonts, function(font) { + items.push({ + text: {raw: font[0]}, + value: font[1], + textStyle: font[1].indexOf('dings') == -1 ? 'font-family:' + font[1] : '' + }); + }); + + return { + type: 'listbox', + text: 'Font Family', + tooltip: 'Font Family', + values: items, + fixedWidth: true, + onPostRender: createListBoxChangeHandler(items, 'fontname'), + onselect: function(e) { + if (e.control.settings.value) { + editor.execCommand('FontName', false, e.control.settings.value); + } + } + }; + }); + + editor.addButton('fontsizeselect', function() { + var items = [], defaultFontsizeFormats = '8pt 10pt 12pt 14pt 18pt 24pt 36pt'; + var fontsize_formats = editor.settings.fontsize_formats || defaultFontsizeFormats; + + each(fontsize_formats.split(' '), function(item) { + items.push({text: item, value: item}); + }); + + return { + type: 'listbox', + text: 'Font Sizes', + tooltip: 'Font Sizes', + values: items, + fixedWidth: true, + onPostRender: createListBoxChangeHandler(items, 'fontsize'), + onclick: function(e) { + if (e.control.settings.value) { + editor.execCommand('FontSize', false, e.control.settings.value); + } + } + }; + }); + + editor.addMenuItem('formats', { + text: 'Formats', + menu: formatMenu + }); + } +}); + +// Included from: js/tinymce/classes/ui/GridLayout.js + +/** + * GridLayout.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This layout manager places controls in a grid. + * + * @setting {Number} spacing Spacing between controls. + * @setting {Number} spacingH Horizontal spacing between controls. + * @setting {Number} spacingV Vertical spacing between controls. + * @setting {Number} columns Number of columns to use. + * @setting {String/Array} alignH start|end|center|stretch or array of values for each column. + * @setting {String/Array} alignV start|end|center|stretch or array of values for each column. + * @setting {String} pack start|end + * + * @class tinymce.ui.GridLayout + * @extends tinymce.ui.AbsoluteLayout + */ +define("tinymce/ui/GridLayout", [ + "tinymce/ui/AbsoluteLayout" +], function(AbsoluteLayout) { + "use strict"; + + return AbsoluteLayout.extend({ + /** + * Recalculates the positions of the controls in the specified container. + * + * @method recalc + * @param {tinymce.ui.Container} container Container instance to recalc. + */ + recalc: function(container) { + var settings = container.settings, rows, cols, items, contLayoutRect, width, height, rect, + ctrlLayoutRect, ctrl, x, y, posX, posY, ctrlSettings, contPaddingBox, align, spacingH, spacingV, alignH, alignV, maxX, maxY, + colWidths = [], rowHeights = [], ctrlMinWidth, ctrlMinHeight, availableWidth, availableHeight; + + // Get layout settings + settings = container.settings; + items = container.items().filter(':visible'); + contLayoutRect = container.layoutRect(); + cols = settings.columns || Math.ceil(Math.sqrt(items.length)); + rows = Math.ceil(items.length / cols); + spacingH = settings.spacingH || settings.spacing || 0; + spacingV = settings.spacingV || settings.spacing || 0; + alignH = settings.alignH || settings.align; + alignV = settings.alignV || settings.align; + contPaddingBox = container._paddingBox; + + if (alignH && typeof(alignH) == "string") { + alignH = [alignH]; + } + + if (alignV && typeof(alignV) == "string") { + alignV = [alignV]; + } + + // Zero padd columnWidths + for (x = 0; x < cols; x++) { + colWidths.push(0); + } + + // Zero padd rowHeights + for (y = 0; y < rows; y++) { + rowHeights.push(0); + } + + // Calculate columnWidths and rowHeights + for (y = 0; y < rows; y++) { + for (x = 0; x < cols; x++) { + ctrl = items[y * cols + x]; + + // Out of bounds + if (!ctrl) { + break; + } + + ctrlLayoutRect = ctrl.layoutRect(); + ctrlMinWidth = ctrlLayoutRect.minW; + ctrlMinHeight = ctrlLayoutRect.minH; + + colWidths[x] = ctrlMinWidth > colWidths[x] ? ctrlMinWidth : colWidths[x]; + rowHeights[y] = ctrlMinHeight > rowHeights[y] ? ctrlMinHeight : rowHeights[y]; + } + } + + // Calculate maxX + availableWidth = contLayoutRect.innerW - contPaddingBox.left - contPaddingBox.right; + for (maxX = 0, x = 0; x < cols; x++) { + maxX += colWidths[x] + (x > 0 ? spacingH : 0); + availableWidth -= (x > 0 ? spacingH : 0) + colWidths[x]; + } + + // Calculate maxY + availableHeight = contLayoutRect.innerH - contPaddingBox.top - contPaddingBox.bottom; + for (maxY = 0, y = 0; y < rows; y++) { + maxY += rowHeights[y] + (y > 0 ? spacingV : 0); + availableHeight -= (y > 0 ? spacingV : 0) + rowHeights[y]; + } + + maxX += contPaddingBox.left + contPaddingBox.right; + maxY += contPaddingBox.top + contPaddingBox.bottom; + + // Calculate minW/minH + rect = {}; + rect.minW = maxX + (contLayoutRect.w - contLayoutRect.innerW); + rect.minH = maxY + (contLayoutRect.h - contLayoutRect.innerH); + + rect.contentW = rect.minW - contLayoutRect.deltaW; + rect.contentH = rect.minH - contLayoutRect.deltaH; + rect.minW = Math.min(rect.minW, contLayoutRect.maxW); + rect.minH = Math.min(rect.minH, contLayoutRect.maxH); + rect.minW = Math.max(rect.minW, contLayoutRect.startMinWidth); + rect.minH = Math.max(rect.minH, contLayoutRect.startMinHeight); + + // Resize container container if minSize was changed + if (contLayoutRect.autoResize && (rect.minW != contLayoutRect.minW || rect.minH != contLayoutRect.minH)) { + rect.w = rect.minW; + rect.h = rect.minH; + + container.layoutRect(rect); + this.recalc(container); + + // Forced recalc for example if items are hidden/shown + if (container._lastRect === null) { + var parentCtrl = container.parent(); + if (parentCtrl) { + parentCtrl._lastRect = null; + parentCtrl.recalc(); + } + } + + return; + } + + // Update contentW/contentH so absEnd moves correctly + if (contLayoutRect.autoResize) { + rect = container.layoutRect(rect); + rect.contentW = rect.minW - contLayoutRect.deltaW; + rect.contentH = rect.minH - contLayoutRect.deltaH; + } + + var flexV; + + if (settings.packV == 'start') { + flexV = 0; + } else { + flexV = availableHeight > 0 ? Math.floor(availableHeight / rows) : 0; + } + + // Calculate totalFlex + var totalFlex = 0; + var flexWidths = settings.flexWidths; + if (flexWidths) { + for (x = 0; x < flexWidths.length; x++) { + totalFlex += flexWidths[x]; + } + } else { + totalFlex = cols; + } + + // Calculate new column widths based on flex values + var ratio = availableWidth / totalFlex; + for (x = 0; x < cols; x++) { + colWidths[x] += flexWidths ? flexWidths[x] * ratio : ratio; + } + + // Move/resize controls + posY = contPaddingBox.top; + for (y = 0; y < rows; y++) { + posX = contPaddingBox.left; + height = rowHeights[y] + flexV; + + for (x = 0; x < cols; x++) { + ctrl = items[y * cols + x]; + + // No more controls to render then break + if (!ctrl) { + break; + } + + // Get control settings and calculate x, y + ctrlSettings = ctrl.settings; + ctrlLayoutRect = ctrl.layoutRect(); + width = Math.max(colWidths[x], ctrlLayoutRect.startMinWidth); + ctrlLayoutRect.x = posX; + ctrlLayoutRect.y = posY; + + // Align control horizontal + align = ctrlSettings.alignH || (alignH ? (alignH[x] || alignH[0]) : null); + if (align == "center") { + ctrlLayoutRect.x = posX + (width / 2) - (ctrlLayoutRect.w / 2); + } else if (align == "right") { + ctrlLayoutRect.x = posX + width - ctrlLayoutRect.w; + } else if (align == "stretch") { + ctrlLayoutRect.w = width; + } + + // Align control vertical + align = ctrlSettings.alignV || (alignV ? (alignV[x] || alignV[0]) : null); + if (align == "center") { + ctrlLayoutRect.y = posY + (height / 2) - (ctrlLayoutRect.h / 2); + } else if (align == "bottom") { + ctrlLayoutRect.y = posY + height - ctrlLayoutRect.h; + } else if (align == "stretch") { + ctrlLayoutRect.h = height; + } + + ctrl.layoutRect(ctrlLayoutRect); + + posX += width + spacingH; + + if (ctrl.recalc) { + ctrl.recalc(); + } + } + + posY += height + spacingV; + } + } + }); +}); + +// Included from: js/tinymce/classes/ui/Iframe.js + +/** + * Iframe.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*jshint scripturl:true */ + +/** + * This class creates an iframe. + * + * @setting {String} url Url to open in the iframe. + * + * @-x-less Iframe.less + * @class tinymce.ui.Iframe + * @extends tinymce.ui.Widget + */ +define("tinymce/ui/Iframe", [ + "tinymce/ui/Widget" +], function(Widget) { + "use strict"; + + return Widget.extend({ + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this; + + self.addClass('iframe'); + self.canFocus = false; + + return ( + '' + ); + }, + + /** + * Setter for the iframe source. + * + * @method src + * @param {String} src Source URL for iframe. + */ + src: function(src) { + this.getEl().src = src; + }, + + /** + * Inner HTML for the iframe. + * + * @method html + * @param {String} html HTML string to set as HTML inside the iframe. + * @param {function} callback Optional callback to execute when the iframe body is filled with contents. + * @return {tinymce.ui.Iframe} Current iframe control. + */ + html: function(html, callback) { + var self = this, body = this.getEl().contentWindow.document.body; + + // Wait for iframe to initialize IE 10 takes time + if (!body) { + setTimeout(function() { + self.html(html); + }, 0); + } else { + body.innerHTML = html; + + if (callback) { + callback(); + } + } + + return this; + } + }); +}); + +// Included from: js/tinymce/classes/ui/Label.js + +/** + * Label.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class creates a label element. A label is a simple text control + * that can be bound to other controls. + * + * @-x-less Label.less + * @class tinymce.ui.Label + * @extends tinymce.ui.Widget + */ +define("tinymce/ui/Label", [ + "tinymce/ui/Widget", + "tinymce/ui/DomUtils" +], function(Widget, DomUtils) { + "use strict"; + + return Widget.extend({ + /** + * Constructs a instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + * @param {Boolean} multiline Multiline label. + */ + init: function(settings) { + var self = this; + + self._super(settings); + self.addClass('widget'); + self.addClass('label'); + self.canFocus = false; + + if (settings.multiline) { + self.addClass('autoscroll'); + } + + if (settings.strong) { + self.addClass('strong'); + } + }, + + /** + * Initializes the current controls layout rect. + * This will be executed by the layout managers to determine the + * default minWidth/minHeight etc. + * + * @method initLayoutRect + * @return {Object} Layout rect instance. + */ + initLayoutRect: function() { + var self = this, layoutRect = self._super(); + + if (self.settings.multiline) { + var size = DomUtils.getSize(self.getEl()); + + // Check if the text fits within maxW if not then try word wrapping it + if (size.width > layoutRect.maxW) { + layoutRect.minW = layoutRect.maxW; + self.addClass('multiline'); + } + + self.getEl().style.width = layoutRect.minW + 'px'; + layoutRect.startMinH = layoutRect.h = layoutRect.minH = Math.min(layoutRect.maxH, DomUtils.getSize(self.getEl()).height); + } + + return layoutRect; + }, + + /** + * Repaints the control after a layout operation. + * + * @method repaint + */ + repaint: function() { + var self = this; + + if (!self.settings.multiline) { + self.getEl().style.lineHeight = self.layoutRect().h + 'px'; + } + + return self._super(); + }, + + /** + * Sets/gets the current label text. + * + * @method text + * @param {String} [text] New label text. + * @return {String|tinymce.ui.Label} Current text or current label instance. + */ + text: function(text) { + var self = this; + + if (self._rendered && text) { + this.innerHtml(self.encode(text)); + } + + return self._super(text); + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, forId = self.settings.forId; + + return ( + '' + ); + } + }); +}); + +// Included from: js/tinymce/classes/ui/Toolbar.js + +/** + * Toolbar.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a new toolbar. + * + * @class tinymce.ui.Toolbar + * @extends tinymce.ui.Container + */ +define("tinymce/ui/Toolbar", [ + "tinymce/ui/Container" +], function(Container) { + "use strict"; + + return Container.extend({ + Defaults: { + role: 'toolbar', + layout: 'flow' + }, + + /** + * Constructs a instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + */ + init: function(settings) { + var self = this; + + self._super(settings); + self.addClass('toolbar'); + }, + + /** + * Called after the control has been rendered. + * + * @method postRender + */ + postRender: function() { + var self = this; + + self.items().addClass('toolbar-item'); + + return self._super(); + } + }); +}); + +// Included from: js/tinymce/classes/ui/MenuBar.js + +/** + * MenuBar.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a new menubar. + * + * @-x-less MenuBar.less + * @class tinymce.ui.MenuBar + * @extends tinymce.ui.Container + */ +define("tinymce/ui/MenuBar", [ + "tinymce/ui/Toolbar" +], function(Toolbar) { + "use strict"; + + return Toolbar.extend({ + Defaults: { + role: 'menubar', + containerCls: 'menubar', + ariaRoot: true, + defaults: { + type: 'menubutton' + } + } + }); +}); + +// Included from: js/tinymce/classes/ui/MenuButton.js + +/** + * MenuButton.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a new menu button. + * + * @-x-less MenuButton.less + * @class tinymce.ui.MenuButton + * @extends tinymce.ui.Button + */ +define("tinymce/ui/MenuButton", [ + "tinymce/ui/Button", + "tinymce/ui/Factory", + "tinymce/ui/MenuBar" +], function(Button, Factory, MenuBar) { + "use strict"; + + // TODO: Maybe add as some global function + function isChildOf(node, parent) { + while (node) { + if (parent === node) { + return true; + } + + node = node.parentNode; + } + + return false; + } + + var MenuButton = Button.extend({ + /** + * Constructs a instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + */ + init: function(settings) { + var self = this; + + self._renderOpen = true; + self._super(settings); + + self.addClass('menubtn'); + + if (settings.fixedWidth) { + self.addClass('fixed-width'); + } + + self.aria('haspopup', true); + self.hasPopup = true; + }, + + /** + * Shows the menu for the button. + * + * @method showMenu + */ + showMenu: function() { + var self = this, settings = self.settings, menu; + + if (self.menu && self.menu.visible()) { + return self.hideMenu(); + } + + if (!self.menu) { + menu = settings.menu || []; + + // Is menu array then auto constuct menu control + if (menu.length) { + menu = { + type: 'menu', + items: menu + }; + } else { + menu.type = menu.type || 'menu'; + } + + self.menu = Factory.create(menu).parent(self).renderTo(); + self.fire('createmenu'); + self.menu.reflow(); + self.menu.on('cancel', function(e) { + if (e.control.parent() === self.menu) { + e.stopPropagation(); + self.focus(); + self.hideMenu(); + } + }); + + // Move focus to button when a menu item is selected/clicked + self.menu.on('select', function() { + self.focus(); + }); + + self.menu.on('show hide', function(e) { + if (e.control == self.menu) { + self.activeMenu(e.type == 'show'); + } + + self.aria('expanded', e.type == 'show'); + }).fire('show'); + } + + self.menu.show(); + self.menu.layoutRect({w: self.layoutRect().w}); + self.menu.moveRel(self.getEl(), self.isRtl() ? ['br-tr', 'tr-br'] : ['bl-tl', 'tl-bl']); + }, + + /** + * Hides the menu for the button. + * + * @method hideMenu + */ + hideMenu: function() { + var self = this; + + if (self.menu) { + self.menu.items().each(function(item) { + if (item.hideMenu) { + item.hideMenu(); + } + }); + + self.menu.hide(); + } + }, + + /** + * Sets the active menu state. + * + * @private + */ + activeMenu: function(state) { + this.toggleClass('active', state); + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, id = self._id, prefix = self.classPrefix; + var icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : ''; + + self.aria('role', self.parent() instanceof MenuBar ? 'menuitem' : 'button'); + + return ( + '
    ' + + '' + + '
    ' + ); + }, + + /** + * Gets invoked after the control has been rendered. + * + * @method postRender + */ + postRender: function() { + var self = this; + + self.on('click', function(e) { + if (e.control === self && isChildOf(e.target, self.getEl())) { + self.showMenu(); + + if (e.aria) { + self.menu.items()[0].focus(); + } + } + }); + + self.on('mouseenter', function(e) { + var overCtrl = e.control, parent = self.parent(), hasVisibleSiblingMenu; + + if (overCtrl && parent && overCtrl instanceof MenuButton && overCtrl.parent() == parent) { + parent.items().filter('MenuButton').each(function(ctrl) { + if (ctrl.hideMenu && ctrl != overCtrl) { + if (ctrl.menu && ctrl.menu.visible()) { + hasVisibleSiblingMenu = true; + } + + ctrl.hideMenu(); + } + }); + + if (hasVisibleSiblingMenu) { + overCtrl.focus(); // Fix for: #5887 + overCtrl.showMenu(); + } + } + }); + + return self._super(); + }, + + /** + * Sets/gets the current button text. + * + * @method text + * @param {String} [text] New button text. + * @return {String|tinymce.ui.MenuButton} Current text or current MenuButton instance. + */ + text: function(text) { + var self = this, i, children; + + if (self._rendered) { + children = self.getEl('open').getElementsByTagName('span'); + for (i = 0; i < children.length; i++) { + children[i].innerHTML = (self.settings.icon && text ? '\u00a0' : '') + self.encode(text); + } + } + + return this._super(text); + }, + + /** + * Removes the control and it's menus. + * + * @method remove + */ + remove: function() { + this._super(); + + if (this.menu) { + this.menu.remove(); + } + } + }); + + return MenuButton; +}); + +// Included from: js/tinymce/classes/ui/ListBox.js + +/** + * ListBox.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a new list box control. + * + * @-x-less ListBox.less + * @class tinymce.ui.ListBox + * @extends tinymce.ui.MenuButton + */ +define("tinymce/ui/ListBox", [ + "tinymce/ui/MenuButton" +], function(MenuButton) { + "use strict"; + + return MenuButton.extend({ + /** + * Constructs a instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + * @setting {Array} values Array with values to add to list box. + */ + init: function(settings) { + var self = this, values, i, selected, selectedText, lastItemCtrl; + + self._values = values = settings.values; + if (values) { + for (i = 0; i < values.length; i++) { + selected = values[i].selected || settings.value === values[i].value; + + if (selected) { + selectedText = selectedText || values[i].text; + self._value = values[i].value; + break; + } + } + + // Default with first item + if (!selected && values.length > 0) { + selectedText = values[0].text; + self._value = values[0].value; + } + + settings.menu = values; + } + + settings.text = settings.text || selectedText || values[0].text; + + self._super(settings); + self.addClass('listbox'); + + self.on('select', function(e) { + var ctrl = e.control; + + if (lastItemCtrl) { + e.lastControl = lastItemCtrl; + } + + if (settings.multiple) { + ctrl.active(!ctrl.active()); + } else { + self.value(e.control.settings.value); + } + + lastItemCtrl = ctrl; + }); + }, + + /** + * Getter/setter function for the control value. + * + * @method value + * @param {String} [value] Value to be set. + * @return {Boolean/tinymce.ui.ListBox} Value or self if it's a set operation. + */ + value: function(value) { + var self = this, active, selectedText, menu, i; + + function activateByValue(menu, value) { + menu.items().each(function(ctrl) { + active = ctrl.value() === value; + + if (active) { + selectedText = selectedText || ctrl.text(); + } + + ctrl.active(active); + + if (ctrl.menu) { + activateByValue(ctrl.menu, value); + } + }); + } + + if (typeof(value) != "undefined") { + if (self.menu) { + activateByValue(self.menu, value); + } else { + menu = self.settings.menu; + for (i = 0; i < menu.length; i++) { + active = menu[i].value == value; + + if (active) { + selectedText = selectedText || menu[i].text; + } + + menu[i].active = active; + } + } + + self.text(selectedText || this.settings.text); + } + + return self._super(value); + } + }); +}); + +// Included from: js/tinymce/classes/ui/MenuItem.js + +/** + * MenuItem.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a new menu item. + * + * @-x-less MenuItem.less + * @class tinymce.ui.MenuItem + * @extends tinymce.ui.Control + */ +define("tinymce/ui/MenuItem", [ + "tinymce/ui/Widget", + "tinymce/ui/Factory", + "tinymce/Env" +], function(Widget, Factory, Env) { + "use strict"; + + return Widget.extend({ + Defaults: { + border: 0, + role: 'menuitem' + }, + + /** + * Constructs a instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + * @setting {Boolean} selectable Selectable menu. + * @setting {Array} menu Submenu array with items. + * @setting {String} shortcut Shortcut to display for menu item. Example: Ctrl+X + */ + init: function(settings) { + var self = this; + + self.hasPopup = true; + + self._super(settings); + + settings = self.settings; + + self.addClass('menu-item'); + + if (settings.menu) { + self.addClass('menu-item-expand'); + } + + if (settings.preview) { + self.addClass('menu-item-preview'); + } + + if (self._text === '-' || self._text === '|') { + self.addClass('menu-item-sep'); + self.aria('role', 'separator'); + self._text = '-'; + } + + if (settings.selectable) { + self.aria('role', 'menuitemcheckbox'); + self.addClass('menu-item-checkbox'); + settings.icon = 'selected'; + } + + if (!settings.preview && !settings.selectable) { + self.addClass('menu-item-normal'); + } + + self.on('mousedown', function(e) { + e.preventDefault(); + }); + + if (settings.menu) { + self.aria('haspopup', true); + } + }, + + /** + * Returns true/false if the menuitem has sub menu. + * + * @method hasMenus + * @return {Boolean} True/false state if it has submenu. + */ + hasMenus: function() { + return !!this.settings.menu; + }, + + /** + * Shows the menu for the menu item. + * + * @method showMenu + */ + showMenu: function() { + var self = this, settings = self.settings, menu, parent = self.parent(); + + parent.items().each(function(ctrl) { + if (ctrl !== self) { + ctrl.hideMenu(); + } + }); + + if (settings.menu) { + menu = self.menu; + + if (!menu) { + menu = settings.menu; + + // Is menu array then auto constuct menu control + if (menu.length) { + menu = { + type: 'menu', + items: menu + }; + } else { + menu.type = menu.type || 'menu'; + } + + if (parent.settings.itemDefaults) { + menu.itemDefaults = parent.settings.itemDefaults; + } + + menu = self.menu = Factory.create(menu).parent(self).renderTo(); + menu.reflow(); + menu.fire('show'); + menu.on('cancel', function(e) { + e.stopPropagation(); + self.focus(); + menu.hide(); + }); + + menu.on('hide', function(e) { + if (e.control === menu) { + self.removeClass('selected'); + } + }); + + menu.submenu = true; + } else { + menu.show(); + } + + menu._parentMenu = parent; + + menu.addClass('menu-sub'); + + var rel = menu.testMoveRel( + self.getEl(), + self.isRtl() ? ['tl-tr', 'bl-br', 'tr-tl', 'br-bl'] : ['tr-tl', 'br-bl', 'tl-tr', 'bl-br'] + ); + + menu.moveRel(self.getEl(), rel); + menu.rel = rel; + + rel = 'menu-sub-' + rel; + menu.removeClass(menu._lastRel); + menu.addClass(rel); + menu._lastRel = rel; + + self.addClass('selected'); + self.aria('expanded', true); + } + }, + + /** + * Hides the menu for the menu item. + * + * @method hideMenu + */ + hideMenu: function() { + var self = this; + + if (self.menu) { + self.menu.items().each(function(item) { + if (item.hideMenu) { + item.hideMenu(); + } + }); + + self.menu.hide(); + self.aria('expanded', false); + } + + return self; + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, id = self._id, settings = self.settings, prefix = self.classPrefix, text = self.encode(self._text); + var icon = self.settings.icon, image = '', shortcut = settings.shortcut; + + if (icon) { + self.parent().addClass('menu-has-icons'); + } + + if (settings.image) { + icon = 'none'; + image = ' style="background-image: url(\'' + settings.image + '\')"'; + } + + if (shortcut && Env.mac) { + // format shortcut for Mac + shortcut = shortcut.replace(/ctrl\+alt\+/i, '⌥⌘'); // ctrl+cmd + shortcut = shortcut.replace(/ctrl\+/i, '⌘'); // ctrl symbol + shortcut = shortcut.replace(/alt\+/i, '⌥'); // cmd symbol + shortcut = shortcut.replace(/shift\+/i, '⇧'); // shift symbol + } + + icon = prefix + 'ico ' + prefix + 'i-' + (self.settings.icon || 'none'); + + return ( + '
    ' + + (text !== '-' ? ' ' : '') + + (text !== '-' ? '' + text + '' : '') + + (shortcut ? '
    ' + shortcut + '
    ' : '') + + (settings.menu ? '
    ' : '') + + '
    ' + ); + }, + + /** + * Gets invoked after the control has been rendered. + * + * @method postRender + */ + postRender: function() { + var self = this, settings = self.settings; + + var textStyle = settings.textStyle; + if (typeof(textStyle) == "function") { + textStyle = textStyle.call(this); + } + + if (textStyle) { + var textElm = self.getEl('text'); + if (textElm) { + textElm.setAttribute('style', textStyle); + } + } + + self.on('mouseenter click', function(e) { + if (e.control === self) { + if (!settings.menu && e.type === 'click') { + self.fire('select'); + self.parent().hideAll(); + } else { + self.showMenu(); + + if (e.aria) { + self.menu.focus(true); + } + } + } + }); + + self._super(); + + return self; + }, + + active: function(state) { + if (typeof(state) != "undefined") { + this.aria('checked', state); + } + + return this._super(state); + }, + + /** + * Removes the control and it's menus. + * + * @method remove + */ + remove: function() { + this._super(); + + if (this.menu) { + this.menu.remove(); + } + } + }); +}); + +// Included from: js/tinymce/classes/ui/Menu.js + +/** + * Menu.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a new menu. + * + * @-x-less Menu.less + * @class tinymce.ui.Menu + * @extends tinymce.ui.FloatPanel + */ +define("tinymce/ui/Menu", [ + "tinymce/ui/FloatPanel", + "tinymce/ui/MenuItem", + "tinymce/util/Tools" +], function(FloatPanel, MenuItem, Tools) { + "use strict"; + + var Menu = FloatPanel.extend({ + Defaults: { + defaultType: 'menuitem', + border: 1, + layout: 'stack', + role: 'application', + bodyRole: 'menu', + ariaRoot: true + }, + + /** + * Constructs a instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + */ + init: function(settings) { + var self = this; + + settings.autohide = true; + settings.constrainToViewport = true; + + if (settings.itemDefaults) { + var items = settings.items, i = items.length; + + while (i--) { + items[i] = Tools.extend({}, settings.itemDefaults, items[i]); + } + } + + self._super(settings); + self.addClass('menu'); + }, + + /** + * Repaints the control after a layout operation. + * + * @method repaint + */ + repaint: function() { + this.toggleClass('menu-align', true); + + this._super(); + + this.getEl().style.height = ''; + this.getEl('body').style.height = ''; + + return this; + }, + + /** + * Hides/closes the menu. + * + * @method cancel + */ + cancel: function() { + var self = this; + + self.hideAll(); + self.fire('select'); + }, + + /** + * Hide menu and all sub menus. + * + * @method hideAll + */ + hideAll: function() { + var self = this; + + this.find('menuitem').exec('hideMenu'); + + return self._super(); + }, +/* + getContainerElm: function() { + var doc = document, id = this.classPrefix + 'menucontainer'; + + var elm = doc.getElementById(id); + if (!elm) { + elm = doc.createElement('div'); + elm.id = id; + elm.setAttribute('role', 'application'); + elm.className = this.classPrefix + '-reset'; + elm.style.position = 'absolute'; + elm.style.top = elm.style.left = '0'; + elm.style.overflow = 'visible'; + doc.body.appendChild(elm); + } + + return elm; + }, +*/ + /** + * Invoked before the menu is rendered. + * + * @method preRender + */ + preRender: function() { + var self = this; + + self.items().each(function(ctrl) { + var settings = ctrl.settings; + + if (settings.icon || settings.selectable) { + self._hasIcons = true; + return false; + } + }); + + return self._super(); + } + }); + + return Menu; +}); + +// Included from: js/tinymce/classes/ui/Radio.js + +/** + * Radio.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a new radio button. + * + * @-x-less Radio.less + * @class tinymce.ui.Radio + * @extends tinymce.ui.Checkbox + */ +define("tinymce/ui/Radio", [ + "tinymce/ui/Checkbox" +], function(Checkbox) { + "use strict"; + + return Checkbox.extend({ + Defaults: { + classes: "radio", + role: "radio" + } + }); +}); + +// Included from: js/tinymce/classes/ui/ResizeHandle.js + +/** + * ResizeHandle.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Renders a resize handle that fires ResizeStart, Resize and ResizeEnd events. + * + * @-x-less ResizeHandle.less + * @class tinymce.ui.ResizeHandle + * @extends tinymce.ui.Widget + */ +define("tinymce/ui/ResizeHandle", [ + "tinymce/ui/Widget", + "tinymce/ui/DragHelper" +], function(Widget, DragHelper) { + "use strict"; + + return Widget.extend({ + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, prefix = self.classPrefix; + + self.addClass('resizehandle'); + + if (self.settings.direction == "both") { + self.addClass('resizehandle-both'); + } + + self.canFocus = false; + + return ( + '
    ' + + '' + + '
    ' + ); + }, + + /** + * Called after the control has been rendered. + * + * @method postRender + */ + postRender: function() { + var self = this; + + self._super(); + + self.resizeDragHelper = new DragHelper(this._id, { + start: function() { + self.fire('ResizeStart'); + }, + + drag: function(e) { + if (self.settings.direction != "both") { + e.deltaX = 0; + } + + self.fire('Resize', e); + }, + + stop: function() { + self.fire('ResizeEnd'); + } + }); + }, + + remove: function() { + if (this.resizeDragHelper) { + this.resizeDragHelper.destroy(); + } + + return this._super(); + } + }); +}); + +// Included from: js/tinymce/classes/ui/Spacer.js + +/** + * Spacer.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a spacer. This control is used in flex layouts for example. + * + * @-x-less Spacer.less + * @class tinymce.ui.Spacer + * @extends tinymce.ui.Widget + */ +define("tinymce/ui/Spacer", [ + "tinymce/ui/Widget" +], function(Widget) { + "use strict"; + + return Widget.extend({ + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this; + + self.addClass('spacer'); + self.canFocus = false; + + return '
    '; + } + }); +}); + +// Included from: js/tinymce/classes/ui/SplitButton.js + +/** + * SplitButton.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a split button. + * + * @-x-less SplitButton.less + * @class tinymce.ui.SplitButton + * @extends tinymce.ui.Button + */ +define("tinymce/ui/SplitButton", [ + "tinymce/ui/MenuButton", + "tinymce/ui/DomUtils" +], function(MenuButton, DomUtils) { + return MenuButton.extend({ + Defaults: { + classes: "widget btn splitbtn", + role: "button" + }, + + /** + * Repaints the control after a layout operation. + * + * @method repaint + */ + repaint: function() { + var self = this, elm = self.getEl(), rect = self.layoutRect(), mainButtonElm, menuButtonElm; + + self._super(); + + mainButtonElm = elm.firstChild; + menuButtonElm = elm.lastChild; + + DomUtils.css(mainButtonElm, { + width: rect.w - DomUtils.getSize(menuButtonElm).width, + height: rect.h - 2 + }); + + DomUtils.css(menuButtonElm, { + height: rect.h - 2 + }); + + return self; + }, + + /** + * Sets the active menu state. + * + * @private + */ + activeMenu: function(state) { + var self = this; + + DomUtils.toggleClass(self.getEl().lastChild, self.classPrefix + 'active', state); + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, id = self._id, prefix = self.classPrefix; + var icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : ''; + + return ( + '
    ' + + '' + + '' + + '
    ' + ); + }, + + /** + * Called after the control has been rendered. + * + * @method postRender + */ + postRender: function() { + var self = this, onClickHandler = self.settings.onclick; + + self.on('click', function(e) { + var node = e.target; + + if (e.control == this) { + // Find clicks that is on the main button + while (node) { + if ((e.aria && e.aria.key != 'down') || (node.nodeName == 'BUTTON' && node.className.indexOf('open') == -1)) { + e.stopImmediatePropagation(); + onClickHandler.call(this, e); + return; + } + + node = node.parentNode; + } + } + }); + + delete self.settings.onclick; + + return self._super(); + } + }); +}); + +// Included from: js/tinymce/classes/ui/StackLayout.js + +/** + * StackLayout.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This layout uses the browsers layout when the items are blocks. + * + * @-x-less StackLayout.less + * @class tinymce.ui.StackLayout + * @extends tinymce.ui.FlowLayout + */ +define("tinymce/ui/StackLayout", [ + "tinymce/ui/FlowLayout" +], function(FlowLayout) { + "use strict"; + + return FlowLayout.extend({ + Defaults: { + containerClass: 'stack-layout', + controlClass: 'stack-layout-item', + endClass : 'break' + } + }); +}); + +// Included from: js/tinymce/classes/ui/TabPanel.js + +/** + * TabPanel.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a tab panel control. + * + * @-x-less TabPanel.less + * @class tinymce.ui.TabPanel + * @extends tinymce.ui.Panel + * + * @setting {Number} activeTab Active tab index. + */ +define("tinymce/ui/TabPanel", [ + "tinymce/ui/Panel", + "tinymce/ui/DomUtils" +], function(Panel, DomUtils) { + "use strict"; + + return Panel.extend({ + lastIdx: 0, + + Defaults: { + layout: 'absolute', + defaults: { + type: 'panel' + } + }, + + /** + * Activates the specified tab by index. + * + * @method activateTab + * @param {Number} idx Index of the tab to activate. + */ + activateTab: function(idx) { + var activeTabElm; + + if (this.activeTabId) { + activeTabElm = this.getEl(this.activeTabId); + DomUtils.removeClass(activeTabElm, this.classPrefix + 'active'); + activeTabElm.setAttribute('aria-selected', "false"); + } + + this.activeTabId = 't' + idx; + + activeTabElm = this.getEl('t' + idx); + activeTabElm.setAttribute('aria-selected', "true"); + DomUtils.addClass(activeTabElm, this.classPrefix + 'active'); + + if (idx != this.lastIdx) { + this.items()[this.lastIdx].hide(); + this.lastIdx = idx; + } + + this.items()[idx].show().fire('showtab'); + this.reflow(); + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, layout = self._layout, tabsHtml = '', prefix = self.classPrefix; + + self.preRender(); + layout.preRender(self); + + self.items().each(function(ctrl, i) { + var id = self._id + '-t' + i; + + ctrl.aria('role', 'tabpanel'); + ctrl.aria('labelledby', id); + + tabsHtml += ( + '' + ); + }); + + return ( + '
    ' + + '
    ' + + tabsHtml + + '
    ' + + '
    ' + + layout.renderHtml(self) + + '
    ' + + '
    ' + ); + }, + + /** + * Called after the control has been rendered. + * + * @method postRender + */ + postRender: function() { + var self = this; + + self._super(); + + self.settings.activeTab = self.settings.activeTab || 0; + self.activateTab(self.settings.activeTab); + + this.on('click', function(e) { + var targetParent = e.target.parentNode; + + if (e.target.parentNode.id == self._id + '-head') { + var i = targetParent.childNodes.length; + + while (i--) { + if (targetParent.childNodes[i] == e.target) { + self.activateTab(i); + } + } + } + }); + }, + + /** + * Initializes the current controls layout rect. + * This will be executed by the layout managers to determine the + * default minWidth/minHeight etc. + * + * @method initLayoutRect + * @return {Object} Layout rect instance. + */ + initLayoutRect: function() { + var self = this, rect, minW, minH; + + minW = DomUtils.getSize(self.getEl('head')).width; + minW = minW < 0 ? 0 : minW; + minH = 0; + self.items().each(function(item, i) { + minW = Math.max(minW, item.layoutRect().minW); + minH = Math.max(minH, item.layoutRect().minH); + if (self.settings.activeTab != i) { + item.hide(); + } + }); + + self.items().each(function(ctrl) { + ctrl.settings.x = 0; + ctrl.settings.y = 0; + ctrl.settings.w = minW; + ctrl.settings.h = minH; + + ctrl.layoutRect({ + x: 0, + y: 0, + w: minW, + h: minH + }); + }); + + var headH = DomUtils.getSize(self.getEl('head')).height; + + self.settings.minWidth = minW; + self.settings.minHeight = minH + headH; + + rect = self._super(); + rect.deltaH += headH; + rect.innerH = rect.h - rect.deltaH; + + return rect; + } + }); +}); + +// Included from: js/tinymce/classes/ui/TextBox.js + +/** + * TextBox.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * Creates a new textbox. + * + * @-x-less TextBox.less + * @class tinymce.ui.TextBox + * @extends tinymce.ui.Widget + */ +define("tinymce/ui/TextBox", [ + "tinymce/ui/Widget", + "tinymce/ui/DomUtils" +], function(Widget, DomUtils) { + "use strict"; + + return Widget.extend({ + /** + * Constructs a instance with the specified settings. + * + * @constructor + * @param {Object} settings Name/value object with settings. + * @setting {Boolean} multiline True if the textbox is a multiline control. + * @setting {Number} maxLength Max length for the textbox. + * @setting {Number} size Size of the textbox in characters. + */ + init: function(settings) { + var self = this; + + self._super(settings); + + self._value = settings.value || ''; + self.addClass('textbox'); + + if (settings.multiline) { + self.addClass('multiline'); + } else { + // TODO: Rework this + self.on('keydown', function(e) { + if (e.keyCode == 13) { + self.parents().reverse().each(function(ctrl) { + e.preventDefault(); + + if (ctrl.hasEventListeners('submit') && ctrl.toJSON) { + ctrl.fire('submit', {data: ctrl.toJSON()}); + return false; + } + }); + } + }); + } + }, + + /** + * Getter/setter function for the disabled state. + * + * @method value + * @param {Boolean} [state] State to be set. + * @return {Boolean|tinymce.ui.ComboBox} True/false or self if it's a set operation. + */ + disabled: function(state) { + var self = this; + + if (self._rendered && typeof(state) != 'undefined') { + self.getEl().disabled = state; + } + + return self._super(state); + }, + + /** + * Getter/setter function for the control value. + * + * @method value + * @param {String} [value] Value to be set. + * @return {String|tinymce.ui.ComboBox} Value or self if it's a set operation. + */ + value: function(value) { + var self = this; + + if (typeof(value) != "undefined") { + self._value = value; + + if (self._rendered) { + self.getEl().value = value; + } + + return self; + } + + if (self._rendered) { + return self.getEl().value; + } + + return self._value; + }, + + /** + * Repaints the control after a layout operation. + * + * @method repaint + */ + repaint: function() { + var self = this, style, rect, borderBox, borderW = 0, borderH = 0, lastRepaintRect; + + style = self.getEl().style; + rect = self._layoutRect; + lastRepaintRect = self._lastRepaintRect || {}; + + // Detect old IE 7+8 add lineHeight to align caret vertically in the middle + var doc = document; + if (!self.settings.multiline && doc.all && (!doc.documentMode || doc.documentMode <= 8)) { + style.lineHeight = (rect.h - borderH) + 'px'; + } + + borderBox = self._borderBox; + borderW = borderBox.left + borderBox.right + 8; + borderH = borderBox.top + borderBox.bottom + (self.settings.multiline ? 8 : 0); + + if (rect.x !== lastRepaintRect.x) { + style.left = rect.x + 'px'; + lastRepaintRect.x = rect.x; + } + + if (rect.y !== lastRepaintRect.y) { + style.top = rect.y + 'px'; + lastRepaintRect.y = rect.y; + } + + if (rect.w !== lastRepaintRect.w) { + style.width = (rect.w - borderW) + 'px'; + lastRepaintRect.w = rect.w; + } + + if (rect.h !== lastRepaintRect.h) { + style.height = (rect.h - borderH) + 'px'; + lastRepaintRect.h = rect.h; + } + + self._lastRepaintRect = lastRepaintRect; + self.fire('repaint', {}, false); + + return self; + }, + + /** + * Renders the control as a HTML string. + * + * @method renderHtml + * @return {String} HTML representing the control. + */ + renderHtml: function() { + var self = this, id = self._id, settings = self.settings, value = self.encode(self._value, false), extraAttrs = ''; + + if ("spellcheck" in settings) { + extraAttrs += ' spellcheck="' + settings.spellcheck + '"'; + } + + if (settings.maxLength) { + extraAttrs += ' maxlength="' + settings.maxLength + '"'; + } + + if (settings.size) { + extraAttrs += ' size="' + settings.size + '"'; + } + + if (settings.subtype) { + extraAttrs += ' type="' + settings.subtype + '"'; + } + + if (self.disabled()) { + extraAttrs += ' disabled="disabled"'; + } + + if (settings.multiline) { + return ( + '' + ); + } + + return ''; + }, + + /** + * Called after the control has been rendered. + * + * @method postRender + */ + postRender: function() { + var self = this; + + DomUtils.on(self.getEl(), 'change', function(e) { + self.fire('change', e); + }); + + return self._super(); + }, + + remove: function() { + DomUtils.off(this.getEl()); + this._super(); + } + }); +}); + +// Included from: js/tinymce/classes/ui/Throbber.js + +/** + * Throbber.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class enables you to display a Throbber for any element. + * + * @-x-less Throbber.less + * @class tinymce.ui.Throbber + */ +define("tinymce/ui/Throbber", [ + "tinymce/ui/DomUtils" +], function(DomUtils) { + "use strict"; + + /** + * Constructs a new throbber. + * + * @constructor + * @param {Element} elm DOM Html element to display throbber in. + */ + return function(elm) { + var self = this, state; + + /** + * Shows the throbber. + * + * @method show + * @param {Number} [time] Time to wait before showing. + * @return {tinymce.ui.Throbber} Current throbber instance. + */ + self.show = function(time) { + self.hide(); + + state = true; + + window.setTimeout(function() { + if (state) { + elm.appendChild(DomUtils.createFragment('
    ')); + } + }, time || 0); + + return self; + }; + + /** + * Hides the throbber. + * + * @method hide + * @return {tinymce.ui.Throbber} Current throbber instance. + */ + self.hide = function() { + var child = elm.lastChild; + + if (child && child.className.indexOf('throbber') != -1) { + child.parentNode.removeChild(child); + } + + state = false; + + return self; + }; + }; +}); + +expose(["tinymce/dom/EventUtils","tinymce/dom/Sizzle","tinymce/dom/DomQuery","tinymce/html/Styles","tinymce/dom/TreeWalker","tinymce/util/Tools","tinymce/dom/Range","tinymce/html/Entities","tinymce/Env","tinymce/dom/StyleSheetLoader","tinymce/dom/DOMUtils","tinymce/dom/ScriptLoader","tinymce/AddOnManager","tinymce/html/Node","tinymce/html/Schema","tinymce/html/SaxParser","tinymce/html/DomParser","tinymce/html/Writer","tinymce/html/Serializer","tinymce/dom/Serializer","tinymce/dom/TridentSelection","tinymce/util/VK","tinymce/dom/ControlSelection","tinymce/dom/RangeUtils","tinymce/dom/Selection","tinymce/Formatter","tinymce/UndoManager","tinymce/EnterKey","tinymce/ForceBlocks","tinymce/EditorCommands","tinymce/util/URI","tinymce/util/Class","tinymce/ui/Selector","tinymce/ui/Collection","tinymce/ui/DomUtils","tinymce/ui/Control","tinymce/ui/Factory","tinymce/ui/KeyboardNavigation","tinymce/ui/Container","tinymce/ui/DragHelper","tinymce/ui/Scrollable","tinymce/ui/Panel","tinymce/ui/Movable","tinymce/ui/Resizable","tinymce/ui/FloatPanel","tinymce/ui/Window","tinymce/ui/MessageBox","tinymce/WindowManager","tinymce/util/Quirks","tinymce/util/Observable","tinymce/Shortcuts","tinymce/Editor","tinymce/util/I18n","tinymce/FocusManager","tinymce/EditorManager","tinymce/LegacyInput","tinymce/util/XHR","tinymce/util/JSON","tinymce/util/JSONRequest","tinymce/util/JSONP","tinymce/util/LocalStorage","tinymce/Compat","tinymce/ui/Layout","tinymce/ui/AbsoluteLayout","tinymce/ui/Tooltip","tinymce/ui/Widget","tinymce/ui/Button","tinymce/ui/ButtonGroup","tinymce/ui/Checkbox","tinymce/ui/PanelButton","tinymce/ui/ColorButton","tinymce/ui/ComboBox","tinymce/ui/Path","tinymce/ui/ElementPath","tinymce/ui/FormItem","tinymce/ui/Form","tinymce/ui/FieldSet","tinymce/ui/FilePicker","tinymce/ui/FitLayout","tinymce/ui/FlexLayout","tinymce/ui/FlowLayout","tinymce/ui/FormatControls","tinymce/ui/GridLayout","tinymce/ui/Iframe","tinymce/ui/Label","tinymce/ui/Toolbar","tinymce/ui/MenuBar","tinymce/ui/MenuButton","tinymce/ui/ListBox","tinymce/ui/MenuItem","tinymce/ui/Menu","tinymce/ui/Radio","tinymce/ui/ResizeHandle","tinymce/ui/Spacer","tinymce/ui/SplitButton","tinymce/ui/StackLayout","tinymce/ui/TabPanel","tinymce/ui/TextBox","tinymce/ui/Throbber"]); +})(this); \ No newline at end of file diff --git a/common/static/js/vendor/tinymce/js/tinymce/tinymce.min.js b/common/static/js/vendor/tinymce/js/tinymce/tinymce.min.js new file mode 100644 index 0000000000..7ae3354117 --- /dev/null +++ b/common/static/js/vendor/tinymce/js/tinymce/tinymce.min.js @@ -0,0 +1,10 @@ +// 4.0.20 (2014-03-18) +!function(e,t){"use strict";function n(e,t){for(var n,r=[],i=0;ir;r++)if(o=n[r],o&&o.func.call(o.scope,e)===!1&&e.preventDefault(),e.isImmediatePropagationStopped())return}var a=this,s={},l,c,u,d,f;c=o+(+new Date).toString(32),d="onmouseenter"in document.documentElement,u="onfocusin"in document.documentElement,f={mouseenter:"mouseover",mouseleave:"mouseout"},l=1,a.domLoaded=!1,a.events=s,a.bind=function(t,o,p,m){function h(e){i(n(e||_.event),g)}var g,v,y,b,C,x,w,_=window;if(t&&3!==t.nodeType&&8!==t.nodeType){for(t[c]?g=t[c]:(g=l++,t[c]=g,s[g]={}),m=m||t,o=o.split(" "),y=o.length;y--;)b=o[y],x=h,C=w=!1,"DOMContentLoaded"===b&&(b="ready"),a.domLoaded&&"ready"===b&&"complete"==t.readyState?p.call(m,n({type:b})):(d||(C=f[b],C&&(x=function(e){var t,r;if(t=e.currentTarget,r=e.relatedTarget,r&&t.contains)r=t.contains(r);else for(;r&&r!==t;)r=r.parentNode;r||(e=n(e||_.event),e.type="mouseout"===e.type?"mouseleave":"mouseenter",e.target=t,i(e,g))})),u||"focusin"!==b&&"focusout"!==b||(w=!0,C="focusin"===b?"focus":"blur",x=function(e){e=n(e||_.event),e.type="focus"===e.type?"focusin":"focusout",i(e,g)}),v=s[g][b],v?"ready"===b&&a.domLoaded?p({type:b}):v.push({func:p,scope:m}):(s[g][b]=v=[{func:p,scope:m}],v.fakeName=C,v.capture=w,v.nativeHandler=x,"ready"===b?r(t,x,a):e(t,C||b,x,w)));return t=v=0,p}},a.unbind=function(e,n,r){var i,o,l,u,d,f;if(!e||3===e.nodeType||8===e.nodeType)return a;if(i=e[c]){if(f=s[i],n){for(n=n.split(" "),l=n.length;l--;)if(d=n[l],o=f[d]){if(r)for(u=o.length;u--;)if(o[u].func===r){var p=o.nativeHandler,m=o.fakeName,h=o.capture;o=o.slice(0,u).concat(o.slice(u+1)),o.nativeHandler=p,o.fakeName=m,o.capture=h,f[d]=o}r&&0!==o.length||(delete f[d],t(e,o.fakeName||d,o.nativeHandler,o.capture))}}else{for(d in f)o=f[d],t(e,o.fakeName||d,o.nativeHandler,o.capture);f={}}for(d in f)return a;delete s[i];try{delete e[c]}catch(g){e[c]=null}}return a},a.fire=function(e,t,r){var o;if(!e||3===e.nodeType||8===e.nodeType)return a;r=n(null,r),r.type=t,r.target=e;do o=e[c],o&&i(r,o),e=e.parentNode||e.ownerDocument||e.defaultView||e.parentWindow;while(e&&!r.isPropagationStopped());return a},a.clean=function(e){var t,n,r=a.unbind;if(!e||3===e.nodeType||8===e.nodeType)return a;if(e[c]&&r(e),e.getElementsByTagName||(e=e.document),e&&e.getElementsByTagName)for(r(e),n=e.getElementsByTagName("*"),t=n.length;t--;)e=n[t],e[c]&&r(e);return a},a.destroy=function(){s={}},a.cancel=function(e){return e&&(e.preventDefault(),e.stopImmediatePropagation()),!1}}var o="mce-data-",a=/^(?:mouse|contextmenu)|click/,s={keyLocation:1,layerX:1,layerY:1,returnValue:1};return i.Event=new i,i.Event.bind(window,"ready",function(){}),i}),r(c,[],function(){function e(e){return ht.test(e+"")}function n(){var e,t=[];return e=function(n,r){return t.push(n+=" ")>_.cacheLength&&delete e[t.shift()],e[n]=r,r}}function r(e){return e[I]=!0,e}function i(e){var t=B.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t=null}}function o(e,t,n,r){var i,o,a,s,l,c,f,p,m,h;if((t?t.ownerDocument||t:F)!==B&&A(t),t=t||B,n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=t.nodeType)&&9!==s)return[];if(D&&!r){if(i=gt.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(a))&&O(t,o)&&o.id===a)return n.push(o),n}else{if(i[2])return Z.apply(n,t.getElementsByTagName(e)),n;if((a=i[3])&&z.getElementsByClassName&&t.getElementsByClassName)return Z.apply(n,t.getElementsByClassName(a)),n}if(z.qsa&&!M.test(e)){if(f=!0,p=I,m=t,h=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){for(c=u(e),(f=t.getAttribute("id"))?p=f.replace(bt,"\\$&"):t.setAttribute("id",p),p="[id='"+p+"'] ",l=c.length;l--;)c[l]=p+d(c[l]);m=mt.test(e)&&t.parentNode||t,h=c.join(",")}if(h)try{return Z.apply(n,m.querySelectorAll(h)),n}catch(g){}finally{f||t.removeAttribute("id")}}}return b(e.replace(lt,"$1"),t,n,r)}function a(e,t){var n=t&&e,r=n&&(~t.sourceIndex||G)-(~e.sourceIndex||G);if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function s(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function l(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function c(e){return r(function(t){return t=+t,r(function(n,r){for(var i,o=e([],n.length,t),a=o.length;a--;)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function u(e,t){var n,r,i,a,s,l,c,u=q[e+" "];if(u)return t?0:u.slice(0);for(s=e,l=[],c=_.preFilter;s;){(!n||(r=ct.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=ut.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(lt," ")}),s=s.slice(n.length));for(a in _.filter)!(r=pt[a].exec(s))||c[a]&&!(r=c[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?o.error(e):q(e,l).slice(0)}function d(e){for(var t=0,n=e.length,r="";n>t;t++)r+=e[t].value;return r}function f(e,t,n){var r=t.dir,i=n&&"parentNode"===r,o=V++;return t.first?function(t,n,o){for(;t=t[r];)if(1===t.nodeType||i)return e(t,n,o)}:function(t,n,a){var s,l,c,u=W+" "+o;if(a){for(;t=t[r];)if((1===t.nodeType||i)&&e(t,n,a))return!0}else for(;t=t[r];)if(1===t.nodeType||i)if(c=t[I]||(t[I]={}),(l=c[r])&&l[0]===u){if((s=l[1])===!0||s===w)return s===!0}else if(l=c[r]=[u],l[1]=e(t,n,a)||w,l[1]===!0)return!0}}function p(e){return e.length>1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function m(e,t,n,r,i){for(var o,a=[],s=0,l=e.length,c=null!=t;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),c&&t.push(s));return a}function h(e,t,n,i,o,a){return i&&!i[I]&&(i=h(i)),o&&!o[I]&&(o=h(o,a)),r(function(r,a,s,l){var c,u,d,f=[],p=[],h=a.length,g=r||y(t||"*",s.nodeType?[s]:s,[]),v=!e||!r&&t?g:m(g,f,e,s,l),b=n?o||(r?e:h||i)?[]:a:v;if(n&&n(v,b,s,l),i)for(c=m(b,p),i(c,[],s,l),u=c.length;u--;)(d=c[u])&&(b[p[u]]=!(v[p[u]]=d));if(r){if(o||e){if(o){for(c=[],u=b.length;u--;)(d=b[u])&&c.push(v[u]=d);o(null,b=[],c,l)}for(u=b.length;u--;)(d=b[u])&&(c=o?tt.call(r,d):f[u])>-1&&(r[c]=!(a[c]=d))}}else b=m(b===a?b.splice(h,b.length):b),o?o(null,a,b,l):Z.apply(a,b)})}function g(e){for(var t,n,r,i=e.length,o=_.relative[e[0].type],a=o||_.relative[" "],s=o?1:0,l=f(function(e){return e===t},a,!0),c=f(function(e){return tt.call(t,e)>-1},a,!0),u=[function(e,n,r){return!o&&(r||n!==k)||((t=n).nodeType?l(e,n,r):c(e,n,r))}];i>s;s++)if(n=_.relative[e[s].type])u=[f(p(u),n)];else{if(n=_.filter[e[s].type].apply(null,e[s].matches),n[I]){for(r=++s;i>r&&!_.relative[e[r].type];r++);return h(s>1&&p(u),s>1&&d(e.slice(0,s-1)).replace(lt,"$1"),n,r>s&&g(e.slice(s,r)),i>r&&g(e=e.slice(r)),i>r&&d(e))}u.push(n)}return p(u)}function v(e,t){var n=0,i=t.length>0,a=e.length>0,s=function(r,s,l,c,u){var d,f,p,h=[],g=0,v="0",y=r&&[],b=null!=u,C=k,x=r||a&&_.find.TAG("*",u&&s.parentNode||s),N=W+=null==C?1:Math.random()||.1;for(b&&(k=s!==B&&s,w=n);null!=(d=x[v]);v++){if(a&&d){for(f=0;p=e[f++];)if(p(d,s,l)){c.push(d);break}b&&(W=N,w=++n)}i&&((d=!p&&d)&&g--,r&&y.push(d))}if(g+=v,i&&v!==g){for(f=0;p=t[f++];)p(y,h,s,l);if(r){if(g>0)for(;v--;)y[v]||h[v]||(h[v]=J.call(c));h=m(h)}Z.apply(c,h),b&&!r&&h.length>0&&g+t.length>1&&o.uniqueSort(c)}return b&&(W=N,k=C),y};return i?r(s):s}function y(e,t,n){for(var r=0,i=t.length;i>r;r++)o(e,t[r],n);return n}function b(e,t,n,r){var i,o,a,s,l,c=u(e);if(!r&&1===c.length){if(o=c[0]=c[0].slice(0),o.length>2&&"ID"===(a=o[0]).type&&9===t.nodeType&&D&&_.relative[o[1].type]){if(t=(_.find.ID(a.matches[0].replace(xt,wt),t)||[])[0],!t)return n;e=e.slice(o.shift().value.length)}for(i=pt.needsContext.test(e)?0:o.length;i--&&(a=o[i],!_.relative[s=a.type]);)if((l=_.find[s])&&(r=l(a.matches[0].replace(xt,wt),mt.test(o[0].type)&&t.parentNode||t))){if(o.splice(i,1),e=r.length&&d(o),!e)return Z.apply(n,r),n;break}}return S(e,c)(r,t,!D,n,mt.test(e)),n}function C(){}var x,w,_,N,E,S,k,T,R,A,B,L,D,M,H,P,O,I="sizzle"+-new Date,F=window.document,z={},W=0,V=0,U=n(),q=n(),$=n(),j=!1,K=function(){return 0},Y=typeof t,G=1<<31,X=[],J=X.pop,Q=X.push,Z=X.push,et=X.slice,tt=X.indexOf||function(e){for(var t=0,n=this.length;n>t;t++)if(this[t]===e)return t;return-1},nt="[\\x20\\t\\r\\n\\f]",rt="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",it=rt.replace("w","w#"),ot="([*^$|!~]?=)",at="\\["+nt+"*("+rt+")"+nt+"*(?:"+ot+nt+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+it+")|)|)"+nt+"*\\]",st=":("+rt+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+at.replace(3,8)+")*)|.*)\\)|)",lt=new RegExp("^"+nt+"+|((?:^|[^\\\\])(?:\\\\.)*)"+nt+"+$","g"),ct=new RegExp("^"+nt+"*,"+nt+"*"),ut=new RegExp("^"+nt+"*([\\x20\\t\\r\\n\\f>+~])"+nt+"*"),dt=new RegExp(st),ft=new RegExp("^"+it+"$"),pt={ID:new RegExp("^#("+rt+")"),CLASS:new RegExp("^\\.("+rt+")"),NAME:new RegExp("^\\[name=['\"]?("+rt+")['\"]?\\]"),TAG:new RegExp("^("+rt.replace("w","w*")+")"),ATTR:new RegExp("^"+at),PSEUDO:new RegExp("^"+st),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+nt+"*(even|odd|(([+-]|)(\\d*)n|)"+nt+"*(?:([+-]|)"+nt+"*(\\d+)|))"+nt+"*\\)|)","i"),needsContext:new RegExp("^"+nt+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+nt+"*((?:-\\d)?\\d*)"+nt+"*\\)|)(?=[^-]|$)","i")},mt=/[\x20\t\r\n\f]*[+~]/,ht=/^[^{]+\{\s*\[native code/,gt=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,vt=/^(?:input|select|textarea|button)$/i,yt=/^h\d$/i,bt=/'|\\/g,Ct=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,xt=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,wt=function(e,t){var n="0x"+t-65536;return n!==n?t:0>n?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320)};try{Z.apply(X=et.call(F.childNodes),F.childNodes),X[F.childNodes.length].nodeType}catch(_t){Z={apply:X.length?function(e,t){Q.apply(e,et.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}E=o.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},A=o.setDocument=function(n){var r=n?n.ownerDocument||n:F;return r!==B&&9===r.nodeType&&r.documentElement?(B=r,L=r.documentElement,D=!E(r),z.getElementsByTagName=i(function(e){return e.appendChild(r.createComment("")),!e.getElementsByTagName("*").length}),z.attributes=i(function(e){e.innerHTML="";var t=typeof e.lastChild.getAttribute("multiple");return"boolean"!==t&&"string"!==t}),z.getElementsByClassName=i(function(e){return e.innerHTML="",e.getElementsByClassName&&e.getElementsByClassName("e").length?(e.lastChild.className="e",2===e.getElementsByClassName("e").length):!1}),z.getByName=i(function(e){e.id=I+0,e.appendChild(B.createElement("a")).setAttribute("name",I),e.appendChild(B.createElement("i")).setAttribute("name",I),L.appendChild(e);var t=r.getElementsByName&&r.getElementsByName(I).length===2+r.getElementsByName(I+0).length;return L.removeChild(e),t}),z.sortDetached=i(function(e){return e.compareDocumentPosition&&1&e.compareDocumentPosition(B.createElement("div"))}),_.attrHandle=i(function(e){return e.innerHTML="",e.firstChild&&typeof e.firstChild.getAttribute!==Y&&"#"===e.firstChild.getAttribute("href")})?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},z.getByName?(_.find.ID=function(e,t){if(typeof t.getElementById!==Y&&D){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},_.filter.ID=function(e){var t=e.replace(xt,wt);return function(e){return e.getAttribute("id")===t}}):(_.find.ID=function(e,n){if(typeof n.getElementById!==Y&&D){var r=n.getElementById(e);return r?r.id===e||typeof r.getAttributeNode!==Y&&r.getAttributeNode("id").value===e?[r]:t:[]}},_.filter.ID=function(e){var t=e.replace(xt,wt);return function(e){var n=typeof e.getAttributeNode!==Y&&e.getAttributeNode("id");return n&&n.value===t}}),_.find.TAG=z.getElementsByTagName?function(e,t){return typeof t.getElementsByTagName!==Y?t.getElementsByTagName(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},_.find.NAME=z.getByName&&function(e,t){return typeof t.getElementsByName!==Y?t.getElementsByName(name):void 0},_.find.CLASS=z.getElementsByClassName&&function(e,t){return typeof t.getElementsByClassName!==Y&&D?t.getElementsByClassName(e):void 0},H=[],M=[":focus"],(z.qsa=e(r.querySelectorAll))&&(i(function(e){e.innerHTML="",e.querySelectorAll("[selected]").length||M.push("\\["+nt+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||M.push(":checked")}),i(function(e){e.innerHTML="",e.querySelectorAll("[i^='']").length&&M.push("[*^$]="+nt+"*(?:\"\"|'')"),e.querySelectorAll(":enabled").length||M.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),M.push(",.*:")})),(z.matchesSelector=e(P=L.matchesSelector||L.mozMatchesSelector||L.webkitMatchesSelector||L.oMatchesSelector||L.msMatchesSelector))&&i(function(e){z.disconnectedMatch=P.call(e,"div"),P.call(e,"[s!='']:x"),H.push("!=",st)}),M=new RegExp(M.join("|")),H=H.length&&new RegExp(H.join("|")),O=e(L.contains)||L.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},K=L.compareDocumentPosition?function(e,t){if(e===t)return j=!0,0;var n=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return n?1&n||T&&t.compareDocumentPosition(e)===n?e===r||O(F,e)?-1:t===r||O(F,t)?1:R?tt.call(R,e)-tt.call(R,t):0:4&n?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var n,i=0,o=e.parentNode,s=t.parentNode,l=[e],c=[t];if(e===t)return j=!0,0;if(!o||!s)return e===r?-1:t===r?1:o?-1:s?1:0;if(o===s)return a(e,t);for(n=e;n=n.parentNode;)l.unshift(n);for(n=t;n=n.parentNode;)c.unshift(n);for(;l[i]===c[i];)i++;return i?a(l[i],c[i]):l[i]===F?-1:c[i]===F?1:0},B):B},o.matches=function(e,t){return o(e,null,null,t)},o.matchesSelector=function(e,t){if((e.ownerDocument||e)!==B&&A(e),t=t.replace(Ct,"='$1']"),z.matchesSelector&&D&&(!H||!H.test(t))&&!M.test(t))try{var n=P.call(e,t);if(n||z.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(r){}return o(t,B,null,[e]).length>0},o.contains=function(e,t){return(e.ownerDocument||e)!==B&&A(e),O(e,t)},o.attr=function(e,t){var n;return(e.ownerDocument||e)!==B&&A(e),D&&(t=t.toLowerCase()),(n=_.attrHandle[t])?n(e):!D||z.attributes?e.getAttribute(t):((n=e.getAttributeNode(t))||e.getAttribute(t))&&e[t]===!0?t:n&&n.specified?n.value:null},o.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},o.uniqueSort=function(e){var t,n=[],r=0,i=0;if(j=!z.detectDuplicates,T=!z.sortDetached,R=!z.sortStable&&e.slice(0),e.sort(K),j){for(;t=e[i++];)t===e[i]&&(r=n.push(i));for(;r--;)e.splice(n[r],1)}return e},N=o.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=N(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=N(t);return n},_=o.selectors={cacheLength:50,createPseudo:r,match:pt,find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(xt,wt),e[3]=(e[4]||e[5]||"").replace(xt,wt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||o.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&o.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return pt.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&&dt.test(n)&&(t=u(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){return"*"===e?function(){return!0}:(e=e.replace(xt,wt).toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=U[e+" "];return t||(t=new RegExp("(^|"+nt+")"+e+"("+nt+"|$)"))&&U(e,function(e){return t.test(e.className||typeof e.getAttribute!==Y&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=o.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var c,u,d,f,p,m,h=o!==a?"nextSibling":"previousSibling",g=t.parentNode,v=s&&t.nodeName.toLowerCase(),y=!l&&!s;if(g){if(o){for(;h;){for(d=t;d=d[h];)if(s?d.nodeName.toLowerCase()===v:1===d.nodeType)return!1;m=h="only"===e&&!m&&"nextSibling"}return!0}if(m=[a?g.firstChild:g.lastChild],a&&y){for(u=g[I]||(g[I]={}),c=u[e]||[],p=c[0]===W&&c[1],f=c[0]===W&&c[2],d=p&&g.childNodes[p];d=++p&&d&&d[h]||(f=p=0)||m.pop();)if(1===d.nodeType&&++f&&d===t){u[e]=[W,p,f];break}}else if(y&&(c=(t[I]||(t[I]={}))[e])&&c[0]===W)f=c[1];else for(;(d=++p&&d&&d[h]||(f=p=0)||m.pop())&&((s?d.nodeName.toLowerCase()!==v:1!==d.nodeType)||!++f||(y&&((d[I]||(d[I]={}))[e]=[W,f]),d!==t)););return f-=i,f===r||f%r===0&&f/r>=0}}},PSEUDO:function(e,t){var n,i=_.pseudos[e]||_.setFilters[e.toLowerCase()]||o.error("unsupported pseudo: "+e);return i[I]?i(t):i.length>1?(n=[e,e,"",t],_.setFilters.hasOwnProperty(e.toLowerCase())?r(function(e,n){for(var r,o=i(e,t),a=o.length;a--;)r=tt.call(e,o[a]),e[r]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:r(function(e){var t=[],n=[],i=S(e.replace(lt,"$1"));return i[I]?r(function(e,t,n,r){for(var o,a=i(e,null,r,[]),s=e.length;s--;)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,r,o){return t[0]=e,i(t,null,o,n),!n.pop()}}),has:r(function(e){return function(t){return o(e,t).length>0}}),contains:r(function(e){return function(t){return(t.textContent||t.innerText||N(t)).indexOf(e)>-1}}),lang:r(function(e){return ft.test(e||"")||o.error("unsupported lang: "+e),e=e.replace(xt,wt).toLowerCase(),function(t){var n;do if(n=D?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(e){var t=window.location&&window.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===L},focus:function(e){return e===B.activeElement&&(!B.hasFocus||B.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!_.pseudos.empty(e)},header:function(e){return yt.test(e.nodeName)},input:function(e){return vt.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:c(function(){return[0]}),last:c(function(e,t){return[t-1]}),eq:c(function(e,t,n){return[0>n?n+t:n]}),even:c(function(e,t){for(var n=0;t>n;n+=2)e.push(n);return e}),odd:c(function(e,t){for(var n=1;t>n;n+=2)e.push(n);return e}),lt:c(function(e,t,n){for(var r=0>n?n+t:n;--r>=0;)e.push(r);return e}),gt:c(function(e,t,n){for(var r=0>n?n+t:n;++rn;n++)t[n]=e[n];return t}function f(e,t){var n;if(t.indexOf)return t.indexOf(e);for(n=t.length;n--;)if(t[n]===e)return n;return-1}function p(e){return null===e||e===t?"":(""+e).replace(N,"")}function m(e,t){var n,r,i,o,a;if(e)if(n=e.length,n===o){for(r in e)if(e.hasOwnProperty(r)&&(a=e[r],t.call(a,a,r)===!1))break}else for(i=0;n>i&&(a=e[i],t.call(a,a,r)!==!1);i++);return e}function h(e,n,r){for(var i=[],o=e[n];o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!c(o).is(r));)1===o.nodeType&&i.push(o),o=o[n];return i}function g(e,t,n,r){for(var i=[];e;e=e[n])r&&e.nodeType!==r||e===t||i.push(e);return i}var v=document,y=Array.prototype.push,b=Array.prototype.slice,C=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,x=e.Event,w=l("fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom"),_=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},N=/^\s*|\s*$/g;return c.fn=c.prototype={constructor:c,selector:"",length:0,init:function(e,t){var n=this,r,a;if(!e)return n;if(e.nodeType)return n.context=n[0]=e,n.length=1,n;if(i(e)){if(r="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:C.exec(e),!r)return c(t||document).find(e);if(r[1])for(a=o(e).firstChild;a;)this.add(a),a=a.nextSibling;else{if(a=v.getElementById(r[2]),a.id!==r[2])return n.find(e);n.length=1,n[0]=a}}else this.add(e);return n},toArray:function(){return d(this)},add:function(e){var t=this;return _(e)?y.apply(t,e):e instanceof c?t.add(e.toArray()):y.call(t,e),t},attr:function(e,n){var i=this;if("object"==typeof e)m(e,function(e,t){i.attr(t,e)});else{if(!r(n))return i[0]&&1===i[0].nodeType?i[0].getAttribute(e):t;this.each(function(){1===this.nodeType&&this.setAttribute(e,n)})}return i},css:function(e,n){var i=this;if("object"==typeof e)m(e,function(e,t){i.css(t,e)});else{if(e=e.replace(/-(\D)/g,function(e,t){return t.toUpperCase()}),!r(n))return i[0]?i[0].style[e]:t;"number"!=typeof n||w[e]||(n+="px"),i.each(function(){var t=this.style;"opacity"===e&&this.runtimeStyle&&"undefined"==typeof this.runtimeStyle.opacity&&(t.filter=""===n?"":"alpha(opacity="+100*n+")");try{t[e]=n}catch(r){}})}return i},remove:function(){for(var e=this,t,n=this.length;n--;)t=e[n],x.clean(t),t.parentNode&&t.parentNode.removeChild(t);return this},empty:function(){for(var e=this,t,n=this.length;n--;)for(t=e[n];t.firstChild;)t.removeChild(t.firstChild);return this},html:function(e){var t=this,n;if(r(e)){for(n=t.length;n--;)t[n].innerHTML=e;return t}return t[0]?t[0].innerHTML:""},text:function(e){var t=this,n;if(r(e)){for(n=t.length;n--;)t[n].innerText=t[0].textContent=e;return t}return t[0]?t[0].innerText||t[0].textContent:""},append:function(){return a(this,arguments,function(e){1===this.nodeType&&this.appendChild(e)})},prepend:function(){return a(this,arguments,function(e){1===this.nodeType&&this.insertBefore(e,this.firstChild)})},before:function(){var e=this;return e[0]&&e[0].parentNode?a(e,arguments,function(e){this.parentNode.insertBefore(e,this.nextSibling)}):e},after:function(){var e=this;return e[0]&&e[0].parentNode?a(e,arguments,function(e){this.parentNode.insertBefore(e,this)}):e},appendTo:function(e){return c(e).append(this),this},addClass:function(e){return this.toggleClass(e,!0)},removeClass:function(e){return this.toggleClass(e,!1)},toggleClass:function(e,t){var n=this;return-1!==e.indexOf(" ")?m(e.split(" "),function(){n.toggleClass(this,t)}):n.each(function(n){var r;s(n,e)!==t&&(r=n.className,t?n.className+=r?" "+e:e:n.className=p((" "+r+" ").replace(" "+e+" "," ")))}),n},hasClass:function(e){return s(this[0],e)},each:function(e){return m(this,e)},on:function(e,t){return this.each(function(){x.bind(this,e,t)})},off:function(e,t){return this.each(function(){x.unbind(this,e,t)})},show:function(){return this.css("display","")},hide:function(){return this.css("display","none")},slice:function(){return new c(b.apply(this,arguments))},eq:function(e){return-1===e?this.slice(e):this.slice(e,+e+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},replaceWith:function(e){var t=this;return t[0]&&t[0].parentNode.replaceChild(c(e)[0],t[0]),t},wrap:function(e){return e=c(e)[0],this.each(function(){var t=this,n=e.cloneNode(!1);t.parentNode.insertBefore(n,t),n.appendChild(t)})},unwrap:function(){return this.each(function(){for(var e=this,t=e.firstChild,n;t;)n=t,t=t.nextSibling,e.parentNode.insertBefore(n,e)})},clone:function(){var e=[];return this.each(function(){e.push(this.cloneNode(!0))}),c(e)},find:function(e){var t,n,r=[];for(t=0,n=this.length;n>t;t++)c.find(e,this[t],r);return c(r)},push:y,sort:[].sort,splice:[].splice},u(c,{extend:u,toArray:d,inArray:f,isArray:_,each:m,trim:p,makeMap:l,find:n,expr:n.selectors,unique:n.uniqueSort,text:n.getText,isXMLDoc:n.isXML,contains:n.contains,filter:function(e,t,n){return n&&(e=":not("+e+")"),t=1===t.length?c.find.matchesSelector(t[0],e)?[t[0]]:[]:c.find.matches(e,t)}}),m({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t){return h(e,"parentNode",t)},next:function(e){return g(e,"nextSibling",1)},prev:function(e){return g(e,"previousSibling",1)},nextNodes:function(e){return g(e,"nextSibling")},prevNodes:function(e){return g(e,"previousSibling")},children:function(e){return g(e.firstChild,"nextSibling",1)},contents:function(e){return d(("iframe"===e.nodeName?e.contentDocument||e.contentWindow.document:e).childNodes)}},function(e,t){c.fn[e]=function(n){var r=this,i;if(r.length>1)throw new Error("DomQuery only supports traverse functions on a single node.");return r[0]&&(i=t(r[0],n)),i=c(i),n&&"parentsUntil"!==e?i.filter(n):i}}),c.fn.filter=function(e){return c.filter(e)},c.fn.is=function(e){return!!e&&this.filter(e).length>0},c.fn.init.prototype=c.fn,c}),r(d,[],function(){return function(e,t){function n(e,t,n,r){function i(e){return e=parseInt(e,10).toString(16),e.length>1?e:"0"+e}return"#"+i(t)+i(n)+i(r)}var r=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,i=/(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,o=/\s*([^:]+):\s*([^;]+);?/g,a=/\s+$/,s,l,c={},u,d="\ufeff"; +for(e=e||{},u=("\\\" \\' \\; \\: ; : "+d).split(" "),l=0;l-1&&n||(h[e+t]=-1==l?s[0]:s.join(" "),delete h[e+"-top"+t],delete h[e+"-right"+t],delete h[e+"-bottom"+t],delete h[e+"-left"+t])}}function u(e){var t=h[e],n;if(t){for(t=t.split(" "),n=t.length;n--;)if(t[n]!==t[0])return!1;return h[e]=t[0],!0}}function d(e,t,n,r){u(t)&&u(n)&&u(r)&&(h[e]=h[t]+" "+h[n]+" "+h[r],delete h[t],delete h[n],delete h[r])}function f(e){return b=!0,c[e]}function p(e,t){return b&&(e=e.replace(/\uFEFF[0-9]/g,function(e){return c[e]})),t||(e=e.replace(/\\([\'\";:])/g,"$1")),e}function m(t,n,r,i,o,a){return(o=o||a)?(o=p(o),"'"+o.replace(/\'/g,"\\'")+"'"):(n=p(n||r||i),!e.allow_script_urls&&/(java|vb)script:/i.test(n.replace(/[\s\r\n]+/,""))?"":(C&&(n=C.call(x,n,"style")),"url('"+n.replace(/\'/g,"\\'")+"')"))}var h={},g,v,y,b,C=e.url_converter,x=e.url_converter_scope||this;if(t){for(t=t.replace(/[\u0000-\u001F]/g,""),t=t.replace(/\\[\"\';:\uFEFF]/g,f).replace(/\"[^\"]+\"|\'[^\']+\'/g,function(e){return e.replace(/[;:]/g,f)});g=o.exec(t);){if(v=g[1].replace(a,"").toLowerCase(),y=g[2].replace(a,""),v&&y.length>0){if(!e.allow_script_urls&&("behavior"==v||/expression\s*\(/.test(y)))continue;"font-weight"===v&&"700"===y?y="bold":("color"===v||"background-color"===v)&&(y=y.toLowerCase()),y=y.replace(r,n),y=y.replace(i,m),h[v]=b?p(y,!0):y}o.lastIndex=g.index+g[0].length}s("border","",!0),s("border","-width"),s("border","-color"),s("border","-style"),s("padding",""),s("margin",""),d("border","border-width","border-style","border-color"),"medium none"===h.border&&delete h.border,"none"===h["border-image"]&&delete h["border-image"]}return h},serialize:function(e,n){function r(n){var r,o,a,l;if(r=t.styles[n])for(o=0,a=r.length;a>o;o++)n=r[o],l=e[n],l!==s&&l.length>0&&(i+=(i.length>0?" ":"")+n+": "+l+";")}var i="",o,a;if(n&&t&&t.styles)r("*"),r(n);else for(o in e)a=e[o],a!==s&&a.length>0&&(i+=(i.length>0?" ":"")+o+": "+a+";");return i}}}}),r(f,[],function(){return function(e,t){function n(e,n,r,i){var o,a;if(e){if(!i&&e[n])return e[n];if(e!=t){if(o=e[r])return o;for(a=e.parentNode;a&&a!=t;a=a.parentNode)if(o=a[r])return o}}}var r=e;this.current=function(){return r},this.next=function(e){return r=n(r,"firstChild","nextSibling",e)},this.prev=function(e){return r=n(r,"lastChild","previousSibling",e)}}}),r(p,[],function(){function e(e){return null===e||e===t?"":(""+e).replace(h,"")}function n(e,n){return n?"array"==n&&g(e)?!0:typeof e==n:e!==t}function r(e){var t=[],n,r;for(n=0,r=e.length;r>n;n++)t[n]=e[n];return t}function i(e,t,n){var r;for(e=e||[],t=t||",","string"==typeof e&&(e=e.split(t)),n=n||{},r=e.length;r--;)n[e[r]]={};return n}function o(e,n,r){var i,o;if(!e)return 0;if(r=r||e,e.length!==t){for(i=0,o=e.length;o>i;i++)if(n.call(r,e[i],i,e)===!1)return 0}else for(i in e)if(e.hasOwnProperty(i)&&n.call(r,e[i],i,e)===!1)return 0;return 1}function a(e,t){var n=[];return o(e,function(e){n.push(t(e))}),n}function s(e,t){var n=[];return o(e,function(e){(!t||t(e))&&n.push(e)}),n}function l(e,t,n){var r=this,i,o,a,s,l,c=0;if(e=/^((static) )?([\w.]+)(:([\w.]+))?/.exec(e),a=e[3].match(/(^|\.)(\w+)$/i)[2],o=r.createNS(e[3].replace(/\.\w+$/,""),n),!o[a]){if("static"==e[2])return o[a]=t,void(this.onCreate&&this.onCreate(e[2],e[3],o[a]));t[a]||(t[a]=function(){},c=1),o[a]=t[a],r.extend(o[a].prototype,t),e[5]&&(i=r.resolve(e[5]).prototype,s=e[5].match(/\.(\w+)$/i)[1],l=o[a],o[a]=c?function(){return i[s].apply(this,arguments)}:function(){return this.parent=i[s],l.apply(this,arguments)},o[a].prototype[a]=o[a],r.each(i,function(e,t){o[a].prototype[t]=i[t]}),r.each(t,function(e,t){i[t]?o[a].prototype[t]=function(){return this.parent=i[t],e.apply(this,arguments)}:t!=a&&(o[a].prototype[t]=e)})),r.each(t["static"],function(e,t){o[a][t]=e})}}function c(e,t){var n,r;if(e)for(n=0,r=e.length;r>n;n++)if(e[n]===t)return n;return-1}function u(e,n){var r,i,o,a=arguments,s;for(r=1,i=a.length;i>r;r++){n=a[r];for(o in n)n.hasOwnProperty(o)&&(s=n[o],s!==t&&(e[o]=s))}return e}function d(e,t,n,r){r=r||this,e&&(n&&(e=e[n]),o(e,function(e,i){return t.call(r,e,i,n)===!1?!1:void d(e,t,n,r)}))}function f(e,t){var n,r;for(t=t||window,e=e.split("."),n=0;nn&&(t=t[e[n]],t);n++);return t}function m(t,r){return!t||n(t,"array")?t:a(t.split(r||","),e)}var h=/^\s*|\s*$/g,g=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)};return{trim:e,isArray:g,is:n,toArray:r,makeMap:i,each:o,map:a,grep:s,inArray:c,extend:u,create:l,walk:d,createNS:f,resolve:p,explode:m}}),r(m,[p],function(e){function t(n){function r(){return H.createDocumentFragment()}function i(e,t){_(F,e,t)}function o(e,t){_(z,e,t)}function a(e){i(e.parentNode,j(e))}function s(e){i(e.parentNode,j(e)+1)}function l(e){o(e.parentNode,j(e))}function c(e){o(e.parentNode,j(e)+1)}function u(e){e?(M[U]=M[V],M[q]=M[W]):(M[V]=M[U],M[W]=M[q]),M.collapsed=F}function d(e){a(e),c(e)}function f(e){i(e,0),o(e,1===e.nodeType?e.childNodes.length:e.nodeValue.length)}function p(e,t){var n=M[V],r=M[W],i=M[U],o=M[q],a=t.startContainer,s=t.startOffset,l=t.endContainer,c=t.endOffset;return 0===e?w(n,r,a,s):1===e?w(i,o,a,s):2===e?w(i,o,l,c):3===e?w(n,r,l,c):void 0}function m(){N(I)}function h(){return N(P)}function g(){return N(O)}function v(e){var t=this[V],r=this[W],i,o;3!==t.nodeType&&4!==t.nodeType||!t.nodeValue?(t.childNodes.length>0&&(o=t.childNodes[r]),o?t.insertBefore(e,o):3==t.nodeType?n.insertAfter(e,t):t.appendChild(e)):r?r>=t.nodeValue.length?n.insertAfter(e,t):(i=t.splitText(r),t.parentNode.insertBefore(e,i)):t.parentNode.insertBefore(e,t)}function y(e){var t=M.extractContents();M.insertNode(e),e.appendChild(t),M.selectNode(e)}function b(){return $(new t(n),{startContainer:M[V],startOffset:M[W],endContainer:M[U],endOffset:M[q],collapsed:M.collapsed,commonAncestorContainer:M.commonAncestorContainer})}function C(e,t){var n;if(3==e.nodeType)return e;if(0>t)return e;for(n=e.firstChild;n&&t>0;)--t,n=n.nextSibling;return n?n:e}function x(){return M[V]==M[U]&&M[W]==M[q]}function w(e,t,r,i){var o,a,s,l,c,u;if(e==r)return t==i?0:i>t?-1:1;for(o=r;o&&o.parentNode!=e;)o=o.parentNode;if(o){for(a=0,s=e.firstChild;s!=o&&t>a;)a++,s=s.nextSibling;return a>=t?-1:1}for(o=e;o&&o.parentNode!=r;)o=o.parentNode;if(o){for(a=0,s=r.firstChild;s!=o&&i>a;)a++,s=s.nextSibling;return i>a?-1:1}for(l=n.findCommonAncestor(e,r),c=e;c&&c.parentNode!=l;)c=c.parentNode;for(c||(c=l),u=r;u&&u.parentNode!=l;)u=u.parentNode;if(u||(u=l),c==u)return 0;for(s=l.firstChild;s;){if(s==c)return-1;if(s==u)return 1;s=s.nextSibling}}function _(e,t,r){var i,o;for(e?(M[V]=t,M[W]=r):(M[U]=t,M[q]=r),i=M[U];i.parentNode;)i=i.parentNode;for(o=M[V];o.parentNode;)o=o.parentNode;o==i?w(M[V],M[W],M[U],M[q])>0&&M.collapse(e):M.collapse(e),M.collapsed=x(),M.commonAncestorContainer=n.findCommonAncestor(M[V],M[U])}function N(e){var t,n=0,r=0,i,o,a,s,l,c;if(M[V]==M[U])return E(e);for(t=M[U],i=t.parentNode;i;t=i,i=i.parentNode){if(i==M[V])return S(t,e);++n}for(t=M[V],i=t.parentNode;i;t=i,i=i.parentNode){if(i==M[U])return k(t,e);++r}for(o=r-n,a=M[V];o>0;)a=a.parentNode,o--;for(s=M[U];0>o;)s=s.parentNode,o++;for(l=a.parentNode,c=s.parentNode;l!=c;l=l.parentNode,c=c.parentNode)a=l,s=c;return T(a,s,e)}function E(e){var t,n,i,o,a,s,l,c,u;if(e!=I&&(t=r()),M[W]==M[q])return t;if(3==M[V].nodeType){if(n=M[V].nodeValue,i=n.substring(M[W],M[q]),e!=O&&(o=M[V],c=M[W],u=M[q]-M[W],0===c&&u>=o.nodeValue.length-1?o.parentNode.removeChild(o):o.deleteData(c,u),M.collapse(F)),e==I)return;return i.length>0&&t.appendChild(H.createTextNode(i)),t}for(o=C(M[V],M[W]),a=M[q]-M[W];o&&a>0;)s=o.nextSibling,l=L(o,e),t&&t.appendChild(l),--a,o=s;return e!=O&&M.collapse(F),t}function S(e,t){var n,i,o,a,s,l;if(t!=I&&(n=r()),i=R(e,t),n&&n.appendChild(i),o=j(e),a=o-M[W],0>=a)return t!=O&&(M.setEndBefore(e),M.collapse(z)),n;for(i=e.previousSibling;a>0;)s=i.previousSibling,l=L(i,t),n&&n.insertBefore(l,n.firstChild),--a,i=s;return t!=O&&(M.setEndBefore(e),M.collapse(z)),n}function k(e,t){var n,i,o,a,s,l;for(t!=I&&(n=r()),o=A(e,t),n&&n.appendChild(o),i=j(e),++i,a=M[q]-i,o=e.nextSibling;o&&a>0;)s=o.nextSibling,l=L(o,t),n&&n.appendChild(l),--a,o=s;return t!=O&&(M.setStartAfter(e),M.collapse(F)),n}function T(e,t,n){var i,o,a,s,l,c,u;for(n!=I&&(o=r()),i=A(e,n),o&&o.appendChild(i),a=j(e),s=j(t),++a,l=s-a,c=e.nextSibling;l>0;)u=c.nextSibling,i=L(c,n),o&&o.appendChild(i),c=u,--l;return i=R(t,n),o&&o.appendChild(i),n!=O&&(M.setStartAfter(e),M.collapse(F)),o}function R(e,t){var n=C(M[U],M[q]-1),r,i,o,a,s,l=n!=M[U];if(n==e)return B(n,l,z,t);for(r=n.parentNode,i=B(r,z,z,t);r;){for(;n;)o=n.previousSibling,a=B(n,l,z,t),t!=I&&i.insertBefore(a,i.firstChild),l=F,n=o;if(r==e)return i;n=r.previousSibling,r=r.parentNode,s=B(r,z,z,t),t!=I&&s.appendChild(i),i=s}}function A(e,t){var n=C(M[V],M[W]),r=n!=M[V],i,o,a,s,l;if(n==e)return B(n,r,F,t);for(i=n.parentNode,o=B(i,z,F,t);i;){for(;n;)a=n.nextSibling,s=B(n,r,F,t),t!=I&&o.appendChild(s),r=F,n=a;if(i==e)return o;n=i.nextSibling,i=i.parentNode,l=B(i,z,F,t),t!=I&&l.appendChild(o),o=l}}function B(e,t,r,i){var o,a,s,l,c;if(t)return L(e,i);if(3==e.nodeType){if(o=e.nodeValue,r?(l=M[W],a=o.substring(l),s=o.substring(0,l)):(l=M[q],a=o.substring(0,l),s=o.substring(l)),i!=O&&(e.nodeValue=s),i==I)return;return c=n.clone(e,z),c.nodeValue=a,c}if(i!=I)return n.clone(e,z)}function L(e,t){return t!=I?t==O?n.clone(e,F):e:void e.parentNode.removeChild(e)}function D(){return n.create("body",null,g()).outerText}var M=this,H=n.doc,P=0,O=1,I=2,F=!0,z=!1,W="startOffset",V="startContainer",U="endContainer",q="endOffset",$=e.extend,j=n.nodeIndex;return $(M,{startContainer:H,startOffset:0,endContainer:H,endOffset:0,collapsed:F,commonAncestorContainer:H,START_TO_START:0,START_TO_END:1,END_TO_END:2,END_TO_START:3,setStart:i,setEnd:o,setStartBefore:a,setStartAfter:s,setEndBefore:l,setEndAfter:c,collapse:u,selectNode:d,selectNodeContents:f,compareBoundaryPoints:p,deleteContents:m,extractContents:h,cloneContents:g,insertNode:v,surroundContents:y,cloneRange:b,toStringIE:D}),M}return t.prototype.toString=function(){return this.toStringIE()},t}),r(h,[p],function(e){function t(e){var t;return t=document.createElement("div"),t.innerHTML=e,t.textContent||t.innerText||e}function n(e,t){var n,r,i,a={};if(e){for(e=e.split(","),t=t||10,n=0;n\"\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,l=/[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,c=/[<>&\"\']/g,u=/&(#x|#)?([\w]+);/g,d={128:"\u20ac",130:"\u201a",131:"\u0192",132:"\u201e",133:"\u2026",134:"\u2020",135:"\u2021",136:"\u02c6",137:"\u2030",138:"\u0160",139:"\u2039",140:"\u0152",142:"\u017d",145:"\u2018",146:"\u2019",147:"\u201c",148:"\u201d",149:"\u2022",150:"\u2013",151:"\u2014",152:"\u02dc",153:"\u2122",154:"\u0161",155:"\u203a",156:"\u0153",158:"\u017e",159:"\u0178"};o={'"':""","'":"'","<":"<",">":">","&":"&"},a={"<":"<",">":">","&":"&",""":'"',"'":"'"},i=n("50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,t9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro",32);var f={encodeRaw:function(e,t){return e.replace(t?s:l,function(e){return o[e]||e})},encodeAllRaw:function(e){return(""+e).replace(c,function(e){return o[e]||e})},encodeNumeric:function(e,t){return e.replace(t?s:l,function(e){return e.length>1?"&#"+(1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320)+65536)+";":o[e]||"&#"+e.charCodeAt(0)+";"})},encodeNamed:function(e,t,n){return n=n||i,e.replace(t?s:l,function(e){return o[e]||n[e]||e})},getEncodeFunc:function(e,t){function a(e,n){return e.replace(n?s:l,function(e){return o[e]||t[e]||"&#"+e.charCodeAt(0)+";"||e})}function c(e,n){return f.encodeNamed(e,n,t)}return t=n(t)||i,e=r(e.replace(/\+/g,",")),e.named&&e.numeric?a:e.named?t?c:f.encodeNamed:e.numeric?f.encodeNumeric:f.encodeRaw},decode:function(e){return e.replace(u,function(e,n,r){return n?(r=parseInt(r,2===n.length?16:10),r>65535?(r-=65536,String.fromCharCode(55296+(r>>10),56320+(1023&r))):d[r]||String.fromCharCode(r)):a[e]||i[e]||t(e)})}};return f}),r(g,[],function(){var e=navigator,t=e.userAgent,n,r,i,o,a,s,l;n=window.opera&&window.opera.buildNumber,r=/WebKit/.test(t),i=!r&&!n&&/MSIE/gi.test(t)&&/Explorer/gi.test(e.appName),i=i&&/MSIE (\w+)\./.exec(t)[1],o=-1==t.indexOf("Trident/")||-1==t.indexOf("rv:")&&-1==e.appName.indexOf("Netscape")?!1:11,i=i||o,a=!r&&!o&&/Gecko/.test(t),s=-1!=t.indexOf("Mac"),l=/(iPad|iPhone)/.test(t);var c=!l||t.match(/AppleWebKit\/(\d*)/)[1]>=534;return{opera:n,webkit:r,ie:i,gecko:a,mac:s,iOS:l,contentEditable:c,transparentSrc:"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",caretAfter:8!=i,range:window.getSelection&&"Range"in window,documentMode:i?document.documentMode||7:10}}),r(v,[],function(){return function(e,t){function n(t){e.getElementsByTagName("head")[0].appendChild(t)}function r(t,r,s){function l(){for(var e=v.passed,t=e.length;t--;)e[t]();v.status=2,v.passed=[],v.failed=[]}function c(){for(var e=v.failed,t=e.length;t--;)e[t]();v.status=3,v.passed=[],v.failed=[]}function u(){var e=navigator.userAgent.match(/WebKit\/(\d*)/);return!!(e&&e[1]<536)}function d(e,t){e()||((new Date).getTime()-g0)return h=e.createElement("style"),h.textContent='@import "'+t+'"',p(),void n(h);f()}n(m),m.href=t}}var i=0,o={},a;t=t||{},a=t.maxLoadTime||5e3,this.load=r}}),r(y,[c,d,l,f,m,h,g,p,v],function(e,n,r,i,o,a,s,l,c){function u(e,t){var i=this,o;i.doc=e,i.win=window,i.files={},i.counter=0,i.stdMode=!v||e.documentMode>=8,i.boxModel=!v||"CSS1Compat"==e.compatMode||i.stdMode,i.hasOuterHTML="outerHTML"in e.createElement("a"),i.styleSheetLoader=new c(e),this.boundEvents=[],i.settings=t=h({keep_values:!1,hex_colors:1},t),i.schema=t.schema,i.styles=new n({url_converter:t.url_converter,url_converter_scope:t.url_converter_scope},t.schema),i.fixDoc(e),i.events=t.ownEvents?new r(t.proxy):r.Event,o=t.schema?t.schema.getBlockElements():{},i.isBlock=function(e){if(!e)return!1;var t=e.nodeType;return t?!(1!==t||!o[e.nodeName]):!!o[e]}}var d=l.each,f=l.is,p=l.grep,m=l.trim,h=l.extend,g=s.webkit,v=s.ie,y=/^([a-z0-9],?)+$/i,b=/^[ \t\r\n]*$/,C=l.makeMap("fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom"," ");return u.prototype={root:null,props:{"for":"htmlFor","class":"className",className:"className",checked:"checked",disabled:"disabled",maxlength:"maxLength",readonly:"readOnly",selected:"selected",value:"value",id:"id",name:"name",type:"type"},fixDoc:function(e){var t=this.settings,n;if(v&&t.schema){"abbr article aside audio canvas details figcaption figure footer header hgroup mark menu meter nav output progress section summary time video".replace(/\w+/g,function(t){e.createElement(t)});for(n in t.schema.getCustomElements())e.createElement(n)}},clone:function(e,t){var n=this,r,i;return!v||1!==e.nodeType||t?e.cloneNode(t):(i=n.doc,t?r.firstChild:(r=i.createElement(e.nodeName),d(n.getAttribs(e),function(t){n.setAttrib(r,t.nodeName,n.getAttrib(e,t.nodeName))}),r))},getRoot:function(){var e=this;return e.get(e.settings.root_element)||e.doc.body},getViewPort:function(e){var t,n;return e=e?e:this.win,t=e.document,n=this.boxModel?t.documentElement:t.body,{x:e.pageXOffset||n.scrollLeft,y:e.pageYOffset||n.scrollTop,w:e.innerWidth||n.clientWidth,h:e.innerHeight||n.clientHeight}},getRect:function(e){var t=this,n,r;return e=t.get(e),n=t.getPos(e),r=t.getSize(e),{x:n.x,y:n.y,w:r.w,h:r.h}},getSize:function(e){var t=this,n,r;return e=t.get(e),n=t.getStyle(e,"width"),r=t.getStyle(e,"height"),-1===n.indexOf("px")&&(n=0),-1===r.indexOf("px")&&(r=0),{w:parseInt(n,10)||e.offsetWidth||e.clientWidth,h:parseInt(r,10)||e.offsetHeight||e.clientHeight}},getParent:function(e,t,n){return this.getParents(e,t,n,!1)},getParents:function(e,n,r,i){var o=this,a,s=[];for(e=o.get(e),i=i===t,r=r||("BODY"!=o.getRoot().nodeName?o.getRoot().parentNode:null),f(n,"string")&&(a=n,n="*"===n?function(e){return 1==e.nodeType}:function(e){return o.is(e,a)});e&&e!=r&&e.nodeType&&9!==e.nodeType;){if(!n||n(e)){if(!i)return e;s.push(e)}e=e.parentNode}return i?s:null},get:function(e){var t;return e&&this.doc&&"string"==typeof e&&(t=e,e=this.doc.getElementById(e),e&&e.id!==t)?this.doc.getElementsByName(t)[1]:e},getNext:function(e,t){return this._findSib(e,t,"nextSibling")},getPrev:function(e,t){return this._findSib(e,t,"previousSibling")},select:function(t,n){var r=this;return e(t,r.get(n)||r.get(r.settings.root_element)||r.doc,[])},is:function(n,r){var i;if(n.length===t){if("*"===r)return 1==n.nodeType;if(y.test(r)){for(r=r.toLowerCase().split(/,/),n=n.nodeName.toLowerCase(),i=r.length-1;i>=0;i--)if(r[i]==n)return!0;return!1}}if(n.nodeType&&1!=n.nodeType)return!1;var o=n.nodeType?[n]:n;return e(r,o[0].ownerDocument||o[0],null,o).length>0},add:function(e,t,n,r,i){var o=this;return this.run(e,function(e){var a;return a=f(t,"string")?o.doc.createElement(t):t,o.setAttribs(a,n),r&&(r.nodeType?a.appendChild(r):o.setHTML(a,r)),i?a:e.appendChild(a)})},create:function(e,t,n){return this.add(this.doc.createElement(e),e,t,n,1)},createHTML:function(e,t,n){var r="",i;r+="<"+e;for(i in t)t.hasOwnProperty(i)&&null!==t[i]&&(r+=" "+i+'="'+this.encode(t[i])+'"');return"undefined"!=typeof n?r+">"+n+"":r+" />"},createFragment:function(e){var t,n,r=this.doc,i;for(i=r.createElement("div"),t=r.createDocumentFragment(),e&&(i.innerHTML=e);n=i.firstChild;)t.appendChild(n);return t},remove:function(e,t){return this.run(e,function(e){var n,r=e.parentNode;if(!r)return null;if(t)for(;n=e.firstChild;)!v||3!==n.nodeType||n.nodeValue?r.insertBefore(n,e):e.removeChild(n);return r.removeChild(e)})},setStyle:function(e,t,n){return this.run(e,function(e){var r=this,i,o;if(t)if("string"==typeof t){i=e.style,t=t.replace(/-(\D)/g,function(e,t){return t.toUpperCase()}),"number"!=typeof n||C[t]||(n+="px"),"opacity"===t&&e.runtimeStyle&&"undefined"==typeof e.runtimeStyle.opacity&&(i.filter=""===n?"":"alpha(opacity="+100*n+")"),"float"==t&&(t="cssFloat"in e.style?"cssFloat":"styleFloat");try{i[t]=n}catch(a){}r.settings.update_styles&&e.removeAttribute("data-mce-style")}else for(o in t)r.setStyle(e,o,t[o])})},getStyle:function(e,n,r){if(e=this.get(e)){if(this.doc.defaultView&&r){n=n.replace(/[A-Z]/g,function(e){return"-"+e});try{return this.doc.defaultView.getComputedStyle(e,null).getPropertyValue(n)}catch(i){return null}}return n=n.replace(/-(\D)/g,function(e,t){return t.toUpperCase()}),"float"==n&&(n=v?"styleFloat":"cssFloat"),e.currentStyle&&r?e.currentStyle[n]:e.style?e.style[n]:t}},setStyles:function(e,t){this.setStyle(e,t)},css:function(e,t,n){this.setStyle(e,t,n)},removeAllAttribs:function(e){return this.run(e,function(e){var t,n=e.attributes;for(t=n.length-1;t>=0;t--)e.removeAttributeNode(n.item(t))})},setAttrib:function(e,t,n){var r=this;if(e&&t)return this.run(e,function(e){var i=r.settings,o=e.getAttribute(t);if(null!==n)switch(t){case"style":if(!f(n,"string"))return void d(n,function(t,n){r.setStyle(e,n,t)});i.keep_values&&(n?e.setAttribute("data-mce-style",n,2):e.removeAttribute("data-mce-style",2)),e.style.cssText=n;break;case"class":e.className=n||"";break;case"src":case"href":i.keep_values&&(i.url_converter&&(n=i.url_converter.call(i.url_converter_scope||r,n,t,e)),r.setAttrib(e,"data-mce-"+t,n,2));break;case"shape":e.setAttribute("data-mce-style",n)}f(n)&&null!==n&&0!==n.length?e.setAttribute(t,""+n,2):e.removeAttribute(t,2),o!=n&&i.onSetAttrib&&i.onSetAttrib({attrElm:e,attrName:t,attrValue:n})})},setAttribs:function(e,t){var n=this;return this.run(e,function(e){d(t,function(t,r){n.setAttrib(e,r,t)})})},getAttrib:function(e,t,n){var r,i=this,o;if(e=i.get(e),!e||1!==e.nodeType)return n===o?!1:n;if(f(n)||(n=""),/^(src|href|style|coords|shape)$/.test(t)&&(r=e.getAttribute("data-mce-"+t)))return r;if(v&&i.props[t]&&(r=e[i.props[t]],r=r&&r.nodeValue?r.nodeValue:r),r||(r=e.getAttribute(t,2)),/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(t))return e[i.props[t]]===!0&&""===r?t:r?t:"";if("FORM"===e.nodeName&&e.getAttributeNode(t))return e.getAttributeNode(t).nodeValue;if("style"===t&&(r=r||e.style.cssText,r&&(r=i.serializeStyle(i.parseStyle(r),e.nodeName),i.settings.keep_values&&e.setAttribute("data-mce-style",r))),g&&"class"===t&&r&&(r=r.replace(/(apple|webkit)\-[a-z\-]+/gi,"")),v)switch(t){case"rowspan":case"colspan":1===r&&(r="");break;case"size":("+0"===r||20===r||0===r)&&(r="");break;case"width":case"height":case"vspace":case"checked":case"disabled":case"readonly":0===r&&(r="");break;case"hspace":-1===r&&(r="");break;case"maxlength":case"tabindex":(32768===r||2147483647===r||"32768"===r)&&(r="");break;case"multiple":case"compact":case"noshade":case"nowrap":return 65535===r?t:n;case"shape":r=r.toLowerCase();break;default:0===t.indexOf("on")&&r&&(r=(""+r).replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/,"$1"))}return r!==o&&null!==r&&""!==r?""+r:n},getPos:function(e,t){var n=this,r=0,i=0,o,a=n.doc,s;if(e=n.get(e),t=t||a.body,e){if(t===a.body&&e.getBoundingClientRect)return s=e.getBoundingClientRect(),t=n.boxModel?a.documentElement:a.body,r=s.left+(a.documentElement.scrollLeft||a.body.scrollLeft)-t.clientLeft,i=s.top+(a.documentElement.scrollTop||a.body.scrollTop)-t.clientTop,{x:r,y:i};for(o=e;o&&o!=t&&o.nodeType;)r+=o.offsetLeft||0,i+=o.offsetTop||0,o=o.offsetParent;for(o=e.parentNode;o&&o!=t&&o.nodeType;)r-=o.scrollLeft||0,i-=o.scrollTop||0,o=o.parentNode}return{x:r,y:i}},parseStyle:function(e){return this.styles.parse(e)},serializeStyle:function(e,t){return this.styles.serialize(e,t)},addStyle:function(e){var t=this,n=t.doc,r,i;if(t!==u.DOM&&n===document){var o=u.DOM.addedStyles;if(o=o||[],o[e])return;o[e]=!0,u.DOM.addedStyles=o}i=n.getElementById("mceDefaultStyles"),i||(i=n.createElement("style"),i.id="mceDefaultStyles",i.type="text/css",r=n.getElementsByTagName("head")[0],r.firstChild?r.insertBefore(i,r.firstChild):r.appendChild(i)),i.styleSheet?i.styleSheet.cssText+=e:i.appendChild(n.createTextNode(e))},loadCSS:function(e){var t=this,n=t.doc,r;return t!==u.DOM&&n===document?void u.DOM.loadCSS(e):(e||(e=""),r=n.getElementsByTagName("head")[0],void d(e.split(","),function(e){var i;t.files[e]||(t.files[e]=!0,i=t.create("link",{rel:"stylesheet",href:e}),v&&n.documentMode&&n.recalc&&(i.onload=function(){n.recalc&&n.recalc(),i.onload=null}),r.appendChild(i))}))},addClass:function(e,t){return this.run(e,function(e){var n;return t?this.hasClass(e,t)?e.className:(n=this.removeClass(e,t),e.className=n=(""!==n?n+" ":"")+t,n):0})},removeClass:function(e,t){var n=this,r;return n.run(e,function(e){var i;return n.hasClass(e,t)?(r||(r=new RegExp("(^|\\s+)"+t+"(\\s+|$)","g")),i=e.className.replace(r," "),i=m(" "!=i?i:""),e.className=i,i||(e.removeAttribute("class"),e.removeAttribute("className")),i):e.className})},hasClass:function(e,t){return e=this.get(e),e&&t?-1!==(" "+e.className+" ").indexOf(" "+t+" "):!1},toggleClass:function(e,n,r){r=r===t?!this.hasClass(e,n):r,this.hasClass(e,n)!==r&&(r?this.addClass(e,n):this.removeClass(e,n))},show:function(e){return this.setStyle(e,"display","block")},hide:function(e){return this.setStyle(e,"display","none")},isHidden:function(e){return e=this.get(e),!e||"none"==e.style.display||"none"==this.getStyle(e,"display")},uniqueId:function(e){return(e?e:"mce_")+this.counter++},setHTML:function(e,t){var n=this;return n.run(e,function(e){if(v){for(;e.firstChild;)e.removeChild(e.firstChild);try{e.innerHTML="
    "+t,e.removeChild(e.firstChild)}catch(r){var i=n.create("div");i.innerHTML="
    "+t,d(p(i.childNodes),function(t,n){n&&e.canHaveHTML&&e.appendChild(t)})}}else e.innerHTML=t;return t})},getOuterHTML:function(e){var t,n=this;return(e=n.get(e))?1===e.nodeType&&n.hasOuterHTML?e.outerHTML:(t=(e.ownerDocument||n.doc).createElement("body"),t.appendChild(e.cloneNode(!0)),t.innerHTML):null},setOuterHTML:function(e,t,n){var r=this;return r.run(e,function(e){function i(){var i,o;for(o=n.createElement("body"),o.innerHTML=t,i=o.lastChild;i;)r.insertAfter(i.cloneNode(!0),e),i=i.previousSibling;r.remove(e)}if(1==e.nodeType)if(n=n||e.ownerDocument||r.doc,v)try{1==e.nodeType&&r.hasOuterHTML?e.outerHTML=t:i()}catch(o){i()}else i()})},decode:a.decode,encode:a.encodeAllRaw,insertAfter:function(e,t){return t=this.get(t),this.run(e,function(e){var n,r;return n=t.parentNode,r=t.nextSibling,r?n.insertBefore(e,r):n.appendChild(e),e})},replace:function(e,t,n){var r=this;return r.run(t,function(t){return f(t,"array")&&(e=e.cloneNode(!0)),n&&d(p(t.childNodes),function(t){e.appendChild(t)}),t.parentNode.replaceChild(e,t)})},rename:function(e,t){var n=this,r;return e.nodeName!=t.toUpperCase()&&(r=n.create(t),d(n.getAttribs(e),function(t){n.setAttrib(r,t.nodeName,n.getAttrib(e,t.nodeName))}),n.replace(r,e,1)),r||e},findCommonAncestor:function(e,t){for(var n=e,r;n;){for(r=t;r&&n!=r;)r=r.parentNode;if(n==r)break;n=n.parentNode}return!n&&e.ownerDocument?e.ownerDocument.documentElement:n},toHex:function(e){return this.styles.toHex(l.trim(e))},run:function(e,t,n){var r=this,i;return"string"==typeof e&&(e=r.get(e)),e?(n=n||this,e.nodeType||!e.length&&0!==e.length?t.call(n,e):(i=[],d(e,function(e,o){e&&("string"==typeof e&&(e=r.get(e)),i.push(t.call(n,e,o)))}),i)):!1},getAttribs:function(e){var t;if(e=this.get(e),!e)return[];if(v){if(t=[],"OBJECT"==e.nodeName)return e.attributes;"OPTION"===e.nodeName&&this.getAttrib(e,"selected")&&t.push({specified:1,nodeName:"selected"});var n=/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi;return e.cloneNode(!1).outerHTML.replace(n,"").replace(/[\w:\-]+/gi,function(e){t.push({specified:1,nodeName:e})}),t}return e.attributes},isEmpty:function(e,t){var n=this,r,o,a,s,l,c=0;if(e=e.firstChild){s=new i(e,e.parentNode),t=t||n.schema?n.schema.getNonEmptyElements():null;do{if(a=e.nodeType,1===a){if(e.getAttribute("data-mce-bogus"))continue;if(l=e.nodeName.toLowerCase(),t&&t[l]){if("br"===l){c++;continue}return!1}for(o=n.getAttribs(e),r=e.attributes.length;r--;)if(l=e.attributes[r].nodeName,"name"===l||"data-mce-bookmark"===l)return!1}if(8==a)return!1;if(3===a&&!b.test(e.nodeValue))return!1}while(e=s.next())}return 1>=c},createRng:function(){var e=this.doc;return e.createRange?e.createRange():new o(this)},nodeIndex:function(e,t){var n=0,r,i;if(e)for(r=e.nodeType,e=e.previousSibling;e;e=e.previousSibling)i=e.nodeType,(!t||3!=i||i!=r&&e.nodeValue.length)&&(n++,r=i);return n},split:function(e,t,n){function r(e){function t(e){var t=e.previousSibling&&"SPAN"==e.previousSibling.nodeName,n=e.nextSibling&&"SPAN"==e.nextSibling.nodeName;return t&&n}var n,o=e.childNodes,a=e.nodeType;if(1!=a||"bookmark"!=e.getAttribute("data-mce-type")){for(n=o.length-1;n>=0;n--)r(o[n]);if(9!=a){if(3==a&&e.nodeValue.length>0){var s=m(e.nodeValue).length;if(!i.isBlock(e.parentNode)||s>0||0===s&&t(e))return}else if(1==a&&(o=e.childNodes,1==o.length&&o[0]&&1==o[0].nodeType&&"bookmark"==o[0].getAttribute("data-mce-type")&&e.parentNode.insertBefore(o[0],e),o.length||/^(br|hr|input|img)$/i.test(e.nodeName)))return;i.remove(e)}return e}}var i=this,o=i.createRng(),a,s,l;return e&&t?(o.setStart(e.parentNode,i.nodeIndex(e)),o.setEnd(t.parentNode,i.nodeIndex(t)),a=o.extractContents(),o=i.createRng(),o.setStart(t.parentNode,i.nodeIndex(t)+1),o.setEnd(e.parentNode,i.nodeIndex(e)+1),s=o.extractContents(),l=e.parentNode,l.insertBefore(r(a),e),n?l.replaceChild(n,t):l.insertBefore(t,e),l.insertBefore(r(s),e),i.remove(e),n||t):void 0},bind:function(e,t,n,r){var i=this;if(l.isArray(e)){for(var o=e.length;o--;)e[o]=i.bind(e[o],t,n,r);return e}return!i.settings.collect||e!==i.doc&&e!==i.win||i.boundEvents.push([e,t,n,r]),i.events.bind(e,t,n,r||i)},unbind:function(e,t,n){var r=this,i;if(l.isArray(e)){for(i=e.length;i--;)e[i]=r.unbind(e[i],t,n);return e}if(r.boundEvents&&(e===r.doc||e===r.win))for(i=r.boundEvents.length;i--;){var o=r.boundEvents[i];e!=o[0]||t&&t!=o[1]||n&&n!=o[2]||this.events.unbind(o[0],o[1],o[2])}return this.events.unbind(e,t,n)},fire:function(e,t,n){return this.events.fire(e,t,n)},getContentEditable:function(e){var t;return 1!=e.nodeType?null:(t=e.getAttribute("data-mce-contenteditable"),t&&"inherit"!==t?t:"inherit"!==e.contentEditable?e.contentEditable:null)},destroy:function(){var t=this;if(t.boundEvents){for(var n=t.boundEvents.length;n--;){var r=t.boundEvents[n];this.events.unbind(r[0],r[1],r[2])}t.boundEvents=null}e.setDocument&&e.setDocument(),t.win=t.doc=t.root=t.events=t.frag=null},dumpRng:function(e){return"startContainer: "+e.startContainer.nodeName+", startOffset: "+e.startOffset+", endContainer: "+e.endContainer.nodeName+", endOffset: "+e.endOffset},_findSib:function(e,t,n){var r=this,i=t;if(e)for("string"==typeof i&&(i=function(e){return r.is(e,t)}),e=e[n];e;e=e[n])if(i(e))return e;return null}},u.DOM=new u(document),u}),r(b,[y,p],function(e,t){function n(){function e(e,t){function n(){o.remove(s),a&&(a.onreadystatechange=a.onload=a=null),t() +}function i(){"undefined"!=typeof console&&console.log&&console.log("Failed to load: "+e)}var o=r,a,s;s=o.uniqueId(),a=document.createElement("script"),a.id=s,a.type="text/javascript",a.src=e,"onreadystatechange"in a?a.onreadystatechange=function(){/loaded|complete/.test(a.readyState)&&n()}:a.onload=n,a.onerror=i,(document.getElementsByTagName("head")[0]||document.body).appendChild(a)}var t=0,n=1,a=2,s={},l=[],c={},u=[],d=0,f;this.isDone=function(e){return s[e]==a},this.markDone=function(e){s[e]=a},this.add=this.load=function(e,n,r){var i=s[e];i==f&&(l.push(e),s[e]=t),n&&(c[e]||(c[e]=[]),c[e].push({func:n,scope:r||this}))},this.loadQueue=function(e,t){this.loadScripts(l,e,t)},this.loadScripts=function(t,r,l){function p(e){i(c[e],function(e){e.func.call(e.scope)}),c[e]=f}var m;u.push({func:r,scope:l||this}),(m=function(){var r=o(t);t.length=0,i(r,function(t){return s[t]==a?void p(t):void(s[t]!=n&&(s[t]=n,d++,e(t,function(){s[t]=a,d--,p(t),m()})))}),d||(i(u,function(e){e.func.call(e.scope)}),u.length=0)})()}}var r=e.DOM,i=t.each,o=t.grep;return n.ScriptLoader=new n,n}),r(C,[b,p],function(e,n){function r(){var e=this;e.items=[],e.urls={},e.lookup={}}var i=n.each;return r.prototype={get:function(e){return this.lookup[e]?this.lookup[e].instance:t},dependencies:function(e){var t;return this.lookup[e]&&(t=this.lookup[e].dependencies),t||[]},requireLangPack:function(t,n){if(r.language&&r.languageLoad!==!1){if(n&&new RegExp("([, ]|\\b)"+r.language+"([, ]|\\b)").test(n)===!1)return;e.ScriptLoader.add(this.urls[t]+"/langs/"+r.language+".js")}},add:function(e,t,n){return this.items.push(t),this.lookup[e]={instance:t,dependencies:n},t},createUrl:function(e,t){return"object"==typeof t?t:{prefix:e.prefix,resource:t,suffix:e.suffix}},addComponents:function(t,n){var r=this.urls[t];i(n,function(t){e.ScriptLoader.add(r+"/"+t)})},load:function(n,o,a,s){function l(){var r=c.dependencies(n);i(r,function(e){var n=c.createUrl(o,e);c.load(n.resource,n,t,t)}),a&&a.call(s?s:e)}var c=this,u=o;c.urls[n]||("object"==typeof o&&(u=o.prefix+o.resource+o.suffix),0!==u.indexOf("/")&&-1==u.indexOf("://")&&(u=r.baseURL+"/"+u),c.urls[n]=u.substring(0,u.lastIndexOf("/")),c.lookup[n]?l():e.ScriptLoader.add(u,l,s))}},r.PluginManager=new r,r.ThemeManager=new r,r}),r(x,[],function(){function e(e,t,n){var r,i,o=n?"lastChild":"firstChild",a=n?"prev":"next";if(e[o])return e[o];if(e!==t){if(r=e[a])return r;for(i=e.parent;i&&i!==t;i=i.parent)if(r=i[a])return r}}function t(e,t){this.name=e,this.type=t,1===t&&(this.attributes=[],this.attributes.map={})}var n=/^[ \t\r\n]*$/,r={"#text":3,"#comment":8,"#cdata":4,"#pi":7,"#doctype":10,"#document-fragment":11};return t.prototype={replace:function(e){var t=this;return e.parent&&e.remove(),t.insert(e,t),t.remove(),t},attr:function(e,t){var n=this,r,i,o;if("string"!=typeof e){for(i in e)n.attr(i,e[i]);return n}if(r=n.attributes){if(t!==o){if(null===t){if(e in r.map)for(delete r.map[e],i=r.length;i--;)if(r[i].name===e)return r=r.splice(i,1),n;return n}if(e in r.map){for(i=r.length;i--;)if(r[i].name===e){r[i].value=t;break}}else r.push({name:e,value:t});return r.map[e]=t,n}return r.map[e]}},clone:function(){var e=this,n=new t(e.name,e.type),r,i,o,a,s;if(o=e.attributes){for(s=[],s.map={},r=0,i=o.length;i>r;r++)a=o[r],"id"!==a.name&&(s[s.length]={name:a.name,value:a.value},s.map[a.name]=a.value);n.attributes=s}return n.value=e.value,n.shortEnded=e.shortEnded,n},wrap:function(e){var t=this;return t.parent.insert(e,t),e.append(t),t},unwrap:function(){var e=this,t,n;for(t=e.firstChild;t;)n=t.next,e.insert(t,e,!0),t=n;e.remove()},remove:function(){var e=this,t=e.parent,n=e.next,r=e.prev;return t&&(t.firstChild===e?(t.firstChild=n,n&&(n.prev=null)):r.next=n,t.lastChild===e?(t.lastChild=r,r&&(r.next=null)):n.prev=r,e.parent=e.next=e.prev=null),e},append:function(e){var t=this,n;return e.parent&&e.remove(),n=t.lastChild,n?(n.next=e,e.prev=n,t.lastChild=e):t.lastChild=t.firstChild=e,e.parent=t,e},insert:function(e,t,n){var r;return e.parent&&e.remove(),r=t.parent||this,n?(t===r.firstChild?r.firstChild=e:t.prev.next=e,e.prev=t.prev,e.next=t,t.prev=e):(t===r.lastChild?r.lastChild=e:t.next.prev=e,e.next=t.next,e.prev=t,t.next=e),e.parent=r,e},getAll:function(t){var n=this,r,i=[];for(r=n.firstChild;r;r=e(r,n))r.name===t&&i.push(r);return i},empty:function(){var t=this,n,r,i;if(t.firstChild){for(n=[],i=t.firstChild;i;i=e(i,t))n.push(i);for(r=n.length;r--;)i=n[r],i.parent=i.firstChild=i.lastChild=i.next=i.prev=null}return t.firstChild=t.lastChild=null,t},isEmpty:function(t){var r=this,i=r.firstChild,o,a;if(i)do{if(1===i.type){if(i.attributes.map["data-mce-bogus"])continue;if(t[i.name])return!1;for(o=i.attributes.length;o--;)if(a=i.attributes[o].name,"name"===a||0===a.indexOf("data-mce-"))return!1}if(8===i.type)return!1;if(3===i.type&&!n.test(i.value))return!1}while(i=e(i,r));return!0},walk:function(t){return e(this,null,t)}},t.create=function(e,n){var i,o;if(i=new t(e,r[e]||1),n)for(o in n)i.attr(o,n[o]);return i},t}),r(w,[p],function(e){function t(e,t){return e?e.split(t||" "):[]}function n(e){function n(e,n,r){function i(e){var t={},n,r;for(n=0,r=e.length;r>n;n++)t[e[n]]={};return t}var o,l,c,u=arguments;for(r=r||[],n=n||"","string"==typeof r&&(r=t(r)),l=3;lo;o++)i.attributes[n[o]]={},i.attributesOrder.push(n[o])}var a={},s,l,c,u,d,f;return r[e]?r[e]:(s=t("id accesskey class dir lang style tabindex title"),l=t("address blockquote div dl fieldset form h1 h2 h3 h4 h5 h6 hr menu ol p pre table ul"),c=t("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"),"html4"!=e&&(s.push.apply(s,t("contenteditable contextmenu draggable dropzone hidden spellcheck translate")),l.push.apply(l,t("article aside details dialog figure header footer hgroup section nav")),c.push.apply(c,t("audio canvas command datalist mark meter output progress time wbr video ruby bdi keygen"))),"html5-strict"!=e&&(s.push("xml:lang"),f=t("acronym applet basefont big font strike tt"),c.push.apply(c,f),o(f,function(e){n(e,"",c)}),d=t("center dir isindex noframes"),l.push.apply(l,d),u=[].concat(l,c),o(d,function(e){n(e,"",u)})),u=u||[].concat(l,c),n("html","manifest","head body"),n("head","","base command link meta noscript script style title"),n("title hr noscript br"),n("base","href target"),n("link","href rel media hreflang type sizes hreflang"),n("meta","name http-equiv content charset"),n("style","media type scoped"),n("script","src async defer type charset"),n("body","onafterprint onbeforeprint onbeforeunload onblur onerror onfocus onhashchange onload onmessage onoffline ononline onpagehide onpageshow onpopstate onresize onscroll onstorage onunload",u),n("address dt dd div caption","",u),n("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","",c),n("blockquote","cite",u),n("ol","reversed start type","li"),n("ul","","li"),n("li","value",u),n("dl","","dt dd"),n("a","href target rel media hreflang type",c),n("q","cite",c),n("ins del","cite datetime",u),n("img","src alt usemap ismap width height"),n("iframe","src name width height",u),n("embed","src type width height"),n("object","data type typemustmatch name usemap form width height",u,"param"),n("param","name value"),n("map","name",u,"area"),n("area","alt coords shape href target rel media hreflang type"),n("table","border","caption colgroup thead tfoot tbody tr"+("html4"==e?" col":"")),n("colgroup","span","col"),n("col","span"),n("tbody thead tfoot","","tr"),n("tr","","td th"),n("td","colspan rowspan headers",u),n("th","colspan rowspan headers scope abbr",u),n("form","accept-charset action autocomplete enctype method name novalidate target",u),n("fieldset","disabled form name",u,"legend"),n("label","form for",c),n("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("button","disabled form formaction formenctype formmethod formnovalidate formtarget name type value","html4"==e?u:c),n("select","disabled form multiple name required size","option optgroup"),n("optgroup","disabled label","option"),n("option","disabled label selected value"),n("textarea","cols dirname disabled form maxlength name readonly required rows wrap"),n("menu","type label",u,"li"),n("noscript","",u),"html4"!=e&&(n("wbr"),n("ruby","",c,"rt rp"),n("figcaption","",u),n("mark rt rp summary bdi","",c),n("canvas","width height",u),n("video","src crossorigin poster preload autoplay mediagroup loop muted controls width height",u,"track source"),n("audio","src crossorigin preload autoplay mediagroup loop muted controls",u,"track source"),n("source","src type media"),n("track","kind src srclang label default"),n("datalist","",c,"option"),n("article section nav aside header footer","",u),n("hgroup","","h1 h2 h3 h4 h5 h6"),n("figure","",u,"figcaption"),n("time","datetime",c),n("dialog","open",u),n("command","type label icon disabled checked radiogroup command"),n("output","for form name",c),n("progress","value max",c),n("meter","value min max low high optimum",c),n("details","open",u,"summary"),n("keygen","autofocus challenge disabled form keytype name")),"html5-strict"!=e&&(i("script","language xml:space"),i("style","xml:space"),i("object","declare classid codebase codetype archive standby align border hspace vspace"),i("param","valuetype type"),i("a","charset name rev shape coords"),i("br","clear"),i("applet","codebase archive code object alt name width height align hspace vspace"),i("img","name longdesc align border hspace vspace"),i("iframe","longdesc frameborder marginwidth marginheight scrolling align"),i("font basefont","size color face"),i("input","usemap align"),i("select","onchange"),i("textarea"),i("h1 h2 h3 h4 h5 h6 div p legend caption","align"),i("ul","type compact"),i("li","type"),i("ol dl menu dir","compact"),i("pre","width xml:space"),i("hr","align noshade size width"),i("isindex","prompt"),i("table","summary width frame rules cellspacing cellpadding align bgcolor"),i("col","width align char charoff valign"),i("colgroup","width align char charoff valign"),i("thead","align char charoff valign"),i("tr","align char charoff valign bgcolor"),i("th","axis align char charoff valign nowrap bgcolor width height"),i("form","accept"),i("td","abbr axis scope align char charoff valign nowrap bgcolor width height"),i("tfoot","align char charoff valign"),i("tbody","align char charoff valign"),i("area","nohref"),i("body","background bgcolor text link vlink alink")),"html4"!=e&&(i("input button select textarea","autofocus"),i("input textarea","placeholder"),i("a","download"),i("link script img","crossorigin"),i("iframe","srcdoc sandbox seamless allowfullscreen")),o(t("a form meter progress dfn"),function(e){a[e]&&delete a[e].children[e]}),delete a.caption.children.table,r[e]=a,a)}var r={},i=e.makeMap,o=e.each,a=e.extend,s=e.explode,l=e.inArray;return function(e){function c(t,n,o){var s=e[t];return s?s=i(s,",",i(s.toUpperCase()," ")):(s=r[t],s||(s=i(n," ",i(n.toUpperCase()," ")),s=a(s,o),r[t]=s)),s}function u(e){return new RegExp("^"+e.replace(/([?+*])/g,".$1")+"$")}function d(e){var n,r,o,a,s,c,d,f,p,m,h,g,y,C,x,w,_,N,E,S=/^([#+\-])?([^\[!\/]+)(?:\/([^\[!]+))?(?:(!?)\[([^\]]+)\])?$/,k=/^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/,T=/[*?+]/;if(e)for(e=t(e,","),v["@"]&&(w=v["@"].attributes,_=v["@"].attributesOrder),n=0,r=e.length;r>n;n++)if(s=S.exec(e[n])){if(C=s[1],p=s[2],x=s[3],f=s[5],g={},y=[],c={attributes:g,attributesOrder:y},"#"===C&&(c.paddEmpty=!0),"-"===C&&(c.removeEmpty=!0),"!"===s[4]&&(c.removeEmptyAttrs=!0),w){for(N in w)g[N]=w[N];y.push.apply(y,_)}if(f)for(f=t(f,"|"),o=0,a=f.length;a>o;o++)if(s=k.exec(f[o])){if(d={},h=s[1],m=s[2].replace(/::/g,":"),C=s[3],E=s[4],"!"===h&&(c.attributesRequired=c.attributesRequired||[],c.attributesRequired.push(m),d.required=!0),"-"===h){delete g[m],y.splice(l(y,m),1);continue}C&&("="===C&&(c.attributesDefault=c.attributesDefault||[],c.attributesDefault.push({name:m,value:E}),d.defaultValue=E),":"===C&&(c.attributesForced=c.attributesForced||[],c.attributesForced.push({name:m,value:E}),d.forcedValue=E),"<"===C&&(d.validValues=i(E,"?"))),T.test(m)?(c.attributePatterns=c.attributePatterns||[],d.pattern=u(m),c.attributePatterns.push(d)):(g[m]||y.push(m),g[m]=d)}w||"@"!=p||(w=g,_=y),x&&(c.outputName=p,v[x]=c),T.test(p)?(c.pattern=u(p),b.push(c)):v[p]=c}}function f(e){v={},b=[],d(e),o(x,function(e,t){y[t]=e.children})}function p(e){var n=/^(~)?(.+)$/;e&&(r.text_block_elements=r.block_elements=null,o(t(e,","),function(e){var t=n.exec(e),r="~"===t[1],i=r?"span":"div",s=t[2];if(y[s]=y[i],R[s]=i,r||(S[s.toUpperCase()]={},S[s]={}),!v[s]){var l=v[i];l=a({},l),delete l.removeEmptyAttrs,delete l.removeEmpty,v[s]=l}o(y,function(e,t){e[i]&&(y[t]=e=a({},y[t]),e[s]=e[i])})}))}function m(e){var n=/^([+\-]?)(\w+)\[([^\]]+)\]$/;e&&o(t(e,","),function(e){var r=n.exec(e),i,s;r&&(s=r[1],i=s?y[r[2]]:y[r[2]]={"#comment":{}},i=y[r[2]],o(t(r[3],"|"),function(e){"-"===s?(y[r[2]]=i=a({},y[r[2]]),delete i[e]):i[e]={}}))})}function h(e){var t=v[e],n;if(t)return t;for(n=b.length;n--;)if(t=b[n],t.pattern.test(e))return t}var g=this,v={},y={},b=[],C,x,w,_,N,E,S,k,T,R={},A={};e=e||{},x=n(e.schema),e.verify_html===!1&&(e.valid_elements="*[*]"),e.valid_styles&&(C={},o(e.valid_styles,function(e,t){C[t]=s(e)})),w=c("whitespace_elements","pre script noscript style textarea video audio iframe object"),_=c("self_closing_elements","colgroup dd dt li option p td tfoot th thead tr"),N=c("short_ended_elements","area base basefont br col frame hr img input isindex link meta param embed source wbr track"),E=c("boolean_attributes","checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls"),k=c("non_empty_elements","td th iframe video audio object script",N),T=c("text_block_elements","h1 h2 h3 h4 h5 h6 p div address pre form blockquote center dir fieldset header footer article section hgroup aside nav figure"),S=c("block_elements","hr table tbody thead tfoot th tr td li ol ul caption dl dt dd noscript menu isindex option datalist select optgroup",T),o((e.special||"script noscript style textarea").split(" "),function(e){A[e]=new RegExp("]*>","gi")}),e.valid_elements?f(e.valid_elements):(o(x,function(e,t){v[t]={attributes:e.attributes,attributesOrder:e.attributesOrder},y[t]=e.children}),"html5"!=e.schema&&o(t("strong/b em/i"),function(e){e=t(e,"/"),v[e[1]].outputName=e[0]}),v.img.attributesDefault=[{name:"alt",value:""}],o(t("ol ul sub sup blockquote span font a table tbody tr strong em b i"),function(e){v[e]&&(v[e].removeEmpty=!0)}),o(t("p h1 h2 h3 h4 h5 h6 th td pre div address caption"),function(e){v[e].paddEmpty=!0}),o(t("span"),function(e){v[e].removeEmptyAttrs=!0})),p(e.custom_elements),m(e.valid_children),d(e.extended_valid_elements),m("+ol[ul|ol],+ul[ul|ol]"),e.invalid_elements&&o(s(e.invalid_elements),function(e){v[e]&&delete v[e]}),h("span")||d("span[!data-mce-type|*]"),g.children=y,g.styles=C,g.getBoolAttrs=function(){return E},g.getBlockElements=function(){return S},g.getTextBlockElements=function(){return T},g.getShortEndedElements=function(){return N},g.getSelfClosingElements=function(){return _},g.getNonEmptyElements=function(){return k},g.getWhiteSpaceElements=function(){return w},g.getSpecialElements=function(){return A},g.isValidChild=function(e,t){var n=y[e];return!(!n||!n[t])},g.isValid=function(e,t){var n,r,i=h(e);if(i){if(!t)return!0;if(i.attributes[t])return!0;if(n=i.attributePatterns)for(r=n.length;r--;)if(n[r].pattern.test(e))return!0}return!1},g.getElementRule=h,g.getCustomElements=function(){return R},g.addValidElements=d,g.setValidElements=f,g.addCustomElements=p,g.addValidChildren=m,g.elements=v}}),r(_,[w,h,p],function(e,t,n){var r=n.each;return function(i,o){function a(){}var s=this;i=i||{},s.schema=o=o||new e,i.fix_self_closing!==!1&&(i.fix_self_closing=!0),r("comment cdata text start end pi doctype".split(" "),function(e){e&&(s[e]=i[e]||a)}),s.parse=function(e){function r(e){var t,n;for(t=f.length;t--&&f[t].name!==e;);if(t>=0){for(n=f.length-1;n>=t;n--)e=f[n],e.valid&&s.end(e.name);f.length=t}}function a(e,t,n,r,o){var a,s,l=/[\s\u0000-\u001F]+/g;if(t=t.toLowerCase(),n=t in C?t:F(n||r||o||""),w&&!v&&0!==t.indexOf("data-")){if(a=k[t],!a&&T){for(s=T.length;s--&&(a=T[s],!a.pattern.test(t)););-1===s&&(a=null)}if(!a)return;if(a.validValues&&!(n in a.validValues))return}if(W[t]&&!i.allow_script_urls){var c=n.replace(l,"");try{if(c=decodeURIComponent(c),V.test(c))return}catch(u){if(c=unescape(c),V.test(c))return}}p.map[t]=n,p.push({name:t,value:n})}var s=this,l,c=0,u,d,f=[],p,m,h,g,v,y,b,C,x,w,_,N,E,S,k,T,R,A,B,L,D,M,H,P,O,I=0,F=t.decode,z,W=n.makeMap("src,href"),V=/(java|vb)script:/i;for(M=new RegExp("<(?:(?:!--([\\w\\W]*?)-->)|(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|(?:!DOCTYPE([\\w\\W]*?)>)|(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|(?:\\/([^>]+)>)|(?:([A-Za-z0-9\\-\\:\\.]+)((?:\\s+[^\"'>]+(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>]*))*|\\/|\\s+)>))","g"),H=/([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g,b=o.getShortEndedElements(),D=i.self_closing_elements||o.getSelfClosingElements(),C=o.getBoolAttrs(),w=i.validate,y=i.remove_internals,z=i.fix_self_closing,P=o.getSpecialElements();l=M.exec(e);){if(c0&&f[f.length-1].name===u&&r(u),!w||(_=o.getElementRule(u))){if(N=!0,w&&(k=_.attributes,T=_.attributePatterns),(S=l[8])?(v=-1!==S.indexOf("data-mce-type"),v&&y&&(N=!1),p=[],p.map={},S.replace(H,a)):(p=[],p.map={}),w&&!v){if(R=_.attributesRequired,A=_.attributesDefault,B=_.attributesForced,L=_.removeEmptyAttrs,L&&!p.length&&(N=!1),B)for(m=B.length;m--;)E=B[m],g=E.name,O=E.value,"{$uid}"===O&&(O="mce_"+I++),p.map[g]=O,p.push({name:g,value:O});if(A)for(m=A.length;m--;)E=A[m],g=E.name,g in p.map||(O=E.value,"{$uid}"===O&&(O="mce_"+I++),p.map[g]=O,p.push({name:g,value:O}));if(R){for(m=R.length;m--&&!(R[m]in p.map););-1===m&&(N=!1)}p.map["data-mce-bogus"]&&(N=!1)}N&&s.start(u,p,x)}else N=!1;if(d=P[u]){d.lastIndex=c=l.index+l[0].length,(l=d.exec(e))?(N&&(h=e.substr(c,l.index-c)),c=l.index+l[0].length):(h=e.substr(c),c=e.length),N&&(h.length>0&&s.text(h,!0),s.end(u)),M.lastIndex=c;continue}x||(S&&S.indexOf("/")==S.length-1?N&&s.end(u):f.push({name:u,valid:N}))}else(u=l[1])?(">"===u.charAt(0)&&(u=" "+u),i.allow_conditional_comments||"[if"!==u.substr(0,3)||(u=" "+u),s.comment(u)):(u=l[2])?s.cdata(u):(u=l[3])?s.doctype(u):(u=l[4])&&s.pi(u,l[5]);c=l.index+l[0].length}for(c=0;m--)u=f[m],u.valid&&s.end(u.name)}}}),r(N,[x,w,_,p],function(e,t,n,r){var i=r.makeMap,o=r.each,a=r.explode,s=r.extend;return function(r,l){function c(t){var n,r,o,a,s,c,d,f,p,m,h,g,v,y;for(h=i("tr,td,th,tbody,thead,tfoot,table"),m=l.getNonEmptyElements(),g=l.getTextBlockElements(),n=0;n1){for(a.reverse(),s=c=u.filterNode(a[0].clone()),p=0;p0?(t.value=n,t=t.prev):(r=t.prev,t.remove(),t=r)}function g(e){var t,n={};for(t in e)"li"!==t&&"p"!=t&&(n[t]=e[t]);return n}var v,y,b,C,x,w,_,N,E,S,k,T,R,A=[],B,L,D,M,H,P,O,I;if(o=o||{},p={},m={},T=s(i("script,style,head,html,body,title,meta,param"),l.getBlockElements()),O=l.getNonEmptyElements(),P=l.children,k=r.validate,I="forced_root_block"in o?o.forced_root_block:r.forced_root_block,H=l.getWhiteSpaceElements(),R=/^[ \t\r\n]+/,L=/[ \t\r\n]+$/,D=/[ \t\r\n]+/g,M=/^[ \t\r\n]+$/,v=new n({validate:k,allow_script_urls:r.allow_script_urls,allow_conditional_comments:r.allow_conditional_comments,self_closing_elements:g(l.getSelfClosingElements()),cdata:function(e){b.append(u("#cdata",4)).value=e},text:function(e,t){var n;B||(e=e.replace(D," "),b.lastChild&&T[b.lastChild.name]&&(e=e.replace(R,""))),0!==e.length&&(n=u("#text",3),n.raw=!!t,b.append(n).value=e)},comment:function(e){b.append(u("#comment",8)).value=e},pi:function(e,t){b.append(u(e,7)).value=t,h(b)},doctype:function(e){var t;t=b.append(u("#doctype",10)),t.value=e,h(b)},start:function(e,t,n){var r,i,o,a,s;if(o=k?l.getElementRule(e):{}){for(r=u(o.outputName||e,1),r.attributes=t,r.shortEnded=n,b.append(r),s=P[b.name],s&&P[r.name]&&!s[r.name]&&A.push(r),i=f.length;i--;)a=f[i].name,a in t.map&&(E=m[a],E?E.push(r):m[a]=[r]);T[e]&&h(r),n||(b=r),!B&&H[e]&&(B=!0)}},end:function(t){var n,r,i,o,a;if(r=k?l.getElementRule(t):{}){if(T[t]&&!B){if(n=b.firstChild,n&&3===n.type)if(i=n.value.replace(R,""),i.length>0)n.value=i,n=n.next;else for(o=n.next,n.remove(),n=o;n&&3===n.type;)i=n.value,o=n.next,(0===i.length||M.test(i))&&(n.remove(),n=o),n=o;if(n=b.lastChild,n&&3===n.type)if(i=n.value.replace(L,""),i.length>0)n.value=i,n=n.prev;else for(o=n.prev,n.remove(),n=o;n&&3===n.type;)i=n.value,o=n.prev,(0===i.length||M.test(i))&&(n.remove(),n=o),n=o}if(B&&H[t]&&(B=!1),(r.removeEmpty||r.paddEmpty)&&b.isEmpty(O))if(r.paddEmpty)b.empty().append(new e("#text","3")).value="\xa0";else if(!b.attributes.map.name&&!b.attributes.map.id)return a=b.parent,b.empty().remove(),void(b=a);b=b.parent}}},l),y=b=new e(o.context||r.root_name,11),v.parse(t),k&&A.length&&(o.context?o.invalid=!0:c(A)),I&&("body"==y.name||o.isRootContent)&&a(),!o.invalid){for(S in p){for(E=d[S],C=p[S],_=C.length;_--;)C[_].parent||C.splice(_,1);for(x=0,w=E.length;w>x;x++)E[x](C,S,o)}for(x=0,w=f.length;w>x;x++)if(E=f[x],E.name in m){for(C=m[E.name],_=C.length;_--;)C[_].parent||C.splice(_,1);for(_=0,N=E.callbacks.length;N>_;_++)E.callbacks[_](C,E.name,o)}}return y},r.remove_trailing_brs&&u.addNodeFilter("br",function(t){var n,r=t.length,i,o=s({},l.getBlockElements()),a=l.getNonEmptyElements(),c,u,d,f,p,m;for(o.body=1,n=0;r>n;n++)if(i=t[n],c=i.parent,o[i.parent.name]&&i===c.lastChild){for(d=i.prev;d;){if(f=d.name,"span"!==f||"bookmark"!==d.attr("data-mce-type")){if("br"!==f)break;if("br"===f){i=null;break}}d=d.prev}i&&(i.remove(),c.isEmpty(a)&&(p=l.getElementRule(c.name),p&&(p.removeEmpty?c.remove():p.paddEmpty&&(c.empty().append(new e("#text",3)).value="\xa0"))))}else{for(u=i;c&&c.firstChild===u&&c.lastChild===u&&(u=c,!o[c.name]);)c=c.parent;u===c&&(m=new e("#text",3),m.value="\xa0",i.replace(m))}}),r.allow_html_in_named_anchor||u.addAttributeFilter("id,name",function(e){for(var t=e.length,n,r,i,o;t--;)if(o=e[t],"a"===o.name&&o.firstChild&&!o.attr("href")){i=o.parent,n=o.lastChild;do r=n.prev,i.insert(n,o),n=r;while(n)}})}}),r(E,[h,p],function(e,t){var n=t.makeMap;return function(t){var r=[],i,o,a,s,l;return t=t||{},i=t.indent,o=n(t.indent_before||""),a=n(t.indent_after||""),s=e.getEncodeFunc(t.entity_encoding||"raw",t.entities),l="html"==t.element_format,{start:function(e,t,n){var c,u,d,f;if(i&&o[e]&&r.length>0&&(f=r[r.length-1],f.length>0&&"\n"!==f&&r.push("\n")),r.push("<",e),t)for(c=0,u=t.length;u>c;c++)d=t[c],r.push(" ",d.name,'="',s(d.value,!0),'"');r[r.length]=!n||l?">":" />",n&&i&&a[e]&&r.length>0&&(f=r[r.length-1],f.length>0&&"\n"!==f&&r.push("\n"))},end:function(e){var t;r.push(""),i&&a[e]&&r.length>0&&(t=r[r.length-1],t.length>0&&"\n"!==t&&r.push("\n"))},text:function(e,t){e.length>0&&(r[r.length]=t?e:s(e))},cdata:function(e){r.push("")},comment:function(e){r.push("")},pi:function(e,t){t?r.push(""):r.push(""),i&&r.push("\n")},doctype:function(e){r.push("",i?"\n":"")},reset:function(){r.length=0},getContent:function(){return r.join("").replace(/\n$/,"")}}}}),r(S,[E,w],function(e,t){return function(n,r){var i=this,o=new e(n);n=n||{},n.validate="validate"in n?n.validate:!0,i.schema=r=r||new t,i.writer=o,i.serialize=function(e){function t(e){var n=i[e.type],s,l,c,u,d,f,p,m,h;if(n)n(e);else{if(s=e.name,l=e.shortEnded,c=e.attributes,a&&c&&c.length>1){for(f=[],f.map={},h=r.getElementRule(e.name),p=0,m=h.attributesOrder.length;m>p;p++)u=h.attributesOrder[p],u in c.map&&(d=c.map[u],f.map[u]=d,f.push({name:u,value:d}));for(p=0,m=c.length;m>p;p++)u=c[p].name,u in f.map||(d=c.map[u],f.map[u]=d,f.push({name:u,value:d}));c=f}if(o.start(e.name,c,l),!l){if(e=e.firstChild)do t(e);while(e=e.next);o.end(s)}}}var i,a;return a=n.validate,i={3:function(e){o.text(e.value,e.raw)},8:function(e){o.comment(e.value)},7:function(e){o.pi(e.name,e.value)},10:function(e){o.doctype(e.value)},4:function(e){o.cdata(e.value)},11:function(e){if(e=e.firstChild)do t(e);while(e=e.next)}},o.reset(),1!=e.type||n.inner?i[11](e):t(e),o.getContent()}}}),r(k,[y,N,h,S,x,w,g,p],function(e,t,n,r,i,o,a,s){var l=s.each,c=s.trim,u=e.DOM;return function(e,i){var s,d,f;return i&&(s=i.dom,d=i.schema),s=s||u,d=d||new o(e),e.entity_encoding=e.entity_encoding||"named",e.remove_trailing_brs="remove_trailing_brs"in e?e.remove_trailing_brs:!0,f=new t(e,d),f.addAttributeFilter("src,href,style",function(t,n){for(var r=t.length,i,o,a="data-mce-"+n,l=e.url_converter,c=e.url_converter_scope,u;r--;)i=t[r],o=i.attributes.map[a],o!==u?(i.attr(n,o.length>0?o:null),i.attr(a,null)):(o=i.attributes.map[n],"style"===n?o=s.serializeStyle(s.parseStyle(o),i.name):l&&(o=l.call(c,o,n,i.name)),i.attr(n,o.length>0?o:null))}),f.addAttributeFilter("class",function(e){for(var t=e.length,n,r;t--;)n=e[t],r=n.attr("class").replace(/(?:^|\s)mce-item-\w+(?!\S)/g,""),n.attr("class",r.length>0?r:null)}),f.addAttributeFilter("data-mce-type",function(e,t,n){for(var r=e.length,i;r--;)i=e[r],"bookmark"!==i.attributes.map["data-mce-type"]||n.cleanup||i.remove()}),f.addAttributeFilter("data-mce-expando",function(e,t){for(var n=e.length;n--;)e[n].attr(t,null)}),f.addNodeFilter("noscript",function(e){for(var t=e.length,r;t--;)r=e[t].firstChild,r&&(r.value=n.decode(r.value))}),f.addNodeFilter("script,style",function(e,t){function n(e){return e.replace(/()/g,"\n").replace(/^[\r\n]*|[\r\n]*$/g,"").replace(/^\s*(()?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g,"")}for(var r=e.length,i,o;r--;)if(i=e[r],o=i.firstChild?i.firstChild.value:"","script"===t){var a=(i.attr("type")||"text/javascript").replace(/^mce\-/,"");i.attr("type","text/javascript"===a?null:a),o.length>0&&(i.firstChild.value="// ")}else o.length>0&&(i.firstChild.value="")}),f.addNodeFilter("#comment",function(e){for(var t=e.length,n;t--;)n=e[t],0===n.value.indexOf("[CDATA[")?(n.name="#cdata",n.type=4,n.value=n.value.replace(/^\[CDATA\[|\]\]$/g,"")):0===n.value.indexOf("mce:protected ")&&(n.name="#text",n.type=3,n.raw=!0,n.value=unescape(n.value).substr(14))}),f.addNodeFilter("xml:namespace,input",function(e,t){for(var n=e.length,r;n--;)r=e[n],7===r.type?r.remove():1===r.type&&("input"!==t||"type"in r.attributes.map||r.attr("type","text"))}),e.fix_list_elements&&f.addNodeFilter("ul,ol",function(e){for(var t=e.length,n,r;t--;)n=e[t],r=n.parent,("ul"===r.name||"ol"===r.name)&&n.prev&&"li"===n.prev.name&&n.prev.append(n)}),f.addAttributeFilter("data-mce-src,data-mce-href,data-mce-style,data-mce-selected",function(e,t){for(var n=e.length;n--;)e[n].attr(t,null)}),{schema:d,addNodeFilter:f.addNodeFilter,addAttributeFilter:f.addAttributeFilter,serialize:function(t,n){var i=this,o,u,p,m,h;return a.ie&&s.select("script,style,select,map").length>0?(h=t.innerHTML,t=t.cloneNode(!1),s.setHTML(t,h)):t=t.cloneNode(!0),o=t.ownerDocument.implementation,o.createHTMLDocument&&(u=o.createHTMLDocument(""),l("BODY"==t.nodeName?t.childNodes:[t],function(e){u.body.appendChild(u.importNode(e,!0))}),t="BODY"!=t.nodeName?u.body.firstChild:u.body,p=s.doc,s.doc=u),n=n||{},n.format=n.format||"html",n.selection&&(n.forced_root_block=""),n.no_events||(n.node=t,i.onPreProcess(n)),m=new r(e,d),n.content=m.serialize(f.parse(c(n.getInner?t.innerHTML:s.getOuterHTML(t)),n)),n.cleanup||(n.content=n.content.replace(/\uFEFF/g,"")),n.no_events||i.onPostProcess(n),p&&(s.doc=p),n.node=null,n.content},addRules:function(e){d.addValidElements(e)},setRules:function(e){d.setValidElements(e)},onPreProcess:function(e){i&&i.fire("PreProcess",e)},onPostProcess:function(e){i&&i.fire("PostProcess",e)}}}}),r(T,[],function(){function e(e){function t(t,n){var r,i=0,o,a,s,l,c,u,d=-1,f;if(r=t.duplicate(),r.collapse(n),f=r.parentElement(),f.ownerDocument===e.dom.doc){for(;"false"===f.contentEditable;)f=f.parentNode;if(!f.hasChildNodes())return{node:f,inside:1};for(s=f.children,o=s.length-1;o>=i;)if(u=Math.floor((i+o)/2),l=s[u],r.moveToElementText(l),d=r.compareEndPoints(n?"StartToStart":"EndToEnd",t),d>0)o=u-1;else{if(!(0>d))return{node:l};i=u+1}if(0>d)for(l?r.collapse(!1):(r.moveToElementText(f),r.collapse(!0),l=f,a=!0),c=0;0!==r.compareEndPoints(n?"StartToStart":"StartToEnd",t)&&0!==r.move("character",1)&&f==r.parentElement();)c++;else for(r.collapse(!0),c=0;0!==r.compareEndPoints(n?"StartToStart":"StartToEnd",t)&&0!==r.move("character",-1)&&f==r.parentElement();)c++;return{node:l,position:d,offset:c,inside:a}}}function n(){function n(e){var n=t(o,e),r,i,s=0,l,c,u;if(r=n.node,i=n.offset,n.inside&&!r.hasChildNodes())return void a[e?"setStart":"setEnd"](r,0);if(i===c)return void a[e?"setStartBefore":"setEndAfter"](r);if(n.position<0){if(l=n.inside?r.firstChild:r.nextSibling,!l)return void a[e?"setStartAfter":"setEndAfter"](r);if(!i)return void(3==l.nodeType?a[e?"setStart":"setEnd"](l,0):a[e?"setStartBefore":"setEndBefore"](l)); +for(;l;){if(u=l.nodeValue,s+=u.length,s>=i){r=l,s-=i,s=u.length-s;break}l=l.nextSibling}}else{if(l=r.previousSibling,!l)return a[e?"setStartBefore":"setEndBefore"](r);if(!i)return void(3==r.nodeType?a[e?"setStart":"setEnd"](l,r.nodeValue.length):a[e?"setStartAfter":"setEndAfter"](l));for(;l;){if(s+=l.nodeValue.length,s>=i){r=l,s-=i;break}l=l.previousSibling}}a[e?"setStart":"setEnd"](r,s)}var o=e.getRng(),a=i.createRng(),s,l,c,u,d;if(s=o.item?o.item(0):o.parentElement(),s.ownerDocument!=i.doc)return a;if(l=e.isCollapsed(),o.item)return a.setStart(s.parentNode,i.nodeIndex(s)),a.setEnd(a.startContainer,a.startOffset+1),a;try{n(!0),l||n()}catch(f){if(-2147024809!=f.number)throw f;d=r.getBookmark(2),c=o.duplicate(),c.collapse(!0),s=c.parentElement(),l||(c=o.duplicate(),c.collapse(!1),u=c.parentElement(),u.innerHTML=u.innerHTML),s.innerHTML=s.innerHTML,r.moveToBookmark(d),o=e.getRng(),n(!0),l||n()}return a}var r=this,i=e.dom,o=!1;this.getBookmark=function(n){function r(e){var t,n,r,o,a=[];for(t=e.parentNode,n=i.getRoot().parentNode;t!=n&&9!==t.nodeType;){for(r=t.children,o=r.length;o--;)if(e===r[o]){a.push(o);break}e=t,t=t.parentNode}return a}function o(e){var n;return n=t(a,e),n?{position:n.position,offset:n.offset,indexes:r(n.node),inside:n.inside}:void 0}var a=e.getRng(),s={};return 2===n&&(a.item?s.start={ctrl:!0,indexes:r(a.item(0))}:(s.start=o(!0),e.isCollapsed()||(s.end=o()))),s},this.moveToBookmark=function(e){function t(e){var t,n,r,o;for(t=i.getRoot(),n=e.length-1;n>=0;n--)o=t.children,r=e[n],r<=o.length-1&&(t=o[r]);return t}function n(n){var i=e[n?"start":"end"],a,s,l,c;i&&(a=i.position>0,s=o.createTextRange(),s.moveToElementText(t(i.indexes)),c=i.offset,c!==l?(s.collapse(i.inside||a),s.moveStart("character",a?-c:c)):s.collapse(n),r.setEndPoint(n?"StartToStart":"EndToStart",s),n&&r.collapse(!0))}var r,o=i.doc.body;e.start&&(e.start.ctrl?(r=o.createControlRange(),r.addElement(t(e.start.indexes)),r.select()):(r=o.createTextRange(),n(!0),n(),r.select()))},this.addRange=function(t){function n(e){var t,n,a,d,m;a=i.create("a"),t=e?s:c,n=e?l:u,d=r.duplicate(),(t==f||t==f.documentElement)&&(t=p,n=0),3==t.nodeType?(t.parentNode.insertBefore(a,t),d.moveToElementText(a),d.moveStart("character",n),i.remove(a),r.setEndPoint(e?"StartToStart":"EndToEnd",d)):(m=t.childNodes,m.length?(n>=m.length?i.insertAfter(a,m[m.length-1]):t.insertBefore(a,m[n]),d.moveToElementText(a)):t.canHaveHTML&&(t.innerHTML="",a=t.firstChild,d.moveToElementText(a),d.collapse(o)),r.setEndPoint(e?"StartToStart":"EndToEnd",d),i.remove(a))}var r,a,s,l,c,u,d,f=e.dom.doc,p=f.body,m,h;if(s=t.startContainer,l=t.startOffset,c=t.endContainer,u=t.endOffset,r=p.createTextRange(),s==c&&1==s.nodeType){if(l==u&&!s.hasChildNodes()){if(s.canHaveHTML)return d=s.previousSibling,d&&!d.hasChildNodes()&&i.isBlock(d)?d.innerHTML="":d=null,s.innerHTML="",r.moveToElementText(s.lastChild),r.select(),i.doc.selection.clear(),s.innerHTML="",void(d&&(d.innerHTML=""));l=i.nodeIndex(s),s=s.parentNode}if(l==u-1)try{if(h=s.childNodes[l],a=p.createControlRange(),a.addElement(h),a.select(),m=e.getRng(),m.item&&h===m.item(0))return}catch(g){}}n(!0),n(),r.select()},this.getRangeAt=n}return e}),r(R,[g],function(e){return{BACKSPACE:8,DELETE:46,DOWN:40,ENTER:13,LEFT:37,RIGHT:39,SPACEBAR:32,TAB:9,UP:38,modifierPressed:function(e){return e.shiftKey||e.ctrlKey||e.altKey},metaKeyPressed:function(t){return(e.mac?t.metaKey:t.ctrlKey)&&!t.altKey}}}),r(A,[R,p,g],function(e,t,n){return function(r,i){function o(e){var t=i.settings.object_resizing;return t===!1||n.iOS?!1:("string"!=typeof t&&(t="table,img,div"),"false"===e.getAttribute("data-mce-resize")?!1:i.dom.is(e,t))}function a(t){var n,r;n=t.screenX-k,r=t.screenY-T,H=n*E[2]+B,P=r*E[3]+L,H=5>H?5:H,P=5>P?5:P,(e.modifierPressed(t)||"IMG"==w.nodeName&&E[2]*E[3]!==0)&&(H=Math.round(P/D),P=Math.round(H*D)),C.setStyles(_,{width:H,height:P}),E[2]<0&&_.clientWidth<=H&&C.setStyle(_,"left",R+(B-H)),E[3]<0&&_.clientHeight<=P&&C.setStyle(_,"top",A+(L-P)),M||(i.fire("ObjectResizeStart",{target:w,width:B,height:L}),M=!0)}function s(){function e(e,t){t&&(w.style[e]||!i.schema.isValid(w.nodeName.toLowerCase(),e)?C.setStyle(w,e,t):C.setAttrib(w,e,t))}M=!1,e("width",H),e("height",P),C.unbind(O,"mousemove",a),C.unbind(O,"mouseup",s),I!=O&&(C.unbind(I,"mousemove",a),C.unbind(I,"mouseup",s)),C.remove(_),F&&"TABLE"!=w.nodeName||l(w),i.fire("ObjectResized",{target:w,width:H,height:P}),i.nodeChanged()}function l(e,t,r){var l,u,d,f,p,m=i.getBody();g(),l=C.getPos(e,m),R=l.x,A=l.y,p=e.getBoundingClientRect(),u=p.width||p.right-p.left,d=p.height||p.bottom-p.top,w!=e&&(h(),w=e,H=P=0),f=i.fire("ObjectSelected",{target:e}),o(e)&&!f.isDefaultPrevented()?x(N,function(e,o){function l(t){k=t.screenX,T=t.screenY,B=w.clientWidth,L=w.clientHeight,D=L/B,E=e,_=w.cloneNode(!0),C.addClass(_,"mce-clonedresizable"),_.contentEditable=!1,_.unSelectabe=!0,C.setStyles(_,{left:R,top:A,margin:0}),_.removeAttribute("data-mce-selected"),i.getBody().appendChild(_),C.bind(O,"mousemove",a),C.bind(O,"mouseup",s),I!=O&&(C.bind(I,"mousemove",a),C.bind(I,"mouseup",s))}var c,f;return t?void(o==t&&l(r)):(c=C.get("mceResizeHandle"+o),c?C.show(c):(f=i.getBody(),c=C.add(f,"div",{id:"mceResizeHandle"+o,"data-mce-bogus":!0,"class":"mce-resizehandle",unselectable:!0,style:"cursor:"+o+"-resize; margin:0; padding:0"}),n.ie&&(c.contentEditable=!1)),e.elm||(C.bind(c,"mousedown",function(e){e.stopImmediatePropagation(),e.preventDefault(),l(e)}),e.elm=c),void C.setStyles(c,{left:u*e[0]+R-c.offsetWidth/2,top:d*e[1]+A-c.offsetHeight/2}))}):c(),w.setAttribute("data-mce-selected","1")}function c(){var e,t;g(),w&&w.removeAttribute("data-mce-selected");for(e in N)t=C.get("mceResizeHandle"+e),t&&(C.unbind(t),C.remove(t))}function u(e){function t(e,t){if(e)do if(e===t)return!0;while(e=e.parentNode)}var n;return x(C.select("img[data-mce-selected],hr[data-mce-selected]"),function(e){e.removeAttribute("data-mce-selected")}),n="mousedown"==e.type?e.target:r.getNode(),n=C.getParent(n,F?"table":"table,img,hr"),t(n,i.getBody())&&(v(),t(r.getStart(),n)&&t(r.getEnd(),n)&&(!F||n!=r.getStart()&&"IMG"!==r.getStart().nodeName))?void l(n):void c()}function d(e,t,n){e&&e.attachEvent&&e.attachEvent("on"+t,n)}function f(e,t,n){e&&e.detachEvent&&e.detachEvent("on"+t,n)}function p(e){var t=e.srcElement,n,r,o,a,s,c,u;n=t.getBoundingClientRect(),c=S.clientX-n.left,u=S.clientY-n.top;for(r in N)if(o=N[r],a=t.offsetWidth*o[0],s=t.offsetHeight*o[1],Math.abs(a-c)<8&&Math.abs(s-u)<8){E=o;break}M=!0,i.getDoc().selection.empty(),l(t,r,S)}function m(e){var t=e.srcElement;if(t!=w){if(h(),0===t.id.indexOf("mceResizeHandle"))return void(e.returnValue=!1);("IMG"==t.nodeName||"TABLE"==t.nodeName)&&(c(),w=t,d(t,"resizestart",p))}}function h(){f(w,"resizestart",p)}function g(){for(var e in N){var t=N[e];t.elm&&(C.unbind(t.elm),delete t.elm)}}function v(){try{i.getDoc().execCommand("enableObjectResizing",!1,!1)}catch(e){}}function y(e){var t;if(F){t=O.body.createControlRange();try{return t.addElement(e),t.select(),!0}catch(n){}}}function b(){w=_=null,F&&(h(),f(i.getBody(),"controlselect",m))}var C=i.dom,x=t.each,w,_,N,E,S,k,T,R,A,B,L,D,M,H,P,O=i.getDoc(),I=document,F=n.ie&&n.ie<11;N={n:[.5,0,0,-1],e:[1,.5,1,0],s:[.5,1,0,1],w:[0,.5,-1,0],nw:[0,0,-1,-1],ne:[1,0,1,-1],se:[1,1,1,1],sw:[0,1,-1,1]};var z=".mce-content-body";return i.contentStyles.push(z+" div.mce-resizehandle {position: absolute;border: 1px solid black;background: #FFF;width: 5px;height: 5px;z-index: 10000}"+z+" .mce-resizehandle:hover {background: #000}"+z+" img[data-mce-selected], hr[data-mce-selected] {outline: 1px solid black;resize: none}"+z+" .mce-clonedresizable {position: absolute;"+(n.gecko?"":"outline: 1px dashed black;")+"opacity: .5;filter: alpha(opacity=50);z-index: 10000}"),i.on("init",function(){F?(i.on("ObjectResized",function(e){"TABLE"!=e.target.nodeName&&(c(),y(e.target))}),d(i.getBody(),"controlselect",m),i.on("mousedown",function(e){S=e})):(v(),n.ie>=11&&(i.on("mouseup",function(e){var t=e.target.nodeName;/^(TABLE|IMG|HR)$/.test(t)&&(i.selection.select(e.target,"TABLE"==t),i.nodeChanged())}),i.dom.bind(i.getBody(),"mscontrolselect",function(e){/^(TABLE|IMG|HR)$/.test(e.target.nodeName)&&(e.preventDefault(),"IMG"==e.target.tagName&&window.setTimeout(function(){i.selection.select(e.target)},0))}))),i.on("nodechange mousedown mouseup ResizeEditor",u),i.on("keydown keyup",function(e){w&&"TABLE"==w.nodeName&&u(e)})}),i.on("remove",g),{isResizable:o,showResizeRect:l,hideResizeRect:c,updateResizeRect:u,controlSelect:y,destroy:b}}}),r(B,[p,f],function(e,t){function n(e){this.walk=function(t,n){function i(e){var t;return t=e[0],3===t.nodeType&&t===l&&c>=t.nodeValue.length&&e.splice(0,1),t=e[e.length-1],0===d&&e.length>0&&t===u&&3===t.nodeType&&e.splice(e.length-1,1),e}function o(e,t,n){for(var r=[];e&&e!=n;e=e[t])r.push(e);return r}function a(e,t){do{if(e.parentNode==t)return e;e=e.parentNode}while(e)}function s(e,t,r){var a=r?"nextSibling":"previousSibling";for(h=e,g=h.parentNode;h&&h!=t;h=g)g=h.parentNode,v=o(h==e?h:h[a],a),v.length&&(r||v.reverse(),n(i(v)))}var l=t.startContainer,c=t.startOffset,u=t.endContainer,d=t.endOffset,f,p,m,h,g,v,y;if(y=e.select("td.mce-item-selected,th.mce-item-selected"),y.length>0)return void r(y,function(e){n([e])});if(1==l.nodeType&&l.hasChildNodes()&&(l=l.childNodes[c]),1==u.nodeType&&u.hasChildNodes()&&(u=u.childNodes[Math.min(d-1,u.childNodes.length-1)]),l==u)return n(i([l]));for(f=e.findCommonAncestor(l,u),h=l;h;h=h.parentNode){if(h===u)return s(l,f,!0);if(h===f)break}for(h=u;h;h=h.parentNode){if(h===l)return s(u,f);if(h===f)break}p=a(l,f)||l,m=a(u,f)||u,s(l,p,!0),v=o(p==l?p:p.nextSibling,"nextSibling",m==u?m.nextSibling:m),v.length&&n(i(v)),s(u,m)},this.split=function(e){function t(e,t){return e.splitText(t)}var n=e.startContainer,r=e.startOffset,i=e.endContainer,o=e.endOffset;return n==i&&3==n.nodeType?r>0&&rr?(o-=r,n=i=t(i,o).previousSibling,o=i.nodeValue.length,r=0):o=0):(3==n.nodeType&&r>0&&r0&&o0)return c=p,u=n?p.nodeValue.length:0,void(i=!0);if(e.isBlock(p)||m[p.nodeName.toLowerCase()])return;s=p}o&&s&&(c=s,i=!0,u=0)}var c,u,d,f=e.getRoot(),p,m,h,g,v;if(c=n[(r?"start":"end")+"Container"],u=n[(r?"start":"end")+"Offset"],v=1==c.nodeType&&u===c.childNodes.length,m=e.schema.getNonEmptyElements(),g=r,1==c.nodeType&&u>c.childNodes.length-1&&(g=!1),9===c.nodeType&&(c=e.getRoot(),u=0),c===f){if(g&&(p=c.childNodes[u>0?u-1:0],p&&(h=p.nodeName.toLowerCase(),m[p.nodeName]||"TABLE"==p.nodeName)))return;if(c.hasChildNodes()&&(u=Math.min(!g&&u>0?u-1:u,c.childNodes.length-1),c=c.childNodes[u],u=0,c.hasChildNodes()&&!/TABLE/.test(c.nodeName))){p=c,d=new t(c,f);do{if(3===p.nodeType&&p.nodeValue.length>0){u=g?0:p.nodeValue.length,c=p,i=!0;break}if(m[p.nodeName.toLowerCase()]){u=e.nodeIndex(p),c=p.parentNode,"IMG"!=p.nodeName||g||u++,i=!0;break}}while(p=g?d.next():d.prev())}}o&&(3===c.nodeType&&0===u&&l(!0),1===c.nodeType&&(p=c.childNodes[u],p||(p=c.childNodes[u-1]),!p||"BR"!==p.nodeName||s(p,"A")||a(p)||a(p,!0)||l(!0,p))),g&&!o&&3===c.nodeType&&u===c.nodeValue.length&&l(!1),i&&n["set"+(r?"Start":"End")](c,u)}var i,o;return o=n.collapsed,r(!0),o||r(),i&&o&&n.collapse(!0),i}}var r=e.each;return n.compareRanges=function(e,t){if(e&&t){if(!e.item&&!e.duplicate)return e.startContainer==t.startContainer&&e.startOffset==t.startOffset;if(e.item&&t.item&&e.item(0)===t.item(0))return!0;if(e.isEqual&&t.isEqual&&t.isEqual(e))return!0}return!1},n}),r(L,[f,T,A,B,g,p],function(e,n,r,i,o,a){function s(e,t,i,o){var a=this;a.dom=e,a.win=t,a.serializer=i,a.editor=o,a.controlSelection=new r(a,o),a.win.getSelection||(a.tridentSel=new n(a))}var l=a.each,c=a.grep,u=a.trim,d=o.ie,f=o.opera;return s.prototype={setCursorLocation:function(e,t){var n=this,r=n.dom.createRng();e?(r.setStart(e,t),r.setEnd(e,t),n.setRng(r),n.collapse(!1)):(n._moveEndPoint(r,n.editor.getBody(),!0),n.setRng(r))},getContent:function(e){var n=this,r=n.getRng(),i=n.dom.create("body"),o=n.getSel(),a,s,l;return e=e||{},a=s="",e.get=!0,e.format=e.format||"html",e.selection=!0,n.editor.fire("BeforeGetContent",e),"text"==e.format?n.isCollapsed()?"":r.text||(o.toString?o.toString():""):(r.cloneContents?(l=r.cloneContents(),l&&i.appendChild(l)):r.item!==t||r.htmlText!==t?(i.innerHTML="
    "+(r.item?r.item(0).outerHTML:r.htmlText),i.removeChild(i.firstChild)):i.innerHTML=r.toString(),/^\s/.test(i.innerHTML)&&(a=" "),/\s+$/.test(i.innerHTML)&&(s=" "),e.getInner=!0,e.content=n.isCollapsed()?"":a+n.serializer.serialize(i,e)+s,n.editor.fire("GetContent",e),e.content)},setContent:function(e,t){var n=this,r=n.getRng(),i,o=n.win.document,a,s;if(t=t||{format:"html"},t.set=!0,t.selection=!0,e=t.content=e,t.no_events||n.editor.fire("BeforeSetContent",t),e=t.content,r.insertNode){e+='_',r.startContainer==o&&r.endContainer==o?o.body.innerHTML=e:(r.deleteContents(),0===o.body.childNodes.length?o.body.innerHTML=e:r.createContextualFragment?r.insertNode(r.createContextualFragment(e)):(a=o.createDocumentFragment(),s=o.createElement("div"),a.appendChild(s),s.outerHTML=e,r.insertNode(a))),i=n.dom.get("__caret"),r=o.createRange(),r.setStartBefore(i),r.setEndBefore(i),n.setRng(r),n.dom.remove("__caret");try{n.setRng(r)}catch(l){}}else r.item&&(o.execCommand("Delete",!1,null),r=n.getRng()),/^\s+/.test(e)?(r.pasteHTML('_'+e),n.dom.remove("__mce_tmp")):r.pasteHTML(e);t.no_events||n.editor.fire("SetContent",t)},getStart:function(){var e=this,t=e.getRng(),n,r,i,o;if(t.duplicate||t.item){if(t.item)return t.item(0);for(i=t.duplicate(),i.collapse(1),n=i.parentElement(),n.ownerDocument!==e.dom.doc&&(n=e.dom.getRoot()),r=o=t.parentElement();o=o.parentNode;)if(o==n){n=r;break}return n}return n=t.startContainer,1==n.nodeType&&n.hasChildNodes()&&(n=n.childNodes[Math.min(n.childNodes.length-1,t.startOffset)]),n&&3==n.nodeType?n.parentNode:n},getEnd:function(){var e=this,t=e.getRng(),n,r;return t.duplicate||t.item?t.item?t.item(0):(t=t.duplicate(),t.collapse(0),n=t.parentElement(),n.ownerDocument!==e.dom.doc&&(n=e.dom.getRoot()),n&&"BODY"==n.nodeName?n.lastChild||n:n):(n=t.endContainer,r=t.endOffset,1==n.nodeType&&n.hasChildNodes()&&(n=n.childNodes[r>0?r-1:r]),n&&3==n.nodeType?n.parentNode:n)},getBookmark:function(e,t){function n(e,t){var n=0;return l(a.select(e),function(e,r){e==t&&(n=r)}),n}function r(e){function t(t){var n,r,i,o=t?"start":"end";n=e[o+"Container"],r=e[o+"Offset"],1==n.nodeType&&"TR"==n.nodeName&&(i=n.childNodes,n=i[Math.min(t?r:r-1,i.length-1)],n&&(r=t?0:n.childNodes.length,e["set"+(t?"Start":"End")](n,r)))}return t(!0),t(),e}function i(){function e(e,n){var i=e[n?"startContainer":"endContainer"],a=e[n?"startOffset":"endOffset"],s=[],l,c,u=0;if(3==i.nodeType){if(t)for(l=i.previousSibling;l&&3==l.nodeType;l=l.previousSibling)a+=l.nodeValue.length;s.push(a)}else c=i.childNodes,a>=c.length&&c.length&&(u=1,a=Math.max(0,c.length-1)),s.push(o.dom.nodeIndex(c[a],t)+u);for(;i&&i!=r;i=i.parentNode)s.push(o.dom.nodeIndex(i,t));return s}var n=o.getRng(!0),r=a.getRoot(),i={};return i.start=e(n,!0),o.isCollapsed()||(i.end=e(n)),i}var o=this,a=o.dom,s,c,u,d,f,p,m="",h;if(2==e)return p=o.getNode(),f=p?p.nodeName:null,"IMG"==f?{name:f,index:n(f,p)}:o.tridentSel?o.tridentSel.getBookmark(e):i();if(e)return{rng:o.getRng()};if(s=o.getRng(),u=a.uniqueId(),d=o.isCollapsed(),h="overflow:hidden;line-height:0px",s.duplicate||s.item){if(s.item)return p=s.item(0),f=p.nodeName,{name:f,index:n(f,p)};c=s.duplicate();try{s.collapse(),s.pasteHTML(''+m+""),d||(c.collapse(!1),s.moveToElementText(c.parentElement()),0===s.compareEndPoints("StartToEnd",c)&&c.move("character",-1),c.pasteHTML(''+m+""))}catch(g){return null}}else{if(p=o.getNode(),f=p.nodeName,"IMG"==f)return{name:f,index:n(f,p)};c=r(s.cloneRange()),d||(c.collapse(!1),c.insertNode(a.create("span",{"data-mce-type":"bookmark",id:u+"_end",style:h},m))),s=r(s),s.collapse(!0),s.insertNode(a.create("span",{"data-mce-type":"bookmark",id:u+"_start",style:h},m))}return o.moveToBookmark({id:u,keep:1}),{id:u}},moveToBookmark:function(e){function t(t){var n=e[t?"start":"end"],r,i,o,l;if(n){for(o=n[0],i=s,r=n.length-1;r>=1;r--){if(l=i.childNodes,n[r]>l.length-1)return;i=l[n[r]]}3===i.nodeType&&(o=Math.min(n[0],i.nodeValue.length)),1===i.nodeType&&(o=Math.min(n[0],i.childNodes.length)),t?a.setStart(i,o):a.setEnd(i,o)}return!0}function n(t){var n=o.get(e.id+"_"+t),r,i,a,s,d=e.keep;if(n&&(r=n.parentNode,"start"==t?(d?(r=n.firstChild,i=1):i=o.nodeIndex(n),u=p=r,m=h=i):(d?(r=n.firstChild,i=1):i=o.nodeIndex(n),p=r,h=i),!d)){for(s=n.previousSibling,a=n.nextSibling,l(c(n.childNodes),function(e){3==e.nodeType&&(e.nodeValue=e.nodeValue.replace(/\uFEFF/g,""))});n=o.get(e.id+"_"+t);)o.remove(n,1);s&&a&&s.nodeType==a.nodeType&&3==s.nodeType&&!f&&(i=s.nodeValue.length,s.appendData(a.nodeValue),o.remove(a),"start"==t?(u=p=s,m=h=i):(p=s,h=i))}}function r(e){return!o.isBlock(e)||e.innerHTML||d||(e.innerHTML='
    '),e}var i=this,o=i.dom,a,s,u,p,m,h;if(e)if(e.start){if(a=o.createRng(),s=o.getRoot(),i.tridentSel)return i.tridentSel.moveToBookmark(e);t(!0)&&t()&&i.setRng(a)}else e.id?(n("start"),n("end"),u&&(a=o.createRng(),a.setStart(r(u),m),a.setEnd(r(p),h),i.setRng(a))):e.name?i.select(o.select(e.name)[e.index]):e.rng&&i.setRng(e.rng)},select:function(e,t){var n=this,r=n.dom,i=r.createRng(),o;if(n.lastFocusBookmark=null,e){if(!t&&n.controlSelection.controlSelect(e))return;o=r.nodeIndex(e),i.setStart(e.parentNode,o),i.setEnd(e.parentNode,o+1),t&&(n._moveEndPoint(i,e,!0),n._moveEndPoint(i,e)),n.setRng(i)}return e},isCollapsed:function(){var e=this,t=e.getRng(),n=e.getSel();return!t||t.item?!1:t.compareEndPoints?0===t.compareEndPoints("StartToEnd",t):!n||t.collapsed},collapse:function(e){var t=this,n=t.getRng(),r;n.item&&(r=n.item(0),n=t.win.document.body.createTextRange(),n.moveToElementText(r)),n.collapse(!!e),t.setRng(n)},getSel:function(){var e=this.win;return e.getSelection?e.getSelection():e.document.selection},getRng:function(e){function t(e,t,n){try{return t.compareBoundaryPoints(e,n)}catch(r){return-1}}var n=this,r,i,o,a=n.win.document,s;if(!e&&n.lastFocusBookmark){var l=n.lastFocusBookmark;return l.startContainer?(i=a.createRange(),i.setStart(l.startContainer,l.startOffset),i.setEnd(l.endContainer,l.endOffset)):i=l,i}if(e&&n.tridentSel)return n.tridentSel.getRangeAt(0);try{(r=n.getSel())&&(i=r.rangeCount>0?r.getRangeAt(0):r.createRange?r.createRange():a.createRange())}catch(c){}if(d&&i&&i.setStart&&a.selection){try{s=a.selection.createRange()}catch(c){}s&&s.item&&(o=s.item(0),i=a.createRange(),i.setStartBefore(o),i.setEndAfter(o))}return i||(i=a.createRange?a.createRange():a.body.createTextRange()),i.setStart&&9===i.startContainer.nodeType&&i.collapsed&&(o=n.dom.getRoot(),i.setStart(o,0),i.setEnd(o,0)),n.selectedRange&&n.explicitRange&&(0===t(i.START_TO_START,i,n.selectedRange)&&0===t(i.END_TO_END,i,n.selectedRange)?i=n.explicitRange:(n.selectedRange=null,n.explicitRange=null)),i},setRng:function(e,t){var n=this,r;if(e.select)try{e.select()}catch(i){}else if(n.tridentSel){if(e.cloneRange)try{return void n.tridentSel.addRange(e)}catch(i){}}else if(r=n.getSel()){n.explicitRange=e;try{r.removeAllRanges(),r.addRange(e)}catch(i){}t===!1&&r.extend&&(r.collapse(e.endContainer,e.endOffset),r.extend(e.startContainer,e.startOffset)),n.selectedRange=r.rangeCount>0?r.getRangeAt(0):null}},setNode:function(e){var t=this;return t.setContent(t.dom.getOuterHTML(e)),e},getNode:function(){function e(e,t){for(var n=e;e&&3===e.nodeType&&0===e.length;)e=t?e.nextSibling:e.previousSibling;return e||n}var t=this,n=t.getRng(),r,i=n.startContainer,o=n.endContainer,a=n.startOffset,s=n.endOffset,l=t.dom.getRoot();return n?n.setStart?(r=n.commonAncestorContainer,!n.collapsed&&(i==o&&2>s-a&&i.hasChildNodes()&&(r=i.childNodes[a]),3===i.nodeType&&3===o.nodeType&&(i=i.length===a?e(i.nextSibling,!0):i.parentNode,o=0===s?e(o.previousSibling,!1):o.parentNode,i&&i===o))?i:r&&3==r.nodeType?r.parentNode:r):(r=n.item?n.item(0):n.parentElement(),r.ownerDocument!==t.win.document&&(r=l),r):l},getSelectedBlocks:function(t,n){var r=this,i=r.dom,o,a,s=[];if(a=i.getRoot(),t=i.getParent(t||r.getStart(),i.isBlock),n=i.getParent(n||r.getEnd(),i.isBlock),t&&t!=a&&s.push(t),t&&n&&t!=n){o=t;for(var l=new e(t,a);(o=l.next())&&o!=n;)i.isBlock(o)&&s.push(o)}return n&&t!=n&&n!=a&&s.push(n),s},isForward:function(){var e=this.dom,t=this.getSel(),n,r;return t&&t.anchorNode&&t.focusNode?(n=e.createRng(),n.setStart(t.anchorNode,t.anchorOffset),n.collapse(!0),r=e.createRng(),r.setStart(t.focusNode,t.focusOffset),r.collapse(!0),n.compareBoundaryPoints(n.START_TO_START,r)<=0):!0},normalize:function(){var e=this,t=e.getRng();return!d&&new i(e.dom).normalize(t)&&e.setRng(t,e.isForward()),t},selectorChanged:function(e,t){var n=this,r;return n.selectorChangedData||(n.selectorChangedData={},r={},n.editor.on("NodeChange",function(e){var t=e.element,i=n.dom,o=i.getParents(t,null,i.getRoot()),a={};l(n.selectorChangedData,function(e,t){l(o,function(n){return i.is(n,t)?(r[t]||(l(e,function(e){e(!0,{node:n,selector:t,parents:o})}),r[t]=e),a[t]=e,!1):void 0})}),l(r,function(e,n){a[n]||(delete r[n],l(e,function(e){e(!1,{node:t,selector:n,parents:o})}))})})),n.selectorChangedData[e]||(n.selectorChangedData[e]=[]),n.selectorChangedData[e].push(t),n},getScrollContainer:function(){for(var e,t=this.dom.getRoot();t&&"BODY"!=t.nodeName;){if(t.scrollHeight>t.clientHeight){e=t;break}t=t.parentNode}return e},scrollIntoView:function(e){function t(e){for(var t=0,n=0,r=e;r&&r.nodeType;)t+=r.offsetLeft||0,n+=r.offsetTop||0,r=r.offsetParent;return{x:t,y:n}}var n,r,i=this,o=i.dom,a=o.getRoot(),s,l;if("BODY"!=a.nodeName){var c=i.getScrollContainer();if(c)return n=t(e).y-t(c).y,l=c.clientHeight,s=c.scrollTop,void((s>n||n+25>s+l)&&(c.scrollTop=s>n?n:n-l+25))}r=o.getViewPort(i.editor.getWin()),n=o.getPos(e).y,s=r.y,l=r.h,(ns+l)&&i.editor.getWin().scrollTo(0,s>n?n:n-l+25)},_moveEndPoint:function(t,n,r){var i=n,a=new e(n,i),s=this.dom.schema.getNonEmptyElements();do{if(3==n.nodeType&&0!==u(n.nodeValue).length)return void(r?t.setStart(n,0):t.setEnd(n,n.nodeValue.length));if(s[n.nodeName])return void(r?t.setStartBefore(n):"BR"==n.nodeName?t.setEndBefore(n):t.setEndAfter(n));if(o.ie&&o.ie<11&&this.dom.isBlock(n)&&this.dom.isEmpty(n))return void(r?t.setStart(n,0):t.setEnd(n,0))}while(n=r?a.next():a.prev());"BODY"==i.nodeName&&(r?t.setStart(i,0):t.setEnd(i,i.childNodes.length))},destroy:function(){this.win=null,this.controlSelection.destroy()}},s}),r(D,[f,B,p],function(e,t,n){return function(r){function i(e){return e.nodeType&&(e=e.nodeName),!!r.schema.getTextBlockElements()[e.toLowerCase()]}function o(e,t){return I.getParents(e,t,I.getRoot())}function a(e){return 1===e.nodeType&&"_mce_caret"===e.id}function s(){u({alignleft:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"left"},defaultBlock:"div"},{selector:"img,table",collapsed:!1,styles:{"float":"left"}}],aligncenter:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"center"},defaultBlock:"div"},{selector:"img",collapsed:!1,styles:{display:"block",marginLeft:"auto",marginRight:"auto"}},{selector:"table",collapsed:!1,styles:{marginLeft:"auto",marginRight:"auto"}}],alignright:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"right"},defaultBlock:"div"},{selector:"img,table",collapsed:!1,styles:{"float":"right"}}],alignjustify:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"justify"},defaultBlock:"div"}],bold:[{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}},{inline:"b",remove:"all"}],italic:[{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}},{inline:"i",remove:"all"}],underline:[{inline:"span",styles:{textDecoration:"underline"},exact:!0},{inline:"u",remove:"all"}],strikethrough:[{inline:"span",styles:{textDecoration:"line-through"},exact:!0},{inline:"strike",remove:"all"}],forecolor:{inline:"span",styles:{color:"%value"},wrap_links:!1},hilitecolor:{inline:"span",styles:{backgroundColor:"%value"},wrap_links:!1},fontname:{inline:"span",styles:{fontFamily:"%value"}},fontsize:{inline:"span",styles:{fontSize:"%value"}},fontsize_class:{inline:"span",attributes:{"class":"%value"}},blockquote:{block:"blockquote",wrapper:1,remove:"all"},subscript:{inline:"sub"},superscript:{inline:"sup"},code:{inline:"code"},link:{inline:"a",selector:"a",remove:"all",split:!0,deep:!0,onmatch:function(){return!0},onformat:function(e,t,n){et(n,function(t,n){I.setAttrib(e,n,t)})}},removeformat:[{selector:"b,strong,em,i,font,u,strike,sub,sup,dfn,code,samp,kbd,var,cite,mark,q",remove:"all",split:!0,expand:!1,block_expand:!0,deep:!0},{selector:"span",attributes:["style","class"],remove:"empty",split:!0,expand:!1,deep:!0},{selector:"*",attributes:["style","class"],split:!1,expand:!1,deep:!0}]}),et("p h1 h2 h3 h4 h5 h6 div address pre div dt dd samp".split(/\s/),function(e){u(e,{block:e,remove:"all"})}),u(r.settings.formats)}function l(){r.addShortcut("ctrl+b","bold_desc","Bold"),r.addShortcut("ctrl+i","italic_desc","Italic"),r.addShortcut("ctrl+u","underline_desc","Underline");for(var e=1;6>=e;e++)r.addShortcut("ctrl+"+e,"",["FormatBlock",!1,"h"+e]);r.addShortcut("ctrl+7","",["FormatBlock",!1,"p"]),r.addShortcut("ctrl+8","",["FormatBlock",!1,"div"]),r.addShortcut("ctrl+9","",["FormatBlock",!1,"address"])}function c(e){return e?O[e]:O}function u(e,t){e&&("string"!=typeof e?et(e,function(e,t){u(t,e)}):(t=t.length?t:[t],et(t,function(e){e.deep===X&&(e.deep=!e.selector),e.split===X&&(e.split=!e.selector||e.inline),e.remove===X&&e.selector&&!e.inline&&(e.remove="none"),e.selector&&e.inline&&(e.mixed=!0,e.block_expand=!0),"string"==typeof e.classes&&(e.classes=e.classes.split(/\s+/))}),O[e]=t))}function d(e){var t;return r.dom.getParent(e,function(e){return t=r.dom.getStyle(e,"text-decoration"),t&&"none"!==t}),t}function f(e){var t;1===e.nodeType&&e.parentNode&&1===e.parentNode.nodeType&&(t=d(e.parentNode),r.dom.getStyle(e,"color")&&t?r.dom.setStyle(e,"text-decoration",t):r.dom.getStyle(e,"textdecoration")===t&&r.dom.setStyle(e,"text-decoration",null))}function p(t,n,o){function s(e,t){t=t||h,e&&(t.onformat&&t.onformat(e,t,n,o),et(t.styles,function(t,r){I.setStyle(e,r,E(t,n))}),et(t.attributes,function(t,r){I.setAttrib(e,r,E(t,n))}),et(t.classes,function(t){t=E(t,n),I.hasClass(e,t)||I.addClass(e,t)}))}function l(){function t(t,n){var r=new e(n);for(o=r.current();o;o=r.prev())if(o.childNodes.length>1||o==t||"BR"==o.tagName)return o}var n=r.selection.getRng(),i=n.startContainer,a=n.endContainer;if(i!=a&&0===n.endOffset){var s=t(i,a),l=3==s.nodeType?s.length:s.childNodes.length;n.setEnd(s,l)}return n}function u(e,t,n,r,i){var o=[],a=-1,s,l=-1,c=-1,u;return et(e.childNodes,function(e,t){return"UL"===e.nodeName||"OL"===e.nodeName?(a=t,s=e,!1):void 0}),et(e.childNodes,function(e,n){"SPAN"===e.nodeName&&"bookmark"==I.getAttrib(e,"data-mce-type")&&(e.id==t.id+"_start"?l=n:e.id==t.id+"_end"&&(c=n))}),0>=a||a>l&&c>a?(et(tt(e.childNodes),i),0):(u=I.clone(n,K),et(tt(e.childNodes),function(e,t){(a>l&&a>t||l>a&&t>a)&&(o.push(e),e.parentNode.removeChild(e))}),a>l?e.insertBefore(u,s):l>a&&e.insertBefore(u,s.nextSibling),r.push(u),et(o,function(e){u.appendChild(e)}),u)}function d(e,r,o){var l=[],c,d,f=!0;c=h.inline||h.block,d=I.create(c),s(d),z.walk(e,function(e){function p(e){var y,C,x,_,N;return N=f,y=e.nodeName.toLowerCase(),C=e.parentNode.nodeName.toLowerCase(),1===e.nodeType&&J(e)&&(N=f,f="true"===J(e),_=!0),w(y,"br")?(v=0,void(h.block&&I.remove(e))):h.wrapper&&g(e,t,n)?void(v=0):f&&!_&&h.block&&!h.wrapper&&i(y)&&W(C,c)?(e=I.rename(e,c),s(e),l.push(e),void(v=0)):h.selector&&(et(m,function(t){"collapsed"in t&&t.collapsed!==b||I.is(e,t.selector)&&!a(e)&&(s(e,t),x=!0)}),!h.inline||x)?void(v=0):void(!f||_||!W(c,y)||!W(C,c)||!o&&3===e.nodeType&&1===e.nodeValue.length&&65279===e.nodeValue.charCodeAt(0)||a(e)||h.inline&&V(e)?"li"==y&&r?v=u(e,r,d,l,p):(v=0,et(tt(e.childNodes),p),_&&(f=N),v=0):(v||(v=I.clone(d,K),e.parentNode.insertBefore(v,e),l.push(v)),v.appendChild(e)))}var v;et(e,p)}),h.wrap_links===!1&&et(l,function(e){function t(e){var n,r,i;if("A"===e.nodeName){for(r=I.clone(d,K),l.push(r),i=tt(e.childNodes),n=0;n1||!V(e))&&0===o)return void I.remove(e,1);if(h.inline||h.wrapper){if(h.exact||1!==o||(e=i(e)),et(m,function(t){et(I.select(t.inline,e),function(e){var r;if(!L(e)){if(t.wrap_links===!1){r=e.parentNode;do if("A"===r.nodeName)return;while(r=r.parentNode)}R(t,n,e,t.exact?e:null)}})}),g(e.parentNode,t,n))return I.remove(e,1),e=0,Y;h.merge_with_parents&&I.getParent(e.parentNode,function(r){return g(r,t,n)?(I.remove(e,1),e=0,Y):void 0}),e&&h.merge_siblings!==!1&&(e=D(B(e),e),e=D(e,B(e,Y)))}})}var m=c(t),h=m[0],v,y,b=!o&&F.isCollapsed();if(h)if(o)o.nodeType?(y=I.createRng(),y.setStartBefore(o),y.setEndAfter(o),d(T(y,m),null,!0)):d(o,null,!0);else if(b&&h.inline&&!I.select("td.mce-item-selected,th.mce-item-selected").length)H("apply",t,n);else{var C=r.selection.getNode();U||!m[0].defaultBlock||I.getParent(C,I.isBlock)||p(m[0].defaultBlock),r.selection.setRng(l()),v=F.getBookmark(),d(T(F.getRng(Y),m),v),h.styles&&(h.styles.color||h.styles.textDecoration)&&(nt(C,f,"childNodes"),f(C)),F.moveToBookmark(v),P(F.getRng(Y)),r.nodeChanged()}}function m(e,t,n){function i(e){var n,r,o,a,s;if(1===e.nodeType&&J(e)&&(a=b,b="true"===J(e),s=!0),n=tt(e.childNodes),b&&!s)for(r=0,o=p.length;o>r&&!R(p[r],t,e,e);r++);if(m.deep&&n.length){for(r=0,o=n.length;o>r;r++)i(n[r]);s&&(b=a)}}function a(n){var r;return et(o(n.parentNode).reverse(),function(n){var i;r||"_start"==n.id||"_end"==n.id||(i=g(n,e,t),i&&i.split!==!1&&(r=n))}),r}function s(e,n,r,i){var o,a,s,l,c,u;if(e){for(u=e.parentNode,o=n.parentNode;o&&o!=u;o=o.parentNode){for(a=I.clone(o,K),c=0;c=0;a--){if(s=t[a].selector,!s||t[a].defaultBlock)return Y;for(i=r.length-1;i>=0;i--)if(I.is(r[i],s))return Y}return K}function C(e,t,n){var i;return G||(G={},i={},r.on("NodeChange",function(e){var t=o(e.element),n={};et(G,function(e,r){et(t,function(o){return g(o,r,{},e.similar)?(i[r]||(et(e,function(e){e(!0,{node:o,format:r,parents:t})}),i[r]=e),n[r]=e,!1):void 0})}),et(i,function(r,o){n[o]||(delete i[o],et(r,function(n){n(!1,{node:e.element,format:o,parents:t})}))})})),et(e.split(","),function(e){G[e]||(G[e]=[],G[e].similar=n),G[e].push(t)}),this}function x(e,t){return w(e,t.inline)?Y:w(e,t.block)?Y:t.selector?1==e.nodeType&&I.is(e,t.selector):void 0}function w(e,t){return e=e||"",t=t||"",e=""+(e.nodeName||e),t=""+(t.nodeName||t),e.toLowerCase()==t.toLowerCase()}function _(e,t){return N(I.getStyle(e,t),t)}function N(e,t){return("color"==t||"backgroundColor"==t)&&(e=I.toHex(e)),"fontWeight"==t&&700==e&&(e="bold"),"fontFamily"==t&&(e=e.replace(/[\'\"]/g,"").replace(/,\s+/g,",")),""+e}function E(e,t){return"string"!=typeof e?e=e(t):t&&(e=e.replace(/%(\w+)/g,function(e,n){return t[n]||e})),e}function S(e){return e&&3===e.nodeType&&/^([\t \r\n]+|)$/.test(e.nodeValue)}function k(e,t,n){var r=I.create(t,n);return e.parentNode.insertBefore(r,e),r.appendChild(e),r}function T(t,n,a){function s(e){function t(e){return"BR"==e.nodeName&&e.getAttribute("data-mce-bogus")&&!e.nextSibling}var r,i,o,a,s;if(r=i=e?g:y,a=e?"previousSibling":"nextSibling",s=I.getRoot(),3==r.nodeType&&!S(r)&&(e?v>0:br?n:r,-1===n||a||n++):(n=o.indexOf(" ",t),r=o.indexOf("\xa0",t),n=-1!==n&&(-1===r||r>n)?n:r),n}var s,l,c,u;if(3===t.nodeType){if(c=o(t,n),-1!==c)return{container:t,offset:c};u=t}for(s=new e(t,I.getParent(t,V)||r.getBody());l=s[i?"prev":"next"]();)if(3===l.nodeType){if(u=l,c=o(l),-1!==c)return{container:l,offset:c}}else if(V(l))break;return u?(n=i?0:u.length,{container:u,offset:n}):void 0}function d(e,r){var i,a,s,l;for(3==e.nodeType&&0===e.nodeValue.length&&e[r]&&(e=e[r]),i=o(e),a=0;ap?p:v],3==g.nodeType&&(v=0)),1==y.nodeType&&y.hasChildNodes()&&(p=y.childNodes.length-1,y=y.childNodes[b>p?p:b-1],3==y.nodeType&&(b=y.nodeValue.length)),g=c(g),y=c(y),(L(g.parentNode)||L(g))&&(g=L(g)?g:g.parentNode,g=g.nextSibling||g,3==g.nodeType&&(v=0)),(L(y.parentNode)||L(y))&&(y=L(y)?y:y.parentNode,y=y.previousSibling||y,3==y.nodeType&&(b=y.length)),n[0].inline&&(t.collapsed&&(h=u(g,v,!0),h&&(g=h.container,v=h.offset),h=u(y,b),h&&(y=h.container,b=h.offset)),m=l(y,b),m.node)){for(;m.node&&0===m.offset&&m.node.previousSibling;)m=l(m.node.previousSibling);m.node&&m.offset>0&&3===m.node.nodeType&&" "===m.node.nodeValue.charAt(m.offset-1)&&m.offset>1&&(y=m.node,y.splitText(m.offset-1))}return(n[0].inline||n[0].block_expand)&&(n[0].inline&&3==g.nodeType&&0!==v||(g=s(!0)),n[0].inline&&3==y.nodeType&&b!==y.nodeValue.length||(y=s())),n[0].selector&&n[0].expand!==K&&!n[0].inline&&(g=d(g,"previousSibling"),y=d(y,"nextSibling")),(n[0].block||n[0].selector)&&(g=f(g,"previousSibling"),y=f(y,"nextSibling"),n[0].block&&(V(g)||(g=s(!0)),V(y)||(y=s()))),1==g.nodeType&&(v=q(g),g=g.parentNode),1==y.nodeType&&(b=q(y)+1,y=y.parentNode),{startContainer:g,startOffset:v,endContainer:y,endOffset:b}}function R(e,t,n,r){var i,o,a;if(!x(n,e))return K;if("all"!=e.remove)for(et(e.styles,function(e,i){e=N(E(e,t),i),"number"==typeof i&&(i=e,r=0),(!r||w(_(r,i),e))&&I.setStyle(n,i,""),a=1}),a&&""===I.getAttrib(n,"style")&&(n.removeAttribute("style"),n.removeAttribute("data-mce-style")),et(e.attributes,function(e,i){var o;if(e=E(e,t),"number"==typeof i&&(i=e,r=0),!r||w(I.getAttrib(r,i),e)){if("class"==i&&(e=I.getAttrib(n,i),e&&(o="",et(e.split(/\s+/),function(e){/mce\w+/.test(e)&&(o+=(o?" ":"")+e)}),o)))return void I.setAttrib(n,i,o);"class"==i&&n.removeAttribute("className"),j.test(i)&&n.removeAttribute("data-mce-"+i),n.removeAttribute(i)}}),et(e.classes,function(e){e=E(e,t),(!r||I.hasClass(r,e))&&I.removeClass(n,e)}),o=I.getAttribs(n),i=0;ia?a:o]),3===i.nodeType&&n&&o>=i.nodeValue.length&&(i=new e(i,r.getBody()).next()||i),3!==i.nodeType||n||0!==o||(i=new e(i,r.getBody()).prev()||i),i}function H(t,n,o){function a(e){var t=I.create("span",{id:y,"data-mce-bogus":!0,style:b?"color:red":""});return e&&t.appendChild(r.getDoc().createTextNode($)),t}function s(e,t){for(;e;){if(3===e.nodeType&&e.nodeValue!==$||e.childNodes.length>1)return!1;t&&1===e.nodeType&&t.push(e),e=e.firstChild}return!0}function l(e){for(;e;){if(e.id===y)return e;e=e.parentNode}}function u(t){var n;if(t)for(n=new e(t,t),t=n.current();t;t=n.next())if(3===t.nodeType)return t}function d(e,t){var n,r;if(e)r=F.getRng(!0),s(e)?(t!==!1&&(r.setStartBefore(e),r.setEndBefore(e)),I.remove(e)):(n=u(e),n.nodeValue.charAt(0)===$&&(n=n.deleteData(0,1)),I.remove(e,1)),F.setRng(r);else if(e=l(F.getStart()),!e)for(;e=I.get(y);)d(e,!1)}function f(){var e,t,r,i,s,d,f;e=F.getRng(!0),i=e.startOffset,d=e.startContainer,f=d.nodeValue,t=l(F.getStart()),t&&(r=u(t)),f&&i>0&&i=0;p--)u.appendChild(I.clone(f[p],!1)),u=u.firstChild;u.appendChild(I.doc.createTextNode($)),u=u.firstChild;var v=I.getParent(d,i);v&&I.isEmpty(v)?d.parentNode.replaceChild(h,d):I.insertAfter(h,d),F.setCursorLocation(u,1),I.isEmpty(d)&&I.remove(d)}}function v(){var e;e=l(F.getStart()),e&&!I.isEmpty(e)&&nt(e,function(e){1!=e.nodeType||e.id===y||I.isEmpty(e)||I.setAttrib(e,"data-mce-bogus",null)},"childNodes")}var y="_mce_caret",b=r.settings.caret_debug;r._hasCaretEvents||(Z=function(){var e=[],t;if(s(l(F.getStart()),e))for(t=e.length;t--;)I.setAttrib(e[t],"data-mce-bogus","1")},Q=function(e){var t=e.keyCode;d(),(8==t||37==t||39==t)&&d(l(F.getStart())),v()},r.on("SetContent",function(e){e.selection&&v()}),r._hasCaretEvents=!0),"apply"==t?f():h()}function P(t){var n=t.startContainer,r=t.startOffset,i,o,a,s,l;if(3==n.nodeType&&r>=n.nodeValue.length&&(r=q(n),n=n.parentNode,i=!0),1==n.nodeType)for(s=n.childNodes,n=s[Math.min(r,s.length-1)],o=new e(n,I.getParent(n,I.isBlock)),(r>s.length-1||i)&&o.next(),a=o.current();a;a=o.next())if(3==a.nodeType&&!S(a))return l=I.create("a",null,$),a.parentNode.insertBefore(l,a),t.setStart(a,0),F.setRng(t),void I.remove(l)}var O={},I=r.dom,F=r.selection,z=new t(I),W=r.schema.isValidChild,V=I.isBlock,U=r.settings.forced_root_block,q=I.nodeIndex,$="\ufeff",j=/^(src|href|style)$/,K=!1,Y=!0,G,X,J=I.getContentEditable,Q,Z,et=n.each,tt=n.grep,nt=n.walk,rt=n.extend;rt(this,{get:c,register:u,apply:p,remove:m,toggle:h,match:v,matchAll:y,matchNode:g,canApply:b,formatChanged:C}),s(),l(),r.on("BeforeGetContent",function(){Z&&Z()}),r.on("mouseup keydown",function(e){Q&&Q(e)})}}),r(M,[g,p],function(e,t){var n=t.trim,r;return r=new RegExp(["]+data-mce-bogus[^>]+>[\u200b\ufeff]+<\\/span>","]+data-mce-bogus[^>]+><\\/div>",'\\s?data-mce-selected="[^"]+"'].join("|"),"gi"),function(t){function i(){return n(t.getContent({format:"raw",no_events:1}).replace(r,""))}function o(e){a.typing=!1,a.add({},e)}var a=this,s=0,l=[],c,u,d;return t.on("init",function(){a.add()}),t.on("BeforeExecCommand",function(e){var t=e.command;"Undo"!=t&&"Redo"!=t&&"mceRepaint"!=t&&a.beforeChange()}),t.on("ExecCommand",function(e){var t=e.command;"Undo"!=t&&"Redo"!=t&&"mceRepaint"!=t&&o(e)}),t.on("ObjectResizeStart",function(){a.beforeChange()}),t.on("SaveContent ObjectResized blur",o),t.dom.bind(t.dom.getRoot(),"dragend",o),t.on("KeyUp",function(n){var r=n.keyCode;(r>=33&&36>=r||r>=37&&40>=r||45==r||13==r||n.ctrlKey)&&(o(),t.nodeChanged()),(46==r||8==r||e.mac&&(91==r||93==r))&&t.nodeChanged(),u&&a.typing&&(t.isDirty()||(t.isNotDirty=!l[0]||i()==l[0].content,t.isNotDirty||t.fire("change",{level:l[0],lastLevel:null})),t.fire("TypingUndo"),u=!1,t.nodeChanged())}),t.on("KeyDown",function(e){var t=e.keyCode;return t>=33&&36>=t||t>=37&&40>=t||45==t?void(a.typing&&o(e)):void((16>t||t>20)&&224!=t&&91!=t&&!a.typing&&(a.beforeChange(),a.typing=!0,a.add({},e),u=!0))}),t.on("MouseDown",function(e){a.typing&&o(e)}),t.addShortcut("ctrl+z","","Undo"),t.addShortcut("ctrl+y,ctrl+shift+z","","Redo"),t.on("AddUndo Undo Redo ClearUndos MouseUp",function(e){e.isDefaultPrevented()||t.nodeChanged()}),a={data:l,typing:!1,beforeChange:function(){d||(c=t.selection.getBookmark(2,!0))},add:function(e,n){var r,o=t.settings,a;if(e=e||{},e.content=i(),d||t.removed)return null;if(t.fire("BeforeAddUndo",{level:e,originalEvent:n}).isDefaultPrevented())return null;if(a=l[s],a&&a.content==e.content)return null;if(l[s]&&(l[s].beforeBookmark=c),o.custom_undo_redo_levels&&l.length>o.custom_undo_redo_levels){for(r=0;r0&&(t.isNotDirty=!1,t.fire("change",u)),e},undo:function(){var e;return a.typing&&(a.add(),a.typing=!1),s>0&&(e=l[--s],0===s&&(t.isNotDirty=!0),t.setContent(e.content,{format:"raw"}),t.selection.moveToBookmark(e.beforeBookmark),t.fire("undo",{level:e})),e},redo:function(){var e;return s0||a.typing&&l[0]&&i()!=l[0].content},hasRedo:function(){return sL)&&(u=a.create("br"),t.parentNode.insertBefore(u,t)),l.setStartBefore(t),l.setEndBefore(t)):(l.setStartAfter(t),l.setEndAfter(t)):(l.setStart(t,0),l.setEnd(t,0));s.setRng(l),a.remove(u),s.scrollIntoView(t)}function g(e){var t=l.forced_root_block;t&&t.toLowerCase()===e.tagName.toLowerCase()&&a.setAttribs(e,l.forced_root_block_attrs)}function v(e){var t=R,n,i,o;if(e||"TABLE"==O?(n=a.create(e||F),g(n)):n=B.cloneNode(!1),o=n,l.keep_styles!==!1)do if(/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U|VAR|CITE|DFN|CODE|MARK|Q|SUP|SUB|SAMP)$/.test(t.nodeName)){if("_mce_caret"==t.id)continue;i=t.cloneNode(!1),a.setAttrib(i,"id",""),n.hasChildNodes()?(i.appendChild(n.firstChild),n.appendChild(i)):(o=i,n.appendChild(i))}while(t=t.parentNode);return r||(o.innerHTML='
    '),n}function y(t){var n,r,i;if(3==R.nodeType&&(t?A>0:A0)return!0}function w(){var e,t,n;R&&3==R.nodeType&&A>=R.nodeValue.length&&(r||x()||(e=a.create("br"),S.insertNode(e),S.setStartAfter(e),S.setEndAfter(e),t=!0)),e=a.create("br"),S.insertNode(e),r&&"PRE"==O&&(!L||8>L)&&e.parentNode.insertBefore(a.doc.createTextNode("\r"),e),n=a.create("span",{}," "),e.parentNode.insertBefore(n,e),s.scrollIntoView(n),a.remove(n),t?(S.setStartBefore(e),S.setEndBefore(e)):(S.setStartAfter(e),S.setEndAfter(e)),s.setRng(S),c.add()}function _(e){do 3===e.nodeType&&(e.nodeValue=e.nodeValue.replace(/^[\r\n]+/,"")),e=e.firstChild;while(e)}function N(e){var t=a.getRoot(),n,r;for(n=e;n!==t&&"false"!==a.getContentEditable(n);)"true"===a.getContentEditable(n)&&(r=n),n=n.parentNode;return n!==t?r:t}function E(e){var t;r||(e.normalize(),t=e.lastChild,(!t||/^(left|right)$/gi.test(a.getStyle(t,"float",!0)))&&a.add(e,"br"))}var S,k,T,R,A,B,L,D,M,H,P,O,I,F,z;if(S=s.getRng(!0),!o.isDefaultPrevented()){if(!S.collapsed)return void i.execCommand("Delete");if(new t(a).normalize(S),R=S.startContainer,A=S.startOffset,F=(l.force_p_newlines?"p":"")||l.forced_root_block,F=F?F.toUpperCase():"",L=a.doc.documentMode,D=o.shiftKey,1==R.nodeType&&R.hasChildNodes()&&(z=A>R.childNodes.length-1,R=R.childNodes[Math.min(A,R.childNodes.length-1)]||R,A=z&&3==R.nodeType?R.nodeValue.length:0),T=N(R)){if(c.beforeChange(),!a.isBlock(T)&&T!=a.getRoot())return void((!F||D)&&w());if((F&&!D||!F&&D)&&(R=b(R,A)),B=a.getParent(R,a.isBlock),P=B?a.getParent(B.parentNode,a.isBlock):null,O=B?B.nodeName.toUpperCase():"",I=P?P.nodeName.toUpperCase():"","LI"!=I||o.ctrlKey||(B=P,O=I),"LI"==O){if(!F&&D)return void w();if(a.isEmpty(B))return void C()}if("PRE"==O&&l.br_in_pre!==!1){if(!D)return void w()}else if(!F&&!D&&"LI"!=O||F&&D)return void w();F&&B===i.getBody()||(F=F||"P",y()?(M=/^(H[1-6]|PRE|FIGURE)$/.test(O)&&"HGROUP"!=I?v(F):v(),l.end_container_on_empty_block&&f(P)&&a.isEmpty(B)?M=a.split(P,B):a.insertAfter(M,B),h(M)):y(!0)?(M=B.parentNode.insertBefore(v(),B),p(M),h(B)):(k=S.cloneRange(),k.setEndAfter(B),H=k.extractContents(),_(H),M=H.firstChild,a.insertAfter(H,B),m(M),E(B),h(M)),a.setAttrib(M,"id",""),i.fire("NewBlock",{newBlock:M}),c.add())}}}var a=i.dom,s=i.selection,l=i.settings,c=i.undoManager,u=i.schema,d=u.getNonEmptyElements();i.on("keydown",function(e){13==e.keyCode&&o(e)!==!1&&e.preventDefault()})}}),r(P,[],function(){return function(e){function t(){var t=i.getStart(),s=e.getBody(),l,c,u,d,f,p,m,h=-16777215,g,v,y,b,C;if(C=n.forced_root_block,t&&1===t.nodeType&&C){for(;t&&t!=s;){if(a[t.nodeName])return;t=t.parentNode}if(l=i.getRng(),l.setStart){c=l.startContainer,u=l.startOffset,d=l.endContainer,f=l.endOffset;try{v=e.getDoc().activeElement===s}catch(x){}}else l.item&&(t=l.item(0),l=e.getDoc().body.createTextRange(),l.moveToElementText(t)),v=l.parentElement().ownerDocument===e.getDoc(),y=l.duplicate(),y.collapse(!0),u=-1*y.move("character",h),y.collapsed||(y=l.duplicate(),y.collapse(!1),f=-1*y.move("character",h)-u);for(t=s.firstChild,b=s.nodeName.toLowerCase();t;)if((3===t.nodeType||1==t.nodeType&&!a[t.nodeName])&&o.isValidChild(b,C.toLowerCase())){if(3===t.nodeType&&0===t.nodeValue.length){m=t,t=t.nextSibling,r.remove(m);continue}p||(p=r.create(C,e.settings.forced_root_block_attrs),t.parentNode.insertBefore(p,t),g=!0),m=t,t=t.nextSibling,p.appendChild(m)}else p=null,t=t.nextSibling;if(g&&v){if(l.setStart)l.setStart(c,u),l.setEnd(d,f),i.setRng(l);else try{l=e.getDoc().body.createTextRange(),l.moveToElementText(s),l.collapse(!0),l.moveStart("character",u),f>0&&l.moveEnd("character",f),l.select()}catch(x){}e.nodeChanged()}}}var n=e.settings,r=e.dom,i=e.selection,o=e.schema,a=o.getBlockElements();n.forced_root_block&&e.on("NodeChange",t)}}),r(O,[S,g,p],function(e,n,r){var i=r.each,o=r.extend,a=r.map,s=r.inArray,l=r.explode,c=n.gecko,u=n.ie,d=!0,f=!1;return function(r){function p(e,t,n){var r;return e=e.toLowerCase(),(r=N.exec[e])?(r(e,t,n),d):f}function m(e){var t;return e=e.toLowerCase(),(t=N.state[e])?t(e):-1}function h(e){var t;return e=e.toLowerCase(),(t=N.value[e])?t(e):f}function g(e,t){t=t||"exec",i(e,function(e,n){i(n.toLowerCase().split(","),function(n){N[t][n]=e})})}function v(e,n,i){return n===t&&(n=f),i===t&&(i=null),r.getDoc().execCommand(e,n,i)}function y(e){return S.match(e)}function b(e,n){S.toggle(e,n?{value:n}:t),r.nodeChanged()}function C(e){k=_.getBookmark(e)}function x(){_.moveToBookmark(k)}var w=r.dom,_=r.selection,N={state:{},exec:{},value:{}},E=r.settings,S=r.formatter,k;o(this,{execCommand:p,queryCommandState:m,queryCommandValue:h,addCommands:g}),g({"mceResetDesignMode,mceBeginUndoLevel":function(){},"mceEndUndoLevel,mceAddUndoLevel":function(){r.undoManager.add()},"Cut,Copy,Paste":function(e){var t=r.getDoc(),i;try{v(e)}catch(o){i=d}if(i||!t.queryCommandSupported(e)){var a=r.translate("Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.");n.mac&&(a=a.replace(/Ctrl\+/g,"\u2318+")),r.windowManager.alert(a)}},unlink:function(){if(_.isCollapsed()){var e=_.getNode();return void("A"==e.tagName&&r.dom.remove(e,!0))}S.remove("link")},"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(e){var t=e.substring(7);"full"==t&&(t="justify"),i("left,center,right,justify".split(","),function(e){t!=e&&S.remove("align"+e)}),b("align"+t),p("mceRepaint")},"InsertUnorderedList,InsertOrderedList":function(e){var t,n;v(e),t=w.getParent(_.getNode(),"ol,ul"),t&&(n=t.parentNode,/^(H[1-6]|P|ADDRESS|PRE)$/.test(n.nodeName)&&(C(),w.split(n,t),x()))},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(e){b(e)},"ForeColor,HiliteColor,FontName":function(e,t,n){b(e,n)},FontSize:function(e,t,n){var r,i;n>=1&&7>=n&&(i=l(E.font_size_style_values),r=l(E.font_size_classes),n=r?r[n-1]||n:i[n-1]||n),b(e,n)},RemoveFormat:function(e){S.remove(e)},mceBlockQuote:function(){b("blockquote")},FormatBlock:function(e,t,n){return b(n||"p")},mceCleanup:function(){var e=_.getBookmark();r.setContent(r.getContent({cleanup:d}),{cleanup:d}),_.moveToBookmark(e)},mceRemoveNode:function(e,t,n){var i=n||_.getNode();i!=r.getBody()&&(C(),r.dom.remove(i,d),x())},mceSelectNodeDepth:function(e,t,n){var i=0;w.getParent(_.getNode(),function(e){return 1==e.nodeType&&i++==n?(_.select(e),f):void 0},r.getBody())},mceSelectNode:function(e,t,n){_.select(n)},mceInsertContent:function(t,n,i){function o(e){function t(e){return r[e]&&3==r[e].nodeType}var n,r,i;return n=_.getRng(!0),r=n.startContainer,i=n.startOffset,3==r.nodeType&&(i>0?e=e.replace(/^ /," "):t("previousSibling")||(e=e.replace(/^ /," ")),i|)$/," "):t("nextSibling")||(e=e.replace(/( | )(
    |)$/," "))),e}var a,s,l,c,d,f,p,m,h,g,v;/^ | $/.test(i)&&(i=o(i)),a=r.parser,s=new e({},r.schema),v='ÈB;',f={content:i,format:"html",selection:!0},r.fire("BeforeSetContent",f),i=f.content,-1==i.indexOf("{$caret}")&&(i+="{$caret}"),i=i.replace(/\{\$caret\}/,v),m=_.getRng();var y=m.startContainer||(m.parentElement?m.parentElement():null),b=r.getBody();y===b&&_.isCollapsed()&&w.isBlock(b.firstChild)&&w.isEmpty(b.firstChild)&&(m=w.createRng(),m.setStart(b.firstChild,0),m.setEnd(b.firstChild,0),_.setRng(m)),_.isCollapsed()||r.getDoc().execCommand("Delete",!1,null),l=_.getNode();var C={context:l.nodeName.toLowerCase()};if(d=a.parse(i,C),h=d.lastChild,"mce_marker"==h.attr("id"))for(p=h,h=h.prev;h;h=h.walk(!0))if(3==h.type||!w.isBlock(h.name)){h.parent.insert(p,h,"br"===h.name);break}if(C.invalid){for(_.setContent(v),l=_.getNode(),c=r.getBody(),9==l.nodeType?l=h=c:h=l;h!==c;)l=h,h=h.parentNode;i=l==c?c.innerHTML:w.getOuterHTML(l),i=s.serialize(a.parse(i.replace(//i,function(){return s.serialize(d)}))),l==c?w.setHTML(c,i):w.setOuterHTML(l,i)}else i=s.serialize(d),h=l.firstChild,g=l.lastChild,!h||h===g&&"BR"===h.nodeName?w.setHTML(l,i):_.setContent(i);p=w.get("mce_marker"),_.scrollIntoView(p),m=w.createRng(),h=p.previousSibling,h&&3==h.nodeType?(m.setStart(h,h.nodeValue.length),u||(g=p.nextSibling,g&&3==g.nodeType&&(h.appendData(g.data),g.parentNode.removeChild(g)))):(m.setStartBefore(p),m.setEndBefore(p)),w.remove(p),_.setRng(m),r.fire("SetContent",f),r.addVisual()},mceInsertRawHTML:function(e,t,n){_.setContent("tiny_mce_marker"),r.setContent(r.getContent().replace(/tiny_mce_marker/g,function(){return n}))},mceToggleFormat:function(e,t,n){b(n)},mceSetContent:function(e,t,n){r.setContent(n)},"Indent,Outdent":function(e){var t,n,o;t=E.indentation,n=/[a-z%]+$/i.exec(t),t=parseInt(t,10),m("InsertUnorderedList")||m("InsertOrderedList")?v(e):(E.forced_root_block||w.getParent(_.getNode(),w.isBlock)||S.apply("div"),i(_.getSelectedBlocks(),function(i){if("LI"!=i.nodeName){var a=r.getParam("indent_use_margin",!1)?"margin":"padding";a+="rtl"==w.getStyle(i,"direction",!0)?"Right":"Left","outdent"==e?(o=Math.max(0,parseInt(i.style[a]||0,10)-t),w.setStyle(i,a,o?o+n:"")):(o=parseInt(i.style[a]||0,10)+t+n,w.setStyle(i,a,o))}}))},mceRepaint:function(){if(c)try{C(d),_.getSel()&&_.getSel().selectAllChildren(r.getBody()),_.collapse(d),x()}catch(e){}},InsertHorizontalRule:function(){r.execCommand("mceInsertContent",!1,"
    ")},mceToggleVisualAid:function(){r.hasVisual=!r.hasVisual,r.addVisual()},mceReplaceContent:function(e,t,n){r.execCommand("mceInsertContent",!1,n.replace(/\{\$selection\}/g,_.getContent({format:"text"})))},mceInsertLink:function(e,t,n){var r;"string"==typeof n&&(n={href:n}),r=w.getParent(_.getNode(),"a"),n.href=n.href.replace(" ","%20"),r&&n.href||S.remove("link"),n.href&&S.apply("link",n,r)},selectAll:function(){var e=w.getRoot(),t;_.getRng().setStart?(t=w.createRng(),t.setStart(e,0),t.setEnd(e,e.childNodes.length),_.setRng(t)):(t=_.getRng(),t.item||(t.moveToElementText(e),t.select()))},"delete":function(){v("Delete");var e=r.getBody();w.isEmpty(e)&&(r.setContent(""),e.firstChild&&w.isBlock(e.firstChild)?r.selection.setCursorLocation(e.firstChild,0):r.selection.setCursorLocation(e,0))},mceNewDocument:function(){r.setContent("")}}),g({"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(e){var t="align"+e.substring(7),n=_.isCollapsed()?[w.getParent(_.getNode(),w.isBlock)]:_.getSelectedBlocks(),r=a(n,function(e){return!!S.matchNode(e,t)});return-1!==s(r,d)},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(e){return y(e)},mceBlockQuote:function(){return y("blockquote")},Outdent:function(){var e;if(E.inline_styles){if((e=w.getParent(_.getStart(),w.isBlock))&&parseInt(e.style.paddingLeft,10)>0)return d;if((e=w.getParent(_.getEnd(),w.isBlock))&&parseInt(e.style.paddingLeft,10)>0)return d}return m("InsertUnorderedList")||m("InsertOrderedList")||!E.inline_styles&&!!w.getParent(_.getNode(),"BLOCKQUOTE")},"InsertUnorderedList,InsertOrderedList":function(e){var t=w.getParent(_.getNode(),"ul,ol");return t&&("insertunorderedlist"===e&&"UL"===t.tagName||"insertorderedlist"===e&&"OL"===t.tagName)}},"state"),g({"FontSize,FontName":function(e){var t=0,n;return(n=w.getParent(_.getNode(),"span"))&&(t="fontsize"==e?n.style.fontSize:n.style.fontFamily.replace(/, /g,",").replace(/[\'\"]/g,"").toLowerCase()),t}},"value"),g({Undo:function(){r.undoManager.undo()},Redo:function(){r.undoManager.redo()}})}}),r(I,[p],function(e){function t(e,i){var o=this,a,s;if(e=r(e),i=o.settings=i||{},/^([\w\-]+):([^\/]{2})/i.test(e)||/^\s*#/.test(e))return void(o.source=e);var l=0===e.indexOf("//");0!==e.indexOf("/")||l||(e=(i.base_uri?i.base_uri.protocol||"http":"http")+"://mce_host"+e),/^[\w\-]*:?\/\//.test(e)||(s=i.base_uri?i.base_uri.path:new t(location.href).directory,e=""===i.base_uri.protocol?"//mce_host"+o.toAbsPath(s,e):(i.base_uri&&i.base_uri.protocol||"http")+"://mce_host"+o.toAbsPath(s,e)),e=e.replace(/@@/g,"(mce_at)"),e=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(e),n(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],function(t,n){var r=e[n];r&&(r=r.replace(/\(mce_at\)/g,"@@")),o[t]=r}),a=i.base_uri,a&&(o.protocol||(o.protocol=a.protocol),o.userInfo||(o.userInfo=a.userInfo),o.port||"mce_host"!==o.host||(o.port=a.port),o.host&&"mce_host"!==o.host||(o.host=a.host),o.source=""),l&&(o.protocol="")}var n=e.each,r=e.trim;return t.prototype={setPath:function(e){var t=this;e=/^(.*?)\/?(\w+)?$/.exec(e),t.path=e[0],t.directory=e[1],t.file=e[2],t.source="",t.getURI()},toRelative:function(e){var n=this,r;if("./"===e)return e;if(e=new t(e,{base_uri:n}),"mce_host"!=e.host&&n.host!=e.host&&e.host||n.port!=e.port||n.protocol!=e.protocol&&""!==e.protocol)return e.getURI();var i=n.getURI(),o=e.getURI();return i==o||"/"==i.charAt(i.length-1)&&i.substr(0,i.length-1)==o?i:(r=n.toRelPath(n.path,e.path),e.query&&(r+="?"+e.query),e.anchor&&(r+="#"+e.anchor),r)},toAbsolute:function(e,n){return e=new t(e,{base_uri:this}),e.getURI(this.host==e.host&&this.protocol==e.protocol?n:0)},toRelPath:function(e,t){var n,r=0,i="",o,a;if(e=e.substring(0,e.lastIndexOf("/")),e=e.split("/"),n=t.split("/"),e.length>=n.length)for(o=0,a=e.length;a>o;o++)if(o>=n.length||e[o]!=n[o]){r=o+1;break}if(e.lengtho;o++)if(o>=e.length||e[o]!=n[o]){r=o+1;break}if(1===r)return t;for(o=0,a=e.length-(r-1);a>o;o++)i+="../";for(o=r-1,a=n.length;a>o;o++)i+=o!=r-1?"/"+n[o]:n[o]; +return i},toAbsPath:function(e,t){var r,i=0,o=[],a,s;for(a=/\/$/.test(t)?"/":"",e=e.split("/"),t=t.split("/"),n(e,function(e){e&&o.push(e)}),e=o,r=t.length-1,o=[];r>=0;r--)0!==t[r].length&&"."!==t[r]&&(".."!==t[r]?i>0?i--:o.push(t[r]):i++);return r=e.length-i,s=0>=r?o.reverse().join("/"):e.slice(0,r).join("/")+"/"+o.reverse().join("/"),0!==s.indexOf("/")&&(s="/"+s),a&&s.lastIndexOf("/")!==s.length-1&&(s+=a),s},getURI:function(e){var t,n=this;return(!n.source||e)&&(t="",e||(t+=n.protocol?n.protocol+"://":"//",n.userInfo&&(t+=n.userInfo+"@"),n.host&&(t+=n.host),n.port&&(t+=":"+n.port)),n.path&&(t+=n.path),n.query&&(t+="?"+n.query),n.anchor&&(t+="#"+n.anchor),n.source=t),n.source}},t}),r(F,[p],function(e){function t(){}var n=e.each,r=e.extend,i,o;return t.extend=i=function(e){function t(){var e,t,n,r=this;if(!o&&(r.init&&r.init.apply(r,arguments),t=r.Mixins))for(e=t.length;e--;)n=t[e],n.init&&n.init.apply(r,arguments)}function a(){return this}function s(e,t){return function(){var n=this,r=n._super,i;return n._super=c[e],i=t.apply(n,arguments),n._super=r,i}}var l=this,c=l.prototype,u,d,f;o=!0,u=new l,o=!1,e.Mixins&&(n(e.Mixins,function(t){t=t;for(var n in t)"init"!==n&&(e[n]=t[n])}),c.Mixins&&(e.Mixins=c.Mixins.concat(e.Mixins))),e.Methods&&n(e.Methods.split(","),function(t){e[t]=a}),e.Properties&&n(e.Properties.split(","),function(t){var n="_"+t;e[t]=function(e){var t=this,r;return e!==r?(t[n]=e,t):t[n]}}),e.Statics&&n(e.Statics,function(e,n){t[n]=e}),e.Defaults&&c.Defaults&&(e.Defaults=r({},c.Defaults,e.Defaults));for(d in e)f=e[d],u[d]="function"==typeof f&&c[d]?s(d,f):f;return t.prototype=u,t.constructor=t,t.extend=i,t},t}),r(z,[F],function(e){function t(e){for(var t=[],n=e.length,r;n--;)r=e[n],r.__checked||(t.push(r),r.__checked=1);for(n=t.length;n--;)delete t[n].__checked;return t}var n=/^([\w\\*]+)?(?:#([\w\\]+))?(?:\.([\w\\\.]+))?(?:\[\@?([\w\\]+)([\^\$\*!~]?=)([\w\\]+)\])?(?:\:(.+))?/i,r=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,i=/^\s*|\s*$/g,o,a=e.extend({init:function(e){function t(e){return e?(e=e.toLowerCase(),function(t){return"*"===e||t.type===e}):void 0}function o(e){return e?function(t){return t._name===e}:void 0}function a(e){return e?(e=e.split("."),function(t){for(var n=e.length;n--;)if(!t.hasClass(e[n]))return!1;return!0}):void 0}function s(e,t,n){return e?function(r){var i=r[e]?r[e]():"";return t?"="===t?i===n:"*="===t?i.indexOf(n)>=0:"~="===t?(" "+i+" ").indexOf(" "+n+" ")>=0:"!="===t?i!=n:"^="===t?0===i.indexOf(n):"$="===t?i.substr(i.length-n.length)===n:!1:!!n}:void 0}function l(e){var t;return e?(e=/(?:not\((.+)\))|(.+)/i.exec(e),e[1]?(t=u(e[1],[]),function(e){return!d(e,t)}):(e=e[2],function(t,n,r){return"first"===e?0===n:"last"===e?n===r-1:"even"===e?n%2===0:"odd"===e?n%2===1:t[e]?t[e]():!1})):void 0}function c(e,r,c){function u(e){e&&r.push(e)}var d;return d=n.exec(e.replace(i,"")),u(t(d[1])),u(o(d[2])),u(a(d[3])),u(s(d[4],d[5],d[6])),u(l(d[7])),r.psuedo=!!d[7],r.direct=c,r}function u(e,t){var n=[],i,o,a;do if(r.exec(""),o=r.exec(e),o&&(e=o[3],n.push(o[1]),o[2])){i=o[3];break}while(o);for(i&&u(i,t),e=[],a=0;a"!=n[a]&&e.push(c(n[a],[],">"===n[a-1]));return t.push(e),t}var d=this.match;this._selectors=u(e,[])},match:function(e,t){var n,r,i,o,a,s,l,c,u,d,f,p,m;for(t=t||this._selectors,n=0,r=t.length;r>n;n++){for(a=t[n],o=a.length,m=e,p=0,i=o-1;i>=0;i--)for(c=a[i];m;){if(c.psuedo)for(f=m.parent().items(),u=d=f.length;u--&&f[u]!==m;);for(s=0,l=c.length;l>s;s++)if(!c[s](m,u,d)){s=l+1;break}if(s===l){p++;break}if(i===o-1)break;m=m.parent()}if(p===o)return!0}return!1},find:function(e){function n(e,t,i){var o,a,s,l,c,u=t[i];for(o=0,a=e.length;a>o;o++){for(c=e[o],s=0,l=u.length;l>s;s++)if(!u[s](c,o,a)){s=l+1;break}if(s===l)i==t.length-1?r.push(c):c.items&&n(c.items(),t,i+1);else if(u.direct)return;c.items&&n(c.items(),t,i)}}var r=[],i,s,l=this._selectors;if(e.items){for(i=0,s=l.length;s>i;i++)n(e.items(),l[i],0);s>1&&(r=t(r))}return o||(o=a.Collection),new o(r)}});return a}),r(W,[p,z,F],function(e,t,n){var r,i,o=Array.prototype.push,a=Array.prototype.slice;return i={length:0,init:function(e){e&&this.add(e)},add:function(t){var n=this;return e.isArray(t)?o.apply(n,t):t instanceof r?n.add(t.toArray()):o.call(n,t),n},set:function(e){var t=this,n=t.length,r;for(t.length=0,t.add(e),r=t.length;n>r;r++)delete t[r];return t},filter:function(e){var n=this,i,o,a=[],s,l;for("string"==typeof e?(e=new t(e),l=function(t){return e.match(t)}):l=e,i=0,o=n.length;o>i;i++)s=n[i],l(s)&&a.push(s);return new r(a)},slice:function(){return new r(a.apply(this,arguments))},eq:function(e){return-1===e?this.slice(e):this.slice(e,+e+1)},each:function(t){return e.each(this,t),this},toArray:function(){return e.toArray(this)},indexOf:function(e){for(var t=this,n=t.length;n--&&t[n]!==e;);return n},reverse:function(){return new r(e.toArray(this).reverse())},hasClass:function(e){return this[0]?this[0].hasClass(e):!1},prop:function(e,t){var n=this,r,i;return t!==r?(n.each(function(n){n[e]&&n[e](t)}),n):(i=n[0],i&&i[e]?i[e]():void 0)},exec:function(t){var n=this,r=e.toArray(arguments).slice(1);return n.each(function(e){e[t]&&e[t].apply(e,r)}),n},remove:function(){for(var e=this.length;e--;)this[e].remove();return this}},e.each("fire on off show hide addClass removeClass append prepend before after reflow".split(" "),function(t){i[t]=function(){var n=e.toArray(arguments);return this.each(function(e){t in e&&e[t].apply(e,n)}),this}}),e.each("text name disabled active selected checked visible parent value data".split(" "),function(e){i[e]=function(t){return this.prop(e,t)}}),r=n.extend(i),t.Collection=r,r}),r(V,[p,y],function(e,t){return{id:function(){return t.DOM.uniqueId()},createFragment:function(e){return t.DOM.createFragment(e)},getWindowSize:function(){return t.DOM.getViewPort()},getSize:function(e){var t,n;if(e.getBoundingClientRect){var r=e.getBoundingClientRect();t=Math.max(r.width||r.right-r.left,e.offsetWidth),n=Math.max(r.height||r.bottom-r.bottom,e.offsetHeight)}else t=e.offsetWidth,n=e.offsetHeight;return{width:t,height:n}},getPos:function(e,n){return t.DOM.getPos(e,n)},getViewPort:function(e){return t.DOM.getViewPort(e)},get:function(e){return document.getElementById(e)},addClass:function(e,n){return t.DOM.addClass(e,n)},removeClass:function(e,n){return t.DOM.removeClass(e,n)},hasClass:function(e,n){return t.DOM.hasClass(e,n)},toggleClass:function(e,n,r){return t.DOM.toggleClass(e,n,r)},css:function(e,n,r){return t.DOM.setStyle(e,n,r)},on:function(e,n,r,i){return t.DOM.bind(e,n,r,i)},off:function(e,n,r){return t.DOM.unbind(e,n,r)},fire:function(e,n,r){return t.DOM.fire(e,n,r)},innerHtml:function(e,n){t.DOM.setHTML(e,n)}}}),r(U,[F,p,W,V],function(e,t,n,r){var i=t.makeMap("focusin focusout scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave wheel keydown keypress keyup contextmenu"," "),o={},a="onmousewheel"in document,s=!1,l=e.extend({Statics:{elementIdCache:o},isRtl:function(){return l.rtl},classPrefix:"mce-",init:function(e){var n=this,i,o;if(n.settings=e=t.extend({},n.Defaults,e),n._id=e.id||r.id(),n._text=n._name="",n._width=n._height=0,n._aria={role:e.role},i=e.classes)for(i=i.split(" "),i.map={},o=i.length;o--;)i.map[i[o]]=!0;n._classes=i||[],n.visible(!0),t.each("title text width height name classes visible disabled active value".split(" "),function(t){var r=e[t],i;r!==i?n[t](r):n["_"+t]===i&&(n["_"+t]=!1)}),n.on("click",function(){return n.disabled()?!1:void 0}),e.classes&&t.each(e.classes.split(" "),function(e){n.addClass(e)}),n.settings=e,n._borderBox=n.parseBox(e.border),n._paddingBox=n.parseBox(e.padding),n._marginBox=n.parseBox(e.margin),e.hidden&&n.hide()},Properties:"parent,title,text,width,height,disabled,active,name,value",Methods:"renderHtml",getContainerElm:function(){return document.body},getParentCtrl:function(e){for(var t,n=this.getRoot().controlIdLookup;e&&n&&!(t=n[e.id]);)e=e.parentNode;return t},parseBox:function(e){var t,n=10;if(e)return"number"==typeof e?(e=e||0,{top:e,left:e,bottom:e,right:e}):(e=e.split(" "),t=e.length,1===t?e[1]=e[2]=e[3]=e[0]:2===t?(e[2]=e[0],e[3]=e[1]):3===t&&(e[3]=e[1]),{top:parseInt(e[0],n)||0,right:parseInt(e[1],n)||0,bottom:parseInt(e[2],n)||0,left:parseInt(e[3],n)||0})},borderBox:function(){return this._borderBox},paddingBox:function(){return this._paddingBox},marginBox:function(){return this._marginBox},measureBox:function(e,t){function n(t){var n=document.defaultView;return n?(t=t.replace(/[A-Z]/g,function(e){return"-"+e}),n.getComputedStyle(e,null).getPropertyValue(t)):e.currentStyle[t]}function r(e){var t=parseFloat(n(e),10);return isNaN(t)?0:t}return{top:r(t+"TopWidth"),right:r(t+"RightWidth"),bottom:r(t+"BottomWidth"),left:r(t+"LeftWidth")}},initLayoutRect:function(){var e=this,t=e.settings,n,i,o=e.getEl(),a,s,l,c,u,d,f,p;n=e._borderBox=e._borderBox||e.measureBox(o,"border"),e._paddingBox=e._paddingBox||e.measureBox(o,"padding"),e._marginBox=e._marginBox||e.measureBox(o,"margin"),p=r.getSize(o),d=t.minWidth,f=t.minHeight,l=d||p.width,c=f||p.height,a=t.width,s=t.height,u=t.autoResize,u="undefined"!=typeof u?u:!a&&!s,a=a||l,s=s||c;var m=n.left+n.right,h=n.top+n.bottom,g=t.maxWidth||65535,v=t.maxHeight||65535;return e._layoutRect=i={x:t.x||0,y:t.y||0,w:a,h:s,deltaW:m,deltaH:h,contentW:a-m,contentH:s-h,innerW:a-m,innerH:s-h,startMinWidth:d||0,startMinHeight:f||0,minW:Math.min(l,g),minH:Math.min(c,v),maxW:g,maxH:v,autoResize:u,scrollW:0},e._lastLayoutRect={},i},layoutRect:function(e){var t=this,n=t._layoutRect,r,i,o,a,s,c;return n||(n=t.initLayoutRect()),e?(o=n.deltaW,a=n.deltaH,e.x!==s&&(n.x=e.x),e.y!==s&&(n.y=e.y),e.minW!==s&&(n.minW=e.minW),e.minH!==s&&(n.minH=e.minH),i=e.w,i!==s&&(i=in.maxW?n.maxW:i,n.w=i,n.innerW=i-o),i=e.h,i!==s&&(i=in.maxH?n.maxH:i,n.h=i,n.innerH=i-a),i=e.innerW,i!==s&&(i=in.maxW-o?n.maxW-o:i,n.innerW=i,n.w=i+o),i=e.innerH,i!==s&&(i=in.maxH-a?n.maxH-a:i,n.innerH=i,n.h=i+a),e.contentW!==s&&(n.contentW=e.contentW),e.contentH!==s&&(n.contentH=e.contentH),r=t._lastLayoutRect,(r.x!==n.x||r.y!==n.y||r.w!==n.w||r.h!==n.h)&&(c=l.repaintControls,c&&c.map&&!c.map[t._id]&&(c.push(t),c.map[t._id]=!0),r.x=n.x,r.y=n.y,r.w=n.w,r.h=n.h),t):n},repaint:function(){var e=this,t,n,r,i,o=0,a=0,s,l;l=document.createRange?function(e){return e}:Math.round,t=e.getEl().style,r=e._layoutRect,s=e._lastRepaintRect||{},i=e._borderBox,o=i.left+i.right,a=i.top+i.bottom,r.x!==s.x&&(t.left=l(r.x)+"px",s.x=r.x),r.y!==s.y&&(t.top=l(r.y)+"px",s.y=r.y),r.w!==s.w&&(t.width=l(r.w-o)+"px",s.w=r.w),r.h!==s.h&&(t.height=l(r.h-a)+"px",s.h=r.h),e._hasBody&&r.innerW!==s.innerW&&(n=e.getEl("body").style,n.width=l(r.innerW)+"px",s.innerW=r.innerW),e._hasBody&&r.innerH!==s.innerH&&(n=n||e.getEl("body").style,n.height=l(r.innerH)+"px",s.innerH=r.innerH),e._lastRepaintRect=s,e.fire("repaint",{},!1)},on:function(e,t){function n(e){var t,n;return function(i){return t||r.parents().each(function(r){var i=r.settings.callbacks;return i&&(t=i[e])?(n=r,!1):void 0}),t.call(n,i)}}var r=this,o,a,s,l;if(t)for("string"==typeof t&&(t=n(t)),s=e.toLowerCase().split(" "),l=s.length;l--;)e=s[l],o=r._bindings,o||(o=r._bindings={}),a=o[e],a||(a=o[e]=[]),a.push(t),i[e]&&(r._nativeEvents?r._nativeEvents[e]=!0:r._nativeEvents={name:!0},r._rendered&&r.bindPendingEvents());return r},off:function(e,t){var n=this,r,i=n._bindings,o,a,s,l;if(i)if(e)for(s=e.toLowerCase().split(" "),r=s.length;r--;){if(e=s[r],o=i[e],!e){for(a in i)i[a].length=0;return n}if(o)if(t)for(l=o.length;l--;)o[l]===t&&o.splice(l,1);else o.length=0}else n._bindings=[];return n},fire:function(e,t,n){function r(){return!1}function i(){return!0}var o=this,a,s,l,c;if(e=e.toLowerCase(),t=t||{},t.type||(t.type=e),t.control||(t.control=o),t.preventDefault||(t.preventDefault=function(){t.isDefaultPrevented=i},t.stopPropagation=function(){t.isPropagationStopped=i},t.stopImmediatePropagation=function(){t.isImmediatePropagationStopped=i},t.isDefaultPrevented=r,t.isPropagationStopped=r,t.isImmediatePropagationStopped=r),o._bindings&&(l=o._bindings[e]))for(a=0,s=l.length;s>a&&(t.isImmediatePropagationStopped()||l[a].call(o,t)!==!1);a++);if(n!==!1)for(c=o.parent();c&&!t.isPropagationStopped();)c.fire(e,t,!1),c=c.parent();return t},hasEventListeners:function(e){return e in this._bindings},parents:function(e){var t=this,r,i=new n;for(r=t.parent();r;r=r.parent())i.add(r);return e&&(i=i.filter(e)),i},next:function(){var e=this.parent().items();return e[e.indexOf(this)+1]},prev:function(){var e=this.parent().items();return e[e.indexOf(this)-1]},findCommonAncestor:function(e,t){for(var n;e;){for(n=t;n&&e!=n;)n=n.parent();if(e==n)break;e=e.parent()}return e},hasClass:function(e,t){var n=this._classes[t||"control"];return e=this.classPrefix+e,n&&!!n.map[e]},addClass:function(e,t){var n=this,r,i;return e=this.classPrefix+e,r=n._classes[t||"control"],r||(r=[],r.map={},n._classes[t||"control"]=r),r.map[e]||(r.map[e]=e,r.push(e),n._rendered&&(i=n.getEl(t),i&&(i.className=r.join(" ")))),n},removeClass:function(e,t){var n=this,r,i,o;if(e=this.classPrefix+e,r=n._classes[t||"control"],r&&r.map[e])for(delete r.map[e],i=r.length;i--;)r[i]===e&&r.splice(i,1);return n._rendered&&(o=n.getEl(t),o&&(o.className=r.join(" "))),n},toggleClass:function(e,t,n){var r=this;return t?r.addClass(e,n):r.removeClass(e,n),r},classes:function(e){var t=this._classes[e||"control"];return t?t.join(" "):""},innerHtml:function(e){return r.innerHtml(this.getEl(),e),this},getEl:function(e,t){var n,i=e?this._id+"-"+e:this._id;return n=o[i]=(t===!0?null:o[i])||r.get(i)},visible:function(e){var t=this,n;return"undefined"!=typeof e?(t._visible!==e&&(t._rendered&&(t.getEl().style.display=e?"":"none"),t._visible=e,n=t.parent(),n&&(n._lastRect=null),t.fire(e?"show":"hide")),t):t._visible},show:function(){return this.visible(!0)},hide:function(){return this.visible(!1)},focus:function(){try{this.getEl().focus()}catch(e){}return this},blur:function(){return this.getEl().blur(),this},aria:function(e,t){var n=this,r=n.getEl(n.ariaTarget);return"undefined"==typeof t?n._aria[e]:(n._aria[e]=t,n._rendered&&r.setAttribute("role"==e?e:"aria-"+e,t),n)},encode:function(e,t){return t!==!1&&l.translate&&(e=l.translate(e)),(e||"").replace(/[&<>"]/g,function(e){return"&#"+e.charCodeAt(0)+";"})},before:function(e){var t=this,n=t.parent();return n&&n.insert(e,n.items().indexOf(t),!0),t},after:function(e){var t=this,n=t.parent();return n&&n.insert(e,n.items().indexOf(t)),t},remove:function(){var e=this,t=e.getEl(),n=e.parent(),i,a;if(e.items){var s=e.items().toArray();for(a=s.length;a--;)s[a].remove()}n&&n.items&&(i=[],n.items().each(function(t){t!==e&&i.push(t)}),n.items().set(i),n._lastRect=null),e._eventsRoot&&e._eventsRoot==e&&r.off(t);var l=e.getRoot().controlIdLookup;if(l&&delete l[e._id],delete o[e._id],t&&t.parentNode){var c=t.getElementsByTagName("*");for(a=c.length;a--;)delete o[c[a].id];t.parentNode.removeChild(t)}return e._rendered=!1,e},renderBefore:function(e){var t=this;return e.parentNode.insertBefore(r.createFragment(t.renderHtml()),e),t.postRender(),t},renderTo:function(e){var t=this;return e=e||t.getContainerElm(),e.appendChild(r.createFragment(t.renderHtml())),t.postRender(),t},postRender:function(){var e=this,t=e.settings,n,i,o,a,s;for(a in t)0===a.indexOf("on")&&e.on(a.substr(2),t[a]);if(e._eventsRoot){for(o=e.parent();!s&&o;o=o.parent())s=o._eventsRoot;if(s)for(a in s._nativeEvents)e._nativeEvents[a]=!0}e.bindPendingEvents(),t.style&&(n=e.getEl(),n&&(n.setAttribute("style",t.style),n.style.cssText=t.style)),e._visible||r.css(e.getEl(),"display","none"),e.settings.border&&(i=e.borderBox(),r.css(e.getEl(),{"border-top-width":i.top,"border-right-width":i.right,"border-bottom-width":i.bottom,"border-left-width":i.left}));var l=e.getRoot();l.controlIdLookup||(l.controlIdLookup={}),l.controlIdLookup[e._id]=e;for(var c in e._aria)e.aria(c,e._aria[c]);e.fire("postrender",{},!1)},scrollIntoView:function(e){function t(e,t){var n,r,i=e;for(n=r=0;i&&i!=t&&i.nodeType;)n+=i.offsetLeft||0,r+=i.offsetTop||0,i=i.offsetParent;return{x:n,y:r}}var n=this.getEl(),r=n.parentNode,i,o,a,s,l,c,u=t(n,r);return i=u.x,o=u.y,a=n.offsetWidth,s=n.offsetHeight,l=r.clientWidth,c=r.clientHeight,"end"==e?(i-=l-a,o-=c-s):"center"==e&&(i-=l/2-a/2,o-=c/2-s/2),r.scrollLeft=i,r.scrollTop=o,this},bindPendingEvents:function(){function e(e){var t=o.getParentCtrl(e.target);t&&t.fire(e.type,e)}function t(){var e=d._lastHoverCtrl;e&&(e.fire("mouseleave",{target:e.getEl()}),e.parents().each(function(e){e.fire("mouseleave",{target:e.getEl()})}),d._lastHoverCtrl=null)}function n(e){var t=o.getParentCtrl(e.target),n=d._lastHoverCtrl,r=0,i,a,s;if(t!==n){if(d._lastHoverCtrl=t,a=t.parents().toArray().reverse(),a.push(t),n){for(s=n.parents().toArray().reverse(),s.push(n),r=0;r=r;i--)n=s[i],n.fire("mouseleave",{target:n.getEl()})}for(i=r;il;l++)d=u[l]._eventsRoot;for(d||(d=u[u.length-1]||o),o._eventsRoot=d,c=l,l=0;c>l;l++)u[l]._eventsRoot=d;for(p in f){if(!f)return!1;"wheel"!==p||s?("mouseenter"===p||"mouseleave"===p?d._hasMouseEnter||(r.on(d.getEl(),"mouseleave",t),r.on(d.getEl(),"mouseover",n),d._hasMouseEnter=1):d[p]||(r.on(d.getEl(),p,e),d[p]=!0),f[p]=!1):a?r.on(o.getEl(),"mousewheel",i):r.on(o.getEl(),"DOMMouseScroll",i)}}},getRoot:function(){for(var e=this,t,n=[];e;){if(e.rootControl){t=e.rootControl;break}n.push(e),t=e,e=e.parent()}t||(t=this);for(var r=n.length;r--;)n[r].rootControl=t;return t},reflow:function(){return this.repaint(),this}});return l}),r(q,[],function(){var e={},t;return{add:function(t,n){e[t.toLowerCase()]=n},has:function(t){return!!e[t.toLowerCase()]},create:function(n,r){var i,o,a;if(!t){a=tinymce.ui;for(o in a)e[o.toLowerCase()]=a[o];t=!0}if("string"==typeof n?(r=r||{},r.type=n):(r=n,n=r.type),n=n.toLowerCase(),i=e[n],!i)throw new Error("Could not find control by type: "+n);return i=new i(r),i.type=n,i}}}),r($,[],function(){return function(e){function t(e){return e=e||b,e&&e.getAttribute("role")}function n(e){for(var n,r=e||b;r=r.parentNode;)if(n=t(r))return n}function r(e){var t=b;return t?t.getAttribute("aria-"+e):void 0}function i(e){return"INPUT"==e.tagName||"TEXTAREA"==e.tagName}function o(e){return i(e)&&!e.hidden?!0:/^(button|menuitem|checkbox|tab|menuitemcheckbox|option|gridcell)$/.test(t(e))?!0:!1}function a(e){function t(e){if(1==e.nodeType&&"none"!=e.style.display){o(e)&&n.push(e);for(var r=0;re?e=t.length-1:e>=t.length&&(e=0),t[e]&&t[e].focus(),e}function u(e,t){var n=-1,r=s();t=t||a(r.getEl());for(var i=0;i=0&&(n=t.getEl(),n&&n.parentNode.removeChild(n),n=e.getEl(),n&&n.parentNode.removeChild(n)),t.parent(this)},create:function(t){var n=this,i,a=[];return o.isArray(t)||(t=[t]),o.each(t,function(t){t&&(t instanceof e||("string"==typeof t&&(t={type:t}),i=o.extend({},n.settings.defaults,t),t.type=i.type=i.type||t.type||n.settings.defaultType||(i.defaults?i.defaults.type:null),t=r.create(i)),a.push(t))}),a},renderNew:function(){var e=this;return e.items().each(function(t,n){var r,i;t.parent(e),t._rendered||(r=e.getEl("body"),i=a.createFragment(t.renderHtml()),r.hasChildNodes()&&n<=r.childNodes.length-1?r.insertBefore(i,r.childNodes[n]):r.appendChild(i),t.postRender())}),e._layout.applyClasses(e),e._lastRect=null,e},append:function(e){return this.add(e).renderNew()},prepend:function(e){var t=this;return t.items().set(t.create(e).concat(t.items().toArray())),t.renderNew()},insert:function(e,t,n){var r=this,i,o,a;return e=r.create(e),i=r.items(),!n&&t=0&&t
    '+(e.settings.html||"")+t.renderHtml(e)+"
    "},postRender:function(){var e=this,t;return e.items().exec("postRender"),e._super(),e._layout.postRender(e),e._rendered=!0,e.settings.style&&a.css(e.getEl(),e.settings.style),e.settings.border&&(t=e.borderBox(),a.css(e.getEl(),{"border-top-width":t.top,"border-right-width":t.right,"border-bottom-width":t.bottom,"border-left-width":t.left})),e.parent()||(e.keyboardNav=new i({root:e})),e},initLayoutRect:function(){var e=this,t=e._super();return e._layout.recalc(e),t},recalc:function(){var e=this,t=e._layoutRect,n=e._lastRect;return n&&n.w==t.w&&n.h==t.h?void 0:(e._layout.recalc(e),t=e.layoutRect(),e._lastRect={x:t.x,y:t.y,w:t.w,h:t.h},!0)},reflow:function(){var t;if(this.visible()){for(e.repaintControls=[],e.repaintControls.map={},this.recalc(),t=e.repaintControls.length;t--;)e.repaintControls[t].repaint();"flow"!==this.settings.layout&&"stack"!==this.settings.layout&&this.repaint(),e.repaintControls=[]}return this}})}),r(K,[V],function(e){function t(){var e=document,t,n,r,i,o,a,s,l,c=Math.max;return t=e.documentElement,n=e.body,r=c(t.scrollWidth,n.scrollWidth),i=c(t.clientWidth,n.clientWidth),o=c(t.offsetWidth,n.offsetWidth),a=c(t.scrollHeight,n.scrollHeight),s=c(t.clientHeight,n.clientHeight),l=c(t.offsetHeight,n.offsetHeight),{width:o>r?i:r,height:l>a?s:a}}return function(n,r){function i(){return a.getElementById(r.handle||n)}var o,a=document,s,l,c,u,d,f;r=r||{},l=function(n){var l=t(),p,m;n.preventDefault(),s=n.button,p=i(),d=n.screenX,f=n.screenY,m=window.getComputedStyle?window.getComputedStyle(p,null).getPropertyValue("cursor"):p.runtimeStyle.cursor,o=a.createElement("div"),e.css(o,{position:"absolute",top:0,left:0,width:l.width,height:l.height,zIndex:2147483647,opacity:1e-4,background:"red",cursor:m}),a.body.appendChild(o),e.on(a,"mousemove",u),e.on(a,"mouseup",c),r.start(n)},u=function(e){return e.button!==s?c(e):(e.deltaX=e.screenX-d,e.deltaY=e.screenY-f,e.preventDefault(),void r.drag(e))},c=function(t){e.off(a,"mousemove",u),e.off(a,"mouseup",c),o.parentNode.removeChild(o),r.stop&&r.stop(t)},this.destroy=function(){e.off(i())},e.on(i(),"mousedown",l)}}),r(Y,[V,K],function(e,t){return{init:function(){var e=this;e.on("repaint",e.renderScroll)},renderScroll:function(){function n(){function t(t,a,s,l,c,u){var d,f,p,m,h,g,v,y,b;if(f=i.getEl("scroll"+t)){if(y=a.toLowerCase(),b=s.toLowerCase(),i.getEl("absend")&&e.css(i.getEl("absend"),y,i.layoutRect()[l]-1),!c)return void e.css(f,"display","none");e.css(f,"display","block"),d=i.getEl("body"),p=i.getEl("scroll"+t+"t"),m=d["client"+s]-2*o,m-=n&&r?f["client"+u]:0,h=d["scroll"+s],g=m/h,v={},v[y]=d["offset"+a]+o,v[b]=m,e.css(f,v),v={},v[y]=d["scroll"+a]*g,v[b]=m*g,e.css(p,v)}}var n,r,a;a=i.getEl("body"),n=a.scrollWidth>a.clientWidth,r=a.scrollHeight>a.clientHeight,t("h","Left","Width","contentW",n,"Height"),t("v","Top","Height","contentH",r,"Width")}function r(){function n(n,r,a,s,l){var c,u=i._id+"-scroll"+n,d=i.classPrefix;i.getEl().appendChild(e.createFragment('
    ')),i.draghelper=new t(u+"t",{start:function(){c=i.getEl("body")["scroll"+r],e.addClass(e.get(u),d+"active")},drag:function(e){var t,u,d,f,p=i.layoutRect();u=p.contentW>p.innerW,d=p.contentH>p.innerH,f=i.getEl("body")["client"+a]-2*o,f-=u&&d?i.getEl("scroll"+n)["client"+l]:0,t=f/i.getEl("body")["scroll"+a],i.getEl("body")["scroll"+r]=c+e["delta"+s]/t},stop:function(){e.removeClass(e.get(u),d+"active")}})}i.addClass("scroll"),n("v","Top","Height","Y","Width"),n("h","Left","Width","X","Height")}var i=this,o=2;i.settings.autoScroll&&(i._hasScroll||(i._hasScroll=!0,r(),i.on("wheel",function(e){var t=i.getEl("body");t.scrollLeft+=10*(e.deltaX||0),t.scrollTop+=10*e.deltaY,n()}),e.on(i.getEl("body"),"scroll",n)),n())}}}),r(G,[j,Y],function(e,t){return e.extend({Defaults:{layout:"fit",containerCls:"panel"},Mixins:[t],renderHtml:function(){var e=this,t=e._layout,n=e.settings.html;return e.preRender(),t.preRender(e),"undefined"==typeof n?n='
    '+t.renderHtml(e)+"
    ":("function"==typeof n&&(n=n.call(e)),e._hasBody=!1),'
    '+(e._preBodyHtml||"")+n+"
    "}})}),r(X,[V],function(e){function t(t,n,r){var i,o,a,s,l,c,u,d,f,p;return f=e.getViewPort(),o=e.getPos(n),a=o.x,s=o.y,t._fixed&&(a-=f.x,s-=f.y),i=t.getEl(),p=e.getSize(i),l=p.width,c=p.height,p=e.getSize(n),u=p.width,d=p.height,r=(r||"").split(""),"b"===r[0]&&(s+=d),"r"===r[1]&&(a+=u),"c"===r[0]&&(s+=Math.round(d/2)),"c"===r[1]&&(a+=Math.round(u/2)),"b"===r[3]&&(s-=c),"r"===r[4]&&(a-=l),"c"===r[3]&&(s-=Math.round(c/2)),"c"===r[4]&&(a-=Math.round(l/2)),{x:a,y:s,w:l,h:c}}return{testMoveRel:function(n,r){for(var i=e.getViewPort(),o=0;o0&&a.x+a.w0&&a.y+a.hi.x&&a.x+a.wi.y&&a.y+a.he?0:e+n>t?(e=t-n,0>e?0:e):e}var i=this;if(i.settings.constrainToViewport){var o=e.getViewPort(window),a=i.layoutRect();t=r(t,o.w+o.x,a.w),n=r(n,o.h+o.y,a.h)}return i._rendered?i.layoutRect({x:t,y:n}).repaint():(i.settings.x=t,i.settings.y=n),i.fire("move",{x:t,y:n}),i}}}),r(J,[V],function(e){return{resizeToContent:function(){this._layoutRect.autoResize=!0,this._lastRect=null,this.reflow()},resizeTo:function(t,n){if(1>=t||1>=n){var r=e.getWindowSize();t=1>=t?t*r.w:t,n=1>=n?n*r.h:n}return this._layoutRect.autoResize=!1,this.layoutRect({minW:t,minH:n,w:t,h:n}).reflow()},resizeBy:function(e,t){var n=this,r=n.layoutRect();return n.resizeTo(r.w+e,r.h+t)}}}),r(Q,[G,X,J,V],function(e,t,n,r){function i(e){var t;for(t=s.length;t--;)s[t]===e&&s.splice(t,1);for(t=l.length;t--;)l[t]===e&&l.splice(t,1)}var o,a,s=[],l=[],c,u=e.extend({Mixins:[t,n],init:function(e){function t(){var e,t=u.zIndex||65535,n;if(l.length)for(e=0;en&&(e.fixed(!1).layoutRect({y:e._autoFixY}).repaint(),t(!1,e._autoFixY-n)):(e._autoFixY=e.layoutRect().y,e._autoFixY'),n=n.firstChild,d.getContainerElm().appendChild(n),setTimeout(function(){r.addClass(n,i+"in"),r.addClass(d.getEl(),i+"in")},0),c=!0),l.push(d),t()}}),d.on("close hide",function(e){if(e.control==d){for(var n=l.length;n--;)l[n]===d&&l.splice(n,1);t()}}),d.on("show",function(){d.parents().each(function(e){return e._fixed?(d.fixed(!0),!1):void 0})}),e.popover&&(d._preBodyHtml='
    ',d.addClass("popover").addClass("bottom").addClass(d.isRtl()?"end":"start"))},fixed:function(e){var t=this;if(t._fixed!=e){if(t._rendered){var n=r.getViewPort();e?t.layoutRect().y-=n.y:t.layoutRect().y+=n.y}t.toggleClass("fixed",e),t._fixed=e}return t},show:function(){var e=this,t,n=e._super();for(t=s.length;t--&&s[t]!==e;);return-1===t&&s.push(e),n},hide:function(){return i(this),this._super()},hideAll:function(){u.hideAll()},close:function(){var e=this;return e.fire("close"),e.remove()},remove:function(){i(this),this._super()},postRender:function(){var e=this;return e.settings.bodyRole&&this.getEl("body").setAttribute("role",e.settings.bodyRole),e._super()}});return u.hideAll=function(){for(var e=s.length;e--;){var t=s[e];t&&t.settings.autohide&&(t.hide(),s.splice(e,1))}},u}),r(Z,[Q,G,V,K],function(e,t,n,r){var i=e.extend({modal:!0,Defaults:{border:1,layout:"flex",containerCls:"panel",role:"dialog",callbacks:{submit:function(){this.fire("submit",{data:this.toJSON()})},close:function(){this.close()}}},init:function(e){var n=this;n._super(e),n.isRtl()&&n.addClass("rtl"),n.addClass("window"),n._fixed=!0,e.buttons&&(n.statusbar=new t({layout:"flex",border:"1 0 0 0",spacing:3,padding:10,align:"center",pack:n.isRtl()?"start":"end",defaults:{type:"button"},items:e.buttons}),n.statusbar.addClass("foot"),n.statusbar.parent(n)),n.on("click",function(e){-1!=e.target.className.indexOf(n.classPrefix+"close")&&n.close() +}),n.on("cancel",function(){n.close()}),n.aria("describedby",n.describedBy||n._id+"-none"),n.aria("label",e.title),n._fullscreen=!1},recalc:function(){var e=this,t=e.statusbar,r,i,o,a;e._fullscreen&&(e.layoutRect(n.getWindowSize()),e.layoutRect().contentH=e.layoutRect().innerH),e._super(),r=e.layoutRect(),e.settings.title&&!e._fullscreen&&(i=r.headerW,i>r.w&&(o=r.x-Math.max(0,i/2),e.layoutRect({w:i,x:o}),a=!0)),t&&(t.layoutRect({w:e.layoutRect().innerW}).recalc(),i=t.layoutRect().minW+r.deltaW,i>r.w&&(o=r.x-Math.max(0,i-r.w),e.layoutRect({w:i,x:o}),a=!0)),a&&e.recalc()},initLayoutRect:function(){var e=this,t=e._super(),r=0,i;if(e.settings.title&&!e._fullscreen){i=e.getEl("head");var o=n.getSize(i);t.headerW=o.width,t.headerH=o.height,r+=t.headerH}e.statusbar&&(r+=e.statusbar.layoutRect().h),t.deltaH+=r,t.minH+=r,t.h+=r;var a=n.getWindowSize();return t.x=Math.max(0,a.w/2-t.w/2),t.y=Math.max(0,a.h/2-t.h/2),t},renderHtml:function(){var e=this,t=e._layout,n=e._id,r=e.classPrefix,i=e.settings,o="",a="",s=i.html;return e.preRender(),t.preRender(e),i.title&&(o='
    '+e.encode(i.title)+'
    '),i.url&&(s=''),"undefined"==typeof s&&(s=t.renderHtml(e)),e.statusbar&&(a=e.statusbar.renderHtml()),'
    '+o+'
    '+s+"
    "+a+"
    "},fullscreen:function(e){var t=this,r=document.documentElement,i,o=t.classPrefix,a;if(e!=t._fullscreen)if(n.on(window,"resize",function(){var e;if(t._fullscreen)if(i)t._timer||(t._timer=setTimeout(function(){var e=n.getWindowSize();t.moveTo(0,0).resizeTo(e.w,e.h),t._timer=0},50));else{e=(new Date).getTime();var r=n.getWindowSize();t.moveTo(0,0).resizeTo(r.w,r.h),(new Date).getTime()-e>50&&(i=!0)}}),a=t.layoutRect(),t._fullscreen=e,e){t._initial={x:a.x,y:a.y,w:a.w,h:a.h},t._borderBox=t.parseBox("0"),t.getEl("head").style.display="none",a.deltaH-=a.headerH+2,n.addClass(r,o+"fullscreen"),n.addClass(document.body,o+"fullscreen"),t.addClass("fullscreen");var s=n.getWindowSize();t.moveTo(0,0).resizeTo(s.w,s.h)}else t._borderBox=t.parseBox(t.settings.border),t.getEl("head").style.display="",a.deltaH+=a.headerH,n.removeClass(r,o+"fullscreen"),n.removeClass(document.body,o+"fullscreen"),t.removeClass("fullscreen"),t.moveTo(t._initial.x,t._initial.y).resizeTo(t._initial.w,t._initial.h);return t.reflow()},postRender:function(){var e=this,t;setTimeout(function(){e.addClass("in")},0),e._super(),e.statusbar&&e.statusbar.postRender(),e.focus(),this.dragHelper=new r(e._id+"-dragh",{start:function(){t={x:e.layoutRect().x,y:e.layoutRect().y}},drag:function(n){e.moveTo(t.x+n.deltaX,t.y+n.deltaY)}}),e.on("submit",function(t){t.isDefaultPrevented()||e.close()})},submit:function(){return this.fire("submit",{data:this.toJSON()})},remove:function(){var e=this,t=e.classPrefix;e.dragHelper.destroy(),e._super(),e.statusbar&&this.statusbar.remove(),e._fullscreen&&(n.removeClass(document.documentElement,t+"fullscreen"),n.removeClass(document.body,t+"fullscreen"))}});return i}),r(et,[Z],function(e){var t=e.extend({init:function(e){e={border:1,padding:20,layout:"flex",pack:"center",align:"center",containerCls:"panel",autoScroll:!0,buttons:{type:"button",text:"Ok",action:"ok"},items:{type:"label",multiline:!0,maxWidth:500,maxHeight:200}},this._super(e)},Statics:{OK:1,OK_CANCEL:2,YES_NO:3,YES_NO_CANCEL:4,msgBox:function(n){var r,i=n.callback||function(){};switch(n.buttons){case t.OK_CANCEL:r=[{type:"button",text:"Ok",subtype:"primary",onClick:function(e){e.control.parents()[1].close(),i(!0)}},{type:"button",text:"Cancel",onClick:function(e){e.control.parents()[1].close(),i(!1)}}];break;case t.YES_NO:r=[{type:"button",text:"Ok",subtype:"primary",onClick:function(e){e.control.parents()[1].close(),i(!0)}}];break;case t.YES_NO_CANCEL:r=[{type:"button",text:"Ok",subtype:"primary",onClick:function(e){e.control.parents()[1].close()}}];break;default:r=[{type:"button",text:"Ok",subtype:"primary",onClick:function(e){e.control.parents()[1].close(),i(!0)}}]}return new e({padding:20,x:n.x,y:n.y,minWidth:300,minHeight:100,layout:"flex",pack:"center",align:"center",buttons:r,title:n.title,role:"alertdialog",items:{type:"label",multiline:!0,maxWidth:500,maxHeight:200,text:n.text},onPostRender:function(){this.aria("describedby",this.items()[0]._id)},onClose:n.onClose,onCancel:function(){i(!1)}}).renderTo(document.body).reflow()},alert:function(e,n){return"string"==typeof e&&(e={text:e}),e.callback=n,t.msgBox(e)},confirm:function(e,n){return"string"==typeof e&&(e={text:e}),e.callback=n,e.buttons=t.OK_CANCEL,t.msgBox(e)}}});return t}),r(tt,[Z,et],function(e,t){return function(n){function r(){return o.length?o[o.length-1]:void 0}var i=this,o=[];i.windows=o,i.open=function(t,r){var i;return n.editorManager.activeEditor=n,t.title=t.title||" ",t.url=t.url||t.file,t.url&&(t.width=parseInt(t.width||320,10),t.height=parseInt(t.height||240,10)),t.body&&(t.items={defaults:t.defaults,type:t.bodyType||"form",items:t.body}),t.url||t.buttons||(t.buttons=[{text:"Ok",subtype:"primary",onclick:function(){i.find("form")[0].submit()}},{text:"Cancel",onclick:function(){i.close()}}]),i=new e(t),o.push(i),i.on("close",function(){for(var e=o.length;e--;)o[e]===i&&o.splice(e,1);n.focus()}),t.data&&i.on("postRender",function(){this.find("*").each(function(e){var n=e.name();n in t.data&&e.value(t.data[n])})}),i.features=t||{},i.params=r||{},n.nodeChanged(),i.renderTo(document.body).reflow()},i.alert=function(e,r,i){t.alert(e,function(){r?r.call(i||this):n.focus()})},i.confirm=function(e,n,r){t.confirm(e,function(e){n.call(r||this,e)})},i.close=function(){r()&&r().close()},i.getParams=function(){return r()?r().params:null},i.setParams=function(e){r()&&(r().params=e)}}}),r(nt,[R,B,x,h,g,p],function(e,t,n,r,i,o){return function(a){function s(e,t){try{a.getDoc().execCommand(e,!1,t)}catch(n){}}function l(){var e=a.getDoc().documentMode;return e?e:6}function c(e){return e.isDefaultPrevented()}function u(){function t(e){var t=new i(function(){});o.each(a.getBody().getElementsByTagName("*"),function(e){"SPAN"==e.tagName&&e.setAttribute("mce-data-marked",1),!e.hasAttribute("data-mce-style")&&e.hasAttribute("style")&&a.dom.setAttrib(e,"style",e.getAttribute("style"))}),t.observe(a.getDoc(),{childList:!0,attributes:!0,subtree:!0,attributeFilter:["style"]}),a.getDoc().execCommand(e?"ForwardDelete":"Delete",!1,null);var n=a.selection.getRng(),r=n.startContainer.parentNode;o.each(t.takeRecords(),function(e){if("style"==e.attributeName){var t=e.target.getAttribute("data-mce-style");t?e.target.setAttribute("style",t):e.target.removeAttribute("style")}o.each(e.addedNodes,function(e){if("SPAN"==e.nodeName&&!e.getAttribute("mce-data-marked")){var t,i;e==r&&(t=n.startOffset,i=e.firstChild),U.remove(e,!0),i&&(n.setStart(i,t),n.setEnd(i,t),a.selection.setRng(n))}})}),t.disconnect(),o.each(a.dom.select("span[mce-data-marked]"),function(e){e.removeAttribute("mce-data-marked")})}var n=a.getDoc(),r="data:text/mce-internal,",i=window.MutationObserver,s;i||(s=!0,i=function(){function e(e){var t=e.relatedNode||e.target;n.push({target:t,addedNodes:[t]})}function t(e){var t=e.relatedNode||e.target;n.push({target:t,attributeName:e.attrName})}var n=[],r;this.observe=function(n){r=n,r.addEventListener("DOMSubtreeModified",e,!1),r.addEventListener("DOMNodeInsertedIntoDocument",e,!1),r.addEventListener("DOMNodeInserted",e,!1),r.addEventListener("DOMAttrModified",t,!1)},this.disconnect=function(){r.removeEventListener("DOMNodeInserted",e),r.removeEventListener("DOMAttrModified",t),r.removeEventListener("DOMSubtreeModified",e,!1)},this.takeRecords=function(){return n}}),a.on("keydown",function(n){var r=n.keyCode==V,i=e.metaKeyPressed(n);if(!c(n)&&(r||n.keyCode==W)){var o=a.selection.getRng(),s=o.startContainer,l=o.startOffset;if(!i&&o.collapsed&&3==s.nodeType&&(r?l0))return;n.preventDefault(),i&&a.selection.getSel().modify("extend",r?"forward":"backward","word"),t(r)}}),a.on("keypress",function(n){c(n)||q.isCollapsed()||!n.charCode||e.metaKeyPressed(n)||(n.preventDefault(),t(!0),a.selection.setContent(String.fromCharCode(n.charCode)))}),a.addCommand("Delete",function(){t()}),a.addCommand("ForwardDelete",function(){t(!0)}),s||(a.on("dragstart",function(e){e.dataTransfer.setData("URL","data:text/mce-internal,"+escape(a.selection.getContent()))}),a.on("drop",function(e){if(!c(e)){var i=e.dataTransfer.getData("URL");if(!i||-1==i.indexOf(r)||!n.caretRangeFromPoint)return;i=unescape(i.substr(r.length)),n.caretRangeFromPoint&&(e.preventDefault(),t(),a.selection.setRng(n.caretRangeFromPoint(e.x,e.y)),a.insertContent(i))}}),a.on("cut",function(e){!c(e)&&e.clipboardData&&(e.preventDefault(),e.clipboardData.clearData(),e.clipboardData.setData("text/html",a.selection.getContent()),e.clipboardData.setData("text/plain",a.selection.getContent({format:"text"})),t(!0))}))}function d(){function e(e){var t=U.create("body"),n=e.cloneContents();return t.appendChild(n),q.serializer.serialize(t,{format:"html"})}function n(n){if(!n.setStart){if(n.item)return!1;var r=n.duplicate();return r.moveToElementText(a.getBody()),t.compareRanges(n,r)}var i=e(n),o=U.createRng();o.selectNode(a.getBody());var s=e(o);return i===s}a.on("keydown",function(e){var t=e.keyCode,r,i;if(!c(e)&&(t==V||t==W)){if(r=a.selection.isCollapsed(),i=a.getBody(),r&&!U.isEmpty(i))return;if(!r&&!n(a.selection.getRng()))return;e.preventDefault(),a.setContent(""),i.firstChild&&U.isBlock(i.firstChild)?a.selection.setCursorLocation(i.firstChild,0):a.selection.setCursorLocation(i,0),a.nodeChanged()}})}function f(){a.on("keydown",function(t){!c(t)&&65==t.keyCode&&e.metaKeyPressed(t)&&(t.preventDefault(),a.execCommand("SelectAll"))})}function p(){a.settings.content_editable||(U.bind(a.getDoc(),"focusin",function(){q.setRng(q.getRng())}),U.bind(a.getDoc(),"mousedown",function(e){e.target==a.getDoc().documentElement&&(a.getBody().focus(),q.setRng(q.getRng()))}))}function m(){a.on("keydown",function(e){if(!c(e)&&e.keyCode===W&&q.isCollapsed()&&0===q.getRng(!0).startOffset){var t=q.getNode(),n=t.previousSibling;if("HR"==t.nodeName)return U.remove(t),void e.preventDefault();n&&n.nodeName&&"hr"===n.nodeName.toLowerCase()&&(U.remove(n),e.preventDefault())}})}function h(){window.Range.prototype.getClientRects||a.on("mousedown",function(e){if(!c(e)&&"HTML"===e.target.nodeName){var t=a.getBody();t.blur(),setTimeout(function(){t.focus()},0)}})}function g(){a.on("click",function(e){e=e.target,/^(IMG|HR)$/.test(e.nodeName)&&q.getSel().setBaseAndExtent(e,0,e,1),"A"==e.nodeName&&U.hasClass(e,"mce-item-anchor")&&q.select(e),a.nodeChanged()})}function v(){function e(){var e=U.getAttribs(q.getStart().cloneNode(!1));return function(){var t=q.getStart();t!==a.getBody()&&(U.setAttrib(t,"style",null),z(e,function(e){t.setAttributeNode(e.cloneNode(!0))}))}}function t(){return!q.isCollapsed()&&U.getParent(q.getStart(),U.isBlock)!=U.getParent(q.getEnd(),U.isBlock)}a.on("keypress",function(n){var r;return c(n)||8!=n.keyCode&&46!=n.keyCode||!t()?void 0:(r=e(),a.getDoc().execCommand("delete",!1,null),r(),n.preventDefault(),!1)}),U.bind(a.getDoc(),"cut",function(n){var r;!c(n)&&t()&&(r=e(),setTimeout(function(){r()},0))})}function y(){var e,n;a.on("selectionchange",function(){n&&(clearTimeout(n),n=0),n=window.setTimeout(function(){if(!a.removed){var n=q.getRng();e&&t.compareRanges(n,e)||(a.nodeChanged(),e=n)}},50)})}function b(){document.body.setAttribute("role","application")}function C(){a.on("keydown",function(e){if(!c(e)&&e.keyCode===W&&q.isCollapsed()&&0===q.getRng(!0).startOffset){var t=q.getNode().previousSibling;if(t&&t.nodeName&&"table"===t.nodeName.toLowerCase())return e.preventDefault(),!1}})}function x(){l()>7||(s("RespectVisibilityInDesign",!0),a.contentStyles.push(".mceHideBrInPre pre br {display: none}"),U.addClass(a.getBody(),"mceHideBrInPre"),j.addNodeFilter("pre",function(e){for(var t=e.length,r,i,o,a;t--;)for(r=e[t].getAll("br"),i=r.length;i--;)o=r[i],a=o.prev,a&&3===a.type&&"\n"!=a.value.charAt(a.value-1)?a.value+="\n":o.parent.insert(new n("#text",3),o,!0).value="\n"}),K.addNodeFilter("pre",function(e){for(var t=e.length,n,r,i,o;t--;)for(n=e[t].getAll("br"),r=n.length;r--;)i=n[r],o=i.prev,o&&3==o.type&&(o.value=o.value.replace(/\r?\n$/,""))}))}function w(){U.bind(a.getBody(),"mouseup",function(){var e,t=q.getNode();"IMG"==t.nodeName&&((e=U.getStyle(t,"width"))&&(U.setAttrib(t,"width",e.replace(/[^0-9%]+/g,"")),U.setStyle(t,"width","")),(e=U.getStyle(t,"height"))&&(U.setAttrib(t,"height",e.replace(/[^0-9%]+/g,"")),U.setStyle(t,"height","")))})}function _(){a.on("keydown",function(t){var n,r,i,o,s;if(!c(t)&&t.keyCode==e.BACKSPACE&&(n=q.getRng(),r=n.startContainer,i=n.startOffset,o=U.getRoot(),s=r,n.collapsed&&0===i)){for(;s&&s.parentNode&&s.parentNode.firstChild==s&&s.parentNode!=o;)s=s.parentNode;"BLOCKQUOTE"===s.tagName&&(a.formatter.toggle("blockquote",null,s),n=U.createRng(),n.setStart(r,0),n.setEnd(r,0),q.setRng(n))}})}function N(){function e(){a._refreshContentEditable(),s("StyleWithCSS",!1),s("enableInlineTableEditing",!1),$.object_resizing||s("enableObjectResizing",!1)}$.readonly||a.on("BeforeExecCommand MouseDown",e)}function E(){function e(){z(U.select("a"),function(e){var t=e.parentNode,n=U.getRoot();if(t.lastChild===e){for(;t&&!U.isBlock(t);){if(t.parentNode.lastChild!==t||t===n)return;t=t.parentNode}U.add(t,"br",{"data-mce-bogus":1})}})}a.on("SetContent ExecCommand",function(t){("setcontent"==t.type||"mceInsertLink"===t.command)&&e()})}function S(){$.forced_root_block&&a.on("init",function(){s("DefaultParagraphSeparator",$.forced_root_block)})}function k(){a.on("Undo Redo SetContent",function(e){e.initial||a.execCommand("mceRepaint")})}function T(){a.on("keydown",function(e){var t;c(e)||e.keyCode!=W||(t=a.getDoc().selection.createRange(),t&&t.item&&(e.preventDefault(),a.undoManager.beforeChange(),U.remove(t.item(0)),a.undoManager.add()))})}function R(){var e;l()>=10&&(e="",z("p div h1 h2 h3 h4 h5 h6".split(" "),function(t,n){e+=(n>0?",":"")+t+":empty"}),a.contentStyles.push(e+"{padding-right: 1px !important}"))}function A(){l()<9&&(j.addNodeFilter("noscript",function(e){for(var t=e.length,n,r;t--;)n=e[t],r=n.firstChild,r&&n.attr("data-mce-innertext",r.value)}),K.addNodeFilter("noscript",function(e){for(var t=e.length,i,o,a;t--;)i=e[t],o=e[t].firstChild,o?o.value=r.decode(o.value):(a=i.attributes.map["data-mce-innertext"],a&&(i.attr("data-mce-innertext",null),o=new n("#text",3),o.value=a,o.raw=!0,i.append(o)))}))}function B(){function e(e,t){var n=i.createTextRange();try{n.moveToPoint(e,t)}catch(r){n=null}return n}function t(t){var r;t.button?(r=e(t.x,t.y),r&&(r.compareEndPoints("StartToStart",a)>0?r.setEndPoint("StartToStart",a):r.setEndPoint("EndToEnd",a),r.select())):n()}function n(){var e=r.selection.createRange();a&&!e.item&&0===e.compareEndPoints("StartToEnd",e)&&a.select(),U.unbind(r,"mouseup",n),U.unbind(r,"mousemove",t),a=o=0}var r=U.doc,i=r.body,o,a,s;r.documentElement.unselectable=!0,U.bind(r,"mousedown contextmenu",function(i){if("HTML"===i.target.nodeName){if(o&&n(),s=r.documentElement,s.scrollHeight>s.clientHeight)return;o=1,a=e(i.x,i.y),a&&(U.bind(r,"mouseup",n),U.bind(r,"mousemove",t),U.getRoot().focus(),a.select())}})}function L(){a.on("keyup focusin mouseup",function(t){65==t.keyCode&&e.metaKeyPressed(t)||q.normalize()},!0)}function D(){a.contentStyles.push("img:-moz-broken {-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}")}function M(){a.inline||a.on("keydown",function(){document.activeElement==document.body&&a.getWin().focus()})}function H(){a.inline||(a.contentStyles.push("body {min-height: 150px}"),a.on("click",function(e){"HTML"==e.target.nodeName&&(a.getBody().focus(),a.selection.normalize(),a.nodeChanged())}))}function P(){i.mac&&a.on("keydown",function(t){!e.metaKeyPressed(t)||37!=t.keyCode&&39!=t.keyCode||(t.preventDefault(),a.selection.getSel().modify("move",37==t.keyCode?"backward":"forward","word"))})}function O(){s("AutoUrlDetect",!1)}function I(){a.inline||a.on("focus blur",function(){var e=a.dom.create("br");a.getBody().appendChild(e),e.parentNode.removeChild(e)},!0)}function F(){a.on("click",function(e){"A"===e.target.tagName&&e.preventDefault()}),a.contentStyles.push(".mce-content-body {-webkit-touch-callout: none}")}var z=o.each,W=e.BACKSPACE,V=e.DELETE,U=a.dom,q=a.selection,$=a.settings,j=a.parser,K=a.serializer,Y=i.gecko,G=i.ie,X=i.webkit;C(),_(),d(),L(),X&&(u(),p(),g(),S(),i.iOS?(y(),M(),H(),F()):f()),G&&i.ie<11&&(m(),b(),x(),w(),T(),R(),A(),B()),i.ie>=11&&(H(),I()),i.ie&&(f(),O()),Y&&(m(),h(),v(),N(),E(),k(),D(),P())}}),r(rt,[p],function(e){function t(){return!1}function n(){return!0}var r="__bindings",i=e.makeMap("focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange mouseout mouseenter mouseleave keydown keypress keyup contextmenu dragstart dragend dragover draggesture dragdrop drop drag"," ");return{fire:function(e,i,o){var a=this,s,l,c,u,d;if(!a.removed){if(e=e.toLowerCase(),i=i||{},i.type=e,i.target||(i.target=a),i.preventDefault||(i.preventDefault=function(){i.isDefaultPrevented=n},i.stopPropagation=function(){i.isPropagationStopped=n},i.stopImmediatePropagation=function(){i.isImmediatePropagationStopped=n},i.isDefaultPrevented=t,i.isPropagationStopped=t,i.isImmediatePropagationStopped=t),a[r]&&(s=a[r][e]))for(l=0,c=s.length;c>l&&(s[l]=u=s[l],!i.isImmediatePropagationStopped());l++)if(u.call(a,i)===!1)return i.preventDefault(),i;if(o!==!1&&a.parent)for(d=a.parent();d&&!i.isPropagationStopped();)d.fire(e,i,!1),d=d.parent();return i}},on:function(e,t,n){var o=this,a,s,l,c;if(t===!1&&(t=function(){return!1}),t)for(l=e.toLowerCase().split(" "),c=l.length;c--;)e=l[c],a=o[r],a||(a=o[r]={}),s=a[e],s||(s=a[e]=[],o.bindNative&&i[e]&&o.bindNative(e)),n?s.unshift(t):s.push(t);return o},off:function(e,t){var n=this,o,a=n[r],s,l,c,u;if(a)if(e)for(c=e.toLowerCase().split(" "),o=c.length;o--;){if(e=c[o],s=a[e],!e){for(l in a)a[e].length=0;return n}if(s){if(t)for(u=s.length;u--;)s[u]===t&&s.splice(u,1);else s.length=0;!s.length&&n.unbindNative&&i[e]&&(n.unbindNative(e),delete a[e])}}else{if(n.unbindNative)for(e in a)n.unbindNative(e);n[r]=[]}return n},hasEventListeners:function(e){var t=this[r];return e=e.toLowerCase(),!(!t||!t[e]||0===t[e].length)}}}),r(it,[p,g],function(e,t){var n=e.each,r=e.explode,i={f9:120,f10:121,f11:122};return function(o){var a=this,s={};o.on("keyup keypress keydown",function(e){(e.altKey||e.ctrlKey||e.metaKey)&&n(s,function(n){var r=t.mac?e.metaKey:e.ctrlKey;if(n.ctrl==r&&n.alt==e.altKey&&n.shift==e.shiftKey)return e.keyCode==n.keyCode||e.charCode&&e.charCode==n.charCode?(e.preventDefault(),"keydown"==e.type&&n.func.call(n.scope),!0):void 0})}),a.add=function(t,a,l,c){var u;return u=l,"string"==typeof l?l=function(){o.execCommand(u,!1,null)}:e.isArray(u)&&(l=function(){o.execCommand(u[0],u[1],u[2])}),n(r(t.toLowerCase()),function(e){var t={func:l,scope:c||o,desc:o.translate(a),alt:!1,ctrl:!1,shift:!1};n(r(e,"+"),function(e){switch(e){case"alt":case"ctrl":case"shift":t[e]=!0;break;default:t.charCode=e.charCodeAt(0),t.keyCode=i[e]||e.toUpperCase().charCodeAt(0)}}),s[(t.ctrl?"ctrl":"")+","+(t.alt?"alt":"")+","+(t.shift?"shift":"")+","+t.keyCode]=t}),!0}}}),r(ot,[y,C,x,k,S,L,D,M,H,P,O,I,b,l,tt,w,N,nt,g,p,rt,it],function(e,n,r,i,o,a,s,l,c,u,d,f,p,m,h,g,v,y,b,C,x,w){function _(e,t){return"selectionchange"==t?e.getDoc():!e.inline&&/^mouse|click|contextmenu|drop/.test(t)?e.getDoc():e.getBody()}function N(e,t,r){var i=this,o,a;o=i.documentBaseUrl=r.documentBaseURL,a=r.baseURI,i.settings=t=T({id:e,theme:"modern",delta_width:0,delta_height:0,popup_css:"",plugins:"",document_base_url:o,add_form_submit_trigger:!0,submit_patch:!0,add_unload_trigger:!0,convert_urls:!0,relative_urls:!0,remove_script_host:!0,object_resizing:!0,doctype:"",visual:!0,font_size_style_values:"xx-small,x-small,small,medium,large,x-large,xx-large",font_size_legacy_values:"xx-small,small,medium,large,x-large,xx-large,300%",forced_root_block:"p",hidden_input:!0,padd_empty_editor:!0,render_ui:!0,indentation:"30px",inline_styles:!0,convert_fonts_to_spans:!0,indent:"simple",indent_before:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist",indent_after:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist",validate:!0,entity_encoding:"named",url_converter:i.convertURL,url_converter_scope:i,ie7_compat:!0},t),n.language=t.language||"en",n.languageLoad=t.language_load,n.baseURL=r.baseURL,i.id=t.id=e,i.isNotDirty=!0,i.plugins={},i.documentBaseURI=new f(t.document_base_url||o,{base_uri:a}),i.baseURI=a,i.contentCSS=[],i.contentStyles=[],i.shortcuts=new w(i),i.execCommands={},i.queryStateCommands={},i.queryValueCommands={},i.loadedCSS={},i.suffix=r.suffix,i.editorManager=r,i.inline=t.inline,r.fire("SetupEditor",i),i.execCallback("setup",i)}var E=e.DOM,S=n.ThemeManager,k=n.PluginManager,T=C.extend,R=C.each,A=C.explode,B=C.inArray,L=C.trim,D=C.resolve,M=m.Event,H=b.gecko,P=b.ie;return N.prototype={render:function(){function e(){E.unbind(window,"ready",e),n.render()}function t(){var e=p.ScriptLoader;if(r.language&&"en"!=r.language&&!r.language_url&&(r.language_url=n.editorManager.baseURL+"/langs/"+r.language+".js"),r.language_url&&e.add(r.language_url),r.theme&&"function"!=typeof r.theme&&"-"!=r.theme.charAt(0)&&!S.urls[r.theme]){var t=r.theme_url;t=t?n.documentBaseURI.toAbsolute(t):"themes/"+r.theme+"/theme"+o+".js",S.load(r.theme,t)}C.isArray(r.plugins)&&(r.plugins=r.plugins.join(" ")),R(r.external_plugins,function(e,t){k.load(t,e),r.plugins+=" "+t}),R(r.plugins.split(/[ ,]/),function(e){if(e=L(e),e&&!k.urls[e])if("-"==e.charAt(0)){e=e.substr(1,e.length);var t=k.dependencies(e);R(t,function(e){var t={prefix:"plugins/",resource:e,suffix:"/plugin"+o+".js"};e=k.createUrl(t,e),k.load(e.resource,e)})}else k.load(e,{prefix:"plugins/",resource:e,suffix:"/plugin"+o+".js"})}),e.loadQueue(function(){n.removed||n.init()})}var n=this,r=n.settings,i=n.id,o=n.suffix;if(!M.domLoaded)return void E.bind(window,"ready",e);if(n.getElement()&&b.contentEditable){r.inline?n.inline=!0:(n.orgVisibility=n.getElement().style.visibility,n.getElement().style.visibility="hidden");var a=n.getElement().form||E.getParent(i,"form");a&&(n.formElement=a,r.hidden_input&&!/TEXTAREA|INPUT/i.test(n.getElement().nodeName)&&(E.insertAfter(E.create("input",{type:"hidden",name:i}),i),n.hasHiddenInput=!0),n.formEventDelegate=function(e){n.fire(e.type,e)},E.bind(a,"submit reset",n.formEventDelegate),n.on("reset",function(){n.setContent(n.startContent,{format:"raw"})}),!r.submit_patch||a.submit.nodeType||a.submit.length||a._mceOldSubmit||(a._mceOldSubmit=a.submit,a.submit=function(){return n.editorManager.triggerSave(),n.isNotDirty=!0,a._mceOldSubmit(a)})),n.windowManager=new h(n),"xml"==r.encoding&&n.on("GetContent",function(e){e.save&&(e.content=E.encode(e.content))}),r.add_form_submit_trigger&&n.on("submit",function(){n.initialized&&n.save()}),r.add_unload_trigger&&(n._beforeUnload=function(){!n.initialized||n.destroyed||n.isHidden()||n.save({format:"raw",no_events:!0,set_dirty:!1})},n.editorManager.on("BeforeUnload",n._beforeUnload)),t()}},init:function(){function e(n){var r=k.get(n),i,o;i=k.urls[n]||t.documentBaseUrl.replace(/\/$/,""),n=L(n),r&&-1===B(h,n)&&(R(k.dependencies(n),function(t){e(t)}),o=new r(t,i),t.plugins[n]=o,o.init&&(o.init(t,i),h.push(n)))}var t=this,n=t.settings,r=t.getElement(),i,o,a,s,l,c,u,d,f,p,m,h=[];if(t.rtl=this.editorManager.i18n.rtl,t.editorManager.add(t),n.aria_label=n.aria_label||E.getAttrib(r,"aria-label",t.getLang("aria.rich_text_area")),n.theme&&("function"!=typeof n.theme?(n.theme=n.theme.replace(/-/,""),c=S.get(n.theme),t.theme=new c(t,S.urls[n.theme]),t.theme.init&&t.theme.init(t,S.urls[n.theme]||t.documentBaseUrl.replace(/\/$/,""))):t.theme=n.theme),R(n.plugins.replace(/\-/g,"").split(/[ ,]/),e),n.render_ui&&t.theme&&(t.orgDisplay=r.style.display,"function"!=typeof n.theme?(i=n.width||r.style.width||r.offsetWidth,o=n.height||r.style.height||r.offsetHeight,a=n.min_height||100,p=/^[0-9\.]+(|px)$/i,p.test(""+i)&&(i=Math.max(parseInt(i,10),100)),p.test(""+o)&&(o=Math.max(parseInt(o,10),a)),l=t.theme.renderUI({targetNode:r,width:i,height:o,deltaWidth:n.delta_width,deltaHeight:n.delta_height}),n.content_editable||(E.setStyles(l.sizeContainer||l.editorContainer,{wi2dth:i,h2eight:o}),o=(l.iframeHeight||o)+("number"==typeof o?l.deltaHeight||0:""),a>o&&(o=a))):(l=n.theme(t,r),l.editorContainer.nodeType&&(l.editorContainer=l.editorContainer.id=l.editorContainer.id||t.id+"_parent"),l.iframeContainer.nodeType&&(l.iframeContainer=l.iframeContainer.id=l.iframeContainer.id||t.id+"_iframecontainer"),o=l.iframeHeight||r.offsetHeight),t.editorContainer=l.editorContainer),n.content_css&&R(A(n.content_css),function(e){t.contentCSS.push(t.documentBaseURI.toAbsolute(e))}),n.content_style&&t.contentStyles.push(n.content_style),n.content_editable)return r=s=l=null,t.initContentBody();for(t.iframeHTML=n.doctype+"",n.document_base_url!=t.documentBaseUrl&&(t.iframeHTML+=''),!b.caretAfter&&n.ie7_compat&&(t.iframeHTML+=''),t.iframeHTML+='',m=0;m',t.loadedCSS[g]=!0}d=n.body_id||"tinymce",-1!=d.indexOf("=")&&(d=t.getParam("body_id","","hash"),d=d[t.id]||d),f=n.body_class||"",-1!=f.indexOf("=")&&(f=t.getParam("body_class","","hash"),f=f[t.id]||""),t.iframeHTML+='
    ";var v='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinymce.get("'+t.id+'");document.write(ed.iframeHTML);document.close();ed.initContentBody(true);})()';if(document.domain!=location.hostname&&(u=v),s=E.add(l.iframeContainer,"iframe",{id:t.id+"_ifr",src:u||'javascript:""',frameBorder:"0",allowTransparency:"true",title:t.editorManager.translate("Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help"),style:{width:"100%",height:o,display:"block"}}),P)try{t.getDoc()}catch(y){s.src=u=v}t.contentAreaContainer=l.iframeContainer,l.editorContainer&&(E.get(l.editorContainer).style.display=t.orgDisplay),E.get(t.id).style.display="none",E.setAttrib(t.id,"aria-hidden",!0),u||t.initContentBody(),r=s=l=null},initContentBody:function(t){var n=this,o=n.settings,f=E.get(n.id),p=n.getDoc(),m,h;o.inline||(n.getElement().style.visibility=n.orgVisibility),t||o.content_editable||(p.open(),p.write(n.iframeHTML),p.close()),o.content_editable&&(n.on("remove",function(){var e=this.getBody();E.removeClass(e,"mce-content-body"),E.removeClass(e,"mce-edit-focus"),E.setAttrib(e,"tabIndex",null),E.setAttrib(e,"contentEditable",null)}),E.addClass(f,"mce-content-body"),f.tabIndex=-1,n.contentDocument=p=o.content_document||document,n.contentWindow=o.content_window||window,n.bodyElement=f,o.content_document=o.content_window=null,o.root_name=f.nodeName.toLowerCase()),m=n.getBody(),m.disabled=!0,o.readonly||(n.inline&&"static"==E.getStyle(m,"position",!0)&&(m.style.position="relative"),m.contentEditable=n.getParam("content_editable_state",!0)),m.disabled=!1,n.schema=new g(o),n.dom=new e(p,{keep_values:!0,url_converter:n.convertURL,url_converter_scope:n,hex_colors:o.force_hex_style_colors,class_filter:o.class_filter,update_styles:!0,root_element:o.content_editable?n.id:null,collect:o.content_editable,schema:n.schema,onSetAttrib:function(e){n.fire("SetAttrib",e)}}),n.parser=new v(o,n.schema),n.parser.addAttributeFilter("src,href,style",function(e,t){for(var r=e.length,i,o=n.dom,a,s;r--;)i=e[r],a=i.attr(t),s="data-mce-"+t,i.attributes.map[s]||("style"===t?i.attr(s,o.serializeStyle(o.parseStyle(a),i.name)):i.attr(s,n.convertURL(a,t,i.name)))}),n.parser.addNodeFilter("script",function(e){for(var t=e.length,n;t--;)n=e[t],n.attr("type","mce-"+(n.attr("type")||"text/javascript"))}),n.parser.addNodeFilter("#cdata",function(e){for(var t=e.length,n;t--;)n=e[t],n.type=8,n.name="#comment",n.value="[CDATA["+n.value+"]]"}),n.parser.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div",function(e){for(var t=e.length,i,o=n.schema.getNonEmptyElements();t--;)i=e[t],i.isEmpty(o)&&(i.empty().append(new r("br",1)).shortEnded=!0)}),n.serializer=new i(o,n),n.selection=new a(n.dom,n.getWin(),n.serializer,n),n.formatter=new s(n),n.undoManager=new l(n),n.forceBlocks=new u(n),n.enterKey=new c(n),n.editorCommands=new d(n),n.fire("PreInit"),o.browser_spellcheck||o.gecko_spellcheck||(p.body.spellcheck=!1,E.setAttrib(m,"spellcheck","false")),n.fire("PostRender"),n.quirks=y(n),o.directionality&&(m.dir=o.directionality),o.nowrap&&(m.style.whiteSpace="nowrap"),o.protect&&n.on("BeforeSetContent",function(e){R(o.protect,function(t){e.content=e.content.replace(t,function(e){return""})})}),n.on("SetContent",function(){n.addVisual(n.getBody())}),o.padd_empty_editor&&n.on("PostProcess",function(e){e.content=e.content.replace(/^(]*>( | |\s|\u00a0|)<\/p>[\r\n]*|
    [\r\n]*)$/,"")}),n.load({initial:!0,format:"html"}),n.startContent=n.getContent({format:"raw"}),n.initialized=!0,R(n._pendingNativeEvents,function(e){n.dom.bind(_(n,e),e,function(e){n.fire(e.type,e)})}),n.fire("init"),n.focus(!0),n.nodeChanged({initial:!0}),n.execCallback("init_instance_callback",n),n.contentStyles.length>0&&(h="",R(n.contentStyles,function(e){h+=e+"\r\n"}),n.dom.addStyle(h)),R(n.contentCSS,function(e){n.loadedCSS[e]||(n.dom.loadCSS(e),n.loadedCSS[e]=!0)}),o.auto_focus&&setTimeout(function(){var e=n.editorManager.get(o.auto_focus);e.selection.select(e.getBody(),1),e.selection.collapse(1),e.getBody().focus(),e.getWin().focus()},100),f=p=m=null},focus:function(e){var t,n=this,r=n.selection,i=n.settings.content_editable,o,a,s=n.getDoc(),l;e||(o=r.getRng(),o.item&&(a=o.item(0)),n._refreshContentEditable(),i||(b.opera||n.getBody().focus(),n.getWin().focus()),(H||i)&&(l=n.getBody(),l.setActive&&b.ie<11?l.setActive():l.focus(),i&&r.normalize()),a&&a.ownerDocument==s&&(o=s.body.createControlRange(),o.addElement(a),o.select())),n.editorManager.activeEditor!=n&&((t=n.editorManager.activeEditor)&&t.fire("deactivate",{relatedTarget:n}),n.fire("activate",{relatedTarget:t})),n.editorManager.activeEditor=n},execCallback:function(e){var t=this,n=t.settings[e],r;if(n)return t.callbackLookup&&(r=t.callbackLookup[e])&&(n=r.func,r=r.scope),"string"==typeof n&&(r=n.replace(/\.\w+$/,""),r=r?D(r):0,n=D(n),t.callbackLookup=t.callbackLookup||{},t.callbackLookup[e]={func:n,scope:r}),n.apply(r||t,Array.prototype.slice.call(arguments,1))},translate:function(e){var t=this.settings.language||"en",n=this.editorManager.i18n;return e?n.data[t+"."+e]||e.replace(/\{\#([^\}]+)\}/g,function(e,r){return n.data[t+"."+r]||"{#"+r+"}"}):""},getLang:function(e,n){return this.editorManager.i18n.data[(this.settings.language||"en")+"."+e]||(n!==t?n:"{#"+e+"}")},getParam:function(e,t,n){var r=e in this.settings?this.settings[e]:t,i;return"hash"===n?(i={},"string"==typeof r?R(r.split(r.indexOf("=")>0?/[;,](?![^=;,]*(?:[;,]|$))/:","),function(e){e=e.split("="),i[L(e[0])]=L(e.length>1?e[1]:e)}):i=r,i):r},nodeChanged:function(){var e=this,t=e.selection,n,r,i;!e.initialized||e.settings.disable_nodechange||e.settings.readonly||(i=e.getBody(),n=t.getStart()||i,n=P&&n.ownerDocument!=e.getDoc()?e.getBody():n,"IMG"==n.nodeName&&t.isCollapsed()&&(n=n.parentNode),r=[],e.dom.getParent(n,function(e){return e===i?!0:void r.push(e) +}),e.fire("NodeChange",{element:n,parents:r}))},addButton:function(e,t){var n=this;t.cmd&&(t.onclick=function(){n.execCommand(t.cmd)}),t.text||t.icon||(t.icon=e),n.buttons=n.buttons||{},t.tooltip=t.tooltip||t.title,n.buttons[e]=t},addMenuItem:function(e,t){var n=this;t.cmd&&(t.onclick=function(){n.execCommand(t.cmd)}),n.menuItems=n.menuItems||{},n.menuItems[e]=t},addCommand:function(e,t,n){this.execCommands[e]={func:t,scope:n||this}},addQueryStateHandler:function(e,t,n){this.queryStateCommands[e]={func:t,scope:n||this}},addQueryValueHandler:function(e,t,n){this.queryValueCommands[e]={func:t,scope:n||this}},addShortcut:function(e,t,n,r){this.shortcuts.add(e,t,n,r)},execCommand:function(e,t,n,r){var i=this,o=0,a;return/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(e)||r&&r.skip_focus||i.focus(),r=T({},r),r=i.fire("BeforeExecCommand",{command:e,ui:t,value:n}),r.isDefaultPrevented()?!1:(a=i.execCommands[e])&&a.func.call(a.scope,t,n)!==!0?(i.fire("ExecCommand",{command:e,ui:t,value:n}),!0):(R(i.plugins,function(r){return r.execCommand&&r.execCommand(e,t,n)?(i.fire("ExecCommand",{command:e,ui:t,value:n}),o=!0,!1):void 0}),o?o:i.theme&&i.theme.execCommand&&i.theme.execCommand(e,t,n)?(i.fire("ExecCommand",{command:e,ui:t,value:n}),!0):i.editorCommands.execCommand(e,t,n)?(i.fire("ExecCommand",{command:e,ui:t,value:n}),!0):(i.getDoc().execCommand(e,t,n),void i.fire("ExecCommand",{command:e,ui:t,value:n})))},queryCommandState:function(e){var t=this,n,r;if(!t._isHidden()){if((n=t.queryStateCommands[e])&&(r=n.func.call(n.scope),r!==!0))return r;if(r=t.editorCommands.queryCommandState(e),-1!==r)return r;try{return t.getDoc().queryCommandState(e)}catch(i){}}},queryCommandValue:function(e){var n=this,r,i;if(!n._isHidden()){if((r=n.queryValueCommands[e])&&(i=r.func.call(r.scope),i!==!0))return i;if(i=n.editorCommands.queryCommandValue(e),i!==t)return i;try{return n.getDoc().queryCommandValue(e)}catch(o){}}},show:function(){var e=this;E.show(e.getContainer()),E.hide(e.id),e.load(),e.fire("show")},hide:function(){var e=this,t=e.getDoc();P&&t&&!e.inline&&t.execCommand("SelectAll"),e.save(),E.hide(e.getContainer()),E.setStyle(e.id,"display",e.orgDisplay),e.fire("hide")},isHidden:function(){return!E.isHidden(this.id)},setProgressState:function(e,t){this.fire("ProgressState",{state:e,time:t})},load:function(e){var n=this,r=n.getElement(),i;return r?(e=e||{},e.load=!0,i=n.setContent(r.value!==t?r.value:r.innerHTML,e),e.element=r,e.no_events||n.fire("LoadContent",e),e.element=r=null,i):void 0},save:function(e){var t=this,n=t.getElement(),r,i;if(n&&t.initialized)return e=e||{},e.save=!0,e.element=n,r=e.content=t.getContent(e),e.no_events||t.fire("SaveContent",e),r=e.content,/TEXTAREA|INPUT/i.test(n.nodeName)?n.value=r:(t.inline||(n.innerHTML=r),(i=E.getParent(t.id,"form"))&&R(i.elements,function(e){return e.name==t.id?(e.value=r,!1):void 0})),e.element=n=null,e.set_dirty!==!1&&(t.isNotDirty=!0),r},setContent:function(e,t){var n=this,r=n.getBody(),i;return t=t||{},t.format=t.format||"html",t.set=!0,t.content=e,t.no_events||n.fire("BeforeSetContent",t),e=t.content,0===e.length||/^\s+$/.test(e)?(i=n.settings.forced_root_block,i&&n.schema.isValidChild(r.nodeName.toLowerCase(),i.toLowerCase())?(e=P&&11>P?"":'
    ',e=n.dom.createHTML(i,n.settings.forced_root_block_attrs,e)):P||(e='
    '),r.innerHTML=e,n.fire("SetContent",t)):("raw"!==t.format&&(e=new o({},n.schema).serialize(n.parser.parse(e,{isRootContent:!0}))),t.content=L(e),n.dom.setHTML(r,t.content),t.no_events||n.fire("SetContent",t)),t.content},getContent:function(e){var t=this,n,r=t.getBody();return e=e||{},e.format=e.format||"html",e.get=!0,e.getInner=!0,e.no_events||t.fire("BeforeGetContent",e),n="raw"==e.format?r.innerHTML:"text"==e.format?r.innerText||r.textContent:t.serializer.serialize(r,e),e.content="text"!=e.format?L(n):n,e.no_events||t.fire("GetContent",e),e.content},insertContent:function(e){this.execCommand("mceInsertContent",!1,e)},isDirty:function(){return!this.isNotDirty},getContainer:function(){var e=this;return e.container||(e.container=E.get(e.editorContainer||e.id+"_parent")),e.container},getContentAreaContainer:function(){return this.contentAreaContainer},getElement:function(){return E.get(this.settings.content_element||this.id)},getWin:function(){var e=this,t;return e.contentWindow||(t=E.get(e.id+"_ifr"),t&&(e.contentWindow=t.contentWindow)),e.contentWindow},getDoc:function(){var e=this,t;return e.contentDocument||(t=e.getWin(),t&&(e.contentDocument=t.document)),e.contentDocument},getBody:function(){return this.bodyElement||this.getDoc().body},convertURL:function(e,t,n){var r=this,i=r.settings;return i.urlconverter_callback?r.execCallback("urlconverter_callback",e,n,!0,t):!i.convert_urls||n&&"LINK"==n.nodeName||0===e.indexOf("file:")||0===e.length?e:i.relative_urls?r.documentBaseURI.toRelative(e):e=r.documentBaseURI.toAbsolute(e,i.remove_script_host)},addVisual:function(e){var n=this,r=n.settings,i=n.dom,o;e=e||n.getBody(),n.hasVisual===t&&(n.hasVisual=r.visual),R(i.select("table,a",e),function(e){var t;switch(e.nodeName){case"TABLE":return o=r.visual_table_class||"mce-item-table",t=i.getAttrib(e,"border"),void(t&&"0"!=t||(n.hasVisual?i.addClass(e,o):i.removeClass(e,o)));case"A":return void(i.getAttrib(e,"href",!1)||(t=i.getAttrib(e,"name")||e.id,o=r.visual_anchor_class||"mce-item-anchor",t&&(n.hasVisual?i.addClass(e,o):i.removeClass(e,o))))}}),n.fire("VisualAid",{element:e,hasVisual:n.hasVisual})},remove:function(){var e=this;if(!e.removed){e.save(),e.fire("remove"),e.off(),e.removed=1,e.hasHiddenInput&&E.remove(e.getElement().nextSibling),E.setStyle(e.id,"display",e.orgDisplay),e.settings.content_editable||(M.unbind(e.getWin()),M.unbind(e.getDoc()));var t=e.getContainer();M.unbind(e.getBody()),M.unbind(t),e.editorManager.remove(e),E.remove(t),e.destroy()}},bindNative:function(e){var t=this;t.settings.readonly||(t.initialized?t.dom.bind(_(t,e),e,function(n){t.fire(e,n)}):t._pendingNativeEvents?t._pendingNativeEvents.push(e):t._pendingNativeEvents=[e])},unbindNative:function(e){var t=this;t.initialized&&t.dom.unbind(e)},destroy:function(e){var t=this,n;if(!t.destroyed){if(!e&&!t.removed)return void t.remove();e&&H&&(M.unbind(t.getDoc()),M.unbind(t.getWin()),M.unbind(t.getBody())),e||(t.editorManager.off("beforeunload",t._beforeUnload),t.theme&&t.theme.destroy&&t.theme.destroy(),t.selection.destroy(),t.dom.destroy()),n=t.formElement,n&&(n._mceOldSubmit&&(n.submit=n._mceOldSubmit,n._mceOldSubmit=null),E.unbind(n,"submit reset",t.formEventDelegate)),t.contentAreaContainer=t.formElement=t.container=t.editorContainer=null,t.settings.content_element=t.bodyElement=t.contentDocument=t.contentWindow=null,t.selection&&(t.selection=t.selection.win=t.selection.dom=t.selection.dom.doc=null),t.destroyed=1}},_refreshContentEditable:function(){var e=this,t,n;e._isHidden()&&(t=e.getBody(),n=t.parentNode,n.removeChild(t),n.appendChild(t),t.focus())},_isHidden:function(){var e;return H?(e=this.selection.getSel(),!e||!e.rangeCount||0===e.rangeCount):0}},T(N.prototype,x),N}),r(at,[],function(){var e={};return{rtl:!1,add:function(t,n){for(var r in n)e[r]=n[r];this.rtl=this.rtl||"rtl"===e._dir},translate:function(t){if("undefined"==typeof t)return t;if("string"!=typeof t&&t.raw)return t.raw;if(t.push){var n=t.slice(1);t=(e[t[0]]||t[0]).replace(/\{([^\}]+)\}/g,function(e,t){return n[t]})}return e[t]||t},data:e}}),r(st,[y,g],function(e,t){function n(e){function a(){try{return document.activeElement}catch(e){return document.body}}function s(e){return e&&e.startContainer?{startContainer:e.startContainer,startOffset:e.startOffset,endContainer:e.endContainer,endOffset:e.endOffset}:e}function l(e,t){var n;return t.startContainer?(n=e.getDoc().createRange(),n.setStart(t.startContainer,t.startOffset),n.setEnd(t.endContainer,t.endOffset)):n=t,n}function c(e){return!!o.getParent(e,n.isEditorUIElement)}function u(e,t){for(var n=t.getBody();e;){if(e==n)return!0;e=e.parentNode}}function d(n){var d=n.editor;d.on("init",function(){(d.inline||t.ie)&&(d.on("nodechange keyup",function(){var e=document.activeElement;e&&e.id==d.id+"_ifr"&&(e=d.getBody()),u(e,d)&&(d.lastRng=d.selection.getRng())}),t.webkit&&!r&&(r=function(){var t=e.activeEditor;if(t&&t.selection){var n=t.selection.getRng();n&&!n.collapsed&&(d.lastRng=n)}},o.bind(document,"selectionchange",r)))}),d.on("setcontent",function(){d.lastRng=null}),d.on("mousedown",function(){d.selection.lastFocusBookmark=null}),d.on("focusin",function(){var t=e.focusedEditor;d.selection.lastFocusBookmark&&(d.selection.setRng(l(d,d.selection.lastFocusBookmark)),d.selection.lastFocusBookmark=null),t!=d&&(t&&t.fire("blur",{focusedEditor:d}),e.activeEditor=d,e.focusedEditor=d,d.fire("focus",{blurredEditor:t}),d.focus(!0)),d.lastRng=null}),d.on("focusout",function(){window.setTimeout(function(){var t=e.focusedEditor;c(a())||t!=d||(d.fire("blur",{focusedEditor:null}),e.focusedEditor=null,d.selection&&(d.selection.lastFocusBookmark=null))},0)}),i||(i=function(t){var n=e.activeEditor;n&&t.target.ownerDocument==document&&(n.selection&&(n.selection.lastFocusBookmark=s(n.lastRng)),c(t.target)||e.focusedEditor!=n||(n.fire("blur",{focusedEditor:null}),e.focusedEditor=null))},o.bind(document,"focusin",i))}function f(t){e.focusedEditor==t.editor&&(e.focusedEditor=null),e.activeEditor||(o.unbind(document,"selectionchange",r),o.unbind(document,"focusin",i),r=i=null)}e.on("AddEditor",d),e.on("RemoveEditor",f)}var r,i,o=e.DOM;return n.isEditorUIElement=function(e){return-1!==e.className.toString().indexOf("mce-")},n}),r(lt,[ot,y,I,g,p,rt,at,st],function(e,n,r,i,o,a,s,l){var c=n.DOM,u=o.explode,d=o.each,f=o.extend,p=0,m,h={majorVersion:"4",minorVersion:"0.20",releaseDate:"2014-03-18",editors:[],i18n:s,activeEditor:null,setup:function(){var e=this,t,n,i="",o;if(n=document.location.href.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,""),/[\/\\]$/.test(n)||(n+="/"),o=window.tinymce||window.tinyMCEPreInit)t=o.base||o.baseURL,i=o.suffix;else for(var a=document.getElementsByTagName("script"),s=0;s0&&d(u(m),function(n){c.get(n)?(l=new e(n,t,a),s.push(l),l.render(!0)):d(document.forms,function(r){d(r.elements,function(r){r.name===n&&(n="mce_editor_"+p++,c.setAttrib(r,"id",n),l=new e(n,t,a),s.push(l),l.render(1))})})});break;case"textareas":case"specific_textareas":d(c.select("textarea"),function(r){t.editor_deselector&&i(r,t.editor_deselector)||(!t.editor_selector||i(r,t.editor_selector))&&(l=new e(n(r),t,a),s.push(l),l.render(!0))})}t.oninit&&(m=h=0,d(s,function(e){h++,e.initialized?m++:e.on("init",function(){m++,m==h&&r(t,"oninit")}),m==h&&r(t,"oninit")}))}var a=this,s=[],l;a.settings=t,c.bind(window,"ready",o)},get:function(e){return e===t?this.editors:this.editors[e]},add:function(e){var t=this,n=t.editors;return n[e.id]=e,n.push(e),t.activeEditor=e,t.fire("AddEditor",{editor:e}),m||(m=function(){t.fire("BeforeUnload")},c.bind(window,"beforeunload",m)),e},createEditor:function(t,n){return this.add(new e(t,n,this))},remove:function(e){var t=this,n,r=t.editors,i,o;{if(e){if("string"==typeof e)return e=e.selector||e,void d(c.select(e),function(e){t.remove(r[e.id])});if(i=e,!r[i.id])return null;for(delete r[i.id],n=0;n=0;n--)t.remove(r[n])}},execCommand:function(t,n,r){var i=this,o=i.get(r);switch(t){case"mceAddEditor":return i.get(r)||new e(r,i.settings,i).render(),!0;case"mceRemoveEditor":return o&&o.remove(),!0;case"mceToggleEditor":return o?(o.isHidden()?o.show():o.hide(),!0):(i.execCommand("mceAddEditor",0,r),!0)}return i.activeEditor?i.activeEditor.execCommand(t,n,r):!1},triggerSave:function(){d(this.editors,function(e){e.save()})},addI18n:function(e,t){s.add(e,t)},translate:function(e){return s.translate(e)}};return f(h,a),h.setup(),window.tinymce=window.tinyMCE=h,h}),r(ct,[lt,p],function(e,t){var n=t.each,r=t.explode;e.on("AddEditor",function(e){var t=e.editor;t.on("preInit",function(){function e(e,t){n(t,function(t,n){t&&s.setStyle(e,n,t)}),s.rename(e,"span")}function i(e){s=t.dom,l.convert_fonts_to_spans&&n(s.select("font,u,strike",e.node),function(e){o[e.nodeName.toLowerCase()](s,e)})}var o,a,s,l=t.settings;l.inline_styles&&(a=r(l.font_size_legacy_values),o={font:function(t,n){e(n,{backgroundColor:n.style.backgroundColor,color:n.color,fontFamily:n.face,fontSize:a[parseInt(n.size,10)-1]})},u:function(t,n){e(n,{textDecoration:"underline"})},strike:function(t,n){e(n,{textDecoration:"line-through"})}},t.on("PreProcess SetContent",i))})})}),r(ut,[],function(){return{send:function(e){function t(){!e.async||4==n.readyState||r++>1e4?(e.success&&1e4>r&&200==n.status?e.success.call(e.success_scope,""+n.responseText,n,e):e.error&&e.error.call(e.error_scope,r>1e4?"TIMED_OUT":"GENERAL",n,e),n=null):setTimeout(t,10)}var n,r=0;if(e.scope=e.scope||this,e.success_scope=e.success_scope||e.scope,e.error_scope=e.error_scope||e.scope,e.async=e.async===!1?!1:!0,e.data=e.data||"",n=new XMLHttpRequest){if(n.overrideMimeType&&n.overrideMimeType(e.content_type),n.open(e.type||(e.data?"POST":"GET"),e.url,e.async),e.content_type&&n.setRequestHeader("Content-Type",e.content_type),n.setRequestHeader("X-Requested-With","XMLHttpRequest"),n.send(e.data),!e.async)return t();setTimeout(t,10)}}}}),r(dt,[],function(){function e(t,n){var r,i,o,a;if(n=n||'"',null===t)return"null";if(o=typeof t,"string"==o)return i="\bb t\nn\ff\rr\"\"''\\\\",n+t.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g,function(e,t){return'"'===n&&"'"===e?e:(r=i.indexOf(t),r+1?"\\"+i.charAt(r+1):(e=t.charCodeAt().toString(16),"\\u"+"0000".substring(e.length)+e))})+n;if("object"==o){if(t.hasOwnProperty&&"[object Array]"===Object.prototype.toString.call(t)){for(r=0,i="[";r0?",":"")+e(t[r],n);return i+"]"}i="{";for(a in t)t.hasOwnProperty(a)&&(i+="function"!=typeof t[a]?(i.length>1?","+n:n)+a+n+":"+e(t[a],n):"");return i+"}"}return""+t}return{serialize:e,parse:function(e){try{return window[String.fromCharCode(101)+"val"]("("+e+")")}catch(t){}}}}),r(ft,[dt,ut,p],function(e,t,n){function r(e){this.settings=i({},e),this.count=0}var i=n.extend;return r.sendRPC=function(e){return(new r).send(e)},r.prototype={send:function(n){var r=n.error,o=n.success;n=i(this.settings,n),n.success=function(t,i){t=e.parse(t),"undefined"==typeof t&&(t={error:"JSON Parse error."}),t.error?r.call(n.error_scope||n.scope,t.error,i):o.call(n.success_scope||n.scope,t.result)},n.error=function(e,t){r&&r.call(n.error_scope||n.scope,e,t)},n.data=e.serialize({id:n.id||"c"+this.count++,method:n.method,params:n.params}),n.content_type="application/json",t.send(n)}},r}),r(pt,[y],function(e){return{callbacks:{},count:0,send:function(n){var r=this,i=e.DOM,o=n.count!==t?n.count:r.count,a="tinymce_jsonp_"+o;r.callbacks[o]=function(e){i.remove(a),delete r.callbacks[o],n.callback(e)},i.add(i.doc.body,"script",{id:a,src:n.url,type:"text/javascript"}),r.count++}}}),r(mt,[],function(){function e(){s=[];for(var e in a)s.push(e);i.length=s.length}function n(){function n(e){var n,r;return r=e!==t?u+e:i.indexOf(",",u),-1===r||r>i.length?null:(n=i.substring(u,r),u=r+1,n)}var r,i,s,u=0;if(a={},c){o.load(l),i=o.getAttribute(l)||"";do{var d=n();if(null===d)break;if(r=n(parseInt(d,32)||0),null!==r){if(d=n(),null===d)break;s=n(parseInt(d,32)||0),r&&(a[r]=s)}}while(null!==r);e()}}function r(){var t,n="";if(c){for(var r in a)t=a[r],n+=(n?",":"")+r.length.toString(32)+","+r+","+t.length.toString(32)+","+t;o.setAttribute(l,n);try{o.save(l)}catch(i){}e()}}var i,o,a,s,l,c;try{if(window.localStorage)return localStorage}catch(u){}return l="tinymce",o=document.documentElement,c=!!o.addBehavior,c&&o.addBehavior("#default#userData"),i={key:function(e){return s[e]},getItem:function(e){return e in a?a[e]:null},setItem:function(e,t){a[e]=""+t,r()},removeItem:function(e){delete a[e],r()},clear:function(){a={},r()}},n(),i}),r(ht,[y,l,b,C,p,g],function(e,t,n,r,i,o){var a=window.tinymce;return a.DOM=e.DOM,a.ScriptLoader=n.ScriptLoader,a.PluginManager=r.PluginManager,a.ThemeManager=r.ThemeManager,a.dom=a.dom||{},a.dom.Event=t.Event,i.each(i,function(e,t){a[t]=e}),i.each("isOpera isWebKit isIE isGecko isMac".split(" "),function(e){a[e]=o[e.substr(2).toLowerCase()]}),{}}),r(gt,[F,p],function(e,t){return e.extend({Defaults:{firstControlClass:"first",lastControlClass:"last"},init:function(e){this.settings=t.extend({},this.Defaults,e)},preRender:function(e){e.addClass(this.settings.containerClass,"body")},applyClasses:function(e){var t=this,n=t.settings,r,i,o;r=e.items().filter(":visible"),i=n.firstControlClass,o=n.lastControlClass,r.each(function(e){e.removeClass(i).removeClass(o),n.controlClass&&e.addClass(n.controlClass)}),r.eq(0).addClass(i),r.eq(-1).addClass(o)},renderHtml:function(e){var t=this,n=t.settings,r,i="";return r=e.items(),r.eq(0).addClass(n.firstControlClass),r.eq(-1).addClass(n.lastControlClass),r.each(function(e){n.controlClass&&e.addClass(n.controlClass),i+=e.renderHtml()}),i},recalc:function(){},postRender:function(){}})}),r(vt,[gt],function(e){return e.extend({Defaults:{containerClass:"abs-layout",controlClass:"abs-layout-item"},recalc:function(e){e.items().filter(":visible").each(function(e){var t=e.settings;e.layoutRect({x:t.x,y:t.y,w:t.w,h:t.h}),e.recalc&&e.recalc()})},renderHtml:function(e){return'
    '+this._super(e)}})}),r(yt,[U,X],function(e,t){return e.extend({Mixins:[t],Defaults:{classes:"widget tooltip tooltip-n"},text:function(e){var t=this;return"undefined"!=typeof e?(t._value=e,t._rendered&&(t.getEl().lastChild.innerHTML=t.encode(e)),t):t._value},renderHtml:function(){var e=this,t=e.classPrefix;return'"},repaint:function(){var e=this,t,n;t=e.getEl().style,n=e._layoutRect,t.left=n.x+"px",t.top=n.y+"px",t.zIndex=131070}})}),r(bt,[U,yt],function(e,t){var n,r=e.extend({init:function(e){var t=this;t._super(e),t.canFocus=!0,e.tooltip&&r.tooltips!==!1&&(t.on("mouseenter",function(n){var r=t.tooltip().moveTo(-65535);if(n.control==t){var i=r.text(e.tooltip).show().testMoveRel(t.getEl(),["bc-tc","bc-tl","bc-tr"]);r.toggleClass("tooltip-n","bc-tc"==i),r.toggleClass("tooltip-nw","bc-tl"==i),r.toggleClass("tooltip-ne","bc-tr"==i),r.moveRel(t.getEl(),i)}else r.hide()}),t.on("mouseleave mousedown click",function(){t.tooltip().hide()})),t.aria("label",e.ariaLabel||e.tooltip)},tooltip:function(){return n||(n=new t({type:"tooltip"}),n.renderTo()),n},active:function(e){var t=this,n;return e!==n&&(t.aria("pressed",e),t.toggleClass("active",e)),t._super(e)},disabled:function(e){var t=this,n;return e!==n&&(t.aria("disabled",e),t.toggleClass("disabled",e)),t._super(e)},postRender:function(){var e=this,t=e.settings;e._rendered=!0,e._super(),e.parent()||!t.width&&!t.height||(e.initLayoutRect(),e.repaint()),t.autofocus&&e.focus()},remove:function(){this._super(),n&&(n.remove(),n=null)}});return r}),r(Ct,[bt],function(e){return e.extend({Defaults:{classes:"widget btn",role:"button"},init:function(e){var t=this,n;t.on("click mousedown",function(e){e.preventDefault()}),t._super(e),n=e.size,e.subtype&&t.addClass(e.subtype),n&&t.addClass("btn-"+n)},icon:function(e){var t=this,n=t.classPrefix;if("undefined"==typeof e)return t.settings.icon;if(t.settings.icon=e,e=e?n+"ico "+n+"i-"+t.settings.icon:"",t._rendered){var r=t.getEl().firstChild,i=r.getElementsByTagName("i")[0];e?(i&&i==r.firstChild||(i=document.createElement("i"),r.insertBefore(i,r.firstChild)),i.className=e):i&&r.removeChild(i),t.text(t._text)}return t},repaint:function(){var e=this.getEl().firstChild.style;e.width=e.height="100%",this._super()},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,r=e.settings.icon,i="";return e.settings.image&&(r="none",i=" style=\"background-image: url('"+e.settings.image+"')\""),r=e.settings.icon?n+"ico "+n+"i-"+r:"",'
    "}})}),r(xt,[j],function(e){return e.extend({Defaults:{defaultType:"button",role:"group"},renderHtml:function(){var e=this,t=e._layout;return e.addClass("btn-group"),e.preRender(),t.preRender(e),'
    '+(e.settings.html||"")+t.renderHtml(e)+"
    "}})}),r(wt,[bt],function(e){return e.extend({Defaults:{classes:"checkbox",role:"checkbox",checked:!1},init:function(e){var t=this;t._super(e),t.on("click mousedown",function(e){e.preventDefault()}),t.on("click",function(e){e.preventDefault(),t.disabled()||t.checked(!t.checked())}),t.checked(t.settings.checked)},checked:function(e){var t=this;return"undefined"!=typeof e?(e?t.addClass("checked"):t.removeClass("checked"),t._checked=e,t.aria("checked",e),t):t._checked},value:function(e){return this.checked(e)},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix;return'
    '+e.encode(e._text)+"
    "}})}),r(_t,[Ct,Q],function(e,t){return e.extend({showPanel:function(){var e=this,n=e.settings;if(e.active(!0),e.panel)e.panel.show();else{var r=n.panel;r.type&&(r={layout:"grid",items:r}),r.role=r.role||"dialog",r.popover=!0,r.autohide=!0,r.ariaRoot=!0,e.panel=new t(r).on("hide",function(){e.active(!1)}).on("cancel",function(t){t.stopPropagation(),e.focus(),e.hidePanel()}).parent(e).renderTo(e.getContainerElm()),e.panel.fire("show"),e.panel.reflow()}e.panel.moveRel(e.getEl(),n.popoverAlign||(e.isRtl()?["bc-tr","bc-tc"]:["bc-tl","bc-tc"]))},hidePanel:function(){var e=this;e.panel&&e.panel.hide()},postRender:function(){var e=this;return e.aria("haspopup",!0),e.on("click",function(t){t.control===e&&(e.panel&&e.panel.visible()?e.hidePanel():(e.showPanel(),e.panel.focus(!!t.aria)))}),e._super()}})}),r(Nt,[_t,y],function(e,t){var n=t.DOM;return e.extend({init:function(e){this._super(e),this.addClass("colorbutton")},color:function(e){return e?(this._color=e,this.getEl("preview").style.backgroundColor=e,this):this._color},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,r=e.settings.icon?n+"ico "+n+"i-"+e.settings.icon:"",i=e.settings.image?" style=\"background-image: url('"+e.settings.image+"')\"":"";return'
    '},postRender:function(){var e=this,t=e.settings.onclick;return e.on("click",function(r){r.aria&&"down"==r.aria.key||r.control!=e||n.getParent(r.target,"."+e.classPrefix+"open")||(r.stopImmediatePropagation(),t.call(e,r))}),delete e.settings.onclick,e._super()}})}),r(Et,[bt,q,V],function(e,t,n){return e.extend({init:function(e){var t=this;t._super(e),t.addClass("combobox"),t.subinput=!0,t.ariaTarget="inp",e=t.settings,e.menu=e.menu||e.values,e.menu&&(e.icon="caret"),t.on("click",function(n){for(var r=n.target,i=t.getEl();r&&r!=i;)r.id&&-1!=r.id.indexOf("-open")&&(t.fire("action"),e.menu&&(t.showMenu(),n.aria&&t.menu.items()[0].focus())),r=r.parentNode}),t.on("keydown",function(e){"INPUT"==e.target.nodeName&&13==e.keyCode&&t.parents().reverse().each(function(n){return e.preventDefault(),t.fire("change"),n.hasEventListeners("submit")&&n.toJSON?(n.fire("submit",{data:n.toJSON()}),!1):void 0})}),e.placeholder&&(t.addClass("placeholder"),t.on("focusin",function(){t._hasOnChange||(n.on(t.getEl("inp"),"change",function(){t.fire("change")}),t._hasOnChange=!0),t.hasClass("placeholder")&&(t.getEl("inp").value="",t.removeClass("placeholder"))}),t.on("focusout",function(){0===t.value().length&&(t.getEl("inp").value=e.placeholder,t.addClass("placeholder"))}))},showMenu:function(){var e=this,n=e.settings,r;e.menu||(r=n.menu||[],r.length?r={type:"menu",items:r}:r.type=r.type||"menu",e.menu=t.create(r).parent(e).renderTo(e.getContainerElm()),e.fire("createmenu"),e.menu.reflow(),e.menu.on("cancel",function(t){t.control===e.menu&&e.focus()}),e.menu.on("show hide",function(t){t.control.items().each(function(t){t.active(t.value()==e.value())})}).fire("show"),e.menu.on("select",function(t){e.value(t.control.value())}),e.on("focusin",function(t){"INPUT"==t.target.tagName&&e.menu.hide()}),e.aria("expanded",!0)),e.menu.show(),e.menu.layoutRect({w:e.layoutRect().w}),e.menu.moveRel(e.getEl(),e.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"])},value:function(e){var t=this;return"undefined"!=typeof e?(t._value=e,t.removeClass("placeholder"),t._rendered&&(t.getEl("inp").value=e),t):t._rendered?(e=t.getEl("inp").value,e!=t.settings.placeholder?e:""):t._value},disabled:function(e){var t=this;return t._rendered&&"undefined"!=typeof e&&(t.getEl("inp").disabled=e),t._super(e)},focus:function(){this.getEl("inp").focus()},repaint:function(){var e=this,t=e.getEl(),r=e.getEl("open"),i=e.layoutRect(),o,a;o=r?i.w-n.getSize(r).width-10:i.w-10;var s=document;return s.all&&(!s.documentMode||s.documentMode<=8)&&(a=e.layoutRect().h-2+"px"),n.css(t.firstChild,{width:o,lineHeight:a}),e._super(),e},postRender:function(){var e=this;return n.on(this.getEl("inp"),"change",function(){e.fire("change")}),e._super()},remove:function(){n.off(this.getEl("inp")),this._super()},renderHtml:function(){var e=this,t=e._id,n=e.settings,r=e.classPrefix,i=n.value||n.placeholder||"",o,a,s="",l="";return"spellcheck"in n&&(l+=' spellcheck="'+n.spellcheck+'"'),n.maxLength&&(l+=' maxlength="'+n.maxLength+'"'),n.size&&(l+=' size="'+n.size+'"'),n.subtype&&(l+=' type="'+n.subtype+'"'),e.disabled()&&(l+=' disabled="disabled"'),o=n.icon,o&&"caret"!=o&&(o=r+"ico "+r+"i-"+n.icon),a=e._text,(o||a)&&(s='
    ",e.addClass("has-open")),'
    "+s+"
    "}})}),r(St,[bt],function(e){return e.extend({init:function(e){var t=this;e.delimiter||(e.delimiter="\xbb"),t._super(e),t.addClass("path"),t.canFocus=!0,t.on("click",function(e){var n,r=e.target;(n=r.getAttribute("data-index"))&&t.fire("select",{value:t.data()[n],index:n})})},focus:function(){var e=this;return e.getEl().firstChild.focus(),e},data:function(e){var t=this;return"undefined"!=typeof e?(t._data=e,t.update(),t):t._data},update:function(){this.innerHtml(this._getPathHtml())},postRender:function(){var e=this;e._super(),e.data(e.settings.data)},renderHtml:function(){var e=this;return'
    '+e._getPathHtml()+"
    "},_getPathHtml:function(){var e=this,t=e._data||[],n,r,i="",o=e.classPrefix;for(n=0,r=t.length;r>n;n++)i+=(n>0?'":"")+'
    '+t[n].name+"
    ";return i||(i='
     
    '),i}})}),r(kt,[St,lt],function(e,t){return e.extend({postRender:function(){function e(e){if(1===e.nodeType){if("BR"==e.nodeName||e.getAttribute("data-mce-bogus"))return!0;if("bookmark"===e.getAttribute("data-mce-type"))return!0}return!1}var n=this,r=t.activeEditor;return n.on("select",function(t){var n=[],i,o=r.getBody();for(r.focus(),i=r.selection.getStart();i&&i!=o;)e(i)||n.push(i),i=i.parentNode;r.selection.select(n[n.length-1-t.index]),r.nodeChanged()}),r.on("nodeChange",function(t){for(var i=[],o=t.parents,a=o.length;a--;)if(1==o[a].nodeType&&!e(o[a])){var s=r.fire("ResolveName",{name:o[a].nodeName.toLowerCase(),target:o[a]});i.push({name:s.name})}n.data(i)}),n._super()}})}),r(Tt,[j],function(e){return e.extend({Defaults:{layout:"flex",align:"center",defaults:{flex:1}},renderHtml:function(){var e=this,t=e._layout,n=e.classPrefix;return e.addClass("formitem"),t.preRender(e),'
    '+(e.settings.title?'
    '+e.settings.title+"
    ":"")+'
    '+(e.settings.html||"")+t.renderHtml(e)+"
    "}})}),r(Rt,[j,Tt],function(e,t){return e.extend({Defaults:{containerCls:"form",layout:"flex",direction:"column",align:"stretch",flex:1,padding:20,labelGap:30,spacing:10,callbacks:{submit:function(){this.submit()}}},preRender:function(){var e=this,n=e.items();n.each(function(n){var r,i=n.settings.label;i&&(r=new t({layout:"flex",autoResize:"overflow",defaults:{flex:1},items:[{type:"label",id:n._id+"-l",text:i,flex:0,forId:n._id,disabled:n.disabled()}]}),r.type="formitem",n.aria("labelledby",n._id+"-l"),"undefined"==typeof n.settings.flex&&(n.settings.flex=1),e.replace(n,r),r.add(n))})},recalcLabels:function(){var e=this,t=0,n=[],r,i;if(e.settings.labelGapCalc!==!1)for(e.items().filter("formitem").each(function(e){var r=e.items()[0],i=r.getEl().clientWidth;t=i>t?i:t,n.push(r)}),i=e.settings.labelGap||0,r=n.length;r--;)n[r].settings.minWidth=t+i},visible:function(e){var t=this._super(e);return e===!0&&this._rendered&&this.recalcLabels(),t},submit:function(){return this.fire("submit",{data:this.toJSON()})},postRender:function(){var e=this;e._super(),e.recalcLabels(),e.fromJSON(e.settings.data)}})}),r(At,[Rt],function(e){return e.extend({Defaults:{containerCls:"fieldset",layout:"flex",direction:"column",align:"stretch",flex:1,padding:"25 15 5 15",labelGap:30,spacing:10,border:1},renderHtml:function(){var e=this,t=e._layout,n=e.classPrefix;return e.preRender(),t.preRender(e),'
    '+(e.settings.title?''+e.settings.title+"":"")+'
    '+(e.settings.html||"")+t.renderHtml(e)+"
    "}})}),r(Bt,[Et],function(e){return e.extend({init:function(e){var t=this,n=tinymce.activeEditor,r;e.spellcheck=!1,r=n.settings.file_browser_callback,r&&(e.icon="browse",e.onaction=function(){r(t.getEl("inp").id,t.getEl("inp").value,e.filetype,window)}),t._super(e)}})}),r(Lt,[vt],function(e){return e.extend({recalc:function(e){var t=e.layoutRect(),n=e.paddingBox();e.items().filter(":visible").each(function(e){e.layoutRect({x:n.left,y:n.top,w:t.innerW-n.right-n.left,h:t.innerH-n.top-n.bottom}),e.recalc&&e.recalc() +})}})}),r(Dt,[vt],function(e){return e.extend({recalc:function(e){var t,n,r,i,o,a,s,l,c,u,d,f,p,m,h,g,v=[],y,b,C,x,w,_,N,E,S,k,T,R,A,B,L,D,M,H,P,O,I,F,z=Math.max,W=Math.min;for(r=e.items().filter(":visible"),i=e.layoutRect(),o=e._paddingBox,a=e.settings,f=e.isRtl()?a.direction||"row-reversed":a.direction,s=a.align,l=e.isRtl()?a.pack||"end":a.pack,c=a.spacing||0,("row-reversed"==f||"column-reverse"==f)&&(r=r.set(r.toArray().reverse()),f=f.split("-")[0]),"column"==f?(S="y",N="h",E="minH",k="maxH",R="innerH",T="top",A="deltaH",B="contentH",P="left",M="w",L="x",D="innerW",H="minW",O="right",I="deltaW",F="contentW"):(S="x",N="w",E="minW",k="maxW",R="innerW",T="left",A="deltaW",B="contentW",P="top",M="h",L="y",D="innerH",H="minH",O="bottom",I="deltaH",F="contentH"),d=i[R]-o[T]-o[T],_=u=0,t=0,n=r.length;n>t;t++)p=r[t],m=p.layoutRect(),h=p.settings,g=h.flex,d-=n-1>t?c:0,g>0&&(u+=g,m[k]&&v.push(p),m.flex=g),d-=m[E],y=o[P]+m[H]+o[O],y>_&&(_=y);if(x={},x[E]=0>d?i[E]-d+i[A]:i[R]-d+i[A],x[H]=_+i[I],x[B]=i[R]-d,x[F]=_,x.minW=W(x.minW,i.maxW),x.minH=W(x.minH,i.maxH),x.minW=z(x.minW,i.startMinWidth),x.minH=z(x.minH,i.startMinHeight),!i.autoResize||x.minW==i.minW&&x.minH==i.minH){for(C=d/u,t=0,n=v.length;n>t;t++)p=v[t],m=p.layoutRect(),b=m[k],y=m[E]+m.flex*C,y>b?(d-=m[k]-m[E],u-=m.flex,m.flex=0,m.maxFlexSize=b):m.maxFlexSize=0;for(C=d/u,w=o[T],x={},0===u&&("end"==l?w=d+o[T]:"center"==l?(w=Math.round(i[R]/2-(i[R]-d)/2)+o[T],0>w&&(w=o[T])):"justify"==l&&(w=o[T],c=Math.floor(d/(r.length-1)))),x[L]=o[P],t=0,n=r.length;n>t;t++)p=r[t],m=p.layoutRect(),y=m.maxFlexSize||m[E],"center"===s?x[L]=Math.round(i[D]/2-m[M]/2):"stretch"===s?(x[M]=z(m[H]||0,i[D]-o[P]-o[O]),x[L]=o[P]):"end"===s&&(x[L]=i[D]-m[M]-o.top),m.flex>0&&(y+=m.flex*C),x[N]=y,x[S]=w,p.layoutRect(x),p.recalc&&p.recalc(),w+=y+c}else if(x.w=x.minW,x.h=x.minH,e.layoutRect(x),this.recalc(e),null===e._lastRect){var V=e.parent();V&&(V._lastRect=null,V.recalc())}}})}),r(Mt,[gt],function(e){return e.extend({Defaults:{containerClass:"flow-layout",controlClass:"flow-layout-item",endClass:"break"},recalc:function(e){e.items().filter(":visible").each(function(e){e.recalc&&e.recalc()})}})}),r(Ht,[U,bt,Q,p,lt,g],function(e,t,n,r,i,o){function a(e){function t(t){function n(e){return e.replace(/%(\w+)/g,"")}var r,i,o=e.dom,a="",l,c;return c=e.settings.preview_styles,c===!1?"":(c||(c="font-family font-size font-weight font-style text-decoration text-transform color background-color border border-radius outline text-shadow"),(t=e.formatter.get(t))?(t=t[0],r=t.block||t.inline||"span",i=o.create(r),s(t.styles,function(e,t){e=n(e),e&&o.setStyle(i,t,e)}),s(t.attributes,function(e,t){e=n(e),e&&o.setAttrib(i,t,e)}),s(t.classes,function(e){e=n(e),o.hasClass(i,e)||o.addClass(i,e)}),e.fire("PreviewFormats"),o.setStyles(i,{position:"absolute",left:-65535}),e.getBody().appendChild(i),l=o.getStyle(e.getBody(),"fontSize",!0),l=/px$/.test(l)?parseInt(l,10):0,s(c.split(" "),function(t){var n=o.getStyle(i,t,!0);if(!("background-color"==t&&/transparent|rgba\s*\([^)]+,\s*0\)/.test(n)&&(n=o.getStyle(e.getBody(),t,!0),"#ffffff"==o.toHex(n).toLowerCase())||"color"==t&&"#000000"==o.toHex(n).toLowerCase())){if("font-size"==t&&/em|%$/.test(n)){if(0===l)return;n=parseFloat(n,10)/(/%$/.test(n)?100:1),n=n*l+"px"}"border"==t&&n&&(a+="padding:0 2px;"),a+=t+":"+n+";"}}),e.fire("AfterPreviewFormats"),o.remove(i),a):void 0)}function r(t,n){return function(){var r=this;e.on("nodeChange",function(i){var o=e.formatter,a=null;s(i.parents,function(e){return s(t,function(t){return n?o.matchNode(e,n,{value:t.value})&&(a=t.value):o.matchNode(e,t.value)&&(a=t.value),a?!1:void 0}),a?!1:void 0}),r.value(a)})}}function i(e){e=e.split(";");for(var t=e.length;t--;)e[t]=e[t].split("=");return e}function o(){function n(e){var t=[];if(e)return s(e,function(e){var r={text:e.title,icon:e.icon};if(e.items)r.menu=n(e.items);else{var a=e.format||"custom"+i++;e.format||(e.name=a,o.push(e)),r.format=a}t.push(r)}),t}function r(){var t;return t=n(e.settings.style_formats_merge?e.settings.style_formats?a.concat(e.settings.style_formats):a:e.settings.style_formats||a)}var i=0,o=[],a=[{title:"Headers",items:[{title:"Header 1",format:"h1"},{title:"Header 2",format:"h2"},{title:"Header 3",format:"h3"},{title:"Header 4",format:"h4"},{title:"Header 5",format:"h5"},{title:"Header 6",format:"h6"}]},{title:"Inline",items:[{title:"Bold",icon:"bold",format:"bold"},{title:"Italic",icon:"italic",format:"italic"},{title:"Underline",icon:"underline",format:"underline"},{title:"Strikethrough",icon:"strikethrough",format:"strikethrough"},{title:"Superscript",icon:"superscript",format:"superscript"},{title:"Subscript",icon:"subscript",format:"subscript"},{title:"Code",icon:"code",format:"code"}]},{title:"Blocks",items:[{title:"Paragraph",format:"p"},{title:"Blockquote",format:"blockquote"},{title:"Div",format:"div"},{title:"Pre",format:"pre"}]},{title:"Alignment",items:[{title:"Left",icon:"alignleft",format:"alignleft"},{title:"Center",icon:"aligncenter",format:"aligncenter"},{title:"Right",icon:"alignright",format:"alignright"},{title:"Justify",icon:"alignjustify",format:"alignjustify"}]}];return e.on("init",function(){s(o,function(t){e.formatter.register(t.name,t)})}),{type:"menu",items:r(),onPostRender:function(t){e.fire("renderFormatsMenu",{control:t.control})},itemDefaults:{preview:!0,textStyle:function(){return this.settings.format?t(this.settings.format):void 0},onPostRender:function(){var t=this,n=this.settings.format;n&&t.parent().on("show",function(){t.disabled(!e.formatter.canApply(n)),t.active(e.formatter.match(n))})},onclick:function(){this.settings.format&&f(this.settings.format)}}}}function a(){return e.undoManager?e.undoManager.hasUndo():!1}function l(){return e.undoManager?e.undoManager.hasRedo():!1}function c(){var t=this;t.disabled(!a()),e.on("Undo Redo AddUndo TypingUndo",function(){t.disabled(!a())})}function u(){var t=this;t.disabled(!l()),e.on("Undo Redo AddUndo TypingUndo",function(){t.disabled(!l())})}function d(){var t=this;e.on("VisualAid",function(e){t.active(e.hasVisual)}),t.active(e.hasVisual)}function f(t){t.control&&(t=t.control.value()),t&&e.execCommand("mceToggleFormat",!1,t)}var p;p=o(),s({bold:"Bold",italic:"Italic",underline:"Underline",strikethrough:"Strikethrough",subscript:"Subscript",superscript:"Superscript"},function(t,n){e.addButton(n,{tooltip:t,onPostRender:function(){var t=this;e.formatter?e.formatter.formatChanged(n,function(e){t.active(e)}):e.on("init",function(){e.formatter.formatChanged(n,function(e){t.active(e)})})},onclick:function(){f(n)}})}),s({outdent:["Decrease indent","Outdent"],indent:["Increase indent","Indent"],cut:["Cut","Cut"],copy:["Copy","Copy"],paste:["Paste","Paste"],help:["Help","mceHelp"],selectall:["Select all","SelectAll"],hr:["Insert horizontal rule","InsertHorizontalRule"],removeformat:["Clear formatting","RemoveFormat"],visualaid:["Visual aids","mceToggleVisualAid"],newdocument:["New document","mceNewDocument"]},function(t,n){e.addButton(n,{tooltip:t[0],cmd:t[1]})}),s({blockquote:["Blockquote","mceBlockQuote"],numlist:["Numbered list","InsertOrderedList"],bullist:["Bullet list","InsertUnorderedList"],subscript:["Subscript","Subscript"],superscript:["Superscript","Superscript"],alignleft:["Align left","JustifyLeft"],aligncenter:["Align center","JustifyCenter"],alignright:["Align right","JustifyRight"],alignjustify:["Justify","JustifyFull"]},function(t,n){e.addButton(n,{tooltip:t[0],cmd:t[1],onPostRender:function(){var t=this;e.formatter?e.formatter.formatChanged(n,function(e){t.active(e)}):e.on("init",function(){e.formatter.formatChanged(n,function(e){t.active(e)})})}})}),e.addButton("undo",{tooltip:"Undo",onPostRender:c,cmd:"undo"}),e.addButton("redo",{tooltip:"Redo",onPostRender:u,cmd:"redo"}),e.addMenuItem("newdocument",{text:"New document",shortcut:"Ctrl+N",icon:"newdocument",cmd:"mceNewDocument"}),e.addMenuItem("undo",{text:"Undo",icon:"undo",shortcut:"Ctrl+Z",onPostRender:c,cmd:"undo"}),e.addMenuItem("redo",{text:"Redo",icon:"redo",shortcut:"Ctrl+Y",onPostRender:u,cmd:"redo"}),e.addMenuItem("visualaid",{text:"Visual aids",selectable:!0,onPostRender:d,cmd:"mceToggleVisualAid"}),s({cut:["Cut","Cut","Ctrl+X"],copy:["Copy","Copy","Ctrl+C"],paste:["Paste","Paste","Ctrl+V"],selectall:["Select all","SelectAll","Ctrl+A"],bold:["Bold","Bold","Ctrl+B"],italic:["Italic","Italic","Ctrl+I"],underline:["Underline","Underline"],strikethrough:["Strikethrough","Strikethrough"],subscript:["Subscript","Subscript"],superscript:["Superscript","Superscript"],removeformat:["Clear formatting","RemoveFormat"]},function(t,n){e.addMenuItem(n,{text:t[0],icon:n,shortcut:t[2],cmd:t[1]})}),e.on("mousedown",function(){n.hideAll()}),e.addButton("styleselect",{type:"menubutton",text:"Formats",menu:p}),e.addButton("formatselect",function(){var n=[],o=i(e.settings.block_formats||"Paragraph=p;Address=address;Pre=pre;Header 1=h1;Header 2=h2;Header 3=h3;Header 4=h4;Header 5=h5;Header 6=h6");return s(o,function(e){n.push({text:e[0],value:e[1],textStyle:function(){return t(e[1])}})}),{type:"listbox",text:o[0][0],values:n,fixedWidth:!0,onselect:f,onPostRender:r(n)}}),e.addButton("fontselect",function(){var t="Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats",n=[],o=i(e.settings.font_formats||t);return s(o,function(e){n.push({text:{raw:e[0]},value:e[1],textStyle:-1==e[1].indexOf("dings")?"font-family:"+e[1]:""})}),{type:"listbox",text:"Font Family",tooltip:"Font Family",values:n,fixedWidth:!0,onPostRender:r(n,"fontname"),onselect:function(t){t.control.settings.value&&e.execCommand("FontName",!1,t.control.settings.value)}}}),e.addButton("fontsizeselect",function(){var t=[],n="8pt 10pt 12pt 14pt 18pt 24pt 36pt",i=e.settings.fontsize_formats||n;return s(i.split(" "),function(e){t.push({text:e,value:e})}),{type:"listbox",text:"Font Sizes",tooltip:"Font Sizes",values:t,fixedWidth:!0,onPostRender:r(t,"fontsize"),onclick:function(t){t.control.settings.value&&e.execCommand("FontSize",!1,t.control.settings.value)}}}),e.addMenuItem("formats",{text:"Formats",menu:p})}var s=r.each;i.on("AddEditor",function(t){t.editor.rtl&&(e.rtl=!0),a(t.editor)}),e.translate=function(e){return i.translate(e)},t.tooltips=!o.iOS}),r(Pt,[vt],function(e){return e.extend({recalc:function(e){var t=e.settings,n,r,i,o,a,s,l,c,u,d,f,p,m,h,g,v,y,b,C,x,w,_,N=[],E=[],S,k,T,R;for(t=e.settings,i=e.items().filter(":visible"),o=e.layoutRect(),r=t.columns||Math.ceil(Math.sqrt(i.length)),n=Math.ceil(i.length/r),y=t.spacingH||t.spacing||0,b=t.spacingV||t.spacing||0,C=t.alignH||t.align,x=t.alignV||t.align,g=e._paddingBox,C&&"string"==typeof C&&(C=[C]),x&&"string"==typeof x&&(x=[x]),d=0;r>d;d++)N.push(0);for(f=0;n>f;f++)E.push(0);for(f=0;n>f;f++)for(d=0;r>d&&(u=i[f*r+d],u);d++)c=u.layoutRect(),S=c.minW,k=c.minH,N[d]=S>N[d]?S:N[d],E[f]=k>E[f]?k:E[f];for(T=o.innerW-g.left-g.right,w=0,d=0;r>d;d++)w+=N[d]+(d>0?y:0),T-=(d>0?y:0)+N[d];for(R=o.innerH-g.top-g.bottom,_=0,f=0;n>f;f++)_+=E[f]+(f>0?b:0),R-=(f>0?b:0)+E[f];if(w+=g.left+g.right,_+=g.top+g.bottom,l={},l.minW=w+(o.w-o.innerW),l.minH=_+(o.h-o.innerH),l.contentW=l.minW-o.deltaW,l.contentH=l.minH-o.deltaH,l.minW=Math.min(l.minW,o.maxW),l.minH=Math.min(l.minH,o.maxH),l.minW=Math.max(l.minW,o.startMinWidth),l.minH=Math.max(l.minH,o.startMinHeight),!o.autoResize||l.minW==o.minW&&l.minH==o.minH){o.autoResize&&(l=e.layoutRect(l),l.contentW=l.minW-o.deltaW,l.contentH=l.minH-o.deltaH);var A;A="start"==t.packV?0:R>0?Math.floor(R/n):0;var B=0,L=t.flexWidths;if(L)for(d=0;dd;d++)N[d]+=L?L[d]*D:D;for(m=g.top,f=0;n>f;f++){for(p=g.left,s=E[f]+A,d=0;r>d&&(u=i[f*r+d],u);d++)h=u.settings,c=u.layoutRect(),a=Math.max(N[d],c.startMinWidth),c.x=p,c.y=m,v=h.alignH||(C?C[d]||C[0]:null),"center"==v?c.x=p+a/2-c.w/2:"right"==v?c.x=p+a-c.w:"stretch"==v&&(c.w=a),v=h.alignV||(x?x[d]||x[0]:null),"center"==v?c.y=m+s/2-c.h/2:"bottom"==v?c.y=m+s-c.h:"stretch"==v&&(c.h=s),u.layoutRect(c),p+=a+y,u.recalc&&u.recalc();m+=s+b}}else if(l.w=l.minW,l.h=l.minH,e.layoutRect(l),this.recalc(e),null===e._lastRect){var M=e.parent();M&&(M._lastRect=null,M.recalc())}}})}),r(Ot,[bt],function(e){return e.extend({renderHtml:function(){var e=this;return e.addClass("iframe"),e.canFocus=!1,''},src:function(e){this.getEl().src=e},html:function(e,t){var n=this,r=this.getEl().contentWindow.document.body;return r?(r.innerHTML=e,t&&t()):setTimeout(function(){n.html(e)},0),this}})}),r(It,[bt,V],function(e,t){return e.extend({init:function(e){var t=this;t._super(e),t.addClass("widget"),t.addClass("label"),t.canFocus=!1,e.multiline&&t.addClass("autoscroll"),e.strong&&t.addClass("strong")},initLayoutRect:function(){var e=this,n=e._super();if(e.settings.multiline){var r=t.getSize(e.getEl());r.width>n.maxW&&(n.minW=n.maxW,e.addClass("multiline")),e.getEl().style.width=n.minW+"px",n.startMinH=n.h=n.minH=Math.min(n.maxH,t.getSize(e.getEl()).height)}return n},repaint:function(){var e=this;return e.settings.multiline||(e.getEl().style.lineHeight=e.layoutRect().h+"px"),e._super()},text:function(e){var t=this;return t._rendered&&e&&this.innerHtml(t.encode(e)),t._super(e)},renderHtml:function(){var e=this,t=e.settings.forId;return'"}})}),r(Ft,[j],function(e){return e.extend({Defaults:{role:"toolbar",layout:"flow"},init:function(e){var t=this;t._super(e),t.addClass("toolbar")},postRender:function(){var e=this;return e.items().addClass("toolbar-item"),e._super()}})}),r(zt,[Ft],function(e){return e.extend({Defaults:{role:"menubar",containerCls:"menubar",ariaRoot:!0,defaults:{type:"menubutton"}}})}),r(Wt,[Ct,q,zt],function(e,t,n){function r(e,t){for(;e;){if(t===e)return!0;e=e.parentNode}return!1}var i=e.extend({init:function(e){var t=this;t._renderOpen=!0,t._super(e),t.addClass("menubtn"),e.fixedWidth&&t.addClass("fixed-width"),t.aria("haspopup",!0),t.hasPopup=!0},showMenu:function(){var e=this,n=e.settings,r;return e.menu&&e.menu.visible()?e.hideMenu():(e.menu||(r=n.menu||[],r.length?r={type:"menu",items:r}:r.type=r.type||"menu",e.menu=t.create(r).parent(e).renderTo(),e.fire("createmenu"),e.menu.reflow(),e.menu.on("cancel",function(t){t.control.parent()===e.menu&&(t.stopPropagation(),e.focus(),e.hideMenu())}),e.menu.on("select",function(){e.focus()}),e.menu.on("show hide",function(t){t.control==e.menu&&e.activeMenu("show"==t.type),e.aria("expanded","show"==t.type)}).fire("show")),e.menu.show(),e.menu.layoutRect({w:e.layoutRect().w}),void e.menu.moveRel(e.getEl(),e.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"]))},hideMenu:function(){var e=this;e.menu&&(e.menu.items().each(function(e){e.hideMenu&&e.hideMenu()}),e.menu.hide())},activeMenu:function(e){this.toggleClass("active",e)},renderHtml:function(){var e=this,t=e._id,r=e.classPrefix,i=e.settings.icon?r+"ico "+r+"i-"+e.settings.icon:"";return e.aria("role",e.parent()instanceof n?"menuitem":"button"),'
    '},postRender:function(){var e=this;return e.on("click",function(t){t.control===e&&r(t.target,e.getEl())&&(e.showMenu(),t.aria&&e.menu.items()[0].focus())}),e.on("mouseenter",function(t){var n=t.control,r=e.parent(),o;n&&r&&n instanceof i&&n.parent()==r&&(r.items().filter("MenuButton").each(function(e){e.hideMenu&&e!=n&&(e.menu&&e.menu.visible()&&(o=!0),e.hideMenu())}),o&&(n.focus(),n.showMenu()))}),e._super()},text:function(e){var t=this,n,r;if(t._rendered)for(r=t.getEl("open").getElementsByTagName("span"),n=0;n0&&(o=n[0].text,t._value=n[0].value),e.menu=n}e.text=e.text||o||n[0].text,t._super(e),t.addClass("listbox"),t.on("select",function(n){var r=n.control;a&&(n.lastControl=a),e.multiple?r.active(!r.active()):t.value(n.control.settings.value),a=r})},value:function(e){function t(e,n){e.items().each(function(e){r=e.value()===n,r&&(i=i||e.text()),e.active(r),e.menu&&t(e.menu,n)})}var n=this,r,i,o,a;if("undefined"!=typeof e){if(n.menu)t(n.menu,e);else for(o=n.settings.menu,a=0;a'+("-"!==o?' ":"")+("-"!==o?''+o+"":"")+(l?'
    '+l+"
    ":"")+(r.menu?'
    ':"")+""},postRender:function(){var e=this,t=e.settings,n=t.textStyle;if("function"==typeof n&&(n=n.call(this)),n){var r=e.getEl("text");r&&r.setAttribute("style",n)}return e.on("mouseenter click",function(n){n.control===e&&(t.menu||"click"!==n.type?(e.showMenu(),n.aria&&e.menu.focus(!0)):(e.fire("select"),e.parent().hideAll()))}),e._super(),e},active:function(e){return"undefined"!=typeof e&&this.aria("checked",e),this._super(e)},remove:function(){this._super(),this.menu&&this.menu.remove()}})}),r(qt,[Q,Ut,p],function(e,t,n){var r=e.extend({Defaults:{defaultType:"menuitem",border:1,layout:"stack",role:"application",bodyRole:"menu",ariaRoot:!0},init:function(e){var t=this;if(e.autohide=!0,e.constrainToViewport=!0,e.itemDefaults)for(var r=e.items,i=r.length;i--;)r[i]=n.extend({},e.itemDefaults,r[i]);t._super(e),t.addClass("menu")},repaint:function(){return this.toggleClass("menu-align",!0),this._super(),this.getEl().style.height="",this.getEl("body").style.height="",this},cancel:function(){var e=this;e.hideAll(),e.fire("select")},hideAll:function(){var e=this;return this.find("menuitem").exec("hideMenu"),e._super()},preRender:function(){var e=this;return e.items().each(function(t){var n=t.settings;return n.icon||n.selectable?(e._hasIcons=!0,!1):void 0}),e._super()}});return r}),r($t,[wt],function(e){return e.extend({Defaults:{classes:"radio",role:"radio"}})}),r(jt,[bt,K],function(e,t){return e.extend({renderHtml:function(){var e=this,t=e.classPrefix;return e.addClass("resizehandle"),"both"==e.settings.direction&&e.addClass("resizehandle-both"),e.canFocus=!1,'
    '},postRender:function(){var e=this;e._super(),e.resizeDragHelper=new t(this._id,{start:function(){e.fire("ResizeStart")},drag:function(t){"both"!=e.settings.direction&&(t.deltaX=0),e.fire("Resize",t)},stop:function(){e.fire("ResizeEnd")}})},remove:function(){return this.resizeDragHelper&&this.resizeDragHelper.destroy(),this._super()}})}),r(Kt,[bt],function(e){return e.extend({renderHtml:function(){var e=this;return e.addClass("spacer"),e.canFocus=!1,'
    '}})}),r(Yt,[Wt,V],function(e,t){return e.extend({Defaults:{classes:"widget btn splitbtn",role:"button"},repaint:function(){var e=this,n=e.getEl(),r=e.layoutRect(),i,o;return e._super(),i=n.firstChild,o=n.lastChild,t.css(i,{width:r.w-t.getSize(o).width,height:r.h-2}),t.css(o,{height:r.h-2}),e},activeMenu:function(e){var n=this;t.toggleClass(n.getEl().lastChild,n.classPrefix+"active",e)},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,r=e.settings.icon?n+"ico "+n+"i-"+e.settings.icon:"";return'
    '},postRender:function(){var e=this,t=e.settings.onclick;return e.on("click",function(e){var n=e.target;if(e.control==this)for(;n;){if(e.aria&&"down"!=e.aria.key||"BUTTON"==n.nodeName&&-1==n.className.indexOf("open"))return e.stopImmediatePropagation(),void t.call(this,e);n=n.parentNode}}),delete e.settings.onclick,e._super()}})}),r(Gt,[Mt],function(e){return e.extend({Defaults:{containerClass:"stack-layout",controlClass:"stack-layout-item",endClass:"break"}})}),r(Xt,[G,V],function(e,t){return e.extend({lastIdx:0,Defaults:{layout:"absolute",defaults:{type:"panel"}},activateTab:function(e){var n;this.activeTabId&&(n=this.getEl(this.activeTabId),t.removeClass(n,this.classPrefix+"active"),n.setAttribute("aria-selected","false")),this.activeTabId="t"+e,n=this.getEl("t"+e),n.setAttribute("aria-selected","true"),t.addClass(n,this.classPrefix+"active"),e!=this.lastIdx&&(this.items()[this.lastIdx].hide(),this.lastIdx=e),this.items()[e].show().fire("showtab"),this.reflow()},renderHtml:function(){var e=this,t=e._layout,n="",r=e.classPrefix;return e.preRender(),t.preRender(e),e.items().each(function(t,i){var o=e._id+"-t"+i;t.aria("role","tabpanel"),t.aria("labelledby",o),n+='"}),'
    '+n+'
    '+t.renderHtml(e)+"
    "},postRender:function(){var e=this;e._super(),e.settings.activeTab=e.settings.activeTab||0,e.activateTab(e.settings.activeTab),this.on("click",function(t){var n=t.target.parentNode;if(t.target.parentNode.id==e._id+"-head")for(var r=n.childNodes.length;r--;)n.childNodes[r]==t.target&&e.activateTab(r)})},initLayoutRect:function(){var e=this,n,r,i;r=t.getSize(e.getEl("head")).width,r=0>r?0:r,i=0,e.items().each(function(t,n){r=Math.max(r,t.layoutRect().minW),i=Math.max(i,t.layoutRect().minH),e.settings.activeTab!=n&&t.hide()}),e.items().each(function(e){e.settings.x=0,e.settings.y=0,e.settings.w=r,e.settings.h=i,e.layoutRect({x:0,y:0,w:r,h:i})});var o=t.getSize(e.getEl("head")).height;return e.settings.minWidth=r,e.settings.minHeight=i+o,n=e._super(),n.deltaH+=o,n.innerH=n.h-n.deltaH,n}})}),r(Jt,[bt,V],function(e,t){return e.extend({init:function(e){var t=this;t._super(e),t._value=e.value||"",t.addClass("textbox"),e.multiline?t.addClass("multiline"):t.on("keydown",function(e){13==e.keyCode&&t.parents().reverse().each(function(t){return e.preventDefault(),t.hasEventListeners("submit")&&t.toJSON?(t.fire("submit",{data:t.toJSON()}),!1):void 0})})},disabled:function(e){var t=this;return t._rendered&&"undefined"!=typeof e&&(t.getEl().disabled=e),t._super(e)},value:function(e){var t=this;return"undefined"!=typeof e?(t._value=e,t._rendered&&(t.getEl().value=e),t):t._rendered?t.getEl().value:t._value},repaint:function(){var e=this,t,n,r,i=0,o=0,a;t=e.getEl().style,n=e._layoutRect,a=e._lastRepaintRect||{};var s=document;return!e.settings.multiline&&s.all&&(!s.documentMode||s.documentMode<=8)&&(t.lineHeight=n.h-o+"px"),r=e._borderBox,i=r.left+r.right+8,o=r.top+r.bottom+(e.settings.multiline?8:0),n.x!==a.x&&(t.left=n.x+"px",a.x=n.x),n.y!==a.y&&(t.top=n.y+"px",a.y=n.y),n.w!==a.w&&(t.width=n.w-i+"px",a.w=n.w),n.h!==a.h&&(t.height=n.h-o+"px",a.h=n.h),e._lastRepaintRect=a,e.fire("repaint",{},!1),e},renderHtml:function(){var e=this,t=e._id,n=e.settings,r=e.encode(e._value,!1),i="";return"spellcheck"in n&&(i+=' spellcheck="'+n.spellcheck+'"'),n.maxLength&&(i+=' maxlength="'+n.maxLength+'"'),n.size&&(i+=' size="'+n.size+'"'),n.subtype&&(i+=' type="'+n.subtype+'"'),e.disabled()&&(i+=' disabled="disabled"'),n.multiline?'":'"},postRender:function(){var e=this;return t.on(e.getEl(),"change",function(t){e.fire("change",t)}),e._super()},remove:function(){t.off(this.getEl()),this._super()}})}),r(Qt,[V],function(e){return function(t){var n=this,r;n.show=function(i){return n.hide(),r=!0,window.setTimeout(function(){r&&t.appendChild(e.createFragment('
    '))},i||0),n},n.hide=function(){var e=t.lastChild;return e&&-1!=e.className.indexOf("throbber")&&e.parentNode.removeChild(e),r=!1,n}}}),a([l,c,u,d,f,p,m,h,g,v,y,b,C,x,w,_,N,E,S,k,T,R,A,B,L,D,M,H,P,O,I,F,z,W,V,U,q,$,j,K,Y,G,X,J,Q,Z,et,tt,nt,rt,it,ot,at,st,lt,ct,ut,dt,ft,pt,mt,ht,gt,vt,yt,bt,Ct,xt,wt,_t,Nt,Et,St,kt,Tt,Rt,At,Bt,Lt,Dt,Mt,Ht,Pt,Ot,It,Ft,zt,Wt,Vt,Ut,qt,$t,jt,Kt,Yt,Gt,Xt,Jt,Qt])}(this); \ No newline at end of file diff --git a/lms/envs/common.py b/lms/envs/common.py index 021916764f..a5be087ba1 100644 --- a/lms/envs/common.py +++ b/lms/envs/common.py @@ -793,7 +793,7 @@ main_vendor_js = [ 'js/vendor/ova/vjs.youtube.js', 'js/vendor/ova/rangeslider.js', 'js/vendor/ova/share-annotator.js', - 'js/vendor/ova/tinymce.min.js', + 'js/vendor/ova/tinymce.full.min.js', 'js/vendor/ova/richText-annotator.js', 'js/vendor/ova/reply-annotator.js', 'js/vendor/ova/tags-annotator.js', @@ -831,6 +831,18 @@ PIPELINE_CSS = { ], 'output_filename': 'css/lms-style-vendor.css', }, + 'style-vendor-tinymce-content': { + 'source_filenames': [ + 'js/vendor/tinymce/js/tinymce/skins/studio-tmce4/content.min.css' + ], + 'output_filename': 'css/lms-style-vendor-tinymce-content.css', + }, + 'style-vendor-tinymce-skin': { + 'source_filenames': [ + 'js/vendor/tinymce/js/tinymce/skins/studio-tmce4/skin.min.css' + ], + 'output_filename': 'css/lms-style-vendor-tinymce-skin.css', + }, 'style-app': { 'source_filenames': [ 'sass/application.css', diff --git a/lms/templates/courseware/instructor_dashboard.html b/lms/templates/courseware/instructor_dashboard.html index 2dda9274e2..dd24e3b222 100644 --- a/lms/templates/courseware/instructor_dashboard.html +++ b/lms/templates/courseware/instructor_dashboard.html @@ -9,6 +9,8 @@ <%block name="headextra"> <%static:css group='style-course-vendor'/> +<%static:css group='style-vendor-tinymce-content'/> +<%static:css group='style-vendor-tinymce-skin'/> <%static:css group='style-course'/> @@ -17,8 +19,8 @@ - - + + diff --git a/lms/templates/instructor/instructor_dashboard_2/instructor_dashboard_2.html b/lms/templates/instructor/instructor_dashboard_2/instructor_dashboard_2.html index 8191b8c3ec..c83def0629 100644 --- a/lms/templates/instructor/instructor_dashboard_2/instructor_dashboard_2.html +++ b/lms/templates/instructor/instructor_dashboard_2/instructor_dashboard_2.html @@ -22,6 +22,8 @@ <%block name="headextra"> <%static:css group='style-course-vendor'/> + <%static:css group='style-vendor-tinymce-content'/> + <%static:css group='style-vendor-tinymce-skin'/> <%static:css group='style-course'/> @@ -37,8 +39,8 @@ - - + + <%static:js group='module-descriptor-js'/> <%static:js group='instructor_dash'/> diff --git a/vendor_extra/tinymce/JakePackage.zip b/vendor_extra/tinymce/JakePackage.zip new file mode 100644 index 0000000000000000000000000000000000000000..f22e4276c215a06f77daf5044bf09372c5d4b122 GIT binary patch literal 6409572 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ɑn%s? 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
  • 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

    (KAJMcM*Q}bC%959 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 Z-bZ9DPng~^<1 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

    b49U7T5FkG$;+-V58a%$(ceK* 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и=K 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⩔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≦le$BTElJy|zO7dIzI| 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

    +RS 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�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�H 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

    WpuG`hR6OZm#no3<;aQ`vv44hrsIdWLd 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

    9C>Lh7NCXH*efD(egSz{n6sv*-@_H| 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¥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 z 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

    llp5 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

    9IM^Fh)( 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

    Kff^-o`V`E9pY}kMC?)~ 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

    %7Q9dvM$>+)+S!aDaJZ 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 z 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�iZqn&q}kW7H)NoC5#@051mQgo^+rC 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

    *}h=K#ZS>ui|(s&h8gV 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%0DIT%wIQA^r8!!{h-`;7*j&& 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 z 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

    tc~|XIwg%Fy5cY%!%*R}jbX@h%=O4as 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

    KeDas(#j&<%??+ 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

    #h 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૜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,`x-WDNR1IF_P_N85ihHcauirT?efOLiIyUK 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%0DL0@Fh-f|es{v72=HI!3Gb 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

    ;nfL{z6{~WEr&RhH)D*F9t>y)f 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

    gp>`$ZF?ngPnyw6Dtgx#&1kcj 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

    2Jc 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

    s_B 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 z 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%0DbxTW;3G1pFRfMGC^sO|%!Grp#QmUchF(G$ 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 z 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 z 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

    sm)2uZN`A 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�TDMNbjoAk126)Id1z@)uJPM-kCD0~|K0 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 literal 0 HcmV?d00001 From 786b416badbbd57202ee5111c9cdfb2c09b21100 Mon Sep 17 00:00:00 2001 From: Frances Botsford Date: Mon, 31 Mar 2014 17:04:47 -0400 Subject: [PATCH 04/11] removing tinymce button border only on active to counteract fun LMS button styles --- .../vendor/tinymce/js/tinymce/skins/studio-tmce4/skin.min.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/skin.min.css b/common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/skin.min.css index b1abc5b436..8f199d2c06 100755 --- a/common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/skin.min.css +++ b/common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/skin.min.css @@ -1 +1 @@ -.mce-container,.mce-container *,.mce-widget,.mce-widget *{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:#555;font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;-webkit-tap-highlight-color:transparent;line-height:normal;font-weight:normal;text-align:left;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr}.mce-widget button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.mce-container *[unselectable]{-moz-user-select:none;-webkit-user-select:none;-o-user-select:none;user-select:none}.mce-container ::-webkit-scrollbar{width:8px;height:8px;-webkit-border-radius:4px}.mce-container ::-webkit-scrollbar-track,.mce-container ::-webkit-scrollbar-track-piece{background-color:transparent}.mce-container ::-webkit-scrollbar-thumb{background-color:rgba(53,57,71,0.3);width:6px;height:6px;-webkit-border-radius:4px}.mce-fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.mce-fade.mce-in{opacity:1}.mce-tinymce{visibility:visible !important;position:relative}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%;z-index:100}div.mce-fullscreen{position:fixed;top:0;left:0;width:100%;height:auto}.mce-tinymce{display:block;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mce-wordcount{position:absolute;top:0;right:0;padding:8px}div.mce-edit-area{background:#FFF;filter:none}.mce-statusbar{position:relative}.mce-statusbar .mce-container-body{position:relative}.mce-fullscreen .mce-resizehandle{display:none}.mce-charmap{border-collapse:collapse}.mce-charmap td{cursor:default;border:1px solid #9e9e9e;width:20px;height:20px;line-height:20px;text-align:center;vertical-align:middle;padding:2px}.mce-charmap td div{text-align:center}.mce-charmap td:hover{background:#d9d9d9}.mce-grid td div{border:1px solid #d6d6d6;width:12px;height:12px;margin:2px;cursor:pointer}.mce-grid{border-spacing:2px;border-collapse:separate}.mce-grid a{display:block;border:1px solid transparent}.mce-grid a:hover{border-color:#a1a1a1}.mce-grid-border{margin:0 4px 0 4px}.mce-grid-border a{border-color:#d6d6d6;width:13px;height:13px}.mce-grid-border a:hover,.mce-grid-border a.mce-active{border-color:#a1a1a1;background:#c8def4}.mce-text-center{text-align:center}div.mce-tinymce-inline{width:100%;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-rtl .mce-wordcount{left:0;right:auto}.mce-container,.mce-container-body{display:block}.mce-autoscroll{overflow:hidden}.mce-scrollbar{position:absolute;width:7px;height:100%;top:2px;right:2px;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-scrollbar-h{top:auto;right:auto;left:2px;bottom:2px;width:100%;height:7px}.mce-scrollbar-thumb{position:absolute;background-color:#000;border:1px solid #888;border-color:rgba(85,85,85,0.6);width:5px;height:100%;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scrollbar-h .mce-scrollbar-thumb{width:100%;height:5px}.mce-scrollbar:hover,.mce-scrollbar.mce-active{background-color:#AAA;opacity:.6;filter:alpha(opacity=60);zoom:1;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scroll{position:relative}.mce-panel{border:0 solid #9e9e9e;background-color:#f0f0f0}.mce-floatpanel{position:absolute;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2)}.mce-floatpanel.mce-fixed{position:fixed}.mce-floatpanel .mce-arrow,.mce-floatpanel .mce-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.mce-floatpanel .mce-arrow{border-width:11px}.mce-floatpanel .mce-arrow:after{border-width:10px;content:""}.mce-floatpanel.mce-popover{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);top:0;left:0;background:#fff;border:1px solid #9e9e9e;border:1px solid rgba(0,0,0,0.25)}.mce-floatpanel.mce-popover.mce-bottom{margin-top:10px;*margin-top:0}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#9e9e9e;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;background:#fff;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#fff;position:fixed;top:0;left:0;opacity:0;-webkit-transition:opacity 150ms ease-in;transition:opacity 150ms ease-in}.mce-window.mce-in{opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #ddd;position:relative}.mce-window-head .mce-close{position:absolute;right:15px;top:9px;font-size:20px;font-weight:bold;line-height:20px;color:#999;cursor:pointer;height:20px;overflow:hidden}.mce-close:hover{color:#bbb}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:10px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#fff;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window.mce-fullscreen,.mce-window.mce-fullscreen .mce-foot{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:15px}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:#fff;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-inner{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-tooltip-inner{-webkit-box-shadow:0 0 5px #000000;-moz-box-shadow:0 0 5px #000000;box-shadow:0 0 5px #000000}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-n .mce-tooltip-arrow{top:0px;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-btn{border:0;position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;background-color:transparent}.mce-btn:hover,.mce-btn:focus{color:#626b73;background-color:#c1cad5}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{background-color:#b2beca;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn:not(.mce-disabled):active{background-color:#b2beca;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn button{padding:4px 8px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#626b73;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px #eee;font-size:.9em;text-align:center}.mce-primary{min-width:50px;color:#fff;border:1px solid #007FB8;background-color:#009FE6;background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.3), rgba(255, 255, 255, 0));}.mce-primary:hover,.mce-primary:focus{background-color:#0388c3}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#0376a9;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-primary button,.mce-primary button i{color:#fff;text-transform:uppercase;}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:3px 5px;font-size:12px;line-height:15px}.mce-btn-small i{margin-top:0}.mce-btn .mce-caret{margin-top:8px;*margin-top:6px;margin-left:0}.mce-btn-small .mce-caret{margin-top:6px;*margin-top:4px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #626b73;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #626b73;border-top:0}.mce-rtl .mce-btn button{direction:rtl}.mce-btn-group .mce-btn{border-width:0;margin:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-btn-group .mce-first{border-left:1px solid #eef1f5;border-left:0;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.mce-btn-group .mce-last{border-right:0;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.mce-btn-group .mce-first.mce-last{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#d0d7df;text-indent:-10em;*font-size:0;*line-height:0;*text-indent:0;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#626b73;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid #59a5e1;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(89, 165, 225, 0.85);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(89, 165, 225, 0.85);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(89, 165, 225, 0.85)}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#bababa}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-colorbutton button{padding-right:4px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-14px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-17px;padding-right:0;width:16px}.mce-colorbutton .mce-open{padding-left:4px;border-left:1px solid transparent;border-right:1px solid transparent}.mce-colorbutton:hover .mce-open{border-left-color:#cad6e3;border-right-color:#cad6e3}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:3px;margin-right:-14px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;margin-right:-17px;padding-left:0}.mce-rtl .mce-colorbutton button{padding-right:10px;padding-left:10px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px}.mce-combobox{display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#bbb}.mce-combobox.mce-has-open input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.mce-combobox .mce-btn{border-left:0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#555}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#666;color:#fff}.mce-path .mce-divider{display:inline}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9E9E9E;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid #9e9e9e;width:100%;height:100%}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);border:0;overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-menubar{border:1px solid #c4c4c4}.mce-menubar .mce-menubtn button span{color:#555}.mce-menubar .mce-caret{border-top-color:#555}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:transparent;background:#a9bcd1;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-menubtn.mce-disabled span{color:#aaa}.mce-menubtn span{color:#626b73;margin-right:2px;line-height:20px;*line-height:16px}.mce-menubtn.mce-btn-small span{font-size:12px;line-height:15px;*line-height:16px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-rtl .mce-menubtn button{direction:rtl;text-align:right}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-menu-item{display:block;padding:6px 15px 6px 12px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-ico,.mce-menu-item .mce-text{color:#333}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled .mce-ico{color:#adadad}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text{color:#fff}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:#fff}.mce-menu-item.mce-disabled:hover{background:#ccc}.mce-menu-shortcut{display:inline-block;color:#adadad}.mce-menu-shortcut{display:inline-block;*display:inline;*zoom:1;padding:0 15px 0 20px}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item.mce-selected .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:#fff}.mce-menu-item .mce-caret{margin-top:4px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #333}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret,.mce-menu-item:hover .mce-caret{border-left-color:#fff}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item-normal.mce-active{background-color:#c8def4}.mce-menu-item-preview.mce-active{border-left:5px solid #aaa}.mce-menu-item-normal.mce-active .mce-text{color:#333}.mce-menu-item-normal.mce-active:hover .mce-text,.mce-menu-item-normal.mce-active:hover .mce-ico{color:#fff}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:#fff;background-color:#0081c2}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:#cbcbcb;border-bottom:1px solid #fff;cursor:default;filter:none}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-menu-align.mce-rtl .mce-menu-shortcut,.mce-menu-align.mce-rtl .mce-caret{right:auto;left:0}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #333;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:#fff}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:2px 0 0;min-width:160px;background:#fff;border:1px solid #989898;border:1px solid rgba(0,0,0,0.2);z-index:1002;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;*display:inline}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#555}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent;border-right:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#cad6e3;border-right-color:#cad6e3}.mce-splitbtn button{padding-right:4px}.mce-splitbtn .mce-open{padding-left:4px}.mce-splitbtn .mce-open.mce-active{-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:10px;padding-left:10px}.mce-rtl .mce-splitbtn .mce-open{padding-left:4px;padding-right:4px}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#e5ecf3;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#fdfdfd}.mce-tab.mce-active{background:#fdfdfd;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);display:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#555}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:#59a5e1;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(89, 165, 225, 0.85);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(89, 165, 225, 0.85);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(89, 165, 225, 0.85)}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px}.mce-textbox.mce-disabled{color:#bbb}.mce-rtl .mce-textbox{text-align:right;direction:rtl}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}@font-face{font-family:'tinymce';src:url('fonts/icomoon.eot');src:url('fonts/icomoon.eot?#iefix') format('embedded-opentype'),url('fonts/icomoon.svg#icomoon') format('svg'),url('fonts/icomoon.woff') format('woff'),url('fonts/icomoon.ttf') format('truetype');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/icomoon-small.eot');src:url('fonts/icomoon-small.eot?#iefix') format('embedded-opentype'),url('fonts/icomoon-small.svg#icomoon') format('svg'),url('fonts/icomoon-small.woff') format('woff'),url('fonts/icomoon-small.ttf') format('truetype');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce',Arial;font-style:normal;font-weight:normal;font-size:16px;line-height:16px;vertical-align:middle;-webkit-font-smoothing:antialiased;display:inline-block;background:transparent center center;width:16px;height:16px;color:#626b73}.mce-btn-small .mce-ico{font-family:'tinymce-small',Arial}.mce-i-save:before{content:"\e000"}.mce-i-newdocument:before{content:"\e001"}.mce-i-fullpage:before{content:"\e002"}.mce-i-alignleft:before{content:"\e003"}.mce-i-aligncenter:before{content:"\e004"}.mce-i-alignright:before{content:"\e005"}.mce-i-alignjustify:before{content:"\e006"}.mce-i-cut:before{content:"\e007"}.mce-i-paste:before{content:"\e008"}.mce-i-searchreplace:before{content:"\e009"}.mce-i-bullist:before{content:"\e00a"}.mce-i-numlist:before{content:"\e00b"}.mce-i-indent:before{content:"\e00c"}.mce-i-outdent:before{content:"\e00d"}.mce-i-blockquote:before{content:"\e00e"}.mce-i-undo:before{content:"\e00f"}.mce-i-redo:before{content:"\e010"}.mce-i-link:before{content:"\e011"}.mce-i-unlink:before{content:"\e012"}.mce-i-anchor:before{content:"\e013"}.mce-i-image:before{content:"\e014"}.mce-i-media:before{content:"\e015"}.mce-i-help:before{content:"\e016"}.mce-i-code:before{content:"\e017"}.mce-i-inserttime:before{content:"\e018"}.mce-i-preview:before{content:"\e019"}.mce-i-forecolor:before{content:"\e01a"}.mce-i-backcolor:before{content:"\e01a"}.mce-i-table:before{content:"\e01b"}.mce-i-hr:before{content:"\e01c"}.mce-i-removeformat:before{content:"\e01d"}.mce-i-subscript:before{content:"\e01e"}.mce-i-superscript:before{content:"\e01f"}.mce-i-charmap:before{content:"\e020"}.mce-i-emoticons:before{content:"\e021"}.mce-i-print:before{content:"\e022"}.mce-i-fullscreen:before{content:"\e023"}.mce-i-spellchecker:before{content:"\e024"}.mce-i-nonbreaking:before{content:"\e025"}.mce-i-template:before{content:"\e026"}.mce-i-pagebreak:before{content:"\e027"}.mce-i-restoredraft:before{content:"\e028"}.mce-i-untitled:before{content:"\e029"}.mce-i-bold:before{content:"\e02a"}.mce-i-italic:before{content:"\e02b"}.mce-i-underline:before{content:"\e02c"}.mce-i-strikethrough:before{content:"\e02d"}.mce-i-visualchars:before{content:"\e02e"}.mce-i-visualblocks:before{content:"\e02e"}.mce-i-ltr:before{content:"\e02f"}.mce-i-rtl:before{content:"\e030"}.mce-i-copy:before{content:"\e031"}.mce-i-resize:before{content:"\e032"}.mce-i-browse:before{content:"\e034"}.mce-i-pastetext:before{content:"\e035"}.mce-i-checkbox:before,.mce-i-selected:before{content:"\e033"}.mce-i-selected{visibility:hidden}i.mce-i-backcolor{text-shadow:none;background:#bbb} +.mce-container,.mce-container *,.mce-widget,.mce-widget *{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:#555;font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;-webkit-tap-highlight-color:transparent;line-height:normal;font-weight:normal;text-align:left;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr}.mce-widget button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.mce-container *[unselectable]{-moz-user-select:none;-webkit-user-select:none;-o-user-select:none;user-select:none}.mce-container ::-webkit-scrollbar{width:8px;height:8px;-webkit-border-radius:4px}.mce-container ::-webkit-scrollbar-track,.mce-container ::-webkit-scrollbar-track-piece{background-color:transparent}.mce-container ::-webkit-scrollbar-thumb{background-color:rgba(53,57,71,0.3);width:6px;height:6px;-webkit-border-radius:4px}.mce-fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.mce-fade.mce-in{opacity:1}.mce-tinymce{visibility:visible !important;position:relative}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%;z-index:100}div.mce-fullscreen{position:fixed;top:0;left:0;width:100%;height:auto}.mce-tinymce{display:block;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mce-wordcount{position:absolute;top:0;right:0;padding:8px}div.mce-edit-area{background:#FFF;filter:none}.mce-statusbar{position:relative}.mce-statusbar .mce-container-body{position:relative}.mce-fullscreen .mce-resizehandle{display:none}.mce-charmap{border-collapse:collapse}.mce-charmap td{cursor:default;border:1px solid #9e9e9e;width:20px;height:20px;line-height:20px;text-align:center;vertical-align:middle;padding:2px}.mce-charmap td div{text-align:center}.mce-charmap td:hover{background:#d9d9d9}.mce-grid td div{border:1px solid #d6d6d6;width:12px;height:12px;margin:2px;cursor:pointer}.mce-grid{border-spacing:2px;border-collapse:separate}.mce-grid a{display:block;border:1px solid transparent}.mce-grid a:hover{border-color:#a1a1a1}.mce-grid-border{margin:0 4px 0 4px}.mce-grid-border a{border-color:#d6d6d6;width:13px;height:13px}.mce-grid-border a:hover,.mce-grid-border a.mce-active{border-color:#a1a1a1;background:#c8def4}.mce-text-center{text-align:center}div.mce-tinymce-inline{width:100%;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-rtl .mce-wordcount{left:0;right:auto}.mce-container,.mce-container-body{display:block}.mce-autoscroll{overflow:hidden}.mce-scrollbar{position:absolute;width:7px;height:100%;top:2px;right:2px;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-scrollbar-h{top:auto;right:auto;left:2px;bottom:2px;width:100%;height:7px}.mce-scrollbar-thumb{position:absolute;background-color:#000;border:1px solid #888;border-color:rgba(85,85,85,0.6);width:5px;height:100%;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scrollbar-h .mce-scrollbar-thumb{width:100%;height:5px}.mce-scrollbar:hover,.mce-scrollbar.mce-active{background-color:#AAA;opacity:.6;filter:alpha(opacity=60);zoom:1;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scroll{position:relative}.mce-panel{border:0 solid #9e9e9e;background-color:#f0f0f0}.mce-floatpanel{position:absolute;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2)}.mce-floatpanel.mce-fixed{position:fixed}.mce-floatpanel .mce-arrow,.mce-floatpanel .mce-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.mce-floatpanel .mce-arrow{border-width:11px}.mce-floatpanel .mce-arrow:after{border-width:10px;content:""}.mce-floatpanel.mce-popover{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);top:0;left:0;background:#fff;border:1px solid #9e9e9e;border:1px solid rgba(0,0,0,0.25)}.mce-floatpanel.mce-popover.mce-bottom{margin-top:10px;*margin-top:0}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#9e9e9e;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;background:#fff;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#fff;position:fixed;top:0;left:0;opacity:0;-webkit-transition:opacity 150ms ease-in;transition:opacity 150ms ease-in}.mce-window.mce-in{opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #ddd;position:relative}.mce-window-head .mce-close{position:absolute;right:15px;top:9px;font-size:20px;font-weight:bold;line-height:20px;color:#999;cursor:pointer;height:20px;overflow:hidden}.mce-close:hover{color:#bbb}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:10px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#fff;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window.mce-fullscreen,.mce-window.mce-fullscreen .mce-foot{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:15px}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:#fff;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-inner{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-tooltip-inner{-webkit-box-shadow:0 0 5px #000000;-moz-box-shadow:0 0 5px #000000;box-shadow:0 0 5px #000000}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-n .mce-tooltip-arrow{top:0px;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-btn{border:0;position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;background-color:transparent}.mce-btn:hover,.mce-btn:focus{color:#626b73;background-color:#c1cad5}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{background-color:#b2beca;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn:not(.mce-disabled):active{background-color:#b2beca;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn button{padding:4px 8px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#626b73;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button:active{border: none !important;}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px #eee;font-size:.9em;text-align:center}.mce-primary{min-width:50px;color:#fff;border:1px solid #007FB8;background-color:#009FE6;background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.3), rgba(255, 255, 255, 0));}.mce-primary:hover,.mce-primary:focus{background-color:#0388c3}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#0376a9;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-primary button,.mce-primary button i{color:#fff;text-transform:uppercase;}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:3px 5px;font-size:12px;line-height:15px}.mce-btn-small i{margin-top:0}.mce-btn .mce-caret{margin-top:8px;*margin-top:6px;margin-left:0}.mce-btn-small .mce-caret{margin-top:6px;*margin-top:4px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #626b73;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #626b73;border-top:0}.mce-rtl .mce-btn button{direction:rtl}.mce-btn-group .mce-btn{border-width:0;margin:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-btn-group .mce-first{border-left:1px solid #eef1f5;border-left:0;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.mce-btn-group .mce-last{border-right:0;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.mce-btn-group .mce-first.mce-last{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#d0d7df;text-indent:-10em;*font-size:0;*line-height:0;*text-indent:0;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#626b73;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid #59a5e1;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(89, 165, 225, 0.85);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(89, 165, 225, 0.85);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(89, 165, 225, 0.85)}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#bababa}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-colorbutton button{padding-right:4px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-14px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-17px;padding-right:0;width:16px}.mce-colorbutton .mce-open{padding-left:4px;border-left:1px solid transparent;border-right:1px solid transparent}.mce-colorbutton:hover .mce-open{border-left-color:#cad6e3;border-right-color:#cad6e3}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:3px;margin-right:-14px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;margin-right:-17px;padding-left:0}.mce-rtl .mce-colorbutton button{padding-right:10px;padding-left:10px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px}.mce-combobox{display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#bbb}.mce-combobox.mce-has-open input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.mce-combobox .mce-btn{border-left:0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#555}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#666;color:#fff}.mce-path .mce-divider{display:inline}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9E9E9E;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid #9e9e9e;width:100%;height:100%}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);border:0;overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-menubar{border:1px solid #c4c4c4}.mce-menubar .mce-menubtn button span{color:#555}.mce-menubar .mce-caret{border-top-color:#555}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:transparent;background:#a9bcd1;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-menubtn.mce-disabled span{color:#aaa}.mce-menubtn span{color:#626b73;margin-right:2px;line-height:20px;*line-height:16px}.mce-menubtn.mce-btn-small span{font-size:12px;line-height:15px;*line-height:16px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-rtl .mce-menubtn button{direction:rtl;text-align:right}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-menu-item{display:block;padding:6px 15px 6px 12px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-ico,.mce-menu-item .mce-text{color:#333}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled .mce-ico{color:#adadad}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text{color:#fff}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:#fff}.mce-menu-item.mce-disabled:hover{background:#ccc}.mce-menu-shortcut{display:inline-block;color:#adadad}.mce-menu-shortcut{display:inline-block;*display:inline;*zoom:1;padding:0 15px 0 20px}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item.mce-selected .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:#fff}.mce-menu-item .mce-caret{margin-top:4px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #333}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret,.mce-menu-item:hover .mce-caret{border-left-color:#fff}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item-normal.mce-active{background-color:#c8def4}.mce-menu-item-preview.mce-active{border-left:5px solid #aaa}.mce-menu-item-normal.mce-active .mce-text{color:#333}.mce-menu-item-normal.mce-active:hover .mce-text,.mce-menu-item-normal.mce-active:hover .mce-ico{color:#fff}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:#fff;background-color:#0081c2}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:#cbcbcb;border-bottom:1px solid #fff;cursor:default;filter:none}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-menu-align.mce-rtl .mce-menu-shortcut,.mce-menu-align.mce-rtl .mce-caret{right:auto;left:0}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #333;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:#fff}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:2px 0 0;min-width:160px;background:#fff;border:1px solid #989898;border:1px solid rgba(0,0,0,0.2);z-index:1002;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;*display:inline}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#555}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent;border-right:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#cad6e3;border-right-color:#cad6e3}.mce-splitbtn button{padding-right:4px}.mce-splitbtn .mce-open{padding-left:4px}.mce-splitbtn .mce-open.mce-active{-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:10px;padding-left:10px}.mce-rtl .mce-splitbtn .mce-open{padding-left:4px;padding-right:4px}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#e5ecf3;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#fdfdfd}.mce-tab.mce-active{background:#fdfdfd;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);display:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#555}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:#59a5e1;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(89, 165, 225, 0.85);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(89, 165, 225, 0.85);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(89, 165, 225, 0.85)}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px}.mce-textbox.mce-disabled{color:#bbb}.mce-rtl .mce-textbox{text-align:right;direction:rtl}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}@font-face{font-family:'tinymce';src:url('fonts/icomoon.eot');src:url('fonts/icomoon.eot?#iefix') format('embedded-opentype'),url('fonts/icomoon.svg#icomoon') format('svg'),url('fonts/icomoon.woff') format('woff'),url('fonts/icomoon.ttf') format('truetype');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/icomoon-small.eot');src:url('fonts/icomoon-small.eot?#iefix') format('embedded-opentype'),url('fonts/icomoon-small.svg#icomoon') format('svg'),url('fonts/icomoon-small.woff') format('woff'),url('fonts/icomoon-small.ttf') format('truetype');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce',Arial;font-style:normal;font-weight:normal;font-size:16px;line-height:16px;vertical-align:middle;-webkit-font-smoothing:antialiased;display:inline-block;background:transparent center center;width:16px;height:16px;color:#626b73}.mce-btn-small .mce-ico{font-family:'tinymce-small',Arial}.mce-i-save:before{content:"\e000"}.mce-i-newdocument:before{content:"\e001"}.mce-i-fullpage:before{content:"\e002"}.mce-i-alignleft:before{content:"\e003"}.mce-i-aligncenter:before{content:"\e004"}.mce-i-alignright:before{content:"\e005"}.mce-i-alignjustify:before{content:"\e006"}.mce-i-cut:before{content:"\e007"}.mce-i-paste:before{content:"\e008"}.mce-i-searchreplace:before{content:"\e009"}.mce-i-bullist:before{content:"\e00a"}.mce-i-numlist:before{content:"\e00b"}.mce-i-indent:before{content:"\e00c"}.mce-i-outdent:before{content:"\e00d"}.mce-i-blockquote:before{content:"\e00e"}.mce-i-undo:before{content:"\e00f"}.mce-i-redo:before{content:"\e010"}.mce-i-link:before{content:"\e011"}.mce-i-unlink:before{content:"\e012"}.mce-i-anchor:before{content:"\e013"}.mce-i-image:before{content:"\e014"}.mce-i-media:before{content:"\e015"}.mce-i-help:before{content:"\e016"}.mce-i-code:before{content:"\e017"}.mce-i-inserttime:before{content:"\e018"}.mce-i-preview:before{content:"\e019"}.mce-i-forecolor:before{content:"\e01a"}.mce-i-backcolor:before{content:"\e01a"}.mce-i-table:before{content:"\e01b"}.mce-i-hr:before{content:"\e01c"}.mce-i-removeformat:before{content:"\e01d"}.mce-i-subscript:before{content:"\e01e"}.mce-i-superscript:before{content:"\e01f"}.mce-i-charmap:before{content:"\e020"}.mce-i-emoticons:before{content:"\e021"}.mce-i-print:before{content:"\e022"}.mce-i-fullscreen:before{content:"\e023"}.mce-i-spellchecker:before{content:"\e024"}.mce-i-nonbreaking:before{content:"\e025"}.mce-i-template:before{content:"\e026"}.mce-i-pagebreak:before{content:"\e027"}.mce-i-restoredraft:before{content:"\e028"}.mce-i-untitled:before{content:"\e029"}.mce-i-bold:before{content:"\e02a"}.mce-i-italic:before{content:"\e02b"}.mce-i-underline:before{content:"\e02c"}.mce-i-strikethrough:before{content:"\e02d"}.mce-i-visualchars:before{content:"\e02e"}.mce-i-visualblocks:before{content:"\e02e"}.mce-i-ltr:before{content:"\e02f"}.mce-i-rtl:before{content:"\e030"}.mce-i-copy:before{content:"\e031"}.mce-i-resize:before{content:"\e032"}.mce-i-browse:before{content:"\e034"}.mce-i-pastetext:before{content:"\e035"}.mce-i-checkbox:before,.mce-i-selected:before{content:"\e033"}.mce-i-selected{visibility:hidden}i.mce-i-backcolor{text-shadow:none;background:#bbb} From aaf842f83a49459cf9cd97b344fd53a77cf135c5 Mon Sep 17 00:00:00 2001 From: cahrens Date: Mon, 31 Mar 2014 13:05:09 -0400 Subject: [PATCH 05/11] Add dialog plugin code to compressed JS file and CSS file. Needed for TinyMCE CodeMirror plugin. --- .../js/vendor/CodeMirror/codemirror.css | 34 +++++++++++++++++++ .../static/js/vendor/codemirror-compressed.js | 2 +- .../js/tinymce/plugins/codemirror/source.html | 6 ++-- 3 files changed, 38 insertions(+), 4 deletions(-) diff --git a/common/static/js/vendor/CodeMirror/codemirror.css b/common/static/js/vendor/CodeMirror/codemirror.css index 23eaf74d44..f46b0f8c85 100644 --- a/common/static/js/vendor/CodeMirror/codemirror.css +++ b/common/static/js/vendor/CodeMirror/codemirror.css @@ -261,3 +261,37 @@ div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;} visibility: hidden; } } + +.CodeMirror-dialog { + position: absolute; + left: 0; right: 0; + background: white; + z-index: 15; + padding: .1em .8em; + overflow: hidden; + color: #333; +} + +.CodeMirror-dialog-top { + border-bottom: 1px solid #eee; + top: 0; +} + +.CodeMirror-dialog-bottom { + border-top: 1px solid #eee; + bottom: 0; +} + +.CodeMirror-dialog input { + border: none; + outline: none; + background: transparent; + width: 20em; + color: inherit; + font-family: monospace; +} + +.CodeMirror-dialog button { + font-size: 70%; +} + diff --git a/common/static/js/vendor/codemirror-compressed.js b/common/static/js/vendor/codemirror-compressed.js index 0e57f84415..cbb2fa6c1d 100644 --- a/common/static/js/vendor/codemirror-compressed.js +++ b/common/static/js/vendor/codemirror-compressed.js @@ -4,4 +4,4 @@ window.CodeMirror=function(){"use strict";function T(e,n){if(!(this instanceof T ]=e.pre.insertBefore(s,i)}}e.measuredSomething=!0}}e.pos+=t}function pi(e,t,n){var r=e.markedSpans,i=e.text,s=0;if(!r){for(var o=1;oa)?(b.to!=null&&c>b.to&&(c=b.to,p=""),w.className&&(h+=" "+w.className),w.startStyle&&b.from==a&&(d+=" "+w.startStyle),w.endStyle&&b.to==c&&(p+=" "+w.endStyle),w.title&&!v&&(v=w.title),w.collapsed&&(!m||jr(m.marker,w)<0)&&(m=b)):b.from>a&&c>b.from&&(c=b.from),w.type=="bookmark"&&b.from==a&&w.replacedWith&&g.push(w)}if(m&&(m.from||0)==a){hi(t,(m.to==null?u:m.to)-a,m.marker,m.from==null);if(m.to==null)return m.marker.find()}if(!m&&g.length)for(var y=0;y=u)break;var E=Math.min(u,c);for(;;){if(f){var S=a+f.length;if(!m){var x=S>E?f.slice(0,E-a):f;t.addToken(t,x,l?l+h:h,d,a+x.length==c?p:"",v)}if(S>=E){f=f.slice(E-a),a=E;break}a=S,d=""}f=i.slice(s,s=n[o++]),l=oi(n[o++],t)}}}function di(e,t,n,r,i){function s(e){return n?n[e]:null}function o(e,n,r){Yr(e,n,r,i),es(e,"change",e,t)}var u=t.from,a=t.to,f=t.text,l=xi(e,u.line),c=xi(e,a.line),h=cs(f),p=s(f.length-1),d=a.line-u.line;if(u.ch==0&&a.ch==0&&h==""&&(!e.cm||e.cm.options.wholeLineUpdateBefore)){for(var v=0,m=f.length-1,g=[];v1&&e.remove(u.line+1,d-1),e.insert(u.line+1,g)}es(e,"change",e,t),Un(e,r.anchor,r.head,null,!0)}function vi(e){this.lines=e,this.parent=null;for(var t=0,n=e.length,r=0;ts-e.cm.options.historyEventDelay||t.origin.charAt(0)=="*"))){var u=cs(o.changes);Mn(t.from,t.to)&&Mn(t.from,u.to)?u.to=bn(t):o.changes.push(Di(e,t)),o.anchorAfter=n.anchor,o.headAfter=n.head}else{o={changes:[Di(e,t)],generation:i.generation,anchorBefore:e.sel.anchor,headBefore:e.sel.head,anchorAfter:n.anchor,headAfter:n.head},i.done.push(o);while(i.done.length>i.undoDepth)i.done.shift()}i.generation=++i.maxGeneration,i.lastTime=s,i.lastOp=r,i.lastOrigin=t.origin}function Hi(e){if(!e)return null;for(var t=0,n;t-1&&(cs(o)[l]=a[l],delete a[l])}}return r}function Fi(e,t,n,r){n0}function is(e){e.prototype.on=function(e,t){Ki(this,e,t)},e.prototype.off=function(e,t){Qi(this,e,t)}}function us(){this.id=null}function as(e,t,n,r,i){t==null&&(t=e.search(/[^\s\u00a0]/),t==-1&&(t=e.length));for(var s=r||0,o=i||0;s"€"&&(e.toUpperCase()!=e.toLowerCase()||ys.test(e))}function ws(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!1;return!0}function Ss(e){return e.charCodeAt(0)>=768&&Es.test(e)}function xs(e,t,n,r){var i=document.createElement(e);n&&(i.className=n),r&&(i.style.cssText=r);if(typeof t=="string")Cs(i,t);else if(t)for(var s=0;s0;--t)e.removeChild(e.firstChild);return e}function Ns(e,t){return Ts(e).appendChild(t)}function Cs(e,t){r?(e.innerHTML="",e.appendChild(document.createTextNode(t))):e.textContent=t}function ks(e){return e.getBoundingClientRect()}function As(){return!1}function Ms(e){if(Os!=null)return Os;var t=xs("div",null,null,"width: 50px; height: 50px; overflow-x: scroll");return Ns(e,t),t.offsetWidth&&(Os=t.offsetHeight-t.clientHeight),Os||0}function Ds(e){if(_s==null){var t=xs("span","​");Ns(e,xs("span",[t,document.createTextNode("x")])),e.firstChild.offsetHeight!=0&&(_s=t.offsetWidth<=1&&t.offsetHeight>2&&!n)}return _s?xs("span","​"):xs("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px")}function Fs(e,t,n,r){if(!e)return r(t,n,"ltr");var i=!1;for(var s=0;st||t==n&&o.to==t)r(Math.max(o.from,t),Math.min(o.to,n),o.level==1?"rtl":"ltr"),i=!0}i||r(t,n,"ltr")}function Is(e){return e.level%2?e.to:e.from}function qs(e){return e.level%2?e.from:e.to}function Rs(e){var t=Oi(e);return t?Is(t[0]):0}function Us(e){var t=Oi(e);return t?qs(cs(t)):e.text.length}function zs(e,t){var n=xi(e.doc,t),r=Ur(e.doc,n);r!=n&&(t=ki(r));var i=Oi(r),s=i?i[0].level%2?Us(r):Rs(r):0;return On(t,s)}function Ws(e,t){var n,r;while(n=qr(r=xi(e.doc,t)))t=n.find().to.line;var i=Oi(r),s=i?i[0].level%2?Rs(r):Us(r):r.text.length;return On(t,s)}function Xs(e,t,n){var r=e[0].level;return t==r?!0:n==r?!1:tt)return n;if(i.from==t||i.to==t){if(r!=null)return Xs(e,i.level,e[r].level)?(i.from!=i.to&&(Vs=r),n):(i.from!=i.to&&(Vs=n),r);r=n}}return r}function Js(e,t,n,r){if(!r)return t+n;do t+=n;while(t>0&&Ss(e.text.charAt(t)));return t}function Ks(e,t,n,r){var i=Oi(e);if(!i)return Qs(e,t,n,r);var s=$s(i,t),o=i[s],u=Js(e,t,o.level%2?-n:n,r);for(;;){if(u>o.from&&u0==o.level%2?o.to:o.from);o=i[s+=n];if(!o)return null;n>0==o.level%2?u=Js(e,o.to,-1,r):u=Js(e,o.from,1,r)}}function Qs(e,t,n,r){var i=t+n;if(r)while(i>0&&Ss(e.text.charAt(i)))i+=n;return i<0||i>e.text.length?null:i}var e=/gecko\/\d/i.test(navigator.userAgent),t=/MSIE \d/.test(navigator.userAgent),n=t&&(document.documentMode==null||document.documentMode<8),r=t&&(document.documentMode==null||document.documentMode<9),i=/Trident\/([7-9]|\d{2,})\./.test(navigator.userAgent),s=t||i,o=/WebKit\//.test(navigator.userAgent),u=o&&/Qt\/\d+\.\d+/.test(navigator.userAgent),a=/Chrome\//.test(navigator.userAgent),f=/Opera\//.test(navigator.userAgent),l=/Apple Computer/.test(navigator.vendor),c=/KHTML\//.test(navigator.userAgent),h=/Mac OS X 1\d\D([7-9]|\d\d)\D/.test(navigator.userAgent),p=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(navigator.userAgent),d=/PhantomJS/.test(navigator.userAgent),v=/AppleWebKit/.test(navigator.userAgent)&&/Mobile\/\w+/.test(navigator.userAgent),m=v||/Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(navigator.userAgent),g=v||/Mac/.test(navigator.platform),y=/win/i.test(navigator.platform),b=f&&navigator.userAgent.match(/Version\/(\d*\.\d*)/);b&&(b=Number(b[1])),b&&b>=15&&(f=!1,o=!0);var w=g&&(u||f&&(b==null||b<12.11)),E=e||t&&!r,S=!1,x=!1,kt,Ot=0,Vt,$t,Yt=0,rn=0,sn=null;t?sn=-0.53:e?sn=15:a?sn=-0.7:l&&(sn=-1/3);var fn,hn=null,gn,bn=T.changeEnd=function(e){return e.text?On(e.from.line+e.text.length-1,cs(e.text).length+(e.text.length==1?e.from.ch:0)):e.to};T.Pos=On,T.prototype={constructor:T,focus:function(){window.focus(),Rt(this),Ft(this)},setOption:function(e,t){var n=this.options,r=n[e];if(n[e]==t&&e!="mode")return;n[e]=t,rr.hasOwnProperty(e)&&Dt(this,rr[e])(this,t,r)},getOption:function(e){return this.options[e]},getDoc:function(){return this.doc},addKeyMap:function(e,t){this.state.keyMaps[t?"push":"unshift"](e)},removeKeyMap:function(e){var t=this.state.keyMaps;for(var n=0;n>1;if((s?t[s*2-1]:0)>=i)r=s;else{if(!(t[s*2+1]r&&(e=r,n=!0);var i=xi(this.doc,e);return wt(this,xi(this.doc,e),{top:0,left:0},t||"page").top+(n?i.height:0)},defaultTextHeight:function(){return Lt(this.display)},defaultCharWidth:function(){return At(this.display)},setGutterMarker:Dt(null,function(e,t,n){return Yn(this,e,function(e){var r=e.gutterMarkers||(e.gutterMarkers={});return r[t]=n,!n&&ws(r)&&(e.gutterMarkers=null),!0})}),clearGutter:Dt(null,function(e){var t=this,n=t.doc,r=n.first;n.iter(function(n){n.gutterMarkers&&n.gutterMarkers[e]&&(n.gutterMarkers[e]=null,Bt(t,r,r+1),ws(n.gutterMarkers)&&(n.gutterMarkers=null)),++r})}),addLineClass:Dt(null,function(e,t,n){return Yn(this,e,function(e){var r=t=="text"?"textClass":t=="background"?"bgClass":"wrapClass";if(!e[r])e[r]=n;else{if((new RegExp("(?:^|\\s)"+n+"(?:$|\\s)")).test(e[r]))return!1;e[r]+=" "+n}return!0})}),removeLineClass:Dt(null,function(e,t,n){return Yn(this,e,function(e){var r=t=="text"?"textClass":t=="background"?"bgClass":"wrapClass",i=e[r];if(!i)return!1;if(n==null)e[r]=null;else{var s=i.match(new RegExp("(?:^|\\s+)"+n+"(?:$|\\s+)"));if(!s)return!1;var o=s.index+s[0].length;e[r]=i.slice(0,s.index)+(!s.index||o==i.length?"":" ")+i.slice(o)||null}return!0})}),addLineWidget:Dt(null,function(e,t,n){return Qr(this,e,t,n)}),removeLineWidget:function(e){e.clear()},lineInfo:function(e){if(typeof e=="number"){if(!Fn(this.doc,e))return null;var t=e;e=xi(this.doc,e);if(!e)return null}else{var t=ki(e);if(t==null)return null}return{line:t,handle:e,text:e.text,gutterMarkers:e.gutterMarkers,textClass:e.textClass,bgClass:e.bgClass,wrapClass:e.wrapClass,widgets:e.widgets}},getViewport:function(){return{from:this.display.showingFrom,to:this.display.showingTo}},addWidget:function(e,t,n,r,i){var s=this.display;e=xt(this,Bn(this.doc,e));var o=e.bottom,u=e.left;t.style.position="absolute",s.sizer.appendChild(t);if(r=="over")o=e.top;else if(r=="above"||r=="near"){var a=Math.max(s.wrapper.clientHeight,this.doc.height),f=Math.max(s.sizer.clientWidth,s.lineSpace.clientWidth);(r=="above"||e.bottom+t.offsetHeight>a)&&e.top>t.offsetHeight?o=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=a&&(o=e.bottom),u+t.offsetWidth>f&&(u=f-t.offsetWidth)}t.style.top=o+"px",t.style.left=t.style.right="",i=="right"?(u=s.sizer.clientWidth-t.offsetWidth,t.style.right="0px"):(i=="left"?u=0:i=="middle"&&(u=(s.sizer.clientWidth-t.offsetWidth)/2),t.style.left=u+"px"),n&&$n(this,u,o,u+t.offsetWidth,o+t.offsetHeight)},triggerOnKeyDown:Dt(null,pn),execCommand:function(e){if(dr.hasOwnProperty(e))return dr[e](this)},findPosH:function(e,t,n,r){var i=1;t<0&&(i=-1,t=-t);for(var s=0,o=Bn(this.doc,e);s2){t.dependencies=[];for(var n=2;n0&&t.ch=this.string.length},sol:function(){return this.pos==this.lineStart},peek:function(){return this.string.charAt(this.pos)||undefined},next:function(){if(this.post},eatSpace:function(){var e=this.pos;while(/[\s\u00a0]/.test(this.string.charAt(this.pos)))++this.pos;return this.pos>e},skipToEnd:function(){this.pos=this.string.length},skipTo:function(e){var t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0},backUp:function(e){this.pos-=e},column:function(){return this.lastColumnPos0?null:(s&&t!==!1&&(this.pos+=s[0].length),s)}var r=function(e){return n?e.toLowerCase():e},i=this.string.substr(this.pos,e.length);if(r(i)==r(e))return t!==!1&&(this.pos+=e.length),!0},current:function(){return this.string.slice(this.start,this.pos)},hideFirstChars:function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}}},T.StringStream=wr,T.TextMarker=Er,is(Er),Er.prototype.clear=function(){if(this.explicitlyCleared)return;var e=this.doc.cm,t=e&&!e.curOp;t&&Mt(e);if(rs(this,"clear")){var n=this.find();n&&es(this,"clear",n.from,n.to)}var r=null,i=null;for(var s=0;se.display.maxLineLength&&(e.display.maxLine=a,e.display.maxLineLength=f,e.display.maxLineChanged=!0)}r!=null&&e&&Bt(e,r,i+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,e&&zn(e)),t&&_t(e)},Er.prototype.find=function(e){var t,n;for(var r=0;r=t.display.showingFrom&&e.line50){while(s.lines.length>50){var u=s.lines.splice(s.lines.length-25,25),a=new vi(u);s.height-=a.height,this.children.splice(r+1,0,a),a.parent=this}this.maybeSpill()}break}e-=o}},maybeSpill:function(){if(this.children.length<=10)return;var e=this;do{var t=e.children.splice(e.children.length-5,5),n=new mi(t);if(!e.parent){var r=new mi(e.children);r.parent=e,e.children=[r,n],e=r}else{e.size-=n.size,e.height-=n.height;var i=ps(e.parent.children,e);e.parent.children.splice(i+1,0,n)}n.parent=e.parent}while(e.children.length>10);e.parent.maybeSpill()},iterN:function(e,t,n){for(var r=0,i=this.children.length;r=e.ch)&&t.push(i.marker.parent||i.marker)}return t},getAllMarks:function(){var e=[];return this.iter(function(t){var n=t.markedSpans;if(n)for(var r=0;re)return t=e,!0;e-=i,++n}),Bn(this,On(n,t))},indexFromPos:function(e){e=Bn(this,e);var t=e.ch;return e.linet&&(t=e.from),e.to!=null&&e.to=8208&&n<=8212}:o&&(As=function(e,t){if(t>1&&e.charCodeAt(t-1)==45){if(/\w/.test(e.charAt(t-2))&&/[^\-?\.]/.test(e.charAt(t)))return!0;if(t>2&&/[\d\.,]/.test(e.charAt(t-2))&&/[\d\.,]/.test(e.charAt(t)))return!1}return/[~!#%&*)=+}\]\\|\"\.>,:;][({[<]|-[^\-?\.\u2010-\u201f\u2026]|\?[\w~`@#$%\^&*(_=+{[|><]|\u2026[\w~`@#$%\^&*(_=+{[><]/.test(e.slice(t-1,t+1))});var Os,_s,Ps="\n\nb".split(/\n/).length!=3?function(e){var t=0,n=[],r=e.length;while(t<=r){var i=e.indexOf("\n",t);i==-1&&(i=e.length);var s=e.slice(t,e.charAt(i-1)=="\r"?i-1:i),o=s.indexOf("\r");o!=-1?(n.push(s.slice(0,o)),t+=o+1):(n.push(s),t=i+1)}return n}:function(e){return e.split(/\r\n?|\n/)};T.splitLines=Ps;var Hs=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch(t){return!1}}:function(e){try{var t=e.ownerDocument.selection.createRange()}catch(n){}return!t||t.parentElement()!=e?!1:t.compareEndPoints("StartToEnd",t)!=0},Bs=function(){var e=xs("div");return"oncopy"in e?!0:(e.setAttribute("oncopy","return;"),typeof e.oncopy=="function")}(),js={3:"Enter",8:"Backspace",9:"Tab",13:"Enter",16:"Shift",17:"Ctrl",18:"Alt",19:"Pause",20:"CapsLock",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"PrintScrn",45:"Insert",46:"Delete",59:";",61:"=",91:"Mod",92:"Mod",93:"Mod",107:"=",109:"-",127:"Delete",173:"-",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",63232:"Up",63233:"Down",63234:"Left",63235:"Right",63272:"Delete",63273:"Home",63275:"End",63276:"PageUp",63277:"PageDown",63302:"Insert"};T.keyNames=js,function(){for(var e=0;e<10;e++)js[e+48]=js[e+96]=String(e);for(var e=65;e<=90;e++)js[e]=String.fromCharCode(e);for(var e=1;e<=12;e++)js[e+111]=js[e+63235]="F"+e}();var Vs,Gs=function(){function n(n){return n<=255?e.charAt(n):1424<=n&&n<=1524?"R":1536<=n&&n<=1791?t.charAt(n-1536):1792<=n&&n<=2220?"r":"L"}var e="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLL",t="rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmmrrrrrrrrrrrrrrrrrr",r=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,i=/[stwN]/,s=/[LRr]/,o=/[Lb1n]/,u=/[1n]/,a="L";return function(e){if(!r.test(e))return!1;var t=e.length,f=[];for(var l=0,c;lr.ch&&(h=h.slice(0,h.length-s.end+r.ch));var p=h.toLowerCase();if(!h||s.type=="string"&&(s.end!=r.ch||!/[\"\']/.test(s.string.charAt(s.string.length-1))||s.string.length==1)||s.type=="tag"&&u.type=="closeTag"||s.string.indexOf("/")==s.string.length-1||l&&i(l,p)>-1||CodeMirror.scanForClosingTag&&CodeMirror.scanForClosingTag(n,r,h,Math.min(n.lastLine()+1,r.line+50)))return CodeMirror.Pass;var d=c&&i(c,p)>-1,v=d?CodeMirror.Pos(r.line+1,0):CodeMirror.Pos(r.line,r.ch+1);n.replaceSelection(">"+(d?"\n\n":"")+"",{head:v,anchor:v}),d&&(n.indentLine(r.line+1,null,!0),n.indentLine(r.line+2,null))}function r(e){var t=e.getCursor(),n=e.getTokenAt(t),r=CodeMirror.innerMode(e.getMode(),n.state),i=r.state;if(n.type=="string"||n.string.charAt(0)!="<"||n.start!=t.ch-1||r.mode.name!="xml"||e.getOption("disableInput"))return CodeMirror.Pass;var s=i.context&&i.context.tagName;s&&e.replaceSelection("/"+s+">","end")}function i(e,t){if(e.indexOf)return e.indexOf(t);for(var n=0,r=e.length;n'"]=function(e){return n(e)};e.addKeyMap(s)});var e=["area","base","br","col","command","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"],t=["applet","blockquote","body","button","div","dl","fieldset","form","frameset","h1","h2","h3","h4","h5","h6","head","html","iframe","layer","legend","object","ol","p","select","table","ul"]}(),function(){"use strict";function r(e){var n=e.search(t);return n==-1?0:n}var e={},t=/[^\s\u00a0]/,n=CodeMirror.Pos;CodeMirror.commands.toggleComment=function(e){var t=e.getCursor("start"),n=e.getCursor("end");e.uncomment(t,n)||e.lineComment(t,n)},CodeMirror.defineExtension("lineComment",function(i,s,o){o||(o=e);var u=this,a=u.getModeAt(i),f=o.lineComment||a.lineComment;if(!f){if(o.blockCommentStart||a.blockCommentStart)o.fullLines=!0,u.blockComment(i,s,o);return}var l=u.getLine(i.line);if(l==null)return;var c=Math.min(s.ch!=0||s.line==i.line?s.line+1:s.line,u.lastLine()+1),h=o.padding==null?" ":o.padding,p=o.commentBlankLines||i.line==s.line;u.operation(function(){if(o.indent){var e=l.slice(0,r(l));for(var s=i.line;sl)return;o.operation(function(){if(s.fullLines!=0){var e=t.test(o.getLine(l));o.replaceRange(c+f,n(l)),o.replaceRange(a+c,n(r.line,0));var h=s.blockCommentLead||u.blockCommentLead;if(h!=null)for(var p=r.line+1;p<=l;++p)(p!=l||e)&&o.replaceRange(h+c,n(p,0))}else o.replaceRange(f,i),o.replaceRange(a,r)})}),CodeMirror.defineExtension("uncomment",function(r,i,s){s||(s=e);var o=this,u=o.getModeAt(r),a=Math.min(i.line,o.lastLine()),f=Math.min(r.line,a),l=s.lineComment||u.lineComment,c=[],h=s.padding==null?" ":s.padding,p;e:{if(!l)break e;for(var d=f;d<=a;++d){var v=o.getLine(d),m=v.indexOf(l);m>-1&&!/comment/.test(o.getTokenTypeAt(n(d,m+1)))&&(m=-1);if(!(m!=-1||d==a&&d!=f||!t.test(v)))break e;if(m>-1&&t.test(v.slice(0,m)))break e;c.push(v)}o.operation(function(){for(var e=f;e<=a;++e){var t=c[e-f],r=t.indexOf(l),i=r+l.length;if(r<0)continue;t.slice(i,i+h.length)==h&&(i+=h.length),p=!0,o.replaceRange("",n(e,r),n(e,i))}});if(p)return!0}var g=s.blockCommentStart||u.blockCommentStart,y=s.blockCommentEnd||u.blockCommentEnd;if(!g||!y)return!1;var b=s.blockCommentLead||u.blockCommentLead,w=o.getLine(f),E=a==f?w:o.getLine(a),S=w.indexOf(g),x=E.lastIndexOf(y);return x==-1&&f!=a&&(E=o.getLine(--a),x=E.lastIndexOf(y)),S==-1||x==-1||!/comment/.test(o.getTokenTypeAt(n(f,S+1)))||!/comment/.test(o.getTokenTypeAt(n(a,x+1)))?!1:(o.operation(function(){o.replaceRange("",n(a,x-(h&&E.slice(x-h.length,x)==h?h.length:0)),n(a,x+y.length));var e=S+g.length;h&&w.slice(e,e+h.length)==h&&(e+=h.length),o.replaceRange("",n(f,S),n(f,e));if(b)for(var r=f+1;r<=a;++r){var i=o.getLine(r),s=i.indexOf(b);if(s==-1||t.test(i.slice(0,s)))continue;var u=s+b.length;h&&i.slice(u,u+h.length)==h&&(u+=h.length),o.replaceRange("",n(r,s),n(r,u))}}),!0)})}(),CodeMirror.defineMode("css",function(e,t){"use strict";function p(e,t){return c=t,e}function d(e,t){var n=e.next();if(r[n]){var i=r[n](e,t);if(i!==!1)return i}if(n=="@")return e.eatWhile(/[\w\\\-]/),p("def",e.current());if(n=="="||(n=="~"||n=="|")&&e.eat("="))return p(null,"compare");if(n=='"'||n=="'")return t.tokenize=v(n),t.tokenize(e,t);if(n=="#")return e.eatWhile(/[\w\\\-]/),p("atom","hash");if(n=="!")return e.match(/^\s*\w*/),p("keyword","important");if(/\d/.test(n)||n=="."&&e.eat(/\d/))return e.eatWhile(/[\w.%]/),p("number","unit");if(n!=="-")return/[,+>*\/]/.test(n)?p(null,"select-op"):n=="."&&e.match(/^-?[_a-z][_a-z0-9-]*/i)?p("qualifier","qualifier"):/[:;{}\[\]\(\)]/.test(n)?p(null,n):n=="u"&&e.match("rl(")?(e.backUp(1),t.tokenize=m,p("property","word")):/[\w\\\-]/.test(n)?(e.eatWhile(/[\w\\\-]/),p("property","word")):p(null,null);if(/[\d.]/.test(e.peek()))return e.eatWhile(/[\w.%]/),p("number","unit");if(e.match(/^[^-]+-/))return p("meta","meta")}function v(e){return function(t,n){var r=!1,i;while((i=t.next())!=null){if(i==e&&!r){e==")"&&t.backUp(1);break}r=!r&&i=="\\"}if(i==e||!r&&e!=")")n.tokenize=null;return p("string","string")}}function m(e,t){return e.next(),e.match(/\s*[\"\']/,!1)?t.tokenize=null:t.tokenize=v(")"),p(null,"(")}function g(e,t,n){this.type=e,this.indent=t,this.prev=n}function y(e,t,r){return e.context=new g(r,t.indentation()+n,e.context),r}function b(e){return e.context=e.context.prev,e.context.type}function w(e,t,n){return x[n.context.type](e,t,n)}function E(e,t,n,r){for(var i=r||1;i>0;i--)n.context=n.context.prev;return w(e,t,n)}function S(e){var t=e.current().toLowerCase();a.hasOwnProperty(t)?h="atom":u.hasOwnProperty(t)?h="keyword":h="variable"}t.propertyKeywords||(t=CodeMirror.resolveMode("text/css"));var n=e.indentUnit,r=t.tokenHooks,i=t.mediaTypes||{},s=t.mediaFeatures||{},o=t.propertyKeywords||{},u=t.colorKeywords||{},a=t.valueKeywords||{},f=t.fontProperties||{},l=t.allowNested,c,h,x={};return x.top=function(e,t,n){if(e=="{")return y(n,t,"block");if(e=="}"&&n.context.prev)return b(n);if(e=="@media")return y(n,t,"media");if(e=="@font-face")return"font_face_before";if(e&&e.charAt(0)=="@")return y(n,t,"at");if(e=="hash")h="builtin";else if(e=="word")h="tag";else{if(e=="variable-definition")return"maybeprop";if(e=="interpolation")return y(n,t,"interpolation");if(e==":")return"pseudo";if(l&&e=="(")return y(n,t,"params")}return n.context.type},x.block=function(e,t,n){return e=="word"?o.hasOwnProperty(t.current().toLowerCase())?(h="property","maybeprop"):l?(h=t.match(/^\s*:/,!1)?"property":"tag","block"):(h+=" error","maybeprop"):e=="meta"?"block":!!l||e!="hash"&&e!="qualifier"?x.top(e,t,n):(h="error","block")},x.maybeprop=function(e,t,n){return e==":"?y(n,t,"prop"):w(e,t,n)},x.prop=function(e,t,n){if(e==";")return b(n);if(e=="{"&&l)return y(n,t,"propBlock");if(e=="}"||e=="{")return E(e,t,n);if(e=="(")return y(n,t,"parens");if(e=="hash"&&!/^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/.test(t.current()))h+=" error";else if(e=="word")S(t);else if(e=="interpolation")return y(n,t,"interpolation");return"prop"},x.propBlock=function(e,t,n){return e=="}"?b(n):e=="word"?(h="property","maybeprop"):n.context.type},x.parens=function(e,t,n){return e=="{"||e=="}"?E(e,t,n):e==")"?b(n):"parens"},x.pseudo=function(e,t,n){return e=="word"?(h="variable-3",n.context.type):w(e,t,n)},x.media=function(e,t,n){if(e=="(")return y(n,t,"media_parens");if(e=="}")return E(e,t,n);if(e=="{")return b(n)&&y(n,t,l?"block":"top");if(e=="word"){var r=t.current().toLowerCase();r=="only"||r=="not"||r=="and"?h="keyword":i.hasOwnProperty(r)?h="attribute":s.hasOwnProperty(r)?h="property":h="error"}return n.context.type},x.media_parens=function(e,t,n){return e==")"?b(n):e=="{"||e=="}"?E(e,t,n,2):x.media(e,t,n)},x.font_face_before=function(e,t,n){return e=="{"?y(n,t,"font_face"):w(e,t,n)},x.font_face=function(e,t,n){return e=="}"?b(n):e=="word"?(f.hasOwnProperty(t.current().toLowerCase())?h="property":h="error","maybeprop"):"font_face"},x.at=function(e,t,n){return e==";"?b(n):e=="{"||e=="}"?E(e,t,n):(e=="word"?h="tag":e=="hash"&&(h="builtin"),"at")},x.interpolation=function(e,t,n){return e=="}"?b(n):e=="{"||e==";"?E(e,t,n):(e!="variable"&&(h="error"),"interpolation")},x.params=function(e,t,n){return e==")"?b(n):e=="{"||e=="}"?E(e,t,n):(e=="word"&&S(t),"params")},{startState:function(e){return{tokenize:null,state:"top",context:new g("top",e||0,null)}},token:function(e,t){if(!t.tokenize&&e.eatSpace())return null;var n=(t.tokenize||d)(e,t);return n&&typeof n=="object"&&(c=n[1],n=n[0]),h=n,t.state=x[t.state](c,e,t),h},indent:function(e,t){var r=e.context,i=t&&t.charAt(0),s=r.indent;return r.prev&&(i=="}"&&(r.type=="block"||r.type=="top"||r.type=="interpolation"||r.type=="font_face")||i==")"&&(r.type=="parens"||r.type=="params"||r.type=="media_parens")||i=="{"&&(r.type=="at"||r.type=="media"))&&(s=r.indent-n,r=r.prev),s},electricChars:"}",blockCommentStart:"/*",blockCommentEnd:"*/",fold:"brace"}}),function(){function e(e){var t={};for(var n=0;n")?(e.match("-->"),t.tokenize=null):e.skipToEnd(),["comment","comment"]}var t=["all","aural","braille","handheld","print","projection","screen","tty","tv","embossed"],n=e(t),r=["width","min-width","max-width","height","min-height","max-height","device-width","min-device-width","max-device-width","device-height","min-device-height","max-device-height","aspect-ratio","min-aspect-ratio","max-aspect-ratio","device-aspect-ratio","min-device-aspect-ratio","max-device-aspect-ratio","color","min-color","max-color","color-index","min-color-index","max-color-index","monochrome","min-monochrome","max-monochrome","resolution","min-resolution","max-resolution","scan","grid"],i=e(r),s=["align-content","align-items","align-self","alignment-adjust","alignment-baseline","anchor-point","animation","animation-delay","animation-direction","animation-duration","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","appearance","azimuth","backface-visibility","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","baseline-shift","binding","bleed","bookmark-label","bookmark-level","bookmark-state","bookmark-target","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","clear","clip","color","color-profile","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","crop","cue","cue-after","cue-before","cursor","direction","display","dominant-baseline","drop-initial-after-adjust","drop-initial-after-align","drop-initial-before-adjust","drop-initial-before-align","drop-initial-size","drop-initial-value","elevation","empty-cells","fit","fit-position","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","float-offset","flow-from","flow-into","font","font-feature-settings","font-family","font-kerning","font-language-override","font-size","font-size-adjust","font-stretch","font-style","font-synthesis","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-weight","grid-cell","grid-column","grid-column-align","grid-column-sizing","grid-column-span","grid-columns","grid-flow","grid-row","grid-row-align","grid-row-sizing","grid-row-span","grid-rows","grid-template","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","inline-box-align","justify-content","left","letter-spacing","line-break","line-height","line-stacking","line-stacking-ruby","line-stacking-shift","line-stacking-strategy","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marker-offset","marks","marquee-direction","marquee-loop","marquee-play-count","marquee-speed","marquee-style","max-height","max-width","min-height","min-width","move-to","nav-down","nav-index","nav-left","nav-right","nav-up","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-style","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","page-policy","pause","pause-after","pause-before","perspective","perspective-origin","pitch","pitch-range","play-during","position","presentation-level","punctuation-trim","quotes","region-break-after","region-break-before","region-break-inside","region-fragment","rendering-intent","resize","rest","rest-after","rest-before","richness","right","rotation","rotation-point","ruby-align","ruby-overhang","ruby-position","ruby-span","shape-inside","shape-outside","size","speak","speak-as","speak-header","speak-numeral","speak-punctuation","speech-rate","stress","string-set","tab-size","table-layout","target","target-name","target-new","target-position","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-height","text-indent","text-justify","text-outline","text-overflow","text-shadow","text-size-adjust","text-space-collapse","text-transform","text-underline-position","text-wrap","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function" ,"unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","volume","white-space","widows","width","word-break","word-spacing","word-wrap","z-index","zoom","clip-path","clip-rule","mask","enable-background","filter","flood-color","flood-opacity","lighting-color","stop-color","stop-opacity","pointer-events","color-interpolation","color-interpolation-filters","color-profile","color-rendering","fill","fill-opacity","fill-rule","image-rendering","marker","marker-end","marker-mid","marker-start","shape-rendering","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-rendering","baseline-shift","dominant-baseline","glyph-orientation-horizontal","glyph-orientation-vertical","kerning","text-anchor","writing-mode"],o=e(s),u=["aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"],a=e(u),f=["above","absolute","activeborder","activecaption","afar","after-white-space","ahead","alias","all","all-scroll","alternate","always","amharic","amharic-abegede","antialiased","appworkspace","arabic-indic","armenian","asterisks","auto","avoid","avoid-column","avoid-page","avoid-region","background","backwards","baseline","below","bidi-override","binary","bengali","blink","block","block-axis","bold","bolder","border","border-box","both","bottom","break","break-all","break-word","button","button-bevel","buttonface","buttonhighlight","buttonshadow","buttontext","cambodian","capitalize","caps-lock-indicator","caption","captiontext","caret","cell","center","checkbox","circle","cjk-earthly-branch","cjk-heavenly-stem","cjk-ideographic","clear","clip","close-quote","col-resize","collapse","column","compact","condensed","contain","content","content-box","context-menu","continuous","copy","cover","crop","cross","crosshair","currentcolor","cursive","dashed","decimal","decimal-leading-zero","default","default-button","destination-atop","destination-in","destination-out","destination-over","devanagari","disc","discard","document","dot-dash","dot-dot-dash","dotted","double","down","e-resize","ease","ease-in","ease-in-out","ease-out","element","ellipse","ellipsis","embed","end","ethiopic","ethiopic-abegede","ethiopic-abegede-am-et","ethiopic-abegede-gez","ethiopic-abegede-ti-er","ethiopic-abegede-ti-et","ethiopic-halehame-aa-er","ethiopic-halehame-aa-et","ethiopic-halehame-am-et","ethiopic-halehame-gez","ethiopic-halehame-om-et","ethiopic-halehame-sid-et","ethiopic-halehame-so-et","ethiopic-halehame-ti-er","ethiopic-halehame-ti-et","ethiopic-halehame-tig","ew-resize","expanded","extra-condensed","extra-expanded","fantasy","fast","fill","fixed","flat","footnotes","forwards","from","geometricPrecision","georgian","graytext","groove","gujarati","gurmukhi","hand","hangul","hangul-consonant","hebrew","help","hidden","hide","higher","highlight","highlighttext","hiragana","hiragana-iroha","horizontal","hsl","hsla","icon","ignore","inactiveborder","inactivecaption","inactivecaptiontext","infinite","infobackground","infotext","inherit","initial","inline","inline-axis","inline-block","inline-table","inset","inside","intrinsic","invert","italic","justify","kannada","katakana","katakana-iroha","keep-all","khmer","landscape","lao","large","larger","left","level","lighter","line-through","linear","lines","list-item","listbox","listitem","local","logical","loud","lower","lower-alpha","lower-armenian","lower-greek","lower-hexadecimal","lower-latin","lower-norwegian","lower-roman","lowercase","ltr","malayalam","match","media-controls-background","media-current-time-display","media-fullscreen-button","media-mute-button","media-play-button","media-return-to-realtime-button","media-rewind-button","media-seek-back-button","media-seek-forward-button","media-slider","media-sliderthumb","media-time-remaining-display","media-volume-slider","media-volume-slider-container","media-volume-sliderthumb","medium","menu","menulist","menulist-button","menulist-text","menulist-textfield","menutext","message-box","middle","min-intrinsic","mix","mongolian","monospace","move","multiple","myanmar","n-resize","narrower","ne-resize","nesw-resize","no-close-quote","no-drop","no-open-quote","no-repeat","none","normal","not-allowed","nowrap","ns-resize","nw-resize","nwse-resize","oblique","octal","open-quote","optimizeLegibility","optimizeSpeed","oriya","oromo","outset","outside","outside-shape","overlay","overline","padding","padding-box","painted","page","paused","persian","plus-darker","plus-lighter","pointer","polygon","portrait","pre","pre-line","pre-wrap","preserve-3d","progress","push-button","radio","read-only","read-write","read-write-plaintext-only","rectangle","region","relative","repeat","repeat-x","repeat-y","reset","reverse","rgb","rgba","ridge","right","round","row-resize","rtl","run-in","running","s-resize","sans-serif","scroll","scrollbar","se-resize","searchfield","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","semi-condensed","semi-expanded","separate","serif","show","sidama","single","skip-white-space","slide","slider-horizontal","slider-vertical","sliderthumb-horizontal","sliderthumb-vertical","slow","small","small-caps","small-caption","smaller","solid","somali","source-atop","source-in","source-out","source-over","space","square","square-button","start","static","status-bar","stretch","stroke","sub","subpixel-antialiased","super","sw-resize","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group","telugu","text","text-bottom","text-top","textarea","textfield","thai","thick","thin","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedshadow","tibetan","tigre","tigrinya-er","tigrinya-er-abegede","tigrinya-et","tigrinya-et-abegede","to","top","transparent","ultra-condensed","ultra-expanded","underline","up","upper-alpha","upper-armenian","upper-greek","upper-hexadecimal","upper-latin","upper-norwegian","upper-roman","uppercase","urdu","url","vertical","vertical-text","visible","visibleFill","visiblePainted","visibleStroke","visual","w-resize","wait","wave","wider","window","windowframe","windowtext","x-large","x-small","xor","xx-large","xx-small"],l=e(f),c=["font-family","src","unicode-range","font-variant","font-feature-settings","font-stretch","font-weight","font-style"],h=e(c),p=t.concat(r).concat(s).concat(u).concat(f);CodeMirror.registerHelper("hintWords","css",p),CodeMirror.defineMIME("text/css",{mediaTypes:n,mediaFeatures:i,propertyKeywords:o,colorKeywords:a,valueKeywords:l,fontProperties:h,tokenHooks:{"<":function(e,t){return e.match("!--")?(t.tokenize=v,v(e,t)):!1},"/":function(e,t){return e.eat("*")?(t.tokenize=d,d(e,t)):!1}},name:"css"}),CodeMirror.defineMIME("text/x-scss",{mediaTypes:n,mediaFeatures:i,propertyKeywords:o,colorKeywords:a,valueKeywords:l,fontProperties:h,allowNested:!0,tokenHooks:{"/":function(e,t){return e.eat("/")?(e.skipToEnd(),["comment","comment"]):e.eat("*")?(t.tokenize=d,d(e,t)):["operator","operator"]},":":function(e){return e.match(/\s*{/)?[null,"{"]:!1},$:function(e){return e.match(/^[\w-]+/),e.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"]},"#":function(e){return e.eat("{")?[null,"interpolation"]:!1}},name:"css",helperType:"scss"}),CodeMirror.defineMIME("text/x-less",{mediaTypes:n,mediaFeatures:i,propertyKeywords:o,colorKeywords:a,valueKeywords:l,fontProperties:h,allowNested:!0,tokenHooks:{"/":function(e,t){return e.eat("/")?(e.skipToEnd(),["comment","comment"]):e.eat("*")?(t.tokenize=d,d(e,t)):["operator","operator"]},"@":function(e){return e.match(/^(charset|document|font-face|import|keyframes|media|namespace|page|supports)\b/,!1)?!1:(e.eatWhile(/[\w\\\-]/),e.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"])},"&":function(){return["atom","atom"]}},name:"css",helperType:"less"})}(),CodeMirror.defineMode("diff",function(){var e={"+":"positive","-":"negative","@":"meta"};return{token:function(t){var n=t.string.search(/[\t ]+?$/);if(!t.sol()||n===0)return t.skipToEnd(),("error "+(e[t.string.charAt(0)]||"")).replace(/ $/,"");var r=e[t.peek()]||t.skipToEnd();return n===-1?t.skipToEnd():t.pos=n,r}}}),CodeMirror.defineMIME("text/x-diff","diff"),CodeMirror.defineMode("edx_markdown",function(e,t){function w(e,t,n){return t.f=t.inline=n,n(e,t)}function E(e,t,n){return t.f=t.block=n,n(e,t)}function S(e){return e.em=!1,e.strong=!1,!n&&e.f==C&&(e.f=A,e.block=N),null}function x(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function N(e,t){var n;if(e.sol()&&e.match(b))return e.skipToEnd(),T;if(t.indentationDiff>=4)return t.indentation-=t.indentationDiff,e.skipToEnd(),s;if(e.eatSpace())return null;if(e.peek()==="#"||e.match(g))t.header=!0;else if(e.eat(">"))t.indentation++,t.quote=!0;else{if(e.peek()==="[")return w(e,t,_);if(e.match(d,!0))return a;if(n=e.match(v,!0)||e.match(m,!0))return t.indentation+=n[0].length,u}return w(e,t,t.inline)}function C(e,t){var i=r.token(e,t.htmlState);return n&&i==="tag"&&t.htmlState.type!=="openTag"&&!t.htmlState.context&&(t.f=A,t.block=N),t.md_inside&&e.current().indexOf(">")!=-1&&(t.f=A,t.block=N,t.htmlState.context=undefined),i}function k(e){var t=[];return e.strong?t.push(e.em?p:h):e.em&&t.push(c),e.header&&t.push(i),e.quote&&t.push(o),t.length?t.join(" "):null}function L(e,t){return e.match(y,!0)?k(t):undefined}function A(e,t){var n=t.text(e,t);if(typeof n!="undefined")return n;var r=e.next();if(r==="\\")return e.next(),k(t);if(r==="`")return w(e,t,H(s,"`"));if(r==="[")return w(e,t,O);if(r==="<"&&e.match(/^\w/,!1)){var i=!1;if(e.string.indexOf(">")!=-1){var o=e.string.substring(1,e.string.indexOf(">"));/markdown\s*=\s*('|"){0,1}1('|"){0,1}/.test(o)&&(t.md_inside=!0)}return e.backUp(1),E(e,t,C)}if(r==="<"&&e.match(/^\/\w*?>/))return t.md_inside=!1,"tag";var u=k(t);return r==="*"||r==="_"?e.eat(r)?(t.strong=!t.strong)?k(t):u:(t.em=!t.em)?k(t):u:k(t)}function O(e,t){while(!e.eol()){var n=e.next();n==="\\"&&e.next();if(n==="]")return t.inline=t.f=M,f}return f}function M(e,t){e.eatSpace();var n=e.next();return n==="("||n==="["?w(e,t,H(l,n==="("?")":"]")):"error"}function _(e,t){return e.match(/^[^\]]*\]:/,!0)?(t.f=D,f):w(e,t,A)}function D(e,t){return e.eatSpace(),e.match(/^[^\s]+/,!0),t.f=t.inline=A,l}function P(e){return P[e]||(P[e]=new RegExp("^(?:[^\\\\\\"+e+"]|\\\\.)*(?:\\"+e+"|$)")),P[e]}function H(e,t,n){return n=n||A,function(r,i){return r.match(P(t)),i.inline=i.f=n,e}}var n=CodeMirror.mimeModes.hasOwnProperty("text/html"),r=CodeMirror.getMode(e,n?"text/html":"text/plain"),i="header",s="comment",o="quote",u="string",a="hr",f="link",l="string",c="em",h="strong",p="emstrong",d=/^([*\-=_])(?:\s*\1){2,}\s*$/,v=/^[*\-+]\s+/,m=/^[0-9]+\.\s+/,g=/^(?:\={3,}|-{3,})$/,y=/^[^\[*_\\<>`]+/,b=/^circuit-schematic:(.*)$/,T={creator:function(e){var t=e.match(b)[1];t=x(t);var n="

    ";return n},size:function(e){return{width:schematic_width+styling_width_delta,height:schematic_height+styling_height_delta}},callback:function(e,t){try{update_schematics();var n=e.firstChild.firstChild;n.codeMirrorLine=t,n.schematic&&(n.schematic.canvas.style.display="block",n.schematic.always_draw_grid=!0,n.schematic.redraw_background())}catch(r){console.log("Error in edx_markdown callback: "+r)}}};return{startState:function(){return{f:N,block:N,htmlState:CodeMirror.startState(r),indentation:0,inline:A,text:L,em:!1,strong:!1,header:!1,quote:!1}},copyState:function(e){return{f:e.f,block:e.block,htmlState:CodeMirror.copyState(r,e.htmlState),indentation:e.indentation,inline:e.inline,text:e.text,em:e.em,strong:e.strong,header:e.header,quote:e.quote,md_inside:e.md_inside}},token:function(e,t){if(e.sol()){if(e.match(/^\s*$/,!0))return S(t);t.header=!1,t.quote=!1,t.f=t.block;var n=e.match(/^\s*/,!0)[0].replace(/\t/g," ").length;t.indentationDiff=n-t.indentation,t.indentation=n;if(n>0)return null}return t.f(e,t)},blankLine:S,getType:k}},"xml"),CodeMirror.defineMIME("text/x-markdown","markdown"),function(){CodeMirror.extendMode("css",{commentStart:"/*",commentEnd:"*/",newlineAfterToken:function(e,t){return/^[;{}]$/.test(t)}}),CodeMirror.extendMode("javascript",{commentStart:"/*",commentEnd:"*/",newlineAfterToken:function(e,t,n,r){return this.jsonMode?/^[\[,{]$/.test(t)||/^}/.test(n):t==";"&&r.lexical&&r.lexical.type==")"?!1:/^[;{}]$/.test(t)&&!/^;/.test(n)}});var e=/^(a|abbr|acronym|area|base|bdo|big|br|button|caption|cite|code|col|colgroup|dd|del|dfn|em|frame|hr|iframe|img|input|ins|kbd|label|legend|link|map|object|optgroup|option|param|q|samp|script|select|small|span|strong|sub|sup|textarea|tt|var)$/;CodeMirror.extendMode("xml",{commentStart:"",newlineAfterToken:function(t,n,r,i){var s=!1;return this.configuration=="html"&&(s=i.context?e.test(i.context.tagName):!1),!s&&(t=="tag"&&/>$/.test(n)&&i.context||/^-1&&u>-1&&u>o&&(s=s.substr(0,o)+s.substring(o+i.commentStart.length,u)+s.substr(u+i.commentEnd.length)),r.replaceRange(s,t,n)}})}),CodeMirror.defineExtension("autoIndentRange",function(e,t){var n=this;this.operation(function(){for(var r=e.line;r<=t.line;r++)n.indentLine(r,"smart")})}),CodeMirror.defineExtension("autoFormatRange",function(e,t){function l(){u+="\n",f=!0,++a}var n=this,r=n.getMode(),i=n.getRange(e,t).split("\n"),s=CodeMirror.copyState(r,n.getTokenAt(e).state),o=n.getOption("tabSize"),u="",a=0,f=e.ch==0;for(var c=0;c/i,i,s;return{startState:function(){return i=i||CodeMirror.getMode(e,t.scriptingModeSpec),s=s||CodeMirror.getMode(e,"htmlmixed"),{token:t.startOpen?u:o,htmlState:CodeMirror.startState(s),scriptState:CodeMirror.startState(i)}},token:function(e,t){return t.token(e,t)},indent:function(e,t){if(e.token==o)return s.indent(e.htmlState,t);if(i.indent)return i.indent(e.scriptState,t)},copyState:function(e){return{token:e.token,htmlState:CodeMirror.copyState(s,e.htmlState),scriptState:CodeMirror.copyState(i,e.scriptState)}},innerMode:function(e){return e.token==u?{state:e.scriptState,mode:i}:{state:e.htmlState,mode:s}}}},"htmlmixed"),CodeMirror.defineMIME("application/x-ejs",{name:"htmlembedded",scriptingModeSpec:"javascript"}),CodeMirror.defineMIME("application/x-aspx",{name:"htmlembedded",scriptingModeSpec:"text/x-csharp"}),CodeMirror.defineMIME("application/x-jsp",{name:"htmlembedded",scriptingModeSpec:"text/x-java"}),CodeMirror.defineMIME("application/x-erb",{name:"htmlembedded",scriptingModeSpec:"ruby"}),CodeMirror.defineMode("htmlmixed",function(e,t){function a(e,t){var s=t.htmlState.tagName,o=n.token(e,t.htmlState);if(s=="script"&&/\btag\b/.test(o)&&e.current()==">"){var u=e.string.slice(Math.max(0,e.pos-100),e.pos).match(/\btype\s*=\s*("[^"]+"|'[^']+'|\S+)[^<]*$/i);u=u?u[1]:"",u&&/[\"\']/.test(u.charAt(0))&&(u=u.slice(1,u.length-1));for(var a=0;a"&&(t.token=c,t.localMode=r,t.localState=r.startState(n.indent(t.htmlState,"")));return o}function f(e,t,n){var r=e.current(),i=r.search(t),s;if(i>-1)e.backUp(r.length-i);else if(s=r.match(/<\/?$/))e.backUp(r.length),e.match(t,!1)||e.match(r);return n}function l(e,t){return e.match(/^<\/\s*script\s*>/i,!1)?(t.token=a,t.localState=t.localMode=null,a(e,t)):f(e,/<\/\s*script\s*>/,t.localMode.token(e,t.localState))}function c(e,t){return e.match(/^<\/\s*style\s*>/i,!1)?(t.token=a,t.localState=t.localMode=null,a(e,t)):f(e,/<\/\s*style\s*>/,r.token(e,t.localState))}var n=CodeMirror.getMode(e,{name:"xml",htmlMode:!0}),r=CodeMirror.getMode(e,"css"),i=[],s=t&&t.scriptTypes;i.push({matches:/^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^$/i,mode:CodeMirror.getMode(e,"javascript")});if(s)for(var o=0;o"))return c("=>","operator");if(n=="0"&&e.eat(/x/i))return e.eatWhile(/[\da-f]/i),c("number","number");if(/\d/.test(n))return e.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/),c("number","number");if(n=="/")return e.eat("*")?(t.tokenize=d,d(e,t)):e.eat("/")?(e.skipToEnd(),c("comment","comment")):t.lastType=="operator"||t.lastType=="keyword c"||t.lastType=="sof"||/^[\[{}\(,;:]$/.test(t.lastType)?(a(e),e.eatWhile(/[gimy]/),c("regexp","string-2")):(e.eatWhile(u),c("operator","operator",e.current()));if(n=="`")return t.tokenize=v,v(e,t);if(n=="#")return e.skipToEnd(),c("error","error");if(u.test(n))return e.eatWhile(u),c("operator","operator",e.current());e.eatWhile(/[\w\$_]/);var r=e.current(),i=o.propertyIsEnumerable(r)&&o[r];return i&&t.lastType!="."?c(i.type,i.style,r):c("variable","variable",r)}function p(e){return function(t,n){var r=!1,i;while((i=t.next())!=null){if(i==e&&!r)break;r=!r&&i=="\\"}return r||(n.tokenize=h),c("string","string")}}function d(e,t){var n=!1,r;while(r=e.next()){if(r=="/"&&n){t.tokenize=h;break}n=r=="*"}return c("comment","comment")}function v(e,t){var n=!1,r;while((r=e.next())!=null){if(!n&&(r=="`"||r=="$"&&e.eat("{"))){t.tokenize=h;break}n=!n&&r=="\\"}return c("quasi","string-2",e.current())}function g(e,t){t.fatArrowAt&&(t.fatArrowAt=null);var n=e.string.indexOf("=>",e.start);if(n<0)return;var r=0,i=!1;for(var s=n-1;s>=0;--s){var o=e.string.charAt(s),u=m.indexOf(o);if(u>=0&&u<3){if(!r){++s;break}if(--r==0)break}else if(u>=3&&u<6)++r;else if(/[$\w]/.test(o))i=!0;else if(i&&!r){++s;break}}i&&!r&&(t.fatArrowAt=s)}function b(e,t,n,r,i,s){this.indented=e,this.column=t,this.type=n,this.prev=i,this.info=s,r!=null&&(this.align=r)}function w(e,t){for(var n=e.localVars;n;n=n.next)if(n.name==t)return!0;for(var r=e.context;r;r=r.prev)for(var n=r.vars;n;n=n.next)if(n.name==t)return!0}function E(e,t,n,r,s){var o=e.cc;S.state=e,S.stream=s,S.marked=null,S.cc=o,e.lexical.hasOwnProperty("align")||(e.lexical.align=!0);for(;;){var u=o.length?o.pop():i?D:_;if(u(n,r)){while(o.length&&o[o.length-1].lex)o.pop()();return S.marked?S.marked:n=="variable"&&w(e,r)?"variable-2":t}}}function x(){for(var e=arguments.length-1;e>=0;e--)S.cc.push(arguments[e])}function T(){return x.apply(null,arguments),!0}function N(e){function n(t){for(var n=t;n;n=n.next)if(n.name==e)return!0;return!1}var r=S.state;if(r.context){S.marked="def";if(n(r.localVars))return;r.localVars={name:e,next:r.localVars}}else{if(n(r.globalVars))return;t.globalVars&&(r.globalVars={name:e,next:r.globalVars})}}function k(){S.state.context={prev:S.state.context,vars:S.state.localVars},S.state.localVars=C}function L(){S.state.localVars=S.state.context.vars,S.state.context=S.state.context.prev}function A(e,t){var n=function(){var n=S.state,r=n.indented;n.lexical.type=="stat"&&(r=n.lexical.indented),n.lexical=new b(r,S.stream.column(),e,null,n.lexical,t)};return n.lex=!0,n}function O(){var e=S.state;e.lexical.prev&&(e.lexical.type==")"&&(e.indented=e.lexical.indented),e.lexical=e.lexical.prev)}function M(e){return function(t){return t==e?T():e==";"?x():T(arguments.callee)}}function _(e,t){return e=="var"?T(A("vardef",t.length),et,M(";"),O):e=="keyword a"?T(A("form"),D,_,O):e=="keyword b"?T(A("form"),_,O):e=="{"?T(A("}"),G,O):e==";"?T():e=="if"?T(A("form"),D,_,O,st):e=="function"?T(ct):e=="for"?T(A("form"),ot,_,O):e=="variable"?T(A("stat"),W):e=="switch"?T(A("form"),D,A("}","switch"),M("{"),G,O,O):e=="case"?T(D,M(":")):e=="default"?T(M(":")):e=="catch"?T(A("form"),k,M("("),ht,M(")"),_,O,L):e=="module"?T(A("form"),k,mt,L,O):e=="class"?T(A("form"),pt,vt,O):e=="export"?T(A("form"),gt,O):e=="import"?T(A("form"),yt,O):x(A("stat"),D,M(";"),O)}function D(e){return H(e,!1)}function P(e){return H(e,!0)}function H(e,t){if(S.state.fatArrowAt==S.stream.start){var n=t?z:U;if(e=="(")return T(k,A(")"),K(tt,")"),O,M("=>"),n,L);if(e=="variable")return x(k,tt,M("=>"),n,L)}var r=t?I:F;return y.hasOwnProperty(e)?T(r):e=="function"?T(ct):e=="keyword c"?T(t?j:B):e=="("?T(A(")"),B,xt,M(")"),O,r):e=="operator"||e=="spread"?T(t?P:D):e=="["?T(A("]"),Et,O,r):e=="{"?Q(V,"}",null,r):T()}function B(e){return e.match(/[;\}\)\],]/)?x():x(D)}function j(e){return e.match(/[;\}\)\],]/)?x():x(P)}function F(e,t){return e==","?T(D):I(e,t,!1)}function I(e,t,n){var r=n==0?F:I,i=n==0?D:P;if(t=="=>")return T(k,n?z:U,L);if(e=="operator")return/\+\+|--/.test(t)?T(r):t=="?"?T(D,M(":"),i):T(i);if(e=="quasi")return S.cc.push(r),q(t);if(e==";")return;if(e=="(")return Q(P,")","call",r);if(e==".")return T(X,r);if(e=="[")return T(A("]"),B,M("]"),O,r)}function q(e){return e.slice(e.length-2)!="${"?T():T(D,R)}function R(e){if(e=="}")return S.marked="string-2",S.state.tokenize=v,T()}function U(e){return g(S.stream,S.state),e=="{"?x(_):x(D)}function z(e){return g(S.stream,S.state),e=="{"?x(_):x(P)}function W(e){return e==":"?T(O,_):x(F,M(";"),O)}function X(e){if(e=="variable")return S.marked="property",T()}function V(e,t){if(e=="variable"){S.marked="property";if(t=="get"||t=="set")return T($)}else if(e=="number"||e=="string")S.marked=e+" property";else if(e=="[")return T(D,M("]"),J);if(y.hasOwnProperty(e))return T(J)}function $(e){return e!="variable"?x(J):(S.marked="property",T(ct))}function J(e){if(e==":")return T(P);if(e=="(")return x(ct)}function K(e,t){function n(r){if(r==","){var i=S.state.lexical;return i.info=="call"&&(i.pos=(i.pos||0)+1),T(e,n)}return r==t?T():T(M(t))}return function(r){return r==t?T():x(e,n)}}function Q(e,t,n){for(var r=3;r!?|~^]/,f,l,m="([{}])",y={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,"this":!0},S={state:null,column:null,marked:null,cc:null},C={name:"this",next:{name:"arguments"}};return O.lex=!0,{startState:function(e){var r={tokenize:h,lastType:"sof",cc:[],lexical:new b((e||0)-n,0,"block",!1),localVars:t.localVars,context:t.localVars&&{vars:t.localVars},indented:0};return t.globalVars&&(r.globalVars=t.globalVars),r},token:function(e,t){e.sol()&&(t.lexical.hasOwnProperty("align")||(t.lexical.align=!1),t.indented=e.indentation(),g(e,t));if(t.tokenize!=d&&e.eatSpace())return null;var n=t.tokenize(e,t);return f=="comment"?n:(t.lastType=f!="operator"||l!="++"&&l!="--"?f:"incdec",E(t,n,f,l,e))},indent:function(e,i){if(e.tokenize==d)return CodeMirror.Pass;if(e.tokenize!=h)return 0;var s=i&&i.charAt(0),o=e.lexical;for(var u=e.cc.length-1;u>=0;--u){var a=e.cc[u];if(a==O)o=o.prev;else if(a!=st)break}o.type=="stat"&&s=="}"&&(o=o.prev),r&&o.type==")"&&o.prev.type=="stat"&&(o=o.prev);var f=o.type,l=s==f;return f=="vardef"?o.indented+(e.lastType=="operator"||e.lastType==","?o.info+1:0):f=="form"&&s=="{"?o.indented:f=="form"?o.indented+n:f=="stat"?o.indented+(e.lastType=="operator"||e.lastType==","?r||n:0):o.info=="switch"&&!l&&t.doubleIndentSwitch!=0?o.indented+(/^(?:case|default)\b/.test(i)?n:2*n):o.align?o.column+(l?0:1):o.indented+(l?0:n)},electricChars:":{}",blockCommentStart:i?null:"/*",blockCommentEnd:i?null:"*/",lineComment:i?null:"//",fold:"brace",helperType:i?"json":"javascript",jsonMode:i}}),CodeMirror.defineMIME("text/javascript","javascript"),CodeMirror.defineMIME("text/ecmascript","javascript"),CodeMirror.defineMIME("application/javascript","javascript"),CodeMirror.defineMIME("application/ecmascript","javascript"),CodeMirror.defineMIME("application/json",{name:"javascript",json:!0}),CodeMirror.defineMIME("application/x-json",{name:"javascript",json:!0}),CodeMirror.defineMIME("text/typescript",{name:"javascript",typescript:!0}),CodeMirror.defineMIME("application/typescript",{name:"javascript",typescript:!0}),function(){function r(r){typeof r=="object"&&(this.minChars=r.minChars,this.style=r.style,this.showToken=r.showToken,this.delay=r.delay),this.style==null&&(this.style=t),this.minChars==null&&(this.minChars=e),this.delay==null&&(this.delay=n),this.overlay=this.timeout=null}function i(e){var t=e.state.matchHighlighter;clearTimeout(t.timeout),t.timeout=setTimeout(function(){s(e)},t.delay)}function s(e){e.operation(function(){var t=e.state.matchHighlighter;t.overlay&&(e.removeOverlay(t.overlay),t.overlay=null);if(!e.somethingSelected()&&t.showToken){var n=t.showToken===!0?/[\w$]/:t.showToken,r=e.getCursor(),i=e.getLine(r.line),s=r.ch,o=s;while(s&&n.test(i.charAt(s-1)))--s;while(o=t.minChars&&e.addOverlay(t.overlay=u(a,!1,t.style))})}function o(e,t){return(!e.start||!t.test(e.string.charAt(e.start-1)))&&(e.pos==e.string.length||!t.test(e.string.charAt(e.pos)))}function u(e,t,n){return{token:function(r){if(r.match(e)&&(!t||o(r,t)))return n;r.next(),r.skipTo(e.charAt(0))||r.skipToEnd()}}}var e=2,t="matchhighlight",n=100;CodeMirror.defineOption("highlightSelectionMatches",!1,function(e,t,n){if(n&&n!=CodeMirror.Init){var o=e.state.matchHighlighter.overlay;o&&e.removeOverlay(o),clearTimeout(e.state.matchHighlighter.timeout),e.state.matchHighlighter=null,e.off("cursorActivity",i)}t&&(e.state.matchHighlighter=new r(t),s(e),e.on("cursorActivity",i))})}(),CodeMirror.defineMode("python",function(e,t){function r(e){return new RegExp("^(("+e.join(")|(")+"))\\b")}function w(e,t){if(e.sol()){var r=t.scopes[0].offset;if(e.eatSpace()){var l=e.indentation();return l>r?b="indent":l0&&x(e,t)}if(e.eatSpace())return null;var h=e.peek();if(h==="#")return e.skipToEnd( -),"comment";if(e.match(/^[0-9\.]/,!1)){var p=!1;e.match(/^\d*\.\d+(e[\+\-]?\d+)?/i)&&(p=!0),e.match(/^\d+\.\d*/)&&(p=!0),e.match(/^\.\d+/)&&(p=!0);if(p)return e.eat(/J/i),"number";var d=!1;e.match(/^0x[0-9a-f]+/i)&&(d=!0),e.match(/^0b[01]+/i)&&(d=!0),e.match(/^0o[0-7]+/i)&&(d=!0),e.match(/^[1-9]\d*(e[\+\-]?\d+)?/)&&(e.eat(/J/i),d=!0),e.match(/^0(?![\dx])/i)&&(d=!0);if(d)return e.eat(/L/i),"number"}return e.match(m)?(t.tokenize=E(e.current()),t.tokenize(e,t)):e.match(a)||e.match(u)?null:e.match(o)||e.match(i)||e.match(c)?"operator":e.match(s)?null:e.match(g)?"keyword":e.match(y)?"builtin":e.match(f)?t.lastToken=="def"||t.lastToken=="class"?"def":"variable":(e.next(),n)}function E(e){function s(s,o){while(!s.eol()){s.eatWhile(/[^'"\\]/);if(s.eat("\\")){s.next();if(r&&s.eol())return i}else{if(s.match(e))return o.tokenize=w,i;s.eat(/['"]/)}}if(r){if(t.singleLineStringErrors)return n;o.tokenize=w}return i}while("rub".indexOf(e.charAt(0).toLowerCase())>=0)e=e.substr(1);var r=e.length==1,i="string";return s.isString=!0,s}function S(t,n,r){r=r||"py";var i=0;if(r==="py"){if(n.scopes[0].type!=="py"){n.scopes[0].offset=t.indentation();return}for(var s=0;s0&&e.eol()&&t.scopes[0].type=="py"&&(t.scopes.length>1&&t.scopes.shift(),t.dedent-=1),r))}var n="error",i=t.singleOperators||new RegExp("^[\\+\\-\\*/%&|\\^~<>!]"),s=t.singleDelimiters||new RegExp("^[\\(\\)\\[\\]\\{\\}@,:`=;\\.]"),o=t.doubleOperators||new RegExp("^((==)|(!=)|(<=)|(>=)|(<>)|(<<)|(>>)|(//)|(\\*\\*))"),u=t.doubleDelimiters||new RegExp("^((\\+=)|(\\-=)|(\\*=)|(%=)|(/=)|(&=)|(\\|=)|(\\^=))"),a=t.tripleDelimiters||new RegExp("^((//=)|(>>=)|(<<=)|(\\*\\*=))"),f=t.identifiers||new RegExp("^[_A-Za-z][_A-Za-z0-9]*"),l=t.hangingIndent||t.indentUnit,c=r(["and","or","not","is","in"]),h=["as","assert","break","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","lambda","pass","raise","return","try","while","with","yield"],p=["abs","all","any","bin","bool","bytearray","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip","__import__","NotImplemented","Ellipsis","__debug__"],d={builtins:["apply","basestring","buffer","cmp","coerce","execfile","file","intern","long","raw_input","reduce","reload","unichr","unicode","xrange","False","True","None"],keywords:["exec","print"]},v={builtins:["ascii","bytes","exec","print"],keywords:["nonlocal","False","True","None"]};t.extra_keywords!=undefined&&(h=h.concat(t.extra_keywords)),t.extra_builtins!=undefined&&(p=p.concat(t.extra_builtins));if(!t.version||parseInt(t.version,10)!==3){h=h.concat(d.keywords),p=p.concat(d.builtins);var m=new RegExp("^(([rub]|(ur)|(br))?('{3}|\"{3}|['\"]))","i")}else{h=h.concat(v.keywords),p=p.concat(v.builtins);var m=new RegExp("^(([rb]|(br))?('{3}|\"{3}|['\"]))","i")}var g=r(h),y=r(p),b=null,N={startState:function(e){return{tokenize:w,scopes:[{offset:e||0,type:"py"}],lastStyle:null,lastToken:null,lambda:!1,dedent:0}},token:function(e,t){var n=T(e,t);t.lastStyle=n;var r=e.current();return r&&n&&(t.lastToken=r),e.eol()&&t.lambda&&(t.lambda=!1),n},indent:function(e){return e.tokenize!=w?e.tokenize.isString?CodeMirror.Pass:0:e.scopes[0].offset},lineComment:"#",fold:"indent"};return N}),CodeMirror.defineMIME("text/x-python","python"),function(){"use strict";var e=function(e){return e.split(" ")};CodeMirror.defineMIME("text/x-cython",{name:"python",extra_keywords:e("by cdef cimport cpdef ctypedef enum exceptextern gil include nogil property publicreadonly struct union DEF IF ELIF ELSE")})}(),function(){function e(e,t){var n;return typeof e=="string"?(n=e.charAt(0),e=new RegExp("^"+e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&"),t?"i":"")):e=new RegExp("^(?:"+e.source+")",e.ignoreCase?"i":""),typeof e=="string"?{token:function(t){if(t.match(e))return"searching";t.next(),t.skipTo(e.charAt(0))||t.skipToEnd()}}:{token:function(t){if(t.match(e))return"searching";while(!t.eol()){t.next(),n&&(t.skipTo(n)||t.skipToEnd());if(t.match(e,!1))break}}}}function t(){this.posFrom=this.posTo=this.query=null,this.overlay=null}function n(e){return e.state.search||(e.state.search=new t)}function r(e){return typeof e=="string"&&e==e.toLowerCase()}function i(e,t,n){return e.getSearchCursor(t,n,r(t))}function s(e,t,n,r,i){e.openDialog?e.openDialog(t,i,{value:r}):i(prompt(n,r))}function o(e,t,n,r){e.openConfirm?e.openConfirm(t,r):confirm(n)&&r[0]()}function u(e){var t=e.match(/^\/(.*)\/([a-z]*)$/);return t?new RegExp(t[1],t[2].indexOf("i")==-1?"":"i"):e}function f(t,i){var o=n(t);if(o.query)return l(t,i);s(t,a,"Search for:",t.getSelection(),function(n){t.operation(function(){if(!n||o.query)return;o.query=u(n),t.removeOverlay(o.overlay,r(o.query)),o.overlay=e(o.query),t.addOverlay(o.overlay),o.posFrom=o.posTo=t.getCursor(),l(t,i)})})}function l(e,t){e.operation(function(){var r=n(e),s=i(e,r.query,t?r.posFrom:r.posTo);if(!s.find(t)){s=i(e,r.query,t?CodeMirror.Pos(e.lastLine()):CodeMirror.Pos(e.firstLine(),0));if(!s.find(t))return}e.setSelection(s.from(),s.to()),e.scrollIntoView({from:s.from(),to:s.to()}),r.posFrom=s.from(),r.posTo=s.to()})}function c(e){e.operation(function(){var t=n(e);if(!t.query)return;t.query=null,e.removeOverlay(t.overlay)})}function v(e,t){s(e,h,"Replace:",e.getSelection(),function(n){if(!n)return;n=u(n),s(e,p,"Replace with:","",function(r){if(t)e.operation(function(){for(var t=i(e,n);t.findNext();)if(typeof n!="string"){var s=e.getRange(t.from(),t.to()).match(n);t.replace(r.replace(/\$(\d)/,function(e,t){return s[t]}))}else t.replace(r)});else{c(e);var s=i(e,n,e.getCursor()),u=function(){var t=s.from(),r;if(!(r=s.findNext())){s=i(e,n);if(!(r=s.findNext())||t&&s.from().line==t.line&&s.from().ch==t.ch)return}e.setSelection(s.from(),s.to()),e.scrollIntoView({from:s.from(),to:s.to()}),o(e,d,"Replace?",[function(){a(r)},u])},a=function(e){s.replace(typeof n=="string"?r:r.replace(/\$(\d)/,function(t,n){return e[n]})),u()};u()}})})}var a='Search: (Use /re/ syntax for regexp search)',h='Replace: (Use /re/ syntax for regexp search)',p='With: ',d="Replace? ";CodeMirror.commands.find=function(e){c(e),f(e)},CodeMirror.commands.findNext=f,CodeMirror.commands.findPrev=function(e){f(e,!0)},CodeMirror.commands.clearSearch=c,CodeMirror.commands.replace=v,CodeMirror.commands.replaceAll=function(e){v(e,!0)}}(),function(){function t(t,r,i,s){this.atOccurrence=!1,this.doc=t,s==null&&typeof r=="string"&&(s=!1),i=i?t.clipPos(i):e(0,0),this.pos={from:i,to:i};if(typeof r!="string")r.global||(r=new RegExp(r.source,r.ignoreCase?"ig":"g")),this.matches=function(n,i){if(n){r.lastIndex=0;var s=t.getLine(i.line).slice(0,i.ch),o=0,u,a;for(;;){r.lastIndex=o;var f=r.exec(s);if(!f)break;u=f,a=u.index,o=u.index+(u[0].length||1);if(o==s.length)break}var l=u&&u[0].length||0;l||(a==0&&s.length==0?u=undefined:a!=t.getLine(i.line).length&&l++)}else{r.lastIndex=i.ch;var s=t.getLine(i.line),u=r.exec(s),l=u&&u[0].length||0,a=u&&u.index;a+l!=s.length&&!l&&(l=1)}if(u&&l)return{from:e(i.line,a),to:e(i.line,a+l),match:u}};else{var o=r;s&&(r=r.toLowerCase());var u=s?function(e){return e.toLowerCase()}:function(e){return e},a=r.split("\n");if(a.length==1)r.length?this.matches=function(i,s){if(i){var a=t.getLine(s.line).slice(0,s.ch),f=u(a),l=f.lastIndexOf(r);if(l>-1)return l=n(a,f,l),{from:e(s.line,l),to:e(s.line,l+o.length)}}else{var a=t.getLine(s.line).slice(s.ch),f=u(a),l=f.indexOf(r);if(l>-1)return l=n(a,f,l)+s.ch,{from:e(s.line,l),to:e(s.line,l+o.length)}}}:this.matches=function(){};else{var f=o.split("\n");this.matches=function(n,r){var i=a.length-1;if(n){if(r.line-(a.length-1)=1;--l,--o)if(a[l]!=u(t.getLine(o)))return;var c=t.getLine(o),h=c.length-f[0].length;if(u(c.slice(h))!=a[0])return;return{from:e(o,h),to:s}}if(r.line+(a.length-1)>t.lastLine())return;var c=t.getLine(r.line),h=c.length-f[0].length;if(u(c.slice(h))!=a[0])return;var p=e(r.line,h);for(var o=r.line+1,l=1;ln))return r;--r}}}var e=CodeMirror.Pos;t.prototype={findNext:function(){return this.find(!1)},findPrevious:function(){return this.find(!0)},find:function(t){function i(t){var r=e(t,0);return n.pos={from:r,to:r},n.atOccurrence=!1,!1}var n=this,r=this.doc.clipPos(t?this.pos.from:this.pos.to);for(;;){if(this.pos=this.matches(t,r))return this.atOccurrence=!0,this.pos.match||!0;if(t){if(!r.line)return i(0);r=e(r.line-1,this.doc.getLine(r.line-1).length)}else{var s=this.doc.lineCount();if(r.line==s-1)return i(s);r=e(r.line+1,0)}}},from:function(){if(this.atOccurrence)return this.pos.from},to:function(){if(this.atOccurrence)return this.pos.to},replace:function(t){if(!this.atOccurrence)return;var n=CodeMirror.splitLines(t);this.doc.replaceRange(n,this.pos.from,this.pos.to),this.pos.to=e(this.pos.from.line+n.length-1,n[n.length-1].length+(n.length==1?this.pos.from.ch:0))}},CodeMirror.defineExtension("getSearchCursor",function(e,n,r){return new t(this.doc,e,n,r)}),CodeMirror.defineDocExtension("getSearchCursor",function(e,n,r){return new t(this,e,n,r)})}(),CodeMirror.defineMode("xml",function(e,t){function l(e,t){function n(n){return t.tokenize=n,n(e,t)}var r=e.next();if(r=="<"){if(e.eat("!"))return e.eat("[")?e.match("CDATA[")?n(p("atom","]]>")):null:e.match("--")?n(p("comment","-->")):e.match("DOCTYPE",!0,!0)?(e.eatWhile(/[\w\._\-]/),n(d(1))):null;if(e.eat("?"))return e.eatWhile(/[\w\._\-]/),t.tokenize=p("meta","?>"),"meta";var i=e.eat("/");u="";var s;while(s=e.eat(/[^\s\u00a0=<>\"\'\/?]/))u+=s;return u?(a=i?"closeTag":"openTag",t.tokenize=c,"tag"):"tag error"}if(r=="&"){var o;return e.eat("#")?e.eat("x")?o=e.eatWhile(/[a-fA-F\d]/)&&e.eat(";"):o=e.eatWhile(/[\d]/)&&e.eat(";"):o=e.eatWhile(/[\w\.\-:]/)&&e.eat(";"),o?"atom":"error"}return e.eatWhile(/[^&<]/),null}function c(e,t){var n=e.next();if(n==">"||n=="/"&&e.eat(">"))return t.tokenize=l,a=n==">"?"endTag":"selfcloseTag","tag";if(n=="=")return a="equals",null;if(n=="<"){t.tokenize=l,t.state=y,t.tagName=t.tagStart=null;var r=t.tokenize(e,t);return r?r+" error":"error"}return/[\'\"]/.test(n)?(t.tokenize=h(n),t.stringStartCol=e.column(),t.tokenize(e,t)):(e.eatWhile(/[^\s\u00a0=<>\"\']/),"word")}function h(e){var t=function(t,n){while(!t.eol())if(t.next()==e){n.tokenize=c;break}return"string"};return t.isInAttribute=!0,t}function p(e,t){return function(n,r){while(!n.eol()){if(n.match(t)){r.tokenize=l;break}n.next()}return e}}function d(e){return function(t,n){var r;while((r=t.next())!=null){if(r=="<")return n.tokenize=d(e+1),n.tokenize(t,n);if(r==">"){if(e==1){n.tokenize=l;break}return n.tokenize=d(e-1),n.tokenize(t,n)}}return"meta"}}function v(e,t,n){this.prev=e.context,this.tagName=t,this.indent=e.indented,this.startOfLine=n;if(s.doNotIndent.hasOwnProperty(t)||e.context&&e.context.noIndent)this.noIndent=!0}function m(e){e.context&&(e.context=e.context.prev)}function g(e,t){var n;for(;;){if(!e.context)return;n=e.context.tagName.toLowerCase();if(!s.contextGrabbers.hasOwnProperty(n)||!s.contextGrabbers[n].hasOwnProperty(t))return;m(e)}}function y(e,t,n){if(e=="openTag")return n.tagName=u,n.tagStart=t.column(),E;if(e=="closeTag"){var r=!1;return n.context?n.context.tagName!=u&&(s.implicitlyClosed.hasOwnProperty(n.context.tagName.toLowerCase())&&m(n),r=!n.context||n.context.tagName!=u):r=!0,r&&(f="error"),r?w:b}return y}function b(e,t,n){return e!="endTag"?(f="error",b):(m(n),y)}function w(e,t,n){return f="error",b(e,t,n)}function E(e,t,n){if(e=="word")return f="attribute",S;if(e=="endTag"||e=="selfcloseTag"){var r=n.tagName,i=n.tagStart;return n.tagName=n.tagStart=null,e=="selfcloseTag"||s.autoSelfClosers.hasOwnProperty(r.toLowerCase())?g(n,r.toLowerCase()):(g(n,r.toLowerCase()),n.context=new v(n,r,i==n.indented)),y}return f="error",E}function S(e,t,n){return e=="equals"?x:(s.allowMissing||(f="error"),E(e,t,n))}function x(e,t,n){return e=="string"?T:e=="word"&&s.allowUnquoted?(f="string",E):(f="error",E(e,t,n))}function T(e,t,n){return e=="string"?T:E(e,t,n)}var n=e.indentUnit,r=t.multilineTagIndentFactor||1,i=t.multilineTagIndentPastTag||!0,s=t.htmlMode?{autoSelfClosers:{area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},implicitlyClosed:{dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},contextGrabbers:{dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}},doNotIndent:{pre:!0},allowUnquoted:!0,allowMissing:!0}:{autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:!1,allowMissing:!1},o=t.alignCDATA,u,a,f;return{startState:function(){return{tokenize:l,state:y,indented:0,tagName:null,tagStart:null,context:null}},token:function(e,t){!t.tagName&&e.sol()&&(t.indented=e.indentation());if(e.eatSpace())return null;u=a=null;var n=t.tokenize(e,t);return(n||a)&&n!="comment"&&(f=null,t.state=t.state(a||n,e,t),f&&(n=f=="error"?n+" error":f)),n},indent:function(e,t,s){var u=e.context;if(e.tokenize.isInAttribute)return e.stringStartCol+1;if(u&&u.noIndent)return CodeMirror.Pass;if(e.tokenize!=c&&e.tokenize!=l)return s?s.match(/^(\s*)/)[0].length:0;if(e.tagName)return i?e.tagStart+e.tagName.length+2:e.tagStart+n*r;if(o&&/",configuration:t.htmlMode?"html":"xml",helperType:t.htmlMode?"html":"xml"}}),CodeMirror.defineMIME("text/xml","xml"),CodeMirror.defineMIME("application/xml","xml"),CodeMirror.mimeModes.hasOwnProperty("text/html")||CodeMirror.defineMIME("text/html",{name:"xml",htmlMode:!0}),CodeMirror.defineMode("yaml",function(){var e=["true","false","on","off","yes","no"],t=new RegExp("\\b(("+e.join(")|(")+"))$","i");return{token:function(e,n){var r=e.peek(),i=n.escaped;n.escaped=!1;if(r!="#"||e.pos!=0&&!/\s/.test(e.string.charAt(e.pos-1))){if(n.literal&&e.indentation()>n.keyCol)return e.skipToEnd(),"string";n.literal&&(n.literal=!1);if(e.sol()){n.keyCol=0,n.pair=!1,n.pairStart=!1;if(e.match(/---/))return"def";if(e.match(/\.\.\./))return"def";if(e.match(/\s*-\s+/))return"meta"}if(e.match(/^(\{|\}|\[|\])/))return r=="{"?n.inlinePairs++:r=="}"?n.inlinePairs--:r=="["?n.inlineList++:n.inlineList--,"meta";if(n.inlineList>0&&!i&&r==",")return e.next(),"meta";if(n.inlinePairs>0&&!i&&r==",")return n.keyCol=0,n.pair=!1,n.pairStart=!1,e.next(),"meta";if(n.pairStart){if(e.match(/^\s*(\||\>)\s*/))return n.literal=!0,"meta";if(e.match(/^\s*(\&|\*)[a-z0-9\._-]+\b/i))return"variable-2";if(n.inlinePairs==0&&e.match(/^\s*-?[0-9\.\,]+\s?$/))return"number";if(n.inlinePairs>0&&e.match(/^\s*-?[0-9\.\,]+\s?(?=(,|}))/))return"number";if(e.match(t))return"keyword"}return!n.pair&&e.match(/^\s*\S+(?=\s*:($|\s))/i)?(n.pair=!0,n.keyCol=e.indentation(),"atom"):n.pair&&e.match(/^:\s*/)?(n.pairStart=!0,"meta"):(n.pairStart=!1,n.escaped=r=="\\",e.next(),null)}return e.skipToEnd(),"comment"},startState:function(){return{pair:!1,pairStart:!1,keyCol:0,inlinePairs:0,inlineList:0,literal:!1,escaped:!1}}}}),CodeMirror.defineMIME("text/x-yaml","yaml"); \ No newline at end of file +),"comment";if(e.match(/^[0-9\.]/,!1)){var p=!1;e.match(/^\d*\.\d+(e[\+\-]?\d+)?/i)&&(p=!0),e.match(/^\d+\.\d*/)&&(p=!0),e.match(/^\.\d+/)&&(p=!0);if(p)return e.eat(/J/i),"number";var d=!1;e.match(/^0x[0-9a-f]+/i)&&(d=!0),e.match(/^0b[01]+/i)&&(d=!0),e.match(/^0o[0-7]+/i)&&(d=!0),e.match(/^[1-9]\d*(e[\+\-]?\d+)?/)&&(e.eat(/J/i),d=!0),e.match(/^0(?![\dx])/i)&&(d=!0);if(d)return e.eat(/L/i),"number"}return e.match(m)?(t.tokenize=E(e.current()),t.tokenize(e,t)):e.match(a)||e.match(u)?null:e.match(o)||e.match(i)||e.match(c)?"operator":e.match(s)?null:e.match(g)?"keyword":e.match(y)?"builtin":e.match(f)?t.lastToken=="def"||t.lastToken=="class"?"def":"variable":(e.next(),n)}function E(e){function s(s,o){while(!s.eol()){s.eatWhile(/[^'"\\]/);if(s.eat("\\")){s.next();if(r&&s.eol())return i}else{if(s.match(e))return o.tokenize=w,i;s.eat(/['"]/)}}if(r){if(t.singleLineStringErrors)return n;o.tokenize=w}return i}while("rub".indexOf(e.charAt(0).toLowerCase())>=0)e=e.substr(1);var r=e.length==1,i="string";return s.isString=!0,s}function S(t,n,r){r=r||"py";var i=0;if(r==="py"){if(n.scopes[0].type!=="py"){n.scopes[0].offset=t.indentation();return}for(var s=0;s0&&e.eol()&&t.scopes[0].type=="py"&&(t.scopes.length>1&&t.scopes.shift(),t.dedent-=1),r))}var n="error",i=t.singleOperators||new RegExp("^[\\+\\-\\*/%&|\\^~<>!]"),s=t.singleDelimiters||new RegExp("^[\\(\\)\\[\\]\\{\\}@,:`=;\\.]"),o=t.doubleOperators||new RegExp("^((==)|(!=)|(<=)|(>=)|(<>)|(<<)|(>>)|(//)|(\\*\\*))"),u=t.doubleDelimiters||new RegExp("^((\\+=)|(\\-=)|(\\*=)|(%=)|(/=)|(&=)|(\\|=)|(\\^=))"),a=t.tripleDelimiters||new RegExp("^((//=)|(>>=)|(<<=)|(\\*\\*=))"),f=t.identifiers||new RegExp("^[_A-Za-z][_A-Za-z0-9]*"),l=t.hangingIndent||t.indentUnit,c=r(["and","or","not","is","in"]),h=["as","assert","break","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","lambda","pass","raise","return","try","while","with","yield"],p=["abs","all","any","bin","bool","bytearray","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip","__import__","NotImplemented","Ellipsis","__debug__"],d={builtins:["apply","basestring","buffer","cmp","coerce","execfile","file","intern","long","raw_input","reduce","reload","unichr","unicode","xrange","False","True","None"],keywords:["exec","print"]},v={builtins:["ascii","bytes","exec","print"],keywords:["nonlocal","False","True","None"]};t.extra_keywords!=undefined&&(h=h.concat(t.extra_keywords)),t.extra_builtins!=undefined&&(p=p.concat(t.extra_builtins));if(!t.version||parseInt(t.version,10)!==3){h=h.concat(d.keywords),p=p.concat(d.builtins);var m=new RegExp("^(([rub]|(ur)|(br))?('{3}|\"{3}|['\"]))","i")}else{h=h.concat(v.keywords),p=p.concat(v.builtins);var m=new RegExp("^(([rb]|(br))?('{3}|\"{3}|['\"]))","i")}var g=r(h),y=r(p),b=null,N={startState:function(e){return{tokenize:w,scopes:[{offset:e||0,type:"py"}],lastStyle:null,lastToken:null,lambda:!1,dedent:0}},token:function(e,t){var n=T(e,t);t.lastStyle=n;var r=e.current();return r&&n&&(t.lastToken=r),e.eol()&&t.lambda&&(t.lambda=!1),n},indent:function(e){return e.tokenize!=w?e.tokenize.isString?CodeMirror.Pass:0:e.scopes[0].offset},lineComment:"#",fold:"indent"};return N}),CodeMirror.defineMIME("text/x-python","python"),function(){"use strict";var e=function(e){return e.split(" ")};CodeMirror.defineMIME("text/x-cython",{name:"python",extra_keywords:e("by cdef cimport cpdef ctypedef enum exceptextern gil include nogil property publicreadonly struct union DEF IF ELIF ELSE")})}(),function(){function e(e,t){var n;return typeof e=="string"?(n=e.charAt(0),e=new RegExp("^"+e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&"),t?"i":"")):e=new RegExp("^(?:"+e.source+")",e.ignoreCase?"i":""),typeof e=="string"?{token:function(t){if(t.match(e))return"searching";t.next(),t.skipTo(e.charAt(0))||t.skipToEnd()}}:{token:function(t){if(t.match(e))return"searching";while(!t.eol()){t.next(),n&&(t.skipTo(n)||t.skipToEnd());if(t.match(e,!1))break}}}}function t(){this.posFrom=this.posTo=this.query=null,this.overlay=null}function n(e){return e.state.search||(e.state.search=new t)}function r(e){return typeof e=="string"&&e==e.toLowerCase()}function i(e,t,n){return e.getSearchCursor(t,n,r(t))}function s(e,t,n,r,i){e.openDialog?e.openDialog(t,i,{value:r}):i(prompt(n,r))}function o(e,t,n,r){e.openConfirm?e.openConfirm(t,r):confirm(n)&&r[0]()}function u(e){var t=e.match(/^\/(.*)\/([a-z]*)$/);return t?new RegExp(t[1],t[2].indexOf("i")==-1?"":"i"):e}function f(t,i){var o=n(t);if(o.query)return l(t,i);s(t,a,"Search for:",t.getSelection(),function(n){t.operation(function(){if(!n||o.query)return;o.query=u(n),t.removeOverlay(o.overlay,r(o.query)),o.overlay=e(o.query),t.addOverlay(o.overlay),o.posFrom=o.posTo=t.getCursor(),l(t,i)})})}function l(e,t){e.operation(function(){var r=n(e),s=i(e,r.query,t?r.posFrom:r.posTo);if(!s.find(t)){s=i(e,r.query,t?CodeMirror.Pos(e.lastLine()):CodeMirror.Pos(e.firstLine(),0));if(!s.find(t))return}e.setSelection(s.from(),s.to()),e.scrollIntoView({from:s.from(),to:s.to()}),r.posFrom=s.from(),r.posTo=s.to()})}function c(e){e.operation(function(){var t=n(e);if(!t.query)return;t.query=null,e.removeOverlay(t.overlay)})}function v(e,t){s(e,h,"Replace:",e.getSelection(),function(n){if(!n)return;n=u(n),s(e,p,"Replace with:","",function(r){if(t)e.operation(function(){for(var t=i(e,n);t.findNext();)if(typeof n!="string"){var s=e.getRange(t.from(),t.to()).match(n);t.replace(r.replace(/\$(\d)/,function(e,t){return s[t]}))}else t.replace(r)});else{c(e);var s=i(e,n,e.getCursor()),u=function(){var t=s.from(),r;if(!(r=s.findNext())){s=i(e,n);if(!(r=s.findNext())||t&&s.from().line==t.line&&s.from().ch==t.ch)return}e.setSelection(s.from(),s.to()),e.scrollIntoView({from:s.from(),to:s.to()}),o(e,d,"Replace?",[function(){a(r)},u])},a=function(e){s.replace(typeof n=="string"?r:r.replace(/\$(\d)/,function(t,n){return e[n]})),u()};u()}})})}var a='Search: (Use /re/ syntax for regexp search)',h='Replace: (Use /re/ syntax for regexp search)',p='With: ',d="Replace? ";CodeMirror.commands.find=function(e){c(e),f(e)},CodeMirror.commands.findNext=f,CodeMirror.commands.findPrev=function(e){f(e,!0)},CodeMirror.commands.clearSearch=c,CodeMirror.commands.replace=v,CodeMirror.commands.replaceAll=function(e){v(e,!0)}}(),function(){function t(t,r,i,s){this.atOccurrence=!1,this.doc=t,s==null&&typeof r=="string"&&(s=!1),i=i?t.clipPos(i):e(0,0),this.pos={from:i,to:i};if(typeof r!="string")r.global||(r=new RegExp(r.source,r.ignoreCase?"ig":"g")),this.matches=function(n,i){if(n){r.lastIndex=0;var s=t.getLine(i.line).slice(0,i.ch),o=0,u,a;for(;;){r.lastIndex=o;var f=r.exec(s);if(!f)break;u=f,a=u.index,o=u.index+(u[0].length||1);if(o==s.length)break}var l=u&&u[0].length||0;l||(a==0&&s.length==0?u=undefined:a!=t.getLine(i.line).length&&l++)}else{r.lastIndex=i.ch;var s=t.getLine(i.line),u=r.exec(s),l=u&&u[0].length||0,a=u&&u.index;a+l!=s.length&&!l&&(l=1)}if(u&&l)return{from:e(i.line,a),to:e(i.line,a+l),match:u}};else{var o=r;s&&(r=r.toLowerCase());var u=s?function(e){return e.toLowerCase()}:function(e){return e},a=r.split("\n");if(a.length==1)r.length?this.matches=function(i,s){if(i){var a=t.getLine(s.line).slice(0,s.ch),f=u(a),l=f.lastIndexOf(r);if(l>-1)return l=n(a,f,l),{from:e(s.line,l),to:e(s.line,l+o.length)}}else{var a=t.getLine(s.line).slice(s.ch),f=u(a),l=f.indexOf(r);if(l>-1)return l=n(a,f,l)+s.ch,{from:e(s.line,l),to:e(s.line,l+o.length)}}}:this.matches=function(){};else{var f=o.split("\n");this.matches=function(n,r){var i=a.length-1;if(n){if(r.line-(a.length-1)=1;--l,--o)if(a[l]!=u(t.getLine(o)))return;var c=t.getLine(o),h=c.length-f[0].length;if(u(c.slice(h))!=a[0])return;return{from:e(o,h),to:s}}if(r.line+(a.length-1)>t.lastLine())return;var c=t.getLine(r.line),h=c.length-f[0].length;if(u(c.slice(h))!=a[0])return;var p=e(r.line,h);for(var o=r.line+1,l=1;ln))return r;--r}}}var e=CodeMirror.Pos;t.prototype={findNext:function(){return this.find(!1)},findPrevious:function(){return this.find(!0)},find:function(t){function i(t){var r=e(t,0);return n.pos={from:r,to:r},n.atOccurrence=!1,!1}var n=this,r=this.doc.clipPos(t?this.pos.from:this.pos.to);for(;;){if(this.pos=this.matches(t,r))return this.atOccurrence=!0,this.pos.match||!0;if(t){if(!r.line)return i(0);r=e(r.line-1,this.doc.getLine(r.line-1).length)}else{var s=this.doc.lineCount();if(r.line==s-1)return i(s);r=e(r.line+1,0)}}},from:function(){if(this.atOccurrence)return this.pos.from},to:function(){if(this.atOccurrence)return this.pos.to},replace:function(t){if(!this.atOccurrence)return;var n=CodeMirror.splitLines(t);this.doc.replaceRange(n,this.pos.from,this.pos.to),this.pos.to=e(this.pos.from.line+n.length-1,n[n.length-1].length+(n.length==1?this.pos.from.ch:0))}},CodeMirror.defineExtension("getSearchCursor",function(e,n,r){return new t(this.doc,e,n,r)}),CodeMirror.defineDocExtension("getSearchCursor",function(e,n,r){return new t(this,e,n,r)})}(),CodeMirror.defineMode("xml",function(e,t){function l(e,t){function n(n){return t.tokenize=n,n(e,t)}var r=e.next();if(r=="<"){if(e.eat("!"))return e.eat("[")?e.match("CDATA[")?n(p("atom","]]>")):null:e.match("--")?n(p("comment","-->")):e.match("DOCTYPE",!0,!0)?(e.eatWhile(/[\w\._\-]/),n(d(1))):null;if(e.eat("?"))return e.eatWhile(/[\w\._\-]/),t.tokenize=p("meta","?>"),"meta";var i=e.eat("/");u="";var s;while(s=e.eat(/[^\s\u00a0=<>\"\'\/?]/))u+=s;return u?(a=i?"closeTag":"openTag",t.tokenize=c,"tag"):"tag error"}if(r=="&"){var o;return e.eat("#")?e.eat("x")?o=e.eatWhile(/[a-fA-F\d]/)&&e.eat(";"):o=e.eatWhile(/[\d]/)&&e.eat(";"):o=e.eatWhile(/[\w\.\-:]/)&&e.eat(";"),o?"atom":"error"}return e.eatWhile(/[^&<]/),null}function c(e,t){var n=e.next();if(n==">"||n=="/"&&e.eat(">"))return t.tokenize=l,a=n==">"?"endTag":"selfcloseTag","tag";if(n=="=")return a="equals",null;if(n=="<"){t.tokenize=l,t.state=y,t.tagName=t.tagStart=null;var r=t.tokenize(e,t);return r?r+" error":"error"}return/[\'\"]/.test(n)?(t.tokenize=h(n),t.stringStartCol=e.column(),t.tokenize(e,t)):(e.eatWhile(/[^\s\u00a0=<>\"\']/),"word")}function h(e){var t=function(t,n){while(!t.eol())if(t.next()==e){n.tokenize=c;break}return"string"};return t.isInAttribute=!0,t}function p(e,t){return function(n,r){while(!n.eol()){if(n.match(t)){r.tokenize=l;break}n.next()}return e}}function d(e){return function(t,n){var r;while((r=t.next())!=null){if(r=="<")return n.tokenize=d(e+1),n.tokenize(t,n);if(r==">"){if(e==1){n.tokenize=l;break}return n.tokenize=d(e-1),n.tokenize(t,n)}}return"meta"}}function v(e,t,n){this.prev=e.context,this.tagName=t,this.indent=e.indented,this.startOfLine=n;if(s.doNotIndent.hasOwnProperty(t)||e.context&&e.context.noIndent)this.noIndent=!0}function m(e){e.context&&(e.context=e.context.prev)}function g(e,t){var n;for(;;){if(!e.context)return;n=e.context.tagName.toLowerCase();if(!s.contextGrabbers.hasOwnProperty(n)||!s.contextGrabbers[n].hasOwnProperty(t))return;m(e)}}function y(e,t,n){if(e=="openTag")return n.tagName=u,n.tagStart=t.column(),E;if(e=="closeTag"){var r=!1;return n.context?n.context.tagName!=u&&(s.implicitlyClosed.hasOwnProperty(n.context.tagName.toLowerCase())&&m(n),r=!n.context||n.context.tagName!=u):r=!0,r&&(f="error"),r?w:b}return y}function b(e,t,n){return e!="endTag"?(f="error",b):(m(n),y)}function w(e,t,n){return f="error",b(e,t,n)}function E(e,t,n){if(e=="word")return f="attribute",S;if(e=="endTag"||e=="selfcloseTag"){var r=n.tagName,i=n.tagStart;return n.tagName=n.tagStart=null,e=="selfcloseTag"||s.autoSelfClosers.hasOwnProperty(r.toLowerCase())?g(n,r.toLowerCase()):(g(n,r.toLowerCase()),n.context=new v(n,r,i==n.indented)),y}return f="error",E}function S(e,t,n){return e=="equals"?x:(s.allowMissing||(f="error"),E(e,t,n))}function x(e,t,n){return e=="string"?T:e=="word"&&s.allowUnquoted?(f="string",E):(f="error",E(e,t,n))}function T(e,t,n){return e=="string"?T:E(e,t,n)}var n=e.indentUnit,r=t.multilineTagIndentFactor||1,i=t.multilineTagIndentPastTag||!0,s=t.htmlMode?{autoSelfClosers:{area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},implicitlyClosed:{dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},contextGrabbers:{dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}},doNotIndent:{pre:!0},allowUnquoted:!0,allowMissing:!0}:{autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:!1,allowMissing:!1},o=t.alignCDATA,u,a,f;return{startState:function(){return{tokenize:l,state:y,indented:0,tagName:null,tagStart:null,context:null}},token:function(e,t){!t.tagName&&e.sol()&&(t.indented=e.indentation());if(e.eatSpace())return null;u=a=null;var n=t.tokenize(e,t);return(n||a)&&n!="comment"&&(f=null,t.state=t.state(a||n,e,t),f&&(n=f=="error"?n+" error":f)),n},indent:function(e,t,s){var u=e.context;if(e.tokenize.isInAttribute)return e.stringStartCol+1;if(u&&u.noIndent)return CodeMirror.Pass;if(e.tokenize!=c&&e.tokenize!=l)return s?s.match(/^(\s*)/)[0].length:0;if(e.tagName)return i?e.tagStart+e.tagName.length+2:e.tagStart+n*r;if(o&&/",configuration:t.htmlMode?"html":"xml",helperType:t.htmlMode?"html":"xml"}}),CodeMirror.defineMIME("text/xml","xml"),CodeMirror.defineMIME("application/xml","xml"),CodeMirror.mimeModes.hasOwnProperty("text/html")||CodeMirror.defineMIME("text/html",{name:"xml",htmlMode:!0}),CodeMirror.defineMode("yaml",function(){var e=["true","false","on","off","yes","no"],t=new RegExp("\\b(("+e.join(")|(")+"))$","i");return{token:function(e,n){var r=e.peek(),i=n.escaped;n.escaped=!1;if(r!="#"||e.pos!=0&&!/\s/.test(e.string.charAt(e.pos-1))){if(n.literal&&e.indentation()>n.keyCol)return e.skipToEnd(),"string";n.literal&&(n.literal=!1);if(e.sol()){n.keyCol=0,n.pair=!1,n.pairStart=!1;if(e.match(/---/))return"def";if(e.match(/\.\.\./))return"def";if(e.match(/\s*-\s+/))return"meta"}if(e.match(/^(\{|\}|\[|\])/))return r=="{"?n.inlinePairs++:r=="}"?n.inlinePairs--:r=="["?n.inlineList++:n.inlineList--,"meta";if(n.inlineList>0&&!i&&r==",")return e.next(),"meta";if(n.inlinePairs>0&&!i&&r==",")return n.keyCol=0,n.pair=!1,n.pairStart=!1,e.next(),"meta";if(n.pairStart){if(e.match(/^\s*(\||\>)\s*/))return n.literal=!0,"meta";if(e.match(/^\s*(\&|\*)[a-z0-9\._-]+\b/i))return"variable-2";if(n.inlinePairs==0&&e.match(/^\s*-?[0-9\.\,]+\s?$/))return"number";if(n.inlinePairs>0&&e.match(/^\s*-?[0-9\.\,]+\s?(?=(,|}))/))return"number";if(e.match(t))return"keyword"}return!n.pair&&e.match(/^\s*\S+(?=\s*:($|\s))/i)?(n.pair=!0,n.keyCol=e.indentation(),"atom"):n.pair&&e.match(/^:\s*/)?(n.pairStart=!0,"meta"):(n.pairStart=!1,n.escaped=r=="\\",e.next(),null)}return e.skipToEnd(),"comment"},startState:function(){return{pair:!1,pairStart:!1,keyCol:0,inlinePairs:0,inlineList:0,literal:!1,escaped:!1}}}}),CodeMirror.defineMIME("text/x-yaml","yaml"),function(){function e(e,t,n){var r=e.getWrapperElement(),i;return i=r.appendChild(document.createElement("div")),n?i.className="CodeMirror-dialog CodeMirror-dialog-bottom":i.className="CodeMirror-dialog CodeMirror-dialog-top",typeof t=="string"?i.innerHTML=t:i.appendChild(t),i}function t(e,t){e.state.currentNotificationClose&&e.state.currentNotificationClose(),e.state.currentNotificationClose=t}CodeMirror.defineExtension("openDialog",function(n,r,i){function a(){if(o)return;o=!0,s.parentNode.removeChild(s)}t(this,null);var s=e(this,n,i&&i.bottom),o=!1,u=this,f=s.getElementsByTagName("input")[0],l;if(f)i&&i.value&&(f.value=i.value),CodeMirror.on(f,"keydown",function(e){if(i&&i.onKeyDown&&i.onKeyDown(e,f.value,a))return;if(e.keyCode==13||e.keyCode==27)CodeMirror.e_stop(e),a(),u.focus(),e.keyCode==13&&r(f.value)}),i&&i.onKeyUp&&CodeMirror.on(f,"keyup",function(e){i.onKeyUp(e,f.value,a)}),i&&i.value&&(f.value=i.value),f.focus(),CodeMirror.on(f,"blur",a);else if(l=s.getElementsByTagName("button")[0])CodeMirror.on(l,"click",function(){a(),u.focus()}),l.focus(),CodeMirror.on(l,"blur",a);return a}),CodeMirror.defineExtension("openConfirm",function(n,r,i){function l(){if(u)return;u=!0,s.parentNode.removeChild(s),a.focus()}t(this,null);var s=e(this,n,i&&i.bottom),o=s.getElementsByTagName("button"),u=!1,a=this,f=1;o[0].focus();for(var c=0;c Date: Mon, 31 Mar 2014 15:55:50 -0400 Subject: [PATCH 06/11] Directions for creating codemirror-compressed.js --- common/static/js/vendor/CodeMirror/BUILD_README.txt | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 common/static/js/vendor/CodeMirror/BUILD_README.txt diff --git a/common/static/js/vendor/CodeMirror/BUILD_README.txt b/common/static/js/vendor/CodeMirror/BUILD_README.txt new file mode 100644 index 0000000000..0a5ec421e7 --- /dev/null +++ b/common/static/js/vendor/CodeMirror/BUILD_README.txt @@ -0,0 +1,7 @@ +Instructions for creating codemirror-compressed.js (in top-level vendor directory). + +1. Install uglifyjs and put it on your path. +2. In the CodeMirror directory, run "cat codemirror.js addons/* addons/dialog/dialog.js | uglifyjs > codemirror-compressed.js" +3. Replace existing codemirror-compressed.js file with the generated one. + +Additions to codemirror.css are done by manually copying in the new content. From 6443486dd0420dcd506f12c81df1863036e87644 Mon Sep 17 00:00:00 2001 From: Brian Talbot Date: Tue, 1 Apr 2014 08:17:25 -0400 Subject: [PATCH 07/11] scoping TinyMCE editing CSS to just tinyMCE context-based elements --- common/static/css/tinymce-studio-content.css | 50 ++++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/common/static/css/tinymce-studio-content.css b/common/static/css/tinymce-studio-content.css index 99b11993ad..5debf96596 100644 --- a/common/static/css/tinymce-studio-content.css +++ b/common/static/css/tinymce-studio-content.css @@ -17,7 +17,7 @@ scrollbar-track-color: #F5F5F5; } -h1 { +.mce-content-body h1 { color: #3c3c3c; font-weight: normal; font-size: 2em; @@ -26,7 +26,7 @@ h1 { margin: 0 0 1.416em 0; } -h2 { +.mce-content-body h2 { color: #646464; font-weight: normal; font-size: 1.2em; @@ -37,74 +37,74 @@ h2 { -webkit-font-smoothing: antialiased; } -h3, h4, h5, h6 { +.mce-content-body h3, .mce-content-body h4, .mce-content-body h5, .mce-content-body h6 { margin: 0 0 10px 0; font-weight: 600; } -h3 { +.mce-content-body h3 { font-size: 1.2em; } -h4 { +.mce-content-body h4 { font-size: 1em; } -h5 { +.mce-content-body h5 { font-size: .83em; } -h6 { +.mce-content-body h6 { font-size: 0.75em; } -p { +.mce-content-body p { margin-bottom: 1.416em; font-size: 1em; line-height: 1.6em !important; color: #3c3c3c; } -em, i { +.mce-content-body em, .mce-content-body i { font-style: italic; } -strong, b { +.mce-content-body strong, .mce-content-body b { font-style: bold; } -p + p, ul + p, ol + p { +.mce-content-body p + p, .mce-content-body ul + p, .mce-content-body ol + p { margin-top: 20px; } -ol, ul { +.mce-content-body ol, .mce-content-body ul { margin: 1em 0; padding: 0 0 0 1em; color: #3c3c3c; } -ol li, ul li { +.mce-content-body ol li, .mce-content-body ul li { margin-bottom: 0.708em; } -ol { +.mce-content-body ol { list-style: decimal outside none; } -ul { +.mce-content-body ul { list-style: disc outside none; } -a, a:link, a:visited, a:hover, a:active { +.mce-content-body a, .mce-content-body a:link, .mce-content-body a:visited, .mce-content-body a:hover, .mce-content-body a:active { color: #1d9dd9; } -img { +.mce-content-body img { max-width: 100%; } -pre { +.mce-content-body pre { margin: 1em 0; color: #3c3c3c; font-family: monospace, serif; @@ -113,25 +113,25 @@ pre { word-wrap: break-word; } -code { +.mce-content-body code { font-family: monospace, serif; background: none; color: #3c3c3c; padding: 0; } -table { +.mce-content-body table { width: 100%; border-collapse: collapse; font-size: 16px; } -th { +.mce-content-body th { background: #eee; font-weight: bold; } -table td, th { +.mce-content-body table td, .mce-content-body th { margin: 20px 0; padding: 10px; border: 1px solid #ccc !important; @@ -139,14 +139,14 @@ table td, th { font-size: 14px; } -table td.cont-justified-left, table th.cont-justified-left { +.mce-content-body table td.cont-justified-left, .mce-content-body table th.cont-justified-left { text-align: left; } -table td.cont-justified-right, table th.cont-justified-right { +.mce-content-body table td.cont-justified-right, .mce-content-body table th.cont-justified-right { text-align: right; } -table td.cont-justified-center, table th.cont-justified-center { +.mce-content-body table td.cont-justified-center, .mce-content-body table th.cont-justified-center { text-align: center; } From cc15a267ae9997856967f432ccd846f996c7ffcf Mon Sep 17 00:00:00 2001 From: Brian Talbot Date: Tue, 1 Apr 2014 13:09:18 -0400 Subject: [PATCH 08/11] revising default (minified) TinyMCE content CSS to be scoped to .mce-content-body element --- .../tinymce/js/tinymce/skins/studio-tmce4/content.min.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/content.min.css b/common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/content.min.css index 1f057287b9..29cee9c9a1 100755 --- a/common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/content.min.css +++ b/common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/content.min.css @@ -1 +1 @@ -body{background-color:#fff;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px;scrollbar-3dlight-color:#f0f0ee;scrollbar-arrow-color:#676662;scrollbar-base-color:#f0f0ee;scrollbar-darkshadow-color:#ddd;scrollbar-face-color:#e0e0dd;scrollbar-highlight-color:#f0f0ee;scrollbar-shadow-color:#f0f0ee;scrollbar-track-color:#f5f5f5}td,th{font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px}.mce-object{border:1px dotted #3a3a3a;background:#d5d5d5 url(img/object.gif) no-repeat center}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px!important;height:9px!important;border:1px dotted #3a3a3a;background:#d5d5d5 url(img/anchor.gif) no-repeat center}.mce-nbsp{background:#AAA}hr{cursor:default}.mce-match-marker{background:#AAA;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-spellchecker-word{background:url(img/wline.gif) repeat-x bottom left;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td.mce-item-selected,th.mce-item-selected{background-color:#39f!important}.mce-edit-focus{outline:1px dotted #333} \ No newline at end of file +.mce-content-body{background-color:#fff;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px;scrollbar-3dlight-color:#f0f0ee;scrollbar-arrow-color:#676662;scrollbar-base-color:#f0f0ee;scrollbar-darkshadow-color:#ddd;scrollbar-face-color:#e0e0dd;scrollbar-highlight-color:#f0f0ee;scrollbar-shadow-color:#f0f0ee;scrollbar-track-color:#f5f5f5}.mce-content-body td,.mce-content-body th{font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px}.mce-content-body .mce-object{border:1px dotted #3a3a3a;background:#d5d5d5 url(img/object.gif) no-repeat center}.mce-content-body .mce-pagebreak{cursor:default;display:block;width:100%;height:5px;border:1px dashed #666;margin-top:15px}.mce-content-body .mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px!important;height:9px!important;border:1px dotted #3a3a3a;background:#d5d5d5 url(img/anchor.gif) no-repeat center}.mce-content-body .mce-nbsp{background:#AAA}.mce-content-body hr{cursor:default}.mce-content-body .mce-match-marker{background:#AAA;color:#fff}.mce-content-body .mce-match-marker-selected{background:#39f;color:#fff}.mce-content-body .mce-spellchecker-word{background:url(img/wline.gif) repeat-x bottom left;cursor:default}.mce-content-body .mce-item-table,.mce-content-body .mce-item-table caption,.mce-content-body .mce-item-table td,.mce-content-body .mce-item-table th{border:1px dashed #BBB}.mce-content-body td.mce-item-selected,.mce-content-body th.mce-item-selected{background-color:#39f!important}.mce-content-body .mce-edit-focus{outline:1px dotted #333} From b04a0d998607d2cadbcf472e809fb5aefafb7871 Mon Sep 17 00:00:00 2001 From: cahrens Date: Tue, 1 Apr 2014 15:13:46 -0400 Subject: [PATCH 09/11] Update default font size to 14 for bulk e-mail editor (LMS). --- common/static/css/tinymce-studio-content.css | 2 +- .../tinymce/js/tinymce/skins/studio-tmce4/content.min.css | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/common/static/css/tinymce-studio-content.css b/common/static/css/tinymce-studio-content.css index 5debf96596..81598f8d01 100644 --- a/common/static/css/tinymce-studio-content.css +++ b/common/static/css/tinymce-studio-content.css @@ -4,7 +4,7 @@ padding: 10px; background-color: #fff; font-family: 'Open Sans', Verdana, Arial, Helvetica, sans-serif; - font-size: 16px; + font-size: 14px; line-height: 1.6; color: #3c3c3c; scrollbar-3dlight-color: #F0F0EE; diff --git a/common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/content.min.css b/common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/content.min.css index 29cee9c9a1..c2e367f5b2 100755 --- a/common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/content.min.css +++ b/common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/content.min.css @@ -1 +1 @@ -.mce-content-body{background-color:#fff;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px;scrollbar-3dlight-color:#f0f0ee;scrollbar-arrow-color:#676662;scrollbar-base-color:#f0f0ee;scrollbar-darkshadow-color:#ddd;scrollbar-face-color:#e0e0dd;scrollbar-highlight-color:#f0f0ee;scrollbar-shadow-color:#f0f0ee;scrollbar-track-color:#f5f5f5}.mce-content-body td,.mce-content-body th{font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px}.mce-content-body .mce-object{border:1px dotted #3a3a3a;background:#d5d5d5 url(img/object.gif) no-repeat center}.mce-content-body .mce-pagebreak{cursor:default;display:block;width:100%;height:5px;border:1px dashed #666;margin-top:15px}.mce-content-body .mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px!important;height:9px!important;border:1px dotted #3a3a3a;background:#d5d5d5 url(img/anchor.gif) no-repeat center}.mce-content-body .mce-nbsp{background:#AAA}.mce-content-body hr{cursor:default}.mce-content-body .mce-match-marker{background:#AAA;color:#fff}.mce-content-body .mce-match-marker-selected{background:#39f;color:#fff}.mce-content-body .mce-spellchecker-word{background:url(img/wline.gif) repeat-x bottom left;cursor:default}.mce-content-body .mce-item-table,.mce-content-body .mce-item-table caption,.mce-content-body .mce-item-table td,.mce-content-body .mce-item-table th{border:1px dashed #BBB}.mce-content-body td.mce-item-selected,.mce-content-body th.mce-item-selected{background-color:#39f!important}.mce-content-body .mce-edit-focus{outline:1px dotted #333} +.mce-content-body{background-color:#fff;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:14px;scrollbar-3dlight-color:#f0f0ee;scrollbar-arrow-color:#676662;scrollbar-base-color:#f0f0ee;scrollbar-darkshadow-color:#ddd;scrollbar-face-color:#e0e0dd;scrollbar-highlight-color:#f0f0ee;scrollbar-shadow-color:#f0f0ee;scrollbar-track-color:#f5f5f5}.mce-content-body td,.mce-content-body th{font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px}.mce-content-body .mce-object{border:1px dotted #3a3a3a;background:#d5d5d5 url(img/object.gif) no-repeat center}.mce-content-body .mce-pagebreak{cursor:default;display:block;width:100%;height:5px;border:1px dashed #666;margin-top:15px}.mce-content-body .mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px!important;height:9px!important;border:1px dotted #3a3a3a;background:#d5d5d5 url(img/anchor.gif) no-repeat center}.mce-content-body .mce-nbsp{background:#AAA}.mce-content-body hr{cursor:default}.mce-content-body .mce-match-marker{background:#AAA;color:#fff}.mce-content-body .mce-match-marker-selected{background:#39f;color:#fff}.mce-content-body .mce-spellchecker-word{background:url(img/wline.gif) repeat-x bottom left;cursor:default}.mce-content-body .mce-item-table,.mce-content-body .mce-item-table caption,.mce-content-body .mce-item-table td,.mce-content-body .mce-item-table th{border:1px dashed #BBB}.mce-content-body td.mce-item-selected,.mce-content-body th.mce-item-selected{background-color:#39f!important}.mce-content-body .mce-edit-focus{outline:1px dotted #333} From 473ed4cc897fe0771d4c5c8e80e9a7af619bf37b Mon Sep 17 00:00:00 2001 From: Brian Talbot Date: Tue, 1 Apr 2014 16:54:19 -0400 Subject: [PATCH 10/11] Studio: syncing up font-based styling between TinyMCE editing view and Studio HTML xmodule preview Separating and documenting tinyMCE font imports from customized vendor code and customized render styling css files (because font must load first in iframe). Add the TinyMCE font file to the CMS pipeline. --- cms/envs/common.py | 1 + common/static/css/tinymce-studio-content-fonts.css | 2 ++ common/static/css/tinymce-studio-content.css | 7 +++---- .../tinymce/js/tinymce/skins/studio-tmce4/content.min.css | 1 + 4 files changed, 7 insertions(+), 4 deletions(-) create mode 100644 common/static/css/tinymce-studio-content-fonts.css diff --git a/cms/envs/common.py b/cms/envs/common.py index a8b2fc1276..817fe27594 100644 --- a/cms/envs/common.py +++ b/cms/envs/common.py @@ -316,6 +316,7 @@ PIPELINE_CSS = { }, 'style-vendor-tinymce-content': { 'source_filenames': [ + 'css/tinymce-studio-content-fonts.css', 'js/vendor/tinymce/js/tinymce/skins/studio-tmce4/content.min.css', 'css/tinymce-studio-content.css' ], diff --git a/common/static/css/tinymce-studio-content-fonts.css b/common/static/css/tinymce-studio-content-fonts.css new file mode 100644 index 0000000000..0fc13697a4 --- /dev/null +++ b/common/static/css/tinymce-studio-content-fonts.css @@ -0,0 +1,2 @@ +/* NOTE: This file, which loads all necessary fonts for rendering Studio UI, is 1 of 3 CSS files compiled in our production pipeline */ +@import url(//fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,400,300,600,700); diff --git a/common/static/css/tinymce-studio-content.css b/common/static/css/tinymce-studio-content.css index 81598f8d01..cfe542239b 100644 --- a/common/static/css/tinymce-studio-content.css +++ b/common/static/css/tinymce-studio-content.css @@ -1,10 +1,9 @@ -@import url(//fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,400,300,600,700); - +/* NOTE: This file, which customizes mid-editing styling to match xmodule preview rendering, is 3 of 3 CSS files compiled in our production pipeline */ .mce-content-body { padding: 10px; background-color: #fff; font-family: 'Open Sans', Verdana, Arial, Helvetica, sans-serif; - font-size: 14px; + font-size: 16px; line-height: 1.6; color: #3c3c3c; scrollbar-3dlight-color: #F0F0EE; @@ -28,7 +27,7 @@ .mce-content-body h2 { color: #646464; - font-weight: normal; + font-weight: 300; font-size: 1.2em; line-height: 1.2em; letter-spacing: 1px; diff --git a/common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/content.min.css b/common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/content.min.css index c2e367f5b2..214e570d69 100755 --- a/common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/content.min.css +++ b/common/static/js/vendor/tinymce/js/tinymce/skins/studio-tmce4/content.min.css @@ -1 +1,2 @@ +/* NOTE: This file, which based off of TinyMCE's vendor content styling (but customized to help with scoping), is 2 of 3 CSS files compiled in our production pipeline */ .mce-content-body{background-color:#fff;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:14px;scrollbar-3dlight-color:#f0f0ee;scrollbar-arrow-color:#676662;scrollbar-base-color:#f0f0ee;scrollbar-darkshadow-color:#ddd;scrollbar-face-color:#e0e0dd;scrollbar-highlight-color:#f0f0ee;scrollbar-shadow-color:#f0f0ee;scrollbar-track-color:#f5f5f5}.mce-content-body td,.mce-content-body th{font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px}.mce-content-body .mce-object{border:1px dotted #3a3a3a;background:#d5d5d5 url(img/object.gif) no-repeat center}.mce-content-body .mce-pagebreak{cursor:default;display:block;width:100%;height:5px;border:1px dashed #666;margin-top:15px}.mce-content-body .mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px!important;height:9px!important;border:1px dotted #3a3a3a;background:#d5d5d5 url(img/anchor.gif) no-repeat center}.mce-content-body .mce-nbsp{background:#AAA}.mce-content-body hr{cursor:default}.mce-content-body .mce-match-marker{background:#AAA;color:#fff}.mce-content-body .mce-match-marker-selected{background:#39f;color:#fff}.mce-content-body .mce-spellchecker-word{background:url(img/wline.gif) repeat-x bottom left;cursor:default}.mce-content-body .mce-item-table,.mce-content-body .mce-item-table caption,.mce-content-body .mce-item-table td,.mce-content-body .mce-item-table th{border:1px dashed #BBB}.mce-content-body td.mce-item-selected,.mce-content-body th.mce-item-selected{background-color:#39f!important}.mce-content-body .mce-edit-focus{outline:1px dotted #333} From e4de5d2edaee06def4158b49831653272cf7d3da Mon Sep 17 00:00:00 2001 From: cahrens Date: Tue, 1 Apr 2014 17:05:21 -0400 Subject: [PATCH 11/11] Match our default code editor font size of 13. --- .../js/vendor/tinymce/js/tinymce/plugins/codemirror/source.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/static/js/vendor/tinymce/js/tinymce/plugins/codemirror/source.html b/common/static/js/vendor/tinymce/js/tinymce/plugins/codemirror/source.html index 8d827d8412..11e11be5e0 100644 --- a/common/static/js/vendor/tinymce/js/tinymce/plugins/codemirror/source.html +++ b/common/static/js/vendor/tinymce/js/tinymce/plugins/codemirror/source.html @@ -232,7 +232,7 @@ function submit() { .CodeMirror { height: 100%; - font-size: 12px; + font-size: 13px; line-height: 18px; }

    SnIaChzlig%Am76{h!i$76FF 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 zπ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
    D+aM2uMAeY+Bm?~9U5qb^ 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
    ldB6=Ld1waMGn5vM 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

    Qr2gv=6555MD1r9=T_q^k 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®wjUvWLt)h;^)nXFr*(dr;;gH%UF@fW(VhCs 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 z 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

    j(B<`g#Y|fr} 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